ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZjhkODU1OS4uOTRlN2RhNCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTU5Myw2ICs1OTMsMTAgQEAKIAljcHU5MjYwCQlBUk05MjZFSlMgKEFUOTFTQU05MjYwIFNvQykKIAljcHU5RzIwCQlBUk05MjZFSlMgKEFUOTFTQU05RzIwIFNvQykKIAorQWpheSBCaGFyZ2F2IDxhamF5LmJoYXJnYXZAZWluZm9jaGlwcy5jb20+CisKKwlncGx1Z2QJCUFSTTkyNkVKUyAoQVJNQURBMTAwIDg4QVAxNjggU29DKQorCiBSaXNoaSBCaGF0dGFjaGFyeWEgPHJpc2hpQHRpLmNvbT4KIAogCW9tYXA1OTEyb3NrCUFSTTkyNkVKUwpAQCAtNjAwLDYgKzYwNCw3IEBACiBBbmRyZWFzIEJpZd9tYW5uIDxhbmRyZWFzLmRldmVsQGdtYWlsLmNvbT4KIAogCWF0OTFybTkyMDBlawlhdDkxcm05MjAwCisJZ3Jhc3Nob3BwZXIJYXZyMzIKIAogQ2xpZmYgQnJha2UgPGNsaWZmLmJyYWtlQGdtYWlsLmNvbT4KIApkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggMjY2ZTIzMS4uM2I5OGYwMyAxMDA3NTUKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC00NDQsMTQgKzQ0NCw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfYXQ5MT0iJChib2FyZHNfYnlfc29jIGF0OTEpXAotCSQoYm9hcmRzX2J5X3NvYyBhdDkxcm05MjAwKVwKLQlhdDkxc2FtOTI2MGVrCQlcCi0JYXQ5MXNhbTkyNjFlawkJXAotCWF0OTFzYW05MjYzZWsJCVwKLQlhdDkxc2FtOWcxMGVrCQlcCi0JYXQ5MXNhbTlnMjBlawkJXAogCWF0OTFzYW05bTEwZzQ1ZWsJXAotCWF0OTFzYW05cmxlawkJXAogCXBtOWc0NQkJCVwKIAlTQkMzNV9BOUcyMAkJXAogCVROWV9BOTI2MAkJXApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBlMDgxYzI1Li4wM2Q4MGI3IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtODAyLDYwICs4MDIsNiBAQAogIyMgQVJNOTI2RUotUyBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWF0OTFzYW05MjYxZWtfbmFuZGZsYXNoX2NvbmZpZyBcCi1hdDkxc2FtOTI2MWVrX2RhdGFmbGFzaF9jczBfY29uZmlnIFwKLWF0OTFzYW05MjYxZWtfZGF0YWZsYXNoX2NzM19jb25maWcgXAotYXQ5MXNhbTkyNjFla19jb25maWcgXAotYXQ5MXNhbTlnMTBla19uYW5kZmxhc2hfY29uZmlnIFwKLWF0OTFzYW05ZzEwZWtfZGF0YWZsYXNoX2NzMF9jb25maWcgXAotYXQ5MXNhbTlnMTBla19kYXRhZmxhc2hfY3MzX2NvbmZpZyBcCi1hdDkxc2FtOWcxMGVrX2NvbmZpZwk6CXVuY29uZmlnCi0JQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKLQlAaWYgWyAiJChmaW5kc3RyaW5nIDlnMTAsJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX0FUOTFTQU05RzEwRUsgMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCWVsc2UgXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19BVDkxU0FNOTI2MUVLIDEiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQlmaTsKLQlAaWYgWyAiJChmaW5kc3RyaW5nIF9uYW5kZmxhc2gsJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX1NZU19VU0VfTkFOREZMQVNIIDEiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQllbGlmIFsgIiQoZmluZHN0cmluZyBkYXRhZmxhc2hfY3MwLCRAKSIgXSA7IHRoZW4gXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19TWVNfVVNFX0RBVEFGTEFTSF9DUzMgMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCWVsc2UgXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19TWVNfVVNFX0RBVEFGTEFTSF9DUzAgMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCWZpOwotCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBhdDkxc2FtOTI2MWVrIGFybSBhcm05MjZlanMgYXQ5MXNhbTkyNjFlayBhdG1lbCBhdDkxCi0KLWF0OTFzYW05MjYzZWtfbm9yZmxhc2hfY29uZmlnIFwKLWF0OTFzYW05MjYzZWtfbm9yZmxhc2hfYm9vdF9jb25maWcgXAotYXQ5MXNhbTkyNjNla19uYW5kZmxhc2hfY29uZmlnIFwKLWF0OTFzYW05MjYzZWtfZGF0YWZsYXNoX2NvbmZpZyBcCi1hdDkxc2FtOTI2M2VrX2RhdGFmbGFzaF9jczBfY29uZmlnIFwKLWF0OTFzYW05MjYzZWtfY29uZmlnCToJdW5jb25maWcKLQlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQotCUBpZiBbICIkKGZpbmRzdHJpbmcgX25hbmRmbGFzaCwkQCkiIF0gOyB0aGVuIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfU1lTX1VTRV9OQU5ERkxBU0ggMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCWVsaWYgWyAiJChmaW5kc3RyaW5nIG5vcmZsYXNoLCRAKSIgXSA7IHRoZW4gXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19TWVNfVVNFX05PUkZMQVNIIDEiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQllbHNlIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfU1lTX1VTRV9EQVRBRkxBU0ggMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCWZpOwotCUBpZiBbICIkKGZpbmRzdHJpbmcgbm9yZmxhc2hfYm9vdCwkQCkiIF0gOyB0aGVuIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfU1lTX1VTRV9CT09UX05PUkZMQVNIIDEiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQlmaTsKLQlAJChNS0NPTkZJRykgLW4gJEAgLWEgYXQ5MXNhbTkyNjNlayBhcm0gYXJtOTI2ZWpzIGF0OTFzYW05MjYzZWsgYXRtZWwgYXQ5MQotCi1hdDkxc2FtOXJsZWtfbmFuZGZsYXNoX2NvbmZpZyBcCi1hdDkxc2FtOXJsZWtfZGF0YWZsYXNoX2NvbmZpZyBcCi1hdDkxc2FtOXJsZWtfZGF0YWZsYXNoX2NzMF9jb25maWcgXAotYXQ5MXNhbTlybGVrX2NvbmZpZwk6CXVuY29uZmlnCi0JQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKLQlAaWYgWyAiJChmaW5kc3RyaW5nIF9uYW5kZmxhc2gsJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX1NZU19VU0VfTkFOREZMQVNIIDEiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQllbHNlIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfU1lTX1VTRV9EQVRBRkxBU0ggMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCWZpOwotCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBhdDkxc2FtOXJsZWsgYXJtIGFybTkyNmVqcyBhdDkxc2FtOXJsZWsgYXRtZWwgYXQ5MQotCiBhdDkxc2FtOW0xMGc0NWVrX25hbmRmbGFzaF9jb25maWcgXAogYXQ5MXNhbTltMTBnNDVla19kYXRhZmxhc2hfY29uZmlnIFwKIGF0OTFzYW05bTEwZzQ1ZWtfZGF0YWZsYXNoX2NzMF9jb25maWcgXApAQCAtOTg4LDE1ICs5MzQsNiBAQAogCUAkKE1LQ09ORklHKSAtbiAkQCAtdCAkKEA6X2NvbmZpZz0pIGVkYjkzeHggYXJtIGFybTkyMHQgZWRiOTN4eCAtIGVwOTN4eAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEFSTSBzdXBwbGllZCBWZXJzYXRpbGUgZGV2ZWxvcG1lbnQgYm9hcmRzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXZlcnNhdGlsZV9jb25maWcJXAotdmVyc2F0aWxlYWJfY29uZmlnCVwKLXZlcnNhdGlsZXBiX2NvbmZpZyA6CXVuY29uZmlnCi0JQGJvYXJkL2FybWx0ZC92ZXJzYXRpbGUvc3BsaXRfYnlfdmFyaWFudC5zaCAkQAotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBYU2NhbGUgU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggYTMyNTg5Mi4uMDg4Njk4NyAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgL2NwdQkJQ1BVIHNwZWNpZmljIGZpbGVzCiAgICAgICAvYXJtNzIwdAkJRmlsZXMgc3BlY2lmaWMgdG8gQVJNIDcyMCBDUFVzCiAgICAgICAvYXJtOTIwdAkJRmlsZXMgc3BlY2lmaWMgdG8gQVJNIDkyMCBDUFVzCi0JL2F0OTFybTkyMDAJRmlsZXMgc3BlY2lmaWMgdG8gQXRtZWwgQVQ5MVJNOTIwMCBDUFUKKwkvYXQ5MQkJRmlsZXMgc3BlY2lmaWMgdG8gQXRtZWwgQVQ5MVJNOTIwMCBDUFUKIAkvaW14CQlGaWxlcyBzcGVjaWZpYyB0byBGcmVlc2NhbGUgTUM5MzI4IGkuTVggQ1BVcwogCS9zM2MyNHgwCUZpbGVzIHNwZWNpZmljIHRvIFNhbXN1bmcgUzNDMjRYMCBDUFVzCiAgICAgICAvYXJtOTI1dAkJRmlsZXMgc3BlY2lmaWMgdG8gQVJNIDkyNSBDUFVzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxL3Jlc2V0LmMgYi9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxL3Jlc2V0LmMKaW5kZXggNGZhMGY5OC4uY2Q5YzlmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MS9yZXNldC5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTEvcmVzZXQuYwpAQCAtNDMsMTAgKzQzLDYgQEAKIHZvaWQgcmVzZXRfY3B1KHVsb25nIGlnbm9yZWQpCiB7CiAJYXQ5MV9zdF90ICpzdCA9IChhdDkxX3N0X3QgKikgQVRNRUxfQkFTRV9TVDsKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxUk05MjAwX1VTQVJUKQotCS8qc2h1dGRvd24gdGhlIGNvbnNvbGUgdG8gYXZvaWQgc3RyYW5nZSBjaGFycyBkdXJpbmcgcmVzZXQgKi8KLQlzZXJpYWxfZXhpdCgpOwotI2VuZGlmCiAKIAlib2FyZF9yZXNldCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL2JjbTUyMjEuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvYmNtNTIyMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGUzY2JhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvYmNtNTIyMS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS8qCi0gKiBCcm9hZGNvbSBCQ001MjIxIEV0aGVybmV0IFBIWQotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNSBSRUEgRWxla3Ryb25payBHbWJIIDx3d3cucmVhLmRlPgotICogQW5kZXJzIExhcnNlbiA8YWxhcnNlbkByZWEuZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBBdXRob3IgOiBIYW1pZCBJa2RvdW1pIChBdG1lbCkKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8YXQ5MXJtOTIwMF9uZXQuaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpZmRlZiBDT05GSUdfRFJJVkVSX0VUSEVSCi0KLSNpbmNsdWRlIDxiY201MjIxLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfTkVUKQotCi0vKgotICogTmFtZToKLSAqCWJjbTUyMjFfSXNQaHlDb25uZWN0ZWQKLSAqIERlc2NyaXB0aW9uOgotICoJUmVhZHMgdGhlIDIgUEhZIElEIHJlZ2lzdGVycwotICogQXJndW1lbnRzOgotICoJcF9tYWMgLSBwb2ludGVyIHRvIEFUOTFTX0VNQUMgc3RydWN0Ci0gKiBSZXR1cm4gdmFsdWU6Ci0gKglUUlVFIC0gaWYgaWQgcmVhZCBzdWNjZXNzZnVsbHkKLSAqCUZBTFNFLSBpZiBlcnJvcgotICovCi11bnNpZ25lZCBpbnQgYmNtNTIyMV9Jc1BoeUNvbm5lY3RlZCAoQVQ5MVBTX0VNQUMgcF9tYWMpCi17Ci0JdW5zaWduZWQgc2hvcnQgSWQxLCBJZDI7Ci0KLQlhdDkxcm05MjAwX0VtYWNFbmFibGVNRElPIChwX21hYyk7Ci0JYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeSAocF9tYWMsIEJDTTUyMjFfUEhZSUQxLCAmSWQxKTsKLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgQkNNNTIyMV9QSFlJRDIsICZJZDIpOwotCWF0OTFybTkyMDBfRW1hY0Rpc2FibGVNRElPIChwX21hYyk7Ci0KLQlpZiAoKElkMSA9PSAoQkNNNTIyMV9QSFlJRDFfT1VJID4+IDYpKSAmJgotCQkoKElkMiA+PiAxMCkgPT0gKEJDTTUyMjFfUEhZSUQxX09VSSAmIEJDTTUyMjFfTFNCX01BU0spKSkKLQkJcmV0dXJuIFRSVUU7Ci0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLS8qCi0gKiBOYW1lOgotICoJYmNtNTIyMV9HZXRMaW5rU3BlZWQKLSAqIERlc2NyaXB0aW9uOgotICoJTGluayBwYXJhbGxlbCBkZXRlY3Rpb24gc3RhdHVzIG9mIE1BQyBpcyBjaGVja2VkIGFuZCBzZXQgaW4gdGhlCi0gKglNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czoKLSAqCXBfbWFjIC0gcG9pbnRlciB0byBNQUMKLSAqIFJldHVybiB2YWx1ZToKLSAqCVRSVUUgLSBpZiBsaW5rIHN0YXR1cyBzZXQgc3VjY2VzZnVsbHkKLSAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi11bnNpZ25lZCBjaGFyIGJjbTUyMjFfR2V0TGlua1NwZWVkIChBVDkxUFNfRU1BQyBwX21hYykKLXsKLQl1bnNpZ25lZCBzaG9ydCBzdGF0MSwgc3RhdDI7Ci0KLQlpZiAoIWF0OTFybTkyMDBfRW1hY1JlYWRQaHkgKHBfbWFjLCBCQ001MjIxX0JNU1IsICZzdGF0MSkpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICghKHN0YXQxICYgQkNNNTIyMV9MSU5LX1NUQVRVUykpCS8qIGxpbmsgc3RhdHVzIHVwPyAqLwotCQlyZXR1cm4gRkFMU0U7Ci0KLQlpZiAoIWF0OTFybTkyMDBfRW1hY1JlYWRQaHkgKHBfbWFjLCBCQ001MjIxX0FDU1IsICZzdGF0MikpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICgoc3RhdDEgJiBCQ001MjIxXzEwMEJBU0VfVFhfRkQpICYmIChzdGF0MiAmIEJDTTUyMjFfMTAwKSAmJiAoc3RhdDIgJiBCQ001MjIxX0ZEWCkpIHsKLQkJLypzZXQgRW1hYyBmb3IgMTAwQmFzZVRYIGFuZCBGdWxsIER1cGxleCAgKi8KLQkJcF9tYWMtPkVNQUNfQ0ZHIHw9IEFUOTFDX0VNQUNfU1BEIHwgQVQ5MUNfRU1BQ19GRDsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCi0JaWYgKChzdGF0MSAmIEJDTTUyMjFfMTBCQVNFX1RfRkQpICYmICEoc3RhdDIgJiBCQ001MjIxXzEwMCkgJiYgKHN0YXQyICYgQkNNNTIyMV9GRFgpKSB7Ci0JCS8qc2V0IE1JSSBmb3IgMTBCYXNlVCBhbmQgRnVsbCBEdXBsZXggICovCi0JCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgJgotCQkJCX4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKSkKLQkJCQl8IEFUOTFDX0VNQUNfRkQ7Ci0JCXJldHVybiBUUlVFOwotCX0KLQotCWlmICgoc3RhdDEgJiBCQ001MjIxXzEwMEJBU0VfVFhfSEQpICYmIChzdGF0MiAmIEJDTTUyMjFfMTAwKSAmJiAhKHN0YXQyICYgQkNNNTIyMV9GRFgpKSB7Ci0JCS8qc2V0IE1JSSBmb3IgMTAwQmFzZVRYIGFuZCBIYWxmIER1cGxleCAgKi8KLQkJcF9tYWMtPkVNQUNfQ0ZHID0gKHBfbWFjLT5FTUFDX0NGRyAmCi0JCQkJfihBVDkxQ19FTUFDX1NQRCB8IEFUOTFDX0VNQUNfRkQpKQotCQkJCXwgQVQ5MUNfRU1BQ19TUEQ7Ci0JCXJldHVybiBUUlVFOwotCX0KLQotCWlmICgoc3RhdDEgJiBCQ001MjIxXzEwQkFTRV9UX0hEKSAmJiAhKHN0YXQyICYgQkNNNTIyMV8xMDApICYmICEoc3RhdDIgJiBCQ001MjIxX0ZEWCkpIHsKLQkJLypzZXQgTUlJIGZvciAxMEJhc2VUIGFuZCBIYWxmIER1cGxleCAgKi8KLQkJcF9tYWMtPkVNQUNfQ0ZHICY9IH4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKTsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCXJldHVybiBGQUxTRTsKLX0KLQotCi0vKgotICogTmFtZToKLSAqCWJjbTUyMjFfSW5pdFBoeQotICogRGVzY3JpcHRpb246Ci0gKglNQUMgc3RhcnRzIGNoZWNraW5nIGl0cyBsaW5rIGJ5IHVzaW5nIHBhcmFsbGVsIGRldGVjdGlvbiBhbmQKLSAqCUF1dG9uZWdvdGlhdGlvbiBhbmQgdGhlIHNhbWUgaXMgc2V0IGluIHRoZSBNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czoKLSAqCXBfbWFjIC0gcG9pbnRlciB0byBzdHJ1Y3QgQVQ5MVNfRU1BQwotICogUmV0dXJuIHZhbHVlOgotICoJVFJVRSAtIGlmIGxpbmsgc3RhdHVzIHNldCBzdWNjZXNmdWxseQotICoJRkFMU0UgLSBpZiBsaW5rIHN0YXR1cyBub3Qgc2V0Ci0gKi8KLXVuc2lnbmVkIGNoYXIgYmNtNTIyMV9Jbml0UGh5IChBVDkxUFNfRU1BQyBwX21hYykKLXsKLQl1bnNpZ25lZCBjaGFyIHJldCA9IFRSVUU7Ci0JdW5zaWduZWQgc2hvcnQgSW50VmFsdWU7Ci0KLQlhdDkxcm05MjAwX0VtYWNFbmFibGVNRElPIChwX21hYyk7Ci0KLQlpZiAoIWJjbTUyMjFfR2V0TGlua1NwZWVkIChwX21hYykpIHsKLQkJLyogVHJ5IGFub3RoZXIgdGltZSAqLwotCQlyZXQgPSBiY201MjIxX0dldExpbmtTcGVlZCAocF9tYWMpOwotCX0KLQotCS8qIERpc2FibGUgUEhZIEludGVycnVwdHMgKi8KLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgQkNNNTIyMV9JTlRSLCAmSW50VmFsdWUpOwotCS8qIGNsZWFyIEZEWCBMRUQgYW5kIElOVFIgRW5hYmxlICovCi0JSW50VmFsdWUgJj0gfihCQ001MjIxX0ZEWF9MRUQgfCBCQ001MjIxX0lOVFJfRU5BQkxFKTsKLQkvKiBzZXQgRkRYLCBTUEQsIExpbmssIElOVFIgbWFza3MgKi8KLQlJbnRWYWx1ZSB8PSAoQkNNNTIyMV9GRFhfTUFTSyAgfCBCQ001MjIxX1NQRF9NQVNLIHwKLQkJICAgICBCQ001MjIxX0xJTktfTUFTSyB8IEJDTTUyMjFfSU5UUl9NQVNLKTsKLQlhdDkxcm05MjAwX0VtYWNXcml0ZVBoeSAocF9tYWMsIEJDTTUyMjFfSU5UUiwgJkludFZhbHVlKTsKLQlhdDkxcm05MjAwX0VtYWNEaXNhYmxlTURJTyAocF9tYWMpOwotCi0JcmV0dXJuIChyZXQpOwotfQotCi0KLS8qCi0gKiBOYW1lOgotICoJYmNtNTIyMV9BdXRvTmVnb3RpYXRlCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUKLSAqCU1BQyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogQXJndW1lbnRzOgotICoJZGV2IC0gcG9pbnRlciB0byBzdHJ1Y3QgbmV0X2RldmljZQotICogUmV0dXJuIHZhbHVlOgotICoJVFJVRSAtIGlmIGxpbmsgc3RhdHVzIHNldCBzdWNjZXNzZnVsbHkKLSAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi11bnNpZ25lZCBjaGFyIGJjbTUyMjFfQXV0b05lZ290aWF0ZSAoQVQ5MVBTX0VNQUMgcF9tYWMsIGludCAqc3RhdHVzKQotewotCXVuc2lnbmVkIHNob3J0IHZhbHVlOwotCXVuc2lnbmVkIHNob3J0IFBoeUFuYXI7Ci0JdW5zaWduZWQgc2hvcnQgUGh5QW5hbHBhcjsKLQotCS8qIFNldCBiY201MjIxIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlpZiAoIWF0OTFybTkyMDBfRW1hY1JlYWRQaHkgKHBfbWFjLCBCQ001MjIxX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQl2YWx1ZSAmPSB+QkNNNTIyMV9BVVRPTkVHOwkvKiByZW1vdmUgYXV0b25lZ290aWF0aW9uIGVuYWJsZSAqLwotCXZhbHVlIHw9ICBCQ001MjIxX0lTT0xBVEU7CS8qIEVsZWN0cmljYWxseSBpc29sYXRlIFBIWSAqLwotCWlmICghYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkgKHBfbWFjLCBCQ001MjIxX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIFNldCB0aGUgQXV0b19uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCi0JLyogTUlJIGFkdmVydGlzaW5nIGZvciAxMDBCYXNlVHhGRCBhbmQgSEQsIDEwQmFzZVRGRCBhbmQgSEQsIElFRUUgODAyLjMgKi8KLQlQaHlBbmFyID0gQkNNNTIyMV9UWF9GRFggfCBCQ001MjIxX1RYX0hEWCB8Ci0JCSAgQkNNNTIyMV8xMF9GRFggfCBCQ001MjIxXzEwX0hEWCB8IEJDTTUyMjFfQU5fSUVFRV84MDJfMzsKLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5IChwX21hYywgQkNNNTIyMV9BTkFSLCAmUGh5QW5hcikpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIFJlYWQgdGhlIENvbnRyb2wgUmVnaXN0ZXIgICAgICovCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgQkNNNTIyMV9CTUNSLCAmdmFsdWUpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQl2YWx1ZSB8PSBCQ001MjIxX1NQRUVEX1NFTEVDVCB8IEJDTTUyMjFfQVVUT05FRyB8IEJDTTUyMjFfRFVQTEVYX01PREU7Ci0JaWYgKCFhdDkxcm05MjAwX0VtYWNXcml0ZVBoeSAocF9tYWMsIEJDTTUyMjFfQk1DUiwgJnZhbHVlKSkKLQkJcmV0dXJuIEZBTFNFOwotCS8qIFJlc3RhcnQgQXV0b19uZWdvdGlhdGlvbiAgKi8KLQl2YWx1ZSB8PSBCQ001MjIxX1JFU1RBUlRfQVVUT05FRzsKLQl2YWx1ZSAmPSB+QkNNNTIyMV9JU09MQVRFOwotCWlmICghYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkgKHBfbWFjLCBCQ001MjIxX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qY2hlY2sgQXV0b05lZ290aWF0ZSBjb21wbGV0ZSAqLwotCXVkZWxheSAoMTAwMDApOwotCWF0OTFybTkyMDBfRW1hY1JlYWRQaHkgKHBfbWFjLCBCQ001MjIxX0JNU1IsICZ2YWx1ZSk7Ci0JaWYgKCEodmFsdWUgJiBCQ001MjIxX0FVVE9ORUdfQ09NUCkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIEdldCB0aGUgQXV0b05lZyBMaW5rIHBhcnRuZXIgYmFzZSBwYWdlICovCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgQkNNNTIyMV9BTkxQQVIsICZQaHlBbmFscGFyKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JaWYgKChQaHlBbmFyICYgQkNNNTIyMV9UWF9GRFgpICYmIChQaHlBbmFscGFyICYgQkNNNTIyMV9UWF9GRFgpKSB7Ci0JCS8qc2V0IE1JSSBmb3IgMTAwQmFzZVRYIGFuZCBGdWxsIER1cGxleCAgKi8KLQkJcF9tYWMtPkVNQUNfQ0ZHIHw9IEFUOTFDX0VNQUNfU1BEIHwgQVQ5MUNfRU1BQ19GRDsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCi0JaWYgKChQaHlBbmFyICYgQkNNNTIyMV8xMF9GRFgpICYmIChQaHlBbmFscGFyICYgQkNNNTIyMV8xMF9GRFgpKSB7Ci0JCS8qc2V0IE1JSSBmb3IgMTBCYXNlVCBhbmQgRnVsbCBEdXBsZXggICovCi0JCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgJgotCQkJCX4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKSkKLQkJCQl8IEFUOTFDX0VNQUNfRkQ7Ci0JCXJldHVybiBUUlVFOwotCX0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYJLyogQ09ORklHX0RSSVZFUl9FVEhFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9kbTkxNjEuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvZG05MTYxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNDM4NGYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9kbTkxNjEuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBBdXRob3IgOiBIYW1pZCBJa2RvdW1pIChBdG1lbCkKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8YXQ5MXJtOTIwMF9uZXQuaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpZmRlZiBDT05GSUdfRFJJVkVSX0VUSEVSCi0jaW5jbHVkZSA8ZG05MTYxLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfTkVUKQotCi0vKgotICogTmFtZToKLSAqCWRtOTE2MV9Jc1BoeUNvbm5lY3RlZAotICogRGVzY3JpcHRpb246Ci0gKglSZWFkcyB0aGUgMiBQSFkgSUQgcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gQVQ5MVNfRU1BQyBzdHJ1Y3QKLSAqIFJldHVybiB2YWx1ZToKLSAqCVRSVUUgLSBpZiBpZCByZWFkIHN1Y2Nlc3NmdWxseQotICoJRkFMU0UtIGlmIGVycm9yCi0gKi8KLXVuc2lnbmVkIGludCBkbTkxNjFfSXNQaHlDb25uZWN0ZWQgKEFUOTFQU19FTUFDIHBfbWFjKQotewotCXVuc2lnbmVkIHNob3J0IElkMSwgSWQyOwotCi0JYXQ5MXJtOTIwMF9FbWFjRW5hYmxlTURJTyAocF9tYWMpOwotCWF0OTFybTkyMDBfRW1hY1JlYWRQaHkgKHBfbWFjLCBETTkxNjFfUEhZSUQxLCAmSWQxKTsKLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgRE05MTYxX1BIWUlEMiwgJklkMik7Ci0JYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKHBfbWFjKTsKLQotCWlmICgoSWQxID09IChETTkxNjFfUEhZSUQxX09VSSA+PiA2KSkgJiYKLQkJKChJZDIgPj4gMTApID09IChETTkxNjFfUEhZSUQxX09VSSAmIERNOTE2MV9MU0JfTUFTSykpKQotCQlyZXR1cm4gVFJVRTsKLQotCXJldHVybiBGQUxTRTsKLX0KLQotLyoKLSAqIE5hbWU6Ci0gKglkbTkxNjFfR2V0TGlua1NwZWVkCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUxpbmsgcGFyYWxsZWwgZGV0ZWN0aW9uIHN0YXR1cyBvZiBNQUMgaXMgY2hlY2tlZCBhbmQgc2V0IGluIHRoZQotICoJTUFDIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gTUFDCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKglUUlVFIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc2Z1bGx5Ci0gKglGQUxTRSAtIGlmIGxpbmsgc3RhdHVzIG5vdCBzZXQKLSAqLwotVUNIQVIgZG05MTYxX0dldExpbmtTcGVlZCAoQVQ5MVBTX0VNQUMgcF9tYWMpCi17Ci0JdW5zaWduZWQgc2hvcnQgc3RhdDEsIHN0YXQyOwotCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgRE05MTYxX0JNU1IsICZzdGF0MSkpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICghKHN0YXQxICYgRE05MTYxX0xJTktfU1RBVFVTKSkJLyogbGluayBzdGF0dXMgdXA/ICovCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICghYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeSAocF9tYWMsIERNOTE2MV9EU0NTUiwgJnN0YXQyKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JaWYgKChzdGF0MSAmIERNOTE2MV8xMDBCQVNFX1RYX0ZEKSAmJiAoc3RhdDIgJiBETTkxNjFfMTAwRkRYKSkgewotCQkvKnNldCBFbWFjIGZvciAxMDBCYXNlVFggYW5kIEZ1bGwgRHVwbGV4ICAqLwotCQlwX21hYy0+RU1BQ19DRkcgfD0gQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEOwotCQlyZXR1cm4gVFJVRTsKLQl9Ci0KLQlpZiAoKHN0YXQxICYgRE05MTYxXzEwQkFTRV9UX0ZEKSAmJiAoc3RhdDIgJiBETTkxNjFfMTBGRFgpKSB7Ci0JCS8qc2V0IE1JSSBmb3IgMTBCYXNlVCBhbmQgRnVsbCBEdXBsZXggICovCi0JCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgJgotCQkJCX4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKSkKLQkJCQl8IEFUOTFDX0VNQUNfRkQ7Ci0JCXJldHVybiBUUlVFOwotCX0KLQotCWlmICgoc3RhdDEgJiBETTkxNjFfMTAwQkFTRV9UWF9IRCkgJiYgKHN0YXQyICYgRE05MTYxXzEwMEhEWCkpIHsKLQkJLypzZXQgTUlJIGZvciAxMDBCYXNlVFggYW5kIEhhbGYgRHVwbGV4ICAqLwotCQlwX21hYy0+RU1BQ19DRkcgPSAocF9tYWMtPkVNQUNfQ0ZHICYKLQkJCQl+KEFUOTFDX0VNQUNfU1BEIHwgQVQ5MUNfRU1BQ19GRCkpCi0JCQkJfCBBVDkxQ19FTUFDX1NQRDsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCi0JaWYgKChzdGF0MSAmIERNOTE2MV8xMEJBU0VfVF9IRCkgJiYgKHN0YXQyICYgRE05MTYxXzEwSERYKSkgewotCQkvKnNldCBNSUkgZm9yIDEwQmFzZVQgYW5kIEhhbGYgRHVwbGV4ICAqLwotCQlwX21hYy0+RU1BQ19DRkcgJj0gfihBVDkxQ19FTUFDX1NQRCB8IEFUOTFDX0VNQUNfRkQpOwotCQlyZXR1cm4gVFJVRTsKLQl9Ci0JcmV0dXJuIEZBTFNFOwotfQotCi0KLS8qCi0gKiBOYW1lOgotICoJZG05MTYxX0luaXRQaHkKLSAqIERlc2NyaXB0aW9uOgotICoJTUFDIHN0YXJ0cyBjaGVja2luZyBpdHMgbGluayBieSB1c2luZyBwYXJhbGxlbCBkZXRlY3Rpb24gYW5kCi0gKglBdXRvbmVnb3RpYXRpb24gYW5kIHRoZSBzYW1lIGlzIHNldCBpbiB0aGUgTUFDIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZToKLSAqCVRSVUUgLSBpZiBsaW5rIHN0YXR1cyBzZXQgc3VjY2VzZnVsbHkKLSAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi1VQ0hBUiBkbTkxNjFfSW5pdFBoeSAoQVQ5MVBTX0VNQUMgcF9tYWMpCi17Ci0JVUNIQVIgcmV0ID0gVFJVRTsKLQl1bnNpZ25lZCBzaG9ydCBJbnRWYWx1ZTsKLQotCWF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8gKHBfbWFjKTsKLQotCWlmICghZG05MTYxX0dldExpbmtTcGVlZCAocF9tYWMpKSB7Ci0JCS8qIFRyeSBhbm90aGVyIHRpbWUgKi8KLQkJcmV0ID0gZG05MTYxX0dldExpbmtTcGVlZCAocF9tYWMpOwotCX0KLQotCS8qIERpc2FibGUgUEhZIEludGVycnVwdHMgKi8KLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgRE05MTYxX01ESU5UUiwgJkludFZhbHVlKTsKLQkvKiBzZXQgRkRYLCBTUEQsIExpbmssIElOVFIgbWFza3MgKi8KLQlJbnRWYWx1ZSB8PSAoRE05MTYxX0ZEWF9NQVNLIHwgRE05MTYxX1NQRF9NQVNLIHwKLQkJCURNOTE2MV9MSU5LX01BU0sgfCBETTkxNjFfSU5UUl9NQVNLKTsKLQlhdDkxcm05MjAwX0VtYWNXcml0ZVBoeSAocF9tYWMsIERNOTE2MV9NRElOVFIsICZJbnRWYWx1ZSk7Ci0JYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKHBfbWFjKTsKLQotCXJldHVybiAocmV0KTsKLX0KLQotCi0vKgotICogTmFtZToKLSAqCWRtOTE2MV9BdXRvTmVnb3RpYXRlCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUKLSAqCU1BQyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogQXJndW1lbnRzOgotICoJZGV2IC0gcG9pbnRlciB0byBzdHJ1Y3QgbmV0X2RldmljZQotICogUmV0dXJuIHZhbHVlOgotICoJVFJVRSAtIGlmIGxpbmsgc3RhdHVzIHNldCBzdWNjZXNzZnVsbHkKLSAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi1VQ0hBUiBkbTkxNjFfQXV0b05lZ290aWF0ZSAoQVQ5MVBTX0VNQUMgcF9tYWMsIGludCAqc3RhdHVzKQotewotCXVuc2lnbmVkIHNob3J0IHZhbHVlOwotCXVuc2lnbmVkIHNob3J0IFBoeUFuYXI7Ci0JdW5zaWduZWQgc2hvcnQgUGh5QW5hbHBhcjsKLQotCS8qIFNldCBkbTkxNjEgY29udHJvbCByZWdpc3RlciAqLwotCWlmICghYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeSAocF9tYWMsIERNOTE2MV9CTUNSLCAmdmFsdWUpKQotCQlyZXR1cm4gRkFMU0U7Ci0JdmFsdWUgJj0gfkRNOTE2MV9BVVRPTkVHOwkvKiByZW1vdmUgYXV0b25lZ290aWF0aW9uIGVuYWJsZSAqLwotCXZhbHVlIHw9IERNOTE2MV9JU09MQVRFOwkvKiBFbGVjdHJpY2FsbHkgaXNvbGF0ZSBQSFkgKi8KLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5IChwX21hYywgRE05MTYxX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIFNldCB0aGUgQXV0b19uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyCSovCi0JLyogTUlJIGFkdmVydGlzaW5nIGZvciBOZXh0IHBhZ2UsIDEwMEJhc2VUeEZEIGFuZCBIRCwJKi8KLQkvKiAxMEJhc2VURkQgYW5kIEhELCBJRUVFIDgwMi4zICovCi0JUGh5QW5hciA9IERNOTE2MV9OUCB8IERNOTE2MV9UWF9GRFggfCBETTkxNjFfVFhfSERYIHwKLQkJCURNOTE2MV8xMF9GRFggfCBETTkxNjFfMTBfSERYIHwgRE05MTYxX0FOX0lFRUVfODAyXzM7Ci0JaWYgKCFhdDkxcm05MjAwX0VtYWNXcml0ZVBoeSAocF9tYWMsIERNOTE2MV9BTkFSLCAmUGh5QW5hcikpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIFJlYWQgdGhlIENvbnRyb2wgUmVnaXN0ZXIgICAgICovCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgRE05MTYxX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCXZhbHVlIHw9IERNOTE2MV9TUEVFRF9TRUxFQ1QgfCBETTkxNjFfQVVUT05FRyB8IERNOTE2MV9EVVBMRVhfTU9ERTsKLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5IChwX21hYywgRE05MTYxX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQkvKiBSZXN0YXJ0IEF1dG9fbmVnb3RpYXRpb24gICovCi0JdmFsdWUgfD0gRE05MTYxX1JFU1RBUlRfQVVUT05FRzsKLQl2YWx1ZSAmPSB+RE05MTYxX0lTT0xBVEU7Ci0JaWYgKCFhdDkxcm05MjAwX0VtYWNXcml0ZVBoeSAocF9tYWMsIERNOTE2MV9CTUNSLCAmdmFsdWUpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQkvKmNoZWNrIEF1dG9OZWdvdGlhdGUgY29tcGxldGUgKi8KLQl1ZGVsYXkgKDEwMDAwKTsKLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgRE05MTYxX0JNU1IsICZ2YWx1ZSk7Ci0JaWYgKCEodmFsdWUgJiBETTkxNjFfQVVUT05FR19DT01QKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JLyogR2V0IHRoZSBBdXRvTmVnIExpbmsgcGFydG5lciBiYXNlIHBhZ2UgKi8KLQlpZiAoIWF0OTFybTkyMDBfRW1hY1JlYWRQaHkgKHBfbWFjLCBETTkxNjFfQU5MUEFSLCAmUGh5QW5hbHBhcikpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICgoUGh5QW5hciAmIERNOTE2MV9UWF9GRFgpICYmIChQaHlBbmFscGFyICYgRE05MTYxX1RYX0ZEWCkpIHsKLQkJLypzZXQgTUlJIGZvciAxMDBCYXNlVFggYW5kIEZ1bGwgRHVwbGV4ICAqLwotCQlwX21hYy0+RU1BQ19DRkcgfD0gQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEOwotCQlyZXR1cm4gVFJVRTsKLQl9Ci0KLQlpZiAoKFBoeUFuYXIgJiBETTkxNjFfMTBfRkRYKSAmJiAoUGh5QW5hbHBhciAmIERNOTE2MV8xMF9GRFgpKSB7Ci0JCS8qc2V0IE1JSSBmb3IgMTBCYXNlVCBhbmQgRnVsbCBEdXBsZXggICovCi0JCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgJgotCQkJCX4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKSkKLQkJCQl8IEFUOTFDX0VNQUNfRkQ7Ci0JCXJldHVybiBUUlVFOwotCX0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYJLyogQ09ORklHX0RSSVZFUl9FVEhFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9ldGhlci5jIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9ldGhlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzEzNWM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvZXRoZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDMxNiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBBdXRob3IgOiBIYW1pZCBJa2RvdW1pIChBdG1lbCkKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8YXQ5MXJtOTIwMF9uZXQuaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpbmNsdWRlIDxtaWlwaHkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0vKiAtLS0tLSBFdGhlcm5ldCBCdWZmZXIgZGVmaW5pdGlvbnMgLS0tLS0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKLX0gcmJmX3Q7Ci0KLSNkZWZpbmUgUkJGX0FERFIgICAgICAweGZmZmZmZmZjCi0jZGVmaW5lIFJCRl9PV05FUiAgICAgKDE8PDApCi0jZGVmaW5lIFJCRl9XUkFQICAgICAgKDE8PDEpCi0jZGVmaW5lIFJCRl9CUk9BRENBU1QgKDE8PDMxKQotI2RlZmluZSBSQkZfTVVMVElDQVNUICgxPDwzMCkKLSNkZWZpbmUgUkJGX1VOSUNBU1QgICAoMTw8MjkpCi0jZGVmaW5lIFJCRl9FWFRFUk5BTCAgKDE8PDI4KQotI2RlZmluZSBSQkZfVU5LTk9XTiAgICgxPDwyNykKLSNkZWZpbmUgUkJGX1NJWkUgICAgICAweDA3ZmYKLSNkZWZpbmUgUkJGX0xPQ0FMNCAgICAoMTw8MjYpCi0jZGVmaW5lIFJCRl9MT0NBTDMgICAgKDE8PDI1KQotI2RlZmluZSBSQkZfTE9DQUwyICAgICgxPDwyNCkKLSNkZWZpbmUgUkJGX0xPQ0FMMSAgICAoMTw8MjMpCi0KLSNkZWZpbmUgUkJGX0ZSQU1FTUFYIDY0Ci0jZGVmaW5lIFJCRl9GUkFNRUxFTiAweDYwMAotCi0jaWZkZWYgQ09ORklHX0RSSVZFUl9FVEhFUgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX05FVCkKLQotLyogYWxpZ25tZW50IGFzIHBlciBFcnJhdGEgIzExICg2NCBieXRlcykgaXMgaW5zdWZmaWNpZW50ISAqLwotcmJmX3QgcmJmZHRbUkJGX0ZSQU1FTUFYXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDUxMikpKTsKLXJiZl90ICpyYmZwOwotCi11bnNpZ25lZCBjaGFyIHJiZl9mcmFtZWJ1ZltSQkZfRlJBTUVNQVhdW1JCRl9GUkFNRUxFTl0KLQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7Ci0KLS8qIHN0cnVjdHVyZSB0byBpbnRlcmZhY2UgdGhlIFBIWSAqLwotQVQ5MVNfUGh5T3BzIFBoeU9wczsKLQotQVQ5MVBTX0VNQUMgcF9tYWM7Ci0KLS8qKioqKioqKioqKiBFTUFDIFBoeSBsYXllciBNYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIE5hbWU6Ci0gKglhdDkxcm05MjAwX0VtYWNFbmFibGVNRElPCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUVuYWJsZXMgdGhlIE1ESU8gYml0IGluIE1BQyBjb250cm9sIHJlZ2lzdGVyCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZToKLSAqCW5vbmUKLSAqLwotdm9pZCBhdDkxcm05MjAwX0VtYWNFbmFibGVNRElPIChBVDkxUFNfRU1BQyBwX21hYykKLXsKLQkvKiBNYWMgQ1RSTCByZWcgc2V0IGZvciBNRElPIGVuYWJsZSAqLwotCXBfbWFjLT5FTUFDX0NUTCB8PSBBVDkxQ19FTUFDX01QRTsJLyogTWFuYWdlbWVudCBwb3J0IGVuYWJsZSAqLwotfQotCi0vKgotICogTmFtZToKLSAqCWF0OTFybTkyMDBfRW1hY0Rpc2FibGVNRElPCi0gKiBEZXNjcmlwdGlvbjoKLSAqCURpc2FibGVzIHRoZSBNRElPIGJpdCBpbiBNQUMgY29udHJvbCByZWdpc3RlcgotICogQXJndW1lbnRzOgotICoJcF9tYWMgLSBwb2ludGVyIHRvIHN0cnVjdCBBVDkxU19FTUFDCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKglub25lCi0gKi8KLXZvaWQgYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKEFUOTFQU19FTUFDIHBfbWFjKQotewotCS8qIE1hYyBDVFJMIHJlZyBzZXQgZm9yIE1ESU8gZGlzYWJsZSAqLwotCXBfbWFjLT5FTUFDX0NUTCAmPSB+QVQ5MUNfRU1BQ19NUEU7CS8qIE1hbmFnZW1lbnQgcG9ydCBkaXNhYmxlICovCi19Ci0KLQotLyoKLSAqIE5hbWU6Ci0gKglhdDkxcm05MjAwX0VtYWNSZWFkUGh5Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCVJlYWRzIGRhdGEgZnJvbSB0aGUgUEhZIHJlZ2lzdGVyCi0gKiBBcmd1bWVudHM6Ci0gKglkZXYgLSBwb2ludGVyIHRvIHN0cnVjdCBuZXRfZGV2aWNlCi0gKglSZWdpc3RlckFkZHJlc3MgLSB1bnNpZ25lZCBjaGFyCi0gKglwSW5wdXQgLSBwb2ludGVyIHRvIHZhbHVlIHJlYWQgZnJvbSByZWdpc3RlcgotICogUmV0dXJuIHZhbHVlOgotICoJVFJVRSAtIGlmIGRhdGEgcmVhZCBzdWNjZXNzZnVsbHkKLSAqLwotVUNIQVIgYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeSAoQVQ5MVBTX0VNQUMgcF9tYWMsCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyIFJlZ2lzdGVyQWRkcmVzcywKLQkJCQkgICAgIHVuc2lnbmVkIHNob3J0ICpwSW5wdXQpCi17Ci0JcF9tYWMtPkVNQUNfTUFOID0gKEFUOTFDX0VNQUNfSElHSCAmIH5BVDkxQ19FTUFDX0xPVykgfAotCQkJICAoQVQ5MUNfRU1BQ19SV19SKSB8Ci0JCQkgIChSZWdpc3RlckFkZHJlc3MgPDwgMTgpIHwKLQkJCSAgKEFUOTFDX0VNQUNfQ09ERV84MDJfMyk7Ci0KLQl1ZGVsYXkgKDEwMDAwKTsKLQotCSpwSW5wdXQgPSAodW5zaWduZWQgc2hvcnQpIHBfbWFjLT5FTUFDX01BTjsKLQotCXJldHVybiBUUlVFOwotfQotCi0KLS8qCi0gKiBOYW1lOgotICoJYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkKLSAqIERlc2NyaXB0aW9uOgotICoJV3JpdGVzIGRhdGEgdG8gdGhlIFBIWSByZWdpc3RlcgotICogQXJndW1lbnRzOgotICoJZGV2IC0gcG9pbnRlciB0byBzdHJ1Y3QgbmV0X2RldmljZQotICoJUmVnaXN0ZXJBZGRyZXNzIC0gdW5zaWduZWQgY2hhcgotICoJcE91dHB1dCAtIHBvaW50ZXIgdG8gdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgcmVnaXN0ZXIKLSAqIFJldHVybiB2YWx1ZToKLSAqCVRSVUUgLSBpZiBkYXRhIHJlYWQgc3VjY2Vzc2Z1bGx5Ci0gKi8KLVVDSEFSIGF0OTFybTkyMDBfRW1hY1dyaXRlUGh5IChBVDkxUFNfRU1BQyBwX21hYywKLQkJCQkgICAgICB1bnNpZ25lZCBjaGFyIFJlZ2lzdGVyQWRkcmVzcywKLQkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCAqcE91dHB1dCkKLXsKLQlwX21hYy0+RU1BQ19NQU4gPSAoQVQ5MUNfRU1BQ19ISUdIICYgfkFUOTFDX0VNQUNfTE9XKSB8Ci0JCQlBVDkxQ19FTUFDX0NPREVfODAyXzMgfCBBVDkxQ19FTUFDX1JXX1cgfAotCQkJKFJlZ2lzdGVyQWRkcmVzcyA8PCAxOCkgfCAqcE91dHB1dDsKLQotCXVkZWxheSAoMTAwMDApOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLWludCBldGhfaW5pdCAoYmRfdCAqIGJkKQotewotCWludCByZXQ7Ci0JaW50IGk7Ci0JdWNoYXIgZW5ldGFkZHJbNl07Ci0KLQlwX21hYyA9IEFUOTFDX0JBU0VfRU1BQzsKLQotCS8qIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovCi0JKkFUOTFDX1BJT0FfUERSID0gQVQ5MUNfUEExNl9FTURJTyB8IEFUOTFDX1BBMTVfRU1EQyB8IEFUOTFDX1BBMTRfRVJYRVIgfAotCQkJICBBVDkxQ19QQTEzX0VSWDEgfCBBVDkxQ19QQTEyX0VSWDAgfCBBVDkxQ19QQTExX0VDUlNfRUNSU0RWIHwKLQkJCSAgQVQ5MUNfUEExMF9FVFgxIHwgQVQ5MUNfUEE5X0VUWDAgfCBBVDkxQ19QQThfRVRYRU4gfAotCQkJICBBVDkxQ19QQTdfRVRYQ0tfRVJFRkNLOwotCi0jaWZkZWYgQ09ORklHX0FUOTFDX1VTRV9STUlJCi0JKkFUOTFDX1BJT0JfUERSID0gQVQ5MUNfUEIxOV9FUlhDSzsKLQkqQVQ5MUNfUElPQl9CU1IgPSBBVDkxQ19QQjE5X0VSWENLOwotI2Vsc2UKLQkqQVQ5MUNfUElPQl9QRFIgPSBBVDkxQ19QQjE5X0VSWENLIHwgQVQ5MUNfUEIxOF9FQ09MIHwgQVQ5MUNfUEIxN19FUlhEViB8Ci0JCQkgIEFUOTFDX1BCMTZfRVJYMyB8IEFUOTFDX1BCMTVfRVJYMiB8IEFUOTFDX1BCMTRfRVRYRVIgfAotCQkJICBBVDkxQ19QQjEzX0VUWDMgfCBBVDkxQ19QQjEyX0VUWDI7Ci0KLQkvKiBTZWxlY3QgQiBSZWdpc3RlciAqLwotCSpBVDkxQ19QSU9CX0JTUiA9IEFUOTFDX1BCMTlfRVJYQ0sgfCBBVDkxQ19QQjE4X0VDT0wgfAotCQkJICBBVDkxQ19QQjE3X0VSWERWIHwgQVQ5MUNfUEIxNl9FUlgzIHwgQVQ5MUNfUEIxNV9FUlgyIHwKLQkJCSAgQVQ5MUNfUEIxNF9FVFhFUiB8IEFUOTFDX1BCMTNfRVRYMyB8IEFUOTFDX1BCMTJfRVRYMjsKLSNlbmRpZgotCi0JKkFUOTFDX1BNQ19QQ0VSID0gMSA8PCBBVDkxQ19JRF9FTUFDOwkvKiBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLwotCi0JcF9tYWMtPkVNQUNfQ0ZHIHw9IEFUOTFDX0VNQUNfQ1NSOwkvKiBDbGVhciBzdGF0aXN0aWNzICovCi0KLQkvKiBJbml0IEV0aGVybmV0IGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUkJGX0ZSQU1FTUFYOyBpKyspIHsKLQkJcmJmZHRbaV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKXJiZl9mcmFtZWJ1ZltpXTsKLQkJcmJmZHRbaV0uc2l6ZSA9IDA7Ci0JfQotCXJiZmR0W1JCRl9GUkFNRU1BWCAtIDFdLmFkZHIgfD0gUkJGX1dSQVA7Ci0JcmJmcCA9ICZyYmZkdFswXTsKLQotCWV0aF9nZXRlbnZfZW5ldGFkZHIoImV0aGFkZHIiLCBlbmV0YWRkcik7Ci0KLQkvKiBUaGUgQ1NCMzM3IG9yaWdpbmFsbHkgdXNlZCBhIHZlcnNpb24gb2YgdGhlIE1pY3JvTW9uaXRvciBib290bG9hZGVyCi0JICogd2hpY2ggc2F2ZWQgRXRoZXJuZXQgYWRkcmVzc2VzIGluIHRoZSAid3JvbmciIG9yZGVyLiAgT3BlcmF0aW5nCi0JICogc3lzdGVtcyAobGlrZSBMaW51eCkga25vdyB0aGlzLCBhbmQgYXBwbHkgYSB3b3JrYXJvdW5kLiAgUmVwbGljYXRlCi0JICogdGhhdCBNaWNyb01vbml0b3IgYmVoYXZpb3Igc28gd2UgYXZvaWQgbmVlZGluZyB0byBtYWtlIHN1Y2ggT1MgY29kZQotCSAqIGNhcmUgYWJvdXQgd2hpY2ggYm9vdGxvYWRlciB3YXMgdXNlZC4KLQkgKi8KLQlpZiAobWFjaGluZV9pc19jc2IzMzcoKSkgewotCQlwX21hYy0+RU1BQ19TQTJIID0gKGVuZXRhZGRyWzBdIDw8ICA4KSB8IChlbmV0YWRkclsxXSk7Ci0JCXBfbWFjLT5FTUFDX1NBMkwgPSAoZW5ldGFkZHJbMl0gPDwgMjQpIHwgKGVuZXRhZGRyWzNdIDw8IDE2KQotCQkJCSB8IChlbmV0YWRkcls0XSA8PCAgOCkgfCAoZW5ldGFkZHJbNV0pOwotCX0gZWxzZSB7Ci0JCXBfbWFjLT5FTUFDX1NBMkwgPSAoZW5ldGFkZHJbM10gPDwgMjQpIHwgKGVuZXRhZGRyWzJdIDw8IDE2KQotCQkJCSB8IChlbmV0YWRkclsxXSA8PCAgOCkgfCAoZW5ldGFkZHJbMF0pOwotCQlwX21hYy0+RU1BQ19TQTJIID0gKGVuZXRhZGRyWzVdIDw8ICA4KSB8IChlbmV0YWRkcls0XSk7Ci0JfQotCi0JcF9tYWMtPkVNQUNfUkJRUCA9IChsb25nKSAoJnJiZmR0WzBdKTsKLQlwX21hYy0+RU1BQ19SU1IgJj0gfihBVDkxQ19FTUFDX1JTUl9PVlIgfCBBVDkxQ19FTUFDX1JFQyB8IEFUOTFDX0VNQUNfQk5BKTsKLQotCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgfCBBVDkxQ19FTUFDX0NBRiB8IEFUOTFDX0VNQUNfTkJDKQotCQkJJiB+QVQ5MUNfRU1BQ19DTEs7Ci0KLSNpZmRlZiBDT05GSUdfQVQ5MUNfVVNFX1JNSUkKLQlwX21hYy0+RU1BQ19DRkcgfD0gQVQ5MUNfRU1BQ19STUlJOwotI2VuZGlmCi0KLSNpZiAoQVQ5MUNfTUFTVEVSX0NMT0NLID4gNDAwMDAwMDApCi0JLyogTURJTyBjbG9jayBtdXN0IG5vdCBleGNlZWQgMi41IE1Ieiwgc28gZW5hYmxlIE1DSyBkaXZpZGVyICovCi0JcF9tYWMtPkVNQUNfQ0ZHIHw9IEFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQ7Ci0jZW5kaWYKLQotCXBfbWFjLT5FTUFDX0NUTCB8PSBBVDkxQ19FTUFDX1RFIHwgQVQ5MUNfRU1BQ19SRTsKLQotCWF0OTFybTkyMDBfR2V0UGh5SW50ZXJmYWNlICgmIFBoeU9wcyk7Ci0KLQlpZiAoIVBoeU9wcy5Jc1BoeUNvbm5lY3RlZCAocF9tYWMpKQotCQlwcmludGYgKCJQSFkgbm90IGNvbm5lY3RlZCEhXG5cciIpOwotCi0JLyogTUlJIG1hbmFnZW1lbnQgc3RhcnQgZnJvbSBoZXJlICovCi0JaWYgKCEocF9tYWMtPkVNQUNfU1IgJiBBVDkxQ19FTUFDX0xJTkspKSB7Ci0JCWlmICghKHJldCA9IFBoeU9wcy5Jbml0IChwX21hYykpKSB7Ci0JCQlwcmludGYgKCJNQUM6IGVycm9yIGR1cmluZyBNSUkgaW5pdGlhbGl6YXRpb25cbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGYgKCJObyBsaW5rXG5cciIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGV0aF9zZW5kICh2b2xhdGlsZSB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgpCi17Ci0Jd2hpbGUgKCEocF9tYWMtPkVNQUNfVFNSICYgQVQ5MUNfRU1BQ19CTlEpKTsKLQlwX21hYy0+RU1BQ19UQVIgPSAobG9uZykgcGFja2V0OwotCXBfbWFjLT5FTUFDX1RDUiA9IGxlbmd0aDsKLQl3aGlsZSAocF9tYWMtPkVNQUNfVENSICYgMHg3ZmYpOwotCXBfbWFjLT5FTUFDX1RTUiB8PSBBVDkxQ19FTUFDX0NPTVA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBldGhfcnggKHZvaWQpCi17Ci0JaW50IHNpemU7Ci0KLQlpZiAoIShyYmZwLT5hZGRyICYgUkJGX09XTkVSKSkKLQkJcmV0dXJuIDA7Ci0KLQlzaXplID0gcmJmcC0+c2l6ZSAmIFJCRl9TSVpFOwotCU5ldFJlY2VpdmUgKCh2b2xhdGlsZSB1Y2hhciAqKSAocmJmcC0+YWRkciAmIFJCRl9BRERSKSwgc2l6ZSk7Ci0KLQlyYmZwLT5hZGRyICY9IH5SQkZfT1dORVI7Ci0JaWYgKHJiZnAtPmFkZHIgJiBSQkZfV1JBUCkKLQkJcmJmcCA9ICZyYmZkdFswXTsKLQllbHNlCi0JCXJiZnArKzsKLQotCXBfbWFjLT5FTUFDX1JTUiB8PSBBVDkxQ19FTUFDX1JFQzsKLQotCXJldHVybiBzaXplOwotfQotCi12b2lkIGV0aF9oYWx0ICh2b2lkKQotewotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgZGVmaW5lZChDT05GSUdfQ01EX01JSSkKLWludCAgYXQ5MXJtOTIwMF9taWlwaHlfcmVhZChjb25zdCBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsCi0JCXVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBzaG9ydCAqIHZhbHVlKQotewotCWF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8gKHBfbWFjKTsKLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgcmVnLCB2YWx1ZSk7Ci0JYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKHBfbWFjKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50ICBhdDkxcm05MjAwX21paXBoeV93cml0ZShjb25zdCBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsCi0JCXVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKLXsKLQlhdDkxcm05MjAwX0VtYWNFbmFibGVNRElPIChwX21hYyk7Ci0JYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkgKHBfbWFjLCByZWcsICZ2YWx1ZSk7Ci0JYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKHBfbWFjKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLWludCBhdDkxcm05MjAwX21paXBoeV9pbml0aWFsaXplKGJkX3QgKmJpcykKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19NSUkpIHx8IGRlZmluZWQoQ09ORklHX0NNRF9NSUkpCi0JbWlpcGh5X3JlZ2lzdGVyKCJhdDkxcm05MjAwcGh5IiwgYXQ5MXJtOTIwMF9taWlwaHlfcmVhZCwgYXQ5MXJtOTIwMF9taWlwaHlfd3JpdGUpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYJLyogQ09ORklHX0RSSVZFUl9FVEhFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9pMmMuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvaTJjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTEwODguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9pMmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogIGkyYyBTdXBwb3J0IGZvciBBdG1lbCdzIEFUOTFSTTkyMDAgVHdvLVdpcmUgSW50ZXJmYWNlCi0gKgotICogIChjKSBSaWNrIEJyb25zb24KLSAqCi0gKiAgQm9ycm93ZWQgaGVhdmlseSBmcm9tIG9yaWdpbmFsIHdvcmsgYnk6Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAc3RpbXB5Lm5ldHJvZWRnZS5jb20+Ci0gKgotICogIE1vZGlmaWVkIHRvIHdvcmsgd2l0aCB1LWJvb3QgYnkgKEMpIDIwMDQgR2FyeSBKZW5uZWpvaG4gZ2FyeWpAZGVueC5kZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotKi8KLSNpbmNsdWRlIDxjb21tb24uaD4KLQotI2lmZGVmIENPTkZJR19IQVJEX0kyQwotCi0jaW5jbHVkZSA8aTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgPGF0OTFybTkyMDBfaTJjLmg+Ci0KLS8qIGRlZmluZSBERUJVRyAqLwotCi0vKgotICogUG9sbCB0aGUgaTJjIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgc3BlY2lmaWVkIGJpdCBpcyBzZXQuCi0gKiBSZXR1cm5zIDAgaWYgdGltZWQgb3V0ICgxMDAgbXNlYykKLSAqLwotc3RhdGljIHNob3J0IGF0OTFfcG9sbF9zdGF0dXMoQVQ5MVBTX1RXSSB0d2ksIHVuc2lnbmVkIGxvbmcgYml0KSB7Ci0JaW50IGxvb3BfY250ciA9IDEwMDAwOwotCWRvIHsKLQkJdWRlbGF5KDEwKTsKLQl9IHdoaWxlICghKHR3aS0+VFdJX1NSICYgYml0KSAmJiAoLS1sb29wX2NudHIgPiAwKSk7Ci0KLQlyZXR1cm4gKGxvb3BfY250ciA+IDApOwotfQotCi0vKgotICogR2VuZXJpYyBpMmMgbWFzdGVyIHRyYW5zZmVyIGVudHJ5cG9pbnQKLSAqCi0gKiBydyA9PSAxIG1lYW5zIHRoYXQgdGhpcyBpcyBhIHJlYWQKLSAqLwotc3RhdGljIGludAotYXQ5MV94ZmVyKHVuc2lnbmVkIGNoYXIgY2hpcCwgdW5zaWduZWQgaW50IGFkZHIsIGludCBhbGVuLAotCQkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuLCBpbnQgcncpCi17Ci0JQVQ5MVBTX1RXSSB0d2kgPSAoQVQ5MVBTX1RXSSkgQVQ5MV9UV0lfQkFTRTsKLQlpbnQgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQkvKiBTZXQgdGhlIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLwotCXR3aS0+VFdJX01NUiA9IChjaGlwIDw8IDE2KSB8IChhbGVuIDw8IDgpCi0JCXwgKChydyA9PSAxKSA/IEFUOTFDX1RXSV9NUkVBRCA6IDApOwotCi0JLyogU2V0IFRXSSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyIHdpdGggZmlyc3QgbWVzc2FnZXMgZGF0YSBmaWVsZCAqLwotCWlmIChhbGVuID4gMCkKLQkJdHdpLT5UV0lfSUFEUiA9IGFkZHI7Ci0KLQlsZW5ndGggPSBsZW47Ci0JYnVmID0gYnVmZmVyOwotCWlmIChsZW5ndGggJiYgYnVmKSB7CS8qIHNhbml0eSBjaGVjayAqLwotCQlpZiAocncpIHsKLQkJCXR3aS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NUQVJUOwotCQkJd2hpbGUgKGxlbmd0aC0tKSB7Ci0JCQkJaWYgKCFsZW5ndGgpCi0JCQkJCXR3aS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NUT1A7Ci0JCQkJLyogV2FpdCB1bnRpbCB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLwotCQkJCWlmICghYXQ5MV9wb2xsX3N0YXR1cyh0d2ksIEFUOTFDX1RXSV9SWFJEWSkpIHsKLQkJCQkJZGVidWcgKCJhdDkxX2kyYzogdGltZW91dCAxXG4iKTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJCSpidWYrKyA9IHR3aS0+VFdJX1JIUjsKLQkJCX0KLQkJCWlmICghYXQ5MV9wb2xsX3N0YXR1cyh0d2ksIEFUOTFDX1RXSV9UWENPTVApKSB7Ci0JCQkJZGVidWcgKCJhdDkxX2kyYzogdGltZW91dCAyXG4iKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXR3aS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NUQVJUOwotCQkJd2hpbGUgKGxlbmd0aC0tKSB7Ci0JCQkJdHdpLT5UV0lfVEhSID0gKmJ1ZisrOwotCQkJCWlmICghbGVuZ3RoKQotCQkJCQl0d2ktPlRXSV9DUiA9IEFUOTFDX1RXSV9TVE9QOwotCQkJCWlmICghYXQ5MV9wb2xsX3N0YXR1cyh0d2ksIEFUOTFDX1RXSV9UWFJEWSkpIHsKLQkJCQkJZGVidWcgKCJhdDkxX2kyYzogdGltZW91dCAzXG4iKTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJfQotCQkJLyogV2FpdCB1bnRpbCB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLwotCQkJaWYgKCFhdDkxX3BvbGxfc3RhdHVzKHR3aSwgQVQ5MUNfVFdJX1RYQ09NUCkpIHsKLQkJCQlkZWJ1ZyAoImF0OTFfaTJjOiB0aW1lb3V0IDRcbiIpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQKLWkyY19wcm9iZSh1bnNpZ25lZCBjaGFyIGNoaXApCi17Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbMV07Ci0KLQlyZXR1cm4gYXQ5MV94ZmVyKGNoaXAsIDAsIDAsIGJ1ZmZlciwgMSwgMSk7Ci19Ci0KLWludAotaTJjX3JlYWQgKHVuc2lnbmVkIGNoYXIgY2hpcCwgdW5zaWduZWQgaW50IGFkZHIsIGludCBhbGVuLAotCSAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuKQotewotI2lmZGVmIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCi0JLyogd2Ugb25seSBhbGxvdyBvbmUgYWRkcmVzcyBieXRlICovCi0JaWYgKGFsZW4gPiAxKQotCQlyZXR1cm4gMTsKLQkvKiBYWFggYXNzdW1lIGFuIEFUTUVMIEFUMjRDMTYgKi8KLQlpZiAoYWxlbiA9PSAxKSB7Ci0jaWYgMCAvKiBFRVBST00gY29kZSBhbHJlYWR5IHNldHMgdGhpcyBjb3JyZWN0bHkgKi8KLQkJY2hpcCB8PSAoYWRkciA+PiA4KSAmIDB4ZmY7Ci0jZW5kaWYKLQkJYWRkciA9IGFkZHIgJiAweGZmOwotCX0KLSNlbmRpZgotCXJldHVybiBhdDkxX3hmZXIoY2hpcCwgYWRkciwgYWxlbiwgYnVmZmVyLCBsZW4sIDEpOwotfQotCi1pbnQKLWkyY193cml0ZSh1bnNpZ25lZCBjaGFyIGNoaXAsIHVuc2lnbmVkIGludCBhZGRyLCBpbnQgYWxlbiwKLQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKLXsKLSNpZmRlZiBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVwotCWludCBpOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCS8qIHdlIG9ubHkgYWxsb3cgb25lIGFkZHJlc3MgYnl0ZSAqLwotCWlmIChhbGVuID4gMSkKLQkJcmV0dXJuIDE7Ci0JLyogWFhYIGFzc3VtZSBhbiBBVE1FTCBBVDI0QzE2ICovCi0JaWYgKGFsZW4gPT0gMSkgewotCQlidWYgPSBidWZmZXI7Ci0JCS8qIGRvIHNpbmdsZSBieXRlIHdyaXRlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSNpZiAwIC8qIEVFUFJPTSBjb2RlIGFscmVhZHkgc2V0cyB0aGlzIGNvcnJlY3RseSAqLwotCQkJY2hpcCB8PSAoYWRkciA+PiA4KSAmIDB4ZmY7Ci0jZW5kaWYKLQkJCWFkZHIgPSBhZGRyICYgMHhmZjsKLQkJCWlmIChhdDkxX3hmZXIoY2hpcCwgYWRkciwgYWxlbiwgYnVmKyssIDEsIDApKQotCQkJCXJldHVybiAxOwotCQkJYWRkcisrOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCXJldHVybiBhdDkxX3hmZXIoY2hpcCwgYWRkciwgYWxlbiwgYnVmZmVyLCBsZW4sIDApOwotfQotCi0vKgotICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCi0gKi8KLXZvaWQKLWkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKLXsKLQlBVDkxUFNfVFdJIHR3aSA9IChBVDkxUFNfVFdJKSBBVDkxX1RXSV9CQVNFOwotCi0JKkFUOTFDX1BJT0FfUERSID0gQVQ5MUNfUEEyNV9UV0QgfCBBVDkxQ19QQTI2X1RXQ0s7Ci0JKkFUOTFDX1BJT0FfQVNSID0gQVQ5MUNfUEEyNV9UV0QgfCBBVDkxQ19QQTI2X1RXQ0s7Ci0JKkFUOTFDX1BJT0FfTURFUiA9IEFUOTFDX1BBMjVfVFdEIHwgQVQ5MUNfUEEyNl9UV0NLOwotCSpBVDkxQ19QTUNfUENFUiA9IDEgPDwgQVQ5MUNfSURfVFdJOwkJLyogZW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8KLQotCXR3aS0+VFdJX0lEUiA9IDB4M2ZmOwkJCQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JdHdpLT5UV0lfQ1IgPSBBVDkxQ19UV0lfU1dSU1Q7CQkJLyogUmVzZXQgcGVyaXBoZXJhbCAqLwotCXR3aS0+VFdJX0NSID0gQVQ5MUNfVFdJX01TRU4gfCBBVDkxQ19UV0lfU1ZESVM7CS8qIFNldCBNYXN0ZXIgbW9kZSAqLwotCi0JLyogSGVyZSwgQ0tESVYgPSAxIGFuZCBDSERJVj1DTERJViAgPT0+IENMRElWID0gQ0hESVYgPSAxLzQqKChGbWNsay9GVFdJKSAtNikgKi8KLQl0d2ktPlRXSV9DV0dSID0gQVQ5MUNfVFdJX0NLRElWMSB8IEFUOTFDX1RXSV9DTERJVjMgfCAoQVQ5MUNfVFdJX0NMRElWMyA8PCA4KTsKLQotCWRlYnVnICgiRm91bmQgQVQ5MSBpMmNcbiIpOwotCXJldHVybjsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19IQVJEX0kyQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9rczg3MjEuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAva3M4NzIxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTM3OTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9rczg3MjEuYworKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA2Ci0gKiBBdXRob3IgOiBFcmljIEJlbmFyZCAoRXVrcmVhIEVsZWN0cm9tYXRpcXVlKQotICogYmFzZWQgb24gZG05MTYxLmMgd2hpY2ggaXMgOgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBBdXRob3IgOiBIYW1pZCBJa2RvdW1pIChBdG1lbCkKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8YXQ5MXJtOTIwMF9uZXQuaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpbmNsdWRlIDxrczg3MjEuaD4KLQotI2lmZGVmIENPTkZJR19EUklWRVJfRVRIRVIKLQotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9ORVQpCi0KLS8qCi0gKiBOYW1lOgotICoJa3M4NzIxX2lzcGh5Y29ubmVjdGVkCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVJlYWRzIHRoZSAyIFBIWSBJRCByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czoKLSAqCXBfbWFjIC0gcG9pbnRlciB0byBBVDkxU19FTUFDIHN0cnVjdAotICogUmV0dXJuIHZhbHVlOgotICoJMSAtIGlmIGlkIHJlYWQgc3VjY2Vzc2Z1bGx5Ci0gKgkwIC0gaWYgZXJyb3IKLSAqLwotdW5zaWduZWQgaW50IGtzODcyMV9pc3BoeWNvbm5lY3RlZChBVDkxUFNfRU1BQyBwX21hYykKLXsKLQl1bnNpZ25lZCBzaG9ydCBpZDEsIGlkMjsKLQotCWF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8ocF9tYWMpOwotCWF0OTFybTkyMDBfRW1hY1JlYWRQaHkocF9tYWMsCi0JCUNPTkZJR19QSFlfQUREUkVTUyB8IEtTODcyMV9QSFlJRDEsICZpZDEpOwotCWF0OTFybTkyMDBfRW1hY1JlYWRQaHkocF9tYWMsCi0JCUNPTkZJR19QSFlfQUREUkVTUyB8IEtTODcyMV9QSFlJRDIsICZpZDIpOwotCWF0OTFybTkyMDBfRW1hY0Rpc2FibGVNRElPKHBfbWFjKTsKLQotCWlmICgoaWQxID09IChLUzg3MjFfUEhZSURfT1VJID4+IDYpKSAmJgotCQkoKGlkMiA+PiAxMCkgPT0gKEtTODcyMV9QSFlJRF9PVUkgJiBLUzg3MjFfTFNCX01BU0spKSkgewotCQlpZiAoKGlkMiAmIEtTODcyMV9NT0RFTE1BU0spID09IEtTODcyMUJMX01PREVMKQotCQkJcHJpbnRmKCJNaWNyZWwgS1M4NzIxYkwgUEhZIGRldGVjdGVkIDogIik7Ci0JCWVsc2UKLQkJCXByaW50ZigiVW5rbm93biBNaWNyZWwgUEhZIGRldGVjdGVkIDogIik7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE5hbWU6Ci0gKglrczg3MjFfZ2V0bGlua3NwZWVkCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUxpbmsgcGFyYWxsZWwgZGV0ZWN0aW9uIHN0YXR1cyBvZiBNQUMgaXMgY2hlY2tlZCBhbmQgc2V0IGluIHRoZQotICoJTUFDIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gTUFDCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKgkxIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc2Z1bGx5Ci0gKgkwIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi11bnNpZ25lZCBjaGFyIGtzODcyMV9nZXRsaW5rc3BlZWQoQVQ5MVBTX0VNQUMgcF9tYWMpCi17Ci0JdW5zaWduZWQgc2hvcnQgc3RhdDE7Ci0KLQlpZiAoIWF0OTFybTkyMDBfRW1hY1JlYWRQaHkocF9tYWMsIEtTODcyMV9CTVNSLCAmc3RhdDEpKQotCQlyZXR1cm4gMDsKLQotCWlmICghKHN0YXQxICYgS1M4NzIxX0xJTktfU1RBVFVTKSkgewotCQkvKiBsaW5rIHN0YXR1cyB1cD8gKi8KLQkJcHJpbnRmKCJMaW5rIERvd24gIVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzdGF0MSAmIEtTODcyMV8xMDBCQVNFX1RYX0ZEKSB7Ci0JCS8qIHNldCBFbWFjIGZvciAxMDBCYXNlVFggYW5kIEZ1bGwgRHVwbGV4ICovCi0JCXByaW50ZigiMTAwQlQgRkRcbiIpOwotCQlwX21hYy0+RU1BQ19DRkcgfD0gQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoc3RhdDEgJiBLUzg3MjFfMTBCQVNFX1RfRkQpIHsKLQkJLyogc2V0IE1JSSBmb3IgMTBCYXNlVCBhbmQgRnVsbCBEdXBsZXggKi8KLQkJcHJpbnRmKCIxMEJUIEZEXG4iKTsKLQkJcF9tYWMtPkVNQUNfQ0ZHID0gKHBfbWFjLT5FTUFDX0NGRyAmCi0JCQkJfihBVDkxQ19FTUFDX1NQRCB8IEFUOTFDX0VNQUNfRkQpKQotCQkJCXwgQVQ5MUNfRU1BQ19GRDsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHN0YXQxICYgS1M4NzIxXzEwMEJBU0VfVDRfSEQpIHsKLQkJLyogc2V0IE1JSSBmb3IgMTAwQmFzZVRYIGFuZCBIYWxmIER1cGxleCAqLwotCQlwcmludGYoIjEwMEJUIEhEXG4iKTsKLQkJcF9tYWMtPkVNQUNfQ0ZHID0gKHBfbWFjLT5FTUFDX0NGRyAmCi0JCQkJfihBVDkxQ19FTUFDX1NQRCB8IEFUOTFDX0VNQUNfRkQpKQotCQkJCXwgQVQ5MUNfRU1BQ19TUEQ7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChzdGF0MSAmIEtTODcyMV8xMEJBU0VfVF9IRCkgewotCQkvKiBzZXQgTUlJIGZvciAxMEJhc2VUIGFuZCBIYWxmIER1cGxleCAqLwotCQlwcmludGYoIjEwQlQgSERcbiIpOwotCQlwX21hYy0+RU1BQ19DRkcgJj0gfihBVDkxQ19FTUFDX1NQRCB8IEFUOTFDX0VNQUNfRkQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBOYW1lOgotICoJa3M4NzIxX2luaXRwaHkKLSAqIERlc2NyaXB0aW9uOgotICoJTUFDIHN0YXJ0cyBjaGVja2luZyBpdHMgbGluayBieSB1c2luZyBwYXJhbGxlbCBkZXRlY3Rpb24gYW5kCi0gKglBdXRvbmVnb3RpYXRpb24gYW5kIHRoZSBzYW1lIGlzIHNldCBpbiB0aGUgTUFDIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZToKLSAqCTEgLSBpZiBsaW5rIHN0YXR1cyBzZXQgc3VjY2VzZnVsbHkKLSAqCTAgLSBpZiBsaW5rIHN0YXR1cyBub3Qgc2V0Ci0gKi8KLXVuc2lnbmVkIGNoYXIga3M4NzIxX2luaXRwaHkoQVQ5MVBTX0VNQUMgcF9tYWMpCi17Ci0JdW5zaWduZWQgY2hhciByZXQgPSAxOwotCXVuc2lnbmVkIHNob3J0IGludHZhbHVlOwotCi0JYXQ5MXJtOTIwMF9FbWFjRW5hYmxlTURJTyhwX21hYyk7Ci0KLQkvKiBUcnkgYW5vdGhlciB0aW1lICovCi0JaWYgKCFrczg3MjFfZ2V0bGlua3NwZWVkKHBfbWFjKSkKLQkJcmV0ID0ga3M4NzIxX2dldGxpbmtzcGVlZChwX21hYyk7Ci0KLQkvKiBEaXNhYmxlIFBIWSBJbnRlcnJ1cHRzICovCi0JaW50dmFsdWUgPSAwOwotCWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5KHBfbWFjLAotCQlDT05GSUdfUEhZX0FERFJFU1MgfCBLUzg3MjFfTURJTlRSLCAmaW50dmFsdWUpOwotCWF0OTFybTkyMDBfRW1hY0Rpc2FibGVNRElPKHBfbWFjKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBOYW1lOgotICoJa3M4NzIxX2F1dG9uZWdvdGlhdGUKLSAqIERlc2NyaXB0aW9uOgotICoJTUFDIEF1dG9uZWdvdGlhdGVzIHdpdGggdGhlIHBhcnRuZXIgc3RhdHVzIG9mIHNhbWUgaXMgc2V0IGluIHRoZQotICoJTUFDIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglkZXYgLSBwb2ludGVyIHRvIHN0cnVjdCBuZXRfZGV2aWNlCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKgkxIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc3NmdWxseQotICoJMCAtIGlmIGxpbmsgc3RhdHVzIG5vdCBzZXQKLSAqLwotdW5zaWduZWQgY2hhciBrczg3MjFfYXV0b25lZ290aWF0ZShBVDkxUFNfRU1BQyBwX21hYywgaW50ICpzdGF0dXMpCi17Ci0JdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0JdW5zaWduZWQgc2hvcnQgcGh5YW5hcjsKLQl1bnNpZ25lZCBzaG9ydCBwaHlhbmFscGFyOwotCi0JLyogU2V0IGtzODcyMSBjb250cm9sIHJlZ2lzdGVyICovCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5KHBfbWFjLAotCQlDT05GSUdfUEhZX0FERFJFU1MgfCBLUzg3MjFfQk1DUiwgJnZhbHVlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiByZW1vdmUgYXV0b25lZ290aWF0aW9uIGVuYWJsZSAqLwotCXZhbHVlICY9IH5LUzg3MjFfQVVUT05FRzsKLQkvKiBFbGVjdHJpY2FsbHkgaXNvbGF0ZSBQSFkgKi8KLQl2YWx1ZSB8PSBLUzg3MjFfSVNPTEFURTsKLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5KHBfbWFjLAotCQlDT05GSUdfUEhZX0FERFJFU1MgfCBLUzg3MjFfQk1DUiwgJnZhbHVlKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBTZXQgdGhlIEF1dG9fbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBSZWdpc3RlcgotCSAqIE1JSSBhZHZlcnRpc2luZyBmb3IgTmV4dCBwYWdlLCAxMDBCYXNlVHhGRCBhbmQgSEQsCi0JICogMTBCYXNlVEZEIGFuZCBIRCwgSUVFRSA4MDIuMwotCSAqLwotCXBoeWFuYXIgPSBLUzg3MjFfTlAgfCBLUzg3MjFfVFhfRkRYIHwgS1M4NzIxX1RYX0hEWCB8Ci0JCSAgS1M4NzIxXzEwX0ZEWCB8IEtTODcyMV8xMF9IRFggfCBLUzg3MjFfQU5fSUVFRV84MDJfMzsKLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5KHBfbWFjLAotCQlDT05GSUdfUEhZX0FERFJFU1MgfCBLUzg3MjFfQU5BUiwgJnBoeWFuYXIpKSB7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBSZWFkIHRoZSBDb250cm9sIFJlZ2lzdGVyICovCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5KHBfbWFjLAotCQlDT05GSUdfUEhZX0FERFJFU1MgfCBLUzg3MjFfQk1DUiwgJnZhbHVlKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0JdmFsdWUgfD0gS1M4NzIxX1NQRUVEX1NFTEVDVCB8IEtTODcyMV9BVVRPTkVHIHwgS1M4NzIxX0RVUExFWF9NT0RFOwotCWlmICghYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkocF9tYWMsCi0JCUNPTkZJR19QSFlfQUREUkVTUyB8IEtTODcyMV9CTUNSLCAmdmFsdWUpKSB7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBSZXN0YXJ0IEF1dG9fbmVnb3RpYXRpb24gKi8KLQl2YWx1ZSB8PSBLUzg3MjFfUkVTVEFSVF9BVVRPTkVHOwotCXZhbHVlICY9IH5LUzg3MjFfSVNPTEFURTsKLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5KHBfbWFjLAotCQlDT05GSUdfUEhZX0FERFJFU1MgfCBLUzg3MjFfQk1DUiwgJnZhbHVlKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0JLyogQ2hlY2sgQXV0b05lZ290aWF0ZSBjb21wbGV0ZSAqLwotCXVkZWxheSgxMDAwMCk7Ci0JYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeShwX21hYywKLQkJQ09ORklHX1BIWV9BRERSRVNTIHwgS1M4NzIxX0JNU1IsICZ2YWx1ZSk7Ci0JaWYgKCEodmFsdWUgJiBLUzg3MjFfQVVUT05FR19DT01QKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBHZXQgdGhlIEF1dG9OZWcgTGluayBwYXJ0bmVyIGJhc2UgcGFnZSAqLwotCWlmICghYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeShwX21hYywKLQkJQ09ORklHX1BIWV9BRERSRVNTIHwgS1M4NzIxX0FOTFBBUiwgJnBoeWFuYWxwYXIpKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICgocGh5YW5hciAmIEtTODcyMV9UWF9GRFgpICYmIChwaHlhbmFscGFyICYgS1M4NzIxX1RYX0ZEWCkpIHsKLQkJLyogU2V0IE1JSSBmb3IgMTAwQmFzZVRYIGFuZCBGdWxsIER1cGxleCAqLwotCQlwX21hYy0+RU1BQ19DRkcgfD0gQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKHBoeWFuYXIgJiBLUzg3MjFfMTBfRkRYKSAmJiAocGh5YW5hbHBhciAmIEtTODcyMV8xMF9GRFgpKSB7Ci0JCS8qIFNldCBNSUkgZm9yIDEwQmFzZVQgYW5kIEZ1bGwgRHVwbGV4ICovCi0JCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgJgotCQkJCX4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKSkKLQkJCQl8IEFUOTFDX0VNQUNfRkQ7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCS8qIENPTkZJR19DTURfTkVUICovCi0KLSNlbmRpZgkvKiBDT05GSUdfRFJJVkVSX0VUSEVSICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL2xvd2xldmVsX2luaXQuUyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvbG93bGV2ZWxfaW5pdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTcxNjBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvbG93bGV2ZWxfaW5pdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBNZW1vcnkgU2V0dXAgc3R1ZmYgLSB0YWtlbiBmcm9tIGJsb2IgbWVtc2V0dXAuUwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAyMDAwIDIwMDEgRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKSBhbmQKLSAqCQkgICAgICAgSmFuLURlcmsgQmFra2VyIChKLkQuQmFra2VyQGl0cy50dWRlbGZ0Lm5sKQotICoKLSAqIE1vZGlmaWVkIGZvciB0aGUgYXQ5MXJtOTIwMGRrIGJvYXJkIGJ5Ci0gKiAoQykgQ29weXJpZ2h0IDIwMDQKLSAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8dmVyc2lvbi5oPgotCi0jaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKLS8qCi0gKiBzb21lIHBhcmFtZXRlcnMgZm9yIHRoZSBib2FyZAotICoKLSAqIFRoaXMgaXMgYmFzZWQgb24gcm05MjAwZGsuY2ZnIGZvciB0aGUgQkRJMjAwMCBmcm9tIEFCQVRST04gd2hpY2ggaW4KLSAqIHR1cm4gaXMgYmFzZWQgb24gdGhlIGJvb3QuYmluIGNvZGUgZnJvbSBBVE1FTAotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9hcmNoL0FUOTFSTTkyMDAuaD4KLQotX01URVhUX0JBU0U6Ci0jdW5kZWYgU1RBUlRfRlJPTV9NRU0KLSNpZmRlZiBTVEFSVF9GUk9NX01FTQotCS53b3JkCUNPTkZJR19TWVNfVEVYVF9CQVNFLVBIWVNfRkxBU0hfMQotI2Vsc2UKLQkud29yZAlDT05GSUdfU1lTX1RFWFRfQkFTRQotI2VuZGlmCi0KLS5nbG9ibCBsb3dsZXZlbF9pbml0Ci1sb3dsZXZlbF9pbml0OgotCS8qIEdldCB0aGUgQ0tHUiBCYXNlIEFkZHJlc3MgKi8KLQlsZHIgICAgIHIxLCA9QVQ5MUNfQkFTRV9DS0dSCi0JLyogTWFpbiBvc2NpbGxhdG9yIEVuYWJsZSByZWdpc3RlciAqLwotI2lmZGVmIENPTkZJR19TWVNfVVNFX01BSU5fT1NDSUxMQVRPUgotCWxkciAgICAgcjAsID0weDAwMDBGRjAxCQkvKiBFbmFibGUgbWFpbiBvc2NpbGxhdG9yLCAgT1NDT1VOVCA9IDB4RkYgKi8KLSNlbHNlCi0JbGRyICAgICByMCwgPTB4MDAwMEZGMDAJCS8qIERpc2FibGUgbWFpbiBvc2NpbGxhdG9yLCBPU0NPVU5UID0gMHhGRiAqLwotI2VuZGlmCi0Jc3RyICAgICByMCwgW3IxLCAjQVQ5MUNfQ0tHUl9NT1JdCi0JLyogQWRkIGxvb3AgdG8gY29tcGVuc2F0ZSBNYWluIE9zY2lsbGF0b3Igc3RhcnR1cCB0aW1lICovCi0JbGRyICAgICByMCwgPTB4MDAwMDAwMTAKLUxvb3BPc2M6Ci0Jc3VicyAgICByMCwgcjAsICMxCi0JYmhpICAgICBMb29wT3NjCi0KLQkvKiBtZW1vcnkgY29udHJvbCBjb25maWd1cmF0aW9uICovCi0JLyogdGhpcyBpc24ndCB2ZXJ5IGVsZWdhbnQsIGJ1dAkgd2hhdCB0aGUgaGVjayAqLwotCWxkcglyMCwgPVNNUkRBVEEKLQlsZHIJcjEsIF9NVEVYVF9CQVNFCi0Jc3ViCXIwLCByMCwgcjEKLQlhZGQJcjIsIHIwLCAjODAKLTA6Ci0JLyogdGhlIGFkZHJlc3MgKi8KLQlsZHIJcjEsIFtyMF0sICM0Ci0JLyogdGhlIHZhbHVlICovCi0JbGRyCXIzLCBbcjBdLCAjNAotCXN0cglyMywgW3IxXQotCWNtcAlyMiwgcjAKLQlibmUJMGIKLQkvKiBkZWxheSAtIHRoaXMgaXMgYWxsIGRvbmUgYnkgZ3Vlc3MgKi8KLQlsZHIJcjAsID0weDAwMDEwMDAwCi0JLyogKHZzIHJlYWRpbmcgUE1DX1NSIGZvciBMT0NLQSwgTE9DS0IgLi4uIG9yIE1PU0NTIGVhcmxpZXIpICovCi0xOgotCXN1YnMJcjAsIHIwLCAjMQotCWJoaQkxYgotCWxkcglyMCwgPVNNUkRBVEExCi0JbGRyCXIxLCBfTVRFWFRfQkFTRQotCXN1YglyMCwgcjAsIHIxCi0JYWRkCXIyLCByMCwgIzE3NgotMjoKLQkvKiB0aGUgYWRkcmVzcyAqLwotCWxkcglyMSwgW3IwXSwgIzQKLQkvKiB0aGUgdmFsdWUgKi8KLQlsZHIJcjMsIFtyMF0sICM0Ci0Jc3RyCXIzLCBbcjFdCi0JY21wCXIyLCByMAotCWJuZQkyYgotCi0JLyogc3dpdGNoIGZyb20gRmFzdEJ1cyB0byBBc3luY2hyb25vdXMgY2xvY2sgbW9kZSAqLwotCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKLQlvcnIJcjAsIHIwLCAjMHhDMDAwMDAwMAlAIHNldCBiaXQgMzEgKGlBKSBhbmQgMzAgKG5GKQotCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKLQotCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KLQltb3YJcGMsIGxyCi0KLQkubHRvcmcKLQotU01SREFUQToKLQkud29yZCBBVDkxQ19FQklfQ0ZHUgotCS53b3JkIENPTkZJR19TWVNfRUJJX0NGR1JfVkFMCi0JLndvcmQgQVQ5MUNfU01DX0NTUjAKLQkud29yZCBDT05GSUdfU1lTX1NNQ19DU1IwX1ZBTAotCS53b3JkIEFUOTFDX1BMTEFSCi0JLndvcmQgQ09ORklHX1NZU19QTExBUl9WQUwKLQkud29yZCBBVDkxQ19QTExCUgotCS53b3JkIENPTkZJR19TWVNfUExMQlJfVkFMCi0JLndvcmQgQVQ5MUNfTUNLUgotCS53b3JkIENPTkZJR19TWVNfTUNLUl9WQUwKLQkvKiBoZXJlIHRoZXJlJ3MgYSBkZWxheSAqLwotU01SREFUQTE6Ci0JLndvcmQgQVQ5MUNfUElPQ19BU1IKLQkud29yZCBDT05GSUdfU1lTX1BJT0NfQVNSX1ZBTAotCS53b3JkIEFUOTFDX1BJT0NfQlNSCi0JLndvcmQgQ09ORklHX1NZU19QSU9DX0JTUl9WQUwKLQkud29yZCBBVDkxQ19QSU9DX1BEUgotCS53b3JkIENPTkZJR19TWVNfUElPQ19QRFJfVkFMCi0JLndvcmQgQVQ5MUNfRUJJX0NTQQotCS53b3JkIENPTkZJR19TWVNfRUJJX0NTQV9WQUwKLQkud29yZCBBVDkxQ19TRFJDX0NSCi0JLndvcmQgQ09ORklHX1NZU19TRFJDX0NSX1ZBTAotCS53b3JkIEFUOTFDX1NEUkNfTVIKLQkud29yZCBDT05GSUdfU1lTX1NEUkNfTVJfVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQVQ5MUNfU0RSQ19NUgotCS53b3JkIENPTkZJR19TWVNfU0RSQ19NUl9WQUwxCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQVQ5MUNfU0RSQ19NUgotCS53b3JkIENPTkZJR19TWVNfU0RSQ19NUl9WQUwyCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTTEKLQkud29yZCBDT05GSUdfU1lTX1NEUkFNX1ZBTAotCS53b3JkIEFUOTFDX1NEUkNfVFIKLQkud29yZCBDT05GSUdfU1lTX1NEUkNfVFJfVkFMCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLndvcmQgQVQ5MUNfU0RSQ19NUgotCS53b3JkIENPTkZJR19TWVNfU0RSQ19NUl9WQUwzCi0JLndvcmQgQ09ORklHX1NZU19TRFJBTQotCS53b3JkIENPTkZJR19TWVNfU0RSQU1fVkFMCi0JLyogU01SREFUQTEgaXMgMTc2IGJ5dGVzIGxvbmcgKi8KLSNlbmRpZiAvKiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL2x4dDk3Mi5jIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9seHQ5NzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAyY2ZkZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL2x4dDk3Mi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBBdXRob3IgOiBIYW1pZCBJa2RvdW1pIChBdG1lbCkKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogQWRhcHRlZCBmb3IgS3dpa0J5dGUgS0I5MjB4IGJvYXJkOiAyMkFQUjIwMDUKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXQ5MXJtOTIwMF9uZXQuaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpbmNsdWRlIDxtaWlwaHkuaD4KLSNpbmNsdWRlIDxseHQ5NzFhLmg+Ci0KLSNpZmRlZiBDT05GSUdfRFJJVkVSX0VUSEVSCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfTkVUKQotCi0vKgotICogTmFtZToKLSAqCWx4dDk3Ml9Jc1BoeUNvbm5lY3RlZAotICogRGVzY3JpcHRpb246Ci0gKglSZWFkcyB0aGUgMiBQSFkgSUQgcmVnaXN0ZXJzCi0gKiBBcmd1bWVudHM6Ci0gKglwX21hYyAtIHBvaW50ZXIgdG8gQVQ5MVNfRU1BQyBzdHJ1Y3QKLSAqIFJldHVybiB2YWx1ZToKLSAqCVRSVUUgLSBpZiBpZCByZWFkIHN1Y2Nlc3NmdWxseQotICoJRkFMU0UtIGlmIGVycm9yCi0gKi8KLXVuc2lnbmVkIGludCBseHQ5NzJfSXNQaHlDb25uZWN0ZWQgKEFUOTFQU19FTUFDIHBfbWFjKQotewotCXVuc2lnbmVkIHNob3J0IElkMSwgSWQyOwotCi0JYXQ5MXJtOTIwMF9FbWFjRW5hYmxlTURJTyAocF9tYWMpOwotCWF0OTFybTkyMDBfRW1hY1JlYWRQaHkocF9tYWMsIE1JSV9QSFlTSUQxLCAmSWQxKTsKLQlhdDkxcm05MjAwX0VtYWNSZWFkUGh5KHBfbWFjLCBNSUlfUEhZU0lEMiwgJklkMik7Ci0JYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKHBfbWFjKTsKLQotCWlmICgoSWQxID09ICgweDAwMTMpKSAmJiAoKElkMiAgJiAweEZGRjApID09IDB4NzhFMCkpCi0JCXJldHVybiBUUlVFOwotCi0JcmV0dXJuIEZBTFNFOwotfQotCi0vKgotICogTmFtZToKLSAqCWx4dDk3Ml9HZXRMaW5rU3BlZWQKLSAqIERlc2NyaXB0aW9uOgotICoJTGluayBwYXJhbGxlbCBkZXRlY3Rpb24gc3RhdHVzIG9mIE1BQyBpcyBjaGVja2VkIGFuZCBzZXQgaW4gdGhlCi0gKglNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czoKLSAqCXBfbWFjIC0gcG9pbnRlciB0byBNQUMKLSAqIFJldHVybiB2YWx1ZToKLSAqCVRSVUUgLSBpZiBsaW5rIHN0YXR1cyBzZXQgc3VjY2VzZnVsbHkKLSAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi1VQ0hBUiBseHQ5NzJfR2V0TGlua1NwZWVkIChBVDkxUFNfRU1BQyBwX21hYykKLXsKLQl1bnNpZ25lZCBzaG9ydCBzdGF0MTsKLQotCWlmICghYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeSAocF9tYWMsIFBIWV9MWFQ5NzFfU1RBVDIsICZzdGF0MSkpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICghKHN0YXQxICYgUEhZX0xYVDk3MV9TVEFUMl9MSU5LKSkJLyogbGluayBzdGF0dXMgdXA/ICovCi0JCXJldHVybiBGQUxTRTsKLQotCWlmIChzdGF0MSAmIFBIWV9MWFQ5NzFfU1RBVDJfMTAwQlRYKSB7Ci0KLQkJaWYgKHN0YXQxICYgUEhZX0xYVDk3MV9TVEFUMl9EVVBMRVhfTU9ERSkgewotCi0JCQkvKnNldCBFbWFjIGZvciAxMDBCYXNlVFggYW5kIEZ1bGwgRHVwbGV4ICAqLwotCQkJcF9tYWMtPkVNQUNfQ0ZHIHw9IEFUOTFDX0VNQUNfU1BEIHwgQVQ5MUNfRU1BQ19GRDsKLQkJfSBlbHNlIHsKLQotCQkJLypzZXQgRW1hYyBmb3IgMTAwQmFzZVRYIGFuZCBIYWxmIER1cGxleCAgKi8KLQkJCXBfbWFjLT5FTUFDX0NGRyA9IChwX21hYy0+RU1BQ19DRkcgJgotCQkJCQl+KEFUOTFDX0VNQUNfU1BEIHwgQVQ5MUNfRU1BQ19GRCkpCi0JCQkJCXwgQVQ5MUNfRU1BQ19TUEQ7Ci0JCX0KLQotCQlyZXR1cm4gVFJVRTsKLQotCX0gZWxzZSB7Ci0KLQkJaWYgKHN0YXQxICYgUEhZX0xYVDk3MV9TVEFUMl9EVVBMRVhfTU9ERSkgewotCi0JCQkvKnNldCBNSUkgZm9yIDEwQmFzZVQgYW5kIEZ1bGwgRHVwbGV4ICAqLwotCQkJcF9tYWMtPkVNQUNfQ0ZHID0gKHBfbWFjLT5FTUFDX0NGRyAmCi0JCQkJCX4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKSkKLQkJCQkJfCBBVDkxQ19FTUFDX0ZEOwotCQl9IGVsc2UgewotCi0JCQkvKnNldCBNSUkgZm9yIDEwQmFzZVQgYW5kIEhhbGYgRHVwbGV4ICAqLwotCQkJcF9tYWMtPkVNQUNfQ0ZHICY9IH4oQVQ5MUNfRU1BQ19TUEQgfCBBVDkxQ19FTUFDX0ZEKTsKLQkJfQotCi0JCXJldHVybiBUUlVFOwotCX0KLQotCXJldHVybiBGQUxTRTsKLX0KLQotCi0vKgotICogTmFtZToKLSAqCWx4dDk3Ml9Jbml0UGh5Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCU1BQyBzdGFydHMgY2hlY2tpbmcgaXRzIGxpbmsgYnkgdXNpbmcgcGFyYWxsZWwgZGV0ZWN0aW9uIGFuZAotICoJQXV0b25lZ290aWF0aW9uIGFuZCB0aGUgc2FtZSBpcyBzZXQgaW4gdGhlIE1BQyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogQXJndW1lbnRzOgotICoJcF9tYWMgLSBwb2ludGVyIHRvIHN0cnVjdCBBVDkxU19FTUFDCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKglUUlVFIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc2Z1bGx5Ci0gKglGQUxTRSAtIGlmIGxpbmsgc3RhdHVzIG5vdCBzZXQKLSAqLwotVUNIQVIgbHh0OTcyX0luaXRQaHkgKEFUOTFQU19FTUFDIHBfbWFjKQotewotCVVDSEFSIHJldCA9IFRSVUU7Ci0KLQlhdDkxcm05MjAwX0VtYWNFbmFibGVNRElPIChwX21hYyk7Ci0KLQlpZiAoIWx4dDk3Ml9HZXRMaW5rU3BlZWQgKHBfbWFjKSkgewotCQkvKiBUcnkgYW5vdGhlciB0aW1lICovCi0JCXJldCA9IGx4dDk3Ml9HZXRMaW5rU3BlZWQgKHBfbWFjKTsKLQl9Ci0KLQkvKiBEaXNhYmxlIFBIWSBJbnRlcnJ1cHRzICovCi0JYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkgKHBfbWFjLCBQSFlfTFhUOTcxX0lOVF9FTkFCTEUsIDApOwotCi0JYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKHBfbWFjKTsKLQotCXJldHVybiAocmV0KTsKLX0KLQotCi0vKgotICogTmFtZToKLSAqCWx4dDk3Ml9BdXRvTmVnb3RpYXRlCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUKLSAqCU1BQyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogQXJndW1lbnRzOgotICoJZGV2IC0gcG9pbnRlciB0byBzdHJ1Y3QgbmV0X2RldmljZQotICogUmV0dXJuIHZhbHVlOgotICoJVFJVRSAtIGlmIGxpbmsgc3RhdHVzIHNldCBzdWNjZXNzZnVsbHkKLSAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAotICovCi1VQ0hBUiBseHQ5NzJfQXV0b05lZ290aWF0ZSAoQVQ5MVBTX0VNQUMgcF9tYWMsIGludCAqc3RhdHVzKQotewotCXVuc2lnbmVkIHNob3J0IHZhbHVlOwotCi0JLyogU2V0IGx4dDk3MiBjb250cm9sIHJlZ2lzdGVyICovCi0JaWYgKCFhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChwX21hYywgTUlJX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIFJlc3RhcnQgQXV0b19uZWdvdGlhdGlvbiAgKi8KLQl2YWx1ZSB8PSBCTUNSX0FOUkVTVEFSVDsKLQlpZiAoIWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5IChwX21hYywgTUlJX0JNQ1IsICZ2YWx1ZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qY2hlY2sgQXV0b05lZ290aWF0ZSBjb21wbGV0ZSAqLwotCXVkZWxheSAoMTAwMDApOwotCWF0OTFybTkyMDBfRW1hY1JlYWRQaHkocF9tYWMsIE1JSV9CTVNSLCAmdmFsdWUpOwotCWlmICghKHZhbHVlICYgQk1TUl9BTkVHQ09NUExFVEUpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlyZXR1cm4gKGx4dDk3Ml9HZXRMaW5rU3BlZWQgKHBfbWFjKSk7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYJLyogQ09ORklHX0RSSVZFUl9FVEhFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9yZXNldC5jIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9yZXNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDVlYTJjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvcmVzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIExpbmVvLCBJbmMuIDx3d3cubGluZW8uY29tPgotICogQmVybmhhcmQgS3VobiA8Ymt1aG5AbGluZW8uY29tPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0KLXZvaWQgYm9hcmRfcmVzZXQodm9pZCkgX19hdHRyaWJ1dGVfXygoX193ZWFrX18pKTsKLQotLyoKLSAqIFJlc2V0IHRoZSBjcHUgYnkgc2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgYW5kIGxldCBoaW0gdGltZSBvdXQKLSAqIG9yIHRvZ2dsZSBhIEdQSU8gcGluIG9uIHRoZSBBVDkxUk05MjAwREsgYm9hcmQKLSAqLwotdm9pZCByZXNldF9jcHUgKHVsb25nIGlnbm9yZWQpCi17Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxUk05MjAwX1VTQVJUKQotCS8qc2h1dGRvd24gdGhlIGNvbnNvbGUgdG8gYXZvaWQgc3RyYW5nZSBjaGFycyBkdXJpbmcgcmVzZXQgKi8KLQlzZXJpYWxfZXhpdCgpOwotI2VuZGlmCi0KLQlpZiAoYm9hcmRfcmVzZXQpCi0JCWJvYXJkX3Jlc2V0KCk7Ci0KLQkvKiB0aGlzIGlzIHRoZSB3YXkgTGludXggZG9lcyBpdCAqLwotCi0JLyogRklYTUU6Ci0JICogVGhlc2UgZGVmaW5lcyBzaG91bGQgYmUgbW92ZWQgaW50bwotCSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvQVQ5MVJNOTIwMC5oCi0JICogYXMgc29vbiBhcyB0aGUgd2hpdGVzcGFjZSBmaXggZ2V0cyBhcHBsaWVkLgotCSAqLwotCSNkZWZpbmUgQVQ5MUNfU1RfUlNURU4gKDB4MSA8PCAxNikKLQkjZGVmaW5lIEFUOTFDX1NUX0VYVEVOICgweDEgPDwgMTcpCi0JI2RlZmluZSBBVDkxQ19TVF9XRFJTVCAoMHgxIDw8ICAwKQotCSNkZWZpbmUgU1RfV0RNUiAqKCh1bnNpZ25lZCBsb25nICopMHhmZmZmZmQwOCkJLyogd2F0Y2hkb2cgbW9kZSByZWdpc3RlciAqLwotCSNkZWZpbmUgU1RfQ1IgKigodW5zaWduZWQgbG9uZyAqKTB4ZmZmZmZkMDApCS8qIHN5c3RlbSBjbG9jayBjb250cm9sIHJlZ2lzdGVyICovCi0KLQlTVF9XRE1SID0gQVQ5MUNfU1RfUlNURU4gfCBBVDkxQ19TVF9FWFRFTiB8IDEgOwotCVNUX0NSID0gQVQ5MUNfU1RfV0RSU1Q7Ci0KLQl3aGlsZSAoMSk7Ci0JLyogTmV2ZXIgcmVhY2hlZCAqLwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9zcGkuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvc3BpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MGVmYzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9zcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKiBEcml2ZXIgZm9yIEFUTUVMIERhdGFGbGFzaCBzdXBwb3J0Ci0gKiBBdXRob3IgOiBIYW1pZCBJa2RvdW1pIChBdG1lbCkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotCi0jaWZkZWYgQ09ORklHX0hBU19EQVRBRkxBU0gKLSNpbmNsdWRlIDxkYXRhZmxhc2guaD4KLQotI2RlZmluZSBBVDkxQ19TUElfQ0xLCTEwMDAwMDAwCS8qIE1heCBWYWx1ZSA9IDEwTUh6IHRvIGJlIGNvbXBsaWFudCB0bwotCQkJCQl0aGUgQ29udGludW91cyBBcnJheSBSZWFkIGZ1bmN0aW9uICovCi0KLS8qIEFDIENoYXJhY3RlcmlzdGljcyAqLwotLyogRExZQlMgPSB0Q1NTID0gMjUwbnMgbWluIGFuZCBETFlCQ1QgPSB0Q1NIID0gMjUwbnMgKi8KLSNkZWZpbmUgREFUQUZMQVNIX1RDU1MJKDB4QyA8PCAxNikKLSNkZWZpbmUgREFUQUZMQVNIX1RDSFMJKDB4MSA8PCAyNCkKLQotI2RlZmluZSBBVDkxQ19USU1FT1VUX1dSRFkJCTIwMDAwMAotI2RlZmluZSBBVDkxQ19TUElfUENTMF9TRVJJQUxfREFUQUZMQVNICTB4RQkvKiBDaGlwIFNlbGVjdCAwOiBOUENTMCUxMTEwICovCi0jZGVmaW5lIEFUOTFDX1NQSV9QQ1MzX0RBVEFGTEFTSF9DQVJECTB4NwkvKiBDaGlwIFNlbGVjdCAzOiBOUENTMyUwMTExICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKglTUEkgRGF0YUZsYXNoIEluaXQJCQkJCSAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIEFUOTFGX1NwaUluaXQodm9pZCkKLXsKLQkvKiBDb25maWd1cmUgUElPcyAqLwotCUFUOTFDX0JBU0VfUElPQS0+UElPX0FTUiA9Ci0JCUFUOTFDX1BBM19OUENTMCB8IEFUOTFDX1BBNF9OUENTMSB8IEFUOTFDX1BBMV9NT1NJIHwKLQkJQVQ5MUNfUEE1X05QQ1MyIHwgQVQ5MUNfUEE2X05QQ1MzIHwgQVQ5MUNfUEEwX01JU08gfAotCQlBVDkxQ19QQTJfU1BDSzsKLQlBVDkxQ19CQVNFX1BJT0EtPlBJT19QRFIgPQotCQlBVDkxQ19QQTNfTlBDUzAgfCBBVDkxQ19QQTRfTlBDUzEgfCBBVDkxQ19QQTFfTU9TSSB8Ci0JCUFUOTFDX1BBNV9OUENTMiB8IEFUOTFDX1BBNl9OUENTMyB8IEFUOTFDX1BBMF9NSVNPIHwKLQkJQVQ5MUNfUEEyX1NQQ0s7Ci0JLyogRW5hYmxlIENMb2NrICovCi0JQVQ5MUNfQkFTRV9QTUMtPlBNQ19QQ0VSID0gMSA8PCBBVDkxQ19JRF9TUEk7Ci0KLQkvKiBSZXNldCB0aGUgU1BJICovCi0JQVQ5MUNfQkFTRV9TUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TV1JTVDsKLQotCS8qIENvbmZpZ3VyZSBTUEkgaW4gTWFzdGVyIE1vZGUgd2l0aCBObyBDUyBzZWxlY3RlZCAhISEgKi8KLQlBVDkxQ19CQVNFX1NQSS0+U1BJX01SID0KLQkJQVQ5MUNfU1BJX01TVFIgfCBBVDkxQ19TUElfTU9ERkRJUyB8IEFUOTFDX1NQSV9QQ1M7Ci0KLQkvKiBDb25maWd1cmUgQ1MwIGFuZCBDUzMgKi8KLQkqKEFUOTFDX1NQSV9DU1IgKyAwKSA9Ci0JCUFUOTFDX1NQSV9DUE9MIHwgKEFUOTFDX1NQSV9ETFlCUyAmIERBVEFGTEFTSF9UQ1NTKSB8Ci0JCShBVDkxQ19TUElfRExZQkNUICYgREFUQUZMQVNIX1RDSFMpIHwKLQkJKChBVDkxQ19NQVNURVJfQ0xPQ0sgLyAoMipBVDkxQ19TUElfQ0xLKSkgPDwgOCk7Ci0KLQkqKEFUOTFDX1NQSV9DU1IgKyAzKSA9Ci0JCUFUOTFDX1NQSV9DUE9MIHwgKEFUOTFDX1NQSV9ETFlCUyAmIERBVEFGTEFTSF9UQ1NTKSB8Ci0JCShBVDkxQ19TUElfRExZQkNUICYgREFUQUZMQVNIX1RDSFMpIHwKLQkJKChBVDkxQ19NQVNURVJfQ0xPQ0sgLyAoMipBVDkxQ19TUElfQ0xLKSkgPDwgOCk7Ci19Ci0KLXZvaWQgQVQ5MUZfU3BpRW5hYmxlKGludCBjcykKLXsKLQlzd2l0Y2goY3MpIHsKLQljYXNlIDA6CS8qIENvbmZpZ3VyZSBTUEkgQ1MwIGZvciBTZXJpYWwgRGF0YUZsYXNoIEFUNDVEQnh4ICovCi0JCUFUOTFDX0JBU0VfU1BJLT5TUElfTVIgJj0gMHhGRkYwRkZGRjsKLQkJQVQ5MUNfQkFTRV9TUEktPlNQSV9NUiB8PQotCQkJKChBVDkxQ19TUElfUENTMF9TRVJJQUxfREFUQUZMQVNIPDwxNikgJgotCQkJCUFUOTFDX1NQSV9QQ1MpOwotCQlicmVhazsKLQljYXNlIDM6CS8qIENvbmZpZ3VyZSBTUEkgQ1MzIGZvciBTZXJpYWwgRGF0YUZsYXNoIENhcmQgKi8KLQkJLyogU2V0IHVwIFBJTyBTRENfVFlQRSB0byBzd2l0Y2ggb24gRGF0YUZsYXNoIENhcmQgKi8KLQkJLyogYW5kIG5vdCBNTUMvU0RDYXJkICovCi0JCUFUOTFDX0JBU0VfUElPQi0+UElPX1BFUiA9Ci0JCQlBVDkxQ19QSU9fUEI3OwkvKiBTZXQgaW4gUElPIG1vZGUgKi8KLQkJQVQ5MUNfQkFTRV9QSU9CLT5QSU9fT0VSID0KLQkJCUFUOTFDX1BJT19QQjc7CS8qIENvbmZpZ3VyZSBpbiBvdXRwdXQgKi8KLQkJLyogQ2xlYXIgT3V0cHV0ICovCi0JCUFUOTFDX0JBU0VfUElPQi0+UElPX0NPRFIgPSBBVDkxQ19QSU9fUEI3OwotCQkvKiBDb25maWd1cmUgUENTICovCi0JCUFUOTFDX0JBU0VfU1BJLT5TUElfTVIgJj0gMHhGRkYwRkZGRjsKLQkJQVQ5MUNfQkFTRV9TUEktPlNQSV9NUiB8PQotCQkJKChBVDkxQ19TUElfUENTM19EQVRBRkxBU0hfQ0FSRDw8MTYpICYgQVQ5MUNfU1BJX1BDUyk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIFNQSV9FbmFibGUgKi8KLQlBVDkxQ19CQVNFX1NQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSUVOOyB9Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFxmbiAgICBBVDkxRl9TcGlXcml0ZQkJCQkJCSAgICAgKi8KLS8qIFxicmllZiBTZXQgdGhlIFBEQyByZWdpc3RlcnMgZm9yIGEgdHJhbnNmZXJ0CQkJCSAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXVuc2lnbmVkIGludCBBVDkxRl9TcGlXcml0ZSAoIEFUOTFQU19EYXRhZmxhc2hEZXNjIHBEZXNjICkKLXsKLQl1bnNpZ25lZCBpbnQgdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotCi0JcERlc2MtPnN0YXRlID0gQlVTWTsKLQotCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVHJhbnNtaXQgYW5kIFJlY2VpdmUgUG9pbnRlciAqLwotCUFUOTFDX0JBU0VfU1BJLT5TUElfUlBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+cnhfY21kX3B0IDsKLQlBVDkxQ19CQVNFX1NQSS0+U1BJX1RQUiA9ICh1bnNpZ25lZCBpbnQpcERlc2MtPnR4X2NtZF9wdCA7Ci0KLQkvKiBJbnRpYWxpemUgdGhlIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovCi0JQVQ5MUNfQkFTRV9TUEktPlNQSV9SQ1IgPSBwRGVzYy0+cnhfY21kX3NpemU7Ci0JQVQ5MUNfQkFTRV9TUEktPlNQSV9UQ1IgPSBwRGVzYy0+dHhfY21kX3NpemU7Ci0KLQlpZiAoIHBEZXNjLT50eF9kYXRhX3NpemUgIT0gMCApIHsKLQkJLyogSW5pdGlhbGl6ZSB0aGUgTmV4dCBUcmFuc21pdCBhbmQgTmV4dCBSZWNlaXZlIFBvaW50ZXIgKi8KLQkJQVQ5MUNfQkFTRV9TUEktPlNQSV9STlBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+cnhfZGF0YV9wdCA7Ci0JCUFUOTFDX0JBU0VfU1BJLT5TUElfVE5QUiA9ICh1bnNpZ25lZCBpbnQpcERlc2MtPnR4X2RhdGFfcHQgOwotCi0JCS8qIEludGlhbGl6ZSB0aGUgTmV4dCBUcmFuc21pdCBhbmQgTmV4dCBSZWNlaXZlIENvdW50ZXJzICovCi0JCUFUOTFDX0JBU0VfU1BJLT5TUElfUk5DUiA9IHBEZXNjLT5yeF9kYXRhX3NpemUgOwotCQlBVDkxQ19CQVNFX1NQSS0+U1BJX1ROQ1IgPSBwRGVzYy0+dHhfZGF0YV9zaXplIDsKLQl9Ci0KLQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLwotCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCXRpbWVvdXQgPSAwOwotCi0JQVQ5MUNfQkFTRV9TUEktPlNQSV9QVENSID0gQVQ5MUNfUERDX1RYVEVOICsgQVQ5MUNfUERDX1JYVEVOOwotCXdoaWxlKCEoQVQ5MUNfQkFTRV9TUEktPlNQSV9TUiAmIEFUOTFDX1NQSV9SWEJVRkYpICYmCi0JCSgodGltZW91dCA9IGdldF90aW1lcihzdGFydCkgKSA8IENPTkZJR19TWVNfU1BJX1dSSVRFX1RPVVQpKTsKLQlBVDkxQ19CQVNFX1NQSS0+U1BJX1BUQ1IgPSBBVDkxQ19QRENfVFhURElTICsgQVQ5MUNfUERDX1JYVERJUzsKLQlwRGVzYy0+c3RhdGUgPSBJRExFOwotCi0JaWYgKHRpbWVvdXQgPj0gQ09ORklHX1NZU19TUElfV1JJVEVfVE9VVCl7Ci0JCXByaW50ZigiRXJyb3IgVGltZW91dFxuXHIiKTsKLQkJcmV0dXJuIERBVEFGTEFTSF9FUlJPUjsKLQl9Ci0KLQlyZXR1cm4gREFUQUZMQVNIX09LOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL3RpbWVyLmMgYi9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTc0YjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIExpbmVvLCBJbmMuIDx3d3cubGluZW8uY29tPgotICogQmVybmhhcmQgS3VobiA8Ymt1aG5AbGluZW8uY29tPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotLyojaW5jbHVkZSA8YXNtL2lvLmg+Ki8KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotLyojaW5jbHVkZSA8YXNtL3Byb2MvcHRyYWNlLmg+Ki8KLQotLyogdGhlIG51bWJlciBvZiBjbG9ja3MgcGVyIENPTkZJR19TWVNfSFogKi8KLSNkZWZpbmUgVElNRVJfTE9BRF9WQUwgKENPTkZJR19TWVNfSFpfQ0xPQ0svQ09ORklHX1NZU19IWikKLQotLyogbWFjcm8gdG8gcmVhZCB0aGUgMTYgYml0IHRpbWVyICovCi0jZGVmaW5lIFJFQURfVElNRVIgKHRtci0+VENfQ1YgJiAweDAwMDBmZmZmKQotQVQ5MVBTX1RDIHRtcjsKLQotc3RhdGljIHVsb25nIHRpbWVzdGFtcDsKLXN0YXRpYyB1bG9uZyBsYXN0aW5jOwotCi1pbnQgdGltZXJfaW5pdCAodm9pZCkKLXsKLQl0bXIgPSBBVDkxQ19CQVNFX1RDMDsKLQotCS8qIGVuYWJsZXMgVEMxLjAgY2xvY2sgKi8KLQkqQVQ5MUNfUE1DX1BDRVIgPSAxIDw8IEFUOTFDX0lEX1RDMDsgIC8qIGVuYWJsZSBjbG9jayAqLwotCi0JKkFUOTFDX1RDQjBfQkNSID0gMDsKLQkqQVQ5MUNfVENCMF9CTVIgPSBBVDkxQ19UQ0JfVEMwWEMwU19OT05FIHwgQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSB8IEFUOTFDX1RDQl9UQzJYQzJTX05PTkU7Ci0JdG1yLT5UQ19DQ1IgPSBBVDkxQ19UQ19DTEtESVM7Ci0jZGVmaW5lIEFUOTFDX1RDX0NNUl9DUENUUkcgKDEgPDwgMTQpCi0JLyogc2V0IHRvIE1DTEsvMiBhbmQgcmVzdGFydCB0aGUgdGltZXIgd2hlbiB0aGUgdmxhdWUgaW4gVENfUkMgaXMgcmVhY2hlZCAqLwotCXRtci0+VENfQ01SID0gQVQ5MUNfVENfVElNRVJfRElWMV9DTE9DSyB8IEFUOTFDX1RDX0NNUl9DUENUUkc7Ci0KLQl0bXItPlRDX0lEUiA9IH4wdWw7Ci0JdG1yLT5UQ19SQyA9IFRJTUVSX0xPQURfVkFMOwotCWxhc3RpbmMgPSAwOwotCXRtci0+VENfQ0NSID0gQVQ5MUNfVENfU1dUUkcgfCBBVDkxQ19UQ19DTEtFTjsKLQl0aW1lc3RhbXAgPSAwOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cwotICovCi11bG9uZyBnZXRfdGltZXIgKHVsb25nIGJhc2UpCi17Ci0JcmV0dXJuIGdldF90aW1lcl9tYXNrZWQgKCkgLSBiYXNlOwotfQotCi12b2lkIF9fdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCi17Ci0JdWRlbGF5X21hc2tlZCh1c2VjKTsKLX0KLQotdWxvbmcgZ2V0X3RpbWVyX3JhdyAodm9pZCkKLXsKLQl1bG9uZyBub3cgPSBSRUFEX1RJTUVSOwotCi0JaWYgKG5vdyA+PSBsYXN0aW5jKSB7Ci0JCS8qIG5vcm1hbCBtb2RlICovCi0JCXRpbWVzdGFtcCArPSBub3cgLSBsYXN0aW5jOwotCX0gZWxzZSB7Ci0JCS8qIHdlIGhhdmUgYW4gb3ZlcmZsb3cgLi4uICovCi0JCXRpbWVzdGFtcCArPSBub3cgKyBUSU1FUl9MT0FEX1ZBTCAtIGxhc3RpbmM7Ci0JfQotCWxhc3RpbmMgPSBub3c7Ci0KLQlyZXR1cm4gdGltZXN0YW1wOwotfQotCi11bG9uZyBnZXRfdGltZXJfbWFza2VkICh2b2lkKQotewotCXJldHVybiBnZXRfdGltZXJfcmF3KCkvVElNRVJfTE9BRF9WQUw7Ci19Ci0KLXZvaWQgdWRlbGF5X21hc2tlZCAodW5zaWduZWQgbG9uZyB1c2VjKQotewotCXVsb25nIHRtbzsKLQl1bG9uZyBlbmR0aW1lOwotCXNpZ25lZCBsb25nIGRpZmY7Ci0KLQl0bW8gPSBDT05GSUdfU1lTX0haX0NMT0NLIC8gMTAwMDsKLQl0bW8gKj0gdXNlYzsKLQl0bW8gLz0gMTAwMDsKLQotCWVuZHRpbWUgPSBnZXRfdGltZXJfcmF3ICgpICsgdG1vOwotCi0JZG8gewotCQl1bG9uZyBub3cgPSBnZXRfdGltZXJfcmF3ICgpOwotCQlkaWZmID0gZW5kdGltZSAtIG5vdzsKLQl9IHdoaWxlIChkaWZmID49IDApOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlIChyZWFkIHRpbWViYXNlIGFzIGxvbmcgbG9uZykuCi0gKiBPbiBBUk0gaXQganVzdCByZXR1cm5zIHRoZSB0aW1lciB2YWx1ZS4KLSAqLwotdW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQotewotCXJldHVybiBnZXRfdGltZXIoMCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCi0gKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCi0gKi8KLXVsb25nIGdldF90YmNsayAodm9pZCkKLXsKLQl1bG9uZyB0YmNsazsKLQotCXRiY2xrID0gQ09ORklHX1NZU19IWjsKLQlyZXR1cm4gdGJjbGs7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL3VzYi5jIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC91c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIzNTVkYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL3VzYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNgotICogREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyA8bWtAZGVueC5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9ORVcpICYmIGRlZmluZWQoQ09ORklHX1NZU19VU0JfT0hDSV9DUFVfSU5JVCkKLSMgaWZkZWYgQ09ORklHX0FUOTFSTTkyMDAKLQotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0KLWludCB1c2JfY3B1X2luaXQodm9pZCkKLXsKLQkvKiBFbmFibGUgVVNCIGhvc3QgY2xvY2suICovCi0JKkFUOTFDX1BNQ19TQ0VSID0gQVQ5MUNfUE1DX1VIUDsJLyogNDhNSHogY2xvY2sgZW5hYmxlZCBmb3IgVUhQICovCi0JKkFUOTFDX1BNQ19QQ0VSID0gMSA8PCBBVDkxQ19JRF9VSFA7CS8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB1c2JfY3B1X3N0b3Aodm9pZCkKLXsKLQkvKiBJbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KLQkqQVQ5MUNfUE1DX1BDRFIgPSAxIDw8IEFUOTFDX0lEX1VIUDsJLyogUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovCi0JKkFUOTFDX1BNQ19TQ0RSID0gQVQ5MUNfUE1DX1VIUDsJLyogNDhNSHogY2xvY2sgZGlzYWJsZWQgZm9yIFVIUCAqLwotCXJldHVybiAwOwotfQotCi1pbnQgdXNiX2NwdV9pbml0X2ZhaWwodm9pZCkKLXsKLQlyZXR1cm4gdXNiX2NwdV9zdG9wKCk7Ci19Ci0KLSMgZW5kaWYgLyogQ09ORklHX0FUOTFSTTkyMDAgKi8KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1VTQl9PSENJX0NQVV9JTklUKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvY3B1LmMgYi9hcmNoL2FybS9jcHUvYXJtOTIwdC9jcHUuYwppbmRleCBiZTgyYzg3Li4zNGFkYjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9jcHUuYworKysgYi9hcmNoL2FybS9jcHUvYXJtOTIwdC9jcHUuYwpAQCAtMzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaWZkZWYgQ09ORklHX0FUOTFfTEVHQUNZCi0jd2FybmluZyBZb3VyIGJvYXJkIGlzIHVzaW5nIGxlZ2FjeSBBVDkxUk05MjAwIFNvQyBhY2Nlc3MuIFBsZWFzZSB1cGRhdGUhCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgY2FjaGVfZmx1c2godm9pZCk7CiAKIGludCBjbGVhbnVwX2JlZm9yZV9saW51eCAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2F0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCmluZGV4IDZiZGM3NWMuLjY1YjhkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJCWF0OTFfc2V0X2JfcGVyaXBoKEFUOTFfUElPX1BPUlRDLCA0LCAxKTsKIAl9CiAJaWYgKGNzX21hc2sgJiAoMSA8PCAzKSkgewotCQlhdDkxX3NldF9waW9fb3V0cHV0KEFUOTFfUElPX1BPUlRDLCAzLCAxKTsKKwkJYXQ5MV9zZXRfYl9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDMsIDEpOwogCX0KIAlpZiAoY3NfbWFzayAmICgxIDw8IDQpKSB7CiAJCWF0OTFfc2V0X3Bpb19vdXRwdXQoQVQ5MV9QSU9fUE9SVEIsIDMsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKaW5kZXggYjQzNTNlZi4uZWRjNzk3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYworKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2F0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCkBAIC0yMyw3NyArMjMsNzMgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorCisvKgorICogaWYgQ09ORklHX0FUOTFfR1BJT19QVUxMVVAgaXN0IHNldCwga2VlcCBwdWxsdXBzIG9uIG9uIGFsbAorICogcGVyaXBoZXJhbCBwaW5zLiBHb29kIHRvIGhhdmUgaWYgaGFyZHdhcmUgaXMgc29sZGVyZWQgb3B0aW9uYWxseQorICogb3IgaW4gY2FzZSBvZiBTUEkgbm8gc2xhdmUgaXMgc2VsZWN0ZWQuIEF2b2lkIGxpbmVzIHRvIGZsb2F0CisgKiBuZWVkbGVzc2x5LiBVc2UgYSBzaG9ydCBsb2NhbCBQVVAgZGVmaW5lLgorICoKKyAqIER1ZSB0byBlcnJhdGEgIlRYRCBmbG9hdHMgd2hlbiBDVFMgaXMgaW5hY3RpdmUiIHB1bGx1cHMgYXJlIGFsd2F5cworICogb24gZm9yIFRYRCBwaW5zLgorICovCisjaWZkZWYgQ09ORklHX0FUOTFfR1BJT19QVUxMVVAKKyMgZGVmaW5lIFBVUCBDT05GSUdfQVQ5MV9HUElPX1BVTExVUAorI2Vsc2UKKyMgZGVmaW5lIFBVUCAwCisjZW5kaWYKIAogdm9pZCBhdDkxX3NlcmlhbDBfaHdfaW5pdCh2b2lkKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKIAlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQywgOCwgMSk7CQkvKiBUWEQwICovCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDksIDApOwkJLyogUlhEMCAqLwotCXdyaXRlbCgxIDw8IEFUOTFTQU05MjYxX0lEX1VTMCwgJnBtYy0+cGNlcik7CisJd3JpdGVsKDEgPDwgQVRNRUxfSURfVVNBUlQwLCAmcG1jLT5wY2VyKTsKIH0KIAogdm9pZCBhdDkxX3NlcmlhbDFfaHdfaW5pdCh2b2lkKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKIAlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQywgMTIsIDEpOwkJLyogVFhEMSAqLwogCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRDLCAxMywgMCk7CQkvKiBSWEQxICovCi0Jd3JpdGVsKDEgPDwgQVQ5MVNBTTkyNjFfSURfVVMxLCAmcG1jLT5wY2VyKTsKKwl3cml0ZWwoMSA8PCBBVE1FTF9JRF9VU0FSVDEsICZwbWMtPnBjZXIpOwogfQogCiB2b2lkIGF0OTFfc2VyaWFsMl9od19pbml0KHZvaWQpCiB7Ci0JYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVQ5MV9QTUNfQkFTRTsKKwlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVE1FTF9CQVNFX1BNQzsKIAogCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRDLCAxNCwgMSk7CQkvKiBUWEQyICovCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDE1LCAwKTsJCS8qIFJYRDIgKi8KLQl3cml0ZWwoMSA8PCBBVDkxU0FNOTI2MV9JRF9VUzIsICZwbWMtPnBjZXIpOworCXdyaXRlbCgxIDw8IEFUTUVMX0lEX1VTQVJUMiwgJnBtYy0+cGNlcik7CiB9CiAKLXZvaWQgYXQ5MV9zZXJpYWwzX2h3X2luaXQodm9pZCkKK3ZvaWQgYXQ5MV9zZXJpYWxkX2h3X2luaXQodm9pZCkKIHsKLQlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVDkxX1BNQ19CQVNFOworCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDksIDApOwkJLyogRFJYRCAqLwogCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAxMCwgMSk7CQkvKiBEVFhEICovCi0Jd3JpdGVsKDEgPDwgQVQ5MV9JRF9TWVMsICZwbWMtPnBjZXIpOworCXdyaXRlbCgxIDw8IEFUTUVMX0lEX1NZUywgJnBtYy0+cGNlcik7CiB9CiAKLXZvaWQgYXQ5MV9zZXJpYWxfaHdfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19VU0FSVDAKLQlhdDkxX3NlcmlhbDBfaHdfaW5pdCgpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNBUlQxCi0JYXQ5MV9zZXJpYWwxX2h3X2luaXQoKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQVJUMgotCWF0OTFfc2VyaWFsMl9od19pbml0KCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0FSVDMJLyogREJHVSAqLwotCWF0OTFfc2VyaWFsM19od19pbml0KCk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIENPTkZJR19IQVNfREFUQUZMQVNICisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0RBVEFGTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1BJKQogdm9pZCBhdDkxX3NwaTBfaHdfaW5pdCh1bnNpZ25lZCBsb25nIGNzX21hc2spCiB7Ci0JYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVQ5MV9QTUNfQkFTRTsKKwlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVE1FTF9CQVNFX1BNQzsKIAotCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDEsIDApOwkvKiBTUEkwX01PU0kgKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMiwgMCk7CS8qIFNQSTBfU1BDSyAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAwLCBQVVApOwkvKiBTUEkwX01JU08gKi8KKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMSwgUFVQKTsJLyogU1BJMF9NT1NJICovCisJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDIsIFBVUCk7CS8qIFNQSTBfU1BDSyAqLwogCiAJLyogRW5hYmxlIGNsb2NrICovCi0Jd3JpdGVsKDEgPDwgQVQ5MVNBTTkyNjFfSURfU1BJMCwgJnBtYy0+cGNlcik7CisJd3JpdGVsKDEgPDwgQVRNRUxfSURfU1BJMCwgJnBtYy0+cGNlcik7CiAKIAlpZiAoY3NfbWFzayAmICgxIDw8IDApKSB7CiAJCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAzLCAxKTsKQEAgLTEyMywxNCArMTE5LDE0IEBACiAKIHZvaWQgYXQ5MV9zcGkxX2h3X2luaXQodW5zaWduZWQgbG9uZyBjc19tYXNrKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQiwgMzAsIDApOwkvKiBTUEkxX01JU08gKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQiwgMzEsIDApOwkvKiBTUEkxX01PU0kgKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQiwgMjksIDApOwkvKiBTUEkxX1NQQ0sgKi8KKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQiwgMzAsIFBVUCk7CS8qIFNQSTFfTUlTTyAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRCLCAzMSwgUFVQKTsJLyogU1BJMV9NT1NJICovCisJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEIsIDI5LCBQVVApOwkvKiBTUEkxX1NQQ0sgKi8KIAogCS8qIEVuYWJsZSBjbG9jayAqLwotCXdyaXRlbCgxIDw8IEFUOTFTQU05MjYxX0lEX1NQSTEsICZwbWMtPnBjZXIpOworCXdyaXRlbCgxIDw8IEFUTUVMX0lEX1NQSTEsICZwbWMtPnBjZXIpOwogCiAJaWYgKGNzX21hc2sgJiAoMSA8PCAwKSkgewogCQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQiwgMjgsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKaW5kZXggMTVlODgwYS4uNmViMGYzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYworKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2F0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCkBAIC0yOCwxNyArMjgsMzEgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisvKgorICogaWYgQ09ORklHX0FUOTFfR1BJT19QVUxMVVAgaXN0IHNldCwga2VlcCBwdWxsdXBzIG9uIG9uIGFsbAorICogcGVyaXBoZXJhbCBwaW5zLiBHb29kIHRvIGhhdmUgaWYgaGFyZHdhcmUgaXMgc29sZGVyZWQgb3B0aW9uYWxseQorICogb3IgaW4gY2FzZSBvZiBTUEkgbm8gc2xhdmUgaXMgc2VsZWN0ZWQuIEF2b2lkIGxpbmVzIHRvIGZsb2F0CisgKiBuZWVkbGVzc2x5LiBVc2UgYSBzaG9ydCBsb2NhbCBQVVAgZGVmaW5lLgorICoKKyAqIER1ZSB0byBlcnJhdGEgIlRYRCBmbG9hdHMgd2hlbiBDVFMgaXMgaW5hY3RpdmUiIHB1bGx1cHMgYXJlIGFsd2F5cworICogb24gZm9yIFRYRCBwaW5zLgorICovCisjaWZkZWYgQ09ORklHX0FUOTFfR1BJT19QVUxMVVAKKyMgZGVmaW5lIFBVUCBDT05GSUdfQVQ5MV9HUElPX1BVTExVUAorI2Vsc2UKKyMgZGVmaW5lIFBVUCAwCisjZW5kaWYKIAogdm9pZCBhdDkxX3NlcmlhbDBfaHdfaW5pdCh2b2lkKQogewogCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDI2LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjcsIDApOwkJLyogUlhEMCAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAyNywgUFVQKTsJCS8qIFJYRDAgKi8KIAl3cml0ZWwoMSA8PCBBVE1FTF9JRF9VU0FSVDAsICZwbWMtPnBjZXIpOwogfQogCkBAIC00Nyw3ICs2MSw3IEBACiAJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKIAlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JURCwgMCwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEQsIDEsIDApOwkJLyogUlhEMSAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRELCAxLCBQVVApOwkJLyogUlhEMSAqLwogCXdyaXRlbCgxIDw8IEFUTUVMX0lEX1VTQVJUMSwgJnBtYy0+cGNlcik7CiB9CiAKQEAgLTU2LDcgKzcwLDcgQEAKIAlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVE1FTF9CQVNFX1BNQzsKIAogCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRELCAyLCAxKTsJCS8qIFRYRDIgKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JURCwgMywgMCk7CQkvKiBSWEQyICovCisJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEQsIDMsIFBVUCk7CQkvKiBSWEQyICovCiAJd3JpdGVsKDEgPDwgQVRNRUxfSURfVVNBUlQyLCAmcG1jLT5wY2VyKTsKIH0KIApAQCAtNjQsNyArNzgsNyBAQAogewogCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDMwLCAwKTsJCS8qIERSWEQgKi8KKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQywgMzAsIFBVUCk7CQkvKiBEUlhEICovCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDMxLCAxKTsJCS8qIERUWEQgKi8KIAl3cml0ZWwoMSA8PCBBVE1FTF9JRF9TWVMsICZwbWMtPnBjZXIpOwogfQpAQCAtNzQsOSArODgsOSBAQAogewogCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCi0JYXQ5MV9zZXRfYl9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDAsIDApOwkvKiBTUEkwX01JU08gKi8KLQlhdDkxX3NldF9iX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCWF0OTFfc2V0X2JfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAyLCAwKTsJLyogU1BJMF9TUENLICovCisJYXQ5MV9zZXRfYl9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDAsIFBVUCk7CS8qIFNQSTBfTUlTTyAqLworCWF0OTFfc2V0X2JfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAxLCBQVVApOwkvKiBTUEkwX01PU0kgKi8KKwlhdDkxX3NldF9iX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMiwgUFVQKTsJLyogU1BJMF9TUENLICovCiAKIAkvKiBFbmFibGUgY2xvY2sgKi8KIAl3cml0ZWwoMSA8PCBBVE1FTF9JRF9TUEkwLCAmcG1jLT5wY2VyKTsKQEAgLTExMSw5ICsxMjUsOSBAQAogewogCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEIsIDEyLCAwKTsJLyogU1BJMV9NSVNPICovCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEIsIDEzLCAwKTsJLyogU1BJMV9NT1NJICovCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEIsIDE0LCAwKTsJLyogU1BJMV9TUENLICovCisJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEIsIDEyLCBQVVApOwkvKiBTUEkxX01JU08gKi8KKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQiwgMTMsIFBVUCk7CS8qIFNQSTFfTU9TSSAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRCLCAxNCwgUFVQKTsJLyogU1BJMV9TUENLICovCiAKIAkvKiBFbmFibGUgY2xvY2sgKi8KIAl3cml0ZWwoMSA8PCBBVE1FTF9JRF9TUEkxLCAmcG1jLT5wY2VyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwppbmRleCA0ZjU3MGY0Li5iMGExNjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2F0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCkBAIC0yMyw3NyArMjMsNzMgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorCisvKgorICogaWYgQ09ORklHX0FUOTFfR1BJT19QVUxMVVAgaXN0IHNldCwga2VlcCBwdWxsdXBzIG9uIG9uIGFsbAorICogcGVyaXBoZXJhbCBwaW5zLiBHb29kIHRvIGhhdmUgaWYgaGFyZHdhcmUgaXMgc29sZGVyZWQgb3B0aW9uYWxseQorICogb3IgaW4gY2FzZSBvZiBTUEkgbm8gc2xhdmUgaXMgc2VsZWN0ZWQuIEF2b2lkIGxpbmVzIHRvIGZsb2F0CisgKiBuZWVkbGVzc2x5LiBVc2UgYSBzaG9ydCBsb2NhbCBQVVAgZGVmaW5lLgorICoKKyAqIER1ZSB0byBlcnJhdGEgIlRYRCBmbG9hdHMgd2hlbiBDVFMgaXMgaW5hY3RpdmUiIHB1bGx1cHMgYXJlIGFsd2F5cworICogb24gZm9yIFRYRCBwaW5zLgorICovCisjaWZkZWYgQ09ORklHX0FUOTFfR1BJT19QVUxMVVAKKyMgZGVmaW5lIFBVUCBDT05GSUdfQVQ5MV9HUElPX1BVTExVUAorI2Vsc2UKKyMgZGVmaW5lIFBVUCAwCisjZW5kaWYKIAogdm9pZCBhdDkxX3NlcmlhbDBfaHdfaW5pdCh2b2lkKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKIAlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgNiwgMSk7CQkvKiBUWEQwICovCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDcsIDApOwkJLyogUlhEMCAqLwotCXdyaXRlbCgxIDw8IEFUOTFTQU05UkxfSURfVVMwLCAmcG1jLT5wY2VyKTsKKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgNywgUFVQKTsJCS8qIFJYRDAgKi8KKwl3cml0ZWwoMSA8PCBBVE1FTF9JRF9VU0FSVDAsICZwbWMtPnBjZXIpOwogfQogCiB2b2lkIGF0OTFfc2VyaWFsMV9od19pbml0KHZvaWQpCiB7Ci0JYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVQ5MV9QTUNfQkFTRTsKKwlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVE1FTF9CQVNFX1BNQzsKIAogCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAxMSwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDEyLCAwKTsJCS8qIFJYRDEgKi8KLQl3cml0ZWwoMSA8PCBBVDkxU0FNOVJMX0lEX1VTMSwgJnBtYy0+cGNlcik7CisJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDEyLCBQVVApOwkJLyogUlhEMSAqLworCXdyaXRlbCgxIDw8IEFUTUVMX0lEX1VTQVJUMSwgJnBtYy0+cGNlcik7CiB9CiAKIHZvaWQgYXQ5MV9zZXJpYWwyX2h3X2luaXQodm9pZCkKIHsKLQlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVDkxX1BNQ19CQVNFOworCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDEzLCAxKTsJCS8qIFRYRDIgKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMTQsIDApOwkJLyogUlhEMiAqLwotCXdyaXRlbCgxIDw8IEFUOTFTQU05UkxfSURfVVMyLCAmcG1jLT5wY2VyKTsKKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMTQsIFBVUCk7CQkvKiBSWEQyICovCisJd3JpdGVsKDEgPDwgQVRNRUxfSURfVVNBUlQyLCAmcG1jLT5wY2VyKTsKIH0KIAotdm9pZCBhdDkxX3NlcmlhbDNfaHdfaW5pdCh2b2lkKQordm9pZCBhdDkxX3NlcmlhbGRfaHdfaW5pdCh2b2lkKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjEsIDApOwkJLyogRFJYRCAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAyMSwgUFVQKTsJCS8qIERSWEQgKi8KIAlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjIsIDEpOwkJLyogRFRYRCAqLwotCXdyaXRlbCgxIDw8IEFUOTFfSURfU1lTLCAmcG1jLT5wY2VyKTsKKwl3cml0ZWwoMSA8PCBBVE1FTF9JRF9TWVMsICZwbWMtPnBjZXIpOwogfQogCi12b2lkIGF0OTFfc2VyaWFsX2h3X2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfVVNBUlQwCi0JYXQ5MV9zZXJpYWwwX2h3X2luaXQoKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQVJUMQotCWF0OTFfc2VyaWFsMV9od19pbml0KCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0FSVDIKLQlhdDkxX3NlcmlhbDJfaHdfaW5pdCgpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNBUlQzCS8qIERCR1UgKi8KLQlhdDkxX3NlcmlhbDNfaHdfaW5pdCgpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBDT05GSUdfSEFTX0RBVEFGTEFTSAorI2lmIGRlZmluZWQoQ09ORklHX0hBU19EQVRBRkxBU0gpIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1NQSSkKIHZvaWQgYXQ5MV9zcGkwX2h3X2luaXQodW5zaWduZWQgbG9uZyBjc19tYXNrKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjUsIDApOwkvKiBTUEkwX01JU08gKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjYsIDApOwkvKiBTUEkwX01PU0kgKi8KLQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjcsIDApOwkvKiBTUEkwX1NQQ0sgKi8KKwlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjUsIFBVUCk7CS8qIFNQSTBfTUlTTyAqLworCWF0OTFfc2V0X2FfcGVyaXBoKEFUOTFfUElPX1BPUlRBLCAyNiwgUFVQKTsJLyogU1BJMF9NT1NJICovCisJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEEsIDI3LCBQVVApOwkvKiBTUEkwX1NQQ0sgKi8KIAogCS8qIEVuYWJsZSBjbG9jayAqLwotCXdyaXRlbCgxIDw8IEFUOTFTQU05UkxfSURfU1BJLCAmcG1jLT5wY2VyKTsKKwl3cml0ZWwoMSA8PCBBVE1FTF9JRF9TUEksICZwbWMtPnBjZXIpOwogCiAJaWYgKGNzX21hc2sgJiAoMSA8PCAwKSkgewogCQlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQSwgMjgsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2xvd2xldmVsX2luaXQuUyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvYXQ5MS9sb3dsZXZlbF9pbml0LlMKaW5kZXggMTdmZjBkZC4uZDEwMjE5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9hdDkxL2xvd2xldmVsX2luaXQuUworKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2F0OTEvbG93bGV2ZWxfaW5pdC5TCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc21jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9yc3RjLmg+Ci0jaWZkZWYgQ09ORklHX0FUOTFfTEVHQUNZCisjaWZkZWYgQ09ORklHX0FUTUVMX0xFR0FDWQogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05X21hdHJpeC5oPgogI2VuZGlmCiAjaWZuZGVmIENPTkZJR19TWVNfTUFUUklYX0VCSUNTQV9WQUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbWI4NnIweC9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbWI4NnIweC9NYWtlZmlsZQppbmRleCBiYWIwNDhiLi45NzRkMGJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL21iODZyMHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9tYjg2cjB4L01ha2VmaWxlCkBAIC0zNyw2ICszNyw4IEBACiAkKExJQik6CSQoT0JKUykKIAkkKGNhbGwgY21kX2xpbmtfb190YXJnZXQsICQoT0JKUykpCiAKKyQoT0JKUykgOiAkKFRPUERJUikvaW5jbHVkZS9hc20vYXJjaC9hc20tb2Zmc2V0cy5oCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL21iODZyMHgvYXNtLW9mZnNldHMuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbWI4NnIweC9hc20tb2Zmc2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOWM3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL21iODZyMHgvYXNtLW9mZnNldHMuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogQWRhcHRlZCBmcm9tIExpbnV4IHYyLjYuMzYga2VybmVsOiBhcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgdXNlZCB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkKKyAqIGFzc2VtYmx5IGxhbmd1YWdlIG1vZHVsZXMuCisgKgorICogV2UgdXNlIHRoZSB0ZWNobmlxdWUgdXNlZCBpbiB0aGUgT1NGIE1hY2gga2VybmVsIGNvZGU6CisgKiBnZW5lcmF0ZSBhc20gc3RhdGVtZW50cyBjb250YWluaW5nICNkZWZpbmVzLAorICogY29tcGlsZSB0aGlzIGZpbGUgdG8gYXNzZW1ibGVyLCBhbmQgdGhlbiBleHRyYWN0IHRoZQorICogI2RlZmluZXMgZnJvbSB0aGUgYXNzZW1ibHktbGFuZ3VhZ2Ugb3V0cHV0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21iODZyMHguaD4KKworI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgorCitpbnQgbWFpbih2b2lkKQoreworCS8qIGRkcjIgY29udHJvbGxlciAqLworCURFRklORShERFIyX0RSSUMsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2RkcjJjLCBkcmljKSk7CisJREVGSU5FKEREUjJfRFJJQzEsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2RkcjJjLCBkcmljMSkpOworCURFRklORShERFIyX0RSSUMyLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9kZHIyYywgZHJpYzIpKTsKKwlERUZJTkUoRERSMl9EUkNBLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9kZHIyYywgZHJjYSkpOworCURFRklORShERFIyX0RSQ00sIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2RkcjJjLCBkcmNtKSk7CisJREVGSU5FKEREUjJfRFJDU1QxLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9kZHIyYywgZHJjc3QxKSk7CisJREVGSU5FKEREUjJfRFJDU1QyLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9kZHIyYywgZHJjc3QyKSk7CisJREVGSU5FKEREUjJfRFJDUiwgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfZGRyMmMsIGRyY3IpKTsKKwlERUZJTkUoRERSMl9EUkNGLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9kZHIyYywgZHJjZikpOworCURFRklORShERFIyX0RSQVNSLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9kZHIyYywgZHJhc3IpKTsKKwlERUZJTkUoRERSMl9EUklNUywgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfZGRyMmMsIGRyaW1zKSk7CisJREVGSU5FKEREUjJfRFJPUywgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfZGRyMmMsIGRyb3MpKTsKKwlERUZJTkUoRERSMl9EUklCU09EVDEsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2RkcjJjLCBkcmlic29kdDEpKTsKKwlERUZJTkUoRERSMl9EUk9BQkEsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2RkcjJjLCBkcm9hYmEpKTsKKwlERUZJTkUoRERSMl9EUk9CUywgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfZGRyMmMsIGRyb2JzKSk7CisKKwkvKiBjbG9jayByZXNldCBnZW5lcmF0b3IgKi8KKwlERUZJTkUoQ1JHX0NSUFIsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2NyZywgY3JwcikpOworCURFRklORShDUkdfQ1JIQSwgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfY3JnLCBjcmhhKSk7CisJREVGSU5FKENSR19DUlBBLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9jcmcsIGNycGEpKTsKKwlERUZJTkUoQ1JHX0NSUEIsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X2NyZywgY3JwYikpOworCURFRklORShDUkdfQ1JIQiwgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfY3JnLCBjcmhiKSk7CisJREVGSU5FKENSR19DUkFNLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9jcmcsIGNyYW0pKTsKKworCS8qIGNoaXAgY29udHJvbCBtb2R1bGUgKi8KKwlERUZJTkUoQ0NOVF9DRENSQywgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfY2NudCwgY2RjcmMpKTsKKworCS8qIGV4dGVybmFsIGJ1cyBpbnRlcmZhY2UgKi8KKwlERUZJTkUoTUVNQ19NQ0ZNT0RFMCwgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfbWVtYywgbWNmbW9kZVswXSkpOworCURFRklORShNRU1DX01DRk1PREUyLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9tZW1jLCBtY2Ztb2RlWzJdKSk7CisJREVGSU5FKE1FTUNfTUNGTU9ERTQsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X21lbWMsIG1jZm1vZGVbNF0pKTsKKwlERUZJTkUoTUVNQ19NQ0ZUSU0wLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9tZW1jLCBtY2Z0aW1bMF0pKTsKKwlERUZJTkUoTUVNQ19NQ0ZUSU0yLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9tZW1jLCBtY2Z0aW1bMl0pKTsKKwlERUZJTkUoTUVNQ19NQ0ZUSU00LCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9tZW1jLCBtY2Z0aW1bNF0pKTsKKwlERUZJTkUoTUVNQ19NQ0ZBUkVBMCwgb2Zmc2V0b2Yoc3RydWN0IG1iODZyMHhfbWVtYywgbWNmYXJlYVswXSkpOworCURFRklORShNRU1DX01DRkFSRUEyLCBvZmZzZXRvZihzdHJ1Y3QgbWI4NnIweF9tZW1jLCBtY2ZhcmVhWzJdKSk7CisJREVGSU5FKE1FTUNfTUNGQVJFQTQsIG9mZnNldG9mKHN0cnVjdCBtYjg2cjB4X21lbWMsIG1jZmFyZWFbNF0pKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L2FybXY3L01ha2VmaWxlCmluZGV4IDI5OTc5MmEuLjkyYTVhOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDEyIEBACiBMSUIJPSAkKG9iailsaWIkKENQVSkubwogCiBTVEFSVAk6PSBzdGFydC5vCi1DT0JKUwk6PSBjcHUubyBjYWNoZV92Ny5vCisKK2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECitDT0JKUwkrPSBjYWNoZV92Ny5vCitDT0JKUwkrPSBjcHUubworZW5kaWYKKwogQ09CSlMgICs9IHN5c2xpYi5vCiAKIFNSQ1MJOj0gJChTVEFSVDoubz0uUykgJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9jcHUuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9jcHUuYwppbmRleCBkZWY5Y2VkLi4wOTFlM2UwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvY3B1LmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L2NwdS5jCkBAIC0zNyw2ICszNywxMyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9hcm12Ny5oPgogCit2b2lkIHNhdmVfYm9vdF9wYXJhbXNfZGVmYXVsdCh1MzIgcjAsIHUzMiByMSwgdTMyIHIyLCB1MzIgcjMpCit7Cit9CisKK3ZvaWQgc2F2ZV9ib290X3BhcmFtcyh1MzIgcjAsIHUzMiByMSwgdTMyIHIyLCB1MzIgcjMpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoInNhdmVfYm9vdF9wYXJhbXNfZGVmYXVsdCIpKSk7CisKIGludCBjbGVhbnVwX2JlZm9yZV9saW51eCh2b2lkKQogewogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vTWFrZWZpbGUgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vTWFrZWZpbGUKaW5kZXggZGMwMWVlNS4uZWE5ZjhlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsMTIgQEAKIFNPQkpTCTo9IHJlc2V0Lm8KIAogQ09CSlMJOj0gdGltZXIubworQ09CSlMJKz0gdXRpbHMubworQ09CSlMJKz0gZ3Bpby5vCisKK2lmZGVmIENPTkZJR19TUExfQlVJTEQKK0NPQkpTCSs9IHNwbC5vCitlbmRpZgogCiBTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9ncGlvLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vZ3Bpby5jCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9ncGlvLmMKcmVuYW1lIHRvIGFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9ncGlvLmMKaW5kZXggYWViNjA2Ni4uZjRjMzQ3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAzL2dwaW8uYworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vZ3Bpby5jCkBAIC0zNiwyNCArMzYsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2dwaW8uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAotc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzM0eHhbNl0gPSB7Ci0JeyAodm9pZCAqKU9NQVAzNFhYX0dQSU8xX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKLQl7ICh2b2lkICopT01BUDM0WFhfR1BJTzJfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgKHZvaWQgKilPTUFQMzRYWF9HUElPM19CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyAodm9pZCAqKU9NQVAzNFhYX0dQSU80X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKLQl7ICh2b2lkICopT01BUDM0WFhfR1BJTzVfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgKHZvaWQgKilPTUFQMzRYWF9HUElPNl9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fYmFuayAqZ3Bpb19iYW5rID0gJmdwaW9fYmFua18zNHh4WzBdOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2JhbmsgKmdldF9ncGlvX2JhbmsoaW50IGdwaW8pCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmdldF9ncGlvX2JhbmsoaW50IGdwaW8pCiB7Ci0JcmV0dXJuICZncGlvX2JhbmtbZ3BpbyA+PiA1XTsKKwlyZXR1cm4gJm9tYXBfZ3Bpb19iYW5rW2dwaW8gPj4gNV07CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9ncGlvX2luZGV4KGludCBncGlvKQpAQCAtNzksMTQgKzY4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBpc19pbnB1dCkKK3N0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kaXJlY3Rpb24oY29uc3Qgc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sCisJCQkJaW50IGlzX2lucHV0KQogewogCXZvaWQgKnJlZyA9IGJhbmstPmJhc2U7CiAJdTMyIGw7CiAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKLQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fT0U7CisJCXJlZyArPSBPTUFQX0dQSU9fT0U7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybjsKQEAgLTEwMSw3ICs5MSw3IEBACiAKIHZvaWQgb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oaW50IGdwaW8sIGludCBpc19pbnB1dCkKIHsKLQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOworCWNvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmJhbms7CiAKIAlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCiAJCXJldHVybjsKQEAgLTEwOSw3ICs5OSw4IEBACiAJX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgaXNfaW5wdXQpOwogfQogCi1zdGF0aWMgdm9pZCBfc2V0X2dwaW9fZGF0YW91dChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbywgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kYXRhb3V0KGNvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLAorCQkJCWludCBlbmFibGUpCiB7CiAJdm9pZCAqcmVnID0gYmFuay0+YmFzZTsKIAl1MzIgbCA9IDA7CkBAIC0xMTcsOSArMTA4LDkgQEAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJaWYgKGVuYWJsZSkKLQkJCXJlZyArPSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQ7CisJCQlyZWcgKz0gT01BUF9HUElPX1NFVERBVEFPVVQ7CiAJCWVsc2UKLQkJCXJlZyArPSBPTUFQMjRYWF9HUElPX0NMRUFSREFUQU9VVDsKKwkJCXJlZyArPSBPTUFQX0dQSU9fQ0xFQVJEQVRBT1VUOwogCQlsID0gMSA8PCBncGlvOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTMyLDcgKzEyMyw3IEBACiAKIHZvaWQgb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGludCBncGlvLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJY29uc3Qgc3RydWN0IGdwaW9fYmFuayAqYmFuazsKIAogCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKIAkJcmV0dXJuOwpAQCAtMTQyLDcgKzEzMyw3IEBACiAKIGludCBvbWFwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3BpbykKIHsKLQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOworCWNvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmJhbms7CiAJdm9pZCAqcmVnOwogCiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQpAQCAtMTUxLDcgKzE0Miw3IEBACiAJcmVnID0gYmFuay0+YmFzZTsKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKLQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fREFUQUlOOworCQlyZWcgKz0gT01BUF9HUElPX0RBVEFJTjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjAsNyArMTUxLDcgQEAKIAkJCSYgKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpKSAhPSAwOwogfQogCi1zdGF0aWMgdm9pZCBfcmVzZXRfZ3BpbyhzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbykKK3N0YXRpYyB2b2lkIF9yZXNldF9ncGlvKGNvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvKQogewogCV9zZXRfZ3Bpb19kaXJlY3Rpb24oYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIDEpOwogfQpAQCAtMTc1LDcgKzE2Niw3IEBACiAKIHZvaWQgb21hcF9mcmVlX2dwaW8oaW50IGdwaW8pCiB7Ci0Jc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKwljb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwogCiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vc3BsLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vc3BsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3NzY1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9zcGwuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vdS1ib290Lmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8bW1jLmg+CisjaW5jbHVkZSA8ZmF0Lmg+CisjaW5jbHVkZSA8dGltZXN0YW1wX2F1dG9nZW5lcmF0ZWQuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uX2F1dG9nZW5lcmF0ZWQuaD4KKyNpbmNsdWRlIDxhc20vb21hcF9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWNfaG9zdF9kZWYuaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxpbWFnZS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworLyogRGVmaW5lIGdsb2JhbCBkYXRhIHN0cnVjdHVyZSBwb2ludGVyIHRvIGl0Ki8KK3N0YXRpYyBnZF90IGdkYXRhIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuZGF0YSIpKSk7CitzdGF0aWMgYmRfdCBiZGF0YSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmRhdGEiKSkpOworc3RhdGljIGNvbnN0IGNoYXIgKmltYWdlX25hbWU7CitzdGF0aWMgdTggaW1hZ2Vfb3M7CitzdGF0aWMgdTMyIGltYWdlX2xvYWRfYWRkcjsKK3N0YXRpYyB1MzIgaW1hZ2VfZW50cnlfcG9pbnQ7CitzdGF0aWMgdTMyIGltYWdlX3NpemU7CisKK2lubGluZSB2b2lkIGhhbmcodm9pZCkKK3sKKwlwdXRzKCIjIyMgRVJST1IgIyMjIFBsZWFzZSBSRVNFVCB0aGUgYm9hcmQgIyMjXG4iKTsKKwlmb3IgKDs7KQorCQk7Cit9CisKK3ZvaWQgYm9hcmRfaW5pdF9mKHVsb25nIGR1bW15KQoreworCS8qCisJICogV2UgY2FsbCByZWxvY2F0ZV9jb2RlKCkgd2l0aCByZWxvY2F0aW9uIHRhcmdldCBzYW1lIGFzIHRoZQorCSAqIENPTkZJR19TWVNfU1BMX1RFWFRfQkFTRS4gVGhpcyB3aWxsIHJlc3VsdCBpbiByZWxvY2F0aW9uIGdldHRpbmcKKwkgKiBza2lwcGVkLiBJbnN0ZWFkLCBvbmx5IC5ic3MgaW5pdGlhbGl6YXRpb24gd2lsbCBoYXBwZW4uIFRoYXQncworCSAqIGFsbCB3ZSBuZWVkCisJICovCisJZGVidWcoIj4+Ym9hcmRfaW5pdF9mKClcbiIpOworCXJlbG9jYXRlX2NvZGUoQ09ORklHX1NQTF9TVEFDSywgJmdkYXRhLCBDT05GSUdfU1BMX1RFWFRfQkFTRSk7Cit9CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19NTUMKK2ludCBib2FyZF9tbWNfaW5pdChiZF90ICpiaXMpCit7CisJc3dpdGNoIChvbWFwX2Jvb3RfZGV2aWNlKCkpIHsKKwljYXNlIEJPT1RfREVWSUNFX01NQzE6CisJCW9tYXBfbW1jX2luaXQoMCk7CisJCWJyZWFrOworCWNhc2UgQk9PVF9ERVZJQ0VfTU1DMjoKKwkJb21hcF9tbWNfaW5pdCgxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHBhcnNlX2ltYWdlX2hlYWRlcihjb25zdCBzdHJ1Y3QgaW1hZ2VfaGVhZGVyICpoZWFkZXIpCit7CisJdTMyIGhlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbWFnZV9oZWFkZXIpOworCisJaWYgKF9fYmUzMl90b19jcHUoaGVhZGVyLT5paF9tYWdpYykgPT0gSUhfTUFHSUMpIHsKKwkJaW1hZ2Vfc2l6ZSA9IF9fYmUzMl90b19jcHUoaGVhZGVyLT5paF9zaXplKSArIGhlYWRlcl9zaXplOworCQlpbWFnZV9lbnRyeV9wb2ludCA9IF9fYmUzMl90b19jcHUoaGVhZGVyLT5paF9sb2FkKTsKKwkJLyogTG9hZCBpbmNsdWRpbmcgdGhlIGhlYWRlciAqLworCQlpbWFnZV9sb2FkX2FkZHIgPSBpbWFnZV9lbnRyeV9wb2ludCAtIGhlYWRlcl9zaXplOworCQlpbWFnZV9vcyA9IGhlYWRlci0+aWhfb3M7CisJCWltYWdlX25hbWUgPSAoY29uc3QgY2hhciAqKSZoZWFkZXItPmloX25hbWU7CisJCWRlYnVnKCJzcGw6IHBheWxvYWQgaW1hZ2U6ICVzIGxvYWQgYWRkcjogMHgleCBzaXplOiAlZFxuIiwKKwkJCWltYWdlX25hbWUsIGltYWdlX2xvYWRfYWRkciwgaW1hZ2Vfc2l6ZSk7CisJfSBlbHNlIHsKKwkJLyogU2lnbmF0dXJlIG5vdCBmb3VuZCAtIGFzc3VtZSB1LWJvb3QuYmluICovCisJCXByaW50ZigibWtpbWFnZSBzaWduYXR1cmUgbm90IGZvdW5kIC0gaWhfbWFnaWMgPSAleFxuIiwKKwkJCWhlYWRlci0+aWhfbWFnaWMpOworCQlwdXRzKCJBc3N1bWluZyB1LWJvb3QuYmluIC4uXG4iKTsKKwkJLyogTGV0J3MgYXNzdW1lIFUtQm9vdCB3aWxsIG5vdCBiZSBtb3JlIHRoYW4gMjAwIEtCICovCisJCWltYWdlX3NpemUgPSAyMDAgKiAxMDI0OworCQlpbWFnZV9lbnRyeV9wb2ludCA9IENPTkZJR19TWVNfVEVYVF9CQVNFOworCQlpbWFnZV9sb2FkX2FkZHIgPSBDT05GSUdfU1lTX1RFWFRfQkFTRTsKKwkJaW1hZ2Vfb3MgPSBJSF9PU19VX0JPT1Q7CisJCWltYWdlX25hbWUgPSAiVS1Cb290IjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1tY19sb2FkX2ltYWdlX3JhdyhzdHJ1Y3QgbW1jICptbWMpCit7CisJdTMyIGltYWdlX3NpemVfc2VjdG9ycywgZXJyOworCWNvbnN0IHN0cnVjdCBpbWFnZV9oZWFkZXIgKmhlYWRlcjsKKworCWhlYWRlciA9IChzdHJ1Y3QgaW1hZ2VfaGVhZGVyICopKENPTkZJR19TWVNfVEVYVF9CQVNFIC0KKwkJCQkJCXNpemVvZihzdHJ1Y3QgaW1hZ2VfaGVhZGVyKSk7CisKKwkvKiByZWFkIGltYWdlIGhlYWRlciB0byBmaW5kIHRoZSBpbWFnZSBzaXplICYgbG9hZCBhZGRyZXNzICovCisJZXJyID0gbW1jLT5ibG9ja19kZXYuYmxvY2tfcmVhZCgwLAorCQkJQ09ORklHX1NZU19NTUNTRF9SQVdfTU9ERV9VX0JPT1RfU0VDVE9SLCAxLAorCQkJKHZvaWQgKiloZWFkZXIpOworCisJaWYgKGVyciA8PSAwKQorCQlnb3RvIGVuZDsKKworCXBhcnNlX2ltYWdlX2hlYWRlcihoZWFkZXIpOworCisJLyogY29udmVydCBzaXplIHRvIHNlY3RvcnMgLSByb3VuZCB1cCAqLworCWltYWdlX3NpemVfc2VjdG9ycyA9IChpbWFnZV9zaXplICsgTU1DU0RfU0VDVE9SX1NJWkUgLSAxKSAvCisJCQkJTU1DU0RfU0VDVE9SX1NJWkU7CisKKwkvKiBSZWFkIHRoZSBoZWFkZXIgdG9vIHRvIGF2b2lkIGV4dHJhIG1lbWNweSAqLworCWVyciA9IG1tYy0+YmxvY2tfZGV2LmJsb2NrX3JlYWQoMCwKKwkJCUNPTkZJR19TWVNfTU1DU0RfUkFXX01PREVfVV9CT09UX1NFQ1RPUiwKKwkJCWltYWdlX3NpemVfc2VjdG9ycywgKHZvaWQgKilpbWFnZV9sb2FkX2FkZHIpOworCitlbmQ6CisJaWYgKGVyciA8PSAwKSB7CisJCXByaW50Zigic3BsOiBtbWMgYmxrIHJlYWQgZXJyIC0gJWRcbiIsIGVycik7CisJCWhhbmcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1tY19sb2FkX2ltYWdlX2ZhdChzdHJ1Y3QgbW1jICptbWMpCit7CisJczMyIGVycjsKKwlzdHJ1Y3QgaW1hZ2VfaGVhZGVyICpoZWFkZXI7CisKKwloZWFkZXIgPSAoc3RydWN0IGltYWdlX2hlYWRlciAqKShDT05GSUdfU1lTX1RFWFRfQkFTRSAtCisJCQkJCQlzaXplb2Yoc3RydWN0IGltYWdlX2hlYWRlcikpOworCisJZXJyID0gZmF0X3JlZ2lzdGVyX2RldmljZSgmbW1jLT5ibG9ja19kZXYsCisJCQkJQ09ORklHX1NZU19NTUNfU0RfRkFUX0JPT1RfUEFSVElUSU9OKTsKKwlpZiAoZXJyKSB7CisJCXByaW50Zigic3BsOiBmYXQgcmVnaXN0ZXIgZXJyIC0gJWRcbiIsIGVycik7CisJCWhhbmcoKTsKKwl9CisKKwllcnIgPSBmaWxlX2ZhdF9yZWFkKENPTkZJR19TUExfRkFUX0xPQURfUEFZTE9BRF9OQU1FLAorCQkJCSh1OCAqKWhlYWRlciwgc2l6ZW9mKHN0cnVjdCBpbWFnZV9oZWFkZXIpKTsKKwlpZiAoZXJyIDw9IDApCisJCWdvdG8gZW5kOworCisJcGFyc2VfaW1hZ2VfaGVhZGVyKGhlYWRlcik7CisKKwllcnIgPSBmaWxlX2ZhdF9yZWFkKENPTkZJR19TUExfRkFUX0xPQURfUEFZTE9BRF9OQU1FLAorCQkJCSh1OCAqKWltYWdlX2xvYWRfYWRkciwgMCk7CisKK2VuZDoKKwlpZiAoZXJyIDw9IDApIHsKKwkJcHJpbnRmKCJzcGw6IGVycm9yIHJlYWRpbmcgaW1hZ2UgJXMsIGVyciAtICVkXG4iLAorCQkJQ09ORklHX1NQTF9GQVRfTE9BRF9QQVlMT0FEX05BTUUsIGVycik7CisJCWhhbmcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1tY19sb2FkX2ltYWdlKHZvaWQpCit7CisJc3RydWN0IG1tYyAqbW1jOworCWludCBlcnI7CisJdTMyIGJvb3RfbW9kZTsKKworCW1tY19pbml0aWFsaXplKGdkLT5iZCk7CisJLyogV2UgcmVnaXN0ZXIgb25seSBvbmUgZGV2aWNlLiBTbywgdGhlIGRldiBpZCBpcyBhbHdheXMgMCAqLworCW1tYyA9IGZpbmRfbW1jX2RldmljZSgwKTsKKwlpZiAoIW1tYykgeworCQlwdXRzKCJzcGw6IG1tYyBkZXZpY2Ugbm90IGZvdW5kISFcbiIpOworCQloYW5nKCk7CisJfQorCisJZXJyID0gbW1jX2luaXQobW1jKTsKKwlpZiAoZXJyKSB7CisJCXByaW50Zigic3BsOiBtbWMgaW5pdCBmYWlsZWQ6IGVyciAtICVkXG4iLCBlcnIpOworCQloYW5nKCk7CisJfQorCisJYm9vdF9tb2RlID0gb21hcF9ib290X21vZGUoKTsKKwlpZiAoYm9vdF9tb2RlID09IE1NQ1NEX01PREVfUkFXKSB7CisJCWRlYnVnKCJib290IG1vZGUgLSBSQVdcbiIpOworCQltbWNfbG9hZF9pbWFnZV9yYXcobW1jKTsKKwl9IGVsc2UgaWYgKGJvb3RfbW9kZSA9PSBNTUNTRF9NT0RFX0ZBVCkgeworCQlkZWJ1ZygiYm9vdCBtb2RlIC0gRkFUXG4iKTsKKwkJbW1jX2xvYWRfaW1hZ2VfZmF0KG1tYyk7CisJfSBlbHNlIHsKKwkJcHV0cygic3BsOiB3cm9uZyBNTUMgYm9vdCBtb2RlXG4iKTsKKwkJaGFuZygpOworCX0KK30KKwordm9pZCBqdW1wX3RvX2ltYWdlX25vX2FyZ3Modm9pZCkKK3sKKwl0eXBlZGVmIHZvaWQgKCppbWFnZV9lbnRyeV9ub2FyZ3NfdCkodm9pZClfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKwlpbWFnZV9lbnRyeV9ub2FyZ3NfdCBpbWFnZV9lbnRyeSA9CisJCQkoaW1hZ2VfZW50cnlfbm9hcmdzX3QpIGltYWdlX2VudHJ5X3BvaW50OworCisJaW1hZ2VfZW50cnkoKTsKK30KKwordm9pZCBqdW1wX3RvX2ltYWdlX25vX2FyZ3Modm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Cit2b2lkIGJvYXJkX2luaXRfcihnZF90ICppZCwgdWxvbmcgZHVtbXkpCit7CisJdTMyIGJvb3RfZGV2aWNlOworCWRlYnVnKCI+PnNwbDpib2FyZF9pbml0X3IoKVxuIik7CisKKwl0aW1lcl9pbml0KCk7CisJaTJjX2luaXQoQ09ORklHX1NZU19JMkNfU1BFRUQsIENPTkZJR19TWVNfSTJDX1NMQVZFKTsKKworCWJvb3RfZGV2aWNlID0gb21hcF9ib290X2RldmljZSgpOworCWRlYnVnKCJib290IGRldmljZSAtICVkXG4iLCBib290X2RldmljZSk7CisJc3dpdGNoIChib290X2RldmljZSkgeworCWNhc2UgQk9PVF9ERVZJQ0VfTU1DMToKKwljYXNlIEJPT1RfREVWSUNFX01NQzI6CisJCW1tY19sb2FkX2ltYWdlKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiU1BMOiBVbi1zdXBwb3J0ZWQgQm9vdCBEZXZpY2UgLSAlZCEhIVxuIiwgYm9vdF9kZXZpY2UpOworCQloYW5nKCk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW1hZ2Vfb3MpIHsKKwljYXNlIElIX09TX1VfQk9PVDoKKwkJZGVidWcoIkp1bXBpbmcgdG8gVS1Cb290XG4iKTsKKwkJanVtcF90b19pbWFnZV9ub19hcmdzKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXB1dHMoIlVuc3VwcG9ydGVkIE9TIGltYWdlLi4gSnVtcGluZyBuZXZlcnRoZWxlc3MuLlxuIik7CisJCWp1bXBfdG9faW1hZ2Vfbm9fYXJncygpOworCX0KK30KKwordm9pZCBwcmVsb2FkZXJfY29uc29sZV9pbml0KHZvaWQpCit7CisJY29uc3QgY2hhciAqdV9ib290X3JldiA9IFVfQk9PVF9WRVJTSU9OOworCWNoYXIgcmV2X3N0cmluZ19idWZmZXJbNTBdOworCisJZ2QgPSAmZ2RhdGE7CisJZ2QtPmJkID0gJmJkYXRhOworCWdkLT5mbGFncyB8PSBHRF9GTEdfUkVMT0M7CisJZ2QtPmJhdWRyYXRlID0gQ09ORklHX0JBVURSQVRFOworCisJc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKCk7CisJc2VyaWFsX2luaXQoKTsJCS8qIHNlcmlhbCBjb21tdW5pY2F0aW9ucyBzZXR1cCAqLworCisJLyogQXZvaWQgYSBzZWNvbmQgIlUtQm9vdCIgY29taW5nIGZyb20gdGhpcyBzdHJpbmcgKi8KKwl1X2Jvb3RfcmV2ID0gJnVfYm9vdF9yZXZbN107CisKKwlwcmludGYoIlxuVS1Cb290IFNQTCAlcyAoJXMgLSAlcylcbiIsIHVfYm9vdF9yZXYsIFVfQk9PVF9EQVRFLAorCQlVX0JPT1RfVElNRSk7CisJb21hcF9yZXZfc3RyaW5nKHJldl9zdHJpbmdfYnVmZmVyKTsKKwlwcmludGYoIlRleGFzIEluc3RydW1lbnRzICVzXG4iLCByZXZfc3RyaW5nX2J1ZmZlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vdS1ib290LXNwbC5sZHMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vdS1ib290LXNwbC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2N2UwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi91LWJvb3Qtc3BsLmxkcwpAQCAtMCwwICsxLDYyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdhcnlqQGRlbnguZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKglBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK01FTU9SWSB7IC5zcmFtIDogT1JJR0lOID0gQ09ORklHX1NQTF9URVhUX0JBU0UsXAorCQlMRU5HVEggPSBDT05GSUdfU1BMX01BWF9TSVpFIH0KK01FTU9SWSB7IC5zZHJhbSA6IE9SSUdJTiA9IENPTkZJR19TUExfQlNTX1NUQVJUX0FERFIsIFwKKwkJTEVOR1RIID0gQ09ORklHX1NQTF9CU1NfTUFYX1NJWkUgfQorCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS50ZXh0ICAgICAgOgorCXsKKwlfX3N0YXJ0ID0gLjsKKwkgIGFyY2gvYXJtL2NwdS9hcm12Ny9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQqKQorCX0gPi5zcmFtCisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKihTT1JUX0JZX0FMSUdOTUVOVCgucm9kYXRhKikpIH0gPi5zcmFtCisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooU09SVF9CWV9BTElHTk1FTlQoLmRhdGEqKSkgfSA+LnNyYW0KKwkuID0gQUxJR04oNCk7CisJX19pbWFnZV9jb3B5X2VuZCA9IC47CisJX2VuZCA9IC47CisKKwkuYnNzIDoKKwl7CisJCS4gPSBBTElHTig0KTsKKwkJX19ic3Nfc3RhcnQgPSAuOworCQkqKC5ic3MqKQorCQkuID0gQUxJR04oNCk7CisJCV9fYnNzX2VuZF9fID0gLjsKKwl9ID4uc2RyYW0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi91dGlscy5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5MzVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi91dGlscy5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBMaW5hcm8gTGltaXRlZAorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorc3RhdGljIHZvaWQgZG9fY2FuY2VsX291dCh1MzIgKm51bSwgdTMyICpkZW4sIHUzMiBmYWN0b3IpCit7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCgoKm51bSkvZmFjdG9yKmZhY3RvciA9PSAoKm51bSkpICYmCisJCSAgICgoKmRlbikvZmFjdG9yKmZhY3RvciA9PSAoKmRlbikpKSB7CisJCQkoKm51bSkgLz0gZmFjdG9yOworCQkJKCpkZW4pIC89IGZhY3RvcjsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBDYW5jZWwgb3V0IHRoZSBkZW5vbWluYXRvciBhbmQgbnVtZXJhdG9yIG9mIGEgZnJhY3Rpb24KKyAqIHRvIGdldCBzbWFsbGVyIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuCisgKi8KK3ZvaWQgY2FuY2VsX291dCh1MzIgKm51bSwgdTMyICpkZW4sIHUzMiBkZW5fbGltaXQpCit7CisJZG9fY2FuY2VsX291dChudW0sIGRlbiwgMik7CisJZG9fY2FuY2VsX291dChudW0sIGRlbiwgMyk7CisJZG9fY2FuY2VsX291dChudW0sIGRlbiwgNSk7CisJZG9fY2FuY2VsX291dChudW0sIGRlbiwgNyk7CisJZG9fY2FuY2VsX291dChudW0sIGRlbiwgMTEpOworCWRvX2NhbmNlbF9vdXQobnVtLCBkZW4sIDEzKTsKKwlkb19jYW5jZWxfb3V0KG51bSwgZGVuLCAxNyk7CisJd2hpbGUgKCgqZGVuKSA+IGRlbl9saW1pdCkgeworCQkqbnVtIC89IDI7CisJCS8qCisJCSAqIFJvdW5kIHVwIHRoZSBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBmaW5hbCBmcmFjdGlvbgorCQkgKiAobnVtL2RlbikgaXMgYWx3YXlzIDw9IHRoZSBkZXNpcmVkIHZhbHVlCisJCSAqLworCQkqZGVuID0gKCpkZW4gKyAxKSAvIDI7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAzL01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAzL01ha2VmaWxlCmluZGV4IDUyMmJjZDIuLjhlODU4OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDMvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDYgQEAKIAogQ09CSlMJKz0gYm9hcmQubwogQ09CSlMJKz0gY2xvY2subwotQ09CSlMJKz0gZ3Bpby5vCiBDT0JKUwkrPSBtZW0ubwogQ09CSlMJKz0gc3lzX2luZm8ubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDMvYm9hcmQuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9ib2FyZC5jCmluZGV4IDk4NTE5YTkuLjRhYWY5N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9ib2FyZC5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9ib2FyZC5jCkBAIC0zOCwxMiArMzgsMjQgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vYXJtdjcuaD4KKyNpbmNsdWRlIDxhc20vb21hcF9ncGlvLmg+CiAKIC8qIERlY2xhcmF0aW9ucyAqLwogZXh0ZXJuIG9tYXAzX3N5c2luZm8gc3lzaW5mbzsKIHN0YXRpYyB2b2lkIG9tYXAzX3NldHVwX2F1eF9jcih2b2lkKTsKIHN0YXRpYyB2b2lkIG9tYXAzX2ludmFsaWRhdGVfbDJfY2FjaGVfc2VjdXJlKHZvaWQpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMzR4eFs2XSA9IHsKKwl7ICh2b2lkICopT01BUDM0WFhfR1BJTzFfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQMzRYWF9HUElPMl9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVAzNFhYX0dQSU8zX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDM0WFhfR1BJTzRfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQMzRYWF9HUElPNV9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVAzNFhYX0dQSU82X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKK307CisKK2NvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmNvbnN0IG9tYXBfZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzM0eHg7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJvdXRpbmU6IGRlbGF5CiAgKiBEZXNjcmlwdGlvbjogc3Bpbm5pbmcgZGVsYXkgdG8gdXNlIGJlZm9yZSB1ZGVsYXkgd29ya3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwMy9zeXNfaW5mby5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAzL3N5c19pbmZvLmMKaW5kZXggNTQ5YWMxOS4uOGQwNDk2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAzL3N5c19pbmZvLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAzL3N5c19pbmZvLmMKQEAgLTMzLDYgKzMzLDggQEAKIAogZXh0ZXJuIG9tYXAzX3N5c2luZm8gc3lzaW5mbzsKIHN0YXRpYyBzdHJ1Y3QgY3RybCAqY3RybF9iYXNlID0gKHN0cnVjdCBjdHJsICopT01BUDM0WFhfQ1RSTF9CQVNFOworCisjaWZkZWYgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTwogc3RhdGljIGNoYXIgKnJldl9zW0NQVV8zWFhfTUFYX1JFVl0gPSB7CiAJCQkJIjEuMCIsCiAJCQkJIjIuMCIsCkBAIC00Miw2ICs0NCw3IEBACiAJCQkJIlVOS05PV04iLAogCQkJCSJVTktOT1dOIiwKIAkJCQkiMy4xLjIifTsKKyNlbmRpZiAvKiBDT05GSUdfRElTUExBWV9DUFVJTkZPICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZGllaWRfbnVtX3Iodm9pZCkgLSByZWFkIGFuZCBzZXQgZGllIElECmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvTWFrZWZpbGUgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvTWFrZWZpbGUKaW5kZXggOTg3ZGM5ZC4uZTdlZTBiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9NYWtlZmlsZQpAQCAtMjgsOCArMjgsMTQgQEAKIFNPQkpTCSs9IGxvd2xldmVsX2luaXQubwogCiBDT0JKUwkrPSBib2FyZC5vCitDT0JKUwkrPSBjbG9ja3MubworQ09CSlMJKz0gZW1pZi5vCitDT0JKUwkrPSBzZHJhbV9lbHBpZGEubworCitpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAogQ09CSlMJKz0gbWVtLm8KIENPQkpTCSs9IHN5c19pbmZvLm8KK2VuZGlmCiAKIFNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpICQoU09CSlMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2JvYXJkLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvYm9hcmQuYwppbmRleCBkZTRjYzJhLi41OTQzZDYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvYm9hcmQuYworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvYm9hcmQuYwpAQCAtMjgsMjAgKzI4LDE4MSBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcm12Ny5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2VtaWYuaD4KKyNpbmNsdWRlIDxhc20vb21hcF9ncGlvLmg+CisjaW5jbHVkZSAib21hcDRfbXV4X2RhdGEuaCIKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKK3UzMiAqY29uc3Qgb21hcDRfcmV2aXNpb24gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX09NQVA0X1JFVjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzQ0eHhbNl0gPSB7CisJeyAodm9pZCAqKU9NQVA0NFhYX0dQSU8xX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzJfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPM19CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA0NFhYX0dQSU80X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzVfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPNl9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCit9OworCitjb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rICpjb25zdCBvbWFwX2dwaW9fYmFuayA9IGdwaW9fYmFua180NHh4OworCisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorLyoKKyAqIFdlIHVzZSBzdGF0aWMgdmFyaWFibGVzIGJlY2F1c2UgZ2xvYmFsIGRhdGEgaXMgbm90IHJlYWR5IHlldC4KKyAqIEluaXRpYWxpemVkIGRhdGEgaXMgYXZhaWxhYmxlIGluIFNQTCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcuCisgKiBXZSB3b3VsZCBub3QgdHlwaWNhbGx5IG5lZWQgdG8gc2F2ZSB0aGVzZSBwYXJhbWV0ZXJzIGluIHJlZ3VsYXIKKyAqIFUtQm9vdC4gVGhpcyBpcyBuZWVkZWQgb25seSBpbiBTUEwgYXQgdGhlIG1vbWVudC4KKyAqLwordTMyIG9tYXA0X2Jvb3RfZGV2aWNlID0gQk9PVF9ERVZJQ0VfTU1DMTsKK3UzMiBvbWFwNF9ib290X21vZGUgPSBNTUNTRF9NT0RFX0ZBVDsKKwordTMyIG9tYXBfYm9vdF9kZXZpY2Uodm9pZCkKK3sKKwlyZXR1cm4gb21hcDRfYm9vdF9kZXZpY2U7Cit9CisKK3UzMiBvbWFwX2Jvb3RfbW9kZSh2b2lkKQoreworCXJldHVybiBvbWFwNF9ib290X21vZGU7Cit9CisjZW5kaWYKKwordm9pZCBkb19zZXRfbXV4KHUzMiBiYXNlLCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29uc3QgKmFycmF5LCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgKnBhZCA9IChzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgKikgYXJyYXk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwYWQrKykKKwkJd3JpdGV3KHBhZC0+dmFsLCBiYXNlICsgcGFkLT5vZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCh2b2lkKQoreworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX0NPUkUsIGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwsCisJCSAgIHNpemVvZihjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKKworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX1dLVVAsIHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwsCisJCSAgIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKKworCS8qIGdwaW9fd2s3IGlzIHVzZWQgZm9yIGNvbnRyb2xsaW5nIFRQUyBvbiA0NDYwICovCisJaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkKKwkJd3JpdGV3KE0zLCBDT05UUk9MX1dLVVBfUEFEMV9GUkVGX0NMSzRfUkVRKTsKK30KKworc3RhdGljIHZvaWQgc2V0X211eF9jb25mX3JlZ3Modm9pZCkKK3sKKwlzd2l0Y2ggKG9tYXA0X2h3X2luaXRfY29udGV4dCgpKSB7CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9TUEw6CisJCXNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKCk7CisJCWJyZWFrOworCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfU1BMOgorCQlzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwoKTsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUjoKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NIOgorCQlzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCgpOworCQlzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwoKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdTMyIGNvcnRleF9hOV9yZXYodm9pZCkKK3sKKworCXVuc2lnbmVkIGludCByZXY7CisKKwkvKiBSZWFkIE1haW4gSUQgUmVnaXN0ZXIgKE1JRFIpICovCisJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMwLCBjMCwgMCIgOiAiPXIiIChyZXYpKTsKKworCXJldHVybiByZXY7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfb21hcDRfcmV2aXNpb24odm9pZCkKK3sKKwkvKgorCSAqIEZvciBzb21lIG9mIHRoZSBFUzIvRVMxIGJvYXJkcyBJRF9DT0RFIGlzIG5vdCByZWxpYWJsZToKKwkgKiBBbHNvLCBFUzEgYW5kIEVTMiBoYXZlIGRpZmZlcmVudCBBUk0gcmV2aXNpb25zCisJICogU28gdXNlIEFSTSByZXZpc2lvbiBmb3IgaWRlbnRpZmljYXRpb24KKwkgKi8KKwl1bnNpZ25lZCBpbnQgYXJtX3JldiA9IGNvcnRleF9hOV9yZXYoKTsKKworCXN3aXRjaCAoYXJtX3JldikgeworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjBQMToKKwkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMxXzA7CisJCWJyZWFrOworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjFQMjoKKwkJc3dpdGNoIChyZWFkbChDT05UUk9MX0lEX0NPREUpKSB7CisJCWNhc2UgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8wOgorCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzA7CisJCQlicmVhazsKKwkJY2FzZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzE6CisJCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMTsKKwkJCWJyZWFrOworCQljYXNlIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMjoKKwkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8yOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjFQMzoKKwkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzM7CisJCWJyZWFrOworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjJQMTA6CisJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDYwX0VTMV8wOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9TSUxJQ09OX0lEX0lOVkFMSUQ7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcDRfcmV2X3N0cmluZykKK3sKKwl1MzIgb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCXUzMiBvbWFwNF92YXJpYW50ID0gKG9tYXA0X3JldiAmIDB4RkZGRjAwMDApID4+IDE2OworCXUzMiBtYWpvcl9yZXYgPSAob21hcDRfcmV2ICYgMHgwMDAwMEYwMCkgPj4gODsKKwl1MzIgbWlub3JfcmV2ID0gKG9tYXA0X3JldiAmIDB4MDAwMDAwRjApID4+IDQ7CisKKwlzcHJpbnRmKG9tYXA0X3Jldl9zdHJpbmcsICJPTUFQJXggRVMleC4leCIsIG9tYXA0X3ZhcmlhbnQsIG1ham9yX3JldiwKKwkJbWlub3JfcmV2KTsKK30KKwogLyoKICAqIFJvdXRpbmU6IHNfaW5pdAotICogRGVzY3JpcHRpb246IERvZXMgZWFybHkgc3lzdGVtIGluaXQgb2YgbXV4aW5nIGFuZCBjbG9ja3MuCi0gKiAgICAgICAgICAgICAgLSBDYWxsZWQgcGF0aCBpcyB3aXRoIFNSQU0gc3RhY2suCisgKiBEZXNjcmlwdGlvbjogRG9lcyBlYXJseSBzeXN0ZW0gaW5pdCBvZiB3YXRjaGRvZywgbXV4aW5nLCAgYW5kY2xvY2tzCisgKiBXYXRjaGRvZyBkaXNhYmxlIGlzIGRvbmUgYWx3YXlzLiBGb3IgdGhlIHJlc3Qgd2hhdCBnZXRzIGRvbmUKKyAqIGRlcGVuZHMgb24gdGhlIGJvb3QgbW9kZSBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkCisgKiAgIDEuIHNfaW5pdCBvZiBTUEwgcnVubmluZyBmcm9tIFNSQU0KKyAqICAgMi4gc19pbml0IG9mIFUtQm9vdCBydW5uaW5nIGZyb20gRkxBU0gKKyAqICAgMy4gc19pbml0IG9mIFUtQm9vdCBsb2FkZWQgdG8gU0RSQU0gYnkgU1BMCisgKiAgIDQuIHNfaW5pdCBvZiBVLUJvb3QgbG9hZGVkIHRvIFNEUkFNIGJ5IFJPTSBjb2RlIHVzaW5nIHRoZQorICoJQ29uZmlndXJhdGlvbiBIZWFkZXIgZmVhdHVyZQorICogUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCBnZXRzCisgKiBkb25lIGluIGVhY2ggb2YgdGhlc2UgY2FzZXMKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggU1JBTSBzdGFjay4KICAqLwogdm9pZCBzX2luaXQodm9pZCkKIHsKKwlpbml0X29tYXA0X3JldmlzaW9uKCk7CiAJd2F0Y2hkb2dfaW5pdCgpOworCXNldF9tdXhfY29uZl9yZWdzKCk7CisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorCXByZWxvYWRlcl9jb25zb2xlX2luaXQoKTsKKyNlbmRpZgorCXByY21faW5pdCgpOworI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKwkvKiBGb3IgcmVndWxhciB1LWJvb3Qgc2RyYW1faW5pdCgpIGlzIGNhbGxlZCBmcm9tIGRyYW1faW5pdCgpICovCisJc2RyYW1faW5pdCgpOworI2VuZGlmCiB9CiAKIC8qCkBAIC03NiwxNyArMjM3LDE3IEBACiAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzaXplIG9mIG1lbW9yeSBpbnN0YWxsZWQgbWF5IGJlCiAgKiBkaWZmZXJlbnQgb24gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBib2FyZAogICovCi11MzIgc2RyYW1fc2l6ZSh2b2lkKQordTMyIG9tYXA0X3NkcmFtX3NpemUodm9pZCkKIHsKIAl1MzIgc2VjdGlvbiwgaSwgdG90YWxfc2l6ZSA9IDAsIHNpemUsIGFkZHI7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlzZWN0aW9uCT0gX19yYXdfcmVhZGwoRE1NX0xJU0FfTUFQX0JBU0UgKyBpKjQpOwotCQlhZGRyID0gc2VjdGlvbiAmIERNTV9MSVNBX01BUF9TWVNfQUREUl9NQVNLOworCQlzZWN0aW9uCT0gX19yYXdfcmVhZGwoT01BUDQ0WFhfRE1NX0xJU0FfTUFQX0JBU0UgKyBpKjQpOworCQlhZGRyID0gc2VjdGlvbiAmIE9NQVA0NFhYX1NZU19BRERSX01BU0s7CiAJCS8qIFNlZSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCAqLwogCQlpZiAoKGFkZHIgPj0gT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUKSAmJgogCQkgICAgKGFkZHIgPCBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfRU5EKSkgewotCQkJc2l6ZQk9ICgoc2VjdGlvbiAmIERNTV9MSVNBX01BUF9TWVNfU0laRV9NQVNLKSA+PgotCQkJCSAgICBETU1fTElTQV9NQVBfU1lTX1NJWkVfU0hJRlQpOworCQkJc2l6ZQk9ICgoc2VjdGlvbiAmIE9NQVA0NFhYX1NZU19TSVpFX01BU0spID4+CisJCQkJICAgT01BUDQ0WFhfU1lTX1NJWkVfU0hJRlQpOwogCQkJc2l6ZQk9IDEgPDwgc2l6ZTsKIAkJCXNpemUJKj0gU1pfMTZNOwogCQkJdG90YWxfc2l6ZSArPSBzaXplOwpAQCAtMTAyLDggKzI2Myw4IEBACiAgKi8KIGludCBkcmFtX2luaXQodm9pZCkKIHsKLQotCWdkLT5yYW1fc2l6ZSA9IHNkcmFtX3NpemUoKTsKKwlzZHJhbV9pbml0KCk7CisJZ2QtPnJhbV9zaXplID0gb21hcDRfc2RyYW1fc2l6ZSgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQsNyArMjg1LDYgQEAKICovCiBpbnQgYXJjaF9jcHVfaW5pdCh2b2lkKQogewotCXNldF9tdXhjb25mX3JlZ3MoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2Nsb2Nrcy5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2Nsb2Nrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTk2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvY2xvY2tzLmMKQEAgLTAsMCArMSw5NDAgQEAKKy8qCisgKgorICogQ2xvY2sgaW5pdGlhbGl6YXRpb24gZm9yIE9NQVA0CisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogQmFzZWQgb24gcHJldmlvdXMgd29yayBieToKKyAqCVNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CisgKglSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfZ3Bpby5oPgorCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKKy8qCisgKiBwcmludGluZyB0byBjb25zb2xlIGRvZXNuJ3Qgd29yayB1bmxlc3MKKyAqIHRoaXMgY29kZSBpcyBleGVjdXRlZCBmcm9tIFNQTAorICovCisjZGVmaW5lIHByaW50ZihmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIHB1dHMocykKKyNlbmRpZgorCisjZGVmaW5lIGFicyh4KSAoKCh4KSA8IDApID8gKCh4KSotMSkgOiAoeCkpCisKK3N0cnVjdCBvbWFwNF9wcmNtX3JlZ3MgKmNvbnN0IHByY20gPSAoc3RydWN0IG9tYXA0X3ByY21fcmVncyAqKTB4NEEwMDQxMDA7CisKK3N0YXRpYyBjb25zdCB1MzIgc3lzX2Nsa19hcnJheVs4XSA9IHsKKwkxMjAwMDAwMCwJICAgICAgIC8qIDEyIE1IeiAqLworCTEzMDAwMDAwLAkgICAgICAgLyogMTMgTUh6ICovCisJMTY4MDAwMDAsCSAgICAgICAvKiAxNi44IE1IeiAqLworCTE5MjAwMDAwLAkgICAgICAgLyogMTkuMiBNSHogKi8KKwkyNjAwMDAwMCwJICAgICAgIC8qIDI2IE1IeiAqLworCTI3MDAwMDAwLAkgICAgICAgLyogMjcgTUh6ICovCisJMzg0MDAwMDAsCSAgICAgICAvKiAzOC40IE1IeiAqLworfTsKKworLyoKKyAqIFRoZSBNICYgTiB2YWx1ZXMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZXMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlCisgKiBmb2xsb3dpbmcgdG9vbDoKKyAqIHRvb2xzL29tYXAvY2xvY2tzX2dldF9tX24uYworICogUGxlYXNlIHVzZSB0aGlzIHRvb2wgZm9yIGNyZWF0aW5nIHRoZSB0YWJsZSBmb3IgYW55IG5ldyBmcmVxdWVuY3kuCisgKi8KKworLyogZHBsbCBsb2NrZWQgYXQgMTg0MCBNSHogTVBVIGNsayBhdCA5MjAgTUh6KE9QUCBUdXJibyA0NDYwKSAtIERDQyBPRkYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgbXB1X2RwbGxfcGFyYW1zXzE4NDBtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7MjMwLCAyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMiBNSHogICAqLworCXs5MjAsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXsyMTksIDMsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezU3NSwgMTEsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezQ2MCwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCisJezkyMCwgMjYsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezU3NSwgMjMsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0JLyogMzguNCBNSHogKi8KK307CisKKy8qIGRwbGwgbG9ja2VkIGF0IDE1ODQgTUh6IC0gTVBVIGNsayBhdCA3OTIgTUh6KE9QUCBUdXJibyA0NDMwKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBtcHVfZHBsbF9wYXJhbXNfMTU4NG1oeltOVU1fU1lTX0NMS1NdID0geworCXs2NiwgMCwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDEyIE1IeiAgICovCisJezc5MiwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezMzMCwgNiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7MTY1LCAzLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxOS4yIE1IeiAqLworCXszOTYsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXs4OCwgMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDI3IE1IeiAgICovCisJezE2NSwgNywgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfQkJLyogMzguNCBNSHogKi8KK307CisKKy8qIGRwbGwgbG9ja2VkIGF0IDEyMDAgTUh6IC0gTVBVIGNsayBhdCA2MDAgTUh6ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIG1wdV9kcGxsX3BhcmFtc18xMjAwbWh6W05VTV9TWVNfQ0xLU10gPSB7CisJezUwLCAwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkJLyogMTIgTUh6ICAgKi8KKwl7NjAwLCAxMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7MjUwLCA2LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLworCXsxMjUsIDMsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezMwMCwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCisJezIwMCwgOCwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7MTI1LCA3LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9CQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBjb3JlX2RwbGxfcGFyYW1zXzE2MDBtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7MjAwLCAyLCAxLCA1LCA4LCA0LCA2LCA1fSwJLyogMTIgTUh6ICAgKi8KKwl7ODAwLCAxMiwgMSwgNSwgOCwgNCwgNiwgNX0sCS8qIDEzIE1IeiAgICovCisJezYxOSwgMTIsIDEsIDUsIDgsIDQsIDYsIDV9LAkvKiAxNi44IE1IeiAqLworCXsxMjUsIDIsIDEsIDUsIDgsIDQsIDYsIDV9LAkvKiAxOS4yIE1IeiAqLworCXs0MDAsIDEyLCAxLCA1LCA4LCA0LCA2LCA1fSwJLyogMjYgTUh6ICAgKi8KKwl7ODAwLCAyNiwgMSwgNSwgOCwgNCwgNiwgNX0sCS8qIDI3IE1IeiAgICovCisJezEyNSwgNSwgMSwgNSwgOCwgNCwgNiwgNX0JLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgY29yZV9kcGxsX3BhcmFtc19lczFfMTUyNG1oeltOVU1fU1lTX0NMS1NdID0geworCXsxMjcsIDEsIDEsIDUsIDgsIDQsIDYsIDV9LAkvKiAxMiBNSHogICAqLworCXs3NjIsIDEyLCAxLCA1LCA4LCA0LCA2LCA1fSwJLyogMTMgTUh6ICAgKi8KKwl7NjM1LCAxMywgMSwgNSwgOCwgNCwgNiwgNX0sCS8qIDE2LjggTUh6ICovCisJezYzNSwgMTUsIDEsIDUsIDgsIDQsIDYsIDV9LAkvKiAxOS4yIE1IeiAqLworCXszODEsIDEyLCAxLCA1LCA4LCA0LCA2LCA1fSwJLyogMjYgTUh6ICAgKi8KKwl7MjU0LCA4LCAxLCA1LCA4LCA0LCA2LCA1fSwJLyogMjcgTUh6ICAgKi8KKwl7NDk2LCAyNCwgMSwgNSwgOCwgNCwgNiwgNX0JLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMKKwkJY29yZV9kcGxsX3BhcmFtc19lczJfMTYwMG1oel9kZHIyMDBtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7MjAwLCAyLCAyLCA1LCA4LCA0LCA2LCA1fSwJLyogMTIgTUh6ICAgKi8KKwl7ODAwLCAxMiwgMiwgNSwgOCwgNCwgNiwgNX0sCS8qIDEzIE1IeiAgICovCisJezYxOSwgMTIsIDIsIDUsIDgsIDQsIDYsIDV9LAkvKiAxNi44IE1IeiAqLworCXsxMjUsIDIsIDIsIDUsIDgsIDQsIDYsIDV9LAkvKiAxOS4yIE1IeiAqLworCXs0MDAsIDEyLCAyLCA1LCA4LCA0LCA2LCA1fSwJLyogMjYgTUh6ICAgKi8KKwl7ODAwLCAyNiwgMiwgNSwgOCwgNCwgNiwgNX0sCS8qIDI3IE1IeiAgICovCisJezEyNSwgNSwgMiwgNSwgOCwgNCwgNiwgNX0JLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgcGVyX2RwbGxfcGFyYW1zXzE1MzZtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7NjQsIDAsIDgsIDYsIDEyLCA5LCA0LCA1fSwJLyogMTIgTUh6ICAgKi8KKwl7NzY4LCAxMiwgOCwgNiwgMTIsIDksIDQsIDV9LAkvKiAxMyBNSHogICAqLworCXszMjAsIDYsIDgsIDYsIDEyLCA5LCA0LCA1fSwJLyogMTYuOCBNSHogKi8KKwl7NDAsIDAsIDgsIDYsIDEyLCA5LCA0LCA1fSwJLyogMTkuMiBNSHogKi8KKwl7Mzg0LCAxMiwgOCwgNiwgMTIsIDksIDQsIDV9LAkvKiAyNiBNSHogICAqLworCXsyNTYsIDgsIDgsIDYsIDEyLCA5LCA0LCA1fSwJLyogMjcgTUh6ICAgKi8KKwl7MjAsIDAsIDgsIDYsIDEyLCA5LCA0LCA1fQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBpdmFfZHBsbF9wYXJhbXNfMTg2Mm1oeltOVU1fU1lTX0NMS1NdID0geworCXs5MzEsIDExLCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0sCS8qIDEyIE1IeiAgICovCisJezkzMSwgMTIsIC0xLCAtMSwgNCwgNywgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7NjY1LCAxMSwgLTEsIC0xLCA0LCA3LCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLworCXs3MjcsIDE0LCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezkzMSwgMjUsIC0xLCAtMSwgNCwgNywgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7OTMxLCAyNiwgLTEsIC0xLCA0LCA3LCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXs0MTIsIDE2LCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0JCS8qIDM4LjQgTUh6ICovCit9OworCisvKiBBQkUgTSAmIE4gdmFsdWVzIHdpdGggc3lzX2NsayBhcyBzb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMKKwkJYWJlX2RwbGxfcGFyYW1zX3N5c2Nsa18xOTY2MDhraHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7NDksIDUsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTIgTUh6ICAgKi8KKwl7NjgsIDgsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7MzUsIDUsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7NDYsIDgsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTkuMiBNSHogKi8KKwl7MzQsIDgsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7MjksIDcsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7NjQsIDI0LCAxLCAxLCAtMSwgLTEsIC0xLCAtMX0JLyogMzguNCBNSHogKi8KK307CisKKy8qIEFCRSBNICYgTiB2YWx1ZXMgd2l0aCAzMksgY2xvY2sgYXMgc291cmNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIGFiZV9kcGxsX3BhcmFtc18zMmtfMTk2NjA4a2h6ID0geworCTc1MCwgMCwgMSwgMSwgLTEsIC0xLCAtMSwgLTEKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyB1c2JfZHBsbF9wYXJhbXNfMTkyMG1oeltOVU1fU1lTX0NMS1NdID0geworCXs4MCwgMCwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDEyIE1IeiAgICovCisJezk2MCwgMTIsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezQwMCwgNiwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7NTAsIDAsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCQkvKiAxOS4yIE1IeiAqLworCXs0ODAsIDEyLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXszMjAsIDgsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezI1LCAwLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9CQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGlubGluZSB1MzIgX19nZXRfc3lzX2Nsa19pbmRleCh2b2lkKQoreworCXUzMiBpbmQ7CisJLyoKKwkgKiBGb3IgRVMxIHRoZSBST00gY29kZSBjYWxpYnJhdGlvbiBvZiBzeXMgY2xvY2sgaXMgbm90IHJlbGlhYmxlCisJICogZHVlIHRvIGh3IGlzc3VlLiBTbywgdXNlIGhhcmQtY29kZWQgdmFsdWUuIElmIHRoaXMgdmFsdWUgaXMgbm90CisJICogY29ycmVjdCBmb3IgYW55IGJvYXJkIG92ZXItcmlkZSB0aGlzIGZ1bmN0aW9uIGluIGJvYXJkIGZpbGUKKwkgKiBGcm9tIEVTMi4wIG9ud2FyZHMgeW91IHdpbGwgZ2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbQorCSAqIENNX1NZU19DTEtTRUwKKwkgKi8KKwlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA0NDMwX0VTMV8wKQorCQlpbmQgPSBPTUFQX1NZU19DTEtfSU5EXzM4XzRfTUhaOworCWVsc2UgeworCQkvKiBTWVNfQ0xLU0VMIC0gMSB0byBtYXRjaCB0aGUgZHBsbCBwYXJhbSBhcnJheSBpbmRpY2VzICovCisJCWluZCA9IChyZWFkbCgmcHJjbS0+Y21fc3lzX2Nsa3NlbCkgJgorCQkJQ01fU1lTX0NMS1NFTF9TWVNfQ0xLU0VMX01BU0spIC0gMTsKKwl9CisJcmV0dXJuIGluZDsKK30KKwordTMyIGdldF9zeXNfY2xrX2luZGV4KHZvaWQpCisJX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJfX2dldF9zeXNfY2xrX2luZGV4IikpKTsKKwordTMyIGdldF9zeXNfY2xrX2ZyZXEodm9pZCkKK3sKKwl1OCBpbmRleCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisJcmV0dXJuIHN5c19jbGtfYXJyYXlbaW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fYnlwYXNzX2RwbGwodTMyICpjb25zdCBiYXNlKQoreworCXN0cnVjdCBkcGxsX3JlZ3MgKmRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKKworCWNscnNldGJpdHNfbGUzMigmZHBsbF9yZWdzLT5jbV9jbGttb2RlX2RwbGwsCisJCQlDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9NQVNLLAorCQkJRFBMTF9FTl9GQVNUX1JFTE9DS19CWVBBU1MgPDwKKwkJCUNNX0NMS01PREVfRFBMTF9FTl9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9ieXBhc3ModTMyICpjb25zdCBiYXNlKQoreworCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKKworCWlmICghd2FpdF9vbl92YWx1ZShTVF9EUExMX0NMS19NQVNLLCAwLCAmZHBsbF9yZWdzLT5jbV9pZGxlc3RfZHBsbCwKKwkJCQlMREVMQVkpKSB7CisJCXByaW50ZigiQnlwYXNzaW5nIERQTEwgZmFpbGVkICVwXG4iLCBiYXNlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19sb2NrX2RwbGwodTMyICpjb25zdCBiYXNlKQoreworCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKKworCWNscnNldGJpdHNfbGUzMigmZHBsbF9yZWdzLT5jbV9jbGttb2RlX2RwbGwsCisJCSAgICAgIENNX0NMS01PREVfRFBMTF9EUExMX0VOX01BU0ssCisJCSAgICAgIERQTExfRU5fTE9DSyA8PCBDTV9DTEtNT0RFX0RQTExfRU5fU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfbG9jayh1MzIgKmNvbnN0IGJhc2UpCit7CisJc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCisJaWYgKCF3YWl0X29uX3ZhbHVlKFNUX0RQTExfQ0xLX01BU0ssIFNUX0RQTExfQ0xLX01BU0ssCisJCSZkcGxsX3JlZ3MtPmNtX2lkbGVzdF9kcGxsLCBMREVMQVkpKSB7CisJCXByaW50ZigiRFBMTCBsb2NraW5nIGZhaWxlZCBmb3IgJXBcbiIsIGJhc2UpOworCQloYW5nKCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19zZXR1cF9kcGxsKHUzMiAqY29uc3QgYmFzZSwgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXMsCisJCQkJdTggbG9jaykKK3sKKwl1MzIgdGVtcDsKKwlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CisKKwlieXBhc3NfZHBsbChiYXNlKTsKKworCS8qIFNldCBNICYgTiAqLworCXRlbXAgPSByZWFkbCgmZHBsbF9yZWdzLT5jbV9jbGtzZWxfZHBsbCk7CisKKwl0ZW1wICY9IH5DTV9DTEtTRUxfRFBMTF9NX01BU0s7CisJdGVtcCB8PSAocGFyYW1zLT5tIDw8IENNX0NMS1NFTF9EUExMX01fU0hJRlQpICYgQ01fQ0xLU0VMX0RQTExfTV9NQVNLOworCisJdGVtcCAmPSB+Q01fQ0xLU0VMX0RQTExfTl9NQVNLOworCXRlbXAgfD0gKHBhcmFtcy0+biA8PCBDTV9DTEtTRUxfRFBMTF9OX1NISUZUKSAmIENNX0NMS1NFTF9EUExMX05fTUFTSzsKKworCXdyaXRlbCh0ZW1wLCAmZHBsbF9yZWdzLT5jbV9jbGtzZWxfZHBsbCk7CisKKwkvKiBMb2NrICovCisJaWYgKGxvY2spCisJCWRvX2xvY2tfZHBsbChiYXNlKTsKKworCS8qIFNldHVwIHBvc3QtZGl2aWRlcnMgKi8KKwlpZiAocGFyYW1zLT5tMiA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5tMiwgJmRwbGxfcmVncy0+Y21fZGl2X20yX2RwbGwpOworCWlmIChwYXJhbXMtPm0zID49IDApCisJCXdyaXRlbChwYXJhbXMtPm0zLCAmZHBsbF9yZWdzLT5jbV9kaXZfbTNfZHBsbCk7CisJaWYgKHBhcmFtcy0+bTQgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+bTQsICZkcGxsX3JlZ3MtPmNtX2Rpdl9tNF9kcGxsKTsKKwlpZiAocGFyYW1zLT5tNSA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5tNSwgJmRwbGxfcmVncy0+Y21fZGl2X201X2RwbGwpOworCWlmIChwYXJhbXMtPm02ID49IDApCisJCXdyaXRlbChwYXJhbXMtPm02LCAmZHBsbF9yZWdzLT5jbV9kaXZfbTZfZHBsbCk7CisJaWYgKHBhcmFtcy0+bTcgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+bTcsICZkcGxsX3JlZ3MtPmNtX2Rpdl9tN19kcGxsKTsKKworCS8qIFdhaXQgdGlsbCB0aGUgRFBMTCBsb2NrcyAqLworCWlmIChsb2NrKQorCQl3YWl0X2Zvcl9sb2NrKGJhc2UpOworfQorCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9jb3JlX2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCisJc3dpdGNoIChvbWFwX3JldmlzaW9uKCkpIHsKKwljYXNlIE9NQVA0NDMwX0VTMV8wOgorCQlyZXR1cm4gJmNvcmVfZHBsbF9wYXJhbXNfZXMxXzE1MjRtaHpbc3lzY2xrX2luZF07CisJY2FzZSBPTUFQNDQzMF9FUzJfMDoKKwljYXNlIE9NQVA0NDMwX1NJTElDT05fSURfSU5WQUxJRDoKKwkJIC8qIHNhZmVzdCAqLworCQlyZXR1cm4gJmNvcmVfZHBsbF9wYXJhbXNfZXMyXzE2MDBtaHpfZGRyMjAwbWh6W3N5c2Nsa19pbmRdOworCWRlZmF1bHQ6CisJCXJldHVybiAmY29yZV9kcGxsX3BhcmFtc18xNjAwbWh6W3N5c2Nsa19pbmRdOworCX0KK30KKwordTMyIG9tYXA0X2Rkcl9jbGsodm9pZCkKK3sKKwl1MzIgZGRyX2Nsaywgc3lzX2Nsa19raHo7CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpjb3JlX2RwbGxfcGFyYW1zOworCisJc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOworCisJY29yZV9kcGxsX3BhcmFtcyA9IGdldF9jb3JlX2RwbGxfcGFyYW1zKCk7CisKKwlkZWJ1Zygic3lzX2NsayAlZFxuICIsIHN5c19jbGtfa2h6ICogMTAwMCk7CisKKwkvKiBGaW5kIENvcmUgRFBMTCBsb2NrZWQgZnJlcXVlbmN5IGZpcnN0ICovCisJZGRyX2NsayA9IHN5c19jbGtfa2h6ICogMiAqIGNvcmVfZHBsbF9wYXJhbXMtPm0gLworCQkJKGNvcmVfZHBsbF9wYXJhbXMtPm4gKyAxKTsKKwkvKgorCSAqIEREUiBmcmVxdWVuY3kgaXMgUEhZX1JPT1RfQ0xLLzIKKwkgKiBQSFlfUk9PVF9DTEsgPSBGZHBsbC8yL00yCisJICovCisJZGRyX2NsayA9IGRkcl9jbGsgLyA0IC8gY29yZV9kcGxsX3BhcmFtcy0+bTI7CisKKwlkZHJfY2xrICo9IDEwMDA7CS8qIGNvbnZlcnQgdG8gSHogKi8KKwlkZWJ1ZygiZGRyX2NsayAlZFxuICIsIGRkcl9jbGspOworCisJcmV0dXJuIGRkcl9jbGs7Cit9CisKKy8qCisgKiBMb2NrIE1QVSBkcGxsCisgKgorICogUmVzdWx0aW5nIE1QVSBmcmVxdWVuY2llczoKKyAqIDQ0MzAgRVMxLjAJOiA2MDAgTUh6CisgKiA0NDMwIEVTMi54CTogNzkyIE1IeiAoT1BQIFR1cmJvKQorICogNDQ2MAkJOiA5MjAgTUh6IChPUFAgVHVyYm8pIC0gRENDIGRpc2FibGVkCisgKi8KK3ZvaWQgY29uZmlndXJlX21wdV9kcGxsKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7CisJc3RydWN0IGRwbGxfcmVncyAqbXB1X2RwbGxfcmVnczsKKwl1MzIgb21hcDRfcmV2LCBzeXNjbGtfaW5kOworCisJb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCXN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCisJaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJcGFyYW1zID0gJm1wdV9kcGxsX3BhcmFtc18xMjAwbWh6W3N5c2Nsa19pbmRdOworCWVsc2UgaWYgKG9tYXA0X3JldiA8IE9NQVA0NDYwX0VTMV8wKQorCQlwYXJhbXMgPSAmbXB1X2RwbGxfcGFyYW1zXzE1ODRtaHpbc3lzY2xrX2luZF07CisJZWxzZQorCQlwYXJhbXMgPSAmbXB1X2RwbGxfcGFyYW1zXzE4NDBtaHpbc3lzY2xrX2luZF07CisKKwkvKiBEQ0MgYW5kIGNsb2NrIGRpdmlkZXIgc2V0dGluZ3MgZm9yIDQ0NjAgKi8KKwlpZiAob21hcDRfcmV2ID49IE9NQVA0NDYwX0VTMV8wKSB7CisJCW1wdV9kcGxsX3JlZ3MgPQorCQkJKHN0cnVjdCBkcGxsX3JlZ3MgKikmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX21wdTsKKwkJYnlwYXNzX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHUpOworCQljbHJiaXRzX2xlMzIoJnByY20tPmNtX21wdV9tcHVfY2xrY3RybCwKKwkJCU1QVV9DTEtDVFJMX0NMS1NFTF9FTUlGX0RJVl9NT0RFX01BU0spOworCQlzZXRiaXRzX2xlMzIoJnByY20tPmNtX21wdV9tcHVfY2xrY3RybCwKKwkJCU1QVV9DTEtDVFJMX0NMS1NFTF9BQkVfRElWX01PREVfTUFTSyk7CisJCWNscmJpdHNfbGUzMigmbXB1X2RwbGxfcmVncy0+Y21fY2xrc2VsX2RwbGwsCisJCQlDTV9DTEtTRUxfRENDX0VOX01BU0spOworCX0KKworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHUsIHBhcmFtcywgRFBMTF9MT0NLKTsKKwlkZWJ1ZygiTVBVIERQTEwgbG9ja2VkXG4iKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZHBsbHModm9pZCkKK3sKKwl1MzIgc3lzY2xrX2luZCwgdGVtcDsKKwljb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKnBhcmFtczsKKwlkZWJ1Zygic2V0dXBfZHBsbHNcbiIpOworCisJc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisKKwkvKiBDT1JFIGRwbGwgKi8KKwlwYXJhbXMgPSBnZXRfY29yZV9kcGxsX3BhcmFtcygpOwkvKiBkZWZhdWx0IC0gc2FmZXN0ICovCisJLyoKKwkgKiBEbyBub3QgbG9jayB0aGUgY29yZSBEUExMIG5vdy4gSnVzdCBzZXQgaXQgdXAuCisJICogQ29yZSBEUExMIHdpbGwgYmUgbG9ja2VkIGFmdGVyIHNldHRpbmcgdXAgRU1JRgorCSAqIHVzaW5nIHRoZSBGUkVRX1VQREFURSBtZXRob2QoZnJlcV91cGRhdGVfY29yZSgpKQorCSAqLworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9jb3JlLCBwYXJhbXMsIERQTExfTk9fTE9DSyk7CisJLyogU2V0IHRoZSByYXRpb3MgZm9yIENPUkVfQ0xLLCBMM19DTEssIEw0X0NMSyAqLworCXRlbXAgPSAoQ0xLU0VMX0NPUkVfWDJfRElWXzEgPDwgQ0xLU0VMX0NPUkVfU0hJRlQpIHwKKwkgICAgKENMS1NFTF9MM19DT1JFX0RJVl8yIDw8IENMS1NFTF9MM19TSElGVCkgfAorCSAgICAoQ0xLU0VMX0w0X0wzX0RJVl8yIDw8IENMS1NFTF9MNF9TSElGVCk7CisJd3JpdGVsKHRlbXAsICZwcmNtLT5jbV9jbGtzZWxfY29yZSk7CisJZGVidWcoIkNvcmUgRFBMTCBjb25maWd1cmVkXG4iKTsKKworCS8qIGxvY2sgUEVSIGRwbGwgKi8KKwlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfcGVyLAorCQkJJnBlcl9kcGxsX3BhcmFtc18xNTM2bWh6W3N5c2Nsa19pbmRdLCBEUExMX0xPQ0spOworCWRlYnVnKCJQRVIgRFBMTCBsb2NrZWRcbiIpOworCisJLyogTVBVIGRwbGwgKi8KKwljb25maWd1cmVfbXB1X2RwbGwoKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfbm9uX2Vzc2VudGlhbF9kcGxscyh2b2lkKQoreworCXUzMiBzeXNfY2xrX2toeiwgYWJlX3JlZl9jbGs7CisJdTMyIHN5c2Nsa19pbmQsIHNkX2RpdiwgbnVtLCBkZW47CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7CisKKwlzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlzeXNfY2xrX2toeiA9IGdldF9zeXNfY2xrX2ZyZXEoKSAvIDEwMDA7CisKKwkvKiBJVkEgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2J5cGNsa19kcGxsX2l2YSwKKwkJQ01fQllQQ0xLX0RQTExfSVZBX0NMS1NFTF9NQVNLLCBEUExMX0lWQV9DTEtTRUxfQ09SRV9YMl9ESVZfMik7CisKKwlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfaXZhLAorCQkJJml2YV9kcGxsX3BhcmFtc18xODYybWh6W3N5c2Nsa19pbmRdLCBEUExMX0xPQ0spOworCisJLyoKKwkgKiBVU0I6CisJICogVVNCIGRwbGwgaXMgSi10eXBlLiBOZWVkIHRvIHNldCBEUExMX1NEX0RJViBmb3Igaml0dGVyIGNvcnJlY3Rpb24KKwkgKiBEUExMX1NEX0RJViA9IENFSUxJTkcgKFtEUExMX01VTFQvKERQTExfRElWKzEpXSogQ0xLSU5QIC8gMjUwKQorCSAqICAgICAgLSB3aGVyZSBDTEtJTlAgaXMgc3lzX2NsayBpbiBNSHoKKwkgKiBVc2UgQ0xLSU5QIGluIEtIeiBhbmQgYWRqdXN0IHRoZSBkZW5vbWluYXRvciBhY2NvcmRpbmdseSBzbworCSAqIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYWNjdXJhY3kgYW5kIGF0IHRoZSBzYW1lIHRpbWUgbm8gb3ZlcmZsb3cKKwkgKi8KKwlwYXJhbXMgPSAmdXNiX2RwbGxfcGFyYW1zXzE5MjBtaHpbc3lzY2xrX2luZF07CisJbnVtID0gcGFyYW1zLT5tICogc3lzX2Nsa19raHo7CisJZGVuID0gKHBhcmFtcy0+biArIDEpICogMjUwICogMTAwMDsKKwludW0gKz0gZGVuIC0gMTsKKwlzZF9kaXYgPSBudW0gLyBkZW47CisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jbGtzZWxfZHBsbF91c2IsCisJCQlDTV9DTEtTRUxfRFBMTF9EUExMX1NEX0RJVl9NQVNLLAorCQkJc2RfZGl2IDw8IENNX0NMS1NFTF9EUExMX0RQTExfU0RfRElWX1NISUZUKTsKKworCS8qIE5vdyBzZXR1cCB0aGUgZHBsbCB3aXRoIHRoZSByZWd1bGFyIGZ1bmN0aW9uICovCisJZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX3VzYiwgcGFyYW1zLCBEUExMX0xPQ0spOworCisjaWZkZWYgQ09ORklHX1NZU19PTUFQNF9BQkVfU1lTQ0sKKwlwYXJhbXMgPSAmYWJlX2RwbGxfcGFyYW1zX3N5c2Nsa18xOTY2MDhraHpbc3lzY2xrX2luZF07CisJYWJlX3JlZl9jbGsgPSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NZU0NMSzsKKyNlbHNlCisJcGFyYW1zID0gJmFiZV9kcGxsX3BhcmFtc18zMmtfMTk2NjA4a2h6OworCWFiZV9yZWZfY2xrID0gQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF8zMktDTEs7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGVuYWJsZSBzb21lIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhY2hpZXZlCisJICogMTk2LjYwOE1IeiBmcm9tIDMyNzY4IEh6CisJICovCisJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfYWJlLAorCQkJQ01fQ0xLTU9ERV9EUExMX0RSSUZUR1VBUkRfRU5fTUFTS3wKKwkJCUNNX0NMS01PREVfRFBMTF9SRUxPQ0tfUkFNUF9FTl9NQVNLfAorCQkJQ01fQ0xLTU9ERV9EUExMX0xQTU9ERV9FTl9NQVNLfAorCQkJQ01fQ0xLTU9ERV9EUExMX1JFR000WEVOX01BU0spOworCS8qIFNwZW5kIDQgUkVGQ0xLIGN5Y2xlcyBhdCBlYWNoIHN0YWdlICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfYWJlLAorCQkJQ01fQ0xLTU9ERV9EUExMX1JBTVBfUkFURV9NQVNLLAorCQkJMSA8PCBDTV9DTEtNT0RFX0RQTExfUkFNUF9SQVRFX1NISUZUKTsKKyNlbmRpZgorCisJLyogU2VsZWN0IHRoZSByaWdodCByZWZlcmVuY2UgY2xrICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9hYmVfcGxsX3JlZl9jbGtzZWwsCisJCQlDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX01BU0ssCisJCQlhYmVfcmVmX2NsayA8PCBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NISUZUKTsKKwkvKiBMb2NrIHRoZSBkcGxsICovCisJZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwgcGFyYW1zLCBEUExMX0xPQ0spOworfQorCitzdGF0aWMgdm9pZCBkb19zY2FsZV90cHM2MjM2MSh1MzIgcmVnLCB1MzIgdm9sdF9tdikKK3sKKwl1MzIgdGVtcCwgc3RlcDsKKworCXN0ZXAgPSB2b2x0X212IC0gVFBTNjIzNjFfQkFTRV9WT0xUX01WOworCXN0ZXAgLz0gMTA7CisKKwkvKgorCSAqIFNlbGVjdCBTRVQxIGluIFRQUzYyMzYxOgorCSAqIFZTRUwxIGlzIGdyb3VuZGVkIG9uIGJvYXJkLiBTbyB0aGUgZm9sbG93aW5nIHNlbGVjdHMKKwkgKiBWU0VMMSA9IDAgYW5kIFZTRUwwID0gMQorCSAqLworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKFRQUzYyMzYxX1ZTRUwwX0dQSU8sIDApOworCW9tYXBfc2V0X2dwaW9fZGF0YW91dChUUFM2MjM2MV9WU0VMMF9HUElPLCAxKTsKKworCXRlbXAgPSBUUFM2MjM2MV9JMkNfU0xBVkVfQUREUiB8CisJICAgIChyZWcgPDwgUFJNX1ZDX1ZBTF9CWVBBU1NfUkVHQUREUl9TSElGVCkgfAorCSAgICAoc3RlcCA8PCBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX1NISUZUKSB8CisJICAgIFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVDsKKwlkZWJ1ZygiZG9fc2NhbGVfdHBzNjIzNjE6IHZvbHQgLSAlZCBzdGVwIC0gMHgleFxuIiwgdm9sdF9tdiwgc3RlcCk7CisKKwl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y192YWxfYnlwYXNzKTsKKwlpZiAoIXdhaXRfb25fdmFsdWUoUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklULCAwLAorCQkJCSZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcywgTERFTEFZKSkgeworCQlwdXRzKCJTY2FsaW5nIHZvbHRhZ2UgZmFpbGVkIGZvciB2ZGRfbXB1IGZyb20gVFBTXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX3NjYWxlX3Zjb3JlKHUzMiB2Y29yZV9yZWcsIHUzMiB2b2x0X212KQoreworCXUzMiB0ZW1wLCBvZmZzZXRfY29kZTsKKwl1MzIgc3RlcCA9IDEyNjYwOyAvKiAxMi42NiBtViByZXByZXNlbnRlZCBpbiB1ViAqLworCXUzMiBvZmZzZXQgPSB2b2x0X212OworCisJLyogY29udmVydCB0byB1ViBmb3IgYmV0dGVyIGFjY3VyYWN5IGluIHRoZSBjYWxjdWxhdGlvbnMgKi8KKwlvZmZzZXQgKj0gMTAwMDsKKworCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMxXzApCisJCW9mZnNldCAtPSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1VWOworCWVsc2UKKwkJb2Zmc2V0IC09IFBIT0VOSVhfU01QU19CQVNFX1ZPTFRfU1REX01PREVfV0lUSF9PRkZTRVRfVVY7CisKKwlvZmZzZXRfY29kZSA9IChvZmZzZXQgKyBzdGVwIC0gMSkgLyBzdGVwOworCS8qIFRoZSBjb2RlIHN0YXJ0cyBhdCAxIG5vdCAwICovCisJb2Zmc2V0X2NvZGUrKzsKKworCWRlYnVnKCJkb19zY2FsZV92Y29yZTogdm9sdCAtICVkIG9mZnNldF9jb2RlIC0gMHgleFxuIiwgdm9sdF9tdiwKKwkJb2Zmc2V0X2NvZGUpOworCisJdGVtcCA9IFNNUFNfSTJDX1NMQVZFX0FERFIgfAorCSAgICAodmNvcmVfcmVnIDw8IFBSTV9WQ19WQUxfQllQQVNTX1JFR0FERFJfU0hJRlQpIHwKKwkgICAgKG9mZnNldF9jb2RlIDw8IFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfU0hJRlQpIHwKKwkgICAgUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklUOworCXdyaXRlbCh0ZW1wLCAmcHJjbS0+cHJtX3ZjX3ZhbF9ieXBhc3MpOworCWlmICghd2FpdF9vbl92YWx1ZShQUk1fVkNfVkFMX0JZUEFTU19WQUxJRF9CSVQsIDAsCisJCQkJJnByY20tPnBybV92Y192YWxfYnlwYXNzLCBMREVMQVkpKSB7CisJCXByaW50ZigiU2NhbGluZyB2b2x0YWdlIGZhaWxlZCBmb3IgMHgleFxuIiwgdmNvcmVfcmVnKTsKKwl9Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgdm9sdGFnZXMgZm9yIHZkZF9tcHUsIHZkZF9jb3JlLCBhbmQgdmRkX2l2YQorICogV2Ugc2V0IHRoZSBtYXhpbXVtIHZvbHRhZ2VzIGFsbG93ZWQgaGVyZSBiZWNhdXNlIFNtYXJ0LVJlZmxleCBpcyBub3QKKyAqIGVuYWJsZWQgaW4gYm9vdGxvYWRlci4gVm9sdGFnZSBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsIHdpbGwgc2V0CisgKiB0aGVzZSB0byB0aGUgbm9taW5hbCB2YWx1ZXMgYWZ0ZXIgZW5hYmxpbmcgU21hcnQtUmVmbGV4CisgKi8KK3N0YXRpYyB2b2lkIHNjYWxlX3Zjb3Jlcyh2b2lkKQoreworCXUzMiB2b2x0LCBzeXNfY2xrX2toeiwgY3ljbGVzX2hpLCBjeWNsZXNfbG93LCB0ZW1wLCBvbWFwNF9yZXY7CisKKwlzeXNfY2xrX2toeiA9IGdldF9zeXNfY2xrX2ZyZXEoKSAvIDEwMDA7CisKKwkvKgorCSAqIFNldHVwIHRoZSBkZWRpY2F0ZWQgSTJDIGNvbnRyb2xsZXIgZm9yIFZvbHRhZ2UgQ29udHJvbAorCSAqIEkyQyBjbGsgLSBoaWdoIHBlcmlvZCA0MCUgbG93IHBlcmlvZCA2MCUKKwkgKi8KKwljeWNsZXNfaGkgPSBzeXNfY2xrX2toeiAqIDQgLyBQUk1fVkNfSTJDX0NIQU5ORUxfRlJFUV9LSFogLyAxMDsKKwljeWNsZXNfbG93ID0gc3lzX2Nsa19raHogKiA2IC8gUFJNX1ZDX0kyQ19DSEFOTkVMX0ZSRVFfS0haIC8gMTA7CisJLyogdmFsdWVzIHRvIGJlIHNldCBpbiByZWdpc3RlciAtIGxlc3MgYnkgNSAmIDcgcmVzcGVjdGl2ZWx5ICovCisJY3ljbGVzX2hpIC09IDU7CisJY3ljbGVzX2xvdyAtPSA3OworCXRlbXAgPSAoY3ljbGVzX2hpIDw8IFBSTV9WQ19DRkdfSTJDX0NMS19TQ0xIX1NISUZUKSB8CisJICAgICAgIChjeWNsZXNfbG93IDw8IFBSTV9WQ19DRkdfSTJDX0NMS19TQ0xMX1NISUZUKTsKKwl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y19jZmdfaTJjX2Nsayk7CisKKwkvKiBEaXNhYmxlIGhpZ2ggc3BlZWQgbW9kZSBhbmQgYWxsIGFkdmFuY2VkIGZlYXR1cmVzICovCisJd3JpdGVsKDB4MCwgJnByY20tPnBybV92Y19jZmdfaTJjX21vZGUpOworCisJb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCS8qIFRQUyAtIHN1cHBsaWVzIHZkZF9tcHUgb24gNDQ2MCAqLworCWlmIChvbWFwNF9yZXYgPj0gT01BUDQ0NjBfRVMxXzApIHsKKwkJdm9sdCA9IDE0MzA7CisJCWRvX3NjYWxlX3RwczYyMzYxKFRQUzYyMzYxX1JFR19BRERSX1NFVDEsIHZvbHQpOworCX0KKworCS8qCisJICogVkNPUkUgMQorCSAqCisJICogNDQzMCA6IHN1cHBsaWVzIHZkZF9tcHUKKwkgKiBTZXR0aW5nIGEgaGlnaCB2b2x0YWdlIGZvciBOaXRybyBtb2RlIGFzIHNtYXJ0IHJlZmxleCBpcyBub3QgZW5hYmxlZC4KKwkgKiBXZSB1c2UgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgaW4gdGhlIEFWUyByYW5nZSBiZWNhdXNlIHRoZSBuZXh0CisJICogaGlnaGVyIHZvbHRhZ2UgaW4gdGhlIGRpc2NyZXRlIHJhbmdlIChjb2RlID49IDBiMTExMDEwKSBpcyB3YXkgdG9vCisJICogaGlnaAorCSAqCisJICogNDQ2MCA6IHN1cHBsaWVzIHZkZF9jb3JlCisJICovCisJaWYgKG9tYXA0X3JldiA8IE9NQVA0NDYwX0VTMV8wKSB7CisJCXZvbHQgPSAxNDE3OworCQlkb19zY2FsZV92Y29yZShTTVBTX1JFR19BRERSX1ZDT1JFMSwgdm9sdCk7CisJfSBlbHNlIHsKKwkJdm9sdCA9IDEyMDA7CisJCWRvX3NjYWxlX3Zjb3JlKFNNUFNfUkVHX0FERFJfVkNPUkUxLCB2b2x0KTsKKwl9CisKKwkvKiBWQ09SRSAyIC0gc3VwcGxpZXMgdmRkX2l2YSAqLworCXZvbHQgPSAxMjAwOworCWRvX3NjYWxlX3Zjb3JlKFNNUFNfUkVHX0FERFJfVkNPUkUyLCB2b2x0KTsKKworCS8qCisJICogVkNPUkUgMworCSAqIDQ0MzAgOiBzdXBwbGllcyB2ZGRfY29yZQorCSAqIDQ0NjAgOiBub3QgY29ubmVjdGVkCisJICovCisJaWYgKG9tYXA0X3JldiA8IE9NQVA0NDYwX0VTMV8wKSB7CisJCXZvbHQgPSAxMjAwOworCQlkb19zY2FsZV92Y29yZShTTVBTX1JFR19BRERSX1ZDT1JFMywgdm9sdCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Nsb2NrX2RvbWFpbih1MzIgKmNvbnN0IGNsa2N0cmxfcmVnLCB1MzIgZW5hYmxlX21vZGUpCit7CisJY2xyc2V0Yml0c19sZTMyKGNsa2N0cmxfcmVnLCBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9NQVNLLAorCQkJZW5hYmxlX21vZGUgPDwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQpOworCWRlYnVnKCJFbmFibGUgY2xvY2sgZG9tYWluIC0gMHglMDh4XG4iLCBjbGtjdHJsX3JlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9jbGtfZW5hYmxlKHUzMiAqY2xrY3RybF9hZGRyKQoreworCXUzMiBjbGtjdHJsLCBpZGxlc3QgPSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfRElTQUJMRUQ7CisJdTMyIGJvdW5kID0gTERFTEFZOworCisJd2hpbGUgKChpZGxlc3QgPT0gTU9EVUxFX0NMS0NUUkxfSURMRVNUX0RJU0FCTEVEKSB8fAorCQkoaWRsZXN0ID09IE1PRFVMRV9DTEtDVFJMX0lETEVTVF9UUkFOU0lUSU9OSU5HKSkgeworCisJCWNsa2N0cmwgPSByZWFkbChjbGtjdHJsX2FkZHIpOworCQlpZGxlc3QgPSAoY2xrY3RybCAmIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9NQVNLKSA+PgorCQkJIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9TSElGVDsKKwkJaWYgKC0tYm91bmQgPT0gMCkgeworCQkJcHJpbnRmKCJDbG9jayBlbmFibGUgZmFpbGVkIGZvciAweCVwIGlkbGVzdCAweCV4XG4iLAorCQkJCWNsa2N0cmxfYWRkciwgY2xrY3RybCk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2xvY2tfbW9kdWxlKHUzMiAqY29uc3QgY2xrY3RybF9hZGRyLCB1MzIgZW5hYmxlX21vZGUsCisJCQkJdTMyIHdhaXRfZm9yX2VuYWJsZSkKK3sKKwljbHJzZXRiaXRzX2xlMzIoY2xrY3RybF9hZGRyLCBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCisJCQllbmFibGVfbW9kZSA8PCBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKKwlkZWJ1ZygiRW5hYmxlIGNsb2NrIG1vZHVsZSAtIDB4JTA4eFxuIiwgY2xrY3RybF9hZGRyKTsKKwlpZiAod2FpdF9mb3JfZW5hYmxlKQorCQl3YWl0X2Zvcl9jbGtfZW5hYmxlKGNsa2N0cmxfYWRkcik7Cit9CisKKy8qCisgKiBFbmFibGUgZXNzZW50aWFsIGNsb2NrIGRvbWFpbnMsIG1vZHVsZXMgYW5kCisgKiBkbyBzb21lIGFkZGl0aW9uYWwgc3BlY2lhbCBzZXR0aW5ncyBuZWVkZWQKKyAqLworc3RhdGljIHZvaWQgZW5hYmxlX2Jhc2ljX2Nsb2Nrcyh2b2lkKQoreworCXUzMiBpLCBtYXggPSAxMDAsIHdhaXRfZm9yX2VuYWJsZSA9IDE7CisJdTMyICpjb25zdCBjbGtfZG9tYWluc19lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX2w0cGVyX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2wzaW5pdF9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9sNGNmZ19jbGtzdGN0cmwsCisJCTAKKwl9OworCisJdTMyICpjb25zdCBjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fd2t1cF9ncGlvMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwaW8zX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncGlvNF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzVfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwaW82X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9tZW1pZl9lbWlmXzFfY2xrY3RybCwKKwkJJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzdXNib3RnX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luaXRfdXNicGh5X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNGNmZ19sNF9jZmdfY2xrY3RybCwKKwkJMAorCX07CisKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjJfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5pdF9oc21tYzFfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5pdF9oc21tYzJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21jc3BpMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fd2t1cF9ncHRpbWVyMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfaTJjNF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fd2t1cF93ZHRpbWVyMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKKwkJMAorCX07CisKKwkvKiBFbmFibGUgb3B0aW9uYWwgYWRkaXRpb25hbCBmdW5jdGlvbmFsIGNsb2NrIGZvciBHUElPNCAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfZ3BpbzRfY2xrY3RybCwKKwkJCUdQSU80X0NMS0NUUkxfT1BURkNMS0VOX01BU0spOworCisJLyogRW5hYmxlIDk2IE1IeiBjbG9jayBmb3IgTU1DMSAmIE1NQzIgKi8KKwlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2wzaW5pdF9oc21tYzFfY2xrY3RybCwKKwkJCUhTTU1DX0NMS0NUUkxfQ0xLU0VMX01BU0spOworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDNpbml0X2hzbW1jMl9jbGtjdHJsLAorCQkJSFNNTUNfQ0xLQ1RSTF9DTEtTRUxfTUFTSyk7CisKKwkvKiBTZWxlY3QgMzJLSHogY2xvY2sgYXMgdGhlIHNvdXJjZSBvZiBHUFRJTUVSMSAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fd2t1cF9ncHRpbWVyMV9jbGtjdHJsLAorCQkJR1BUSU1FUjFfQ0xLQ1RSTF9DTEtTRUxfTUFTSyk7CisKKwkvKiBFbmFibGUgb3B0aW9uYWwgNDhNIGZ1bmN0aW9uYWwgY2xvY2sgZm9yIFVTQiAgUEhZICovCisJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sM2luaXRfdXNicGh5X2Nsa2N0cmwsCisJCQlVU0JQSFlfQ0xLQ1RSTF9PUFRGQ0xLRU5fUEhZXzQ4TV9NQVNLKTsKKworCS8qIFB1dCB0aGUgY2xvY2sgZG9tYWlucyBpbiBTV19XS1VQIG1vZGUgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX2RvbWFpbnNfZXNzZW50aWFsW2ldOyBpKyspIHsKKwkJZW5hYmxlX2Nsb2NrX2RvbWFpbihjbGtfZG9tYWluc19lc3NlbnRpYWxbaV0sCisJCQkJICAgIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVApOworCX0KKworCS8qIENsb2NrIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIHB1dCBpbiBIV19BVVRPICovCisJZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsW2ldOyBpKyspIHsKKwkJZW5hYmxlX2Nsb2NrX21vZHVsZShjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbFtpXSwKKwkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9IV19BVVRPLAorCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOworCX07CisKKwkvKiBDbG9jayBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBwdXQgaW4gU1dfRVhQTElDSVRfRU4gbW9kZSAqLworCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWxbaV07IGkrKykgeworCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbFtpXSwKKwkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiwKKwkJCQkgICAgd2FpdF9mb3JfZW5hYmxlKTsKKwl9OworCisJLyogUHV0IHRoZSBjbG9jayBkb21haW5zIGluIEhXX0FVVE8gbW9kZSBub3cgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX2RvbWFpbnNfZXNzZW50aWFsW2ldOyBpKyspIHsKKwkJZW5hYmxlX2Nsb2NrX2RvbWFpbihjbGtfZG9tYWluc19lc3NlbnRpYWxbaV0sCisJCQkJICAgIENEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8pOworCX0KK30KKworLyoKKyAqIEVuYWJsZSBub24tZXNzZW50aWFsIGNsb2NrIGRvbWFpbnMsIG1vZHVsZXMgYW5kCisgKiBkbyBzb21lIGFkZGl0aW9uYWwgc3BlY2lhbCBzZXR0aW5ncyBuZWVkZWQKKyAqLworc3RhdGljIHZvaWQgZW5hYmxlX25vbl9lc3NlbnRpYWxfY2xvY2tzKHZvaWQpCit7CisJdTMyIGksIG1heCA9IDEwMCwgd2FpdF9mb3JfZW5hYmxlID0gMDsKKwl1MzIgKmNvbnN0IGNsa19kb21haW5zX25vbl9lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX21wdV9tM19jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9pdmFoZF9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9kc3BfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fZHNzX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX3NneF9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbTFfYWJlX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2MyY19jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9jYW1fY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fZHNzX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX3NkbWFfY2xrc3RjdHJsLAorCQkwCisJfTsKKworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfaHdfYXV0b19ub25fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9tcHVfbTNfbXB1X20zX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9pdmFoZF9pdmFoZF9jbGtjdHJsLAorCQkmcHJjbS0+Y21faXZhaGRfc2wyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9kc3BfZHNwX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM18yX2dwbWNfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5zdHJfbDNfM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbnN0cl9sM19pbnN0cl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbnN0cl9pbnRyY29ubl93cDFfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5pdF9oc2lfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5pdF9oc3VzYnRsbF9jbGtjdHJsLAorCQkwCisJfTsKKworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fbm9uX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y20xX2FiZV9hZXNzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3BkbV9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9kbWljX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX21jYXNwX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX21jYnNwMV9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9tY2JzcDJfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfbWNic3AzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3NsaW1idXNfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfdGltZXI1X2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3RpbWVyNl9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV90aW1lcjdfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfdGltZXI4X2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3dkdDNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwdGltZXI5X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyMTBfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwdGltZXIxMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwdGltZXI0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9oZHExd19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbWNic3A0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9tY3NwaTJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21jc3BpM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbWNzcGk0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9tbWNzZDNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21tY3NkNF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbW1jc2Q1X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl91YXJ0MV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfdWFydDJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX3VhcnQ0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV93a3VwX2tleWJvYXJkX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV93a3VwX3dkdGltZXIyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9jYW1faXNzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9jYW1fZmRpZl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fZHNzX2Rzc19jbGtjdHJsLAorCQkmcHJjbS0+Y21fc2d4X3NneF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzdXNiaG9zdF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2ZzdXNiX2Nsa2N0cmwsCisJCTAKKwl9OworCisJLyogRW5hYmxlIG9wdGlvbmFsIGZ1bmN0aW9uYWwgY2xvY2sgZm9yIElTUyAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2FtX2lzc19jbGtjdHJsLCBJU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSyk7CisKKwkvKiBFbmFibGUgYWxsIG9wdGlvbmFsIGZ1bmN0aW9uYWwgY2xvY2tzIG9mIERTUyAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fZHNzX2Rzc19jbGtjdHJsLCBEU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSyk7CisKKworCS8qIFB1dCB0aGUgY2xvY2sgZG9tYWlucyBpbiBTV19XS1VQIG1vZGUgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbFtpXTsgaSsrKSB7CisJCWVuYWJsZV9jbG9ja19kb21haW4oY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbFtpXSwKKwkJCQkgICAgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCk7CisJfQorCisJLyogQ2xvY2sgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIEhXX0FVVE8gKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX21vZHVsZXNfaHdfYXV0b19ub25fZXNzZW50aWFsW2ldOyBpKyspIHsKKwkJZW5hYmxlX2Nsb2NrX21vZHVsZShjbGtfbW9kdWxlc19od19hdXRvX25vbl9lc3NlbnRpYWxbaV0sCisJCQkJICAgIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfSFdfQVVUTywKKwkJCQkgICAgd2FpdF9mb3JfZW5hYmxlKTsKKwl9OworCisJLyogQ2xvY2sgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIFNXX0VYUExJQ0lUX0VOIG1vZGUgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fbm9uX2Vzc2VudGlhbFtpXTsKKwkgICAgIGkrKykgeworCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX25vbl9lc3NlbnRpYWxbaV0sCisJCQkJICAgIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4sCisJCQkJICAgIHdhaXRfZm9yX2VuYWJsZSk7CisJfTsKKworCS8qIFB1dCB0aGUgY2xvY2sgZG9tYWlucyBpbiBIV19BVVRPIG1vZGUgbm93ICovCisJZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19kb21haW5zX25vbl9lc3NlbnRpYWxbaV07IGkrKykgeworCQllbmFibGVfY2xvY2tfZG9tYWluKGNsa19kb21haW5zX25vbl9lc3NlbnRpYWxbaV0sCisJCQkJICAgIENEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8pOworCX0KKworCS8qIFB1dCBjYW1lcmEgbW9kdWxlIGluIG5vIHNsZWVwIG1vZGUgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2NhbV9jbGtzdGN0cmwsIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX05PX1NMRUVQIDw8CisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKK30KKworCit2b2lkIGZyZXFfdXBkYXRlX2NvcmUodm9pZCkKK3sKKwl1MzIgZnJlcV9jb25maWcxID0gMDsKKwljb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmNvcmVfZHBsbF9wYXJhbXM7CisKKwljb3JlX2RwbGxfcGFyYW1zID0gZ2V0X2NvcmVfZHBsbF9wYXJhbXMoKTsKKwkvKiBQdXQgRU1JRiBjbG9jayBkb21haW4gaW4gc3cgd2FrZXVwIG1vZGUgKi8KKwllbmFibGVfY2xvY2tfZG9tYWluKCZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCisJCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCk7CisJd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwpOworCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsKTsKKworCWZyZXFfY29uZmlnMSA9IFNIQURPV19GUkVRX0NPTkZJRzFfRlJFUV9VUERBVEVfTUFTSyB8CisJICAgIFNIQURPV19GUkVRX0NPTkZJRzFfRExMX1JFU0VUX01BU0s7CisKKwlmcmVxX2NvbmZpZzEgfD0gKERQTExfRU5fTE9DSyA8PCBTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fU0hJRlQpICYKKwkJCQlTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fTUFTSzsKKworCWZyZXFfY29uZmlnMSB8PSAoY29yZV9kcGxsX3BhcmFtcy0+bTIgPDwKKwkJCVNIQURPV19GUkVRX0NPTkZJRzFfTTJfRElWX1NISUZUKSAmCisJCQlTSEFET1dfRlJFUV9DT05GSUcxX00yX0RJVl9NQVNLOworCisJd3JpdGVsKGZyZXFfY29uZmlnMSwgJnByY20tPmNtX3NoYWRvd19mcmVxX2NvbmZpZzEpOworCWlmICghd2FpdF9vbl92YWx1ZShTSEFET1dfRlJFUV9DT05GSUcxX0ZSRVFfVVBEQVRFX01BU0ssIDAsCisJCQkJJnByY20tPmNtX3NoYWRvd19mcmVxX2NvbmZpZzEsIExERUxBWSkpIHsKKwkJcHV0cygiRlJFUSBVUERBVEUgcHJvY2VkdXJlIGZhaWxlZCEhIik7CisJCWhhbmcoKTsKKwl9CisKKwkvKiBQdXQgRU1JRiBjbG9jayBkb21haW4gYmFjayBpbiBodyBhdXRvIG1vZGUgKi8KKwllbmFibGVfY2xvY2tfZG9tYWluKCZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCisJCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyk7CisJd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwpOworCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsKTsKK30KKwordm9pZCBieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCit7CisJZG9fYnlwYXNzX2RwbGwoYmFzZSk7CisJd2FpdF9mb3JfYnlwYXNzKGJhc2UpOworfQorCit2b2lkIGxvY2tfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCit7CisJZG9fbG9ja19kcGxsKGJhc2UpOworCXdhaXRfZm9yX2xvY2soYmFzZSk7Cit9CisKK3ZvaWQgc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKHZvaWQpCit7CisJLyogRG8gbm90IGFkZCBhbnkgc3BsX2RlYnVnIHByaW50cyBpbiB0aGlzIGZ1bmN0aW9uICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl9jbGtzdGN0cmwsIENEX0NMS0NUUkxfQ0xLVFJDVFJMX01BU0ssCisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQIDw8CisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TSElGVCk7CisKKwkvKiBFbmFibGUgYWxsIFVBUlRzIC0gY29uc29sZSB3aWxsIGJlIG9uIG9uZSBvZiB0aGVtICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0MV9jbGtjdHJsLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX3VhcnQyX2Nsa2N0cmwsCisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOIDw8CisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKKworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4gPDwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOworCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0M19jbGtjdHJsLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX2Nsa3N0Y3RybCwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSywKKwkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8gPDwKKwkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX1NISUZUKTsKK30KKwordm9pZCBwcmNtX2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKG9tYXA0X2h3X2luaXRfY29udGV4dCgpKSB7CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9TUEw6CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUjoKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NIOgorCQllbmFibGVfYmFzaWNfY2xvY2tzKCk7CisJCXNjYWxlX3Zjb3JlcygpOworCQlzZXR1cF9kcGxscygpOworCQlzZXR1cF9ub25fZXNzZW50aWFsX2RwbGxzKCk7CisJCWVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2NrcygpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9ib2FyZC90aS9wYW5kYS9jb25maWcubWsgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvY29uZmlnLm1rCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIGJvYXJkL3RpL3BhbmRhL2NvbmZpZy5tawpyZW5hbWUgdG8gYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2NvbmZpZy5tawppbmRleCAzMzkwMWE3Li5iMzRmYTY0IDEwMDY0NAotLS0gYS9ib2FyZC90aS9wYW5kYS9jb25maWcubWsKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2NvbmZpZy5tawpAQCAtMSwxMyArMSwxMyBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOQotIyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQsIDx3d3cudGkuY29tPgotIwotIyBPTUFQIDQ0MzAgU0RQCi0jIHNlZSBodHRwOi8vd3d3LnRpLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVGV4YXMgSW5zdHJ1bWVudHMKLSMKKyMgQ29weXJpZ2h0IDIwMTEgTGluYXJvIExpbWl0ZWQKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICMgcHJvamVjdC4KICMKKyMgKEMpIENvcHlyaWdodCAyMDEwCisjIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyMKKyMgQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKQEAgLTE1LDcgKzE1LDcgQEAKICMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMyw5ICsyMyw4IEBACiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCi0jIFNEUkFNIEFkZHJlc3MgU3BhY2U6Ci0jIDgwMDAnMDAwMCAtIDlmZmYnZmZmZiAoNTEyIE1CKQotIyBMaW51eC1LZXJuZWwgaXMgZXhwZWN0ZWQgdG8gYmUgYXQgODAwMCc4MDAwLCBlbnRyeSA4MDAwJzgwMDAKLSMgKG1lbSBiYXNlICsgcmVzZXJ2ZWQpCi0KLUNPTkZJR19TWVNfVEVYVF9CQVNFID0gMHg4MGU4MDAwMAoraWZkZWYgQ09ORklHX1NQTF9CVUlMRAorQUxMLXkJKz0gJChPQkpUUkVFKS9NTE8KK2Vsc2UKK0FMTC15CSs9ICQob2JqKXUtYm9vdC5pbWcKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvZW1pZi5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2VtaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODdlYzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2VtaWYuYwpAQCAtMCwwICsxLDEzMTAgQEAKKy8qCisgKiBFTUlGIHByb2dyYW1taW5nCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZW1pZi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS91dGlscy5oPgorCitzdGF0aWMgaW5saW5lIHUzMiBlbWlmX251bSh1MzIgYmFzZSkKK3sKKwlpZiAoYmFzZSA9PSBPTUFQNDRYWF9FTUlGMSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYmFzZSA9PSBPTUFQNDRYWF9FTUlGMikKKwkJcmV0dXJuIDI7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ2V0X21yKHUzMiBiYXNlLCB1MzIgY3MsIHUzMiBtcl9hZGRyKQoreworCXUzMiBtcjsKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJbXJfYWRkciB8PSBjcyA8PCBPTUFQNDRYWF9SRUdfQ1NfU0hJRlQ7CisJd3JpdGVsKG1yX2FkZHIsICZlbWlmLT5lbWlmX2xwZGRyMl9tb2RlX3JlZ19jZmcpOworCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMyXzApCisJCW1yID0gcmVhZGwoJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGFfZXMyKTsKKwllbHNlCisJCW1yID0gcmVhZGwoJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGEpOworCWRlYnVnKCJnZXRfbXI6IEVNSUYlZCBjcyAlZCBtciAlMDh4IHZhbCAweCV4XG4iLCBlbWlmX251bShiYXNlKSwKKwkgICAgICBjcywgbXJfYWRkciwgbXIpOworCXJldHVybiBtcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9tcih1MzIgYmFzZSwgdTMyIGNzLCB1MzIgbXJfYWRkciwgdTMyIG1yX3ZhbCkKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJbXJfYWRkciB8PSBjcyA8PCBPTUFQNDRYWF9SRUdfQ1NfU0hJRlQ7CisJd3JpdGVsKG1yX2FkZHIsICZlbWlmLT5lbWlmX2xwZGRyMl9tb2RlX3JlZ19jZmcpOworCXdyaXRlbChtcl92YWwsICZlbWlmLT5lbWlmX2xwZGRyMl9tb2RlX3JlZ19kYXRhKTsKK30KKwordm9pZCBlbWlmX3Jlc2V0X3BoeSh1MzIgYmFzZSkKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCXUzMiBpb2RmdDsKKworCWlvZGZ0ID0gcmVhZGwoJmVtaWYtPmVtaWZfaW9kZnRfdGxnYyk7CisJaW9kZnQgfD0gT01BUDQ0WFhfUkVHX1JFU0VUX1BIWV9NQVNLOworCXdyaXRlbChpb2RmdCwgJmVtaWYtPmVtaWZfaW9kZnRfdGxnYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2xwZGRyMl9pbml0KHUzMiBiYXNlLCB1MzIgY3MpCit7CisJdTMyIG1yX2FkZHI7CisKKwkvKiBXYWl0IHRpbGwgZGV2aWNlIGF1dG8gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKwl3aGlsZSAoZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIwKSAmIExQRERSMl9NUjBfREFJX01BU0spCisJCTsKKwlzZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjEwLCBNUjEwX1pRX1pRSU5JVCk7CisJLyoKKwkgKiB0WlFJTklUID0gMSB1cworCSAqIEVub3VnaCBsb29wcyBhc3N1bWluZyBhIG1heGltdW0gb2YgMkdIegorCSAqLworCXNkZWxheSgyMDAwKTsKKwlzZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjEsIE1SMV9CTF84X0JUX1NFUV9XUkFQX0VOX05XUl8zKTsKKwlzZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjE2LCBNUjE2X1JFRl9GVUxMX0FSUkFZKTsKKwkvKgorCSAqIEVuYWJsZSByZWZyZXNoIGFsb25nIHdpdGggd3JpdGluZyBNUjIKKwkgKiBFbmNvZGluZyBvZiBSTCBpbiBNUjIgaXMgKFJMIC0gMikKKwkgKi8KKwltcl9hZGRyID0gTFBERFIyX01SMiB8IE9NQVA0NFhYX1JFR19SRUZSRVNIX0VOX01BU0s7CisJc2V0X21yKGJhc2UsIGNzLCBtcl9hZGRyLCBSTF9GSU5BTCAtIDIpOworfQorCitzdGF0aWMgdm9pZCBscGRkcjJfaW5pdCh1MzIgYmFzZSwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJLyogTm90IE5WTSAqLworCWNscmJpdHNfbGUzMigmZW1pZi0+ZW1pZl9scGRkcjJfbnZtX2NvbmZpZywgT01BUDQ0WFhfUkVHX0NTMU5WTUVOX01BU0spOworCisJLyoKKwkgKiBLZWVwIFJFR19JTklUUkVGX0RJUyA9IDEgdG8gcHJldmVudCByZS1pbml0aWFsaXphdGlvbiBvZiBTRFJBTQorCSAqIHdoZW4gRU1JRl9TRFJBTV9DT05GSUcgcmVnaXN0ZXIgaXMgd3JpdHRlbgorCSAqLworCXNldGJpdHNfbGUzMigmZW1pZi0+ZW1pZl9zZHJhbV9yZWZfY3RybCwgT01BUDQ0WFhfUkVHX0lOSVRSRUZfRElTX01BU0spOworCisJLyoKKwkgKiBTZXQgdGhlIFNEUkFNX0NPTkZJRyBhbmQgUEhZX0NUUkwgZm9yIHRoZQorCSAqIHVuLWxvY2tlZCBmcmVxdWVuY3kgJiBkZWZhdWx0IFJMCisJICovCisJd3JpdGVsKHJlZ3MtPnNkcmFtX2NvbmZpZ19pbml0LCAmZW1pZi0+ZW1pZl9zZHJhbV9jb25maWcpOworCXdyaXRlbChyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQsICZlbWlmLT5lbWlmX2Rkcl9waHlfY3RybF8xKTsKKworCWRvX2xwZGRyMl9pbml0KGJhc2UsIENTMCk7CisJaWYgKHJlZ3MtPnNkcmFtX2NvbmZpZyAmIE9NQVA0NFhYX1JFR19FQkFOS19NQVNLKQorCQlkb19scGRkcjJfaW5pdChiYXNlLCBDUzEpOworCisJd3JpdGVsKHJlZ3MtPnNkcmFtX2NvbmZpZywgJmVtaWYtPmVtaWZfc2RyYW1fY29uZmlnKTsKKwl3cml0ZWwocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMSwgJmVtaWYtPmVtaWZfZGRyX3BoeV9jdHJsXzEpOworCisJLyogRW5hYmxlIHJlZnJlc2ggbm93ICovCisJY2xyYml0c19sZTMyKCZlbWlmLT5lbWlmX3NkcmFtX3JlZl9jdHJsLCBPTUFQNDRYWF9SRUdfSU5JVFJFRl9ESVNfTUFTSyk7CisKK30KKworc3RhdGljIHZvaWQgZW1pZl91cGRhdGVfdGltaW5ncyh1MzIgYmFzZSwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJd3JpdGVsKHJlZ3MtPnJlZl9jdHJsLCAmZW1pZi0+ZW1pZl9zZHJhbV9yZWZfY3RybF9zaGR3KTsKKwl3cml0ZWwocmVncy0+c2RyYW1fdGltMSwgJmVtaWYtPmVtaWZfc2RyYW1fdGltXzFfc2hkdyk7CisJd3JpdGVsKHJlZ3MtPnNkcmFtX3RpbTIsICZlbWlmLT5lbWlmX3NkcmFtX3RpbV8yX3NoZHcpOworCXdyaXRlbChyZWdzLT5zZHJhbV90aW0zLCAmZW1pZi0+ZW1pZl9zZHJhbV90aW1fM19zaGR3KTsKKwlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA0NDMwX0VTMV8wKSB7CisJCS8qIEVTMSBidWcgRU1JRiBzaG91bGQgYmUgaW4gZm9yY2UgaWRsZSBkdXJpbmcgZnJlcV91cGRhdGUgKi8KKwkJd3JpdGVsKDAsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOworCX0gZWxzZSB7CisJCXdyaXRlbChFTUlGX1BXUl9NR01UX0NUUkwsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOworCQl3cml0ZWwoRU1JRl9QV1JfTUdNVF9DVFJMX1NIRFcsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmxfc2hkdyk7CisJfQorCXdyaXRlbChyZWdzLT5yZWFkX2lkbGVfY3RybCwgJmVtaWYtPmVtaWZfcmVhZF9pZGxlY3RybF9zaGR3KTsKKwl3cml0ZWwocmVncy0+enFfY29uZmlnLCAmZW1pZi0+ZW1pZl96cV9jb25maWcpOworCXdyaXRlbChyZWdzLT50ZW1wX2FsZXJ0X2NvbmZpZywgJmVtaWYtPmVtaWZfdGVtcF9hbGVydF9jb25maWcpOworCXdyaXRlbChyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xLCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMV9zaGR3KTsKKworCWlmIChvbWFwX3JldmlzaW9uKCkgPj0gT01BUDQ0NjBfRVMxXzApIHsKKwkJd3JpdGVsKEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTVBVXzNfTExfMCwKKwkJCSZlbWlmLT5lbWlmX2wzX2NvbmZpZyk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTExfMCwKKwkJCSZlbWlmLT5lbWlmX2wzX2NvbmZpZyk7CisJfQorfQorCisjaWZuZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisjZGVmaW5lIHByaW50X3RpbWluZ19yZWcocmVnKSBkZWJ1ZygjcmVnIiAtIDB4JTA4eFxuIiwgKHJlZykpCisKK3N0YXRpYyB1MzIgKmNvbnN0IFRfbnVtID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1RfTlVNOworc3RhdGljIHUzMiAqY29uc3QgVF9kZW4gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfVF9ERU47CitzdGF0aWMgdTMyICpjb25zdCBlbWlmX3NpemVzID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1NJWkU7CisKKy8qCisgKiBPcmdhbml6YXRpb24gYW5kIHJlZnJlc2ggcmVxdWlyZW1lbnRzIGZvciBMUEREUjIgZGV2aWNlcyBvZiBkaWZmZXJlbnQKKyAqIHR5cGVzIGFuZCBkZW5zaXRpZXMuIERlcml2ZWQgZnJvbSBKRVNEMjA5LTIgc2VjdGlvbiAyLjQKKyAqLworY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nIGFkZHJlc3NpbmdfdGFibGVbXSA9IHsKKwkvKiBCYW5rcyB0UkVGSXgxMCAgICAgcm93eDMyLHJvd3gxNiAgICAgIGNvbHgzMixjb2x4MTYJZGVuc2l0eSAqLworCXtCQU5LUzQsIFRfUkVGSV8xNV82LCB7Uk9XXzEyLCBST1dfMTJ9LCB7Q09MXzcsIENPTF84fSB9LC8qNjRNICovCisJe0JBTktTNCwgVF9SRUZJXzE1XzYsIHtST1dfMTIsIFJPV18xMn0sIHtDT0xfOCwgQ09MXzl9IH0sLyoxMjhNICovCisJe0JBTktTNCwgVF9SRUZJXzdfOCwge1JPV18xMywgUk9XXzEzfSwge0NPTF84LCBDT0xfOX0gfSwvKjI1Nk0gKi8KKwl7QkFOS1M0LCBUX1JFRklfN184LCB7Uk9XXzEzLCBST1dfMTN9LCB7Q09MXzksIENPTF8xMH0gfSwvKjUxMk0gKi8KKwl7QkFOS1M4LCBUX1JFRklfN184LCB7Uk9XXzEzLCBST1dfMTN9LCB7Q09MXzksIENPTF8xMH0gfSwvKjFHUzQgKi8KKwl7QkFOS1M4LCBUX1JFRklfM185LCB7Uk9XXzE0LCBST1dfMTR9LCB7Q09MXzksIENPTF8xMH0gfSwvKjJHUzQgKi8KKwl7QkFOS1M4LCBUX1JFRklfM185LCB7Uk9XXzE0LCBST1dfMTR9LCB7Q09MXzEwLCBDT0xfMTF9IH0sLyo0RyAqLworCXtCQU5LUzgsIFRfUkVGSV8zXzksIHtST1dfMTUsIFJPV18xNX0sIHtDT0xfMTAsIENPTF8xMX0gfSwvKjhHICovCisJe0JBTktTNCwgVF9SRUZJXzdfOCwge1JPV18xNCwgUk9XXzE0fSwge0NPTF85LCBDT0xfMTB9IH0sLyoxR1MyICovCisJe0JBTktTNCwgVF9SRUZJXzNfOSwge1JPV18xNSwgUk9XXzE1fSwge0NPTF85LCBDT0xfMTB9IH0sLyoyR1MyICovCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbXSA9IHsKKwk4LAkJCS8qIDY0TWIgKi8KKwkxNiwJCQkvKiAxMjhNYiAqLworCTMyLAkJCS8qIDI1Nk1iICovCisJNjQsCQkJLyogNTEyTWIgKi8KKwkxMjgsCQkJLyogMUdiICAgKi8KKwkyNTYsCQkJLyogMkdiICAgKi8KKwk1MTIsCQkJLyogNEdiICAgKi8KKwkxMDI0LAkJCS8qIDhHYiAgICovCisJMjA0OCwJCQkvKiAxNkdiICAqLworCTQwOTYJCQkvKiAzMkdiICAqLworfTsKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgcGVyaW9kIG9mIEREUiBjbG9jayBmcm9tIGZyZXF1ZW5jeSB2YWx1ZSBhbmQgc2V0IHRoZQorICogZGVub21pbmF0b3IgYW5kIG51bWVyYXRvciBpbiBnbG9iYWwgdmFyaWFibGVzIGZvciBlYXN5IGFjY2VzcyBsYXRlcgorICovCitzdGF0aWMgdm9pZCBzZXRfZGRyX2Nsa19wZXJpb2QodTMyIGZyZXEpCit7CisJLyoKKwkgKiBwZXJpb2QgPSAxL2ZyZXEKKwkgKiBwZXJpb2RfaW5fbnMgPSAxMF45L2ZyZXEKKwkgKi8KKwkqVF9udW0gPSAxMDAwMDAwMDAwOworCSpUX2RlbiA9IGZyZXE7CisJY2FuY2VsX291dChUX251bSwgVF9kZW4sIDIwMCk7CisKK30KKworLyoKKyAqIENvbnZlcnQgdGltZSBpbiBuYW5vIHNlY29uZHMgdG8gbnVtYmVyIG9mIGN5Y2xlcyBvZiBERFIgY2xvY2sKKyAqLworc3RhdGljIGlubGluZSB1MzIgbnNfMl9jeWNsZXModTMyIG5zKQoreworCXJldHVybiAoKG5zICogKCpUX2RlbikpICsgKCpUX251bSkgLSAxKSAvICgqVF9udW0pOworfQorCisvKgorICogbnNfMl9jeWNsZXMgd2l0aCB0aGUgZGlmZmVyZW5jZSB0aGF0IHRoZSB0aW1lIHBhc3NlZCBpcyAyIHRpbWVzIHRoZSBhY3R1YWwKKyAqIHZhbHVlKHRvIGF2b2lkIGZyYWN0aW9ucykuIFRoZSBjeWNsZXMgcmV0dXJuZWQgaXMgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZgorICogdGhlIHRpbWluZyBwYXJhbWV0ZXIKKyAqLworc3RhdGljIGlubGluZSB1MzIgbnNfeDJfMl9jeWNsZXModTMyIG5zKQoreworCXJldHVybiAoKG5zICogKCpUX2RlbikpICsgKCpUX251bSkgKiAyIC0gMSkgLyAoKCpUX251bSkgKiAyKTsKK30KKworLyoKKyAqIEZpbmQgYWRkcmVzc2luZyB0YWJsZSBpbmRleCBiYXNlZCBvbiB0aGUgZGV2aWNlJ3MgdHlwZShTMiBvciBTNCkgYW5kCisgKiBkZW5zaXR5CisgKi8KK3M4IGFkZHJlc3NpbmdfdGFibGVfaW5kZXgodTggdHlwZSwgdTggZGVuc2l0eSwgdTggd2lkdGgpCit7CisJdTggaW5kZXg7CisJaWYgKChkZW5zaXR5ID4gTFBERFIyX0RFTlNJVFlfOEdiKSB8fCAod2lkdGggPT0gTFBERFIyX0lPX1dJRFRIXzgpKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIExvb2sgYXQgdGhlIHdheSBBRERSX1RBQkxFX0lOREVYKiB2YWx1ZXMgaGF2ZSBiZWVuIGRlZmluZWQKKwkgKiBpbiBlbWlmLmggY29tcGFyZWQgdG8gTFBERFIyX0RFTlNJVFlfKiB2YWx1ZXMKKwkgKiBUaGUgdGFibGUgaXMgbGF5ZWQgb3V0IGluIHRoZSBpbmNyZWFzaW5nIG9yZGVyIG9mIGRlbnNpdHkKKwkgKiAoaWdub3JpbmcgdHlwZSkuIFRoZSBleGNlcHRpb25zIDFHUzIgYW5kIDJHUzIgaGF2ZSBiZWVuIHBsYWNlZAorCSAqIGF0IHRoZSBlbmQKKwkgKi8KKwlpZiAoKHR5cGUgPT0gTFBERFIyX1RZUEVfUzIpICYmIChkZW5zaXR5ID09IExQRERSMl9ERU5TSVRZXzFHYikpCisJCWluZGV4ID0gQUREUl9UQUJMRV9JTkRFWDFHUzI7CisJZWxzZSBpZiAoKHR5cGUgPT0gTFBERFIyX1RZUEVfUzIpICYmIChkZW5zaXR5ID09IExQRERSMl9ERU5TSVRZXzJHYikpCisJCWluZGV4ID0gQUREUl9UQUJMRV9JTkRFWDJHUzI7CisJZWxzZQorCQlpbmRleCA9IGRlbnNpdHk7CisKKwlkZWJ1ZygiZW1pZjogYWRkcmVzc2luZyB0YWJsZSBpbmRleCAlZFxuIiwgaW5kZXgpOworCisJcmV0dXJuIGluZGV4OworfQorCisvKgorICogRmluZCB0aGUgdGhlIHJpZ2h0IHRpbWluZyB0YWJsZSBmcm9tIHRoZSBhcnJheSBvZiB0aW1pbmcKKyAqIHRhYmxlcyBvZiB0aGUgZGV2aWNlIHVzaW5nIEREUiBjbG9jayBmcmVxdWVuY3kKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqZ2V0X3RpbWluZ3NfdGFibGUoY29uc3Qgc3RydWN0CisJCQlscGRkcjJfYWNfdGltaW5ncyBjb25zdCAqY29uc3QgKmRldmljZV90aW1pbmdzLAorCQkJdTMyIGZyZXEpCit7CisJdTMyIGksIHRlbXAsIGZyZXFfbmVhcmVzdDsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MgPSAwOworCisJZW1pZl9hc3NlcnQoZnJlcSA8PSBNQVhfTFBERFIyX0ZSRVEpOworCWVtaWZfYXNzZXJ0KGRldmljZV90aW1pbmdzKTsKKworCS8qCisJICogU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBhbGxvd2VkIGZyZXF1ZW5jeSAtIHRoYXQgaXMgYWx3YXlzIHNhZmUKKwkgKi8KKwlmcmVxX25lYXJlc3QgPSBNQVhfTFBERFIyX0ZSRVE7CisJLyoKKwkgKiBGaW5kIHRoZSB0aW1pbmdzIHRhYmxlIHRoYXQgaGFzIHRoZSBtYXggZnJlcXVlbmN5IHZhbHVlOgorCSAqICAgaS4gIEFib3ZlIG9yIGVxdWFsIHRvIHRoZSBERFIgZnJlcXVlbmN5IC0gc2FmZQorCSAqICAgaWkuIFRoZSBsb3dlc3QgdGhhdCBzYXRpc2ZpZXMgY29uZGl0aW9uIChpKSAtIG9wdGltYWwKKwkgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IE1BWF9OVU1fU1BFRURCSU5TKSAmJiBkZXZpY2VfdGltaW5nc1tpXTsgaSsrKSB7CisJCXRlbXAgPSBkZXZpY2VfdGltaW5nc1tpXS0+bWF4X2ZyZXE7CisJCWlmICgodGVtcCA+PSBmcmVxKSAmJiAodGVtcCA8PSBmcmVxX25lYXJlc3QpKSB7CisJCQlmcmVxX25lYXJlc3QgPSB0ZW1wOworCQkJdGltaW5ncyA9IGRldmljZV90aW1pbmdzW2ldOworCQl9CisJfQorCWRlYnVnKCJlbWlmOiB0aW1pbmdzIHRhYmxlOiAlZFxuIiwgZnJlcV9uZWFyZXN0KTsKKwlyZXR1cm4gdGltaW5nczsKK30KKworLyoKKyAqIEZpbmRzIHRoZSB2YWx1ZSBvZiBlbWlmX3NkcmFtX2NvbmZpZ19yZWcKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBwcm9ncmFtbWVkIGJhc2VkIG9uIHRoZSBkZXZpY2Ugb24gQ1MwLgorICogSWYgdGhlcmUgaXMgYSBkZXZpY2Ugb24gQ1MxLCBpdCB3aWxsIGJlIHNhbWUgYXMgdGhhdCBvbiBDUzAgb3IKKyAqIGl0IHdpbGwgYmUgTlZNLiBXZSBkb24ndCBzdXBwb3J0IE5WTSB5ZXQuCisgKiBJZiBjczFfZGV2aWNlIHBvaW50ZXIgaXMgTlVMTCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlcmUgaXMgbm8gZGV2aWNlCisgKiBvbiBDUzEKKyAqLworc3RhdGljIHUzMiBnZXRfc2RyYW1fY29uZmlnX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlLAorCQkJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2UsCisJCQkJY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nLAorCQkJCXU4IFJMKQoreworCXUzMiBjb25maWdfcmVnID0gMDsKKworCWNvbmZpZ19yZWcgfD0gIChjczBfZGV2aWNlLT50eXBlICsgNCkgPDwgT01BUDQ0WFhfUkVHX1NEUkFNX1RZUEVfU0hJRlQ7CisJY29uZmlnX3JlZyB8PSAgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX01BWF9JTlRFUkxFQVZJTkcgPDwKKwkJCU9NQVA0NFhYX1JFR19JQkFOS19QT1NfU0hJRlQ7CisKKwljb25maWdfcmVnIHw9IGNzMF9kZXZpY2UtPmlvX3dpZHRoIDw8IE9NQVA0NFhYX1JFR19OQVJST1dfTU9ERV9TSElGVDsKKworCWNvbmZpZ19yZWcgfD0gUkwgPDwgT01BUDQ0WFhfUkVHX0NMX1NISUZUOworCisJY29uZmlnX3JlZyB8PSBhZGRyZXNzaW5nLT5yb3dfc3pbY3MwX2RldmljZS0+aW9fd2lkdGhdIDw8CisJCQlPTUFQNDRYWF9SRUdfUk9XU0laRV9TSElGVDsKKworCWNvbmZpZ19yZWcgfD0gYWRkcmVzc2luZy0+bnVtX2JhbmtzIDw8IE9NQVA0NFhYX1JFR19JQkFOS19TSElGVDsKKworCWNvbmZpZ19yZWcgfD0gKGNzMV9kZXZpY2UgPyBFQkFOS19DUzFfRU4gOiBFQkFOS19DUzFfRElTKSA8PAorCQkJT01BUDQ0WFhfUkVHX0VCQU5LX1NISUZUOworCisJY29uZmlnX3JlZyB8PSBhZGRyZXNzaW5nLT5jb2xfc3pbY3MwX2RldmljZS0+aW9fd2lkdGhdIDw8CisJCQlPTUFQNDRYWF9SRUdfUEFHRVNJWkVfU0hJRlQ7CisKKwlyZXR1cm4gY29uZmlnX3JlZzsKK30KKworc3RhdGljIHUzMiBnZXRfc2RyYW1fcmVmX2N0cmwodTMyIGZyZXEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcpCit7CisJdTMyIHJlZl9jdHJsID0gMCwgdmFsID0gMCwgZnJlcV9raHo7CisJZnJlcV9raHogPSBmcmVxIC8gMTAwMDsKKwkvKgorCSAqIHJlZnJlc2ggcmF0ZSB0byBiZSBzZXQgaXMgJ3RSRUZJICogZnJlcSBpbiBNSHoKKwkgKiBkaXZpc2lvbiBieSAxMDAwMCB0byBhY2NvdW50IGZvciBraHogYW5kIHgxMCBpbiB0X1JFRklfdXNfeDEwCisJICovCisJdmFsID0gYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMCAqIGZyZXFfa2h6IC8gMTAwMDA7CisJcmVmX2N0cmwgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19SRUZSRVNIX1JBVEVfU0hJRlQ7CisKKwlyZXR1cm4gcmVmX2N0cmw7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX3RpbV8xX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZykKK3sKKwl1MzIgdGltMSA9IDAsIHZhbCA9IDA7CisJdmFsID0gbWF4KG1pbl90Y2stPnRXVFIsIG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnRXVFJ4MikpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9XVFJfU0hJRlQ7CisKKwlpZiAoYWRkcmVzc2luZy0+bnVtX2JhbmtzID09IEJBTktTOCkKKwkJdmFsID0gKHRpbWluZ3MtPnRGQVcgKiAoKlRfZGVuKSArIDQgKiAoKlRfbnVtKSAtIDEpIC8KKwkJCQkJCQkoNCAqICgqVF9udW0pKSAtIDE7CisJZWxzZQorCQl2YWwgPSBtYXgobWluX3Rjay0+dFJSRCwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJSRCkpIC0gMTsKKworCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JSRF9TSElGVDsKKworCXZhbCA9IG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSQVNtaW4gKyB0aW1pbmdzLT50UlBhYikgLSAxOworCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JDX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRSQVNfTUlOLCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UkFTbWluKSkgLSAxOworCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JBU19TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50V1IsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRXUikpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9XUl9TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50UkNELCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UkNEKSkgLSAxOworCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JDRF9TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50UlBfQUIsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSUGFiKSkgLSAxOworCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JQX1NISUZUOworCisJcmV0dXJuIHRpbTE7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX3RpbV8yX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrKQoreworCXUzMiB0aW0yID0gMCwgdmFsID0gMDsKKwl2YWwgPSBtYXgobWluX3Rjay0+dENLRSwgdGltaW5ncy0+dENLRSkgLSAxOworCXRpbTIgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX0NLRV9TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50UlRQLCBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50UlRQeDIpKSAtIDE7CisJdGltMiB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUlRQX1NISUZUOworCisJLyoKKwkgKiB0WFNSRCA9IHRSRkNhYiArIDEwIG5zLiBYU1JEIGFuZCBYU05SIHNob3VsZCBoYXZlIHRoZQorCSAqIHNhbWUgdmFsdWUKKwkgKi8KKwl2YWwgPSBuc18yX2N5Y2xlcyh0aW1pbmdzLT50WFNSKSAtIDE7CisJdGltMiB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfWFNSRF9TSElGVDsKKwl0aW0yIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9YU05SX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRYUCwgbnNfeDJfMl9jeWNsZXModGltaW5ncy0+dFhQeDIpKSAtIDE7CisJdGltMiB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfWFBfU0hJRlQ7CisKKwlyZXR1cm4gdGltMjsKK30KKworc3RhdGljIHUzMiBnZXRfc2RyYW1fdGltXzNfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5ncywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2ssCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nKQoreworCXUzMiB0aW0zID0gMCwgdmFsID0gMDsKKwl2YWwgPSBtaW4odGltaW5ncy0+dFJBU21heCAqIDEwIC8gYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMCAtIDEsIDB4Rik7CisJdGltMyB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUkFTX01BWF9TSElGVDsKKworCXZhbCA9IG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSRkNhYikgLSAxOworCXRpbTMgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1JGQ19TSElGVDsKKworCXZhbCA9IG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnREUVNDS01BWHgyKSAtIDE7CisJdGltMyB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfVERRU0NLTUFYX1NISUZUOworCisJdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFpRQ1MpIC0gMTsKKwl0aW0zIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfWlFfWlFDU19TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50Q0tFU1IsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRDS0VTUikpIC0gMTsKKwl0aW0zIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9DS0VTUl9TSElGVDsKKworCXJldHVybiB0aW0zOworfQorCitzdGF0aWMgdTMyIGdldF96cV9jb25maWdfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2UsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZywKKwkJCSAgICAgdTggdm9sdF9yYW1wKQoreworCXUzMiB6cSA9IDAsIHZhbCA9IDA7CisJaWYgKHZvbHRfcmFtcCkKKwkJdmFsID0KKwkJICAgIEVNSUZfWlFDU19JTlRFUlZBTF9EVkZTX0lOX1VTICogMTAgLworCQkgICAgYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMDsKKwllbHNlCisJCXZhbCA9CisJCSAgICBFTUlGX1pRQ1NfSU5URVJWQUxfTk9STUFMX0lOX1VTICogMTAgLworCQkgICAgYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMDsKKwl6cSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1pRX1JFRklOVEVSVkFMX1NISUZUOworCisJenEgfD0gKFJFR19aUV9aUUNMX01VTFQgLSAxKSA8PCBPTUFQNDRYWF9SRUdfWlFfWlFDTF9NVUxUX1NISUZUOworCisJenEgfD0gKFJFR19aUV9aUUlOSVRfTVVMVCAtIDEpIDw8IE9NQVA0NFhYX1JFR19aUV9aUUlOSVRfTVVMVF9TSElGVDsKKworCXpxIHw9IFJFR19aUV9TRkVYSVRFTl9FTkFCTEUgPDwgT01BUDQ0WFhfUkVHX1pRX1NGRVhJVEVOX1NISUZUOworCisJLyoKKwkgKiBBc3N1bWluZyB0aGF0IHR3byBjaGlwc2VsZWN0cyBoYXZlIGEgc2luZ2xlIGNhbGlicmF0aW9uIHJlc2lzdG9yCisJICogSWYgdGhlcmUgYXJlIGluZGVlZCB0d28gY2FsaWJyYXRpb24gcmVzaXN0b3JzLCB0aGVuIHRoaXMgZmxhZyBzaG91bGQKKwkgKiBiZSBlbmFibGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIGR1YWwgY2FsaWJyYXRpb24gZmVhdHVyZS4KKwkgKiBUaGlzIGRhdGEgc2hvdWxkIGlkZWFsbHkgY29tZSBmcm9tIGJvYXJkIGZpbGVzLiBCdXQgY29uc2lkZXJpbmcKKwkgKiB0aGF0IG5vbmUgb2YgdGhlIGJvYXJkcyB0b2RheSBoYXZlIGNhbGlicmF0aW9uIHJlc2lzdG9ycyBwZXIgQ1MsCisJICogaXQgd291bGQgYmUgYW4gdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuCisJICovCisJenEgfD0gUkVHX1pRX0RVQUxDQUxFTl9ESVNBQkxFIDw8IE9NQVA0NFhYX1JFR19aUV9EVUFMQ0FMRU5fU0hJRlQ7CisKKwl6cSB8PSBSRUdfWlFfQ1MwRU5fRU5BQkxFIDw8IE9NQVA0NFhYX1JFR19aUV9DUzBFTl9TSElGVDsKKworCXpxIHw9IChjczFfZGV2aWNlID8gMSA6IDApIDw8IE9NQVA0NFhYX1JFR19aUV9DUzFFTl9TSElGVDsKKworCXJldHVybiB6cTsKK30KKworc3RhdGljIHUzMiBnZXRfdGVtcF9hbGVydF9jb25maWcoY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZSwKKwkJCQkgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nLAorCQkJCSB1OCBpc19kZXJhdGVkKQoreworCXUzMiBhbGVydCA9IDAsIGludGVydmFsOworCWludGVydmFsID0KKwkgICAgVEVNUF9BTEVSVF9QT0xMX0lOVEVSVkFMX01TICogMTAwMDAgLyBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwOworCWlmIChpc19kZXJhdGVkKQorCQlpbnRlcnZhbCAqPSA0OworCWFsZXJ0IHw9IGludGVydmFsIDw8IE9NQVA0NFhYX1JFR19UQV9SRUZJTlRFUlZBTF9TSElGVDsKKworCWFsZXJ0IHw9IFRFTVBfQUxFUlRfQ09ORklHX0RFVkNUXzEgPDwgT01BUDQ0WFhfUkVHX1RBX0RFVkNOVF9TSElGVDsKKworCWFsZXJ0IHw9IFRFTVBfQUxFUlRfQ09ORklHX0RFVldEVF8zMiA8PCBPTUFQNDRYWF9SRUdfVEFfREVWV0RUX1NISUZUOworCisJYWxlcnQgfD0gMSA8PCBPTUFQNDRYWF9SRUdfVEFfU0ZFWElURU5fU0hJRlQ7CisKKwlhbGVydCB8PSAxIDw8IE9NQVA0NFhYX1JFR19UQV9DUzBFTl9TSElGVDsKKworCWFsZXJ0IHw9IChjczFfZGV2aWNlID8gMSA6IDApIDw8IE9NQVA0NFhYX1JFR19UQV9DUzFFTl9TSElGVDsKKworCXJldHVybiBhbGVydDsKK30KKworc3RhdGljIHUzMiBnZXRfcmVhZF9pZGxlX2N0cmxfcmVnKHU4IHZvbHRfcmFtcCkKK3sKKwl1MzIgaWRsZSA9IDAsIHZhbCA9IDA7CisJaWYgKHZvbHRfcmFtcCkKKwkJdmFsID0gbnNfMl9jeWNsZXMoUkVBRF9JRExFX0lOVEVSVkFMX0RWRlMpIC8gNjQgLSAxOworCWVsc2UKKwkJLypNYXhpbXVtIHZhbHVlIGluIG5vcm1hbCBjb25kaXRpb25zIC0gc3VnZ2VzdGVkIGJ5IGh3IHRlYW0gKi8KKwkJdmFsID0gMHgxRkY7CisJaWRsZSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9TSElGVDsKKworCWlkbGUgfD0gRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9WQUwgPDwgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9MRU5fU0hJRlQ7CisKKwlyZXR1cm4gaWRsZTsKK30KKworc3RhdGljIHUzMiBnZXRfZGRyX3BoeV9jdHJsXzEodTMyIGZyZXEsIHU4IFJMKQoreworCXUzMiBwaHkgPSAwLCB2YWwgPSAwOworCisJcGh5IHw9IChSTCArIDIpIDw8IE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfU0hJRlQ7CisKKwlpZiAoZnJlcSA8PSAxMDAwMDAwMDApCisJCXZhbCA9IEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzEwMF9NSFpfQU5EX0xFU1M7CisJZWxzZSBpZiAoZnJlcSA8PSAyMDAwMDAwMDApCisJCXZhbCA9IEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzIwMF9NSFo7CisJZWxzZQorCQl2YWwgPSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF80MDBfTUhaOworCXBoeSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9TSElGVDsKKworCS8qIE90aGVyIGZpZWxkcyBhcmUgY29uc3RhbnQgbWFnaWMgdmFsdWVzLiBIYXJkY29kZSB0aGVtIHRvZ2V0aGVyICovCisJcGh5IHw9IEVNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUwgPDwKKwkJT01BUDQ0WFhfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9TSElGVDsKKworCXJldHVybiBwaHk7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2VtaWZfbWVtX3NpemUoc3RydWN0IGVtaWZfZGV2aWNlX2RldGFpbHMgKmRldmljZXMpCit7CisJdTMyIHNpemVfbWJ5dGVzID0gMCwgdGVtcDsKKworCWlmICghZGV2aWNlcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2aWNlcy0+Y3MwX2RldmljZV9kZXRhaWxzKSB7CisJCXRlbXAgPSBkZXZpY2VzLT5jczBfZGV2aWNlX2RldGFpbHMtPmRlbnNpdHk7CisJCXNpemVfbWJ5dGVzICs9IGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbdGVtcF07CisJfQorCisJaWYgKGRldmljZXMtPmNzMV9kZXZpY2VfZGV0YWlscykgeworCQl0ZW1wID0gZGV2aWNlcy0+Y3MxX2RldmljZV9kZXRhaWxzLT5kZW5zaXR5OworCQlzaXplX21ieXRlcyArPSBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW3RlbXBdOworCX0KKwkvKiBjb252ZXJ0IHRvIGJ5dGVzICovCisJcmV0dXJuIHNpemVfbWJ5dGVzIDw8IDIwOworfQorCisvKiBHZXRzIHRoZSBlbmNvZGluZyBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gRE1NIHNlY3Rpb24gc2l6ZSAqLwordTMyIGdldF9kbW1fc2VjdGlvbl9zaXplX21hcCh1MzIgc2VjdGlvbl9zaXplKQoreworCS8qCisJICogU2VjdGlvbiBzaXplIG1hcHBpbmc6CisJICogMHgwOiAxNi1NaUIgc2VjdGlvbgorCSAqIDB4MTogMzItTWlCIHNlY3Rpb24KKwkgKiAweDI6IDY0LU1pQiBzZWN0aW9uCisJICogMHgzOiAxMjgtTWlCIHNlY3Rpb24KKwkgKiAweDQ6IDI1Ni1NaUIgc2VjdGlvbgorCSAqIDB4NTogNTEyLU1pQiBzZWN0aW9uCisJICogMHg2OiAxLUdpQiBzZWN0aW9uCisJICogMHg3OiAyLUdpQiBzZWN0aW9uCisJICovCisJc2VjdGlvbl9zaXplID4+PSAyNDsgLyogZGl2aWRlIGJ5IDE2IE1CICovCisJcmV0dXJuIGxvZ18yX25fcm91bmRfZG93bihzZWN0aW9uX3NpemUpOworfQorCitzdGF0aWMgdm9pZCBlbWlmX2NhbGN1bGF0ZV9yZWdzKAorCQljb25zdCBzdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyAqZW1pZl9kZXZfZGV0YWlscywKKwkJdTMyIGZyZXEsIHN0cnVjdCBlbWlmX3JlZ3MgKnJlZ3MpCit7CisJdTMyIHRlbXAsIHN5c19mcmVxOworCWNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZzsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3M7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrOworCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMF9kZXZfZGV0YWlscyA9CisJCQkJCWVtaWZfZGV2X2RldGFpbHMtPmNzMF9kZXZpY2VfZGV0YWlsczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2X2RldGFpbHMgPQorCQkJCQllbWlmX2Rldl9kZXRhaWxzLT5jczFfZGV2aWNlX2RldGFpbHM7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqY3MwX2Rldl90aW1pbmdzID0KKwkJCQkJZW1pZl9kZXZfZGV0YWlscy0+Y3MwX2RldmljZV90aW1pbmdzOworCisJZW1pZl9hc3NlcnQoZW1pZl9kZXZfZGV0YWlscyk7CisJZW1pZl9hc3NlcnQocmVncyk7CisJLyoKKwkgKiBZb3UgY2FuIG5vdCBoYXZlIGEgZGV2aWNlIG9uIENTMSB3aXRob3V0IG9uZSBvbiBDUzAKKwkgKiBTbyBjb25maWd1cmluZyBFTUlGIHdpdGhvdXQgYSBkZXZpY2Ugb24gQ1MwIGRvZXNuJ3QKKwkgKiBtYWtlIHNlbnNlCisJICovCisJZW1pZl9hc3NlcnQoY3MwX2Rldl9kZXRhaWxzKTsKKwllbWlmX2Fzc2VydChjczBfZGV2X2RldGFpbHMtPnR5cGUgIT0gTFBERFIyX1RZUEVfTlZNKTsKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgZGV2aWNlIG9uIENTMSBpdCBzaG91bGQgYmUgc2FtZSB0eXBlIGFzIENTMAorCSAqIChvciBOVk0uIEJ1dCBOVk0gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGRyaXZlciB5ZXQpCisJICovCisJZW1pZl9hc3NlcnQoKGNzMV9kZXZfZGV0YWlscyA9PSBOVUxMKSB8fAorCQkgICAgKGNzMV9kZXZfZGV0YWlscy0+dHlwZSA9PSBMUEREUjJfVFlQRV9OVk0pIHx8CisJCSAgICAoY3MwX2Rldl9kZXRhaWxzLT50eXBlID09IGNzMV9kZXZfZGV0YWlscy0+dHlwZSkpOworCWVtaWZfYXNzZXJ0KGZyZXEgPD0gTUFYX0xQRERSMl9GUkVRKTsKKworCXNldF9kZHJfY2xrX3BlcmlvZChmcmVxKTsKKworCS8qCisJICogVGhlIGRldmljZSBvbiBDUzAgaXMgdXNlZCBmb3IgYWxsIHRpbWluZyBjYWxjdWxhdGlvbnMKKwkgKiBUaGVyZSBpcyBvbmx5IG9uZSBzZXQgb2YgcmVnaXN0ZXJzIGZvciB0aW1pbmdzIHBlciBFTUlGLiBTbywgaWYgdGhlCisJICogc2Vjb25kIENTKENTMSkgaGFzIGEgZGV2aWNlLCBpdCBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0aW1pbmdzIGFzIHRoZQorCSAqIGRldmljZSBvbiBDUzAKKwkgKi8KKwl0aW1pbmdzID0gZ2V0X3RpbWluZ3NfdGFibGUoY3MwX2Rldl90aW1pbmdzLT5hY190aW1pbmdzLCBmcmVxKTsKKwllbWlmX2Fzc2VydCh0aW1pbmdzKTsKKwltaW5fdGNrID0gY3MwX2Rldl90aW1pbmdzLT5taW5fdGNrOworCisJdGVtcCA9IGFkZHJlc3NpbmdfdGFibGVfaW5kZXgoY3MwX2Rldl9kZXRhaWxzLT50eXBlLAorCQkJCSAgICAgIGNzMF9kZXZfZGV0YWlscy0+ZGVuc2l0eSwKKwkJCQkgICAgICBjczBfZGV2X2RldGFpbHMtPmlvX3dpZHRoKTsKKworCWVtaWZfYXNzZXJ0KCh0ZW1wID49IDApKTsKKwlhZGRyZXNzaW5nID0gJihhZGRyZXNzaW5nX3RhYmxlW3RlbXBdKTsKKwllbWlmX2Fzc2VydChhZGRyZXNzaW5nKTsKKworCXN5c19mcmVxID0gZ2V0X3N5c19jbGtfZnJlcSgpOworCisJcmVncy0+c2RyYW1fY29uZmlnX2luaXQgPSBnZXRfc2RyYW1fY29uZmlnX3JlZyhjczBfZGV2X2RldGFpbHMsCisJCQkJCQkJY3MxX2Rldl9kZXRhaWxzLAorCQkJCQkJCWFkZHJlc3NpbmcsIFJMX0JPT1QpOworCisJcmVncy0+c2RyYW1fY29uZmlnID0gZ2V0X3NkcmFtX2NvbmZpZ19yZWcoY3MwX2Rldl9kZXRhaWxzLAorCQkJCQkJY3MxX2Rldl9kZXRhaWxzLAorCQkJCQkJYWRkcmVzc2luZywgUkxfRklOQUwpOworCisJcmVncy0+cmVmX2N0cmwgPSBnZXRfc2RyYW1fcmVmX2N0cmwoZnJlcSwgYWRkcmVzc2luZyk7CisKKwlyZWdzLT5zZHJhbV90aW0xID0gZ2V0X3NkcmFtX3RpbV8xX3JlZyh0aW1pbmdzLCBtaW5fdGNrLCBhZGRyZXNzaW5nKTsKKworCXJlZ3MtPnNkcmFtX3RpbTIgPSBnZXRfc2RyYW1fdGltXzJfcmVnKHRpbWluZ3MsIG1pbl90Y2spOworCisJcmVncy0+c2RyYW1fdGltMyA9IGdldF9zZHJhbV90aW1fM19yZWcodGltaW5ncywgbWluX3RjaywgYWRkcmVzc2luZyk7CisKKwlyZWdzLT5yZWFkX2lkbGVfY3RybCA9IGdldF9yZWFkX2lkbGVfY3RybF9yZWcoTFBERFIyX1ZPTFRBR0VfU1RBQkxFKTsKKworCXJlZ3MtPnRlbXBfYWxlcnRfY29uZmlnID0KKwkgICAgZ2V0X3RlbXBfYWxlcnRfY29uZmlnKGNzMV9kZXZfZGV0YWlscywgYWRkcmVzc2luZywgMCk7CisKKwlyZWdzLT56cV9jb25maWcgPSBnZXRfenFfY29uZmlnX3JlZyhjczFfZGV2X2RldGFpbHMsIGFkZHJlc3NpbmcsCisJCQkJCSAgICBMUEREUjJfVk9MVEFHRV9TVEFCTEUpOworCisJcmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0ID0KKwkJCWdldF9kZHJfcGh5X2N0cmxfMShzeXNfZnJlcSAvIDIsIFJMX0JPT1QpOworCisJcmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMSA9CisJCQlnZXRfZGRyX3BoeV9jdHJsXzEoZnJlcSwgUkxfRklOQUwpOworCisJcmVncy0+ZnJlcSA9IGZyZXE7CisKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX2NvbmZpZ19pbml0KTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX2NvbmZpZyk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5yZWZfY3RybCk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV90aW0xKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX3RpbTIpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fdGltMyk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5yZWFkX2lkbGVfY3RybCk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT50ZW1wX2FsZXJ0X2NvbmZpZyk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT56cV9jb25maWcpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMSk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQpOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTICovCisKKyNpZmRlZiBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MKKy8qIEJhc2UgQUMgVGltaW5nIHZhbHVlcyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGZvciA0MDBNSHogb3BlcmF0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfamVkZWNfNDAwX21oeiA9IHsKKwkubWF4X2ZyZXEgPSA0MDAwMDAwMDAsCisJLlJMID0gNiwKKwkudFJQYWIgPSAyMSwKKwkudFJDRCA9IDE4LAorCS50V1IgPSAxNSwKKwkudFJBU21pbiA9IDQyLAorCS50UlJEID0gMTAsCisJLnRXVFJ4MiA9IDE1LAorCS50WFNSID0gMTQwLAorCS50WFB4MiA9IDE1LAorCS50UkZDYWIgPSAxMzAsCisJLnRSVFB4MiA9IDE1LAorCS50Q0tFID0gMywKKwkudENLRVNSID0gMTUsCisJLnRaUUNTID0gOTAsCisJLnRaUUNMID0gMzYwLAorCS50WlFJTklUID0gMTAwMCwKKwkudERRU0NLTUFYeDIgPSAxMSwKKwkudFJBU21heCA9IDcwLAorCS50RkFXID0gNTAKK307CisKKy8qIEJhc2UgQUMgVGltaW5nIHZhbHVlcyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGZvciAzMzMgTUh6IG9wZXJhdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyB0aW1pbmdzX2plZGVjXzMzM19taHogPSB7CisJLm1heF9mcmVxID0gMzMzMDAwMDAwLAorCS5STCA9IDUsCisJLnRSUGFiID0gMjEsCisJLnRSQ0QgPSAxOCwKKwkudFdSID0gMTUsCisJLnRSQVNtaW4gPSA0MiwKKwkudFJSRCA9IDEwLAorCS50V1RSeDIgPSAxNSwKKwkudFhTUiA9IDE0MCwKKwkudFhQeDIgPSAxNSwKKwkudFJGQ2FiID0gMTMwLAorCS50UlRQeDIgPSAxNSwKKwkudENLRSA9IDMsCisJLnRDS0VTUiA9IDE1LAorCS50WlFDUyA9IDkwLAorCS50WlFDTCA9IDM2MCwKKwkudFpRSU5JVCA9IDEwMDAsCisJLnREUVNDS01BWHgyID0gMTEsCisJLnRSQVNtYXggPSA3MCwKKwkudEZBVyA9IDUwCit9OworCisvKiBCYXNlIEFDIFRpbWluZyB2YWx1ZXMgc3BlY2lmaWVkIGJ5IEpFU0QyMDktMiBmb3IgMjAwIE1IeiBvcGVyYXRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgdGltaW5nc19qZWRlY18yMDBfbWh6ID0geworCS5tYXhfZnJlcSA9IDIwMDAwMDAwMCwKKwkuUkwgPSAzLAorCS50UlBhYiA9IDIxLAorCS50UkNEID0gMTgsCisJLnRXUiA9IDE1LAorCS50UkFTbWluID0gNDIsCisJLnRSUkQgPSAxMCwKKwkudFdUUngyID0gMjAsCisJLnRYU1IgPSAxNDAsCisJLnRYUHgyID0gMTUsCisJLnRSRkNhYiA9IDEzMCwKKwkudFJUUHgyID0gMTUsCisJLnRDS0UgPSAzLAorCS50Q0tFU1IgPSAxNSwKKwkudFpRQ1MgPSA5MCwKKwkudFpRQ0wgPSAzNjAsCisJLnRaUUlOSVQgPSAxMDAwLAorCS50RFFTQ0tNQVh4MiA9IDExLAorCS50UkFTbWF4ID0gNzAsCisJLnRGQVcgPSA1MAorfTsKKworLyoKKyAqIE1pbiB0Q0sgdmFsdWVzIHNwZWNpZmllZCBieSBKRVNEMjA5LTIKKyAqIE1pbiB0Q0sgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIGR1cmF0aW9uIG9mIHNvbWUgQUMgdGltaW5nIHBhcmFtZXRlcnMgaW4gdGVybXMKKyAqIG9mIHRoZSBudW1iZXIgb2YgY3ljbGVzLiBJZiB0aGUgY2FsY3VsYXRlZCBudW1iZXIgb2YgY3ljbGVzIGJhc2VkIG9uIHRoZQorICogYWJzb2x1dGUgdGltZSB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIG1pbiB0Q0sgdmFsdWUsIG1pbiB0Q0sgdmFsdWUgc2hvdWxkCisgKiBiZSB1c2VkIGluc3RlYWQuIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgYXQgbG93IGZyZXF1ZW5jaWVzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrIG1pbl90Y2tfamVkZWMgPSB7CisJLnRSTCA9IDMsCisJLnRSUF9BQiA9IDMsCisJLnRSQ0QgPSAzLAorCS50V1IgPSAzLAorCS50UkFTX01JTiA9IDMsCisJLnRSUkQgPSAyLAorCS50V1RSID0gMiwKKwkudFhQID0gMiwKKwkudFJUUCA9IDIsCisJLnRDS0UgPSAzLAorCS50Q0tFU1IgPSAzLAorCS50RkFXID0gOAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyBjb25zdCoKKwkJCWplZGVjX2FjX3RpbWluZ3NbTUFYX05VTV9TUEVFREJJTlNdID0geworCSZ0aW1pbmdzX2plZGVjXzIwMF9taHosCisJJnRpbWluZ3NfamVkZWNfMzMzX21oeiwKKwkmdGltaW5nc19qZWRlY180MDBfbWh6Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyBqZWRlY19kZWZhdWx0X3RpbWluZ3MgPSB7CisJLmFjX3RpbWluZ3MgPSBqZWRlY19hY190aW1pbmdzLAorCS5taW5fdGNrID0gJm1pbl90Y2tfamVkZWMKK307CisKK3ZvaWQgZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3ModTMyIGVtaWZfbnIsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczBfZGV2aWNlX3RpbWluZ3MsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczFfZGV2aWNlX3RpbWluZ3MpCit7CisJLyogQXNzdW1lIElkZW50aWNhbCBkZXZpY2VzIG9uIEVNSUYxICYgRU1JRjIgKi8KKwkqY3MwX2RldmljZV90aW1pbmdzID0gJmplZGVjX2RlZmF1bHRfdGltaW5nczsKKwkqY3MxX2RldmljZV90aW1pbmdzID0gJmplZGVjX2RlZmF1bHRfdGltaW5nczsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MgKi8KKworI2lmZGVmIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTgorY29uc3QgY2hhciAqZ2V0X2xwZGRyMl90eXBlKHU4IHR5cGVfaWQpCit7CisJc3dpdGNoICh0eXBlX2lkKSB7CisJY2FzZSBMUEREUjJfVFlQRV9TNDoKKwkJcmV0dXJuICJMUEREUjItUzQiOworCWNhc2UgTFBERFIyX1RZUEVfUzI6CisJCXJldHVybiAiTFBERFIyLVMyIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK2NvbnN0IGNoYXIgKmdldF9scGRkcjJfaW9fd2lkdGgodTggd2lkdGhfaWQpCit7CisJc3dpdGNoICh3aWR0aF9pZCkgeworCWNhc2UgTFBERFIyX0lPX1dJRFRIXzg6CisJCXJldHVybiAieDgiOworCWNhc2UgTFBERFIyX0lPX1dJRFRIXzE2OgorCQlyZXR1cm4gIngxNiI7CisJY2FzZSBMUEREUjJfSU9fV0lEVEhfMzI6CisJCXJldHVybiAieDMyIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK2NvbnN0IGNoYXIgKmdldF9scGRkcjJfbWFudWZhY3R1cmVyKHUzMiBtYW51ZmFjdHVyZXIpCit7CisJc3dpdGNoIChtYW51ZmFjdHVyZXIpIHsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfU0FNU1VORzoKKwkJcmV0dXJuICJTYW1zdW5nIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfUUlNT05EQToKKwkJcmV0dXJuICJRaW1vbmRhIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfRUxQSURBOgorCQlyZXR1cm4gIkVscGlkYSI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VUUk9OOgorCQlyZXR1cm4gIkV0cm9uIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfTkFOWUE6CisJCXJldHVybiAiTmFueWEiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9IWU5JWDoKKwkJcmV0dXJuICJIeW5peCI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01PU0VMOgorCQlyZXR1cm4gIk1vc2VsIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfV0lOQk9ORDoKKwkJcmV0dXJuICJXaW5ib25kIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfRVNNVDoKKwkJcmV0dXJuICJFU01UIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfU1BBTlNJT046CisJCXJldHVybiAiU3BhbnNpb24iOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9TU1Q6CisJCXJldHVybiAiU1NUIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfWk1PUzoKKwkJcmV0dXJuICJaTU9TIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfSU5URUw6CisJCXJldHVybiAiSW50ZWwiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9OVU1PTllYOgorCQlyZXR1cm4gIk51bW9ueXgiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9NSUNST046CisJCXJldHVybiAiTWljcm9uIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfc2RyYW1fZGV0YWlscyh1MzIgZW1pZl9uciwgdTMyIGNzLAorCQkJCSAgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqZGV2aWNlKQoreworCWNvbnN0IGNoYXIgKm1mZ19zdHI7CisJY29uc3QgY2hhciAqdHlwZV9zdHI7CisJY2hhciBkZW5zaXR5X3N0clsxMF07CisJdTMyIGRlbnNpdHk7CisKKwlkZWJ1ZygiRU1JRiVkIENTJWRcdCIsIGVtaWZfbnIsIGNzKTsKKworCWlmICghZGV2aWNlKSB7CisJCWRlYnVnKCJOb25lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1mZ19zdHIgPSBnZXRfbHBkZHIyX21hbnVmYWN0dXJlcihkZXZpY2UtPm1hbnVmYWN0dXJlcik7CisJdHlwZV9zdHIgPSBnZXRfbHBkZHIyX3R5cGUoZGV2aWNlLT50eXBlKTsKKworCWRlbnNpdHkgPSBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW2RldmljZS0+ZGVuc2l0eV07CisJaWYgKChkZW5zaXR5IC8gMTAyNCAqIDEwMjQpID09IGRlbnNpdHkpIHsKKwkJZGVuc2l0eSAvPSAxMDI0OworCQlzcHJpbnRmKGRlbnNpdHlfc3RyLCAiJWQgR0IiLCBkZW5zaXR5KTsKKwl9IGVsc2UKKwkJc3ByaW50ZihkZW5zaXR5X3N0ciwgIiVkIE1CIiwgZGVuc2l0eSk7CisJaWYgKG1mZ19zdHIgJiYgdHlwZV9zdHIpCisJCWRlYnVnKCIlc1x0XHQlc1x0JXNcbiIsIG1mZ19zdHIsIHR5cGVfc3RyLCBkZW5zaXR5X3N0cik7Cit9CisKK3N0YXRpYyB1OCBpc19scGRkcjJfc2RyYW1fcHJlc2VudCh1MzIgYmFzZSwgdTMyIGNzLAorCQkJCSAgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqbHBkZHIyX2RldmljZSkKK3sKKwl1MzIgbXIgPSAwLCB0ZW1wOworCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjApOworCWlmIChtciA+IDB4RkYpIHsKKwkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwl0ZW1wID0gKG1yICYgTFBERFIyX01SMF9ESV9NQVNLKSA+PiBMUEREUjJfTVIwX0RJX1NISUZUOworCWlmICh0ZW1wKSB7CisJCS8qIE5vdCBTRFJBTSAqLworCQlyZXR1cm4gMDsKKwl9CisJdGVtcCA9IChtciAmIExQRERSMl9NUjBfRE5WSV9NQVNLKSA+PiBMUEREUjJfTVIwX0ROVklfU0hJRlQ7CisKKwlpZiAodGVtcCkgeworCQkvKiBETlYgc3VwcG9ydGVkIC0gQnV0IEROViBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgTlZNICovCisJCXJldHVybiAwOworCX0KKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI0KTsKKwlpZiAobXIgPiAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjUpOworCWlmIChtciA+PSAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFnZXRfbHBkZHIyX21hbnVmYWN0dXJlcihtcikpIHsKKwkJLyogTWFudWZhY3R1cmVyIG5vdCBpZGVudGlmaWVkICovCisJCXJldHVybiAwOworCX0KKwlscGRkcjJfZGV2aWNlLT5tYW51ZmFjdHVyZXIgPSBtcjsKKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI2KTsKKwlpZiAobXIgPj0gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI3KTsKKwlpZiAobXIgPj0gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI4KTsKKwlpZiAobXIgPj0gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCXRlbXAgPSAobXIgJiBNUjhfVFlQRV9NQVNLKSA+PiBNUjhfVFlQRV9TSElGVDsKKwlpZiAoIWdldF9scGRkcjJfdHlwZSh0ZW1wKSkgeworCQkvKiBOb3QgU0RSQU0gKi8KKwkJcmV0dXJuIDA7CisJfQorCWxwZGRyMl9kZXZpY2UtPnR5cGUgPSB0ZW1wOworCisJdGVtcCA9IChtciAmIE1SOF9ERU5TSVRZX01BU0spID4+IE1SOF9ERU5TSVRZX1NISUZUOworCWlmICh0ZW1wID4gTFBERFIyX0RFTlNJVFlfMzJHYikgeworCQkvKiBEZW5zaXR5IG5vdCBzdXBwb3J0ZWQgKi8KKwkJcmV0dXJuIDA7CisJfQorCWxwZGRyMl9kZXZpY2UtPmRlbnNpdHkgPSB0ZW1wOworCisJdGVtcCA9IChtciAmIE1SOF9JT19XSURUSF9NQVNLKSA+PiBNUjhfSU9fV0lEVEhfU0hJRlQ7CisJaWYgKCFnZXRfbHBkZHIyX2lvX3dpZHRoKHRlbXApKSB7CisJCS8qIElPIHdpZHRoIHVuc3VwcG9ydGVkIHZhbHVlICovCisJCXJldHVybiAwOworCX0KKwlscGRkcjJfZGV2aWNlLT5pb193aWR0aCA9IHRlbXA7CisKKwkvKgorCSAqIElmIGFsbCB0aGUgYWJvdmUgdGVzdHMgcGFzcyB3ZSBzaG91bGQKKwkgKiBoYXZlIGEgZGV2aWNlIG9uIHRoaXMgY2hpcC1zZWxlY3QKKwkgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmdldF9scGRkcjJfZGV0YWlscyh1MzIgYmFzZSwgdTggY3MsCisJCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpscGRkcjJfZGV2X2RldGFpbHMpCit7CisJdTMyIHBoeTsKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJaWYgKCFscGRkcjJfZGV2X2RldGFpbHMpCisJCXJldHVybiBOVUxMOworCisJLyogRG8gdGhlIG1pbmltdW0gaW5pdCBmb3IgbW9kZSByZWdpc3RlciBhY2Nlc3NlcyAqLworCWlmICghcnVubmluZ19mcm9tX3NkcmFtKCkpIHsKKwkJcGh5ID0gZ2V0X2Rkcl9waHlfY3RybF8xKGdldF9zeXNfY2xrX2ZyZXEoKSAvIDIsIFJMX0JPT1QpOworCQl3cml0ZWwocGh5LCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7CisJfQorCisJaWYgKCEoaXNfbHBkZHIyX3NkcmFtX3ByZXNlbnQoYmFzZSwgY3MsIGxwZGRyMl9kZXZfZGV0YWlscykpKQorCQlyZXR1cm4gTlVMTDsKKworCWRpc3BsYXlfc2RyYW1fZGV0YWlscyhlbWlmX251bShiYXNlKSwgY3MsIGxwZGRyMl9kZXZfZGV0YWlscyk7CisKKwlyZXR1cm4gbHBkZHIyX2Rldl9kZXRhaWxzOworfQorCit2b2lkIGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKHUzMiBlbWlmX25yLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlX2RldGFpbHMsCisJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2VfZGV0YWlscykKK3sKKwl1MzIgYmFzZSA9IChlbWlmX25yID09IDEpID8gT01BUDQ0WFhfRU1JRjEgOiBPTUFQNDRYWF9FTUlGMjsKKworCWlmIChydW5uaW5nX2Zyb21fc2RyYW0oKSkgeworCQkvKgorCQkgKiBXZSBjYW4gbm90IGRvIGF1dG9tYXRpYyBkaXNjb3ZlcnkgcnVubmluZyBmcm9tIFNEUkFNCisJCSAqIE1vc3QgbGlrZWx5IHdlIGNhbWUgaGVyZSBieSBtaXN0YWtlLiBJbmRpY2F0ZSBlcnJvcgorCQkgKiBieSByZXR1cm5pbmcgTlVMTAorCQkgKi8KKwkJY3MwX2RldmljZV9kZXRhaWxzID0gTlVMTDsKKwkJY3MxX2RldmljZV9kZXRhaWxzID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBBdXRvbWF0aWNhbGx5IGZpbmQgdGhlIGRldmljZSBkZXRhaWxzOgorCQkgKgorCQkgKiBSZXNldCB0aGUgUEhZIGFmdGVyIGVhY2ggY2FsbCB0byBnZXRfbHBkZHIyX2RldGFpbHMoKS4KKwkJICogSWYgdGhlcmUgaXMgbm90aGluZyBjb25uZWN0ZWQgdG8gYSBnaXZlbiBjaGlwIHNlbGVjdAorCQkgKiAodHlwaWNhbGx5IENTMSkgbW9kZSByZWdpc3RlciByZWFkcyB3aWxsIG1lc3MgdXAgd2l0aAorCQkgKiB0aGUgUEhZIHN0YXRlIGFuZCBzdWJzZXF1ZW50IGluaXRpYWxpemF0aW9uIHdvbid0IHdvcmsuCisJCSAqIFBIWSByZXNldCBicmluZ3MgYmFjayBQSFkgdG8gYSBnb29kIHN0YXRlLgorCQkgKi8KKwkJY3MwX2RldmljZV9kZXRhaWxzID0KKwkJICAgIGdldF9scGRkcjJfZGV0YWlscyhiYXNlLCBDUzAsIGNzMF9kZXZpY2VfZGV0YWlscyk7CisJCWVtaWZfcmVzZXRfcGh5KGJhc2UpOworCisJCWNzMV9kZXZpY2VfZGV0YWlscyA9CisJCSAgICBnZXRfbHBkZHIyX2RldGFpbHMoYmFzZSwgQ1MxLCBjczFfZGV2aWNlX2RldGFpbHMpOworCQllbWlmX3Jlc2V0X3BoeShiYXNlKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1NZU19BVVRPTUFUSUNfU0RSQU1fREVURUNUSU9OICovCisKK3N0YXRpYyB2b2lkIGRvX3NkcmFtX2luaXQodTMyIGJhc2UpCit7CisJY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqcmVnczsKKwl1MzIgaW5fc2RyYW0sIGVtaWZfbnI7CisKKwlkZWJ1ZygiPj5kb19zZHJhbV9pbml0KCkgJXhcbiIsIGJhc2UpOworCisJaW5fc2RyYW0gPSBydW5uaW5nX2Zyb21fc2RyYW0oKTsKKwllbWlmX25yID0gKGJhc2UgPT0gT01BUDQ0WFhfRU1JRjEpID8gMSA6IDI7CisKKyNpZmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworCWVtaWZfZ2V0X3JlZ19kdW1wKGVtaWZfbnIsICZyZWdzKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGVidWcoIkVNSUY6IHJlZyBkdW1wIG5vdCBwcm92aWRlZFxuIik7CisJCXJldHVybjsKKwl9CisjZWxzZQorCS8qCisJICogVGhlIHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGUgcmVnaXN0ZXIgdmFsdWVzLiBXZSBuZWVkIHRvCisJICogY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSB0aW1pbmdzIGFuZCB0aGUgRERSIGZyZXF1ZW5jeQorCSAqLworCXN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzIGRldl9kZXRhaWxzOworCXN0cnVjdCBlbWlmX3JlZ3MgY2FsY3VsYXRlZF9yZWdzOworCisJLyoKKwkgKiBHZXQgZGV2aWNlIGRldGFpbHM6CisJICogLSBEaXNjb3ZlcmVkIGlmIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTiBpcyBzZXQKKwkgKiAtIE9idGFpbmVkIGZyb20gdXNlciBvdGhlcndpc2UKKwkgKi8KKwlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIGNzMF9kZXZfZGV0YWlscywgY3MxX2Rldl9kZXRhaWxzOworCWVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKGVtaWZfbnIsICZjczBfZGV2X2RldGFpbHMsCisJCQkJJmNzMV9kZXZfZGV0YWlscyk7CisJZGV2X2RldGFpbHMuY3MwX2RldmljZV9kZXRhaWxzID0gJmNzMF9kZXZfZGV0YWlsczsKKwlkZXZfZGV0YWlscy5jczFfZGV2aWNlX2RldGFpbHMgPSAmY3MxX2Rldl9kZXRhaWxzOworCisJLyogUmV0dXJuIGlmIG5vIGRldmljZXMgb24gdGhpcyBFTUlGICovCisJaWYgKCFkZXZfZGV0YWlscy5jczBfZGV2aWNlX2RldGFpbHMgJiYKKwkgICAgIWRldl9kZXRhaWxzLmNzMV9kZXZpY2VfZGV0YWlscykgeworCQllbWlmX3NpemVzW2VtaWZfbnIgLSAxXSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWluX3NkcmFtKQorCQllbWlmX3NpemVzW2VtaWZfbnIgLSAxXSA9IGdldF9lbWlmX21lbV9zaXplKCZkZXZfZGV0YWlscyk7CisKKwkvKgorCSAqIEdldCBkZXZpY2UgdGltaW5nczoKKwkgKiAtIERlZmF1bHQgdGltaW5ncyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGlmCisJICogICBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MgaXMgc2V0CisJICogLSBPYnRhaW5lZCBmcm9tIHVzZXIgb3RoZXJ3aXNlCisJICovCisJZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3MoZW1pZl9uciwgJmRldl9kZXRhaWxzLmNzMF9kZXZpY2VfdGltaW5ncywKKwkJCQkmZGV2X2RldGFpbHMuY3MxX2RldmljZV90aW1pbmdzKTsKKworCS8qIENhbGN1bGF0ZSB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCisJZW1pZl9jYWxjdWxhdGVfcmVncygmZGV2X2RldGFpbHMsIG9tYXA0X2Rkcl9jbGsoKSwgJmNhbGN1bGF0ZWRfcmVncyk7CisJcmVncyA9ICZjYWxjdWxhdGVkX3JlZ3M7CisjZW5kaWYgLyogQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MgKi8KKworCS8qCisJICogSW5pdGlhbGl6aW5nIHRoZSBMUEREUjIgZGV2aWNlIGNhbiBub3QgaGFwcGVuIGZyb20gU0RSQU0uCisJICogQ2hhbmdpbmcgdGhlIHRpbWluZyByZWdpc3RlcnMgaW4gRU1JRiBjYW4gaGFwcGVuKGdvaW5nIGZyb20gb25lCisJICogT1BQIHRvIGFub3RoZXIpCisJICovCisJaWYgKCFpbl9zZHJhbSkKKwkJbHBkZHIyX2luaXQoYmFzZSwgcmVncyk7CisKKwkvKiBXcml0ZSB0byB0aGUgc2hhZG93IHJlZ2lzdGVycyAqLworCWVtaWZfdXBkYXRlX3RpbWluZ3MoYmFzZSwgcmVncyk7CisKKwlkZWJ1ZygiPDxkb19zZHJhbV9pbml0KCkgJXhcbiIsIGJhc2UpOworfQorCit2b2lkIHNkcmFtX2luaXRfcGFkcyh2b2lkKQoreworCXUzMiBscGRkcjJpbzsKKwlzdHJ1Y3QgY29udHJvbF9scGRkcjJpb19yZWdzICpscGRkcjJpb19yZWdzID0KKwkJKHN0cnVjdCBjb250cm9sX2xwZGRyMmlvX3JlZ3MgKilMUEREUjJfSU9fUkVHU19CQVNFOworCXUzMiBvbWFwNF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisKKwlpZiAob21hcDRfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQorCQlscGRkcjJpbyA9IENPTlRST0xfTFBERFIySU9fU0xFV18xMjVQU19EUlY4X1BVTExfRE9XTjsKKwllbHNlIGlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCisJCWxwZGRyMmlvID0gQ09OVFJPTF9MUEREUjJJT19TTEVXXzMyNVBTX0RSVjhfR0FURV9LRUVQRVI7CisJZWxzZQorCQlyZXR1cm47CQkvKiBQb3N0IEVTMi4xIHJlc2V0IHZhbHVlcyB3aWxsIHdvcmsgKi8KKworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzApOworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzEpOworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzIpOworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzApOworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzEpOworCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzIpOworCisJd3JpdGVsKENPTlRST0xfRUZVU0VfMl9OTU9TX1BNT1NfUFRWX0NPREVfMSwgQ09OVFJPTF9FRlVTRV8yKTsKK30KKworc3RhdGljIHZvaWQgZW1pZl9wb3N0X2luaXRfY29uZmlnKHUzMiBiYXNlKQoreworCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7CisJdTMyIG9tYXA0X3JldiA9IG9tYXBfcmV2aXNpb24oKTsKKworCS8qIHJlc2V0IHBoeSBvbiBFUzIuMCAqLworCWlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCisJCWVtaWZfcmVzZXRfcGh5KGJhc2UpOworCisJLyogUHV0IEVNSUYgYmFjayBpbiBzbWFydCBpZGxlIG9uIEVTMS4wICovCisJaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJd3JpdGVsKDB4ODAwMDAwMDAsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOworfQorCitzdGF0aWMgdm9pZCBkbW1faW5pdCh1MzIgYmFzZSkKK3sKKwljb25zdCBzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKmxpc2FfbWFwX3JlZ3M7CisKKyNpZmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworCWVtaWZfZ2V0X2RtbV9yZWdzKCZsaXNhX21hcF9yZWdzKTsKKyNlbHNlCisJdTMyIGVtaWYxX3NpemUsIGVtaWYyX3NpemUsIG1hcHBlZF9zaXplLCBzZWN0aW9uX21hcCA9IDA7CisJdTMyIHNlY3Rpb25fY250LCBzeXNfYWRkcjsKKwlzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQgPSB7MH07CisKKwltYXBwZWRfc2l6ZSA9IDA7CisJc2VjdGlvbl9jbnQgPSAzOworCXN5c19hZGRyID0gQ09ORklHX1NZU19TRFJBTV9CQVNFOworCWVtaWYxX3NpemUgPSBlbWlmX3NpemVzWzBdOworCWVtaWYyX3NpemUgPSBlbWlmX3NpemVzWzFdOworCWRlYnVnKCJlbWlmMV9zaXplIDB4JXggZW1pZjJfc2l6ZSAweCV4XG4iLCBlbWlmMV9zaXplLCBlbWlmMl9zaXplKTsKKworCWlmICghZW1pZjFfc2l6ZSAmJiAhZW1pZjJfc2l6ZSkKKwkJcmV0dXJuOworCisJLyogc3ltbWV0cmljIGludGVybGVhdmVkIHNlY3Rpb24gKi8KKwlpZiAoZW1pZjFfc2l6ZSAmJiBlbWlmMl9zaXplKSB7CisJCW1hcHBlZF9zaXplID0gbWluKGVtaWYxX3NpemUsIGVtaWYyX3NpemUpOworCQlzZWN0aW9uX21hcCA9IERNTV9MSVNBX01BUF9JTlRFUkxFQVZFRF9CQVNFX1ZBTDsKKwkJc2VjdGlvbl9tYXAgfD0gMCA8PCBPTUFQNDRYWF9TRFJDX0FERFJfU0hJRlQ7CisJCS8qIG9ubHkgTVNCICovCisJCXNlY3Rpb25fbWFwIHw9IChzeXNfYWRkciA+PiAyNCkgPDwKKwkJCQlPTUFQNDRYWF9TWVNfQUREUl9TSElGVDsKKwkJc2VjdGlvbl9tYXAgfD0gZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKG1hcHBlZF9zaXplICogMikKKwkJCQk8PCBPTUFQNDRYWF9TWVNfU0laRV9TSElGVDsKKwkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzMgPSBzZWN0aW9uX21hcDsKKwkJZW1pZjFfc2l6ZSAtPSBtYXBwZWRfc2l6ZTsKKwkJZW1pZjJfc2l6ZSAtPSBtYXBwZWRfc2l6ZTsKKwkJc3lzX2FkZHIgKz0gKG1hcHBlZF9zaXplICogMik7CisJCXNlY3Rpb25fY250LS07CisJfQorCisJLyoKKwkgKiBTaW5nbGUgRU1JRiBzZWN0aW9uKHdlIGNhbiBoYXZlIGEgbWF4aW11bSBvZiAxIHNpbmdsZSBFTUlGCisJICogc2VjdGlvbi0gZWl0aGVyIEVNSUYxIG9yIEVNSUYyIG9yIG5vbmUsIGJ1dCBub3QgYm90aCkKKwkgKi8KKwlpZiAoZW1pZjFfc2l6ZSkgeworCQlzZWN0aW9uX21hcCA9IERNTV9MSVNBX01BUF9FTUlGMV9PTkxZX0JBU0VfVkFMOworCQlzZWN0aW9uX21hcCB8PSBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAoZW1pZjFfc2l6ZSkKKwkJCQk8PCBPTUFQNDRYWF9TWVNfU0laRV9TSElGVDsKKwkJLyogb25seSBNU0IgKi8KKwkJc2VjdGlvbl9tYXAgfD0gKG1hcHBlZF9zaXplID4+IDI0KSA8PAorCQkJCU9NQVA0NFhYX1NEUkNfQUREUl9TSElGVDsKKwkJLyogb25seSBNU0IgKi8KKwkJc2VjdGlvbl9tYXAgfD0gKHN5c19hZGRyID4+IDI0KSA8PCBPTUFQNDRYWF9TWVNfQUREUl9TSElGVDsKKwkJc2VjdGlvbl9jbnQtLTsKKwl9CisJaWYgKGVtaWYyX3NpemUpIHsKKwkJc2VjdGlvbl9tYXAgPSBETU1fTElTQV9NQVBfRU1JRjJfT05MWV9CQVNFX1ZBTDsKKwkJc2VjdGlvbl9tYXAgfD0gZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKGVtaWYyX3NpemUpIDw8CisJCQkJT01BUDQ0WFhfU1lTX1NJWkVfU0hJRlQ7CisJCS8qIG9ubHkgTVNCICovCisJCXNlY3Rpb25fbWFwIHw9IG1hcHBlZF9zaXplID4+IDI0IDw8IE9NQVA0NFhYX1NEUkNfQUREUl9TSElGVDsKKwkJLyogb25seSBNU0IgKi8KKwkJc2VjdGlvbl9tYXAgfD0gc3lzX2FkZHIgPj4gMjQgPDwgT01BUDQ0WFhfU1lTX0FERFJfU0hJRlQ7CisJCXNlY3Rpb25fY250LS07CisJfQorCisJaWYgKHNlY3Rpb25fY250ID09IDIpIHsKKwkJLyogT25seSAxIHNlY3Rpb24gLSBlaXRoZXIgc3ltbWV0cmljIG9yIHNpbmdsZSBFTUlGICovCisJCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8zID0gc2VjdGlvbl9tYXA7CisJCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8yID0gMDsKKwkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzEgPSAwOworCX0gZWxzZSB7CisJCS8qIDIgc2VjdGlvbnMgLSAxIHN5bW1ldHJpYywgMSBzaW5nbGUgRU1JRiAqLworCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMiA9IHNlY3Rpb25fbWFwOworCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMSA9IDA7CisJfQorCisJLyogVFJBUCBmb3IgaW52YWxpZCBUSUxFUiBtYXBwaW5ncyBpbiBzZWN0aW9uIDAgKi8KKwlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMCA9IERNTV9MSVNBX01BUF8wX0lOVkFMX0FERFJfVFJBUDsKKworCWxpc2FfbWFwX3JlZ3MgPSAmbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQ7CisjZW5kaWYKKwlzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKmh3X2xpc2FfbWFwX3JlZ3MgPQorCSAgICAoc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICopYmFzZTsKKworCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMpOworCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIpOworCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEpOworCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzApOworCisJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zLAorCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMpOworCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMiwKKwkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yKTsKKwl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEsCisJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSk7CisJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wLAorCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzApOworCisJaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkgeworCQlod19saXNhX21hcF9yZWdzID0KKwkJICAgIChzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKilPTUFQNDRYWF9NQV9MSVNBX01BUF9CQVNFOworCisJCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMywKKwkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMyk7CisJCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMiwKKwkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMik7CisJCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSwKKwkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSk7CisJCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCwKKwkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCk7CisJfQorfQorCisvKgorICogU0RSQU0gaW5pdGlhbGl6YXRpb246CisgKiBTRFJBTSBpbml0aWFsaXphdGlvbiBoYXMgdHdvIHBhcnRzOgorICogMS4gQ29uZmlndXJpbmcgdGhlIFNEUkFNIGRldmljZQorICogMi4gVXBkYXRlIHRoZSBBQyB0aW1pbmdzIHJlbGF0ZWQgcGFyYW1ldGVycyBpbiB0aGUgRU1JRiBtb2R1bGUKKyAqICgxKSBzaG91bGQgYmUgZG9uZSBvbmx5IG9uY2UgYW5kIHNob3VsZCBub3QgYmUgZG9uZSB3aGlsZSB3ZSBhcmUKKyAqIHJ1bm5pbmcgZnJvbSBTRFJBTS4KKyAqICgyKSBjYW4gYW5kIHNob3VsZCBiZSBkb25lIG1vcmUgdGhhbiBvbmNlIGlmIE9QUCBjaGFuZ2VzLgorICogUGFydGljdWxhcmx5LCB0aGlzIG1heSBiZSBuZWVkZWQgd2hlbiB3ZSBib290IHdpdGhvdXQgU1BMIGFuZAorICogYW5kIHVzaW5nIENvbmZpZ3VyYXRpb24gSGVhZGVyKENIKS4gUk9NIGNvZGUgc3VwcG9ydHMgb25seSBhdCA1MCUgT1BQCisgKiBhdCBib290IChsb3cgcG93ZXIgYm9vdCkuIFNvIHUtYm9vdCBoYXMgdG8gc3dpdGNoIHRvIE9QUDEwMCBhbmQgdXBkYXRlCisgKiB0aGUgZnJlcXVlbmN5LiBTbywKKyAqIERvaW5nICgxKSBhbmQgKDIpIG1ha2VzIHNlbnNlIC0gZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbgorICogRG9pbmcgKDIpIGFuZCBub3QgKDEpIG1ha2VzIHNlbnNlIC0gT1BQIGNoYW5nZSAod2hlbiB1c2luZyBDSCkKKyAqIERvaW5nICgxKSBhbmQgbm90ICgyKSBkb2VuJ3QgbWFrZSBzZW5zZQorICogU2VlIGRvX3NkcmFtX2luaXQoKSBmb3IgdGhlIGRldGFpbHMKKyAqLwordm9pZCBzZHJhbV9pbml0KHZvaWQpCit7CisJdTMyIGluX3NkcmFtLCBzaXplX3Byb2csIHNpemVfZGV0ZWN0OworCisJZGVidWcoIj4+c2RyYW1faW5pdCgpXG4iKTsKKworCWlmIChvbWFwNF9od19pbml0X2NvbnRleHQoKSA9PSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9TUEwpCisJCXJldHVybjsKKworCWluX3NkcmFtID0gcnVubmluZ19mcm9tX3NkcmFtKCk7CisJZGVidWcoImluX3NkcmFtID0gJWRcbiIsIGluX3NkcmFtKTsKKworCWlmICghaW5fc2RyYW0pIHsKKwkJc2RyYW1faW5pdF9wYWRzKCk7CisJCWJ5cGFzc19kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfY29yZSk7CisJfQorCisJZG9fc2RyYW1faW5pdChPTUFQNDRYWF9FTUlGMSk7CisJZG9fc2RyYW1faW5pdChPTUFQNDRYWF9FTUlGMik7CisKKwlpZiAoIWluX3NkcmFtKSB7CisJCWRtbV9pbml0KE9NQVA0NFhYX0RNTV9MSVNBX01BUF9CQVNFKTsKKwkJZW1pZl9wb3N0X2luaXRfY29uZmlnKE9NQVA0NFhYX0VNSUYxKTsKKwkJZW1pZl9wb3N0X2luaXRfY29uZmlnKE9NQVA0NFhYX0VNSUYyKTsKKworCX0KKworCS8qIGZvciB0aGUgc2hhZG93IHJlZ2lzdGVycyB0byB0YWtlIGVmZmVjdCAqLworCWZyZXFfdXBkYXRlX2NvcmUoKTsKKworCS8qIERvIHNvbWUgdGVzdGluZyBhZnRlciB0aGUgaW5pdCAqLworCWlmICghaW5fc2RyYW0pIHsKKwkJc2l6ZV9wcm9nID0gb21hcDRfc2RyYW1fc2l6ZSgpOworCQlzaXplX2RldGVjdCA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKUNPTkZJR19TWVNfU0RSQU1fQkFTRSwKKwkJCQkJCXNpemVfcHJvZyk7CisJCS8qIENvbXBhcmUgd2l0aCB0aGUgc2l6ZSBwcm9ncmFtbWVkICovCisJCWlmIChzaXplX2RldGVjdCAhPSBzaXplX3Byb2cpIHsKKwkJCXByaW50ZigiU0RSQU06IGlkZW50aWZpZWQgc2l6ZSBub3Qgc2FtZSBhcyBleHBlY3RlZCIKKwkJCQkiIHNpemUgaWRlbnRpZmllZDogJXggZXhwZWN0ZWQ6ICV4XG4iLAorCQkJCXNpemVfZGV0ZWN0LAorCQkJCXNpemVfcHJvZyk7CisJCX0gZWxzZQorCQkJZGVidWcoImdldF9yYW1fc2l6ZSgpIHN1Y2Nlc3NmdWwiKTsKKwl9CisKKwlkZWJ1ZygiPDxzZHJhbV9pbml0KClcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2xvd2xldmVsX2luaXQuUyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9sb3dsZXZlbF9pbml0LlMKaW5kZXggNmFiZmJiYS4uOTE1MjVlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2xvd2xldmVsX2luaXQuUworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvbG93bGV2ZWxfaW5pdC5TCkBAIC0yNyw2ICsyNywzNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vYXJjaC9vbWFwNC5oPgorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKy5nbG9iYWwgc2F2ZV9ib290X3BhcmFtcworc2F2ZV9ib290X3BhcmFtczoKKwkvKgorCSAqIFNlZSBpZiB0aGUgcm9tIGNvZGUgcGFzc2VkIHBvaW50ZXIgaXMgdmFsaWQ6CisJICogSXQgaXMgbm90IHZhbGlkIGlmIGl0IGlzIG5vdCBpbiBub24tc2VjdXJlIFNSQU0KKwkgKiBUaGlzIG1heSBoYXBwZW4gaWYgeW91IGFyZSBib290aW5nIHdpdGggdGhlIGhlbHAgb2YKKwkgKiBkZWJ1Z2dlcgorCSAqLworCWxkciAgICAgcjIsID1OT05fU0VDVVJFX1NSQU1fU1RBUlQKKwljbXAJcjIsIHIwCisJYmd0CTFmCisJbGRyCXIyLCA9Tk9OX1NFQ1VSRV9TUkFNX0VORAorCWNtcAlyMiwgcjAKKwlibHQJMWYKKworCS8qIFN0b3JlIHRoZSBib290IGRldmljZSBpbiBvbWFwNF9ib290X2RldmljZSAqLworCWxkciAgICAgcjIsIFtyMCwgI0JPT1RfREVWSUNFX09GRlNFVF0JQCByMSA8LSB2YWx1ZSBvZiBib290IGRldmljZQorCWFuZAlyMiwgI0JPT1RfREVWSUNFX01BU0sKKwlsZHIJcjMsID1vbWFwNF9ib290X2RldmljZQorCXN0ciAgICAgcjIsIFtyM10JCQlAIG9tYXA0X2Jvb3RfZGV2aWNlIDwtIHIxCisKKwkvKiBTdG9yZSB0aGUgYm9vdCBtb2RlIChyYXcvRkFUKSBpbiBvbWFwNF9ib290X21vZGUgKi8KKwlsZHIJcjIsIFtyMCwgI0RFVl9ERVNDX1BUUl9PRkZTRVRdCUAgZ2V0IHRoZSBkZXZpY2UgZGVzY3JpcHRvciBwdHIKKwlsZHIJcjIsIFtyMiwgI0RFVl9EQVRBX1BUUl9PRkZTRVRdCUAgZ2V0IHRoZSBwRGV2aWNlRGF0YSBwdHIKKwlsZHIJcjIsIFtyMiwgI0JPT1RfTU9ERV9PRkZTRVRdCUAgZ2V0IHRoZSBib290IG1vZGUKKwlsZHIJcjMsID1vbWFwNF9ib290X21vZGUKKwlzdHIJcjIsIFtyM10KKzE6CisJYngJbHIKKyNlbmRpZgogCiAuZ2xvYmwgbG93bGV2ZWxfaW5pdAogbG93bGV2ZWxfaW5pdDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9vbWFwNF9tdXhfZGF0YS5oIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L29tYXA0X211eF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjNTJmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9vbWFwNF9tdXhfZGF0YS5oCkBAIC0wLDAgKzEsNzYgQEAKKyAvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQsIDx3d3cudGkuY29tPgorICoKKyAqCUJhbGFqaSBLcmlzaG5hbW9vcnRoeQk8YmFsYWppdGtAdGkuY29tPgorICoJQW5lZXNoIFYJCTxhbmVlc2hAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX09NQVA0X01VWF9EQVRBX0hfCisjZGVmaW5lIF9PTUFQNF9NVVhfREFUQV9IXworCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4X29tYXA0Lmg+CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsW10gPSB7CisKK3tHUE1DX0FEMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQwICovCit7R1BNQ19BRDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MSAqLwore0dQTUNfQUQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDIgKi8KK3tHUE1DX0FEMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQzICovCit7R1BNQ19BRDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NCAqLwore0dQTUNfQUQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDUgKi8KK3tHUE1DX0FENiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ2ICovCit7R1BNQ19BRDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NyAqLwore0dQTUNfTk9FLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMSl9LAkgLyogc2RtbWMyX2NsayAqLwore0dQTUNfTldFLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2NtZCAqLwore1NETU1DMV9DTEssIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCSAvKiBzZG1tYzFfY2xrICovCit7U0RNTUMxX0NNRCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9jbWQgKi8KK3tTRE1NQzFfREFUMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQwICovCit7U0RNTUMxX0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MSAqLwore1NETU1DMV9EQVQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDIgKi8KK3tTRE1NQzFfREFUMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQzICovCit7U0RNTUMxX0RBVDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NCAqLwore1NETU1DMV9EQVQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDUgKi8KK3tTRE1NQzFfREFUNiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ2ICovCit7U0RNTUMxX0RBVDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NyAqLwore0kyQzFfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMV9zY2wgKi8KK3tJMkMxX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzFfc2RhICovCit7STJDMl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMyX3NjbCAqLwore0kyQzJfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMl9zZGEgKi8KK3tJMkMzX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzNfc2NsICovCit7STJDM19TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMzX3NkYSAqLwore0kyQzRfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjNF9zY2wgKi8KK3tJMkM0X1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzRfc2RhICovCit7VUFSVDNfQ1RTX1JDVFgsIChQVFUgfCBJRU4gfCBNMCl9LAkJCS8qIHVhcnQzX3R4ICovCit7VUFSVDNfUlRTX1NELCAoTTApfSwJCQkJCS8qIHVhcnQzX3J0c19zZCAqLwore1VBUlQzX1JYX0lSUlgsIChJRU4gfCBNMCl9LAkJCQkvKiB1YXJ0M19yeCAqLwore1VBUlQzX1RYX0lSVFgsIChNMCl9CQkJCQkvKiB1YXJ0M190eCAqLworCit9OworCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbFtdID0geworCit7UEFEMV9TUl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LCAvKiBzcl9zY2wgKi8KK3tQQUQwX1NSX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sIC8qIHNyX3NkYSAqLwore1BBRDFfU1lTXzMySywgKElFTiB8IE0wKX0JIC8qIHN5c18zMmsgKi8KKworfTsKKworI2VuZGlmICAvKiBfT01BUDRfTVVYX0RBVEFfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zZHJhbV9lbHBpZGEuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zZHJhbV9lbHBpZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzU3YWFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L3NkcmFtX2VscGlkYS5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogVGltaW5nIGFuZCBPcmdhbml6YXRpb24gZGV0YWlscyBvZiB0aGUgRWxwaWRhIHBhcnRzIHVzZWQgaW4gT01BUDQKKyAqIFNEUHMgYW5kIFBhbmRhCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8YXNtL2FyY2gvZW1pZi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorCisvKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIGRldGFpbHMgb2YgdGhlIExQRERSMiBTRFJBTSBwYXJ0cyB1c2VkIG9uIE9NQVA0NDMwCisgKiBTRFAgYW5kIFBhbmRhLiBTaW5jZSB0aGUgcGFydHMgdXNlZCBhbmQgZ2VvbWV0cnkgYXJlIGlkZW50aWNhbCBmb3IKKyAqIFNEUCBhbmQgUGFuZGEgZm9yIGEgZ2l2ZW4gT01BUDQgcmV2aXNpb24sIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdAorICogaGVyZSBpbnN0ZWFkIG9mIGJlaW5nIGluIGJvYXJkIGRpcmVjdG9yeS4gSG93ZXZlciB0aGUga2V5IGZ1bmN0aW9ucworICogZXhwb3J0ZWQgYXJlIHdlYWtseSBsaW5rZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBvdmVyLXJpZGRlbiBpbiB0aGUgYm9hcmQKKyAqIGRpcmVjdG9yeSBpZiB0aGVyZSBpcyBhIE9NQVA0IGJvYXJkIGluIHRoZSBmdXR1cmUgdGhhdCB1c2VzIGEgZGlmZmVyZW50CisgKiBtZW1vcnkgZGV2aWNlIG9yIGdlb21ldHJ5LgorICoKKyAqIEZvciBhbnkgbmV3IGJvYXJkIHdpdGggZGlmZmVyZW50IG1lbW9yeSBkZXZpY2VzIG92ZXItcmlkZSBvbmUgb3IgbW9yZQorICogb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMgcGVyIHRoZSBDT05GSUcgZmxhZ3MgeW91IGludGVuZCB0byBlbmFibGU6CisgKiAtIGVtaWZfZ2V0X3JlZ19kdW1wKCkKKyAqIC0gZW1pZl9nZXRfZG1tX3JlZ3MoKQorICogLSBlbWlmX2dldF9kZXZpY2VfZGV0YWlscygpCisgKiAtIGVtaWZfZ2V0X2RldmljZV90aW1pbmdzKCkKKyAqLworCisjaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgZW1pZl9yZWdzX2VscGlkYV8yMDBfbWh6XzJjcyA9IHsKKwkuc2RyYW1fY29uZmlnX2luaXQJCT0gMHg4MDAwMGViOSwKKwkuc2RyYW1fY29uZmlnCQkJPSAweDgwMDAxYWI5LAorCS5yZWZfY3RybAkJCT0gMHgwMDAwMDMwYywKKwkuc2RyYW1fdGltMQkJCT0gMHgwODY0ODMxMSwKKwkuc2RyYW1fdGltMgkJCT0gMHgxMDFiMDZjYSwKKwkuc2RyYW1fdGltMwkJCT0gMHgwMDQ4YTE5ZiwKKwkucmVhZF9pZGxlX2N0cmwJCQk9IDB4MDAwNTAxZmYsCisJLnpxX2NvbmZpZwkJCT0gMHg1MDBiMzIxNCwKKwkudGVtcF9hbGVydF9jb25maWcJCT0gMHhkODAxNjg5MywKKwkuZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0CT0gMHgwNDlmZmZmNSwKKwkuZW1pZl9kZHJfcGh5X2N0bHJfMQkJPSAweDA0OWZmODA4Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGVtaWZfcmVncyBlbWlmX3JlZ3NfZWxwaWRhXzM4MF9taHpfMWNzID0geworCS5zZHJhbV9jb25maWdfaW5pdAkJPSAweDgwMDAwZWIxLAorCS5zZHJhbV9jb25maWcJCQk9IDB4ODAwMDFhYjEsCisJLnJlZl9jdHJsCQkJPSAweDAwMDAwNWNkLAorCS5zZHJhbV90aW0xCQkJPSAweDEwY2IwNjIyLAorCS5zZHJhbV90aW0yCQkJPSAweDIwMzUwZDUyLAorCS5zZHJhbV90aW0zCQkJPSAweDAwYjE0MzFmLAorCS5yZWFkX2lkbGVfY3RybAkJCT0gMHgwMDA1MDFmZiwKKwkuenFfY29uZmlnCQkJPSAweDUwMGIzMjE0LAorCS50ZW1wX2FsZXJ0X2NvbmZpZwkJPSAweDU4MDE2ODkzLAorCS5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQJPSAweDA0OWZmZmY1LAorCS5lbWlmX2Rkcl9waHlfY3Rscl8xCQk9IDB4MDQ5ZmY0MTgKK307CisKK2NvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgZW1pZl9yZWdzX2VscGlkYV80MDBfbWh6XzJjcyA9IHsKKwkuc2RyYW1fY29uZmlnX2luaXQJCT0gMHg4MDAwMGViOSwKKwkuc2RyYW1fY29uZmlnCQkJPSAweDgwMDAxYWI5LAorCS5yZWZfY3RybAkJCT0gMHgwMDAwMDYxOCwKKwkuc2RyYW1fdGltMQkJCT0gMHgxMGViMDY2MiwKKwkuc2RyYW1fdGltMgkJCT0gMHgyMDM3MGRkMiwKKwkuc2RyYW1fdGltMwkJCT0gMHgwMGIxYzMzZiwKKwkucmVhZF9pZGxlX2N0cmwJCQk9IDB4MDAwNTAxZmYsCisJLnpxX2NvbmZpZwkJCT0gMHhkMDBiMzIxNCwKKwkudGVtcF9hbGVydF9jb25maWcJCT0gMHhkODAxNjg5MywKKwkuZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0CT0gMHgwNDlmZmZmNSwKKwkuZW1pZl9kZHJfcGh5X2N0bHJfMQkJPSAweDA0OWZmNDE4Cit9OworY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzIGxpc2FfbWFwXzJHX3hfMV94XzIgPSB7CisJLmRtbV9saXNhX21hcF8wID0gMHhGRjAyMDEwMCwKKwkuZG1tX2xpc2FfbWFwXzEgPSAwLAorCS5kbW1fbGlzYV9tYXBfMiA9IDAsCisJLmRtbV9saXNhX21hcF8zID0gMHg4MDU0MDMwMAorfTsKKworY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzIGxpc2FfbWFwXzJHX3hfMl94XzIgPSB7CisJLmRtbV9saXNhX21hcF8wID0gMHhGRjAyMDEwMCwKKwkuZG1tX2xpc2FfbWFwXzEgPSAwLAorCS5kbW1fbGlzYV9tYXBfMiA9IDAsCisJLmRtbV9saXNhX21hcF8zID0gMHg4MDY0MDMwMAorfTsKKworc3RhdGljIHZvaWQgZW1pZl9nZXRfcmVnX2R1bXBfc2RwKHUzMiBlbWlmX25yLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICoqcmVncykKK3sKKwl1MzIgb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCisJLyogU2FtZSBkZXZpY2VzIGFuZCBnZW9tZXRyeSBvbiBib3RoIEVNSUZzICovCisJaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJKnJlZ3MgPSAmZW1pZl9yZWdzX2VscGlkYV8zODBfbWh6XzFjczsKKwllbHNlIGlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCisJCSpyZWdzID0gJmVtaWZfcmVnc19lbHBpZGFfMjAwX21oel8yY3M7CisJZWxzZQorCQkqcmVncyA9ICZlbWlmX3JlZ3NfZWxwaWRhXzQwMF9taHpfMmNzOworfQordm9pZCBlbWlmX2dldF9yZWdfZHVtcCh1MzIgZW1pZl9uciwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqKnJlZ3MpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoImVtaWZfZ2V0X3JlZ19kdW1wX3NkcCIpKSk7CisKK3N0YXRpYyB2b2lkIGVtaWZfZ2V0X2RtbV9yZWdzX3NkcChjb25zdCBzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MKKwkJCQkJCSoqZG1tX2xpc2FfcmVncykKK3sKKwl1MzIgb21hcF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisKKwlpZiAob21hcF9yZXYgPT0gT01BUDQ0MzBfRVMxXzApCisJCSpkbW1fbGlzYV9yZWdzID0gJmxpc2FfbWFwXzJHX3hfMV94XzI7CisJZWxzZQorCQkqZG1tX2xpc2FfcmVncyA9ICZsaXNhX21hcF8yR194XzJfeF8yOworfQorCit2b2lkIGVtaWZfZ2V0X2RtbV9yZWdzKGNvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKmRtbV9saXNhX3JlZ3MpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoImVtaWZfZ2V0X2RtbV9yZWdzX3NkcCIpKSk7CisKKyNlbHNlCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIGVscGlkYV8yR19TNF9kZXRhaWxzID0geworCS50eXBlCQk9IExQRERSMl9UWVBFX1M0LAorCS5kZW5zaXR5CT0gTFBERFIyX0RFTlNJVFlfMkdiLAorCS5pb193aWR0aAk9IExQRERSMl9JT19XSURUSF8zMiwKKwkubWFudWZhY3R1cmVyCT0gTFBERFIyX01BTlVGQUNUVVJFUl9FTFBJREEKK307CisKK3N0YXRpYyB2b2lkIGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzX3NkcCh1MzIgZW1pZl9uciwKKwkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZV9kZXRhaWxzLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlX2RldGFpbHMpCit7CisJdTMyIG9tYXBfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCisJLyogRU1JRjEgJiBFTUlGMiBoYXZlIGlkZW50aWNhbCBjb25maWd1cmF0aW9uICovCisJKmNzMF9kZXZpY2VfZGV0YWlscyA9IGVscGlkYV8yR19TNF9kZXRhaWxzOworCisJaWYgKG9tYXBfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQorCQljczFfZGV2aWNlX2RldGFpbHMgPSBOVUxMOworCWVsc2UKKwkJKmNzMV9kZXZpY2VfZGV0YWlscyA9IGVscGlkYV8yR19TNF9kZXRhaWxzOworfQorCit2b2lkIGVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKHUzMiBlbWlmX25yLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlX2RldGFpbHMsCisJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2VfZGV0YWlscykKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiZW1pZl9nZXRfZGV2aWNlX2RldGFpbHNfc2RwIikpKTsKKworI2VuZGlmIC8qIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTICovCisKKyNpZm5kZWYgQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfZWxwaWRhXzQwMF9taHogPSB7CisJLm1heF9mcmVxCT0gNDAwMDAwMDAwLAorCS5STAkJPSA2LAorCS50UlBhYgkJPSAyMSwKKwkudFJDRAkJPSAxOCwKKwkudFdSCQk9IDE1LAorCS50UkFTbWluCT0gNDIsCisJLnRSUkQJCT0gMTAsCisJLnRXVFJ4MgkJPSAxNSwKKwkudFhTUgkJPSAxNDAsCisJLnRYUHgyCQk9IDE1LAorCS50UkZDYWIJCT0gMTMwLAorCS50UlRQeDIJCT0gMTUsCisJLnRDS0UJCT0gMywKKwkudENLRVNSCQk9IDE1LAorCS50WlFDUwkJPSA5MCwKKwkudFpRQ0wJCT0gMzYwLAorCS50WlFJTklUCT0gMTAwMCwKKwkudERRU0NLTUFYeDIJPSAxMSwKKwkudFJBU21heAk9IDcwLAorCS50RkFXCQk9IDUwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfZWxwaWRhXzMzM19taHogPSB7CisJLm1heF9mcmVxCT0gMzMzMDAwMDAwLAorCS5STAkJPSA1LAorCS50UlBhYgkJPSAyMSwKKwkudFJDRAkJPSAxOCwKKwkudFdSCQk9IDE1LAorCS50UkFTbWluCT0gNDIsCisJLnRSUkQJCT0gMTAsCisJLnRXVFJ4MgkJPSAxNSwKKwkudFhTUgkJPSAxNDAsCisJLnRYUHgyCQk9IDE1LAorCS50UkZDYWIJCT0gMTMwLAorCS50UlRQeDIJCT0gMTUsCisJLnRDS0UJCT0gMywKKwkudENLRVNSCQk9IDE1LAorCS50WlFDUwkJPSA5MCwKKwkudFpRQ0wJCT0gMzYwLAorCS50WlFJTklUCT0gMTAwMCwKKwkudERRU0NLTUFYeDIJPSAxMSwKKwkudFJBU21heAk9IDcwLAorCS50RkFXCQk9IDUwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfZWxwaWRhXzIwMF9taHogPSB7CisJLm1heF9mcmVxCT0gMjAwMDAwMDAwLAorCS5STAkJPSAzLAorCS50UlBhYgkJPSAyMSwKKwkudFJDRAkJPSAxOCwKKwkudFdSCQk9IDE1LAorCS50UkFTbWluCT0gNDIsCisJLnRSUkQJCT0gMTAsCisJLnRXVFJ4MgkJPSAyMCwKKwkudFhTUgkJPSAxNDAsCisJLnRYUHgyCQk9IDE1LAorCS50UkZDYWIJCT0gMTMwLAorCS50UlRQeDIJCT0gMTUsCisJLnRDS0UJCT0gMywKKwkudENLRVNSCQk9IDE1LAorCS50WlFDUwkJPSA5MCwKKwkudFpRQ0wJCT0gMzYwLAorCS50WlFJTklUCT0gMTAwMCwKKwkudERRU0NLTUFYeDIJPSAxMSwKKwkudFJBU21heAk9IDcwLAorCS50RkFXCQk9IDUwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrIG1pbl90Y2tfZWxwaWRhID0geworCS50UkwJCT0gMywKKwkudFJQX0FCCQk9IDMsCisJLnRSQ0QJCT0gMywKKwkudFdSCQk9IDMsCisJLnRSQVNfTUlOCT0gMywKKwkudFJSRAkJPSAyLAorCS50V1RSCQk9IDIsCisJLnRYUAkJPSAyLAorCS50UlRQCQk9IDIsCisJLnRDS0UJCT0gMywKKwkudENLRVNSCQk9IDMsCisJLnRGQVcJCT0gOAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqZWxwaWRhX2FjX3RpbWluZ3NbTUFYX05VTV9TUEVFREJJTlNdID0geworCQkmdGltaW5nc19lbHBpZGFfMjAwX21oeiwKKwkJJnRpbWluZ3NfZWxwaWRhXzMzM19taHosCisJCSZ0aW1pbmdzX2VscGlkYV80MDBfbWh6Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyBlbHBpZGFfMkdfUzRfdGltaW5ncyA9IHsKKwkuYWNfdGltaW5ncwk9IGVscGlkYV9hY190aW1pbmdzLAorCS5taW5fdGNrCT0gJm1pbl90Y2tfZWxwaWRhLAorfTsKKwordm9pZCBlbWlmX2dldF9kZXZpY2VfdGltaW5nc19zZHAodTMyIGVtaWZfbnIsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczBfZGV2aWNlX3RpbWluZ3MsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczFfZGV2aWNlX3RpbWluZ3MpCit7CisJdTMyIG9tYXBfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCisJLyogSWRlbnRpY2FsIGRldmljZXMgb24gRU1JRjEgJiBFTUlGMiAqLworCSpjczBfZGV2aWNlX3RpbWluZ3MgPSAmZWxwaWRhXzJHX1M0X3RpbWluZ3M7CisKKwlpZiAob21hcF9yZXYgPT0gT01BUDQ0MzBfRVMxXzApCisJCSpjczFfZGV2aWNlX3RpbWluZ3MgPSBOVUxMOworCWVsc2UKKwkJKmNzMV9kZXZpY2VfdGltaW5ncyA9ICZlbHBpZGFfMkdfUzRfdGltaW5nczsKK30KKwordm9pZCBlbWlmX2dldF9kZXZpY2VfdGltaW5ncyh1MzIgZW1pZl9uciwKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMF9kZXZpY2VfdGltaW5ncywKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMV9kZXZpY2VfdGltaW5ncykKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3Nfc2RwIikpKTsKKworI2VuZGlmIC8qIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L3N0YXJ0LlMgYi9hcmNoL2FybS9jcHUvYXJtdjcvc3RhcnQuUwppbmRleCA1Yzg3ZTljLi5kYjhlOWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvc3RhcnQuUworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvc3RhcnQuUwpAQCAtNDIsNyArNDIsMTYgQEAKIAlsZHIJcGMsIF9ub3RfdXNlZAogCWxkcglwYywgX2lycQogCWxkcglwYywgX2ZpcQotCisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjogLndvcmQgX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorX3NvZnR3YXJlX2ludGVycnVwdDoJLndvcmQgX3NvZnR3YXJlX2ludGVycnVwdAorX3ByZWZldGNoX2Fib3J0Ogkud29yZCBfcHJlZmV0Y2hfYWJvcnQKK19kYXRhX2Fib3J0OgkJLndvcmQgX2RhdGFfYWJvcnQKK19ub3RfdXNlZDoJCS53b3JkIF9ub3RfdXNlZAorX2lycToJCQkud29yZCBfaXJxCitfZmlxOgkJCS53b3JkIF9maXEKK19wYWQ6CQkJLndvcmQgMHgxMjM0NTY3OCAvKiBub3cgMTYqND02NCAqLworI2Vsc2UKIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb246IC53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgogX3NvZnR3YXJlX2ludGVycnVwdDoJLndvcmQgc29mdHdhcmVfaW50ZXJydXB0CiBfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0CkBAIC01MSw2ICs2MCw4IEBACiBfaXJxOgkJCS53b3JkIGlycQogX2ZpcToJCQkud29yZCBmaXEKIF9wYWQ6CQkJLndvcmQgMHgxMjM0NTY3OCAvKiBub3cgMTYqND02NCAqLworI2VuZGlmCS8qIENPTkZJR19TUExfQlVJTEQgKi8KKwogLmdsb2JhbCBfZW5kX3ZlY3QKIF9lbmRfdmVjdDoKIApAQCAtODksNiArMTAwLDEwIEBACiBfYnNzX3N0YXJ0X29mczoKIAkud29yZCBfX2Jzc19zdGFydCAtIF9zdGFydAogCisuZ2xvYmFsCV9pbWFnZV9jb3B5X2VuZF9vZnMKK19pbWFnZV9jb3B5X2VuZF9vZnM6CisJLndvcmQgCV9faW1hZ2VfY29weV9lbmQgLSBfc3RhcnQKKwogLmdsb2JsIF9ic3NfZW5kX29mcwogX2Jzc19lbmRfb2ZzOgogCS53b3JkIF9fYnNzX2VuZF9fIC0gX3N0YXJ0CkBAIC0xMTksNiArMTM0LDcgQEAKICAqLwogCiByZXNldDoKKwlibAlzYXZlX2Jvb3RfcGFyYW1zCiAJLyoKIAkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCiAJICovCkBAIC0xODIsMTIgKzE5OCwxMSBAQAogCW1vdglzcCwgcjQKIAogCWFkcglyMCwgX3N0YXJ0Ci0jaWZuZGVmIENPTkZJR19TUExfQlVJTEQKIAljbXAJcjAsIHI2CisJbW92ZXEJcjksICMwCQkvKiBubyByZWxvY2F0aW9uLiByZWxvY2F0aW9uIG9mZnNldChyOSkgPSAwICovCiAJYmVxCWNsZWFyX2JzcwkJLyogc2tpcCByZWxvY2F0aW9uICovCi0jZW5kaWYKIAltb3YJcjEsIHI2CQkJLyogcjEgPC0gc2NyYXRjaCBmb3IgY29weV9sb29wICovCi0JbGRyCXIzLCBfYnNzX3N0YXJ0X29mcworCWxkcglyMywgX2ltYWdlX2NvcHlfZW5kX29mcwogCWFkZAlyMiwgcjAsIHIzCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MJICAgICovCiAKIGNvcHlfbG9vcDoKQEAgLTIzNSwyMCArMjUwLDM0IEBACiAJYWRkCXIyLCByMiwgIzgJCS8qIGVhY2ggcmVsLmR5biBlbnRyeSBpcyA4IGJ5dGVzICovCiAJY21wCXIyLCByMwogCWJsbwlmaXhsb29wCisJYgljbGVhcl9ic3MKK19yZWxfZHluX3N0YXJ0X29mczoKKwkud29yZCBfX3JlbF9keW5fc3RhcnQgLSBfc3RhcnQKK19yZWxfZHluX2VuZF9vZnM6CisJLndvcmQgX19yZWxfZHluX2VuZCAtIF9zdGFydAorX2R5bnN5bV9zdGFydF9vZnM6CisJLndvcmQgX19keW5zeW1fc3RhcnQgLSBfc3RhcnQKKworI2VuZGlmCS8qICNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRCAqLwogCiBjbGVhcl9ic3M6CisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorCS8qIE5vIHJlbG9jYXRpb24gZm9yIFNQTCAqLworCWxkcglyMCwgPV9fYnNzX3N0YXJ0CisJbGRyCXIxLCA9X19ic3NfZW5kX18KKyNlbHNlCiAJbGRyCXIwLCBfYnNzX3N0YXJ0X29mcwogCWxkcglyMSwgX2Jzc19lbmRfb2ZzCiAJbW92CXI0LCByNgkJCS8qIHJlbG9jIGFkZHIgKi8KIAlhZGQJcjAsIHIwLCByNAogCWFkZAlyMSwgcjEsIHI0CisjZW5kaWYKIAltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhcgkJCSAgICAqLwogCiBjbGJzc19sOnN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLgkJICAgICovCiAJYWRkCXIwLCByMCwgIzQKIAljbXAJcjAsIHIxCiAJYm5lCWNsYnNzX2wKLSNlbmRpZgkvKiAjaWZuZGVmIENPTkZJR19TUExfQlVJTEQgKi8KIAogLyoKICAqIFdlIGFyZSBkb25lLiBEbyBub3QgcmV0dXJuLCBpbnN0ZWFkIGJyYW5jaCB0byBzZWNvbmQgcGFydCBvZiBib2FyZApAQCAtMjc2LDEyICszMDUsNiBAQAogX2JvYXJkX2luaXRfcl9vZnM6CiAJLndvcmQgYm9hcmRfaW5pdF9yIC0gX3N0YXJ0CiAKLV9yZWxfZHluX3N0YXJ0X29mczoKLQkud29yZCBfX3JlbF9keW5fc3RhcnQgLSBfc3RhcnQKLV9yZWxfZHluX2VuZF9vZnM6Ci0JLndvcmQgX19yZWxfZHluX2VuZCAtIF9zdGFydAotX2R5bnN5bV9zdGFydF9vZnM6Ci0JLndvcmQgX19keW5zeW1fc3RhcnQgLSBfc3RhcnQKIAogI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzI5LDYgKzM1Miw4IEBACiAJbW92CWxyLCBpcAkJCUAgcmVzdG9yZSBsaW5rCiAJbW92CXBjLCBscgkJCUAgYmFjayB0byBteSBjYWxsZXIKICNlbmRpZgorCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTUxNiw0ICs1NDEsNSBAQAogCWJhZF9zYXZlX3VzZXJfcmVncwogCWJsCWRvX2ZpcQogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfVVNFX0lSUSAqLworI2VuZGlmIC8qIENPTkZJR19TUExfQlVJTEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny91LWJvb3QubGRzIGIvYXJjaC9hcm0vY3B1L2FybXY3L3UtYm9vdC5sZHMKaW5kZXggZGJhZTU0ZC4uNDBlY2Y3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L3UtYm9vdC5sZHMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L3UtYm9vdC5sZHMKQEAgLTU1LDYgKzU1LDggQEAKIAogCS4gPSBBTElHTig0KTsKIAorCV9faW1hZ2VfY29weV9lbmQgPSAuOworCiAJLnJlbC5keW4gOiB7CiAJCV9fcmVsX2R5bl9zdGFydCA9IC47CiAJCSooLnJlbCopCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWFybWFkYTEwMC9tZnAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXJtYWRhMTAwL21mcC5oCmluZGV4IDczNzgzYTcuLmQ2ZTA0OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXJtYWRhMTAwL21mcC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXJtYWRhMTAwL21mcC5oCkBAIC01Nyw4ICs1Nyw4IEBACiAjZGVmaW5lIE1GUDg5X1VBUlQyX1RYRAkJKE1GUF9SRUcoMHgwMTY0KSB8IE1GUF9BRjIgfCBNRlBfRFJJVkVfTUVESVVNKQogCiAvKiBVQVJUMyAqLwotI2RlZmluZSBNRlBPOF9VQVJUM19SWEQJCShNRlBfUkVHKDB4MDZjKSB8IE1GUF9BRjIgfCBNRlBfRFJJVkVfTUVESVVNKQotI2RlZmluZSBNRlBPOV9VQVJUM19UWEQJCShNRlBfUkVHKDB4MDcwKSB8IE1GUF9BRjIgfCBNRlBfRFJJVkVfTUVESVVNKQorI2RlZmluZSBNRlBPOF9VQVJUM19UWEQJCShNRlBfUkVHKDB4MDZjKSB8IE1GUF9BRjIgfCBNRlBfRFJJVkVfTUVESVVNKQorI2RlZmluZSBNRlBPOV9VQVJUM19SWEQJCShNRlBfUkVHKDB4MDcwKSB8IE1GUF9BRjIgfCBNRlBfRFJJVkVfTUVESVVNKQogCiAvKiBJMmMgKi8KICNkZWZpbmUgTUZQMTA1X0NJMkNfU0RBCQkoTUZQX1JFRygweDFhNCkgfCBNRlBfQUYxIHwgTUZQX0RSSVZFX01FRElVTSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MS9hdDkxX3NwaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFfc3BpLmgKaW5kZXggYzUyMGU4OS4uYWZlNzI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFfc3BpLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFfc3BpLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAlhdDkxX3BkY190CXBkYzsKIH0gYXQ5MV9zcGlfdDsKIAotI2lmZGVmIENPTkZJR19BVDkxX0xFR0FDWQorI2lmZGVmIENPTkZJR19BVE1FTF9MRUdBQ1kKIAogI2RlZmluZSBBVDkxX1NQSV9DUgkJCTB4MDAJCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfU1BJX1NQSUVOCQkoMSA8PCAgMCkJCS8qIFNQSSBFbmFibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05MjYxLmgKaW5kZXggYzg1ZmQyOS4uNTliMTg2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05MjYxLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05MjYxLmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2RlZmluZSBBVE1FTF9TSVpFX1NSQU0JCTB4MDAwMjgwMDAJLyogSW50ZXJuYWwgU1JBTSBzaXplICgxNjBLYikgKi8KIAogI2RlZmluZSBBVE1FTF9CQVNFX1JPTQkJMHgwMDQwMDAwMAkvKiBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIEFUTUVMX1NJWkVfUk9NCQlTWl8zMksJCS8qIEludGVybmFsIFJPTSBzaXplICgzMktiKSAqLworI2RlZmluZSBBVE1FTF9TSVpFX1JPTQkJMHgwMDAwODAwMAkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMzJLYikgKi8KIAogI2RlZmluZSBBVE1FTF9CQVNFX1VIUAkJMHgwMDUwMDAwMAkvKiBVU0IgSG9zdCBjb250cm9sbGVyICovCiAjZGVmaW5lIEFUTUVMX0JBU0VfTENEQwkJMHgwMDYwMDAwMAkvKiBMREMgY29udHJvbGxlciAqLwpAQCAtMTI1LDYgKzEyNSw3IEBACiAgKiBPdGhlciBtaXNjIGRlZmluZXMKICAqLwogI2RlZmluZSBBVE1FTF9QSU9fUE9SVFMJCTMJCS8qIHRoZWVzZSBTb0NzIGhhdmUgMyBQSU8gKi8KKyNkZWZpbmUgQVRNRUxfUE1DX1VIUAkJQVQ5MVNBTTkyNnhfUE1DX1VIUAogI2RlZmluZSBBVE1FTF9CQVNFX1BJTwkJQVRNRUxfQkFTRV9QSU9BCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjFfbWF0cml4LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjFfbWF0cml4LmgKaW5kZXggZTJiZmM0Yi4uOTEzYjRkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05MjYxX21hdHJpeC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MV9tYXRyaXguaApAQCAtMTUsNTAgKzE1LDQ1IEBACiAjaWZuZGVmIEFUOTFTQU05MjYxX01BVFJJWF9ICiAjZGVmaW5lIEFUOTFTQU05MjYxX01BVFJJWF9ICiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRwkoQVQ5MV9NQVRSSVggKyAweDAwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMAkoMSA8PCAwKQkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAwIChBUk05MjZFSi1TIEluc3RydWN0aW9uIE1hc3RlcikgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjEJKDEgPDwgMSkJCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMSAoQVJNOTI2RUotUyBEYXRhIE1hc3RlcikgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzAJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcxCShBVDkxX01BVFJJWCArIDB4MDgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDBDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzMJKEFUOTFfTUFUUklYICsgMHgxMCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc0CShBVDkxX01BVFJJWCArIDB4MTQpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfU0xPVF9DWUNMRQkJKDB4ZmYgPDwgMCkJLyogTWF4aW11bSBOdW1iZXIgb2YgQWxsb3dlZCBDeWNsZXMgZm9yIGEgQnVyc3QgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRQkoMyAgICA8PCAxNikJLyogRGVmYXVsdCBNYXN0ZXIgVHlwZSAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9OT05FCSgwIDw8IDE2KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9MQVNUCSgxIDw8IDE2KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9GSVhFRAkoMiA8PCAxNikKLSNkZWZpbmUJCUFUOTFfTUFUUklYX0ZJWEVEX0RFRk1TVFIJKDcgICAgPDwgMTgpCS8qIEZpeGVkIEluZGV4IG9mIERlZmF1bHQgTWFzdGVyICovCitzdHJ1Y3QgYXQ5MV9tYXRyaXggeworCXUzMgltY2ZnOwkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKwl1MzIJc2NmZ1s1XTsJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKwl1MzIJZmlsbGVyWzZdOworCXUzMgllYmljc2E7CQkvKiBFQkkgQ2hpcCBTZWxlY3QgQXNzaWdubWVudCBSZWdpc3RlciAqLworfTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2RlZmluZSBBVDkxX01BVFJJWF9UQ1IJCShBVDkxX01BVFJJWCArIDB4MjQpCS8qIFRDTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9JVENNX1NJWkUJCSgweGYgPDwgMCkJLyogU2l6ZSBvZiBJVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8wCQkoMCA8PCAwKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMTYJCSg1IDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8zMgkJKDYgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzY0CQkoNyA8PCAwKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRFRDTV9TSVpFCQkoMHhmIDw8IDQpCS8qIFNpemUgb2YgRFRDTSBlbmFibGVkIG1lbW9yeSBibG9jayAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMAkJKDAgPDwgNCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9EVENNXzE2CQkoNSA8PCA0KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMzIJCSg2IDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV82NAkJKDcgPDwgNCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9JTkZJTklURSAgICAgICAoMCA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9VTEJUX1NJTkdMRSAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIEFUOTFfTUFUUklYX1VMQlRfRk9VUiAgICAgICAgICAgKDIgPDwgMCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9FSUdIVCAgICAgICAgICAoMyA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9VTEJUX1NJWFRFRU4gICAgICAgICg0IDw8IDApCiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfRUJJQ1NBCShBVDkxX01BVFJJWCArIDB4MzApCS8qIEVCSSBDaGlwIFNlbGVjdCBBc3NpZ25tZW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9DUzFBCQkoMSA8PCAxKQkvKiBDaGlwIFNlbGVjdCAxIEFzc2lnbm1lbnQgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzFBX1NNQwkJKDAgPDwgMSkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKLSNkZWZpbmUJCUFUOTFfTUFUUklYX0NTM0EJCSgxIDw8IDMpCS8qIENoaXAgU2VsZWN0IDMgQXNzaWdubWVudCAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTM0FfU01DCQkoMCA8PCAzKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKLSNkZWZpbmUJCUFUOTFfTUFUUklYX0NTNEEJCSgxIDw8IDQpCS8qIENoaXAgU2VsZWN0IDQgQXNzaWdubWVudCAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTNEFfU01DCQkoMCA8PCA0KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTNEFfU01DX0NGMQkoMSA8PCA0KQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1M1QQkJKDEgPDwgNSkJLyogQ2hpcCBTZWxlY3QgNSBBc3NpZ25tZW50ICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M1QV9TTUMJCSgwIDw8IDUpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M1QV9TTUNfQ0YyCSgxIDw8IDUpCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9EQlBVQwkJKDEgPDwgOCkJLyogRGF0YSBCdXMgUHVsbC11cCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIEFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9OT05FICAgKDAgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9MQVNUICAgKDEgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9GSVhFRCAgKDIgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX0ZJWEVEX0RFRk1TVFJfU0hJRlQgMTgKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQVJCVF9ST1VORF9ST0JJTiAgICAoMCA8PCAyNCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQVJCVF9GSVhFRF9QUklPUklUWSAoMSA8PCAyNCkKIAotI2RlZmluZSBBVDkxX01BVFJJWF9VU0JQVUNSCShBVDkxX01BVFJJWCArIDB4MzQpCS8qIFVTQiBQYWQgUHVsbC1VcCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9VU0JQVUNSX1BVT04JKDEgPDwgMzApCS8qIFVTQiBEZXZpY2UgUEFEIFB1bGwtdXAgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfTUFUUklYX00wUFJfU0hJRlQgICAgICAgICAgMAorI2RlZmluZSBBVDkxX01BVFJJWF9NMVBSX1NISUZUICAgICAgICAgIDQKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTTJQUl9TSElGVCAgICAgICAgICA4CisjZGVmaW5lIEFUOTFfTUFUUklYX00zUFJfU0hJRlQgICAgICAgICAgMTIKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTTRQUl9TSElGVCAgICAgICAgICAxNgorI2RlZmluZSBBVDkxX01BVFJJWF9NNVBSX1NISUZUICAgICAgICAgIDIwCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUkNCMCAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9SQ0IxICAgICAgICAgICAgICAgICgxIDw8IDEpCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQ1MxQV9TRFJBTUMgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBICgxIDw8IDMpCisjZGVmaW5lIEFUOTFfTUFUUklYX0NTNEFfU01DX0NGMSAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQ1M1QV9TTUNfQ0YyICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBBVDkxX01BVFJJWF9EQlBVQyAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIEFUOTFfTUFUUklYX1ZERElPTVNFTF8xXzhWICAgICAgKDAgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX1ZERElPTVNFTF8zXzNWICAgICAgKDEgPDwgMTYpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05MjYzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjMuaAppbmRleCAyYTFkNmVlLi5iZjlmZjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjMuaApAQCAtMTI1LDEwICsxMjUsMjMgQEAKICNkZWZpbmUgQVRNRUxfQkFTRV9VSFAJCTB4MDBhMDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAqLwogCiAvKgorICogRXh0ZXJuYWwgbWVtb3J5CisgKi8KKyNkZWZpbmUgQVRNRUxfQkFTRV9DUzAJCTB4MTAwMDAwMDAJLyogdHlwaWNhbGx5IE5PUiAqLworI2RlZmluZSBBVE1FTF9CQVNFX0NTMQkJMHgyMDAwMDAwMAkvKiBTRFJBTSAqLworI2RlZmluZSBBVE1FTF9CQVNFX0NTMgkJMHgzMDAwMDAwMAorI2RlZmluZSBBVE1FTF9CQVNFX0NTMwkJMHg0MDAwMDAwMAkvKiB0eXBpY2FsbHkgTkFORCAqLworI2RlZmluZSBBVE1FTF9CQVNFX0NTNAkJMHg1MDAwMDAwMAorI2RlZmluZSBBVE1FTF9CQVNFX0NTNQkJMHg2MDAwMDAwMAorI2RlZmluZSBBVE1FTF9CQVNFX0NTNgkJMHg3MDAwMDAwMAorI2RlZmluZSBBVE1FTF9CQVNFX0NTNwkJMHg4MDAwMDAwMAorCisvKgogICogT3RoZXIgbWlzYyBkZWZpbmVzCiAgKi8KICNkZWZpbmUgQVRNRUxfUElPX1BPUlRTCQk1CQkvKiB0aGlzIFNvQ3MgaGFzIDUgUElPICovCiAjZGVmaW5lIEFUTUVMX0JBU0VfUElPCQlBVE1FTF9CQVNFX1BJT0EKKyNkZWZpbmUgQVRNRUxfUE1DX1VIUAkJQVQ5MVNBTTkyNnhfUE1DX1VIUAogCiAvKgogICogQ3B1IE5hbWUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2M19tYXRyaXguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2M19tYXRyaXguaAppbmRleCA4M2FhYWFiLi4zZjY3MDkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjNfbWF0cml4LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05MjYzX21hdHJpeC5oCkBAIC0xNSwxMTUgKzE1LDUzIEBACiAjaWZuZGVmIEFUOTFTQU05MjYzX01BVFJJWF9ICiAjZGVmaW5lIEFUOTFTQU05MjYzX01BVFJJWF9ICiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzAJKEFUOTFfTUFUUklYICsgMHgwMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMQkoQVQ5MV9NQVRSSVggKyAweDA0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX01DRkcyCShBVDkxX01BVFJJWCArIDB4MDgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzMJKEFUOTFfTUFUUklYICsgMHgwQykJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNAkoQVQ5MV9NQVRSSVggKyAweDEwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX01DRkc1CShBVDkxX01BVFJJWCArIDB4MTQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzYJKEFUOTFfTUFUUklYICsgMHgxOCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNiAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNwkoQVQ5MV9NQVRSSVggKyAweDFDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA3ICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX01DRkc4CShBVDkxX01BVFJJWCArIDB4MjApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDggKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX1VMQlQJKDcgPDwgMCkJLyogVW5kZWZpbmVkIExlbmd0aCBCdXJzdCBUeXBlICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9JTkZJTklURQkoMCA8PCAwKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfU0lOR0xFCQkoMSA8PCAwKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfRk9VUgkJKDIgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0VJR0hUCQkoMyA8PCAwKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfU0lYVEVFTgkoNCA8PCAwKQorI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMAkoQVQ5MV9NQVRSSVggKyAweDQwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzEJKEFUOTFfTUFUUklYICsgMHg0NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcyCShBVDkxX01BVFJJWCArIDB4NDgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDRDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzQJKEFUOTFfTUFUUklYICsgMHg1MCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc1CShBVDkxX01BVFJJWCArIDB4NTQpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNSAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNgkoQVQ5MV9NQVRSSVggKyAweDU4KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDYgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzcJKEFUOTFfTUFUUklYICsgMHg1QykJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA3ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9TTE9UX0NZQ0xFCQkoMHhmZiA8PCAwKQkvKiBNYXhpbXVtIE51bWJlciBvZiBBbGxvd2VkIEN5Y2xlcyBmb3IgYSBCdXJzdCAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFCSgzICAgIDw8IDE2KQkvKiBEZWZhdWx0IE1hc3RlciBUeXBlICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX05PTkUJKDAgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0xBU1QJKDEgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0ZJWEVECSgyIDw8IDE2KQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRklYRURfREVGTVNUUgkoMHhmICA8PCAxOCkJLyogRml4ZWQgSW5kZXggb2YgRGVmYXVsdCBNYXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX0FSQlQJCSgzICAgIDw8IDI0KQkvKiBBcmJpdHJhdGlvbiBUeXBlICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQVJCVF9ST1VORF9ST0JJTgkoMCA8PCAyNCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9BUkJUX0ZJWEVEX1BSSU9SSVRZCSgxIDw8IDI0KQorLyoKKyAqIFRoaXMgc3RydWN0IGRlZmluZXMgYWNjZXNzIHRvIHRoZSBtYXRyaXgnIG1heGltdW0gb2YKKyAqIDE2IG1hc3RlcnMgYW5kIDE2IHNsYXZlcy4KKyAqIE5vdGU6IG5vdCBhbGwgbWFzdGVycy9zbGF2ZXMgYXJlIGF2YWlsYWJsZQorICovCitzdHJ1Y3QgYXQ5MV9tYXRyaXggeworCXUzMgltY2ZnWzE2XTsJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisJdTMyCXNjZmdbMTZdOwkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworCXUzMglwcmFzWzE2XVsyXTsJLyogUHJpb3JpdHkgQXNzaWdubWVudCBTbGF2ZSBSZWdpc3RlcnMgKi8KKwl1MzIJbXJjcjsJCS8qIE1hc3RlciBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCWZpbGxlclsweDA2XTsKKwl1MzIJZWJpY3NhOwkJLyogRUJJIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KK307CiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzAJKEFUOTFfTUFUUklYICsgMHg4MCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMCAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTMAkoQVQ5MV9NQVRSSVggKyAweDg0KQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSAwICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMxCShBVDkxX01BVFJJWCArIDB4ODgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDEgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzEJKEFUOTFfTUFUUklYICsgMHg4QykJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgMSAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMgkoQVQ5MV9NQVRSSVggKyAweDkwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAyICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQlMyCShBVDkxX01BVFJJWCArIDB4OTQpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDIgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzMJKEFUOTFfTUFUUklYICsgMHg5OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMyAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTMwkoQVQ5MV9NQVRSSVggKyAweDlDKQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSAzICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM0CShBVDkxX01BVFJJWCArIDB4QTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDQgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzQJKEFUOTFfTUFUUklYICsgMHhBNCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgNCAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTNQkoQVQ5MV9NQVRSSVggKyAweEE4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSA1ICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQlM1CShBVDkxX01BVFJJWCArIDB4QUMpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDUgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzYJKEFUOTFfTUFUUklYICsgMHhCMCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNiAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTNgkoQVQ5MV9NQVRSSVggKyAweEI0KQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSA2ICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM3CShBVDkxX01BVFJJWCArIDB4QjgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDcgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzcJKEFUOTFfTUFUUklYICsgMHhCQykJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgNyAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTBQUgkJKDMgPDwgMCkJLyogTWFzdGVyIDAgUHJpb3JpdHkgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX00xUFIJCSgzIDw8IDQpCS8qIE1hc3RlciAxIFByaW9yaXR5ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9NMlBSCQkoMyA8PCA4KQkvKiBNYXN0ZXIgMiBQcmlvcml0eSAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTNQUgkJKDMgPDwgMTIpCS8qIE1hc3RlciAzIFByaW9yaXR5ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9NNFBSCQkoMyA8PCAxNikJLyogTWFzdGVyIDQgUHJpb3JpdHkgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX001UFIJCSgzIDw8IDIwKQkvKiBNYXN0ZXIgNSBQcmlvcml0eSAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTZQUgkJKDMgPDwgMjQpCS8qIE1hc3RlciA2IFByaW9yaXR5ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9NN1BSCQkoMyA8PCAyOCkJLyogTWFzdGVyIDcgUHJpb3JpdHkgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX004UFIJCSgzIDw8IDApCS8qIE1hc3RlciA4IFByaW9yaXR5IChpbiBSZWdpc3RlciBCKSAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIEFUOTFfTUFUUklYX01SQ1IJKEFUOTFfTUFUUklYICsgMHgxMDApCS8qIE1hc3RlciBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IwCQkoMSA8PCAwKQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDAgKEFSTTkyNkVKLVMgSW5zdHJ1Y3Rpb24gTWFzdGVyKSAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMQkJKDEgPDwgMSkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAxIChBUk05MjZFSi1TIERhdGEgTWFzdGVyKSAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMgkJKDEgPDwgMikKLSNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjMJCSgxIDw8IDMpCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I0CQkoMSA8PCA0KQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNQkJKDEgPDwgNSkKLSNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjYJCSgxIDw8IDYpCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I3CQkoMSA8PCA3KQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCOAkJKDEgPDwgOCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9JTkZJTklURQkoMCA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9VTEJUX1NJTkdMRQkJKDEgPDwgMCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9GT1VSCQkoMiA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9VTEJUX0VJR0hUCQkoMyA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9VTEJUX1NJWFRFRU4JKDQgPDwgMCkKIAotI2RlZmluZSBBVDkxX01BVFJJWF9UQ01SCShBVDkxX01BVFJJWCArIDB4MTE0KQkvKiBUQ00gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfSVRDTV9TSVpFCQkoMHhmIDw8IDApCS8qIFNpemUgb2YgSVRDTSBlbmFibGVkIG1lbW9yeSBibG9jayAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMAkJKDAgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzE2CQkoNSA8PCAwKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMzIJCSg2IDw8IDApCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMTYJCSg1IDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8zMgkJKDYgPDwgNCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9MQVNUCSgxIDw8IDE2KQorI2RlZmluZSBBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfRklYRUQJKDIgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX0ZJWEVEX0RFRk1TVFJfU0hJRlQJMTgKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQVJCVF9ST1VORF9ST0JJTgkoMCA8PCAyNCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQVJCVF9GSVhFRF9QUklPUklUWQkoMSA8PCAyNCkKIAotI2RlZmluZSBBVDkxX01BVFJJWF9FQkkwQ1NBCShBVDkxX01BVFJJWCArIDB4MTIwKQkvKiBFQkkwIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSTBfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzFBX1NNQwkJKDAgPDwgMSkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTM0FfU01DCQkoMCA8PCAzKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTBfQ1MzQV9TTUNfU01BUlRNRURJQQkoMSA8PCAzKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzRBCQkoMSA8PCA0KQkvKiBDaGlwIFNlbGVjdCA0IEFzc2lnbm1lbnQgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTNEFfU01DCQkoMCA8PCA0KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTBfQ1M0QV9TTUNfQ0YxCQkoMSA8PCA0KQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTNUFfU01DCQkoMCA8PCA1KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTBfQ1M1QV9TTUNfQ0YyCQkoMSA8PCA1KQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9EQlBVQwkJKDEgPDwgOCkJLyogRGF0YSBCdXMgUHVsbC11cCBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9FQkkwX1ZERElPTVNFTAkoMSA8PCAxNikJLyogTWVtb3J5IHZvbHRhZ2Ugc2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMF9WRERJT01TRUxfMV84VgkJKDAgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMF9WRERJT01TRUxfM18zVgkJKDEgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX00wUFJfU0hJRlQJCTAKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTTFQUl9TSElGVAkJNAorI2RlZmluZSBBVDkxX01BVFJJWF9NMlBSX1NISUZUCQk4CisjZGVmaW5lIEFUOTFfTUFUUklYX00zUFJfU0hJRlQJCTEyCisjZGVmaW5lIEFUOTFfTUFUUklYX000UFJfU0hJRlQJCTE2CisjZGVmaW5lIEFUOTFfTUFUUklYX001UFJfU0hJRlQJCTIwCiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfRUJJMUNTQQkoQVQ5MV9NQVRSSVggKyAweDEyNCkJLyogRUJJMSBDaGlwIFNlbGVjdCBBc3NpZ25tZW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9FQkkxX0NTMUEJCSgxIDw8IDEpCS8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTFfQ1MxQV9TTUMJCSgwIDw8IDEpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMV9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKLSNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSTFfQ1MyQQkJKDEgPDwgMykJLyogQ2hpcCBTZWxlY3QgMyBBc3NpZ25tZW50ICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMV9DUzJBX1NNQwkJKDAgPDwgMykKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkxX0NTMkFfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKLSNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSTFfREJQVUMJCSgxIDw8IDgpCS8qIERhdGEgQnVzIFB1bGwtdXAgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMV9WRERJT01TRUwJKDEgPDwgMTYpCS8qIE1lbW9yeSB2b2x0YWdlIHNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTFfVkRESU9NU0VMXzFfOFYJCSgwIDw8IDE2KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTFfVkRESU9NU0VMXzNfM1YJCSgxIDw8IDE2KQorI2RlZmluZSBBVDkxX01BVFJJWF9SQ0IwCQkoMSA8PCAwKQorI2RlZmluZSBBVDkxX01BVFJJWF9SQ0IxCQkoMSA8PCAxKQorCisjZGVmaW5lIEFUOTFfTUFUUklYX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQorI2RlZmluZSBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBCSgxIDw8IDMpCisjZGVmaW5lIEFUOTFfTUFUUklYX0NTNEFfU01DX0NGMQkoMSA8PCA0KQorI2RlZmluZSBBVDkxX01BVFJJWF9DUzVBX1NNQ19DRjIJKDEgPDwgNSkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfREJQVUMJCSgxIDw8IDgpCisjZGVmaW5lIEFUOTFfTUFUUklYX1ZERElPTVNFTF8xXzhWCSgwIDw8IDE2KQorI2RlZmluZSBBVDkxX01BVFJJWF9WRERJT01TRUxfM18zVgkoMSA8PCAxNikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTlybC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05cmwuaAppbmRleCA4ZWIwZDRmLi4wMGI2YWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTlybC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MS9hdDkxc2FtOXJsLmgKQEAgLTE1LDExNiArMTUsMTE3IEBACiAjZGVmaW5lIEFUOTFTQU05UkxfSAogCiAvKgorICogZGVmaW5lcyB0byBiZSB1c2VkIGluIG90aGVyIHBsYWNlcworICovCisjZGVmaW5lIENPTkZJR19BUk05MjZFSlMJLyogQVJNOTI2RUpTIENvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0FUOTFGQU1JTFkJLyogaXQncyBhIG1lbWJlciBvZiBBVDkxICovCisKKy8qCiAgKiBQZXJpcGhlcmFsIGlkZW50aWZpZXJzL2ludGVycnVwdHMuCiAgKi8KLSNkZWZpbmUgQVQ5MV9JRF9GSVEJCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KLSNkZWZpbmUgQVQ5MV9JRF9TWVMJCTEJLyogU3lzdGVtIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9QSU9BCTIJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfUElPQgkzCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9QSU9ECTUJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfVVMwCTYJLyogVVNBUlQgMCAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX1VTMQk3CS8qIFVTQVJUIDEgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9VUzIJOAkvKiBVU0FSVCAyICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfVVMzCTkJLyogVVNBUlQgMyAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX01DSQkxMAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfVFdJMAkxMQkvKiBUV0kgMCAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX1RXSTEJMTIJLyogVFdJIDEgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9TUEkJMTMJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfU1NDMAkxNAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfU1NDMQkxNQkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfVEMwCTE2CS8qIFRpbWVyIENvdW50ZXIgMCAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX1RDMQkxNwkvKiBUaW1lciBDb3VudGVyIDEgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9UQzIJMTgJLyogVGltZXIgQ291bnRlciAyICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfUFdNQwkxOQkvKiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9UU0MJMjAJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9ETUEJMjEJLyogRE1BIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9VRFBIUwkyMgkvKiBVU0IgRGV2aWNlIEhTICovCi0jZGVmaW5lIEFUOTFTQU05UkxfSURfTENEQwkyMwkvKiBMQ0QgQ29udHJvbGxlciAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX0FDOTdDCTI0CS8qIEFDOTcgQ29udHJvbGxlciAqLwotI2RlZmluZSBBVDkxU0FNOVJMX0lEX0lSUTAJMzEJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCi0KLSNkZWZpbmUgQVQ5MV9TRFJBTUNfQkFTRQkweGZmZmZlYTAwCi0jZGVmaW5lIEFUOTFfU01DX0JBU0UJCTB4ZmZmZmVjMDAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfQkFTRQkweGZmZmZlZTAwCi0jZGVmaW5lIEFUOTFfUElPX0JBU0UJCTB4ZmZmZmY0MDAKLSNkZWZpbmUgQVQ5MV9QTUNfQkFTRQkJMHhmZmZmZmMwMAotI2RlZmluZSBBVDkxX1JTVENfQkFTRQkJMHhmZmZmZmQwMAotI2RlZmluZSBBVDkxX1BJVF9CQVNFCQkweGZmZmZmZDMwCi0jZGVmaW5lIEFUOTFfV0RUX0JBU0UJCTB4ZmZmZmZkNDAKLQotI2lmZGVmIENPTkZJR19BVDkxX0xFR0FDWQorI2RlZmluZSBBVE1FTF9JRF9GSVEJMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLworI2RlZmluZSBBVE1FTF9JRF9TWVMJMQkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KKyNkZWZpbmUgQVRNRUxfSURfUElPQQkyCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLworI2RlZmluZSBBVE1FTF9JRF9QSU9CCTMJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCisjZGVmaW5lIEFUTUVMX0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKyNkZWZpbmUgQVRNRUxfSURfUElPRAk1CS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLworI2RlZmluZSBBVE1FTF9JRF9VU0FSVDAJNgkvKiBVU0FSVCAwICovCisjZGVmaW5lIEFUTUVMX0lEX1VTQVJUMQk3CS8qIFVTQVJUIDEgKi8KKyNkZWZpbmUgQVRNRUxfSURfVVNBUlQyCTgJLyogVVNBUlQgMiAqLworI2RlZmluZSBBVE1FTF9JRF9VU0FSVDMJOQkvKiBVU0FSVCAzICovCisjZGVmaW5lIEFUTUVMX0lEX01DSQkxMAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUTUVMX0lEX1RXSTAJMTEJLyogVFdJIDAgKi8KKyNkZWZpbmUgQVRNRUxfSURfVFdJMQkxMgkvKiBUV0kgMSAqLworI2RlZmluZSBBVE1FTF9JRF9TUEkJMTMJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUTUVMX0lEX1NTQzAJMTQJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMCAqLworI2RlZmluZSBBVE1FTF9JRF9TU0MxCTE1CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDEgKi8KKyNkZWZpbmUgQVRNRUxfSURfVEMwCTE2CS8qIFRpbWVyIENvdW50ZXIgMCAqLworI2RlZmluZSBBVE1FTF9JRF9UQzEJMTcJLyogVGltZXIgQ291bnRlciAxICovCisjZGVmaW5lIEFUTUVMX0lEX1RDMgkxOAkvKiBUaW1lciBDb3VudGVyIDIgKi8KKyNkZWZpbmUgQVRNRUxfSURfUFdNQwkxOQkvKiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVRNRUxfSURfVFNDCTIwCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICovCisjZGVmaW5lIEFUTUVMX0lEX0RNQQkyMQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBBVE1FTF9JRF9VRFBIUwkyMgkvKiBVU0IgRGV2aWNlIEhTICovCisjZGVmaW5lIEFUTUVMX0lEX0xDREMJMjMJLyogTENEIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVRNRUxfSURfQUM5N0MJMjQJLyogQUM5NyBDb250cm9sbGVyICovCisjZGVmaW5lIEFUTUVMX0lEX0lSUTAJMzEJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCiAKIC8qCiAgKiBVc2VyIFBlcmlwaGVyYWwgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMuCiAgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1RDQjAJMHhmZmZhMDAwMAotI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVEMwCTB4ZmZmYTAwMDAKLSNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1RDMQkweGZmZmEwMDQwCi0jZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9UQzIJMHhmZmZhMDA4MAotI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfTUNJCTB4ZmZmYTQwMDAKLSNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1RXSTAJMHhmZmZhODAwMAotI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVFdJMQkweGZmZmFjMDAwCi0jZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9VUzAJMHhmZmZiMDAwMAotI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVVMxCTB4ZmZmYjQwMDAKLSNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1VTMgkweGZmZmI4MDAwCi0jZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9VUzMJMHhmZmZiYzAwMAotI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfU1NDMAkweGZmZmMwMDAwCi0jZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9TU0MxCTB4ZmZmYzQwMDAKLSNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1BXTUMJMHhmZmZjODAwMAotI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfU1BJCTB4ZmZmY2MwMDAKLSNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1RTQwkweGZmZmQwMDAwCi0jZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9VRFBIUwkweGZmZmQ0MDAwCi0jZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9BQzk3QwkweGZmZmQ4MDAwCi0jZGVmaW5lIEFUOTFfQkFTRV9TWVMJCTB4ZmZmZmMwMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9UQ0IwCQkweGZmZmEwMDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfVEMwCQkweGZmZmEwMDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfVEMxCQkweGZmZmEwMDQwCisjZGVmaW5lIEFUTUVMX0JBU0VfVEMyCQkweGZmZmEwMDgwCisjZGVmaW5lIEFUTUVMX0JBU0VfTUNJCQkweGZmZmE0MDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfVFdJMAkJMHhmZmZhODAwMAorI2RlZmluZSBBVE1FTF9CQVNFX1RXSTEJCTB4ZmZmYWMwMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9VU0FSVDAJMHhmZmZiMDAwMAorI2RlZmluZSBBVE1FTF9CQVNFX1VTQVJUMQkweGZmZmI0MDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfVVNBUlQyCTB4ZmZmYjgwMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9VU0FSVDMJMHhmZmZiYzAwMAorI2RlZmluZSBBVE1FTF9CQVNFX1NTQzAJCTB4ZmZmYzAwMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9TU0MxCQkweGZmZmM0MDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfUFdNQwkJMHhmZmZjODAwMAorI2RlZmluZSBBVE1FTF9CQVNFX1NQSTAJCTB4ZmZmY2MwMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9UU0MJCTB4ZmZmZDAwMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9VRFBIUwkweGZmZmQ0MDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfQUM5N0MJMHhmZmZkODAwMAorI2RlZmluZSBBVE1FTF9CQVNFX1NZUwkJMHhmZmZmYzAwMAogCiAvKgotICogU3lzdGVtIFBlcmlwaGVyYWxzIChvZmZzZXQgZnJvbSBBVDkxX0JBU0VfU1lTKQorICogU3lzdGVtIFBlcmlwaGVyYWxzCiAgKi8KLSNkZWZpbmUgQVQ5MV9ETUEJKDB4ZmZmZmU2MDAgLSBBVDkxX0JBU0VfU1lTKQotI2RlZmluZSBBVDkxX0VDQwkoMHhmZmZmZTgwMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfU0RSQU1DCSgweGZmZmZlYTAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9TTUMJKDB4ZmZmZmVjMDAgLSBBVDkxX0JBU0VfU1lTKQotI2RlZmluZSBBVDkxX01BVFJJWAkoMHhmZmZmZWUwMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfQ0NGRwkoMHhmZmZmZWYxMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfQUlDCSgweGZmZmZmMDAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9EQkdVCSgweGZmZmZmMjAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9QSU9BCSgweGZmZmZmNDAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9QSU9CCSgweGZmZmZmNjAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9QSU9DCSgweGZmZmZmODAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9QSU9ECSgweGZmZmZmYTAwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9QTUMJKDB4ZmZmZmZjMDAgLSBBVDkxX0JBU0VfU1lTKQotI2RlZmluZSBBVDkxX1JTVEMJKDB4ZmZmZmZkMDAgLSBBVDkxX0JBU0VfU1lTKQotI2RlZmluZSBBVDkxX1NIRFdDCSgweGZmZmZmZDEwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9SVFQJKDB4ZmZmZmZkMjAgLSBBVDkxX0JBU0VfU1lTKQotI2RlZmluZSBBVDkxX1BJVAkoMHhmZmZmZmQzMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfV0RUCSgweGZmZmZmZDQwIC0gQVQ5MV9CQVNFX1NZUykKLSNkZWZpbmUgQVQ5MV9TQ0tDUgkoMHhmZmZmZmQ1MCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfR1BCUgkoMHhmZmZmZmQ2MCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfUlRDCSgweGZmZmZmZTAwIC0gQVQ5MV9CQVNFX1NZUykKLQotI2RlZmluZSBBVDkxX1VTQVJUMAlBVDkxU0FNOVJMX0JBU0VfVVMwCi0jZGVmaW5lIEFUOTFfVVNBUlQxCUFUOTFTQU05UkxfQkFTRV9VUzEKLSNkZWZpbmUgQVQ5MV9VU0FSVDIJQVQ5MVNBTTlSTF9CQVNFX1VTMgotI2RlZmluZSBBVDkxX1VTQVJUMwlBVDkxU0FNOVJMX0JBU0VfVVMzCi0KLSNlbmRpZiAvKiBDT05GSUdfQVQ5MV9MRUdBQ1kgKi8KKyNkZWZpbmUgQVRNRUxfQkFTRV9ETUEJCTB4ZmZmZmU2MDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9FQ0MJCTB4ZmZmZmU4MDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9TRFJBTUMJMHhmZmZmZWEwMAorI2RlZmluZSBBVE1FTF9CQVNFX1NNQwkJMHhmZmZmZWMwMAorI2RlZmluZSBBVE1FTF9CQVNFX01BVFJJWAkweGZmZmZlZTAwCisjZGVmaW5lIEFUTUVMX0JBU0VfQ0NGRwkJMHhmZmZmZWYxMAorI2RlZmluZSBBVE1FTF9CQVNFX0FJQwkJMHhmZmZmZjAwMAorI2RlZmluZSBBVE1FTF9CQVNFX0RCR1UJCTB4ZmZmZmYyMDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9QSU9BCQkweGZmZmZmNDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfUElPQgkJMHhmZmZmZjYwMAorI2RlZmluZSBBVE1FTF9CQVNFX1BJT0MJCTB4ZmZmZmY4MDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9QSU9ECQkweGZmZmZmYTAwCisjZGVmaW5lIEFUTUVMX0JBU0VfUE1DCQkweGZmZmZmYzAwCisjZGVmaW5lIEFUTUVMX0JBU0VfUlNUQwkJMHhmZmZmZmQwMAorI2RlZmluZSBBVE1FTF9CQVNFX1NIRFdDCTB4ZmZmZmZkMTAKKyNkZWZpbmUgQVRNRUxfQkFTRV9SVFQJCTB4ZmZmZmZkMjAKKyNkZWZpbmUgQVRNRUxfQkFTRV9QSVQJCTB4ZmZmZmZkMzAKKyNkZWZpbmUgQVRNRUxfQkFTRV9XRFQJCTB4ZmZmZmZkNDAKKyNkZWZpbmUgQVRNRUxfQkFTRV9TQ0tDUgkweGZmZmZmZDUwCisjZGVmaW5lIEFUTUVMX0JBU0VfR1BCUgkJMHhmZmZmZmQ2MAorI2RlZmluZSBBVE1FTF9CQVNFX1JUQwkJMHhmZmZmZmUwMAogCiAvKgogICogSW50ZXJuYWwgTWVtb3J5LgogICovCi0jZGVmaW5lIEFUOTFTQU05UkxfU1JBTV9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9TUkFNX1NJWkUJU1pfMTZLCQkvKiBJbnRlcm5hbCBTUkFNIHNpemUgKDE2S2IpICovCisjZGVmaW5lIEFUTUVMX0JBU0VfU1JBTQkJMHgwMDMwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVE1FTF9CQVNFX1JPTQkJMHgwMDQwMDAwMAkvKiBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzICovCiAKLSNkZWZpbmUgQVQ5MVNBTTlSTF9ST01fQkFTRQkweDAwNDAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MVNBTTlSTF9ST01fU0laRQkoMiAqIFNaXzE2SykJLyogSW50ZXJuYWwgUk9NIHNpemUgKDMyS2IpICovCisjZGVmaW5lIEFUTUVMX0JBU0VfTENEQwkJMHgwMDUwMDAwMAkvKiBMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBBVE1FTF9VSFBfQkFTRQkJMHgwMDYwMDAwMAkvKiBVU0IgRGV2aWNlIEhTIGNvbnRyb2xsZXIgKi8KIAotI2RlZmluZSBBVDkxU0FNOVJMX0xDRENfQkFTRQkweDAwNTAwMDAwCS8qIExDRCBDb250cm9sbGVyICovCi0jZGVmaW5lIEFUOTFTQU05UkxfVURQSFNfQkFTRQkweDAwNjAwMDAwCS8qIFVTQiBEZXZpY2UgSFMgY29udHJvbGxlciAqLworLyoKKyAqIEV4dGVybmFsIG1lbW9yeQorICovCisjZGVmaW5lIEFUTUVMX0JBU0VfQ1MwCQkweDEwMDAwMDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfQ1MxCQkweDIwMDAwMDAwCS8qIFNEUkFNICovCisjZGVmaW5lIEFUTUVMX0JBU0VfQ1MyCQkweDMwMDAwMDAwCisjZGVmaW5lIEFUTUVMX0JBU0VfQ1MzCQkweDQwMDAwMDAwCS8qIE5BTkQgKi8KKyNkZWZpbmUgQVRNRUxfQkFTRV9DUzQJCTB4NTAwMDAwMDAJLyogQ29tcGFjdCBGbGFzaCBTbG90IDAgKi8KKyNkZWZpbmUgQVRNRUxfQkFTRV9DUzUJCTB4NjAwMDAwMDAJLyogQ29tcGFjdCBGbGFzaCBTbG90IDEgKi8KKworLyoKKyAqIE90aGVyIG1pc2MgZGVmaW5lcworICovCisjZGVmaW5lIEFUTUVMX1BJT19QT1JUUwkJNAkJLyogdGhpcyBTb0MgaGFzIDQgUElPICovCisjZGVmaW5lIEFUTUVMX0JBU0VfUElPCQlBVE1FTF9CQVNFX1BJT0EKIAogLyoKICAqIENwdSBOYW1lCiAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19BVDkxX0NQVV9OQU1FCSJBVDkxU0FNOVJMIgorI2RlZmluZSBBVE1FTF9DUFVfTkFNRQkJIkFUOTFTQU05UkwiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxL2F0OTFzYW05cmxfbWF0cml4LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTlybF9tYXRyaXguaAppbmRleCBhZjhkOTE0Li4yOTVmNzY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTlybF9tYXRyaXguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTEvYXQ5MXNhbTlybF9tYXRyaXguaApAQCAtMTQsODMgKzE0LDQ4IEBACiAjaWZuZGVmIEFUOTFTQU05UkxfTUFUUklYX0gKICNkZWZpbmUgQVQ5MVNBTTlSTF9NQVRSSVhfSAogCi0jZGVmaW5lIEFUOTFfTUFUUklYX01DRkcwCShBVDkxX01BVFJJWCArIDB4MDApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzEJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDA4KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX01DRkczCShBVDkxX01BVFJJWCArIDB4MEMpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzQJKEFUOTFfTUFUUklYICsgMHgxMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNQkoQVQ5MV9NQVRSSVggKyAweDE0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9VTEJUCSg3IDw8IDApCS8qIFVuZGVmaW5lZCBMZW5ndGggQnVyc3QgVHlwZSAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfSU5GSU5JVEUJKDAgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJTkdMRQkJKDEgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0ZPVVIJCSgyIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9FSUdIVAkJKDMgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJWFRFRU4JKDQgPDwgMCkKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzAJKEFUOTFfTUFUUklYICsgMHg0MCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcxCShBVDkxX01BVFJJWCArIDB4NDQpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDQ4KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzMJKEFUOTFfTUFUUklYICsgMHg0QykJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc0CShBVDkxX01BVFJJWCArIDB4NTApCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNQkoQVQ5MV9NQVRSSVggKyAweDU0KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX1NMT1RfQ1lDTEUJCSgweGZmIDw8IDApCS8qIE1heGltdW0gTnVtYmVyIG9mIEFsbG93ZWQgQ3ljbGVzIGZvciBhIEJ1cnN0ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEUJKDMgICAgPDwgMTYpCS8qIERlZmF1bHQgTWFzdGVyIFR5cGUgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfTk9ORQkoMCA8PCAxNikKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfTEFTVAkoMSA8PCAxNikKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfRklYRUQJKDIgPDwgMTYpCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9GSVhFRF9ERUZNU1RSCSgweGYgIDw8IDE4KQkvKiBGaXhlZCBJbmRleCBvZiBEZWZhdWx0IE1hc3RlciAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfQVJCVAkJKDMgICAgPDwgMjQpCS8qIEFyYml0cmF0aW9uIFR5cGUgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9BUkJUX1JPVU5EX1JPQklOCSgwIDw8IDI0KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0FSQlRfRklYRURfUFJJT1JJVFkJKDEgPDwgMjQpCitzdHJ1Y3QgYXQ5MV9tYXRyaXggeworCXUzMgltY2ZnWzE2XTsJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisJdTMyCXNjZmdbMTZdOwkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworCXUzMglwcmFzWzE2XVsyXTsJLyogUHJpb3JpdHkgQXNzaWdubWVudCBTbGF2ZSBSZWdpc3RlcnMgKi8KKwl1MzIJbXJjcjsJCS8qIE1hc3RlciBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCWZpbGxlcls3XTsKKwl1MzIJZWJpY3NhOwkJLyogRUJJIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KK307CiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzAJKEFUOTFfTUFUUklYICsgMHg4MCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMCAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMQkoQVQ5MV9NQVRSSVggKyAweDg4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAxICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMyCShBVDkxX01BVFJJWCArIDB4OTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDIgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzMJKEFUOTFfTUFUUklYICsgMHg5OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMyAqLwotI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTNAkoQVQ5MV9NQVRSSVggKyAweEEwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSA0ICovCi0jZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM1CShBVDkxX01BVFJJWCArIDB4QTgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDUgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX00wUFIJCSgzIDw8IDApCS8qIE1hc3RlciAwIFByaW9yaXR5ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9NMVBSCQkoMyA8PCA0KQkvKiBNYXN0ZXIgMSBQcmlvcml0eSAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTJQUgkJKDMgPDwgOCkJLyogTWFzdGVyIDIgUHJpb3JpdHkgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX00zUFIJCSgzIDw8IDEyKQkvKiBNYXN0ZXIgMyBQcmlvcml0eSAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTRQUgkJKDMgPDwgMTYpCS8qIE1hc3RlciA0IFByaW9yaXR5ICovCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9NNVBSCQkoMyA8PCAyMCkJLyogTWFzdGVyIDUgUHJpb3JpdHkgKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2RlZmluZSBBVDkxX01BVFJJWF9NUkNSCShBVDkxX01BVFJJWCArIDB4MTAwKQkvKiBNYXN0ZXIgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMAkJKDEgPDwgMCkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAwIChBUk05MjZFSi1TIEluc3RydWN0aW9uIE1hc3RlcikgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjEJCSgxIDw8IDEpCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMSAoQVJNOTI2RUotUyBEYXRhIE1hc3RlcikgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjIJCSgxIDw8IDIpCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IzCQkoMSA8PCAzKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNAkJKDEgPDwgNCkKLSNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjUJCSgxIDw8IDUpCisjZGVmaW5lIEFUOTFfTUFUUklYX1VMQlRfSU5GSU5JVEUJKDAgPDwgMCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9TSU5HTEUJCSgxIDw8IDApCisjZGVmaW5lIEFUOTFfTUFUUklYX1VMQlRfRk9VUgkJKDIgPDwgMCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9FSUdIVAkJKDMgPDwgMCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVUxCVF9TSVhURUVOCSg0IDw8IDApCiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfVENNUgkoQVQ5MV9NQVRSSVggKyAweDExNCkJLyogVENNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX0lUQ01fU0laRQkJKDB4ZiA8PCAwKQkvKiBTaXplIG9mIElUQ00gZW5hYmxlZCBtZW1vcnkgYmxvY2sgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzAJCSgwIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8xNgkJKDUgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzMyCQkoNiA8PCAwKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfRFRDTV9TSVpFCQkoMHhmIDw8IDQpCS8qIFNpemUgb2YgRFRDTSBlbmFibGVkIG1lbW9yeSBibG9jayAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMAkJKDAgPDwgNCkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9EVENNXzE2CQkoNSA8PCA0KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMzIJCSg2IDw8IDQpCisjZGVmaW5lIEFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9OT05FCSgwIDw8IDE2KQorI2RlZmluZSBBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfTEFTVAkoMSA8PCAxNikKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0ZJWEVECSgyIDw8IDE2KQorI2RlZmluZSBBVDkxX01BVFJJWF9GSVhFRF9ERUZNU1RSX1NISUZUCTE4CisjZGVmaW5lIEFUOTFfTUFUUklYX0FSQlRfUk9VTkRfUk9CSU4JKDAgPDwgMjQpCisjZGVmaW5lIEFUOTFfTUFUUklYX0FSQlRfRklYRURfUFJJT1JJVFkJKDEgPDwgMjQpCiAKLSNkZWZpbmUgQVQ5MV9NQVRSSVhfRUJJQ1NBCShBVDkxX01BVFJJWCArIDB4MTIwKQkvKiBFQkkwIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX0NTMUEJCSgxIDw8IDEpCS8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTMUFfU01DCQkoMCA8PCAxKQotI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MzQQkJKDEgPDwgMykJLyogQ2hpcCBTZWxlY3QgMyBBc3NpZ25tZW50ICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MzQV9TTUMJCSgwIDw8IDMpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQQkoMSA8PCAzKQotI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1M0QQkJKDEgPDwgNCkJLyogQ2hpcCBTZWxlY3QgNCBBc3NpZ25tZW50ICovCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M0QV9TTUMJCSgwIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M0QV9TTUNfQ0YxCSgxIDw8IDQpCi0jZGVmaW5lCQlBVDkxX01BVFJJWF9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzVBX1NNQwkJKDAgPDwgNSkKLSNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzVBX1NNQ19DRjIJKDEgPDwgNSkKLSNkZWZpbmUJCUFUOTFfTUFUUklYX0RCUFVDCQkoMSA8PCA4KQkvKiBEYXRhIEJ1cyBQdWxsLXVwIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUJCUFUOTFfTUFUUklYX1ZERElPTVNFTAkJKDEgPDwgMTYpCS8qIE1lbW9yeSB2b2x0YWdlIHNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfTUFUUklYX1ZERElPTVNFTF8xXzhWCSgwIDw8IDE2KQotI2RlZmluZQkJCUFUOTFfTUFUUklYX1ZERElPTVNFTF8zXzNWCSgxIDw8IDE2KQorI2RlZmluZSBBVDkxX01BVFJJWF9NMFBSX1NISUZUCQkwCisjZGVmaW5lIEFUOTFfTUFUUklYX00xUFJfU0hJRlQJCTQKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTTJQUl9TSElGVAkJOAorI2RlZmluZSBBVDkxX01BVFJJWF9NM1BSX1NISUZUCQkxMgorI2RlZmluZSBBVDkxX01BVFJJWF9NNFBSX1NISUZUCQkxNgorI2RlZmluZSBBVDkxX01BVFJJWF9NNVBSX1NISUZUCQkyMAogCisjZGVmaW5lIEFUOTFfTUFUUklYX1JDQjAJCSgxIDw8IDApCisjZGVmaW5lIEFUOTFfTUFUUklYX1JDQjEJCSgxIDw8IDEpCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQ1MxQV9TRFJBTUMJCSgxIDw8IDEpCisjZGVmaW5lIEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfQ1M0QV9TTUNfQ0YxCSgxIDw8IDQpCisjZGVmaW5lIEFUOTFfTUFUUklYX0NTNUFfU01DX0NGMgkoMSA8PCA1KQorI2RlZmluZSBBVDkxX01BVFJJWF9EQlBVQwkJKDEgPDwgOCkKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzFfOFYJKDAgPDwgMTYpCisjZGVmaW5lIEFUOTFfTUFUUklYX1ZERElPTVNFTF8zXzNWCSgxIDw8IDE2KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MXJtOTIwMC9BVDkxUk05MjAwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWF0OTFybTkyMDAvQVQ5MVJNOTIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGJhZTFjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MXJtOTIwMC9BVDkxUk05MjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MTIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMwotICogQVQ5MVJNOTIwMCBkZWZpbml0aW9ucwotICogQXV0aG9yIDogQVRNRUwgQVQ5MSBhcHBsaWNhdGlvbiBncm91cAotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgQVQ5MVJNOTIwMF9ICi0jZGVmaW5lIEFUOTFSTTkyMDBfSAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQVQ5MV9SRUc7CQkvKiBIYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UQwotewotCUFUOTFfUkVHCSBUQ19DQ1I7CS8qIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBUQ19DTVI7CS8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07CS8qICAqLwotCUFUOTFfUkVHCSBUQ19DVjsJCS8qIENvdW50ZXIgVmFsdWUgKi8KLQlBVDkxX1JFRwkgVENfUkE7CQkvKiBSZWdpc3RlciBBICovCi0JQVQ5MV9SRUcJIFRDX1JCOwkJLyogUmVnaXN0ZXIgQiAqLwotCUFUOTFfUkVHCSBUQ19SQzsJCS8qIFJlZ2lzdGVyIEMgKi8KLQlBVDkxX1JFRwkgVENfU1I7CQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVENfSUVSOwkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFRDX0lEUjsJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVENfSU1SOwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotfSBBVDkxU19UQywgKkFUOTFQU19UQzsKLQotI2RlZmluZSBBVDkxQ19UQ19USU1FUl9ESVYxX0NMT0NLICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8qIChUQykgTUNLLzIgKi8KLSNkZWZpbmUgQVQ5MUNfVENfVElNRVJfRElWMl9DTE9DSyAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvKiAoVEMpIE1DSy84ICovCi0jZGVmaW5lIEFUOTFDX1RDX1RJTUVSX0RJVjNfQ0xPQ0sgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMCkgLyogKFRDKSBNQ0svMzIgKi8KLSNkZWZpbmUgQVQ5MUNfVENfVElNRVJfRElWNF9DTE9DSyAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvKiAoVEMpIE1DSy8xMjggKi8KLSNkZWZpbmUgQVQ5MUNfVENfU0xPV19DTE9DSwkgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDApIC8qIChUQykgU0xPVyBDTEsqLwotI2RlZmluZSBBVDkxQ19UQ19YQzBfQ0xPQ0sJICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAwKSAvKiAoVEMpIFhDMCAqLwotI2RlZmluZSBBVDkxQ19UQ19YQzFfQ0xPQ0sJICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAwKSAvKiAoVEMpIFhDMSAqLwotI2RlZmluZSBBVDkxQ19UQ19YQzJfQ0xPQ0sJICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvKiAoVEMpIFhDMiAqLwotI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwU19OT05FCSAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgICAgICAgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMCAqLwotI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxU19OT05FCSAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMSAqLwotI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyU19OT05FCSAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMiAqLwotI2RlZmluZSBBVDkxQ19UQ19DTEtESVMJCSAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZCAqLwotI2RlZmluZSBBVDkxQ19UQ19TV1RSRwkJICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLwotI2RlZmluZSBBVDkxQ19UQ19DTEtFTgkJICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0ICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VTQVJUCi17Ci0JQVQ5MV9SRUcJIFVTX0NSOwkJLyogQ29udHJvbCBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19NUjsJCS8qIE1vZGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfSUVSOwkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX0lEUjsJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfSU1SOwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19DU1I7CS8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX1JIUjsJLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19USFI7CS8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfQlJHUjsJLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19SVE9SOwkvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19UVEdSOwkvKiBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkMFs1XTsJLyogICovCi0JQVQ5MV9SRUcJIFVTX0ZJREk7CS8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX05FUjsJLyogTmIgRXJyb3JzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX1hYUjsJLyogWE9OX1hPRkYgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfSUY7CQkvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOwkvKiAgKi8KLQlBVDkxX1JFRwkgVVNfUlBSOwkvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfUkNSOwkvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfVFBSOwkvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX1RDUjsJLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19STlBSOwkvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19STkNSOwkvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBVU19UTlBSOwkvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgVVNfVE5DUjsJLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX1BUQ1I7CS8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFVTX1BUU1I7CS8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8KLX0gQVQ5MVNfVVNBUlQsICpBVDkxUFNfVVNBUlQ7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlciAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DS0dSCi17Ci0JQVQ5MV9SRUcJIENLR1JfTU9SOwkvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgQ0tHUl9NQ0ZSOwkvKiBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgQ0tHUl9QTExBUjsJLyogUExMIEEgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgQ0tHUl9QTExCUjsJLyogUExMIEIgUmVnaXN0ZXIgKi8KLX0gQVQ5MVNfQ0tHUiwgKkFUOTFQU19DS0dSOwotCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1NDRU4JKCh1bnNpZ25lZCBpbnQpIDB4MSAgPDwgIDApCS8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDVEVTVAkoKHVuc2lnbmVkIGludCkgMHgxICA8PCAgMSkJLyogKENLR1IpIE9zY2lsbGF0b3IgVGVzdCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQJKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpCS8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZSAqLwotCi0vKiAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORgkoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKQkvKiAoQ0tHUikgTWFpbiBDbG9jayBGcmVxdWVuY3kgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpCS8qIChDS0dSKSBNYWluIENsb2NrIFJlYWR5ICovCi0KLS8qIC0tLS0tLS0tIENLR1JfUExMQVIgOiAoQ0tHUiBPZmZzZXQ6IDB4OCkgUExMIEEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVZBCQkoKHVuc2lnbmVkIGludCkgMHhGRiAgPDwgIDApCS8qIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfRElWQV8wCSgodW5zaWduZWQgaW50KSAweDApCQkvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX0RJVkFfQllQQVNTCSgodW5zaWduZWQgaW50KSAweDEpCQkvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX1BMTEFDT1VOVAkoKHVuc2lnbmVkIGludCkgMHgzRiAgPDwgIDgpCS8qIChDS0dSKSBQTEwgQSBDb3VudGVyICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUQQkJKCh1bnNpZ25lZCBpbnQpIDB4MyAgIDw8IDE0KQkvKiAoQ0tHUikgUExMIEEgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZSAqLwotI2RlZmluZSBBVDkxQ19DS0dSX09VVEFfMAkoKHVuc2lnbmVkIGludCkgMHgwICAgPDwgMTQpCS8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTEEgZGF0YXNoZWV0ICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUQV8xCSgodW5zaWduZWQgaW50KSAweDEgICA8PCAxNCkJLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMQSBkYXRhc2hlZXQgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9PVVRBXzIJKCh1bnNpZ25lZCBpbnQpIDB4MiAgIDw8IDE0KQkvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTExBIGRhdGFzaGVldCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX09VVEFfMwkoKHVuc2lnbmVkIGludCkgMHgzICAgPDwgMTQpCS8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTEEgZGF0YXNoZWV0ICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMQQkJKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KQkvKiAoQ0tHUikgUExMIEEgTXVsdGlwbGllciAqLwotI2RlZmluZSBBVDkxQ19DS0dSX1NSQ0EJCSgodW5zaWduZWQgaW50KSAweDEgICA8PCAyOSkJLyogKENLR1IpIFBMTCBBIFNvdXJjZSAqLwotCi0vKiAtLS0tLS0tLSBDS0dSX1BMTEJSIDogKENLR1IgT2Zmc2V0OiAweGMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfRElWQgkJKCh1bnNpZ25lZCBpbnQpIDB4RkYgIDw8ICAwKQkvKiAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX0RJVkJfMAkoKHVuc2lnbmVkIGludCkgMHgwKQkJLyogKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDAgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVZCX0JZUEFTUwkoKHVuc2lnbmVkIGludCkgMHgxKQkJLyogKENLR1IpIERpdmlkZXIgaXMgYnlwYXNzZWQgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExCQ09VTlQJKCh1bnNpZ25lZCBpbnQpIDB4M0YgIDw8ICA4KQkvKiAoQ0tHUikgUExMIEIgQ291bnRlciAqLwotI2RlZmluZSBBVDkxQ19DS0dSX09VVEIJCSgodW5zaWduZWQgaW50KSAweDMgICA8PCAxNCkJLyogKENLR1IpIFBMTCBCIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9PVVRCXzAJKCh1bnNpZ25lZCBpbnQpIDB4MCAgIDw8IDE0KQkvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTExCIGRhdGFzaGVldCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX09VVEJfMQkoKHVuc2lnbmVkIGludCkgMHgxICAgPDwgMTQpCS8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTEIgZGF0YXNoZWV0ICovCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUQl8yCSgodW5zaWduZWQgaW50KSAweDIgICA8PCAxNCkJLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMQiBkYXRhc2hlZXQgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9PVVRCXzMJKCh1bnNpZ25lZCBpbnQpIDB4MyAgIDw8IDE0KQkvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTExCIGRhdGFzaGVldCAqLwotI2RlZmluZSBBVDkxQ19DS0dSX01VTEIJCSgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikJLyogKENLR1IpIFBMTCBCIE11bHRpcGxpZXIgKi8KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JfOTZNCSgodW5zaWduZWQgaW50KSAweDEgICA8PCAyOCkJLyogKENLR1IpIERpdmlkZXIgZm9yIFVTQiBQb3J0cyAqLwotI2RlZmluZSBBVDkxQ19DS0dSX1VTQl9QTEwJKCh1bnNpZ25lZCBpbnQpIDB4MSAgIDw8IDI5KQkvKiAoQ0tHUikgUExMIFVzZSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElPCi17Ci0JQVQ5MV9SRUcJIFBJT19QRVI7CS8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUElPX1BEUjsJLyogUElPIERpc2FibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUElPX1BTUjsJLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07CS8qICAqLwotCUFUOTFfUkVHCSBQSU9fT0VSOwkvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19PRFI7CS8qIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLwotCUFUOTFfUkVHCSBQSU9fT1NSOwkvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsJLyogICovCi0JQVQ5MV9SRUcJIFBJT19JRkVSOwkvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19JRkRSOwkvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fSUZTUjsJLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07CS8qICAqLwotCUFUOTFfUkVHCSBQSU9fU09EUjsJLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19DT0RSOwkvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fT0RTUjsJLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19QRFNSOwkvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUElPX0lFUjsJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fSURSOwkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fSU1SOwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fSVNSOwkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19NREVSOwkvKiBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19NRERSOwkvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fTURTUjsJLyogTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDNbMV07CS8qICAqLwotCUFUOTFfUkVHCSBQSU9fUFBVRFI7CS8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fUFBVRVI7CS8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19QUFVTUjsJLyogUGFkIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkNFsxXTsJLyogICovCi0JQVQ5MV9SRUcJIFBJT19BU1I7CS8qIFNlbGVjdCBBIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19CU1I7CS8qIFNlbGVjdCBCIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19BQlNSOwkvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsJLyogICovCi0JQVQ5MV9SRUcJIFBJT19PV0VSOwkvKiBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBJT19PV0RSOwkvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQSU9fT1dTUjsJLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLwotfSBBVDkxU19QSU8sICpBVDkxUFNfUElPOwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19EQkdVCi17Ci0JQVQ5MV9SRUcJIERCR1VfQ1I7CS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgREJHVV9NUjsJLyogTW9kZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX0lFUjsJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX0lEUjsJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgREJHVV9JTVI7CS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIERCR1VfQ1NSOwkvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX1JIUjsJLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX1RIUjsJLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX0JSR1I7CS8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzddOwkvKiAgKi8KLQlBVDkxX1JFRwkgREJHVV9DMVI7CS8qIENoaXAgSUQxIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIERCR1VfQzJSOwkvKiBDaGlwIElEMiBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX0ZOVFI7CS8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkMVs0NV07CS8qICAqLwotCUFUOTFfUkVHCSBEQkdVX1JQUjsJLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIERCR1VfUkNSOwkvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgREJHVV9UUFI7CS8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgREJHVV9UQ1I7CS8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgREJHVV9STlBSOwkvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBEQkdVX1JOQ1I7CS8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIERCR1VfVE5QUjsJLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIERCR1VfVE5DUjsJLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIERCR1VfUFRDUjsJLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgREJHVV9QVFNSOwkvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovCi19IEFUOTFTX0RCR1UsICpBVDkxUFNfREJHVTsKLQotLyogLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICAqLwotI2RlZmluZSBBVDkxQ19VU19SWFJEWQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLyogKERCR1UpIFJYUkRZIEludGVycnVwdCAqLwotI2RlZmluZSBBVDkxQ19VU19UWFJEWQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLwotI2RlZmluZSBBVDkxQ19VU19FTkRSWAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLyogKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdCAqLwotI2RlZmluZSBBVDkxQ19VU19FTkRUWAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLyogKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZSRQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLyogKERCR1UpIE92ZXJydW4gSW50ZXJydXB0ICovCi0jZGVmaW5lIEFUOTFDX1VTX0ZSQU1FCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvKiAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSRQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLyogKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvKiAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvKiAoREJHVSkgVFhCVUZFIEludGVycnVwdCAqLwotI2RlZmluZSBBVDkxQ19VU19SWEJVRkYJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8qIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0ICovCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFgJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLyogKERCR1UpIENPTU1fVFggSW50ZXJydXB0ICovCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlgJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLyogKERCR1UpIENPTU1fUlggSW50ZXJydXB0ICovCi0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICAqLwotI2RlZmluZSBBVDkxQ19VU19SU1RSWAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLyogKERCR1UpIFJlc2V0IFJlY2VpdmVyICovCi0jZGVmaW5lIEFUOTFDX1VTX1JTVFRYCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvKiAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfUlhFTgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLwotI2RlZmluZSBBVDkxQ19VU19SWERJUwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLyogKERCR1UpIFJlY2VpdmVyIERpc2FibGUgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLyogKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZSAqLwotI2RlZmluZSBBVDkxQ19VU19UWERJUwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLyogKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUgKi8KLQotI2RlZmluZSBBVDkxQ19VU19DTEtTX0NMT0NLCSgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8qIChVU0FSVCkgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hSTF84X0JJVFMJKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMgKi8KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSX05PTkUJKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOSkgLyogKERCR1UpIE5vIFBhcml0eSAqLwotI2RlZmluZSBBVDkxQ19VU19OQlNUT1BfMV9CSVQJKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLyogKFVTQVJUKSAxIHN0b3AgYml0ICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgMiBJbnRlcmZhY2UgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19TTUMyCi17Ci0JQVQ5MV9SRUcJIFNNQzJfQ1NSWzhdOwkvKiBTTUMyIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovCi19IEFUOTFTX1NNQzIsICpBVDkxUFNfU01DMjsKLQotLyogLS0tLS0tLS0gU01DMl9DU1IgOiAoU01DMiBPZmZzZXQ6IDB4MCkgU01DMiBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSAgKi8KLSNkZWZpbmUgQVQ5MUNfU01DMl9OV1MJCQkoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAwKSAvKiAoU01DMikgTnVtYmVyIG9mIFdhaXQgU3RhdGVzICovCi0jZGVmaW5lIEFUOTFDX1NNQzJfV1NFTgkJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8qIChTTUMyKSBXYWl0IFN0YXRlIEVuYWJsZSAqLwotI2RlZmluZSBBVDkxQ19TTUMyX1RERgkJCSgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8qIChTTUMyKSBEYXRhIEZsb2F0IFRpbWUgKi8KLSNkZWZpbmUgQVQ5MUNfU01DMl9CQVQJCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvKiAoU01DMikgQnl0ZSBBY2Nlc3MgVHlwZSAqLwotI2RlZmluZSBBVDkxQ19TTUMyX0RCVwkJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8qIChTTUMyKSBEYXRhIEJ1cyBXaWR0aCAqLwotI2RlZmluZSBBVDkxQ19TTUMyX0RCV18xNgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLyogKFNNQzIpIDE2LWJpdC4gKi8KLSNkZWZpbmUgQVQ5MUNfU01DMl9EQldfOAkJKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLyogKFNNQzIpIDgtYml0LiAqLwotI2RlZmluZSBBVDkxQ19TTUMyX0RSUAkJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8qIChTTUMyKSBEYXRhIFJlYWQgUHJvdG9jb2wgKi8KLSNkZWZpbmUgQVQ5MUNfU01DMl9BQ1NTCQkJKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLyogKFNNQzIpIEFkZHJlc3MgdG8gQ2hpcCBTZWxlY3QgU2V0dXAgKi8KLSNkZWZpbmUgQVQ5MUNfU01DMl9BQ1NTX1NUQU5EQVJECSgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8qIChTTUMyKSBTdGFuZGFyZCwgYXNzZXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYWNjZXNzIGFuZCBkZWFzc2VydGVkIGF0IHRoZSBlbmQuICovCi0jZGVmaW5lIEFUOTFDX1NNQzJfQUNTU18xX0NZQ0xFCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvKiAoU01DMikgT25lIGN5Y2xlIGxlc3MgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiB0aGUgYWNjZXNzLiAqLwotI2RlZmluZSBBVDkxQ19TTUMyX0FDU1NfMl9DWUNMRVMJKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLyogKFNNQzIpIFR3byBjeWNsZXMgbGVzcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSBhY2Nlc3MuICovCi0jZGVmaW5lIEFUOTFDX1NNQzJfQUNTU18zX0NZQ0xFUwkoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvKiAoU01DMikgVGhyZWUgY3ljbGVzIGxlc3MgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiB0aGUgYWNjZXNzLiAqLwotI2RlZmluZSBBVDkxQ19TTUMyX1JXU0VUVVAJCSgodW5zaWduZWQgaW50KSAweDcgPDwgMjQpIC8qIChTTUMyKSBSZWFkIGFuZCBXcml0ZSBTaWduYWwgU2V0dXAgVGltZSAqLwotI2RlZmluZSBBVDkxQ19TTUMyX1JXSE9MRAkJKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyOSkgLyogKFNNQzIpIFJlYWQgYW5kIFdyaXRlIFNpZ25hbCBIb2xkIFRpbWUgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXIgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQwotewotCUFUOTFfUkVHCSBQTUNfU0NFUjsJLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQTUNfU0NEUjsJLyogU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUE1DX1NDU1I7CS8qIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOwkvKiAqLwotCUFUOTFfUkVHCSBQTUNfUENFUjsJLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUE1DX1BDRFI7CS8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQTUNfUENTUjsJLyogUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzVdOwkvKiAqLwotCUFUOTFfUkVHCSBQTUNfTUNLUjsJLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkMlszXTsJLyogKi8KLQlBVDkxX1JFRwkgUE1DX1BDS1JbOF07CS8qIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQTUNfSUVSOwkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBNQ19JRFI7CS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBNQ19TUjsJLyogU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBNQ19JTVI7CS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi19IEFUOTFTX1BNQywgKkFUOTFQU19QTUM7Ci0KLS8qLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0qLwotI2RlZmluZSBBVDkxQ19QTUNfUENLCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvKiAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrICovCi0jZGVmaW5lIEFUOTFDX1BNQ19NQ0tVRFAJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLyogKFBNQykgVVNCIERldmljZSBQb3J0IE1hc3RlciBDbG9jayBBdXRvbWF0aWMgRGlzYWJsZSBvbiBTdXNwZW5kICovCi0jZGVmaW5lIEFUOTFDX1BNQ19VSFAJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8qIChQTUMpIFVTQiBIb3N0IFBvcnQgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzQJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzUJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzYJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzcJCSgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8KLS8qLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0qLwotLyotLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLSovCi0vKi0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSovCi0jZGVmaW5lIEFUOTFDX1BNQ19DU1MJCSgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24gKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSwkoKHVuc2lnbmVkIGludCkgMHgwKSAgICAgICAvKiAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkICovCi0jZGVmaW5lIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEsJKCh1bnNpZ25lZCBpbnQpIDB4MSkgICAgICAgLyogKFBNQykgTWFpbiBDbG9jayBpcyBzZWxlY3RlZCAqLwotI2RlZmluZSBBVDkxQ19QTUNfQ1NTX1BMTEFfQ0xLCSgodW5zaWduZWQgaW50KSAweDIpICAgICAgIC8qIChQTUMpIENsb2NrIGZyb20gUExMIEEgaXMgc2VsZWN0ZWQgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX0NTU19QTExCX0NMSwkoKHVuc2lnbmVkIGludCkgMHgzKSAgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBCIGlzIHNlbGVjdGVkICovCi0jZGVmaW5lIEFUOTFDX1BNQ19QUkVTCQkoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAyKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUHJlc2NhbGVyICovCi0jZGVmaW5lIEFUOTFDX1BNQ19QUkVTX0NMSwkoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayAqLwotI2RlZmluZSBBVDkxQ19QTUNfUFJFU19DTEtfMgkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDIgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVNfQ0xLXzQJKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0ICovCi0jZGVmaW5lIEFUOTFDX1BNQ19QUkVTX0NMS184CSgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOCAqLwotI2RlZmluZSBBVDkxQ19QTUNfUFJFU19DTEtfMTYJKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMikgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNiAqLwotI2RlZmluZSBBVDkxQ19QTUNfUFJFU19DTEtfMzIJKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgMikgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAzMiAqLwotI2RlZmluZSBBVDkxQ19QTUNfUFJFU19DTEtfNjQJKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMikgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NCAqLwotI2RlZmluZSBBVDkxQ19QTUNfTURJVgkJKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLyogKFBNQykgTWFzdGVyIENsb2NrIERpdmlzaW9uICovCi0jZGVmaW5lIEFUOTFDX1BNQ19NRElWXzEJKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLyogKFBNQykgVGhlIG1hc3RlciBjbG9jayBhbmQgdGhlIHByb2Nlc3NvciBjbG9jayBhcmUgdGhlIHNhbWUgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX01ESVZfMgkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvKiAoUE1DKSBUaGUgcHJvY2Vzc29yIGNsb2NrIGlzIHR3aWNlIGFzIGZhc3QgYXMgdGhlIG1hc3RlciBjbG9jayAqLwotI2RlZmluZSBBVDkxQ19QTUNfTURJVl8zCSgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8qIChQTUMpIFRoZSBwcm9jZXNzb3IgY2xvY2sgaXMgdGhyZWUgdGltZXMgZmFzdGVyIHRoYW4gdGhlIG1hc3RlciBjbG9jayAqLwotI2RlZmluZSBBVDkxQ19QTUNfTURJVl80CSgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8qIChQTUMpIFRoZSBwcm9jZXNzb3IgY2xvY2sgaXMgZm91ciB0aW1lcyBmYXN0ZXIgdGhhbiB0aGUgbWFzdGVyIGNsb2NrICovCi0vKi0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0qLwotLyotLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvKiAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovCi0jZGVmaW5lIEFUOTFDX1BNQ19MT0NLQQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKFBNQykgUExMIEEgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0tCCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoUE1DKSBQTEwgQiBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLwotI2RlZmluZSBBVDkxQ19QTUNfTUNLUkRZCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8qIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzBSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLyogKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLyogKFBNQykgUENLMV9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLyogKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzNSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLyogKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzRSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLyogKFBNQykgUENLNF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzVSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLyogKFBNQykgUENLNV9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzZSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLyogKFBNQykgUENLNl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzdSRFkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLyogKFBNQykgUENLN19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8KLS8qLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSovCi0vKi0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tKi8KLS8qLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0qLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfRU1BQwotewotCUFUOTFfUkVHCSBFTUFDX0NUTDsJLyogTmV0d29yayBDb250cm9sIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfQ0ZHOwkvKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19TUjsJLyogTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19UQVI7CS8qIFRyYW5zbWl0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19UQ1I7CS8qIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19UU1I7CS8qIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX1JCUVA7CS8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8KLQlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOwkvKiAgKi8KLQlBVDkxX1JFRwkgRU1BQ19SU1I7CS8qIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfSVNSOwkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfSUVSOwkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfSURSOwkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX0lNUjsJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19NQU47CS8qIFBIWSBNYWludGVuYW5jZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07CS8qICAqLwotCUFUOTFfUkVHCSBFTUFDX0ZSQTsJLyogRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfU0NPTDsJLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX01DT0w7CS8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX09LOwkvKiBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19TRVFFOwkvKiBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX0FMRTsJLyogQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfRFRFOwkvKiBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19MQ09MOwkvKiBMYXRlIENvbGxpc2lvbiBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX0VDT0w7CS8qIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19DU0U7CS8qIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19UVUU7CS8qIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfQ0RFOwkvKiBDb2RlIEVycm9yIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfRUxSOwkvKiBFeGNlc3NpdmUgTGVuZ3RoIEVycm9yIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfUkpCOwkvKiBSZWNlaXZlIEphYmJlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBFTUFDX1VTRjsJLyogVW5kZXJzaXplIEZyYW1lIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIEVNQUNfU1FFRTsJLyogU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgRU1BQ19EUkZDOwkvKiBEaXNjYXJkZWQgUlggRnJhbWUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzNdOwkvKiAgKi8KLQlBVDkxX1JFRwkgRU1BQ19IU0g7CS8qIEhhc2ggQWRkcmVzcyBIaWdoWzYzOjMyXSAqLwotCUFUOTFfUkVHCSBFTUFDX0hTTDsJLyogSGFzaCBBZGRyZXNzIExvd1szMTowXSAqLwotCUFUOTFfUkVHCSBFTUFDX1NBMUw7CS8qIFNwZWNpZmljIEFkZHJlc3MgMSBMb3csIEZpcnN0IDQgYnl0ZXMgKi8KLQlBVDkxX1JFRwkgRU1BQ19TQTFIOwkvKiBTcGVjaWZpYyBBZGRyZXNzIDEgSGlnaCwgTGFzdCAyIGJ5dGVzICovCi0JQVQ5MV9SRUcJIEVNQUNfU0EyTDsJLyogU3BlY2lmaWMgQWRkcmVzcyAyIExvdywgRmlyc3QgNCBieXRlcyAqLwotCUFUOTFfUkVHCSBFTUFDX1NBMkg7CS8qIFNwZWNpZmljIEFkZHJlc3MgMiBIaWdoLCBMYXN0IDIgYnl0ZXMgKi8KLQlBVDkxX1JFRwkgRU1BQ19TQTNMOwkvKiBTcGVjaWZpYyBBZGRyZXNzIDMgTG93LCBGaXJzdCA0IGJ5dGVzICovCi0JQVQ5MV9SRUcJIEVNQUNfU0EzSDsJLyogU3BlY2lmaWMgQWRkcmVzcyAzIEhpZ2gsIExhc3QgMiBieXRlcyAqLwotCUFUOTFfUkVHCSBFTUFDX1NBNEw7CS8qIFNwZWNpZmljIEFkZHJlc3MgNCBMb3csIEZpcnN0IDQgYnl0ZXMgKi8KLQlBVDkxX1JFRwkgRU1BQ19TQTRIOwkvKiBTcGVjaWZpYyBBZGRyZXNzIDQgSGlnaCwgTGFzdCAyIGJ5dGVzciAqLwotfSBBVDkxU19FTUFDLCAqQVQ5MVBTX0VNQUM7Ci0KLS8qIC0tLS0tLS0tIEVNQUNfQ1RMIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MQgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLyogKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0xCTAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKEVNQUMpIExvb3BiYWNrIGxvY2FsLiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX1JFCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoRU1BQykgUmVjZWl2ZSBlbmFibGUuICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEUJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8qIChFTUFDKSBUcmFuc21pdCBlbmFibGUuICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVBFCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvKiAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DU1IJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8qIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8qIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfV0VTCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvKiAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CUAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLyogKEVNQUMpIEJhY2sgcHJlc3N1cmUuICovCi0KLS8qIC0tLS0tLS0tIEVNQUNfQ0ZHIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSAgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TUEQJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8qIChFTUFDKSBTcGVlZC4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GRAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKEVNQUMpIEZ1bGwgZHVwbGV4LiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0JSCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoRU1BQykgQml0IHJhdGUuICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ0FGCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvKiAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX05CQwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLyogKEVNQUMpIE5vIGJyb2FkY2FzdC4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NVEkJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8qIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBlbmFibGUgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VTkkJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8qIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0JJRwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLyogKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FQUUJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8qIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DTEsJCSgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0NMS19IQ0xLXzgJKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4ICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ0xLX0hDTEtfMTYJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAxNiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0NMS19IQ0xLXzMyCSgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8qIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMzIgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DTEtfSENMS182NAkoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0ICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlRZCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvKiAoRU1BQykgKi8KLQotLyogLS0tLS0tLS0gRU1BQ19TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NRElPCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRExFCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoRU1BQykgKi8KLQotLyogLS0tLS0tLS0gRU1BQ19UQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTApIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0xFTgkJKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8ICAwKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1JDCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvKiAoRU1BQykgKi8KLQotLyogLS0tLS0tLS0gRU1BQ19UU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTQpIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX09WUgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ09MCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEUJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX1RYSURMRQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CTlEJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX1VORAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLyogKEVNQUMpICovCi0KLS8qIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0JOQQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVDCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SU1JfT1ZSCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8qIChFTUFDKSAqLwotCi0vKiAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfRE9ORQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkNPTQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkJOQQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfVE9WUgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORAkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlRSWQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEJSRQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfVENPTQkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfVElETEUJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfTElOSwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUk9WUgkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLyogKEVNQUMpICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLyogKEVNQUMpICovCi0KLS8qIC0tLS0tLS0tIEVNQUNfSUVSIDogKEVNQUMgT2Zmc2V0OiAweDI4KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0gKi8KLS8qIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0gKi8KLS8qIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLwotLyogLS0tLS0tLS0gRU1BQ19NQU4gOiAoRU1BQyBPZmZzZXQ6IDB4MzQpIFBIWSBNYWludGVuYW5jZSBSZWdpc3RlciAtLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEJCSgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0NPREUJCSgodW5zaWduZWQgaW50KSAweDMgIDw8IDE2KSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFXzgwMl8zCSgodW5zaWduZWQgaW50KSAweDIgIDw8IDE2KSAvKiAoRU1BQykgV3JpdGUgT3BlcmF0aW9uICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVHQQkJKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTgpIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEJCSgodW5zaWduZWQgaW50KSAweDFGIDw8IDIzKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SVwkJKCh1bnNpZ25lZCBpbnQpIDB4MyAgPDwgMjgpIC8qIChFTUFDKSAqLwotI2RlZmluZSBBVDkxQ19FTUFDX1JXX1IJCSgodW5zaWduZWQgaW50KSAweDIgIDw8IDI4KSAvKiAoRU1BQykgUmVhZCBPcGVyYXRpb24gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SV19XCQkoKHVuc2lnbmVkIGludCkgMHgxICA8PCAyOCkgLyogKEVNQUMpIFdyaXRlIE9wZXJhdGlvbiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0hJR0gJCSgodW5zaWduZWQgaW50KSAweDEgIDw8IDMwKSAvKiAoRU1BQykgKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MT1cJCSgodW5zaWduZWQgaW50KSAweDEgIDw8IDMxKSAvKiAoRU1BQykgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZSAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NQSQotewotCUFUOTFfUkVHCSBTUElfQ1I7CS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX01SOwkvKiBNb2RlIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFNQSV9SRFI7CS8qIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBTUElfVERSOwkvKiBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFNQSV9TUjsJLyogU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFNQSV9JRVI7CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX0lEUjsJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX0lNUjsJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzRdOwkvKiAqLwotCUFUOTFfUkVHCSBTUElfQ1NSWzRdOwkvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDhdOyAvKiAqLwotCUFUOTFfUkVHCSBTUElfUlBSOwkvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX1JDUjsJLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFNQSV9UUFI7CS8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX1RDUjsJLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBTUElfUk5QUjsJLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX1JOQ1I7CS8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFNQSV9UTlBSOwkvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX1ROQ1I7CS8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBTUElfUFRDUjsJLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgU1BJX1BUU1I7CS8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8KLX0gQVQ5MVNfU1BJLCAqQVQ5MVBTX1NQSTsKLQotLyogLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvKiAoU1BJKSBTUEkgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElESVMJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKFNQSSkgU1BJIERpc2FibGUgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvKiAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQgKi8KLQotLyogLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX01TVFIJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8qIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlICovCi0jZGVmaW5lIEFUOTFDX1NQSV9QUwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1BTX0ZJWEVECSgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8qIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ICovCi0jZGVmaW5lIEFUOTFDX1NQSV9QU19WQVJJQUJMRQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvKiAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdCAqLwotI2RlZmluZSBBVDkxQ19TUElfUENTREVDCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8qIChTUEkpIENoaXAgU2VsZWN0IERlY29kZSAqLwotI2RlZmluZSBBVDkxQ19TUElfRElWMzIJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLwotI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUwkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvKiAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbiAqLwotI2RlZmluZSBBVDkxQ19TUElfTExCCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1BDUwkJKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAqLwotI2RlZmluZSBBVDkxQ19TUElfRExZQkNTCSgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvKiAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cyAqLwotCi0vKiAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovCi0jZGVmaW5lIEFUOTFDX1NQSV9SRAkJKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLyogKFNQSSkgUmVjZWl2ZSBEYXRhICovCi0jZGVmaW5lIEFUOTFDX1NQSV9SUENTCQkoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLwotCi0vKiAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19TUElfVEQJCSgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MJCSgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovCi0KLS8qIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYJCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8qIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovCi0jZGVmaW5lIEFUOTFDX1NQSV9URFJFCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvKiAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5ICovCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvKiAoU1BJKSBNb2RlIEZhdWx0IEVycm9yICovCi0jZGVmaW5lIEFUOTFDX1NQSV9PVlJFUwkJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLyogKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQRU5EUlgJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLyogKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovCi0jZGVmaW5lIEFUOTFDX1NQSV9TUEVORFRYCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8qIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLwotI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8qIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvKiAoU1BJKSBUWEJVRkUgSW50ZXJydXB0ICovCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMJKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLyogKFNQSSkgRW5hYmxlIFN0YXR1cyAqLwotCi0vKiAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLS8qIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLSAqLwotLyogLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLwotLyogLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19TUElfQ1BPTAkJKCh1bnNpZ25lZCBpbnQpIDB4MSAgPDwgIDApIC8qIChTUEkpIENsb2NrIFBvbGFyaXR5ICovCi0jZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQQkJKCh1bnNpZ25lZCBpbnQpIDB4MSAgPDwgIDEpIC8qIChTUEkpIENsb2NrIFBoYXNlICovCi0jZGVmaW5lIEFUOTFDX1NQSV9CSVRTCQkoKHVuc2lnbmVkIGludCkgMHhGICA8PCAgNCkgLyogKFNQSSkgQml0cyBQZXIgVHJhbnNmZXIgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFNfOAkoKHVuc2lnbmVkIGludCkgMHgwICA8PCAgNCkgLyogKFNQSSkgOCBCaXRzIFBlciB0cmFuc2ZlciAqLwotI2RlZmluZSBBVDkxQ19TUElfQklUU185CSgodW5zaWduZWQgaW50KSAweDEgIDw8ICA0KSAvKiAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyICovCi0jZGVmaW5lIEFUOTFDX1NQSV9CSVRTXzEwCSgodW5zaWduZWQgaW50KSAweDIgIDw8ICA0KSAvKiAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2ZlciAqLwotI2RlZmluZSBBVDkxQ19TUElfQklUU18xMQkoKHVuc2lnbmVkIGludCkgMHgzICA8PCAgNCkgLyogKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXIgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFNfMTIJKCh1bnNpZ25lZCBpbnQpIDB4NCAgPDwgIDQpIC8qIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyICovCi0jZGVmaW5lIEFUOTFDX1NQSV9CSVRTXzEzCSgodW5zaWduZWQgaW50KSAweDUgIDw8ICA0KSAvKiAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2ZlciAqLwotI2RlZmluZSBBVDkxQ19TUElfQklUU18xNAkoKHVuc2lnbmVkIGludCkgMHg2ICA8PCAgNCkgLyogKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXIgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFNfMTUJKCh1bnNpZ25lZCBpbnQpIDB4NyAgPDwgIDQpIC8qIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyICovCi0jZGVmaW5lIEFUOTFDX1NQSV9CSVRTXzE2CSgodW5zaWduZWQgaW50KSAweDggIDw8ICA0KSAvKiAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2ZlciAqLwotI2RlZmluZSBBVDkxQ19TUElfU0NCUgkJKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8qIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUgKi8KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTCQkoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLyogKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZSAqLwotI2RlZmluZSBBVDkxQ19TUElfRExZQkNUCSgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvKiAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERhdGEgQ29udHJvbGxlciAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDCi17Ci0JQVQ5MV9SRUcJIFBEQ19SUFI7CS8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQRENfUkNSOwkvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUERDX1RQUjsJLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQRENfVENSOwkvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBEQ19STlBSOwkvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQRENfUk5DUjsJLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8KLQlBVDkxX1JFRwkgUERDX1ROUFI7CS8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQRENfVE5DUjsJLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFBEQ19QVENSOwkvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBQRENfUFRTUjsJLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLwotfSBBVDkxU19QREMsICpBVDkxUFNfUERDOwotCi0vKiAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLwotI2RlZmluZSBBVDkxQ19QRENfUlhURU4JCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8qIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZSBBVDkxQ19QRENfUlhURElTCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8qIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUgKi8KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOCQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUgKi8KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUwkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlICovCi0vKiAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICAqLwotCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIEFUOTFDX1NQSV9DU1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZFMDAzMCkgLyogKFNQSSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRkMxMCkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRkMxNCkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRkMwMCkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRkMwNCkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQwMCkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQwNCkgLyogKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFNSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0MDgpIC8qIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0VSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0MTApIC8qIChQSU9BKSBQSU8gT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX09EUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDE0KSAvKiAoUElPQSkgUElPIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1NSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0MTgpIC8qIChQSU9BKSBQSU8gT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQyMCkgLyogKFBJT0EpIFBJTyBHbGl0Y2ggSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQyNCkgLyogKFBJT0EpIFBJTyBHbGl0Y2ggSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0MjgpIC8qIChQSU9BKSBQSU8gR2xpdGNoIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0MzApIC8qIChQSU9BKSBQSU8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfQ09EUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDM0KSAvKiAoUElPQSkgUElPIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RTUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDM4KSAvKiAoUElPQSkgUElPIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQzQykgLyogKFBJT0EpIFBJTyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQ0MCkgLyogKFBJT0EpIFBJTyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfSURSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0NDQpIC8qIChQSU9BKSBQSU8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9JTVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQ0OCkgLyogKFBJT0EpIFBJTyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX0lTUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDRDKSAvKiAoUElPQSkgUElPIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9NREVSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0NTApIC8qIChQSU9BKSBQSU8gTXVsdGktZHJpdmUgRW5hYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfTUREUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDU0KSAvKiAoUElPQSkgUElPIE11bHRpLWRyaXZlIERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9NRFNSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0NTgpIC8qIChQSU9BKSBQSU8gTXVsdGktZHJpdmUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFVEUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDYwKSAvKiAoUElPQSkgUElPIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX1BVRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQ2NCkgLyogKFBJT0EpIFBJTyBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX1BVU1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQ2OCkgLyogKFBJT0EpIFBJTyBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9BX0FTUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDcwKSAvKiAoUElPQSkgUElPIFBlcmlwaGVyYWwgQSBTZWxlY3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9CU1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjQ3NCkgLyogKFBJT0EpIFBJTyBQZXJpcGhlcmFsIEIgU2VsZWN0IFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfQUJTUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNDc4KSAvKiAoUElPQSkgUElPIFBlcmlwaGVyYWwgQUIgU2VsZWN0IFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dFUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNEEwKSAvKiAoUElPQSkgUElPIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0QTQpIC8qIChQSU9BKSBQSU8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV1NSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY0QTgpIC8qIChQSU9BKSBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9CX1BEUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNjA0KSAvKiAoUElPQikgUElPIERpc2FibGUgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBBVDkxQ19QSU9fUEEzMAkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMzAgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BDMAkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBDMCAqLwotI2RlZmluZSBBVDkxQ19QQzBfQkZDSwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQzApCS8qIEJ1cnN0IEZsYXNoIENsb2NrICovCi0jZGVmaW5lIEFUOTFDX1BBMzBfRFJYRAkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKQkvKiBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YSAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEEzMQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzEpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMzEgKi8KLSNkZWZpbmUgQVQ5MUNfUEEyNV9UV0QJCSgodW5zaWduZWQgaW50KSAxIDw8IDI1KQotI2RlZmluZSBBVDkxQ19QQTI2X1RXQ0sJCSgodW5zaWduZWQgaW50KSAxIDw8IDI2KQotI2RlZmluZSBBVDkxQ19QQTMxX0RUWEQJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMSkJLyogREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE3CQkoKHVuc2lnbmVkIGludCkgMSA8PCAxNykJLyogUGluIENvbnRyb2xsZWQgYnkgUEExNyAqLwotI2RlZmluZSBBVDkxQ19QQTE3X1RYRDAJCUFUOTFDX1BJT19QQTE3CQkJLyogVVNBUlQwIFRyYW5zbWl0IERhdGEgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTgJCSgodW5zaWduZWQgaW50KSAxIDw8IDE4KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE4ICovCi0jZGVmaW5lIEFUOTFDX1BBMThfUlhEMAkJQVQ5MUNfUElPX1BBMTgJCQkvKiBVU0FSVDAgUmVjZWl2ZSBEYXRhICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIwCQkoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMCAqLwotI2RlZmluZSBBVDkxQ19QQjIwX1JYRDEJCUFUOTFDX1BJT19QQjIwCQkJLyogVVNBUlQxIFJlY2VpdmUgRGF0YSAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEIyMQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjEpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjEgKi8KLSNkZWZpbmUgQVQ5MUNfUEIyMV9UWEQxCQlBVDkxQ19QSU9fUEIyMQkJCS8qIFVTQVJUMSBUcmFuc21pdCBEYXRhICovCi0KLSNkZWZpbmUgQVQ5MUNfSURfU1lTCQkoKHVuc2lnbmVkIGludCkgIDEpIC8qIFN5c3RlbSBQZXJpcGhlcmFsICovCi0jZGVmaW5lIEFUOTFDX0lEX1BJT0EJCSgodW5zaWduZWQgaW50KSAgMikgLyogUElPIHBvcnQgQSAqLwotI2RlZmluZSBBVDkxQ19JRF9QSU9CCQkoKHVuc2lnbmVkIGludCkgIDMpIC8qIFBJTyBwb3J0IEIgKi8KLSNkZWZpbmUgQVQ5MUNfSURfUElPQwkJKCh1bnNpZ25lZCBpbnQpICA0KSAvKiBQSU8gcG9ydCBDICovCi0jZGVmaW5lIEFUOTFDX0lEX1VTQVJUMAkJKCh1bnNpZ25lZCBpbnQpICA2KSAvKiBVU0FSVCAwICovCi0jZGVmaW5lIEFUOTFDX0lEX1VTQVJUMQkJKCh1bnNpZ25lZCBpbnQpICA3KSAvKiBVU0FSVCAxICovCi0jZGVmaW5lIEFUOTFDX0lEX1RXSQkJKCh1bnNpZ25lZCBpbnQpIDEyKSAvKiBUd28gV2lyZSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQVQ5MUNfSURfU1BJCQkoKHVuc2lnbmVkIGludCkgMTMpIC8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAqLwotI2RlZmluZSBBVDkxQ19JRF9UQzAJCSgodW5zaWduZWQgaW50KSAxNykgLyogVGltZXIgQ291bnRlciAwICovCi0jZGVmaW5lIEFUOTFDX0lEX1VIUAkJKCh1bnNpZ25lZCBpbnQpIDIzKSAvKiBPSENJIFVTQiBIb3N0IFBvcnQgKi8KLSNkZWZpbmUgQVQ5MUNfSURfRU1BQwkJKCh1bnNpZ25lZCBpbnQpIDI0KSAvKiBFdGhlcm5ldCBNQUMgKi8KLQotI2RlZmluZSBBVDkxQ19QSU9fUEMxCQkoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkJLyogUGluIENvbnRyb2xsZWQgYnkgUEMxICovCi0jZGVmaW5lIEFUOTFDX1BDMV9CRlJEWV9TTU9FCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEMxKQkvKiAgQnVyc3QgRmxhc2ggUmVhZHkgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BDMwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBDMyAqLwotI2RlZmluZSBBVDkxQ19QQzNfQkZCQUFfU01XRQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BDMykJLyogIEJ1cnN0IEZsYXNoIEFkZHJlc3MgQWR2YW5jZSAvIFNtYXJ0TWVkaWEgV3JpdGUgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQzIJCSgodW5zaWduZWQgaW50KSAxIDw8ICAyKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQzIgKi8KLSNkZWZpbmUgQVQ5MUNfUEMyX0JGQVZECQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BDMikJLyogIEJ1cnN0IEZsYXNoIEFkZHJlc3MgVmFsaWQgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMSAqLwotCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIzCQkoKHVuc2lnbmVkIGludCkgMSA8PCAyMykJLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMyAqLwotI2RlZmluZSBBVDkxQ19QQTIzX1RYRDIJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMykJLyogVVNBUlQgMiBUcmFuc21pdCBEYXRhICovCi0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMAkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMCAqLwotI2RlZmluZSBBVDkxQ19QQTBfTUlTTwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApCS8qIFNQSSBNYXN0ZXIgSW4gU2xhdmUgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMSAqLwotI2RlZmluZSBBVDkxQ19QQTFfTU9TSQkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEpCS8qIFNQSSBNYXN0ZXIgT3V0IFNsYXZlICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIJCSgodW5zaWduZWQgaW50KSAxIDw8ICAyKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIgKi8KLSNkZWZpbmUgQVQ5MUNfUEEyX1NQQ0sJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKQkvKiBTUEkgU2VyaWFsIENsb2NrICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMJCSgodW5zaWduZWQgaW50KSAxIDw8ICAzKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTMgKi8KLSNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MwCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykJLyogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEE0CQkoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovCi0jZGVmaW5lIEFUOTFDX1BBNF9OUENTMQkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpCS8qIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDUpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNSAqLwotI2RlZmluZSBBVDkxQ19QQTVfTlBDUzIJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE1KQkvKiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQTYJCSgodW5zaWduZWQgaW50KSAxIDw8ICA2KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTYgKi8KLSNkZWZpbmUgQVQ5MUNfUEE2X05QQ1MzCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNikJLyogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLwotCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE2CQkoKHVuc2lnbmVkIGludCkgMSA8PCAxNikJLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLwotI2RlZmluZSBBVDkxQ19QQTE2X0VNRElPCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNikJLyogRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTUJCSgodW5zaWduZWQgaW50KSAxIDw8IDE1KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE1ICovCi0jZGVmaW5lIEFUOTFDX1BBMTVfRU1EQwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KQkvKiBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE0CQkoKHVuc2lnbmVkIGludCkgMSA8PCAxNCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEExNCAqLwotI2RlZmluZSBBVDkxQ19QQTE0X0VSWEVSCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkJLyogRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3IgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTMJCSgodW5zaWduZWQgaW50KSAxIDw8IDEzKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEzICovCi0jZGVmaW5lIEFUOTFDX1BBMTNfRVJYMQkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKQkvKiBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDEgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIJCSgodW5zaWduZWQgaW50KSAxIDw8IDEyKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEyICovCi0jZGVmaW5lIEFUOTFDX1BBMTJfRVJYMAkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEyKQkvKiBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDAgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTEJCSgodW5zaWduZWQgaW50KSAxIDw8IDExKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQTExICovCi0jZGVmaW5lIEFUOTFDX1BBMTFfRUNSU19FQ1JTRFYJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTExKQkvKiBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEwCQkoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEExMCAqLwotI2RlZmluZSBBVDkxQ19QQTEwX0VUWDEJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMCkJLyogRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMSAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEE5CQkoKHVuc2lnbmVkIGludCkgMSA8PCAgOSkJLyogUGluIENvbnRyb2xsZWQgYnkgUEE5ICovCi0jZGVmaW5lIEFUOTFDX1BBOV9FVFgwCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkJLyogRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMCAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEE4CQkoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEE4ICovCi0jZGVmaW5lIEFUOTFDX1BBOF9FVFhFTgkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpCS8qIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDcpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNyAqLwotI2RlZmluZSBBVDkxQ19QQTdfRVRYQ0tfRVJFRkNLCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KQkvKiBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrICovCi0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMAkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMyAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEIxCQkoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkJLyogUGluIENvbnRyb2xsZWQgYnkgUEIzICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIJCSgodW5zaWduZWQgaW50KSAxIDw8ICAyKQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQjMgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMyAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEI0CQkoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEI0ICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjUJCSgodW5zaWduZWQgaW50KSAxIDw8ICA1KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQjUgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BCNgkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCNiAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEI3CQkoKHVuc2lnbmVkIGludCkgMSA8PCAgNykJLyogUGluIENvbnRyb2xsZWQgYnkgUEI3ICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIyCQkoKHVuc2lnbmVkIGludCkgMSA8PCAyMikJLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMiAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEIyNQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUgKi8KLSNkZWZpbmUgQVQ5MUNfUEIyNV9EU1IxCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjUpCS8qIFVTQVJUIDEgRGF0YSBTZXQgcmVhZHkgKi8KLSNkZWZpbmUgQVQ5MUNfUEIyNV9FRjEwMAkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjUpCS8qIEV0aGVybmV0IE1BQyBGb3JjZSAxMDAgTWJpdHMgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTkJCSgodW5zaWduZWQgaW50KSAxIDw8IDE5KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE5ICovCi0jZGVmaW5lIEFUOTFDX1BCMTlfRFRSMQkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KQkvKiBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkgKi8KLSNkZWZpbmUgQVQ5MUNfUEIxOV9FUlhDSwkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTkpCS8qIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE4CQkoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkJLyogUGluIENvbnRyb2xsZWQgYnkgUEIxOCAqLwotI2RlZmluZSBBVDkxQ19QQjE4X1JJMQkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KQkvKiBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yICovCi0jZGVmaW5lIEFUOTFDX1BCMThfRUNPTAkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KQkvKiBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE3CQkoKHVuc2lnbmVkIGludCkgMSA8PCAxNykJLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNyAqLwotI2RlZmluZSBBVDkxQ19QQjE3X1JGMgkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE3KQkvKiBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jIDIgKi8KLSNkZWZpbmUgQVQ5MUNfUEIxN19FUlhEVgkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTcpCS8qIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTYJCSgodW5zaWduZWQgaW50KSAxIDw8IDE2KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE2ICovCi0jZGVmaW5lIEFUOTFDX1BCMTZfUksyCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpCS8qIFNTQyBSZWNlaXZlIENsb2NrIDIgKi8KLSNkZWZpbmUgQVQ5MUNfUEIxNl9FUlgzCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpCS8qIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMyAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEIxNQkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTUgKi8KLSNkZWZpbmUgQVQ5MUNfUEIxNV9SRDIJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNSkJLyogU1NDIFJlY2VpdmUgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFDX1BCMTVfRVJYMgkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE1KQkvKiBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTQJCSgodW5zaWduZWQgaW50KSAxIDw8IDE0KQkvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE0ICovCi0jZGVmaW5lIEFUOTFDX1BCMTRfVEQyCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTQpCS8qIFNTQyBUcmFuc21pdCBEYXRhIDIgKi8KLSNkZWZpbmUgQVQ5MUNfUEIxNF9FVFhFUgkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTQpCS8qIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yICovCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEzCQkoKHVuc2lnbmVkIGludCkgMSA8PCAxMykJLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMyAqLwotI2RlZmluZSBBVDkxQ19QQjEzX1RLMgkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKQkvKiBTU0MgVHJhbnNtaXQgQ2xvY2sgMiAqLwotI2RlZmluZSBBVDkxQ19QQjEzX0VUWDMJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykJLyogRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMyAqLwotI2RlZmluZSBBVDkxQ19QSU9fUEIxMgkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTIpCS8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTIgKi8KLSNkZWZpbmUgQVQ5MUNfUEIxMl9URjIJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikJLyogU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgMiAqLwotI2RlZmluZSBBVDkxQ19QQjEyX0VUWDIJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikJLyogRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMiAqLwotCi0jZGVmaW5lIEFUOTFDX1BJT0JfQlNSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY2NzQpCS8qIChQSU9CKSBTZWxlY3QgQiBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9CX1BEUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGNjA0KQkvKiAoUElPQikgUElPIERpc2FibGUgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBBVDkxQ19FQklfQ1MzQV9TTUNfU21hcnRNZWRpYQkoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvKiAoRUJJKSBDaGlwIFNlbGVjdCAzIGlzIGFzc2lnbmVkIHRvIHRoZSBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgYW5kIHRoZSBTbWFydE1lZGlhIExvZ2ljIGlzIGFjdGl2YXRlZC4gKi8KLSNkZWZpbmUgQVQ5MUNfU01DMl9BQ1NTX1NUQU5EQVJECSgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8qIChTTUMyKSBTdGFuZGFyZCwgYXNzZXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYWNjZXNzIGFuZCBkZWFzc2VydGVkIGF0IHRoZSBlbmQuICovCi0jZGVmaW5lIEFUOTFDX1NNQzJfREJXXzgJKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLyogKFNNQzIpIDgtYml0LiAqLwotI2RlZmluZSBBVDkxQ19TTUMyX1dTRU4JCSgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8qIChTTUMyKSBXYWl0IFN0YXRlIEVuYWJsZSAqLwotI2RlZmluZSBBVDkxQ19QSU9DX0FTUgkJKChBVDkxX1JFRyAqKQkweEZGRkZGODcwKSAvKiAoUElPQykgU2VsZWN0IEEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQ19TT0RSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY4MzApIC8qIChQSU9DKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQ19DT0RSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY4MzQpIC8qIChQSU9DKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19QSU9DX1BEU1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjgzQykgLyogKFBJT0MpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLwotCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUlDCQkoKEFUOTFQU19BSUMpCTB4RkZGRkYwMDApIC8qIChBSUMpIEJhc2UgQWRkcmVzcyAqLwotI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UJCSgoQVQ5MVBTX0RCR1UpCTB4RkZGRkYyMDApIC8qIChEQkdVKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BCQkoKEFUOTFQU19QSU8pCTB4RkZGRkY0MDApIC8qIChQSU9BKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CCQkoKEFUOTFQU19QSU8pCTB4RkZGRkY2MDApIC8qIChQSU9CKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9DCQkoKEFUOTFQU19QSU8pCTB4RkZGRkY4MDApIC8qIChQSU9DKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9ECQkoKEFUOTFQU19QSU8pCTB4RkZGRkZBMDApIC8qIChQSU9DKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMJCSgoQVQ5MVBTX1BNQykJMHhGRkZGRkMwMCkgLyogKFBNQykgQmFzZSBBZGRyZXNzICovCi0jaWYJMAotI2RlZmluZSBBVDkxQ19CQVNFX1NUCQkoKEFUOTFQU19TVCkJMHhGRkZGRkQwMCkgLyogKFBNQykgQmFzZSBBZGRyZXNzICovCi0jZGVmaW5lIEFUOTFDX0JBU0VfUlRDCQkoKEFUOTFQU19SVEMpCTB4RkZGRkZFMDApIC8qIChQTUMpIEJhc2UgQWRkcmVzcyAqLwotI2RlZmluZSBBVDkxQ19CQVNFX01DCQkoKEFUOTFQU19NQykJMHhGRkZGRkYwMCkgLyogKFBNQykgQmFzZSBBZGRyZXNzICovCi0jZW5kaWYKLQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMAkJKChBVDkxUFNfVEMpCTB4RkZGQTAwMDApIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLwotI2RlZmluZSBBVDkxQ19CQVNFX1RDMQkJKChBVDkxUFNfVEMpCTB4RkZGQTQwMDApIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLwotI2lmCTAKLSNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAJCSgoQVQ5MVBTX1VEUCkJMHhGRkZCMDAwMCkgLyogKFRDMCkgQmFzZSBBZGRyZXNzICovCi0jZGVmaW5lIEFUOTFDX0JBU0VfTUNJCQkoKEFUOTFQU19NQ0kpCTB4RkZGQjQwMDApIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLwotI2RlZmluZSBBVDkxQ19CQVNFX1RXSQkJKChBVDkxUFNfVFdJKQkweEZGRkI4MDAwKSAvKiAoVEMwKSBCYXNlIEFkZHJlc3MgKi8KLSNlbmRpZgotI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMJCSgoQVQ5MVBTX0VNQUMpCTB4RkZGQkMwMDApIC8qIChFTUFDKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzAJCSgoQVQ5MVBTX1VTQVJUKQkweEZGRkMwMDAwKSAvKiAoVVMwKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEJCSgoQVQ5MVBTX1VTQVJUKSAweEZGRkM0MDAwKSAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzIJCSgoQVQ5MVBTX1VTQVJUKSAweEZGRkM4MDAwKSAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzMJCSgoQVQ5MVBTX1VTQVJUKSAweEZGRkNDMDAwKSAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkJCSgoQVQ5MVBTX1NQSSkJMHhGRkZFMDAwMCkgLyogKFNQSSkgQmFzZSBBZGRyZXNzICovCi0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSCQkoKEFUOTFQU19DS0dSKQkweEZGRkZGQzIwKSAvKiAoQ0tHUikgQmFzZSBBZGRyZXNzICovCi0jZGVmaW5lIEFUOTFDX0VCSV9DU0EJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRkY2MCkgLyogKEVCSSkgQ2hpcCBTZWxlY3QgQXNzaWdubWVudCBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxQ19CQVNFX1NNQzIJCSgoQVQ5MVBTX1NNQzIpCTB4RkZGRkZGNzApIC8qIChTTUMyKSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQVQ5MUNfVENCMF9CTVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZBMDBDNCkgLyogKFRDQjApIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfVENCMF9CQ1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZBMDBDMCkgLyogKFRDQjApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQ19QRFIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjgwNCkgLyogKFBJT0MpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0NfUEVSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY4MDApIC8qIChQSU9DKSBQSU8gRW5hYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFDX1BJT0NfT0RSCQkoKEFUOTFfUkVHICopCTB4RkZGRkY4MTQpIC8qIChQSU9DKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRVIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjYwMCkgLyogKFBJT0IpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFIJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjYxNCkgLyogKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLwotI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IJCSgoQVQ5MV9SRUcgKikJMHhGRkZGRjYzQykgLyogKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLwotCi0jZWxzZQotLyogZmxhc2ggKi8KLSNkZWZpbmUgQVQ5MUNfTUNfUFVJQQkJMHhGRkZGRkYxMAotI2RlZmluZSBBVDkxQ19NQ19QVVAJCTB4RkZGRkZGNTAKLSNkZWZpbmUgQVQ5MUNfTUNfUFVFUgkJMHhGRkZGRkY1NAotI2RlZmluZSBBVDkxQ19NQ19BU1IJCTB4RkZGRkZGMDQKLSNkZWZpbmUgQVQ5MUNfTUNfQUFTUgkJMHhGRkZGRkYwOAotI2RlZmluZSBBVDkxQ19FQklfQ0ZHUgkJMHhGRkZGRkY2NAotI2RlZmluZSBBVDkxQ19TTUNfQ1NSMAkJMHhGRkZGRkY3MAotCi0vKiBjbG9ja3MgKi8KLSNkZWZpbmUgQVQ5MUNfUExMQVIJCTB4RkZGRkZDMjgKLSNkZWZpbmUgQVQ5MUNfUExMQlIJCTB4RkZGRkZDMkMKLSNkZWZpbmUgQVQ5MUNfTUNLUgkJMHhGRkZGRkMzMAotCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUgkJMHhGRkZGRkMyMAotI2RlZmluZSBBVDkxQ19DS0dSX01PUgkJMAotCi0vKiBzZHJhbSAqLwotI2RlZmluZSBBVDkxQ19QSU9DX0FTUgkJMHhGRkZGRjg3MAotI2RlZmluZSBBVDkxQ19QSU9DX0JTUgkJMHhGRkZGRjg3NAotI2RlZmluZSBBVDkxQ19QSU9DX1BEUgkJMHhGRkZGRjgwNAotI2RlZmluZSBBVDkxQ19FQklfQ1NBCQkweEZGRkZGRjYwCi0jZGVmaW5lIEFUOTFDX1NEUkNfQ1IJCTB4RkZGRkZGOTgKLSNkZWZpbmUgQVQ5MUNfU0RSQ19NUgkJMHhGRkZGRkY5MAotI2RlZmluZSBBVDkxQ19TRFJDX1RSCQkweEZGRkZGRjk0Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBBVDkxUk05MjAwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NjhlMzguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9oYXJkd2FyZS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAotI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKLQotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgIkFUOTFSTTkyMDAuaCIKLSNlbmRpZgotCi0vKiBWaXJ0dWFsIGFuZCBQaHlzaWNhbCBiYXNlIGFkZHJlc3MgZm9yIHN5c3RlbSBwZXJpcGhlcmFscyAqLwotI2RlZmluZSBBVDkxX1NZU19CQVNFCQkweEZGRkZGMDAwIC8qNEsgKi8KLQotLyogVmlydHVhbCBhbmQgUGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMgb2YgdXNlciBwZXJpcGhlcmFscyAqLwotI2RlZmluZSBBVDkxX1NQSV9CQVNFCQkweEZGRkUwMDAwIC8qMTZLICovCi0jZGVmaW5lIEFUOTFfU1NDMl9CQVNFCQkweEZGRkQ4MDAwIC8qMTZLICovCi0jZGVmaW5lIEFUOTFfU1NDMV9CQVNFCQkweEZGRkQ0MDAwIC8qMTZLICovCi0jZGVmaW5lIEFUOTFfU1NDMF9CQVNFCQkweEZGRkQwMDAwIC8qMTZLICovCi0jZGVmaW5lIEFUOTFfVVNBUlQzX0JBU0UJMHhGRkZDQzAwMCAvKjE2SyAqLwotI2RlZmluZSBBVDkxX1VTQVJUMl9CQVNFCTB4RkZGQzgwMDAgLyoxNksgKi8KLSNkZWZpbmUgQVQ5MV9VU0FSVDFfQkFTRQkweEZGRkM0MDAwIC8qMTZLICovCi0jZGVmaW5lIEFUOTFfVVNBUlQwX0JBU0UJMHhGRkZDMDAwMCAvKjE2SyAqLwotI2RlZmluZSBBVDkxX0VNQUNfQkFTRQkJMHhGRkZCQzAwMCAvKjE2SyAqLwotI2RlZmluZSBBVDkxX1RXSV9CQVNFCQkweEZGRkI4MDAwIC8qMTZLICovCi0jZGVmaW5lIEFUOTFfTUNJX0JBU0UJCTB4RkZGQjQwMDAgLyoxNksgKi8KLSNkZWZpbmUgQVQ5MV9VRFBfQkFTRQkJMHhGRkZCMDAwMCAvKjE2SyAqLwotI2RlZmluZSBBVDkxX1RDQjFfQkFTRQkJMHhGRkZBNDAwMCAvKjE2SyAqLwotI2RlZmluZSBBVDkxX1RDQjBfQkFTRQkJMHhGRkZBMDAwMCAvKjE2SyAqLwotCi0jZGVmaW5lIEFUOTFfVVNCX0hPU1RfQkFTRQkweDAwMzAwMDAwCi0KLS8qCi0gKiBXaGVyZSBpbiB2aXJ0dWFsIG1lbW9yeSB0aGUgSU8gZGV2aWNlcyAodGltZXJzLCBzeXN0ZW0gY29udHJvbGxlcnMKLSAqIGFuZCBzbyBvbikKLSAqLwotI2RlZmluZSBBVDkxX0lPX0JBU0UJCTB4RjAwMDAwMDAJLyogVmlydC9QaHlzIEFkZHJlc3Mgb2YgSU8gKi8KLQotLyogRkxBU0ggKi8KLSNkZWZpbmUgQVQ5MV9GTEFTSF9CQVNFCQkweDEwMDAwMDAwCS8qIE5DUzAgKi8KLQotLyogU0RSQU0gKi8KLSNkZWZpbmUgQVQ5MV9TRFJBTV9CQVNFCQkweDIwMDAwMDAwCS8qIE5DUzEgKi8KLQotLyogU21hcnRNZWRpYSAqLwotI2RlZmluZSBBVDkxX1NNQVJUTUVESUFfQkFTRQkweDQwMDAwMDAwCS8qIE5DUzMgKi8KLQotLyogRGVmaW5pdGlvbiBvZiBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICovCi0jZGVmaW5lIEFUOTFDX0FJQ19QUklPUl8wIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzEgKCh1bnNpZ25lZCBpbnQpIDB4MSkKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzIgKCh1bnNpZ25lZCBpbnQpIDB4MikKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzMgKCh1bnNpZ25lZCBpbnQpIDB4MykKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzQgKCh1bnNpZ25lZCBpbnQpIDB4NCkKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzUgKCh1bnNpZ25lZCBpbnQpIDB4NSkKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzYgKCh1bnNpZ25lZCBpbnQpIDB4NikKLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SXzcgQVQ5MUNfQUlDX1BSSU9SX0hJR0VTVAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9kYXZpbmNpX21pc2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9kYXZpbmNpX21pc2MuaAppbmRleCAzNDdhYTg5Li4yMTFiNzY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGF2aW5jaV9taXNjLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2RhdmluY2lfbWlzYy5oCkBAIC01Nyw3ICs1Nyw3IEBACiBpbnQgZGF2aW5jaV9jb25maWd1cmVfcGluX211eChjb25zdCBzdHJ1Y3QgcGlubXV4X2NvbmZpZyAqcGlucywgaW50IG5fcGlucyk7CiBpbnQgZGF2aW5jaV9jb25maWd1cmVfcGluX211eF9pdGVtcyhjb25zdCBzdHJ1Y3QgcGlubXV4X3Jlc291cmNlICppdGVtLAogCQkJCSAgICBpbnQgbl9pdGVtcyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRFJJVkVSX1RJX0VNQUMpICYmIGRlZmluZWQoQ09ORklHX01BQ0hfREFWSU5DSV9EQTg1MF9FVk0pCisjaWYgZGVmaW5lZChDT05GSUdfRFJJVkVSX1RJX0VNQUMpICYmIGRlZmluZWQoQ09ORklHX1NPQ19EQThYWCkKIHZvaWQgZGF2aW5jaV9lbWFjX21paV9tb2RlX3NlbChpbnQgbW9kZV9zZWwpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU09DX0RBOFhYKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2dwaW9fZGVmcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2dwaW8uaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZ3Bpb19kZWZzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9ncGlvLmgKaW5kZXggMWJlMmFjMi4uMjlkY2NjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2dwaW9fZGVmcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9ncGlvLmgKQEAgLTYzLDQgKzYzLDEyIEBACiAjZGVmaW5lIGRhdmluY2lfZ3Bpb19iYW5rNDUgKChzdHJ1Y3QgZGF2aW5jaV9ncGlvICopREFWSU5DSV9HUElPX0JBTks0NSkKICNkZWZpbmUgZGF2aW5jaV9ncGlvX2Jhbms2NyAoKHN0cnVjdCBkYXZpbmNpX2dwaW8gKilEQVZJTkNJX0dQSU9fQkFOSzY3KQogCisjZGVmaW5lIGdwaW9fc3RhdHVzKCkJCWdwaW9faW5mbygpCisjZGVmaW5lIEdQSU9fTkFNRV9TSVpFCQkyMAorI2RlZmluZSBNQVhfTlVNX0dQSU9TCQkxNDQKKyNkZWZpbmUgR1BJT19CQU5LKGdwKQkJKGRhdmluY2lfZ3Bpb19iYW5rMDEgKyAoKGdwKSA+PiA1KSkKKyNkZWZpbmUgR1BJT19CSVQoZ3ApCQkoKGdwKSAmIDB4MUYpCisKK3ZvaWQgZ3Bpb19pbmZvKHZvaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmgKaW5kZXggZGYzZjU0OS4uZjUzN2M0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmgKQEAgLTE0MCw2ICsxNDAsOCBAQAogI2RlZmluZSBEQVZJTkNJX0VNQUNfV1JBUFBFUl9DTlRSTF9SRUdTX0JBU0UJMHgwMWUyMjAwMAogI2RlZmluZSBEQVZJTkNJX0VNQUNfV1JBUFBFUl9SQU1fQkFTRQkJMHgwMWUyMDAwMAogI2RlZmluZSBEQVZJTkNJX01ESU9fQ05UUkxfUkVHU19CQVNFCQkweDAxZTI0MDAwCisjZGVmaW5lIERBVklOQ0lfTU1DX1NEMF9CQVNFCQkJMHgwMWM0MDAwMAorI2RlZmluZSBEQVZJTkNJX01NQ19TRDFfQkFTRQkJCTB4MDFlMWIwMDAKICNkZWZpbmUgREFWSU5DSV9BU1lOQ19FTUlGX0NOVFJMX0JBU0UJCTB4NjgwMDAwMDAKICNkZWZpbmUgREFWSU5DSV9BU1lOQ19FTUlGX0RBVEFfQ0UwX0JBU0UJMHg0MDAwMDAwMAogI2RlZmluZSBEQVZJTkNJX0FTWU5DX0VNSUZfREFUQV9DRTJfQkFTRQkweDYwMDAwMDAwCkBAIC0yMTMsNDcgKzIxNSw2NSBAQAogCiAjZWxzZSAvKiBDT05GSUdfU09DX0RBOFhYICovCiAKLWVudW0gZGF2aW5jaV9scHNjX2lkcyB7Ci0JREFWSU5DSV9MUFNDX1RQQ0MgPSAwLAotCURBVklOQ0lfTFBTQ19UUFRDMCwKLQlEQVZJTkNJX0xQU0NfVFBUQzEsCi0JREFWSU5DSV9MUFNDX0FFTUlGLAotCURBVklOQ0lfTFBTQ19TUEkwLAotCURBVklOQ0lfTFBTQ19NTUNfU0QsCi0JREFWSU5DSV9MUFNDX0FJTlRDLAotCURBVklOQ0lfTFBTQ19BUk1fUkFNX1JPTSwKLQlEQVZJTkNJX0xQU0NfU0VDQ1RMX0tFWU1HUiwKLQlEQVZJTkNJX0xQU0NfVUFSVDAsCi0JREFWSU5DSV9MUFNDX1NDUjAsCi0JREFWSU5DSV9MUFNDX1NDUjEsCi0JREFWSU5DSV9MUFNDX1NDUjIsCi0JREFWSU5DSV9MUFNDX0RNQVgsCi0JREFWSU5DSV9MUFNDX0FSTSwKLQlEQVZJTkNJX0xQU0NfR0VNLAotCS8qIGZvciBMUFNDcyBpbiBQU0MxLCBvZmZzZXQgZnJvbSAzMiBmb3IgZGlmZmVyZW50aWF0aW9uICovCi0JREFWSU5DSV9MUFNDX1BTQzFfQkFTRSA9IDMyLAotCURBVklOQ0lfTFBTQ19VU0IxMSwKLQlEQVZJTkNJX0xQU0NfVVNCMjAsCi0JREFWSU5DSV9MUFNDX0dQSU8sCi0JREFWSU5DSV9MUFNDX1VIUEksCi0JREFWSU5DSV9MUFNDX0VNQUMsCi0JREFWSU5DSV9MUFNDX0REUl9FTUlGLAotCURBVklOQ0lfTFBTQ19NY0FTUDAsCi0JREFWSU5DSV9MUFNDX01jQVNQMSwKLQlEQVZJTkNJX0xQU0NfTWNBU1AyLAotCURBVklOQ0lfTFBTQ19TUEkxLAotCURBVklOQ0lfTFBTQ19JMkMxLAotCURBVklOQ0lfTFBTQ19VQVJUMSwKLQlEQVZJTkNJX0xQU0NfVUFSVDIsCi0JREFWSU5DSV9MUFNDX0xDREMsCi0JREFWSU5DSV9MUFNDX2VQV00sCi0JREFWSU5DSV9MUFNDX2VDQVAsCi0JREFWSU5DSV9MUFNDX2VRRVAsCi0JREFWSU5DSV9MUFNDX1NDUl9QMCwKLQlEQVZJTkNJX0xQU0NfU0NSX1AxLAotCURBVklOQ0lfTFBTQ19DUl9QMywKLQlEQVZJTkNJX0xQU0NfTDNfQ0JBX1JBTQotfTsKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RQQ0MJCTAKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RQVEMwCQkxCisjZGVmaW5lIERBVklOQ0lfTFBTQ19UUFRDMQkJMgorI2RlZmluZSBEQVZJTkNJX0xQU0NfQUVNSUYJCTMKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NQSTAJCTQKKyNkZWZpbmUgREFWSU5DSV9MUFNDX01NQ19TRAkJNQorI2RlZmluZSBEQVZJTkNJX0xQU0NfQUlOVEMJCTYKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0FSTV9SQU1fUk9NCTcKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NFQ0NUTF9LRVlNR1IJOAorI2RlZmluZSBEQVZJTkNJX0xQU0NfVUFSVDAJCTkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NDUjAJCTEwCisjZGVmaW5lIERBVklOQ0lfTFBTQ19TQ1IxCQkxMQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSMgkJMTIKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0RNQVgJCTEzCisjZGVmaW5lIERBVklOQ0lfTFBTQ19BUk0JCTE0CisjZGVmaW5lIERBVklOQ0lfTFBTQ19HRU0JCTE1CisKKy8qIGZvciBMUFNDcyBpbiBQU0MxLCBvZmZzZXQgZnJvbSAzMiBmb3IgZGlmZmVyZW50aWF0aW9uICovCisjZGVmaW5lIERBVklOQ0lfTFBTQ19QU0MxX0JBU0UJCTMyCisjZGVmaW5lIERBVklOQ0lfTFBTQ19VU0IyMAkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAxKQorI2RlZmluZSBEQVZJTkNJX0xQU0NfVVNCMTEJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMikKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0dQSU8JCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMykKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1VIUEkJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgNCkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0VNQUMJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgNSkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0REUl9FTUlGCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDYpCisjZGVmaW5lIERBVklOQ0lfTFBTQ19NY0FTUDAJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgNykKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NQSTEJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMTApCisjZGVmaW5lIERBVklOQ0lfTFBTQ19JMkMxCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDExKQorI2RlZmluZSBEQVZJTkNJX0xQU0NfVUFSVDEJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMTIpCisjZGVmaW5lIERBVklOQ0lfTFBTQ19VQVJUMgkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAxMykKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0xDREMJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMTYpCisjZGVmaW5lIERBVklOQ0lfTFBTQ19lUFdNCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDE3KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfZUNBUAkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAyMCkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0wzX0NCQV9SQU0JCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMzEpCisKKy8qIERBODMwLXNwZWNpZmljIHBlcmlwaGVyYWxzICovCisjZGVmaW5lIERBVklOQ0lfTFBTQ19NY0FTUDEJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgOCkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX01jQVNQMgkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyA5KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfZVFFUAkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAyMSkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NDUjgJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMjQpCisjZGVmaW5lIERBVklOQ0lfTFBTQ19TQ1I3CQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI1KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSMTIJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMjYpCisKKy8qIERBODUwLXNwZWNpZmljIHBlcmlwaGVyYWxzICovCisjZGVmaW5lIERBVklOQ0lfTFBTQ19UUENDMQkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAwKQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0FUQQkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyA4KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfVlBJRgkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyA5KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfTWNCU1AwCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDE0KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfTWNCU1AxCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDE1KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfTU1DX1NEMQkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAxOCkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX3VQUAkJKERBVklOQ0lfTFBTQ19QU0MxX0JBU0UgKyAxOSkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RQVEMyCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDIxKQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSX0YwCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI0KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSX0YxCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI1KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSX0YyCQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI2KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSX0Y2CQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI3KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSX0Y3CQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI4KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSX0Y4CQkoREFWSU5DSV9MUFNDX1BTQzFfQkFTRSArIDI5KQorI2RlZmluZSBEQVZJTkNJX0xQU0NfQlJfRjcJCShEQVZJTkNJX0xQU0NfUFNDMV9CQVNFICsgMzApCiAKICNlbmRpZiAvKiBDT05GSUdfU09DX0RBOFhYICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gta2lya3dvb2Qva2lya3dvb2QuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gta2lya3dvb2Qva2lya3dvb2QuaAppbmRleCAwMTA0NDE4Li4zYzg0M2EwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWtpcmt3b29kL2tpcmt3b29kLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1raXJrd29vZC9raXJrd29vZC5oCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIEtXX01QUF9CQVNFCQkJKEtXX1JFR0lTVEVSKDB4MTAwMDApKQogI2RlZmluZSBLV19HUElPMF9CQVNFCQkJKEtXX1JFR0lTVEVSKDB4MTAxMDApKQogI2RlZmluZSBLV19HUElPMV9CQVNFCQkJKEtXX1JFR0lTVEVSKDB4MTAxNDApKQorI2RlZmluZSBLV19SVENfQkFTRQkJCShLV19SRUdJU1RFUigweDEwMzAwKSkKICNkZWZpbmUgS1dfTkFOREZfQkFTRQkJCShLV19SRUdJU1RFUigweDEwNDE4KSkKICNkZWZpbmUgS1dfU1BJX0JBU0UJCQkoS1dfUkVHSVNURVIoMHgxMDYwMCkpCiAjZGVmaW5lIEtXX0NQVV9XSU5fQkFTRQkJCShLV19SRUdJU1RFUigweDIwMDAwKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbWI4NnIweC9hc20tb2Zmc2V0cy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1tYjg2cjB4L2FzbS1vZmZzZXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzUyNzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1tYjg2cjB4L2FzbS1vZmZzZXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDEwCi0gKiBNYXR0aGlhcyBXZWlzc2VyIDx3ZWlzc2VybUBhcmNvci5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgQVNNX09GRlNFVFNfSAotI2RlZmluZSBBU01fT0ZGU0VUU19ICi0KLS8qCi0gKiBPZmZzZXQgZGVmaW5pdGlvbnMgZm9yIEREUiBjb250cm9sbGVyCi0gKi8KLSNkZWZpbmUgRERSMl9EUklDCQkweDAwCi0jZGVmaW5lIEREUjJfRFJJQzEJCTB4MDIKLSNkZWZpbmUgRERSMl9EUklDMgkJMHgwNAotI2RlZmluZSBERFIyX0RSQ0EJCTB4MDYKLSNkZWZpbmUgRERSMl9EUkNNCQkweDA4Ci0jZGVmaW5lIEREUjJfRFJDU1QxCQkweDBhCi0jZGVmaW5lIEREUjJfRFJDU1QyCQkweDBjCi0jZGVmaW5lIEREUjJfRFJDUgkJMHgwZQotI2RlZmluZSBERFIyX0RSQ0YJCTB4MjAKLSNkZWZpbmUgRERSMl9EUkFTUgkJMHgzMAotI2RlZmluZSBERFIyX0RSSU1TCQkweDUwCi0jZGVmaW5lIEREUjJfRFJPUwkJMHg2MAotI2RlZmluZSBERFIyX0RSSUJTT0RUMQkJMHg2NAotI2RlZmluZSBERFIyX0RST0FCQQkJMHg3MAotI2RlZmluZSBERFIyX0RST0JTCQkweDg0Ci0KLS8qCi0gKiBPZmZzZXQgZGVmaW5pdGlvbnMgQ2hpcCBDb250cm9sIE1vZHVsZQotICovCi0jZGVmaW5lIENDTlRfQ0RDUkMJCTB4ZWMKLQotLyoKLSAqIE9mZnNldCBkZWZpbml0aW9ucyBjbG9jayByZXNldCBnZW5lcmF0b3IKLSAqLwotI2RlZmluZSBDUkdfQ1JQUgkJMHgwMAotI2RlZmluZSBDUkdfQ1JIQQkJMHgxOAotI2RlZmluZSBDUkdfQ1JQQQkJMHgxYwotI2RlZmluZSBDUkdfQ1JQQgkJMHgyMAotI2RlZmluZSBDUkdfQ1JIQgkJMHgyNAotI2RlZmluZSBDUkdfQ1JBTQkJMHgyOAotCi0vKgotICogT2Zmc2V0IGRlZmluaXRpb25zIEV4dGVybmFsIGJ1cyBpbnRlcmZhY2UKLSAqLwotI2RlZmluZSBNRU1DX01DRk1PREUwCQkweDAwCi0jZGVmaW5lIE1FTUNfTUNGTU9ERTIJCTB4MDgKLSNkZWZpbmUgTUVNQ19NQ0ZNT0RFNAkJMHgxMAotI2RlZmluZSBNRU1DX01DRlRJTTAJCTB4MjAKLSNkZWZpbmUgTUVNQ19NQ0ZUSU0yCQkweDI4Ci0jZGVmaW5lIE1FTUNfTUNGVElNNAkJMHgzMAotI2RlZmluZSBNRU1DX01DRkFSRUEwCQkweDQwCi0jZGVmaW5lIE1FTUNfTUNGQVJFQTIJCTB4NDgKLSNkZWZpbmUgTUVNQ19NQ0ZBUkVBNAkJMHg1MAotCi0jZW5kaWYgLyogQVNNX09GRlNFVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1tYjg2cjB4L21iODZyMHguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbWI4NnIweC9tYjg2cjB4LmgKaW5kZXggMzZhMjhiNy4uY2I5ZWVlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1tYjg2cjB4L21iODZyMHguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW1iODZyMHgvbWI4NnIweC5oCkBAIC00OTgsNiArNDk4LDQ4IEBACiAJdWludDMyX3QgcGFkMDhbNyoxMDI0XTsKIH07CiAKKy8qIG1iODZyMHggZGRyMmMgKi8KK3N0cnVjdCBtYjg2cjB4X2RkcjJjIHsKKwl1aW50MTZfdCBkcmljOworCXVpbnQxNl90IGRyaWMxOworCXVpbnQxNl90IGRyaWMyOworCXVpbnQxNl90IGRyY2E7CisJdWludDE2X3QgZHJjbTsKKwl1aW50MTZfdCBkcmNzdDE7CisJdWludDE2X3QgZHJjc3QyOworCXVpbnQxNl90IGRyY3I7CisJdWludDE2X3QgcGFkMDBbOF07CisJdWludDE2X3QgZHJjZjsKKwl1aW50MTZfdCBwYWQwMVs3XTsKKwl1aW50MTZfdCBkcmFzcjsKKwl1aW50MTZfdCBwYWQwMlsxNV07CisJdWludDE2X3QgZHJpbXM7CisJdWludDE2X3QgcGFkMDNbN107CisJdWludDE2X3QgZHJvczsKKwl1aW50MTZfdCBwYWQwNDsKKwl1aW50MTZfdCBkcmlic29kdDE7CisJdWludDE2X3QgZHJpYnNvY2Q7CisJdWludDE2X3QgZHJpYnNvY2QyOworCXVpbnQxNl90IHBhZDA1WzNdOworCXVpbnQxNl90IGRyb2FiYTsKKwl1aW50MTZfdCBwYWQwNls5XTsKKwl1aW50MTZfdCBkcm9iczsKKwl1aW50MTZfdCBwYWQwN1s1XTsKKwl1aW50MTZfdCBkcmltcjE7CisJdWludDE2X3QgZHJpbXIyOworCXVpbnQxNl90IGRyaW1yMzsKKwl1aW50MTZfdCBkcmltcjQ7CisJdWludDE2X3QgZHJvaXNyMTsKKwl1aW50MTZfdCBkcm9pc3IyOworfTsKKworLyogbWI4NnIweCBtZW1jICovCitzdHJ1Y3QgbWI4NnIweF9tZW1jIHsKKwl1aW50MzJfdCBtY2Ztb2RlWzhdOworCXVpbnQzMl90IG1jZnRpbVs4XTsKKwl1aW50MzJfdCBtY2ZhcmVhWzhdOworfTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwMy9jcHUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDMvY3B1LmgKaW5kZXggZTk0NGRlNy4uMDhhNzI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwMy9jcHUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXAzL2NwdS5oCkBAIC00OTgsNCArNDk4LDMwIEBACiAvKiBNVVNCIGJhc2UgKi8KICNkZWZpbmUgTVVTQl9CQVNFCQkoT01BUDM0WFhfQ09SRV9MNF9JT19CQVNFICsgMHhBQjAwMCkKIAorLyogT01BUDMgR1BJTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT01BUF9HUElPX1JFVklTSU9OCQkweDAwMDAKKyNkZWZpbmUgT01BUF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCisjZGVmaW5lIE9NQVBfR1BJT19TWVNTVEFUVVMJCTB4MDAxNAorI2RlZmluZSBPTUFQX0dQSU9fSVJRU1RBVFVTMQkJMHgwMDE4CisjZGVmaW5lIE9NQVBfR1BJT19JUlFTVEFUVVMyCQkweDAwMjgKKyNkZWZpbmUgT01BUF9HUElPX0lSUUVOQUJMRTIJCTB4MDAyYworI2RlZmluZSBPTUFQX0dQSU9fSVJRRU5BQkxFMQkJMHgwMDFjCisjZGVmaW5lIE9NQVBfR1BJT19XQUtFX0VOCQkweDAwMjAKKyNkZWZpbmUgT01BUF9HUElPX0NUUkwJCQkweDAwMzAKKyNkZWZpbmUgT01BUF9HUElPX09FCQkJMHgwMDM0CisjZGVmaW5lIE9NQVBfR1BJT19EQVRBSU4JCTB4MDAzOAorI2RlZmluZSBPTUFQX0dQSU9fREFUQU9VVAkJMHgwMDNjCisjZGVmaW5lIE9NQVBfR1BJT19MRVZFTERFVEVDVDAJCTB4MDA0MAorI2RlZmluZSBPTUFQX0dQSU9fTEVWRUxERVRFQ1QxCQkweDAwNDQKKyNkZWZpbmUgT01BUF9HUElPX1JJU0lOR0RFVEVDVAkJMHgwMDQ4CisjZGVmaW5lIE9NQVBfR1BJT19GQUxMSU5HREVURUNUCQkweDAwNGMKKyNkZWZpbmUgT01BUF9HUElPX0RFQk9VTkNFX0VOCQkweDAwNTAKKyNkZWZpbmUgT01BUF9HUElPX0RFQk9VTkNFX1ZBTAkJMHgwMDU0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUklSUUVOQUJMRTEJMHgwMDYwCisjZGVmaW5lIE9NQVBfR1BJT19TRVRJUlFFTkFCTEUxCQkweDAwNjQKKyNkZWZpbmUgT01BUF9HUElPX0NMRUFSV0tVRU5BCQkweDAwODAKKyNkZWZpbmUgT01BUF9HUElPX1NFVFdLVUVOQQkJMHgwMDg0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUkRBVEFPVVQJCTB4MDA5MAorI2RlZmluZSBPTUFQX0dQSU9fU0VUREFUQU9VVAkJMHgwMDk0CisKICNlbmRpZiAvKiBfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvY2xvY2tzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2Nsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NGUwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2Nsb2Nrcy5oCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfQ0xPQ0tTX09NQVA0X0hfCisjZGVmaW5lIF9DTE9DS1NfT01BUDRfSF8KKyNpbmNsdWRlIDxjb21tb24uaD4KKworLyoKKyAqIEFzc3VtaW5nIGEgbWF4aW11bSBvZiAxLjUgR0h6IEFSTSBzcGVlZCBhbmQgYSBtaW5pbXVtIG9mIDIgY3ljbGVzIHBlcgorICogbG9vcCwgYWxsb3cgZm9yIGEgbWluaW11bSBvZiAyIG1zIHdhaXQgKGluIHJlYWxpdHkgdGhlIHdhaXQgd2lsbCBiZQorICogbXVjaCBtb3JlIHRoYW4gdGhhdCkKKyAqLworI2RlZmluZSBMREVMQVkJCTEwMDAwMDAKKworI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfQ09SRQkJMHg0QTAwNDEyMAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfUEVSCQkweDRBMDA4MTQwCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9NUFUJCTB4NEEwMDQxNjAKKyNkZWZpbmUgQ01fQ0xLU0VMX0NPUkUJCQkweDRBMDA0MTAwCisKK3N0cnVjdCBvbWFwNF9wcmNtX3JlZ3MgeworCS8qIGNtMS5ja2dlbiAqLworCXUzMiBjbV9jbGtzZWxfY29yZTsKKwl1MzIgcGFkMDAxWzFdOworCXUzMiBjbV9jbGtzZWxfYWJlOworCXUzMiBwYWQwMDJbMV07CisJdTMyIGNtX2RsbF9jdHJsOworCXUzMiBwYWQwMDNbM107CisJdTMyIGNtX2Nsa21vZGVfZHBsbF9jb3JlOworCXUzMiBjbV9pZGxlc3RfZHBsbF9jb3JlOworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX2NvcmU7CisJdTMyIGNtX2Nsa3NlbF9kcGxsX2NvcmU7CisJdTMyIGNtX2Rpdl9tMl9kcGxsX2NvcmU7CisJdTMyIGNtX2Rpdl9tM19kcGxsX2NvcmU7CisJdTMyIGNtX2Rpdl9tNF9kcGxsX2NvcmU7CisJdTMyIGNtX2Rpdl9tNV9kcGxsX2NvcmU7CisJdTMyIGNtX2Rpdl9tNl9kcGxsX2NvcmU7CisJdTMyIGNtX2Rpdl9tN19kcGxsX2NvcmU7CisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfY29yZTsKKwl1MzIgY21fc3NjX21vZGZyZXFkaXZfZHBsbF9jb3JlOworCXUzMiBjbV9lbXVfb3ZlcnJpZGVfZHBsbF9jb3JlOworCXUzMiBwYWQwMDRbM107CisJdTMyIGNtX2Nsa21vZGVfZHBsbF9tcHU7CisJdTMyIGNtX2lkbGVzdF9kcGxsX21wdTsKKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9tcHU7CisJdTMyIGNtX2Nsa3NlbF9kcGxsX21wdTsKKwl1MzIgY21fZGl2X20yX2RwbGxfbXB1OworCXUzMiBwYWQwMDVbNV07CisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfbXB1OworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX21wdTsKKwl1MzIgcGFkMDA2WzNdOworCXUzMiBjbV9ieXBjbGtfZHBsbF9tcHU7CisJdTMyIGNtX2Nsa21vZGVfZHBsbF9pdmE7CisJdTMyIGNtX2lkbGVzdF9kcGxsX2l2YTsKKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9pdmE7CisJdTMyIGNtX2Nsa3NlbF9kcGxsX2l2YTsKKwl1MzIgcGFkMDA3WzJdOworCXUzMiBjbV9kaXZfbTRfZHBsbF9pdmE7CisJdTMyIGNtX2Rpdl9tNV9kcGxsX2l2YTsKKwl1MzIgcGFkMDA4WzJdOworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX2l2YTsKKwl1MzIgY21fc3NjX21vZGZyZXFkaXZfZHBsbF9pdmE7CisJdTMyIHBhZDAwOVszXTsKKwl1MzIgY21fYnlwY2xrX2RwbGxfaXZhOworCXUzMiBjbV9jbGttb2RlX2RwbGxfYWJlOworCXUzMiBjbV9pZGxlc3RfZHBsbF9hYmU7CisJdTMyIGNtX2F1dG9pZGxlX2RwbGxfYWJlOworCXUzMiBjbV9jbGtzZWxfZHBsbF9hYmU7CisJdTMyIGNtX2Rpdl9tMl9kcGxsX2FiZTsKKwl1MzIgY21fZGl2X20zX2RwbGxfYWJlOworCXUzMiBwYWQwMTBbNF07CisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfYWJlOworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX2FiZTsKKwl1MzIgcGFkMDExWzRdOworCXUzMiBjbV9jbGttb2RlX2RwbGxfZGRycGh5OworCXUzMiBjbV9pZGxlc3RfZHBsbF9kZHJwaHk7CisJdTMyIGNtX2F1dG9pZGxlX2RwbGxfZGRycGh5OworCXUzMiBjbV9jbGtzZWxfZHBsbF9kZHJwaHk7CisJdTMyIGNtX2Rpdl9tMl9kcGxsX2RkcnBoeTsKKwl1MzIgcGFkMDEyWzFdOworCXUzMiBjbV9kaXZfbTRfZHBsbF9kZHJwaHk7CisJdTMyIGNtX2Rpdl9tNV9kcGxsX2RkcnBoeTsKKwl1MzIgY21fZGl2X202X2RwbGxfZGRycGh5OworCXUzMiBwYWQwMTNbMV07CisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfZGRycGh5OworCXUzMiBwYWQwMTRbNV07CisJdTMyIGNtX3NoYWRvd19mcmVxX2NvbmZpZzE7CisJdTMyIHBhZDAxNDFbNDddOworCXUzMiBjbV9tcHVfbXB1X2Nsa2N0cmw7CisKKwkvKiBjbTEuZHNwICovCisJdTMyIHBhZDAxNVs1NV07CisJdTMyIGNtX2RzcF9jbGtzdGN0cmw7CisJdTMyIHBhZDAxNls3XTsKKwl1MzIgY21fZHNwX2RzcF9jbGtjdHJsOworCisJLyogY20xLmFiZSAqLworCXUzMiBwYWQwMTdbNTVdOworCXUzMiBjbTFfYWJlX2Nsa3N0Y3RybDsKKwl1MzIgcGFkMDE4WzddOworCXUzMiBjbTFfYWJlX2w0YWJlX2Nsa2N0cmw7CisJdTMyIHBhZDAxOVsxXTsKKwl1MzIgY20xX2FiZV9hZXNzX2Nsa2N0cmw7CisJdTMyIHBhZDAyMFsxXTsKKwl1MzIgY20xX2FiZV9wZG1fY2xrY3RybDsKKwl1MzIgcGFkMDIxWzFdOworCXUzMiBjbTFfYWJlX2RtaWNfY2xrY3RybDsKKwl1MzIgcGFkMDIyWzFdOworCXUzMiBjbTFfYWJlX21jYXNwX2Nsa2N0cmw7CisJdTMyIHBhZDAyM1sxXTsKKwl1MzIgY20xX2FiZV9tY2JzcDFfY2xrY3RybDsKKwl1MzIgcGFkMDI0WzFdOworCXUzMiBjbTFfYWJlX21jYnNwMl9jbGtjdHJsOworCXUzMiBwYWQwMjVbMV07CisJdTMyIGNtMV9hYmVfbWNic3AzX2Nsa2N0cmw7CisJdTMyIHBhZDAyNlsxXTsKKwl1MzIgY20xX2FiZV9zbGltYnVzX2Nsa2N0cmw7CisJdTMyIHBhZDAyN1sxXTsKKwl1MzIgY20xX2FiZV90aW1lcjVfY2xrY3RybDsKKwl1MzIgcGFkMDI4WzFdOworCXUzMiBjbTFfYWJlX3RpbWVyNl9jbGtjdHJsOworCXUzMiBwYWQwMjlbMV07CisJdTMyIGNtMV9hYmVfdGltZXI3X2Nsa2N0cmw7CisJdTMyIHBhZDAzMFsxXTsKKwl1MzIgY20xX2FiZV90aW1lcjhfY2xrY3RybDsKKwl1MzIgcGFkMDMxWzFdOworCXUzMiBjbTFfYWJlX3dkdDNfY2xrY3RybDsKKworCS8qIGNtMi5ja2dlbiAqLworCXUzMiBwYWQwMzJbMzgwNV07CisJdTMyIGNtX2Nsa3NlbF9tcHVfbTNfaXNzX3Jvb3Q7CisJdTMyIGNtX2Nsa3NlbF91c2JfNjBtaHo7CisJdTMyIGNtX3NjYWxlX2ZjbGs7CisJdTMyIHBhZDAzM1sxXTsKKwl1MzIgY21fY29yZV9kdmZzX3BlcmYxOworCXUzMiBjbV9jb3JlX2R2ZnNfcGVyZjI7CisJdTMyIGNtX2NvcmVfZHZmc19wZXJmMzsKKwl1MzIgY21fY29yZV9kdmZzX3BlcmY0OworCXUzMiBwYWQwMzRbMV07CisJdTMyIGNtX2NvcmVfZHZmc19jdXJyZW50OworCXUzMiBjbV9pdmFfZHZmc19wZXJmX3Rlc2xhOworCXUzMiBjbV9pdmFfZHZmc19wZXJmX2l2YWhkOworCXUzMiBjbV9pdmFfZHZmc19wZXJmX2FiZTsKKwl1MzIgcGFkMDM1WzFdOworCXUzMiBjbV9pdmFfZHZmc19jdXJyZW50OworCXUzMiBwYWQwMzZbMV07CisJdTMyIGNtX2Nsa21vZGVfZHBsbF9wZXI7CisJdTMyIGNtX2lkbGVzdF9kcGxsX3BlcjsKKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9wZXI7CisJdTMyIGNtX2Nsa3NlbF9kcGxsX3BlcjsKKwl1MzIgY21fZGl2X20yX2RwbGxfcGVyOworCXUzMiBjbV9kaXZfbTNfZHBsbF9wZXI7CisJdTMyIGNtX2Rpdl9tNF9kcGxsX3BlcjsKKwl1MzIgY21fZGl2X201X2RwbGxfcGVyOworCXUzMiBjbV9kaXZfbTZfZHBsbF9wZXI7CisJdTMyIGNtX2Rpdl9tN19kcGxsX3BlcjsKKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF9wZXI7CisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfcGVyOworCXUzMiBjbV9lbXVfb3ZlcnJpZGVfZHBsbF9wZXI7CisJdTMyIHBhZDAzN1szXTsKKwl1MzIgY21fY2xrbW9kZV9kcGxsX3VzYjsKKwl1MzIgY21faWRsZXN0X2RwbGxfdXNiOworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX3VzYjsKKwl1MzIgY21fY2xrc2VsX2RwbGxfdXNiOworCXUzMiBjbV9kaXZfbTJfZHBsbF91c2I7CisJdTMyIHBhZDAzOFs1XTsKKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF91c2I7CisJdTMyIGNtX3NzY19tb2RmcmVxZGl2X2RwbGxfdXNiOworCXUzMiBwYWQwMzlbMV07CisJdTMyIGNtX2Nsa2Rjb2xkb19kcGxsX3VzYjsKKwl1MzIgcGFkMDQwWzJdOworCXUzMiBjbV9jbGttb2RlX2RwbGxfdW5pcHJvOworCXUzMiBjbV9pZGxlc3RfZHBsbF91bmlwcm87CisJdTMyIGNtX2F1dG9pZGxlX2RwbGxfdW5pcHJvOworCXUzMiBjbV9jbGtzZWxfZHBsbF91bmlwcm87CisJdTMyIGNtX2Rpdl9tMl9kcGxsX3VuaXBybzsKKwl1MzIgcGFkMDQxWzVdOworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX3VuaXBybzsKKwl1MzIgY21fc3NjX21vZGZyZXFkaXZfZHBsbF91bmlwcm87CisKKwkvKiBjbTIuY29yZSAqLworCXUzMiBwYWQwNDExWzMyNF07CisJdTMyIGNtX2wzXzFfY2xrc3RjdHJsOworCXUzMiBwYWQwNDJbMV07CisJdTMyIGNtX2wzXzFfZHluYW1pY2RlcDsKKwl1MzIgcGFkMDQzWzVdOworCXUzMiBjbV9sM18xX2wzXzFfY2xrY3RybDsKKwl1MzIgcGFkMDQ0WzU1XTsKKwl1MzIgY21fbDNfMl9jbGtzdGN0cmw7CisJdTMyIHBhZDA0NVsxXTsKKwl1MzIgY21fbDNfMl9keW5hbWljZGVwOworCXUzMiBwYWQwNDZbNV07CisJdTMyIGNtX2wzXzJfbDNfMl9jbGtjdHJsOworCXUzMiBwYWQwNDdbMV07CisJdTMyIGNtX2wzXzJfZ3BtY19jbGtjdHJsOworCXUzMiBwYWQwNDhbMV07CisJdTMyIGNtX2wzXzJfb2NtY19yYW1fY2xrY3RybDsKKwl1MzIgcGFkMDQ5WzUxXTsKKwl1MzIgY21fbXB1X20zX2Nsa3N0Y3RybDsKKwl1MzIgY21fbXB1X20zX3N0YXRpY2RlcDsKKwl1MzIgY21fbXB1X20zX2R5bmFtaWNkZXA7CisJdTMyIHBhZDA1MFs1XTsKKwl1MzIgY21fbXB1X20zX21wdV9tM19jbGtjdHJsOworCXUzMiBwYWQwNTFbNTVdOworCXUzMiBjbV9zZG1hX2Nsa3N0Y3RybDsKKwl1MzIgY21fc2RtYV9zdGF0aWNkZXA7CisJdTMyIGNtX3NkbWFfZHluYW1pY2RlcDsKKwl1MzIgcGFkMDUyWzVdOworCXUzMiBjbV9zZG1hX3NkbWFfY2xrY3RybDsKKwl1MzIgcGFkMDUzWzU1XTsKKwl1MzIgY21fbWVtaWZfY2xrc3RjdHJsOworCXUzMiBwYWQwNTRbN107CisJdTMyIGNtX21lbWlmX2RtbV9jbGtjdHJsOworCXUzMiBwYWQwNTVbMV07CisJdTMyIGNtX21lbWlmX2VtaWZfZndfY2xrY3RybDsKKwl1MzIgcGFkMDU2WzFdOworCXUzMiBjbV9tZW1pZl9lbWlmXzFfY2xrY3RybDsKKwl1MzIgcGFkMDU3WzFdOworCXUzMiBjbV9tZW1pZl9lbWlmXzJfY2xrY3RybDsKKwl1MzIgcGFkMDU4WzFdOworCXUzMiBjbV9tZW1pZl9kbGxfY2xrY3RybDsKKwl1MzIgcGFkMDU5WzNdOworCXUzMiBjbV9tZW1pZl9lbWlmX2gxX2Nsa2N0cmw7CisJdTMyIHBhZDA2MFsxXTsKKwl1MzIgY21fbWVtaWZfZW1pZl9oMl9jbGtjdHJsOworCXUzMiBwYWQwNjFbMV07CisJdTMyIGNtX21lbWlmX2RsbF9oX2Nsa2N0cmw7CisJdTMyIHBhZDA2MlszOV07CisJdTMyIGNtX2MyY19jbGtzdGN0cmw7CisJdTMyIGNtX2MyY19zdGF0aWNkZXA7CisJdTMyIGNtX2MyY19keW5hbWljZGVwOworCXUzMiBwYWQwNjNbNV07CisJdTMyIGNtX2MyY19zYWQyZF9jbGtjdHJsOworCXUzMiBwYWQwNjRbMV07CisJdTMyIGNtX2MyY19tb2RlbV9pY3JfY2xrY3RybDsKKwl1MzIgcGFkMDY1WzFdOworCXUzMiBjbV9jMmNfc2FkMmRfZndfY2xrY3RybDsKKwl1MzIgcGFkMDY2WzUxXTsKKwl1MzIgY21fbDRjZmdfY2xrc3RjdHJsOworCXUzMiBwYWQwNjdbMV07CisJdTMyIGNtX2w0Y2ZnX2R5bmFtaWNkZXA7CisJdTMyIHBhZDA2OFs1XTsKKwl1MzIgY21fbDRjZmdfbDRfY2ZnX2Nsa2N0cmw7CisJdTMyIHBhZDA2OVsxXTsKKwl1MzIgY21fbDRjZmdfaHdfc2VtX2Nsa2N0cmw7CisJdTMyIHBhZDA3MFsxXTsKKwl1MzIgY21fbDRjZmdfbWFpbGJveF9jbGtjdHJsOworCXUzMiBwYWQwNzFbMV07CisJdTMyIGNtX2w0Y2ZnX3Nhcl9yb21fY2xrY3RybDsKKwl1MzIgcGFkMDcyWzQ5XTsKKwl1MzIgY21fbDNpbnN0cl9jbGtzdGN0cmw7CisJdTMyIHBhZDA3M1s3XTsKKwl1MzIgY21fbDNpbnN0cl9sM18zX2Nsa2N0cmw7CisJdTMyIHBhZDA3NFsxXTsKKwl1MzIgY21fbDNpbnN0cl9sM19pbnN0cl9jbGtjdHJsOworCXUzMiBwYWQwNzVbNV07CisJdTMyIGNtX2wzaW5zdHJfaW50cmNvbm5fd3AxX2Nsa2N0cmw7CisKKworCS8qIGNtMi5pdmFoZCAqLworCXUzMiBwYWQwNzZbNDddOworCXUzMiBjbV9pdmFoZF9jbGtzdGN0cmw7CisJdTMyIHBhZDA3N1s3XTsKKwl1MzIgY21faXZhaGRfaXZhaGRfY2xrY3RybDsKKwl1MzIgcGFkMDc4WzFdOworCXUzMiBjbV9pdmFoZF9zbDJfY2xrY3RybDsKKworCS8qIGNtMi5jYW0gKi8KKwl1MzIgcGFkMDc5WzUzXTsKKwl1MzIgY21fY2FtX2Nsa3N0Y3RybDsKKwl1MzIgcGFkMDgwWzddOworCXUzMiBjbV9jYW1faXNzX2Nsa2N0cmw7CisJdTMyIHBhZDA4MVsxXTsKKwl1MzIgY21fY2FtX2ZkaWZfY2xrY3RybDsKKworCS8qIGNtMi5kc3MgKi8KKwl1MzIgcGFkMDgyWzUzXTsKKwl1MzIgY21fZHNzX2Nsa3N0Y3RybDsKKwl1MzIgcGFkMDgzWzddOworCXUzMiBjbV9kc3NfZHNzX2Nsa2N0cmw7CisKKwkvKiBjbTIuc2d4ICovCisJdTMyIHBhZDA4NFs1NV07CisJdTMyIGNtX3NneF9jbGtzdGN0cmw7CisJdTMyIHBhZDA4NVs3XTsKKwl1MzIgY21fc2d4X3NneF9jbGtjdHJsOworCisJLyogY20yLmwzaW5pdCAqLworCXUzMiBwYWQwODZbNTVdOworCXUzMiBjbV9sM2luaXRfY2xrc3RjdHJsOworCisJLyogY20yLmwzaW5pdCAqLworCXUzMiBwYWQwODdbOV07CisJdTMyIGNtX2wzaW5pdF9oc21tYzFfY2xrY3RybDsKKwl1MzIgcGFkMDg4WzFdOworCXUzMiBjbV9sM2luaXRfaHNtbWMyX2Nsa2N0cmw7CisJdTMyIHBhZDA4OVsxXTsKKwl1MzIgY21fbDNpbml0X2hzaV9jbGtjdHJsOworCXUzMiBwYWQwOTBbN107CisJdTMyIGNtX2wzaW5pdF9oc3VzYmhvc3RfY2xrY3RybDsKKwl1MzIgcGFkMDkxWzFdOworCXUzMiBjbV9sM2luaXRfaHN1c2JvdGdfY2xrY3RybDsKKwl1MzIgcGFkMDkyWzFdOworCXUzMiBjbV9sM2luaXRfaHN1c2J0bGxfY2xrY3RybDsKKwl1MzIgcGFkMDkzWzNdOworCXUzMiBjbV9sM2luaXRfcDE1MDBfY2xrY3RybDsKKwl1MzIgcGFkMDk0WzIxXTsKKwl1MzIgY21fbDNpbml0X2ZzdXNiX2Nsa2N0cmw7CisJdTMyIHBhZDA5NVszXTsKKwl1MzIgY21fbDNpbml0X3VzYnBoeV9jbGtjdHJsOworCisJLyogY20yLmw0cGVyICovCisJdTMyIHBhZDA5Nls3XTsKKwl1MzIgY21fbDRwZXJfY2xrc3RjdHJsOworCXUzMiBwYWQwOTdbMV07CisJdTMyIGNtX2w0cGVyX2R5bmFtaWNkZXA7CisJdTMyIHBhZDA5OFs1XTsKKwl1MzIgY21fbDRwZXJfYWRjX2Nsa2N0cmw7CisJdTMyIHBhZDEwMFsxXTsKKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjEwX2Nsa2N0cmw7CisJdTMyIHBhZDEwMVsxXTsKKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjExX2Nsa2N0cmw7CisJdTMyIHBhZDEwMlsxXTsKKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjJfY2xrY3RybDsKKwl1MzIgcGFkMTAzWzFdOworCXUzMiBjbV9sNHBlcl9ncHRpbWVyM19jbGtjdHJsOworCXUzMiBwYWQxMDRbMV07CisJdTMyIGNtX2w0cGVyX2dwdGltZXI0X2Nsa2N0cmw7CisJdTMyIHBhZDEwNVsxXTsKKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjlfY2xrY3RybDsKKwl1MzIgcGFkMTA2WzFdOworCXUzMiBjbV9sNHBlcl9lbG1fY2xrY3RybDsKKwl1MzIgcGFkMTA3WzFdOworCXUzMiBjbV9sNHBlcl9ncGlvMl9jbGtjdHJsOworCXUzMiBwYWQxMDhbMV07CisJdTMyIGNtX2w0cGVyX2dwaW8zX2Nsa2N0cmw7CisJdTMyIHBhZDEwOVsxXTsKKwl1MzIgY21fbDRwZXJfZ3BpbzRfY2xrY3RybDsKKwl1MzIgcGFkMTEwWzFdOworCXUzMiBjbV9sNHBlcl9ncGlvNV9jbGtjdHJsOworCXUzMiBwYWQxMTFbMV07CisJdTMyIGNtX2w0cGVyX2dwaW82X2Nsa2N0cmw7CisJdTMyIHBhZDExMlsxXTsKKwl1MzIgY21fbDRwZXJfaGRxMXdfY2xrY3RybDsKKwl1MzIgcGFkMTEzWzFdOworCXUzMiBjbV9sNHBlcl9oZWNjMV9jbGtjdHJsOworCXUzMiBwYWQxMTRbMV07CisJdTMyIGNtX2w0cGVyX2hlY2MyX2Nsa2N0cmw7CisJdTMyIHBhZDExNVsxXTsKKwl1MzIgY21fbDRwZXJfaTJjMV9jbGtjdHJsOworCXUzMiBwYWQxMTZbMV07CisJdTMyIGNtX2w0cGVyX2kyYzJfY2xrY3RybDsKKwl1MzIgcGFkMTE3WzFdOworCXUzMiBjbV9sNHBlcl9pMmMzX2Nsa2N0cmw7CisJdTMyIHBhZDExOFsxXTsKKwl1MzIgY21fbDRwZXJfaTJjNF9jbGtjdHJsOworCXUzMiBwYWQxMTlbMV07CisJdTMyIGNtX2w0cGVyX2w0cGVyX2Nsa2N0cmw7CisJdTMyIHBhZDExOTFbM107CisJdTMyIGNtX2w0cGVyX21jYXNwMl9jbGtjdHJsOworCXUzMiBwYWQxMjBbMV07CisJdTMyIGNtX2w0cGVyX21jYXNwM19jbGtjdHJsOworCXUzMiBwYWQxMjFbMV07CisJdTMyIGNtX2w0cGVyX21jYnNwNF9jbGtjdHJsOworCXUzMiBwYWQxMjJbMV07CisJdTMyIGNtX2w0cGVyX21nYXRlX2Nsa2N0cmw7CisJdTMyIHBhZDEyM1sxXTsKKwl1MzIgY21fbDRwZXJfbWNzcGkxX2Nsa2N0cmw7CisJdTMyIHBhZDEyNFsxXTsKKwl1MzIgY21fbDRwZXJfbWNzcGkyX2Nsa2N0cmw7CisJdTMyIHBhZDEyNVsxXTsKKwl1MzIgY21fbDRwZXJfbWNzcGkzX2Nsa2N0cmw7CisJdTMyIHBhZDEyNlsxXTsKKwl1MzIgY21fbDRwZXJfbWNzcGk0X2Nsa2N0cmw7CisJdTMyIHBhZDEyN1s1XTsKKwl1MzIgY21fbDRwZXJfbW1jc2QzX2Nsa2N0cmw7CisJdTMyIHBhZDEyOFsxXTsKKwl1MzIgY21fbDRwZXJfbW1jc2Q0X2Nsa2N0cmw7CisJdTMyIHBhZDEyOVsxXTsKKwl1MzIgY21fbDRwZXJfbXNwcm9oZ19jbGtjdHJsOworCXUzMiBwYWQxMzBbMV07CisJdTMyIGNtX2w0cGVyX3NsaW1idXMyX2Nsa2N0cmw7CisJdTMyIHBhZDEzMVsxXTsKKwl1MzIgY21fbDRwZXJfdWFydDFfY2xrY3RybDsKKwl1MzIgcGFkMTMyWzFdOworCXUzMiBjbV9sNHBlcl91YXJ0Ml9jbGtjdHJsOworCXUzMiBwYWQxMzNbMV07CisJdTMyIGNtX2w0cGVyX3VhcnQzX2Nsa2N0cmw7CisJdTMyIHBhZDEzNFsxXTsKKwl1MzIgY21fbDRwZXJfdWFydDRfY2xrY3RybDsKKwl1MzIgcGFkMTM1WzFdOworCXUzMiBjbV9sNHBlcl9tbWNzZDVfY2xrY3RybDsKKwl1MzIgcGFkMTM2WzFdOworCXUzMiBjbV9sNHBlcl9pMmM1X2Nsa2N0cmw7CisJdTMyIHBhZDEzN1s1XTsKKwl1MzIgY21fbDRzZWNfY2xrc3RjdHJsOworCXUzMiBjbV9sNHNlY19zdGF0aWNkZXA7CisJdTMyIGNtX2w0c2VjX2R5bmFtaWNkZXA7CisJdTMyIHBhZDEzOFs1XTsKKwl1MzIgY21fbDRzZWNfYWVzMV9jbGtjdHJsOworCXUzMiBwYWQxMzlbMV07CisJdTMyIGNtX2w0c2VjX2FlczJfY2xrY3RybDsKKwl1MzIgcGFkMTQwWzFdOworCXUzMiBjbV9sNHNlY19kZXMzZGVzX2Nsa2N0cmw7CisJdTMyIHBhZDE0MVsxXTsKKwl1MzIgY21fbDRzZWNfcGthZWlwMjlfY2xrY3RybDsKKwl1MzIgcGFkMTQyWzFdOworCXUzMiBjbV9sNHNlY19ybmdfY2xrY3RybDsKKwl1MzIgcGFkMTQzWzFdOworCXUzMiBjbV9sNHNlY19zaGEybWQ1MV9jbGtjdHJsOworCXUzMiBwYWQxNDRbM107CisJdTMyIGNtX2w0c2VjX2NyeXB0b2RtYV9jbGtjdHJsOworCXUzMiBwYWQxNDVbNzc2ODQxXTsKKworCS8qIGw0IHdrdXAgcmVncyAqLworCXUzMiBwYWQyMDFbNjIxMV07CisJdTMyIGNtX2FiZV9wbGxfcmVmX2Nsa3NlbDsKKwl1MzIgY21fc3lzX2Nsa3NlbDsKKwl1MzIgcGFkMjAyWzE0NjddOworCXUzMiBjbV93a3VwX2Nsa3N0Y3RybDsKKwl1MzIgcGFkMjAzWzddOworCXUzMiBjbV93a3VwX2w0d2t1cF9jbGtjdHJsOworCXUzMiBwYWQyMDQ7CisJdTMyIGNtX3drdXBfd2R0aW1lcjFfY2xrY3RybDsKKwl1MzIgcGFkMjA1OworCXUzMiBjbV93a3VwX3dkdGltZXIyX2Nsa2N0cmw7CisJdTMyIHBhZDIwNjsKKwl1MzIgY21fd2t1cF9ncGlvMV9jbGtjdHJsOworCXUzMiBwYWQyMDc7CisJdTMyIGNtX3drdXBfZ3B0aW1lcjFfY2xrY3RybDsKKwl1MzIgcGFkMjA4OworCXUzMiBjbV93a3VwX2dwdGltZXIxMl9jbGtjdHJsOworCXUzMiBwYWQyMDk7CisJdTMyIGNtX3drdXBfc3luY3RpbWVyX2Nsa2N0cmw7CisJdTMyIHBhZDIxMDsKKwl1MzIgY21fd2t1cF91c2ltX2Nsa2N0cmw7CisJdTMyIHBhZDIxMTsKKwl1MzIgY21fd2t1cF9zYXJyYW1fY2xrY3RybDsKKwl1MzIgcGFkMjEyWzVdOworCXUzMiBjbV93a3VwX2tleWJvYXJkX2Nsa2N0cmw7CisJdTMyIHBhZDIxMzsKKwl1MzIgY21fd2t1cF9ydGNfY2xrY3RybDsKKwl1MzIgcGFkMjE0OworCXUzMiBjbV93a3VwX2JhbmRnYXBfY2xrY3RybDsKKwl1MzIgcGFkMjE1WzE5N107CisJdTMyIHBybV92Y192YWxfYnlwYXNzOworCXUzMiBwcm1fdmNfY2ZnX2NoYW5uZWw7CisJdTMyIHBybV92Y19jZmdfaTJjX21vZGU7CisJdTMyIHBybV92Y19jZmdfaTJjX2NsazsKKworfTsKKworLyogRFBMTCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENNX0NMS01PREVfRFBMTAkJMAorI2RlZmluZSBDTV9JRExFU1RfRFBMTAkJMHg0CisjZGVmaW5lIENNX0FVVE9JRExFX0RQTEwJMHg4CisjZGVmaW5lIENNX0NMS1NFTF9EUExMCQkweEMKKyNkZWZpbmUgQ01fRElWX00yX0RQTEwJCTB4MTAKKyNkZWZpbmUgQ01fRElWX00zX0RQTEwJCTB4MTQKKyNkZWZpbmUgQ01fRElWX000X0RQTEwJCTB4MTgKKyNkZWZpbmUgQ01fRElWX001X0RQTEwJCTB4MUMKKyNkZWZpbmUgQ01fRElWX002X0RQTEwJCTB4MjAKKyNkZWZpbmUgQ01fRElWX003X0RQTEwJCTB4MjQKKworI2RlZmluZSBEUExMX0NMS09VVF9ESVZfTUFTSwkweDFGIC8qIHBvc3QtZGl2aWRlciBtYXNrICovCisKKy8qIENNX0NMS01PREVfRFBMTCAqLworI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfUkVHTTRYRU5fU0hJRlQJCTExCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SRUdNNFhFTl9NQVNLCQkoMSA8PCAxMSkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0xQTU9ERV9FTl9TSElGVAkJMTAKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0xQTU9ERV9FTl9NQVNLCQkoMSA8PCAxMCkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JFTE9DS19SQU1QX0VOX1NISUZUCTkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JFTE9DS19SQU1QX0VOX01BU0sJKDEgPDwgOSkKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0RSSUZUR1VBUkRfRU5fU0hJRlQJOAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRFJJRlRHVUFSRF9FTl9NQVNLCSgxIDw8IDgpCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SQU1QX1JBVEVfU0hJRlQJCTUKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JBTVBfUkFURV9NQVNLCQkoMHg3IDw8IDUpCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9FTl9TSElGVAkJMAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRU5fTUFTSwkJCSgweDcgPDwgMCkKKworI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9TSElGVAkJMAorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9NQVNLCQk3CisKKyNkZWZpbmUgRFBMTF9FTl9TVE9QCQkJMQorI2RlZmluZSBEUExMX0VOX01OX0JZUEFTUwkJNAorI2RlZmluZSBEUExMX0VOX0xPV19QT1dFUl9CWVBBU1MJNQorI2RlZmluZSBEUExMX0VOX0ZBU1RfUkVMT0NLX0JZUEFTUwk2CisjZGVmaW5lIERQTExfRU5fTE9DSwkJCTcKKworLyogQ01fSURMRVNUX0RQTEwgZmllbGRzICovCisjZGVmaW5lIFNUX0RQTExfQ0xLX01BU0sJCTEKKworLyogQ01fQ0xLU0VMX0RQTEwgKi8KKyNkZWZpbmUgQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfU0hJRlQJMjQKKyNkZWZpbmUgQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfTUFTSwkJKDB4RkYgPDwgMjQpCisjZGVmaW5lIENNX0NMS1NFTF9EUExMX01fU0hJRlQJCQk4CisjZGVmaW5lIENNX0NMS1NFTF9EUExMX01fTUFTSwkJCSgweDdGRiA8PCA4KQorI2RlZmluZSBDTV9DTEtTRUxfRFBMTF9OX1NISUZUCQkJMAorI2RlZmluZSBDTV9DTEtTRUxfRFBMTF9OX01BU0sJCQkweDdGCisjZGVmaW5lIENNX0NMS1NFTF9EQ0NfRU5fU0hJRlQJCQkyMgorI2RlZmluZSBDTV9DTEtTRUxfRENDX0VOX01BU0sJCQkoMSA8PCAyMikKKworI2RlZmluZSBPTUFQNF9EUExMX01BWF9OCTEyNworCisvKiBDTV9TWVNfQ0xLU0VMICovCisjZGVmaW5lIENNX1NZU19DTEtTRUxfU1lTX0NMS1NFTF9NQVNLCTcKKworLyogQ01fQ0xLU0VMX0NPUkUgKi8KKyNkZWZpbmUgQ0xLU0VMX0NPUkVfU0hJRlQJMAorI2RlZmluZSBDTEtTRUxfTDNfU0hJRlQJCTQKKyNkZWZpbmUgQ0xLU0VMX0w0X1NISUZUCQk4CisKKyNkZWZpbmUgQ0xLU0VMX0NPUkVfWDJfRElWXzEJMAorI2RlZmluZSBDTEtTRUxfTDNfQ09SRV9ESVZfMgkxCisjZGVmaW5lIENMS1NFTF9MNF9MM19ESVZfMgkxCisKKy8qIENNX0FCRV9QTExfUkVGX0NMS1NFTCAqLworI2RlZmluZSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMX1NISUZUCTAKKyNkZWZpbmUgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9NQVNLCTEKKyNkZWZpbmUgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TWVNDTEsJMAorI2RlZmluZSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMXzMyS0NMSwkxCisKKy8qIENNX0JZUENMS19EUExMX0lWQSAqLworI2RlZmluZSBDTV9CWVBDTEtfRFBMTF9JVkFfQ0xLU0VMX1NISUZUCQkwCisjZGVmaW5lIENNX0JZUENMS19EUExMX0lWQV9DTEtTRUxfTUFTSwkJMworCisjZGVmaW5lIERQTExfSVZBX0NMS1NFTF9DT1JFX1gyX0RJVl8yCQkxCisKKy8qIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9GUkVRX1VQREFURV9NQVNLCTEKKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9ETExfT1ZFUlJJREVfTUFTSwk0CisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRExMX1JFU0VUX01BU0sJOAorCisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRFBMTF9FTl9TSElGVAk4CisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRFBMTF9FTl9NQVNLCSg3IDw8IDgpCisKKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9NMl9ESVZfU0hJRlQJMTEKKyNkZWZpbmUgU0hBRE9XX0ZSRVFfQ09ORklHMV9NMl9ESVZfTUFTSwkJKDB4MUYgPDwgMTEpCisKKy8qQ01fPGNsb2NrX2RvbWFpbj5fX0NMS0NUUkwgKi8KKyNkZWZpbmUgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQJCTAKKyNkZWZpbmUgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSwkJMworCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX05PX1NMRUVQCQkwCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1NMRUVQCQkxCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVAJCTIKKyNkZWZpbmUgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTwkJMworCisKKy8qIENNXzxjbG9ja19kb21haW4+Xzxtb2R1bGU+X0NMS0NUUkwgKi8KKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVAkJMAorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0sJCTMKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX1NISUZUCQkxNgorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfTUFTSwkJKDMgPDwgMTYpCisKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19ESVNBQkxFCQkwCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfSFdfQVVUTwkJMQorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOCTIKKworI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfRlVMTFlfRlVOQ1RJT05BTAkwCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9UUkFOU0lUSU9OSU5HCTEKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX0lETEUJCTIKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX0RJU0FCTEVECQkzCisKKy8qIENNX0w0UEVSX0dQSU80X0NMS0NUUkwgKi8KKyNkZWZpbmUgR1BJTzRfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSwkJKDEgPDwgOCkKKworLyogQ01fTDNJTklUX0hTTU1Dbl9DTEtDVFJMICovCisjZGVmaW5lIEhTTU1DX0NMS0NUUkxfQ0xLU0VMX01BU0sJCSgxIDw8IDI0KQorCisvKiBDTV9XS1VQX0dQVElNRVIxX0NMS0NUUkwgKi8KKyNkZWZpbmUgR1BUSU1FUjFfQ0xLQ1RSTF9DTEtTRUxfTUFTSwkJKDEgPDwgMjQpCisKKy8qIENNX0NBTV9JU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBJU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSwkJKDEgPDwgOCkKKworLyogQ01fRFNTX0RTU19DTEtDVFJMICovCisjZGVmaW5lIERTU19DTEtDVFJMX09QVEZDTEtFTl9NQVNLCQkweEYwMAorCisvKiBDTV9MM0lOSVRfVVNCUEhZX0NMS0NUUkwgKi8KKyNkZWZpbmUgVVNCUEhZX0NMS0NUUkxfT1BURkNMS0VOX1BIWV80OE1fTUFTSwk4CisKKy8qIENNX01QVV9NUFVfQ0xLQ1RSTCAqLworI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfRU1JRl9ESVZfTU9ERV9TSElGVAkyNAorI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfRU1JRl9ESVZfTU9ERV9NQVNLCSgxIDw8IDI0KQorI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfQUJFX0RJVl9NT0RFX1NISUZUCTI1CisjZGVmaW5lIE1QVV9DTEtDVFJMX0NMS1NFTF9BQkVfRElWX01PREVfTUFTSwkoMSA8PCAyNSkKKworLyogQ2xvY2sgZnJlcXVlbmNpZXMgKi8KKyNkZWZpbmUgT01BUF9TWVNfQ0xLX0ZSRVFfMzhfNF9NSFoJMzg0MDAwMDAKKyNkZWZpbmUgT01BUF9TWVNfQ0xLX0lORF8zOF80X01IWgk2CisjZGVmaW5lIE9NQVBfMzJLX0NMS19GUkVRCQkzMjc2OAorCisvKiBQUk1fVkNfQ0ZHX0kyQ19DTEsgKi8KKyNkZWZpbmUgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTEhfU0hJRlQJCTAKKyNkZWZpbmUgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTEhfTUFTSwkJMHhGRgorI2RlZmluZSBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMTF9TSElGVAkJOAorI2RlZmluZSBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMTF9NQVNLCQkoMHhGRiA8PCA4KQorCisvKiBQUk1fVkNfVkFMX0JZUEFTUyAqLworI2RlZmluZSBQUk1fVkNfSTJDX0NIQU5ORUxfRlJFUV9LSFoJNDAwCisKKyNkZWZpbmUgUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklUCTB4MTAwMDAwMAorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19TTEFWRUFERFJfU0hJRlQJMAorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19TTEFWRUFERFJfTUFTSwkweDdGCisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX1JFR0FERFJfU0hJRlQJCTgKKyNkZWZpbmUgUFJNX1ZDX1ZBTF9CWVBBU1NfUkVHQUREUl9NQVNLCQkweEZGCisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfU0hJRlQJCTE2CisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX0RBVEFfTUFTSwkJMHhGRgorCisvKiBTTVBTICovCisjZGVmaW5lIFNNUFNfSTJDX1NMQVZFX0FERFIJMHgxMgorI2RlZmluZSBTTVBTX1JFR19BRERSX1ZDT1JFMQkweDU1CisjZGVmaW5lIFNNUFNfUkVHX0FERFJfVkNPUkUyCTB4NUIKKyNkZWZpbmUgU01QU19SRUdfQUREUl9WQ09SRTMJMHg2MQorCisjZGVmaW5lIFBIT0VOSVhfU01QU19CQVNFX1ZPTFRfU1REX01PREVfVVYJCTYwNzcwMAorI2RlZmluZSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1dJVEhfT0ZGU0VUX1VWCTcwOTAwMAorCisvKiBUUFMgKi8KKyNkZWZpbmUgVFBTNjIzNjFfSTJDX1NMQVZFX0FERFIJCTB4NjAKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfU0VUMAkJMHgwCisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX1NFVDEJCTB4MQorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9TRVQyCQkweDIKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfU0VUMwkJMHgzCisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX0NUUkwJCTB4NAorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9URU1QCQkweDUKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfUk1QX0NUUkwJMHg2CisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX0NISVBfSUQJMHg4CisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX0NISVBfSURfMgkweDkKKworI2RlZmluZSBUUFM2MjM2MV9CQVNFX1ZPTFRfTVYJNTAwCisjZGVmaW5lIFRQUzYyMzYxX1ZTRUwwX0dQSU8JNworCisvKiBEZWZpbmVzIGZvciBEUExMIHNldHVwICovCisjZGVmaW5lIERQTExfTE9DS0VEX0ZSRVFfVE9MRVJBTkNFXzAJCTAKKyNkZWZpbmUgRFBMTF9MT0NLRURfRlJFUV9UT0xFUkFOQ0VfNTAwX0tIWgk1MDAKKyNkZWZpbmUgRFBMTF9MT0NLRURfRlJFUV9UT0xFUkFOQ0VfMV9NSFoJMTAwMAorCisjZGVmaW5lIERQTExfTk9fTE9DSwkwCisjZGVmaW5lIERQTExfTE9DSwkxCisKKyNkZWZpbmUgTlVNX1NZU19DTEtTCTcKKworc3RydWN0IGRwbGxfcmVncyB7CisJdTMyIGNtX2Nsa21vZGVfZHBsbDsKKwl1MzIgY21faWRsZXN0X2RwbGw7CisJdTMyIGNtX2F1dG9pZGxlX2RwbGw7CisJdTMyIGNtX2Nsa3NlbF9kcGxsOworCXUzMiBjbV9kaXZfbTJfZHBsbDsKKwl1MzIgY21fZGl2X20zX2RwbGw7CisJdTMyIGNtX2Rpdl9tNF9kcGxsOworCXUzMiBjbV9kaXZfbTVfZHBsbDsKKwl1MzIgY21fZGl2X202X2RwbGw7CisJdTMyIGNtX2Rpdl9tN19kcGxsOworfTsKKworLyogRFBMTCBwYXJhbWV0ZXIgdGFibGUgKi8KK3N0cnVjdCBkcGxsX3BhcmFtcyB7CisJdTMyIG07CisJdTMyIG47CisJdTggbTI7CisJdTggbTM7CisJdTggbTQ7CisJdTggbTU7CisJdTggbTY7CisJdTggbTc7Cit9OworCisjZW5kaWYgLyogX0NMT0NLU19PTUFQNF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9jcHUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvY3B1LmgKaW5kZXggN2Q1NzQ4YS4uMDhiOWM5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9jcHUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2NwdS5oCkBAIC0xNDIsNCArMTQyLDMwIEBACiAvKiBNVVNCIGJhc2UgKi8KICNkZWZpbmUgTVVTQl9CQVNFCQkoT01BUDQ0WFhfTDRfQ09SRV9CQVNFICsgMHhBQjAwMCkKIAorLyogT01BUDQgR1BJTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT01BUF9HUElPX1JFVklTSU9OCQkweDAwMDAKKyNkZWZpbmUgT01BUF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCisjZGVmaW5lIE9NQVBfR1BJT19TWVNTVEFUVVMJCTB4MDExNAorI2RlZmluZSBPTUFQX0dQSU9fSVJRU1RBVFVTMQkJMHgwMTE4CisjZGVmaW5lIE9NQVBfR1BJT19JUlFTVEFUVVMyCQkweDAxMjgKKyNkZWZpbmUgT01BUF9HUElPX0lSUUVOQUJMRTIJCTB4MDEyYworI2RlZmluZSBPTUFQX0dQSU9fSVJRRU5BQkxFMQkJMHgwMTFjCisjZGVmaW5lIE9NQVBfR1BJT19XQUtFX0VOCQkweDAxMjAKKyNkZWZpbmUgT01BUF9HUElPX0NUUkwJCQkweDAxMzAKKyNkZWZpbmUgT01BUF9HUElPX09FCQkJMHgwMTM0CisjZGVmaW5lIE9NQVBfR1BJT19EQVRBSU4JCTB4MDEzOAorI2RlZmluZSBPTUFQX0dQSU9fREFUQU9VVAkJMHgwMTNjCisjZGVmaW5lIE9NQVBfR1BJT19MRVZFTERFVEVDVDAJCTB4MDE0MAorI2RlZmluZSBPTUFQX0dQSU9fTEVWRUxERVRFQ1QxCQkweDAxNDQKKyNkZWZpbmUgT01BUF9HUElPX1JJU0lOR0RFVEVDVAkJMHgwMTQ4CisjZGVmaW5lIE9NQVBfR1BJT19GQUxMSU5HREVURUNUCQkweDAxNGMKKyNkZWZpbmUgT01BUF9HUElPX0RFQk9VTkNFX0VOCQkweDAxNTAKKyNkZWZpbmUgT01BUF9HUElPX0RFQk9VTkNFX1ZBTAkJMHgwMTU0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUklSUUVOQUJMRTEJMHgwMTYwCisjZGVmaW5lIE9NQVBfR1BJT19TRVRJUlFFTkFCTEUxCQkweDAxNjQKKyNkZWZpbmUgT01BUF9HUElPX0NMRUFSV0tVRU5BCQkweDAxODAKKyNkZWZpbmUgT01BUF9HUElPX1NFVFdLVUVOQQkJMHgwMTg0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUkRBVEFPVVQJCTB4MDE5MAorI2RlZmluZSBPTUFQX0dQSU9fU0VUREFUQU9VVAkJMHgwMTk0CisKICNlbmRpZiAvKiBfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvZW1pZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9lbWlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhZDFmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvZW1pZi5oCkBAIC0wLDAgKzEsMTA0MCBAQAorLyoKKyAqIE9NQVA0NHh4IEVNSUYgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBBbmVlc2ggViA8YW5lZXNoQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0VNSUZfSF8KKyNkZWZpbmUgX0VNSUZfSF8KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKworLyogQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIE9NQVA0NFhYX0VNSUYxCQkJCTB4NGMwMDAwMDAKKyNkZWZpbmUgT01BUDQ0WFhfRU1JRjIJCQkJMHg0ZDAwMDAwMAorCisvKiBSZWdpc3RlcnMgc2hpZnRzIGFuZCBtYXNrcyAqLworCisvKiBFTUlGX01PRF9JRF9SRVYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1NDSEVNRV9TSElGVAkJCTMwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19TQ0hFTUVfTUFTSwkJCSgweDMgPDwgMzApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NT0RVTEVfSURfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfTU9EVUxFX0lEX01BU0sJCQkoMHhmZmYgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SVExfVkVSU0lPTl9TSElGVAkJCTExCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SVExfVkVSU0lPTl9NQVNLCQkJKDB4MWYgPDwgMTEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NQUpPUl9SRVZJU0lPTl9TSElGVAkJOAorI2RlZmluZSBPTUFQNDRYWF9SRUdfTUFKT1JfUkVWSVNJT05fTUFTSwkJKDB4NyA8PCA4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfTUlOT1JfUkVWSVNJT05fU0hJRlQJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01JTk9SX1JFVklTSU9OX01BU0sJCSgweDNmIDw8IDApCisKKy8qIFNUQVRVUyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfQkVfU0hJRlQJCQkJMzEKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0JFX01BU0sJCQkJKDEgPDwgMzEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EVUFMX0NMS19NT0RFX1NISUZUCQkzMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfRFVBTF9DTEtfTU9ERV9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19GQVNUX0lOSVRfU0hJRlQJCQkyOQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRkFTVF9JTklUX01BU0sJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1BIWV9ETExfUkVBRFlfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1BIWV9ETExfUkVBRFlfTUFTSwkJCSgxIDw8IDIpCisKKy8qIFNEUkFNX0NPTkZJRyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfU0RSQU1fVFlQRV9TSElGVAkJCTI5CisjZGVmaW5lIE9NQVA0NFhYX1JFR19TRFJBTV9UWVBFX01BU0sJCQkoMHg3IDw8IDI5KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfSUJBTktfUE9TX1NISUZUCQkJMjcKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0lCQU5LX1BPU19NQVNLCQkJKDB4MyA8PCAyNykKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9URVJNX1NISUZUCQkJMjQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9URVJNX01BU0sJCQkoMHg3IDw8IDI0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSMl9ERFFTX1NISUZUCQkJMjMKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUjJfRERRU19NQVNLCQkJKDEgPDwgMjMpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EWU5fT0RUX1NISUZUCQkJMjEKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0RZTl9PRFRfTUFTSwkJCSgweDMgPDwgMjEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfRElTQUJMRV9ETExfU0hJRlQJCTIwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfRElTQUJMRV9ETExfTUFTSwkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19TRFJBTV9EUklWRV9TSElGVAkJCTE4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19TRFJBTV9EUklWRV9NQVNLCQkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NXTF9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1dMX01BU0sJCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05BUlJPV19NT0RFX1NISUZUCQkJMTQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05BUlJPV19NT0RFX01BU0sJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ0xfU0hJRlQJCQkJMTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NMX01BU0sJCQkJKDB4ZiA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JPV1NJWkVfU0hJRlQJCQk3CisjZGVmaW5lIE9NQVA0NFhYX1JFR19ST1dTSVpFX01BU0sJCQkoMHg3IDw8IDcpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19JQkFOS19TSElGVAkJCTQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0lCQU5LX01BU0sJCQkJKDB4NyA8PCA0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRUJBTktfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FQkFOS19NQVNLCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19QQUdFU0laRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1BBR0VTSVpFX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIFNEUkFNX0NPTkZJR18yICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DUzFOVk1FTl9TSElGVAkJCTMwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DUzFOVk1FTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FQkFOS19QT1NfU0hJRlQJCQkyNworI2RlZmluZSBPTUFQNDRYWF9SRUdfRUJBTktfUE9TX01BU0sJCQkoMSA8PCAyNykKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQk5VTV9TSElGVAkJCTQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQk5VTV9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkRCU0laRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQlNJWkVfTUFTSwkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fUkVGX0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0lOSVRSRUZfRElTX1NISUZUCQkJMzEKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0lOSVRSRUZfRElTX01BU0sJCQkoMSA8PCAzMSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1NSVF9TSElGVAkJCQkyOQorI2RlZmluZSBPTUFQNDRYWF9SRUdfU1JUX01BU0sJCQkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19BU1JfU0hJRlQJCQkJMjgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0FTUl9NQVNLCQkJCSgxIDw8IDI4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUEFTUl9TSElGVAkJCQkyNAorI2RlZmluZSBPTUFQNDRYWF9SRUdfUEFTUl9NQVNLCQkJCSgweDcgPDwgMjQpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUZSRVNIX1JBVEVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUZSRVNIX1JBVEVfTUFTSwkJCSgweGZmZmYgPDwgMCkKKworLyogU0RSQU1fUkVGX0NUUkxfU0hEVyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVGUkVTSF9SQVRFX1NIRFdfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFRlJFU0hfUkFURV9TSERXX01BU0sJCSgweGZmZmYgPDwgMCkKKworLyogU0RSQU1fVElNXzEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlBfU0hJRlQJCQkJMjUKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlBfTUFTSwkJCQkoMHhmIDw8IDI1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfU0hJRlQJCQkyMQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfTUFTSwkJCQkoMHhmIDw8IDIxKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XUl9TSElGVAkJCQkxNworI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XUl9NQVNLCQkJCSgweGYgPDwgMTcpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19TSElGVAkJCTEyCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVNLCQkJCSgweDFmIDw8IDEyKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ19TSElGVAkJCQk2CisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDX01BU0sJCQkJKDB4M2YgPDwgNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlJEX1NISUZUCQkJMworI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUkRfTUFTSwkJCQkoMHg3IDw8IDMpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1dUUl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1RSX01BU0sJCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9USU1fMV9TSERXICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JQX1NIRFdfU0hJRlQJCQkyNQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUF9TSERXX01BU0sJCQkoMHhmIDw8IDI1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfU0hEV19TSElGVAkJCTIxCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDRF9TSERXX01BU0sJCQkoMHhmIDw8IDIxKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XUl9TSERXX1NISUZUCQkJMTcKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1JfU0hEV19NQVNLCQkJKDB4ZiA8PCAxNykKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkFTX1NIRFdfU0hJRlQJCQkxMgorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfU0hEV19NQVNLCQkJKDB4MWYgPDwgMTIpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDX1NIRFdfU0hJRlQJCQk2CisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JDX1NIRFdfTUFTSwkJCSgweDNmIDw8IDYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JSRF9TSERXX1NISUZUCQkJMworI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUkRfU0hEV19NQVNLCQkJKDB4NyA8PCAzKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XVFJfU0hEV19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1RSX1NIRFdfTUFTSwkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fVElNXzIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFBfU0hJRlQJCQkJMjgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFBfTUFTSwkJCQkoMHg3IDw8IDI4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfU0hJRlQJCQkyNQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfTUFTSwkJCQkoMHg3IDw8IDI1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU05SX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNOUl9NQVNLCQkJKDB4MWZmIDw8IDE2KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU1JEX1NISUZUCQkJNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU1JEX01BU0sJCQkoMHgzZmYgPDwgNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlRQX1NISUZUCQkJMworI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SVFBfTUFTSwkJCQkoMHg3IDw8IDMpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFX01BU0sJCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9USU1fMl9TSERXICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1hQX1NIRFdfU0hJRlQJCQkyOAorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YUF9TSERXX01BU0sJCQkoMHg3IDw8IDI4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfU0hEV19TSElGVAkJCTI1CisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX09EVF9TSERXX01BU0sJCQkoMHg3IDw8IDI1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU05SX1NIRFdfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU05SX1NIRFdfTUFTSwkJCSgweDFmZiA8PCAxNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNSRF9TSERXX1NISUZUCQkJNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YU1JEX1NIRFdfTUFTSwkJCSgweDNmZiA8PCA2KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SVFBfU0hEV19TSElGVAkJCTMKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlRQX1NIRFdfTUFTSwkJCSgweDcgPDwgMykKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFX1NIRFdfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRV9TSERXX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIFNEUkFNX1RJTV8zICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRVNSX1NISUZUCQkJMjEKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFU1JfTUFTSwkJCSgweDcgPDwgMjEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNTX1NISUZUCQkJMTUKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ1NfTUFTSwkJCSgweDNmIDw8IDE1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfU0hJRlQJCQkxMworI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfTUFTSwkJCSgweDMgPDwgMTMpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JGQ19TSElGVAkJCTQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkZDX01BU0sJCQkJKDB4MWZmIDw8IDQpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfTUFTSwkJCSgweGYgPDwgMCkKKworLyogU0RSQU1fVElNXzNfU0hEVyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9DS0VTUl9TSERXX1NISUZUCQkJMjEKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFU1JfU0hEV19NQVNLCQkJKDB4NyA8PCAyMSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ1NfU0hEV19TSElGVAkJCTE1CisjZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNTX1NIRFdfTUFTSwkJCSgweDNmIDw8IDE1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfU0hEV19TSElGVAkJMTMKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfVERRU0NLTUFYX1NIRFdfTUFTSwkJKDB4MyA8PCAxMykKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkZDX1NIRFdfU0hJRlQJCQk0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JGQ19TSERXX01BU0sJCQkoMHgxZmYgPDwgNCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkFTX01BWF9TSERXX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfU0hEV19NQVNLCQkoMHhmIDw8IDApCisKKy8qIExQRERSMl9OVk1fVElNICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9TSElGVAkJCTI4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9NQVNLCQkJKDB4NyA8PCAyOCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dUUl9TSElGVAkJCTI0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XVFJfTUFTSwkJCSgweDcgPDwgMjQpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUF9TSElGVAkJCTIwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUF9NQVNLCQkJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dSQV9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XUkFfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUkRfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUkRfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fTUFTSwkJCSgweGZmIDw8IDApCisKKy8qIExQRERSMl9OVk1fVElNX1NIRFcgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1hQX1NIRFdfU0hJRlQJCTI4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9TSERXX01BU0sJCQkoMHg3IDw8IDI4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfV1RSX1NIRFdfU0hJRlQJCTI0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XVFJfU0hEV19NQVNLCQkoMHg3IDw8IDI0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlBfU0hEV19TSElGVAkJMjAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1JQX1NIRFdfTUFTSwkJCSgweGYgPDwgMjApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XUkFfU0hEV19TSElGVAkJMTYKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dSQV9TSERXX01BU0sJCSgweGYgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUkRfU0hEV19TSElGVAkJOAorI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlJEX1NIRFdfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1JDRE1JTl9TSERXX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fU0hEV19NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBQV1JfTUdNVF9DVFJMICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19JRExFTU9ERV9TSElGVAkJCTMwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19JRExFTU9ERV9NQVNLCQkJKDB4MyA8PCAzMCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVA0NFhYX1JFR19QRF9USU1fTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EUERfRU5fU0hJRlQJCQkxMQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRFBEX0VOX01BU0sJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0xQX01PREVfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19MUF9NT0RFX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19TUl9USU1fU0hJRlQJCQk0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19TUl9USU1fTUFTSwkJCSgweGYgPDwgNCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9NQVNLCQkJKDB4ZiA8PCAwKQorCisvKiBQV1JfTUdNVF9DVFJMX1NIRFcgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX1NISUZUCQkJOAorI2RlZmluZSBPTUFQNDRYWF9SRUdfUERfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1NSX1RJTV9TSERXX1NISUZUCQkJNAorI2RlZmluZSBPTUFQNDRYWF9SRUdfU1JfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgNCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSERXX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1NfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgMCkKKworLyogTFBERFIyX01PREVfUkVHX0RBVEEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1ZBTFVFXzBfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19WQUxVRV8wX01BU0sJCQkoMHg3ZiA8PCAwKQorCisvKiBMUEREUjJfTU9ERV9SRUdfQ0ZHICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DU19TSElGVAkJCQkzMQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1NfTUFTSwkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFRlJFU0hfRU5fU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVGUkVTSF9FTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19BRERSRVNTX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfQUREUkVTU19NQVNLCQkJKDB4ZmYgPDwgMCkKKworLyogT0NQX0NPTkZJRyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfU1lTX1RIUkVTSF9NQVhfU0hJRlQJCTI0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19TWVNfVEhSRVNIX01BWF9NQVNLCQkoMHhmIDw8IDI0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfTVBVX1RIUkVTSF9NQVhfU0hJRlQJCTIwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NUFVfVEhSRVNIX01BWF9NQVNLCQkoMHhmIDw8IDIwKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfTExfVEhSRVNIX01BWF9TSElGVAkJMTYKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0xMX1RIUkVTSF9NQVhfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19QUl9PTERfQ09VTlRfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19QUl9PTERfQ09VTlRfTUFTSwkJCSgweGZmIDw8IDApCisKKy8qIE9DUF9DRkdfVkFMXzEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1NZU19CVVNfV0lEVEhfU0hJRlQJCTMwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19TWVNfQlVTX1dJRFRIX01BU0sJCQkoMHgzIDw8IDMwKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfTExfQlVTX1dJRFRIX1NISUZUCQkJMjgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0xMX0JVU19XSURUSF9NQVNLCQkJKDB4MyA8PCAyOCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1dSX0ZJRk9fREVQVEhfU0hJRlQJCTgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1dSX0ZJRk9fREVQVEhfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DTURfRklGT19ERVBUSF9TSElGVAkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ01EX0ZJRk9fREVQVEhfTUFTSwkJKDB4ZmYgPDwgMCkKKworLyogT0NQX0NGR19WQUxfMiAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfUlJFR19GSUZPX0RFUFRIX1NISUZUCQkxNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfUlJFR19GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUlNEX0ZJRk9fREVQVEhfU0hJRlQJCTgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JTRF9GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SQ01EX0ZJRk9fREVQVEhfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JDTURfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBJT0RGVF9UTEdDICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UTEVDX1NISUZUCQkJCTE2CisjZGVmaW5lIE9NQVA0NFhYX1JFR19UTEVDX01BU0sJCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01UX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19NVF9NQVNLCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQUNUX0NBUF9FTl9TSElGVAkJCTEzCisjZGVmaW5lIE9NQVA0NFhYX1JFR19BQ1RfQ0FQX0VOX01BU0sJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX09QR19MRF9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVA0NFhYX1JFR19PUEdfTERfTUFTSwkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVTRVRfUEhZX1NISUZUCQkJMTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFU0VUX1BIWV9NQVNLCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NTVNfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQNDRYWF9SRUdfTU1TX01BU0sJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01DX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01DX01BU0sJCQkJKDB4MyA8PCA0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUENfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUENfTUFTSwkJCQkoMHg3IDw8IDEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UTV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UTV9NQVNLCQkJCSgxIDw8IDApCisKKy8qIElPREZUX0NUUkxfTUlTUl9SU0xUICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EUU1fVExNUl9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVA0NFhYX1JFR19EUU1fVExNUl9NQVNLCQkJKDB4M2ZmIDw8IDE2KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1RMX1RMTVJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DVExfVExNUl9NQVNLCQkJKDB4N2ZmIDw8IDApCisKKy8qIElPREZUX0FERFJfTUlTUl9SU0xUICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19BRERSX1RMTVJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19BRERSX1RMTVJfTUFTSwkJCSgweDFmZmZmZiA8PCAwKQorCisvKiBJT0RGVF9EQVRBX01JU1JfUlNMVF8xICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EQVRBX1RMTVJfMzFfMF9TSElGVAkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzMxXzBfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogSU9ERlRfREFUQV9NSVNSX1JTTFRfMiAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzYzXzMyX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EQVRBX1RMTVJfNjNfMzJfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogSU9ERlRfREFUQV9NSVNSX1JTTFRfMyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzY2XzY0X1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19EQVRBX1RMTVJfNjZfNjRfTUFTSwkJKDB4NyA8PCAwKQorCisvKiBQRVJGX0NOVF8xICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DT1VOVEVSMV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NPVU5URVIxX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBQRVJGX0NOVF8yICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DT1VOVEVSMl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NPVU5URVIyX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBQRVJGX0NOVF9DRkcgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX01DT05OSURfRU5fU0hJRlQJCTMxCisjZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMl9NQ09OTklEX0VOX01BU0sJCSgxIDw8IDMxKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfUkVHSU9OX0VOX1NISUZUCQkzMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfUkVHSU9OX0VOX01BU0sJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfQ0ZHX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX0NGR19NQVNLCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIxX01DT05OSURfRU5fU0hJRlQJCTE1CisjZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMV9NQ09OTklEX0VOX01BU0sJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfUkVHSU9OX0VOX1NISUZUCQkxNAorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfUkVHSU9OX0VOX01BU0sJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfQ0ZHX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfQ0ZHX01BU0sJCQkoMHhmIDw8IDApCisKKy8qIFBFUkZfQ05UX1NFTCAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRDJfU0hJRlQJCQkyNAorI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRDJfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDJfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDJfTUFTSwkJCSgweDMgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NQ09OTklEMV9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01DT05OSUQxX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDFfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUdJT05fU0VMMV9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBQRVJGX0NOVF9USU0gKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RPVEFMX1RJTUVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UT1RBTF9USU1FX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBSRUFEX0lETEVfQ1RSTCAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSElGVAkJMTYKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9MRU5fTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9NQVNLCQkoMHgxZmYgPDwgMCkKKworLyogUkVBRF9JRExFX0NUUkxfU0hEVyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSERXX1NISUZUCQkxNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSERXX01BU0sJCSgweGYgPDwgMTYpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hEV19TSElGVAkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hEV19NQVNLCSgweDFmZiA8PCAwKQorCisvKiBJUlFfRU9JICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FT0lfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfRU9JX01BU0sJCQkJKDEgPDwgMCkKKworLyogSVJRU1RBVFVTX1JBV19TWVMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0ROVl9TWVNfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVA0NFhYX1JFR19ETlZfU1lTX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfU1lTX1NISUZUCQkJMQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfU1lTX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRVJSX1NZU19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0VSUl9TWVNfTUFTSwkJCSgxIDw8IDApCisKKy8qIElSUVNUQVRVU19SQVdfTEwgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0ROVl9MTF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0ROVl9MTF9NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0xMX1NISUZUCQkJMQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfTExfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRVJSX0xMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfRVJSX0xMX01BU0sJCQkoMSA8PCAwKQorCisvKiBJUlFTVEFUVVNfU1lTICovCisKKy8qIElSUVNUQVRVU19MTCAqLworCisvKiBJUlFFTkFCTEVfU0VUX1NZUyAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRE5WX1NZU19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0ROVl9TWVNfTUFTSwkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9UQV9TWVNfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9UQV9TWVNfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9FUlJfU1lTX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRVJSX1NZU19NQVNLCQkJKDEgPDwgMCkKKworLyogSVJRRU5BQkxFX1NFVF9MTCAqLworI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRE5WX0xMX1NISUZUCQkJMgorI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRE5WX0xMX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fVEFfTExfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9UQV9MTF9NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0VSUl9MTF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0VSUl9MTF9NQVNLCQkJKDEgPDwgMCkKKworLyogSVJRRU5BQkxFX0NMUl9TWVMgKi8KKworLyogSVJRRU5BQkxFX0NMUl9MTCAqLworCisvKiBaUV9DT05GSUcgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMUVOX1NISUZUCQkJMzEKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMUVOX01BU0sJCQkoMSA8PCAzMSkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMEVOX1NISUZUCQkJMzAKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0NTMEVOX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX0RVQUxDQUxFTl9TSElGVAkJCTI5CisjZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9EVUFMQ0FMRU5fTUFTSwkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfU0ZFWElURU5fU0hJRlQJCQkyOAorI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfU0ZFWElURU5fTUFTSwkJCSgxIDw8IDI4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFJTklUX01VTFRfU0hJRlQJCTE4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUlOSVRfTVVMVF9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFDTF9NVUxUX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ0xfTVVMVF9NQVNLCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1JFRklOVEVSVkFMX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9SRUZJTlRFUlZBTF9NQVNLCQkoMHhmZmZmIDw8IDApCisKKy8qIFRFTVBfQUxFUlRfQ09ORklHICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzFFTl9TSElGVAkJCTMxCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzFFTl9NQVNLCQkJKDEgPDwgMzEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzBFTl9TSElGVAkJCTMwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9DUzBFTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9TRkVYSVRFTl9TSElGVAkJCTI4CisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9TRkVYSVRFTl9NQVNLCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9ERVZXRFRfU0hJRlQJCQkyNgorI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfREVWV0RUX01BU0sJCQkoMHgzIDw8IDI2KQorI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfREVWQ05UX1NISUZUCQkJMjQKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0RFVkNOVF9NQVNLCQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX1JFRklOVEVSVkFMX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9SRUZJTlRFUlZBTF9NQVNLCQkoMHgzZmZmZmYgPDwgMCkKKworLyogT0NQX0VSUl9MT0cgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01BRERSU1BBQ0VfU0hJRlQJCQkxNAorI2RlZmluZSBPTUFQNDRYWF9SRUdfTUFERFJTUEFDRV9NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01CVVJTVFNFUV9TSElGVAkJCTExCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NQlVSU1RTRVFfTUFTSwkJCSgweDcgPDwgMTEpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NQ01EX1NISUZUCQkJCTgKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX01DTURfTUFTSwkJCQkoMHg3IDw8IDgpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19NQ09OTklEX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRF9NQVNLCQkJKDB4ZmYgPDwgMCkKKworLyogRERSX1BIWV9DVFJMXzEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9QSFlfQ1RSTF8xX1NISUZUCQk0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9NQVNLCQkoMHhmZmZmZmZmIDw8IDQpCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfTUFTSwkJCSgweGYgPDwgMCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9TSElGVAkJNAorI2RlZmluZSBPTUFQNDRYWF9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX01BU0sJCSgweEZGIDw8IDQpCisjZGVmaW5lIE9NQVA0NFhYX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hJRlQJMTIKKyNkZWZpbmUgT01BUDQ0WFhfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9NQVNLCSgweEZGRkZGIDw8IDEyKQorCisvKiBERFJfUEhZX0NUUkxfMV9TSERXICovCisjZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9TSERXX1NISUZUCQk0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9TSERXX01BU0sJCSgweGZmZmZmZmYgPDwgNCkKKyNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfTEFURU5DWV9TSERXX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfU0hEV19NQVNLCQkoMHhmIDw8IDApCisjZGVmaW5lIE9NQVA0NFhYX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hEV19TSElGVAk0CisjZGVmaW5lIE9NQVA0NFhYX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hEV19NQVNLCSgweEZGIDw8IDQpCisjZGVmaW5lIE9NQVA0NFhYX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfU0hEV19TSElGVCAxMgorI2RlZmluZSBPTUFQNDRYWF9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NIRFdfTUFTSwkoMHhGRkZGRiA8PCAxMikKKworLyogRERSX1BIWV9DVFJMXzIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUl9QSFlfQ1RSTF8yX1NISUZUCQkwCisjZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMl9NQVNLCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBETU0gKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1NX0xJU0FfTUFQX0JBU0UJMHg0RTAwMDA0MAorCisvKiBNZW1vcnkgQWRhcHRlciAoNDQ2MCBvbndhcmRzKSAqLworI2RlZmluZSBPTUFQNDRYWF9NQV9MSVNBX01BUF9CQVNFCQkweDQ4MkFGMDQwCisKKy8qIERNTV9MSVNBX01BUCAqLworI2RlZmluZSBPTUFQNDRYWF9TWVNfQUREUl9TSElGVAkJMjQKKyNkZWZpbmUgT01BUDQ0WFhfU1lTX0FERFJfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIE9NQVA0NFhYX1NZU19TSVpFX1NISUZUCQkyMAorI2RlZmluZSBPTUFQNDRYWF9TWVNfU0laRV9NQVNLCQkoMHg3IDw8IDIwKQorI2RlZmluZSBPTUFQNDRYWF9TRFJDX0lOVExfU0hJRlQJMTgKKyNkZWZpbmUgT01BUDQ0WFhfU0RSQ19JTlRMX01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lIE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVAkxNgorI2RlZmluZSBPTUFQNDRYWF9TRFJDX0FERFJTUENfTUFTSwkoMHgzIDw8IDE2KQorI2RlZmluZSBPTUFQNDRYWF9TRFJDX01BUF9TSElGVAkJOAorI2RlZmluZSBPTUFQNDRYWF9TRFJDX01BUF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lIE9NQVA0NFhYX1NEUkNfQUREUl9TSElGVAkwCisjZGVmaW5lIE9NQVA0NFhYX1NEUkNfQUREUl9NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBETU1fTElTQV9NQVAgZmllbGRzICovCisjZGVmaW5lIERNTV9TRFJDX01BUF9VTk1BUFBFRAkJMAorI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjFfT05MWQkJMQorI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjJfT05MWQkJMgorI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjFfQU5EX0VNSUYyCTMKKworI2RlZmluZSBETU1fU0RSQ19JTlRMX05PTkUJCTAKKyNkZWZpbmUgRE1NX1NEUkNfSU5UTF8xMjhCCQkxCisjZGVmaW5lIERNTV9TRFJDX0lOVExfMjU2QgkJMgorI2RlZmluZSBETU1fU0RSQ19JTlRMXzUxMgkJMworCisjZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX1NEUkFNCQkwCisjZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX05WTQkJMQorI2RlZmluZSBETU1fU0RSQ19BRERSX1NQQ19JTlZBTElECTIKKworI2RlZmluZSBETU1fTElTQV9NQVBfSU5URVJMRUFWRURfQkFTRV9WQUwJCShcCisJKERNTV9TRFJDX01BUF9FTUlGMV9BTkRfRU1JRjIgPDwgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQpIHxcCisJKERNTV9TRFJDX0FERFJfU1BDX1NEUkFNIDw8IE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVCkgfFwKKwkoRE1NX1NEUkNfSU5UTF8xMjhCIDw8IE9NQVA0NFhYX1NEUkNfSU5UTF9TSElGVCkgfFwKKwkoQ09ORklHX1NZU19TRFJBTV9CQVNFIDw8IE9NQVA0NFhYX1NZU19BRERSX1NISUZUKSkKKworI2RlZmluZSBETU1fTElTQV9NQVBfRU1JRjFfT05MWV9CQVNFX1ZBTAkoXAorCShETU1fU0RSQ19NQVBfRU1JRjFfT05MWSA8PCBPTUFQNDRYWF9TRFJDX01BUF9TSElGVCl8XAorCShETU1fU0RSQ19BRERSX1NQQ19TRFJBTSA8PCBPTUFQNDRYWF9TRFJDX0FERFJTUENfU0hJRlQpfFwKKwkoRE1NX1NEUkNfSU5UTF9OT05FIDw8IE9NQVA0NFhYX1NEUkNfSU5UTF9TSElGVCkpCisKKyNkZWZpbmUgRE1NX0xJU0FfTUFQX0VNSUYyX09OTFlfQkFTRV9WQUwJKFwKKwkoRE1NX1NEUkNfTUFQX0VNSUYyX09OTFkgPDwgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQpfFwKKwkoRE1NX1NEUkNfQUREUl9TUENfU0RSQU0gPDwgT01BUDQ0WFhfU0RSQ19BRERSU1BDX1NISUZUKXxcCisJKERNTV9TRFJDX0lOVExfTk9ORSA8PCBPTUFQNDRYWF9TRFJDX0lOVExfU0hJRlQpKQorCisvKiBUcmFwIGZvciBpbnZhbGlkIFRJTEVSIFBBVCBlbnRyaWVzICovCisjZGVmaW5lIERNTV9MSVNBX01BUF8wX0lOVkFMX0FERFJfVFJBUAkJKFwKKwkoMCAgPDwgT01BUDQ0WFhfU0RSQ19BRERSX1NISUZUKSB8XAorCShETU1fU0RSQ19NQVBfRU1JRjFfT05MWSA8PCBPTUFQNDRYWF9TRFJDX01BUF9TSElGVCl8XAorCShETU1fU0RSQ19BRERSX1NQQ19JTlZBTElEIDw8IE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVCl8XAorCShETU1fU0RSQ19JTlRMX05PTkUgPDwgT01BUDQ0WFhfU0RSQ19JTlRMX1NISUZUKXxcCisJKDB4RkYgPDwgT01BUDQ0WFhfU1lTX0FERFJfU0hJRlQpKQorCisKKy8qIFJlZyBtYXBwaW5nIHN0cnVjdHVyZSAqLworc3RydWN0IGVtaWZfcmVnX3N0cnVjdCB7CisJdTMyIGVtaWZfbW9kX2lkX3JldjsKKwl1MzIgZW1pZl9zdGF0dXM7CisJdTMyIGVtaWZfc2RyYW1fY29uZmlnOworCXUzMiBlbWlmX2xwZGRyMl9udm1fY29uZmlnOworCXUzMiBlbWlmX3NkcmFtX3JlZl9jdHJsOworCXUzMiBlbWlmX3NkcmFtX3JlZl9jdHJsX3NoZHc7CisJdTMyIGVtaWZfc2RyYW1fdGltXzE7CisJdTMyIGVtaWZfc2RyYW1fdGltXzFfc2hkdzsKKwl1MzIgZW1pZl9zZHJhbV90aW1fMjsKKwl1MzIgZW1pZl9zZHJhbV90aW1fMl9zaGR3OworCXUzMiBlbWlmX3NkcmFtX3RpbV8zOworCXUzMiBlbWlmX3NkcmFtX3RpbV8zX3NoZHc7CisJdTMyIGVtaWZfbHBkZHIyX252bV90aW07CisJdTMyIGVtaWZfbHBkZHIyX252bV90aW1fc2hkdzsKKwl1MzIgZW1pZl9wd3JfbWdtdF9jdHJsOworCXUzMiBlbWlmX3B3cl9tZ210X2N0cmxfc2hkdzsKKwl1MzIgZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YTsKKwl1MzIgcGFkZGluZzFbMV07CisJdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGFfZXMyOworCXUzMiBwYWRkaW5nMTFbMV07CisJdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZzsKKwl1MzIgZW1pZl9sM19jb25maWc7CisJdTMyIGVtaWZfbDNfY2ZnX3ZhbF8xOworCXUzMiBlbWlmX2wzX2NmZ192YWxfMjsKKwl1MzIgZW1pZl9pb2RmdF90bGdjOworCXUzMiBwYWRkaW5nMls3XTsKKwl1MzIgZW1pZl9wZXJmX2NudF8xOworCXUzMiBlbWlmX3BlcmZfY250XzI7CisJdTMyIGVtaWZfcGVyZl9jbnRfY2ZnOworCXUzMiBlbWlmX3BlcmZfY250X3NlbDsKKwl1MzIgZW1pZl9wZXJmX2NudF90aW07CisJdTMyIHBhZGRpbmczOworCXUzMiBlbWlmX3JlYWRfaWRsZWN0cmw7CisJdTMyIGVtaWZfcmVhZF9pZGxlY3RybF9zaGR3OworCXUzMiBwYWRkaW5nNDsKKwl1MzIgZW1pZl9pcnFzdGF0dXNfcmF3X3N5czsKKwl1MzIgZW1pZl9pcnFzdGF0dXNfcmF3X2xsOworCXUzMiBlbWlmX2lycXN0YXR1c19zeXM7CisJdTMyIGVtaWZfaXJxc3RhdHVzX2xsOworCXUzMiBlbWlmX2lycWVuYWJsZV9zZXRfc3lzOworCXUzMiBlbWlmX2lycWVuYWJsZV9zZXRfbGw7CisJdTMyIGVtaWZfaXJxZW5hYmxlX2Nscl9zeXM7CisJdTMyIGVtaWZfaXJxZW5hYmxlX2Nscl9sbDsKKwl1MzIgcGFkZGluZzU7CisJdTMyIGVtaWZfenFfY29uZmlnOworCXUzMiBlbWlmX3RlbXBfYWxlcnRfY29uZmlnOworCXUzMiBlbWlmX2wzX2Vycl9sb2c7CisJdTMyIHBhZGRpbmc2WzRdOworCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8xOworCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8xX3NoZHc7CisJdTMyIGVtaWZfZGRyX3BoeV9jdHJsXzI7Cit9OworCitzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgeworCXUzMiBkbW1fbGlzYV9tYXBfMDsKKwl1MzIgZG1tX2xpc2FfbWFwXzE7CisJdTMyIGRtbV9saXNhX21hcF8yOworCXUzMiBkbW1fbGlzYV9tYXBfMzsKK307CisKK3N0cnVjdCBjb250cm9sX2xwZGRyMmlvX3JlZ3MgeworCXUzMiBjb250cm9sX2xwZGRyMmlvMV8wOworCXUzMiBjb250cm9sX2xwZGRyMmlvMV8xOworCXUzMiBjb250cm9sX2xwZGRyMmlvMV8yOworCXUzMiBjb250cm9sX2xwZGRyMmlvMV8zOworCXUzMiBjb250cm9sX2xwZGRyMmlvMl8wOworCXUzMiBjb250cm9sX2xwZGRyMmlvMl8xOworCXUzMiBjb250cm9sX2xwZGRyMmlvMl8yOworCXUzMiBjb250cm9sX2xwZGRyMmlvMl8zOworfTsKKworI2RlZmluZSBDUzAJMAorI2RlZmluZSBDUzEJMQorLyogVGhlIG1heGltdW0gZnJlcXVlbmN5IGF0IHdoaWNoIHRoZSBMUEREUjIgaW50ZXJmYWNlIGNhbiBvcGVyYXRlIGluIEh6Ki8KKyNkZWZpbmUgTUFYX0xQRERSMl9GUkVRCTQwMDAwMDAwMAkvKiA0MDAgTUh6ICovCisKKy8qCisgKiBUaGUgcGVyaW9kIG9mIEREUiBjbGsgaXMgcmVwcmVzZW50ZWQgYXMgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBmb3IKKyAqIGJldHRlciBhY2N1cmFjeSBpbiBpbnRlZ2VyIGJhc2VkIGNhbGN1bGF0aW9ucy4gSG93ZXZlciwgaWYgdGhlIG51bWVyYXRvcgorICogYW5kIGRlbm9taW5hdG9yIGFyZSB2ZXJ5IGh1Z2UgdGhlcmUgbWF5IGJlIGNoYW5jZXMgb2Ygb3ZlcmZsb3cgaW4KKyAqIGNhbGN1bGF0aW9ucy4gU28sIGFzIGEgdHJhZGUtb2ZmIGtlZXAgZGVub21pbmF0b3IoYW5kIGNvbnNlcXVlbnRseQorICogbnVtZXJhdG9yKSB3aXRoaW4gYSBsaW1pdCBzYWNyaWZpY2luZyBzb21lIGFjY3VyYWN5IC0gYnV0IG5vdCBtdWNoCisgKiBJZiBkZW5vbWluYXRvciBhbmQgbnVtZXJhdG9yIGFyZSBhbHJlYWR5IHNtYWxsIChzdWNoIGFzIGF0IDQwMCBNSHopCisgKiBubyBhZGp1c3RtZW50IGlzIG5lZWRlZAorICovCisjZGVmaW5lIEVNSUZfUEVSSU9EX0RFTl9MSU1JVAkxMDAwCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgZGlmZmVyZW50IGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSBFTUlGIGRyaXZlcgorICogRGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBvaW50ZXIgYXJyYXkgZm9yIHJlZ2lzdGVyCisgKiBjYWNoZQorICovCisjZGVmaW5lIEVNSUZfTUFYX05VTV9GUkVRVUVOQ0lFUwk2CisvKgorICogSW5kaWNlcyBpbnRvIHRoZSBBZGRyZXNzaW5nIFRhYmxlIGFycmF5LgorICogT25lIGVudHJ5IGVhY2ggZm9yIGFsbCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRldmljZXMgd2l0aCBkaWZmZXJlbnQKKyAqIGFkZHJlc3Npbmcgc2NoZW1lcworICovCisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg2NE0JMAorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMTI4TQkxCisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgyNTZNCTIKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDUxMk0JMworI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMUdTNAk0CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgyR1M0CTUKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDRHCTYKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDhHCTcKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDFHUzIJOAorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMkdTMgk5CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVhNQVgJMTAKKworLyogTnVtYmVyIG9mIFJvdyBiaXRzICovCisjZGVmaW5lIFJPV185ICAwCisjZGVmaW5lIFJPV18xMCAxCisjZGVmaW5lIFJPV18xMSAyCisjZGVmaW5lIFJPV18xMiAzCisjZGVmaW5lIFJPV18xMyA0CisjZGVmaW5lIFJPV18xNCA1CisjZGVmaW5lIFJPV18xNSA2CisjZGVmaW5lIFJPV18xNiA3CisKKy8qIE51bWJlciBvZiBDb2x1bW4gYml0cyAqLworI2RlZmluZSBDT0xfOCAgIDAKKyNkZWZpbmUgQ09MXzkgICAxCisjZGVmaW5lIENPTF8xMCAgMgorI2RlZmluZSBDT0xfMTEgIDMKKyNkZWZpbmUgQ09MXzcgICA0IC8qTm90IHN1cHBvcnRlZCBieSBPTUFQIGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MgKi8KKworLyogTnVtYmVyIG9mIEJhbmtzKi8KKyNkZWZpbmUgQkFOS1MxIDAKKyNkZWZpbmUgQkFOS1MyIDEKKyNkZWZpbmUgQkFOS1M0IDIKKyNkZWZpbmUgQkFOS1M4IDMKKworLyogUmVmcmVzaCByYXRlIGluIG1pY3JvIHNlY29uZHMgeCAxMCAqLworI2RlZmluZSBUX1JFRklfMTVfNgkxNTYKKyNkZWZpbmUgVF9SRUZJXzdfOAk3OAorI2RlZmluZSBUX1JFRklfM185CTM5CisKKyNkZWZpbmUgRUJBTktfQ1MxX0RJUwkwCisjZGVmaW5lIEVCQU5LX0NTMV9FTgkxCisKKy8qIFJlYWQgTGF0ZW5jeSB1c2VkIGJ5IHRoZSBkZXZpY2UgYXQgcmVzZXQgKi8KKyNkZWZpbmUgUkxfQk9PVAkJMworLyogUmVhZCBMYXRlbmN5IGZvciB0aGUgaGlnaGVzdCBmcmVxdWVuY3kgeW91IHdhbnQgdG8gdXNlICovCisjZGVmaW5lIFJMX0ZJTkFMCTYKKworLyogSW50ZXJsZWF2aW5nIHBvbGljaWVzIGF0IEVNSUYgbGV2ZWwtIGJldHdlZW4gYmFua3MgYW5kIENoaXAgU2VsZWN0cyAqLworI2RlZmluZSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTUFYX0lOVEVSTEVBVklORwkwCisjZGVmaW5lIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWV9OT19CQU5LX0lOVEVSTEVBVklORwkzCisKKy8qCisgKiBJbnRlcmxlYXZpbmcgcG9saWN5IHRvIGJlIHVzZWQKKyAqIEN1cnJlbnRseSBzZXQgdG8gTUFYIGludGVybGVhdmluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisgKi8KKyNkZWZpbmUgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWV9NQVhfSU5URVJMRUFWSU5HCisKKy8qIFN0YXRlIG9mIHRoZSBjb3JlIHZvbHRhZ2U6CisgKiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc29tZSBwYXJhbWV0ZXJzIHN1Y2ggYXMgcmVhZCBpZGxlIGNvbnRyb2wgYW5kCisgKiBaUSBjYWxpYnJhdGlvbiB0aW1pbmdzLiBUaW1pbmdzIGFyZSBtdWNoIHN0cmljdGVyIHdoZW4gdm9sdGFnZSByYW1wCisgKiBpcyBoYXBwZW5pbmcgY29tcGFyZWQgdG8gd2hlbiB0aGUgdm9sdGFnZSBpcyBzdGFibGUuCisgKiBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0d28gc2V0cyBvZiB2YWx1ZXMgZm9yIHRoZXNlIHBhcmFtZXRlcnMgYW5kIHVzZQorICogdGhlbSBhY2NvcmRpbmdseQorICovCisjZGVmaW5lIExQRERSMl9WT0xUQUdFX1NUQUJMRQkwCisjZGVmaW5lIExQRERSMl9WT0xUQUdFX1JBTVBJTkcJMQorCisvKiBMZW5ndGggb2YgdGhlIGZvcmNlZCByZWFkIGlkbGUgcGVyaW9kIGluIHRlcm1zIG9mIGN5Y2xlcyAqLworI2RlZmluZSBFTUlGX1JFR19SRUFEX0lETEVfTEVOX1ZBTAk1CisKKy8qIEludGVydmFsIGJldHdlZW4gZm9yY2VkICdyZWFkIGlkbGVzJyAqLworLyogVG8gYmUgdXNlZCB3aGVuIHZvbHRhZ2UgaXMgY2hhbmdlZCBmb3IgRFBTL0RWRlMgLSAxdXMgKi8KKyNkZWZpbmUgUkVBRF9JRExFX0lOVEVSVkFMX0RWRlMJCSgxKjEwMDApCisvKgorICogVG8gYmUgdXNlZCB3aGVuIHZvbHRhZ2UgaXMgbm90IHNjYWxlZCBleGNlcHQgYnkgU21hcnQgUmVmbGV4CisgKiA1MHVzIC0gb3IgbWF4aW11bSB2YWx1ZSB3aWxsIGRvCisgKi8KKyNkZWZpbmUgUkVBRF9JRExFX0lOVEVSVkFMX05PUk1BTAkoNTAqMTAwMCkKKworCisvKgorICogVW5sZXNzIHZvbHRhZ2UgaXMgY2hhbmdpbmcgZHVlIHRvIERWRlMgb25lIFpRQ1MgY29tbWFuZCBldmVyeSA1MG1zIHNob3VsZAorICogYmUgZW5vdWdoLiBUaGlzIHNob3VsZSBiZSBlbm91Z2ggYWxzbyBpbiB0aGUgY2FzZSB3aGVuIHZvbHRhZ2UgaXMgY2hhbmdpbmcKKyAqIGR1ZSB0byBzbWFydC1yZWZsZXguCisgKi8KKyNkZWZpbmUgRU1JRl9aUUNTX0lOVEVSVkFMX05PUk1BTF9JTl9VUwkoNTAqMTAwMCkKKy8qCisgKiBJZiB2b2x0YWdlIGlzIGNoYW5naW5nIGR1ZSB0byBEVkZTIFpRQ1Mgc2hvdWxkIGJlIHBlcmZvcm1lZCBtb3JlCisgKiBvZnRlbihldmVyeSA1MHVzKQorICovCisjZGVmaW5lIEVNSUZfWlFDU19JTlRFUlZBTF9EVkZTX0lOX1VTCTUwCisKKy8qIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIFpRQ0wgY29tbWFuZHMgYXMgYSBtdWx0aXBsZSBvZiBaUUNTIGludGVydmFsICovCisjZGVmaW5lIFJFR19aUV9aUUNMX01VTFQJCTQKKy8qIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIFpRSU5JVCBjb21tYW5kcyBhcyBhIG11bHRpcGxlIG9mIFpRQ0wgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgUkVHX1pRX1pRSU5JVF9NVUxUCQkzCisvKiBFbmFibGUgWlEgQ2FsaWJyYXRpb24gb24gZXhpdGluZyBTZWxmLXJlZnJlc2ggKi8KKyNkZWZpbmUgUkVHX1pRX1NGRVhJVEVOX0VOQUJMRQkJMQorLyoKKyAqIFpRIENhbGlicmF0aW9uIHNpbXVsdGFuZW91c2x5IG9uIGJvdGggY2hpcC1zZWxlY3RzOgorICogTmVlZHMgb25lIGNhbGlicmF0aW9uIHJlc2lzdG9yIHBlciBDUworICogTm9uZSBvZiB0aGUgYm9hcmRzIHRoYXQgd2Uga25vdyBvZiBoYXZlIHRoaXMgY2FwYWJpbGl0eQorICogU28gZGlzYWJsZWQgYnkgZGVmYXVsdAorICovCisjZGVmaW5lIFJFR19aUV9EVUFMQ0FMRU5fRElTQUJMRQkwCisvKgorICogRW5hYmxlIFpRIENhbGlicmF0aW9uIGJ5IGRlZmF1bHQgb24gQ1MwLiBJZiB3ZSBhcmUgYXNrZWQgdG8gcHJvZ3JhbQorICogdGhlIEVNSUYgdGhlcmUgd2lsbCBiZSBzb21ldGhpbmcgY29ubmVjdGVkIHRvIENTMCBmb3Igc3VyZQorICovCisjZGVmaW5lIFJFR19aUV9DUzBFTl9FTkFCTEUJCTEKKworLyogRU1JRl9QV1JfTUdNVF9DVFJMIHJlZ2lzdGVyICovCisvKiBMb3cgcG93ZXIgbW9kZXMgKi8KKyNkZWZpbmUgTFBfTU9ERV9ESVNBQkxFCQkwCisjZGVmaW5lIExQX01PREVfQ0xPQ0tfU1RPUAkxCisjZGVmaW5lIExQX01PREVfU0VMRl9SRUZSRVNICTIKKyNkZWZpbmUgTFBfTU9ERV9QV1JfRE4JCTMKKworLyogUkVHX0RQRF9FTiAqLworI2RlZmluZSBEUERfRElTQUJMRQkwCisjZGVmaW5lIERQRF9FTkFCTEUJMQorCisvKiBNYXhpbXVtIGRlbGF5IGJlZm9yZSBMb3cgUG93ZXIgTW9kZXMgKi8KKyNkZWZpbmUgUkVHX0NTX1RJTQkJMHhGCisjZGVmaW5lIFJFR19TUl9USU0JCTB4RgorI2RlZmluZSBSRUdfUERfVElNCQkweEYKKworLyogRU1JRl9QV1JfTUdNVF9DVFJMIHJlZ2lzdGVyICovCisjZGVmaW5lIEVNSUZfUFdSX01HTVRfQ1RSTCAoXAorCSgoUkVHX0NTX1RJTSA8PCBPTUFQNDRYWF9SRUdfQ1NfVElNX1NISUZUKSAmIE9NQVA0NFhYX1JFR19DU19USU1fTUFTSyl8XAorCSgoUkVHX1NSX1RJTSA8PCBPTUFQNDRYWF9SRUdfU1JfVElNX1NISUZUKSAmIE9NQVA0NFhYX1JFR19TUl9USU1fTUFTSyl8XAorCSgoUkVHX1BEX1RJTSA8PCBPTUFQNDRYWF9SRUdfUERfVElNX1NISUZUKSAmIE9NQVA0NFhYX1JFR19QRF9USU1fTUFTSyl8XAorCSgoUkVHX1BEX1RJTSA8PCBPTUFQNDRYWF9SRUdfUERfVElNX1NISUZUKSAmIE9NQVA0NFhYX1JFR19QRF9USU1fTUFTSyl8XAorCSgoTFBfTU9ERV9ESVNBQkxFIDw8IE9NQVA0NFhYX1JFR19MUF9NT0RFX1NISUZUKVwKKwkJCSYgT01BUDQ0WFhfUkVHX0xQX01PREVfTUFTSykgfFwKKwkoKERQRF9ESVNBQkxFIDw8IE9NQVA0NFhYX1JFR19EUERfRU5fU0hJRlQpXAorCQkJJiBPTUFQNDRYWF9SRUdfRFBEX0VOX01BU0spKVwKKworI2RlZmluZSBFTUlGX1BXUl9NR01UX0NUUkxfU0hEVyAoXAorCSgoUkVHX0NTX1RJTSA8PCBPTUFQNDRYWF9SRUdfQ1NfVElNX1NIRFdfU0hJRlQpXAorCQkJJiBPTUFQNDRYWF9SRUdfQ1NfVElNX1NIRFdfTUFTSykgfFwKKwkoKFJFR19TUl9USU0gPDwgT01BUDQ0WFhfUkVHX1NSX1RJTV9TSERXX1NISUZUKVwKKwkJCSYgT01BUDQ0WFhfUkVHX1NSX1RJTV9TSERXX01BU0spIHxcCisJKChSRUdfUERfVElNIDw8IE9NQVA0NFhYX1JFR19QRF9USU1fU0hEV19TSElGVClcCisJCQkmIE9NQVA0NFhYX1JFR19QRF9USU1fU0hEV19NQVNLKSB8XAorCSgoUkVHX1BEX1RJTSA8PCBPTUFQNDRYWF9SRUdfUERfVElNX1NIRFdfU0hJRlQpXAorCQkJJiBPTUFQNDRYWF9SRUdfUERfVElNX1NIRFdfTUFTSykpCisKKy8qIEVNSUZfTDNfQ09ORklHIHJlZ2lzdGVyIHZhbHVlICovCisjZGVmaW5lIEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTExfMAkweDBBMDAwMEZGCisjZGVmaW5lIEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTVBVXzNfTExfMAkweDBBMzAwMDAwCisvKgorICogVmFsdWUgb2YgYml0cyAxMjozMSBvZiBERFJfUEhZX0NUUkxfMSByZWdpc3RlcjoKKyAqIEFsbCB0aGVzZSBmaWVsZHMgaGF2ZSBtYWdpYyB2YWx1ZXMgZGVwZW5kZW50IG9uIGZyZXF1ZW5jeSBhbmQKKyAqIGRldGVybWluZWQgYnkgUEhZIGFuZCBETEwgaW50ZWdyYXRpb24gd2l0aCBFTUlGLiBTZXR0aW5nIHRoZSBtYWdpYworICogdmFsdWVzIHN1Z2dlc3RlZCBieSBodyB0ZWFtLgorICovCisjZGVmaW5lIEVNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUwJCQkweDA0OUZGCisjZGVmaW5lIEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzQwMF9NSFoJCQkweDQxCisjZGVmaW5lIEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzIwMF9NSFoJCQkweDgwCisjZGVmaW5lIEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzEwMF9NSFpfQU5EX0xFU1MJMHhGRgorCisvKgorKiBNUjEgdmFsdWU6CisqIEJ1cnN0IGxlbmd0aAk6IDgKKyogQnVyc3QgdHlwZQk6IHNlcXVlbnRpYWwKKyogV3JhcAkJOiBlbmFibGVkCisqIG5XUgkJOiAzKGRlZmF1bHQpLiBFTUlGIGRvZXMgbm90IGRvIHByZS1jaGFyZ2UuCisqCQk6IFNvIG5XUiBpcyBkb24ndCBjYXJlCisqLworI2RlZmluZSBNUjFfQkxfOF9CVF9TRVFfV1JBUF9FTl9OV1JfMwkweDIzCisKKy8qIE1SMiAqLworI2RlZmluZSBNUjJfUkwzX1dMMQkJCTEKKyNkZWZpbmUgTVIyX1JMNF9XTDIJCQkyCisjZGVmaW5lIE1SMl9STDVfV0wyCQkJMworI2RlZmluZSBNUjJfUkw2X1dMMwkJCTQKKworLyogTVIxMDogWlEgY2FsaWJyYXRpb24gY29kZXMgKi8KKyNkZWZpbmUgTVIxMF9aUV9aUUNTCQkweDU2CisjZGVmaW5lIE1SMTBfWlFfWlFDTAkJMHhBQgorI2RlZmluZSBNUjEwX1pRX1pRSU5JVAkJMHhGRgorI2RlZmluZSBNUjEwX1pRX1pRUkVTRVQJCTB4QzMKKworLyogVEVNUF9BTEVSVF9DT05GSUcgKi8KKyNkZWZpbmUgVEVNUF9BTEVSVF9QT0xMX0lOVEVSVkFMX01TCTM2MCAvKiBmb3IgdGVtcCBncmFkaWVudCAtIDUgQy9zICovCisjZGVmaW5lIFRFTVBfQUxFUlRfQ09ORklHX0RFVkNUXzEJMAorI2RlZmluZSBURU1QX0FMRVJUX0NPTkZJR19ERVZXRFRfMzIJMgorCisvKiBNUjE2IHZhbHVlOiByZWZyZXNoIGZ1bGwgYXJyYXkobm8gcGFydGlhbCBhcnJheSBzZWxmIHJlZnJlc2gpICovCisjZGVmaW5lIE1SMTZfUkVGX0ZVTExfQVJSQVkJMAorCisvKiBMUEREUjIgSU8gcmVncyAqLworI2RlZmluZSBDT05UUk9MX0xQRERSMklPX1NMRVdfMTI1UFNfRFJWOF9QVUxMX0RPV04JMHgxQzFDMUMxQworI2RlZmluZSBDT05UUk9MX0xQRERSMklPX1NMRVdfMzI1UFNfRFJWOF9HQVRFX0tFRVBFUgkweDlFOUU5RTlFCisKKy8qIENPTlRST0xfRUZVU0VfMiAqLworI2RlZmluZSBDT05UUk9MX0VGVVNFXzJfTk1PU19QTU9TX1BUVl9DT0RFXzEJCTB4MDBmZmMwMDAKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgd2Uga2VlcCBpbiBvdXIgYXJyYXkgb2YgdGltaW5nIHRhYmxlcworICogV2UgbmVlZCBub3Qga2VlcCBhbGwgdGhlIHNwZWVkIGJpbnMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKKyAqIFdlIG5lZWQgdG8ga2VlcCB0aW1pbmcgdGFibGVzIGZvciBvbmx5IHRoZSBzcGVlZCBiaW5zIHRoYXQgd2UKKyAqIGFyZSBpbnRlcmVzdGVkIGluCisgKi8KKyNkZWZpbmUgTUFYX05VTV9TUEVFREJJTlMJNAorCisvKiBMUEREUjIgRGVuc2l0aWVzICovCisjZGVmaW5lIExQRERSMl9ERU5TSVRZXzY0TWIJMAorI2RlZmluZSBMUEREUjJfREVOU0lUWV8xMjhNYgkxCisjZGVmaW5lIExQRERSMl9ERU5TSVRZXzI1Nk1iCTIKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfNTEyTWIJMworI2RlZmluZSBMUEREUjJfREVOU0lUWV8xR2IJNAorI2RlZmluZSBMUEREUjJfREVOU0lUWV8yR2IJNQorI2RlZmluZSBMUEREUjJfREVOU0lUWV80R2IJNgorI2RlZmluZSBMUEREUjJfREVOU0lUWV84R2IJNworI2RlZmluZSBMUEREUjJfREVOU0lUWV8xNkdiCTgKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMzJHYgk5CisKKy8qIExQRERSMiB0eXBlICovCisjZGVmaW5lCUxQRERSMl9UWVBFX1M0CTAKKyNkZWZpbmUJTFBERFIyX1RZUEVfUzIJMQorI2RlZmluZQlMUEREUjJfVFlQRV9OVk0JMgorCisvKiBMUEREUjIgSU8gd2lkdGggKi8KKyNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzMyCTAKKyNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzE2CTEKKyNkZWZpbmUJTFBERFIyX0lPX1dJRFRIXzgJMgorCisvKiBNb2RlIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgTFBERFIyX01SMAkwCisjZGVmaW5lIExQRERSMl9NUjEJMQorI2RlZmluZSBMUEREUjJfTVIyCTIKKyNkZWZpbmUgTFBERFIyX01SMwkzCisjZGVmaW5lIExQRERSMl9NUjQJNAorI2RlZmluZSBMUEREUjJfTVI1CTUKKyNkZWZpbmUgTFBERFIyX01SNgk2CisjZGVmaW5lIExQRERSMl9NUjcJNworI2RlZmluZSBMUEREUjJfTVI4CTgKKyNkZWZpbmUgTFBERFIyX01SOQk5CisjZGVmaW5lIExQRERSMl9NUjEwCTEwCisjZGVmaW5lIExQRERSMl9NUjExCTExCisjZGVmaW5lIExQRERSMl9NUjE2CTE2CisjZGVmaW5lIExQRERSMl9NUjE3CTE3CisjZGVmaW5lIExQRERSMl9NUjE4CTE4CisKKy8qIE1SMCAqLworI2RlZmluZSBMUEREUjJfTVIwX0RBSV9TSElGVAkwCisjZGVmaW5lIExQRERSMl9NUjBfREFJX01BU0sJMQorI2RlZmluZSBMUEREUjJfTVIwX0RJX1NISUZUCTEKKyNkZWZpbmUgTFBERFIyX01SMF9ESV9NQVNLCSgxIDw8IDEpCisjZGVmaW5lIExQRERSMl9NUjBfRE5WSV9TSElGVAkyCisjZGVmaW5lIExQRERSMl9NUjBfRE5WSV9NQVNLCSgxIDw8IDIpCisKKy8qIE1SNCAqLworI2RlZmluZSBNUjRfU0RSQU1fUkVGX1JBVEVfU0hJRlQJMAorI2RlZmluZSBNUjRfU0RSQU1fUkVGX1JBVEVfTUFTSwkJNworI2RlZmluZSBNUjRfVFVGX1NISUZUCQkJNworI2RlZmluZSBNUjRfVFVGX01BU0sJCQkoMSA8PCA3KQorCisvKiBNUjQgU0RSQU0gUmVmcmVzaCBSYXRlIGZpZWxkIHZhbHVlcyAqLworI2RlZmluZSBTRFJBTV9URU1QX0xFU1NfTE9XX1NIVVRET1dOCQkJMHgwCisjZGVmaW5lIFNEUkFNX1RFTVBfTEVTU180WF9SRUZSRVNIX0FORF9USU1JTkdTCQkweDEKKyNkZWZpbmUgU0RSQU1fVEVNUF9MRVNTXzJYX1JFRlJFU0hfQU5EX1RJTUlOR1MJCTB4MgorI2RlZmluZSBTRFJBTV9URU1QX05PTUlOQUwJCQkJMHgzCisjZGVmaW5lIFNEUkFNX1RFTVBfUkVTRVJWRURfNAkJCQkweDQKKyNkZWZpbmUgU0RSQU1fVEVNUF9ISUdIX0RFUkFURV9SRUZSRVNICQkJMHg1CisjZGVmaW5lIFNEUkFNX1RFTVBfSElHSF9ERVJBVEVfUkVGUkVTSF9BTkRfVElNSU5HUwkweDYKKyNkZWZpbmUgU0RSQU1fVEVNUF9WRVJZX0hJR0hfU0hVVERPV04JCQkweDcKKworI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NBTVNVTkcJMQorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1FJTU9OREEJMgorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VMUElEQQkzCisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfRVRST04JNAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05BTllBCTUKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9IWU5JWAk2CisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfTU9TRUwJNworI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1dJTkJPTkQJOAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VTTVQJOQorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NQQU5TSU9OIDExCisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfU1NUCQkxMgorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1pNT1MJMTMKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9JTlRFTAkxNAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05VTU9OWVgJMjU0CisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfTUlDUk9OCTI1NQorCisvKiBNUjggcmVnaXN0ZXIgZmllbGRzICovCisjZGVmaW5lIE1SOF9UWVBFX1NISUZUCQkweDAKKyNkZWZpbmUgTVI4X1RZUEVfTUFTSwkJMHgzCisjZGVmaW5lIE1SOF9ERU5TSVRZX1NISUZUCTB4MgorI2RlZmluZSBNUjhfREVOU0lUWV9NQVNLCSgweEYgPDwgMHgyKQorI2RlZmluZSBNUjhfSU9fV0lEVEhfU0hJRlQJMHg2CisjZGVmaW5lIE1SOF9JT19XSURUSF9NQVNLCSgweDMgPDwgMHg2KQorCitzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgeworCXU4CW51bV9iYW5rczsKKwl1OAl0X1JFRklfdXNfeDEwOworCXU4CXJvd19zelsyXTsgLyogT25lIGVudHJ5IGVhY2ggZm9yIHgzMiBhbmQgeDE2ICovCisJdTgJY29sX3N6WzJdOyAvKiBPbmUgZW50cnkgZWFjaCBmb3IgeDMyIGFuZCB4MTYgKi8KK307CisKKy8qIFN0cnVjdHVyZSBmb3IgdGltaW5ncyBmcm9tIHRoZSBERFIgZGF0YXNoZWV0ICovCitzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgeworCXUzMiBtYXhfZnJlcTsKKwl1OCBSTDsKKwl1OCB0UlBhYjsKKwl1OCB0UkNEOworCXU4IHRXUjsKKwl1OCB0UkFTbWluOworCXU4IHRSUkQ7CisJdTggdFdUUngyOworCXU4IHRYU1I7CisJdTggdFhQeDI7CisJdTggdFJGQ2FiOworCXU4IHRSVFB4MjsKKwl1OCB0Q0tFOworCXU4IHRDS0VTUjsKKwl1OCB0WlFDUzsKKwl1MzIgdFpRQ0w7CisJdTMyIHRaUUlOSVQ7CisJdTggdERRU0NLTUFYeDI7CisJdTggdFJBU21heDsKKwl1OCB0RkFXOworCit9OworCisvKgorICogTWluIHRDSyB2YWx1ZXMgZm9yIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnM6CisgKiBJZiB0aGUgY2FsY3VsYXRlZCBjbG9jayBjeWNsZXMgZm9yIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlciBpcworICogbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIG1pbiB0Q0sgdmFsdWUsIHdlIG5lZWQgdG8gc2V0IHRoZSBtaW4KKyAqIHRDSyB2YWx1ZS4gVGhpcyBtYXkgaGFwcGVuIGF0IGxvd2VyIGZyZXF1ZW5jaWVzLgorICovCitzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgeworCXUzMiB0Ukw7CisJdTMyIHRSUF9BQjsKKwl1MzIgdFJDRDsKKwl1MzIgdFdSOworCXUzMiB0UkFTX01JTjsKKwl1MzIgdFJSRDsKKwl1MzIgdFdUUjsKKwl1MzIgdFhQOworCXUzMiB0UlRQOworCXU4ICB0Q0tFOworCXUzMiB0Q0tFU1I7CisJdTMyIHRGQVc7Cit9OworCitzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzIHsKKwl1OAl0eXBlOworCXU4CWRlbnNpdHk7CisJdTgJaW9fd2lkdGg7CisJdTgJbWFudWZhY3R1cmVyOworfTsKKworc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyB7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICoqYWNfdGltaW5nczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2s7Cit9OworCisvKiBEZXRhaWxzIG9mIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byBlYWNoIGNoaXAtc2VsZWN0IG9mIGFuIEVNSUYgaW5zdGFuY2UgKi8KK3N0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzIHsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczBfZGV2aWNlX2RldGFpbHM7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZV9kZXRhaWxzOworCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKmNzMF9kZXZpY2VfdGltaW5nczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczFfZGV2aWNlX3RpbWluZ3M7Cit9OworCisvKgorICogU3RydWN0dXJlIGNvbnRhaW5pbmcgc2hhZG93IG9mIGltcG9ydGFudCByZWdpc3RlcnMgaW4gRU1JRgorICogVGhlIGNhbGN1bGF0aW9uIGZ1bmN0aW9uIGZpbGxzIGluIHRoaXMgc3RydWN0dXJlIHRvIGJlIGxhdGVyIHVzZWQgZm9yCisgKiBpbml0aWFsaXphdGlvbiBhbmQgRFZGUworICovCitzdHJ1Y3QgZW1pZl9yZWdzIHsKKwl1MzIgZnJlcTsKKwl1MzIgc2RyYW1fY29uZmlnX2luaXQ7CisJdTMyIHNkcmFtX2NvbmZpZzsKKwl1MzIgcmVmX2N0cmw7CisJdTMyIHNkcmFtX3RpbTE7CisJdTMyIHNkcmFtX3RpbTI7CisJdTMyIHNkcmFtX3RpbTM7CisJdTMyIHJlYWRfaWRsZV9jdHJsOworCXUzMiB6cV9jb25maWc7CisJdTMyIHRlbXBfYWxlcnRfY29uZmlnOworCXUzMiBlbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQ7CisJdTMyIGVtaWZfZGRyX3BoeV9jdGxyXzE7Cit9OworCisvKiBhc3NlcnQgbWFjcm9zICovCisjaWYgZGVmaW5lZChERUJVRykKKyNkZWZpbmUgZW1pZl9hc3NlcnQoYykJKHsgaWYgKCEoYykpIGZvciAoOzspOyB9KQorI2Vsc2UKKyNkZWZpbmUgZW1pZl9hc3NlcnQoYykJKHsgaWYgKDApIGhhbmcoKTsgfSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKK3ZvaWQgZW1pZl9nZXRfcmVnX2R1bXAodTMyIGVtaWZfbnIsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKipyZWdzKTsKK3ZvaWQgZW1pZl9nZXRfZG1tX3JlZ3MoY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICoqZG1tX2xpc2FfcmVncyk7CisjZWxzZQordm9pZCBlbWlmX2dldF9kZXZpY2VfZGV0YWlscyh1MzIgZW1pZl9uciwKKwkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZV9kZXRhaWxzLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlX2RldGFpbHMpOwordm9pZCBlbWlmX2dldF9kZXZpY2VfdGltaW5ncyh1MzIgZW1pZl9uciwKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMF9kZXZpY2VfdGltaW5ncywKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMV9kZXZpY2VfdGltaW5ncyk7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L211eF9vbWFwNC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9tdXhfb21hcDQuaAppbmRleCAwMTk1NzRiLi4zMGJmYWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L211eF9vbWFwNC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvbXV4X29tYXA0LmgKQEAgLTM0MSw0ICszNDEsNSBAQAogI2RlZmluZSBDT05UUk9MX1NQQVJFX1IJCTB4MDYxOAogI2RlZmluZSBDT05UUk9MX1NQQVJFX1JfQzAJCTB4MDYxQwogCisjZGVmaW5lIENPTlRST0xfV0tVUF9QQUQxX0ZSRUZfQ0xLNF9SRVEJMHg0QTMxRTA1QQogI2VuZGlmIC8qIF9NVVhfT01BUDRfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcDQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcDQuaAppbmRleCBhMzBiYjMzLi45YWFkMGU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L29tYXA0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwNC5oCkBAIC01MSw2ICs1MSwyMCBAQAogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ09SRQkoT01BUDQ0WFhfTDRfQ09SRV9CQVNFICsgMHgxMDAwMDApCiAjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9XS1VQCShPTUFQNDRYWF9MNF9DT1JFX0JBU0UgKyAweDMxRTAwMCkKIAorLyogTFBERFIyIElPIHJlZ3MgKi8KKyNkZWZpbmUgTFBERFIyX0lPX1JFR1NfQkFTRQkweDRBMTAwNjM4CisKKyNkZWZpbmUgQ09OVFJPTF9FRlVTRV8yCQkweDRBMTAwNzA0CisKKy8qIENPTlRST0xfSURfQ09ERSAqLworI2RlZmluZSBDT05UUk9MX0lEX0NPREUJCTB4NEEwMDIyMDQKKworI2RlZmluZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMxXzAJMHgwQjg1MjAyRgorI2RlZmluZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzAJMHgxQjg1MjAyRgorI2RlZmluZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzEJMHgzQjk1QzAyRgorI2RlZmluZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzIJMHg0Qjk1QzAyRgorI2RlZmluZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzMJMHg2Qjk1QzAyRgorCiAvKiBVQVJUICovCiAjZGVmaW5lIFVBUlQxX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSArIDB4NmEwMDApCiAjZGVmaW5lIFVBUlQyX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSArIDB4NmMwMDApCkBAIC03MCwxMiArODQsNiBAQAogLyogR1BNQyAqLwogI2RlZmluZSBPTUFQNDRYWF9HUE1DX0JBU0UJMHg1MDAwMDAwMAogCi0vKiBETU0gKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1NX0JBU0UJCTB4NEUwMDAwMDAKLSNkZWZpbmUgRE1NX0xJU0FfTUFQX0JBU0UJCShPTUFQNDRYWF9ETU1fQkFTRSArIDB4NDApCi0jZGVmaW5lIERNTV9MSVNBX01BUF9TWVNfU0laRV9NQVNLCSg3IDw8IDIwKQotI2RlZmluZSBETU1fTElTQV9NQVBfU1lTX1NJWkVfU0hJRlQJMjAKLSNkZWZpbmUgRE1NX0xJU0FfTUFQX1NZU19BRERSX01BU0sJKDB4RkYgPDwgMjQpCiAvKgogICogSGFyZHdhcmUgUmVnaXN0ZXIgRGV0YWlscwogICovCkBAIC0xMTksMTMgKzEyNywzOCBAQAogLyogYmFzZSBhZGRyZXNzIGZvciBpbmRpcmVjdCB2ZWN0b3JzIChpbnRlcm5hbCBib290IG1vZGUpICovCiAjZGVmaW5lIFNSQU1fUk9NX1ZFQ1RfQkFTRQkweDQwMzBEMDAwCiAvKiBUZW1wb3JhcnkgU1JBTSBzdGFjayB1c2VkIHdoaWxlIGxvdyBsZXZlbCBpbml0IGlzIGRvbmUgKi8KLSNkZWZpbmUgTE9XX0xFVkVMX1NSQU1fU1RBQ0sJTk9OX1NFQ1VSRV9TUkFNX0VORAorI2RlZmluZSBMT1dfTEVWRUxfU1JBTV9TVEFDSwkJTk9OX1NFQ1VSRV9TUkFNX0VORAorI2RlZmluZSBTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUgkJTk9OX1NFQ1VSRV9TUkFNX1NUQVJUCisvKiBTUkFNIHNjcmF0Y2ggc3BhY2UgZW50cmllcyAqLworI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfT01BUDRfUkVWCVNSQU1fU0NSQVRDSF9TUEFDRV9BRERSCisjZGVmaW5lIE9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1NJWkUJKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHg0KQorI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX05VTQkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweEMpCisjZGVmaW5lIE9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1RfREVOCShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4MTApCisjZGVmaW5lIE9NQVA0X1NSQU1fU0NSQVRDSF9TUEFDRV9FTkQJKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHgxNCkKIAotLyoKLSAqIE9NQVA0IHJlYWwgaGFyZHdhcmU6Ci0gKiBUT0RPOiBDaGFuZ2UgdGhpcyB0byB0aGUgSURDT0RFIGluIHRoZSBodyByZWdzaXRlcgotICovCi0jZGVmaW5lIENQVV9PTUFQNDQzMF9FUzEwCTEKLSNkZWZpbmUgQ1BVX09NQVA0NDMwX0VTMjAJMgorLyogU2lsaWNvbiByZXZpc2lvbnMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0lMSUNPTl9JRF9JTlZBTElECTB4RkZGRkZGRkYKKyNkZWZpbmUgT01BUDQ0MzBfRVMxXzAJMHg0NDMwMDEwMAorI2RlZmluZSBPTUFQNDQzMF9FUzJfMAkweDQ0MzAwMjAwCisjZGVmaW5lIE9NQVA0NDMwX0VTMl8xCTB4NDQzMDAyMTAKKyNkZWZpbmUgT01BUDQ0MzBfRVMyXzIJMHg0NDMwMDIyMAorI2RlZmluZSBPTUFQNDQzMF9FUzJfMwkweDQ0MzAwMjMwCisjZGVmaW5lIE9NQVA0NDYwX0VTMV8wCTB4NDQ2MDAxMDAKKworLyogUk9NIGNvZGUgZGVmaW5lcyAqLworLyogQm9vdCBkZXZpY2UgKi8KKyNkZWZpbmUgQk9PVF9ERVZJQ0VfTUFTSwkweEZGCisjZGVmaW5lIEJPT1RfREVWSUNFX09GRlNFVAkweDgKKyNkZWZpbmUgREVWX0RFU0NfUFRSX09GRlNFVAkweDQKKyNkZWZpbmUgREVWX0RBVEFfUFRSX09GRlNFVAkweDE4CisjZGVmaW5lIEJPT1RfTU9ERV9PRkZTRVQJMHg4CisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgT01BUDQ0WFhfR1BJTzFfQkFTRQkJMHg0QTMxMDAwMAorI2RlZmluZSBPTUFQNDRYWF9HUElPMl9CQVNFCQkweDQ4MDU1MDAwCisjZGVmaW5lIE9NQVA0NFhYX0dQSU8zX0JBU0UJCTB4NDgwNTcwMDAKKyNkZWZpbmUgT01BUDQ0WFhfR1BJTzRfQkFTRQkJMHg0ODA1OTAwMAorI2RlZmluZSBPTUFQNDRYWF9HUElPNV9CQVNFCQkweDQ4MDVCMDAwCisjZGVmaW5lIE9NQVA0NFhYX0dQSU82X0JBU0UJCTB4NDgwNUQwMDAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L3N5c19wcm90by5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9zeXNfcHJvdG8uaAppbmRleCA0ZmE0ZjRiLi5hODFmOGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L3N5c19wcm90by5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvc3lzX3Byb3RvLmgKQEAgLTIyLDIxICsyMiw4OSBAQAogI2RlZmluZSBfU1lTX1BST1RPX0hfCiAKICNpbmNsdWRlIDxhc20vYXJjaC9vbWFwNC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eF9vbWFwNC5oPgogCiBzdHJ1Y3Qgb21hcF9zeXNpbmZvIHsKIAljaGFyICpib2FyZF9zdHJpbmc7CiB9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvbWFwX3N5c2luZm8gc3lzaW5mbzsKKworZXh0ZXJuIHN0cnVjdCBvbWFwNF9wcmNtX3JlZ3MgKmNvbnN0IHByY207CiAKIHZvaWQgZ3BtY19pbml0KHZvaWQpOwogdm9pZCB3YXRjaGRvZ19pbml0KHZvaWQpOwogdTMyIGdldF9kZXZpY2VfdHlwZSh2b2lkKTsKLXZvaWQgc2V0X211eGNvbmZfcmVncyh2b2lkKTsKK3ZvaWQgZG9fc2V0X211eCh1MzIgYmFzZSwgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvbnN0ICphcnJheSwgaW50IHNpemUpOwordm9pZCBzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwodm9pZCk7CiB2b2lkIHNyMzIodm9pZCAqLCB1MzIsIHUzMiwgdTMyKTsKIHUzMiB3YWl0X29uX3ZhbHVlKHUzMiwgdTMyLCB2b2lkICosIHUzMik7CiB2b2lkIHNkZWxheSh1bnNpZ25lZCBsb25nKTsKIHZvaWQgc2V0X3BsMzEwX2N0cmxfcmVnKHUzMiB2YWwpOwordm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcDRfcmV2X3N0cmluZyk7Cit2b2lkIHNldHVwX2Nsb2Nrc19mb3JfY29uc29sZSh2b2lkKTsKK3ZvaWQgcHJjbV9pbml0KHZvaWQpOwordm9pZCBieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpOwordm9pZCBmcmVxX3VwZGF0ZV9jb3JlKHZvaWQpOwordTMyIGdldF9zeXNfY2xrX2ZyZXEodm9pZCk7Cit1MzIgb21hcDRfZGRyX2Nsayh2b2lkKTsKK3ZvaWQgY2FuY2VsX291dCh1MzIgKm51bSwgdTMyICpkZW4sIHUzMiBkZW5fbGltaXQpOwordm9pZCBzZHJhbV9pbml0KHZvaWQpOwordTMyIG9tYXA0X3NkcmFtX3NpemUodm9pZCk7CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgb21hcF9zeXNpbmZvIHN5c2luZm87CitzdGF0aWMgaW5saW5lIHUzMiBydW5uaW5nX2Zyb21fc2RyYW0odm9pZCkKK3sKKwl1MzIgcGM7CisJYXNtIHZvbGF0aWxlICgibW92ICUwLCBwYyIgOiAiPXIiIChwYykpOworCXJldHVybiAoKHBjID49IE9NQVA0NFhYX0RSQU1fQUREUl9TUEFDRV9TVEFSVCkgJiYKKwkgICAgKHBjIDwgT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX0VORCkpOworfQorCitzdGF0aWMgaW5saW5lIHU4IHVib290X2xvYWRlZF9ieV9zcGwodm9pZCkKK3sKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gSGVhZGVyIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LCBzbyB1LWJvb3QgaW5pdCBydW5uaW5nCisJICogZnJvbSBTRFJBTSBpbXBsaWVzIHRoYXQgaXQgd2FzIGxvYWRlZCBieSBTUEwuIFdoZW4gdGhpcyBzaXR1YXRpb24KKwkgKiBjaGFuZ2VzIG9uZSBvZiB0aGVzZSBhcHByb2FjaGVzIGNvdWxkIGJlIHRha2VuOgorCSAqIGkuICBQYXNzIGEgbWFnaWMgZnJvbSBTUEwgdG8gVS1Cb290IGFuZCBVLUJvb3Qgc2F2ZSBpdCBhdCBhIGtub3duCisJICogICAgIGxvY2F0aW9uLgorCSAqIGlpLiBDaGVjayB0aGUgT1BQLiBDSCBjYW4gc3VwcG9ydCBvbmx5IDUwJSBPUFAgd2hpbGUgU1BMIGluaXRpYWxpemVzCisJICogICAgIHRoZSBEUExMcyBhdCAxMDAlIE9QUC4KKwkgKi8KKwlyZXR1cm4gcnVubmluZ19mcm9tX3NkcmFtKCk7Cit9CisvKgorICogVGhlIGJhc2ljIGhhcmR3YXJlIGluaXQgb2YgT01BUChzX2luaXQoKSkgY2FuIGhhcHBlbiBpbiA0CisgKiBkaWZmZXJlbnQgY29udGV4dHM6CisgKiAgMS4gU1BMIHJ1bm5pbmcgZnJvbSBTUkFNCisgKiAgMi4gVS1Cb290IHJ1bm5pbmcgZnJvbSBGTEFTSAorICogIDMuIE5vbi1YSVAgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBTUEwKKyAqICA0LiBOb24tWElQIFUtQm9vdCBsb2FkZWQgdG8gU0RSQU0gYnkgUk9NIGNvZGUgdXNpbmcgdGhlCisgKiAgICAgQ29uZmlndXJhdGlvbiBIZWFkZXIgZmVhdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhpcyBjb250ZXh0LgorICogRGVmaW5pbmcgYXMgaW5saW5lIG1heSBoZWxwIGluIGNvbXBpbGluZyBvdXQgdW51c2VkIGZ1bmN0aW9ucyBpbiBTUEwKKyAqLworc3RhdGljIGlubGluZSB1MzIgb21hcDRfaHdfaW5pdF9jb250ZXh0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorCXJldHVybiBPTUFQX0lOSVRfQ09OVEVYVF9TUEw7CisjZWxzZQorCWlmICh1Ym9vdF9sb2FkZWRfYnlfc3BsKCkpCisJCXJldHVybiBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9TUEw7CisJZWxzZSBpZiAocnVubmluZ19mcm9tX3NkcmFtKCkpCisJCXJldHVybiBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9DSDsKKwllbHNlCisJCXJldHVybiBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwX3JldmlzaW9uKHZvaWQpCit7CisJZXh0ZXJuIHUzMiAqY29uc3Qgb21hcDRfcmV2aXNpb247CisJcmV0dXJuICpvbWFwNF9yZXZpc2lvbjsKK30KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcm12Ny5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJtdjcuaAppbmRleCA4OGI5YzYyLi45YWRjNTYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcm12Ny5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FybXY3LmgKQEAgLTI1LDYgKzI1LDEyIEBACiAjZGVmaW5lIEFSTVY3X0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisvKiBDb3J0ZXgtQTkgcmV2aXNpb25zICovCisjZGVmaW5lIE1JRFJfQ09SVEVYX0E5X1IwUDEJMHg0MTBGQzA5MQorI2RlZmluZSBNSURSX0NPUlRFWF9BOV9SMVAyCTB4NDExRkMwOTIKKyNkZWZpbmUgTUlEUl9DT1JURVhfQTlfUjFQMwkweDQxMUZDMDkzCisjZGVmaW5lIE1JRFJfQ09SVEVYX0E5X1IyUDEwCTB4NDEyRkMwOUEKKwogLyogQ0NTSURSICovCiAjZGVmaW5lIENDU0lEUl9MSU5FX1NJWkVfT0ZGU0VUCQkwCiAjZGVmaW5lIENDU0lEUl9MSU5FX1NJWkVfTUFTSwkJMHg3CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9vbWFwX2NvbW1vbi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vb21hcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NiODU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vb21hcF9jb21tb24uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZglfT01BUF9DT01NT05fSF8KKyNkZWZpbmUJX09NQVBfQ09NTU9OX0hfCisKKy8qIE1heCB2YWx1ZSBmb3IgRFBMTCBtdWx0aXBsaWVyIE0gKi8KKyNkZWZpbmUgT01BUF9EUExMX01BWF9OCTEyNworCisvKiBIVyBJbml0IENvbnRleHQgKi8KKyNkZWZpbmUgT01BUF9JTklUX0NPTlRFWFRfU1BMCQkJMAorI2RlZmluZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUgkxCisjZGVmaW5lIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX1NQTAkyCisjZGVmaW5lIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NICTMKKwordm9pZCBwcmVsb2FkZXJfY29uc29sZV9pbml0KHZvaWQpOworCisvKiBCb290IGRldmljZSAqLworI2RlZmluZSBCT09UX0RFVklDRV9OT05FCTAKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfWElQCQkxCisjZGVmaW5lIEJPT1RfREVWSUNFX1hJUFdBSVQJMgorI2RlZmluZSBCT09UX0RFVklDRV9OQU5ECTMKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfT05FX05BTkQJNAorI2RlZmluZSBCT09UX0RFVklDRV9NTUMxCTUKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfTU1DMgk2CisKKy8qIEJvb3QgdHlwZSAqLworI2RlZmluZQlNTUNTRF9NT0RFX1VOREVGSU5FRAkwCisjZGVmaW5lIE1NQ1NEX01PREVfUkFXCQkxCisjZGVmaW5lIE1NQ1NEX01PREVfRkFUCQkyCisKK3UzMiBvbWFwX2Jvb3RfZGV2aWNlKHZvaWQpOwordTMyIG9tYXBfYm9vdF9tb2RlKHZvaWQpOworCisjZW5kaWYgLyogX09NQVBfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXAzL2dwaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL29tYXBfZ3Bpby5oCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDMvZ3Bpby5oCnJlbmFtZSB0byBhcmNoL2FybS9pbmNsdWRlL2FzbS9vbWFwX2dwaW8uaAppbmRleCAzMGY2MzNjLi4zMDg5ZTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXAzL2dwaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9vbWFwX2dwaW8uaApAQCAtMzgsMzYgKzM4LDE1IEBACiAjaWZuZGVmIF9HUElPX0gKICNkZWZpbmUgX0dQSU9fSAogCi0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04JCTB4MDAwMAotI2RlZmluZSBPTUFQMjRYWF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCi0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fU1lTU1RBVFVTCQkweDAwMTQKLSNkZWZpbmUgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxCTB4MDAxOAotI2RlZmluZSBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzIJMHgwMDI4Ci0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMgkweDAwMmMKLSNkZWZpbmUgT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxCTB4MDAxYwotI2RlZmluZSBPTUFQMjRYWF9HUElPX1dBS0VfRU4JCTB4MDAyMAotI2RlZmluZSBPTUFQMjRYWF9HUElPX0NUUkwJCTB4MDAzMAotI2RlZmluZSBPTUFQMjRYWF9HUElPX09FCQkweDAwMzQKLSNkZWZpbmUgT01BUDI0WFhfR1BJT19EQVRBSU4JCTB4MDAzOAotI2RlZmluZSBPTUFQMjRYWF9HUElPX0RBVEFPVVQJCTB4MDAzYwotI2RlZmluZSBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMAkweDAwNDAKLSNkZWZpbmUgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEJMHgwMDQ0Ci0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUCTB4MDA0OAotI2RlZmluZSBPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QJMHgwMDRjCi0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfRU4JMHgwMDUwCi0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfVkFMCTB4MDA1NAotI2RlZmluZSBPTUFQMjRYWF9HUElPX0NMRUFSSVJRRU5BQkxFMQkweDAwNjAKLSNkZWZpbmUgT01BUDI0WFhfR1BJT19TRVRJUlFFTkFCTEUxCTB4MDA2NAotI2RlZmluZSBPTUFQMjRYWF9HUElPX0NMRUFSV0tVRU5BCTB4MDA4MAotI2RlZmluZSBPTUFQMjRYWF9HUElPX1NFVFdLVUVOQQkJMHgwMDg0Ci0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fQ0xFQVJEQVRBT1VUCTB4MDA5MAotI2RlZmluZSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQJMHgwMDk0CisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAKIHN0cnVjdCBncGlvX2JhbmsgewogCXZvaWQgKmJhc2U7CiAJaW50IG1ldGhvZDsKIH07CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rICpjb25zdCBvbWFwX2dwaW9fYmFuazsKKwogI2RlZmluZSBNRVRIT0RfR1BJT18yNFhYCTQKIAogLyogVGhpcyBpcyB0aGUgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYm9hcmQuYyBiL2FyY2gvYXJtL2xpYi9ib2FyZC5jCmluZGV4IDkwNzA5ZDAuLjE0YTU2ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9ib2FyZC5jCisrKyBiL2FyY2gvYXJtL2xpYi9ib2FyZC5jCkBAIC04NCwyNiArODQsMjggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1heSBiZSBzdXBwbGllZCBieSBib2FyZHMgaWYgZGVzaXJlZAogICovCi12b2lkIGlubGluZSBfX2NvbG91cmVkX0xFRF9pbml0ICh2b2lkKSB7fQotdm9pZCBjb2xvdXJlZF9MRURfaW5pdCAodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fY29sb3VyZWRfTEVEX2luaXQiKSkpOwotdm9pZCBpbmxpbmUgX19yZWRfTEVEX29uICh2b2lkKSB7fQotdm9pZCByZWRfTEVEX29uICh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19yZWRfTEVEX29uIikpKTsKLXZvaWQgaW5saW5lIF9fcmVkX0xFRF9vZmYodm9pZCkge30KK2lubGluZSB2b2lkIF9fY29sb3VyZWRfTEVEX2luaXQodm9pZCkge30KK3ZvaWQgY29sb3VyZWRfTEVEX2luaXQodm9pZCkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19jb2xvdXJlZF9MRURfaW5pdCIpKSk7CitpbmxpbmUgdm9pZCBfX3JlZF9MRURfb24odm9pZCkge30KK3ZvaWQgcmVkX0xFRF9vbih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19yZWRfTEVEX29uIikpKTsKK2lubGluZSB2b2lkIF9fcmVkX0xFRF9vZmYodm9pZCkge30KIHZvaWQgcmVkX0xFRF9vZmYodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fcmVkX0xFRF9vZmYiKSkpOwotdm9pZCBpbmxpbmUgX19ncmVlbl9MRURfb24odm9pZCkge30KK2lubGluZSB2b2lkIF9fZ3JlZW5fTEVEX29uKHZvaWQpIHt9CiB2b2lkIGdyZWVuX0xFRF9vbih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19ncmVlbl9MRURfb24iKSkpOwotdm9pZCBpbmxpbmUgX19ncmVlbl9MRURfb2ZmKHZvaWQpIHt9CitpbmxpbmUgdm9pZCBfX2dyZWVuX0xFRF9vZmYodm9pZCkge30KIHZvaWQgZ3JlZW5fTEVEX29mZih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19ncmVlbl9MRURfb2ZmIikpKTsKLXZvaWQgaW5saW5lIF9feWVsbG93X0xFRF9vbih2b2lkKSB7fQoraW5saW5lIHZvaWQgX195ZWxsb3dfTEVEX29uKHZvaWQpIHt9CiB2b2lkIHllbGxvd19MRURfb24odm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9feWVsbG93X0xFRF9vbiIpKSk7Ci12b2lkIGlubGluZSBfX3llbGxvd19MRURfb2ZmKHZvaWQpIHt9CitpbmxpbmUgdm9pZCBfX3llbGxvd19MRURfb2ZmKHZvaWQpIHt9CiB2b2lkIHllbGxvd19MRURfb2ZmKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJfX3llbGxvd19MRURfb2ZmIikpKTsKLXZvaWQgaW5saW5lIF9fYmx1ZV9MRURfb24odm9pZCkge30KK2lubGluZSB2b2lkIF9fYmx1ZV9MRURfb24odm9pZCkge30KIHZvaWQgYmx1ZV9MRURfb24odm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fYmx1ZV9MRURfb24iKSkpOwotdm9pZCBpbmxpbmUgX19ibHVlX0xFRF9vZmYodm9pZCkge30KK2lubGluZSB2b2lkIF9fYmx1ZV9MRURfb2ZmKHZvaWQpIHt9CiB2b2lkIGJsdWVfTEVEX29mZih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19ibHVlX0xFRF9vZmYiKSkpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdCBVdGlsaXRpZXMJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU29tZSBvZiB0aGlzIGNvZGUgc2hvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zLApAQCAtMTE0LDMwICsxMTYsMzAgQEAKICNpZiBkZWZpbmVkKENPTkZJR19BUk1fRENDKSAmJiAhZGVmaW5lZChDT05GSUdfQkFVRFJBVEUpCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURSAxMTUyMDAKICNlbmRpZgotc3RhdGljIGludCBpbml0X2JhdWRyYXRlICh2b2lkKQorc3RhdGljIGludCBpbml0X2JhdWRyYXRlKHZvaWQpCiB7CiAJY2hhciB0bXBbNjRdOwkvKiBsb25nIGVub3VnaCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCi0JaW50IGkgPSBnZXRlbnZfZigiYmF1ZHJhdGUiLCB0bXAsIHNpemVvZiAodG1wKSk7CisJaW50IGkgPSBnZXRlbnZfZigiYmF1ZHJhdGUiLCB0bXAsIHNpemVvZih0bXApKTsKIAogCWdkLT5iYXVkcmF0ZSA9IChpID4gMCkKLQkJCT8gKGludCkgc2ltcGxlX3N0cnRvdWwgKHRtcCwgTlVMTCwgMTApCisJCQk/IChpbnQpIHNpbXBsZV9zdHJ0b3VsKHRtcCwgTlVMTCwgMTApCiAJCQk6IENPTkZJR19CQVVEUkFURTsKIAogCXJldHVybiAoMCk7CiB9CiAKLXN0YXRpYyBpbnQgZGlzcGxheV9iYW5uZXIgKHZvaWQpCitzdGF0aWMgaW50IGRpc3BsYXlfYmFubmVyKHZvaWQpCiB7Ci0JcHJpbnRmICgiXG5cbiVzXG5cbiIsIHZlcnNpb25fc3RyaW5nKTsKLQlkZWJ1ZyAoIlUtQm9vdCBjb2RlOiAlMDhsWCAtPiAlMDhsWCAgQlNTOiAtPiAlMDhsWFxuIiwKKwlwcmludGYoIlxuXG4lc1xuXG4iLCB2ZXJzaW9uX3N0cmluZyk7CisJZGVidWcoIlUtQm9vdCBjb2RlOiAlMDhsWCAtPiAlMDhsWCAgQlNTOiAtPiAlMDhsWFxuIiwKIAkgICAgICAgX1RFWFRfQkFTRSwKLQkgICAgICAgX2Jzc19zdGFydF9vZnMrX1RFWFRfQkFTRSwgX2Jzc19lbmRfb2ZzK19URVhUX0JBU0UpOworCSAgICAgICBfYnNzX3N0YXJ0X29mcyArIF9URVhUX0JBU0UsIF9ic3NfZW5kX29mcyArIF9URVhUX0JBU0UpOwogI2lmZGVmIENPTkZJR19NT0RFTV9TVVBQT1JUCi0JZGVidWcgKCJNb2RlbSBTdXBwb3J0IGVuYWJsZWRcbiIpOworCWRlYnVnKCJNb2RlbSBTdXBwb3J0IGVuYWJsZWRcbiIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1VTRV9JUlEKLQlkZWJ1ZyAoIklSUSBTdGFjazogJTA4bHhcbiIsIElSUV9TVEFDS19TVEFSVCk7Ci0JZGVidWcgKCJGSVEgU3RhY2s6ICUwOGx4XG4iLCBGSVFfU1RBQ0tfU1RBUlQpOworCWRlYnVnKCJJUlEgU3RhY2s6ICUwOGx4XG4iLCBJUlFfU1RBQ0tfU1RBUlQpOworCWRlYnVnKCJGSVEgU3RhY2s6ICUwOGx4XG4iLCBGSVFfU1RBQ0tfU1RBUlQpOwogI2VuZGlmCiAKIAlyZXR1cm4gKDApOwpAQCAtMTUwLDIzICsxNTIsMjMgQEAKICAqIGdpdmVzIGEgc2ltcGxlIHlldCBjbGVhciBpbmRpY2F0aW9uIHdoaWNoIHBhcnQgb2YgdGhlCiAgKiBpbml0aWFsaXphdGlvbiBpZiBmYWlsaW5nLgogICovCi1zdGF0aWMgaW50IGRpc3BsYXlfZHJhbV9jb25maWcgKHZvaWQpCitzdGF0aWMgaW50IGRpc3BsYXlfZHJhbV9jb25maWcodm9pZCkKIHsKIAlpbnQgaTsKIAogI2lmZGVmIERFQlVHCi0JcHV0cyAoIlJBTSBDb25maWd1cmF0aW9uOlxuIik7CisJcHV0cygiUkFNIENvbmZpZ3VyYXRpb246XG4iKTsKIAotCWZvcihpPTA7IGk8Q09ORklHX05SX0RSQU1fQkFOS1M7IGkrKykgewotCQlwcmludGYgKCJCYW5rICMlZDogJTA4bHggIiwgaSwgZ2QtPmJkLT5iaV9kcmFtW2ldLnN0YXJ0KTsKLQkJcHJpbnRfc2l6ZSAoZ2QtPmJkLT5iaV9kcmFtW2ldLnNpemUsICJcbiIpOworCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfTlJfRFJBTV9CQU5LUzsgaSsrKSB7CisJCXByaW50ZigiQmFuayAjJWQ6ICUwOGx4ICIsIGksIGdkLT5iZC0+YmlfZHJhbVtpXS5zdGFydCk7CisJCXByaW50X3NpemUoZ2QtPmJkLT5iaV9kcmFtW2ldLnNpemUsICJcbiIpOwogCX0KICNlbHNlCiAJdWxvbmcgc2l6ZSA9IDA7CiAKLQlmb3IgKGk9MDsgaTxDT05GSUdfTlJfRFJBTV9CQU5LUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IENPTkZJR19OUl9EUkFNX0JBTktTOyBpKyspCiAJCXNpemUgKz0gZ2QtPmJkLT5iaV9kcmFtW2ldLnNpemU7Ci0JfQorCiAJcHV0cygiRFJBTTogICIpOwogCXByaW50X3NpemUoc2l6ZSwgIlxuIik7CiAjZW5kaWYKQEAgLTE3NSwxMSArMTc3LDExIEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19IQVJEX0kyQykgfHwgZGVmaW5lZChDT05GSUdfU09GVF9JMkMpCi1zdGF0aWMgaW50IGluaXRfZnVuY19pMmMgKHZvaWQpCitzdGF0aWMgaW50IGluaXRfZnVuY19pMmModm9pZCkKIHsKLQlwdXRzICgiSTJDOiAgICIpOwotCWkyY19pbml0IChDT05GSUdfU1lTX0kyQ19TUEVFRCwgQ09ORklHX1NZU19JMkNfU0xBVkUpOwotCXB1dHMgKCJyZWFkeVxuIik7CisJcHV0cygiSTJDOiAgICIpOworCWkyY19pbml0KENPTkZJR19TWVNfSTJDX1NQRUVELCBDT05GSUdfU1lTX0kyQ19TTEFWRSk7CisJcHV0cygicmVhZHlcbiIpOwogCXJldHVybiAoMCk7CiB9CiAjZW5kaWYKQEAgLTIxOCw3ICsyMjAsNyBAQAogICovCiB0eXBlZGVmIGludCAoaW5pdF9mbmNfdCkgKHZvaWQpOwogCi1pbnQgcHJpbnRfY3B1aW5mbyAodm9pZCk7CitpbnQgcHJpbnRfY3B1aW5mbyh2b2lkKTsKIAogdm9pZCBfX2RyYW1faW5pdF9iYW5rc2l6ZSh2b2lkKQogewpAQCAtMjU3LDcgKzI1OSw3IEBACiAJTlVMTCwKIH07CiAKLXZvaWQgYm9hcmRfaW5pdF9mICh1bG9uZyBib290ZmxhZykKK3ZvaWQgYm9hcmRfaW5pdF9mKHVsb25nIGJvb3RmbGFnKQogewogCWJkX3QgKmJkOwogCWluaXRfZm5jX3QgKippbml0X2ZuY19wdHI7CkBAIC0yNjksNyArMjcxLDcgQEAKIAkvKiBjb21waWxlciBvcHRpbWl6YXRpb24gYmFycmllciBuZWVkZWQgZm9yIEdDQyA+PSAzLjQgKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogCi0JbWVtc2V0ICgodm9pZCopZ2QsIDAsIHNpemVvZiAoZ2RfdCkpOworCW1lbXNldCgodm9pZCAqKWdkLCAwLCBzaXplb2YoZ2RfdCkpOwogCiAJZ2QtPm1vbl9sZW4gPSBfYnNzX2VuZF9vZnM7CiAKQEAgLTI4MywxMSArMjg1LDExIEBACiAJCX0KIAl9CiAKLQlkZWJ1ZyAoIm1vbml0b3IgbGVuOiAlMDhsWFxuIiwgZ2QtPm1vbl9sZW4pOworCWRlYnVnKCJtb25pdG9yIGxlbjogJTA4bFhcbiIsIGdkLT5tb25fbGVuKTsKIAkvKgogCSAqIFJhbSBpcyBzZXR1cCwgc2l6ZSBzdG9yZWQgaW4gZ2QgISEKIAkgKi8KLQlkZWJ1ZyAoInJhbXNpemU6ICUwOGxYXG4iLCBnZC0+cmFtX3NpemUpOworCWRlYnVnKCJyYW1zaXplOiAlMDhsWFxuIiwgZ2QtPnJhbV9zaXplKTsKICNpZiBkZWZpbmVkKENPTkZJR19TWVNfTUVNX1RPUF9ISURFKQogCS8qCiAJICogU3VidHJhY3Qgc3BlY2lmaWVkIGFtb3VudCBvZiBtZW1vcnkgdG8gaGlkZSBzbyB0aGF0IGl0IHdvbid0CkBAIC0zMDgsNyArMzEwLDggQEAKICNpZm5kZWYgQ09ORklHX0FMVF9MQl9BRERSCiAJLyogcmVzZXJ2ZSBrZXJuZWwgbG9nIGJ1ZmZlciAqLwogCWFkZHIgLT0gKExPR0JVRkZfUkVTRVJWRSk7Ci0JZGVidWcgKCJSZXNlcnZpbmcgJWRrIGZvciBrZXJuZWwgbG9nYnVmZmVyIGF0ICUwOGx4XG4iLCBMT0dCVUZGX0xFTiwgYWRkcik7CisJZGVidWcoIlJlc2VydmluZyAlZGsgZm9yIGtlcm5lbCBsb2didWZmZXIgYXQgJTA4bHhcbiIsIExPR0JVRkZfTEVOLAorCQlhZGRyKTsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTMxNiwxMCArMzE5LDExIEBACiAJLyoKIAkgKiByZXNlcnZlIHByb3RlY3RlZCBSQU0KIAkgKi8KLQlpID0gZ2V0ZW52X3IgKCJwcmFtIiwgKGNoYXIgKil0bXAsIHNpemVvZiAodG1wKSk7Ci0JcmVnID0gKGkgPiAwKSA/IHNpbXBsZV9zdHJ0b3VsICgoY29uc3QgY2hhciAqKXRtcCwgTlVMTCwgMTApIDogQ09ORklHX1BSQU07CisJaSA9IGdldGVudl9yKCJwcmFtIiwgKGNoYXIgKil0bXAsIHNpemVvZih0bXApKTsKKwlyZWcgPSAoaSA+IDApID8gc2ltcGxlX3N0cnRvdWwoKGNvbnN0IGNoYXIgKil0bXAsIE5VTEwsIDEwKSA6CisJCUNPTkZJR19QUkFNOwogCWFkZHIgLT0gKHJlZyA8PCAxMCk7CQkvKiBzaXplIGlzIGluIGtCICovCi0JZGVidWcgKCJSZXNlcnZpbmcgJWxkayBmb3IgcHJvdGVjdGVkIFJBTSBhdCAlMDhseFxuIiwgcmVnLCBhZGRyKTsKKwlkZWJ1ZygiUmVzZXJ2aW5nICVsZGsgZm9yIHByb3RlY3RlZCBSQU0gYXQgJTA4bHhcbiIsIHJlZywgYWRkcik7CiAjZW5kaWYgLyogQ09ORklHX1BSQU0gKi8KIAogI2lmICEoZGVmaW5lZChDT05GSUdfU1lTX0lDQUNIRV9PRkYpICYmIGRlZmluZWQoQ09ORklHX1NZU19EQ0FDSEVfT0ZGKSkKQEAgLTMzMCwxOSArMzM0LDE5IEBACiAJYWRkciAmPSB+KDB4MTAwMDAgLSAxKTsKIAogCWdkLT50bGJfYWRkciA9IGFkZHI7Ci0JZGVidWcgKCJUTEIgdGFibGUgYXQ6ICUwOGx4XG4iLCBhZGRyKTsKKwlkZWJ1ZygiVExCIHRhYmxlIGF0OiAlMDhseFxuIiwgYWRkcik7CiAjZW5kaWYKIAogCS8qIHJvdW5kIGRvd24gdG8gbmV4dCA0IGtCIGxpbWl0ICovCiAJYWRkciAmPSB+KDQwOTYgLSAxKTsKLQlkZWJ1ZyAoIlRvcCBvZiBSQU0gdXNhYmxlIGZvciBVLUJvb3QgYXQ6ICUwOGx4XG4iLCBhZGRyKTsKKwlkZWJ1ZygiVG9wIG9mIFJBTSB1c2FibGUgZm9yIFUtQm9vdCBhdDogJTA4bHhcbiIsIGFkZHIpOwogCiAjaWZkZWYgQ09ORklHX0xDRAogI2lmZGVmIENPTkZJR19GQl9BRERSCiAJZ2QtPmZiX2Jhc2UgPSBDT05GSUdfRkJfQUREUjsKICNlbHNlCiAJLyogcmVzZXJ2ZSBtZW1vcnkgZm9yIExDRCBkaXNwbGF5IChhbHdheXMgZnVsbCBwYWdlcykgKi8KLQlhZGRyID0gbGNkX3NldG1lbSAoYWRkcik7CisJYWRkciA9IGxjZF9zZXRtZW0oYWRkcik7CiAJZ2QtPmZiX2Jhc2UgPSBhZGRyOwogI2VuZGlmIC8qIENPTkZJR19GQl9BRERSICovCiAjZW5kaWYgLyogQ09ORklHX0xDRCAqLwpAQCAtMzU0LDE0ICszNTgsMTQgQEAKIAlhZGRyIC09IGdkLT5tb25fbGVuOwogCWFkZHIgJj0gfig0MDk2IC0gMSk7CiAKLQlkZWJ1ZyAoIlJlc2VydmluZyAlbGRrIGZvciBVLUJvb3QgYXQ6ICUwOGx4XG4iLCBnZC0+bW9uX2xlbiA+PiAxMCwgYWRkcik7CisJZGVidWcoIlJlc2VydmluZyAlbGRrIGZvciBVLUJvb3QgYXQ6ICUwOGx4XG4iLCBnZC0+bW9uX2xlbiA+PiAxMCwgYWRkcik7CiAKICNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAogCS8qCiAJICogcmVzZXJ2ZSBtZW1vcnkgZm9yIG1hbGxvYygpIGFyZW5hCiAJICovCiAJYWRkcl9zcCA9IGFkZHIgLSBUT1RBTF9NQUxMT0NfTEVOOwotCWRlYnVnICgiUmVzZXJ2aW5nICVkayBmb3IgbWFsbG9jKCkgYXQ6ICUwOGx4XG4iLAorCWRlYnVnKCJSZXNlcnZpbmcgJWRrIGZvciBtYWxsb2MoKSBhdDogJTA4bHhcbiIsCiAJCQlUT1RBTF9NQUxMT0NfTEVOID4+IDEwLCBhZGRyX3NwKTsKIAkvKgogCSAqIChwZXJtYW5lbnRseSkgYWxsb2NhdGUgYSBCb2FyZCBJbmZvIHN0cnVjdApAQCAtMzcwLDE4ICszNzQsMTggQEAKIAlhZGRyX3NwIC09IHNpemVvZiAoYmRfdCk7CiAJYmQgPSAoYmRfdCAqKSBhZGRyX3NwOwogCWdkLT5iZCA9IGJkOwotCWRlYnVnICgiUmVzZXJ2aW5nICV6dSBCeXRlcyBmb3IgQm9hcmQgSW5mbyBhdDogJTA4bHhcbiIsCisJZGVidWcoIlJlc2VydmluZyAlenUgQnl0ZXMgZm9yIEJvYXJkIEluZm8gYXQ6ICUwOGx4XG4iLAogCQkJc2l6ZW9mIChiZF90KSwgYWRkcl9zcCk7CiAJYWRkcl9zcCAtPSBzaXplb2YgKGdkX3QpOwogCWlkID0gKGdkX3QgKikgYWRkcl9zcDsKLQlkZWJ1ZyAoIlJlc2VydmluZyAlenUgQnl0ZXMgZm9yIEdsb2JhbCBEYXRhIGF0OiAlMDhseFxuIiwKKwlkZWJ1ZygiUmVzZXJ2aW5nICV6dSBCeXRlcyBmb3IgR2xvYmFsIERhdGEgYXQ6ICUwOGx4XG4iLAogCQkJc2l6ZW9mIChnZF90KSwgYWRkcl9zcCk7CiAKIAkvKiBzZXR1cCBzdGFja3BvaW50ZXIgZm9yIGV4ZXB0aW9ucyAqLwogCWdkLT5pcnFfc3AgPSBhZGRyX3NwOwogI2lmZGVmIENPTkZJR19VU0VfSVJRCiAJYWRkcl9zcCAtPSAoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpOwotCWRlYnVnICgiUmVzZXJ2aW5nICV6dSBCeXRlcyBmb3IgSVJRIHN0YWNrIGF0OiAlMDhseFxuIiwKKwlkZWJ1ZygiUmVzZXJ2aW5nICV6dSBCeXRlcyBmb3IgSVJRIHN0YWNrIGF0OiAlMDhseFxuIiwKIAkJQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEsIGFkZHJfc3ApOwogI2VuZGlmCiAJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAgKi8KQEAgLTM5NCwxMSArMzk4LDExIEBACiAJZ2QtPmlycV9zcCA9IGFkZHJfc3A7CiAjZW5kaWYKIAotCWRlYnVnICgiTmV3IFN0YWNrIFBvaW50ZXIgaXM6ICUwOGx4XG4iLCBhZGRyX3NwKTsKKwlkZWJ1ZygiTmV3IFN0YWNrIFBvaW50ZXIgaXM6ICUwOGx4XG4iLCBhZGRyX3NwKTsKIAogI2lmZGVmIENPTkZJR19QT1NUCiAJcG9zdF9ib290bW9kZV9pbml0KCk7Ci0JcG9zdF9ydW4gKE5VTEwsIFBPU1RfUk9NIHwgcG9zdF9ib290bW9kZV9nZXQoMCkpOworCXBvc3RfcnVuKE5VTEwsIFBPU1RfUk9NIHwgcG9zdF9ib290bW9kZV9nZXQoMCkpOwogI2VuZGlmCiAKIAlnZC0+YmQtPmJpX2JhdWRyYXRlID0gZ2QtPmJhdWRyYXRlOwpAQCAtNDA5LDEwICs0MTMsMTAgQEAKIAlnZC0+cmVsb2NhZGRyID0gYWRkcjsKIAlnZC0+c3RhcnRfYWRkcl9zcCA9IGFkZHJfc3A7CiAJZ2QtPnJlbG9jX29mZiA9IGFkZHIgLSBfVEVYVF9CQVNFOwotCWRlYnVnICgicmVsb2NhdGlvbiBPZmZzZXQgaXM6ICUwOGx4XG4iLCBnZC0+cmVsb2Nfb2ZmKTsKLQltZW1jcHkgKGlkLCAodm9pZCAqKWdkLCBzaXplb2YgKGdkX3QpKTsKKwlkZWJ1ZygicmVsb2NhdGlvbiBPZmZzZXQgaXM6ICUwOGx4XG4iLCBnZC0+cmVsb2Nfb2ZmKTsKKwltZW1jcHkoaWQsICh2b2lkICopZ2QsIHNpemVvZihnZF90KSk7CiAKLQlyZWxvY2F0ZV9jb2RlIChhZGRyX3NwLCBpZCwgYWRkcik7CisJcmVsb2NhdGVfY29kZShhZGRyX3NwLCBpZCwgYWRkcik7CiAKIAkvKiBOT1RSRUFDSEVEIC0gcmVsb2NhdGVfY29kZSgpIGRvZXMgbm90IHJldHVybiAqLwogfQpAQCAtNDIxLDcgKzQyNSw4IEBACiBzdGF0aWMgY2hhciAqZmFpbGVkID0gIioqKiBmYWlsZWQgKioqXG4iOwogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVGhpcyBpcyB0aGUgbmV4dCBwYXJ0IGlmIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZTogd2UgYXJlIG5vdwogICogcnVubmluZyBmcm9tIFJBTSBhbmQgaGF2ZSBhICJub3JtYWwiIEMgZW52aXJvbm1lbnQsIGkuIGUuIGdsb2JhbApAQCAtNDMxLDcgKzQzNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotdm9pZCBib2FyZF9pbml0X3IgKGdkX3QgKmlkLCB1bG9uZyBkZXN0X2FkZHIpCit2b2lkIGJvYXJkX2luaXRfcihnZF90ICppZCwgdWxvbmcgZGVzdF9hZGRyKQogewogCWNoYXIgKnM7CiAJYmRfdCAqYmQ7CkBAIC00NTIsMjAgKzQ1NywyMCBAQAogCSAqLwogCWRjYWNoZV9lbmFibGUoKTsKIAotCWRlYnVnICgibW9uaXRvciBmbGFzaCBsZW46ICUwOGxYXG4iLCBtb25pdG9yX2ZsYXNoX2xlbik7CisJZGVidWcoIm1vbml0b3IgZmxhc2ggbGVuOiAlMDhsWFxuIiwgbW9uaXRvcl9mbGFzaF9sZW4pOwogCWJvYXJkX2luaXQoKTsJLyogU2V0dXAgY2hpcHNlbGVjdHMgKi8KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfTVVMVEkKIAlzZXJpYWxfaW5pdGlhbGl6ZSgpOwogI2VuZGlmCiAKLQlkZWJ1ZyAoIk5vdyBydW5uaW5nIGluIFJBTSAtIFUtQm9vdCBhdDogJTA4bHhcbiIsIGRlc3RfYWRkcik7CisJZGVidWcoIk5vdyBydW5uaW5nIGluIFJBTSAtIFUtQm9vdCBhdDogJTA4bHhcbiIsIGRlc3RfYWRkcik7CiAKICNpZmRlZiBDT05GSUdfTE9HQlVGRkVSCi0JbG9nYnVmZl9pbml0X3B0cnMgKCk7CisJbG9nYnVmZl9pbml0X3B0cnMoKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QT1NUCi0JcG9zdF9vdXRwdXRfYmFja2xvZyAoKTsKKwlwb3N0X291dHB1dF9iYWNrbG9nKCk7CiAjZW5kaWYKIAogCS8qIFRoZSBNYWxsb2MgYXJlYSBpcyBpbW1lZGlhdGVseSBiZWxvdyB0aGUgbW9uaXRvciBjb3B5IGluIERSQU0gKi8KQEAgLTQ3MywzNCArNDc4LDM1IEBACiAJbWVtX21hbGxvY19pbml0IChtYWxsb2Nfc3RhcnQsIFRPVEFMX01BTExPQ19MRU4pOwogCiAjaWYgIWRlZmluZWQoQ09ORklHX1NZU19OT19GTEFTSCkKLQlwdXRzICgiRmxhc2g6ICIpOworCXB1dHMoIkZsYXNoOiAiKTsKIAotCWlmICgoZmxhc2hfc2l6ZSA9IGZsYXNoX2luaXQgKCkpID4gMCkgeworCWZsYXNoX3NpemUgPSBmbGFzaF9pbml0KCk7CisJaWYgKGZsYXNoX3NpemUgPiAwKSB7CiAjIGlmZGVmIENPTkZJR19TWVNfRkxBU0hfQ0hFQ0tTVU0KLQkJcHJpbnRfc2l6ZSAoZmxhc2hfc2l6ZSwgIiIpOworCQlwcmludF9zaXplKGZsYXNoX3NpemUsICIiKTsKIAkJLyoKIAkJICogQ29tcHV0ZSBhbmQgcHJpbnQgZmxhc2ggQ1JDIGlmIGZsYXNoY2hlY2tzdW0gaXMgc2V0IHRvICd5JwogCQkgKgogCQkgKiBOT1RFOiBNYXliZSB3ZSBzaG91bGQgYWRkIHNvbWUgV0FUQ0hET0dfUkVTRVQoKT8gWFhYCiAJCSAqLwotCQlzID0gZ2V0ZW52ICgiZmxhc2hjaGVja3N1bSIpOworCQlzID0gZ2V0ZW52KCJmbGFzaGNoZWNrc3VtIik7CiAJCWlmIChzICYmICgqcyA9PSAneScpKSB7Ci0JCQlwcmludGYgKCIgIENSQzogJTA4WCIsCi0JCQkJY3JjMzIgKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIENPTkZJR19TWVNfRkxBU0hfQkFTRSwgZmxhc2hfc2l6ZSkKLQkJCSk7CisJCQlwcmludGYoIiAgQ1JDOiAlMDhYIiwgY3JjMzIoMCwKKwkJCQkoY29uc3QgdW5zaWduZWQgY2hhciAqKSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UsCisJCQkJZmxhc2hfc2l6ZSkpOwogCQl9Ci0JCXB1dGMgKCdcbicpOworCQlwdXRjKCdcbicpOwogIyBlbHNlCS8qICFDT05GSUdfU1lTX0ZMQVNIX0NIRUNLU1VNICovCi0JCXByaW50X3NpemUgKGZsYXNoX3NpemUsICJcbiIpOworCQlwcmludF9zaXplKGZsYXNoX3NpemUsICJcbiIpOwogIyBlbmRpZiAvKiBDT05GSUdfU1lTX0ZMQVNIX0NIRUNLU1VNICovCiAJfSBlbHNlIHsKLQkJcHV0cyAoZmFpbGVkKTsKLQkJaGFuZyAoKTsKKwkJcHV0cyhmYWlsZWQpOworCQloYW5nKCk7CiAJfQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DTURfTkFORCkKLQlwdXRzICgiTkFORDogICIpOworCXB1dHMoIk5BTkQ6ICAiKTsKIAluYW5kX2luaXQoKTsJCS8qIGdvIGluaXQgdGhlIE5BTkQgKi8KICNlbmRpZgogCkBAIC01MTksNDQgKzUyNSw0NCBAQAogI2VuZGlmCiAKIAkvKiBpbml0aWFsaXplIGVudmlyb25tZW50ICovCi0JZW52X3JlbG9jYXRlICgpOworCWVudl9yZWxvY2F0ZSgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ01EX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfUENJKQogCWFybV9wY2lfaW5pdCgpOwogI2VuZGlmCiAKIAkvKiBJUCBBZGRyZXNzICovCi0JZ2QtPmJkLT5iaV9pcF9hZGRyID0gZ2V0ZW52X0lQYWRkciAoImlwYWRkciIpOworCWdkLT5iZC0+YmlfaXBfYWRkciA9IGdldGVudl9JUGFkZHIoImlwYWRkciIpOwogCi0Jc3RkaW9faW5pdCAoKTsJLyogZ2V0IHRoZSBkZXZpY2VzIGxpc3QgZ29pbmcuICovCisJc3RkaW9faW5pdCgpOwkvKiBnZXQgdGhlIGRldmljZXMgbGlzdCBnb2luZy4gKi8KIAotCWp1bXB0YWJsZV9pbml0ICgpOworCWp1bXB0YWJsZV9pbml0KCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUEkpCiAJLyogSW5pdGlhbGl6ZSBBUEkgKi8KLQlhcGlfaW5pdCAoKTsKKwlhcGlfaW5pdCgpOwogI2VuZGlmCiAKLQljb25zb2xlX2luaXRfciAoKTsJLyogZnVsbHkgaW5pdCBjb25zb2xlIGFzIGEgZGV2aWNlICovCisJY29uc29sZV9pbml0X3IoKTsJLyogZnVsbHkgaW5pdCBjb25zb2xlIGFzIGEgZGV2aWNlICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01JU0NfSU5JVCkKIAkvKiBtaXNjZWxsYW5lb3VzIGFyY2ggZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucyAqLwotCWFyY2hfbWlzY19pbml0ICgpOworCWFyY2hfbWlzY19pbml0KCk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NSVNDX0lOSVRfUikKIAkvKiBtaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMgKi8KLQltaXNjX2luaXRfciAoKTsKKwltaXNjX2luaXRfcigpOwogI2VuZGlmCiAKIAkgLyogc2V0IHVwIGV4Y2VwdGlvbnMgKi8KLQlpbnRlcnJ1cHRfaW5pdCAoKTsKKwlpbnRlcnJ1cHRfaW5pdCgpOwogCS8qIGVuYWJsZSBleGNlcHRpb25zICovCi0JZW5hYmxlX2ludGVycnVwdHMgKCk7CisJZW5hYmxlX2ludGVycnVwdHMoKTsKIAogCS8qIFBlcmZvcm0gbmV0d29yayBjYXJkIGluaXRpYWxpc2F0aW9uIGlmIG5lY2Vzc2FyeSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RSSVZFUl9TTUM5MTExMSkgfHwgZGVmaW5lZCAoQ09ORklHX0RSSVZFUl9MQU45MUM5NikKIAkvKiBYWFg6IHRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gYm9hcmQgaW5pdCAqLwotCWlmIChnZXRlbnYgKCJldGhhZGRyIikpIHsKKwlpZiAoZ2V0ZW52KCJldGhhZGRyIikpIHsKIAkJdWNoYXIgZW5ldGFkZHJbNl07CiAJCWV0aF9nZXRlbnZfZW5ldGFkZHIoImV0aGFkZHIiLCBlbmV0YWRkcik7CiAJCXNtY19zZXRfbWFjX2FkZHIoZW5ldGFkZHIpOwpAQCAtNTY0LDE3ICs1NzAsMTcgQEAKICNlbmRpZiAvKiBDT05GSUdfRFJJVkVSX1NNQzkxMTExIHx8IENPTkZJR19EUklWRVJfTEFOOTFDOTYgKi8KIAogCS8qIEluaXRpYWxpemUgZnJvbSBlbnZpcm9ubWVudCAqLwotCWlmICgocyA9IGdldGVudiAoImxvYWRhZGRyIikpICE9IE5VTEwpIHsKLQkJbG9hZF9hZGRyID0gc2ltcGxlX3N0cnRvdWwgKHMsIE5VTEwsIDE2KTsKLQl9CisJcyA9IGdldGVudigibG9hZGFkZHIiKTsKKwlpZiAocyAhPSBOVUxMKQorCQlsb2FkX2FkZHIgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAxNik7CiAjaWYgZGVmaW5lZChDT05GSUdfQ01EX05FVCkKLQlpZiAoKHMgPSBnZXRlbnYgKCJib290ZmlsZSIpKSAhPSBOVUxMKSB7Ci0JCWNvcHlfZmlsZW5hbWUgKEJvb3RGaWxlLCBzLCBzaXplb2YgKEJvb3RGaWxlKSk7Ci0JfQorCXMgPSBnZXRlbnYoImJvb3RmaWxlIik7CisJaWYgKHMgIT0gTlVMTCkKKwkJY29weV9maWxlbmFtZShCb290RmlsZSwgcywgc2l6ZW9mKEJvb3RGaWxlKSk7CiAjZW5kaWYKIAogI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAotCWJvYXJkX2xhdGVfaW5pdCAoKTsKKwlib2FyZF9sYXRlX2luaXQoKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0JJVEJBTkdNSUkKQEAgLTU4MiwxNyArNTg4LDE3IEBACiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DTURfTkVUKQogI2lmIGRlZmluZWQoQ09ORklHX05FVF9NVUxUSSkKLQlwdXRzICgiTmV0OiAgICIpOworCXB1dHMoIk5ldDogICAiKTsKICNlbmRpZgogCWV0aF9pbml0aWFsaXplKGdkLT5iZCk7CiAjaWYgZGVmaW5lZChDT05GSUdfUkVTRVRfUEhZX1IpCi0JZGVidWcgKCJSZXNldCBFdGhlcm5ldCBQSFlcbiIpOworCWRlYnVnKCJSZXNldCBFdGhlcm5ldCBQSFlcbiIpOwogCXJlc2V0X3BoeSgpOwogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QT1NUCi0JcG9zdF9ydW4gKE5VTEwsIFBPU1RfUkFNIHwgcG9zdF9ib290bW9kZV9nZXQoMCkpOworCXBvc3RfcnVuKE5VTEwsIFBPU1RfUkFNIHwgcG9zdF9ib290bW9kZV9nZXQoMCkpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUkFNKSB8fCBkZWZpbmVkKENPTkZJR19MT0dCVUZGRVIpCkBAIC02MDYsMzUgKzYxMiwzNSBAQAogI2lmZGVmIENPTkZJR19QUkFNCiAJCWNoYXIgKnM7CiAKLQkJaWYgKChzID0gZ2V0ZW52ICgicHJhbSIpKSAhPSBOVUxMKSB7Ci0JCQlwcmFtID0gc2ltcGxlX3N0cnRvdWwgKHMsIE5VTEwsIDEwKTsKLQkJfSBlbHNlIHsKKwkJcyA9IGdldGVudigicHJhbSIpOworCQlpZiAocyAhPSBOVUxMKQorCQkJcHJhbSA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDEwKTsKKwkJZWxzZQogCQkJcHJhbSA9IENPTkZJR19QUkFNOwotCQl9CiAjZWxzZQotCQlwcmFtPTA7CisJCXByYW0gPSAwOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0xPR0JVRkZFUgogI2lmbmRlZiBDT05GSUdfQUxUX0xCX0FERFIKIAkJLyogQWxzbyB0YWtlIHRoZSBsb2didWZmZXIgaW50byBhY2NvdW50IChwcmFtIGlzIGluIGtCKSAqLwotCQlwcmFtICs9IChMT0dCVUZGX0xFTitMT0dCVUZGX09WRVJIRUFEKS8xMDI0OworCQlwcmFtICs9IChMT0dCVUZGX0xFTiArIExPR0JVRkZfT1ZFUkhFQUQpIC8gMTAyNDsKICNlbmRpZgogI2VuZGlmCi0JCXNwcmludGYgKChjaGFyICopbWVtc3osICIlbGRrIiwgKGJkLT5iaV9tZW1zaXplIC8gMTAyNCkgLSBwcmFtKTsKLQkJc2V0ZW52ICgibWVtIiwgKGNoYXIgKiltZW1zeik7CisJCXNwcmludGYoKGNoYXIgKiltZW1zeiwgIiVsZGsiLCAoYmQtPmJpX21lbXNpemUgLyAxMDI0KSAtIHByYW0pOworCQlzZXRlbnYoIm1lbSIsIChjaGFyICopbWVtc3opOwogCX0KICNlbmRpZgogCiAJLyogbWFpbl9sb29wKCkgY2FuIHJldHVybiB0byByZXRyeSBhdXRvYm9vdCwgaWYgc28ganVzdCBydW4gaXQgYWdhaW4uICovCiAJZm9yICg7OykgewotCQltYWluX2xvb3AgKCk7CisJCW1haW5fbG9vcCgpOwogCX0KIAogCS8qIE5PVFJFQUNIRUQgLSBubyB3YXkgb3V0IG9mIGNvbW1hbmQgbG9vcCBleGNlcHQgYm9vdGluZyAqLwogfQogCi12b2lkIGhhbmcgKHZvaWQpCit2b2lkIGhhbmcodm9pZCkKIHsKLQlwdXRzICgiIyMjIEVSUk9SICMjIyBQbGVhc2UgUkVTRVQgdGhlIGJvYXJkICMjI1xuIik7CisJcHV0cygiIyMjIEVSUk9SICMjIyBQbGVhc2UgUkVTRVQgdGhlIGJvYXJkICMjI1xuIik7CiAJZm9yICg7Oyk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NYXJ2ZWxsL2dwbHVnZC9NYWtlZmlsZSBiL2JvYXJkL01hcnZlbGwvZ3BsdWdkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOGJiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9NYXJ2ZWxsL2dwbHVnZC9NYWtlZmlsZQpAQCAtMCwwICsxLDU3IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAxMQorIyBlSW5mb2NoaXBzIEx0ZC4gPHd3dy5laW5mb2NoaXBzLmNvbT4KKyMgV3JpdHRlbi1ieTogQWpheSBCaGFyZ2F2IDxhamF5LmJoYXJnYXZAZWluZm9jaGlwcy5jb20+CisjCisjIEJhc2VkIG9uIEFzcGVuaXRlOgorIyAoQykgQ29weXJpZ2h0IDIwMTAKKyMgTWFydmVsbCBTZW1pY29uZHVjdG9yIDx3d3cubWFydmVsbC5jb20+CisjIFdyaXR0ZW4tYnk6IFByYWZ1bGxhIFdhZGFza2FyIDxwcmFmdWxsYUBtYXJ2ZWxsLmNvbT4KKyMgQ29udHJpYnV0b3I6IE1haGF2aXIgSmFpbiA8bWphaW5AbWFydmVsbC5jb20+CisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyMgTUEgMDIxMTAtMTMwMSBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQiAgICAgPSAkKG9iailsaWIkKEJPQVJEKS5vCisKK0NPQkpTCTo9IGdwbHVnZC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9NYXJ2ZWxsL2dwbHVnZC9ncGx1Z2QuYyBiL2JvYXJkL01hcnZlbGwvZ3BsdWdkL2dwbHVnZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjN2Q4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9NYXJ2ZWxsL2dwbHVnZC9ncGx1Z2QuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDExCisgKiBlSW5mb2NoaXBzIEx0ZC4gPHd3dy5laW5mb2NoaXBzLmNvbT4KKyAqIFdyaXR0ZW4tYnk6IEFqYXkgQmhhcmdhdiA8YWpheS5iaGFyZ2F2QGVpbmZvY2hpcHMuY29tPgorICoKKyAqIEJhc2VkIG9uIEFzcGVuaXRlOgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgPHd3dy5tYXJ2ZWxsLmNvbT4KKyAqIFdyaXR0ZW4tYnk6IFByYWZ1bGxhIFdhZGFza2FyIDxwcmFmdWxsYUBtYXJ2ZWxsLmNvbT4KKyAqIENvbnRyaWJ1dG9yOiBNYWhhdmlyIEphaW4gPG1qYWluQG1hcnZlbGwuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXZtZnAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hcm1hZGExMDAuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK2ludCBib2FyZF9lYXJseV9pbml0X2Yodm9pZCkKK3sKKwl1MzIgbWZwX2NmZ1tdID0geworCQkvKiBJMkMgKi8KKwkJTUZQMTA1X0NJMkNfU0RBLAorCQlNRlAxMDZfQ0kyQ19TQ0wsCisKKwkJLyogRW5hYmxlIENvbnNvbGUgb24gVUFSVDMgKi8KKwkJTUZQTzhfVUFSVDNfVFhELAorCQlNRlBPOV9VQVJUM19SWEQsCisJCU1GUF9FT0MJCS8qRW5kIG9mIGNvbmZpZ3VyYXRpb24qLworCX07CisJLyogY29uZmlndXJlIE1GUCdzICovCisJbWZwX2NvbmZpZyhtZnBfY2ZnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBhcmNoIG51bWJlciBvZiBCb2FyZCAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfU0hFRVZBRDsKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IGFybWQxX3NkcmFtX2Jhc2UoMCkgKyAweDEwMDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FybWx0ZC92ZXJzYXRpbGUvY29uZmlnLm1rIGIvYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNTdhZjEuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS9jb25maWcubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgaW1hZ2Ugc2hvdWxkIGJlIGxvYWRlZCBhdCAweDAxMDAwMDAwCi0jCi0KLUNPTkZJR19TWVNfVEVYVF9CQVNFID0gMHgwMTAwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS92ZXJzYXRpbGUuYyBiL2JvYXJkL2FybWx0ZC92ZXJzYXRpbGUvdmVyc2F0aWxlLmMKaW5kZXggNmU4MzZkZC4uZWU4Y2I1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvYXJtbHRkL3ZlcnNhdGlsZS92ZXJzYXRpbGUuYworKysgYi9ib2FyZC9hcm1sdGQvdmVyc2F0aWxlL3ZlcnNhdGlsZS5jCkBAIC01MSw3ICs1MSw3IEBACiAgKiBNaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKICAqLwogCi1pbnQgYm9hcmRfaW5pdCAodm9pZCkKK2ludCBib2FyZF9lYXJseV9pbml0X2YgKHZvaWQpCiB7CiAJLyoKIAkgKiBzZXQgY2xvY2sgZnJlcXVlbmN5OgpAQCAtNjIsNiArNjIsMTEgQEAKIAkgICgoVkVSU0FUSUxFX1RJTUNMSyA8PCBWRVJTQVRJTEVfVElNRVIxX0VuU2VsKSB8IChWRVJTQVRJTEVfVElNQ0xLIDw8IFZFUlNBVElMRV9USU1FUjJfRW5TZWwpIHwKIAkgICAoVkVSU0FUSUxFX1RJTUNMSyA8PCBWRVJTQVRJTEVfVElNRVIzX0VuU2VsKSB8IChWRVJTQVRJTEVfVElNQ0xLIDw8IFZFUlNBVElMRV9USU1FUjRfRW5TZWwpKTsKIAorCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfaW5pdCAodm9pZCkKK3sKIAkvKiBhcmNoIG51bWJlciBvZiBWZXJzYXRpbGUgQm9hcmQgKi8KIAlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX1ZFUlNBVElMRV9QQjsKIApAQCAtODgsNiArOTMsOSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGRyYW1faW5pdCAodm9pZCkKIHsKKwkvKiBkcmFtX2luaXQgbXVzdCBzdG9yZSBjb21wbGV0ZSByYW1zaXplIGluIGdkLT5yYW1fc2l6ZSAqLworCWdkLT5yYW1fc2l6ZSA9IGdldF9yYW1fc2l6ZSgodm9sYXRpbGUgdm9pZCAqKUNPTkZJR19TWVNfU0RSQU1fQkFTRSwKKwkJCQlQSFlTX1NEUkFNXzFfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYxZWsvYXQ5MXNhbTkyNjFlay5jIGIvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjFlay9hdDkxc2FtOTI2MWVrLmMKaW5kZXggZGU1Y2ZhZS4uYjZjN2Q5ZSAxMDA2NDQKLS0tIGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjFlay9hdDkxc2FtOTI2MWVrLmMKKysrIGIvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjFlay9hdDkxc2FtOTI2MWVrLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNjEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MV9tYXRyaXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOV9zbWMuaD4KQEAgLTMxLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jbGsuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KICNpbmNsdWRlIDxsY2QuaD4KICNpbmNsdWRlIDxhdG1lbF9sY2RjLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfUkVTRVRfUEhZX1IpICYmIGRlZmluZWQoQ09ORklHX0RSSVZFUl9ETTkwMDApCkBAIC00OSw0NCArNDksNDggQEAKICNpZmRlZiBDT05GSUdfQ01EX05BTkQKIHN0YXRpYyB2b2lkIGF0OTFzYW05MjYxZWtfbmFuZF9od19pbml0KHZvaWQpCiB7CisJc3RydWN0IGF0OTFfc21jICpzbWMgPSAoc3RydWN0IGF0OTFfc21jICopQVRNRUxfQkFTRV9TTUM7CisJc3RydWN0IGF0OTFfbWF0cml4ICptYXRyaXggPSAoc3RydWN0IGF0OTFfbWF0cml4ICopQVRNRUxfQkFTRV9NQVRSSVg7CisJc3RydWN0IGF0OTFfcG1jICpwbWMgPSAoc3RydWN0IGF0OTFfcG1jICopQVRNRUxfQkFTRV9QTUM7CiAJdW5zaWduZWQgbG9uZyBjc2E7CiAKIAkvKiBFbmFibGUgQ1MzICovCi0JY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwKLQkJICAgICAgIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEpOworCWNzYSA9IHJlYWRsKCZtYXRyaXgtPmViaWNzYSk7CisJY3NhIHw9IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUE7CisKKwl3cml0ZWwoY3NhLCAmbWF0cml4LT5lYmljc2EpOwogCiAJLyogQ29uZmlndXJlIFNNQyBDUzMgZm9yIE5BTkQvU21hcnRNZWRpYSAqLwogI2lmZGVmIENPTkZJR19BVDkxU0FNOUcxMEVLCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfU0VUVVAoMyksCi0JCSAgICAgICBBVDkxX1NNQ19OV0VTRVRVUF8oMikgfCBBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oMCkgfAotCQkgICAgICAgQVQ5MV9TTUNfTlJEU0VUVVBfKDIpIHwgQVQ5MV9TTUNfTkNTX1JEU0VUVVBfKDApKTsKLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRSgzKSwKLQkJICAgICAgIEFUOTFfU01DX05XRVBVTFNFXygzKSB8IEFUOTFfU01DX05DU19XUlBVTFNFXyg3KSB8Ci0JCSAgICAgICBBVDkxX1NNQ19OUkRQVUxTRV8oMykgfCBBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oNykpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NZQ0xFKDMpLAotCQkgICAgICAgQVQ5MV9TTUNfTldFQ1lDTEVfKDcpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDcpKTsKKwl3cml0ZWwoQVQ5MV9TTUNfU0VUVVBfTldFKDIpIHwgQVQ5MV9TTUNfU0VUVVBfTkNTX1dSKDApIHwKKwkJQVQ5MV9TTUNfU0VUVVBfTlJEKDIpIHwgQVQ5MV9TTUNfU0VUVVBfTkNTX1JEKDApLAorCQkmc21jLT5jc1szXS5zZXR1cCk7CisJd3JpdGVsKEFUOTFfU01DX1BVTFNFX05XRSgzKSB8IEFUOTFfU01DX1BVTFNFX05DU19XUig3KSB8CisJCUFUOTFfU01DX1BVTFNFX05SRCgzKSB8IEFUOTFfU01DX1BVTFNFX05DU19SRCg3KSwKKwkJJnNtYy0+Y3NbM10ucHVsc2UpOworCXdyaXRlbChBVDkxX1NNQ19DWUNMRV9OV0UoNykgfCBBVDkxX1NNQ19DWUNMRV9OUkQoNyksCisJCSZzbWMtPmNzWzNdLmN5Y2xlKTsKICNlbHNlCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfU0VUVVAoMyksCi0JCSAgICAgICBBVDkxX1NNQ19OV0VTRVRVUF8oMSkgfCBBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oMCkgfAotCQkgICAgICAgQVQ5MV9TTUNfTlJEU0VUVVBfKDEpIHwgQVQ5MV9TTUNfTkNTX1JEU0VUVVBfKDApKTsKLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRSgzKSwKLQkJICAgICAgIEFUOTFfU01DX05XRVBVTFNFXygzKSB8IEFUOTFfU01DX05DU19XUlBVTFNFXygzKSB8Ci0JCSAgICAgICBBVDkxX1NNQ19OUkRQVUxTRV8oMykgfCBBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oMykpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NZQ0xFKDMpLAotCQkgICAgICAgQVQ5MV9TTUNfTldFQ1lDTEVfKDUpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDUpKTsKKwl3cml0ZWwoQVQ5MV9TTUNfU0VUVVBfTldFKDEpIHwgQVQ5MV9TTUNfU0VUVVBfTkNTX1dSKDApIHwKKwkJQVQ5MV9TTUNfU0VUVVBfTlJEKDEpIHwgQVQ5MV9TTUNfU0VUVVBfTkNTX1JEKDApLAorCQkmc21jLT5jc1szXS5zZXR1cCk7CisJd3JpdGVsKEFUOTFfU01DX1BVTFNFX05XRSgzKSB8IEFUOTFfU01DX1BVTFNFX05DU19XUigzKSB8CisJCUFUOTFfU01DX1BVTFNFX05SRCgzKSB8IEFUOTFfU01DX1BVTFNFX05DU19SRCgzKSwKKwkJJnNtYy0+Y3NbM10ucHVsc2UpOworCXdyaXRlbChBVDkxX1NNQ19DWUNMRV9OV0UoNSkgfCBBVDkxX1NNQ19DWUNMRV9OUkQoNSksCisJCSZzbWMtPmNzWzNdLmN5Y2xlKTsKICNlbmRpZgotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX01PREUoMyksCi0JCSAgICAgICBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8Ci0JCSAgICAgICBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwKKwl3cml0ZWwoQVQ5MV9TTUNfTU9ERV9STV9OUkQgfCBBVDkxX1NNQ19NT0RFX1dNX05XRSB8CisJCSAgICAgICBBVDkxX1NNQ19NT0RFX0VYTldfRElTQUJMRSB8CiAjaWZkZWYgQ09ORklHX1NZU19OQU5EX0RCV18xNgotCQkgICAgICAgQVQ5MV9TTUNfREJXXzE2IHwKKwkJICAgICAgIEFUOTFfU01DX01PREVfREJXXzE2IHwKICNlbHNlIC8qIENPTkZJR19TWVNfTkFORF9EQldfOCAqLwotCQkgICAgICAgQVQ5MV9TTUNfREJXXzggfAorCQkgICAgICAgQVQ5MV9TTUNfTU9ERV9EQldfOCB8CiAjZW5kaWYKLQkJICAgICAgIEFUOTFfU01DX1RERl8oMikpOworCQkgICAgICAgQVQ5MV9TTUNfTU9ERV9UREZfQ1lDTEUoMiksCisJCSAgICAgICAmc21jLT5jc1szXS5tb2RlKTsKIAotCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRVIsIDEgPDwgQVQ5MVNBTTkyNjFfSURfUElPQyk7CisJd3JpdGVsKDEgPDwgQVRNRUxfSURfUElPQywgJnBtYy0+cGNlcik7CiAKIAkvKiBDb25maWd1cmUgUkRZL0JTWSAqLwogCWF0OTFfc2V0X2dwaW9faW5wdXQoQ09ORklHX1NZU19OQU5EX1JFQURZX1BJTiwgMSk7CkBAIC0xMDIsMzUgKzEwNiwzNyBAQAogI2lmZGVmIENPTkZJR19EUklWRVJfRE05MDAwCiBzdGF0aWMgdm9pZCBhdDkxc2FtOTI2MWVrX2RtOTAwMF9od19pbml0KHZvaWQpCiB7CisJc3RydWN0IGF0OTFfc21jICpzbWMgPSAoc3RydWN0IGF0OTFfc21jICopQVRNRUxfQkFTRV9TTUM7CisKIAkvKiBDb25maWd1cmUgU01DIENTMiBmb3IgRE05MDAwICovCiAjaWZkZWYgQ09ORklHX0FUOTFTQU05RzEwRUsKLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19TRVRVUCgyKSwKLQkJICAgICAgIEFUOTFfU01DX05XRVNFVFVQXygzKSB8IEFUOTFfU01DX05DU19XUlNFVFVQXygwKSB8Ci0JCSAgICAgICBBVDkxX1NNQ19OUkRTRVRVUF8oMykgfCBBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oMCkpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1BVTFNFKDIpLAotCQkgICAgICAgQVQ5MV9TTUNfTldFUFVMU0VfKDYpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDgpIHwKLQkJICAgICAgIEFUOTFfU01DX05SRFBVTFNFXyg2KSB8IEFUOTFfU01DX05DU19SRFBVTFNFXyg4KSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMiksCi0JCSAgICAgICBBVDkxX1NNQ19OV0VDWUNMRV8oMjApIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDIwKSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERSgyKSwKLQkJICAgICAgIEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwKLQkJICAgICAgIEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfAotCQkgICAgICAgQVQ5MV9TTUNfQkFUX1dSSVRFIHwgQVQ5MV9TTUNfREJXXzE2IHwKLQkJICAgICAgIEFUOTFfU01DX1RERl8oMSkpOworCXdyaXRlbChBVDkxX1NNQ19TRVRVUF9OV0UoMykgfCBBVDkxX1NNQ19TRVRVUF9OQ1NfV1IoMCkgfAorCQlBVDkxX1NNQ19TRVRVUF9OUkQoMykgfCBBVDkxX1NNQ19TRVRVUF9OQ1NfUkQoMCksCisJCSZzbWMtPmNzWzJdLnNldHVwKTsKKwl3cml0ZWwoQVQ5MV9TTUNfUFVMU0VfTldFKDYpIHwgQVQ5MV9TTUNfUFVMU0VfTkNTX1dSKDgpIHwKKwkJQVQ5MV9TTUNfUFVMU0VfTlJEKDYpIHwgQVQ5MV9TTUNfUFVMU0VfTkNTX1JEKDgpLAorCQkmc21jLT5jc1syXS5wdWxzZSk7CisJd3JpdGVsKEFUOTFfU01DX0NZQ0xFX05XRSgyMCkgfCBBVDkxX1NNQ19DWUNMRV9OUkQoMjApLAorCQkmc21jLT5jc1syXS5jeWNsZSk7CisJd3JpdGVsKEFUOTFfU01DX01PREVfUk1fTlJEIHwgQVQ5MV9TTUNfTU9ERV9XTV9OV0UgfAorCQkgICAgICAgQVQ5MV9TTUNfTU9ERV9FWE5XX0RJU0FCTEUgfAorCQkgICAgICAgQVQ5MV9TTUNfTU9ERV9CQVQgfCBBVDkxX1NNQ19NT0RFX0RCV18xNiB8CisJCSAgICAgICBBVDkxX1NNQ19NT0RFX1RERl9DWUNMRSgxKSwKKwkJICAgICAgICZzbWMtPmNzWzJdLm1vZGUpOwogI2Vsc2UKLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19TRVRVUCgyKSwKLQkJICAgICAgIEFUOTFfU01DX05XRVNFVFVQXygyKSB8IEFUOTFfU01DX05DU19XUlNFVFVQXygwKSB8Ci0JCSAgICAgICBBVDkxX1NNQ19OUkRTRVRVUF8oMikgfCBBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oMCkpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1BVTFNFKDIpLAotCQkgICAgICAgQVQ5MV9TTUNfTldFUFVMU0VfKDQpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDgpIHwKLQkJICAgICAgIEFUOTFfU01DX05SRFBVTFNFXyg0KSB8IEFUOTFfU01DX05DU19SRFBVTFNFXyg4KSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMiksCi0JCSAgICAgICBBVDkxX1NNQ19OV0VDWUNMRV8oMTYpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDE2KSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERSgyKSwKLQkJICAgICAgIEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwKLQkJICAgICAgIEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfAotCQkgICAgICAgQVQ5MV9TTUNfQkFUX1dSSVRFIHwgQVQ5MV9TTUNfREJXXzE2IHwKLQkJICAgICAgIEFUOTFfU01DX1RERl8oMSkpOworCXdyaXRlbChBVDkxX1NNQ19TRVRVUF9OV0UoMykgfCBBVDkxX1NNQ19TRVRVUF9OQ1NfV1IoMCkgfAorCQlBVDkxX1NNQ19TRVRVUF9OUkQoMikgfCBBVDkxX1NNQ19TRVRVUF9OQ1NfUkQoMCksCisJCSZzbWMtPmNzWzJdLnNldHVwKTsKKwl3cml0ZWwoQVQ5MV9TTUNfUFVMU0VfTldFKDQpIHwgQVQ5MV9TTUNfUFVMU0VfTkNTX1dSKDgpIHwKKwkJQVQ5MV9TTUNfUFVMU0VfTlJEKDQpIHwgQVQ5MV9TTUNfUFVMU0VfTkNTX1JEKDgpLAorCQkmc21jLT5jc1syXS5wdWxzZSk7CisJd3JpdGVsKEFUOTFfU01DX0NZQ0xFX05XRSgxNikgfCBBVDkxX1NNQ19DWUNMRV9OUkQoMTYpLAorCQkmc21jLT5jc1syXS5jeWNsZSk7CisJd3JpdGVsKEFUOTFfU01DX01PREVfUk1fTlJEIHwgQVQ5MV9TTUNfTU9ERV9XTV9OV0UgfAorCQkgICAgICAgQVQ5MV9TTUNfTU9ERV9FWE5XX0RJU0FCTEUgfAorCQkgICAgICAgQVQ5MV9TTUNfTU9ERV9CQVQgfCBBVDkxX1NNQ19NT0RFX0RCV18xNiB8CisJCSAgICAgICBBVDkxX1NNQ19NT0RFX1RERl9DWUNMRSgxKSwKKwkJICAgICAgICZzbWMtPmNzWzJdLm1vZGUpOwogI2VuZGlmCiAKIAkvKiBDb25maWd1cmUgUmVzZXQgc2lnbmFsIGFzIG91dHB1dCAqLwpAQCAtMTU2LDcgKzE2Miw3IEBACiAJdmxfdnN5bmNfbGVuOgkxLAogCXZsX3VwcGVyX21hcmdpbjoxLAogCXZsX2xvd2VyX21hcmdpbjowLAotCW1taW86CQlBVDkxU0FNOTI2MV9MQ0RDX0JBU0UsCisJbW1pbzoJCUFUTUVMX0JBU0VfTENEQywKIH07CiAKIHZvaWQgbGNkX2VuYWJsZSh2b2lkKQpAQCAtMTcxLDYgKzE3Nyw4IEBACiAKIHN0YXRpYyB2b2lkIGF0OTFzYW05MjYxZWtfbGNkX2h3X2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyA9IChzdHJ1Y3QgYXQ5MV9wbWMgKilBVE1FTF9CQVNFX1BNQzsKKwogCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIExDREhTWU5DICovCiAJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogTENERE9UQ0sgKi8KIAlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOwkvKiBMQ0RERU4gKi8KQEAgLTE5NCwxMiArMjAyLDExIEBACiAJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyNywgMCk7CS8qIExDREQyMiAqLwogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjgsIDApOwkvKiBMQ0REMjMgKi8KIAotCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRVIsIEFUOTFfUE1DX0hDSzEpOworCXdyaXRlbChBVDkxX1BNQ19IQ0sxLCAmcG1jLT5zY2VyKTsKIAotI2lmZGVmIENPTkZJR19BVDkxU0FNOUcxMEVLCi0JZ2QtPmZiX2Jhc2UgPSBDT05GSUdfQVQ5MVNBTTlHMTBfTENEX0JBU0U7Ci0jZWxzZQotCWdkLT5mYl9iYXNlID0gQVQ5MVNBTTkyNjFfU1JBTV9CQVNFOworCS8qIEZvciA5RzEwRUssIGxldCBVLUJvb3QgYWxsb2NhdGUgdGhlIGZyYW1lYnVmZmVyIGluIFNEUkFNICovCisjaWZkZWYgQ09ORklHX0FUOTFTQU05MjYxRUsKKwlnZC0+ZmJfYmFzZSA9IEFUTUVMX0JBU0VfU1JBTTsKICNlbmRpZgogfQogCkBAIC0yMTcsNyArMjI0LDcgQEAKIAlsY2RfcHJpbnRmICgiKEMpIDIwMDggQVRNRUwgQ29ycFxuIik7CiAJbGNkX3ByaW50ZiAoImF0OTFzdXBwb3J0QGF0bWVsLmNvbVxuIik7CiAJbGNkX3ByaW50ZiAoIiVzIENQVSBhdCAlcyBNSHpcbiIsCi0JCUNPTkZJR19TWVNfQVQ5MV9DUFVfTkFNRSwKKwkJQVRNRUxfQ1BVX05BTUUsCiAJCXN0cm1oeih0ZW1wLCBnZXRfY3B1X2Nsa19yYXRlKCkpKTsKIAogCWRyYW1fc2l6ZSA9IDA7CkBAIC0yNDYsOSArMjUzLDkgQEAKIAlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0FUOTFTQU05MjYxRUs7CiAjZW5kaWYKIAkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCi0JZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU0gKyAweDEwMDsKKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gQ09ORklHX1NZU19TRFJBTV9CQVNFICsgMHgxMDA7CiAKLQlhdDkxX3NlcmlhbF9od19pbml0KCk7CisJYXQ5MV9zZXJpYWxkX2h3X2luaXQoKTsKICNpZmRlZiBDT05GSUdfQ01EX05BTkQKIAlhdDkxc2FtOTI2MWVrX25hbmRfaHdfaW5pdCgpOwogI2VuZGlmCkBAIC0yNzMsOCArMjgwLDkgQEAKIAogaW50IGRyYW1faW5pdCh2b2lkKQogewotCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisJZ2QtPnJhbV9zaXplID0gZ2V0X3JhbV9zaXplKCh2b2lkICopQ09ORklHX1NZU19TRFJBTV9CQVNFLAorCQlDT05GSUdfU1lTX1NEUkFNX1NJWkUpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYxZWsvY29uZmlnLm1rIGIvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjFlay9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NTRhNDUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjFlay9jb25maWcubWsKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1DT05GSUdfU1lTX1RFWFRfQkFTRSA9IDB4MjNmMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYxZWsvbGVkLmMgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MWVrL2xlZC5jCmluZGV4IDVkMWM1ZjIuLjBjMmY1MjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYxZWsvbGVkLmMKKysrIGIvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjFlay9sZWQuYwpAQCAtMjYsMTIgKzI2LDE1IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNjEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcGlvLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHZvaWQgY29sb3VyZWRfTEVEX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyA9IChzdHJ1Y3QgYXQ5MV9wbWMgKilBVE1FTF9CQVNFX1BNQzsKKwogCS8qIEVuYWJsZSBjbG9jayAqLwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRVIsIDEgPDwgQVQ5MVNBTTkyNjFfSURfUElPQSk7CisJd3JpdGVsKEFUTUVMX0lEX1BJT0EsICZwbWMtPnBjZXIpOwogCiAJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQ09ORklHX1JFRF9MRUQsIDEpOwogCWF0OTFfc2V0X2dwaW9fb3V0cHV0KENPTkZJR19HUkVFTl9MRUQsIDEpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjNlay9hdDkxc2FtOTI2M2VrLmMgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2M2VrL2F0OTFzYW05MjYzZWsuYwppbmRleCA5MWVmYzA3Li40ZDI5MzdkIDEwMDY0NAotLS0gYS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2M2VrL2F0OTFzYW05MjYzZWsuYworKysgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2M2VrL2F0OTFzYW05MjYzZWsuYwpAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfbWF0cml4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9waW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jbGsuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGxjZC5oPgogI2luY2x1ZGUgPGF0bWVsX2xjZGMuaD4KQEAgLTUyLDkgKzUzLDkgQEAKIHN0YXRpYyB2b2lkIGF0OTFzYW05MjYzZWtfbmFuZF9od19pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjc2E7Ci0JYXQ5MV9zbWNfdCAJKnNtYyAJPSAoYXQ5MV9zbWNfdCAqKSBBVDkxX1NNQzBfQkFTRTsKLQlhdDkxX21hdHJpeF90IAkqbWF0cml4ID0gKGF0OTFfbWF0cml4X3QgKikgQVQ5MV9NQVRSSVhfQkFTRTsKLQlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVDkxX1BNQ19CQVNFOworCWF0OTFfc21jX3QgICAgKnNtYyAgICA9IChhdDkxX3NtY190ICopIEFUTUVMX0JBU0VfU01DMDsKKwlhdDkxX21hdHJpeF90ICptYXRyaXggPSAoYXQ5MV9tYXRyaXhfdCAqKSBBVE1FTF9CQVNFX01BVFJJWDsKKwlhdDkxX3BtY190ICAgICpwbWMgICAgPSAoYXQ5MV9wbWNfdCAqKSBBVE1FTF9CQVNFX1BNQzsKIAogCS8qIEVuYWJsZSBDUzMgKi8KIAljc2EgPSByZWFkbCgmbWF0cml4LT5jc2FbMF0pIHwgQVQ5MV9NQVRSSVhfQ1NBX0VCSV9DUzNBOwpAQCAtODMsMTQgKzg0LDE0IEBACiAJCSAgICAgICBBVDkxX1NNQ19NT0RFX1RERl9DWUNMRSgyKSwKIAkJJnNtYy0+Y3NbM10ubW9kZSk7CiAKLQl3cml0ZWwoMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9BIHwgMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9DREUsCisJd3JpdGVsKDEgPDwgQVRNRUxfSURfUElPQSB8IDEgPDwgQVRNRUxfSURfUElPQ0RFLAogCQkmcG1jLT5wY2VyKTsKIAogCS8qIENvbmZpZ3VyZSBSRFkvQlNZICovCi0JYXQ5MV9zZXRfcGlvX2lucHV0KENPTkZJR19TWVNfTkFORF9SRUFEWV9QSU4sIDEpOworCWF0OTFfc2V0X2dwaW9faW5wdXQoQ09ORklHX1NZU19OQU5EX1JFQURZX1BJTiwgMSk7CiAKIAkvKiBFbmFibGUgTmFuZEZsYXNoICovCi0JYXQ5MV9zZXRfcGlvX291dHB1dChDT05GSUdfU1lTX05BTkRfRU5BQkxFX1BJTiwgMSk7CisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQ09ORklHX1NZU19OQU5EX0VOQUJMRV9QSU4sIDEpOwogfQogI2VuZGlmCiAKQEAgLTk4LDExICs5OSwxMSBAQAogc3RhdGljIHZvaWQgYXQ5MXNhbTkyNjNla19tYWNiX2h3X2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIAllcnN0bDsKLQlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVDkxX1BNQ19CQVNFOwotCWF0OTFfcGlvX3QJKnBpbwk9IChhdDkxX3Bpb190ICopIEFUOTFfUElPX0JBU0U7Ci0JYXQ5MV9yc3RjX3QJKnJzdGMJPSAoYXQ5MV9yc3RjX3QgKikgQVQ5MV9SU1RDX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CisJYXQ5MV9waW9fdAkqcGlvCT0gKGF0OTFfcGlvX3QgKikgQVRNRUxfQkFTRV9QSU87CisJYXQ5MV9yc3RjX3QJKnJzdGMJPSAoYXQ5MV9yc3RjX3QgKikgQVRNRUxfQkFTRV9SU1RDOwogCS8qIEVuYWJsZSBjbG9jayAqLwotCXdyaXRlbCgxIDw8IEFUOTFTQU05MjYzX0lEX0VNQUMsICZwbWMtPnBjZXIpOworCXdyaXRlbCgxIDw8IEFUTUVMX0lEX0VNQUMsICZwbWMtPnBjZXIpOwogCiAJLyoKIAkgKiBEaXNhYmxlIHB1bGwtdXAgb246CkBAIC0xNTMsNyArMTU0LDcgQEAKIAl2bF92c3luY19sZW46CTEsCiAJdmxfdXBwZXJfbWFyZ2luOjEsCiAJdmxfbG93ZXJfbWFyZ2luOjAsCi0JbW1pbzoJCUFUOTFTQU05MjYzX0xDRENfQkFTRSwKKwltbWlvOgkJQVRNRUxfQkFTRV9MQ0RDLAogfTsKIAogdm9pZCBsY2RfZW5hYmxlKHZvaWQpCkBAIC0xNjgsNyArMTY5LDcgQEAKIAogc3RhdGljIHZvaWQgYXQ5MXNhbTkyNjNla19sY2RfaHdfaW5pdCh2b2lkKQogewotCWF0OTFfcG1jX3QJKnBtYwk9IChhdDkxX3BtY190ICopIEFUOTFfUE1DX0JBU0U7CisJYXQ5MV9wbWNfdAkqcG1jCT0gKGF0OTFfcG1jX3QgKikgQVRNRUxfQkFTRV9QTUM7CiAKIAlhdDkxX3NldF9hX3BlcmlwaChBVDkxX1BJT19QT1JUQywgMSwgMCk7CS8qIExDREhTWU5DICovCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDIsIDApOwkvKiBMQ0RET1RDSyAqLwpAQCAtMTkzLDggKzE5NCw4IEBACiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDI2LCAwKTsJLyogTENERDIyICovCiAJYXQ5MV9zZXRfYV9wZXJpcGgoQVQ5MV9QSU9fUE9SVEMsIDI3LCAwKTsJLyogTENERDIzICovCiAKLQl3cml0ZWwoMSA8PCBBVDkxU0FNOTI2M19JRF9MQ0RDLCAmcG1jLT5wY2VyKTsKLQlnZC0+ZmJfYmFzZSA9IEFUOTFTQU05MjYzX1NSQU0wX0JBU0U7CisJd3JpdGVsKDEgPDwgQVRNRUxfSURfTENEQywgJnBtYy0+cGNlcik7CisJZ2QtPmZiX2Jhc2UgPSBBVE1FTF9CQVNFX1NSQU0wOwogfQogCiAjaWZkZWYgQ09ORklHX0xDRF9JTkZPCkBAIC0yMTgsNyArMjE5LDcgQEAKIAlsY2RfcHJpbnRmICgiKEMpIDIwMDggQVRNRUwgQ29ycFxuIik7CiAJbGNkX3ByaW50ZiAoImF0OTFzdXBwb3J0QGF0bWVsLmNvbVxuIik7CiAJbGNkX3ByaW50ZiAoIiVzIENQVSBhdCAlcyBNSHpcbiIsCi0JCUNPTkZJR19TWVNfQVQ5MV9DUFVfTkFNRSwKKwkJQVRNRUxfQ1BVX05BTUUsCiAJCXN0cm1oeih0ZW1wLCBnZXRfY3B1X2Nsa19yYXRlKCkpKTsKIAogCWRyYW1fc2l6ZSA9IDA7CkBAIC0yNDQsNiArMjQ1LDE4IEBACiAjZW5kaWYgLyogQ09ORklHX0xDRF9JTkZPICovCiAjZW5kaWYKIAoraW50IGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQoreworCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gKHN0cnVjdCBhdDkxX3BtYyAqKUFUTUVMX0JBU0VfUE1DOworCisJLyogRW5hYmxlIGNsb2NrcyBmb3IgYWxsIFBJT3MgKi8KKwl3cml0ZWwoKDEgPDwgQVRNRUxfSURfUElPQSkgfCAoMSA8PCBBVE1FTF9JRF9QSU9CKSB8CisJCSgxIDw8IEFUTUVMX0lEX1BJT0NERSksCisJCSZwbWMtPnBjZXIpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogRW5hYmxlIEN0cmxjICovCkBAIC0yNTIsOSArMjY1LDkgQEAKIAkvKiBhcmNoIG51bWJlciBvZiBBVDkxU0FNOTI2M0VLLUJvYXJkICovCiAJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9BVDkxU0FNOTI2M0VLOwogCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KLQlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gUEhZU19TRFJBTSArIDB4MTAwOworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBDT05GSUdfU1lTX1NEUkFNX0JBU0UgKyAweDEwMDsKIAotCWF0OTFfc2VyaWFsX2h3X2luaXQoKTsKKwlhdDkxX3NlcmlhbGRfaHdfaW5pdCgpOwogI2lmZGVmIENPTkZJR19DTURfTkFORAogCWF0OTFzYW05MjYzZWtfbmFuZF9od19pbml0KCk7CiAjZW5kaWYKQEAgLTI3Niw4ICsyODksOSBAQAogCiBpbnQgZHJhbV9pbml0KHZvaWQpCiB7Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKwlnZC0+cmFtX3NpemUgPSBnZXRfcmFtX3NpemUoKHZvaWQgKilDT05GSUdfU1lTX1NEUkFNX0JBU0UsCisJCUNPTkZJR19TWVNfU0RSQU1fU0laRSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkxLDcgKzMwNSw3IEBACiB7CiAJaW50IHJjID0gMDsKICNpZmRlZiBDT05GSUdfTUFDQgotCXJjID0gbWFjYl9ldGhfaW5pdGlhbGl6ZSgwLCAodm9pZCAqKSBBVDkxX0VNQUNfQkFTRSwgMHgwMCk7CisJcmMgPSBtYWNiX2V0aF9pbml0aWFsaXplKDAsICh2b2lkICopIEFUTUVMX0JBU0VfRU1BQywgMHgwMCk7CiAjZW5kaWYKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2M2VrL2NvbmZpZy5tayBiL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYzZWsvY29uZmlnLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTU0YTQ1Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYzZWsvY29uZmlnLm1rCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ09ORklHX1NZU19URVhUX0JBU0UgPSAweDIzZjAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2M2VrL2xlZC5jIGIvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjNlay9sZWQuYwppbmRleCBmYTFmMDViLi5jNDQ0NTVlIDEwMDY0NAotLS0gYS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2M2VrL2xlZC5jCisrKyBiL2JvYXJkL2F0bWVsL2F0OTFzYW05MjYzZWsvbGVkLmMKQEAgLTIzLDI1ICsyMywyNCBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcG1jLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9waW8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYzLmg+CiAKIHZvaWQgY29sb3VyZWRfTEVEX2luaXQodm9pZCkKIHsKIAkvKiBFbmFibGUgY2xvY2sgKi8KLQlhdDkxX3BtY190CSpwbWMJPSAoYXQ5MV9wbWNfdCAqKSBBVDkxX1BNQ19CQVNFOworCWF0OTFfcG1jX3QgKnBtYyA9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCi0Jd3JpdGVsKDEgPDwgQVQ5MVNBTTkyNjNfSURfUElPQiB8IDEgPDwgQVQ5MVNBTTkyNjNfSURfUElPQ0RFLAorCXdyaXRlbCgxIDw8IEFUTUVMX0lEX1BJT0IgfCAxIDw8IEFUTUVMX0lEX1BJT0NERSwKIAkJJnBtYy0+cGNlcik7CiAKLQlhdDkxX3NldF9waW9fb3V0cHV0KENPTkZJR19SRURfTEVELCAxKTsKLQlhdDkxX3NldF9waW9fb3V0cHV0KENPTkZJR19HUkVFTl9MRUQsIDEpOwotCWF0OTFfc2V0X3Bpb19vdXRwdXQoQ09ORklHX1lFTExPV19MRUQsIDEpOworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KENPTkZJR19SRURfTEVELCAxKTsKKwlhdDkxX3NldF9ncGlvX291dHB1dChDT05GSUdfR1JFRU5fTEVELCAxKTsKKwlhdDkxX3NldF9ncGlvX291dHB1dChDT05GSUdfWUVMTE9XX0xFRCwgMSk7CiAKLQlhdDkxX3NldF9waW9fdmFsdWUoQ09ORklHX1JFRF9MRUQsIDApOwotCWF0OTFfc2V0X3Bpb192YWx1ZShDT05GSUdfR1JFRU5fTEVELCAxKTsKLQlhdDkxX3NldF9waW9fdmFsdWUoQ09ORklHX1lFTExPV19MRUQsIDEpOworCWF0OTFfc2V0X2dwaW9fdmFsdWUoQ09ORklHX1JFRF9MRUQsIDApOworCWF0OTFfc2V0X2dwaW9fdmFsdWUoQ09ORklHX0dSRUVOX0xFRCwgMSk7CisJYXQ5MV9zZXRfZ3Bpb192YWx1ZShDT05GSUdfWUVMTE9XX0xFRCwgMSk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9hdG1lbC9hdDkxc2FtOXJsZWsvYXQ5MXNhbTlybGVrLmMgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOXJsZWsvYXQ5MXNhbTlybGVrLmMKaW5kZXggZTM3NDkxNy4uZTU1OTA4NCAxMDA2NDQKLS0tIGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTlybGVrL2F0OTFzYW05cmxlay5jCisrKyBiL2JvYXJkL2F0bWVsL2F0OTFzYW05cmxlay9hdDkxc2FtOXJsZWsuYwpAQCAtMjMsNiArMjMsNyBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOXJsLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlybF9tYXRyaXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOV9zbWMuaD4KQEAgLTMxLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jbGsuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKwogI2luY2x1ZGUgPGxjZC5oPgogI2luY2x1ZGUgPGF0bWVsX2xjZGMuaD4KICNpZiBkZWZpbmVkKENPTkZJR19SRVNFVF9QSFlfUikgJiYgZGVmaW5lZChDT05GSUdfTUFDQikKQEAgLTQ4LDMzICs0OSwzNyBAQAogI2lmZGVmIENPTkZJR19DTURfTkFORAogc3RhdGljIHZvaWQgYXQ5MXNhbTlybGVrX25hbmRfaHdfaW5pdCh2b2lkKQogeworCXN0cnVjdCBhdDkxX3NtYyAqc21jID0gKHN0cnVjdCBhdDkxX3NtYyAqKUFUTUVMX0JBU0VfU01DOworCXN0cnVjdCBhdDkxX21hdHJpeCAqbWF0cml4ID0gKHN0cnVjdCBhdDkxX21hdHJpeCAqKUFUTUVMX0JBU0VfTUFUUklYOworCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gKHN0cnVjdCBhdDkxX3BtYyAqKUFUTUVMX0JBU0VfUE1DOwogCXVuc2lnbmVkIGxvbmcgY3NhOwogCiAJLyogRW5hYmxlIENTMyAqLwotCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKLQlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsCi0JCSAgICAgICBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKKwljc2EgPSByZWFkbCgmbWF0cml4LT5lYmljc2EpOworCWNzYSB8PSBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBOworCisJd3JpdGVsKGNzYSwgJm1hdHJpeC0+ZWJpY3NhKTsKIAogCS8qIENvbmZpZ3VyZSBTTUMgQ1MzIGZvciBOQU5EL1NtYXJ0TWVkaWEgKi8KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19TRVRVUCgzKSwKLQkJICAgICAgIEFUOTFfU01DX05XRVNFVFVQXygxKSB8IEFUOTFfU01DX05DU19XUlNFVFVQXygwKSB8Ci0JCSAgICAgICBBVDkxX1NNQ19OUkRTRVRVUF8oMSkgfCBBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oMCkpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1BVTFNFKDMpLAotCQkgICAgICAgQVQ5MV9TTUNfTldFUFVMU0VfKDMpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDMpIHwKLQkJICAgICAgIEFUOTFfU01DX05SRFBVTFNFXygzKSB8IEFUOTFfU01DX05DU19SRFBVTFNFXygzKSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMyksCi0JCSAgICAgICBBVDkxX1NNQ19OV0VDWUNMRV8oNSkgfCBBVDkxX1NNQ19OUkRDWUNMRV8oNSkpOwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX01PREUoMyksCi0JCSAgICAgICBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8Ci0JCSAgICAgICBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwKKwl3cml0ZWwoQVQ5MV9TTUNfU0VUVVBfTldFKDEpIHwgQVQ5MV9TTUNfU0VUVVBfTkNTX1dSKDApIHwKKwkJQVQ5MV9TTUNfU0VUVVBfTlJEKDEpIHwgQVQ5MV9TTUNfU0VUVVBfTkNTX1JEKDApLAorCQkmc21jLT5jc1szXS5zZXR1cCk7CisJd3JpdGVsKEFUOTFfU01DX1BVTFNFX05XRSgzKSB8IEFUOTFfU01DX1BVTFNFX05DU19XUigzKSB8CisJCUFUOTFfU01DX1BVTFNFX05SRCgzKSB8IEFUOTFfU01DX1BVTFNFX05DU19SRCgzKSwKKwkJJnNtYy0+Y3NbM10ucHVsc2UpOworCXdyaXRlbChBVDkxX1NNQ19DWUNMRV9OV0UoNSkgfCBBVDkxX1NNQ19DWUNMRV9OUkQoNSksCisJCSZzbWMtPmNzWzNdLmN5Y2xlKTsKKwl3cml0ZWwoQVQ5MV9TTUNfTU9ERV9STV9OUkQgfCBBVDkxX1NNQ19NT0RFX1dNX05XRSB8CisJCUFUOTFfU01DX01PREVfRVhOV19ESVNBQkxFIHwKICNpZmRlZiBDT05GSUdfU1lTX05BTkRfREJXXzE2Ci0JCSAgICAgICBBVDkxX1NNQ19EQldfMTYgfAorCQlBVDkxX1NNQ19NT0RFX0RCV18xNiB8CiAjZWxzZSAvKiBDT05GSUdfU1lTX05BTkRfREJXXzggKi8KLQkJICAgICAgIEFUOTFfU01DX0RCV184IHwKKwkJQVQ5MV9TTUNfTU9ERV9EQldfOCB8CiAjZW5kaWYKLQkJICAgICAgIEFUOTFfU01DX1RERl8oMikpOworCQlBVDkxX1NNQ19NT0RFX1RERl9DWUNMRSgyKSwKKwkJJnNtYy0+Y3NbM10ubW9kZSk7CiAKLQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0VSLCAxIDw8IEFUOTFTQU05UkxfSURfUElPRCk7CisJd3JpdGVsKDEgPDwgQVRNRUxfSURfUElPRCwgJnBtYy0+cGNlcik7CiAKIAkvKiBDb25maWd1cmUgUkRZL0JTWSAqLwogCWF0OTFfc2V0X2dwaW9faW5wdXQoQ09ORklHX1NZU19OQU5EX1JFQURZX1BJTiwgMSk7CkBAIC0xMDIsNyArMTA3LDcgQEAKIAl2bF92c3luY19sZW46CTEsCiAJdmxfdXBwZXJfbWFyZ2luOjEsCiAJdmxfbG93ZXJfbWFyZ2luOjAsCi0JbW1pbzoJCUFUOTFTQU05UkxfTENEQ19CQVNFLAorCW1taW86CQlBVE1FTF9CQVNFX0xDREMsCiB9OwogCiB2b2lkIGxjZF9lbmFibGUodm9pZCkKQEAgLTExNiw2ICsxMjEsOCBAQAogfQogc3RhdGljIHZvaWQgYXQ5MXNhbTlybGVrX2xjZF9od19pbml0KHZvaWQpCiB7CisJc3RydWN0IGF0OTFfcG1jICpwbWMgPSAoc3RydWN0IGF0OTFfcG1jICopQVRNRUxfQkFTRV9QTUM7CisKIAlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkvKiBMQ0RQV1IgKi8KIAlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzUsIDApOwkvKiBMQ0RIU1lOQyAqLwogCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7CS8qIExDRERPVENLICovCkBAIC0xMzgsOSArMTQ1LDcgQEAKIAlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAwKTsJLyogTENERDIyICovCiAJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMCk7CS8qIExDREQyMyAqLwogCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENFUiwgMSA8PCBBVDkxU0FNOVJMX0lEX0xDREMpOwotCi0JZ2QtPmZiX2Jhc2UgPSAwOworCXdyaXRlbCgxIDw8IEFUTUVMX0lEX0xDREMsICZwbWMtPnBjZXIpOwogfQogCiAjaWZkZWYgQ09ORklHX0xDRF9JTkZPCkBAIC0xNTcsNyArMTYyLDcgQEAKIAlsY2RfcHJpbnRmICgiKEMpIDIwMDggQVRNRUwgQ29ycFxuIik7CiAJbGNkX3ByaW50ZiAoImF0OTFzdXBwb3J0QGF0bWVsLmNvbVxuIik7CiAJbGNkX3ByaW50ZiAoIiVzIENQVSBhdCAlcyBNSHpcbiIsCi0JCUNPTkZJR19TWVNfQVQ5MV9DUFVfTkFNRSwKKwkJQVRNRUxfQ1BVX05BTUUsCiAJCXN0cm1oeih0ZW1wLCBnZXRfY3B1X2Nsa19yYXRlKCkpKTsKIAogCWRyYW1fc2l6ZSA9IDA7CkBAIC0xNzMsNiArMTc4LDE3IEBACiAjZW5kaWYgLyogQ09ORklHX0xDRF9JTkZPICovCiAjZW5kaWYKIAoraW50IGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQoreworCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gKHN0cnVjdCBhdDkxX3BtYyAqKUFUTUVMX0JBU0VfUE1DOworCisJLyogRW5hYmxlIGNsb2NrcyBmb3IgYWxsIFBJT3MgKi8KKwl3cml0ZWwoKDEgPDwgQVRNRUxfSURfUElPQSkgfCAoMSA8PCBBVE1FTF9JRF9QSU9CKSB8CisJCSgxIDw8IEFUTUVMX0lEX1BJT0MpIHwgKDEgPDwgQVRNRUxfSURfUElPRCksCisJCSZwbWMtPnBjZXIpOworCisJcmV0dXJuIDA7Cit9CiAKIGludCBib2FyZF9pbml0KHZvaWQpCiB7CkBAIC0xODIsOSArMTk4LDkgQEAKIAkvKiBhcmNoIG51bWJlciBvZiBBVDkxU0FNOVJMRUstQm9hcmQgKi8KIAlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0FUOTFTQU05UkxFSzsKIAkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCi0JZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU0gKyAweDEwMDsKKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gQ09ORklHX1NZU19TRFJBTV9CQVNFICsgMHgxMDA7CiAKLQlhdDkxX3NlcmlhbF9od19pbml0KCk7CisJYXQ5MV9zZXJpYWxkX2h3X2luaXQoKTsKICNpZmRlZiBDT05GSUdfQ01EX05BTkQKIAlhdDkxc2FtOXJsZWtfbmFuZF9od19pbml0KCk7CiAjZW5kaWYKQEAgLTE5OSw3ICsyMTUsOCBAQAogCiBpbnQgZHJhbV9pbml0KHZvaWQpCiB7Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKwlnZC0+cmFtX3NpemUgPSBnZXRfcmFtX3NpemUoCisJCSh2b2lkICopQ09ORklHX1NZU19TRFJBTV9CQVNFLAorCQlDT05GSUdfU1lTX1NEUkFNX1NJWkUpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTlybGVrL2NvbmZpZy5tayBiL2JvYXJkL2F0bWVsL2F0OTFzYW05cmxlay9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NTRhNDUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTlybGVrL2NvbmZpZy5taworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNPTkZJR19TWVNfVEVYVF9CQVNFID0gMHgyM2YwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTlybGVrL2xlZC5jIGIvYm9hcmQvYXRtZWwvYXQ5MXNhbTlybGVrL2xlZC5jCmluZGV4IDk2MzRjYzAuLjk4N2U4YzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2F0bWVsL2F0OTFzYW05cmxlay9sZWQuYworKysgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOXJsZWsvbGVkLmMKQEAgLTI2LDEyICsyNiwxNCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05cmwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiB2b2lkIGNvbG91cmVkX0xFRF9pbml0KHZvaWQpCiB7CisJc3RydWN0IGF0OTFfcG1jICpwbWMgPSAoc3RydWN0IGF0OTFfcG1jICopQVRNRUxfQkFTRV9QTUM7CisKIAkvKiBFbmFibGUgY2xvY2sgKi8KLQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0VSLCAxIDw8IEFUOTFTQU05UkxfSURfUElPRCk7CisJd3JpdGVsKEFUTUVMX0lEX1BJT0QsICZwbWMtPnBjZXIpOwogCiAJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQ09ORklHX1JFRF9MRUQsIDEpOwogCWF0OTFfc2V0X2dwaW9fb3V0cHV0KENPTkZJR19HUkVFTl9MRUQsIDEpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kbTM1NWxlb3BhcmQvZG0zNTVsZW9wYXJkLmMgYi9ib2FyZC9kYXZpbmNpL2RtMzU1bGVvcGFyZC9kbTM1NWxlb3BhcmQuYwppbmRleCAwZWUwZDExLi4wYWQ1Njc4IDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2RtMzU1bGVvcGFyZC9kbTM1NWxlb3BhcmQuYworKysgYi9ib2FyZC9kYXZpbmNpL2RtMzU1bGVvcGFyZC9kbTM1NWxlb3BhcmQuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPG5hbmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9fZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9uYW5kX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9kYXZpbmNpX21pc2MuaD4KICNpbmNsdWRlIDxuZXQuaD4KZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZG0zNjVldm0vZG0zNjVldm0uYyBiL2JvYXJkL2RhdmluY2kvZG0zNjVldm0vZG0zNjVldm0uYwppbmRleCA1ZmI3NjExLi5hYzU0MTA2IDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2RtMzY1ZXZtL2RtMzY1ZXZtLmMKKysrIGIvYm9hcmQvZGF2aW5jaS9kbTM2NWV2bS9kbTM2NWV2bS5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9lbWlmX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9uYW5kX2RlZnMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZGF2aW5jaV9taXNjLmg+CiAjaWZkZWYgQ09ORklHX0RBVklOQ0lfTU1DCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL01ha2VmaWxlIGIvYm9hcmQvaW4tY2lyY3VpdC9ncmFzc2hvcHBlci9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9pbi1jaXJjdWl0L2dyYXNzaG9wcGVyL01ha2VmaWxlCmluZGV4IDc1MzBlNmEuLmE2YzM2YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvaW4tY2lyY3VpdC9ncmFzc2hvcHBlci9NYWtlZmlsZQpAQCAtMSw3ICsxLDEwIEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCisjIENvcHlyaWdodCAoQykgMjAxMQorIyBDb3JzY2llbmNlIEdtYkggJiBDby5LRywgQW5kcmVhcyBCaWXDn21hbm4gPGJpZXNzbWFubkBjb3JzY2llbmNlLmRlPgorIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogIyBwcm9qZWN0LgogIwpAQCAtMTksMzEgKzIyLDE3IEBACiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAjIE1BIDAyMTExLTEzMDcgVVNBCi0jCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSAkKG9iailsaWIkKFNPQykubworTElCICAgICA6PSAkKG9iailsaWIkKEJPQVJEKS5vCiAKLVNPQkpTCSs9IGxvd2xldmVsX2luaXQubworQ09CSlMteSArPSAkKEJPQVJEKS5vCiAKLUNPQkpTCSs9IGJjbTUyMjEubwotQ09CSlMJKz0gZG05MTYxLm8KLUNPQkpTCSs9IGV0aGVyLm8KLUNPQkpTCSs9IGkyYy5vCi1DT0JKUy0kKENPTkZJR19LUzg3MjFfUEhZKQkrPSBrczg3MjEubwotQ09CSlMJKz0gbHh0OTcyLm8KLUNPQkpTCSs9IHJlc2V0Lm8KLUNPQkpTCSs9IHNwaS5vCi1DT0JKUwkrPSB0aW1lci5vCi1DT0JKUwkrPSB1c2IubworU1JDUyAgICA6PSAkKENPQkpTLXk6Lm89LmMpCitPQkpTICAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTLXkpKQogCi1TUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpICQoQ09CSlMteToubz0uYykKLU9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpICQoQ09CSlMteSkpCi0KLWFsbDoJJChvYmopLmRlcGVuZCAkKExJQikKLQotJChMSUIpOgkkKE9CSlMpCiskKExJQik6ICQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW4tY2lyY3VpdC9ncmFzc2hvcHBlci9ncmFzc2hvcHBlci5jIGIvYm9hcmQvaW4tY2lyY3VpdC9ncmFzc2hvcHBlci9ncmFzc2hvcHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWE3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pbi1jaXJjdWl0L2dyYXNzaG9wcGVyL2dyYXNzaG9wcGVyLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEKKyAqIENvcnNjaWVuY2UgR21iSCAmIENvLktHLCBBbmRyZWFzIEJpZcOfbWFubiA8Ymllc3NtYW5uQGNvcnNjaWVuY2UuZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZHJhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2htYXRyaXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbXUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wb3J0bXV4Lmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdHJ1Y3QgbW11X3ZtX3JhbmdlIG1tdV92bXJfdGFibGVbQ09ORklHX1NZU19OUl9WTV9SRUdJT05TXSA9IHsKKwl7CisJCS52aXJ0X3Bnbm8JPSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UgPj4gUEFHRV9TSElGVCwKKwkJLm5yX3BhZ2VzCT0gQ09ORklHX1NZU19GTEFTSF9TSVpFID4+IFBBR0VfU0hJRlQsCisJCS5waHlzCQk9IChDT05GSUdfU1lTX0ZMQVNIX0JBU0UgPj4gUEFHRV9TSElGVCkKKwkJCQl8IE1NVV9WTVJfQ0FDSEVfTk9ORSwKKwl9LCB7CisJCS52aXJ0X3Bnbm8JPSBDT05GSUdfU1lTX1NEUkFNX0JBU0UgPj4gUEFHRV9TSElGVCwKKwkJLm5yX3BhZ2VzCT0gRUJJX1NEUkFNX1NJWkUgPj4gUEFHRV9TSElGVCwKKwkJLnBoeXMJCT0gKENPTkZJR19TWVNfU0RSQU1fQkFTRSA+PiBQQUdFX1NISUZUKQorCQkJCXwgTU1VX1ZNUl9DQUNIRV9XUkJBQ0ssCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RyYW1fY29uZmlnIHNkcmFtX2NvbmZpZyA9IHsKKwkvKiBEdWFsIE1UNDhMQzE2TTE2QTItN0UgKG9yIGVxdWFsKSAqLworCS5kYXRhX2JpdHMJCT0gU0RSQU1fREFUQV8zMkJJVCwKKwkucm93X2JpdHMJCT0gMTMsCisJLmNvbF9iaXRzCQk9IDksCisJLmJhbmtfYml0cwkJPSAyLAorCS5jYXMJCQk9IDIsCisJLnR3cgkJCT0gMiwKKwkudHJjCQkJPSA3LAorCS50cnAJCQk9IDIsCisJLnRyY2QJCQk9IDIsCisJLnRyYXMJCQk9IDQsCisJLnR4c3IJCQk9IDcsCisJLyogNy44MSB1cyAqLworCS5yZWZyZXNoX3BlcmlvZAkJPSAoNzgxICogKFNEUkFNQ19CVVNfSFogLyAxMDAwKSkgLyAxMDAwMDAsCit9OworCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mKHZvaWQpCit7CisJLyogRW5hYmxlIFNEUkFNIGluIHRoZSBFQkkgbXV4ICovCisJaG1hdHJpeF9zbGF2ZV93cml0ZShFQkksIFNGUiwgSE1BVFJJWF9CSVQoRUJJX1NEUkFNX0VOQUJMRSkpOworCisJcG9ydG11eF9lbmFibGVfZWJpKFNEUkFNX0RBVEFfMzJCSVQsIDIzLCAwLCBQT1JUTVVYX0RSSVZFX0hJR0gpOworCXBvcnRtdXhfZW5hYmxlX3VzYXJ0MChQT1JUTVVYX0RSSVZFX01JTik7CisJcG9ydG11eF9lbmFibGVfdXNhcnQxKFBPUlRNVVhfRFJJVkVfTUlOKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNCKQorCXBvcnRtdXhfZW5hYmxlX21hY2IwKFBPUlRNVVhfTUFDQl9NSUksIFBPUlRNVVhfRFJJVkVfTE9XKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3BoeXNfc2l6ZV90IGluaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCXVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbF9zaXplOworCXZvaWQgKnNkcmFtX2Jhc2U7CisKKwlzZHJhbV9iYXNlID0gdW5jYWNoZWQoRUJJX1NEUkFNX0JBU0UpOworCisJZXhwZWN0ZWRfc2l6ZSA9IHNkcmFtX2luaXQoc2RyYW1fYmFzZSwgJnNkcmFtX2NvbmZpZyk7CisJYWN0dWFsX3NpemUgPSBnZXRfcmFtX3NpemUoc2RyYW1fYmFzZSwgZXhwZWN0ZWRfc2l6ZSk7CisKKwlpZiAoZXhwZWN0ZWRfc2l6ZSAhPSBhY3R1YWxfc2l6ZSkKKwkJcHJpbnRmKCJXYXJuaW5nOiBPbmx5ICVsdSBvZiAlbHUgTWlCIFNEUkFNIGlzIHdvcmtpbmdcbiIsCisJCQkJYWN0dWFsX3NpemUgPj4gMjAsIGV4cGVjdGVkX3NpemUgPj4gMjApOworCisJcmV0dXJuIGFjdHVhbF9zaXplOworfQorCitpbnQgYm9hcmRfZWFybHlfaW5pdF9yKHZvaWQpCit7CisJZ2QtPmJkLT5iaV9waHlfaWRbMF0gPSAweDAwOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0NNRF9ORVQKK2ludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaSkKK3sKKwltYWNiX2V0aF9pbml0aWFsaXplKDAsICh2b2lkICopQVRNRUxfQkFTRV9NQUNCMCwgYmktPmJpX3BoeV9pZFswXSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKy8qIHZpbTogc2V0IG5vZXQgdHM9ODogKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3NwZWFyL2NvbW1vbi9zcHJfbWlzYy5jIGIvYm9hcmQvc3BlYXIvY29tbW9uL3Nwcl9taXNjLmMKaW5kZXggMDU2MjIyMi4uMDgxMmMyMCAxMDA2NDQKLS0tIGEvYm9hcmQvc3BlYXIvY29tbW9uL3Nwcl9taXNjLmMKKysrIGIvYm9hcmQvc3BlYXIvY29tbW9uL3Nwcl9taXNjLmMKQEAgLTQ2LDkgKzQ2LDcgQEAKIAlzdHJ1Y3QgeGxvYWRlcl90YWJsZV8xXzIgKnRhYmxlXzFfMjsKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gJmNoaXBfZGF0YTsKIAotCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IGdldF9yYW1fc2l6ZShQSFlTX1NEUkFNXzEsCi0JCQkJCSAgICAgICBQSFlTX1NEUkFNXzFfTUFYU0laRSk7CisJZ2QtPnJhbV9zaXplID0gZ2V0X3JhbV9zaXplKFBIWVNfU0RSQU1fMSwgUEhZU19TRFJBTV8xX01BWFNJWkUpOwogCiAJaWYgKFhMT0FERVJfVEFCTEVfVkVSU0lPTl8xXzEgPT0geGxvYWRlcl90Yi0+dGFibGVfdmVyc2lvbikgewogCQl0YWJsZV8xXzEgPSAmeGxvYWRlcl90Yi0+dGFibGUudGFibGVfMV8xOwpAQCAtNjYsNiArNjQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBkcmFtX2luaXRfYmFua3NpemUodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBnZC0+cmFtX3NpemU7Cit9CisKIGludCBtaXNjX2luaXRfcih2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9ORVQpCmRpZmYgLS1naXQgYS9ib2FyZC9zdC1lcmljc3Nvbi91ODUwMC91ODUwMF9ocmVmLmMgYi9ib2FyZC9zdC1lcmljc3Nvbi91ODUwMC91ODUwMF9ocmVmLmMKaW5kZXggNTI1NjMzZS4uOTI4M2ZhYiAxMDA2NDQKLS0tIGEvYm9hcmQvc3QtZXJpY3Nzb24vdTg1MDAvdTg1MDBfaHJlZi5jCisrKyBiL2JvYXJkL3N0LWVyaWNzc29uL3U4NTAwL3U4NTAwX2hyZWYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CiAjaWZkZWYgQ09ORklHX01NQworI2luY2x1ZGUgInByY211LWZ3LmgiCiAjaW5jbHVkZSAiLi4vLi4vLi4vZHJpdmVycy9tbWMvYXJtX3BsMTgwX21tY2kuaCIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9ib2FyZC90aS9ldm0vZXZtLmMgYi9ib2FyZC90aS9ldm0vZXZtLmMKaW5kZXggYWFmMzAzMy4uMzBjMWM1NyAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvZXZtL2V2bS5jCisrKyBiL2JvYXJkL3RpL2V2bS9ldm0uYwpAQCAtMzMsMTAgKzMzLDE0IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVtLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGkyYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSAiZXZtLmgiCiAKKyNkZWZpbmUgT01BUDNFVk1fR1BJT19FVEhfUlNUX0dFTjEJCTY0CisjZGVmaW5lIE9NQVAzRVZNX0dQSU9fRVRIX1JTVF9HRU4yCQk3CisKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiBzdGF0aWMgdTMyIG9tYXAzX2V2bV92ZXJzaW9uOwpAQCAtMTMwLDYgKzEzNCw5IEBACiAjZW5kaWYKIAlvbWFwM19ldm1fZ2V0X3JldmlzaW9uKCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfTkVUKQorCXJlc2V0X25ldF9jaGlwKCk7CisjZW5kaWYKIAlkaWVpZF9udW1fcigpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDYsNiArMTUzLDcgQEAKIAlNVVhfRVZNKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ01EX05FVAogLyoKICAqIFJvdXRpbmU6IHNldHVwX25ldF9jaGlwCiAgKiBEZXNjcmlwdGlvbjogU2V0dGluZyB1cCB0aGUgY29uZmlndXJhdGlvbiBHUE1DIHJlZ2lzdGVycyBzcGVjaWZpYyB0byB0aGUKQEAgLTE1Myw3ICsxNjEsNiBAQAogICovCiBzdGF0aWMgdm9pZCBzZXR1cF9uZXRfY2hpcCh2b2lkKQogewotCXN0cnVjdCBncGlvICpncGlvM19iYXNlID0gKHN0cnVjdCBncGlvICopT01BUDM0WFhfR1BJTzNfQkFTRTsKIAlzdHJ1Y3QgY3RybCAqY3RybF9iYXNlID0gKHN0cnVjdCBjdHJsICopT01BUDM0WFhfQ1RSTF9CQVNFOwogCiAJLyogQ29uZmlndXJlIEdQTUMgcmVnaXN0ZXJzICovCkBAIC0xNzIsMTYgKzE3OSwzNyBAQAogCS8qIEVuYWJsZSBvZmYgbW9kZSBmb3IgQUxFIGluIFBBRENPTkZfR1BNQ19OQURWX0FMRSByZWdpc3RlciAqLwogCXdyaXRldyhyZWFkdygmY3RybF9iYXNlLT5ncG1jX25hZHZfYWxlKSB8IDB4MEUwMCwKIAkJJmN0cmxfYmFzZS0+Z3BtY19uYWR2X2FsZSk7Cit9CiAKLQkvKiBNYWtlIEdQSU8gNjQgYXMgb3V0cHV0IHBpbiAqLwotCXdyaXRlbChyZWFkbCgmZ3BpbzNfYmFzZS0+b2UpICYgfihHUElPMCksICZncGlvM19iYXNlLT5vZSk7CisvKioKKyAqIFJlc2V0IHRoZSBldGhlcm5ldCBjaGlwLgorICovCitzdGF0aWMgdm9pZCByZXNldF9uZXRfY2hpcCh2b2lkKQoreworCWludCByZXQ7CisJaW50IHJzdF9ncGlvOwogCi0JLyogTm93IHNlbmQgYSBwdWxzZSBvbiB0aGUgR1BJTyBwaW4gKi8KLQl3cml0ZWwoR1BJTzAsICZncGlvM19iYXNlLT5zZXRkYXRhb3V0KTsKKwlpZiAoZ2V0X29tYXAzX2V2bV9yZXYoKSA9PSBPTUFQM0VWTV9CT0FSRF9HRU5fMSkgeworCQlyc3RfZ3BpbyA9IE9NQVAzRVZNX0dQSU9fRVRIX1JTVF9HRU4xOworCX0gZWxzZSB7CisJCXJzdF9ncGlvID0gT01BUDNFVk1fR1BJT19FVEhfUlNUX0dFTjI7CisJfQorCisJcmV0ID0gb21hcF9yZXF1ZXN0X2dwaW8ocnN0X2dwaW8pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ZigiVW5hYmxlIHRvIGdldCBHUElPICVkXG4iLCByc3RfZ3Bpbyk7CisJCXJldHVybiA7CisJfQorCisJLyogQ29uZmlndXJlIGFzIG91dHB1dCAqLworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKHJzdF9ncGlvLCAwKTsKKworCS8qIFNlbmQgYSBwdWxzZSBvbiB0aGUgR1BJTyBwaW4gKi8KKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQocnN0X2dwaW8sIDEpOwogCXVkZWxheSgxKTsKLQl3cml0ZWwoR1BJTzAsICZncGlvM19iYXNlLT5jbGVhcmRhdGFvdXQpOworCW9tYXBfc2V0X2dwaW9fZGF0YW91dChyc3RfZ3BpbywgMCk7CiAJdWRlbGF5KDEpOwotCXdyaXRlbChHUElPMCwgJmdwaW8zX2Jhc2UtPnNldGRhdGFvdXQpOworCW9tYXBfc2V0X2dwaW9fZGF0YW91dChyc3RfZ3BpbywgMSk7CiB9CiAKIGludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCkBAIC0xOTIsMyArMjIwLDQgQEAKICNlbmRpZgogCXJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBDT05GSUdfQ01EX05FVCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvZXZtL2V2bS5oIGIvYm9hcmQvdGkvZXZtL2V2bS5oCmluZGV4IGI3MjFhZDYuLjYyM2NmMWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL2V2bS9ldm0uaAorKysgYi9ib2FyZC90aS9ldm0vZXZtLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9ORVQpCiBzdGF0aWMgdm9pZCBzZXR1cF9uZXRfY2hpcCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJlc2V0X25ldF9jaGlwKHZvaWQpOwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9ib2FyZC90aS9wYW5kYS9NYWtlZmlsZSBiL2JvYXJkL3RpL3BhbmRhL01ha2VmaWxlCmluZGV4IDIxODY0MDMuLjA5Zjg4ZWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3BhbmRhL01ha2VmaWxlCisrKyBiL2JvYXJkL3RpL3BhbmRhL01ha2VmaWxlCkBAIC0yNSw3ICsyNSw5IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KIAoraWZuZGVmIENPTkZJR19TUExfQlVJTEQKIENPQkpTCTo9IHBhbmRhLm8KK2VuZGlmCiAKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvcGFuZGEvcGFuZGEuYyBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhLmMKaW5kZXggNzhlMTkxMC4uOWFmZWQ4MCAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvcGFuZGEvcGFuZGEuYworKysgYi9ib2FyZC90aS9wYW5kYS9wYW5kYS5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jX2hvc3RfZGVmLmg+CiAKLSNpbmNsdWRlICJwYW5kYS5oIgorI2luY2x1ZGUgInBhbmRhX211eF9kYXRhLmgiCiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC02NSwyNyArNjUsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBkb19zZXRfbXV4KHUzMiBiYXNlLCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29uc3QgKmFycmF5LCBpbnQgc2l6ZSkKK3ZvaWQgc2V0X211eGNvbmZfcmVnc19ub25fZXNzZW50aWFsKHZvaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IHBhZF9jb25mX2VudHJ5ICpwYWQgPSAoc3RydWN0IHBhZF9jb25mX2VudHJ5ICopIGFycmF5OwotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKywgcGFkKyspCi0JCXdyaXRldyhwYWQtPnZhbCwgYmFzZSArIHBhZC0+b2Zmc2V0KTsKLX0KLQotLyoqCi0gKiBAYnJpZWYgc2V0X211eGNvbmZfcmVncyBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIE11eCByZWdpc3RlcnMKLSAqIHNwZWNpZmljIHRvIHRoZSBib2FyZC4KLSAqLwotdm9pZCBzZXRfbXV4Y29uZl9yZWdzKHZvaWQpCi17Ci0JZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5LAotCQkgICBzaXplb2YoY29yZV9wYWRjb25mX2FycmF5KSAvCisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwsCisJCSAgIHNpemVvZihjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCkgLwogCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7CiAKLQlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9XS1VQLCB3a3VwX3BhZGNvbmZfYXJyYXksCi0JCSAgIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXkpIC8KKwlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9XS1VQLCB3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9ub25fZXNzZW50aWFsKSAvCiAJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvcGFuZGEvcGFuZGEuaCBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZDA5MGUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvdGkvcGFuZGEvcGFuZGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDEwCi0gKiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQsIDx3d3cudGkuY29tPgotICoKLSAqCUJhbGFqaSBLcmlzaG5hbW9vcnRoeQk8YmFsYWppdGtAdGkuY29tPgotICoJQW5lZXNoIFYJCTxhbmVlc2hAdGkuY29tPgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2lmbmRlZiBfUEFOREFfSF8KLSNkZWZpbmUgX1BBTkRBX0hfCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9tdXhfb21hcDQuaD4KLQotY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheVtdID0gewotCXtHUE1DX0FEMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQwICovCi0Je0dQTUNfQUQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgCS8qIHNkbW1jMl9kYXQxICovCi0Je0dQTUNfQUQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2RhdDIgKi8KLQl7R1BNQ19BRDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfZGF0MyAqLwotCXtHUE1DX0FENCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQ0ICovCi0Je0dQTUNfQUQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2RhdDUgKi8KLQl7R1BNQ19BRDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfZGF0NiAqLwotCXtHUE1DX0FENywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQ3ICovCi0Je0dQTUNfQUQ4LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTMpfSwJLyogZ3Bpb18zMiAqLwotCXtHUE1DX0FEOSwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzMzICovCi0Je0dQTUNfQUQxMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzM0ICovCi0Je0dQTUNfQUQxMSwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzM1ICovCi0Je0dQTUNfQUQxMiwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzM2ICovCi0Je0dQTUNfQUQxMywgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTMpfSwJLyogZ3Bpb18zNyAqLwotCXtHUE1DX0FEMTQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0zKX0sCS8qIGdwaW9fMzggKi8KLQl7R1BNQ19BRDE1LCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMyl9LAkvKiBncGlvXzM5ICovCi0Je0dQTUNfQTE2LCAoTTMpfSwJCQkJCQkvKiBncGlvXzQwICovCi0Je0dQTUNfQTE3LCAoUFREIHwgTTMpfSwJCQkJCQkvKiBncGlvXzQxICovCi0Je0dQTUNfQTE4LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzYgKi8KLQl7R1BNQ19BMTksIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93NyAqLwotCXtHUE1DX0EyMCwgKElFTiB8IE0zKX0sCQkJCQkJLyogZ3Bpb180NCAqLwotCXtHUE1DX0EyMSwgKE0zKX0sCQkJCQkJLyogZ3Bpb180NSAqLwotCXtHUE1DX0EyMiwgKE0zKX0sCQkJCQkJLyogZ3Bpb180NiAqLwotCXtHUE1DX0EyMywgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDcgKi8KLQl7R1BNQ19BMjQsIChQVEQgfCBNMyl9LAkJCQkJCS8qIGdwaW9fNDggKi8KLQl7R1BNQ19BMjUsIChQVEQgfCBNMyl9LAkJCQkJCS8qIGdwaW9fNDkgKi8KLQl7R1BNQ19OQ1MwLCAoTTMpfSwJCQkJCQkvKiBncGlvXzUwICovCi0Je0dQTUNfTkNTMSwgKElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzUxICovCi0Je0dQTUNfTkNTMiwgKElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzUyICovCi0Je0dQTUNfTkNTMywgKElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzUzICovCi0Je0dQTUNfTldQLCAoTTMpfSwJCQkJCQkvKiBncGlvXzU0ICovCi0Je0dQTUNfQ0xLLCAoUFREIHwgTTMpfSwJCQkJCQkvKiBncGlvXzU1ICovCi0Je0dQTUNfTkFEVl9BTEUsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTYgKi8KLQl7R1BNQ19OT0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0xKX0sCQkvKiBzZG1tYzJfY2xrICovCi0Je0dQTUNfTldFLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2NtZCAqLwotCXtHUE1DX05CRTBfQ0xFLCAoTTMpfSwJCQkJCQkvKiBncGlvXzU5ICovCi0Je0dQTUNfTkJFMSwgKFBURCB8IE0zKX0sCQkJCQkvKiBncGlvXzYwICovCi0Je0dQTUNfV0FJVDAsIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb182MSAqLwotCXtHUE1DX1dBSVQxLCAgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTMpfSwJLyogZ3Bpb182MiAqLwotCXtDMkNfREFUQTExLCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTAwICovCi0Je0MyQ19EQVRBMTIsIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18xMDEgKi8KLQl7QzJDX0RBVEExMywgKFBURCB8IE0zKX0sCQkJCQkvKiBncGlvXzEwMiAqLwotCXtDMkNfREFUQTE0LCAoTTEpfSwJCQkJCQkvKiBkc2kyX3RlMCAqLwotCXtDMkNfREFUQTE1LCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTA0ICovCi0Je0hETUlfSFBELCAoTTApfSwJCQkJCQkvKiBoZG1pX2hwZCAqLwotCXtIRE1JX0NFQywgKE0wKX0sCQkJCQkJLyogaGRtaV9jZWMgKi8KLQl7SERNSV9ERENfU0NMLCAoUFRVIHwgTTApfSwJCQkJCS8qIGhkbWlfZGRjX3NjbCAqLwotCXtIRE1JX0REQ19TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBoZG1pX2RkY19zZGEgKi8KLQl7Q1NJMjFfRFgwLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIxX2R4MCAqLwotCXtDU0kyMV9EWTAsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjFfZHkwICovCi0Je0NTSTIxX0RYMSwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMV9keDEgKi8KLQl7Q1NJMjFfRFkxLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIxX2R5MSAqLwotCXtDU0kyMV9EWDIsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjFfZHgyICovCi0Je0NTSTIxX0RZMiwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMV9keTIgKi8KLQl7Q1NJMjFfRFgzLCAoUFREIHwgTTcpfSwJCQkJCS8qIGNzaTIxX2R4MyAqLwotCXtDU0kyMV9EWTMsIChQVEQgfCBNNyl9LAkJCQkJLyogY3NpMjFfZHkzICovCi0Je0NTSTIxX0RYNCwgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE03KX0sCQkvKiBjc2kyMV9keDQgKi8KLQl7Q1NJMjFfRFk0LCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTcpfSwJCS8qIGNzaTIxX2R5NCAqLwotCXtDU0kyMl9EWDAsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjJfZHgwICovCi0Je0NTSTIyX0RZMCwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMl9keTAgKi8KLQl7Q1NJMjJfRFgxLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIyX2R4MSAqLwotCXtDU0kyMl9EWTEsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjJfZHkxICovCi0Je0NBTV9TSFVUVEVSLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogY2FtX3NodXR0ZXIgKi8KLQl7Q0FNX1NUUk9CRSwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIGNhbV9zdHJvYmUgKi8KLQl7Q0FNX0dMT0JBTFJFU0VULCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMyl9LAkvKiBncGlvXzgzICovCi0Je1VTQkIxX1VMUElUTExfQ0xLLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwvKiB1c2JiMV91bHBpcGh5X2NsayAqLwotCXtVU0JCMV9VTFBJVExMX1NUUCwgKE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTQpfSwJCS8qIHVzYmIxX3VscGlwaHlfc3RwICovCi0Je1VTQkIxX1VMUElUTExfRElSLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kaXIgKi8KLQl7VVNCQjFfVUxQSVRMTF9OWFQsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X254dCAqLwotCXtVU0JCMV9VTFBJVExMX0RBVDAsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDAgKi8KLQl7VVNCQjFfVUxQSVRMTF9EQVQxLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQxICovCi0Je1VTQkIxX1VMUElUTExfREFUMiwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0MiAqLwotCXtVU0JCMV9VTFBJVExMX0RBVDMsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDMgKi8KLQl7VVNCQjFfVUxQSVRMTF9EQVQ0LCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQ0ICovCi0Je1VTQkIxX1VMUElUTExfREFUNSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0NSAqLwotCXtVU0JCMV9VTFBJVExMX0RBVDYsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDYgKi8KLQl7VVNCQjFfVUxQSVRMTF9EQVQ3LCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQ3ICovCi0Je1VTQkIxX0hTSUNfREFUQSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHVzYmIxX2hzaWNfZGF0YSAqLwotCXtVU0JCMV9IU0lDX1NUUk9CRSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHVzYmIxX2hzaWNfc3Ryb2JlICovCi0Je1VTQkMxX0lDVVNCX0RQLCAoSUVOIHwgTTApfSwJCQkJCS8qIHVzYmMxX2ljdXNiX2RwICovCi0Je1VTQkMxX0lDVVNCX0RNLCAoSUVOIHwgTTApfSwJCQkJCS8qIHVzYmMxX2ljdXNiX2RtICovCi0Je1NETU1DMV9DTEssIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBzZG1tYzFfY2xrICovCi0Je1NETU1DMV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfY21kICovCi0Je1NETU1DMV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDAgKi8KLQl7U0RNTUMxX0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0MSAqLwotCXtTRE1NQzFfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jMV9kYXQyICovCi0Je1NETU1DMV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDMgKi8KLQl7U0RNTUMxX0RBVDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0NCAqLwotCXtTRE1NQzFfREFUNSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jMV9kYXQ1ICovCi0Je1NETU1DMV9EQVQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDYgKi8KLQl7U0RNTUMxX0RBVDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0NyAqLwotCXtBQkVfTUNCU1AyX0NMS1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AyX2Nsa3ggKi8KLQl7QUJFX01DQlNQMl9EUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIGFiZV9tY2JzcDJfZHIgKi8KLQl7QUJFX01DQlNQMl9EWCwgKE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCQkvKiBhYmVfbWNic3AyX2R4ICovCi0Je0FCRV9NQ0JTUDJfRlNYLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX21jYnNwMl9mc3ggKi8KLQl7QUJFX01DQlNQMV9DTEtYLCAoSUVOIHwgTTEpfSwJCQkJCS8qIGFiZV9zbGltYnVzMV9jbG9jayAqLwotCXtBQkVfTUNCU1AxX0RSLCAoSUVOIHwgTTEpfSwJCQkJCS8qIGFiZV9zbGltYnVzMV9kYXRhICovCi0Je0FCRV9NQ0JTUDFfRFgsIChPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkJLyogYWJlX21jYnNwMV9keCAqLwotCXtBQkVfTUNCU1AxX0ZTWCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9tY2JzcDFfZnN4ICovCi0Je0FCRV9QRE1fVUxfREFUQSwgKFBURCB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9wZG1fdWxfZGF0YSAqLwotCXtBQkVfUERNX0RMX0RBVEEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX2RsX2RhdGEgKi8KLQl7QUJFX1BETV9GUkFNRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9wZG1fZnJhbWUgKi8KLQl7QUJFX1BETV9MQl9DTEssIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX2xiX2NsayAqLwotCXtBQkVfQ0xLUywgKFBURCB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9jbGtzICovCi0Je0FCRV9ETUlDX0NMSzEsIChNMCl9LAkJCQkJCS8qIGFiZV9kbWljX2NsazEgKi8KLQl7QUJFX0RNSUNfRElOMSwgKElFTiB8IE0wKX0sCQkJCQkvKiBhYmVfZG1pY19kaW4xICovCi0Je0FCRV9ETUlDX0RJTjIsIChJRU4gfCBNMCl9LAkJCQkJLyogYWJlX2RtaWNfZGluMiAqLwotCXtBQkVfRE1JQ19ESU4zLCAoSUVOIHwgTTApfSwJCQkJCS8qIGFiZV9kbWljX2RpbjMgKi8KLQl7VUFSVDJfQ1RTLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIHVhcnQyX2N0cyAqLwotCXtVQVJUMl9SVFMsIChNMCl9LAkJCQkJCS8qIHVhcnQyX3J0cyAqLwotCXtVQVJUMl9SWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiB1YXJ0Ml9yeCAqLwotCXtVQVJUMl9UWCwgKE0wKX0sCQkJCQkJLyogdWFydDJfdHggKi8KLQl7SERRX1NJTywgKE0zKX0sCQkJCQkJLyogZ3Bpb18xMjcgKi8KLQl7STJDMV9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMV9zY2wgKi8KLQl7STJDMV9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMV9zZGEgKi8KLQl7STJDMl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMl9zY2wgKi8KLQl7STJDMl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjMl9zZGEgKi8KLQl7STJDM19TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjM19zY2wgKi8KLQl7STJDM19TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjM19zZGEgKi8KLQl7STJDNF9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjNF9zY2wgKi8KLQl7STJDNF9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogaTJjNF9zZGEgKi8KLQl7TUNTUEkxX0NMSywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfY2xrICovCi0Je01DU1BJMV9TT01JLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIG1jc3BpMV9zb21pICovCi0Je01DU1BJMV9TSU1PLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIG1jc3BpMV9zaW1vICovCi0Je01DU1BJMV9DUzAsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBtY3NwaTFfY3MwICovCi0Je01DU1BJMV9DUzEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMyl9LAkvKiBtY3NwaTFfY3MxICovCi0Je01DU1BJMV9DUzIsIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BUVSB8IE0zKX0sCQkvKiBncGlvXzEzOSAqLwotCXtNQ1NQSTFfQ1MzLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTQwICovCi0Je1VBUlQzX0NUU19SQ1RYLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogdWFydDNfdHggKi8KLQl7VUFSVDNfUlRTX1NELCAoTTApfSwJCQkJCQkvKiB1YXJ0M19ydHNfc2QgKi8KLQl7VUFSVDNfUlhfSVJSWCwgKElFTiB8IE0wKX0sCQkJCQkvKiB1YXJ0M19yeCAqLwotCXtVQVJUM19UWF9JUlRYLCAoTTApfSwJCQkJCQkvKiB1YXJ0M190eCAqLwotCXtTRE1NQzVfQ0xLLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogc2RtbWM1X2NsayAqLwotCXtTRE1NQzVfQ01ELCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWM1X2NtZCAqLwotCXtTRE1NQzVfREFUMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9kYXQwICovCi0Je1NETU1DNV9EQVQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWM1X2RhdDEgKi8KLQl7U0RNTUM1X0RBVDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzVfZGF0MiAqLwotCXtTRE1NQzVfREFUMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9kYXQzICovCi0Je01DU1BJNF9DTEssIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogbWNzcGk0X2NsayAqLwotCXtNQ1NQSTRfU0lNTywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTRfc2ltbyAqLwotCXtNQ1NQSTRfU09NSSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTRfc29taSAqLwotCXtNQ1NQSTRfQ1MwLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogbWNzcGk0X2NzMCAqLwotCXtVQVJUNF9SWCwgKElFTiB8IE0wKX0sCQkJCQkJLyogdWFydDRfcnggKi8KLQl7VUFSVDRfVFgsIChNMCl9LAkJCQkJCS8qIHVhcnQ0X3R4ICovCi0Je1VTQkIyX1VMUElUTExfQ0xLLCAoSUVOIHwgTTMpfSwJCQkJLyogZ3Bpb18xNTcgKi8KLQl7VVNCQjJfVUxQSVRMTF9TVFAsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTIzICovCi0Je1VTQkIyX1VMUElUTExfRElSLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMiAqLwotCXtVU0JCMl9VTFBJVExMX05YVCwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMjEgKi8KLQl7VVNCQjJfVUxQSVRMTF9EQVQwLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMCAqLwotCXtVU0JCMl9VTFBJVExMX0RBVDEsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTE5ICovCi0Je1VTQkIyX1VMUElUTExfREFUMiwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTggKi8KLQl7VVNCQjJfVUxQSVRMTF9EQVQzLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGExNSAqLwotCXtVU0JCMl9VTFBJVExMX0RBVDQsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTE0ICovCi0Je1VTQkIyX1VMUElUTExfREFUNSwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTMgKi8KLQl7VVNCQjJfVUxQSVRMTF9EQVQ2LCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGExMiAqLwotCXtVU0JCMl9VTFBJVExMX0RBVDcsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTExICovCi0Je1VTQkIyX0hTSUNfREFUQSwgKFBURCB8IE9GRl9FTiB8IE9GRl9PVVRfUFRVIHwgTTMpfSwJCS8qIGdwaW9fMTY5ICovCi0Je1VTQkIyX0hTSUNfU1RST0JFLCAoUFREIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVFUgfCBNMyl9LAkJLyogZ3Bpb18xNzAgKi8KLQl7VU5JUFJPX1RYMCwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE3MSAqLwotCXtVTklQUk9fVFkwLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMSAqLwotCXtVTklQUk9fVFgxLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMiAqLwotCXtVTklQUk9fVFkxLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMyAqLwotCXtVTklQUk9fVFgyLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMCAqLwotCXtVTklQUk9fVFkyLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMSAqLwotCXtVTklQUk9fUlgwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzAgKi8KLQl7VU5JUFJPX1JZMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3cxICovCi0Je1VOSVBST19SWDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93MiAqLwotCXtVTklQUk9fUlkxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzMgKi8KLQl7VU5JUFJPX1JYMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3c0ICovCi0Je1VOSVBST19SWTIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93NSAqLwotCXtVU0JBMF9PVEdfQ0UsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0wKX0sCS8qIHVzYmEwX290Z19jZSAqLwotCXtVU0JBMF9PVEdfRFAsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogdXNiYTBfb3RnX2RwICovCi0Je1VTQkEwX09UR19ETSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiB1c2JhMF9vdGdfZG0gKi8KLQl7RlJFRl9DTEsxX09VVCwgKE0wKX0sCQkJCQkJLyogZnJlZl9jbGsxX291dCAqLwotCXtGUkVGX0NMSzJfT1VULCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJLyogZ3Bpb18xODIgKi8KLQl7U1lTX05JUlExLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIHN5c19uaXJxMSAqLwotCXtTWVNfTklSUTIsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogc3lzX25pcnEyICovCi0Je1NZU19CT09UMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NCAqLwotCXtTWVNfQk9PVDEsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg1ICovCi0Je1NZU19CT09UMiwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NiAqLwotCXtTWVNfQk9PVDMsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg3ICovCi0Je1NZU19CT09UNCwgKE0zKX0sCQkJCQkJLyogZ3Bpb18xODggKi8KLQl7U1lTX0JPT1Q1LCAoUFREIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTg5ICovCi0Je0RQTV9FTVUwLCAoSUVOIHwgTTApfSwJCQkJCQkvKiBkcG1fZW11MCAqLwotCXtEUE1fRU1VMSwgKElFTiB8IE0wKX0sCQkJCQkJLyogZHBtX2VtdTEgKi8KLQl7RFBNX0VNVTIsIChJRU4gfCBNMCl9LAkJCQkJCS8qIGRwbV9lbXUyICovCi0Je0RQTV9FTVUzLCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfZGF0YTEwICovCi0Je0RQTV9FTVU0LCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfZGF0YTkgKi8KLQl7RFBNX0VNVTUsIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl9kYXRhMTYgKi8KLQl7RFBNX0VNVTYsIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl9kYXRhMTcgKi8KLQl7RFBNX0VNVTcsIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl9oc3luYyAqLwotCXtEUE1fRU1VOCwgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX3BjbGsgKi8KLQl7RFBNX0VNVTksIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl92c3luYyAqLwotCXtEUE1fRU1VMTAsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RlICovCi0Je0RQTV9FTVUxMSwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTggKi8KLQl7RFBNX0VNVTEyLCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhNyAqLwotCXtEUE1fRU1VMTMsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGE2ICovCi0Je0RQTV9FTVUxNCwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTUgKi8KLQl7RFBNX0VNVTE1LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhNCAqLwotCXtEUE1fRU1VMTYsIChNMyl9LAkJCQkJCS8qIGdwaW9fMjcgKi8KLQl7RFBNX0VNVTE3LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhMiAqLwotCXtEUE1fRU1VMTgsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGExICovCi0Je0RQTV9FTVUxOSwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTAgKi8KLX07Ci0KLWNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlbXSA9IHsKLQl7UEFEMF9TSU1fSU8sIChJRU4gfCBNMCl9LAkJCQkJLyogc2ltX2lvICovCi0Je1BBRDFfU0lNX0NMSywgKE0wKX0sCQkJCQkJLyogc2ltX2NsayAqLwotCXtQQUQwX1NJTV9SRVNFVCwgKE0wKX0sCQkJCQkJLyogc2ltX3Jlc2V0ICovCi0Je1BBRDFfU0lNX0NELCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogc2ltX2NkICovCi0Je1BBRDBfU0lNX1BXUkNUUkwsIChNMCl9LAkJCQkJLyogc2ltX3B3cmN0cmwgKi8KLQl7UEFEMV9TUl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBzcl9zY2wgKi8KLQl7UEFEMF9TUl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBzcl9zZGEgKi8KLQl7UEFEMV9GUkVGX1hUQUxfSU4sIChNMCl9LAkJCQkJLyogIyAqLwotCXtQQUQwX0ZSRUZfU0xJQ0VSX0lOLCAoTTApfSwJCQkJCS8qIGZyZWZfc2xpY2VyX2luICovCi0Je1BBRDFfRlJFRl9DTEtfSU9SRVEsIChNMCl9LAkJCQkJLyogZnJlZl9jbGtfaW9yZXEgKi8KLQl7UEFEMF9GUkVGX0NMSzBfT1VULCAoTTIpfSwJCQkJCS8qIHN5c19kcm1fbXNlY3VyZSAqLwotCXtQQUQxX0ZSRUZfQ0xLM19SRVEsIChNMyl9LAkJCQkJLyogZ3Bpb193azMwICovCi0Je1BBRDBfRlJFRl9DTEszX09VVCwgKE0wKX0sCQkJCQkvKiBmcmVmX2NsazNfb3V0ICovCi0Je1BBRDFfRlJFRl9DTEs0X1JFUSwgKFBUVSB8IE9GRl9FTiB8IE9GRl9PVVRfUFRVIHwgTTMpfSwJLyogbGVkIHN0YXR1c18xICovCi0Je1BBRDBfRlJFRl9DTEs0X09VVCwgKFBUVSB8IE9GRl9FTiB8IE9GRl9PVVRfUFRVIHwgTTMpfSwJLyogbGVkIHN0YXR1c18yICovCi0Je1BBRDFfU1lTXzMySywgKElFTiB8IE0wKX0sCQkJCQkvKiBzeXNfMzJrICovCi0Je1BBRDBfU1lTX05SRVNQV1JPTiwgKE0wKX0sCQkJCQkvKiBzeXNfbnJlc3B3cm9uICovCi0Je1BBRDFfU1lTX05SRVNXQVJNLCAoTTApfSwJCQkJCS8qIHN5c19ucmVzd2FybSAqLwotCXtQQUQwX1NZU19QV1JfUkVRLCAoUFRVIHwgTTApfSwJCQkJCS8qIHN5c19wd3JfcmVxICovCi0Je1BBRDFfU1lTX1BXUk9OX1JFU0VULCAoTTMpfSwJCQkJCS8qIGdwaW9fd2syOSAqLwotCXtQQUQwX1NZU19CT09UNiwgKElFTiB8IE0zKX0sCQkJCQkvKiBncGlvX3drOSAqLwotCXtQQUQxX1NZU19CT09UNywgKElFTiB8IE0zKX0sCQkJCQkvKiBncGlvX3drMTAgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvc2RwNDQzMC9zZHAuaCBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhX211eF9kYXRhLmgKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gYm9hcmQvdGkvc2RwNDQzMC9zZHAuaApyZW5hbWUgdG8gYm9hcmQvdGkvcGFuZGEvcGFuZGFfbXV4X2RhdGEuaAppbmRleCBiZjQxMDY3Li4xNmNjMGFkIDEwMDY0NAotLS0gYS9ib2FyZC90aS9zZHA0NDMwL3NkcC5oCisrKyBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhX211eF9kYXRhLmgKQEAgLTIzLDIyICsyMywxMiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KKyNpZm5kZWYgX1NEUDQ0MzBfTVVYX0RBVEFfSAorI2RlZmluZSBfU0RQNDQzMF9NVVhfREFUQV9ICiAKLSNpZm5kZWYgX1NEUF9IXwotI2RlZmluZSBfU0RQX0hfCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXhfb21hcDQuaD4KIAotY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheVtdID0gewotCXtHUE1DX0FEMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQwICovCi0Je0dQTUNfQUQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgCS8qIHNkbW1jMl9kYXQxICovCi0Je0dQTUNfQUQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2RhdDIgKi8KLQl7R1BNQ19BRDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfZGF0MyAqLwotCXtHUE1DX0FENCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQ0ICovCi0Je0dQTUNfQUQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2RhdDUgKi8KLQl7R1BNQ19BRDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfZGF0NiAqLwotCXtHUE1DX0FENywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQ3ICovCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWxbXSA9IHsKIAl7R1BNQ19BRDgsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMyl9LAkvKiBncGlvXzMyICovCiAJe0dQTUNfQUQ5LCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMzMgKi8KIAl7R1BNQ19BRDEwLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMzQgKi8KQEAgLTY0LDggKzU0LDYgQEAKIAl7R1BNQ19OV1AsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTQgKi8KIAl7R1BNQ19DTEssIChQVEQgfCBNMyl9LAkJCQkJCS8qIGdwaW9fNTUgKi8KIAl7R1BNQ19OQURWX0FMRSwgKE0zKX0sCQkJCQkJLyogZ3Bpb181NiAqLwotCXtHUE1DX05PRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTEpfSwJCS8qIHNkbW1jMl9jbGsgKi8KLQl7R1BNQ19OV0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfY21kICovCiAJe0dQTUNfTkJFMF9DTEUsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTkgKi8KIAl7R1BNQ19OQkUxLCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fNjAgKi8KIAl7R1BNQ19XQUlUMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzYxICovCkBAIC05NiwxNCArODQsMTQgQEAKIAl7Q0FNX1NIVVRURVIsIChPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBjYW1fc2h1dHRlciAqLwogCXtDQU1fU1RST0JFLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogY2FtX3N0cm9iZSAqLwogCXtDQU1fR0xPQkFMUkVTRVQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0zKX0sCS8qIGdwaW9fODMgKi8KLQl7VVNCQjFfVUxQSVRMTF9DTEssIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LC8qIHVzYmIxX3VscGlwaHlfY2xrICovCi0Je1VTQkIxX1VMUElUTExfU1RQLCAoT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNNCl9LAkJLyogdXNiYjFfdWxwaXBoeV9zdHAgKi8KLQl7VVNCQjFfVUxQSVRMTF9ESVIsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RpciAqLwotCXtVU0JCMV9VTFBJVExMX05YVCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfbnh0ICovCi0Je1VTQkIxX1VMUElUTExfREFUMCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0MCAqLwotCXtVU0JCMV9VTFBJVExMX0RBVDEsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDEgKi8KLQl7VVNCQjFfVUxQSVRMTF9EQVQyLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQyICovCi0Je1VTQkIxX1VMUElUTExfREFUMywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0MyAqLworCXtVU0JCMV9VTFBJVExMX0NMSywgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2Nhd2FrZSAqLworCXtVU0JCMV9VTFBJVExMX1NUUCwgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2NhZGF0YSAqLworCXtVU0JCMV9VTFBJVExMX0RJUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2NhZmxhZyAqLworCXtVU0JCMV9VTFBJVExMX05YVCwgKE9GRl9FTiB8IE0xKX0sCQkJCS8qIGhzaTFfYWNyZWFkeSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDAsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2Fjd2FrZSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDEsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjZGF0YSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDIsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjZmxhZyAqLworCXtVU0JCMV9VTFBJVExMX0RBVDMsIChJRU4gfCBPRkZfRU4gfCBPRkZfSU4gfCBNMSl9LAkJLyogaHNpMV9jYXJlYWR5ICovCiAJe1VTQkIxX1VMUElUTExfREFUNCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0NCAqLwogCXtVU0JCMV9VTFBJVExMX0RBVDUsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDUgKi8KIAl7VVNCQjFfVUxQSVRMTF9EQVQ2LCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQ2ICovCkBAIC0xMTIsMjIgKzEwMCwxMiBAQAogCXtVU0JCMV9IU0lDX1NUUk9CRSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHVzYmIxX2hzaWNfc3Ryb2JlICovCiAJe1VTQkMxX0lDVVNCX0RQLCAoSUVOIHwgTTApfSwJCQkJCS8qIHVzYmMxX2ljdXNiX2RwICovCiAJe1VTQkMxX0lDVVNCX0RNLCAoSUVOIHwgTTApfSwJCQkJCS8qIHVzYmMxX2ljdXNiX2RtICovCi0Je1NETU1DMV9DTEssIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBzZG1tYzFfY2xrICovCi0Je1NETU1DMV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfY21kICovCi0Je1NETU1DMV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDAgKi8KLQl7U0RNTUMxX0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0MSAqLwotCXtTRE1NQzFfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jMV9kYXQyICovCi0Je1NETU1DMV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDMgKi8KLQl7U0RNTUMxX0RBVDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0NCAqLwotCXtTRE1NQzFfREFUNSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jMV9kYXQ1ICovCi0Je1NETU1DMV9EQVQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDYgKi8KLQl7U0RNTUMxX0RBVDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0NyAqLwogCXtBQkVfTUNCU1AyX0NMS1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AyX2Nsa3ggKi8KIAl7QUJFX01DQlNQMl9EUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIGFiZV9tY2JzcDJfZHIgKi8KIAl7QUJFX01DQlNQMl9EWCwgKE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCQkvKiBhYmVfbWNic3AyX2R4ICovCiAJe0FCRV9NQ0JTUDJfRlNYLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX21jYnNwMl9mc3ggKi8KLQl7QUJFX01DQlNQMV9DTEtYLCAoSUVOIHwgTTEpfSwJCQkJCS8qIGFiZV9zbGltYnVzMV9jbG9jayAqLwotCXtBQkVfTUNCU1AxX0RSLCAoSUVOIHwgTTEpfSwJCQkJCS8qIGFiZV9zbGltYnVzMV9kYXRhICovCisJe0FCRV9NQ0JTUDFfQ0xLWCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9tY2JzcDFfY2xreCAqLworCXtBQkVfTUNCU1AxX0RSLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogYWJlX21jYnNwMV9kciAqLwogCXtBQkVfTUNCU1AxX0RYLCAoT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJCS8qIGFiZV9tY2JzcDFfZHggKi8KIAl7QUJFX01DQlNQMV9GU1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AxX2ZzeCAqLwogCXtBQkVfUERNX1VMX0RBVEEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX3VsX2RhdGEgKi8KQEAgLTE0NCwxNCArMTIyLDYgQEAKIAl7VUFSVDJfUlgsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogdWFydDJfcnggKi8KIAl7VUFSVDJfVFgsIChNMCl9LAkJCQkJCS8qIHVhcnQyX3R4ICovCiAJe0hEUV9TSU8sIChNMyl9LAkJCQkJCS8qIGdwaW9fMTI3ICovCi0Je0kyQzFfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzFfc2NsICovCi0Je0kyQzFfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzFfc2RhICovCi0Je0kyQzJfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzJfc2NsICovCi0Je0kyQzJfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzJfc2RhICovCi0Je0kyQzNfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzNfc2NsICovCi0Je0kyQzNfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzNfc2RhICovCi0Je0kyQzRfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzRfc2NsICovCi0Je0kyQzRfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzRfc2RhICovCiAJe01DU1BJMV9DTEssIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogbWNzcGkxX2NsayAqLwogCXtNQ1NQSTFfU09NSSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfc29taSAqLwogCXtNQ1NQSTFfU0lNTywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfc2ltbyAqLwpAQCAtMTU5LDEwICsxMjksNiBAQAogCXtNQ1NQSTFfQ1MxLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTMpfSwJLyogbWNzcGkxX2NzMSAqLwogCXtNQ1NQSTFfQ1MyLCAoUFRVIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVFUgfCBNMyl9LAkJLyogZ3Bpb18xMzkgKi8KIAl7TUNTUEkxX0NTMywgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE0MCAqLwotCXtVQVJUM19DVFNfUkNUWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIHVhcnQzX3R4ICovCi0Je1VBUlQzX1JUU19TRCwgKE0wKX0sCQkJCQkJLyogdWFydDNfcnRzX3NkICovCi0Je1VBUlQzX1JYX0lSUlgsIChJRU4gfCBNMCl9LAkJCQkJLyogdWFydDNfcnggKi8KLQl7VUFSVDNfVFhfSVJUWCwgKE0wKX0sCQkJCQkJLyogdWFydDNfdHggKi8KIAl7U0RNTUM1X0NMSywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIHNkbW1jNV9jbGsgKi8KIAl7U0RNTUM1X0NNRCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9jbWQgKi8KIAl7U0RNTUM1X0RBVDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzVfZGF0MCAqLwpAQCAtMTc1LDcgKzE0MSw3IEBACiAJe01DU1BJNF9DUzAsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBtY3NwaTRfY3MwICovCiAJe1VBUlQ0X1JYLCAoSUVOIHwgTTApfSwJCQkJCQkvKiB1YXJ0NF9yeCAqLwogCXtVQVJUNF9UWCwgKE0wKX0sCQkJCQkJLyogdWFydDRfdHggKi8KLQl7VVNCQjJfVUxQSVRMTF9DTEssIChJRU4gfCBNMyl9LAkJCQkvKiBncGlvXzE1NyAqLworCXtVU0JCMl9VTFBJVExMX0NMSywgKFBURCB8IElFTiB8IE0zKX0sCQkJCS8qIGdwaW9fMTU3ICovCiAJe1VTQkIyX1VMUElUTExfU1RQLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMyAqLwogCXtVU0JCMl9VTFBJVExMX0RJUiwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMjIgKi8KIAl7VVNCQjJfVUxQSVRMTF9OWFQsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTIxICovCkBAIC0yMDcsMTEgKzE3MywxMSBAQAogCXtGUkVGX0NMSzFfT1VULCAoTTApfSwJCQkJCQkvKiBmcmVmX2NsazFfb3V0ICovCiAJe0ZSRUZfQ0xLMl9PVVQsIChNMCl9LAkJCQkJCS8qIGZyZWZfY2xrMl9vdXQgKi8KIAl7U1lTX05JUlExLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIHN5c19uaXJxMSAqLwotCXtTWVNfTklSUTIsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogc3lzX25pcnEyICovCisJe1NZU19OSVJRMiwgKE03KX0sCQkJCQkJLyogc3lzX25pcnEyICovCiAJe1NZU19CT09UMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NCAqLwogCXtTWVNfQk9PVDEsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg1ICovCiAJe1NZU19CT09UMiwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NiAqLwotCXtTWVNfQk9PVDMsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg3ICovCisJe1NZU19CT09UMywgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NyAqLwogCXtTWVNfQk9PVDQsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg4ICovCiAJe1NZU19CT09UNSwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4OSAqLwogCXtEUE1fRU1VMCwgKElFTiB8IE0wKX0sCQkJCQkJLyogZHBtX2VtdTAgKi8KQEAgLTIzNiwxNCArMjAyLDEyIEBACiAJe0RQTV9FTVUxOSwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTAgKi8KIH07CiAKLWNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlbXSA9IHsKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbFtdID0gewogCXtQQUQwX1NJTV9JTywgKElFTiB8IE0wKX0sCQkvKiBzaW1faW8gKi8KIAl7UEFEMV9TSU1fQ0xLLCAoTTApfSwJCQkvKiBzaW1fY2xrICovCiAJe1BBRDBfU0lNX1JFU0VULCAoTTApfSwJCQkvKiBzaW1fcmVzZXQgKi8KIAl7UEFEMV9TSU1fQ0QsIChQVFUgfCBJRU4gfCBNMCl9LAkvKiBzaW1fY2QgKi8KIAl7UEFEMF9TSU1fUFdSQ1RSTCwgKE0wKX0sCQkvKiBzaW1fcHdyY3RybCAqLwotCXtQQUQxX1NSX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCS8qIHNyX3NjbCAqLwotCXtQQUQwX1NSX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCS8qIHNyX3NkYSAqLwogCXtQQUQxX0ZSRUZfWFRBTF9JTiwgKE0wKX0sCQkvKiAjICovCiAJe1BBRDBfRlJFRl9TTElDRVJfSU4sIChNMCl9LAkJLyogZnJlZl9zbGljZXJfaW4gKi8KIAl7UEFEMV9GUkVGX0NMS19JT1JFUSwgKE0wKX0sCQkvKiBmcmVmX2Nsa19pb3JlcSAqLwpAQCAtMjUyLDEzICsyMTYsMTUgQEAKIAl7UEFEMF9GUkVGX0NMSzNfT1VULCAoTTApfSwJCS8qIGZyZWZfY2xrM19vdXQgKi8KIAl7UEFEMV9GUkVGX0NMSzRfUkVRLCAoUFRVIHwgSUVOIHwgTTApfSwJLyogIyAqLwogCXtQQUQwX0ZSRUZfQ0xLNF9PVVQsIChNMCl9LAkJLyogIyAqLwotCXtQQUQxX1NZU18zMkssIChJRU4gfCBNMCl9LAkJLyogc3lzXzMyayAqLwogCXtQQUQwX1NZU19OUkVTUFdST04sIChNMCl9LAkJLyogc3lzX25yZXNwd3JvbiAqLwogCXtQQUQxX1NZU19OUkVTV0FSTSwgKE0wKX0sCQkvKiBzeXNfbnJlc3dhcm0gKi8KIAl7UEFEMF9TWVNfUFdSX1JFUSwgKFBUVSB8IE0wKX0sCQkvKiBzeXNfcHdyX3JlcSAqLwogCXtQQUQxX1NZU19QV1JPTl9SRVNFVCwgKE0zKX0sCQkvKiBncGlvX3drMjkgKi8KIAl7UEFEMF9TWVNfQk9PVDYsIChJRU4gfCBNMyl9LAkJLyogZ3Bpb193azkgKi8KIAl7UEFEMV9TWVNfQk9PVDcsIChJRU4gfCBNMyl9LAkJLyogZ3Bpb193azEwICovCisJe1BBRDFfRlJFRl9DTEszX1JFUSwgKE0zKX0sCQkvKiBncGlvX3drMzAgKi8KKwl7UEFEMV9GUkVGX0NMSzRfUkVRLCAoTTMpfSwJCS8qIGdwaW9fd2s3ICovCisJe1BBRDBfRlJFRl9DTEs0X09VVCwgKE0zKX0sCQkvKiBncGlvX3drOCAqLwogfTsKIAotI2VuZGlmCisjZW5kaWYgLyogX1NEUDQ0MzBfTVVYX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvc2RwNDQzMC9NYWtlZmlsZSBiL2JvYXJkL3RpL3NkcDQ0MzAvTWFrZWZpbGUKaW5kZXggZjFlZTU0NC4uMTJmMjc0MyAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvc2RwNDQzMC9NYWtlZmlsZQorKysgYi9ib2FyZC90aS9zZHA0NDMwL01ha2VmaWxlCkBAIC0yNSw3ICsyNSw5IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KIAoraWZuZGVmIENPTkZJR19TUExfQlVJTEQKIENPQkpTCTo9IHNkcC5vIGNtZF9iYXQubworZW5kaWYKIAogU1JDUwk6PSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCmRpZmYgLS1naXQgYS9ib2FyZC90aS9zZHA0NDMwL2NvbmZpZy5tayBiL2JvYXJkL3RpL3NkcDQ0MzAvY29uZmlnLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzkwMWE3Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3RpL3NkcDQ0MzAvY29uZmlnLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIwotIyAoQykgQ29weXJpZ2h0IDIwMDYtMjAwOQotIyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQsIDx3d3cudGkuY29tPgotIwotIyBPTUFQIDQ0MzAgU0RQCi0jIHNlZSBodHRwOi8vd3d3LnRpLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVGV4YXMgSW5zdHJ1bWVudHMKLSMKLSMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSMgcHJvamVjdC4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotIyBNQSAwMjExMS0xMzA3IFVTQQotIwotIyBTRFJBTSBBZGRyZXNzIFNwYWNlOgotIyA4MDAwJzAwMDAgLSA5ZmZmJ2ZmZmYgKDUxMiBNQikKLSMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDgwMDAnODAwMCwgZW50cnkgODAwMCc4MDAwCi0jIChtZW0gYmFzZSArIHJlc2VydmVkKQotCi1DT05GSUdfU1lTX1RFWFRfQkFTRSA9IDB4ODBlODAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmMgYi9ib2FyZC90aS9zZHA0NDMwL3NkcC5jCmluZGV4IGIxM2M0YzUuLmE1ZWE2ODIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmMKKysrIGIvYm9hcmQvdGkvc2RwNDQzMC9zZHAuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tY19ob3N0X2RlZi5oPgogCi0jaW5jbHVkZSAic2RwLmgiCisjaW5jbHVkZSAic2RwNDQzMF9tdXhfZGF0YS5oIgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIApAQCAtNzAsMjcgKzcwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgZG9fc2V0X211eCh1MzIgYmFzZSwgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvbnN0ICphcnJheSwgaW50IHNpemUpCit2b2lkIHNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCh2b2lkKQogewotCWludCBpOwotCXN0cnVjdCBwYWRfY29uZl9lbnRyeSAqcGFkID0gKHN0cnVjdCBwYWRfY29uZl9lbnRyeSAqKSBhcnJheTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHBhZCsrKQotCQl3cml0ZXcocGFkLT52YWwsIGJhc2UgKyBwYWQtPm9mZnNldCk7Ci19Ci0KLS8qKgotICogQGJyaWVmIHNldF9tdXhjb25mX3JlZ3MgU2V0dGluZyB1cCB0aGUgY29uZmlndXJhdGlvbiBNdXggcmVnaXN0ZXJzCi0gKiBzcGVjaWZpYyB0byB0aGUgYm9hcmQuCi0gKi8KLXZvaWQgc2V0X211eGNvbmZfcmVncyh2b2lkKQotewotCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX0NPUkUsIGNvcmVfcGFkY29uZl9hcnJheSwKLQkJICAgc2l6ZW9mKGNvcmVfcGFkY29uZl9hcnJheSkgLworCWRvX3NldF9tdXgoQ09OVFJPTF9QQURDT05GX0NPUkUsIGNvcmVfcGFkY29uZl9hcnJheV9ub25fZXNzZW50aWFsLAorCQkgICBzaXplb2YoY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwpIC8KIAkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOwogCi0JZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5LAotCQkgICBzaXplb2Yod2t1cF9wYWRjb25mX2FycmF5KSAvCisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwsCisJCSAgIHNpemVvZih3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCkgLwogCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmggYi9ib2FyZC90aS9zZHA0NDMwL3NkcDQ0MzBfbXV4X2RhdGEuaApzaW1pbGFyaXR5IGluZGV4IDc2JQpjb3B5IGZyb20gYm9hcmQvdGkvc2RwNDQzMC9zZHAuaApjb3B5IHRvIGJvYXJkL3RpL3NkcDQ0MzAvc2RwNDQzMF9tdXhfZGF0YS5oCmluZGV4IGJmNDEwNjcuLjE2Y2MwYWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmgKKysrIGIvYm9hcmQvdGkvc2RwNDQzMC9zZHA0NDMwX211eF9kYXRhLmgKQEAgLTIzLDIyICsyMywxMiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KKyNpZm5kZWYgX1NEUDQ0MzBfTVVYX0RBVEFfSAorI2RlZmluZSBfU0RQNDQzMF9NVVhfREFUQV9ICiAKLSNpZm5kZWYgX1NEUF9IXwotI2RlZmluZSBfU0RQX0hfCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXhfb21hcDQuaD4KIAotY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheVtdID0gewotCXtHUE1DX0FEMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQwICovCi0Je0dQTUNfQUQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgCS8qIHNkbW1jMl9kYXQxICovCi0Je0dQTUNfQUQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2RhdDIgKi8KLQl7R1BNQ19BRDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfZGF0MyAqLwotCXtHUE1DX0FENCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQ0ICovCi0Je0dQTUNfQUQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyogc2RtbWMyX2RhdDUgKi8KLQl7R1BNQ19BRDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfZGF0NiAqLwotCXtHUE1DX0FENywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIHNkbW1jMl9kYXQ3ICovCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWxbXSA9IHsKIAl7R1BNQ19BRDgsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMyl9LAkvKiBncGlvXzMyICovCiAJe0dQTUNfQUQ5LCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMzMgKi8KIAl7R1BNQ19BRDEwLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMzQgKi8KQEAgLTY0LDggKzU0LDYgQEAKIAl7R1BNQ19OV1AsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTQgKi8KIAl7R1BNQ19DTEssIChQVEQgfCBNMyl9LAkJCQkJCS8qIGdwaW9fNTUgKi8KIAl7R1BNQ19OQURWX0FMRSwgKE0zKX0sCQkJCQkJLyogZ3Bpb181NiAqLwotCXtHUE1DX05PRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTEpfSwJCS8qIHNkbW1jMl9jbGsgKi8KLQl7R1BNQ19OV0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBzZG1tYzJfY21kICovCiAJe0dQTUNfTkJFMF9DTEUsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTkgKi8KIAl7R1BNQ19OQkUxLCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fNjAgKi8KIAl7R1BNQ19XQUlUMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzYxICovCkBAIC05NiwxNCArODQsMTQgQEAKIAl7Q0FNX1NIVVRURVIsIChPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBjYW1fc2h1dHRlciAqLwogCXtDQU1fU1RST0JFLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogY2FtX3N0cm9iZSAqLwogCXtDQU1fR0xPQkFMUkVTRVQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0zKX0sCS8qIGdwaW9fODMgKi8KLQl7VVNCQjFfVUxQSVRMTF9DTEssIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LC8qIHVzYmIxX3VscGlwaHlfY2xrICovCi0Je1VTQkIxX1VMUElUTExfU1RQLCAoT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNNCl9LAkJLyogdXNiYjFfdWxwaXBoeV9zdHAgKi8KLQl7VVNCQjFfVUxQSVRMTF9ESVIsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RpciAqLwotCXtVU0JCMV9VTFBJVExMX05YVCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfbnh0ICovCi0Je1VTQkIxX1VMUElUTExfREFUMCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0MCAqLwotCXtVU0JCMV9VTFBJVExMX0RBVDEsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDEgKi8KLQl7VVNCQjFfVUxQSVRMTF9EQVQyLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQyICovCi0Je1VTQkIxX1VMUElUTExfREFUMywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0MyAqLworCXtVU0JCMV9VTFBJVExMX0NMSywgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2Nhd2FrZSAqLworCXtVU0JCMV9VTFBJVExMX1NUUCwgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2NhZGF0YSAqLworCXtVU0JCMV9VTFBJVExMX0RJUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2NhZmxhZyAqLworCXtVU0JCMV9VTFBJVExMX05YVCwgKE9GRl9FTiB8IE0xKX0sCQkJCS8qIGhzaTFfYWNyZWFkeSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDAsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2Fjd2FrZSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDEsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjZGF0YSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDIsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjZmxhZyAqLworCXtVU0JCMV9VTFBJVExMX0RBVDMsIChJRU4gfCBPRkZfRU4gfCBPRkZfSU4gfCBNMSl9LAkJLyogaHNpMV9jYXJlYWR5ICovCiAJe1VTQkIxX1VMUElUTExfREFUNCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0NCAqLwogCXtVU0JCMV9VTFBJVExMX0RBVDUsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDUgKi8KIAl7VVNCQjFfVUxQSVRMTF9EQVQ2LCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQ2ICovCkBAIC0xMTIsMjIgKzEwMCwxMiBAQAogCXtVU0JCMV9IU0lDX1NUUk9CRSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHVzYmIxX2hzaWNfc3Ryb2JlICovCiAJe1VTQkMxX0lDVVNCX0RQLCAoSUVOIHwgTTApfSwJCQkJCS8qIHVzYmMxX2ljdXNiX2RwICovCiAJe1VTQkMxX0lDVVNCX0RNLCAoSUVOIHwgTTApfSwJCQkJCS8qIHVzYmMxX2ljdXNiX2RtICovCi0Je1NETU1DMV9DTEssIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBzZG1tYzFfY2xrICovCi0Je1NETU1DMV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfY21kICovCi0Je1NETU1DMV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDAgKi8KLQl7U0RNTUMxX0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0MSAqLwotCXtTRE1NQzFfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jMV9kYXQyICovCi0Je1NETU1DMV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDMgKi8KLQl7U0RNTUMxX0RBVDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0NCAqLwotCXtTRE1NQzFfREFUNSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jMV9kYXQ1ICovCi0Je1NETU1DMV9EQVQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWMxX2RhdDYgKi8KLQl7U0RNTUMxX0RBVDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzFfZGF0NyAqLwogCXtBQkVfTUNCU1AyX0NMS1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AyX2Nsa3ggKi8KIAl7QUJFX01DQlNQMl9EUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIGFiZV9tY2JzcDJfZHIgKi8KIAl7QUJFX01DQlNQMl9EWCwgKE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCQkvKiBhYmVfbWNic3AyX2R4ICovCiAJe0FCRV9NQ0JTUDJfRlNYLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX21jYnNwMl9mc3ggKi8KLQl7QUJFX01DQlNQMV9DTEtYLCAoSUVOIHwgTTEpfSwJCQkJCS8qIGFiZV9zbGltYnVzMV9jbG9jayAqLwotCXtBQkVfTUNCU1AxX0RSLCAoSUVOIHwgTTEpfSwJCQkJCS8qIGFiZV9zbGltYnVzMV9kYXRhICovCisJe0FCRV9NQ0JTUDFfQ0xLWCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9tY2JzcDFfY2xreCAqLworCXtBQkVfTUNCU1AxX0RSLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJLyogYWJlX21jYnNwMV9kciAqLwogCXtBQkVfTUNCU1AxX0RYLCAoT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkJCS8qIGFiZV9tY2JzcDFfZHggKi8KIAl7QUJFX01DQlNQMV9GU1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AxX2ZzeCAqLwogCXtBQkVfUERNX1VMX0RBVEEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX3VsX2RhdGEgKi8KQEAgLTE0NCwxNCArMTIyLDYgQEAKIAl7VUFSVDJfUlgsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogdWFydDJfcnggKi8KIAl7VUFSVDJfVFgsIChNMCl9LAkJCQkJCS8qIHVhcnQyX3R4ICovCiAJe0hEUV9TSU8sIChNMyl9LAkJCQkJCS8qIGdwaW9fMTI3ICovCi0Je0kyQzFfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzFfc2NsICovCi0Je0kyQzFfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzFfc2RhICovCi0Je0kyQzJfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzJfc2NsICovCi0Je0kyQzJfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzJfc2RhICovCi0Je0kyQzNfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzNfc2NsICovCi0Je0kyQzNfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzNfc2RhICovCi0Je0kyQzRfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzRfc2NsICovCi0Je0kyQzRfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIGkyYzRfc2RhICovCiAJe01DU1BJMV9DTEssIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogbWNzcGkxX2NsayAqLwogCXtNQ1NQSTFfU09NSSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfc29taSAqLwogCXtNQ1NQSTFfU0lNTywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfc2ltbyAqLwpAQCAtMTU5LDEwICsxMjksNiBAQAogCXtNQ1NQSTFfQ1MxLCAoUFREIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTMpfSwJLyogbWNzcGkxX2NzMSAqLwogCXtNQ1NQSTFfQ1MyLCAoUFRVIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVFUgfCBNMyl9LAkJLyogZ3Bpb18xMzkgKi8KIAl7TUNTUEkxX0NTMywgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE0MCAqLwotCXtVQVJUM19DVFNfUkNUWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIHVhcnQzX3R4ICovCi0Je1VBUlQzX1JUU19TRCwgKE0wKX0sCQkJCQkJLyogdWFydDNfcnRzX3NkICovCi0Je1VBUlQzX1JYX0lSUlgsIChJRU4gfCBNMCl9LAkJCQkJLyogdWFydDNfcnggKi8KLQl7VUFSVDNfVFhfSVJUWCwgKE0wKX0sCQkJCQkJLyogdWFydDNfdHggKi8KIAl7U0RNTUM1X0NMSywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIHNkbW1jNV9jbGsgKi8KIAl7U0RNTUM1X0NNRCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9jbWQgKi8KIAl7U0RNTUM1X0RBVDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzVfZGF0MCAqLwpAQCAtMTc1LDcgKzE0MSw3IEBACiAJe01DU1BJNF9DUzAsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBtY3NwaTRfY3MwICovCiAJe1VBUlQ0X1JYLCAoSUVOIHwgTTApfSwJCQkJCQkvKiB1YXJ0NF9yeCAqLwogCXtVQVJUNF9UWCwgKE0wKX0sCQkJCQkJLyogdWFydDRfdHggKi8KLQl7VVNCQjJfVUxQSVRMTF9DTEssIChJRU4gfCBNMyl9LAkJCQkvKiBncGlvXzE1NyAqLworCXtVU0JCMl9VTFBJVExMX0NMSywgKFBURCB8IElFTiB8IE0zKX0sCQkJCS8qIGdwaW9fMTU3ICovCiAJe1VTQkIyX1VMUElUTExfU1RQLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMyAqLwogCXtVU0JCMl9VTFBJVExMX0RJUiwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMjIgKi8KIAl7VVNCQjJfVUxQSVRMTF9OWFQsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTIxICovCkBAIC0yMDcsMTEgKzE3MywxMSBAQAogCXtGUkVGX0NMSzFfT1VULCAoTTApfSwJCQkJCQkvKiBmcmVmX2NsazFfb3V0ICovCiAJe0ZSRUZfQ0xLMl9PVVQsIChNMCl9LAkJCQkJCS8qIGZyZWZfY2xrMl9vdXQgKi8KIAl7U1lTX05JUlExLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIHN5c19uaXJxMSAqLwotCXtTWVNfTklSUTIsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkJLyogc3lzX25pcnEyICovCisJe1NZU19OSVJRMiwgKE03KX0sCQkJCQkJLyogc3lzX25pcnEyICovCiAJe1NZU19CT09UMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NCAqLwogCXtTWVNfQk9PVDEsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg1ICovCiAJe1NZU19CT09UMiwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NiAqLwotCXtTWVNfQk9PVDMsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg3ICovCisJe1NZU19CT09UMywgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NyAqLwogCXtTWVNfQk9PVDQsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg4ICovCiAJe1NZU19CT09UNSwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4OSAqLwogCXtEUE1fRU1VMCwgKElFTiB8IE0wKX0sCQkJCQkJLyogZHBtX2VtdTAgKi8KQEAgLTIzNiwxNCArMjAyLDEyIEBACiAJe0RQTV9FTVUxOSwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTAgKi8KIH07CiAKLWNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlbXSA9IHsKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbFtdID0gewogCXtQQUQwX1NJTV9JTywgKElFTiB8IE0wKX0sCQkvKiBzaW1faW8gKi8KIAl7UEFEMV9TSU1fQ0xLLCAoTTApfSwJCQkvKiBzaW1fY2xrICovCiAJe1BBRDBfU0lNX1JFU0VULCAoTTApfSwJCQkvKiBzaW1fcmVzZXQgKi8KIAl7UEFEMV9TSU1fQ0QsIChQVFUgfCBJRU4gfCBNMCl9LAkvKiBzaW1fY2QgKi8KIAl7UEFEMF9TSU1fUFdSQ1RSTCwgKE0wKX0sCQkvKiBzaW1fcHdyY3RybCAqLwotCXtQQUQxX1NSX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCS8qIHNyX3NjbCAqLwotCXtQQUQwX1NSX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCS8qIHNyX3NkYSAqLwogCXtQQUQxX0ZSRUZfWFRBTF9JTiwgKE0wKX0sCQkvKiAjICovCiAJe1BBRDBfRlJFRl9TTElDRVJfSU4sIChNMCl9LAkJLyogZnJlZl9zbGljZXJfaW4gKi8KIAl7UEFEMV9GUkVGX0NMS19JT1JFUSwgKE0wKX0sCQkvKiBmcmVmX2Nsa19pb3JlcSAqLwpAQCAtMjUyLDEzICsyMTYsMTUgQEAKIAl7UEFEMF9GUkVGX0NMSzNfT1VULCAoTTApfSwJCS8qIGZyZWZfY2xrM19vdXQgKi8KIAl7UEFEMV9GUkVGX0NMSzRfUkVRLCAoUFRVIHwgSUVOIHwgTTApfSwJLyogIyAqLwogCXtQQUQwX0ZSRUZfQ0xLNF9PVVQsIChNMCl9LAkJLyogIyAqLwotCXtQQUQxX1NZU18zMkssIChJRU4gfCBNMCl9LAkJLyogc3lzXzMyayAqLwogCXtQQUQwX1NZU19OUkVTUFdST04sIChNMCl9LAkJLyogc3lzX25yZXNwd3JvbiAqLwogCXtQQUQxX1NZU19OUkVTV0FSTSwgKE0wKX0sCQkvKiBzeXNfbnJlc3dhcm0gKi8KIAl7UEFEMF9TWVNfUFdSX1JFUSwgKFBUVSB8IE0wKX0sCQkvKiBzeXNfcHdyX3JlcSAqLwogCXtQQUQxX1NZU19QV1JPTl9SRVNFVCwgKE0zKX0sCQkvKiBncGlvX3drMjkgKi8KIAl7UEFEMF9TWVNfQk9PVDYsIChJRU4gfCBNMyl9LAkJLyogZ3Bpb193azkgKi8KIAl7UEFEMV9TWVNfQk9PVDcsIChJRU4gfCBNMyl9LAkJLyogZ3Bpb193azEwICovCisJe1BBRDFfRlJFRl9DTEszX1JFUSwgKE0zKX0sCQkvKiBncGlvX3drMzAgKi8KKwl7UEFEMV9GUkVGX0NMSzRfUkVRLCAoTTMpfSwJCS8qIGdwaW9fd2s3ICovCisJe1BBRDBfRlJFRl9DTEs0X09VVCwgKE0zKX0sCQkvKiBncGlvX3drOCAqLwogfTsKIAotI2VuZGlmCisjZW5kaWYgLyogX1NEUDQ0MzBfTVVYX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmRzLmNmZyBiL2JvYXJkcy5jZmcKaW5kZXggM2U3OWM4Mi4uNjgyN2NmMyAxMDA2NDQKLS0tIGEvYm9hcmRzLmNmZworKysgYi9ib2FyZHMuY2ZnCkBAIC03MSwxNSArNzEsMzIgQEAKIG5ldHN0YXIgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI1dAogdm9pY2VibHVlICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjV0CiBvbWFwMTUxMGlubiAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNXQgICAgIC0gICAgICAgICAgICAgICAgICAgdGkKK3ZlcnNhdGlsZXFlbXUgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgdmVyc2F0aWxlICAgICAgICAgICBhcm1sdGQgICAgICAgICB2ZXJzYXRpbGUgICB2ZXJzYXRpbGU6QVJDSF9WRVJTQVRJTEVfUUVNVQordmVyc2F0aWxlcGIgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICB2ZXJzYXRpbGUgICAgICAgICAgIGFybWx0ZCAgICAgICAgIHZlcnNhdGlsZSAgIHZlcnNhdGlsZTpBUkNIX1ZFUlNBVElMRV9QQgordmVyc2F0aWxlYWIgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICB2ZXJzYXRpbGUgICAgICAgICAgIGFybWx0ZCAgICAgICAgIHZlcnNhdGlsZSAgIHZlcnNhdGlsZTpBUkNIX1ZFUlNBVElMRV9BQgogYXNwZW5pdGUgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAtICAgICAgICAgICAgICAgICAgIE1hcnZlbGwgICAgICAgIGFybWFkYTEwMAorZ3BsdWdkICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAtICAgICAgICAgICAgICAgICAgIE1hcnZlbGwgICAgICAgIGFybWFkYTEwMAogYWZlYjkyNjAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAtICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgIGF0OTEKIGF0OTFjYXA5YWRrICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgLSAgICAgICAgICAgICAgICAgICBhdG1lbCAgICAgICAgICBhdDkxCiBhdDkxc2FtOTI2MGVrX25hbmRmbGFzaCAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYwZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjBlazpBVDkxU0FNOTI2MCxTWVNfVVNFX05BTkRGTEFTSAogYXQ5MXNhbTkyNjBla19kYXRhZmxhc2hfY3MwICBhcm0gICAgICAgICBhcm05MjZlanMgICBhdDkxc2FtOTI2MGVrICAgICAgIGF0bWVsICAgICAgICAgIGF0OTEgICAgICAgIGF0OTFzYW05MjYwZWs6QVQ5MVNBTTkyNjAsU1lTX1VTRV9EQVRBRkxBU0hfQ1MwCiBhdDkxc2FtOTI2MGVrX2RhdGFmbGFzaF9jczEgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYwZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjBlazpBVDkxU0FNOTI2MCxTWVNfVVNFX0RBVEFGTEFTSF9DUzEKK2F0OTFzYW05MjYxZWtfbmFuZGZsYXNoICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjFlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2MWVrOkFUOTFTQU05MjYxLFNZU19VU0VfTkFOREZMQVNICithdDkxc2FtOTI2MWVrX2RhdGFmbGFzaF9jczAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYxZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjFlazpBVDkxU0FNOTI2MSxTWVNfVVNFX0RBVEFGTEFTSF9DUzAKK2F0OTFzYW05MjYxZWtfZGF0YWZsYXNoX2NzMyAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjFlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2MWVrOkFUOTFTQU05MjYxLFNZU19VU0VfREFUQUZMQVNIX0NTMworYXQ5MXNhbTkyNjNla19uYW5kZmxhc2ggICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBhdDkxc2FtOTI2M2VrICAgICAgIGF0bWVsICAgICAgICAgIGF0OTEgICAgICAgIGF0OTFzYW05MjYzZWs6QVQ5MVNBTTkyNjMsU1lTX1VTRV9OQU5ERkxBU0gKK2F0OTFzYW05MjYzZWtfZGF0YWZsYXNoX2NzMCAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjNlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2M2VrOkFUOTFTQU05MjYzLFNZU19VU0VfREFUQUZMQVNICithdDkxc2FtOTI2M2VrX2RhdGFmbGFzaCAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYzZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjNlazpBVDkxU0FNOTI2MyxTWVNfVVNFX0RBVEFGTEFTSAorYXQ5MXNhbTkyNjNla19ub3JmbGFzaCAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBhdDkxc2FtOTI2M2VrICAgICAgIGF0bWVsICAgICAgICAgIGF0OTEgICAgICAgIGF0OTFzYW05MjYzZWs6QVQ5MVNBTTkyNjMsU1lTX1VTRV9OT1JGTEFTSAorYXQ5MXNhbTkyNjNla19ub3JmbGFzaF9ib290ICBhcm0gICAgICAgICBhcm05MjZlanMgICBhdDkxc2FtOTI2M2VrICAgICAgIGF0bWVsICAgICAgICAgIGF0OTEgICAgICAgIGF0OTFzYW05MjYzZWs6QVQ5MVNBTTkyNjMsU1lTX1VTRV9CT09UX05PUkZMQVNICithdDkxc2FtOWcxMGVrX25hbmRmbGFzaCAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYxZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjFlazpBVDkxU0FNOUcxMCxTWVNfVVNFX05BTkRGTEFTSAorYXQ5MXNhbTlnMTBla19kYXRhZmxhc2hfY3MwICBhcm0gICAgICAgICBhcm05MjZlanMgICBhdDkxc2FtOTI2MWVrICAgICAgIGF0bWVsICAgICAgICAgIGF0OTEgICAgICAgIGF0OTFzYW05MjYxZWs6QVQ5MVNBTTlHMTAsU1lTX1VTRV9EQVRBRkxBU0hfQ1MwCithdDkxc2FtOWcxMGVrX2RhdGFmbGFzaF9jczMgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYxZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjFlazpBVDkxU0FNOUcxMCxTWVNfVVNFX0RBVEFGTEFTSF9DUzMKIGF0OTFzYW05ZzIwZWtfbmFuZGZsYXNoICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjBlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2MGVrOkFUOTFTQU05RzIwLFNZU19VU0VfTkFOREZMQVNICiBhdDkxc2FtOWcyMGVrX2RhdGFmbGFzaF9jczAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYwZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjBlazpBVDkxU0FNOUcyMCxTWVNfVVNFX0RBVEFGTEFTSF9DUzAKIGF0OTFzYW05ZzIwZWtfZGF0YWZsYXNoX2NzMSAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjBlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2MGVrOkFUOTFTQU05RzIwLFNZU19VU0VfREFUQUZMQVNIX0NTMQorYXQ5MXNhbTlybGVrX25hbmRmbGFzaCAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBhdDkxc2FtOXJsZWsgICAgICAgIGF0bWVsICAgICAgICAgIGF0OTEgICAgICAgIGF0OTFzYW05cmxlazpBVDkxU0FNOVJMLFNZU19VU0VfTkFOREZMQVNICithdDkxc2FtOXJsZWtfZGF0YWZsYXNoICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05cmxlayAgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTlybGVrOkFUOTFTQU05UkwsU1lTX1VTRV9EQVRBRkxBU0gKIGF0OTFzYW05eGVla19uYW5kZmxhc2ggICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjBlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2MGVrOkFUOTFTQU05WEUsU1lTX1VTRV9OQU5ERkxBU0gKIGF0OTFzYW05eGVla19kYXRhZmxhc2hfY3MwICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgYXQ5MXNhbTkyNjBlayAgICAgICBhdG1lbCAgICAgICAgICBhdDkxICAgICAgICBhdDkxc2FtOTI2MGVrOkFUOTFTQU05WEUsU1lTX1VTRV9EQVRBRkxBU0hfQ1MwCiBhdDkxc2FtOXhlZWtfZGF0YWZsYXNoX2NzMSAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGF0OTFzYW05MjYwZWsgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXNhbTkyNjBlazpBVDkxU0FNOVhFLFNZU19VU0VfREFUQUZMQVNIX0NTMQpAQCAtMjE1LDYgKzIzMiw3IEBACiBhdHN0azEwMDQgICAgICAgICAgICAgICAgICAgIGF2cjMyICAgICAgIGF0MzJhcCAgICAgIGF0c3RrMTAwMCAgICAgICAgICAgYXRtZWwgICAgICAgICAgYXQzMmFwNzAweAogYXRzdGsxMDA2ICAgICAgICAgICAgICAgICAgICBhdnIzMiAgICAgICBhdDMyYXAgICAgICBhdHN0azEwMDAgICAgICAgICAgIGF0bWVsICAgICAgICAgIGF0MzJhcDcwMHgKIGZhdnItMzItZXpraXQgICAgICAgICAgICAgICAgYXZyMzIgICAgICAgYXQzMmFwICAgICAgLSAgICAgICAgICAgICAgICAgICBlYXJ0aGxjZCAgICAgICBhdDMyYXA3MDB4CitncmFzc2hvcHBlciAgICAgICAgICAgICAgICAgIGF2cjMyICAgICAgIGF0MzJhcCAgICAgIC0gICAgICAgICAgICAgICAgICAgaW4tY2lyY3VpdCAgICAgYXQzMmFwNzAweAogbWltYzIwMCAgICAgICAgICAgICAgICAgICAgICBhdnIzMiAgICAgICBhdDMyYXAgICAgICAtICAgICAgICAgICAgICAgICAgIG1pbWMgICAgICAgICAgIGF0MzJhcDcwMHgKIGhhbW1lcmhlYWQgICAgICAgICAgICAgICAgICAgYXZyMzIgICAgICAgYXQzMmFwICAgICAgLSAgICAgICAgICAgICAgICAgICBtaXJvbWljbyAgICAgICBhdDMyYXA3MDB4CiBiY3QtYnJldHRsMiAgICAgICAgICAgICAgICAgIGJsYWNrZmluICAgIGJsYWNrZmluCmRpZmYgLS1naXQgYS9jb21tb24vaW1hZ2UuYyBiL2NvbW1vbi9pbWFnZS5jCmluZGV4IGYxNzU1NDEuLjVlZWEyYTEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9pbWFnZS5jCisrKyBiL2NvbW1vbi9pbWFnZS5jCkBAIC0xMzAsMTEgKzEzMCwxNSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHRhYmxlX2VudHJ5X3QgdWltYWdlX3R5cGVbXSA9IHsKLQl7CUlIX1RZUEVfSU5WQUxJRCwgICAgTlVMTCwJICAiSW52YWxpZCBJbWFnZSIsCX0sCiAJewlJSF9UWVBFX0ZJTEVTWVNURU0sICJmaWxlc3lzdGVtIiwgIkZpbGVzeXN0ZW0gSW1hZ2UiLAl9LAogCXsJSUhfVFlQRV9GSVJNV0FSRSwgICAiZmlybXdhcmUiLAkgICJGaXJtd2FyZSIsCQl9LAorCXsJSUhfVFlQRV9GTEFURFQsICAgICAiZmxhdF9kdCIsICAgICJGbGF0IERldmljZSBUcmVlIiwJfSwKKwl7CUlIX1RZUEVfSU5WQUxJRCwgICAgTlVMTCwJICAiSW52YWxpZCBJbWFnZSIsCX0sCisJewlJSF9UWVBFX0lNWElNQUdFLCAgICJpbXhpbWFnZSIsICAgIkZyZWVzY2FsZSBpLk1YIEJvb3QgSW1hZ2UiLH0sCiAJewlJSF9UWVBFX0tFUk5FTCwJICAgICJrZXJuZWwiLAkgICJLZXJuZWwgSW1hZ2UiLAl9LAorCXsJSUhfVFlQRV9LV0JJTUFHRSwgICAia3diaW1hZ2UiLCAgICJLaXJrd29vZCBCb290IEltYWdlIix9LAogCXsJSUhfVFlQRV9NVUxUSSwJICAgICJtdWx0aSIsCSAgIk11bHRpLUZpbGUgSW1hZ2UiLAl9LAorCXsJSUhfVFlQRV9PTUFQSU1BR0UsICAib21hcGltYWdlIiwgICJUSSBPTUFQIFNQTCBXaXRoIEdQIENIIix9LAogCXsJSUhfVFlQRV9SQU1ESVNLLCAgICAicmFtZGlzayIsCSAgIlJBTURpc2sgSW1hZ2UiLAl9LAogCXsJSUhfVFlQRV9TQ1JJUFQsICAgICAic2NyaXB0IiwJICAiU2NyaXB0IiwJCX0sCiAJewlJSF9UWVBFX1NUQU5EQUxPTkUsICJzdGFuZGFsb25lIiwgIlN0YW5kYWxvbmUgUHJvZ3JhbSIsIH0sCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmF0OTEtc29jIGIvZG9jL1JFQURNRS5hdDkxLXNvYwppbmRleCA0MjVmYzU4Li5lZDZlNzZhIDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLmF0OTEtc29jCisrKyBiL2RvYy9SRUFETUUuYXQ5MS1zb2MKQEAgLTQwLDI1ICs0MCwzIEBACiA0LiBDb252ZXJ0IGFyY2gsIGRyaXZlciBhbmQgYm9hcmRzIGZpbGUgdG8gbmV3IFNvQwogNS4gcmVtb3ZlIGxlZ2FjeSBjb2RlLCBpZiBhbGwgYm9hcmRzIGFuZCBkcml2ZXMgYXJlIHJlYWR5CiAKLSBKb2luIEFUOTEgYW5kIEFUOTFSTTkyMDAgU29DCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQXBwcm94aW1hdGVseSA5NSBwZXJjZW50IG9mIEFUOTEgYW5kIEFUOTFSTTkyMDAgU29DIHBhcnRzIGFyZSB0aGUgc2FtZS4KLVNvLCB3ZSBzaG91bGQgdXNlIHRoZSBjaGFuY2UsIHRvIGpvaW4gYm90aCBhcmNocyB0b2dldHRlci4KLQotVG8gZG8gdGhpcyBmb2xsb3cgc3RlcCBuZWVkZWQ6Ci0KLTEuIGNoYW5nZSBNYWtlZmlsZQotCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IGJvYXJkIHZlbmRvciBhdDkxcm05MjAwCi0gIHRvCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgYm9hcmQgdmVuZG9yIGF0OTEKLTIuIHJlbW92ZSBDT05GSUdfQVQ5MV9MRUdBQ1kgaW4gYm9hcmQgY29uZmlnCi0zLiBjb252ZXJ0IGJvYXJkcyBmaWxlIHRvIG5ldyBTb0MgYWNjZXNzCi00LiBjb252ZXJ0IG9yIGNoYW5nZSBkcml2ZXJzCi0KLVRvIHN1cHBvcnQgdGhlIGpvaW5pbmcgcHJvY2VzcywgYSBuZXcgU29DIGRpciAoYXQ5MSkgaGFzIGJlZW4gYWRkaW5nIHRvCi1hcm05MjB0IGFyY2ggZGlyZWN0b3J5LiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBsaWtlIGF0OTFybTkyMDAgZGlyLCBidXQKLXVzZXMgdGhlIG5ldyBjIHN0cnVjdHVyZSBTb2MgYWNjZXNzLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgaXMsIHdlIGRvbid0IG1lcmdlCi1vbGQgU29jIGFjY2VzcyBjb2RlIGFuZCBuZXcgY29kZSB3aGlsZSB0aGUgYm9hcmQgYXJlIG5vdCBjb252ZXJ0ZWQuCi1GaW5hbGx5IHdlIGNhbiBkZWxldGUgdGhlIHdob2xlIGF0OTFybTkyMDAgZGlyLCBpZiBhbGwgYm9hcmQgc3VwcG9ydCB0aGUKLW5ldyBBVDkxLVNvQyBhY2Nlc3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggMWUzYWUxMS4uNjJlYzk3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQAogQ09CSlMtJChDT05GSUdfUENBOTUzWCkJCSs9IHBjYTk1M3gubwogQ09CSlMtJChDT05GSUdfUzVQKQkJKz0gczVwX2dwaW8ubwogQ09CSlMtJChDT05GSUdfVEVHUkEyX0dQSU8pCSs9IHRlZ3JhMl9ncGlvLm8KK0NPQkpTLSQoQ09ORklHX0RBOFhYX0dQSU8pCSs9IGRhOHh4X2dwaW8ubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTIAk6PSAkKENPQkpTOi5vPS5jKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2RhOHh4X2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9kYTh4eF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwODIyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9kYTh4eF9ncGlvLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBHUElPIGRyaXZlciBmb3IgVEkgRGFWaW5jaSBEQTh4eCBTT0NzLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMSBHdXJhbHAgU3lzdGVtcyBMdGQuCisgKiBMYXVyZW5jZSBXaXRoZXJzIDxsd2l0aGVyc0BndXJhbHAuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RhdmluY2lfbWlzYy5oPgorCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19yZWdpc3RyeSB7CisJaW50IGlzX3JlZ2lzdGVyZWQ7CisJY2hhciBuYW1lW0dQSU9fTkFNRV9TSVpFXTsKK30gZ3Bpb19yZWdpc3RyeVtNQVhfTlVNX0dQSU9TXTsKKworCisjZGVmaW5lIHBpbm11eCh4KSAgICAgICAoJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPnBpbm11eFt4XSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5tdXhfY29uZmlnIGdwaW9fcGlubXV4W10gPSB7CisJeyBwaW5tdXgoMSksIDgsIDcgfSwJLyogR1AwWzBdICovCisJeyBwaW5tdXgoMSksIDgsIDYgfSwKKwl7IHBpbm11eCgxKSwgOCwgNSB9LAorCXsgcGlubXV4KDEpLCA4LCA0IH0sCisJeyBwaW5tdXgoMSksIDgsIDMgfSwKKwl7IHBpbm11eCgxKSwgOCwgMiB9LAorCXsgcGlubXV4KDEpLCA4LCAxIH0sCisJeyBwaW5tdXgoMSksIDgsIDAgfSwKKwl7IHBpbm11eCgwKSwgOCwgNyB9LAorCXsgcGlubXV4KDApLCA4LCA2IH0sCisJeyBwaW5tdXgoMCksIDgsIDUgfSwKKwl7IHBpbm11eCgwKSwgOCwgNCB9LAorCXsgcGlubXV4KDApLCA4LCAzIH0sCisJeyBwaW5tdXgoMCksIDgsIDIgfSwKKwl7IHBpbm11eCgwKSwgOCwgMSB9LAorCXsgcGlubXV4KDApLCA4LCAwIH0sCisJeyBwaW5tdXgoNCksIDgsIDcgfSwJLyogR1AxWzBdICovCisJeyBwaW5tdXgoNCksIDgsIDYgfSwKKwl7IHBpbm11eCg0KSwgOCwgNSB9LAorCXsgcGlubXV4KDQpLCA4LCA0IH0sCisJeyBwaW5tdXgoNCksIDgsIDMgfSwKKwl7IHBpbm11eCg0KSwgOCwgMiB9LAorCXsgcGlubXV4KDQpLCA0LCAxIH0sCisJeyBwaW5tdXgoNCksIDQsIDAgfSwKKwl7IHBpbm11eCgzKSwgNCwgMCB9LAorCXsgcGlubXV4KDIpLCA0LCA2IH0sCisJeyBwaW5tdXgoMiksIDQsIDUgfSwKKwl7IHBpbm11eCgyKSwgNCwgNCB9LAorCXsgcGlubXV4KDIpLCA0LCAzIH0sCisJeyBwaW5tdXgoMiksIDQsIDIgfSwKKwl7IHBpbm11eCgyKSwgNCwgMSB9LAorCXsgcGlubXV4KDIpLCA4LCAwIH0sCisJeyBwaW5tdXgoNiksIDgsIDcgfSwJLyogR1AyWzBdICovCisJeyBwaW5tdXgoNiksIDgsIDYgfSwKKwl7IHBpbm11eCg2KSwgOCwgNSB9LAorCXsgcGlubXV4KDYpLCA4LCA0IH0sCisJeyBwaW5tdXgoNiksIDgsIDMgfSwKKwl7IHBpbm11eCg2KSwgOCwgMiB9LAorCXsgcGlubXV4KDYpLCA4LCAxIH0sCisJeyBwaW5tdXgoNiksIDgsIDAgfSwKKwl7IHBpbm11eCg1KSwgOCwgNyB9LAorCXsgcGlubXV4KDUpLCA4LCA2IH0sCisJeyBwaW5tdXgoNSksIDgsIDUgfSwKKwl7IHBpbm11eCg1KSwgOCwgNCB9LAorCXsgcGlubXV4KDUpLCA4LCAzIH0sCisJeyBwaW5tdXgoNSksIDgsIDIgfSwKKwl7IHBpbm11eCg1KSwgOCwgMSB9LAorCXsgcGlubXV4KDUpLCA4LCAwIH0sCisJeyBwaW5tdXgoOCksIDgsIDcgfSwJLyogR1AzWzBdICovCisJeyBwaW5tdXgoOCksIDgsIDYgfSwKKwl7IHBpbm11eCg4KSwgOCwgNSB9LAorCXsgcGlubXV4KDgpLCA4LCA0IH0sCisJeyBwaW5tdXgoOCksIDgsIDMgfSwKKwl7IHBpbm11eCg4KSwgOCwgMiB9LAorCXsgcGlubXV4KDgpLCA4LCAxIH0sCisJeyBwaW5tdXgoOCksIDgsIDAgfSwKKwl7IHBpbm11eCg3KSwgOCwgNyB9LAorCXsgcGlubXV4KDcpLCA4LCA2IH0sCisJeyBwaW5tdXgoNyksIDgsIDUgfSwKKwl7IHBpbm11eCg3KSwgOCwgNCB9LAorCXsgcGlubXV4KDcpLCA4LCAzIH0sCisJeyBwaW5tdXgoNyksIDgsIDIgfSwKKwl7IHBpbm11eCg3KSwgOCwgMSB9LAorCXsgcGlubXV4KDcpLCA4LCAwIH0sCisJeyBwaW5tdXgoMTApLCA4LCA3IH0sCS8qIEdQNFswXSAqLworCXsgcGlubXV4KDEwKSwgOCwgNiB9LAorCXsgcGlubXV4KDEwKSwgOCwgNSB9LAorCXsgcGlubXV4KDEwKSwgOCwgNCB9LAorCXsgcGlubXV4KDEwKSwgOCwgMyB9LAorCXsgcGlubXV4KDEwKSwgOCwgMiB9LAorCXsgcGlubXV4KDEwKSwgOCwgMSB9LAorCXsgcGlubXV4KDEwKSwgOCwgMCB9LAorCXsgcGlubXV4KDkpLCA4LCA3IH0sCisJeyBwaW5tdXgoOSksIDgsIDYgfSwKKwl7IHBpbm11eCg5KSwgOCwgNSB9LAorCXsgcGlubXV4KDkpLCA4LCA0IH0sCisJeyBwaW5tdXgoOSksIDgsIDMgfSwKKwl7IHBpbm11eCg5KSwgOCwgMiB9LAorCXsgcGlubXV4KDkpLCA4LCAxIH0sCisJeyBwaW5tdXgoOSksIDgsIDAgfSwKKwl7IHBpbm11eCgxMiksIDgsIDcgfSwJLyogR1A1WzBdICovCisJeyBwaW5tdXgoMTIpLCA4LCA2IH0sCisJeyBwaW5tdXgoMTIpLCA4LCA1IH0sCisJeyBwaW5tdXgoMTIpLCA4LCA0IH0sCisJeyBwaW5tdXgoMTIpLCA4LCAzIH0sCisJeyBwaW5tdXgoMTIpLCA4LCAyIH0sCisJeyBwaW5tdXgoMTIpLCA4LCAxIH0sCisJeyBwaW5tdXgoMTIpLCA4LCAwIH0sCisJeyBwaW5tdXgoMTEpLCA4LCA3IH0sCisJeyBwaW5tdXgoMTEpLCA4LCA2IH0sCisJeyBwaW5tdXgoMTEpLCA4LCA1IH0sCisJeyBwaW5tdXgoMTEpLCA4LCA0IH0sCisJeyBwaW5tdXgoMTEpLCA4LCAzIH0sCisJeyBwaW5tdXgoMTEpLCA4LCAyIH0sCisJeyBwaW5tdXgoMTEpLCA4LCAxIH0sCisJeyBwaW5tdXgoMTEpLCA4LCAwIH0sCisJeyBwaW5tdXgoMTkpLCA4LCA2IH0sCS8qIEdQNlswXSAqLworCXsgcGlubXV4KDE5KSwgOCwgNSB9LAorCXsgcGlubXV4KDE5KSwgOCwgNCB9LAorCXsgcGlubXV4KDE5KSwgOCwgMyB9LAorCXsgcGlubXV4KDE5KSwgOCwgMiB9LAorCXsgcGlubXV4KDE2KSwgOCwgMSB9LAorCXsgcGlubXV4KDE0KSwgOCwgMSB9LAorCXsgcGlubXV4KDE0KSwgOCwgMCB9LAorCXsgcGlubXV4KDEzKSwgOCwgNyB9LAorCXsgcGlubXV4KDEzKSwgOCwgNiB9LAorCXsgcGlubXV4KDEzKSwgOCwgNSB9LAorCXsgcGlubXV4KDEzKSwgOCwgNCB9LAorCXsgcGlubXV4KDEzKSwgOCwgMyB9LAorCXsgcGlubXV4KDEzKSwgOCwgMiB9LAorCXsgcGlubXV4KDEzKSwgOCwgMSB9LAorCXsgcGlubXV4KDEzKSwgOCwgMCB9LAorCXsgcGlubXV4KDE4KSwgOCwgMSB9LAkvKiBHUDdbMF0gKi8KKwl7IHBpbm11eCgxOCksIDgsIDAgfSwKKwl7IHBpbm11eCgxNyksIDgsIDcgfSwKKwl7IHBpbm11eCgxNyksIDgsIDYgfSwKKwl7IHBpbm11eCgxNyksIDgsIDUgfSwKKwl7IHBpbm11eCgxNyksIDgsIDQgfSwKKwl7IHBpbm11eCgxNyksIDgsIDMgfSwKKwl7IHBpbm11eCgxNyksIDgsIDIgfSwKKwl7IHBpbm11eCgxNyksIDgsIDEgfSwKKwl7IHBpbm11eCgxNyksIDgsIDAgfSwKKwl7IHBpbm11eCgxNiksIDgsIDcgfSwKKwl7IHBpbm11eCgxNiksIDgsIDYgfSwKKwl7IHBpbm11eCgxNiksIDgsIDUgfSwKKwl7IHBpbm11eCgxNiksIDgsIDQgfSwKKwl7IHBpbm11eCgxNiksIDgsIDMgfSwKKwl7IHBpbm11eCgxNiksIDgsIDIgfSwKKwl7IHBpbm11eCgxOSksIDgsIDAgfSwJLyogR1A4WzBdICovCisJeyBwaW5tdXgoMyksIDQsIDcgfSwKKwl7IHBpbm11eCgzKSwgNCwgNiB9LAorCXsgcGlubXV4KDMpLCA0LCA1IH0sCisJeyBwaW5tdXgoMyksIDQsIDQgfSwKKwl7IHBpbm11eCgzKSwgNCwgMyB9LAorCXsgcGlubXV4KDMpLCA0LCAyIH0sCisJeyBwaW5tdXgoMiksIDQsIDcgfSwKKwl7IHBpbm11eCgxOSksIDgsIDEgfSwKKwl7IHBpbm11eCgxOSksIDgsIDAgfSwKKwl7IHBpbm11eCgxOCksIDgsIDcgfSwKKwl7IHBpbm11eCgxOCksIDgsIDYgfSwKKwl7IHBpbm11eCgxOCksIDgsIDUgfSwKKwl7IHBpbm11eCgxOCksIDgsIDQgfSwKKwl7IHBpbm11eCgxOCksIDgsIDMgfSwKKwl7IHBpbm11eCgxOCksIDgsIDIgfSwKK307CisKKworCitpbnQgZ3Bpb19yZXF1ZXN0KGludCBncCwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJaWYgKGdwID49IE1BWF9OVU1fR1BJT1MpCisJCXJldHVybiAtMTsKKworCWlmIChncGlvX3JlZ2lzdHJ5W2dwXS5pc19yZWdpc3RlcmVkKQorCQlyZXR1cm4gLTE7CisKKwlncGlvX3JlZ2lzdHJ5W2dwXS5pc19yZWdpc3RlcmVkID0gMTsKKwlzdHJuY3B5KGdwaW9fcmVnaXN0cnlbZ3BdLm5hbWUsIGxhYmVsLCBHUElPX05BTUVfU0laRSk7CisJZ3Bpb19yZWdpc3RyeVtncF0ubmFtZVtHUElPX05BTUVfU0laRSAtIDFdID0gMDsKKworCWRhdmluY2lfY29uZmlndXJlX3Bpbl9tdXgoJmdwaW9fcGlubXV4W2dwXSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIGdwaW9fZnJlZShpbnQgZ3ApCit7CisJZ3Bpb19yZWdpc3RyeVtncF0uaXNfcmVnaXN0ZXJlZCA9IDA7Cit9CisKKwordm9pZCBncGlvX3RvZ2dsZV92YWx1ZShpbnQgZ3ApCit7CisJc3RydWN0IGRhdmluY2lfZ3BpbyAqYmFuazsKKworCWJhbmsgPSBHUElPX0JBTksoZ3ApOworCWdwaW9fc2V0X3ZhbHVlKGdwLCAhZ3Bpb19nZXRfdmFsdWUoZ3ApKTsKK30KKworCitpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQoaW50IGdwKQoreworCXN0cnVjdCBkYXZpbmNpX2dwaW8gKmJhbms7CisKKwliYW5rID0gR1BJT19CQU5LKGdwKTsKKwlzZXRiaXRzX2xlMzIoJmJhbmstPmRpciwgMVUgPDwgR1BJT19CSVQoZ3ApKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGludCBncCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkYXZpbmNpX2dwaW8gKmJhbms7CisKKwliYW5rID0gR1BJT19CQU5LKGdwKTsKKwljbHJiaXRzX2xlMzIoJmJhbmstPmRpciwgMVUgPDwgR1BJT19CSVQoZ3ApKTsKKwlncGlvX3NldF92YWx1ZShncCwgdmFsdWUpOworCXJldHVybiAwOworfQorCisKK2ludCBncGlvX2dldF92YWx1ZShpbnQgZ3ApCit7CisJc3RydWN0IGRhdmluY2lfZ3BpbyAqYmFuazsKKwl1bnNpZ25lZCBpbnQgaXA7CisKKwliYW5rID0gR1BJT19CQU5LKGdwKTsKKwlpcCA9IGluX2xlMzIoJmJhbmstPmluX2RhdGEpICYgKDFVIDw8IEdQSU9fQklUKGdwKSk7CisJcmV0dXJuIGlwID8gMSA6IDA7Cit9CisKKwordm9pZCBncGlvX3NldF92YWx1ZShpbnQgZ3AsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9ncGlvICpiYW5rOworCisJYmFuayA9IEdQSU9fQkFOSyhncCk7CisKKwlpZiAodmFsdWUpCisJCWJhbmstPnNldF9kYXRhID0gMVUgPDwgR1BJT19CSVQoZ3ApOworCWVsc2UKKwkJYmFuay0+Y2xyX2RhdGEgPSAxVSA8PCBHUElPX0JJVChncCk7Cit9CisKKwordm9pZCBncGlvX2luZm8odm9pZCkKK3sKKwlpbnQgZ3AsIGRpciwgdmFsOworCXN0cnVjdCBkYXZpbmNpX2dwaW8gKmJhbms7CisKKwlmb3IgKGdwID0gMDsgZ3AgPCBNQVhfTlVNX0dQSU9TOyArK2dwKSB7CisJCWJhbmsgPSBHUElPX0JBTksoZ3ApOworCQlkaXIgPSBpbl9sZTMyKCZiYW5rLT5kaXIpICYgKDFVIDw8IEdQSU9fQklUKGdwKSk7CisJCXZhbCA9IGdwaW9fZ2V0X3ZhbHVlKGdwKTsKKworCQlwcmludGYoIiUgNGQ6ICVzOiAlZCBbJWNdICVzXG4iLAorCQkJZ3AsIGRpciA/ICIgaW4iIDogIm91dCIsIHZhbCwKKwkJCWdwaW9fcmVnaXN0cnlbZ3BdLmlzX3JlZ2lzdGVyZWQgPyAneCcgOiAnICcsCisJCQlncGlvX3JlZ2lzdHJ5W2dwXS5uYW1lKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGU0YmU0YTQuLmNhMjc3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC01NSw2ICs1NSw3IEBACiBDT0JKUy0kKENPTkZJR19SVENfTUs0OFQ1OSkgKz0gbWs0OHQ1OS5vCiBDT0JKUy0kKENPTkZJR19SVENfTVBDNTIwMCkgKz0gbXBjNXh4eC5vCiBDT0JKUy0kKENPTkZJR19SVENfTVBDOHh4KSArPSBtcGM4eHgubworQ09CSlMtJChDT05GSUdfUlRDX01WKSArPSBtdnJ0Yy5vCiBDT0JKUy0kKENPTkZJR19SVENfUENGODU2MykgKz0gcGNmODU2My5vCiBDT0JKUy0kKENPTkZJR19SVENfUEwwMzEpICs9IHBsMDMxLm8KIENPQkpTLSQoQ09ORklHX1JUQ19QVDdDNDMzOCkgKz0gcHQ3YzQzMzgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvbXZydGMuYyBiL2RyaXZlcnMvcnRjL212cnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjNTczYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL212cnRjLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEKKyAqIEphc29uIENvb3BlciA8dS1ib290QGxha2VkYWVtb24ubmV0PgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBEYXRlICYgVGltZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIEludGVncmF0ZWQgUlRDCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxydGMuaD4KKyNpbmNsdWRlICJtdnJ0Yy5oIgorCisvKiBUaGlzIFJUQyBkb2VzIG5vdCBzdXBwb3J0IGNlbnR1cnksIHNvIHdlIGFzc3VtZSAyMCAqLworI2RlZmluZSBDRU5UVVJZIDIwCisKK2ludCBydGNfZ2V0KHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKwl1MzIgdGltZTsKKwl1MzIgZGF0ZTsKKwlzdHJ1Y3QgbXZydGNfcmVnaXN0ZXJzICptdnJ0Y19yZWdzOworCisJbXZydGNfcmVncyA9IChzdHJ1Y3QgbXZydGNfcmVnaXN0ZXJzICopS1dfUlRDX0JBU0U7CisKKwkvKiByZWFkIHRoZSB0aW1lIHJlZ2lzdGVyICovCisJdGltZSA9IHJlYWRsKCZtdnJ0Y19yZWdzLT50aW1lKTsKKworCS8qIHJlYWQgdGhlIGRhdGUgcmVnaXN0ZXIgKi8KKwlkYXRlID0gcmVhZGwoJm12cnRjX3JlZ3MtPmRhdGUpOworCisJLyogdGVzdCBmb3IgMTIgaG91ciBjbG9jayAoY2FuJ3QgdGVsbCBpZiBpdCdzIGFtL3BtKSAqLworCWlmICh0aW1lICYgTVZSVENfSFJGTVRfTVNLKSB7CisJCXByaW50ZigiRXJyb3I6IFJUQyBpbiAxMiBob3VyIG1vZGUsIGNhbid0IGRldGVybWluZSBBTS9QTS5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogdGltZSAqLworCXQtPnRtX3NlYyAgPSBiY2QyYmluKCh0aW1lID4+IE1WUlRDX1NFQ19TRlQpICAmIE1WUlRDX1NFQ19NU0spOworCXQtPnRtX21pbiAgPSBiY2QyYmluKCh0aW1lID4+IE1WUlRDX01JTl9TRlQpICAmIE1WUlRDX01JTl9NU0spOworCXQtPnRtX2hvdXIgPSBiY2QyYmluKCh0aW1lID4+IE1WUlRDX0hPVVJfU0ZUKSAmIE1WUlRDX0hPVVJfTVNLKTsKKwl0LT50bV93ZGF5ID0gYmNkMmJpbigodGltZSA+PiBNVlJUQ19EQVlfU0ZUKSAgJiBNVlJUQ19EQVlfTVNLKTsKKwl0LT50bV93ZGF5LS07CisKKwkvKiBkYXRlICovCisJdC0+dG1fbWRheSA9IGJjZDJiaW4oKGRhdGUgPj4gTVZSVENfREFURV9TRlQpICYgTVZSVENfREFURV9NU0spOworCXQtPnRtX21vbiAgPSBiY2QyYmluKChkYXRlID4+IE1WUlRDX01PTl9TRlQpICAmIE1WUlRDX01PTl9NU0spOworCXQtPnRtX3llYXIgPSBiY2QyYmluKChkYXRlID4+IE1WUlRDX1lFQVJfU0ZUKSAmIE1WUlRDX1lFQVJfTVNLKTsKKwl0LT50bV95ZWFyICs9IENFTlRVUlkgKiAxMDA7CisKKwkvKiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgUlRDICovCisJdC0+dG1feWRheSAgPSAwOworCXQtPnRtX2lzZHN0ID0gMDsKKworCXJldHVybiAwOworfQorCitpbnQgcnRjX3NldChzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7CisJdTMyIHRpbWUgPSAwOyAvKiBzZXRzIGhvdXIgZm9ybWF0IGJpdCB0byB6ZXJvLCAyNGhyIGZvcm1hdC4gKi8KKwl1MzIgZGF0ZSA9IDA7CisJc3RydWN0IG12cnRjX3JlZ2lzdGVycyAqbXZydGNfcmVnczsKKworCW12cnRjX3JlZ3MgPSAoc3RydWN0IG12cnRjX3JlZ2lzdGVycyAqKUtXX1JUQ19CQVNFOworCisJLyogY2hlY2sgdGhhdCB0aGlzIGNvZGUgaXNuJ3QgODArIHllYXJzIG9sZCA7LSkgKi8KKwlpZiAoKHQtPnRtX3llYXIgLyAxMDApICE9IENFTlRVUlkpCisJCXByaW50ZigiV2FybmluZzogT25seSBjZW50dXJ5ICVkIHN1cHBvcnRlZC5cbiIsIENFTlRVUlkpOworCisJLyogdGltZSAqLworCXRpbWUgfD0gKGJpbjJiY2QodC0+dG1fc2VjKSAgICAgICYgTVZSVENfU0VDX01TSykgIDw8IE1WUlRDX1NFQ19TRlQ7CisJdGltZSB8PSAoYmluMmJjZCh0LT50bV9taW4pICAgICAgJiBNVlJUQ19NSU5fTVNLKSAgPDwgTVZSVENfTUlOX1NGVDsKKwl0aW1lIHw9IChiaW4yYmNkKHQtPnRtX2hvdXIpICAgICAmIE1WUlRDX0hPVVJfTVNLKSA8PCBNVlJUQ19IT1VSX1NGVDsKKwl0aW1lIHw9IChiaW4yYmNkKHQtPnRtX3dkYXkgKyAxKSAmIE1WUlRDX0RBWV9NU0spICA8PCBNVlJUQ19EQVlfU0ZUOworCisJLyogZGF0ZSAqLworCWRhdGUgfD0gKGJpbjJiY2QodC0+dG1fbWRheSkgICAgICAgJiBNVlJUQ19EQVRFX01TSykgPDwgTVZSVENfREFURV9TRlQ7CisJZGF0ZSB8PSAoYmluMmJjZCh0LT50bV9tb24pICAgICAgICAmIE1WUlRDX01PTl9NU0spICA8PCBNVlJUQ19NT05fU0ZUOworCWRhdGUgfD0gKGJpbjJiY2QodC0+dG1feWVhciAlIDEwMCkgJiBNVlJUQ19ZRUFSX01TSykgPDwgTVZSVENfWUVBUl9TRlQ7CisKKwkvKiB3cml0ZSB0aGUgdGltZSByZWdpc3RlciAqLworCXdyaXRlbCh0aW1lLCAmbXZydGNfcmVncy0+dGltZSk7CisKKwkvKiB3cml0ZSB0aGUgZGF0ZSByZWdpc3RlciAqLworCXdyaXRlbChkYXRlLCAmbXZydGNfcmVncy0+ZGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydGNfcmVzZXQodm9pZCkKK3sKKwl1MzIgdGltZTsKKwl1MzIgc2VjOworCXN0cnVjdCBtdnJ0Y19yZWdpc3RlcnMgKm12cnRjX3JlZ3M7CisKKwltdnJ0Y19yZWdzID0gKHN0cnVjdCBtdnJ0Y19yZWdpc3RlcnMgKilLV19SVENfQkFTRTsKKworCS8qIG5vIGluaXQgcm91dGluZSBmb3IgdGhpcyBSVEMgbmVlZGVkLCBqdXN0IGNoZWNrIHRoYXQgaXQncyB3b3JraW5nICovCisJdGltZSA9IHJlYWRsKCZtdnJ0Y19yZWdzLT50aW1lKTsKKwlzZWMgID0gYmNkMmJpbigodGltZSA+PiBNVlJUQ19TRUNfU0ZUKSAmIE1WUlRDX1NFQ19NU0spOworCXVkZWxheSgxMDAwMDAwKTsKKwl0aW1lID0gcmVhZGwoJm12cnRjX3JlZ3MtPnRpbWUpOworCisJaWYgKHNlYyA9PSBiY2QyYmluKCh0aW1lID4+IE1WUlRDX1NFQ19TRlQpICYgTVZSVENfU0VDX01TSykpCisJCXByaW50ZigiRXJyb3I6IFJUQyBkaWQgbm90IGluY3JlbWVudC5cbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvbXZydGMuaCBiL2RyaXZlcnMvcnRjL212cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkNWM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL212cnRjLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMQorICogSmFzb24gQ29vcGVyIDx1LWJvb3RAbGFrZWRhZW1vbi5uZXQ+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIERhdGUgJiBUaW1lIHN1cHBvcnQgZm9yIE1hcnZlbGwgSW50ZWdyYXRlZCBSVEMKKyAqLworCisjaWZuZGVmIF9NVlJUQ19IXworI2RlZmluZSBfTVZSVENfSF8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8Y29tcGlsZXIuaD4KKworLyogUlRDIHJlZ2lzdGVycyAqLworc3RydWN0IG12cnRjX3JlZ2lzdGVycyB7CisJdTMyIHRpbWU7CisJdTMyIGRhdGU7Cit9OworCisvKiB0aW1lIHJlZ2lzdGVyICovCisjZGVmaW5lIE1WUlRDX1NFQ19TRlQJCTAKKyNkZWZpbmUgTVZSVENfU0VDX01TSwkJMHg3ZgorI2RlZmluZSBNVlJUQ19NSU5fU0ZUCQk4CisjZGVmaW5lIE1WUlRDX01JTl9NU0sJCTB4N2YKKyNkZWZpbmUgTVZSVENfSE9VUl9TRlQJCTE2CisjZGVmaW5lIE1WUlRDX0hPVVJfTVNLCQkweDNmCisjZGVmaW5lIE1WUlRDX0RBWV9TRlQJCTI0CisjZGVmaW5lIE1WUlRDX0RBWV9NU0sJCTB4NworCisvKgorICogSG91ciBmb3JtYXQgYml0CisgKiAgIDEgPSAxMiBob3VyIGNsb2NrCisgKiAgIDAgPSAyNCBob3VyIGNsb2NrCisgKi8KKyNkZWZpbmUgTVZSVENfSFJGTVRfTVNLCQkweDAwNDAwMDAwCisKKy8qIGRhdGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVZSVENfREFURV9TRlQJCTAKKyNkZWZpbmUgTVZSVENfREFURV9NU0sJCTB4M2YKKyNkZWZpbmUgTVZSVENfTU9OX1NGVAkJOAorI2RlZmluZSBNVlJUQ19NT05fTVNLCQkweDFmCisjZGVmaW5lIE1WUlRDX1lFQVJfU0ZUCQkxNgorI2RlZmluZSBNVlJUQ19ZRUFSX01TSwkJMHhmZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX2RhdGFmbGFzaF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F0bWVsX2RhdGFmbGFzaF9zcGkuYwppbmRleCBlN2QzZmYwLi4zNjNlMDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9kYXRhZmxhc2hfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfZGF0YWZsYXNoX3NwaS5jCkBAIC0xOSwxMCArMTksMjAgQEAKICAqCiAgKi8KIAorLyoKKyAqIFRoaXMgZHJpdmVyIGRlc3BlcmF0ZWx5IG5lZWRzIHJld29yazoKKyAqCisgKiAtIHVzZSBzdHJ1Y3R1cmUgU29DIGFjY2VzcworICogLSBnZXQgcmlkIG9mIGluY2x1ZGluZyBhc20vYXJjaC9hdDkxX3NwaS5oCisgKiAtIHJlbW92ZSBhc20vYXJjaC9hdDkxX3NwaS5oCisgKiAtIGdldCByaWQgb2YgYWxsIENPTkZJR19BVE1FTF9MRUdBQ1kgZGVmaW5lcyBhbmQgdXNlcworICoKKyAqIDAyLUF1Zy0yMDEwIFJlaW5oYXJkIE1leWVyIDx1Ym9vdEBlbWstZWxla3Ryb25pay5kZT4KKyAqLworCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaWZuZGVmIENPTkZJR19BVDkxX0xFR0FDWQotIyBkZWZpbmUgQ09ORklHX0FUOTFfTEVHQUNZCi0jIHdhcm5pbmcgUGxlYXNlIHVwZGF0ZSB0byB1c2UgQyBzdHJ1Y3R1cmUgU29DIGFjY2VzcyAhCisjaWZuZGVmIENPTkZJR19BVE1FTF9MRUdBQ1kKKyMgZGVmaW5lIENPTkZJR19BVE1FTF9MRUdBQ1kKICNlbmRpZgogI2luY2x1ZGUgPHNwaS5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYTh4eC5oIGIvZHJpdmVycy91c2IvbXVzYi9kYTh4eC5oCmluZGV4IGI5NjYwYmEuLmJlMWNkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGE4eHguaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhOHh4LmgKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgX19EQThYWF9NVVNCX0hfXwogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAjaW5jbHVkZSAibXVzYl9jb3JlLmgiCiAKIC8qIEJhc2UgYWRkcmVzcyBvZiBkYTh4eCB1c2IwIHdyYXBwZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hMzIwZXZiLmggYi9pbmNsdWRlL2NvbmZpZ3MvYTMyMGV2Yi5oCmluZGV4IGRmYWIwZjQuLjYyOTEzYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hMzIwZXZiLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2EzMjBldmIuaApAQCAtMjQsMjkgKzI0LDM1IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9hMzIwLmg+CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBMaW51eCBrZXJuZWwgdGFnZ2VkIGxpc3QKKyAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisKKy8qCiAgKiBDUFUgYW5kIEJvYXJkIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCiAjdW5kZWYgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLwogCiAjdW5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogUG93ZXIgTWFuYWdlbWVudCBVbml0CiAgKi8KICNkZWZpbmUgQ09ORklHX0ZUUE1VMDEwX1BPV0VSCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCiAgKiBUaW1lcgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfSFoJCTEwMDAJLyogdGltZXIgdGlja3MgcGVyIHNlY29uZCAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogUmVhbCBUaW1lIENsb2NrCiAgKi8KICNkZWZpbmUgQ09ORklHX1JUQ19GVFJUQzAxMAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogU2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgogICovCiAKQEAgLTYyLDcgKzY4LDcgQEAKIC8qIHZhbGlkIGJhdWRyYXRlcyAqLwogI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKICAqIEV0aGVybmV0CiAgKi8KICNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQpAQCAtNzAsNyArNzYsNyBAQAogCiAjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCiAgKi8KICNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KQEAgLTc5LDcgKzg1LDcgQEAKICNkZWZpbmUgQ09ORklHX0NNRF9EQVRFCiAjZGVmaW5lIENPTkZJR19DTURfUElORwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAqLwpAQCAtOTYsNyArMTAyLDcgQEAKIC8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KICNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogU3RhY2sgc2l6ZXMKICAqCiAgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdwpAQCAtMTA3LDEyICsxMTMsMTIgQEAKICNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEJKDQgKiAxMDI0KQkvKiBGSVEgc3RhY2sgKi8KICNlbmRpZgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoQ09ORklHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKICAqIFNEUkFNIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfRlRTRE1DMDIwX1RQMAkoRlRTRE1DMDIwX1RQMF9UUkFTKDIpIHwJXApAQCAtMTMyLDcgKzEzOCw3IEBACiAJCQkJCSBGVFNETUMwMjBfQkFOS19NQldfMzIgICB8CVwKIAkJCQkJIEZUU0RNQzAyMF9CQU5LX1NJWkVfNjRNKQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogUGh5c2ljYWwgTWVtb3J5IE1hcAogICovCiAjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJCS8qIHdlIGhhdmUgMSBiYW5rIG9mIERSQU0gKi8KQEAgLTE1NSw3ICsxNjEsNyBAQAogCiAjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkwCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCiAgKiBTdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgogICovCiAKQEAgLTE5NCw3ICsyMDAsNyBAQAogCXsgRlRTTUMwMjBfQkFOSzFfQ09ORklHLCBGVFNNQzAyMF9CQU5LMV9USU1JTkcsIH0sCVwKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKICAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYW0zNTE3X2NyYW5lLmggYi9pbmNsdWRlL2NvbmZpZ3MvYW0zNTE3X2NyYW5lLmgKaW5kZXggMDljYjk1MS4uNzQzNzY4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2FtMzUxN19jcmFuZS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hbTM1MTdfY3JhbmUuaApAQCAtMjgsNyArMjgsNiBAQAogLyoKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTVY3CQkxCS8qIFRoaXMgaXMgYW4gQVJNIFY3IENQVSBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQCQkxCS8qIGluIGEgVEkgT01BUCBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzRYWAkJMQkvKiB3aGljaCBpcyBhIDM0WFggKi8KICNkZWZpbmUgQ09ORklHX09NQVAzX0FNMzUxN0NSQU5FCTEJLyogd29ya2luZyB3aXRoIENSQU5FQk9BUkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hbTM1MTdfZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYW0zNTE3X2V2bS5oCmluZGV4IDE4YWFhZGYuLjZjNTcyOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hbTM1MTdfZXZtLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2FtMzUxN19ldm0uaApAQCAtMjgsNyArMjgsNiBAQAogLyoKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTVY3CQkxCS8qIFRoaXMgaXMgYW4gQVJNIFY3IENQVSBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQCQkxCS8qIGluIGEgVEkgT01BUCBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzRYWAkJMQkvKiB3aGljaCBpcyBhIDM0WFggKi8KICNkZWZpbmUgQ09ORklHX09NQVAzX0FNMzUxN0VWTQkxCS8qIHdvcmtpbmcgd2l0aCBBTTM1MTdFVk0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2MWVrLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTkyNjFlay5oCmluZGV4IDQwMTQ3OGIuLjEyNjkwN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2MWVrLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYxZWsuaApAQCAtMjcsNTIgKzI3LDYyIEBACiAjaWZuZGVmIF9fQ09ORklHX0gKICNkZWZpbmUgX19DT05GSUdfSAogCi0jZGVmaW5lIENPTkZJR19BVDkxX0xFR0FDWQotCiAvKiBBUk0gYXN5bmNocm9ub3VzIGNsb2NrICovCisjZGVmaW5lIENPTkZJR19TWVNfQVQ5MV9TTE9XX0NMT0NLCTMyNzY4CQkvKiBzbG93IGNsb2NrIHh0YWwgKi8KICNkZWZpbmUgQ09ORklHX1NZU19BVDkxX01BSU5fQ0xPQ0sJMTg0MzIwMDAJLyogMTguNDMyIE1IeiBjcnlzdGFsICovCi0jZGVmaW5lIENPTkZJR19TWVNfSFoJCTEwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAKIAotI2RlZmluZSBDT05GSUdfQVJNOTI2RUpTCTEJLyogVGhpcyBpcyBhbiBBUk05MjZFSlMgQ29yZQkqLwotI2lmZGVmIENPTkZJR19BVDkxU0FNOUcxMEVLCi0jZGVmaW5lIENPTkZJR19BVDkxU0FNOUcxMAkxCS8qIEl0J3MgYW4gQXRtZWwgQVQ5MVNBTTlHMTAgU29DKi8KKyNpZmRlZiBDT05GSUdfQVQ5MVNBTTlHMTAKKyNkZWZpbmUgQ09ORklHX0FUOTFTQU05RzEwRUsJCS8qIEl0J3MgYW4gQXRtZWwgQVQ5MVNBTTlHMTAgRUsqLwogI2Vsc2UKLSNkZWZpbmUgQ09ORklHX0FUOTFTQU05MjYxCTEJLyogSXQncyBhbiBBdG1lbCBBVDkxU0FNOTI2MSBTb0MqLworI2RlZmluZSBDT05GSUdfQVQ5MVNBTTkyNjFFSwkJLyogSXQncyBhbiBBdG1lbCBBVDkxU0FNOTI2MSBFSyovCiAjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCiAjZGVmaW5lIENPTkZJR19BUkNIX0NQVV9JTklUCiAjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYJKi8KIAotI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcwkqLwotI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MgMQotI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkxCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCiAKICNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAogCisjZGVmaW5lIENPTkZJR19ESVNQTEFZX0NQVUlORk8KKworI2RlZmluZSBDT05GSUdfQVRNRUxfTEVHQUNZCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkweDIxZjAwMDAwCisKIC8qCiAgKiBIYXJkd2FyZSBkcml2ZXJzCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FUOTFfR1BJTwkxCi0jZGVmaW5lIENPTkZJR19BVE1FTF9VU0FSVAkxCi0jdW5kZWYgQ09ORklHX1VTQVJUMAotI3VuZGVmIENPTkZJR19VU0FSVDEKLSN1bmRlZiBDT05GSUdfVVNBUlQyCi0jZGVmaW5lIENPTkZJR19VU0FSVDMJCTEJLyogVVNBUlQgMyBpcyBEQkdVICovCisKKy8qIGdwaW8gKi8KKyNkZWZpbmUgQ09ORklHX0FUOTFfR1BJTworI2RlZmluZSBDT05GSUdfQVQ5MV9HUElPX1BVTExVUAkJMQorCisvKiBzZXJpYWwgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfQVRNRUxfVVNBUlQKKyNkZWZpbmUgQ09ORklHX1VTQVJUX0JBU0UJCUFUTUVMX0JBU0VfREJHVQorI2RlZmluZSBDT05GSUdfVVNBUlRfSUQJCQlBVE1FTF9JRF9TWVMKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgNTc2MDAsIDM4NDAwLCAxOTIwMCwgOTYwMH0KIAogLyogTENEICovCi0jZGVmaW5lIENPTkZJR19MQ0QJCQkxCisjZGVmaW5lIENPTkZJR19MQ0QKICNkZWZpbmUgTENEX0JQUAkJCQlMQ0RfQ09MT1I4Ci0jZGVmaW5lIENPTkZJR19MQ0RfTE9HTwkJCTEKKyNkZWZpbmUgQ09ORklHX0xDRF9MT0dPCiAjdW5kZWYgTENEX1RFU1RfUEFUVEVSTgotI2RlZmluZSBDT05GSUdfTENEX0lORk8JCQkxCi0jZGVmaW5lIENPTkZJR19MQ0RfSU5GT19CRUxPV19MT0dPCTEKLSNkZWZpbmUgQ09ORklHX1NZU19XSElURV9PTl9CTEFDSwkJMQotI2RlZmluZSBDT05GSUdfQVRNRUxfTENECQkxCisjZGVmaW5lIENPTkZJR19MQ0RfSU5GTworI2RlZmluZSBDT05GSUdfTENEX0lORk9fQkVMT1dfTE9HTworI2RlZmluZSBDT05GSUdfU1lTX1dISVRFX09OX0JMQUNLCisjZGVmaW5lIENPTkZJR19BVE1FTF9MQ0QKICNpZmRlZiBDT05GSUdfQVQ5MVNBTTkyNjFFSwotI2RlZmluZSBDT05GSUdfQVRNRUxfTENEX0JHUjU1NQkJMQotI2Vsc2UKLSNkZWZpbmUJQ09ORklHX0FUOTFTQU05RzEwX0xDRF9CQVNFCQkweDIzRTAwMDAwCS8qIExDRCBpcyBubyBtb3JlIGluIFNSQU0gKi8KKyNkZWZpbmUgQ09ORklHX0FUTUVMX0xDRF9CR1I1NTUKICNlbmRpZgotI2RlZmluZSBDT05GSUdfU1lTX0NPTlNPTEVfSVNfSU5fRU5WCQkxCisKKyNkZWZpbmUgQ09ORklHX1NZU19DT05TT0xFX0lTX0lOX0VOVgogCiAvKiBMRUQgKi8KICNkZWZpbmUgQ09ORklHX0FUOTFfTEVECkBAIC04NSwxMCArOTUsMTAgQEAKIC8qCiAgKiBCT09UUCBvcHRpb25zCiAgKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQkxCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAkJMQotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQkJMQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUJCTEKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQorI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCiAKIC8qCiAgKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KQEAgLTEwMSwzMyArMTExLDM1IEBACiAjdW5kZWYgQ09ORklHX0NNRF9MT0FEUwogI3VuZGVmIENPTkZJR19DTURfU09VUkNFCiAKLSNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCQkxCi0jZGVmaW5lIENPTkZJR19DTURfREhDUAkJMQotI2RlZmluZSBDT05GSUdfQ01EX05BTkQJCTEKLSNkZWZpbmUgQ09ORklHX0NNRF9VU0IJCTEKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI2RlZmluZSBDT05GSUdfQ01EX05BTkQKKyNkZWZpbmUgQ09ORklHX0NNRF9VU0IKIAogLyogU0RSQU0gKi8KICNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKLSNkZWZpbmUgUEhZU19TRFJBTQkJCTB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkJMHgwNDAwMDAwMAkvKiA2NCBtZWdzICovCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHgyMDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX1NJWkUJCTB4MDQwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIgXAorCShBVE1FTF9CQVNFX1NSQU0gKyAweDEwMDAgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKIAogLyogRGF0YUZsYXNoICovCiAjZGVmaW5lIENPTkZJR19BVE1FTF9EQVRBRkxBU0hfU1BJCi0jZGVmaW5lIENPTkZJR19IQVNfREFUQUZMQVNICQkxCisjZGVmaW5lIENPTkZJR19IQVNfREFUQUZMQVNICiAjZGVmaW5lIENPTkZJR19TWVNfU1BJX1dSSVRFX1RPVVQJCSg1KkNPTkZJR19TWVNfSFopCiAjZGVmaW5lIENPTkZJR19TWVNfTUFYX0RBVEFGTEFTSF9CQU5LUwkJMgogI2RlZmluZSBDT05GSUdfU1lTX0RBVEFGTEFTSF9MT0dJQ19BRERSX0NTMAkweEMwMDAwMDAwCS8qIENTMCAqLwogI2RlZmluZSBDT05GSUdfU1lTX0RBVEFGTEFTSF9MT0dJQ19BRERSX0NTMwkweEQwMDAwMDAwCS8qIENTMyAqLwotI2RlZmluZSBBVDkxX1NQSV9DTEsJCQkxNTAwMDAwMAotI2RlZmluZSBEQVRBRkxBU0hfVENTUwkJCSgweDFhIDw8IDE2KQotI2RlZmluZSBEQVRBRkxBU0hfVENIUwkJCSgweDEgPDwgMjQpCisjZGVmaW5lIEFUOTFfU1BJX0NMSwkJCQkxNTAwMDAwMAorI2RlZmluZSBEQVRBRkxBU0hfVENTUwkJCQkoMHgxYSA8PCAxNikKKyNkZWZpbmUgREFUQUZMQVNIX1RDSFMJCQkJKDB4MSA8PCAyNCkKIAogLyogTkFORCBmbGFzaCAqLwogI2lmZGVmIENPTkZJR19DTURfTkFORAogI2RlZmluZSBDT05GSUdfTkFORF9BVE1FTAogI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRQkJMQogI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRQkJCTB4NDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0RCV184CQkJMQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfREJXXzgKIC8qIG91ciBBTEUgaXMgQUQyMiAqLwogI2RlZmluZSBDT05GSUdfU1lTX05BTkRfTUFTS19BTEUJCSgxIDw8IDIyKQogLyogb3VyIENMRSBpcyBBRDIxICovCkBAIC0xMzgsMjQgKzE1MCwyNCBAQAogI2VuZGlmCiAKIC8qIE5PUiBmbGFzaCAtIG5vIHJlYWwgZmxhc2ggb24gdGhpcyBib2FyZCAqLwotI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICQkJMQorI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICiAKIC8qIEV0aGVybmV0ICovCi0jZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJCTEKLSNkZWZpbmUgQ09ORklHX0RSSVZFUl9ETTkwMDAJCTEKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfRFJJVkVSX0RNOTAwMAogI2RlZmluZSBDT05GSUdfRE05MDAwX0JBU0UJCTB4MzAwMDAwMDAKICNkZWZpbmUgRE05MDAwX0lPCQkJQ09ORklHX0RNOTAwMF9CQVNFCiAjZGVmaW5lIERNOTAwMF9EQVRBCQkJKENPTkZJR19ETTkwMDBfQkFTRSArIDQpCi0jZGVmaW5lIENPTkZJR19ETTkwMDBfVVNFXzE2QklUCQkxCi0jZGVmaW5lIENPTkZJR19ETTkwMDBfTk9fU1JPTQkJMQorI2RlZmluZSBDT05GSUdfRE05MDAwX1VTRV8xNkJJVAorI2RlZmluZSBDT05GSUdfRE05MDAwX05PX1NST00KICNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJMjAKLSNkZWZpbmUgQ09ORklHX1JFU0VUX1BIWV9SCQkxCisjZGVmaW5lIENPTkZJR19SRVNFVF9QSFlfUgogCiAvKiBVU0IgKi8KICNkZWZpbmUgQ09ORklHX1VTQl9BVE1FTAotI2RlZmluZSBDT05GSUdfVVNCX09IQ0lfTkVXCQkxCi0jZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCi0jZGVmaW5lIENPTkZJR19TWVNfVVNCX09IQ0lfQ1BVX0lOSVQJCTEKKyNkZWZpbmUgQ09ORklHX1VTQl9PSENJX05FVworI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorI2RlZmluZSBDT05GSUdfU1lTX1VTQl9PSENJX0NQVV9JTklUCiAjZGVmaW5lIENPTkZJR19TWVNfVVNCX09IQ0lfUkVHU19CQVNFCQkweDAwNTAwMDAwCS8qIEFUOTFTQU05MjYxX1VIUF9CQVNFICovCiAjaWZkZWYgQ09ORklHX0FUOTFTQU05RzEwRUsKICNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9TTE9UX05BTUUJCSJhdDkxc2FtOWcxMCIKQEAgLTE2MywxOCArMTc1LDE4IEBACiAjZGVmaW5lIENPTkZJR19TWVNfVVNCX09IQ0lfU0xPVF9OQU1FCQkiYXQ5MXNhbTkyNjEiCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9NQVhfUk9PVF9QT1JUUwkyCi0jZGVmaW5lIENPTkZJR19VU0JfU1RPUkFHRQkJMQotI2RlZmluZSBDT05GSUdfQ01EX0ZBVAkJCTEKKyNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCisjZGVmaW5lIENPTkZJR19DTURfRkFUCiAKICNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCQkweDIyMDAwMDAwCS8qIGxvYWQgYWRkcmVzcyAqLwogCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkJUEhZU19TRFJBTQorI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJCUNPTkZJR19TWVNfU0RSQU1fQkFTRQogI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkJMHgyM2UwMDAwMAogCiAjaWZkZWYgQ09ORklHX1NZU19VU0VfREFUQUZMQVNIX0NTMAogCiAvKiBib290c3RyYXAgKyB1LWJvb3QgKyBlbnYgKyBsaW51eCBpbiBkYXRhZmxhc2ggb24gQ1MwICovCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fREFUQUZMQVNICTEKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9EQVRBRkxBU0gKICNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJKENPTkZJR19TWVNfREFUQUZMQVNIX0xPR0lDX0FERFJfQ1MwICsgMHg4NDAwKQogI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkweDQyMDAKICNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkoQ09ORklHX1NZU19EQVRBRkxBU0hfTE9HSUNfQUREUl9DUzAgKyBDT05GSUdfRU5WX09GRlNFVCkKQEAgLTE4OCw3ICsyMDAsNyBAQAogI2VsaWYgQ09ORklHX1NZU19VU0VfREFUQUZMQVNIX0NTMwogCiAvKiBib290c3RyYXAgKyB1LWJvb3QgKyBlbnYgKyBsaW51eCBpbiBkYXRhZmxhc2ggb24gQ1MzICovCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fREFUQUZMQVNICTEKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9EQVRBRkxBU0gKICNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJKENPTkZJR19TWVNfREFUQUZMQVNIX0xPR0lDX0FERFJfQ1MzICsgMHg4NDAwKQogI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkweDQyMDAKICNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkoQ09ORklHX1NZU19EQVRBRkxBU0hfTE9HSUNfQUREUl9DUzMgKyBDT05GSUdfRU5WX09GRlNFVCkKQEAgLTIwMiw3ICsyMTQsNyBAQAogI2Vsc2UgLyogQ09ORklHX1NZU19VU0VfTkFOREZMQVNIICovCiAKIC8qIGJvb3RzdHJhcCArIHUtYm9vdCArIGVudiArIGxpbnV4IGluIG5hbmRmbGFzaCAqLwotI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQKICNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTB4NjAwMDAKICNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECTB4ODAwMDAKICNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDIwMDAwCQkvKiAxIHNlY3RvciA9IDEyOCBrQiAqLwpAQCAtMjE2LDIyICsyMjgsMTkgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7MTE1MjAwICwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMCB9Ci0KICNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCSJVLUJvb3Q+ICIKICNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgogI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CiAjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUgKyBzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCi0jZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCTEKLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwogCiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQlST1VORCgzICogQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQsIDB4MTAwMCkKIAotI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMioxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMioxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCiAKICNpZmRlZiBDT05GSUdfVVNFX0lSUQogI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2M2VrLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTkyNjNlay5oCmluZGV4IGY2Y2I0MDYuLmQ4MTc0MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2M2VrLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYzZWsuaApAQCAtMjcsMTMgKzI3LDIxIEBACiAjaWZuZGVmIF9fQ09ORklHX0gKICNkZWZpbmUgX19DT05GSUdfSAogCi0vKiBBUk0gYXN5bmNocm9ub3VzIGNsb2NrICovCi0jZGVmaW5lIENPTkZJR19TWVNfQVQ5MV9NQUlOX0NMT0NLCTE2MzY3NjYwCS8qIDE2LjM2NyBNSHogY3J5c3RhbCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0haCQkxMDAwCisvKgorICogU29DIG11c3QgYmUgZGVmaW5lZCBmaXJzdCwgYmVmb3JlIGhhcmR3YXJlLmggaXMgaW5jbHVkZWQuCisgKiBJbiB0aGlzIGNhc2UgU29DIGlzIGRlZmluZWQgaW4gYm9hcmRzLmNmZy4KKyAqLworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCi0jZGVmaW5lIENPTkZJR19BUk05MjZFSlMJMQkvKiBUaGlzIGlzIGFuIEFSTTkyNkVKUyBDb3JlCSovCi0jZGVmaW5lIENPTkZJR19BVDkxU0FNOTI2MwkxCS8qIEl0J3MgYW4gQXRtZWwgQVQ5MVNBTTkyNjMgU29DKi8KLSNkZWZpbmUgQ09ORklHX0FUOTFTQU05MjYzRUsJMQkvKiBvbiBhbiBBVDkxU0FNOTI2M0VLIEJvYXJkCSovCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkweDIxRjAwMDAwCisKKy8qIEFSTSBhc3luY2hyb25vdXMgY2xvY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19BVDkxX01BSU5fQ0xPQ0sJMTYzNjc2NjAgLyogMTYuMzY3IE1IeiBjcnlzdGFsICovCisjZGVmaW5lIENPTkZJR19TWVNfQVQ5MV9TTE9XX0NMT0NLCTMyNzY4CisjZGVmaW5lIENPTkZJR19TWVNfSFoJCQkxMDAwCisKKyNkZWZpbmUgQ09ORklHX0FUOTFTQU05MjYzRUsJMQkvKiBJdCdzIGFuIEFUOTFTQU05MjYzRUsgQm9hcmQgKi8KKwogI2RlZmluZSBDT05GSUdfQVJDSF9DUFVfSU5JVAogI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmCSovCiAKQEAgLTQzLDE3ICs1MSwyNyBAQAogCiAjaWZuZGVmIENPTkZJR19TWVNfVVNFX0JPT1RfTk9SRkxBU0gKICNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX1NZU19VU0VfTk9SRkxBU0gKICNlbmRpZgogCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YKKworI2RlZmluZSBDT05GSUdfRElTUExBWV9DUFVJTkZPCisKIC8qCiAgKiBIYXJkd2FyZSBkcml2ZXJzCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FUOTFfR1BJTwkxCi0jZGVmaW5lIENPTkZJR19BVE1FTF9VU0FSVAkxCi0jdW5kZWYgQ09ORklHX1VTQVJUMAotI3VuZGVmIENPTkZJR19VU0FSVDEKLSN1bmRlZiBDT05GSUdfVVNBUlQyCi0jZGVmaW5lIENPTkZJR19VU0FSVDMJCTEJLyogVVNBUlQgMyBpcyBEQkdVICovCisjZGVmaW5lIENPTkZJR19BVE1FTF9MRUdBQ1kKKyNkZWZpbmUgQ09ORklHX0FUOTFfR1BJTwkJMQorI2RlZmluZSBDT05GSUdfQVQ5MV9HUElPX1BVTExVUAkJMQorCisvKiBzZXJpYWwgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfQVRNRUxfVVNBUlQKKyNkZWZpbmUgQ09ORklHX1VTQVJUX0JBU0UJCUFUTUVMX0JBU0VfREJHVQorI2RlZmluZSBDT05GSUdfVVNBUlRfSUQJCQlBVE1FTF9JRF9TWVMKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KIAogLyogTENEICovCiAjZGVmaW5lIENPTkZJR19MQ0QJCQkxCkBAIC02MiwxNiArODAsMTYgQEAKICN1bmRlZiBMQ0RfVEVTVF9QQVRURVJOCiAjZGVmaW5lIENPTkZJR19MQ0RfSU5GTwkJCTEKICNkZWZpbmUgQ09ORklHX0xDRF9JTkZPX0JFTE9XX0xPR08JMQotI2RlZmluZSBDT05GSUdfU1lTX1dISVRFX09OX0JMQUNLCQkxCisjZGVmaW5lIENPTkZJR19TWVNfV0hJVEVfT05fQkxBQ0sJMQogI2RlZmluZSBDT05GSUdfQVRNRUxfTENECQkxCiAjZGVmaW5lIENPTkZJR19BVE1FTF9MQ0RfQkdSNTU1CQkxCi0jZGVmaW5lIENPTkZJR19TWVNfQ09OU09MRV9JU19JTl9FTlYJCTEKKyNkZWZpbmUgQ09ORklHX1NZU19DT05TT0xFX0lTX0lOX0VOVgkxCiAKIC8qIExFRCAqLwogI2RlZmluZSBDT05GSUdfQVQ5MV9MRUQKLSNkZWZpbmUJQ09ORklHX1JFRF9MRUQJCUFUOTFfUElPX1BPUlRCLCA3CS8qIHRoZSBwb3dlciBsZWQgKi8KLSNkZWZpbmUJQ09ORklHX0dSRUVOX0xFRAlBVDkxX1BJT19QT1JUQiwgOAkvKiB0aGUgdXNlcjEgbGVkICovCi0jZGVmaW5lCUNPTkZJR19ZRUxMT1dfTEVECUFUOTFfUElPX1BPUlRDLCAyOQkvKiB0aGUgdXNlcjIgbGVkICovCisjZGVmaW5lCUNPTkZJR19SRURfTEVECQlBVDkxX1BJTl9QQjcJLyogdGhlIHBvd2VyIGxlZCAqLworI2RlZmluZQlDT05GSUdfR1JFRU5fTEVECUFUOTFfUElOX1BCOAkvKiB0aGUgdXNlcjEgbGVkICovCisjZGVmaW5lCUNPTkZJR19ZRUxMT1dfTEVECUFUOTFfUElOX1BDMjkJLyogdGhlIHVzZXIyIGxlZCAqLwogCiAjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMwogCkBAIC0xMDEsOCArMTE5LDExIEBACiAKIC8qIFNEUkFNICovCiAjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCi0jZGVmaW5lIFBIWVNfU0RSQU0JCQkweDIwMDAwMDAwCi0jZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDQwMDAwMDAJLyogNjQgbWVncyAqLworI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCUFUTUVMX0JBU0VfQ1MxCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fU0laRQkJMHgwNDAwMDAwMAorCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9BRERSIFwKKwkoQVRNRUxfQkFTRV9TUkFNMSArIDB4MTAwMCAtIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogCiAvKiBEYXRhRmxhc2ggKi8KICNkZWZpbmUgQ09ORklHX0FUTUVMX0RBVEFGTEFTSF9TUEkKQEAgLTI1NCwxOSArMjc1LDE0IEBACiAjaWZkZWYgQ09ORklHX0NNRF9OQU5ECiAjZGVmaW5lIENPTkZJR19OQU5EX0FUTUVMCiAjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCQkxCi0jZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQkJMHg0MDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRQkJCUFUTUVMX0JBU0VfQ1MzCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9EQldfOAkJCTEKIC8qIG91ciBBTEUgaXMgQUQyMSAqLwogI2RlZmluZSBDT05GSUdfU1lTX05BTkRfTUFTS19BTEUJCSgxIDw8IDIxKQogLyogb3VyIENMRSBpcyBBRDIyICovCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9NQVNLX0NMRQkJKDEgPDwgMjIpCi0jZGVmaW5lIENPTkZJR19TWVNfTkFORF9FTkFCTEVfUElOCUFUOTFfUElPX1BPUlRELCAxNQotI2RlZmluZSBDT05GSUdfU1lTX05BTkRfUkVBRFlfUElOCUFUOTFfUElPX1BPUlRBLCAyMgotLyoKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0VOQUJMRV9QSU4gIEFUOTFfUElOX1BEMTUKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1JFQURZX1BJTiAgQVQ5MV9QSU5fUEEyMgotKi8KLQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfRU5BQkxFX1BJTgkJQVQ5MV9QSU5fUEQxNQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfUkVBRFlfUElOCQlBVDkxX1BJTl9QQTIyCiAKICNkZWZpbmUgQ09ORklHX1NZU182NEJJVF9WU1BSSU5URgkJLyogbmVlZGVkIGZvciBuYW5kX3V0aWwuYyAqLwogI2VuZGlmCkBAIC0yOTEsNyArMzA3LDcgQEAKIAogI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJCTB4MjIwMDAwMDAJLyogbG9hZCBhZGRyZXNzICovCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCQlQSFlTX1NEUkFNCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkJQ09ORklHX1NZU19TRFJBTV9CQVNFCiAjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCQkweDIzZTAwMDAwCiAKICNpZmRlZiBDT05GSUdfU1lTX1VTRV9EQVRBRkxBU0gKQEAgLTMxMSw3ICszMjcsNyBAQAogI2VsaWYgQ09ORklHX1NZU19VU0VfTkFOREZMQVNICiAKIC8qIGJvb3RzdHJhcCArIHUtYm9vdCArIGVudiArIGxpbnV4IGluIG5hbmRmbGFzaCAqLwotI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJCTEKICNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTB4NjAwMDAKICNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECTB4ODAwMDAKICNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDIwMDAwCQkvKiAxIHNlY3RvciA9IDEyOCBrQiAqLwpAQCAtMzIzLDE1ICszMzksMTIgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7MTE1MjAwICwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMCB9Ci0KICNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCSJVLUJvb3Q+ICIKICNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgogI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CiAjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUgKyBzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCiAjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCTEKLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCTEKICNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUKICNkZWZpbmUgQ09ORklHX1NZU19IVVNIX1BBUlNFUgogI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCkBAIC0zMzksMTIgKzM1MiwxMCBAQAogLyoKICAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJUk9VTkQoMyAqIENPTkZJR19FTlZfU0laRSArIDEyOCoxMDI0LCAweDEwMDApCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTglST1VORCgzICogQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQsIDB4MTAwMCkKIAogI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMioxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCiAKLSNpZmRlZiBDT05GSUdfVVNFX0lSUQotI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKLSNlbmRpZgorI3VuZGVmIENPTkZJR19VU0VfSVJRCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05cmxlay5oIGIvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05cmxlay5oCmluZGV4IDhkYmQwODIuLjNjYTA5ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOXJsZWsuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTlybGVrLmgKQEAgLTI3LDMzICsyNyw0MiBAQAogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIAotI2RlZmluZSBDT05GSUdfQVQ5MV9MRUdBQ1kKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgyMUYwMDAwMAogCiAvKiBBUk0gYXN5bmNocm9ub3VzIGNsb2NrICovCi0jZGVmaW5lIENPTkZJR19TWVNfQVQ5MV9NQUlOX0NMT0NLCTEyMDAwMDAwCS8qIDEyIE1IeiBjcnlzdGFsICovCi0jZGVmaW5lIENPTkZJR19TWVNfSFoJCTEwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19BVDkxX1NMT1dfQ0xPQ0sJMzI3NjgJCS8qIHNsb3cgY2xvY2sgeHRhbCAqLworI2RlZmluZSBDT05GSUdfU1lTX0FUOTFfTUFJTl9DTE9DSwkxMjAwMDAwMAkvKiBtYWluIGNsb2NrIHh0YWwgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAKIAotI2RlZmluZSBDT05GSUdfQVJNOTI2RUpTCTEJLyogVGhpcyBpcyBhbiBBUk05MjZFSlMgQ29yZQkqLwotI2RlZmluZSBDT05GSUdfQVQ5MVNBTTlSTAkxCS8qIEl0J3MgYW4gQXRtZWwgQVQ5MVNBTTlSTCBTb0MqLwotI2RlZmluZSBDT05GSUdfQVQ5MVNBTTlSTEVLCTEJLyogb24gYW4gQVQ5MVNBTTlSTEVLIEJvYXJkCSovCisjZGVmaW5lIENPTkZJR19BVDkxU0FNOVJMRUsJCTEJLyogSXQncyBhbiBBVDkxU0FNOVJMRUsgQm9hcmQgKi8KKwogI2RlZmluZSBDT05GSUdfQVJDSF9DUFVfSU5JVAotI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmCSovCi0KLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MJKi8KLSNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTIDEKLSNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJMQotCiAjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgorI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTworCisjZGVmaW5lIENPTkZJR19BVE1FTF9MRUdBQ1kKKyNkZWZpbmUgQ09ORklHX0FUOTFfR1BJTwkJMQorI2RlZmluZSBDT05GSUdfQVQ5MV9HUElPX1BVTExVUAkJMQogCiAvKgogICogSGFyZHdhcmUgZHJpdmVycwogICovCi0jZGVmaW5lIENPTkZJR19BVDkxX0dQSU8JMQotI2RlZmluZSBDT05GSUdfQVRNRUxfVVNBUlQJMQotI3VuZGVmIENPTkZJR19VU0FSVDAKLSN1bmRlZiBDT05GSUdfVVNBUlQxCi0jdW5kZWYgQ09ORklHX1VTQVJUMgotI2RlZmluZSBDT05GSUdfVVNBUlQzCQkxCS8qIFVTQVJUIDMgaXMgREJHVSAqLworCisvKiBzZXJpYWwgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfQVRNRUxfVVNBUlQKKyNkZWZpbmUgQ09ORklHX1VTQVJUX0JBU0UJCUFUTUVMX0JBU0VfREJHVQorI2RlZmluZSBDT05GSUdfVVNBUlRfSUQJCQlBVE1FTF9JRF9TWVMKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KIAogLyogTENEICovCiAjZGVmaW5lIENPTkZJR19MQ0QJCQkxCkBAIC02MiwxMCArNzEsMTMgQEAKICN1bmRlZiBMQ0RfVEVTVF9QQVRURVJOCiAjZGVmaW5lIENPTkZJR19MQ0RfSU5GTwkJCTEKICNkZWZpbmUgQ09ORklHX0xDRF9JTkZPX0JFTE9XX0xPR08JMQotI2RlZmluZSBDT05GSUdfU1lTX1dISVRFX09OX0JMQUNLCQkxCisjZGVmaW5lIENPTkZJR19TWVNfV0hJVEVfT05fQkxBQ0sJMQogI2RlZmluZSBDT05GSUdfQVRNRUxfTENECQkxCiAjZGVmaW5lIENPTkZJR19BVE1FTF9MQ0RfUkdCNTY1CQkxCi0jZGVmaW5lIENPTkZJR19TWVNfQ09OU09MRV9JU19JTl9FTlYJCTEKKy8qIExldCBib2FyZF9pbml0X2YgaGFuZGxlIHRoZSBmcmFtZWJ1ZmZlciBhbGxvY2F0aW9uICovCisjdW5kZWYgQ09ORklHX0ZCX0FERFIKKyNkZWZpbmUgQ09ORklHX1NZU19DT05TT0xFX0lTX0lOX0VOVgkxCisKIAogLyogTEVEICovCiAjZGVmaW5lIENPTkZJR19BVDkxX0xFRApAQCAtODUsMjUgKzk3LDI5IEBACiAjdW5kZWYgQ09ORklHX0NNRF9JTUxTCiAjdW5kZWYgQ09ORklHX0NNRF9MT0FEUwogI3VuZGVmIENPTkZJR19DTURfTkVUCisjdW5kZWYgQ09ORklHX0NNRF9ORlMKICN1bmRlZiBDT05GSUdfQ01EX1NPVVJDRQogI3VuZGVmIENPTkZJR19DTURfVVNCCiAKLSNkZWZpbmUgQ09ORklHX0NNRF9OQU5ECQkxCisjZGVmaW5lIENPTkZJR19DTURfTkFORAkJCTEKIAogLyogU0RSQU0gKi8KICNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKLSNkZWZpbmUgUEhZU19TRFJBTQkJCTB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkJMHgwNDAwMDAwMAkvKiA2NCBtZWdzICovCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJQVRNRUxfQkFTRV9DUzEKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9TSVpFCQkweDA0MDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIgXAorCShBVE1FTF9CQVNFX1NSQU0gKyAweDEwMDAgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKIAogLyogRGF0YUZsYXNoICovCiAjZGVmaW5lIENPTkZJR19BVE1FTF9EQVRBRkxBU0hfU1BJCi0jZGVmaW5lIENPTkZJR19IQVNfREFUQUZMQVNICQkxCisjZGVmaW5lIENPTkZJR19IQVNfREFUQUZMQVNICQkJMQogI2RlZmluZSBDT05GSUdfU1lTX1NQSV9XUklURV9UT1VUCQkoNSpDT05GSUdfU1lTX0haKQogI2RlZmluZSBDT05GSUdfU1lTX01BWF9EQVRBRkxBU0hfQkFOS1MJCTEKICNkZWZpbmUgQ09ORklHX1NZU19EQVRBRkxBU0hfTE9HSUNfQUREUl9DUzAJMHhDMDAwMDAwMAkvKiBDUzAgKi8KLSNkZWZpbmUgQVQ5MV9TUElfQ0xLCQkJMTUwMDAwMDAKLSNkZWZpbmUgREFUQUZMQVNIX1RDU1MJCQkoMHgxYSA8PCAxNikKLSNkZWZpbmUgREFUQUZMQVNIX1RDSFMJCQkoMHgxIDw8IDI0KQorI2RlZmluZSBBVDkxX1NQSV9DTEsJCQkJMTUwMDAwMDAKKyNkZWZpbmUgREFUQUZMQVNIX1RDU1MJCQkJKDB4MWEgPDwgMTYpCisjZGVmaW5lIERBVEFGTEFTSF9UQ0hTCQkJCSgweDEgPDwgMjQpCiAKIC8qIE5PUiBmbGFzaCAtIG5vdCBwcmVzZW50ICovCiAjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gJCQkxCkBAIC0xMTIsNyArMTI4LDcgQEAKICNpZmRlZiBDT05GSUdfQ01EX05BTkQKICNkZWZpbmUgQ09ORklHX05BTkRfQVRNRUwKICNkZWZpbmUgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UJCTEKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UJCQkweDQwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQkJQVRNRUxfQkFTRV9DUzMKICNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0RCV184CQkJMQogLyogb3VyIEFMRSBpcyBBRDIxICovCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9NQVNLX0FMRQkJKDEgPDwgMjEpCkBAIC0xMjksNyArMTQ1LDcgQEAKIAogI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJCTB4MjIwMDAwMDAJLyogbG9hZCBhZGRyZXNzICovCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCQlQSFlTX1NEUkFNCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkJQ09ORklHX1NZU19TRFJBTV9CQVNFCiAjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCQkweDIzZTAwMDAwCiAKICNpZmRlZiBDT05GSUdfU1lTX1VTRV9EQVRBRkxBU0gKQEAgLTE0OSw3ICsxNjUsNyBAQAogI2Vsc2UgLyogQ09ORklHX1NZU19VU0VfTkFOREZMQVNIICovCiAKIC8qIGJvb3RzdHJhcCArIHUtYm9vdCArIGVudiArIGxpbnV4IGluIG5hbmRmbGFzaCAqLwotI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJCTEKICNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTB4NjAwMDAKICNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECTB4ODAwMDAKICNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDIwMDAwCQkvKiAxIHNlY3RvciA9IDEyOCBrQiAqLwpAQCAtMTYxLDI1ICsxNzcsMjAgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7MTE1MjAwICwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMCB9Ci0KICNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCSJVLUJvb3Q+ICIKICNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgogI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CiAjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUgKyBzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCiAjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCTEKLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCTEKIAogLyoKICAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJUk9VTkQoMyAqIENPTkZJR19FTlZfU0laRSArIDEyOCoxMDI0LCAweDEwMDApCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTglST1VORCgzICogQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQsIDB4MTAwMCkKIAogI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMioxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCiAKLSNpZmRlZiBDT05GSUdfVVNFX0lSUQotI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKLSNlbmRpZgorI3VuZGVmIENPTkZJR19VU0VfSVJRCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2NhOXg0X2N0X3Z4cC5oIGIvaW5jbHVkZS9jb25maWdzL2NhOXg0X2N0X3Z4cC5oCmluZGV4IGYwYWM3OWEuLjhjNTdlYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9jYTl4NF9jdF92eHAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvY2E5eDRfY3RfdnhwLmgKQEAgLTMyLDkgKzMyLDYgQEAKICNkZWZpbmUgQ09ORklHX1JFVklTSU9OX1RBRwkJMQogI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHg2MDgwMDAwMAogCi0vKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyAqLwotI2RlZmluZSBDT05GSUdfQVJNVjcJCQkxCi0KICNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4NjAwMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgyMDAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2NtX3QzNS5oIGIvaW5jbHVkZS9jb25maWdzL2NtX3QzNS5oCmluZGV4IDkzYTFiMjYuLjE2YTVmNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9jbV90MzUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvY21fdDM1LmgKQEAgLTM2LDcgKzM2LDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9kZXZraXQ4MDAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvZGV2a2l0ODAwMC5oCmluZGV4IDEyNWM2OTAuLmNmNzc2MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9kZXZraXQ4MDAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2RldmtpdDgwMDAuaApAQCAtMzIsNyArMzIsNiBAQAogI2RlZmluZSBfX0NPTkZJR19ICiAKIC8qIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9kaWcyOTcuaCBiL2luY2x1ZGUvY29uZmlncy9kaWcyOTcuaAppbmRleCA3YWViMjRlLi5iNjhmMDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZGlnMjk3LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2RpZzI5Ny5oCkBAIC0zNSw3ICszNSw2IEBACiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqLwotI2RlZmluZSBDT05GSUdfQVJNVjcJCS8qIFRoaXMgaXMgYW4gQVJNIFY3IENQVSBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQCQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCS8qIHdoaWNoIGlzIGEgMzRYWCAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCS8qIHdoaWNoIGlzIGluIGEgMzQzMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2dwbHVnZC5oIGIvaW5jbHVkZS9jb25maWdzL2dwbHVnZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMTRmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZ3BsdWdkLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMQorICogZUluZm9jaGlwcyBMdGQuIDx3d3cuZWluZm9jaGlwcy5jb20+CisgKiBXcml0dGVuLWJ5OiBBamF5IEJoYXJnYXYgPGFqYXkuYmhhcmdhdkBlaW5mb2NoaXBzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBBc3Blbml0ZToKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogTWFydmVsbCBTZW1pY29uZHVjdG9yIDx3d3cubWFydmVsbC5jb20+CisgKiBXcml0dGVuLWJ5OiBQcmFmdWxsYSBXYWRhc2thciA8cHJhZnVsbGFAbWFydmVsbC5jb20+CisgKiBDb250cmlidXRvcjogTWFoYXZpciBKYWluIDxtamFpbkBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19HUExVR0RfSAorI2RlZmluZSBfX0NPTkZJR19HUExVR0RfSAorCisvKgorICogVmVyc2lvbiBudW1iZXIgaW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HCSJcbk1hcnZlbGwtZ3BsdWdEIgorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfU0hFRVZBXzg4U1YzMzF4VjUJMQkvKiBDUFUgQ29yZSBzdWJ2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19BUk1BREExMDAJCTEJLyogU09DIEZhbWlseSBOYW1lICovCisjZGVmaW5lIENPTkZJR19BUk1BREExNjgJCTEJLyogU09DIFVzZWQgb24gdGhpcyBCb2FyZCAqLworI2RlZmluZSBDT05GSUdfTUFDSF9TSEVFVkFECQkJLyogTWFjaGluZSB0eXBlICovCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQJLyogZGlzYWJsZSBib2FyZCBsb3dsZXZlbF9pbml0ICovCisKKyNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHgwMGYwMDAwMAorCisvKgorICogVGhlcmUgaXMgbm8gaW50ZXJuYWwgUkFNIGluIEFSTUFEQTEwMCwgdXNpbmcgRFJBTQorICogVEJEOiBkY2FjaGUgdG8gYmUgdXNlZCBmb3IgdGhpcworICovCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9BRERSCQkoQ09ORklHX1NZU19URVhUX0JBU0UgLSAweDAwMjAwMDAwKQorI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LU19NQVgJMgorCisvKgorICogQ29tbWFuZHMgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gJCS8qIERlY2xhcmUgbm8gZmxhc2ggKE5PUi9TUEkpICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisjZGVmaW5lIENPTkZJR19DTURfSTJDCisjZGVmaW5lIENPTkZJR19DTURfQVVUT1NDUklQVAorI3VuZGVmIENPTkZJR19DTURfRlBHQQorI3VuZGVmIENPTkZJR19DTURfTkVUCisjdW5kZWYgQ09ORklHX0NNRF9ORlMKKworLyoKKyAqIG12LWNvbW1vbi5oIHNob3VsZCBiZSBkZWZpbmVkIGFmdGVyIENNRCBjb25maWdzIHNpbmNlIGl0IHVzZWQgdGhlbQorICogdG8gZW5hYmxlIGNlcnRhaW4gbWFjcm9zCisgKi8KKyNpbmNsdWRlICJtdi1jb21tb24uaCIKKyN1bmRlZiBDT05GSUdfQVJDSF9NSVNDX0lOSVQKKworI2lmZGVmIENPTkZJR19TWVNfTlMxNjU1MF9DT00xCisjdW5kZWYgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEKKyNlbmRpZiAvKiBDT05GSUdfU1lTX05TMTY1NTBfQ09NMSAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00xIEFSTUQxX1VBUlQzX0JBU0UKKworLyoKKyAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBjb25maWd1cmF0aW9ucworICovCisjZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQkxCS8qIGlmIGVudiBpbiBTRFJBTSAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJMHgyMDAwMAkJLyogNjRrICovCisKKyNlbmRpZgkvKiBfX0NPTkZJR19HUExVR0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2dyYXNzaG9wcGVyLmggYi9pbmNsdWRlL2NvbmZpZ3MvZ3Jhc3Nob3BwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzc5NDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2dyYXNzaG9wcGVyLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEKKyAqIENvcnNjaWVuY2UgR21iSCAmIENvLktHLCBBbmRyZWFzIEJpZcOfbWFubiA8Ymllc3NtYW5uQGNvcnNjaWVuY2UuZGU+CisgKgorICogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGdyYXNzaG9wcGVyIChJQ25vdmEgQVA3MDAwKSBib2FyZAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9fR1JBU1NIT1BQRVJfQ09ORklHX0gKKyNkZWZpbmUgX19HUkFTU0hPUFBFUl9DT05GSUdfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBDT05GSUdfQVZSMzIKKyNkZWZpbmUgQ09ORklHX0FUMzJBUAorI2RlZmluZSBDT05GSUdfQVQzMkFQNzAwMAorCisvKgorICogVGltZXIgY2xvY2sgZnJlcXVlbmN5LiBXZSdyZSB1c2luZyB0aGUgQ1BVLWludGVybmFsIENPVU5UIHJlZ2lzdGVyCisgKiBmb3IgdGhpcywgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBDUFUgY29yZSBjbG9jayBmcmVxdWVuY3kKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAorCisvKgorICogU2V0IHVwIHRoZSBQTEwgdG8gcnVuIGF0IDE0MCBNSHosIHRoZSBDUFUgdG8gcnVuIGF0IHRoZSBQTEwKKyAqIGZyZXF1ZW5jeSwgdGhlIEhTQiBhbmQgUEJCIGF0IDEvMiwgYW5kIHRoZSBQQkEgdG8gcnVuIGF0IDEvNCB0aGUKKyAqIFBMTCBmcmVxdWVuY3kuCisgKiAoQ09ORklHX1NZU19PU0MwX0haICogQ09ORklHX1NZU19QTEwwX01VTCkgLyBDT05GSUdfU1lTX1BMTDBfRElWID0gUExMIE1IegorICovCisjZGVmaW5lIENPTkZJR19QTEwKKyNkZWZpbmUgQ09ORklHX1NZU19QT1dFUl9NQU5BR0VSCisjZGVmaW5lIENPTkZJR19TWVNfT1NDMF9IWgkJMjAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19QTEwwX0RJVgkJMQorI2RlZmluZSBDT05GSUdfU1lTX1BMTDBfTVVMCQk3CisjZGVmaW5lIENPTkZJR19TWVNfUExMMF9TVVBQUkVTU19DWUNMRVMJMTYKKy8qCisgKiBTZXQgdGhlIENQVSBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ09ORklHX1NZU19DTEtESVZfQ1BVKSA9IENQVSBNSHoKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS0RJVl9DUFUJCTAKKy8qCisgKiBTZXQgdGhlIEhTQiBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ09ORklHX1NZU19DTEtESVZfSFNCKSA9IEhTQiBNSHoKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS0RJVl9IU0IJCTEKKy8qCisgKiBTZXQgdGhlIFBCQSBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ09ORklHX1NZU19DTEtESVZfUEJBKSA9IFBCQSBNSHoKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS0RJVl9QQkEJCTIKKy8qCisgKiBTZXQgdGhlIFBCQiBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ09ORklHX1NZU19DTEtESVZfUEJCKSA9IFBCQiBNSHoKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS0RJVl9QQkIJCTEKKworLyogUmVzZXJ2ZSBWTSByZWdpb25zIGZvciBTRFJBTSBhbmQgTk9SIGZsYXNoICovCisjZGVmaW5lIENPTkZJR19TWVNfTlJfVk1fUkVHSU9OUwkyCisKKy8qCisgKiBUaGUgUExMT1BUIHJlZ2lzdGVyIGNvbnRyb2xzIHRoZSBQTEwgbGlrZSB0aGlzOgorICogICBpY3AgPSBQTExPUFQ8Mj4KKyAqICAgaXZjbyA9IFBMTE9QVDwxOjA+CisgKgorICogV2Ugd2FudCBpY3A9MSAoZGVmYXVsdCkgYW5kIGl2Y289MCAoODAtMTYwIE1Ieikgb3IgaXZjbz0yICgxNTAtMjQwTUh6KS4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX1BMTDBfT1BUCQkweDA0CisKKyNkZWZpbmUgQ09ORklHX1VTQVJUX0JBU0UJCUFUTUVMX0JBU0VfVVNBUlQxCisjZGVmaW5lIENPTkZJR19VU0FSVF9JRAkJCTEKKworLyogVXNlciBzZXJ2aWNlYWJsZSBzdHVmZiAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkJKDIwNDgpCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisKKy8qCisgKiBPbmx5IGludGVycnVwdCBhdXRvYm9vdCBpZiA8c3BhY2U+IGlzIHByZXNzZWQuIE90aGVyd2lzZSwgZ2FyYmFnZQorICogZGF0YSBvbiB0aGUgc2VyaWFsIGxpbmUgbWF5IGludGVycnVwdCB0aGUgYm9vdCBzZXF1ZW5jZS4KKyAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkxCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVAorI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfS0VZRUQKKyNkZWZpbmUgQ09ORklHX0FVVE9CT09UX1BST01QVAkJIlByZXNzIFNQQUNFIHRvIGFib3J0IGF1dG9ib290IGluICVkIiBcCisJCQkJCSIgc2Vjb25kc1xuIiwgYm9vdGRlbGF5CisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIJImQiCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9TVE9QX1NUUgkiICIKKworLyoKKyAqIEFmdGVyIGJvb3RpbmcgdGhlIGJvYXJkIGZvciB0aGUgZmlyc3QgdGltZSwgbmV3IGV0aGVybmV0IGFkZHJlc3NlcworICogc2hvdWxkIGJlIGdlbmVyYXRlZCBhbmQgYXNzaWduZWQgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcworICogImV0aGFkZHIiLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgZHVyaW5nIHByb2R1Y3Rpb24uCisgKi8KKyNkZWZpbmUgQ09ORklHX09WRVJXUklURV9FVEhBRERSX09OQ0UKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogQk9PVFAgb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19CT09UUF9TVUJORVRNQVNLCisjZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCisKKy8qCisgKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisvKiByZW1vdmUgdW5uZWVkZWQgY29tbWFuZHMgKi8KKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EKKyN1bmRlZiBDT05GSUdfQ01EX1NFVEdFVERDUgorCisvKiBhZGQgdXNlZnVsIGNvbW1hbmRzICovCisjZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI2RlZmluZSBDT05GSUdfQ01EX0pGRlMyCisjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX1JFR0lORk8KKworI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCisjZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSJ+PiAiCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcKKworI2RlZmluZSBDT05GSUdfQVRNRUxfVVNBUlQKKyNkZWZpbmUgQ09ORklHX01BQ0IKKyNkZWZpbmUgQ09ORklHX1BPUlRNVVhfUElPCisjZGVmaW5lIENPTkZJR19TWVNfTlJfUElPUwkJNQorI2RlZmluZSBDT05GSUdfU1lTX0hTRFJBTUMKKworI2RlZmluZSBDT05GSUdfU1lTX0RDQUNIRV9MSU5FU1oJMzIKKyNkZWZpbmUgQ09ORklHX1NZU19JQ0FDSEVfTElORVNaCTMyCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKKworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0NGSQorI2RlZmluZSBDT05GSUdfRkxBU0hfQ0ZJX0RSSVZFUgorCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1NJWkUJCTB4ODAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTEKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxMzUKKworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19GTEFTSF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX1NZU19JTlRSQU1fQkFTRQkJSU5URVJOQUxfU1JBTV9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfSU5UUkFNX1NJWkUJCUlOVEVSTkFMX1NSQU1fU0laRQorI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCUVCSV9TRFJBTV9CQVNFCisKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9GTEFTSAorLyogcGxhY2UgdS1ib290IGVudiBpbiBmbGFzaCBzZWN0b3IgYWZ0ZXIgdS1ib290ICovCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTB4MTAwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJMHgyMDAwMAorCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9BRERSCQkoQ09ORklHX1NZU19JTlRSQU1fQkFTRSArIFwKKwkJCQkJIENPTkZJR19TWVNfSU5UUkFNX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMjU2KjEwMjQpCisjZGVmaW5lIENPTkZJR19TWVNfRE1BX0FMTE9DX0xFTgkoMTYzODQpCisKKy8qIEFsbG93IDRNQiBmb3IgdGhlIGtlcm5lbCBydW4tdGltZSBpbWFnZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJKEVCSV9TRFJBTV9CQVNFICsgMHgwMDQwMDAwMCkKKyNkZWZpbmUgQ09ORklHX1NZU19CT09UUEFSQU1TX0xFTgkoMTYgKiAxMDI0KQorCisvKiBPdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgc2hvdWxkbid0IGhhdmUgdG8gY2hhbmdlIGFsbCB0aGF0IG9mdGVuICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCQkiVS1Cb290PiAiCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgorI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFICsgXAorCQkJCQkgc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSArIDE2KQorI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCUVCSV9TRFJBTV9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCShDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQgKyAweDcwMDAwMCkKKyNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7IDExNTIwMCwgMzg0MDAsIDE5MjAwLCA5NjAwLCAyNDAwIH0KKworI2VuZGlmIC8qIF9fR1JBU1NIT1BQRVJfQ09ORklHX0ggKi8KKy8qIHZpbTogc2V0IHRzPTggbm9ldDogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pZ2VwMDAyMC5oIGIvaW5jbHVkZS9jb25maWdzL2lnZXAwMDIwLmgKaW5kZXggNWFmOWJlYy4uYjY1MzRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2lnZXAwMDIwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2lnZXAwMDIwLmgKQEAgLTI1LDcgKzI1LDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pZ2VwMDAzMC5oIGIvaW5jbHVkZS9jb25maWdzL2lnZXAwMDMwLmgKaW5kZXggOTIxNDRhZi4uZDg1ZTVhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2lnZXAwMDMwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2lnZXAwMDMwLmgKQEAgLTI1LDcgKzI1LDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19iZWFnbGUuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19iZWFnbGUuaAppbmRleCA5ZmQ4MGVkLi5kN2NiYzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oCkBAIC0zMSw3ICszMSw2IEBACiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqLwotI2RlZmluZSBDT05GSUdfQVJNVjcJCTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX09NQVAzNFhYCQkxCS8qIHdoaWNoIGlzIGEgMzRYWCAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSAzNDMwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfZXZtLmgKaW5kZXggMTNhNGZiZi4uYWZhMThhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAzX2V2bS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19ldm0uaApAQCAtMzYsNyArMzYsNiBAQAogLyoKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTVY3CQkxCS8qIFRoaXMgaXMgYW4gQVJNIFY3IENQVSBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQCQkxCS8qIGluIGEgVEkgT01BUCBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzRYWAkJMQkvKiB3aGljaCBpcyBhIDM0WFggKi8KICNkZWZpbmUgQ09ORklHX09NQVAzNDMwCQkxCS8qIHdoaWNoIGlzIGluIGEgMzQzMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX292ZXJvLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfb3Zlcm8uaAppbmRleCAyNDJiMzE3Li5kNmUwYTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfb3Zlcm8uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfb3Zlcm8uaApAQCAtMjMsNyArMjMsNiBAQAogLyoKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTVY3CQkxCS8qIFRoaXMgaXMgYW4gQVJNIFY3IENQVSBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQCQkxCS8qIGluIGEgVEkgT01BUCBjb3JlICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzRYWAkJMQkvKiB3aGljaCBpcyBhIDM0WFggKi8KICNkZWZpbmUgQ09ORklHX09NQVAzNDMwCQkxCS8qIHdoaWNoIGlzIGluIGEgMzQzMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX3BhbmRvcmEuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19wYW5kb3JhLmgKaW5kZXggMzljODdhOC4uYmQ1NWFiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAzX3BhbmRvcmEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYS5oCkBAIC0yNiw3ICsyNiw2IEBACiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqLwotI2RlZmluZSBDT05GSUdfQVJNVjcJCTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX09NQVAzNFhYCQkxCS8qIHdoaWNoIGlzIGEgMzRYWCAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSAzNDMwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfc2RwMzQzMC5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3NkcDM0MzAuaAppbmRleCA1NWJiY2Q0Li5lMWQ4Yzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfc2RwMzQzMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19zZHAzNDMwLmgKQEAgLTM2LDcgKzM2LDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM196b29tMS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20xLmgKaW5kZXggOTE4Mzg0OS4uYWVhYzdjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20xLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20xLmgKQEAgLTMyLDcgKzMyLDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM196b29tMi5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20yLmgKaW5kZXggMzU3M2VkZi4uMmE1NjE4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20yLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20yLmgKQEAgLTMzLDcgKzMzLDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDM0WFgJCTEJLyogd2hpY2ggaXMgYSAzNFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQMzQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDM0MzAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwNF9wYW5kYS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXA0X3BhbmRhLmgKaW5kZXggMWRhZmZiNy4uZTMxMzIzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXA0X3BhbmRhLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXA0X3BhbmRhLmgKQEAgLTMwLDcgKzMwLDYgQEAKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUAkJMQkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLwogI2RlZmluZSBDT05GSUdfT01BUDQ0WFgJCTEJLyogd2hpY2ggaXMgYSA0NFhYICovCiAjZGVmaW5lIENPTkZJR19PTUFQNDQzMAkJMQkvKiB3aGljaCBpcyBpbiBhIDQ0MzAgKi8KQEAgLTIzNyw0ICsyMzYsNDEgQEAKICNkZWZpbmUgQ09ORklHX1NZU19QTDMxMF9CQVNFCTB4NDgyNDIwMDAKICNlbmRpZgogCisvKiBEZWZpbmVzIGZvciBTRFJBTSBpbml0ICovCisjaWZuZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisjZGVmaW5lIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTgorI2RlZmluZSBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MKKyNlbmRpZgorCisvKiBEZWZpbmVzIGZvciBTUEwgKi8KKyNkZWZpbmUgQ09ORklHX1NQTAorI2RlZmluZSBDT05GSUdfU1BMX1RFWFRfQkFTRQkJMHg0MDMwNDM1MAorI2RlZmluZSBDT05GSUdfU1BMX01BWF9TSVpFCQkweDgwMDAJLyogMzIgSyAqLworI2RlZmluZSBDT05GSUdfU1BMX1NUQUNLCQlMT1dfTEVWRUxfU1JBTV9TVEFDSworCisjZGVmaW5lIENPTkZJR19TUExfQlNTX1NUQVJUX0FERFIJMHg4MDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1BMX0JTU19NQVhfU0laRQkJMHg4MDAwMAkJLyogNTEyIEtCICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19NTUNTRF9SQVdfTU9ERV9VX0JPT1RfU0VDVE9SCTB4MzAwIC8qIGFkZHJlc3MgMHg2MDAwMCAqLworI2RlZmluZSBDT05GSUdfU1lTX1VfQk9PVF9NQVhfU0laRV9TRUNUT1JTCTB4MjAwIC8qIDI1NiBLQiAqLworI2RlZmluZSBDT05GSUdfU1lTX01NQ19TRF9GQVRfQk9PVF9QQVJUSVRJT04JMQorI2RlZmluZSBDT05GSUdfU1BMX0ZBVF9MT0FEX1BBWUxPQURfTkFNRQkidS1ib290LmltZyIKKworI2RlZmluZSBDT05GSUdfU1BMX0xJQkNPTU1PTl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTElCRElTS19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfSTJDX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9NTUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0ZBVF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTElCR0VORVJJQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfU0VSSUFMX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9MRFNDUklQVCAiYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL3UtYm9vdC1zcGwubGRzIgorCisvKgorICogMU1CIGludG8gdGhlIFNEUkFNIHRvIGFsbG93IGZvciBTUEwncyBic3MgYXQgdGhlIGJlZ2lubmluZyBvZiBTRFJBTQorICogNjQgYnl0ZXMgYmVmb3JlIHRoaXMgYWRkcmVzcyBzaG91bGQgYmUgc2V0IGFzaWRlIGZvciB1LWJvb3QuaW1nJ3MKKyAqIGhlYWRlci4gVGhhdCBpcyAweDgwMEZGRkMwLS0weDgwMTAwMDAwIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYW55CisgKiBvdGhlciBuZWVkcy4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHg4MDEwMDAwMAorCiAjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXA0X3NkcDQ0MzAuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwNF9zZHA0NDMwLmgKaW5kZXggNjhmZmE4Ny4uNWIzMTEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL29tYXA0X3NkcDQ0MzAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDRfc2RwNDQzMC5oCkBAIC0zMSw3ICszMSw2IEBACiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqLwotI2RlZmluZSBDT05GSUdfQVJNVjcJCTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX09NQVAJCTEJLyogaW4gYSBUSSBPTUFQIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX09NQVA0NFhYCQkxCS8qIHdoaWNoIGlzIGEgNDRYWCAqLwogI2RlZmluZSBDT05GSUdfT01BUDQ0MzAJCTEJLyogd2hpY2ggaXMgaW4gYSA0NDMwICovCkBAIC0yNDMsNCArMjQyLDQxIEBACiAjZGVmaW5lIENPTkZJR19TWVNfUEwzMTBfQkFTRQkweDQ4MjQyMDAwCiAjZW5kaWYKIAorLyogRGVmaW5lcyBmb3IgU0RSQU0gaW5pdCAqLworI2lmbmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworI2RlZmluZSBDT05GSUdfU1lTX0FVVE9NQVRJQ19TRFJBTV9ERVRFQ1RJT04KKyNkZWZpbmUgQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTCisjZW5kaWYKKworLyogRGVmaW5lcyBmb3IgU1BMICovCisjZGVmaW5lIENPTkZJR19TUEwKKyNkZWZpbmUgQ09ORklHX1NQTF9URVhUX0JBU0UJCTB4NDAzMDQzNTAKKyNkZWZpbmUgQ09ORklHX1NQTF9NQVhfU0laRQkJMHg4MDAwCS8qIDMyIEsgKi8KKyNkZWZpbmUgQ09ORklHX1NQTF9TVEFDSwkJTE9XX0xFVkVMX1NSQU1fU1RBQ0sKKworI2RlZmluZSBDT05GSUdfU1BMX0JTU19TVEFSVF9BRERSCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9CU1NfTUFYX1NJWkUJCTB4ODAwMDAJCS8qIDUxMiBLQiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTU1DU0RfUkFXX01PREVfVV9CT09UX1NFQ1RPUgkweDMwMCAvKiBhZGRyZXNzIDB4NjAwMDAgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19VX0JPT1RfTUFYX1NJWkVfU0VDVE9SUwkweDIwMCAvKiAyNTYgS0IgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NTUNfU0RfRkFUX0JPT1RfUEFSVElUSU9OCTEKKyNkZWZpbmUgQ09ORklHX1NQTF9GQVRfTE9BRF9QQVlMT0FEX05BTUUJInUtYm9vdC5pbWciCisKKyNkZWZpbmUgQ09ORklHX1NQTF9MSUJDT01NT05fU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0xJQkRJU0tfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0kyQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTU1DX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9GQVRfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0xJQkdFTkVSSUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX1NFUklBTF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTERTQ1JJUFQgImFyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi91LWJvb3Qtc3BsLmxkcyIKKworLyoKKyAqIDFNQiBpbnRvIHRoZSBTRFJBTSB0byBhbGxvdyBmb3IgU1BMJ3MgYnNzIGF0IHRoZSBiZWdpbm5pbmcgb2YgU0RSQU0KKyAqIDY0IGJ5dGVzIGJlZm9yZSB0aGlzIGFkZHJlc3Mgc2hvdWxkIGJlIHNldCBhc2lkZSBmb3IgdS1ib290LmltZydzCisgKiBoZWFkZXIuIFRoYXQgaXMgMHg4MDBGRkZDMC0tMHg4MDEwMDAwMCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGFueQorICogb3RoZXIgbmVlZHMuCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4ODAxMDAwMDAKKwogI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zNXBfZ29uaS5oIGIvaW5jbHVkZS9jb25maWdzL3M1cF9nb25pLmgKaW5kZXggZDY0OGNlOC4uYTVhYTg1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3M1cF9nb25pLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3M1cF9nb25pLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNkZWZpbmUgX19DT05GSUdfSAogCiAvKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyAqLwotI2RlZmluZSBDT05GSUdfQVJNVjcJCTEJLyogVGhpcyBpcyBhbiBBUk0gVjcgQ1BVIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX1NBTVNVTkcJCTEJLyogaW4gYSBTQU1TVU5HIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX1M1UAkJMQkvKiB3aGljaCBpcyBpbiBhIFM1UCBGYW1pbHkgKi8KICNkZWZpbmUgQ09ORklHX1M1UEMxMTAJCTEJLyogd2hpY2ggaXMgaW4gYSBTNVBDMTEwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvczVwYzIxMF91bml2ZXJzYWwuaCBiL2luY2x1ZGUvY29uZmlncy9zNXBjMjEwX3VuaXZlcnNhbC5oCmluZGV4IGJiZTEwNGIuLjQwMzEwMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zNXBjMjEwX3VuaXZlcnNhbC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zNXBjMjEwX3VuaXZlcnNhbC5oCkBAIC0zMCw3ICszMCw2IEBACiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQogICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJMQkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfU0FNU1VORwkJMQkvKiBpbiBhIFNBTVNVTkcgY29yZSAqLwogI2RlZmluZSBDT05GSUdfUzVQCQkxCS8qIHdoaWNoIGlzIGluIGEgUzVQIEZhbWlseSAqLwogI2RlZmluZSBDT05GSUdfUzVQQzIxMAkJMQkvKiB3aGljaCBpcyBpbiBhIFM1UEMyMTAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zbWRrYzEwMC5oIGIvaW5jbHVkZS9jb25maWdzL3NtZGtjMTAwLmgKaW5kZXggNzBlMjNiNS4uMTlkZGUxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NtZGtjMTAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NtZGtjMTAwLmgKQEAgLTMyLDcgKzMyLDYgQEAKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTVY3CQkxCS8qIFRoaXMgaXMgYW4gQVJNIFY3IENQVSBjb3JlICovCiAjZGVmaW5lIENPTkZJR19TQU1TVU5HCQkxCS8qIGluIGEgU0FNU1VORyBjb3JlICovCiAjZGVmaW5lIENPTkZJR19TNVAJCTEJLyogd2hpY2ggaXMgaW4gYSBTNVAgRmFtaWx5ICovCiAjZGVmaW5lIENPTkZJR19TNVBDMTAwCQkxCS8qIHdoaWNoIGlzIGluIGEgUzVQQzEwMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NtZGt2MzEwLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc21ka3YzMTAuaAppbmRleCBhN2Y1ODUwLi4yZjk3YmVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc21ka3YzMTAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc21ka3YzMTAuaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBfX0NPTkZJR19ICiAKIC8qIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zICovCi0jZGVmaW5lIENPTkZJR19BUk1WNwkJCTEJLypUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLwogI2RlZmluZSBDT05GSUdfU0FNU1VORwkJCTEJLyogaW4gYSBTQU1TVU5HIGNvcmUgKi8KICNkZWZpbmUgQ09ORklHX1M1UAkJCTEJLyogUzVQIEZhbWlseSAqLwogI2RlZmluZSBDT05GSUdfUzVQQzIxMAkJCTEJLyogd2hpY2ggaXMgaW4gYSBTNVBDMjEwIFNvQyAqLwpAQCAtMTY2LDQgKzE2NSw3IEBACiAjZGVmaW5lIENPTkZJR19TTUM5MTFYXzE2X0JJVAogI2RlZmluZSBDT05GSUdfRU5WX1NST01fQkFOSwkJMQogI2VuZGlmIC8qQ09ORklHX0NNRF9ORVQqLworCisvKiBFbmFibGUgZGV2aWNldHJlZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc3BlYXItY29tbW9uLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc3BlYXItY29tbW9uLmgKaW5kZXggNGU1YmRlYS4uNTVkMTliNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NwZWFyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zcGVhci1jb21tb24uaApAQCAtODYsNiArODYsOCBAQAogI2RlZmluZSBDT05GSUdfU1lTX0xPQURTX0JBVURfQ0hBTkdFCiAKIC8qIE5BTkQgRkxBU0ggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDT05GSUdfTVREX0RFVklDRQorI2RlZmluZSBDT05GSUdfTVREX1BBUlRJVElPTlMKICNkZWZpbmUgQ09ORklHX05BTkRfU1BFQVIJCQkxCiAjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCQkxCiAjZGVmaW5lIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUJCTEKQEAgLTIwOSw0ICsyMTEsMTQgQEAKICNkZWZpbmUgUEhZU19TRFJBTV8xCQkJCTB4MDAwMDAwMDAKICNkZWZpbmUgUEhZU19TRFJBTV8xX01BWFNJWkUJCQkweDQwMDAwMDAwCiAKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQkJUEhZU19TRFJBTV8xCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUgkJMHhEMjgwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJCTB4MjAwMAorCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJCVwKKwkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIJCQlcCisJKENPTkZJR19TWVNfSU5JVF9SQU1fQUREUiArIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3ZlcnNhdGlsZS5oIGIvaW5jbHVkZS9jb25maWdzL3ZlcnNhdGlsZS5oCmluZGV4IGRiNjg5NjUuLjMyY2VlODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy92ZXJzYXRpbGUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdmVyc2F0aWxlLmgKQEAgLTc0LDYgKzc0LDcgQEAKIC8qCiAgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQk4MTkyCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKENPTkZJR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCiAKIC8qCkBAIC0xNjgsOSArMTY5LDI2IEBACiAjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4IE1CICovCiAjZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJMHgwNDAwMDAwMAkvKiA2NE1CICovCiAKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzEKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSCTB4MDA4MDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MDAwRkZGRkYKKyNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIFwKKwkJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfQUREUgkoQ09ORklHX1NZU19JTklUX1JBTV9BRERSICsgXAorCQkJCQkJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQpCisKKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCiAgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9WRVJTQVRJTEVfUUVNVQorI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgxMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkweDgwMDAwCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgwMTAwMDAwMAogLyoKICAqIFVzZSB0aGUgQ0ZJIGZsYXNoIGRyaXZlciBmb3IgZWFzZSBvZiB1c2UKICAqLwpAQCAtMjIyLDcgKzI0MCw2IEBACiAvKiBUaGUgQVJNIEJvb3QgTW9uaXRvciBpcyBzaGlwcGVkIGluIHRoZSBsb3dlc3Qgc2VjdG9yIG9mIGZsYXNoICovCiAKICNkZWZpbmUgRkxBU0hfVE9QCQkJKENPTkZJR19TWVNfRkxBU0hfQkFTRSArIFBIWVNfRkxBU0hfU0laRSkKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJODE5MgogI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCQkoRkxBU0hfVE9QIC0gQ09ORklHX0VOVl9TRUNUX1NJWkUpCiAjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoQ09ORklHX0VOVl9BRERSIC0gQ09ORklHX1NZU19GTEFTSF9CQVNFKQogI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJKENPTkZJR19FTlZfQUREUiAtIENPTkZJR19TWVNfTU9OSVRPUl9MRU4pCkBAIC0yMzAsNCArMjQ3LDYgQEAKICNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9QUk9URUNUSU9OCS8qIFRoZSBkZXZpY2VzIGhhdmUgcmVhbCBwcm90ZWN0aW9uICovCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRU1QVFlfSU5GTwkvKiBmbGluZm8gaW5kaWNhdGVzIGVtcHR5IGJsb2NrcyAqLwogCisjZW5kaWYKKwogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW1hZ2UuaCBiL2luY2x1ZGUvaW1hZ2UuaAppbmRleCAzYzUyOGE0Li4zNTJlNGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlLmgKKysrIGIvaW5jbHVkZS9pbWFnZS5oCkBAIC0xNTgsNiArMTU4LDcgQEAKICNkZWZpbmUgSUhfVFlQRV9LV0JJTUFHRQk5CS8qIEtpcmt3b29kIEJvb3QgSW1hZ2UJCSovCiAjZGVmaW5lIElIX1RZUEVfSU1YSU1BR0UJMTAJLyogRnJlZXNjYWxlIElNWEJvb3QgSW1hZ2UJKi8KICNkZWZpbmUgSUhfVFlQRV9VQkxJTUFHRQkxMQkvKiBEYXZpbmNpIFVCTCBJbWFnZQkJKi8KKyNkZWZpbmUgSUhfVFlQRV9PTUFQSU1BR0UJMTIJLyogVEkgT01BUCBDb25maWcgSGVhZGVyIEltYWdlCSovCiAKIC8qCiAgKiBDb21wcmVzc2lvbiBUeXBlcwpkaWZmIC0tZ2l0IGEvbW1jX3NwbC9ib2FyZC9zYW1zdW5nL3NtZGt2MzEwL01ha2VmaWxlIGIvbW1jX3NwbC9ib2FyZC9zYW1zdW5nL3NtZGt2MzEwL01ha2VmaWxlCmluZGV4IGRlMmMxYTIuLmZkZmQwMTUgMTAwNjQ0Ci0tLSBhL21tY19zcGwvYm9hcmQvc2Ftc3VuZy9zbWRrdjMxMC9NYWtlZmlsZQorKysgYi9tbWNfc3BsL2JvYXJkL3NhbXN1bmcvc21ka3YzMTAvTWFrZWZpbGUKQEAgLTQwLDcgKzQwLDcgQEAKIFNPQkpTCT0gc3RhcnQubyBtZW1fc2V0dXAubyBsb3dsZXZlbF9pbml0Lm8KIENPQkpTCT0gbW1jX2Jvb3QubwogCi1TUkNTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSkKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQogX19PQkpTCTo9ICQoU09CSlMpICQoQ09CSlMpCiBMTkRJUgk6PSAkKE9CSlRSRUUpL21tY19zcGwvYm9hcmQvJChCT0FSRERJUikKQEAgLTc2LDI1ICs3NiwyNSBAQAogIyBjcmVhdGUgc3ltYm9saWMgbGlua3MgZm9yIGNvbW1vbiBmaWxlcwogCiAjIGZyb20gY3B1IGRpcmVjdG9yeQotJChvYmopc3RhcnQuUzoKK3N0YXJ0LlM6CiAJQHJtIC1mICRACiAJQGxuIC1zICQoVE9QRElSKS9hcmNoL2FybS9jcHUvYXJtdjcvc3RhcnQuUyAkQAogCiAjIGZyb20gYm9hcmQgZGlyZWN0b3J5Ci0kKG9iailtZW1fc2V0dXAuUzoKK21lbV9zZXR1cC5TOgogCUBybSAtZiAkQAogCUBsbiAtcyAkKFRPUERJUikvYm9hcmQvc2Ftc3VuZy9zbWRrdjMxMC9tZW1fc2V0dXAuUyAkQAogCi0kKG9iailsb3dsZXZlbF9pbml0LlM6Citsb3dsZXZlbF9pbml0LlM6CiAJQHJtIC1mICRACiAJQGxuIC1zICQoVE9QRElSKS9ib2FyZC9zYW1zdW5nL3NtZGt2MzEwL2xvd2xldmVsX2luaXQuUyAkQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSQob2JqKSUubzoJJChvYmopJS5TCiskKG9iaiklLm86CSUuUwogCSQoQ0MpICQoQUZMQUdTKSAtYyAtbyAkQCAkPAogCi0kKG9iaiklLm86CSQob2JqKSUuYworJChvYmopJS5vOgklLmMKIAkkKENDKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKIAogIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CmRpZmYgLS1naXQgYS9uZXQvZXRoLmMgYi9uZXQvZXRoLmMKaW5kZXggNjUyMzgzNC4uM2FhZDcxZiAxMDA2NDQKLS0tIGEvbmV0L2V0aC5jCisrKyBiL25ldC9ldGguYwpAQCAtNTIxLDcgKzUyMSw2IEBACiAKICN3YXJuaW5nIEV0aGVybmV0IGRyaXZlciBpcyBkZXByZWNhdGVkLiAgUGxlYXNlIHVwZGF0ZSB0byB1c2UgQ09ORklHX05FVF9NVUxUSQogCi1leHRlcm4gaW50IGF0OTFybTkyMDBfbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKTsKIGV4dGVybiBpbnQgbWNmNTJ4Ml9taWlwaHlfaW5pdGlhbGl6ZShiZF90ICpiaXMpOwogZXh0ZXJuIGludCBuczc1MjBfbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKTsKIApAQCAtNTMyLDkgKzUzMSw2IEBACiAJbWlpcGh5X2luaXQoKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMCkKLQlhdDkxcm05MjAwX21paXBoeV9pbml0aWFsaXplKGJpcyk7Ci0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NQ0Y1MngyKQogCW1jZjUyeDJfbWlpcGh5X2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3BsL01ha2VmaWxlIGIvc3BsL01ha2VmaWxlCmluZGV4IDAyMDRmOTcuLjg3ZjEzZjYgMTAwNjQ0Ci0tLSBhL3NwbC9NYWtlZmlsZQorKysgYi9zcGwvTWFrZWZpbGUKQEAgLTg1LDYgKzg1LDEyIEBACiAJJChzaGVsbCAkKExEKSAtLXZlcnNpb24gfCBcCiAJICBzZWQgLW5lICdzL0dOVSBsZCB2ZXJzaW9uIFwoWzAtOV1bMC05XSpcKVwuXChbMC05XVswLTldKlwpLiovLURMRF9NQUpPUj1cMSAtRExEX01JTk9SPVwyL3AnKQogCitpZmRlZiBDT05GSUdfT01BUAorJChPQkpUUkVFKS9NTE86CSQob2JqKXUtYm9vdC1zcGwuYmluCisJJChPQkpUUkVFKS90b29scy9ta2ltYWdlIC1UIG9tYXBpbWFnZSBcCisJCS1hICQoQ09ORklHX1NQTF9URVhUX0JBU0UpIC1kICQ8ICRACitlbmRpZgorCiBBTEwteQkrPSAkKG9iail1LWJvb3Qtc3BsLmJpbgogCiBhbGw6CSQoQUxMLXkpCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZSBiL3Rvb2xzL01ha2VmaWxlCmluZGV4IGU4MTNlMWQuLmZjNzQxZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlCisrKyBiL3Rvb2xzL01ha2VmaWxlCkBAIC04OCw2ICs4OCw3IEBACiBPQkpfRklMRVMtJChDT05GSUdfWFdBWV9TV0FQX0JZVEVTKSArPSB4d2F5LXN3YXAtYnl0ZXMubwogTk9QRURfT0JKX0ZJTEVTLXkgKz0ga3diaW1hZ2UubwogTk9QRURfT0JKX0ZJTEVTLXkgKz0gaW14aW1hZ2UubworTk9QRURfT0JKX0ZJTEVTLXkgKz0gb21hcGltYWdlLm8KIE5PUEVEX09CSl9GSUxFUy15ICs9IG1raW1hZ2UubwogT0JKX0ZJTEVTLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5jYi5vCiBOT1BFRF9PQkpfRklMRVMteSArPSBvc19zdXBwb3J0Lm8KQEAgLTE5Miw2ICsxOTMsNyBAQAogCQkJJChvYmopbWQ1Lm8gXAogCQkJJChvYmopbWtpbWFnZS5vIFwKIAkJCSQob2JqKW9zX3N1cHBvcnQubyBcCisJCQkkKG9iailvbWFwaW1hZ2UubyBcCiAJCQkkKG9iailzaGExLm8gXAogCQkJJChvYmopdWJsaW1hZ2UubyBcCiAJCQkkKExJQkZEVF9PQkpTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWtpbWFnZS5jIGIvdG9vbHMvbWtpbWFnZS5jCmluZGV4IDcyMTVkMGYuLjJmMzMxMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21raW1hZ2UuYworKysgYi90b29scy9ta2ltYWdlLmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCWluaXRfaW14X2ltYWdlX3R5cGUgKCk7CiAJLyogSW5pdCBGSVQgaW1hZ2UgZ2VuZXJhdGlvbi9saXN0IHN1cHBvcnQgKi8KIAlpbml0X2ZpdF9pbWFnZV90eXBlICgpOworCS8qIEluaXQgVEkgT01BUCBCb290IGltYWdlIGdlbmVyYXRpb24vbGlzdCBzdXBwb3J0ICovCisJaW5pdF9vbWFwX2ltYWdlX3R5cGUoKTsKIAkvKiBJbml0IERlZmF1bHQgaW1hZ2UgZ2VuZXJhdGlvbi9saXN0IHN1cHBvcnQgKi8KIAlpbml0X2RlZmF1bHRfaW1hZ2VfdHlwZSAoKTsKIAkvKiBJbml0IERhdmluY2kgVUJMIHN1cHBvcnQgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL21raW1hZ2UuaCBiL3Rvb2xzL21raW1hZ2UuaAppbmRleCBkMTA5ZDQwLi5lNTlhOTE5IDEwMDY0NAotLS0gYS90b29scy9ta2ltYWdlLmgKKysrIGIvdG9vbHMvbWtpbWFnZS5oCkBAIC0xNDQsNSArMTQ0LDYgQEAKIHZvaWQgaW5pdF9kZWZhdWx0X2ltYWdlX3R5cGUgKHZvaWQpOwogdm9pZCBpbml0X2ZpdF9pbWFnZV90eXBlICh2b2lkKTsKIHZvaWQgaW5pdF91YmxfaW1hZ2VfdHlwZSh2b2lkKTsKK3ZvaWQgaW5pdF9vbWFwX2ltYWdlX3R5cGUodm9pZCk7CiAKICNlbmRpZiAvKiBfTUtJSU1BR0VfSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL29tYXAvY2xvY2tzX2dldF9tX24uYyBiL3Rvb2xzL29tYXAvY2xvY2tzX2dldF9tX24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmMxNzYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvb21hcC9jbG9ja3NfZ2V0X21fbi5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogUHJvZ3JhbSBmb3IgZmluZGluZyBNICYgTiB2YWx1ZXMgZm9yIERQTExzCisgKiBUbyBiZSBydW4gb24gSG9zdCBQQworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworI2RlZmluZSBNQVhfTgkxMjcKKworLyoKKyAqIGdldF9tX25fb3B0aW1pemVkKCkgLSBGaW5kcyBvcHRpbWFsIERQTEwgbXVsdGlwbGllcihNKSBhbmQgZGl2aWRlcihOKQorICogdmFsdWVzIGJhc2VkIG9uIHRoZSByZWZlcmVuY2UgZnJlcXVlbmN5LCByZXF1aXJlZCBvdXRwdXQgZnJlcXVlbmN5LAorICogbWF4aW11bSB0b2xlcmFuY2UgZm9yIG91dHB1dCBmcmVxdWVuY3kgZXRjLgorICoKKyAqIHRhcmdldF9mcmVxX2toeiAtIG91dHB1dCBmcmVxdWVuY3kgcmVxdWlyZWQgaW4gS0h6CisgKiByZWZfZnJlcV9raHogLSByZWZlcmVuY2UoaW5wdXQpIGZyZXF1ZW5jeSBpbiBLSHoKKyAqIG0gLSBwb2ludGVyIHRvIGNvbXB1dGVkIE0gdmFsdWUKKyAqIG4gLSBwb2ludGVyIHRvIGNvbXB1dGVkIE4gdmFsdWUKKyAqIHRvbGVyYW5jZV9raHogLSB0b2xlcmFuY2UgZm9yIHRoZSBvdXRwdXQgZnJlcXVlbmN5LiBXaGVuIHRoZSBhbGdvcml0aG0KKyAqIHN1Y2NlZWRzIGluIGZpbmRpbmcgdmlhbGJsZSBNIGFuZCBOIHZhbHVlcyB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQKKyAqIGZyZXF1ZW5jeSB3aWxsIGJlIGluIHRoZSByYW5nZToKKyAqCVt0YXJnZXRfZnJlcV9raHogLSB0b2xlcmFuY2Vfa2h6LCB0YXJnZXRfZnJlcV9raHpdCisgKgorICogRm9ybXVsYToKKyAqCUZkcGxsID0gKDIgKiBNICogRnJlZikgLyAoTiArIDEpCisgKgorICogQ29uc2lkZXJhdGlvbnMgZm9yIGxvY2stdGltZToKKyAqCS0gU21hbGxlciB0aGUgTiwgYmV0dGVyIGxvY2stdGltZSwgZXNwZWNpYWxseSBsb2NrLXRpbWUgd2lsbCBiZQorICoJLSBGb3IgYWNjZXB0YWJsZSBsb2NrLXRpbWVzOgorICoJCUZyZWYgLyAoTSArIDEpID49IDEgTUh6CisgKgorICogQ29uc2lkZXJhdGlvbnMgZm9yIHBvd2VyOgorICoJLSBUaGUgZGlmZmVyZW5jZSBpbiBwb3dlciBmb3IgZGlmZmVyZW50IE4gdmFsdWVzIGdpdmluZyB0aGUgc2FtZQorICoJICBvdXRwdXQgaXMgbmVnbGlnaWJsZS4gU28sIHdlIG9wdGltaXplIGZvciBsb2NrLXRpbWUKKyAqCisgKiBIYXJkLWNvbnN0cmFpbnRzOgorICoJLSBOIGNhbiBub3QgYmUgZ3JlYXRlciB0aGFuIDEyNyg3IGJpdCBmaWVsZCBmb3IgcmVwcmVzZW50aW5nIE4pCisgKgorICogVXNhZ2U6CisgKgkkIGdjYyBjbG9ja3NfZ2V0X21fbi5jCisgKgkkIC4vYS5vdXQKKyAqLworaW50IGdldF9tX25fb3B0aW1pemVkKHUzMiB0YXJnZXRfZnJlcV9raHosIHUzMiByZWZfZnJlcV9raHosIHUzMiAqbSwgdTMyICpuLAorCQkJdTMyIHRvbGVyYW5jZV9raHopCit7CisJdTMyIG1pbl9mcmVxID0gdGFyZ2V0X2ZyZXFfa2h6IC0gdG9sZXJhbmNlX2toejsKKwl1MzIgbWF4X2ZyZXEgPSB0YXJnZXRfZnJlcV9raHo7CisJdTMyIGZyZXEsIGZyZXFfb2xkOworCSpuID0gMTsKKwl3aGlsZSAoMSkgeworCQkqbSA9IG1pbl9mcmVxIC8gcmVmX2ZyZXFfa2h6IC8gMiAqICgqbikgOworCQlmcmVxX29sZCA9IDA7CisJCXdoaWxlICgxKSB7CisJCQlmcmVxID0gcmVmX2ZyZXFfa2h6ICogMiAqICgqbSkgLyAoKm4pOworCQkJaWYgKGFicyh0YXJnZXRfZnJlcV9raHogLSBmcmVxX29sZCkgPD0KKwkJCQlhYnModGFyZ2V0X2ZyZXFfa2h6IC0gZnJlcSkpIHsKKwkJCQlmcmVxID0gZnJlcV9vbGQ7CisJCQkJKCptKS0tOworCQkJCWJyZWFrOworCQkJfQorCQkJKCptKSsrOworCQkJZnJlcV9vbGQgPSBmcmVxOworCQl9CisJCWlmIChmcmVxID49IG1pbl9mcmVxICYmIGZyZXEgPD0gbWF4X2ZyZXEpCisJCQlicmVhazsKKwkJKCpuKSsrOworCQlpZiAoKCpuKSA+IE1BWF9OICsgMSkgeworCQkJcHJpbnRmKCJyZWYgJWQgbSAlZCBuICVkIHRhcmdldCAlZCA6ICIsCisJCQkJcmVmX2ZyZXFfa2h6LCAqbSwgKm4sIHRhcmdldF9mcmVxX2toeik7CisJCQlwcmludGYoImNhbiBub3QgZmluZCBtICYgbiAtIHBsZWFzZSBjb25zaWRlciIKKwkJCQkiIGluY3JlYXNpbmcgdG9sZXJhbmNlXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkoKm4pLS07CisJcHJpbnRmKCJyZWYgJWQgbSAlZCBuICVkIHRhcmdldCAlZCBsb2NrZWQgJWRcbiIsCisJCXJlZl9mcmVxX2toeiwgKm0sICpuLCB0YXJnZXRfZnJlcV9raHosIGZyZXEpOworCWlmICgocmVmX2ZyZXFfa2h6IC8gKCpuICsgMSkpIDwgMTAwMCkgeworCQlwcmludGYoIlx0UkVGQ0xLIC0gQ0xLSU5QLyhOKzEpIGlzIGxlc3MgdGhhbiAxIE1IeiAtIGxlc3MgdGhhbiIKKwkJCSIgaWRlYWwsIGxvY2tpbmcgdGltZSB3aWxsIGJlIGhpZ2ghXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWFpbih2b2lkKQoreworCXUzMiBtLCBuOworCXByaW50ZigiXG5NUFUgLSAyMDAwMDAwXG4iKTsKKwlnZXRfbV9uX29wdGltaXplZCgyMDAwMDAwLCAxMjAwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgyMDAwMDAwLCAxMzAwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgyMDAwMDAwLCAxNjgwMCwgJm0sICZuLCA4MDApOworCWdldF9tX25fb3B0aW1pemVkKDIwMDAwMDAsIDE5MjAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDIwMDAwMDAsIDI2MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDIwMDAwMDAsIDI3MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDIwMDAwMDAsIDM4NDAwLCAmbSwgJm4sIDApOworCisJcHJpbnRmKCJcbk1QVSAtIDEyMDAwMDBcbiIpOworCWdldF9tX25fb3B0aW1pemVkKDEyMDAwMDAsIDEyMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDEyMDAwMDAsIDEzMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDEyMDAwMDAsIDE2ODAwLCAmbSwgJm4sIDgwMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTIwMDAwMCwgMTkyMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTIwMDAwMCwgMjYwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTIwMDAwMCwgMjcwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTIwMDAwMCwgMzg0MDAsICZtLCAmbiwgMCk7CisKKwlwcmludGYoIlxuTVBVIC0gMTU4NDAwMFxuIik7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTU4NDAwMCwgMTIwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTU4NDAwMCwgMTMwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTU4NDAwMCwgMTY4MDAsICZtLCAmbiwgNDAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxNTg0MDAwLCAxOTIwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxNTg0MDAwLCAyNjAwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxNTg0MDAwLCAyNzAwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxNTg0MDAwLCAzODQwMCwgJm0sICZuLCAwKTsKKworCXByaW50ZigiXG5Db3JlIDE2MDAwMDBcbiIpOworCWdldF9tX25fb3B0aW1pemVkKDE2MDAwMDAsIDEyMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE2MDAwMDAsIDEzMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE2MDAwMDAsIDE2ODAwLCAmbSwgJm4sIDIwMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTYwMDAwMCwgMTkyMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTYwMDAwMCwgMjYwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTYwMDAwMCwgMjcwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTYwMDAwMCwgMzg0MDAsICZtLCAmbiwgMCk7CisKKwlwcmludGYoIlxuUEVSIDE1MzYwMDBcbiIpOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDEyMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDEzMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDE2ODAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDE5MjAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDI2MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDI3MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE1MzYwMDAsIDM4NDAwLCAmbSwgJm4sIDApOworCisJcHJpbnRmKCJcbklWQSAxODYyMDAwXG4iKTsKKwlnZXRfbV9uX29wdGltaXplZCgxODYyMDAwLCAxMjAwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxODYyMDAwLCAxMzAwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxODYyMDAwLCAxNjgwMCwgJm0sICZuLCAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxODYyMDAwLCAxOTIwMCwgJm0sICZuLCA5MDApOworCWdldF9tX25fb3B0aW1pemVkKDE4NjIwMDAsIDI2MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE4NjIwMDAsIDI3MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE4NjIwMDAsIDM4NDAwLCAmbSwgJm4sIDgwMCk7CisKKwlwcmludGYoIlxuQUJFIDE5NjYwOCBzeXMgY2xrXG4iKTsKKwlnZXRfbV9uX29wdGltaXplZCgxOTY2MDgsIDEyMDAwLCAmbSwgJm4sIDcwMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTk2NjA4LCAxMzAwMCwgJm0sICZuLCAyMDApOworCWdldF9tX25fb3B0aW1pemVkKDE5NjYwOCwgMTY4MDAsICZtLCAmbiwgNzAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxOTY2MDgsIDE5MjAwLCAmbSwgJm4sIDQwMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTk2NjA4LCAyNjAwMCwgJm0sICZuLCAyMDApOworCWdldF9tX25fb3B0aW1pemVkKDE5NjYwOCwgMjcwMDAsICZtLCAmbiwgOTAwKTsKKwlnZXRfbV9uX29wdGltaXplZCgxOTY2MDgsIDM4NDAwLCAmbSwgJm4sIDApOworCisJcHJpbnRmKCJcbkFCRSAxOTY2MDggMzJLXG4iKTsKKwlnZXRfbV9uX29wdGltaXplZCgxOTY2MDgwMDAvNCwgMzI3NjgsICZtLCAmbiwgMCk7CisKKwlwcmludGYoIlxuVVNCIDE5MjAwMDBcbiIpOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDEyMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDEzMDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDE2ODAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDE5MjAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDI2MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDI3MDAwLCAmbSwgJm4sIDApOworCWdldF9tX25fb3B0aW1pemVkKDE5MjAwMDAsIDM4NDAwLCAmbSwgJm4sIDApOworCisJcHJpbnRmKCJcbkNvcmUgRVMxIDE1MjM3MTJcbiIpOworCWdldF9tX25fb3B0aW1pemVkKDE1MjQwMDAsIDEyMDAwLCAmbSwgJm4sIDEwMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTUyNDAwMCwgMTMwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTUyNDAwMCwgMTY4MDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTUyNDAwMCwgMTkyMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTUyNDAwMCwgMjYwMDAsICZtLCAmbiwgMCk7CisJZ2V0X21fbl9vcHRpbWl6ZWQoMTUyNDAwMCwgMjcwMDAsICZtLCAmbiwgMCk7CisKKwkvKiBleGFjdCByZWNvbW1lbmRhdGlvbiBmb3IgU0RQcyAqLworCWdldF9tX25fb3B0aW1pemVkKDE1MjM3MTIsIDM4NDAwLCAmbSwgJm4sIDApOworCit9CmRpZmYgLS1naXQgYS90b29scy9vbWFwaW1hZ2UuYyBiL3Rvb2xzL29tYXBpbWFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDkxY2MKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9vbWFwaW1hZ2UuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogTGluYXJvIExURCwgd3d3LmxpbmFyby5vcmcKKyAqIEF1dGhvcjogSm9obiBSaWdieSA8am9obi5yaWdieUBsaW5hcm8ub3JnPgorICogQmFzZWQgb24gVEkncyBzaWduR1AuYworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOQorICogU3RlZmFubyBCYWJpYywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc2JhYmljQGRlbnguZGUuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgPHd3dy5tYXJ2ZWxsLmNvbT4KKyAqIFdyaXR0ZW4tYnk6IFByYWZ1bGxhIFdhZGFza2FyIDxwcmFmdWxsYUBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiBSZXF1aXJlZCB0byBvYnRhaW4gdGhlIGdldGxpbmUgcHJvdG90eXBlIGZyb20gc3RkaW8uaCAqLworI2RlZmluZSBfR05VX1NPVVJDRQorCisjaW5jbHVkZSAibWtpbWFnZS5oIgorI2luY2x1ZGUgPGltYWdlLmg+CisjaW5jbHVkZSAib21hcGltYWdlLmgiCisKKy8qIEhlYWRlciBzaXplIGlzIENIIGhlYWRlciByb3VuZGVkIHVwIHRvIDUxMiBieXRlcyBwbHVzIEdQIGhlYWRlciAqLworI2RlZmluZSBPTUFQX0NIX0hEUl9TSVpFIDUxMgorI2RlZmluZSBPTUFQX0dQX0hEUl9TSVpFIChzaXplb2Yoc3RydWN0IGdwX2hlYWRlcikpCisjZGVmaW5lIE9NQVBfRklMRV9IRFJfU0laRSAoT01BUF9DSF9IRFJfU0laRStPTUFQX0dQX0hEUl9TSVpFKQorCitzdGF0aWMgdWludDhfdCBvbWFwaW1hZ2VfaGVhZGVyW09NQVBfRklMRV9IRFJfU0laRV07CisKK3N0YXRpYyBpbnQgb21hcGltYWdlX2NoZWNrX2ltYWdlX3R5cGVzKHVpbnQ4X3QgdHlwZSkKK3sKKwlpZiAodHlwZSA9PSBJSF9UWVBFX09NQVBJTUFHRSkKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKwllbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIE9NQVAgaW1hZ2UgdHlwZSAtICV4IiwgdHlwZSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorfQorCisvKgorICogT25seSB0aGUgc2ltcGxlc3QgaW1hZ2UgdHlwZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkOgorICogVE9DIHBvaW50aW5nIHRvIENIU0VUVElOR1MKKyAqIFRPQyB0ZXJtaW5hdG9yCisgKiBDSFNFVFRJTkdTCisgKgorICogcGFkZGluZyB0byBPTUFQX0NIX0hEUl9TSVpFIGJ5dGVzCisgKgorICogZ3AgaGVhZGVyCisgKiAgIHNpemUKKyAqICAgbG9hZF9hZGRyCisgKi8KK3N0YXRpYyBpbnQgdmFsaWRfZ3BoX3NpemUodWludDMyX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCB2YWxpZF9ncGhfbG9hZF9hZGRyKHVpbnQzMl90IGxvYWRfYWRkcikKK3sKKwlyZXR1cm4gbG9hZF9hZGRyOworfQorCitzdGF0aWMgaW50IG9tYXBpbWFnZV92ZXJpZnlfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKnB0ciwgaW50IGltYWdlX3NpemUsCisJCQlzdHJ1Y3QgbWtpbWFnZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY2hfdG9jICp0b2MgPSAoc3RydWN0IGNoX3RvYyAqKXB0cjsKKwlzdHJ1Y3QgZ3BfaGVhZGVyICpncGggPSAoc3RydWN0IGdwX2hlYWRlciAqKShwdHIrT01BUF9DSF9IRFJfU0laRSk7CisJdWludDMyX3Qgb2Zmc2V0LCBzaXplOworCisJd2hpbGUgKHRvYy0+c2VjdGlvbl9vZmZzZXQgIT0gMHhmZmZmZmZmZgorCQkJJiYgdG9jLT5zZWN0aW9uX3NpemUgIT0gMHhmZmZmZmZmZikgeworCQlvZmZzZXQgPSB0b2MtPnNlY3Rpb25fb2Zmc2V0OworCQlzaXplID0gdG9jLT5zZWN0aW9uX3NpemU7CisJCWlmICghb2Zmc2V0IHx8ICFzaXplKQorCQkJcmV0dXJuIC0xOworCQlpZiAob2Zmc2V0ID49IE9NQVBfQ0hfSERSX1NJWkUgfHwKKwkJICAgIG9mZnNldCtzaXplID49IE9NQVBfQ0hfSERSX1NJWkUpCisJCQlyZXR1cm4gLTE7CisJCXRvYysrOworCX0KKwlpZiAoIXZhbGlkX2dwaF9zaXplKGdwaC0+c2l6ZSkpCisJCXJldHVybiAtMTsKKwlpZiAoIXZhbGlkX2dwaF9sb2FkX2FkZHIoZ3BoLT5sb2FkX2FkZHIpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcGltYWdlX3ByaW50X3NlY3Rpb24oc3RydWN0IGNoX3NldHRpbmdzICpjaHMpCit7CisJY29uc3QgY2hhciAqc2VjdGlvbl9uYW1lOworCisJaWYgKGNocy0+c2VjdGlvbl9rZXkpCisJCXNlY3Rpb25fbmFtZSA9ICJDSFNFVFRJTkdTIjsKKwllbHNlCisJCXNlY3Rpb25fbmFtZSA9ICJVTktOT1dOS0VZIjsKKworCXByaW50ZigiJXMgKCV4KSAiCisJCSJ2YWxpZDoleCAiCisJCSJ2ZXJzaW9uOiV4ICIKKwkJInJlc2VydmVkOiV4ICIKKwkJImZsYWdzOiV4XG4iLAorCQlzZWN0aW9uX25hbWUsCisJCWNocy0+c2VjdGlvbl9rZXksCisJCWNocy0+dmFsaWQsCisJCWNocy0+dmVyc2lvbiwKKwkJY2hzLT5yZXNlcnZlZCwKKwkJY2hzLT5mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBpbWFnZV9wcmludF9oZWFkZXIoY29uc3Qgdm9pZCAqcHRyKQoreworCWNvbnN0IHN0cnVjdCBjaF90b2MgKnRvYyA9IChzdHJ1Y3QgY2hfdG9jICopcHRyOworCWNvbnN0IHN0cnVjdCBncF9oZWFkZXIgKmdwaCA9CisJCQkoc3RydWN0IGdwX2hlYWRlciAqKShwdHIrT01BUF9DSF9IRFJfU0laRSk7CisJdWludDMyX3Qgb2Zmc2V0LCBzaXplOworCisJd2hpbGUgKHRvYy0+c2VjdGlvbl9vZmZzZXQgIT0gMHhmZmZmZmZmZgorCQkJJiYgdG9jLT5zZWN0aW9uX3NpemUgIT0gMHhmZmZmZmZmZikgeworCQlvZmZzZXQgPSB0b2MtPnNlY3Rpb25fb2Zmc2V0OworCQlzaXplID0gdG9jLT5zZWN0aW9uX3NpemU7CisKKwkJaWYgKG9mZnNldCA+PSBPTUFQX0NIX0hEUl9TSVpFIHx8CisJCSAgICBvZmZzZXQrc2l6ZSA+PSBPTUFQX0NIX0hEUl9TSVpFKQorCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCisJCXByaW50ZigiU2VjdGlvbiAlcyBvZmZzZXQgJXggbGVuZ3RoICV4XG4iLAorCQkJdG9jLT5zZWN0aW9uX25hbWUsCisJCQl0b2MtPnNlY3Rpb25fb2Zmc2V0LAorCQkJdG9jLT5zZWN0aW9uX3NpemUpOworCisJCW9tYXBpbWFnZV9wcmludF9zZWN0aW9uKChzdHJ1Y3QgY2hfc2V0dGluZ3MgKikocHRyK29mZnNldCkpOworCQl0b2MrKzsKKwl9CisKKwlpZiAoIXZhbGlkX2dwaF9zaXplKGdwaC0+c2l6ZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiRXJyb3I6IGludmFsaWQgaW1hZ2Ugc2l6ZSAleFxuIiwKKwkJCWdwaC0+c2l6ZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAoIXZhbGlkX2dwaF9sb2FkX2FkZHIoZ3BoLT5sb2FkX2FkZHIpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIkVycm9yOiBpbnZhbGlkIGltYWdlIGxvYWQgYWRkcmVzcyAleFxuIiwKKwkJCWdwaC0+c2l6ZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlwcmludGYoIkdQIEhlYWRlcjogU2l6ZSAleCBMb2FkQWRkciAleFxuIiwKKwkJZ3BoLT5zaXplLCBncGgtPmxvYWRfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgdG9jX29mZnNldCh2b2lkICpoZHIsIHZvaWQgKm1lbWJlcikKK3sKKwlyZXR1cm4gbWVtYmVyIC0gaGRyOworfQorCitzdGF0aWMgdm9pZCBvbWFwaW1hZ2Vfc2V0X2hlYWRlcih2b2lkICpwdHIsIHN0cnVjdCBzdGF0ICpzYnVmLCBpbnQgaWZkLAorCQkJCXN0cnVjdCBta2ltYWdlX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBjaF90b2MgKnRvYyA9IChzdHJ1Y3QgY2hfdG9jICopcHRyOworCXN0cnVjdCBjaF9zZXR0aW5ncyAqY2hzID0gKHN0cnVjdCBjaF9zZXR0aW5ncyAqKQorCQkJCQkocHRyICsgMiAqIHNpemVvZigqdG9jKSk7CisJc3RydWN0IGdwX2hlYWRlciAqZ3BoID0gKHN0cnVjdCBncF9oZWFkZXIgKikocHRyICsgT01BUF9DSF9IRFJfU0laRSk7CisKKwl0b2MtPnNlY3Rpb25fb2Zmc2V0ID0gdG9jX29mZnNldChwdHIsIGNocyk7CisJdG9jLT5zZWN0aW9uX3NpemUgPSBzaXplb2Yoc3RydWN0IGNoX3NldHRpbmdzKTsKKwlzdHJjcHkoKGNoYXIgKil0b2MtPnNlY3Rpb25fbmFtZSwgIkNIU0VUVElOR1MiKTsKKworCWNocy0+c2VjdGlvbl9rZXkgPSBLRVlfQ0hTRVRUSU5HUzsKKwljaHMtPnZhbGlkID0gMDsKKwljaHMtPnZlcnNpb24gPSAxOworCWNocy0+cmVzZXJ2ZWQgPSAwOworCWNocy0+ZmxhZ3MgPSAwOworCisJdG9jKys7CisJbWVtc2V0KHRvYywgMHhmZiwgc2l6ZW9mKCp0b2MpKTsKKworCWdwaC0+c2l6ZSA9IHNidWYtPnN0X3NpemUgLSBPTUFQX0ZJTEVfSERSX1NJWkU7CisJZ3BoLT5sb2FkX2FkZHIgPSBwYXJhbXMtPmFkZHI7Cit9CisKK2ludCBvbWFwaW1hZ2VfY2hlY2tfcGFyYW1zKHN0cnVjdCBta2ltYWdlX3BhcmFtcyAqcGFyYW1zKQoreworCXJldHVybgkocGFyYW1zLT5kZmxhZyAmJiAocGFyYW1zLT5mZmxhZyB8fCBwYXJhbXMtPmxmbGFnKSkgfHwKKwkJKHBhcmFtcy0+ZmZsYWcgJiYgKHBhcmFtcy0+ZGZsYWcgfHwgcGFyYW1zLT5sZmxhZykpIHx8CisJCShwYXJhbXMtPmxmbGFnICYmIChwYXJhbXMtPmRmbGFnIHx8IHBhcmFtcy0+ZmZsYWcpKTsKK30KKworLyoKKyAqIG9tYXBpbWFnZSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW1hZ2VfdHlwZV9wYXJhbXMgb21hcGltYWdlX3BhcmFtcyA9IHsKKwkubmFtZQkJPSAiVEkgT01BUCBDSC9HUCBCb290IEltYWdlIHN1cHBvcnQiLAorCS5oZWFkZXJfc2l6ZQk9IE9NQVBfRklMRV9IRFJfU0laRSwKKwkuaGRyCQk9ICh2b2lkICopJm9tYXBpbWFnZV9oZWFkZXIsCisJLmNoZWNrX2ltYWdlX3R5cGUgPSBvbWFwaW1hZ2VfY2hlY2tfaW1hZ2VfdHlwZXMsCisJLnZlcmlmeV9oZWFkZXIJPSBvbWFwaW1hZ2VfdmVyaWZ5X2hlYWRlciwKKwkucHJpbnRfaGVhZGVyCT0gb21hcGltYWdlX3ByaW50X2hlYWRlciwKKwkuc2V0X2hlYWRlcgk9IG9tYXBpbWFnZV9zZXRfaGVhZGVyLAorCS5jaGVja19wYXJhbXMJPSBvbWFwaW1hZ2VfY2hlY2tfcGFyYW1zLAorfTsKKwordm9pZCBpbml0X29tYXBfaW1hZ2VfdHlwZSh2b2lkKQoreworCW1raW1hZ2VfcmVnaXN0ZXIoJm9tYXBpbWFnZV9wYXJhbXMpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvb21hcGltYWdlLmggYi90b29scy9vbWFwaW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTlkYjAwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvb21hcGltYWdlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogTGluYXJvIExURCwgd3d3LmxpbmFyby5vcmcKKyAqIEF1dGhvciBKb2huIFJpZ2J5IDxqb2huLnJpZ2J5QGxpbmFyby5vcmc+CisgKiBCYXNlZCBvbiBUSSdzIHNpZ25HUC5jCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfT01BUElNQUdFX0hfCisjZGVmaW5lIF9PTUFQSU1BR0VfSF8KKworc3RydWN0IGNoX3RvYyB7CisJdWludDMyX3Qgc2VjdGlvbl9vZmZzZXQ7CisJdWludDMyX3Qgc2VjdGlvbl9zaXplOworCXVpbnQ4X3QgdW51c2VkWzEyXTsKKwl1aW50OF90IHNlY3Rpb25fbmFtZVsxMl07Cit9OworCitzdHJ1Y3QgY2hfc2V0dGluZ3MgeworCXVpbnQzMl90IHNlY3Rpb25fa2V5OworCXVpbnQ4X3QgdmFsaWQ7CisJdWludDhfdCB2ZXJzaW9uOworCXVpbnQxNl90IHJlc2VydmVkOworCXVpbnQzMl90IGZsYWdzOworfTsKKworc3RydWN0IGdwX2hlYWRlciB7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBsb2FkX2FkZHI7Cit9OworCisjZGVmaW5lIEtFWV9DSFNFVFRJTkdTIDB4QzBDMEMwQzEKKyNlbmRpZiAvKiBfT01BUElNQUdFX0hfICovCg==