ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBkZmNjMGY3Li5mODYyODkxIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTkgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMS4xOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDMwIEFwciAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgT01BUDczMCBQZXJzZXVzMiBEZXZlbG9wbWVudCBib2FyZAorCisqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CisgIEZpeCBmbGFzaCBjaGlwLXNlbGVjdCAoT1IwKSBvcHRpb24gcmVnaXN0ZXIgc2V0dGluZyBvbiBGQURTIGJvYXJkcy4KKworKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgorICBSZXBvcnQgTUlJIG5ldHdvcmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5nIHByb3Blcmx5IHdoZW4KKyAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCisKKyogUGF0Y2ggYnkgSmFycmV0dCBSZWRkLCAyOSBBcHIgMjAwNDoKKyAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgorCiAqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDI5IEFwciAyMDA0OgogICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgogCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCA5YmVkMWU1Li4xNGIxMzFiIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTI4NSw2ICsyODUsMTEgQEAKIEQ6IFN1cHBvcnQgZm9yIFBJUDQwNSBib2FyZAogRDogU3VwcG9ydCBmb3IgTUlQNDA1IGJvYXJkCiAKK046IERhdmUgUGV2ZXJsZXkKK0U6IGRwZXZlcmxleUBtcGMtZGF0YS5jby51aworVzogaHR0cDovL3d3dy5tcGMtZGF0YS5jby51aworRDogT01BUDczMCBQMiBib2FyZCBzdXBwb3J0CisKIE46IEJpbGwgUGl0dHMKIEU6IHdscEBtaW5kc3ByaW5nLmNvbQogRDogQmVkQnVnIGVtYmVkZGVkIGRlYnVnZ2VyIGNvZGUKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggN2E4NjgwMC4uNDMwZjA4MjYgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0zNDAsNiArMzQwLDkgQEAKIAlvbWFwMTUxMGlubgkJQVJNOTI1VAogCW9tYXAxNjEwaW5uCQlBUk05MjZFSlMKIAorRGF2ZSBQZXZlcmxleSA8ZHBldmVybGV5QG1wYy1kYXRhLmNvLnVrPgorCW9tYXA3MzBwMgkJQVJNOTI2RUpTCisKIE5pc2hhbnQgS2FtYXQgPG5za2FtYXRAdGkuY29tPgogCiAJb21hcDE2MTBoMgkJQVJNOTI2RUpTCmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCA3YzE1NzZiLi4yMjhkOTZkIDEwMDY0NAotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTEzOSw4ICsxMzksOCBAQAogTElTVF9BUk05PSIJXAogCWF0OTFybTkyMDBkawlpbnRlZ3JhdG9yY3AJaW50ZWdyYXRvcmFwCQkJXAogCW9tYXAxNTEwaW5uCW9tYXAxNjEwaDIJb21hcDE2MTBpbm4JCQlcCi0Jc21kazI0MDAJc21kazI0MTAJdHJhYgkJCQlcCi0JVkNNQTkJCXZlcnNhdGlsZQkJCQkJXAorCW9tYXA3MzBwMglzbWRrMjQwMAlzbWRrMjQxMAkJCVwKKwl0cmFiCQlWQ01BOQkJdmVyc2F0aWxlCQkJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDdiODRiYWYuLjQwN2Y1YzQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC05ODEsNiArOTgxLDggQEAKIAogeHRyYWN0X29tYXAxNjEweHh4ID0gJChzdWJzdCBfY3MwYm9vdCwsJChzdWJzdCBfY3MzYm9vdCwsICQoc3Vic3QgX2NvbmZpZywsJDEpKSkKIAoreHRyYWN0X29tYXA3MzBwMiA9ICQoc3Vic3QgX2NzMGJvb3QsLCQoc3Vic3QgX2NzM2Jvb3QsLCAkKHN1YnN0IF9jb25maWcsLCQxKSkpCisKIFNYMV9jb25maWcgOgkJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjV0IHN4MQogCkBAIC0xMDExLDYgKzEwMTMsMTggQEAKIAlmaTsKIAlALi9ta2NvbmZpZyAtYSAkKGNhbGwgeHRyYWN0X29tYXAxNjEweHh4LCRAKSBhcm0gYXJtOTI2ZWpzIG9tYXAxNjEwaW5uCiAKK29tYXA3MzBwMl9jb25maWcgXAorb21hcDczMHAyX2NzMGJvb3RfY29uZmlnIFwKK29tYXA3MzBwMl9jczNib290X2NvbmZpZyA6CXVuY29uZmlnCisJQGlmIFsgIiQoZmluZHN0cmluZyBfY3MwYm9vdF8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzBfQk9PVCIgPj4gLi9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIuLi4gY29uZmlndXJlZCBmb3IgQ1MwIGJvb3QiOyBcCisJZWxzZSBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0NTM19CT09UIiA+PiAuL2luY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIi4uLiBjb25maWd1cmVkIGZvciBDUzMgYm9vdCI7IFwKKwlmaTsKKwlALi9ta2NvbmZpZyAtYSAkKGNhbGwgeHRyYWN0X29tYXA3MzBwMiwkQCkgYXJtIGFybTkyNmVqcyBvbWFwNzMwcDIKKwogc21kazI0MDBfY29uZmlnCToJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IHNtZGsyNDAwCiAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA5NWU1NTJkLi41NjQyYzI3IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0yOTQsOCArMjk0LDkgQEAKIAkJQ09ORklHX0FUOTFSTTkyMDBESywJCUNPTkZJR19ETlAxMTEwLAkJQ09ORklHX0VQNzMxMiwKIAkJQ09ORklHX0gyX09NQVAxNjEwLAkJQ09ORklHX0hIUF9DUkFETEUsCUNPTkZJR19JTVBBNywKIAkJQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLCAgIENPTkZJR19JTk5PVkFUT1JPTUFQMTYxMCwJQ09ORklHX0xBUlQsCi0JCUNPTkZJR19MVUJCT0NLLAkJCUNPTkZJR19TSEFOTk9OLAkJQ09ORklHX1NNREsyNDAwLAotCQlDT05GSUdfU01ESzI0MTAsCQlDT05GSUdfVFJBQiwJCUNPTkZJR19WQ01BOSwKKwkJQ09ORklHX0xVQkJPQ0ssCQkJQ09ORklHX1NIQU5OT04sCQlDT05GSUdfUDJfT01BUDczMCwKKwkJQ09ORklHX1NNREsyNDAwLAkJQ09ORklHX1NNREsyNDEwLAlDT05GSUdfVFJBQiwKKwkJQ09ORklHX1ZDTUE5CiAKIAkJTWljcm9CbGF6ZSBiYXNlZCBib2FyZHM6CiAJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjA3NCw2ICsyMDc1LDcgQEAKIAlGQURTODIzX2NvbmZpZwkJTkVUVklBX2NvbmZpZwkJVFFNODYwTF9jb25maWcKIAlGQURTODUwU0FSX2NvbmZpZwlvbWFwMTUxMGlubl9jb25maWcJV0FMTlVUNDA1X2NvbmZpZwogCUZBRFM4NjBUX2NvbmZpZwkJb21hcDE2MTBoMl9jb25maWcJWlBDMTkwMF9jb25maWcKKwkJCQlvbWFwNzMwcDJfY29uZmlnCiAKIE5vdGU6IGZvciBzb21lIGJvYXJkIHNwZWNpYWwgY29uZmlndXJhdGlvbiBuYW1lcyBtYXkgZXhpc3Q7IGNoZWNrIGlmCiAgICAgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBib2FyZCB2ZW5kb3I7IGZvcgpkaWZmIC0tZ2l0IGEvYm9hcmQvZmFkcy9mbGFzaC5jIGIvYm9hcmQvZmFkcy9mbGFzaC5jCmluZGV4IGMyM2RmZjcuLmQyYTQ2YjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZhZHMvZmxhc2guYworKysgYi9ib2FyZC9mYWRzL2ZsYXNoLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogCS8qIFJlbWFwIEZMQVNIIGFjY29yZGluZyB0byByZWFsIHNpemUgKi8KIAltZW1jdGwtPm1lbWNfb3IwID0KLQkJKCgoKHVuc2lnbmVkIGxvbmcpIH4xKSA8PCBpKSAmIE9SX0FNX01TSykgfAorCQkoKCgodW5zaWduZWQgbG9uZykgfjApIDw8IGkpICYgT1JfQU1fTVNLKSB8CiAJCUNGR19PUl9USU1JTkdfRkxBU0g7CiAJbWVtY3RsLT5tZW1jX2JyMCA9IENGR19CUjBfUFJFTElNOwogCmRpZmYgLS1naXQgYS9ib2FyZC9vY290ZWEvZmxhc2guYyBiL2JvYXJkL29jb3RlYS9mbGFzaC5jCmluZGV4IDE1ZTY4OGYuLmY0NDk4NGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL29jb3RlYS9mbGFzaC5jCisrKyBiL2JvYXJkL29jb3RlYS9mbGFzaC5jCkBAIC0zNDksMTAgKzM0OSwxNCBAQAogCQkJaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzJdICYgMTsKIAl9CiAKKwkvKiBpc3N1ZSBiYW5rIHJlc2V0IHRvIHJldHVybiB0byByZWFkIG1vZGUgKi8KKwlhZGRyMlswXSA9IChGTEFTSF9XT1JEX1NJWkUpIDB4MDBGMDAwRjA7CisKIAkvKgogCSAqIFByZXZlbnQgd3JpdGVzIHRvIHVuaW5pdGlhbGl6ZWQgRkxBU0guCiAJICovCiAJaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHsKKwkJLyogPyA/ID8gKi8KIAl9CiAKIAlyZXR1cm4gKGluZm8tPnNpemUpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDczMHAyL01ha2VmaWxlIGIvYm9hcmQvb21hcDczMHAyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTg1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNzMwcDIvTWFrZWZpbGUKQEAgLTAsMCArMSw0NyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBvbWFwNzMwcDIubyBmbGFzaC5vCitTT0JKUwk6PSBwbGF0Zm9ybS5vCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworLWluY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwNzMwcDIvY29uZmlnLm1rIGIvYm9hcmQvb21hcDczMHAyL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmJmZjZmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDczMHAyL2NvbmZpZy5tawpAQCAtMCwwICsxLDI1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMgorIyBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisjIERhdmlkIE11ZWxsZXIsIEVMU09GVCBBRywgPGQubXVlbGxlckBlbHNvZnQuY2g+CisjCisjIChDKSBDb3B5cmlnaHQgMjAwMworIyBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisjIEtzaGl0aWogR3VwdGEgPEtzaGl0aWpAdGkuY29tPgorIworIyBUSSBQZXJzZXVzIDIgYm9hcmQgd2l0aCBPTUFQNzIwIChBUk05MjVFSlMpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIElubm92YXRvciBoYXMgMSBiYW5rIG9mIDI1NiBNQiBTRFJBTQorIyBQaHlzaWNhbCBBZGRyZXNzOgorIyAxMDAwJzAwMDAgdG8gMjAwMCcwMDAwCisjCisjCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCAxMDAwJzgwMDAsIGVudHJ5IDEwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKyMKKyMgd2UgbG9hZCBvdXJzZWxmIHRvIDExMDgnMDAwMAorIworIworCitURVhUX0JBU0UgPSAweDExMDgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwNzMwcDIvZmxhc2guYyBiL2JvYXJkL29tYXA3MzBwMi9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDY1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNzMwcDIvZmxhc2guYwpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMQorICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0CisgKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisKKyNkZWZpbmUgUEhZU19GTEFTSF9TRUNUX1NJWkUJMHgwMDAyMDAwMAkvKiAyNTYgS0Igc2VjdG9ycyAoeDIpICovCitmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgICAgKi8KKworLyogQm9hcmQgc3VwcG9ydCBmb3IgMSBvciAyIGZsYXNoIGRldmljZXMgKi8KKyN1bmRlZiBGTEFTSF9QT1JUX1dJRFRIMzIKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSDE2CisKKyNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdXNob3J0CisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9zaG9ydAorI2RlZmluZSBTV0FQKHgpCQkJX19zd2FiMTYoeCkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVsb25nCisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9sb25nCisjZGVmaW5lIFNXQVAoeCkJCQlfX3N3YWIzMih4KQorI2VuZGlmCisKKyNkZWZpbmUgRlBXCUZMQVNIX1BPUlRfV0lEVEgKKyNkZWZpbmUgRlBXVglGTEFTSF9QT1JUX1dJRFRIVgorCisjZGVmaW5lIG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorCisKKy8qIEZsYXNoIE9yZ2FuaXphdGlvbiBTdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IE9yZ0RlZiB7CisJdW5zaWduZWQgaW50IHNlY3Rvcl9udW1iZXI7CisJdW5zaWduZWQgaW50IHNlY3Rvcl9zaXplOworfSBPcmdEZWY7CisKKworLyogRmxhc2ggT3JnYW5pemF0aW9ucyAqLworT3JnRGVmIE9yZ0ludGVsXzI4RjI1NkwxOFRbXSA9IHsKKwl7NCwgMzIgKiAxMDI0fSwJCQkJLyogNCAqIDMya0J5dGVzIHNlY3RvcnMgKi8KKwl7MjU1LCAxMjggKiAxMDI0fSwJCQkvKiAyNTUgKiAxMjhrQnl0ZXMgc2VjdG9ycyAqLworfTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGdW5jdGlvbnMKKyAqLwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKTsKK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAoRlBXICogYWRkciwgZmxhc2hfaW5mb190ICogaW5mbyk7CitzdGF0aWMgaW50IHdyaXRlX2RhdGEgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIEZQVyBkYXRhKTsKK3N0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKiBpbmZvKTsKK3ZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpOwordm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKTsKK3ZvaWQgZmxhc2hfdW5wcm90ZWN0X3NlY3RvcnMgKEZQV1YgKiBhZGRyKTsKK2ludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpOworaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQoreworCWludCBpOworCXVsb25nIHNpemUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIFBIWVNfRkxBU0hfMSwgJmZsYXNoX2luZm9baV0pOworCQkJZmxhc2hfZ2V0X29mZnNldHMgKFBIWVNfRkxBU0hfMSwgJmZsYXNoX2luZm9baV0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwYW5pYyAoImNvbmZpZ3VyZWQgdG9vIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOworCX0KKworCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycworCSAqLworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRkxBU0hfQkFTRSwKKwkJCUNGR19GTEFTSF9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJQ0ZHX0VOVl9BRERSLAorCQkJQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwgJmZsYXNoX2luZm9bMF0pOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisJT3JnRGVmICpwT3JnRGVmOworCisJcE9yZ0RlZiA9IE9yZ0ludGVsXzI4RjI1NkwxOFQ7CisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJcmV0dXJuOworCX0KKworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkJaWYgKGkgPiAyNTUpIHsKKwkJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4ODAwMCk7CisJCQkJaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJCQl9IGVsc2UgeworCQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArCisJCQkJCQkoaSAqIFBIWVNfRkxBU0hfU0VDVF9TSVpFKTsKKwkJCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsKKwkJCX0KKwkJfQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIEZMQVNIX01BTl9JTlRFTDoKKwkJcHJpbnRmICgiSU5URUwgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwljYXNlIEZMQVNIXzI4RjI1NkwxOFQ6CisJCXByaW50ZiAoIkZMQVNIIDI4RjI1NkwxOFRcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiICUwOGxYJXMiLAorCQkJaW5mby0+c3RhcnRbaV0sIGluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CisJfQorCXByaW50ZiAoIlxuIik7CisJcmV0dXJuOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKKyAqLworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCXZvbGF0aWxlIEZQVyB2YWx1ZTsKKworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisJYWRkclsweDU1NTVdID0gKEZQVykgMHgwMEFBMDBBQTsKKwlhZGRyWzB4MkFBQV0gPSAoRlBXKSAweDAwNTUwMDU1OworCWFkZHJbMHg1NTU1XSA9IChGUFcpIDB4MDA5MDAwOTA7CisKKwltYiAoKTsKKwl2YWx1ZSA9IGFkZHJbMF07CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisKKwljYXNlIChGUFcpIElOVEVMX01BTlVGQUNUOgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9JTlRFTDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJCWluZm8tPnNpemUgPSAwOworCQlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJcmV0dXJuICgwKTsJCS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJfQorCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzFdOwkvKiBkZXZpY2UgSUQgICAgICAgICovCisJc3dpdGNoICh2YWx1ZSkgeworCisJY2FzZSAoRlBXKSAoSU5URUxfSURfMjhGMjU2TDE4VCk6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjI1NkwxOFQ7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDI1OTsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCWJyZWFrOwkJCS8qID0+IDMyIE1CICAgICAqLworCisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlpZiAoaW5mby0+c2VjdG9yX2NvdW50ID4gQ0ZHX01BWF9GTEFTSF9TRUNUKSB7CisJCXByaW50ZiAoIioqIEVSUk9SOiBzZWN0b3IgY291bnQgJWQgPiBtYXggKCVkKSAqKlxuIiwKKwkJCQlpbmZvLT5zZWN0b3JfY291bnQsIENGR19NQVhfRkxBU0hfU0VDVCk7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKKwl9CisKKwlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKworCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisKKworLyogdW5wcm90ZWN0cyBhIHNlY3RvciBmb3Igd3JpdGUgYW5kIGVyYXNlCisgKiBvbiBzb21lIGludGVsIHBhcnRzLCB0aGlzIHVucHJvdGVjdHMgdGhlIGVudGlyZSBjaGlwLCBidXQgaXQKKyAqIHdvbnQgaHVydCB0byBjYWxsIHRoaXMgYWRkaXRpb25hbCB0aW1lcyBwZXIgc2VjdG9yLi4uCisgKi8KK3ZvaWQgZmxhc2hfdW5wcm90ZWN0X3NlY3RvcnMgKEZQV1YgKiBhZGRyKQoreworI2RlZmluZSBQRF9GSU5URUxfV1NNU19SRUFEWV9NQVNLICAgIDB4MDA4MAorCisJKmFkZHIgPSAoRlBXKSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKworCS8qIHRoaXMgc2VuZHMgdGhlIGNsZWFyIGxvY2sgYml0IGNvbW1hbmQgKi8KKwkqYWRkciA9IChGUFcpIDB4MDA2MDAwNjA7CisJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitpbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCWludCBmbGFnLCBwcm90LCBzZWN0OworCXVsb25nIHR5cGUsIHN0YXJ0LCBsYXN0OworCWludCByY29kZSA9IDA7CisKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKKwkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQl9CisJCXJldHVybiAxOworCX0KKworCXR5cGUgPSAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSyk7CisJaWYgKCh0eXBlICE9IEZMQVNIX01BTl9JTlRFTCkpIHsKKwkJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlICUwOGx4IC0gYWJvcnRlZFxuIiwKKwkJCQlpbmZvLT5mbGFzaF9pZCk7CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KSB7CisJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkJCQlwcm90KTsKKwl9IGVsc2UgeworCQlwcmludGYgKCJcbiIpOworCX0KKworCisJc3RhcnQgPSBnZXRfdGltZXIgKDApOworCWxhc3QgPSBzdGFydDsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCUZQV1YgKmFkZHIgPSAoRlBXViAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCQkJRlBXIHN0YXR1czsKKworCQkJcHJpbnRmICgiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKKworCQkJZmxhc2hfdW5wcm90ZWN0X3NlY3RvcnMgKGFkZHIpOworCisJCQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLworCQkJcmVzZXRfdGltZXJfbWFza2VkICgpOworCisJCQkqYWRkciA9IChGUFcpIDB4MDA1MDAwNTA7LyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkqYWRkciA9IChGUFcpIDB4MDAyMDAwMjA7LyogZXJhc2Ugc2V0dXAgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMEQwMDBEMDsvKiBlcmFzZSBjb25maXJtICovCisKKwkJCXdoaWxlICgoKHN0YXR1cyA9CisJCQkJKmFkZHIpICYgKEZQVykgMHgwMDgwMDA4MCkgIT0KKwkJCQkoRlBXKSAweDAwODAwMDgwKSB7CisJCQkJCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4KKwkJCQkJQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJCQkJcHJpbnRmICgiVGltZW91dFxuIik7CisJCQkJCS8qIHN1c3BlbmQgZXJhc2UgICAgICovCisJCQkJCSphZGRyID0gKEZQVykgMHgwMEIwMDBCMDsKKwkJCQkJLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCisJCQkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsKKwkJCQkJcmNvZGUgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciBjbWQuICAgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsKKwkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsvKiByZXNlc3QgdG8gcmVhZCBtb2RlICovCisJCQlwcmludGYgKCIgZG9uZVxuIik7CisJCX0KKwl9CisJcmV0dXJuIHJjb2RlOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKiA0IC0gRmxhc2ggbm90IGlkZW50aWZpZWQKKyAqLworCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyBjcCwgd3A7CisJRlBXIGRhdGE7CisJaW50IGNvdW50LCBpLCBsLCByYywgcG9ydF93aWR0aDsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXJldHVybiA0OworCX0KKy8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLworI2lmZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorCXdwID0gKGFkZHIgJiB+MSk7CisJcG9ydF93aWR0aCA9IDI7CisjZWxzZQorCXdwID0gKGFkZHIgJiB+Myk7CisJcG9ydF93aWR0aCA9IDQ7CisjZW5kaWYKKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcworCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IGw7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisJCWZvciAoOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCS0tY250OworCQkJKytjcDsKKwkJfQorCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisKKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKKwkgKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNudCA+PSBwb3J0X3dpZHRoKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF93aWR0aDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCX0KKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJCWNudCAtPSBwb3J0X3dpZHRoOworCQlpZiAoY291bnQrKyA+IDB4ODAwKSB7CisJCQlzcGluX3doZWVsICgpOworCQkJY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGNudCA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQktLWNudDsKKwl9CisJZm9yICg7IGkgPCBwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCX0KKworCXJldHVybiAod3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCBvciBoYWxmd29yZCB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpCit7CisJRlBXViAqYWRkciA9IChGUFdWICopIGRlc3Q7CisJdWxvbmcgc3RhdHVzOworCWludCBmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKKwkJcHJpbnRmICgibm90IGVyYXNlZCBhdCAlMDhseCAoJXgpXG4iLCAodWxvbmcpIGFkZHIsICphZGRyKTsKKwkJcmV0dXJuICgyKTsKKwl9CisJZmxhc2hfdW5wcm90ZWN0X3NlY3RvcnMgKGFkZHIpOworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJKmFkZHIgPSAoRlBXKSAweDAwNDAwMDQwOwkvKiB3cml0ZSBzZXR1cCAqLworCSphZGRyID0gZGF0YTsKKworCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJcmVzZXRfdGltZXJfbWFza2VkICgpOworCisJLyogd2FpdCB3aGlsZSBwb2xsaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPSAoRlBXKSAweDAwODAwMDgwKSB7CisJCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJCXJldHVybiAoMSk7CisJCX0KKwl9CisJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpCit7CisJc3RhdGljIGludCBwID0gMDsKKwlzdGF0aWMgY2hhciB3W10gPSAiXFwvLSI7CisKKwlwcmludGYgKCJcMDEwJWMiLCB3W3BdKTsKKwkoKytwID09IDMpID8gKHAgPSAwKSA6IDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwNzMwcDIvb21hcDczMHAyLmMgYi9ib2FyZC9vbWFwNzMwcDIvb21hcDczMHAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyZmEzYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXA3MzBwMi9vbWFwNzMwcDIuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBEYXZpZCBNdWVsbGVyLCBFTFNPRlQgQUcsIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2lmIGRlZmluZWQoQ09ORklHX09NQVA3MzApCisjaW5jbHVkZSA8Li9jb25maWdzL29tYXA3MzAuaD4KKyNlbmRpZgorCitpbnQgdGVzdF9ib290X21vZGUodm9pZCk7Cit2b2lkIHNwaW5fdXBfbGVkcyh2b2lkKTsKK3ZvaWQgZmxhc2hfX2luaXQgKHZvaWQpOwordm9pZCBldGhlcl9faW5pdCAodm9pZCk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3MgKHZvaWQpOwordm9pZCBwZXJpcGhlcmFsX3Bvd2VyX2VuYWJsZSAodm9pZCk7CisKKyNkZWZpbmUgRkxBU0hfT05fQ1MwICAgIDEKKyNkZWZpbmUgRkxBU0hfT05fQ1MzICAgIDAKKworc3RhdGljIGlubGluZSB2b2lkIGRlbGF5ICh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworICAgICAgICBfX2FzbV9fIHZvbGF0aWxlICgiMTpcbiIKKwkJCSAgInN1YnMgJTAsICUxLCAjMVxuIgorCQkJICAiYm5lIDFiIjoiPXIiIChsb29wcyk6IjAiIChsb29wcykpOworfQorCitpbnQgdGVzdF9ib290X21vZGUodm9pZCkKK3sKKwkvKiBDaGVjayBmb3IgQ1MwIGFuZCBDUzMgYWRkcmVzcyBkZWNvZGUgc3dhcHBpbmcgKi8KKwlpZiAoKigodm9sYXRpbGUgaW50ICopRU1JRlNfQ09ORklHKSAmIDB4MDAwMDAwMDIpCisJCXJldHVybihGTEFTSF9PTl9DUzMpOworCWVsc2UKKwkJcmV0dXJuKEZMQVNIX09OX0NTMCk7Cit9CisKKy8qIFRvZ2dsZSBiYWNrdXAgTEVEIGluZGljYXRpb24gKi8KK3ZvaWQgdG9nZ2xlX2JhY2t1cF9sZWQodm9pZCkKK3sKKwlzdGF0aWMgaW50ICBiYWNrdXBMRURTdGF0ZSA9IDA7ICAvKiBJbml0IHZhcmlhYmxlIHNvIHRoYXQgdGhlIExFRCB3aWxsIGJlIE9OIHRoZSBmaXJzdCB0aW1lICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpJT0NvbmZSZWc7CisKKworCUlPQ29uZlJlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIE9NQVA3MzBfR1BJT19CQVNFXzUgKyBHUElPX0RBVEFfT1VUUFVUKTsKKworCWlmIChiYWNrdXBMRURTdGF0ZSAhPSAwKSB7CisJCSpJT0NvbmZSZWcgJj0gKDB4RkZGRkVGRkYpOworCQliYWNrdXBMRURTdGF0ZSA9IDA7CisJfSBlbHNlIHsKKwkJKklPQ29uZlJlZyB8PSAoMHgwMDAwMTAwMCk7CisJCWJhY2t1cExFRFN0YXRlID0gMTsKKwl9Cit9CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKKyAqLworCitpbnQgYm9hcmRfaW5pdCAodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKklPQ29uZlJlZzsKKworCisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwkvKiBhcmNoIG51bWJlciBvZiBPTUFQIDczMCBQMiBCb2FyZCAtIFNhbWUgYXMgdGhlIElubm92YXRvciEgKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gNDkxOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDEwMDAwMTAwOworCisJLyogQ29uZmlndXJlIE1VWCBzZXR0aW5ncyAqLworCXNldF9tdXhjb25mX3JlZ3MgKCk7CisKKwlwZXJpcGhlcmFsX3Bvd2VyX2VuYWJsZSAoKTsKKworCisJLyogQmFja3VwIExFRCBpbmRpY2F0aW9uIHZpYSBHUElPXzE0MCAtPiBSZWQgbGVkIGlmIE1VWCBjb3JyZWN0bHkgc2V0dXAgKi8KKwl0b2dnbGVfYmFja3VwX2xlZCgpOworCisJLyogSG9sZCBHU00gaW4gcmVzZXQgdW50aWwgbmVlZGVkICovCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilNX0NUTCkgJj0gfjE7CisKKworCS8qCisJICogIENTeCB0aW1pbmdzLCBHUElPIE11eCAuLi4gc2V0dXAKKwkgKi8KKworCS8qIEZsYXNoOiBDUzAgdGltaW5ncyBzZXR1cCAqLworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBGTEFTSF9DRkdfMCkgPSAweDAwMDBmZmYzOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBGTEFTSF9BQ0ZHXzBfMSkgPSAweDAwMDAwMDg4OworCisJLyogRXRoZXJuZXQgc3VwcG9ydCB0cm91Z2ggdGhlIGRlYnVnIGJvYXJkICovCisJLyogQ1MxIHRpbWluZ3Mgc2V0dXAgKi8KKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgRkxBU0hfQ0ZHXzEpID0gMHgwMDAwZmZmMzsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgRkxBU0hfQUNGR18wXzEpID0gMHgwMDAwMDAwMDsKKworCS8qIHRoaXMgc3BlZWRzIHVwIHlvdXIgYm9vdCBhIHF1aXRlIGEgYml0LiAgSG93ZXZlciB0byBtYWtlIGl0CisJICogIHdvcmssIHlvdSBuZWVkIG1ha2Ugc3VyZSB5b3VyIGtlcm5lbCBzdGFydHVwIGZsdXNoIGJ1ZyBpcyBmaXhlZC4KKwkgKiAgLi4uIHJrdyAuLi4KKwkgKi8KKwlpY2FjaGVfZW5hYmxlICgpOworCisJZmxhc2hfX2luaXQgKCk7CisJZXRoZXJfX2luaXQgKCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1pc2NfaW5pdF9yICh2b2lkKQoreworCS8qIGN1cnJlbnRseSBlbXB0eSAqLworCXJldHVybiAoMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSb3V0aW5lOgorIERlc2NyaXB0aW9uOgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBmbGFzaF9faW5pdCAodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IHJlZ3ZhbDsKKworICAgICAgICByZWd2YWwgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgRU1JRlNfQ09ORklHKTsKKyAgICAgICAgLyogVHVybiBvZmYgd3JpdGUgcHJvdGVjdGlvbiBmb3IgZmxhc2ggZGV2aWNlcy4gKi8KKyAgICAgICAgcmVndmFsID0gcmVndmFsIHwgMHgwMDAxOworICAgICAgICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgRU1JRlNfQ09ORklHKSA9IHJlZ3ZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSb3V0aW5lOmV0aGVyX19pbml0CisgRGVzY3JpcHRpb246IHRha2UgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgb3V0IG9mIHJlc2V0IGFuZCB3YWl0CisJICAJCSAgIGZvciB0aGUgRUVQUk9NIGxvYWQgdG8gY29tcGxldGUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBldGhlcl9faW5pdCAodm9pZCkKK3sKKyNkZWZpbmUgTEFOX1JFU0VUX1JFR0lTVEVSIDB4MDQwMDAwMWMKKworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIExBTl9SRVNFVF9SRUdJU1RFUikgPSAweDAwMDA7CisJZG8geworCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBMQU5fUkVTRVRfUkVHSVNURVIpID0gMHgwMDAxOworCQl1ZGVsYXkgKDEwMCk7CisJfSB3aGlsZSAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgTEFOX1JFU0VUX1JFR0lTVEVSKSAhPSAweDAwMDEpOworCisJZG8geworCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBMQU5fUkVTRVRfUkVHSVNURVIpID0gMHgwMDAwOworCQl1ZGVsYXkgKDEwMCk7CisJfSB3aGlsZSAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgTEFOX1JFU0VUX1JFR0lTVEVSKSAhPSAweDAwMDApOworCisjZGVmaW5lIEVUSF9DT05UUk9MX1JFRyAweDA0MDAwMzBiCisKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIEVUSF9DT05UUk9MX1JFRykgJj0gfjB4MDE7CisJdWRlbGF5ICgxMDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZToKKyBEZXNjcmlwdGlvbjoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZTogc2V0X211eGNvbmZfcmVncworIERlc2NyaXB0aW9uOiBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIE11eCByZWdpc3RlcnMKKyAJCQkgIHNwZWNpZmljIHRvIHRoZSBoYXJkd2FyZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2V0X211eGNvbmZfcmVncyAodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKk11eENvbmZSZWc7CisJLyogc2V0IGVhY2ggcmVnaXN0ZXJzIHRvIGl0cyByZXNldCB2YWx1ZTsgKi8KKworCS8qCisJICogIEJhY2t1cCBMRUQgSW5kaWNhdGlvbgorCSAqLworCisJLyogQ29uZmlndXJlIE1VWGVkIHBpbi4gTW9kZSA2OiBHUElPXzE0MCAqLworCU11eENvbmZSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChQRVJTRVVTMl9JT19DT05GMTApOworCSpNdXhDb25mUmVnICY9ICgweEZGRkZGRjFGKTsgICAgICAgICAvKiBDbGVhciBEX01QVV9MUEcxICovCisJKk11eENvbmZSZWcgfD0gMHgwMDAwMDBDMDsgICAgICAgICAgIC8qIFNldCBEX01QVV9MUEcxIHRvIDB4NiAqLworCisJLyogQ29uZmlndXJlIEdQSU9fMTQwIGFzIG91dHB1dCAqLworCU11eENvbmZSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBPTUFQNzMwX0dQSU9fQkFTRV81ICsgR1BJT19ESVJFQ1RJT05fQ09OVFJPTCk7CisJKk11eENvbmZSZWcgJj0gKDB4RkZGRkVGRkYpOyAgICAgICAgIC8qIENsZWFyIGRpcmVjdGlvbiAob3V0cHV0KSBmb3IgR1BJTyAxNDAgKi8KKworCS8qCisJICogQ29uZmlndXJlIEdQSU9zIGZvciBiYXR0ZXJ5IGNoYXJnZSAmIGZlZWRiYWNrCisJICovCisKKwkvKiBDb25maWd1cmUgTVVYZWQgcGluLiBNb2RlIDY6IEdQSU9fMzUgKi8KKwlNdXhDb25mUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoUEVSU0VVUzJfSU9fQ09ORjMpOworCSpNdXhDb25mUmVnICY9IDB4RkZGRkZGRjE7ICAgICAgICAgICAvKiBDbGVhciBNX0NMS19PVVQgKi8KKwkqTXV4Q29uZlJlZyB8PSAweDAwMDAwMDBDOyAgICAgICAgICAgLyogU2V0IE1fQ0xLX09VVCA9IDB4NiAoR1BJT3MpICovCisKKwkvKiBDb25maWd1cmUgTVVYZWQgcGluLiBNb2RlIDY6IEdQSU9fNzIsNzMsNzQgKi8KKwlNdXhDb25mUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoUEVSU0VVUzJfSU9fQ09ORjUpOworCSpNdXhDb25mUmVnICY9IDB4RkZGRjFGRkY7ICAgICAgICAgICAvKiBDbGVhciBEX0REUiAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwMEMwMDA7ICAgICAgICAgICAvKiBTZXQgRF9ERFIgPSAweDYgKEdQSU9zKSAqLworCisJTXV4Q29uZlJlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIE9NQVA3MzBfR1BJT19CQVNFXzMgKyBHUElPX0RJUkVDVElPTl9DT05UUk9MKTsKKwkqTXV4Q29uZlJlZyB8PSAweDAwMDAwMTAwOyAgICAgICAgICAgLyogQ29uZmlndXJlIEdQSU9fNzIgYXMgaW5wdXQgKi8KKwkqTXV4Q29uZlJlZyAmPSAweEZGRkZGREZGOyAgICAgICAgICAgLyogQ29uZmlndXJlIEdQSU9fNzMgYXMgb3V0cHV0CSovCisKKwkvKgorCSAqIEFsbG93IGJhdHRlcnkgY2hhcmdlCisJICovCisKKwlNdXhDb25mUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgT01BUDczMF9HUElPX0JBU0VfMyArIEdQSU9fREFUQV9PVVRQVVQpOworCSpNdXhDb25mUmVnICY9ICgweEZGRkZGREZGKTsgICAgICAgICAvKiBDbGVhciBHUElPXzczIHBpbiAqLworCisJLyoKKwkgKiBDb25maWd1cmUgTVBVX0VYVF9OSVJRIElPIGluIElPX0NPTkY5IHJlZ2lzdGVyLAorCSAqIEl0IGlzIHVzZWQgYXMgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgaW50ZXJydXB0CisJICovCisJTXV4Q29uZlJlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKFBFUlNFVVMyX0lPX0NPTkY5KTsKKwkqTXV4Q29uZlJlZyAmPSAweDFGRkZGRkZGOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZTogcGVyaXBoZXJhbF9wb3dlcl9lbmFibGUKKyBEZXNjcmlwdGlvbjogRW5hYmxlIHRoZSBwb3dlciBmb3IgVUFSVDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHBlcmlwaGVyYWxfcG93ZXJfZW5hYmxlICh2b2lkKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqTXV4Q29uZlJlZzsKKworCisJLyogU2V0IHVwIHBpbnMgdXNlZCBieSBVQVJUICovCisKKwkvKiBTdGFydCBVQVJUIGNsb2NrICg0OE1IeikgKi8KKwlNdXhDb25mUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoUEVSU0VVU19QQ0NfQ09ORl9SRUcpOworCSpNdXhDb25mUmVnICY9ICgweEZGRkZGRkY3KTsKKwkqTXV4Q29uZlJlZyB8PSAoMHgwMDAwMDAwOCk7CisKKwkvKiBHZXQgdGhlIFVBUlQgcGluIGluIG1vZGUwICAqLworCU11eENvbmZSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChQRVJTRVVTMl9JT19DT05GMyk7CisJKk11eENvbmZSZWcgJj0gKDB4RkYxRkZGRkYpOworCSpNdXhDb25mUmVnICY9ICgweEYxRkZGRkZGKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA3MzBwMi9wbGF0Zm9ybS5TIGIvYm9hcmQvb21hcDczMHAyL3BsYXRmb3JtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxYzk1YQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXA3MzBwMi9wbGF0Zm9ybS5TCkBAIC0wLDAgKzEsMzk1IEBACisvKgorICogQm9hcmQgc3BlY2lmaWMgc2V0dXAgaW5mbworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0CisgKgorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CisgKgorICogTW9kaWZpZWQgZm9yIE9NQVAgMTYxMCBIMiBib2FyZCBieSBOaXNoYW50IEthbWF0LCBKYW4gMjAwNAorICoKKyAqIE1vZGlmaWVkIGZvciBPTUFQNzMwIFAyIEJvYXJkIGJ5IERhdmUgUGV2ZXJsZXksIE1QQy1EYXRhIExpbWl0ZWQKKyAqIChodHRwOi8vd3d3Lm1wYy1kYXRhLmNvLnVrKQorICoKKyAqIFRPRE8gOiBUaWR5IHVwIGFuZCBjaGFuZ2UgdG8gdXNlIHN5c3RlbSByZWdpc3RlciBkZWZpbmVzCisgKiAgICAgICAgZnJvbSBvbWFwNzMwLmggd2hlcmUgcG9zc2libGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworI2lmIGRlZmluZWQoQ09ORklHX09NQVA3MzApCisjaW5jbHVkZSA8Li9jb25maWdzL29tYXA3MzAuaD4KKyNlbmRpZgorCitfVEVYVF9CQVNFOgorCS53b3JkCVRFWFRfQkFTRQkvKiBzZHJhbSBsb2FkIGFkZHIgZnJvbSBjb25maWcubWsgKi8KKworLmdsb2JsIHBsYXRmb3Jtc2V0dXAKK3BsYXRmb3Jtc2V0dXA6CisJLyogU2F2ZSBjYWxsZXJzIGFkZHJlc3MgaW4gcjExIC0gcjExIG11c3QgbmV2ZXIgYmUgbW9kaWZpZWQgKi8KKwltb3YgcjExLCBscgorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisJICptYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1SIGRlZmF1bHQqCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW1vdglyMSwJIzB4ZmZmZmZmZmYKKwlsZHIJcjAsCT1SRUdfSUhMMV9NSVIKKwlzdHIJcjEsCVtyMF0KKwlsZHIJcjAsCT1SRUdfSUhMMl9NSVIKKwlzdHIJcjEsCVtyMF0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorCSAqIFNldCB1cCBBUk0gQ0xNIHJlZ2lzdGVycyAoSURMRUNUMSkgICAgICAgICAgICAgICAgICAgKgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsZHIJcjAsCVJFR19BUk1fSURMRUNUMQorCWxkcglyMSwJVkFMX0FSTV9JRExFQ1QxCisJc3RyCXIxLAlbcjBdCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKwkgKiBTZXQgdXAgQVJNIENMTSByZWdpc3RlcnMgKElETEVDVDIpICAJCSAgICAgICAgKgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsZHIJcjAsCVJFR19BUk1fSURMRUNUMgorCWxkcglyMSwJVkFMX0FSTV9JRExFQ1QyCisJc3RyCXIxLAlbcjBdCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKwkgKiBTZXQgdXAgQVJNIENMTSByZWdpc3RlcnMgKElETEVDVDMpCQkgICAgICAgICoKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbGRyCXIwLAlSRUdfQVJNX0lETEVDVDMKKwlsZHIJcjEsCVZBTF9BUk1fSURMRUNUMworCXN0cglyMSwJW3IwXQorCisKKwltb3YJcjEsCSMweDAxCQkvKiBQRVJfRU4gYml0ICovCisJbGRyCXIwLAlSRUdfQVJNX1JTVENUMgorCXN0cmgJcjEsCVtyMF0JCS8qIENMS007IFBlcmlwaGVyYWwgcmVzZXQuICovCisKKwkvKiBTZXQgQ0xLTSB0byBTeW5jLVNjYWxhYmxlCSovCisJLyogSSBzdXBwb3NlZGx5IG5lZWQgdG8gZW5hYmxlIHRoZSBkc3AgY2xvY2sgYmVmb3JlIHN3aXRjaGluZyAqLworCW1vdglyMSwJIzB4MTAwMAorCWxkcglyMCwJUkVHX0FSTV9TWVNTVAorCXN0cmgJcjEsCVtyMF0KKwltb3YJcjAsCSMweDQwMAorMToKKwlzdWJzCXIwLAlyMCwJIzB4MQkvKiB3YWl0IGZvciBhbnkgYnViYmxlcyB0byBmaW5pc2ggKi8KKwlibmUJMWIKKwlsZHIJcjEsCVZBTF9BUk1fQ0tDVEwKKwlsZHIJcjAsCVJFR19BUk1fQ0tDVEwKKwlzdHJoCXIxLAlbcjBdCisKKwkvKiBhIGZldyBub3BzIHRvIGxldCBzZXR0bGUgKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworCS8qIHNldHVwIERQTEwgMSAqLworCS8qIFJhbXAgdXAgdGhlIGNsb2NrIHRvIDk2TWh6ICovCisJbGRyCXIxLAlWQUxfRFBMTDFfQ1RMCisJbGRyCXIwLAlSRUdfRFBMTDFfQ1RMCisJc3RyaAlyMSwJW3IwXQorCWFuZHMJcjEsCXIxLAkjMHgxMAkvKiBDaGVjayBpZiBQTEwgaXMgZW5hYmxlZC4gKi8KKwliZXEJbG9ja19lbmQJLyogRG8gbm90IGxvb2sgZm9yIGxvY2sgaWYgQllQQVNTIHNlbGVjdGVkICovCisyOgorCWxkcmgJcjEsCVtyMF0KKwlhbmRzCXIxLAlyMSwJIzB4MDEJLyoJQ2hlY2sgdGhlIExPQ0sgYml0LiovCisJYmVxIDJiCQkJLyoJbG9vcCB1bnRpbCBiaXQgZ29lcyBoaS4gKi8KK2xvY2tfZW5kOgorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisJICogVHVybiBvZmYgdGhlIHdhdGNoZG9nIGR1cmluZyBpbml0Li4uCQkJKgorIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbGRyCXIwLAlSRUdfV0FUQ0hET0cKKwlsZHIJcjEsCVdBVENIRE9HX1ZBTDEKKwlzdHIJcjEsCVtyMF0KKwlsZHIJcjEsCVdBVENIRE9HX1ZBTDIKKwlzdHIJcjEsCVtyMF0KKwlsZHIJcjAsCVJFR19XU1BSRE9HCisJbGRyCXIxLAlXU1BSRE9HX1ZBTDEKKwlzdHIJcjEsCVtyMF0KKwlsZHIJcjAsCVJFR19XV1BTRE9HCisKK3dhdGNoMVdhaXQ6CisJbGRyCXIxLAlbcjBdCisJdHN0CXIxLAkjMHgxMAorCWJuZQl3YXRjaDFXYWl0CisKKwlsZHIJcjAsCVJFR19XU1BSRE9HCisJbGRyCXIxLAlXU1BSRE9HX1ZBTDIKKwlzdHIJcjEsCVtyMF0KKwlsZHIJcjAsCVJFR19XV1BTRE9HCit3YXRjaDJXYWl0OgorCWxkcglyMSwJW3IwXQorCXRzdAlyMSwJIzB4MTAKKwlibmUJd2F0Y2gyV2FpdAorCisJLyogU2V0IG1lbW9yeSB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5ldyBjbG9jayBzcGVlZCAqLworCisJLyogQ2hlY2sgZXhlY3V0aW9uIGxvY2F0aW9uIHRvIGRldGVybWluZSBjdXJyZW50IGV4ZWN1dGlvbiBsb2NhdGlvbgorCSAqIGFuZCBicmFuY2ggdG8gYXBwcm9wcmlhdGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKwkgKi8KKwkvKiBDb21wYXJlIHBoeXNpY2FsIFNEUkFNIGJhc2UgJiBjdXJyZW50IGV4ZWN1dGlvbiBsb2NhdGlvbi4gKi8KKwlhbmQgICAgIHIwLCBwYywgIzB4RjAwMDAwMDAKKwkvKiBDb21wYXJlLiAqLworCWNtcCAgICAgcjAsICMwCisJLyogU2tpcCBvdmVyIEVNSUYtZmFzdCBpbml0aWFsaXphdGlvbiBpZiBydW5uaW5nIGZyb20gU0RSQU0uICovCisJYm5lIAlza2lwX3NkcmFtCisKKwkvKgorCSogRGVsYXkgZm9yIFNEUkFNIGluaXRpYWxpemF0aW9uLgorCSovCisJbW92CXIzLAkjMHgxODAwCQkvKiB2YWx1ZSBzaG91bGQgYmUgY2hlY2tlZCAqLworMzoKKwlzdWJzCXIzLAlyMywJIzB4MQkvKiBEZWNyZW1lbnQgY291bnQgKi8KKwlibmUgCTNiCisKKwlsZHIJcjAsCVJFR19TRFJBTV9DT05GSUcKKwlsZHIJcjEsCVNEUkFNX0NPTkZJR19WQUwKKwlzdHIJcjEsCVtyMF0KKworCWxkcglyMCwJUkVHX1NEUkFNX01SU19MRUdBQ1kKKwlsZHIJcjEsCVNEUkFNX01SU19WQUwKKwlzdHIJcjEsCVtyMF0KKworc2tpcF9zZHJhbToKKworY29tbW9uX3RjOgorCS8qIHNsb3cgaW50ZXJmYWNlICovCisJbGRyCXIxLAlWQUxfVENfRU1JRlNfQ1MwX0NPTkZJRworCWxkcglyMCwJUkVHX1RDX0VNSUZTX0NTMF9DT05GSUcKKwlzdHIJcjEsCVtyMF0gLyogQ2hpcCBTZWxlY3QgMCAqLworCisJbGRyCXIxLAlWQUxfVENfRU1JRlNfQ1MxX0NPTkZJRworCWxkcglyMCwJUkVHX1RDX0VNSUZTX0NTMV9DT05GSUcKKwlzdHIJcjEsCVtyMF0gLyogQ2hpcCBTZWxlY3QgMSAqLworCWxkcglyMSwJVkFMX1RDX0VNSUZTX0NTMl9DT05GSUcKKwlsZHIJcjAsCVJFR19UQ19FTUlGU19DUzJfQ09ORklHCisJc3RyCXIxLAlbcjBdIC8qIENoaXAgU2VsZWN0IDIgKi8KKwlsZHIJcjEsCVZBTF9UQ19FTUlGU19DUzNfQ09ORklHCisJbGRyCXIwLAlSRUdfVENfRU1JRlNfQ1MzX0NPTkZJRworCXN0cglyMSwJW3IwXSAvKiBDaGlwIFNlbGVjdCAzICovCisKKwkvKiA0OE1IeiBjbG9jayByZXF1ZXN0IGZvciBVQVJUMSAqLworCWxkcglyMSwJUEVSU0VVUzJfQ09ORklHX0JBU0UKKwlsZHJoCXIwLAlbcjEsICNDT05GSUdfUENDX0NPTkZdCisJb3JyCXIwLAlyMCwgI0NPTkZfTU9EX1VBUlQxX0NMS19NT0RFX1IKKwlzdHJoCXIwLAlbcjEsICNDT05GSUdfUENDX0NPTkZdCisKKwkvKiBJbml0aWFsaXplIHB1YmxpYyBhbmQgcHJpdmF0ZSByaGVhcworCSAqICAtIHNldCBhY2Nlc3MgZmFjdG9yIDIgb24gYm90aCByaGVhIC8gc3Ryb2JlCisJICogIC0gZGlzYWJsZSB3cml0ZSBidWZmZXIgb24gc3RyYjAsIGVuYWJsZSB3cml0ZSBidWZmZXIgb24gc3RyYjEKKwkgKi8KKworCWxkcglSMCwJUkVHX1JIRUFfUFVCX0NUTAorCWxkcglSMSwJUkVHX1JIRUFfUFJJVl9DVEwKKwlsZHIJUjIsCVZBTF9SSEVBX0NUTAorCXN0cmgJUjIsCVtSMF0KKwlzdHJoCVIyLAlbUjFdCisJbW92CVIzLAkjMiAgICAgICAgICAvKiBkaXNhYmxlIHdyaXRlIGJ1ZmZlciBvbiBzdHJiMCwgZW5hYmxlIHdyaXRlIGJ1ZmZlciBvbiBzdHJiMSAqLworCXN0cmgJUjMsCVtSMCwgIzB4MDhdCS8qIGFybSByaGVhIGNvbnRyb2wgcmVnICovCisJc3RyaAlSMywJW1IxLCAjMHgwOF0KKworCS8qIGVuYWJsZSBJUlEgYW5kIEZJUSAqLworCisJbXJzCXI0LAlDUFNSCisJYmljCXI0LAlyNCwgI0lSUV9NQVNLCisJYmljCXI0LAlyNCwgI0ZJUV9NQVNLCisJbXNyCUNQU1IsCXI0CisKKwkvKiBzZXQgVEFQIENPTkYgdG8gVFJJIEVNVUxBVElPTiAqLworCisJbGRyCXIxLAlbcjAsICNDT05GSUdfTU9ERTJdCisJYmljCXIxLAlyMSwgIzB4MTgKKwlvcnIJcjEsCXIxLCAjMHgxMAorCXN0cglyMSwJW3IwLCAjQ09ORklHX01PREUyXQorCisJLyogc2V0IHRkYmdlbiB0byAxICovCisKKwlsZHIJcjAsCVBFUlNFVVMyX0NPTkZJR19CQVNFCisJbGRyCXIxLAlbcjAsICNDT05GSUdfTU9ERTFdCisJbW92CXIyLAkjMHgxMDAwMAorCW9ycglyMSwJcjEsIHIyCisJc3RyCXIxLAlbcjAsICNDT05GSUdfTU9ERTFdCisKKyNpZmRlZiBDT05GSUdfUDJfT01BUDE2MTAKKwkvKiBpbnNlcnRpbmcgYWRkaXRpb25hbCAyIGNsb2NrIGN5Y2xlIGhvbGQgdGltZSBmb3IgTEFOICovCisJbGRyICAgICByMCwgICAgIFJFR19UQ19FTUlGU19DUzFfQURWQU5DRUQKKwlsZHIgICAgCXIxLCAgICAgVkFMX1RDX0VNSUZTX0NTMV9BRFZBTkNFRAorCXN0ciAgICAgcjEsICAgICBbcjBdCisjZW5kaWYKKwkvKiBTdGFydCBNUFUgVGltZXIgMSAqLworCWxkcglyMCwJUkVHX01QVV9MT0FEX1RJTUVSCisJbGRyCXIxLAlWQUxfTVBVX0xPQURfVElNRVIKKwlzdHIJcjEsCVtyMF0KKworCWxkcglyMCwJUkVHX01QVV9DTlRMX1RJTUVSCisJbGRyCXIxLAlWQUxfTVBVX0NOVExfVElNRVIKKwlzdHIJcjEsCVtyMF0KKworCS8qIGJhY2sgdG8gYXJjaCBjYWxsaW5nIGNvZGUgKi8KKwltb3YJcGMsCXIxMQorCisJLyogdGhlIGxpdGVyYWwgcG9vbHMgb3JpZ2luICovCisJLmx0b3JnCisKK1JFR19UQ19FTUlGU19DT05GSUc6CQkvKiAzMiBiaXRzICovCisJLndvcmQgMHhmZmZlY2MwYworUkVHX1RDX0VNSUZTX0NTMF9DT05GSUc6CS8qIDMyIGJpdHMgKi8KKwkud29yZCAweGZmZmVjYzEwCitSRUdfVENfRU1JRlNfQ1MxX0NPTkZJRzoJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjMTQKK1JFR19UQ19FTUlGU19DUzJfQ09ORklHOgkvKiAzMiBiaXRzICovCisJLndvcmQgMHhmZmZlY2MxOAorUkVHX1RDX0VNSUZTX0NTM19DT05GSUc6CS8qIDMyIGJpdHMgKi8KKwkud29yZCAweGZmZmVjYzFjCisKKyNpZmRlZiBDT05GSUdfUDJfT01BUDczMAorUkVHX1RDX0VNSUZTX0NTMV9BRFZBTkNFRDoJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjNTQKKyNlbmRpZgorCisvKiBNUFUgY2xvY2svcmVzZXQvcG93ZXIgbW9kZSBjb250cm9sIHJlZ2lzdGVycyAqLworUkVHX0FSTV9DS0NUTDoJCQkvKiAxNiBiaXRzICovCisJLndvcmQgMHhmZmZlY2UwMAorCitSRUdfQVJNX0lETEVDVDM6CQkvKiAxNiBiaXRzICovCisJLndvcmQgMHhmZmZlY2UyNAorUkVHX0FSTV9JRExFQ1QyOgkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNlMDgKK1JFR19BUk1fSURMRUNUMToJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZTA0CisKK1JFR19BUk1fUlNUQ1QyOgkJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZTE0CitSRUdfQVJNX1NZU1NUOgkJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZTE4CisvKiBEUExMIGNvbnRyb2wgcmVnaXN0ZXJzICovCitSRUdfRFBMTDFfQ1RMOgkJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZjAwCisKKy8qIFdhdGNoIERvZyByZWdpc3RlciAqLworLyogc2VjdXJlIHdhdGNoZG9nIHN0b3AgKi8KK1JFR19XU1BSRE9HOgorCS53b3JkIDB4ZmZmZWIwNDgKKy8qIHdhdGNoZG9nIHdyaXRlIHBlbmRpbmcgKi8KK1JFR19XV1BTRE9HOgorCS53b3JkIDB4ZmZmZWIwMzQKKworV1NQUkRPR19WQUwxOgorCS53b3JkIDB4MDAwMGFhYWEKK1dTUFJET0dfVkFMMjoKKwkud29yZCAweDAwMDA1NTU1CisKKy8qIFNEUkFNIGNvbmZpZyBpczogYXV0byByZWZyZXNoIGVuYWJsZWQsIDE2IGJpdCA0IGJhbmssCisgY291bnRlciBAODE5MiByb3dzLCAxMCBucywgOCBidXJzdCAqLworUkVHX1NEUkFNX0NPTkZJRzoKKwkud29yZCAweGZmZmVjYzIwCisKK1JFR19TRFJBTV9NUlNfTEVHQUNZOgorCS53b3JkIDB4ZmZmZWNjMjQKKworUkVHX1dBVENIRE9HOgorCS53b3JkIDB4ZmZmZWM4MDgKKworUkVHX01QVV9MT0FEX1RJTUVSOgorCS53b3JkIDB4ZmZmZWM2MDAKK1JFR19NUFVfQ05UTF9USU1FUjoKKwkud29yZCAweGZmZmVjNTAwCisKKy8qIFB1YmxpYyBhbmQgcHJpdmF0ZSByaGVhIGJyaWRnZSByZWdpc3RlcnMgZGVmaW5pdGlvbiAqLworCitSRUdfUkhFQV9QVUJfQ1RMOgorCS53b3JkIDB4RkZGRUNBMDAKKworUkVHX1JIRUFfUFJJVl9DVEw6CisJLndvcmQgMHhGRkZFRDMwMAorCisvKiBFTUlGRiBTRFJBTSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyCisgICAtIHNlbGYgcmVmcmVzaCBkaXNhYmxlCisgICAtIGF1dG8gcmVmcmVzaCBlbmFibGVkCisgICAtIFNEUkFNIHR5cGUgNjQgTWIsIDE2IGJpdHMgYnVzIDQgYmFua3MKKyAgIC0gcG93ZXIgZG93biBlbmFibGVkCisgICAtIFNEUkFNIGNsb2NrIGRpc2FibGVkCisgKi8KK1NEUkFNX0NPTkZJR19WQUw6CisJLndvcmQgMHgwQzAxN0RGNAorCisvKiBCdXJzdCBmdWxsIHBhZ2UgbGVuZ3RoIDsgY2FzIGxhdGVuY3kgPSAzICovCitTRFJBTV9NUlNfVkFMOgorCS53b3JkIDB4MDAwMDAwMzcKKworVkFMX0FSTV9DS0NUTDoKKwkud29yZCAweDY1MDUKK1ZBTF9EUExMMV9DVEw6CisJLndvcmQgMHgzNDEyCisKKyNpZmRlZiBDT05GSUdfUDJfT01BUDczMAorVkFMX1RDX0VNSUZTX0NTMF9DT05GSUc6CisJLndvcmQgMHgwMDAwRkZGMworVkFMX1RDX0VNSUZTX0NTMV9DT05GSUc6CisJLndvcmQgMHgwMDAwNDI3OAorVkFMX1RDX0VNSUZTX0NTMl9DT05GSUc6CisJLndvcmQgMHgwMDAwNDI3OAorVkFMX1RDX0VNSUZTX0NTM19DT05GSUc6CisJLndvcmQgMHgwMDAwNDI3OAorVkFMX1RDX0VNSUZTX0NTMV9BRFZBTkNFRDoKKwkud29yZCAweDAwMDAwMDIyCisjZW5kaWYKKworVkFMX0FSTV9JRExFQ1QxOgorCS53b3JkIDB4MDAwMDA0MDAKK1ZBTF9BUk1fSURMRUNUMjoKKwkud29yZCAweDAwMDAwODg2CitWQUxfQVJNX0lETEVDVDM6CisJLndvcmQgMHgwMDAwMDAxNQorCitXQVRDSERPR19WQUwxOgorCS53b3JkIDB4MDAwMDAwZjUKK1dBVENIRE9HX1ZBTDI6CisJLndvcmQgMHgwMDAwMDBhMAorCitWQUxfTVBVX0xPQURfVElNRVI6CisJLndvcmQgMHhmZmZmZmZmZgorVkFMX01QVV9DTlRMX1RJTUVSOgorCS53b3JkIDB4ZmZmZmZmYTEKKworVkFMX1JIRUFfQ1RMOgorCS53b3JkCQkJMHhGRjIyCisKKy8qIENvbmZpZyBSZWdpc3RlciB2YWxzICovCitQRVJTRVVTMl9DT05GSUdfQkFTRToKKwkud29yZAkJCTB4RkZGRTEwMDAKKworLmVxdQlDT05GSUdfUENDX0NPTkYsCTB4QjQKKy5lcXUJQ09ORklHX01PREUxLAkJMHgxMAorLmVxdQlDT05GSUdfTU9ERTIsCQkweDE0CisuZXF1CUNPTkZfTU9EX1VBUlQxX0NMS19NT0RFX1IsCTB4MEEKKworLyogbWlzYyB2YWx1ZXMgKi8KKy5lcXUJSVJRX01BU0ssCQkweDgwICAgICAgICAgICAvLyBJUlEgbWFzayB2YWx1ZQorLmVxdQlGSVFfTUFTSywJCTB4NDAgICAgICAgICAgIC8vIEZJUSBtYXNrIHZhbHVlCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwNzMwcDIvdS1ib290LmxkcyBiL2JvYXJkL29tYXA3MzBwMi91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTQ4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNzMwcDIvdS1ib290LmxkcwpAQCAtMCwwICsxLDUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKwkuID0gQUxJR04oNCk7CisJLnRleHQJOgorCXsKKwkgIGNwdS9hcm05MjZlanMvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2NvbW1vbi9taWlwaHl1dGlsLmMgYi9jb21tb24vbWlpcGh5dXRpbC5jCmluZGV4IDcyMWQxMDkuLjJiMGRjZjQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9taWlwaHl1dGlsLmMKKysrIGIvY29tbW9uL21paXBoeXV0aWwuYwpAQCAtMTQ3LDE1ICsxNDcsMzEgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BIWV9HSUdFICovCiAKLQlpZiAobWlpcGh5X3JlYWQgKGFkZHIsIFBIWV9BTkxQQVIsICZyZWcpKSB7Ci0JCXB1dHMgKCJQSFkgc3BlZWQxIHJlYWQgZmFpbGVkLCBhc3N1bWluZyAxMGJUXG4iKTsKKwkvKiBDaGVjayBCYXNpYyBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgZmlyc3QuICovCisJaWYgKG1paXBoeV9yZWFkIChhZGRyLCBQSFlfQk1DUiwgJnJlZykpIHsKKwkJcHV0cyAoIlBIWSBzcGVlZCByZWFkIGZhaWxlZCwgYXNzdW1pbmcgMTBiVFxuIik7CiAJCXJldHVybiAoXzEwQkFTRVQpOwogCX0KLQlpZiAoKHJlZyAmIFBIWV9BTkxQQVJfMTAwKSAhPSAwKSB7CisJLyogQ2hlY2sgaWYgYXV0by1uZWdvdGlhdGlvbiBpcyBvbi4gKi8KKwlpZiAoKHJlZyAmIFBIWV9CTUNSX0FVVE9OKSAhPSAwKSB7CisJCS8qIEdldCBhdXRvLW5lZ290aWF0aW9uIHJlc3VsdHMuICovCisJCWlmIChtaWlwaHlfcmVhZCAoYWRkciwgUEhZX0FOTFBBUiwgJnJlZykpIHsKKwkJCXB1dHMgKCJQSFkgQU4gc3BlZWQgcmVhZCBmYWlsZWQsIGFzc3VtaW5nIDEwYlRcbiIpOworCQkJcmV0dXJuIChfMTBCQVNFVCk7CisJCX0KKwkJaWYgKChyZWcgJiBQSFlfQU5MUEFSXzEwMCkgIT0gMCkgeworCQkJcmV0dXJuIChfMTAwQkFTRVQpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIChfMTBCQVNFVCk7CisJCX0KKwl9CisJLyogR2V0IHNwZWVkIGZyb20gYmFzaWMgY29udHJvbCBzZXR0aW5ncy4gKi8KKwllbHNlIGlmIChyZWcgJiBQSFlfQk1DUl8xMDBNQikgewogCQlyZXR1cm4gKF8xMDBCQVNFVCk7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIChfMTBCQVNFVCk7CiAJfQorCiB9CiAKIApAQCAtMTgyLDE2ICsxOTgsMzIgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BIWV9HSUdFICovCiAKLQlpZiAobWlpcGh5X3JlYWQgKGFkZHIsIFBIWV9BTkxQQVIsICZyZWcpKSB7CisJLyogQ2hlY2sgQmFzaWMgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyIGZpcnN0LiAqLworCWlmIChtaWlwaHlfcmVhZCAoYWRkciwgUEhZX0JNQ1IsICZyZWcpKSB7CiAJCXB1dHMgKCJQSFkgZHVwbGV4IHJlYWQgZmFpbGVkLCBhc3N1bWluZyBoYWxmIGR1cGxleFxuIik7CiAJCXJldHVybiAoSEFMRik7CiAJfQorCS8qIENoZWNrIGlmIGF1dG8tbmVnb3RpYXRpb24gaXMgb24uICovCisJaWYgKChyZWcgJiBQSFlfQk1DUl9BVVRPTikgIT0gMCkgeworCQkvKiBHZXQgYXV0by1uZWdvdGlhdGlvbiByZXN1bHRzLiAqLworCQlpZiAobWlpcGh5X3JlYWQgKGFkZHIsIFBIWV9BTkxQQVIsICZyZWcpKSB7CisJCQlwdXRzICgiUEhZIEFOIGR1cGxleCByZWFkIGZhaWxlZCwgYXNzdW1pbmcgaGFsZiBkdXBsZXhcbiIpOworCQkJcmV0dXJuIChIQUxGKTsKKwkJfQogCi0JaWYgKChyZWcgJiAoUEhZX0FOTFBBUl8xMEZEIHwgUEhZX0FOTFBBUl9UWEZEKSkgIT0gMCkgeworCQlpZiAoKHJlZyAmIChQSFlfQU5MUEFSXzEwRkQgfCBQSFlfQU5MUEFSX1RYRkQpKSAhPSAwKSB7CisJCQlyZXR1cm4gKEZVTEwpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIChIQUxGKTsKKwkJfQorCX0KKwkvKiBHZXQgc3BlZWQgZnJvbSBiYXNpYyBjb250cm9sIHNldHRpbmdzLiAqLworCWVsc2UgaWYgKHJlZyAmIFBIWV9CTUNSX0RQTFgpIHsKIAkJcmV0dXJuIChGVUxMKTsKIAl9IGVsc2UgewogCQlyZXR1cm4gKEhBTEYpOwogCX0KKwogfQogCiAjaWZkZWYgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL3N0YXJ0LlMgYi9jcHUvYXJtOTI2ZWpzL3N0YXJ0LlMKaW5kZXggNTFhMjYwNS4uYWQ1ZDg0NyAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy9zdGFydC5TCisrKyBiL2NwdS9hcm05MjZlanMvc3RhcnQuUwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAzICBUZXhhcyBJbnN0cnVtZW50cwogICoKLSAqICAtLS0tLSBBZGFwdGVkIGZvciBPTUFQMTYxMCBmcm9tIEFSTTkyNXQgY29kZSAtLS0tLS0KKyAqICAtLS0tLSBBZGFwdGVkIGZvciBPTUFQMTYxMCBPTUFQNzMwIGZyb20gQVJNOTI1dCBjb2RlIC0tLS0tLQogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgogICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CkBAIC0zNiw2ICszNiw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKICNpbmNsdWRlIDwuL2NvbmZpZ3Mvb21hcDE1MTAuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX09NQVA3MzApCisjaW5jbHVkZSA8Li9jb25maWdzL29tYXA3MzAuaD4KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5vbWFwNzMwcDIgYi9kb2MvUkVBRE1FLm9tYXA3MzBwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDUyMzRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5vbWFwNzMwcDIKQEAgLTAsMCArMSw5NSBAQAorCisgICAgICAgICAgICAgICAgICAgICB1LWJvb3QgZm9yIHRoZSBUSSBPTUFQNzMwIFBlcnNldXMyCisKKyAgICAgICAgICAgICAgICAgICAgICBEYXZlIFBldmVybGV5LCBNUEMtRGF0YSBMaW1pdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubXBjLWRhdGEuY28udWsKKworCitPdmVydmlldyA6CisKKyBBcyB0aGUgT01BUDczMCBpcyBzaW1pbGFyIHRvIHRoZSBPTUFQMTYxMCBpbiBtYW55IHdheXMsIHRoaXMgcG9ydCB3YXMgYmFzZWQgCitvbiB0aGUgdS1ib290IHBvcnQgdG8gdGhlIE9NQVAxNjEwIElubm92YXRvci4gU3VwcG9ydGVkIGZlYXR1cmVzIGFyZSA6CisKKyAgLSBTZXJpYWwgdGVybWluYWwgc3VwcG9ydAorICAtIE9uYm9hcmQgTk9SIEZsYXNoCisgIC0gRXRoZXJuZXQgdmlhIHRoZSBzZXBlcmF0ZSBkZWJ1ZyBib2FyZAorICAtIFRlc3RlZCBvbiBSZXY0IGFuZCBSZXY1IGJvYXJkcworCisgSXQgaGFzIGFsc28gYmVlbiB0ZXN0ZWQgdG8gd29yayBjb3JyZWN0bHkgd2hlbiBidWlsdCB3aXRoIGEgJ3N0YW5kYXJkJyBHQ0MKKzMuMi4xIGNyb3NzLWNvbXBpbGVyIGFzIHdlbGwgYXMgTW9udGF2aXN0YSBMaW51eCBDRUUgMy4xJ3MgdG9vbGNoYWluLgorCisKKworSGFyZHdhcmUgQ29uZmlndXJhdGlvbiA6CisKKyBUaGUgbWFpbiBkaXBzIG9uIHRoZSBQMiBib2FyZCBzaG91bGQgYmUgc2V0IHRvIDIsMyw3IGFuZCA5IG9uIHdpdGggYWxsIAorb3RoZXJzIG9mZi4gT24gdGhlIGRlYnVnIGJvYXJkLCBkaXBzIDEgYW5kIDcgc2hvdWxkIGJlIG9uIHdpdGggdGhlIHJlc3Qgb2ZmLgorVGhlIHNlcmlhbCBjb25zb2xlIGhhcyBiZWVuIHNldCB1cCB0byBydW4gZnJvbSB0aGUgREI5IGNvbm5lY3RvciBvbiB0aGUgCitQMiBib2FyZCBhdCAxMTUyMDAgYmF1ZCwgOCBkYXRhIGJpdHMsIG5vIHN0b3AgYml0cywgMSBwYXJpdHkgYml0LiAKKworIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZSBQMiBib2FyZCBoYXMgTk9SIGZsYXNoIHRoYXQgaXMgYWRkcmVzc2FibGUgdmlhCitlaXRoZXIgQ1MwIG9yIENTMy4gVGhpcyBtb2RlIGNhbiBiZSBjaGFuZ2VkIHZpYSBESVA5IG9uIHRoZSBQMiBib2FyZC4gCisKKworCitJbnN0YWxsaW5nIHUtYm9vdCBmb3IgdGhlIFAyIDoKKworIFlvdSBjYW4gc2ltcGx5IGJ1aWxkIHUtYm9vdCBmb3IgdGhlIFBlcnNldXMgYnkgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMKK2luIHRoZSBtYWluIHJlYWRtZSBmaWxlLiBUaGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gaXMgIm9tYXA3MzBwMl9jb25maWciLgorT25jZSB1LWJvb3QgaGFzIGJlZW4gYnVpbHQsIHlvdSBzaG91bGQgc3RyaXAgdGhlIGV4ZWN1dGFibGUgc28gaXQgY2FuIGJlCitsb2FkZWQgdmlhIENDUyAod2hpY2ggY2FudCBjb3BlIHdpdGggdGhlIHN5bWJvbHMgaW4gdGhlIEVMRiBiaW5hcnkpIDoKKyAgJCBjcCB1LWJvb3QgdS1ib290Lm91dAorICAkIGFybS1saW51eC1zdHJpcCB1LWJvb3Qub3V0CisKKyBUaGUgbWV0aG9kIHdlJ3ZlIHVzZWQgZm9yIGluc3RhbGxpbmcgdS1ib290IHRoZSBmaXJzdCB0aW1lIG9uIGEgUDIgaXMgCithcyBmb2xsb3dzIDoKKworMSkgQ29uZmlndXJlIFRJIENvZGUgQ29tcG9zZXIgU3R1ZGlvIHRvIGNvbm5lY3QgdG8gdGhlIFAyIGJvYXJkIHZpYSBKVEFHIAorICAgYXMgZGVzY3JpYmVkIGluIHRoZSBVc2VycyBHdWlkZS4KKworMikgU2V0IHVwIHRoZSBQMiB0byBib290IGZyb20gQ1MzLCBhbmQgY29ubmVjdCB3aXRoIENDUy4gUmVzZXQgdGhlIENQVSAKKyAgIGFuZCBydW4gdGhlICJpbml0X21tdSIgR0VMIHNjcmlwdC4gCisKKzMpIFVzZSB0aGUgIkxvYWQgUHJvZ3JhbSIgb3B0aW9uIHRvIHNlbmQgdGhlIHUtYm9vdC5vdXQgZmlsZSB0byB0aGUgUDIgYW5kCisgICBydW4uIAorCisgQXQgdGhpcyBwb2ludCwgdS1ib290IHNob3VsZCBydW4gYW5kIHlvdSB3aWxsIHNlZSB0aGUgYm9vdCBtZW51IG9uIHlvdXIKK3NlcmlhbCB0ZXJtaW5hbC4gWW91IGNhbiB0aGVuIGxvYWQgdGhlIHUtYm9vdCBpbWFnZSB0byBtZW1vcnkgOgorCisgICMgbG9hZGIgMHgxMDAwMDAwMAorCisgU2VuZCB0aGUgInUtYm9vdC5iaW4iIGJpbmFyeSB2aWEgdGhlIHNlcmlhbCB1c2luZyBLZXJtaXQuIE9uY2UgbG9hZGVkIAoreW91IGNhbiBzZWxmLWZsYXNoIHUtYm9vdCA6CisKKyAgIyBwcm90ZWN0IG9mZiAxOjAKKyAgIyBlcmFzZSAxOjAKKyAgIyBjcC5iIDB4MTAwMDAwMDAgMHgwIDB4MjAwMDAKKyAKKyBZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHJlc2V0IHRoZSBib2FyZCBhbmQgcnVuIHUtYm9vdCBmcm9tIGZsYXNoLgorCisKKworQWx0ZXJuYXRpdmUgZmxhc2ggb3B0aW9uIDoKKworIFNvbWV0aW1lcywgaWYgeW91J3ZlIGJlZW4gc2lsbHksIHlvdSBjYW4gZ2V0IHRoZSBib2FyZCBpbnRvIGEgc3RhdGUgd2hlcmUKK3doYXRzIGluIGZsYXNoIGhhcyB1cHNldCB0aGUgYm9hcmQgc28gbXVjaCB0aGF0IHlvdSBjYW4gbm8gbG9uZ2VyIGNvbm5lY3QKK3RvIHRoZSBQMiB2aWEgSlRBRy4gSG93ZXZlciwgeW91IGNhbiBzZXQgRElQOSB0byBvZmYgdG8gc3dhcCB0aGUgYm9vdCBtb2RlIAorb2YgdGhlIFAyIHNvIHRoYXQgeW91IGJvb3QgZnJvbSBSQU0gaW5zdGVhZCBvZiBOT1IgZmxhc2guIFRoaXMgbW92ZXMgTk9SCitmbGFzaCB1cCB0byAweDBDMDAwMDAwLiBZb3UgY2FuIGJ1aWxkIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIHUtYm9vdCB0byAKK3V0aWxpc2UgdGhpcyBieSB0aGUgZm9sbG93aW5nIGNvbmZpZyA6CisKKyAgJCBtYWtlIG9tYXA3MzBwMl9jczBib290X2NvbmZpZworCisgSWYgeW91IGxvYWQgdGhpcyB1cCB2aWEgQ0NTIGl0IHdpbGwgZGV0ZWN0IGZsYXNoIGF0IGl0cyBhbHRlcm5hdGUgbG9jYXRpb24KK2FuZCBhbGxvdyB5b3UgdG8gcHJvZ3JhbW1lIHlvdXIgdS1ib290IGltYWdlICh3aGljaCwgcmVtZW1iZXIgbXVzdCBiZSBidWlsdAorZm9yIENTMyBib290ISkgT25jZSB5b3UgZG8gdGhpcywgeW91IGNhbiByZXZlcnQgdG8gQ1MzIGJvb3QgYW5kIGl0IHdpbGwgd29yaworZmluZSBhZ2Fpbi4KKworCisKK0VycmF0YSA6CisKKzEpIEl0J3MgYmVlbiBvYnNlcnZlZCB0aGF0IHNvbWV0aW1lcyB0aGUgdGZ0cCB0cmFuc2ZlciBvZiBrZXJuZWxzIHRvIHRoZQorICAgYm9hcmQgY2FuIGhhdmUgY2hlY2tzdW0gZXJyb3JzIG9yIHN0YWxsLiBUaGlzIGFwcGVhcnMgdG8gYmUgYW4gaXNzdWUgCisgICB3aXRoIHRoZSBsYW45MWM5Ni5jIGRyaXZlciwgYW5kIGNhbiBub3JtYWxseSBiZSB3b3JrZWQgYXJvdW5kIGJ5IAorICAgcmVzZXR0aW5nIHRoZSBib2FyZCBhbmQgdHJ5aW5nIGFnYWluLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sYW45MWM5Ni5jIGIvZHJpdmVycy9sYW45MWM5Ni5jCmluZGV4IDAzMmY5NzguLmMzYjcxNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGFuOTFjOTYuYworKysgYi9kcml2ZXJzL2xhbjkxYzk2LmMKQEAgLTYyMCw3ICs2MjAsNyBAQAogCQlhZGRyZXNzIHw9IHNtY19tYWNfYWRkcltpXTsKIAkJU01DX291dHcgKGFkZHJlc3MsIExBTjkxQzk2X0lBMCArIGkpOwogCX0KLSNlbHNlIAorI2Vsc2UKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlTTUNfb3V0YiAoc21jX21hY19hZGRyW2ldLCBMQU45MUM5Nl9JQTAgKyBpKTsKICNlbmRpZgpAQCAtOTM3LDcgKzkzNyw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyogCisvKgogICogZ2V0X3JvbV9tYWMoKQogICogTm90ZSwgdGhpcyBoYXMgb21seSBiZWVuIHRlc3RlZCBmb3IgdGhlIE9NQVA3MzAgUDIuCiAgKi8KQEAgLTk2MCw2ICs5NjAsNCBAQAogI2VuZGlmCiB9CiAKLQotCiAjZW5kaWYgLyogQ09ORklHX0RSSVZFUl9MQU45MUM5NiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uczE2NTUwLmMgYi9kcml2ZXJzL25zMTY1NTAuYwppbmRleCAwNTg2MmVlLi5mOWZlODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25zMTY1NTAuYworKysgYi9kcml2ZXJzL25zMTY1NTAuYwpAQCAtMjYsNyArMjYsNyBAQAogCWNvbV9wb3J0LT5sY3IgPSBMQ1JWQUw7CiAJY29tX3BvcnQtPm1jciA9IE1DUlZBTDsKIAljb21fcG9ydC0+ZmNyID0gRkNSVkFMOwotI2lmIGRlZmluZWQoQ09ORklHX09NQVAxNTEwKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTUxMCkgfHwgZGVmaW5lZChDT05GSUdfT01BUDE2MTApIHx8IGRlZmluZWQoQ09ORklHX09NQVA3MzApCiAJY29tX3BvcnQtPm1kcjEgPSAwOwkvKiBzZWxlY3QgdWFydCBtb2RlICovCiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9oMl9wMl9kYmdfYm9hcmQuaCBiL2luY2x1ZGUvY29uZmlncy9oMl9wMl9kYmdfYm9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVlYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2gyX3AyX2RiZ19ib2FyZC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICoKKyAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgorICogICBUSSBIMiBhbmQgUDIgRGVidWcgQm9hcmQgaGFyZHdhcmUgbWFwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1QQy1EYXRhIExpbWl0ZWQuIChodHRwOi8vd3d3Lm1wYy1kYXRhLmNvLnVrKQorICogQXV0aG9yOiBNUEMtRGF0YSBMaW1pdGVkCisgKgkgICBEYXZlIFBldmVybGV5CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19JTkNMVURFRF9IMl9QMl9EQkhfQk9BUkRfSAorI2RlZmluZSBfX0lOQ0xVREVEX0gyX1AyX0RCSF9CT0FSRF9ICisKKworI2luY2x1ZGUgPGFzbS9hcmNoL3NpemVzLmg+CisKKworLyoKKyAqIFRoZSBEZWJ1ZyBib2FyZCBpcyBkZXNpZ25lZCB0byBmdW5jdGlvbiB3aXRoIHRoZSBQMiBTYW1wbGUsIEgyCisgKiBTYW1wbGUgYW5kIDE2MTAgSW5ub3ZhdG9yIGJvYXJkcy4gVGhlIG1haW4gZGlmZmVyZW5jZSBBRkFJQ1QgaXMgCisgKiB0aGUgY2hpcCBzZWxlY3RzIHVzZWQgd2l0aCBlYWNoIHN5c3RlbSA7CisgKgorICogICBQMiBTYW1wbGUgOiBDUzEgb2YgT01BUDczMCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgQ1BMRCAmIExBTiByZWdzCisgKiAgIEgyIFNhbXBsZSA6IENTMWEgaXMgdXNlZCB0byBzZWxlY3QgdGhlIENQTEQgcmVnaXN0ZXJzLgorICoKKyAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ1BMRCBSZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBIMkRCR19DUExEX1JFVklTSU9OICAgICAgICAweDA0MDAwMDEwCisjZGVmaW5lIEgyREJHX0JPQVJEX1JFVklTSU9OICAgICAgIDB4MDQwMDAwMTIKKyNkZWZpbmUgSDJEQkdfR1BJT19SRUdJU1RFUiAgICAgICAgMHgwNDAwMDAxNAorI2RlZmluZSBIMkRCR19MRURfQ09OVFJPTCAgICAgICAgICAweDA0MDAwMDE2CisjZGVmaW5lIEgyREJHX01JU0NfSU5QVVQgICAgICAgICAgIDB4MDQwMDAwMTgKKyNkZWZpbmUgSDJEQkdfTEFOX1NUQVRVUyAgICAgICAgICAgMHgwNDAwMDAxQQorI2RlZmluZSBIMkRCR19MQU5fUkVTRVQgICAgICAgICAgICAweDA0MDAwMDFDCisjZGVmaW5lIEgyREJHX0VUSF9SRUdfQkFTRSAgICAgICAgIDB4MDQwMDAzMDAKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0IENvbnRyb2wgUmVnaXN0ZXJzCisgKiBUaGVzZSBhcmUgZm9yIHRoZSBMQU45MUM5NiBvbiB0aGUgZGVidWcgYm9hcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQmFuayAwIGluIElPIHNwYWNlICovCisKKyNkZWZpbmUgRVRIX1RDUiAgICAgICAgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDAwKSAgIC8qIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX0VQSF9TVEFUVVMgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDAyKSAgIC8qIEVQSCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX1JDUiAgICAgICAgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDA0KSAgIC8qIFJlY2VpdmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfQ09VTlRFUiAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDYpICAgLyogQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfTUlSICAgICAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDgpICAgLyogTWVtb3J5IEluZm9ybWF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEVUSF9NQ1IgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwQSkgICAvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCisvKiBCYW5rIDEgaW4gSU8gc3BhY2UgKi8KKworI2RlZmluZSBFVEhfQ09ORklHICAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDApICAgLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfQkFTRSAgICAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDIpICAgLyogQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEVUSF9JQTAgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwNCkgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAwICovCisjZGVmaW5lIEVUSF9JQTEgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwNSkgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAxICovCisjZGVmaW5lIEVUSF9JQTIgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwNikgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAyICovCisjZGVmaW5lIEVUSF9JQTMgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwNykgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAzICovCisjZGVmaW5lIEVUSF9JQTQgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwOCkgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSA0ICovCisjZGVmaW5lIEVUSF9JQTUgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwOSkgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSA1ICovCisjZGVmaW5lIEVUSF9HRU5fUFVSUE9TRSAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwQSkgICAvKiBHZW5lcmFsIEFkZHJlc3MgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVUSF9DT05UUk9MICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwQikgICAvKiBDb250cm9sIFJlZ2lzdGVyICovCisKKy8qIEJhbmsgMiBpbiBJTyBzcGFjZSAqLworCisjZGVmaW5lIEVUSF9NTVUgICAgICAgICAgICAoSDJEQkdfRVRIX1JFR19CQVNFICsgMHgwMCkgICAvKiBNTVUgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfQVVUT19UWF9TVEFSVCAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDEpICAgLyogQXV0byBUeCBTdGFydCBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfUE5SICAgICAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDIpICAgLyogUGFja2V0IE51bWJlciBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfQVJSICAgICAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MDMpICAgLyogQWxsb2NhdGlvbiBSZXN1bHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX0ZJRk8gICAgICAgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDA0KSAgIC8qIEZJRk8gUG9ydHMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX1BPSU5URVIgICAgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDA2KSAgIC8qIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX0RBVEFfSElHSCAgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDA4KSAgIC8qIERhdGEgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBFVEhfREFUQV9MT1cgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MEEpICAgLyogRGF0YSBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX0lOVF9TVEFUUyAgICAgIChIMkRCR19FVEhfUkVHX0JBU0UgKyAweDBDKSAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLSBSTyAqLworI2RlZmluZSBFVEhfSU5UX0FDSyAgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MEMpICAgLyogSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyIC1XTyAqLworI2RlZmluZSBFVEhfSU5UX01BU0sgICAgICAgKEgyREJHX0VUSF9SRUdfQkFTRSArIDB4MEQpICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogQSBjb3VwbGUgb2YgdXRpbGl0eSBpbmxpbmVzIHRvIGFpZCBkZWJ1Z2dpbmcgdXNpbmcgdGhlIExFRCdzIG9uIHRoZSAKKyAqIGRlYnVnIGJvYXJkLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbGVkX3N0YXRlKGludCBzdGF0ZSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBod19sZWRfc3RhdGUgPSAwOworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpsZWRfYWRkcmVzcyA9IDB4MDQwMDAwMTY7CisKKwlod19sZWRfc3RhdGUgPSAoKHVuc2lnbmVkIGxvbmcpc3RhdGUpOworCSooKHVuc2lnbmVkIHNob3J0ICopIChsZWRfYWRkcmVzcykpID0gKHVuc2lnbmVkIHNob3J0KSAofmh3X2xlZF9zdGF0ZSAmIDB4RkZGRik7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5fdXBfbGVkcygpCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCXZvbGF0aWxlIGludCBpLCBqLCBrOworCisJZm9yIChrID0gMDsgayA8IDI7IGsrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IDUwMDA7IGorKykgeworCQkJCXNldF9sZWRfc3RhdGUoMSA8PCBpKTsKKwkJCX0KKwkJfQorCQlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJCWZvciAoaiA9IDA7IGogPCA1MDAwOyBqKyspIHsKKwkJCQlzZXRfbGVkX3N0YXRlKDEgPDwgaSk7CisJCQl9CisJCX0KKwl9Cit9CisKKyNlbmRpZiAgICAvKiAhICBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmICAgIC8qICEgIF9fSU5DTFVERURfSDJfUDJfREJIX0JPQVJEX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXA3MzAuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiYmViMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwLmgKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKgorICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCisgKiAgIE9NQVA3MzAgaGFyZHdhcmUgbWFwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1QQy1EYXRhIExpbWl0ZWQuIChodHRwOi8vd3d3Lm1wYy1kYXRhLmNvLnVrKQorICogQXV0aG9yOiBNUEMtRGF0YSBMaW1pdGVkCisgKgkgICBEYXZlIFBldmVybGV5CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2lmbmRlZiBfX0lOQ0xVREVEX09NQVA3MzBfSAorI2RlZmluZSBfX0lOQ0xVREVEX09NQVA3MzBfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvc2l6ZXMuaD4KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT01BUDczMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBFUlNFVVMyX01QVV9ERVZfSUQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwMCkpCisjZGVmaW5lIFBFUlNFVVMyX0dTTV9ERVZfSUQwICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwMCkpCisjZGVmaW5lIFBFUlNFVVMyX0dETV9ERVZfSUQxICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwMikpCisjZGVmaW5lIERTUF9DT05GICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwNCkpCisjZGVmaW5lIFBFUlNFVVMyX01QVV9ESUVfSUQwICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwOCkpCisjZGVmaW5lIEdTTV9BU0lDX0NPTkYgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwOCkpCisjZGVmaW5lIFBFUlNFVVMyX01QVV9ESUVfSUQxICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAwQykpCisjZGVmaW5lIFBFUlNFVVMyX01PREUxICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxMCkpCisjZGVmaW5lIFBFUlNFVVMyX0dTTV9ESUVfSUQwICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxMCkpCisjZGVmaW5lIFBFUlNFVVMyX0dTTV9ESUVfSUQxICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxMikpCisjZGVmaW5lIFBFUlNFVVMyX01PREUyICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxNCkpCisjZGVmaW5lIFBFUlNFVVMyX0dTTV9ESUVfSUQyICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxNCkpCisjZGVmaW5lIFBFUlNFVVMyX0dTTV9ESUVfSUQzICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxNikpCisjZGVmaW5lIFBFUlNFVVMyX0FOQUxPR19DRUxMU19DT05GICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxOCkpCisjZGVmaW5lIFNQRUNDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAxQykpCisjZGVmaW5lIFNQQVJFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAyMCkpCisjZGVmaW5lIFNQQVJFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAyNCkpCisjZGVmaW5lIEdTTV9QQkdfSVJRICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAyOCkpCisjZGVmaW5lIERNQV9SRVFfQ09ORiAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTAzMCkpCisjZGVmaW5lIFBFX0NPTkZfTk9fRFVBTCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA2MCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYwICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA3MCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYxICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA3NCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYyICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA3OCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYzICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA3QykpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkY0ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA4MCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkY1ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA4NCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkY2ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA4OCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkY3ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA4QykpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkY4ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA5MCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkY5ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA5NCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYxMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA5OCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYxMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTA5QykpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYxMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBBMCkpCisjZGVmaW5lIFBFUlNFVVMyX0lPX0NPTkYxMyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBBNCkpCisjZGVmaW5lIFBFUlNFVVNfUENDX0NPTkZfUkVHICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBCNCkpCisjZGVmaW5lIEJJU1RfU1RBVFVTX0lOVEVSTkFMICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBCOCkpCisjZGVmaW5lIEJJU1RfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBDMCkpCisjZGVmaW5lIEJPT1RfUk9NX1JFRyAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBDNCkpCisjZGVmaW5lIFBST0RVQ1RJT05fSURfUkVHICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBDOCkpCisjZGVmaW5lIEJJU1RfU0VDUk9NX1NJR05BVFVSRTFfSU5URVJOQUwgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBEMCkpCisjZGVmaW5lIEJJU1RfU0VDUk9NX1NJR05BVFVSRTJfSU5URVJOQUwgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBENCkpCisjZGVmaW5lIEJJU1RfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBEOCkpCisjZGVmaW5lIERFQlVHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBFMCkpCisjZGVmaW5lIERFQlVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBFNCkpCisjZGVmaW5lIERFQlVHX0RNQV9JUlEgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoMHhGRkZFMTBFOCkpCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9NQVA3MzAgRU1JRlMgUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRSTSAyLjUuNykKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUQ01JRl9CQVNFICAgICAgICAgICAgICAgICAweEZGRkVDQzAwCisKKyNkZWZpbmUgRU1JRlNfTFJVUkVHICAgICAgICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDA0KQorI2RlZmluZSBFTUlGU19DT05GSUcgICAgICAgICAgICAgICAoVENNSUZfQkFTRSArIDB4MEMpCisjZGVmaW5lIEZMQVNIX0NGR18wICAgICAgICAgICAgICAgIChUQ01JRl9CQVNFICsgMHgxMCkKKyNkZWZpbmUgRkxBU0hfQ0ZHXzEgICAgICAgICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDE0KQorI2RlZmluZSBGTEFTSF9DRkdfMiAgICAgICAgICAgICAgICAoVENNSUZfQkFTRSArIDB4MTgpCisjZGVmaW5lIEZMQVNIX0NGR18zICAgICAgICAgICAgICAgIChUQ01JRl9CQVNFICsgMHgxQykKKyNkZWZpbmUgRkxfQ0ZHX0RZTl9XQUlUICAgICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDQwKQorI2RlZmluZSBFTUlGU19USU1FT1VUMV9SRUcgICAgICAgICAoVENNSUZfQkFTRSArIDB4MjgpCisjZGVmaW5lIEVNSUZTX1RJTUVPVVQyX1JFRyAgICAgICAgIChUQ01JRl9CQVNFICsgMHgyQykKKyNkZWZpbmUgRU1JRlNfVElNRU9VVDNfUkVHICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDMwKQorI2RlZmluZSBFTUlGU19BQk9SVF9BRERSICAgICAgICAgICAoVENNSUZfQkFTRSArIDB4NDQpCisjZGVmaW5lIEVNSUZTX0FCT1JUX1RZUEUgICAgICAgICAgIChUQ01JRl9CQVNFICsgMHg0OCkKKyNkZWZpbmUgRU1JRlNfQUJPUlRfVE9VVCAgICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDRDKQorI2RlZmluZSBGTEFTSF9BQ0ZHXzBfMSAgICAgICAgICAgICAoVENNSUZfQkFTRSArIDB4NTApCisjZGVmaW5lIEZMQVNIX0FDRkdfMV8xICAgICAgICAgICAgIChUQ01JRl9CQVNFICsgMHg1NCkKKyNkZWZpbmUgRkxBU0hfQUNGR18yXzEgICAgICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDU4KQorI2RlZmluZSBGTEFTSF9BQ0ZHXzNfMSAgICAgICAgICAgICAoVENNSUZfQkFTRSArIDB4NUMpCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPTUFQNzMwIEludGVycnVwdCBoYW5kbGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE9NQVBfSUgxX0JBU0UJCTB4RkZGRUNCMDAgICAgIC8qIE1QVSBMZXZlbCAxIElSUSBoYW5kbGVyICovCisjZGVmaW5lIE9NQVBfSUgyX0JBU0UgICAgICAgICAgIDB4ZmZmZTAwMDAKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9NQVA3MzAgVGltZXJzCisgKgorICogVGhlcmUgYXJlIHRocmVlIGdlbmVyYWwgcHVycG9zZSBPUyB0aW1lcnMgaW4gdGhlIDczMCB0aGF0IGNhbiBiZSAKKyAqIGNvbmZpZ3VyZWQgaW4gYXV0b3JlbG9hZCBvciBvbmUtc2hvdCBtb2Rlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBPTUFQNzMwXzMya0h6X1RJTUVSX0JBU0UgIDB4RkZGQjkwMDAKKworLyogMzJrIFRpbWVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBUSU1FUjMya19DUiAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgVElNRVIzMmtfVFZSICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFRJTUVSMzJrX1RDUiAgICAgICAgICAgICAgMHgwNAorCisvKiAzMmsgVGltZXIgQ29udHJvbCBSZWdpc3RlciBkZWZpbml0aW9uICovCisjZGVmaW5lIFRJTUVSMzJrX1RTUyAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIFRJTUVSMzJrX1RSQiAgICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIFRJTUVSMzJrX0lOVCAgICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIFRJTUVSMzJrX0FSTCAgICAgICAgICAgICAgKDE8PDMpCisKKy8qIE1QVSBUaW1lciBiYXNlIGFkZHJlc3NlcyAgKi8KKyNkZWZpbmUgT01BUDczMF9NUFVUSU1FUl9CQVNFCTB4ZmZmZWM1MDAKKyNkZWZpbmUgT01BUDczMF9NUFVUSU1FUl9PRkYJMHgwMDAwMDEwMAorCisjZGVmaW5lIE9NQVA3MzBfVElNRVIxX0JBU0UJMHhGRkZFQzUwMAorI2RlZmluZSBPTUFQNzMwX1RJTUVSMl9CQVNFCTB4RkZGRUM2MDAKKyNkZWZpbmUgT01BUDczMF9USU1FUjNfQkFTRQkweEZGRkVDNzAwCisKKy8qIE1QVSBUaW1lciBSZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENOVExfVElNRVIJICAgICAgICAgICAweDAwICAgLyogTVBVX0NOVExfVElNRVIgKi8KKyNkZWZpbmUgTE9BRF9USU0JICAgICAgICAgICAweDA0ICAgLyogTVBVX0xPQURfVElNRVIgKi8KKyNkZWZpbmUgUkVBRF9USU0JICAgICAgICAgICAweDA4ICAgLyogTVBVX1JFQURfVElNRVIgKi8KKworLyogTVBVX0NOVExfVElNRVIgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNUFVUSU1fRlJFRSAgICAgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBNUFVUSU1fQ0xPQ0tfRU5BQkxFICAgICAgICgxPDw1KQorI2RlZmluZSBNUFVUSU1fUFRWX01BU0sgICAgICAgICAgICgweDc8PFBUVl9CSVQpCisjZGVmaW5lIE1QVVRJTV9QVFZfQklUICAgICAgICAgICAgMgorI2RlZmluZSBNUFVUSU1fQVIgICAgICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBNUFVUSU1fU1QgICAgICAgICAgICAgICAgICgxPDwwKQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT01BUDczMCBHUElPCisgKgorICogVGhlIEdQSU8gY29udHJvbCBpcyBzcGxpdCBvdmVyIDYgcmVnaXN0ZXIgYmFzZXMgaW4gdGhlIE9NQVA3MzAgdG8gYWxsb3cKKyAqIGFjY2VzcyB0byBhbGwgdGhlICg2IHggMzIpIEdQSU8gcGlucyEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBPTUFQNzMwX0dQSU9fQkFTRV8xICAgICAgICAweEZGRkJDMDAwCisjZGVmaW5lIE9NQVA3MzBfR1BJT19CQVNFXzIgICAgICAgIDB4RkZGQkM4MDAKKyNkZWZpbmUgT01BUDczMF9HUElPX0JBU0VfMyAgICAgICAgMHhGRkZCRDAwMAorI2RlZmluZSBPTUFQNzMwX0dQSU9fQkFTRV80ICAgICAgICAweEZGRkJEODAwCisjZGVmaW5lIE9NQVA3MzBfR1BJT19CQVNFXzUgICAgICAgIDB4RkZGQkUwMDAKKyNkZWZpbmUgT01BUDczMF9HUElPX0JBU0VfNiAgICAgICAgMHhGRkZCRTgwMAorCisjZGVmaW5lIEdQSU9fREFUQV9JTlBVVCAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgR1BJT19EQVRBX09VVFBVVCAgICAgICAgICAgMHgwNAorI2RlZmluZSBHUElPX0RJUkVDVElPTl9DT05UUk9MICAgICAweDA4CisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX0NPTlRST0wgICAgIDB4MEMKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfTUFTSyAgICAgICAgMHgxMAorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9TVEFUVVMgICAgICAweDE0CisKKyNkZWZpbmUgR1BJT19EQVRBX0lOUFVUXzEgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMSArIEdQSU9fREFUQV9JTlBVVCkpCisjZGVmaW5lIEdQSU9fREFUQV9PVVRQVVRfMSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzEgKyBHUElPX0RBVEFfT1VUUFVUKSkKKyNkZWZpbmUgR1BJT19ESVJFQ1RJT05fQ09OVFJPTF8xICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMSArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpKQorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9DT05UUk9MXzEgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV8xICsgR1BJT19JTlRFUlJVUFRfQ09OVFJPTCkpCisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX01BU0tfMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzEgKyBHUElPX0lOVEVSUlVQVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfU1RBVFVTXzEgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMSArIEdQSU9fSU5URVJSVVBUX1NUQVRVUykpCisKKyNkZWZpbmUgR1BJT19EQVRBX0lOUFVUXzIgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMiArIEdQSU9fREFUQV9JTlBVVCkpCisjZGVmaW5lIEdQSU9fREFUQV9PVVRQVVRfMiAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzIgKyBHUElPX0RBVEFfT1VUUFVUKSkKKyNkZWZpbmUgR1BJT19ESVJFQ1RJT05fQ09OVFJPTF8yICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMiArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpKQorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9DT05UUk9MXzIgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV8yICsgR1BJT19JTlRFUlJVUFRfQ09OVFJPTCkpCisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX01BU0tfMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzIgKyBHUElPX0lOVEVSUlVQVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfU1RBVFVTXzIgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMiArIEdQSU9fSU5URVJSVVBUX1NUQVRVUykpCisKKyNkZWZpbmUgR1BJT19EQVRBX0lOUFVUXzMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMyArIEdQSU9fREFUQV9JTlBVVCkpCisjZGVmaW5lIEdQSU9fREFUQV9PVVRQVVRfMyAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzMgKyBHUElPX0RBVEFfT1VUUFVUKSkKKyNkZWZpbmUgR1BJT19ESVJFQ1RJT05fQ09OVFJPTF8zICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMyArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpKQorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9DT05UUk9MXzMgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV8zICsgR1BJT19JTlRFUlJVUFRfQ09OVFJPTCkpCisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX01BU0tfMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzMgKyBHUElPX0lOVEVSUlVQVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfU1RBVFVTXzMgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfMyArIEdQSU9fSU5URVJSVVBUX1NUQVRVUykpCisKKyNkZWZpbmUgR1BJT19EQVRBX0lOUFVUXzQgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNCArIEdQSU9fREFUQV9JTlBVVCkpCisjZGVmaW5lIEdQSU9fREFUQV9PVVRQVVRfNCAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzQgKyBHUElPX0RBVEFfT1VUUFVUKSkKKyNkZWZpbmUgR1BJT19ESVJFQ1RJT05fQ09OVFJPTF80ICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNCArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpKQorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9DT05UUk9MXzQgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV80ICsgR1BJT19JTlRFUlJVUFRfQ09OVFJPTCkpCisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX01BU0tfNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzQgKyBHUElPX0lOVEVSUlVQVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfU1RBVFVTXzQgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNCArIEdQSU9fSU5URVJSVVBUX1NUQVRVUykpCisKKyNkZWZpbmUgR1BJT19EQVRBX0lOUFVUXzUgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNSArIEdQSU9fREFUQV9JTlBVVCkpCisjZGVmaW5lIEdQSU9fREFUQV9PVVRQVVRfNSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzUgKyBHUElPX0RBVEFfT1VUUFVUKSkKKyNkZWZpbmUgR1BJT19ESVJFQ1RJT05fQ09OVFJPTF81ICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNSArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpKQorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9DT05UUk9MXzUgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV81ICsgR1BJT19JTlRFUlJVUFRfQ09OVFJPTCkpCisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX01BU0tfNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzUgKyBHUElPX0lOVEVSUlVQVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfU1RBVFVTXzUgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNSArIEdQSU9fSU5URVJSVVBUX1NUQVRVUykpCisKKyNkZWZpbmUgR1BJT19EQVRBX0lOUFVUXzYgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNiArIEdQSU9fREFUQV9JTlBVVCkpCisjZGVmaW5lIEdQSU9fREFUQV9PVVRQVVRfNiAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzYgKyBHUElPX0RBVEFfT1VUUFVUKSkKKyNkZWZpbmUgR1BJT19ESVJFQ1RJT05fQ09OVFJPTF82ICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNiArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpKQorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9DT05UUk9MXzYgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV82ICsgR1BJT19JTlRFUlJVUFRfQ09OVFJPTCkpCisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX01BU0tfNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzYgKyBHUElPX0lOVEVSUlVQVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFRfU1RBVFVTXzYgICAgICAoKHVuc2lnbmVkIGludCkoT01BUDczMF9HUElPX0JBU0VfNiArIEdQSU9fSU5URVJSVVBUX1NUQVRVUykpCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9NQVA3MzAgV2F0Y2hkb2cgdGltZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgV0RUSU1fQkFTRSAgICAgICAgICAgICAgICAgMHhGRkZFQzgwMAorI2RlZmluZSBXRFRJTV9DT05UUk9MICAgICAgICAgICAgICAoV0RUSU1fQkFTRSArIDB4MDApICAgIC8qIE1QVV9DTlRMX1RJTUVSICovCisjZGVmaW5lIFdEVElNX0xPQUQgICAgICAgICAgICAgICAgIChXRFRJTV9CQVNFICsgMHgwNCkgICAgLyogTVBVX0xPQURfVElNRVIgKi8KKyNkZWZpbmUgV0RUSU1fUkVBRCAgICAgICAgICAgICAgICAgKFdEVElNX0JBU0UgKyAweDA0KSAgICAvKiBNUFVfUkVBRF9USU1FUiAqLworI2RlZmluZSBXRFRJTV9NT0RFICAgICAgICAgICAgICAgICAoV0RUSU1fQkFTRSArIDB4MDgpICAgIC8qIE1QVV9USU1FUl9NT0RFICovCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9NQVA3MzAgSW50ZXJydXB0IFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgb2Zmc2V0cyAqLworCisjZGVmaW5lIElSUV9JVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgCisjZGVmaW5lIElSUV9NSVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBJUlFfU0lSX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgSVJRX1NJUl9GSVEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIElSUV9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBJUlFfSUxSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMgIC8qIElMUnggPT0gSUxSMCArICgweDQgKiB4KSAqLworI2RlZmluZSBJUlFfU0lSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OUMgIC8qIGEuay5hLklSUV9JU1IgKi8KKyNkZWZpbmUgSVJRX0dNSVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEwCisKKyNkZWZpbmUgUkVHX0lITDFfTUlSICAoT01BUF9JSDFfQkFTRSArIElSUV9NSVIpCisjZGVmaW5lIFJFR19JSEwyX01JUiAgKE9NQVBfSUgyX0JBU0UgKyBJUlFfTUlSKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9NQVA3MzAgSW50ZXJzeXN0ZW0gQ29tbXVuaWNhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAoVFJNIDQuNSkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKyAKKyNkZWZpbmUgSUNSX0JBU0UgICAgICAgICAgICAgICAgICAgMHhGRkZCQjgwMAorIAorI2RlZmluZSBNX0lDUiAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDAwKQorI2RlZmluZSBHX0lDUiAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDAyKQorI2RlZmluZSBNX0NUTCAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDA0KQorI2RlZmluZSBHX0NUTCAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDA2KQorI2RlZmluZSBQTV9CQSAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDBBKQorI2RlZmluZSBETV9CQSAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDBDKQorI2RlZmluZSBSTV9CQSAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDBFKQorI2RlZmluZSBTU1BJX1RBUyAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDEyKQorCisKKworI2VuZGlmIC8qICEgX19JTkNMVURFRF9PTUFQNzMwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwcDIuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwcDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIwMGMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXA3MzBwMi5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDQgCisgKiBNUEMgRGF0YSBMaW1pdGVkIChodHRwOi8vd3d3Lm1wYy1kYXRhLmNvLnVrKQorICogRGF2ZSBQZXZlcmxleSA8ZHBldmVybGV5IGF0IG1wYy1kYXRhLmNvLnVrPgorICoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFRJIE9NQVAgUGVyc2V1cyAyIGJvYXJkLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgICAgICAgIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisKKy8qCisgKiBJZiB3ZSBhcmUgZGV2ZWxvcGluZywgd2UgbWlnaHQgd2FudCB0byBzdGFydCBhcm1ib290IGZyb20gcmFtCisgKiBzbyB3ZSBNVVNUIE5PVCBpbml0aWFsaXplIGNyaXRpY2FsIHJlZ3MgbGlrZSBtZW0tdGltaW5nIC4uLgorICovCisKKyNkZWZpbmUgQ09ORklHX0lOSVRfQ1JJVElDQUwgICAgICAgICAgICAgICAgIC8qIHVuZGVmIGZvciBkZXZlbG9waW5nICovCisKKworLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisKKyNkZWZpbmUgQ09ORklHX0FSTTkyNkVKUyAgICAgICAgICAgMSAgICAgICAgIC8qIFRoaXMgaXMgYW4gYXJtOTI2ZWpzIENQVSBjb3JlICAqLworI2RlZmluZSBDT05GSUdfT01BUCAgICAgICAgICAgICAgICAxICAgICAgICAgLyogaW4gYSBUSSBPTUFQIGNvcmUgICAgKi8KKyNkZWZpbmUgQ09ORklHX09NQVA3MzAgICAgICAgICAgICAgMSAgICAgICAgIC8qIHdoaWNoIGlzIGluIGEgNzMwICAqLworI2RlZmluZSBDT05GSUdfUDJfT01BUDczMCAgICAgICAgICAxICAgICAgICAgLyogIGEgUGVyc2V1cyAyIEJvYXJkICAqLworCisKKy8qIAorICogSW5wdXQgY2xvY2sgb2YgUExMIAorICogVGhlIE9NQVA3MzAgUGVyc2V1cyAyIGhhcyAxM01IeiBpbnB1dCBjbG9jayAKKyAqLworCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEgICAgICAgIDEzMDAwMDAwCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLworCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRyAgICAgICAgIDEgICAgICAgICAvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTICAgMQorCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworCisjZGVmaW5lIENGR19NQUxMT0NfTEVOICAgICAgICAgICAgIChDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUgICAgICAgICAgMTI4ICAgICAgIC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworI2RlZmluZSBDT05GSUdfRFJJVkVSX0xBTjkxQzk2CisjZGVmaW5lIENPTkZJR19MQU45MUM5Nl9CQVNFICAgICAgIDB4MDQwMDAzMDAKKyNkZWZpbmUgQ09ORklHX0xBTjkxQzk2X0VYVF9QSFkKKworCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUgICAgICAgKDEpCisjZGVmaW5lIENGR19OUzE2NTUwX0NMSyAgICAgICAgICAgICg0ODAwMDAwMCkgICAgIC8qIGNhbiBiZSAxMk0vMzJLaHogb3IgNDhNaHogKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMSAgICAgICAgICAgMHhmZmZiMDAwMCAgICAgLyogdWFydDEsIGJsdWV0b290aCB1YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9uIHBlcnNldXMgKi8KKworLyoKKyAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfU0VSSUFMMSAgICAgICAgICAgICAxICAgICAgICAgLyogd2UgdXNlIFNFUklBTCAxIG9uIE9NQVA3MzAgUGVyc2V1cyAyICovCisKKworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgICAgICAxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURSAgICAgICAgICAgIDExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgICAgICAgICB7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTICAgICAgICAgICAgKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9ESENQKQorI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSyAgICAgICAgICBDT05GSUdfQk9PVFBfREVGQVVMVAorCisvKiAKKyAqIFRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgCisgKi8KKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorI2luY2x1ZGUgPGNvbmZpZ3Mvb21hcDczMC5oPgorI2luY2x1ZGUgPGNvbmZpZ3MvaDJfcDJfZGJnX2JvYXJkLmg+CisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAgICAgICAgICAgMworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgICAgICAgICAibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMG44IG5vaW5pdHJkIHJvb3Q9L2Rldi9uZnMgcncgaXA9Ym9vdHAiCisKKyNkZWZpbmUgQ09ORklHX0xPQURBRERSICAgICAgICAgICAgMHgxMDAwMDAwMAorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCisjZGVmaW5lIENPTkZJR19ORVRNQVNLICAgICAgICAgICAgIDI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0lQQUREUiAgICAgICAgICAgICAgMTkyLjE2OC4wLjIzCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgICAgICAgIDE5Mi4xNTAuMC4xMDAKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFICAgICAgICAgICAgInVJbWFnZSIgIC8qIEZpbGUgdG8gbG9hZCAqLworCisjaWYgZGVmaW5lZCAoQ09ORklHX0NPTU1BTkRTKSAmJiBkZWZpbmVkIChDRkdfQ01EX0tHREIpCisjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFICAgICAgIDExNTIwMCAgICAvKiBTcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVggICAgICAxICAgICAgICAgLyogV2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAgICAgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVCAgICAgICAgICAgICAgICAgIk9NQVA3MzAgUDIgIyAiICAgICAvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRSAgICAgICAgICAgICAgICAgMjU2ICAgICAgICAgICAgICAgICAvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19QQlNJWkUgICAgICAgICAgICAgICAgIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikKKyNkZWZpbmUgQ0ZHX01BWEFSR1MgICAgICAgICAgICAgICAgMTYgICAgICAgICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAgICovCisjZGVmaW5lIENGR19CQVJHU0laRSAgICAgICAgICAgICAgIENGR19DQlNJWkUgICAgICAgICAgLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUICAgICAgICAgIDB4MTAwMDAwMDAgICAgICAgICAgLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQgICAgICAgICAgICAweDEyMDAwMDAwICAgICAgICAgIC8qIDMyIE1CIGluIERSQU0gICAgKi8KKworI3VuZGVmIENGR19DTEtTX0lOX0haICAgICAgICAgICAgICAgIC8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KKworI2RlZmluZSBDRkdfTE9BRF9BRERSICAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAgICAgIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKworLyogVGhlIE9NQVA3MzAgaGFzIDMgZ2VuZXJhbCBwdXJwb3NlIE1QVSB0aW1lcnMsIHRoZXkgY2FuIGJlIGRyaXZlbiBieSAKKyAqIHRoZSBSZWZDbGsgKDEyTWh6KSBvciBieSBEUExMMS4gVGhpcyB0aW1lIGlzIGZ1cnRoZXIgc3ViZGl2aWRlZCBieSBhIAorICogbG9jYWwgZGl2aXNvci4KKyAqLworCisjZGVmaW5lIENGR19USU1FUkJBU0UgICAgICAgICAgICAgIDB4RkZGRUM1MDAgICAgICAgICAgLyogdXNlIHRpbWVyIDEgKi8KKyNkZWZpbmUgQ0ZHX1BWVCAgICAgICAgICAgICAgICAgICAgNyAgICAgICAgICAgICAgICAgICAvKiAyXihwdnQrMSksIGRpdmlkZSBieSAyNTYgKi8KKyNkZWZpbmUgQ0ZHX0haICAgICAgICAgICAgICAgICAgICAgKChDT05GSUdfU1lTX0NMS19GUkVRKS8oMiA8PCBDRkdfUFZUKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFjayBzaXplcworICoKKyAqIFRoZSBzdGFjayBzaXplcyBhcmUgc2V0IHVwIGluIHN0YXJ0LlMgdXNpbmcgdGhlIHNldHRpbmdzIGJlbG93CisgKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFICAgICAgICAgICAoMTI4KjEwMjQpICAgICAvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEgICAgICAgKDQqMTAyNCkgICAgICAgLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRICAgICAgICg0KjEwMjQpICAgICAgIC8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGh5c2ljYWwgTWVtb3J5IE1hcAorICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MgICAgICAgMSAgICAgICAgICAgICAgLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEgICAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAvKiBTRFJBTSBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFICAgICAgICAgIDB4MDIwMDAwMDAgICAgIC8qIDMyIE1CICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUzBfQk9PVCkKKyNkZWZpbmUgUEhZU19GTEFTSF8xICAgICAgICAgICAgICAgMHgwQzAwMDAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1MzX0JPT1QpCisjZGVmaW5lIFBIWVNfRkxBU0hfMSAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNlbHNlCisjZXJyb3IgVW5rbm93biBCb290IENoaXAtU2VsZWN0IG51bWJlcgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UgICAgICAgICAgICAgUEhZU19GTEFTSF8xCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCisgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTICAgICAgICAxICAgICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUgICAgICAgICAgICAweDAyMDAwMDAwICAgICAvKiAzMk1CICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVCAgICAgICAgICgyNTkpICAgICAgICAgIC8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworLyogYWRkciBvZiBlbnZpcm9ubWVudCAqLworI2RlZmluZSBDRkdfRU5WX0FERFIgICAgICAgICAgICAgICAoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAyMDAwMCkKKworCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgICAgICAgICgyMCpDRkdfSFopICAgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgICAgICAgICgyMCpDRkdfSFopICAgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNIICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAgICAgIDB4MjAwMDAgICAgICAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgICAgICAgIDB4MjAwMDAgICAgICAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICAqLworCisKKworI2VuZGlmICAgIC8qICEgX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uczE2NTUwLmggYi9pbmNsdWRlL25zMTY1NTAuaAppbmRleCA0ZGQzOWZlLi41ODkwMjQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25zMTY1NTAuaAorKysgYi9pbmNsdWRlL25zMTY1NTAuaApAQCAtMTksNiArMTksMTggQEAKIAl1bnNpZ25lZCBjaGFyIGxzcjsJCS8qIDUgKi8KIAl1bnNpZ25lZCBjaGFyIG1zcjsJCS8qIDYgKi8KIAl1bnNpZ25lZCBjaGFyIHNjcjsJCS8qIDcgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQNzMwKQorCXVuc2lnbmVkIGNoYXIgbWRyMTsJCS8qIDggKi8KKwl1bnNpZ25lZCBjaGFyIHJlZzk7CQkvKiA5ICovCisJdW5zaWduZWQgY2hhciByZWdBOwkJLyogQSAqLworCXVuc2lnbmVkIGNoYXIgcmVnQjsJCS8qIEIgKi8KKwl1bnNpZ25lZCBjaGFyIHJlZ0M7CQkvKiBDICovCisJdW5zaWduZWQgY2hhciByZWdEOwkJLyogRCAqLworCXVuc2lnbmVkIGNoYXIgcmVnRTsJCS8qIEUgKi8KKwl1bnNpZ25lZCBjaGFyIHJlZ0Y7CQkvKiBGICovCisJdW5zaWduZWQgY2hhciByZWcxMDsJCS8qIDEwICovCisJdW5zaWduZWQgY2hhciBzc3I7CQkvKiAxMSovCisjZW5kaWYKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2VsaWYgKENGR19OUzE2NTUwX1JFR19TSVpFID09IDIpCiBzdHJ1Y3QgTlMxNjU1MCB7Cg==