ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBlZjdlNTE0Li44NDU3MDQwIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDcgKzEsMjggQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgc2luY2UgVS1Cb290IDAuMi4xOgorQ2hhbmdlcyBzaW5jZSBVLUJvb3QgMC4yLjI6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAorICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscworICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKKyAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcworCisqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKKworKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CisgIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgorCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgorICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcworCisqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKKworKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKKworKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCisKICogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKICAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KIApAQCAtMTQsOSArMzUsMjEgQEAKICAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKICAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCiAKKyogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKKyAgc2xvdCBwb3B1bGF0ZWQpCisKKyogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCisKKyogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplICBldGhhZGRyICBlbnZpcm9ubWVudAorICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KKwogKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgogICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCiAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CiAKICogQWRkIHN1cHBvcnQgZm9yIExYVDk3MSBQSFkgb24gUE04MjYKZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGEyYmViNTIuLjBiNjM1M2EgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMjI3LDcgKzIyNyw4IEBACiAKIE46IFJvYmVydCBTY2h3ZWJlbAogRTogci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZQotRDogU3VwcG9ydCBmb3IgY3NiMjI2IGJvYXJkICh4c2NhbGUpCitEOiBTdXBwb3J0IGZvciBjc2IyMjYgYW5kIGlubm9rb20gYm9hcmRzICh4c2NhbGUpCisKIE46IFJvYiBUYXlsb3IKIEU6IHJvYnRAZmx5aW5ncGlnLmNvbQogRDogUG9ydCB0byBNQlg4NjBUIGFuZCBTYW5kcG9pbnQ4MjQwCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDk2OWUwZjguLjEwNDhlZTEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yNDYsNiArMjQ2LDcgQEAKIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KIAogCWNzYjIyNgkJCXhzY2FsZQorCWlubm9rb20JCQl4c2NhbGUKIAogQWxleCBa/HBrZSA8YXp1QHN5c2dvLmRlPgogCkBAIC0yNjQsNSArMjY1LDE2IEBACiAJc2M1MjBfY2RwCQl4ODYKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNSVBTIFN5c3RlbXM6CQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKKyMJQm9hcmQJCQlDUFUJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworCWluY2FpcAkJCU1JUFMzMiA0S2MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbmQgb2YgTUFJTlRBSU5FUlMgbGlzdAkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDEyYzJjYWMuLjc1ZDkzNGEgMTAwNjQ0Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMTAxLDcgKzEwMSw3IEBACiAjIyBYc2NhbGUgU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1MSVNUX3hzY2FsZT0ibHViYm9jayBjcmFkbGUgY3NiMjI2IgorTElTVF94c2NhbGU9Imx1YmJvY2sgY3JhZGxlIGNzYjIyNiBpbm5va29tIgogCiAKIExJU1RfYXJtPSIke0xJU1RfU0F9ICR7TElTVF9BUk03fSAke0xJU1RfQVJNOX0gJHtMSVNUX3hzY2FsZX0iCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGQyZjg0ODAuLjc4YmFiZWYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC03Nyw4ICs3NywxMSBAQAogaWZlcSAoJChBUkNIKSxpMzg2KQogI0NST1NTX0NPTVBJTEUgPSBpMzg2LWVsZi0KIGVuZGlmCitpZmVxICgkKEFSQ0gpLG1pcHMpCitDUk9TU19DT01QSUxFID0gbWlwc180S0MtCiBlbmRpZgogZW5kaWYKK2VuZGlmCiAKIGV4cG9ydAlDUk9TU19DT01QSUxFCiAKQEAgLTEyOSw4ICsxMzIsOCBAQAogYWxsOgkJdS1ib290LnNyZWMgdS1ib290LmJpbiBTeXN0ZW0ubWFwCiAKIGluc3RhbGw6CWFsbAotCQljcCB1LWJvb3QuYmluIC90ZnRwYm9vdC91LWJvb3QuYmluCi0JCWNwIHUtYm9vdC5iaW4gL25ldC9zYW0vdGZ0cGJvb3QvdS1ib290LmJpbgorCQktY3AgdS1ib290LmJpbiAvdGZ0cGJvb3QvdS1ib290LmJpbgorCQktY3AgdS1ib290LmJpbiAvbmV0L2RlbngvdGZ0cGJvb3QvdS1ib290LmJpbgogCiB1LWJvb3Quc3JlYzoJdS1ib290CiAJCSQoT0JKQ09QWSkgJHtPQkpDRkxBR1N9IC1PIHNyZWMgJDwgJEAKQEAgLTYxMSwxNCArNjE0LDIyIEBACiAjIyBBUk05MjBUIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAoreHRyYWN0X3RyYWIgPSAkKHN1YnN0IF9iaWdfZmxhc2gsLCQoc3Vic3QgX2NvbmZpZywsJDEpKQorCiBzbWRrMjQwMF9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc21kazI0MDAKIAogc21kazI0MTBfY29uZmlnCToJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IHNtZGsyNDEwCiAKLXRyYWJfY29uZmlnIDoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB0cmFiCit0cmFiX2NvbmZpZyBcCit0cmFiX2JpZ19mbGFzaF9jb25maWc6CXVuY29uZmlnCisJQCA+aW5jbHVkZS9jb25maWcuaAorCUBbIC16ICIkKGZpbmRzdHJpbmcgX2JpZ19mbGFzaCwkQCkiIF0gfHwgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0JJR19GTEFTSCIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgIGVjaG8gIi4uLiB3aXRoIGJpZyBmbGFzaCBzdXBwb3J0IiA7IFwKKwkJfQorCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfdHJhYiwkQCkgYXJtIGFybTkyMHQgdHJhYgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBBUk03MjBUIFN5c3RlbXMKQEAgLTYzMSwxOCArNjQyLDIxIEBACiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBlcDczMTIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMgWHNjYWxlIFN5c3RlbXMKKyMjIFhTY2FsZSBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWx1YmJvY2tfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSB4c2NhbGUgbHViYm9jawotCiBjcmFkbGVfY29uZmlnCToJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSB4c2NhbGUgY3JhZGxlCiAKIGNzYjIyNl9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHhzY2FsZSBjc2IyMjYKIAoraW5ub2tvbV9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHhzY2FsZSBpbm5va29tCisKK2x1YmJvY2tfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSB4c2NhbGUgbHViYm9jaworCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIGkzODYKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTY1Miw3ICs2NjYsMTcgQEAKIHNjNTIwX2NkcF9jb25maWcJOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgaTM4NiBpMzg2IHNjNTIwX2NkcAogCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIE1JUFMKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIE1JUFMzMiA0S2MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jYWlwX2NvbmZpZyA6CQl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgbWlwcyBtaXBzIGluY2FpcAorCisKIAogY2xlYW46CiAJZmluZCAuIC10eXBlIGYgXApAQCAtNjc0LDYgKzY5OCw3IEBACiAJcm0gLWZyICouKn4KIAlybSAtZiB1LWJvb3QgdS1ib290LmJpbiB1LWJvb3QuZWxmIHUtYm9vdC5zcmVjIHUtYm9vdC5tYXAgU3lzdGVtLm1hcAogCXJtIC1mIHRvb2xzL2NyYzMyLmMgdG9vbHMvZW52aXJvbm1lbnQuYyB0b29scy9lbnYvY3JjMzIuYworCXJtIC1mIGNwdS9tcGM4MjR4L2JlZGJ1Z182MDNlLmMKIAlybSAtZiBpbmNsdWRlL2FzbS9hcmNoIGluY2x1ZGUvYXNtCiAKIG1ycHJvcGVyIFwKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA4NDRjM2E4Li42YTAxMWNiIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0zOTUsMTAgKzM5NSwxMCBAQAogCQlkZWZhdWx0IGVudmlyb25tZW50LgogCiAtIENvbnNvbGUgSW50ZXJmYWNlOgotICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiBib2FyZCwgZGVmaW5lIGV4YWN0bHkgb25lIHNlcmlhbCBwb3J0Ci0gICAgICAgICAgICAgICAgKGxpa2UgQ09ORklHXzh4eF9DT05TX1NNQzEsIENPTkZJR184eHhfQ09OU19TTUMyLAotICAgICAgICAgICAgICAgIENPTkZJR184eHhfQ09OU19TQ0MxLCAuLi4pLCBvciBzd2l0Y2ggb2ZmIHRoZSBzZXJpYWwKLSAgICAgICAgICAgICAgICBjb25zb2xlIGJ5IGRlZmluaW5nIENPTkZJR184eHhfQ09OU19OT05FCisJCURlcGVuZGluZyBvbiBib2FyZCwgZGVmaW5lIGV4YWN0bHkgb25lIHNlcmlhbCBwb3J0CisJCShsaWtlIENPTkZJR184eHhfQ09OU19TTUMxLCBDT05GSUdfOHh4X0NPTlNfU01DMiwKKwkJQ09ORklHXzh4eF9DT05TX1NDQzEsIC4uLiksIG9yIHN3aXRjaCBvZmYgdGhlIHNlcmlhbAorCQljb25zb2xlIGJ5IGRlZmluaW5nIENPTkZJR184eHhfQ09OU19OT05FCiAKIAkJTm90ZTogaWYgQ09ORklHXzh4eF9DT05TX05PTkUgaXMgZGVmaW5lZCwgdGhlIHNlcmlhbAogCQlwb3J0IHJvdXRpbmVzIG11c3QgYmUgZGVmaW5lZCBlbHNld2hlcmUKQEAgLTQ0Myw5ICs0NDMsOSBAQAogCQkJCQkJYWRkaW9uYWwgYm9hcmQgaW5mbyBiZXNpZGUKIAkJCQkJCXRoZSBsb2dvCiAKLSAgICAgICAgICAgICAgICBXaGVuIENPTkZJR19DRkJfQ09OU09MRSBpcyBkZWZpbmVkLCB2aWRlbyBjb25zb2xlIGlzCi0gICAgICAgICAgICAgICAgZGVmYXVsdCBpL28uIFNlcmlhbCBjb25zb2xlIGNhbiBiZSBmb3JjZWQgd2l0aAotICAgICAgICAgICAgICAgIGVudmlyb25tZW50ICdjb25zb2xlPXNlcmlhbCcuCisJCVdoZW4gQ09ORklHX0NGQl9DT05TT0xFIGlzIGRlZmluZWQsIHZpZGVvIGNvbnNvbGUgaXMKKwkJZGVmYXVsdCBpL28uIFNlcmlhbCBjb25zb2xlIGNhbiBiZSBmb3JjZWQgd2l0aAorCQllbnZpcm9ubWVudCAnY29uc29sZT1zZXJpYWwnLgogCiAtIENvbnNvbGUgQmF1ZHJhdGU6CiAJCUNPTkZJR19CQVVEUkFURSAtIGluIGJwcwpAQCAtNDg5LDE1ICs0ODksMTUgQEAKIAkJd2l0aGluICJCb290IERlbGF5IiBhZnRlciByZXNldC4KIAogCQlDT05GSUdfQk9PVEFSR1MKLSAgICAgICAgICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzIHRvIHRoZSBib290bQotICAgICAgICAgICAgICAgIGNvbW1hbmQuIFRoZSB2YWx1ZSBvZiBDT05GSUdfQk9PVEFSR1MgZ29lcyBpbnRvIHRoZQotICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHZhbHVlICJib290YXJncyIuCisJCVRoaXMgY2FuIGJlIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMgdG8gdGhlIGJvb3RtCisJCWNvbW1hbmQuIFRoZSB2YWx1ZSBvZiBDT05GSUdfQk9PVEFSR1MgZ29lcyBpbnRvIHRoZQorCQllbnZpcm9ubWVudCB2YWx1ZSAiYm9vdGFyZ3MiLgogCiAJCUNPTkZJR19SQU1CT09UIGFuZCBDT05GSUdfTkZTQk9PVAotICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGVzZSBnb2VzIGludG8gdGhlIGVudmlyb25tZW50IGFzCi0gICAgICAgICAgICAgICAgInJhbWJvb3QiIGFuZCAibmZzYm9vdCIgcmVzcGVjdGl2ZWx5LCBhbmQgY2FuIGJlIHVzZWQKLSAgICAgICAgICAgICAgICBhcyBhIGNvbnZlbmllbmNlLCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJvb3RpbmcgZnJvbQotICAgICAgICAgICAgICAgIHJhbSBhbmQgbmZzLgorCQlUaGUgdmFsdWUgb2YgdGhlc2UgZ29lcyBpbnRvIHRoZSBlbnZpcm9ubWVudCBhcworCQkicmFtYm9vdCIgYW5kICJuZnNib290IiByZXNwZWN0aXZlbHksIGFuZCBjYW4gYmUgdXNlZAorCQlhcyBhIGNvbnZlbmllbmNlLCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJvb3RpbmcgZnJvbQorCQlyYW0gYW5kIG5mcy4KIAogLSBQcmUtQm9vdCBDb21tYW5kczoKIAkJQ09ORklHX1BSRUJPT1QKQEAgLTU5NiwxMyArNTk2LDEzIEBACiAKIAogCU5vdGU6CURvbid0IGVuYWJsZSB0aGUgImljYWNoZSIgYW5kICJkY2FjaGUiIGNvbW1hbmRzCi0gICAgICAgICAgICAgICAgKGNvbmZpZ3VyYXRpb24gb3B0aW9uIENGR19DTURfQ0FDSEUpIHVubGVzcyB5b3Uga25vdwotICAgICAgICAgICAgICAgIHdoYXQgeW91IChhbmQgeW91ciBVLUJvb3QgdXNlcnMpIGFyZSBkb2luZy4gRGF0YQotICAgICAgICAgICAgICAgIGNhY2hlIGNhbm5vdCBiZSBlbmFibGVkIG9uIHN5c3RlbXMgbGlrZSB0aGUgOHh4IG9yCi0gICAgICAgICAgICAgICAgODI2MCAod2hlcmUgYWNjZXNzZXMgdG8gdGhlIElNTVIgcmVnaW9uIG11c3QgYmUKLSAgICAgICAgICAgICAgICB1bmNhY2hlZCksIGFuZCBpdCBjYW5ub3QgYmUgZGlzYWJsZWQgb24gYWxsIG90aGVyCi0gICAgICAgICAgICAgICAgc3lzdGVtcyB3aGVyZSB3ZSAobWlzLSkgdXNlIHRoZSBkYXRhIGNhY2hlIHRvIGhvbGQgYW4KLSAgICAgICAgICAgICAgICBpbml0aWFsIHN0YWNrIGFuZCBzb21lIGRhdGEuCisJCShjb25maWd1cmF0aW9uIG9wdGlvbiBDRkdfQ01EX0NBQ0hFKSB1bmxlc3MgeW91IGtub3cKKwkJd2hhdCB5b3UgKGFuZCB5b3VyIFUtQm9vdCB1c2VycykgYXJlIGRvaW5nLiBEYXRhCisJCWNhY2hlIGNhbm5vdCBiZSBlbmFibGVkIG9uIHN5c3RlbXMgbGlrZSB0aGUgOHh4IG9yCisJCTgyNjAgKHdoZXJlIGFjY2Vzc2VzIHRvIHRoZSBJTU1SIHJlZ2lvbiBtdXN0IGJlCisJCXVuY2FjaGVkKSwgYW5kIGl0IGNhbm5vdCBiZSBkaXNhYmxlZCBvbiBhbGwgb3RoZXIKKwkJc3lzdGVtcyB3aGVyZSB3ZSAobWlzLSkgdXNlIHRoZSBkYXRhIGNhY2hlIHRvIGhvbGQgYW4KKwkJaW5pdGlhbCBzdGFjayBhbmQgc29tZSBkYXRhLgogCiAKIAkJWFhYIC0gdGhpcyBsaXN0IG5lZWRzIHRvIGdldCB1cGRhdGVkIQpAQCAtNjI4LDEwICs2MjgsMTAgQEAKIAogLSBUaW1lc3RhbXAgU3VwcG9ydDoKIAotICAgICAgICAgICAgICAgIFdoZW4gQ09ORklHX1RJTUVTVEFNUCBpcyBzZWxlY3RlZCwgdGhlIHRpbWVzdGFtcAotICAgICAgICAgICAgICAgIChkYXRlIGFuZCB0aW1lKSBvZiBhbiBpbWFnZSBpcyBwcmludGVkIGJ5IGltYWdlCi0gICAgICAgICAgICAgICAgY29tbWFuZHMgbGlrZSBib290bSBvciBpbWluZm8uIFRoaXMgb3B0aW9uIGlzCi0gICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4geW91IHNlbGVjdCBDRkdfQ01EX0RBVEUgLgorCQlXaGVuIENPTkZJR19USU1FU1RBTVAgaXMgc2VsZWN0ZWQsIHRoZSB0aW1lc3RhbXAKKwkJKGRhdGUgYW5kIHRpbWUpIG9mIGFuIGltYWdlIGlzIHByaW50ZWQgYnkgaW1hZ2UKKwkJY29tbWFuZHMgbGlrZSBib290bSBvciBpbWluZm8uIFRoaXMgb3B0aW9uIGlzCisJCWF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIHlvdSBzZWxlY3QgQ0ZHX0NNRF9EQVRFIC4KIAogLSBQYXJ0aXRpb24gU3VwcG9ydDoKIAkJQ09ORklHX01BQ19QQVJUSVRJT04gYW5kL29yIENPTkZJR19ET1NfUEFSVElUSU9OCkBAIC03MjAsMTQgKzcyMCwxNCBAQAogCQlzdGFuZGFyZCBMaUxvIG1vZGUgbnVtYmVycy4KIAkJRm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQgICgqIGlzIGRlZmF1bHQpOgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgODAweDYwMCAgMTAyNHg3NjggIDEyODB4MTAyNAotICAgICAgICAgICAgICAyNTYgICg4Yml0KSAgICAgMzAzKiAgICAgIDMwNSAgICAgICAzMDcKLSAgICAgICAgICAgIDY1NTM2ICgxNmJpdCkgICAgIDMxNCAgICAgICAzMTcgICAgICAgMzFhCi0gICAgICAgIDE2LDcgTWlsbCAoMjRiaXQpICAgICAzMTUgICAgICAgMzE4ICAgICAgIDMxYgorCQkJICAgIDgwMHg2MDAgIDEwMjR4NzY4ICAxMjgweDEwMjQKKwkgICAgICAyNTYgICg4Yml0KSAgICAgMzAzKiAgICAgIDMwNSAgICAgICAzMDcKKwkgICAgNjU1MzYgKDE2Yml0KSAgICAgMzE0ICAgICAgIDMxNyAgICAgICAzMWEKKwkxNiw3IE1pbGwgKDI0Yml0KSAgICAgMzE1ICAgICAgIDMxOCAgICAgICAzMWIKIAkJKGkuZS4gc2V0ZW52IHZpZGVvbW9kZSAzMTc7IHNhdmVlbnY7IHJlc2V0OykKIAogCQlDT05GSUdfVklERU9fU0VEMTM4MDYgCi0gICAgICAgICAgICAgICAgRW5hYmxlIEVwc29uIFNFRDEzODA2IGRyaXZlci4gVGhpcyBkcml2ZXIgc3VwcG9ydHMgOGJwcAorCQlFbmFibGUgRXBzb24gU0VEMTM4MDYgZHJpdmVyLiBUaGlzIGRyaXZlciBzdXBwb3J0cyA4YnBwCiAJCWFuZCAxNmJwcCBtb2RlcyBkZWZpbmVkIGJ5IENPTkZJR19WSURFT19TRUQxMzgwNl84QlBQCiAJCW9yIENPTkZJR19WSURFT19TRUQxMzgwNl8xNkJQUAogCkBAIC04MzksOCArODM5LDggQEAKIAkJZWl0aGVyIENPTkZJR19IQVJEX0kyQyBvciBDT05GSUdfU09GVF9JMkMgbXVzdCBiZSBkZWZpbmVkCiAJCXRvIGluY2x1ZGUgdGhlIGFwcHJvcHJpYXRlIEkyQyBkcml2ZXIuCiAKLSAgICAgICAgICAgICAgICBTZWUgYWxzbzogY29tbW9uL2NtZF9pMmMuYyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLgorCQlTZWUgYWxzbzogY29tbW9uL2NtZF9pMmMuYyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKwkJY29tbWFuZCBsaW5lIGludGVyZmFjZS4KIAogCiAJCUNPTkZJR19IQVJEX0kyQwpAQCAtODU1LDE0ICs4NTUsMTQgQEAKIAogCQlJMkNfSU5JVAogCi0gICAgICAgICAgICAgICAgKE9wdGlvbmFsKS4gQW55IGNvbW1hbmRzIG5lY2Vzc2FyeSB0byBlbmFibGUgSTJDCi0gICAgICAgICAgICAgICAgY29udHJvbGxlciBvciBjb25maWd1cmUgcG9ydHMuCisJCShPcHRpb25hbCkuIEFueSBjb21tYW5kcyBuZWNlc3NhcnkgdG8gZW5hYmxlIEkyQworCQljb250cm9sbGVyIG9yIGNvbmZpZ3VyZSBwb3J0cy4KIAogCQlJMkNfUE9SVAogCi0gICAgICAgICAgICAgICAgKE9ubHkgZm9yIE1QQzgyNjAgQ1BVKS4gVGhlIEkvTyBwb3J0IHRvIHVzZSAodGhlIGNvZGUKLSAgICAgICAgICAgICAgICBhc3N1bWVzIGJvdGggYml0cyBhcmUgb24gdGhlIHNhbWUgcG9ydCkuIFZhbGlkIHZhbHVlcwotICAgICAgICAgICAgICAgIGFyZSAwLi4zIGZvciBwb3J0cyBBLi5ELgorCQkoT25seSBmb3IgTVBDODI2MCBDUFUpLiBUaGUgSS9PIHBvcnQgdG8gdXNlICh0aGUgY29kZQorCQlhc3N1bWVzIGJvdGggYml0cyBhcmUgb24gdGhlIHNhbWUgcG9ydCkuIFZhbGlkIHZhbHVlcworCQlhcmUgMC4uMyBmb3IgcG9ydHMgQS4uRC4KIAogCQlJMkNfQUNUSVZFCiAKQEAgLTkxMCw0MCArOTEwLDQwIEBACiAKIAkJQ09ORklHX1NPRlRfU1BJCiAKLSAgICAgICAgICAgICAgICBFbmFibGVzIGEgc29mdHdhcmUgKGJpdC1iYW5nKSBTUEkgZHJpdmVyIHJhdGhlciB0aGFuCi0gICAgICAgICAgICAgICAgdXNpbmcgaGFyZHdhcmUgc3VwcG9ydC4gVGhpcyBpcyBhIGdlbmVyYWwgcHVycG9zZQotICAgICAgICAgICAgICAgIGRyaXZlciB0aGF0IG9ubHkgcmVxdWlyZXMgdGhyZWUgZ2VuZXJhbCBJL08gcG9ydCBwaW5zCi0gICAgICAgICAgICAgICAgKHR3byBvdXRwdXRzLCBvbmUgaW5wdXQpIHRvIGZ1bmN0aW9uLiBJZiB0aGlzIGlzCi0gICAgICAgICAgICAgICAgZGVmaW5lZCwgdGhlIGJvYXJkIGNvbmZpZ3VyYXRpb24gbXVzdCBkZWZpbmUgc2V2ZXJhbAotICAgICAgICAgICAgICAgIFNQSSBjb25maWd1cmF0aW9uIGl0ZW1zIChwb3J0IHBpbnMgdG8gdXNlLCBldGMpLiBGb3IKLSAgICAgICAgICAgICAgICBhbiBleGFtcGxlLCBzZWUgaW5jbHVkZS9jb25maWdzL3NhY3NuZy5oLgorCQlFbmFibGVzIGEgc29mdHdhcmUgKGJpdC1iYW5nKSBTUEkgZHJpdmVyIHJhdGhlciB0aGFuCisJCXVzaW5nIGhhcmR3YXJlIHN1cHBvcnQuIFRoaXMgaXMgYSBnZW5lcmFsIHB1cnBvc2UKKwkJZHJpdmVyIHRoYXQgb25seSByZXF1aXJlcyB0aHJlZSBnZW5lcmFsIEkvTyBwb3J0IHBpbnMKKwkJKHR3byBvdXRwdXRzLCBvbmUgaW5wdXQpIHRvIGZ1bmN0aW9uLiBJZiB0aGlzIGlzCisJCWRlZmluZWQsIHRoZSBib2FyZCBjb25maWd1cmF0aW9uIG11c3QgZGVmaW5lIHNldmVyYWwKKwkJU1BJIGNvbmZpZ3VyYXRpb24gaXRlbXMgKHBvcnQgcGlucyB0byB1c2UsIGV0YykuIEZvcgorCQlhbiBleGFtcGxlLCBzZWUgaW5jbHVkZS9jb25maWdzL3NhY3NuZy5oLgogCiAtIEZQR0EgU3VwcG9ydDogQ09ORklHX0ZQR0FfQ09VTlQKIAotICAgICAgICAgICAgICAgIFNwZWNpZnkgdGhlIG51bWJlciBvZiBGUEdBIGRldmljZXMgdG8gc3VwcG9ydC4KKwkJU3BlY2lmeSB0aGUgbnVtYmVyIG9mIEZQR0EgZGV2aWNlcyB0byBzdXBwb3J0LgogCi0gICAgICAgICAgICAgICAgQ09ORklHX0ZQR0EKKwkJQ09ORklHX0ZQR0EKIAotICAgICAgICAgICAgICAgIFVzZWQgdG8gc3BlY2lmeSB0aGUgdHlwZXMgb2YgRlBHQSBkZXZpY2VzLiBGb3IKKwkJVXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBGUEdBIGRldmljZXMuIEZvcgogCQlleGFtcGxlLAogIAkJI2RlZmluZSBDT05GSUdfRlBHQSAgQ0ZHX1hJTElOWF9WSVJURVgyCiAKICAJCUNGR19GUEdBX1BST0dfRkVFREJBQ0sKIAotICAgICAgICAgICAgICAgIEVuYWJsZSBwcmludGluZyBvZiBoYXNoIG1hcmtzIGR1cmluZyBGUEdBCisJCUVuYWJsZSBwcmludGluZyBvZiBoYXNoIG1hcmtzIGR1cmluZyBGUEdBCiAJCWNvbmZpZ3VyYXRpb24uCiAKIAkJQ0ZHX0ZQR0FfQ0hFQ0tfQlVTWQogCi0gICAgICAgICAgICAgICAgRW5hYmxlIGNoZWNrcyBvbiBGUEdBIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGJ1c3kKLSAgICAgICAgICAgICAgICBzdGF0dXMgYnkgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIFRoaXMgb3B0aW9uCi0gICAgICAgICAgICAgICAgd2lsbCByZXF1aXJlIGEgYm9hcmQgb3IgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9uIHRvCi0gICAgICAgICAgICAgICAgYmUgd3JpdHRlbi4KKwkJRW5hYmxlIGNoZWNrcyBvbiBGUEdBIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGJ1c3kKKwkJc3RhdHVzIGJ5IHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLiBUaGlzIG9wdGlvbgorCQl3aWxsIHJlcXVpcmUgYSBib2FyZCBvciBkZXZpY2Ugc3BlY2lmaWMgZnVuY3Rpb24gdG8KKwkJYmUgd3JpdHRlbi4KIAogCQlDT05GSUdfRlBHQV9ERUxBWQogCi0gICAgICAgICAgICAgICAgSWYgZGVmaW5lZCwgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGRlbGF5cyBpbiB0aGUKLSAgICAgICAgICAgICAgICBGUEdBIGNvbmZpZ3VyYXRpb24gZHJpdmVyLgorCQlJZiBkZWZpbmVkLCBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgZGVsYXlzIGluIHRoZQorCQlGUEdBIGNvbmZpZ3VyYXRpb24gZHJpdmVyLgogCiAJCUNGR19GUEdBX0NIRUNLX0NUUkxDCiAKQEAgLTk1MSwyNSArOTUxLDI1IEBACiAKIAkJQ0ZHX0ZQR0FfQ0hFQ0tfRVJST1IKIAotICAgICAgICAgICAgICAgIENoZWNrIGZvciBjb25maWd1cmF0aW9uIGVycm9ycyBkdXJpbmcgRlBHQSBiaXRmaWxlCi0gICAgICAgICAgICAgICAgbG9hZGluZy4gRm9yIGV4YW1wbGUsIGFib3J0IGR1cmluZyBWaXJ0ZXggSUkKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGlmIHRoZSBJTklUX0IgbGluZSBnb2VzIGxvdyAod2hpY2gKLSAgICAgICAgICAgICAgICBpbmRpY2F0ZWQgYSBDUkMgZXJyb3IpLgorCQlDaGVjayBmb3IgY29uZmlndXJhdGlvbiBlcnJvcnMgZHVyaW5nIEZQR0EgYml0ZmlsZQorCQlsb2FkaW5nLiBGb3IgZXhhbXBsZSwgYWJvcnQgZHVyaW5nIFZpcnRleCBJSQorCQljb25maWd1cmF0aW9uIGlmIHRoZSBJTklUX0IgbGluZSBnb2VzIGxvdyAod2hpY2gKKwkJaW5kaWNhdGVkIGEgQ1JDIGVycm9yKS4KIAogCQlDRkdfRlBHQV9XQUlUX0lOSVQKIAotICAgICAgICAgICAgICAgIE1heGltdW0gdGltZSB0byB3YWl0IGZvciB0aGUgSU5JVF9CIGxpbmUgdG8gZGVhc3NlcnQKLSAgICAgICAgICAgICAgICBhZnRlciBQUk9CX0IgaGFzIGJlZW4gZGVhc3NlcnRlZCBkdXJpbmcgYSBWaXJ0ZXggSUkKLSAgICAgICAgICAgICAgICBGUEdBIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuIFRoZSBkZWZhdWx0IHRpbWUgaXMgNTAwIG1TLgorCQlNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgdGhlIElOSVRfQiBsaW5lIHRvIGRlYXNzZXJ0CisJCWFmdGVyIFBST0JfQiBoYXMgYmVlbiBkZWFzc2VydGVkIGR1cmluZyBhIFZpcnRleCBJSQorCQlGUEdBIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuIFRoZSBkZWZhdWx0IHRpbWUgaXMgNTAwIG1TLgogCiAJCUNGR19GUEdBX1dBSVRfQlVTWQogCi0gICAgICAgICAgICAgICAgTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIEJVU1kgdG8gZGVhc3NlcnQgZHVyaW5nCi0gICAgICAgICAgICAgICAgVmlydGV4IElJIEZQR0EgY29uZmlndXJhdGlvbi4gVGhlIGRlZmF1bHQgaXMgNSBtUy4KKwkJTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIEJVU1kgdG8gZGVhc3NlcnQgZHVyaW5nCisJCVZpcnRleCBJSSBGUEdBIGNvbmZpZ3VyYXRpb24uIFRoZSBkZWZhdWx0IGlzIDUgbVMuCiAKIAkJQ0ZHX0ZQR0FfV0FJVF9DT05GSUcKIAotICAgICAgICAgICAgICAgIFRpbWUgdG8gd2FpdCBhZnRlciBGUEdBIGNvbmZpZ3VyYXRpb24uIFRoZSBkZWZhdWx0IGlzCisJCVRpbWUgdG8gd2FpdCBhZnRlciBGUEdBIGNvbmZpZ3VyYXRpb24uIFRoZSBkZWZhdWx0IGlzCiAJCTIwMCBtUy4KIAogLSBGUEdBIFN1cHBvcnQ6CUNPTkZJR19GUEdBX0NPVU5UCkBAIC05ODcsMTAgKzk4NywxMCBAQAogCiAJCUNGR19GUEdBX0NIRUNLX0JVU1kKIAotICAgICAgICAgICAgICAgIEVuYWJsZSBjaGVja3Mgb24gRlBHQSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBidXN5Ci0gICAgICAgICAgICAgICAgc3RhdHVzIGJ5IHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLiBUaGlzIG9wdGlvbgotICAgICAgICAgICAgICAgIHdpbGwgcmVxdWlyZSBhIGJvYXJkIG9yIGRldmljZSBzcGVjaWZpYyBmdW5jdGlvbiB0bwotICAgICAgICAgICAgICAgIGJlIHdyaXR0ZW4uCisJCUVuYWJsZSBjaGVja3Mgb24gRlBHQSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBidXN5CisJCXN0YXR1cyBieSB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4gVGhpcyBvcHRpb24KKwkJd2lsbCByZXF1aXJlIGEgYm9hcmQgb3IgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9uIHRvCisJCWJlIHdyaXR0ZW4uCiAKIAkJQ09ORklHX0ZQR0FfREVMQVkKIApAQCAtMTAwMiw0NCArMTAwMiw0NCBAQAogCiAJCUNGR19GUEdBX0NIRUNLX0VSUk9SCiAKLSAgICAgICAgICAgICAgICBDaGVjayBmb3IgY29uZmlndXJhdGlvbiBlcnJvcnMgZHVyaW5nIEZQR0EgYml0ZmlsZQotICAgICAgICAgICAgICAgIGxvYWRpbmcuIEZvciBleGFtcGxlLCBhYm9ydCBkdXJpbmcgVmlydGV4IElJCi0gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpZiB0aGUgSU5JVF9CIGxpbmUgZ29lcyBsb3cgKHdoaWNoCi0gICAgICAgICAgICAgICAgaW5kaWNhdGVkIGEgQ1JDIGVycm9yKS4KKwkJQ2hlY2sgZm9yIGNvbmZpZ3VyYXRpb24gZXJyb3JzIGR1cmluZyBGUEdBIGJpdGZpbGUKKwkJbG9hZGluZy4gRm9yIGV4YW1wbGUsIGFib3J0IGR1cmluZyBWaXJ0ZXggSUkKKwkJY29uZmlndXJhdGlvbiBpZiB0aGUgSU5JVF9CIGxpbmUgZ29lcyBsb3cgKHdoaWNoCisJCWluZGljYXRlZCBhIENSQyBlcnJvcikuCiAKIAkJQ0ZHX0ZQR0FfV0FJVF9JTklUCiAKLSAgICAgICAgICAgICAgICBNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgdGhlIElOSVRfQiBsaW5lIHRvIGRlYXNzZXJ0Ci0gICAgICAgICAgICAgICAgYWZ0ZXIgUFJPQl9CIGhhcyBiZWVuIGRlYXNzZXJ0ZWQgZHVyaW5nIGEgVmlydGV4IElJCi0gICAgICAgICAgICAgICAgRlBHQSBjb25maWd1cmF0aW9uIHNlcXVlbmNlLiBUaGUgZGVmYXVsdCB0aW1lIGlzIDUwMAotICAgICAgICAgICAgICAgIG1TLgorCQlNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgdGhlIElOSVRfQiBsaW5lIHRvIGRlYXNzZXJ0CisJCWFmdGVyIFBST0JfQiBoYXMgYmVlbiBkZWFzc2VydGVkIGR1cmluZyBhIFZpcnRleCBJSQorCQlGUEdBIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuIFRoZSBkZWZhdWx0IHRpbWUgaXMgNTAwCisJCW1TLgogCiAJCUNGR19GUEdBX1dBSVRfQlVTWQogCi0gICAgICAgICAgICAgICAgTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIEJVU1kgdG8gZGVhc3NlcnQgZHVyaW5nCi0gICAgICAgICAgICAgICAgVmlydGV4IElJIEZQR0EgY29uZmlndXJhdGlvbi4gVGhlIGRlZmF1bHQgaXMgNSBtUy4KKwkJTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIEJVU1kgdG8gZGVhc3NlcnQgZHVyaW5nCisJCVZpcnRleCBJSSBGUEdBIGNvbmZpZ3VyYXRpb24uIFRoZSBkZWZhdWx0IGlzIDUgbVMuCiAKIAkJQ0ZHX0ZQR0FfV0FJVF9DT05GSUcKIAotICAgICAgICAgICAgICAgIFRpbWUgdG8gd2FpdCBhZnRlciBGUEdBIGNvbmZpZ3VyYXRpb24uIFRoZSBkZWZhdWx0IGlzCi0gICAgICAgICAgICAgICAgMjAwIG1TLgorCQlUaW1lIHRvIHdhaXQgYWZ0ZXIgRlBHQSBjb25maWd1cmF0aW9uLiBUaGUgZGVmYXVsdCBpcworCQkyMDAgbVMuCiAKIC0gQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50OgogCQlDT05GSUdfSURFTlRfU1RSSU5HCiAKLSAgICAgICAgICAgICAgICBJZiBkZWZpbmVkLCB0aGlzIHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBVLUJvb3QKLSAgICAgICAgICAgICAgICB2ZXJzaW9uIGluZm9ybWF0aW9uIChVX0JPT1RfVkVSU0lPTikKKwkJSWYgZGVmaW5lZCwgdGhpcyBzdHJpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUgVS1Cb290CisJCXZlcnNpb24gaW5mb3JtYXRpb24gKFVfQk9PVF9WRVJTSU9OKQogCiAtIFZlbmRvciBQYXJhbWV0ZXIgUHJvdGVjdGlvbjoKIAotICAgICAgICAgICAgICAgIFUtQm9vdCBjb25zaWRlcnMgdGhlIHZhbHVlcyBvZiB0aGUgZW52aXJvbm1lbnQKLSAgICAgICAgICAgICAgICB2YXJpYWJsZXMgInNlcmlhbCMiIChCb2FyZCBTZXJpYWwgTnVtYmVyKSBhbmQKLSAgICAgICAgICAgICAgICAiZXRoYWRkciIgKEV0aGVybmV0IEFkZHJlc3MpIHRvIGJiIHBhcmFtZXRlcnMgdGhhdAotICAgICAgICAgICAgICAgIGFyZSBzZXQgb25jZSBieSB0aGUgYm9hcmQgdmVuZG9yIC8gbWFudWZhY3R1cmVyLCBhbmQKLSAgICAgICAgICAgICAgICBwcm90ZWN0cyB0aGVzZSB2YXJpYWJsZXMgZnJvbSBjYXN1YWwgbW9kaWZpY2F0aW9uIGJ5Ci0gICAgICAgICAgICAgICAgdGhlIHVzZXIuIE9uY2Ugc2V0LCB0aGVzZSB2YXJpYWJsZXMgYXJlIHJlYWQtb25seSwKLSAgICAgICAgICAgICAgICBhbmQgd3JpdGUgb3IgZGVsZXRlIGF0dGVtcHRzIGFyZSByZWplY3RlZC4gWW91IGNhbgotICAgICAgICAgICAgICAgIGNoYW5nZSB0aGlzIGJlaHZpb3VyOgorCQlVLUJvb3QgY29uc2lkZXJzIHRoZSB2YWx1ZXMgb2YgdGhlIGVudmlyb25tZW50CisJCXZhcmlhYmxlcyAic2VyaWFsIyIgKEJvYXJkIFNlcmlhbCBOdW1iZXIpIGFuZAorCQkiZXRoYWRkciIgKEV0aGVybmV0IEFkZHJlc3MpIHRvIGJiIHBhcmFtZXRlcnMgdGhhdAorCQlhcmUgc2V0IG9uY2UgYnkgdGhlIGJvYXJkIHZlbmRvciAvIG1hbnVmYWN0dXJlciwgYW5kCisJCXByb3RlY3RzIHRoZXNlIHZhcmlhYmxlcyBmcm9tIGNhc3VhbCBtb2RpZmljYXRpb24gYnkKKwkJdGhlIHVzZXIuIE9uY2Ugc2V0LCB0aGVzZSB2YXJpYWJsZXMgYXJlIHJlYWQtb25seSwKKwkJYW5kIHdyaXRlIG9yIGRlbGV0ZSBhdHRlbXB0cyBhcmUgcmVqZWN0ZWQuIFlvdSBjYW4KKwkJY2hhbmdlIHRoaXMgYmVodmlvdXI6CiAKIAkJSWYgQ09ORklHX0VOVl9PVkVSV1JJVEUgaXMgI2RlZmluZWQgaW4geW91ciBjb25maWcKIAkJZmlsZSwgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIHZlbmRvciBwYXJhbWV0ZXJzIGlzCkBAIC0xMDk5LDEwICsxMDk5LDEwIEBACiAKIAkJQ09ORklHX05FVF9SRVRSWV9DT1VOVAogCi0gICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyBmb3IKLSAgICAgICAgICAgICAgICBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBBUlAsIFJBUlAsIFRGVFAsIG9yIEJPT1RQCi0gICAgICAgICAgICAgICAgYmVmb3JlIGdpdmluZyB1cCB0aGUgb3BlcmF0aW9uLiBJZiBub3QgZGVmaW5lZCwgYQotICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgb2YgNSBpcyB1c2VkLgorCQlUaGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlIG51bWJlciBvZiByZXRyaWVzIGZvcgorCQluZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBBUlAsIFJBUlAsIFRGVFAsIG9yIEJPT1RQCisJCWJlZm9yZSBnaXZpbmcgdXAgdGhlIG9wZXJhdGlvbi4gSWYgbm90IGRlZmluZWQsIGEKKwkJZGVmYXVsdCB2YWx1ZSBvZiA1IGlzIHVzZWQuCiAKIC0gQ29tbWFuZCBJbnRlcnByZXRlcjoKIAkJQ0ZHX0hVU0hfUEFSU0VSCkBAIC0xMTI1LDE4ICsxMTI1LDE4IEBACiAKIAlOb3RlOgogCi0gICAgICAgICAgICAgICAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSBsb2NhbCB2YXJpYWJsZXMKLSAgICAgICAgICAgICAgICBzcGFjZSBhbmQgZ2xvYmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBzcGFjZSBhcmUKLSAgICAgICAgICAgICAgICBzZXBhcmF0ZWQuIExvY2FsIHZhcmlhYmxlcyBhcmUgdGhvc2UgeW91IGRlZmluZSBieQotICAgICAgICAgICAgICAgIHNpbXBseSB0eXBpbmcgbGlrZSBgbmFtZT12YWx1ZScuIFRvIGFjY2VzcyBhIGxvY2FsCi0gICAgICAgICAgICAgICAgdmFyaWFibGUgbGF0ZXIgb24sIHlvdSBoYXZlIHdyaXRlIGAkbmFtZScgb3IKLSAgICAgICAgICAgICAgICBgJHtuYW1lfSc7IHZhcmlhYmxlIGRpcmVjdGx5IGJ5IHR5cGluZyBzYXkgYCRuYW1lJyBhdAotICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIHByb21wdC4KKwkJSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSBsb2NhbCB2YXJpYWJsZXMKKwkJc3BhY2UgYW5kIGdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BhY2UgYXJlCisJCXNlcGFyYXRlZC4gTG9jYWwgdmFyaWFibGVzIGFyZSB0aG9zZSB5b3UgZGVmaW5lIGJ5CisJCXNpbXBseSB0eXBpbmcgbGlrZSBgbmFtZT12YWx1ZScuIFRvIGFjY2VzcyBhIGxvY2FsCisJCXZhcmlhYmxlIGxhdGVyIG9uLCB5b3UgaGF2ZSB3cml0ZSBgJG5hbWUnIG9yCisJCWAke25hbWV9JzsgdmFyaWFibGUgZGlyZWN0bHkgYnkgdHlwaW5nIHNheSBgJG5hbWUnIGF0CisJCXRoZSBjb21tYW5kIHByb21wdC4KIAotICAgICAgICAgICAgICAgIEdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHRob3NlIHlvdSB1c2UKLSAgICAgICAgICAgICAgICBzZXRlbnYvcHJpbnRlbnYgdG8gd29yayB3aXRoLiBUbyBydW4gYSBjb21tYW5kIHN0b3JlZAotICAgICAgICAgICAgICAgIGluIHN1Y2ggYSB2YXJpYWJsZSwgeW91IG5lZWQgdG8gdXNlIHRoZSBydW4gY29tbWFuZCwKLSAgICAgICAgICAgICAgICBhbmQgeW91IG11c3Qgbm90IHVzZSB0aGUgJyQnIHNpZ24gdG8gYWNjZXNzIHRoZW0uCisJCUdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHRob3NlIHlvdSB1c2UKKwkJc2V0ZW52L3ByaW50ZW52IHRvIHdvcmsgd2l0aC4gVG8gcnVuIGEgY29tbWFuZCBzdG9yZWQKKwkJaW4gc3VjaCBhIHZhcmlhYmxlLCB5b3UgbmVlZCB0byB1c2UgdGhlIHJ1biBjb21tYW5kLAorCQlhbmQgeW91IG11c3Qgbm90IHVzZSB0aGUgJyQnIHNpZ24gdG8gYWNjZXNzIHRoZW0uCiAKIAkJVG8gc3RvcmUgY29tbWFuZHMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhCiAJCXZhcmlhYmxlLCBwbGVhc2UgdXNlIGRvdWJsZSBxdW90YXRpb24gbWFya3MKQEAgLTExNDcsMzggKzExNDcsMzggQEAKIC0gRGVmYXVsdCBFbnZpcm9ubWVudAogCQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCiAKLSAgICAgICAgICAgICAgICBEZWZpbmUgdGhpcyB0byBjb250YWluIGFueSBudW1iZXIgb2YgbnVsbCB0ZXJtaW5hdGVkCi0gICAgICAgICAgICAgICAgc3RyaW5ncyAodmFyaWFibGUgPSB2YWx1ZSBwYWlycykgdGhhdCB3aWxsIGJlIHBhcnQgb2YKLSAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBlbnZpcm9tZW50IGNvbXBpbGVkIGludG8gdGhlIGJvb3QgaW1hZ2UuCisJCURlZmluZSB0aGlzIHRvIGNvbnRhaW4gYW55IG51bWJlciBvZiBudWxsIHRlcm1pbmF0ZWQKKwkJc3RyaW5ncyAodmFyaWFibGUgPSB2YWx1ZSBwYWlycykgdGhhdCB3aWxsIGJlIHBhcnQgb2YKKwkJdGhlIGRlZmF1bHQgZW52aXJvbWVudCBjb21waWxlZCBpbnRvIHRoZSBib290IGltYWdlLgogCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHBsYWNlIHNvbWV0aGluZyBsaWtlIHRoaXMgaW4geW91cgotICAgICAgICAgICAgICAgIGJvYXJkJ3MgY29uZmlnIGZpbGU6CisJCUZvciBleGFtcGxlLCBwbGFjZSBzb21ldGhpbmcgbGlrZSB0aGlzIGluIHlvdXIKKwkJYm9hcmQncyBjb25maWcgZmlsZToKIAogCQkjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgXAogCQkJIm15dmFyMT12YWx1ZTFcMCIgXAogCQkJIm15dmFyMj12YWx1ZTJcMCIKIAotICAgICAgICAgICAgICAgIFdhcm5pbmc6IFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIGtub3dsZWRnZSBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICBpbnRlcm5hbCBmb3JtYXQgaG93IHRoZSBlbnZpcm9ubWVudCBpcyBzdG9yZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgVS1Cb290IGNvZGUuIFRoaXMgaXMgTk9UIGFuIG9mZmljaWFsLCBleHBvcnRlZAotICAgICAgICAgICAgICAgIGludGVyZmFjZSEgQWx0aG91Z2ggaXQgaXMgdW5saWtlbHkgdGhhdCB0aGlzIGZvcm1hdAotICAgICAgICAgICAgICAgIHdpbGwgY2hhbmdlIHNvb24sIGJ1dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgZWl0aGVyLgorCQlXYXJuaW5nOiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiBrbm93bGVkZ2UgYWJvdXQgdGhlCisJCWludGVybmFsIGZvcm1hdCBob3cgdGhlIGVudmlyb25tZW50IGlzIHN0b3JlZCBieSB0aGUKKwkJVS1Cb290IGNvZGUuIFRoaXMgaXMgTk9UIGFuIG9mZmljaWFsLCBleHBvcnRlZAorCQlpbnRlcmZhY2UhIEFsdGhvdWdoIGl0IGlzIHVubGlrZWx5IHRoYXQgdGhpcyBmb3JtYXQKKwkJd2lsbCBjaGFuZ2Ugc29vbiwgYnV0IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBlaXRoZXIuCiAJCVlvdSBiZXR0ZXIga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaGVyZS4KIAotICAgICAgICAgICAgICAgIE5vdGU6IG92ZXJseSAoYWIpdXNlIG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IGlzCi0gICAgICAgICAgICAgICAgZGlzY291cmFnZWQuIE1ha2Ugc3VyZSB0byBjaGVjayBvdGhlciB3YXlzIHRvIHByZXNldAotICAgICAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCBsaWtlIHRoZSBhdXRvc2NyaXB0IGZ1bmN0aW9uIG9yIHRoZQotICAgICAgICAgICAgICAgIGJvb3QgY29tbWFuZCBmaXJzdC4KKwkJTm90ZTogb3Zlcmx5IChhYil1c2Ugb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgaXMKKwkJZGlzY291cmFnZWQuIE1ha2Ugc3VyZSB0byBjaGVjayBvdGhlciB3YXlzIHRvIHByZXNldAorCQl0aGUgZW52aXJvbm1lbnQgbGlrZSB0aGUgYXV0b3NjcmlwdCBmdW5jdGlvbiBvciB0aGUKKwkJYm9vdCBjb21tYW5kIGZpcnN0LgogCiAtIFNob3cgYm9vdCBwcm9ncmVzcwogCQlDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCiAKLSAgICAgICAgICAgICAgICBEZWZpbmluZyB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gYWRkIHNvbWUgYm9hcmQtCi0gICAgICAgICAgICAgICAgc3BlY2lmaWMgY29kZSAoY2FsbGluZyBhIHVzZXItcHJvdmlkZWQgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAic2hvd19ib290X3Byb2dyZXNzKGludCkiKSB0aGF0IGVuYWJsZXMgeW91IHRvIHNob3cKLSAgICAgICAgICAgICAgICB0aGUgc3lzdGVtJ3MgYm9vdCBwcm9ncmVzcyBvbiBzb21lIGRpc3BsYXkgKGZvcgotICAgICAgICAgICAgICAgIGV4YW1wbGUsIHNvbWUgTEVEJ3MpIG9uIHlvdXIgYm9hcmQuIEF0IHRoZSBtb21lbnQsCi0gICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBjaGVja3BvaW50cyBhcmUgaW1wbGVtZW50ZWQ6CisJCURlZmluaW5nIHRoaXMgb3B0aW9uIGFsbG93cyB0byBhZGQgc29tZSBib2FyZC0KKwkJc3BlY2lmaWMgY29kZSAoY2FsbGluZyBhIHVzZXItcHJvdmlkZWQgZnVuY3Rpb24KKwkJInNob3dfYm9vdF9wcm9ncmVzcyhpbnQpIikgdGhhdCBlbmFibGVzIHlvdSB0byBzaG93CisJCXRoZSBzeXN0ZW0ncyBib290IHByb2dyZXNzIG9uIHNvbWUgZGlzcGxheSAoZm9yCisJCWV4YW1wbGUsIHNvbWUgTEVEJ3MpIG9uIHlvdXIgYm9hcmQuIEF0IHRoZSBtb21lbnQsCisJCXRoZSBmb2xsb3dpbmcgY2hlY2twb2ludHMgYXJlIGltcGxlbWVudGVkOgogCiAgIEFyZwlXaGVyZQkJCVdoZW4KICAgICAxCWNvbW1vbi9jbWRfYm9vdG0uYwliZWZvcmUgYXR0ZW1wdGluZyB0byBib290IGFuIGltYWdlCkBAIC0xMjQxLDIzICsxMjQxLDIzIEBACiAtIE1vZGVtIGRlYnVnIHN1cHBvcnQ6CiAJCUNPTkZJR19NT0RFTV9TVVBQT1JUX0RFQlVHCiAKLSAgICAgICAgICAgICAgICBFbmFibGVzIGRlYnVnZ2luZyBzdHVmZiAoY2hhciBzY3JlZW5bMTAyNF0sIGRiZygpKQotICAgICAgICAgICAgICAgIGZvciBtb2RlbSBzdXBwb3J0LiBVc2VmdWwgb25seSB3aXRoIEJESTIwMDAuCisJCUVuYWJsZXMgZGVidWdnaW5nIHN0dWZmIChjaGFyIHNjcmVlblsxMDI0XSwgZGJnKCkpCisJCWZvciBtb2RlbSBzdXBwb3J0LiBVc2VmdWwgb25seSB3aXRoIEJESTIwMDAuCiAKIC0gR2VuZXJhbDoKIAotICAgICAgICAgICAgICAgIEluIHRoZSB0YXJnZXQgc3lzdGVtIG1vZGVtIHN1cHBvcnQgaXMgZW5hYmxlZCB3aGVuIGEKLSAgICAgICAgICAgICAgICBzcGVjaWZpYyBrZXkgKGtleSBjb21iaW5hdGlvbikgaXMgcHJlc3NlZCBkdXJpbmcKLSAgICAgICAgICAgICAgICBwb3dlci1vbi4gT3RoZXJ3aXNlIFUtQm9vdCB3aWxsIGJvb3Qgbm9ybWFsbHkKLSAgICAgICAgICAgICAgICAoYXV0b2Jvb3QpLiBUaGUga2V5X3ByZXNzZWQoKSBmdWN0aW9uIGlzIGNhbGxlZCBmcm9tCi0gICAgICAgICAgICAgICAgYm9hcmRfaW5pdCgpLiBDdXJyZW50bHkga2V5X3ByZXNzZWQoKSBpcyBhIGR1bW15Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24sIHJldHVybmluZyAxIGFuZCB0aHVzIGVuYWJsaW5nIG1vZGVtCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uCisJCUluIHRoZSB0YXJnZXQgc3lzdGVtIG1vZGVtIHN1cHBvcnQgaXMgZW5hYmxlZCB3aGVuIGEKKwkJc3BlY2lmaWMga2V5IChrZXkgY29tYmluYXRpb24pIGlzIHByZXNzZWQgZHVyaW5nCisJCXBvd2VyLW9uLiBPdGhlcndpc2UgVS1Cb290IHdpbGwgYm9vdCBub3JtYWxseQorCQkoYXV0b2Jvb3QpLiBUaGUga2V5X3ByZXNzZWQoKSBmdWN0aW9uIGlzIGNhbGxlZCBmcm9tCisJCWJvYXJkX2luaXQoKS4gQ3VycmVudGx5IGtleV9wcmVzc2VkKCkgaXMgYSBkdW1teQorCQlmdW5jdGlvbiwgcmV0dXJuaW5nIDEgYW5kIHRodXMgZW5hYmxpbmcgbW9kZW0KKwkJaW5pdGlhbGl6YXRpb24uCiAKLSAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gbW9kZW0gaW5pdCBzdHJpbmdzIGluIHRoZQotICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBVLUJvb3QgcHJvY2VlZCB0byBhdXRvYm9vdDsgdGhlCi0gICAgICAgICAgICAgICAgcHJldmlvdXMgb3V0cHV0IChiYW5uZXIsIGluZm8gcHJpbnRmcykgd2lsbCBiZQotICAgICAgICAgICAgICAgIHN1cHJlc3NlZCwgdGhvdWdoLgorCQlJZiB0aGVyZSBhcmUgbm8gbW9kZW0gaW5pdCBzdHJpbmdzIGluIHRoZQorCQllbnZpcm9ubWVudCwgVS1Cb290IHByb2NlZWQgdG8gYXV0b2Jvb3Q7IHRoZQorCQlwcmV2aW91cyBvdXRwdXQgKGJhbm5lciwgaW5mbyBwcmludGZzKSB3aWxsIGJlCisJCXN1cHJlc3NlZCwgdGhvdWdoLgogCiAJCVNlZSBhbHNvOiBkb2MvUkVBRE1FLk1vZGVtCiAKQEAgLTEzNjgsOCArMTM2OCw4IEBACiAJCWRvd25sb2FkZWQgaW1hZ2UpIHRoaXMgb3B0aW9uIG1heSBiZSB2ZXJ5IHVzZWZ1bC4KIAogLSBDRkdfRkxBU0hfQ0ZJOgotICAgICAgICAgICAgICAgIERlZmluZSBpZiB0aGUgZmxhc2ggZHJpdmVyIHVzZXMgZXh0cmEgZWxlbWVudHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgY29tbW9uIGZsYXNoIHN0cnVjdHVyZSBmb3Igc3RvcmluZyBmbGFzaCBnZW9tZXRyeQorCQlEZWZpbmUgaWYgdGhlIGZsYXNoIGRyaXZlciB1c2VzIGV4dHJhIGVsZW1lbnRzIGluIHRoZQorCQljb21tb24gZmxhc2ggc3RydWN0dXJlIGZvciBzdG9yaW5nIGZsYXNoIGdlb21ldHJ5CiAKIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgdGhhdCBkZWFsIHdpdGggdGhlIHBsYWNlbWVudCBhbmQgbWFuYWdlbWVudAogb2YgZW52aXJvbm1lbnQgZGF0YSAodmFyaWFibGUgYXJlYSk7IGluIGdlbmVyYWwsIHdlIHN1cHBvcnQgdGhlCkBAIC0xNDM1LDEwICsxNDM1LDEwIEBACiAJLSBDRkdfRU5WX0FERFJfUkVEVU5ECiAJICBDRkdfRU5WX1NJWkVfUkVEVU5ECiAKLSAgICAgICAgICAgVGhlc2Ugc2V0dGluZ3MgZGVzY3JpYmUgYSBzZWNvbmQgc3RvcmFnZSBhcmVhIHVzZWQgdG8gaG9sZAotICAgICAgICAgICBhIHJlZHVuZGFuZCBjb3B5IG9mIHRoZSBlbnZpcm9ubWVudCBkYXRhLCBzbyB0aGF0IHRoZXJlIGlzCi0gICAgICAgICAgIGEgdmFsaWQgYmFja3VwIGNvcHkgaW4gY2FzZSB0aGVyZSBpcyBhIHBvd2VyIGZhaWx1ciBkdXJpbmcKLSAgICAgICAgICAgYSAic2F2ZWVudiIgb3BlcmF0aW9uLgorCSAgIFRoZXNlIHNldHRpbmdzIGRlc2NyaWJlIGEgc2Vjb25kIHN0b3JhZ2UgYXJlYSB1c2VkIHRvIGhvbGQKKwkgICBhIHJlZHVuZGFuZCBjb3B5IG9mIHRoZSBlbnZpcm9ubWVudCBkYXRhLCBzbyB0aGF0IHRoZXJlIGlzCisJICAgYSB2YWxpZCBiYWNrdXAgY29weSBpbiBjYXNlIHRoZXJlIGlzIGEgcG93ZXIgZmFpbHVyIGR1cmluZworCSAgIGEgInNhdmVlbnYiIG9wZXJhdGlvbi4KIAogQkUgQ0FSRUZVTCEgQW55IGNoYW5nZXMgdG8gdGhlIGZsYXNoIGxheW91dCwgYW5kIHNvbWUgY2hhbmdlcyB0byB0aGUKIHNvdXJjZSBjb2RlIHdpbGwgbWFrZSBpdCBuZWNlc3NhcnkgdG8gYWRhcHQgPGJvYXJkPi91LWJvb3QubGRzKgpAQCAtMTUwMSwyNSArMTUwMSw2IEBACiAJLSBDRkdfRUVQUk9NX1NJWkU6CiAJICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgRUVQUk9NIGRldmljZS4KIAotCS0gQ0ZHX0kyQ19FRVBST01fQUREUjoKLQkgIElmIGRlZmluZWQsIHNwZWNpZmllZCB0aGUgY2hpcCBhZGRyZXNzIG9mIHRoZSBFRVBST00gZGV2aWNlLgotCSAgVGhlIGRlZmF1bHQgYWRkcmVzcyBpcyB6ZXJvLgotCi0JLSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUzoKLQkgIElmIGRlZmluZWQsIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHRvIGFkZHJlc3MgYnl0ZXMgaW4gYQotCSAgc2luZ2xlIHBhZ2UgaW4gdGhlIEVFUFJPTSBkZXZpY2UuICBBIDY0IGJ5dGUgcGFnZSwgZm9yIGV4YW1wbGUKLQkgIHdvdWxkIHJlcXVpcmUgc2l4IGJpdHMuCi0KLQktIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUzoKLQkgIElmIGRlZmluZWQsIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGJldHdlZW4KLQkgIHBhZ2Ugd3JpdGVzLiAgVGhlIGRlZmF1bHQgaXMgemVybyBtaWxsaXNlY29uZHMuCi0KLQktIENGR19JMkNfRUVQUk9NX0FERFJfTEVOOgotCSAgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgRUVQUk9NIG1lbW9yeSBhcnJheSBhZGRyZXNzLiAgTm90ZQotCSAgdGhhdCB0aGlzIGlzIE5PVCB0aGUgY2hpcCBhZGRyZXNzIGxlbmd0aCEKLQotCS0gQ0ZHX0VFUFJPTV9TSVpFOgotCSAgVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIEVFUFJPTSBkZXZpY2UuCiAKIC0gQ0ZHX1NQSV9JTklUX09GRlNFVAogCkBAIC0xNTc1LDE5ICsxNTU2LDE5IEBACiAKIAkJQ0ZHX0lTQV9JT19PRkZTRVQKIAotICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIG9mZnNldCBvZiByZWdpc3RlciBmcm9tIGFkZHJlc3MuIEl0Ci0gICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB3aGljaCBwYXJ0IG9mIHRoZSBkYXRhIGJ1cyBpcyBjb25uZWN0ZWQgdG8KLSAgICAgICAgICAgICAgICB0aGUgZmRjIGNoaXBzZXQuIChkZWZhdWx0IHZhbHVlIDApCisJCWRlZmluZXMgdGhlIG9mZnNldCBvZiByZWdpc3RlciBmcm9tIGFkZHJlc3MuIEl0CisJCWRlcGVuZHMgb24gd2hpY2ggcGFydCBvZiB0aGUgZGF0YSBidXMgaXMgY29ubmVjdGVkIHRvCisJCXRoZSBmZGMgY2hpcHNldC4gKGRlZmF1bHQgdmFsdWUgMCkKIAotICAgICAgICAgICAgICAgIElmIENGR19JU0FfSU9fU1RSSURFIENGR19JU0FfSU9fT0ZGU0VUIGFuZAotICAgICAgICAgICAgICAgIENGR19GRENfRFJJVkVfTlVNQkVSIGFyZSB1bmRlZmluZWQsIHRoZXkgdGFrZSB0aGVpcgotICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUuCisJCUlmIENGR19JU0FfSU9fU1RSSURFIENGR19JU0FfSU9fT0ZGU0VUIGFuZAorCQlDRkdfRkRDX0RSSVZFX05VTUJFUiBhcmUgdW5kZWZpbmVkLCB0aGV5IHRha2UgdGhlaXIKKwkJZGVmYXVsdCB2YWx1ZS4KIAotICAgICAgICAgICAgICAgIGlmIENGR19GRENfSFdfSU5JVCBpcyBkZWZpbmVkLCB0aGVuIHRoZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgIGZkY19od19pbml0KCkgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEZEQwotICAgICAgICAgICAgICAgIHNldHVwLiBmZGNfaHdfaW5pdCgpIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGJvYXJkCi0gICAgICAgICAgICAgICAgc291cmNlIGNvZGUuIEl0IGlzIHVzZWQgdG8gbWFrZSBoYXJkd2FyZSBkZXBlbmRhbnQKLSAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbnMuCisJCWlmIENGR19GRENfSFdfSU5JVCBpcyBkZWZpbmVkLCB0aGVuIHRoZSBmdW5jdGlvbgorCQlmZGNfaHdfaW5pdCgpIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBGREMKKwkJc2V0dXAuIGZkY19od19pbml0KCkgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgYm9hcmQKKwkJc291cmNlIGNvZGUuIEl0IGlzIHVzZWQgdG8gbWFrZSBoYXJkd2FyZSBkZXBlbmRhbnQKKwkJaW5pdGlhbGl6YXRpb25zLgogCiAtIENGR19JTU1SOglQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBJbnRlcm5hbCBNZW1vcnkgTWFwcGVkCiAJCVJlZ2lzdGVyOyBETyBOT1QgQ0hBTkdFISAoMTEtNCkKQEAgLTE2NzYsMTAgKzE2NTcsMTAgQEAKIAkJZG9jL1JFQURNRS5NQlggYmVmb3JlIHNldHRpbmcgdGhpcyB2YXJpYWJsZSEKIAogLSBDRkdfQ1BNX1BPU1RfV09SRF9BRERSOiAoTVBDOHh4LCBNUEM4MjYwIG9ubHkpCi0gICAgICAgICAgICAgICAgT2Zmc2V0IG9mIHRoZSBib290bW9kZSB3b3JkIGluIERQUkFNIHVzZWQgYnkgcG9zdAotICAgICAgICAgICAgICAgIChQb3dlciBPbiBTZWxmIFRlc3RzKS4gVGhpcyBkZWZpbml0aW9uIG92ZXJyaWRlcwotICAgICAgICAgICAgICAgICNkZWZpbmUnZCBkZWZhdWx0IHZhbHVlIGluIGNvbW1wcm9jLmggcmVzcC4KLSAgICAgICAgICAgICAgICBjcG1fODI2MC5oLgorCQlPZmZzZXQgb2YgdGhlIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gdXNlZCBieSBwb3N0CisJCShQb3dlciBPbiBTZWxmIFRlc3RzKS4gVGhpcyBkZWZpbml0aW9uIG92ZXJyaWRlcworCQkjZGVmaW5lJ2QgZGVmYXVsdCB2YWx1ZSBpbiBjb21tcHJvYy5oIHJlc3AuCisJCWNwbV84MjYwLmguCiAKIEJ1aWxkaW5nIHRoZSBTb2Z0d2FyZToKID09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI1MzYsNiArMjUxNyw0NCBAQAogTVBDODI2eCBwcm9jZXNzb3JzKSwgb24gb3RoZXJzIChwYXJ0cyBvZikgdGhlIGRhdGEgY2FjaGUgY2FuIGJlCiBsb2NrZWQgYXMgKG1pcy0pIHVzZWQgYXMgbWVtb3J5LCBldGMuCiAKKwlDaHJpcyBIYWxsaW5hbiBwb3N0ZWQgYSBnb29kIHN1bW15IG9mICB0aGVzZSAgaXNzdWVzICB0byAgdGhlCisJdS1ib290LXVzZXJzIG1haWxpbmcgbGlzdDoKKworCVN1YmplY3Q6IFJFOiBbVS1Cb290LVVzZXJzXSBSRTogTW9yZSBPbiBNZW1vcnkgQmFuayB4IChub3RoaW5nbmVzcyk/CisJRnJvbTogIkNocmlzIEhhbGxpbmFuIiA8Y2xoQG5ldDFwbHVzLmNvbT4KKwlEYXRlOiBNb24sIDEwIEZlYiAyMDAzIDE2OjQzOjQ2IC0wNTAwICgyMjo0MyBNRVQpCisJLi4uCisKKwlDb3JyZWN0IG1lIGlmIEknbSB3cm9uZywgZm9sa3MsIGJ1dCB0aGUgd2F5IEkgdW5kZXJzdGFuZCBpdAorCWlzIHRoaXM6IFVzaW5nIERDQUNIRSBhcyBpbml0aWFsIFJBTSBmb3IgU3RhY2ssIGV0YywgZG9lcyBub3QKKwlyZXF1aXJlIGFueSBwaHlzaWNhbCBSQU0gYmFja2luZyB1cCB0aGUgY2FjaGUuIFRoZSBjbGV2ZXJuZXNzCisJaXMgdGhhdCB0aGUgY2FjaGUgaXMgYmVpbmcgdXNlZCBhcyBhIHRlbXBvcmFyeSBzdXBwbHkgb2YKKwluZWNlc3Nhcnkgc3RvcmFnZSBiZWZvcmUgdGhlIFNEUkFNIGNvbnRyb2xsZXIgaXMgc2V0dXAuIEl0J3MKKwliZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbGlzdCB0byBleHBhaW4gdGhlIGRldGFpbHMsIGJ1dCB5b3UKKwljYW4gc2VlIGhvdyB0aGlzIHdvcmtzIGJ5IHN0dWR5aW5nIHRoZSBjYWNoZSBhcmNoaXRlY3R1cmUgYW5kCisJb3BlcmF0aW9uIGluIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHByb2Nlc3Nvci1zcGVjaWZpYyBtYW51YWxzLgorCisJT0NNIGlzIE9uIENoaXAgTWVtb3J5LCB3aGljaCBJIGJlbGlldmUgdGhlIDQwNUdQIGhhcyA0Sy4gSXQKKwlpcyBhbm90aGVyIG9wdGlvbiBmb3IgdGhlIHN5c3RlbSBkZXNpZ25lciB0byB1c2UgYXMgYW4KKwlpbml0aWFsIHN0YWNrL3JhbSBhcmVhIHByaW9yIHRvIFNEUkFNIGJlaW5nIGF2YWlsYWJsZS4gRWl0aGVyCisJb3B0aW9uIHNob3VsZCB3b3JrIGZvciB5b3UuIFVzaW5nIENTIDQgc2hvdWxkIGJlIGZpbmUgaWYgeW91cgorCWJvYXJkIGRlc2lnbmVycyBoYXZlbid0IHVzZWQgaXQgZm9yIHNvbWV0aGluZyB0aGF0IHdvdWxkCisJY2F1c2UgeW91IGdyaWVmIGR1cmluZyB0aGUgaW5pdGlhbCBib290ISBJdCBpcyBmcmVxdWVudGx5IG5vdAorCXVzZWQuCisKKwlDRkdfSU5JVF9SQU1fQUREUiBzaG91bGQgYmUgc29tZXdoZXJlIHRoYXQgd29uJ3QgaW50ZXJmZXJlCisJd2l0aCB5b3VyIHByb2Nlc3Nvci9ib2FyZC9zeXN0ZW0gZGVzaWduLiBUaGUgZGVmYXVsdCB2YWx1ZQorCXlvdSB3aWxsIGZpbmQgaW4gYW55IHJlY2VudCB1LWJvb3QgZGlzdHJpYnV0aW9uIGluCisJV2FsbnV0NDA1Lmggc2hvdWxkIHdvcmsgZm9yIHlvdS4gSSdkIHNldCBpdCB0byBhIHZhbHVlIGxhcmdlcgorCXRoYW4geW91ciBTRFJBTSBtb2R1bGUuIElmIHlvdSBoYXZlIGEgNjRNQiBTRFJBTSBtb2R1bGUsIHNldAorCWl0IGFib3ZlIDQwMF8wMDAwLiBKdXN0IG1ha2Ugc3VyZSB5b3VyIGJvYXJkIGhhcyBubyByZXNvdXJjZXMKKwl0aGF0IGFyZSBzdXBwb3NlZCB0byByZXNwb25kIHRvIHRoYXQgYWRkcmVzcyEgVGhhdCBjb2RlIGluCisJc3RhcnQuUyBoYXMgYmVlbiBhcm91bmQgYSB3aGlsZSBhbmQgc2hvdWxkIHdvcmsgYXMgaXMgd2hlbgorCXlvdSBnZXQgdGhlIGNvbmZpZyByaWdodC4KKworCS1DaHJpcyBIYWxsaW5hbgorCURTNC5DT00sIEluYy4KKwogSXQgaXMgZXNzZW50aWFsIHRvIHJlbWVtYmVyIHRoaXMsIHNpbmNlIGl0IGhhcyBzb21lIGltcGFjdCBvbiB0aGUgQwogY29kZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZXM6CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vTWFrZWZpbGUgYi9ib2FyZC9pbm5va29tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYmU3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pbm5va29tL01ha2VmaWxlCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gaW5ub2tvbS5vIGZsYXNoLm8KK1NPQkpTCTo9IG1lbXNldHVwLm8KKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCistaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vY29uZmlnLm1rIGIvYm9hcmQvaW5ub2tvbS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5ZmZmZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2lubm9rb20vY29uZmlnLm1rCkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IGMwMDAnODAwMCwgZW50cnkgYzAwMCc4MDAwCisjCisjIHdlIGxvYWQgb3Vyc2VsZiB0byBjMTcwJzAwMDAsIHRoZSB1cHBlciAxIE1CIG9mIHNlY29uZCBiYW5rCisjCisjIGRvd25sb2FkIGFyZWFzIGlzIGM4MDAnMDAwMAorIworCisjIFRoaXMgaXMgdGhlIGFkZHJlc3Mgd2hlcmUgVS1Cb290IGxpdmVzIGluIGZsYXNoOgorI1RFWFRfQkFTRSA9IDAKKworIyBGSVhNRTogYXJtYm9vdCBkb2VzIG9ubHkgd29yayBjb3JyZWN0bHkgd2hlbiBiZWluZyBjb21waWxlZAorIyBmb3IgdGhlIGFkZHJlc3NlcyBfYWZ0ZXJfIHJlbG9jYXRpb24gdG8gUkFNISEgT3RoZXJ3aGlzZSB0aGUKKyMgLmJzcyBzZWdtZW50IGlzIGFzc3VtZWQgaW4gZmxhc2guLi4KK1RFWFRfQkFTRSA9IDB4YTFmZTAwMDAKKwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9mbGFzaC5jIGIvYm9hcmQvaW5ub2tvbS9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTk3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pbm5va29tL2ZsYXNoLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEt5bGUgSGFycmlzLCBOZXh1cyBUZWNobm9sb2dpZXMsIEluYy4ga2hhcnJpc0BuZXh1cy10ZWNoLm5ldAorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4LCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworI2RlZmluZSBGTEFTSF9CQU5LX1NJWkUgMHgwMjAwMDAwMAorI2RlZmluZSBNQUlOX1NFQ1RfU0laRSAgMHg0MDAwMCAgICAgICAgIC8qIDJ4MTYgPSAyNTZrIHBlciBzZWN0b3IgKi8KKworZmxhc2hfaW5mb190ICAgIGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CisKKworLyoqCisgKiBmbGFzaF9pbml0OiAtIGluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBmbGFzaCBjaGlwcworICoKKyAqIEByZXR1cm46IHNpemUgb2YgdGhlIGZsYXNoCisgKi8KKwordWxvbmcgZmxhc2hfaW5pdCh2b2lkKQoreworCWludCBpLCBqOworCXVsb25nIHNpemUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQl1bG9uZyBmbGFzaGJhc2UgPSAwOworCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KKwkgIAkJKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKKwkgIAkJKElOVEVMX0lEXzI4RjEyOEozICYgRkxBU0hfVFlQRU1BU0spOworCQlmbGFzaF9pbmZvW2ldLnNpemUgPSBGTEFTSF9CQU5LX1NJWkU7CisJCWZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50ID0gQ0ZHX01BWF9GTEFTSF9TRUNUOworCQltZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOworCisJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCWZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcGFuaWMoImNvbmZpZ3VyZWQgdG8gbWFueSBmbGFzaCBiYW5rcyFcbiIpOworCQkJCWJyZWFrOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudDsgaisrKSB7CisJCQlmbGFzaF9pbmZvW2ldLnN0YXJ0W2pdID0gZmxhc2hiYXNlICsgaipNQUlOX1NFQ1RfU0laRTsKKwkJfQorCQlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKKwl9CisKKwkvKiBQcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMgKi8KKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRkxBU0hfQkFTRSwKKwkJCUNGR19GTEFTSF9CQVNFICsgX2FybWJvb3RfZW5kX2RhdGEgLSBfYXJtYm9vdF9zdGFydCwKKwkJCSZmbGFzaF9pbmZvWzBdKTsKKworI2lmZGVmIENGR19FTlZfSVNfSU5fRkxBU0gKKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRU5WX0FERFIsCisJCQlDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAorCQkJJmZsYXNoX2luZm9bMF0pOworI2VuZGlmCisKKwlyZXR1cm4gc2l6ZTsKK30KKworCisvKioKKyAqIGZsYXNoX3ByaW50X2luZm86IC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsYXNoIHNpdHVhdGlvbgorICoKKyAqIEBwYXJhbSBpbmZvOgorICovCisKK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaj0wOyBqPENGR19NQVhfRkxBU0hfQkFOS1M7IGorKykgeworCisJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCisJCQljYXNlIChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKToKKwkJCQlwcmludGYoIkludGVsOiAiKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCJVbmtub3duIFZlbmRvciAiKTsKKwkJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCisJCQljYXNlIChJTlRFTF9JRF8yOEYxMjhKMyAmIEZMQVNIX1RZUEVNQVNLKToKKwkJCQlwcmludGYoIjI4RjEyOEozICgxMjhNYml0KVxuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCQkJCXJldHVybjsKKwkJfQorCisJCXByaW50ZigiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKKwkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisKKwkJcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkJaWYgKChpICUgNSkgPT0gMCkgcHJpbnRmICgiXG4gICAiKTsKKworCQkJcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKKwkJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOworCQl9CisJCXByaW50ZiAoIlxuIik7CisJCWluZm8rKzsKKwl9Cit9CisKKworLyoqCisgKiBmbGFzaF9lcmFzZTogLSBlcmFzZSBmbGFzaCBzZWN0b3JzCisgKgorICovCisKK2ludCBmbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCWludCBmbGFnLCBwcm90LCBzZWN0OworCWludCByYyA9IEVSUl9PSzsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQorCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVFlQRTsKKworCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgeworCQlyZXR1cm4gRVJSX0lOVkFMOworCX0KKworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgIT0gKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spKQorCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVkVORE9SOworCisJcHJvdCA9IDA7CisJZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSBwcm90Kys7CisJfQorCisJaWYgKHByb3QpIHJldHVybiBFUlJfUFJPVEVDVEVEOworCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CisJICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCisJICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQorCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCisJICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgorCSAqLworCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdCAmJiAhY3RybGMoKTsgc2VjdCsrKSB7CisKKwkJcHJpbnRmKCJFcmFzaW5nIHNlY3RvciAlMmQgLi4uICIsIHNlY3QpOworCisJCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJCXJlc2V0X3RpbWVyX21hc2tlZCgpOworCisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLworCQkJdTMyICogdm9sYXRpbGUgYWRkciA9ICh1MzIgKiB2b2xhdGlsZSkoaW5mby0+c3RhcnRbc2VjdF0pOworCisJCQkvKiBlcmFzZSBzZWN0b3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCS8qIFRoZSBzdHJhdGEgZmxhc2hzIGFyZSBhbGlnbmVkIHNpZGUgYnkgc2lkZSBvbiAgICAqLworCQkJLyogdGhlIGRhdGEgYnVzLCBzbyB3ZSBoYXZlIHRvIHdyaXRlIHRoZSBjb21tYW5kcyAgICovCisJCQkvKiB0byBib3RoIGNoaXBzIGhlcmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCQkJKmFkZHIgPSAweDAwMjAwMDIwOwkvKiBlcmFzZSBzZXR1cCAqLworCQkJKmFkZHIgPSAweDAwRDAwMEQwOwkvKiBlcmFzZSBjb25maXJtICovCisKKwkJCXdoaWxlICgoKmFkZHIgJiAweDAwODAwMDgwKSAhPSAweDAwODAwMDgwKSB7CisJCQkJaWYgKGdldF90aW1lcl9tYXNrZWQoKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQkJCSphZGRyID0gMHgwMEIwMDBCMDsgLyogc3VzcGVuZCBlcmFzZSovCisJCQkJCSphZGRyID0gMHgwMEZGMDBGRjsgLyogcmVhZCBtb2RlICAgICovCisJCQkJCXJjID0gRVJSX1RJTU9VVDsKKwkJCQkJZ290byBvdXRhaGVyZTsKKwkJCQl9CisJCQl9CisKKwkJCSphZGRyID0gMHgwMDUwMDA1MDsgLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNtZC4gICAqLworCQkJKmFkZHIgPSAweDAwRkYwMEZGOyAvKiByZXNlc3QgdG8gcmVhZCBtb2RlICAgICAgICAgICovCisKKwkJfQorCisJCXByaW50Zigib2suXG4iKTsKKwl9CisKKwlpZiAoY3RybGMoKSkgcHJpbnRmKCJVc2VyIEludGVycnVwdCFcbiIpOworCisJb3V0YWhlcmU6CisKKwkvKiBhbGxvdyBmbGFzaCB0byBzZXR0bGUgLSB3YWl0IDEwIG1zICovCisJdWRlbGF5X21hc2tlZCgxMDAwMCk7CisKKwlpZiAoZmxhZykgZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXJldHVybiByYzsKK30KKworCisvKioKKyAqIHdyaXRlX3dvcmQ6IC0gY29weSBtZW1vcnkgdG8gZmxhc2gKKyAqCisgKiBAcGFyYW0gaW5mbzoKKyAqIEBwYXJhbSBkZXN0OgorICogQHBhcmFtIGRhdGE6CisgKiBAcmV0dXJuOgorICovCisKK3N0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1c2hvcnQgZGF0YSkKK3sKKwl1c2hvcnQgKmFkZHIgPSAodXNob3J0ICopZGVzdCwgdmFsOworCWludCByYyA9IEVSUl9PSzsKKwlpbnQgZmxhZzsKKworCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLworCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSByZXR1cm4gRVJSX05PVF9FUkFTRUQ7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQKKwkgKiBoZXJlLiBSZW1lbWJlciB0aGF0IG91ciBleGNlcHRpb24gdmVjdG9ycyBhcmUKKwkgKiBhdCBhZGRyZXNzIDAgaW4gdGhlIGZsYXNoLCBhbmQgd2UgZG9uJ3Qgd2FudCBhCisJICogKHRpY2tlcikgZXhjZXB0aW9uIHRvIGhhcHBlbiB3aGlsZSB0aGUgZmxhc2gKKwkgKiBjaGlwIGlzIGluIHByb2dyYW1taW5nIG1vZGUuCisJICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNvbW1hbmQgKi8KKwkqYWRkciA9IDB4NTA7CisKKwkvKiBwcm9ncmFtIHNldC11cCBjb21tYW5kICovCisJKmFkZHIgPSAweDQwOworCisJLyogbGF0Y2ggYWRkcmVzcy9kYXRhICovCisJKmFkZHIgPSBkYXRhOworCisJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwlyZXNldF90aW1lcl9tYXNrZWQoKTsKKworCS8qIHdhaXQgd2hpbGUgcG9sbGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJd2hpbGUoKCh2YWwgPSAqYWRkcikgJiAweDgwKSAhPSAweDgwKSB7CisJCWlmIChnZXRfdGltZXJfbWFza2VkKCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJcmMgPSBFUlJfVElNT1VUOworCQkJKmFkZHIgPSAweEIwOyAvKiBzdXNwZW5kIHByb2dyYW0gY29tbWFuZCAqLworCQkJZ290byBvdXRhaGVyZTsKKwkJfQorCX0KKworCWlmKHZhbCAmIDB4MUEpIHsJLyogY2hlY2sgZm9yIGVycm9yICovCisJCXByaW50ZigiXG5GbGFzaCB3cml0ZSBlcnJvciAlMDJ4IGF0IGFkZHJlc3MgJTA4bHhcbiIsCisJCQkoaW50KXZhbCwgKHVuc2lnbmVkIGxvbmcpZGVzdCk7CisJCWlmKHZhbCAmICgxPDwzKSkgeworCQkJcHJpbnRmKCJWb2x0YWdlIHJhbmdlIGVycm9yLlxuIik7CisJCQlyYyA9IEVSUl9QUk9HX0VSUk9SOworCQkJZ290byBvdXRhaGVyZTsKKwkJfQorCQlpZih2YWwgJiAoMTw8MSkpIHsKKwkJCXByaW50ZigiRGV2aWNlIHByb3RlY3QgZXJyb3IuXG4iKTsKKwkJCXJjID0gRVJSX1BST1RFQ1RFRDsKKwkJCWdvdG8gb3V0YWhlcmU7CisJCX0KKwkJaWYodmFsICYgKDE8PDQpKSB7CisJCQlwcmludGYoIlByb2dyYW1taW5nIGVycm9yLlxuIik7CisJCQlyYyA9IEVSUl9QUk9HX0VSUk9SOworCQkJZ290byBvdXRhaGVyZTsKKwkJfQorCQlyYyA9IEVSUl9QUk9HX0VSUk9SOworCQlnb3RvIG91dGFoZXJlOworCX0KKworCW91dGFoZXJlOgorCisJKmFkZHIgPSAweEZGOyAvKiByZWFkIGFycmF5IGNvbW1hbmQgKi8KKwlpZiAoZmxhZykgZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXJldHVybiByYzsKK30KKworCisvKioKKyAqIHdyaXRlX2J1ZjogLSBDb3B5IG1lbW9yeSB0byBmbGFzaC4KKyAqCisgKiBAcGFyYW0gaW5mbzoKKyAqIEBwYXJhbSBzcmM6CXNvdXJjZSBvZiBjb3B5IHRyYW5zYWN0aW9uCisgKiBAcGFyYW0gYWRkcjoJd2hlcmUgdG8gY29weSB0bworICogQHBhcmFtIGNudDogCW51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKgorICogQHJldHVybgllcnJvciBjb2RlCisgKi8KKworaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoreworCXVsb25nIGNwLCB3cDsKKwl1c2hvcnQgZGF0YTsKKwlpbnQgbDsKKwlpbnQgaSwgcmM7CisKKwl3cCA9IChhZGRyICYgfjEpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcworCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKiljcCA8PCA4KTsKKwkJfQorCQlmb3IgKDsgaTwyICYmIGNudD4wOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqc3JjKysgPDwgOCk7CisJCQktLWNudDsKKwkJCSsrY3A7CisJCX0KKwkJZm9yICg7IGNudD09MCAmJiBpPDI7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKiljcCA8PCA4KTsKKwkJfQorCisJCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCQkJcmV0dXJuIChyYyk7CisJCX0KKwkJd3AgKz0gMjsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAorCSAqLworCXdoaWxlIChjbnQgPj0gMikgeworCQkvKiBkYXRhID0gKigodnVzaG9ydCopc3JjKTsgKi8KKwkJZGF0YSA9ICooKHVzaG9ydCopc3JjKTsKKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQlzcmMgKz0gMjsKKwkJd3AgICs9IDI7CisJCWNudCAtPSAyOworCX0KKworCWlmIChjbnQgPT0gMCkgcmV0dXJuIEVSUl9PSzsKKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCisJICovCisJZGF0YSA9IDA7CisJZm9yIChpPTAsIGNwPXdwOyBpPDIgJiYgY250PjA7ICsraSwgKytjcCkgeworCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDgpOworCQktLWNudDsKKwl9CisJZm9yICg7IGk8MjsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgOCk7CisJfQorCisJcmV0dXJuIHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpOworfQorCmRpZmYgLS1naXQgYS9ib2FyZC9pbm5va29tL2lubm9rb20uYyBiL2JvYXJkL2lubm9rb20vaW5ub2tvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjcwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pbm5va29tL2lubm9rb20uYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZQorICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiwga2hhcnJpc0BuZXh1cy10ZWNoLm5ldAorICogTWFyaXVzIEdyb2VnZXIsIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSCwgbWdyb2VnZXJAc3lzZ28uZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworI2lmZGVmIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKyMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpICAgICAgICBzaG93X2Jvb3RfcHJvZ3Jlc3MoYXJnKQorI2Vsc2UKKyMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zCisgKi8KKworCisvKioKKyAqIGJvYXJkX2luaXQ6IC0gc2V0dXAgc29tZSBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2VzcworICovCisKK2ludCBib2FyZF9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJLyogbWVtb3J5IGFuZCBjcHUtc3BlZWQgYXJlIHNldHVwIGJlZm9yZSByZWxvY2F0aW9uICovCisJLyogc28gd2UgZG8gX25vdGhpbmdfIGhlcmUgKi8KKworCS8qIGFyY2ggbnVtYmVyIG9mIElubm9rb20gYm9hcmQgKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gMjU4OworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBkcmFtX2luaXQ6IC0gc2V0dXAgZHluYW1pYyBSQU0KKyAqCisgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2VzcworICovCisKK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKKworCXJldHVybiAwOworfQorCisKKy8qKgorICogaW5ub2tvbV9zZXRfbGVkOiAtIHN3aXRjaCBMRURzIG9uIG9yIG9mZgorICoKKyAqIEBwYXJhbSBsZWQ6ICAgTEVEIHRvIHN3aXRjaCAoMCwxLDIpCisgKiBAcGFyYW0gc3RhdGU6IHN3aXRjaCBvbiAoMSkgb3Igb2ZmICgwKQorICovCisKK3ZvaWQgaW5ub2tvbV9zZXRfbGVkKGludCBsZWQsIGludCBzdGF0ZSkKK3sKKwlzd2l0Y2gobGVkKSB7CisvKgorCQljYXNlIDA6IGlmIChzdGF0ZT09MSkgeworCQkJCUdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDA7CisJCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7CisJCQkJR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMTogaWYgKHN0YXRlPT0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlPT0wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQU1IwIHw9IENTQjIyNl9VU0VSX0xFRDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIDI6IGlmIChzdGF0ZT09MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZT09MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFNSMCB8PSBDU0IyMjZfVVNFUl9MRUQyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisqLworCX0KKworCXJldHVybjsKK30KKworCisvKioKKyAqIHNob3dfYm9vdF9wcm9ncmVzczogLSBpbmRpY2F0ZSBzdGF0ZSBvZiB0aGUgYm9vdCBwcm9jZXNzCisgKgorICogQHBhcmFtIHN0YXR1czogU3RhdHVzIG51bWJlciAtIHNlZSBSRUFETUUgZm9yIGRldGFpbHMuCisgKgorICogVGhlIENTQjIyNiBkb2VzIG9ubHkgaGF2ZSAzIExFRHMsIHNvIHdlIHN3aXRjaCB0aGVtIG9uIGF0IHRoZSBtb3N0CisgKiBpbXBvcnRhbnQgc3RhdGVzICgxLCA1LCAxNSkuCisgKi8KKwordm9pZCBzaG93X2Jvb3RfcHJvZ3Jlc3MgKGludCBzdGF0dXMpCit7CisJc3dpdGNoKHN0YXR1cykgeworLyoKKwkJY2FzZSAgMTogY3NiMjI2X3NldF9sZWQoMCwxKTsgYnJlYWs7CisJCWNhc2UgIDU6IGNzYjIyNl9zZXRfbGVkKDEsMSk7IGJyZWFrOworCQljYXNlIDE1OiBjc2IyMjZfc2V0X2xlZCgyLDEpOyBicmVhazsKKyovCisJfQorCisJcmV0dXJuOworfQorCmRpZmYgLS1naXQgYS9ib2FyZC9pbm5va29tL21lbXNldHVwLlMgYi9ib2FyZC9pbm5va29tL21lbXNldHVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkNWVlZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2lubm9rb20vbWVtc2V0dXAuUwpAQCAtMCwwICsxLDQyOSBAQAorLyoKKyAqIE1vc3Qgb2YgdGhpcyB0YWtlbiBmcm9tIFJlZGJvb3QgaGFsX3BsYXRmb3JtX3NldHVwLmggd2l0aCBjbGVhbnVwCisgKgorICogTk9URTogSSBoYXZlbid0IGNsZWFuIHRoaXMgdXAgY29uc2lkZXJhYmx5LCBqdXN0IGVub3VnaCB0byBnZXQgaXQKKyAqIHJ1bm5pbmcuIFNlZSBoYWxfcGxhdGZvcm1fc2V0dXAuaCBmb3IgdGhlIHNvdXJjZS4gU2VlCisgKiBib2FyZC9jcmFkbGUvbWVtc2V0dXAuUyBmb3IgYW5vdGhlciBQWEEyNTAgc2V0dXAgdGhhdCBpcworICogbXVjaCBjbGVhbmVyLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworRFJBTV9TSVpFOiAgLmxvbmcgICBDRkdfRFJBTV9TSVpFCisKKy8qIHdhaXQgZm9yIGNvcHJvY2Vzc29yIHdyaXRlIGNvbXBsZXRlICovCisgICAubWFjcm8gQ1BXQUlUIHJlZworICAgbXJjICBwMTUsMCxccmVnLGMyLGMwLDAKKyAgIG1vdiAgXHJlZyxccmVnCisgICBzdWIgIHBjLHBjLCM0CisgICAuZW5kbQorCisKKy8qCisgKiAJTWVtb3J5IHNldHVwCisgKi8KKworLmdsb2JsIG1lbXNldHVwCittZW1zZXR1cDoKKworICAgIG1vdiAgICAgIHIxMCwgbHIKKworCS8qIFNldCB1cCBHUElPIHBpbnMgZmlyc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCWxkcgkJcjAsCT1HUFNSMAorCWxkcgkJcjEsCT1DRkdfR1BTUjBfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R1BTUjEKKwlsZHIJCXIxLAk9Q0ZHX0dQU1IxX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdQU1IyCisJbGRyCQlyMSwJPUNGR19HUFNSMl9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HUENSMAorCWxkcgkJcjEsCT1DRkdfR1BDUjBfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R1BDUjEKKwlsZHIJCXIxLAk9Q0ZHX0dQQ1IxX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdQQ1IyCisJbGRyCQlyMSwJPUNGR19HUENSMl9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HUERSMAorCWxkcgkJcjEsCT1DRkdfR1BEUjBfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R1BEUjEKKwlsZHIJCXIxLAk9Q0ZHX0dQRFIxX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdQRFIyCisJbGRyCQlyMSwJPUNGR19HUERSMl9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HQUZSMF9MCisJbGRyCQlyMSwJPUNGR19HQUZSMF9MX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdBRlIwX1UKKwlsZHIJCXIxLAk9Q0ZHX0dBRlIwX1VfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R0FGUjFfTAorCWxkcgkJcjEsCT1DRkdfR0FGUjFfTF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HQUZSMV9VCisJbGRyCQlyMSwJPUNGR19HQUZSMV9VX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdBRlIyX0wKKwlsZHIJCXIxLAk9Q0ZHX0dBRlIyX0xfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R0FGUjJfVQorCWxkcgkJcjEsCT1DRkdfR0FGUjJfVV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcglyMCwJPVBTU1IJCS8qIGVuYWJsZSBHUElPIHBpbnMgKi8KKwlsZHIJCXIxLAk9Q0ZHX1BTU1JfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKy8qCWxkcglyMywJPU1TQzEJCS8gIGxvdyAtIGJhbmsgMiBMdWJib2NrIFJlZ2lzdGVycyAvIFNSQU0gKi8KKy8qCWxkcglyMiwJPUNGR19NU0MxX1ZBTAkvICBoaWdoIC0gYmFuayAzIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKy8qCXN0cglyMiwJW3IzXQkJLyAgbmVlZCB0byBzZXQgTVNDMSBiZWZvcmUgdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSBIRVggTEVEcyAqLworLyoJbGRyCXIyLAlbcjNdCQkvICBuZWVkIHRvIHJlYWQgaXQgYmFjayB0byBtYWtlIHN1cmUgdGhlIHZhbHVlIGxhdGNoZXMgKHNlZSBNU0Mgc2VjdGlvbiBvZiBtYW51YWwpICovCisvKiAqLworLyoJbGRyCXIxLAk9TEVEX0JMQU5LICovCisvKgltb3YJcjAsCSMweEZGICovCisvKglzdHIJcjAsCVtyMV0JCS8gIHR1cm4gb24gaGV4IGxlZHMgKi8KKy8qICovCisvKmxvb3A6ICovCisvKiAqLworLyogICBsZHIJcjAsID0weEIwMDcwMDAxICovCisvKiAgIGxkciAgICAJcjEsID1fTEVEICovCisvKiAgIHN0ciAgICAJcjAsIFtyMV0JCS8gIGhleCBkaXNwbGF5ICovCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBFbmFibGUgbWVtb3J5IGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIFRoZSBzZXF1ZW5jZSBiZWxvdyBpcyBiYXNlZCBvbiB0aGUgcmVjb21tZW5kZWQgaW5pdCBzdGVwcyAgICAgICAgKi8KKwkvKiBkZXRhaWxlZCBpbiB0aGUgSW50ZWwgUFhBMjUwIE9wZXJhdGluZyBTeXN0ZW1zIERldmVsb3BlcnMgR3VpZGUsICovCisJLyogQ2hhcHRlciAxMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDE6IFdhaXQgZm9yIGF0IGxlYXN0IDIwMCBtaWNyb3NlZG9uZHMgdG8gYWxsb3cgaW50ZXJuYWwgICAgICovCisJLyogICAgICAgICBjbG9ja3MgdG8gc2V0dGxlLiBPbmx5IG5lY2Vzc2FyeSBhZnRlciBoYXJkIHJlc2V0Li4uICAgICAqLworCS8qICAgICAgICAgRklYTUU6IGNhbiBiZSBvcHRpbWl6ZWQgbGF0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwlsZHIgcjMsID1PU0NSCQkJLyogcmVzZXQgdGhlIE9TIFRpbWVyIENvdW50IHRvIHplcm8gKi8KKwltb3YgcjIsICMwCisJc3RyIHIyLCBbcjNdCisJbGRyIHI0LCA9MHgzMDAJCQkvKiByZWFsbHkgMHgyRTEgaXMgYWJvdXQgMjAwdXNlYywgICAqLworCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLworMToKKwlsZHIgcjIsIFtyM10KKwljbXAgcjQsIHIyCisJYmd0IDFiCisKK21lbV9pbml0OgorCisgICAgICAgIGxkciAgICAgcjEsICA9TUVNQ19CQVNFCQkvKiBnZXQgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBhZGRyLiAqLworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmE6IEluaXRpYWxpemUgQXN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkgY29udHJvbGxlciAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKiBNU0MgcmVnaXN0ZXJzOiB0aW1pbmcsIGJ1cyB3aWR0aCwgbWVtIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgLyogTVNDMDogbkNTKDAsMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBsZHIgICAgIHIyLCAgID1DRkdfTVNDMF9WQUwKKyAgICAgICAgc3RyICAgICByMiwgICBbcjEsICNNU0MwX09GRlNFVF0KKyAgICAgICAgbGRyICAgICByMiwgICBbcjEsICNNU0MwX09GRlNFVF0JLyogcmVhZCBiYWNrIHRvIGVuc3VyZSAgICAgICovCisJCQkJCQkvKiB0aGF0IGRhdGEgbGF0Y2hlcyAgICAgICAgKi8KKyAgICAgICAgLyogTVNDMTogbkNTKDIsMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NU0MxX1ZBTAorICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTVNDMV9PRkZTRVRdCisgICAgICAgIGxkciAgICAgcjIsICBbcjEsICNNU0MxX09GRlNFVF0KKworCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKKyAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQorICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYjogSW5pdGlhbGl6ZSBDYXJkIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIE1FQ1I6IE1lbW9yeSBFeHBhbnNpb24gQ2FyZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUVDUl9WQUwKKyAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01FQ1JfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUVDUl9PRkZTRVRdCisKKwkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DTUVNMF9WQUwKKyAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01DTUVNMF9PRkZTRVRdCisJbGRyCXIyLAlbcjEsICNNQ01FTTBfT0ZGU0VUXQorCisgICAgICAgIC8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNNRU0xX1ZBTAorICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNNRU0xX09GRlNFVF0KKwlsZHIJcjIsCVtyMSwgI01DTUVNMV9PRkZTRVRdCisKKwkvKiBNQ0FUVDA6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMCAgICAgICAgICAgICovCisgICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DQVRUMF9WQUwKKyAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01DQVRUMF9PRkZTRVRdCisJbGRyCXIyLAlbcjEsICNNQ0FUVDBfT0ZGU0VUXQorCisJLyogTUNBVFQxOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAqLworICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ0FUVDFfVkFMCisgICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUNBVFQxX09GRlNFVF0KKworCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCisgICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMF9PRkZTRVRdCisJbGRyCXIyLAlbcjEsICNNQ0lPMF9PRkZTRVRdCisKKwkvKiBNQ0lPMTogQ2FyZCBJbnRlcmZhY2UgSS9PIFNwYWNlIFRpbWluZywgc2xvdCAxICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DSU8xX1ZBTAorICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNJTzFfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUNJTzFfT0ZGU0VUXQorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgICAgICAvKiBTdGVwIDJjOiBXcml0ZSBGTFlDTkZHICBGSVhNRTogd2hhdCdzIHRoYXQ/Pz8gICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgICAgICAvKiBTdGVwIDJkOiBJbml0aWFsaXplIFRpbWluZyBmb3IgU3luYyBNZW1vcnkgKFNEQ0xLMCkgICAgICAgICAgICAgICovCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIEJlZm9yZSBhY2Nlc3NpbmcgTURSRUZSIHdlIG5lZWQgYSB2YWxpZCBEUkkgZmllbGQsIHNvIHdlIHNldCAgICAgKi8KKwkvKiB0aGlzIHRvIHBvd2VyIG9uIGRlZmF1bHRzICsgRElSIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwlsZHIJcjQsCT0weDAzY2E0ZmZmCisJc3RyCXI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByNCwJW3IxLCAjTURSRUZSX09GRlNFVF0KKworCWxkcglyNCwJPTB4MDNjYTQwMzAKKwlzdHIJcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkcglyNCwJW3IxLCAjTURSRUZSX09GRlNFVF0KKworICAgICAgICAvKiBOb3RlOiBwcmVzZXJ2ZSB0aGUgbWRyZWZyIHZhbHVlIGluIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDM6IEluaXRpYWxpemUgU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSAoRmxhc2gvUGVyaXBoZXJhbHMpICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogSW5pdGlhbGl6ZSBTWENORkcgcmVnaXN0ZXIuIEFzc2VydCB0aGUgZW5hYmxlIGJpdHMgICAgICAgICAgICAgICAqLworCisJLyogV3JpdGUgU1hNUlMgdG8gY2F1c2UgYW4gTVJTIGNvbW1hbmQgdG8gYWxsIGVuYWJsZWQgYmFua3Mgb2YgICAgICAqLworCS8qIHN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkuIE5vdGUgdGhhdCBTWExDUiBuZWVkIG5vdCBiZSB3cml0dGVuICAgKi8KKwkvKiBhdCB0aGlzIHRpbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkvKiBGSVhNRTogd2UgdXNlIGFzeW5jIG1vZGUgZm9yIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIC8qIFN0ZXAgNDogSW5pdGlhbGl6ZSBTRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogU3RlcCA0YTogYXNzZXJ0IE1EUkVGUjpLMVJVTiBhbmQgTURSRUZSOksyUlVOIGFuZCBjb25maWd1cmUgICAgICAqLworCS8qICAgICAgICAgIE1EUkVGUjpLMURCMiBhbmQgTURSRUZSOksyREIyIGFzIGRlc2lyZWQuICAgICAgICAgICAgICAgKi8KKworCW9ycglyNCwJcjQsCSMoTURSRUZSX0sxUlVOfE1EUkVGUl9LMFJVTikKKworCXN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0KKworCisJLyogU3RlcCA0YjogZGUtYXNzZXJ0IE1EUkVGUjpTTEZSU0guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJYmljCXI0LAlyNCwJIyhNRFJFRlJfU0xGUlNIKQorCisgICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisKKworCS8qIFN0ZXAgNGM6IGFzc2VydCBNRFJFRlI6RTFQSU4gYW5kIEUwUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCW9ycglyNCwJcjQsCSMoTURSRUZSX0UxUElOfE1EUkVGUl9FMFBJTikKKworICAgICAgICBzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCisgICAgICAgIGxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCisKKwkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCisJLyogICAgICAgICAgY29uZmlndXJlIGJ1dCBub3QgZW5hYmxlIGVhY2ggU0RSQU0gcGFydGl0aW9uIHBhaXIuICAgICAqLworCisJbGRyCXI0LAk9Q0ZHX01EQ05GR19WQUwKKwliaWMJcjQsCXI0LAkjKE1EQ05GR19ERTB8TURDTkZHX0RFMSkKKworICAgICAgICBzdHIgICAgIHI0LCAgICAgW3IxLCAjTURDTkZHX09GRlNFVF0JLyogd3JpdGUgYmFjayBNRENORkcgICAgICAgICovCisgICAgICAgIGxkciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQorCisKKwkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCisJLyogICAgICAgICAgMTAwLi4yMDAgtXNlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyIHIzLCA9T1NDUgkJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCisJbW92IHIyLCAjMAorCXN0ciByMiwgW3IzXQorCWxkciByNCwgPTB4MzAwCQkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KKwkJCQkJLyogc28gMHgzMDAgc2hvdWxkIGJlIHBsZW50eSAgICAgICAgKi8KKzE6CisJbGRyIHIyLCBbcjNdCisJY21wIHI0LCByMgorCWJndCAxYgorCisKKwkvKiBTdGVwIDRmOiBUcmlnZ2VyIGEgbnVtYmVyICh1c3VhbGx5IDgpIHJlZnJlc2ggY3ljbGVzIGJ5ICAgICAgICAgICovCisJLyogICAgICAgICAgYXR0ZW1wdGluZyBub24tYnVyc3QgcmVhZCBvciB3cml0ZSBhY2Nlc3NlcyB0byBkaXNhYmxlZCAqLworCS8qICAgICAgICAgIFNEUkFNLCBhcyBjb21tb25seSBzcGVjaWZpZWQgaW4gdGhlIHBvd2VyIHVwIHNlcXVlbmNlICAgKi8KKwkvKiAgICAgICAgICBkb2N1bWVudGVkIGluIFNEUkFNIGRhdGEgc2hlZXRzLiBUaGUgYWRkcmVzcyhlcykgdXNlZCAgICovCisJLyogICAgICAgICAgZm9yIHRoaXMgcHVycG9zZSBtdXN0IG5vdCBiZSBjYWNoZWFibGUuICAgICAgICAgICAgICAgICAqLworCisJbGRyCXIzLAk9Q0ZHX0RSQU1fQkFTRQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCisKKwkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCisJLyogICAgICAgICAgKE1EQ05GRzpERXggc2V0IHRvIDEpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyCXIzLCBbcjEsICNNRENORkdfT0ZGU0VUXQorCW9ycglyMywJcjMsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQorCXN0cglyMywgW3IxLCAjTURDTkZHX09GRlNFVF0KKworCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKKyAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01ETVJTX09GRlNFVF0KKworCisJLyogV2UgYXJlIGZpbmlzaGVkIHdpdGggSW50ZWwncyBtZW1vcnkgY29udHJvbGxlciBpbml0aWFsaXNhdGlvbiAgICAqLworCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRGlzYWJsZSAobWFzaykgYWxsIGludGVycnVwdHMgYXQgaW50ZXJydXB0IGNvbnRyb2xsZXIgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW5pdGlycXM6CisKKyAgICAgICAgbW92ICAgICByMSwgIzAJCS8qIGNsZWFyIGludC4gbGV2ZWwgcmVnaXN0ZXIgKElSUSwgbm90IEZJUSkgKi8KKyAgICAgICAgbGRyICAgICByMiwgID1JQ0xSCisgICAgICAgIHN0ciAgICAgcjEsICBbcjJdCisKKyAgICAgICAgbGRyICAgICByMiwgID1JQ01SCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgICAgKi8KKyAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKworCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBDbG9jayBpbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW5pdGNsa3M6CisKKwkvKiBEaXNhYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrcywgYW5kIHNldCB0aGUgY29yZSBjbG9jayBmcmVxdWVuY3kgICovCisJLyogKGhhcmQtY29kaW5nIGF0IDM5OC4xMk1IeiBmb3Igbm93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogVHVybiBPZmYgQUxMIG9uLWNoaXAgcGVyaXBoZXJhbCBjbG9ja3MgZm9yIHJlLWNvbmZpZ3VyYXRpb24gICAgICAqLworCS8qIE5vdGU6IFNlZSBsYWJlbCAnRU5BQkxFQ0xLUycgZm9yIHRoZSByZS1lbmFibGluZyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgbGRyICAgICByMSwgID1DS0VOCisgICAgICAgIG1vdiAgICAgcjIsICAjMAorICAgICAgICBzdHIgICAgIHIyLCAgW3IxXQorCisKKyAgICAgICAgLyogZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIG5vIHZhbGlkIHJvdGFyeSBzd2l0Y2ggc2V0dGluZyBpcyBmb3VuZCAgICAqLworICAgICAgICBsZHIgICAgIHIyLCA9KENDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTApICAvKiBERUZBVUxUOiB7MjAwLzIwMC8xMDB9ICovCisKKyAgICAgICAgLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBsZHIgICAgIHIxLCAgPUNDQ1IKKyAgICAgICAgc3RyICAgICByMiwgIFtyMV0KKworCS8qIGVuYWJsZSB0aGUgMzJLaHogb3NjaWxsYXRvciBmb3IgUlRDIGFuZCBQb3dlck1hbmFnZXIgICAgICAgICAgICAgKi8KKy8qCisgICAgICAgIGxkciAgICAgcjEsICA9T1NDQworICAgICAgICBtb3YgICAgIHIyLCAgI09TQ0NfT09OCisgICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisqLworCS8qIE5PVEU6ICBzcGluIGhlcmUgdW50aWwgT1NDQy5PT0sgZ2V0IHNldCwgbWVhbmluZyB0aGUgUExMICAgICAgICAgKi8KKwkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCis2MDoKKyAgICAgICAgbGRyICAgICByMiwgW3IxXQorICAgICAgICBhbmRzICAgIHIyLCByMiwgIzEKKyAgICAgICAgYmVxICAgICA2MGIKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIFNhdmUgU0RSQU0gc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIJcjEsID1EUkFNX1NJWkUKKwlzdHIJcjgsIFtyMV0KKworCS8qIEludGVycnVwdCBpbml0OiBNYXNrIGFsbCBpbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIJcjAsID1JQ01SCQkJLyogZW5hYmxlIG5vIHNvdXJjZXMgICAgICAgICovCisJbW92CXIxLCAjMAorCXN0cglyMSwgW3IwXQorCisJLyogRklYTUUgKi8KKworI2RlZmluZSBOT0RFQlVHCisjaWZkZWYgTk9ERUJVRworCS8qRGlzYWJsZSBzb2Z0d2FyZSBhbmQgZGF0YSBicmVha3BvaW50cyAqLworCW1vdglyMCwjMAorCW1jcglwMTUsMCxyMCxjMTQsYzgsMCAgLyogaWJjcjAgKi8KKwltY3IJcDE1LDAscjAsYzE0LGM5LDAgIC8qIGliY3IxICovCisJbWNyCXAxNSwwLHIwLGMxNCxjNCwwICAvKiBkYmNvbiAqLworCisJLypFbmFibGUgYWxsIGRlYnVnIGZ1bmN0aW9uYWxpdHkgKi8KKwltb3YJcjAsIzB4ODAwMDAwMDAKKwltY3IJcDE0LDAscjAsYzEwLGMwLDAgIC8qIGRjc3IgKi8KKworI2VuZGlmCisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIEVuZCBtZW1zZXR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitlbmRtZW1zZXR1cDoKKworICAgIG1vdiAgICAgcGMsIGxyCisKZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vdS1ib290LmxkcyBiL2JvYXJkL2lubm9rb20vdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg5YjMyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvaW5ub2tvbS91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIGNwdS94c2NhbGUvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC5nb3QgOiB7ICooLmdvdCkgfQorCisJYXJtYm9vdF9lbmRfZGF0YSA9IC47CisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKworCWFybWJvb3RfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3IzNjBtcGkvZmxhc2guYyBiL2JvYXJkL3IzNjBtcGkvZmxhc2guYwppbmRleCA4MGJjZDI1Li5lMzhkZmNjIDEwMDY0NAotLS0gYS9ib2FyZC9yMzYwbXBpL2ZsYXNoLmMKKysrIGIvYm9hcmQvcjM2MG1waS9mbGFzaC5jCkBAIC0yNCwxMCArMjQsMTIgQEAKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAorLyogI2RlZmluZSBERUJVRyAqLworCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bXBjOHh4Lmg+CiAKLWZsYXNoX2luZm9fdAlmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcwkqLworZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CS8qIGluZm8gZm9yIEZMQVNIIGNoaXBzICAgICovCiAKICNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCiAjIGlmbmRlZiAgQ0ZHX0VOVl9BRERSCkBAIC01Miw0NCArNTQsNDQgQEAKICNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSDE2CiAKICNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKLSNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdXNob3J0Ci0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9zaG9ydAorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRICXVzaG9ydAorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgl2dV9zaG9ydAogI2Vsc2UKLSNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdWxvbmcKLSNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSFYJCXZ1X2xvbmcKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAl1bG9uZworI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgl2dV9sb25nCiAjZW5kaWYKIAotI2RlZmluZSBGUFcJCUZMQVNIX1BPUlRfV0lEVEgKLSNkZWZpbmUgRlBXVglGTEFTSF9QT1JUX1dJRFRIVgorI2RlZmluZSBGUFcJCQlGTEFTSF9QT1JUX1dJRFRICisjZGVmaW5lIEZQV1YJCQlGTEFTSF9QT1JUX1dJRFRIVgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbnMKICAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSk7Ci1zdGF0aWMgdm9pZCAgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbyk7CitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCB3cml0ZV9kYXRhIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSk7CitzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICogaW5mbyk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiB1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKIAl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7CiAJdW5zaWduZWQgbG9uZyBzaXplX2IwOwogCWludCBpOwogCiAJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwotCWZvciAoaT0wOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKIAkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJfQogCiAJLyogU3RhdGljIEZMQVNIIEJhbmsgY29uZmlndXJhdGlvbiBoZXJlIC0gRklYTUUgWFhYICovCi0Jc2l6ZV9iMCA9IGZsYXNoX2dldF9zaXplKChGUFcgKilGTEFTSF9CQVNFMF9QUkVMSU0sICZmbGFzaF9pbmZvWzBdKTsKKwlzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUgKChGUFcgKikgRkxBU0hfQkFTRTBfUFJFTElNLCAmZmxhc2hfaW5mb1swXSk7CiAKIAlpZiAoZmxhc2hfaW5mb1swXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CiAJCXByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAwIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCi0JCQlzaXplX2IwLCBzaXplX2IwPDwyMCk7CisJCQlzaXplX2IwLCBzaXplX2IwIDw8IDIwKTsKIAl9CiAKIAkvKiBSZW1hcCBGTEFTSCBhY2NvcmRpbmcgdG8gcmVhbCBzaXplICovCkBAIC05NywyNCArOTksMjQgQEAKIAltZW1jdGwtPm1lbWNfYnIwID0gKENGR19GTEFTSF9CQVNFICYgQlJfQkFfTVNLKSB8IEJSX1BTXzE2IHwgQlJfTVNfR1BDTSB8IEJSX1Y7CiAKIAkvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCi0Jc2l6ZV9iMCA9IGZsYXNoX2dldF9zaXplKChGUFcgKilDRkdfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOworCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSAoKEZQVyAqKSBDRkdfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOwogCiAJZmxhc2hfZ2V0X29mZnNldHMgKENGR19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7CiAKICNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCiAJLyogbW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLQkodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCQkgICAgQ0ZHX0ZMQVNIX0JBU0UsCi0JCQkgICAgQ0ZHX0ZMQVNIX0JBU0UrQ0ZHX01PTklUT1JfTEVOLTEsCi0JCQkgICAgJmZsYXNoX2luZm9bMF0pOworCSh2b2lkKSBmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJCUNGR19GTEFTSF9CQVNFLAorCQkJCUNGR19GTEFTSF9CQVNFICsgQ0ZHX01PTklUT1JfTEVOIC0gMSwKKwkJCQkmZmxhc2hfaW5mb1swXSk7CiAjZW5kaWYKIAogI2lmZGVmCUNGR19FTlZfSVNfSU5fRkxBU0gKIAkvKiBFTlYgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkgICAgICBDRkdfRU5WX0FERFIsCi0JCSAgICAgIENGR19FTlZfQUREUitDRkdfRU5WX1NJWkUtMSwKLQkJICAgICAgJmZsYXNoX2luZm9bMF0pOworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRU5WX0FERFIsCisJCQlDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAorCQkJJmZsYXNoX2luZm9bMF0pOwogI2VuZGlmCiAKIAlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwpAQCAtMTI0LDcgKzEyNiw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKK3N0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQogewogCWludCBpOwogCkBAIC0xNDEsNyArMTQzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi12b2lkIGZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCiB7CiAJaW50IGk7CiAKQEAgLTE1MSwzMSArMTUzLDM5IEBACiAJfQogCiAJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7Ci0JCWNhc2UgRkxBU0hfTUFOX0lOVEVMOglwcmludGYgKCJJTlRFTCAiKTsJCWJyZWFrOwotCQlkZWZhdWx0OgkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CWJyZWFrOworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgorCQlwcmludGYgKCJJTlRFTCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOwogCX0KIAogCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotICAgY2FzZSBGTEFTSF8yOEYzMjBKM0E6Ci0JCQkJcHJpbnRmICgiMjhGMzIwSjNBXG4iKTsgYnJlYWs7Ci0gICBjYXNlIEZMQVNIXzI4RjY0MEozQToKLQkJCQlwcmludGYgKCIyOEY2NDBKM0FcbiIpOyBicmVhazsKLSAgIGNhc2UgRkxBU0hfMjhGMTI4SjNBOgotCQkJCXByaW50ZiAoIjI4RjEyOEozQVxuIik7IGJyZWFrOwotCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7IGJyZWFrOworCWNhc2UgRkxBU0hfMjhGMzIwSjNBOgorCQlwcmludGYgKCIyOEYzMjBKM0FcbiIpOworCQlicmVhazsKKwljYXNlIEZMQVNIXzI4RjY0MEozQToKKwkJcHJpbnRmICgiMjhGNjQwSjNBXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF8yOEYxMjhKM0E6CisJCXByaW50ZiAoIjI4RjEyOEozQVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKKwkJYnJlYWs7CiAJfQogCiAJcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAKIAlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKIAkJaWYgKChpICUgNSkgPT0gMCkKIAkJCXByaW50ZiAoIlxuICAgIik7CiAJCXByaW50ZiAoIiAlMDhsWCVzIiwKIAkJCWluZm8tPnN0YXJ0W2ldLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiCi0JCSk7CisJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOwogCX0KIAlwcmludGYgKCJcbiIpOwogCXJldHVybjsKQEAgLTE5Miw0OSArMjAyLDUzIEBACiAgKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQogICovCiAKLXN0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAoRlBXICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pCiB7CiAJRlBXIHZhbHVlOwogCiAJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KLQlhZGRyWzB4NTU1NV0gPSAoRlBXKTB4MDBBQTAwQUE7Ci0JYWRkclsweDJBQUFdID0gKEZQVykweDAwNTUwMDU1OwotCWFkZHJbMHg1NTU1XSA9IChGUFcpMHgwMDkwMDA5MDsKKwlhZGRyWzB4NTU1NV0gPSAoRlBXKSAweDAwQUEwMEFBOworCWFkZHJbMHgyQUFBXSA9IChGUFcpIDB4MDA1NTAwNTU7CisJYWRkclsweDU1NTVdID0gKEZQVykgMHgwMDkwMDA5MDsKIAogCXZhbHVlID0gYWRkclswXTsKIAorCWRlYnVnICgiTWFudWYuIElEIEAgMHglMDhseDogMHglMDhseFxuIiwgKHVsb25nKWFkZHIsIHZhbHVlKTsKKwotICAgc3dpdGNoICh2YWx1ZSkgewotICAgY2FzZSAoRlBXKUlOVEVMX01BTlVGQUNUOgotICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7Ci0gICAgICBicmVhazsKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSAoRlBXKSBJTlRFTF9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKIAkJaW5mby0+c2l6ZSA9IDA7Ci0JCWFkZHJbMF0gPSAoRlBXKTB4MDBGRjAwRkY7ICAgICAgLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQkJcmV0dXJuICgwKTsJCQkvKiBubyBvciB1bmtub3duIGZsYXNoCSovCisJCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCiAJfQogCi0JdmFsdWUgPSBhZGRyWzFdOwkJCS8qIGRldmljZSBJRAkJKi8KKwl2YWx1ZSA9IGFkZHJbMV07CQkJLyogZGV2aWNlIElEICAgICAgICAqLwogCi0gICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICBjYXNlIChGUFcpSU5URUxfSURfMjhGMzIwSjNBOgotICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMzIwSjNBOwotICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7Ci0gICAgICBpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsKLSAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qID0+IDQgTUIgICAgICovCisJZGVidWcgKCJEZXZpY2UgSUQgQCAweCUwOGx4OiAweCUwOGx4XG4iLCAodWxvbmcpKCZhZGRyWzFdKSwgdmFsdWUpOwogCi0gICBjYXNlIChGUFcpSU5URUxfSURfMjhGNjQwSjNBOgotICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwSjNBOwotICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gNjQ7Ci0gICAgICBpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKLSAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qID0+IDggTUIgICAgICovCisJc3dpdGNoICh2YWx1ZSkgeworCWNhc2UgKEZQVykgSU5URUxfSURfMjhGMzIwSjNBOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYzMjBKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOworCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsKKwkJYnJlYWs7CQkJCS8qID0+IDQgTUIgICAgICovCiAKLSAgIGNhc2UgKEZQVylJTlRFTF9JRF8yOEYxMjhKM0E6Ci0gICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxMjhKM0E7Ci0gICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7Ci0gICAgICBpbmZvLT5zaXplID0gMHgwMTAwMDAwMDsKLSAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qID0+IDE2IE1CICAgICAqLworCWNhc2UgKEZQVykgSU5URUxfSURfMjhGNjQwSjNBOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEY2NDBKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OworCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKKwkJYnJlYWs7CQkJCS8qID0+IDggTUIgICAgICovCisKKwljYXNlIChGUFcpIElOVEVMX0lEXzI4RjEyOEozQToKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMTI4SjNBOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7CisJCWluZm8tPnNpemUgPSAweDAxMDAwMDAwOworCQlicmVhazsJCQkJLyogPT4gMTYgTUIgICAgICovCiAKIAlkZWZhdWx0OgogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CkBAIC0yNDMsMTEgKzI1NywxMSBAQAogCiAJaWYgKGluZm8tPnNlY3Rvcl9jb3VudCA+IENGR19NQVhfRkxBU0hfU0VDVCkgewogCQlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCi0JCQlpbmZvLT5zZWN0b3JfY291bnQsIENGR19NQVhfRkxBU0hfU0VDVCk7CisJCQkJaW5mby0+c2VjdG9yX2NvdW50LCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CiAJfQogCi0JYWRkclswXSA9IChGUFcpMHgwMEZGMDBGRjsgICAgICAvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwogCiAJcmV0dXJuIChpbmZvLT5zaXplKTsKIH0KQEAgLTI1Niw3ICsyNzAsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLWludAlmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK2ludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCiB7CiAJaW50IGZsYWcsIHByb3QsIHNlY3Q7CiAJdWxvbmcgdHlwZSwgc3RhcnQsIG5vdywgbGFzdDsKQEAgLTI3OSw3ICsyOTMsNyBAQAogCX0KIAogCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgeworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKIAkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKIAkJCXByb3QrKzsKIAkJfQpAQCAtMjkzLDQ0ICszMDcsNDQgQEAKIAl9CiAKIAlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0JbGFzdCAgPSBzdGFydDsKKwlsYXN0ID0gc3RhcnQ7CiAJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7CisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewogCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCUZQV1YgKmFkZHIgPSAoRlBXViAqKShpbmZvLT5zdGFydFtzZWN0XSk7CisJCQlGUFdWICphZGRyID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKIAkJCUZQVyBzdGF0dXM7CiAKIAkJCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCQkJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCQkJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKIAotCQkJKmFkZHIgPSAoRlBXKTB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLwotCQkJKmFkZHIgPSAoRlBXKTB4MDAyMDAwMjA7CS8qIGVyYXNlIHNldHVwICovCi0JCQkqYWRkciA9IChGUFcpMHgwMEQwMDBEMDsJLyogZXJhc2UgY29uZmlybSAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDIwMDAyMDsJLyogZXJhc2Ugc2V0dXAgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMEQwMDBEMDsJLyogZXJhc2UgY29uZmlybSAqLwogCiAJCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KIAkJCWlmIChmbGFnKQotCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCQkJZW5hYmxlX2ludGVycnVwdHMgKCk7CiAKIAkJCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwogCQkJdWRlbGF5ICgxMDAwKTsKIAotCQkJd2hpbGUgKCgoc3RhdHVzID0gKmFkZHIpICYgKEZQVykweDAwODAwMDgwKSAhPSAoRlBXKTB4MDA4MDAwODApIHsKLQkJCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOwotCQkJCQkqYWRkciA9IChGUFcpMHgwMEIwMDBCMDsgLyogc3VzcGVuZCBlcmFzZQkgICovCi0JCQkJCSphZGRyID0gKEZQVykweDAwRkYwMEZGOyAvKiByZXNldCB0byByZWFkIG1vZGUgKi8KLQkJCQkJcmNvZGUgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9CisJCQl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPSAoRlBXKSAweDAwODAwMDgwKSB7CisJCQkgICAgaWYgKChub3cgPSBnZXRfdGltZXIgKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOworCQkJCSphZGRyID0gKEZQVykgMHgwMEIwMDBCMDsJLyogc3VzcGVuZCBlcmFzZSAgICAgKi8KKwkJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCQkJCXJjb2RlID0gMTsKKwkJCQlicmVhazsKKwkJCSAgICB9CiAKLQkJCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotCQkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsJLyogZXZlcnkgc2Vjb25kICovCi0JCQkJCXB1dGMgKCcuJyk7Ci0JCQkJCWxhc3QgPSBub3c7Ci0JCQkJfQorCQkJICAgIC8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisJCQkgICAgaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsJLyogZXZlcnkgc2Vjb25kICovCisJCQkJcHV0YyAoJy4nKTsKKwkJCQlsYXN0ID0gbm93OworCQkJICAgIH0KIAkJCX0KIAotCQkJKmFkZHIgPSAoRlBXKTB4MDBGRjAwRkY7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KIAkJfQogCX0KIAlwcmludGYgKCIgZG9uZVxuIik7CkBAIC0zNDUsMTUgKzM1OSwxMiBAQAogICogNCAtIEZsYXNoIG5vdCBpZGVudGlmaWVkCiAgKi8KIAotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoraW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCiB7CiAJdWxvbmcgY3AsIHdwOwogCUZQVyBkYXRhOwotI2lmIDAKLQlpbnQgY291bnQsIGksIGwsIHJjLCBwb3J0X3dpZHRoOwotI2Vsc2UKKwogCWludCBpLCBsLCByYywgcG9ydF93aWR0aDsKLSNlbmRpZgogCiAJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKIAkJcmV0dXJuIDQ7CkBAIC0zNzIsMTkgKzM4MywxOSBAQAogCSAqLwogCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewogCQlkYXRhID0gMDsKLQkJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKIAkJfQotCQlmb3IgKDsgaTxwb3J0X3dpZHRoICYmIGNudD4wOyArK2kpIHsKKwkJZm9yICg7IGkgPCBwb3J0X3dpZHRoICYmIGNudCA+IDA7ICsraSkgewogCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwogCQkJLS1jbnQ7CiAJCQkrK2NwOwogCQl9Ci0JCWZvciAoOyBjbnQ9PTAgJiYgaTxwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOwogCQl9CiAKLQkJaWYgKChyYyA9IHdyaXRlX2RhdGEoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCWlmICgocmMgPSB3cml0ZV9kYXRhIChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKIAkJCXJldHVybiAocmMpOwogCQl9CiAJCXdwICs9IHBvcnRfd2lkdGg7CkBAIC0zOTMsMjYgKzQwNCwxNiBAQAogCS8qCiAJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CiAJICovCi0jaWYgMAotCWNvdW50ID0gMDsKLSNlbmRpZgogCXdoaWxlIChjbnQgPj0gcG9ydF93aWR0aCkgewogCQlkYXRhID0gMDsKLQkJZm9yIChpPTA7IGk8cG9ydF93aWR0aDsgKytpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwb3J0X3dpZHRoOyArK2kpIHsKIAkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKIAkJfQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YShpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewogCQkJcmV0dXJuIChyYyk7CiAJCX0KLQkJd3AgICs9IHBvcnRfd2lkdGg7CisJCXdwICs9IHBvcnRfd2lkdGg7CiAJCWNudCAtPSBwb3J0X3dpZHRoOwotI2lmIDAKLQkJaWYgKGNvdW50KysgPiAweDIwMDAwKQotCQl7Ci0JCQlwdXRjKCcuJyk7Ci0JCQljb3VudCA9IDA7Ci0JCX0KLSNlbmRpZgogCX0KIAogCWlmIChjbnQgPT0gMCkgewpAQCAtNDIzLDE1ICs0MjQsMTUgQEAKIAkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKIAkgKi8KIAlkYXRhID0gMDsKLQlmb3IgKGk9MCwgY3A9d3A7IGk8cG9ydF93aWR0aCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7CisJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IHBvcnRfd2lkdGggJiYgY250ID4gMDsgKytpLCArK2NwKSB7CiAJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKIAkJLS1jbnQ7CiAJfQotCWZvciAoOyBpPHBvcnRfd2lkdGg7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwlmb3IgKDsgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgeworCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7CiAJfQogCi0JcmV0dXJuICh3cml0ZV9kYXRhKGluZm8sIHdwLCBkYXRhKSk7CisJcmV0dXJuICh3cml0ZV9kYXRhIChpbmZvLCB3cCwgZGF0YSkpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NDAsMzkgKzQ0MSwzOCBAQAogICogMSAtIHdyaXRlIHRpbWVvdXQKICAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCiAgKi8KLXN0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSkKK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpCiB7Ci0JRlBXViAqYWRkciA9IChGUFdWICopZGVzdDsKKwlGUFdWICphZGRyID0gKEZQV1YgKikgZGVzdDsKIAl1bG9uZyBzdGF0dXM7CiAJdWxvbmcgc3RhcnQ7CiAJaW50IGZsYWc7CiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgewotCQlwcmludGYoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCV4KVxuIiwodWxvbmcpYWRkciwqYWRkcik7CisJCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCV4KVxuIiwgKHVsb25nKSBhZGRyLCAqYWRkcik7CiAJCXJldHVybiAoMik7CiAJfQogCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOwogCi0JKmFkZHIgPSAoRlBXKTB4MDA0MDAwNDA7CQkvKiB3cml0ZSBzZXR1cCAqLworCSphZGRyID0gKEZQVykgMHgwMDQwMDA0MDsJLyogd3JpdGUgc2V0dXAgKi8KIAkqYWRkciA9IGRhdGE7CiAKIAkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJZW5hYmxlX2ludGVycnVwdHMgKCk7CiAKIAlzdGFydCA9IGdldF90aW1lciAoMCk7CiAKLQl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKTB4MDA4MDAwODApICE9IChGUFcpMHgwMDgwMDA4MCkgewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQkqYWRkciA9IChGUFcpMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPSAoRlBXKSAweDAwODAwMDgwKSB7CisJCWlmIChnZXRfdGltZXIgKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCiAJCQlyZXR1cm4gKDEpOwogCQl9CiAJfQogCi0JKmFkZHIgPSAoRlBXKTB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwogCiAJcmV0dXJuICgwKTsKIH0KLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9mbGFzaC5jIGIvY29tbW9uL2Vudl9mbGFzaC5jCmluZGV4IDE1OTNkMmMuLjY5ZmEyYWUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfZmxhc2guYworKysgYi9jb21tb24vZW52X2ZsYXNoLmMKQEAgLTM3NCw0ICszNzQsNCBAQAogI2VuZGlmIC8qICEgRU5WX0lTX0VNQkVEREVEIHx8IENGR19FTlZfQUREUl9SRURVTkQgKi8KIH0KIAotI2VuZGlmIC8qIENGR19FTlZfSVNfSU5fRkxBU0gpICovCisjZW5kaWYgLyogQ0ZHX0VOVl9JU19JTl9GTEFTSCAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvTWFrZWZpbGUgYi9jcHUvbXBjODI0eC9NYWtlZmlsZQppbmRleCA0MDQ0N2ExLi43NDNjZWQ5IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjODI0eC9NYWtlZmlsZQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKIFNUQVJUCT0gc3RhcnQuUyBkcml2ZXJzL2kyYy9pMmMyLm8KIE9CSlMJPSB0cmFwcy5vIGNwdS5vIGNwdV9pbml0Lm8gaW50ZXJydXB0cy5vIHNwZWVkLm8gXAotICAgICAgICAgIGRyaXZlcnMvZXBpYy9lcGljMS5vIGRyaXZlcnMvaTJjL2kyYzEubyBwY2kubworICAgICAgICAgIGRyaXZlcnMvZXBpYy9lcGljMS5vIGRyaXZlcnMvaTJjL2kyYzEubyBwY2kubyBiZWRidWdfNjAzZS5vCiAKIGFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgZHJpdmVycy9pMmMvaTJjMi5vCiAKK2JlZGJ1Z182MDNlLmM6CisJbG4gLXMgLi4vbXBjODI2MC9iZWRidWdfNjAzZS5jIGJlZGJ1Z182MDNlLmMKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAuZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9zdGFydC5TIGIvY3B1L21wYzgyNHgvc3RhcnQuUwppbmRleCAxOGI4ZTYxLi43NzE2MjQwIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9zdGFydC5TCisrKyBiL2NwdS9tcGM4MjR4L3N0YXJ0LlMKQEAgLTMzNiw3ICszMzYsNyBAQAogCVNURF9FWENFUFRJT04oRVhDX09GRl9JVE1FLCBJbnN0cnVjdGlvblRyYW5zTWlzcywgVW5rbm93bkV4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OKEVYQ19PRkZfRExUTUUsIERhdGFMb2FkVHJhbnNNaXNzLCBVbmtub3duRXhjZXB0aW9uKQogCVNURF9FWENFUFRJT04oRVhDX09GRl9EU1RNRSwgRGF0YVN0b3JlVHJhbnNNaXNzLCBVbmtub3duRXhjZXB0aW9uKQotCVNURF9FWENFUFRJT04oRVhDX09GRl9JQUJFLCBJbnN0cnVjdGlvbkJyZWFrcG9pbnQsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTihFWENfT0ZGX0lBQkUsIEluc3RydWN0aW9uQnJlYWtwb2ludCwgRGVidWdFeGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTihFWENfT0ZGX1NNSUUsIFN5c01hbmFnZUludCwgVW5rbm93bkV4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OKDB4MTUwMCwgUmVzZXJ2ZWQ1LCBVbmtub3duRXhjZXB0aW9uKQogCVNURF9FWENFUFRJT04oMHgxNjAwLCBSZXNlcnZlZDYsIFVua25vd25FeGNlcHRpb24pCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC90cmFwcy5jIGIvY3B1L21wYzgyNHgvdHJhcHMuYwppbmRleCAxMWY1MWMyLi45NTYyNDRmIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC90cmFwcy5jCisrKyBiL2NwdS9tcGM4MjR4L3RyYXBzLmMKQEAgLTE3Niw2ICsxNzYsMjEgQEAKIAlfZXhjZXB0aW9uKDAsIHJlZ3MpOwogfQogCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQkVEQlVHKQorZXh0ZXJuIHZvaWQgZG9fYmVkYnVnX2JyZWFrcG9pbnQoc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKwordm9pZAorRGVidWdFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisKKyAgcHJpbnRmKCJEZWJ1Z2dlciB0cmFwIGF0IEAgJWx4XG4iLCByZWdzLT5uaXAgKTsKKyAgc2hvd19yZWdzKHJlZ3MpOworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JFREJVRykKKyAgZG9fYmVkYnVnX2JyZWFrcG9pbnQoIHJlZ3MgKTsKKyNlbmRpZgorfQorCiAvKiBQcm9iZSBhbiBhZGRyZXNzIGJ5IHJlYWRpbmcuICBJZiBub3QgcHJlc2VudCwgcmV0dXJuIC0xLCBvdGhlcndpc2UKICAqIHJldHVybiAwLgogICovCmRpZmYgLS1naXQgYS9jcHUveHNjYWxlL01ha2VmaWxlIGIvY3B1L3hzY2FsZS9NYWtlZmlsZQppbmRleCBjOTQwZDZhLi43NzhhNjY0IDEwMDY0NAotLS0gYS9jcHUveHNjYWxlL01ha2VmaWxlCisrKyBiL2NwdS94c2NhbGUvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDcgQEAKIExJQgk9IGxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubworT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubyBpMmMubwogCiBhbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKZGlmZiAtLWdpdCBhL2NwdS94c2NhbGUvaTJjLmMgYi9jcHUveHNjYWxlL2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDZmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUveHNjYWxlL2kyYy5jCkBAIC0wLDAgKzEsNDUzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBQYW9sbyBTY2FmZmFyZGksIEFJUlZFTlQgU0FNIHMucC5hIC0gUklNSU5JKElUQUxZKSwgYXJzZW5pb0B0aW4uaXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAgU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAzIFBlbmd1dHJvbml4IGUuSy4KKyAqIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBCYWNrIHBvcnRlZCB0byB0aGUgOHh4IHBsYXRmb3JtIChmcm9tIHRoZSA4MjYwIHBsYXRmb3JtKSBieQorICogTXVycmF5LkplbnNlbkBjbXN0LmNzaXJvLmF1LCAyNy1KYW4tMDEuCisgKi8KKworLyogRklYTUU6IHRoaXMgZmlsZSBpcyBQWEEyNTUgc3BlY2lmaWMhIFdoYXQgYWJvdXQgb3RoZXIgWFNjYWxlcz8gKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWZkZWYgQ09ORklHX0hBUkRfSTJDCisKKy8qIAorICoJLSBDRkdfSTJDX1NQRUVEIAorICoJLSBJMkNfUFhBX1NMQVZFX0FERFIgCisgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8aTJjLmg+CisKKy8vI2RlZmluZQlERUJVR19JMkMgCTEJLyogYWN0aXZhdGUgbG9jYWwgZGVidWdnaW5nIG91dHB1dCAgKi8KKyNkZWZpbmUgSTJDX1BYQV9TTEFWRV9BRERSCTB4MQkvKiBzbGF2ZSBweGEgdW5pdCBhZGRyZXNzICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSUNSX0lOSVQJCShJQ1JfQkVJRSB8IElDUl9JUkZJRSB8IElDUl9JVEVJRSB8IElDUl9HQ0QgfCBJQ1JfU0NMRSkKKyNkZWZpbmUgSTJDX0lTUl9JTklUCQkweDdGRgorCisjaWZkZWYgREVCVUdfSTJDCisjZGVmaW5lIFBSSU5URCh4KSBwcmludGYgeAorI2Vsc2UKKyNkZWZpbmUgUFJJTlREKHgpCisjZW5kaWYKKworCisvKiBTaGFsbCB0aGUgY3VycmVudCB0cmFuc2ZlciBoYXZlIGEgc3RhcnQvc3RvcCBjb25kaXRpb24/ICovCisjZGVmaW5lIEkyQ19DT05EX05PUk1BTAkJMAorI2RlZmluZSBJMkNfQ09ORF9TVEFSVAkJMQorI2RlZmluZSBJMkNfQ09ORF9TVE9QCQkyCisKKy8qIFNoYWxsIHRoZSBjdXJyZW50IHRyYW5zZmVyIGJlIGFjay9uYWNrZWQgb3IgYmVpbmcgd2FpdGVkIGZvciBpdD8gKi8KKyNkZWZpbmUgSTJDX0FDS05BS19XQUlUQUNLCTEJCisjZGVmaW5lIEkyQ19BQ0tOQUtfU0VOREFDSwkyCisjZGVmaW5lIEkyQ19BQ0tOQUtfU0VORE5BSwk0CisKKy8qIFNwZWNpZnkgd2hvIHNoYWxsIHRyYW5zZmVyIHRoZSBkYXRhIChtYXN0ZXIgb3Igc2xhdmUpICovCisjZGVmaW5lIEkyQ19SRUFECQkwCisjZGVmaW5lIEkyQ19XUklURQkJMQorCisvKiBBbGwgdHJhbnNmZXJzIGFyZSBkZXNjcmliZWQgYnkgdGhpcyBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IGkyY19tc2cgeworCXU4IGNvbmRpdGlvbjsKKwl1OCBhY2tuYWNrOyAKKwl1OCBkaXJlY3Rpb247IAorCXU4IGRhdGE7Cit9OworCisKKy8qKgorICogaTJjX3B4YV9yZXNldDogLSByZXNldCB0aGUgaG9zdCBjb250cm9sbGVyIAorICoKKyAqLworCitzdGF0aWMgdm9pZCBpMmNfcmVzZXQoIHZvaWQgKQoreworCUlDUiAmPSB+SUNSX0lVRTsJCS8qIGRpc2FibGUgdW5pdCAqLworICAgICAgICBJQ1IgfD0gSUNSX1VSOwkJCS8qIHJlc2V0IHRoZSB1bml0ICovCisgICAgICAgIHVkZWxheSgxMDApOworICAgICAgICBJQ1IgJj0gfklDUl9JVUU7CQkvKiBkaXNhYmxlIHVuaXQgKi8KKyAgICAgICAgQ0tFTiB8PSBDS0VOMTRfSTJDOwkJLyogc2V0IHRoZSBnbG9iYWwgSTJDIGNsb2NrIG9uICovCisgICAgICAgIElTQVIgPSBJMkNfUFhBX1NMQVZFX0FERFI7CS8qIHNldCBvdXIgc2xhdmUgYWRkcmVzcyAqLworICAgICAgICBJQ1IgPSBJMkNfSUNSX0lOSVQ7CQkvKiBzZXQgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgKi8KKyAgICAgICAgSVNSID0gSTJDX0lTUl9JTklUOwkJLyogc2V0IGNsZWFyIGludGVycnVwdCBiaXRzICovCisgICAgICAgIElDUiB8PSBJQ1JfSVVFOwkJCS8qIGVuYWJsZSB1bml0ICovCisgICAgICAgIHVkZWxheSgxMDApOworfQorCisKKy8qKgorICogaTJjX2lzcl9zZXRfY2xlYXJlZDogLSB3YWl0IHVudGlsIGNlcnRhaW4gYml0cyBvZiB0aGUgSTJDIHN0YXR1cyByZWdpc3RlciAKKyAqCSAgICAgICAgICAgICAgICAgIGFyZSBzZXQgYW5kIGNsZWFyZWQKKyAqCisgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgMSBtZWFucyB0aW1lb3V0IChubyBtYXRjaCB3aXRoaW4gMTAgbXMpLiAKKyAqLworCitzdGF0aWMgaW50IGkyY19pc3Jfc2V0X2NsZWFyZWQoIHVuc2lnbmVkIGxvbmcgc2V0X21hc2ssIHVuc2lnbmVkIGxvbmcgY2xlYXJlZF9tYXNrICkKK3sKKwlpbnQgdGltZW91dCA9IDEwMDAwOworCisJd2hpbGUoICgoSVNSICYgc2V0X21hc2spIT1zZXRfbWFzaykgfHwgKChJU1IgJiBjbGVhcmVkX21hc2spIT0wKSApeworCQl1ZGVsYXkoIDEwICk7CisJCWlmKCB0aW1lb3V0LS0gPCAwICkgcmV0dXJuIDA7CisJfQorCisgICAgICAgIHJldHVybiAxOworfQorCisKKy8qKgorICogaTJjX3RyYW5zZmVyOiAtIFRyYW5zZmVyIG9uZSBieXRlIG92ZXIgdGhlIGkyYyBidXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiB0cmFuZmVyIGEgYnl0ZSBvdmVyIHRoZSBpMmMgYnVzIGluIGJvdGggZGlyZWN0aW9ucy4gCisgKiBJdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgQVBJIGZ1bmN0aW9ucy4gCisgKgorICogQHJldHVybjogIDA6IHRyYW5zZmVyIHN1Y2Nlc3NmdWwKKyAqICAgICAgICAgIC0xOiBtZXNzYWdlIGlzIGVtcHR5CisgKiAgICAgICAgICAtMjogdHJhbnNtaXQgdGltZW91dAorICogICAgICAgICAgLTM6IEFDSyBtaXNzaW5nCisgKiAgICAgICAgICAtNDogcmVjZWl2ZSB0aW1lb3V0CisgKiAgICAgICAgICAtNTogaWxsZWdhbCBwYXJhbWV0ZXJzCisgKiAgICAgICAgICAtNjogYnVzIGlzIGJ1c3kgYW5kIGNvdWxkbid0IGJlIGFxdWlyZWQKKyAqLyAKK2ludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtc2cpIAorCQlnb3RvIHRyYW5zZmVyX2Vycm9yX21zZ19lbXB0eTsKKworCXN3aXRjaChtc2ctPmRpcmVjdGlvbikgeworCisJY2FzZSBJMkNfV1JJVEU6CisKKwkJLyogY2hlY2sgaWYgYnVzIGlzIG5vdCBidXN5ICovCisJCWlmICghaTJjX2lzcl9zZXRfY2xlYXJlZCgwLElTUl9JQkIpKQorCQkJZ290byB0cmFuc2Zlcl9lcnJvcl9idXNfYnVzeTsKKworCQkvKiBzdGFydCB0cmFuc21pc3Npb24gKi8KKwkJSUNSICY9IH5JQ1JfU1RBUlQ7CisJCUlDUiAmPSB+SUNSX1NUT1A7CisJCUlEQlIgPSBtc2ctPmRhdGE7CisJCWlmIChtc2ctPmNvbmRpdGlvbiA9PSBJMkNfQ09ORF9TVEFSVCkgICAgIElDUiB8PSAgSUNSX1NUQVJUOworCQlpZiAobXNnLT5jb25kaXRpb24gPT0gSTJDX0NPTkRfU1RPUCkgICAgICBJQ1IgfD0gIElDUl9TVE9QOyAKKwkJaWYgKG1zZy0+YWNrbmFjayAgID09IEkyQ19BQ0tOQUtfU0VORE5BSykgSUNSIHw9ICBJQ1JfQUNLTkFLOworCQlpZiAobXNnLT5hY2tuYWNrICAgPT0gSTJDX0FDS05BS19TRU5EQUNLKSBJQ1IgJj0gfklDUl9BQ0tOQUs7CisJCUlDUiAmPSB+SUNSX0FMRElFOworCQlJQ1IgfD0gSUNSX1RCOyAKKworCQkvKiB0cmFuc21pdCByZWdpc3RlciBlbXB0eT8gKi8KKwkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKElTUl9JVEUsMCkpIAorCQkJZ290byB0cmFuc2Zlcl9lcnJvcl90cmFuc21pdF90aW1lb3V0OworCisJCS8qIGNsZWFyICd0cmFuc21pdCBlbXB0eScgc3RhdGUgKi8KKwkJSVNSIHw9IElTUl9JVEU7CisKKwkJLyogd2FpdCBmb3IgQUNLIGZyb20gc2xhdmUgKi8KKwkJaWYgKG1zZy0+YWNrbmFjayA9PSBJMkNfQUNLTkFLX1dBSVRBQ0spCisJCQlpZiAoIWkyY19pc3Jfc2V0X2NsZWFyZWQoMCxJU1JfQUNLTkFLKSkgCisJCQkJZ290byB0cmFuc2Zlcl9lcnJvcl9hY2tfbWlzc2luZzsKKwkJYnJlYWs7CisKKwljYXNlIEkyQ19SRUFEOgorCisJCS8qIGNoZWNrIGlmIGJ1cyBpcyBub3QgYnVzeSAqLworCQlpZiAoIWkyY19pc3Jfc2V0X2NsZWFyZWQoMCxJU1JfSUJCKSkKKwkJCWdvdG8gdHJhbnNmZXJfZXJyb3JfYnVzX2J1c3k7CisKKwkJLyogc3RhcnQgcmVjZWl2ZSAqLworCQlJQ1IgJj0gfklDUl9TVEFSVDsKKwkJSUNSICY9IH5JQ1JfU1RPUDsKKwkJaWYgKG1zZy0+Y29uZGl0aW9uID09IEkyQ19DT05EX1NUQVJUKSAJICBJQ1IgfD0gSUNSX1NUQVJUOworCQlpZiAobXNnLT5jb25kaXRpb24gPT0gSTJDX0NPTkRfU1RPUCkgIAkgIElDUiB8PSBJQ1JfU1RPUDsKKwkJaWYgKG1zZy0+YWNrbmFjayAgID09IEkyQ19BQ0tOQUtfU0VORE5BSykgSUNSIHw9ICBJQ1JfQUNLTkFLOworCQlpZiAobXNnLT5hY2tuYWNrICAgPT0gSTJDX0FDS05BS19TRU5EQUNLKSBJQ1IgJj0gfklDUl9BQ0tOQUs7CisJCUlDUiAmPSB+SUNSX0FMRElFOworCQlJQ1IgfD0gSUNSX1RCOworCisJCS8qIHJlY2VpdmUgcmVnaXN0ZXIgZnVsbD8gKi8KKwkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKElTUl9JUkYsMCkpIAorCQkJZ290byB0cmFuc2Zlcl9lcnJvcl9yZWNlaXZlX3RpbWVvdXQ7IAorCisJCW1zZy0+ZGF0YSA9IElEQlI7CisKKwkJLyogY2xlYXIgJ3JlY2VpdmUgZW1wdHknIHN0YXRlICovCisJCUlTUiB8PSBJU1JfSVJGOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKworCQlnb3RvIHRyYW5zZmVyX2Vycm9yX2lsbGVnYWxfcGFyYW07CisKKwl9CisKKwlyZXR1cm4gMDsgCisKK3RyYW5zZmVyX2Vycm9yX21zZ19lbXB0eTogCisJCVBSSU5URCgoImkyY190cmFuc2ZlcjogZXJyb3I6ICdtc2cnIGlzIGVtcHR5XG4iKSk7CisJCXJldCA9IC0xOyBnb3RvIGkyY190cmFuc2Zlcl9maW5pc2g7CisKK3RyYW5zZmVyX2Vycm9yX3RyYW5zbWl0X3RpbWVvdXQ6CisJCVBSSU5URCgoImkyY190cmFuc2ZlcjogZXJyb3I6IHRyYW5zbWl0IHRpbWVvdXRcbiIpKTsKKwkJcmV0ID0gLTI7IGdvdG8gaTJjX3RyYW5zZmVyX2ZpbmlzaDsKKwordHJhbnNmZXJfZXJyb3JfYWNrX21pc3Npbmc6CisJCVBSSU5URCgoImkyY190cmFuc2ZlcjogZXJyb3I6IEFDSyBtaXNzaW5nXG4iKSk7CisJCXJldCA9IC0zOyBnb3RvIGkyY190cmFuc2Zlcl9maW5pc2g7CisKK3RyYW5zZmVyX2Vycm9yX3JlY2VpdmVfdGltZW91dDoKKwkJUFJJTlREKCgiaTJjX3RyYW5zZmVyOiBlcnJvcjogcmVjZWl2ZSB0aW1lb3V0XG4iKSk7CisJCXJldCA9IC00OyBnb3RvIGkyY190cmFuc2Zlcl9maW5pc2g7CisKK3RyYW5zZmVyX2Vycm9yX2lsbGVnYWxfcGFyYW06CisJCVBSSU5URCgoImkyY190cmFuc2ZlcjogZXJyb3I6IGlsbGVnYWwgcGFyYW1ldGVyc1xuIikpOworCQlyZXQgPSAtNTsgZ290byBpMmNfdHJhbnNmZXJfZmluaXNoOworCit0cmFuc2Zlcl9lcnJvcl9idXNfYnVzeToKKwkJUFJJTlREKCgiaTJjX3RyYW5zZmVyOiBlcnJvcjogYnVzIGlzIGJ1c3lcbiIpKTsKKwkJcmV0ID0gLTY7IGdvdG8gaTJjX3RyYW5zZmVyX2ZpbmlzaDsKKworaTJjX3RyYW5zZmVyX2ZpbmlzaDoKKwkJUFJJTlREKCgiaTJjX3RyYW5zZmVyOiBJU1I6IDB4JTA0eFxuIixJU1IpKTsKKwkJaTJjX3Jlc2V0KCk7CisJCXJldHVybiByZXQ7CisKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBBUEkgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKK3sKK30KKworCisvKioKKyAqIGkyY19wcm9iZTogLSBUZXN0IGlmIGEgY2hpcCBhbnN3ZXJzIGZvciBhIGdpdmVuIGkyYyBhZGRyZXNzCisgKgorICogQGNoaXA6CWFkZHJlc3Mgb2YgdGhlIGNoaXAgd2hpY2ggaXMgc2VhcmNoZWQgZm9yIAorICogQHJldHVybjogCTAgaWYgYSBjaGlwIHdhcyBmb3VuZCwgLTEgb3RoZXJ3aGlzZQorICovCisKK2ludCBpMmNfcHJvYmUodWNoYXIgY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlpMmNfcmVzZXQoKTsKKworCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9TVEFSVDsKKwltc2cuYWNrbmFjayAgID0gSTJDX0FDS05BS19XQUlUQUNLOworCW1zZy5kaXJlY3Rpb24gPSBJMkNfV1JJVEU7CisJbXNnLmRhdGEgICAgICA9IChjaGlwIDw8IDEpICsgMTsKKwlpZiAoaTJjX3RyYW5zZmVyKCZtc2cpKSByZXR1cm4gLTE7CisKKwltc2cuY29uZGl0aW9uID0gSTJDX0NPTkRfU1RPUDsKKwltc2cuYWNrbmFjayAgID0gSTJDX0FDS05BS19TRU5ETkFLOworCW1zZy5kaXJlY3Rpb24gPSBJMkNfUkVBRDsKKwltc2cuZGF0YSAgICAgID0gMHgwMDsKKwlpZiAoaTJjX3RyYW5zZmVyKCZtc2cpKSByZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIGkyY19yZWFkOiAtIFJlYWQgbXVsdGlwbGUgYnl0ZXMgZnJvbSBhbiBpMmMgZGV2aWNlCisgKgorICogVGhlIGhpZ2hlciBsZXZlbCByb3V0aW5lcyB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgb25seQorICogY2FsbGVkIHdpdGggbGVuIDwgcGFnZSBsZW5ndGggb2YgdGhlIGRldmljZSAoc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSkgCisgKgorICogQGNoaXA6CWFkZHJlc3Mgb2YgdGhlIGNoaXAgd2hpY2ggaXMgdG8gYmUgcmVhZAorICogQGFkZHI6CWkyYyBkYXRhIGFkZHJlc3Mgd2l0aGluIHRoZSBjaGlwCisgKiBAYWxlbjoJbGVuZ3RoIG9mIHRoZSBpMmMgZGF0YSBhZGRyZXNzICgxLi4yIGJ5dGVzKQorICogQGJ1ZmZlcjoJd2hlcmUgdG8gd3JpdGUgdGhlIGRhdGEKKyAqIEBsZW46CWhvdyBtdWNoIGJ5dGUgZG8gd2Ugd2FudCB0byByZWFkCisgKiBAcmV0dXJuOgkwIGluIGNhc2Ugb2Ygc3VjY2VzcworICovCisKK2ludCBpMmNfcmVhZCh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwl1OCBhZGRyX2J5dGVzWzNdOyAvKiBsb3dlc3QuLi5oaWdoZXN0IGJ5dGUgb2YgZGF0YSBhZGRyZXNzICovCisJaW50IHJldDsKKworCVBSSU5URCgoImkyY19yZWFkKGNoaXA9MHglMDJ4LCBhZGRyPTB4JTAyeCwgYWxlbj0weCUwMngsIGxlbj0weCUwMngpXG4iLGNoaXAsYWRkcixhbGVuLGxlbikpOworCisJaTJjX3Jlc2V0KCk7CisKKwkvKiBkdW1teSBjaGlwIGFkZHJlc3Mgd3JpdGUgKi8KKwlQUklOVEQoKCJpMmNfcmVhZDogZHVtbXkgY2hpcCBhZGRyZXNzIHdyaXRlXG4iKSk7CisJbXNnLmNvbmRpdGlvbiA9IEkyQ19DT05EX1NUQVJUOworCW1zZy5hY2tuYWNrICAgPSBJMkNfQUNLTkFLX1dBSVRBQ0s7CisJbXNnLmRpcmVjdGlvbiA9IEkyQ19XUklURTsKKwltc2cuZGF0YSAgICAgID0gKGNoaXAgPDwgMSk7CisJbXNnLmRhdGEgICAgICY9IDB4RkU7CisJaWYgKChyZXQ9aTJjX3RyYW5zZmVyKCZtc2cpKSkgcmV0dXJuIC0xOworCQorCS8qCisJICogc2VuZCBtZW1vcnkgYWRkcmVzcyBieXRlczsgCisJICogYWxlbiBkZWZpbmVzIGhvdyBtdWNoIGJ5dGVzIHdlIGhhdmUgdG8gc2VuZC4gCisJICovCisJLy9hZGRyICY9ICgoMSA8PCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyktMSk7CisJYWRkcl9ieXRlc1swXSA9ICh1OCkoKGFkZHIgPj4gIDApICYgMHgwMDAwMDBGRik7CisJYWRkcl9ieXRlc1sxXSA9ICh1OCkoKGFkZHIgPj4gIDgpICYgMHgwMDAwMDBGRik7CisJYWRkcl9ieXRlc1syXSA9ICh1OCkoKGFkZHIgPj4gMTYpICYgMHgwMDAwMDBGRik7CisKKwl3aGlsZSAoLS1hbGVuID49IDApIHsKKworCQlQUklOVEQoKCJpMmNfcmVhZDogc2VuZCBtZW1vcnkgd29yZCBhZGRyZXNzIGJ5dGUgJTFkXG4iLGFsZW4pKTsKKwkJbXNnLmNvbmRpdGlvbiA9IEkyQ19DT05EX05PUk1BTDsKKwkJbXNnLmFja25hY2sgICA9IEkyQ19BQ0tOQUtfV0FJVEFDSzsKKwkJbXNnLmRpcmVjdGlvbiA9IEkyQ19XUklURTsKKwkJbXNnLmRhdGEgICAgICA9IGFkZHJfYnl0ZXNbYWxlbl07CisJCWlmICgocmV0PWkyY190cmFuc2ZlcigmbXNnKSkpIHJldHVybiAtMTsKKwl9CisJCisKKwkvKiBzdGFydCByZWFkIHNlcXVlbmNlICovCisJUFJJTlREKCgiaTJjX3JlYWQ6IHN0YXJ0IHJlYWQgc2VxdWVuY2VcbiIpKTsKKwltc2cuY29uZGl0aW9uID0gSTJDX0NPTkRfU1RBUlQ7CisJbXNnLmFja25hY2sgICA9IEkyQ19BQ0tOQUtfV0FJVEFDSzsKKwltc2cuZGlyZWN0aW9uID0gSTJDX1dSSVRFOworCW1zZy5kYXRhICAgICAgPSAoY2hpcCA8PCAxKTsKKwltc2cuZGF0YSAgICAgfD0gMHgwMTsKKwlpZiAoKHJldD1pMmNfdHJhbnNmZXIoJm1zZykpKSByZXR1cm4gLTE7CisKKwkvKiByZWFkIGJ5dGVzOyBzZW5kIE5BQ0sgYXQgbGFzdCBieXRlICovCisJd2hpbGUgKGxlbi0tKSB7CisKKwkJaWYgKGxlbj09MCkgeyAKKwkJCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9TVE9QOworCQkJbXNnLmFja25hY2sgICA9IEkyQ19BQ0tOQUtfU0VORE5BSzsKKwkJfSBlbHNlIHsKKwkJCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9OT1JNQUw7CisJCQltc2cuYWNrbmFjayAgID0gSTJDX0FDS05BS19TRU5EQUNLOworCQl9CisKKwkJbXNnLmRpcmVjdGlvbiA9IEkyQ19SRUFEOworCQltc2cuZGF0YSAgICAgID0gMHgwMDsKKwkJaWYgKChyZXQ9aTJjX3RyYW5zZmVyKCZtc2cpKSkgcmV0dXJuIC0xOworCisJCSooYnVmZmVyKyspID0gbXNnLmRhdGE7CisKKwkJUFJJTlREKCgiaTJjX3JlYWQ6IHJlYWRpbmcgYnl0ZSAoMHglMDh4KT0weCUwMnhcbiIsKHVuc2lnbmVkIGludClidWZmZXIsKmJ1ZmZlcikpOworCisJfQorCisJaTJjX3Jlc2V0KCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIGkyY193cml0ZTogLSAgV3JpdGUgbXVsdGlwbGUgYnl0ZXMgdG8gYW4gaTJjIGRldmljZQorICoKKyAqIFRoZSBoaWdoZXIgbGV2ZWwgcm91dGluZXMgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyAqIGNhbGxlZCB3aXRoIGxlbiA8IHBhZ2UgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgKHNlZSBjb25maWd1cmF0aW9uIGZpbGUpIAorICoKKyAqIEBjaGlwOglhZGRyZXNzIG9mIHRoZSBjaGlwIHdoaWNoIGlzIHRvIGJlIHdyaXR0ZW4KKyAqIEBhZGRyOglpMmMgZGF0YSBhZGRyZXNzIHdpdGhpbiB0aGUgY2hpcAorICogQGFsZW46CWxlbmd0aCBvZiB0aGUgaTJjIGRhdGEgYWRkcmVzcyAoMS4uMiBieXRlcykKKyAqIEBidWZmZXI6CXdoZXJlIHRvIGZpbmQgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiAKKyAqIEBsZW46CWhvdyBtdWNoIGJ5dGUgZG8gd2Ugd2FudCB0byByZWFkCisgKiBAcmV0dXJuOgkwIGluIGNhc2Ugb2Ygc3VjY2VzcworICovCisKK2ludCBpMmNfd3JpdGUodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJdTggYWRkcl9ieXRlc1szXTsgLyogbG93ZXN0Li4uaGlnaGVzdCBieXRlIG9mIGRhdGEgYWRkcmVzcyAqLworCisJUFJJTlREKCgiaTJjX3dyaXRlKGNoaXA9MHglMDJ4LCBhZGRyPTB4JTAyeCwgYWxlbj0weCUwMngsIGxlbj0weCUwMngpXG4iLGNoaXAsYWRkcixhbGVuLGxlbikpOworCisJaTJjX3Jlc2V0KCk7CisKKwkvKiBjaGlwIGFkZHJlc3Mgd3JpdGUgKi8KKwlQUklOVEQoKCJpMmNfd3JpdGU6IGNoaXAgYWRkcmVzcyB3cml0ZVxuIikpOworCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9TVEFSVDsKKwltc2cuYWNrbmFjayAgID0gSTJDX0FDS05BS19XQUlUQUNLOworCW1zZy5kaXJlY3Rpb24gPSBJMkNfV1JJVEU7CisJbXNnLmRhdGEgICAgICA9IChjaGlwIDw8IDEpOworCW1zZy5kYXRhICAgICAmPSAweEZFOworCWlmIChpMmNfdHJhbnNmZXIoJm1zZykpIHJldHVybiAtMTsKKwkKKwkvKgorCSAqIHNlbmQgbWVtb3J5IGFkZHJlc3MgYnl0ZXM7IAorCSAqIGFsZW4gZGVmaW5lcyBob3cgbXVjaCBieXRlcyB3ZSBoYXZlIHRvIHNlbmQuIAorCSAqLworCWFkZHJfYnl0ZXNbMF0gPSAodTgpKChhZGRyID4+ICAwKSAmIDB4MDAwMDAwRkYpOworCWFkZHJfYnl0ZXNbMV0gPSAodTgpKChhZGRyID4+ICA4KSAmIDB4MDAwMDAwRkYpOworCWFkZHJfYnl0ZXNbMl0gPSAodTgpKChhZGRyID4+IDE2KSAmIDB4MDAwMDAwRkYpOworCisJd2hpbGUgKC0tYWxlbiA+PSAwKSB7CisKKwkJUFJJTlREKCgiaTJjX3dyaXRlOiBzZW5kIG1lbW9yeSB3b3JkIGFkZHJlc3NcbiIpKTsKKwkJbXNnLmNvbmRpdGlvbiA9IEkyQ19DT05EX05PUk1BTDsKKwkJbXNnLmFja25hY2sgICA9IEkyQ19BQ0tOQUtfV0FJVEFDSzsKKwkJbXNnLmRpcmVjdGlvbiA9IEkyQ19XUklURTsKKwkJbXNnLmRhdGEgICAgICA9IGFkZHJfYnl0ZXNbYWxlbl07CisJCWlmIChpMmNfdHJhbnNmZXIoJm1zZykpIHJldHVybiAtMTsKKwl9CisJCQorCS8qIHdyaXRlIGJ5dGVzOyBzZW5kIE5BQ0sgYXQgbGFzdCBieXRlICovCisJd2hpbGUgKGxlbi0tKSB7CisKKwkJUFJJTlREKCgiaTJjX3dyaXRlOiB3cml0aW5nIGJ5dGUgKDB4JTA4eCk9MHglMDJ4XG4iLCh1bnNpZ25lZCBpbnQpYnVmZmVyLCpidWZmZXIpKTsKKworCQlpZiAobGVuPT0wKSAKKwkJCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9TVE9QOworCQllbHNlCisJCQltc2cuY29uZGl0aW9uID0gSTJDX0NPTkRfTk9STUFMOworCisJCW1zZy5hY2tuYWNrICAgPSBJMkNfQUNLTkFLX1dBSVRBQ0s7CisJCW1zZy5kaXJlY3Rpb24gPSBJMkNfV1JJVEU7CisJCW1zZy5kYXRhICAgICAgPSAqKGJ1ZmZlcisrKTsKKwkJCisJCWlmIChpMmNfdHJhbnNmZXIoJm1zZykpIHJldHVybiAtMTsKKworCX0KKworCWkyY19yZXNldCgpOworCisJcmV0dXJuIDA7CisKK30KKwordWNoYXIgaTJjX3JlZ19yZWFkICh1Y2hhciBjaGlwLCB1Y2hhciByZWcpCit7CisJUFJJTlREKCgiaTJjX3JlZ19yZWFkKGNoaXA9MHglMDJ4LCByZWc9MHglMDJ4KVxuIixjaGlwLHJlZykpOworCXJldHVybiAwOworfQorCit2b2lkICBpMmNfcmVnX3dyaXRlKHVjaGFyIGNoaXAsIHVjaGFyIHJlZywgdWNoYXIgdmFsKQoreworCVBSSU5URCgoImkyY19yZWdfd3JpdGUoY2hpcD0weCUwMngsIHJlZz0weCUwMngsIHZhbD0weCUwMngpXG4iLGNoaXAscmVnLHZhbCkpOworfQorCisjZW5kaWYJLyogQ09ORklHX0hBUkRfSTJDICovCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLlBPU1QgYi9kb2MvUkVBRE1FLlBPU1QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzNDZhZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUuUE9TVApAQCAtMCwwICsxLDczMiBAQAorUG93ZXItT24tU2VsZi1UZXN0IHN1cHBvcnQgaW4gVS1Cb290CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBwcm9qZWN0IGlzIHRvIHN1cHBvcnQgUG93ZXItT24tU2VsZi1UZXN0IChQT1NUKSBpbiBVLUJvb3QuCisKKzEuIEhpZ2gtbGV2ZWwgcmVxdWlyZW1lbnRzCisKK1RoZSBrZXkgcnF1aXJlbWVudHMgZm9yIHRoaXMgcHJvamVjdCBhcmUgYXMgZm9sbG93czoKKworMSkgVGhlIHByb2plY3Qgc2hhbGwgZGV2ZWxvcCBhIGZsZXhpYmxlIGZyYW1ld29yayBmb3IgaW1wbGVtZW50aW5nCisgICBhbmQgcnVubmluZyBQb3dlci1Pbi1TZWxmLVRlc3QgaW4gVS1Cb290LiBUaGlzIGZyYW1ld29yayBzaGFsbAorICAgcG9zc2VzcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorCisgICBvKSBFeHRlbnNpYmlsaXR5CisKKyAgICAgIFRoZSBmcmFtZXdvcmsgc2hhbGwgYWxsb3cgYWRkaW5nL3JlbW92aW5nL3JlcGxhY2luZyBQT1NUIHRlc3RzLgorICAgICAgQWxzbywgc3RhbmRhbG9uZSBQT1NUIHRlc3RzIHNoYWxsIGJlIHN1cHBvcnRlZC4KKworICAgbykgQ29uZmlndXJhYmlsaXR5CisKKyAgICAgIFRoZSBmcmFtZXdvcmsgc2hhbGwgYWxsb3cgcnVuLXRpbWUgY29uZmlndXJhdGlvbiBvZiB0aGUgbGlzdHMKKyAgICAgIG9mIHRlc3RzIHJ1bm5pbmcgb24gbm9ybWFsL3Bvd2VyLWZhaWwgYm9vdGluZy4KKworICAgbykgQ29udHJvbGxhYmlsaXR5CisKKyAgICAgIFRoZSBmcmFtZXdvcmsgc2hhbGwgc3VwcG9ydCBtYW51YWwgcnVubmluZyBvZiB0aGUgUE9TVCB0ZXN0cy4KKworMikgVGhlIHJlc3VsdHMgb2YgdGVzdHMgc2hhbGwgYmUgc2F2ZWQgc28gdGhhdCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvCisgICByZXRyaWV2ZSB0aGVtIGZyb20gTGludXguCisKKzMpIFRoZSBmb2xsb3dpbmcgUE9TVCB0ZXN0cyBzaGFsbCBiZSBkZXZlbG9wZWQgZm9yIE1QQzgyM0UtYmFzZWQKKyAgIGJvYXJkczoKKworICAgbykgQ1BVIHRlc3QKKyAgIG8pIENhY2hlIHRlc3QKKyAgIG8pIE1lbW9yeSB0ZXN0CisgICBvKSBFdGhlcm5ldCB0ZXN0CisgICBvKSBTZXJpYWwgY2hhbm5lbHMgdGVzdAorICAgbykgV2F0Y2hkb2cgdGltZXIgdGVzdAorICAgbykgUlRDIHRlc3QKKyAgIG8pIEkyQyB0ZXN0CisgICBvKSBTUEkgdGVzdAorICAgbykgVVNCIHRlc3QKKworNCkgVGhlIExXTU9OIGJvYXJkIHNoYWxsIGJlIHVzZWQgZm9yIHJlZmVyZW5jZS4KKworMi4gRGVzaWduCisKK1RoaXMgc2VjdGlvbiBkZXRhaWxzIHRoZSBrZXkgcG9pbnRzIG9mIHRoZSBkZXNpZ24gZm9yIHRoZSBwcm9qZWN0LgorVGhlIHdob2xlIHByb2plY3QgY2FuIGJlIGRpdmlkZWQgaW50byB0d28gaW5kZXBlbmRlbnQgdGFza3M6CitlbmhhbmNpbmcgVS1Cb290L0xpbnV4IHRvIHByb3ZpZGUgYSBjb21tb24gZnJhbWV3b3JrIGZvciBydW5uaW5nIFBPU1QKK3Rlc3RzIGFuZCBkZXZlbG9waW5nIHN1Y2ggdGVzdHMgZm9yIHBhcnRpY3VsYXIgaGFyZHdhcmUuCisKKzIuMS4gSGFyZHdhcmUtaW5kZXBlbmRlbnQgUE9TVCBsYXllcgorCitBIG5ldyBvcHRpb25hbCBtb2R1bGUgd2lsbCBiZSBhZGRlZCB0byBVLUJvb3QsIHdoaWNoIHdpbGwgcnVuIFBPU1QKK3Rlc3RzIGFuZCBjb2xsZWN0IHRoZWlyIHJlc3VsdHMgYXQgYm9vdCB0aW1lLiBBbHNvLCBVLUJvb3Qgd2lsbAorc3VwcG9ydCBydW5uaW5nIFBPU1QgdGVzdHMgbWFudWFsbHkgYXQgYW55IHRpbWUgYnkgZXhlY3V0aW5nIGEKK3NwZWNpYWwgY29tbWFuZCBmcm9tIHRoZSBzeXN0ZW0gY29uc29sZS4KKworVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIFBPU1QgdGVzdHMgd2lsbCBiZSBjb25maWd1cmVkIGF0IFUtQm9vdCBidWlsZAordGltZS4gVGhlIFBPU1QgbGF5ZXIgd2lsbCBhbGxvdyB0aGUgZGV2ZWxvcGVyIHRvIGFkZCBhbnkgY3VzdG9tIFBPU1QKK3Rlc3RzLiBBbGwgUE9TVCB0ZXN0cyB3aWxsIGJlIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGdyb3VwczoKKworICAxKSBUZXN0cyBydW5uaW5nIG9uIHBvd2VyLW9uIGJvb3Rpbmcgb25seQorCisgICAgIFRoaXMgZ3JvdXAgd2lsbCBjb250YWluIHRob3NlIHRlc3RzIHRoYXQgcnVuIG9ubHkgb25jZSBvbgorICAgICBwb3dlci1vbiByZXNldCAoZS5nLiB3YXRjaGRvZyB0ZXN0KQorCisgIDIpIFRlc3RzIHJ1bm5pbmcgb24gbm9ybWFsIGJvb3Rpbmcgb25seQorCisgICAgIFRoaXMgZ3JvdXAgd2lsbCBjb250YWluIHRob3NlIHRlc3RzIHRoYXQgZG8gbm90IHRha2UgbXVjaAorICAgICB0aW1lIGFuZCBjYW4gYmUgcnVuIG9uIHRoZSByZWd1bGFyIGJhc2lzIChlLmcuIENQVSB0ZXN0KQorCisgIDMpIFRlc3RzIHJ1bm5pbmcgb24gcG93ZXItZmFpbCBib290aW5nIG9ubHkKKworICAgICBUaGlzIGdyb3VwIHdpbGwgY29udGFpbiBQT1NUIHRlc3RzIHRoYXQgY29uc3VtZSBtdWNoIHRpbWUKKyAgICAgYW5kIGNhbm5vdCBiZSBydW4gcmVndWxhcmx5IChlLmcuIEkyQyB0ZXN0KQorCisgIDQpIE1hbnVhbGx5IGV4ZWN1dGVkIHRlc3RzCisKKyAgICAgVGhpcyBncm91cCB3aWxsIGNvbnRhaW4gdGhvc2UgdGVzdHMgdGhhdCBjYW4gYmUgcnVuIG1hbnVhbGx5LgorCitJZiBuZWNlc3NhcnksIHNvbWUgdGVzdHMgbWF5IGJlbG9uZyB0byBzZXZlcmFsIGdyb3VwcyBzaW11bHRhbmVvdXNseS4KK0ZvciBleGFtcGxlLCBTRFJBTSB0ZXN0IG1heSBydW4gb24gYm90aCBub2FybWFsIGFuZCBwb3dlci1mYWlsCitib290aW5nLiBPbiBub3JtYWwgYm9vdGluZywgU0RSQU0gdGVzdCBtYXkgcGVyZm9ybSBhIGZhc3Qgc3VwZXJmaWNpYWwKK21lbW9yeSB0ZXN0IG9ubHksIHdoaWxlIHJ1bm5pbmcgb24gcG93ZXItZmFpbCBib290aW5nIGl0IG1heSBwZXJmb3JtCithIGZ1bGwgbWVtb3J5IGNoZWNrLXVwLgorCitBbHNvLCBhbGwgdGVzdHMgd2lsbCBiZSBkaXNjcmltaW5hdGVkIGJ5IHRoZSBtb21lbnQgdGhleSBydW4gYXQuCitTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZ3JvdXBzIHdpbGwgYmUgc2luZ2xlZCBvdXQ6CisKKyAgMSkgVGVzdHMgcnVubmluZyBiZWZvcmUgcmVsb2NhdGluZyB0byBSQU0KKworICAgICBUaGVzZSB0ZXN0cyB3aWxsIHJ1biBpbW1lZGlhdGVsbHkgYWZ0ZXIgaW5pdGlhbGl6aW5nIFJBTQorICAgICBhcyB0byBlbmFibGUgbW9kaWZ5aW5nIGl0IHdpdGhvdXQgdGFraW5nIGNhcmUgb2YgaXRzCisgICAgIGNvbnRlbnRzLiBCYXNpY2FsbHksIHRoaXMgZ3JvdXAgd2lsbCBjb250YWluIG1lbW9yeSB0ZXN0cworICAgICBvbmx5LgorCisgIDIpIFRlc3RzIHJ1bm5pbmcgYWZ0ZXIgcmVsb2NhdGluZyB0byBSQU0KKworICAgICBUaGVzZSB0ZXN0cyB3aWxsIHJ1biBpbW1lZGlhdGVseSBiZWZvcmUgZW50ZXJpbmcgdGhlIG1haW4KKyAgICAgbG9vcCBhcyB0byBndWFyYW50ZWUgZnVsbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4KKworVGhlIFBPU1QgbGF5ZXIgd2lsbCBhbHNvIGRpc3Rpbmd1aXNoIGEgc3BlY2lhbCBncm91cCBvZiB0ZXN0cyB0aGF0CittYXkgY2F1c2Ugc3lzdGVtIHJlYm9vdGluZyAoZS5nLiB3YXRjaGRvZyB0ZXN0KS4gRm9yIHN1Y2ggdGVzdHMsIHRoZQorbGF5ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCByZWJvb3RpbmcgYW5kIHdpbGwgbm90aWZ5IHRoZSB0ZXN0CithYm91dCBpdC4KKworMi4xLjEuIFBPU1QgbGF5ZXIgaW50ZXJmYWNlcworCitUaGlzIHNlY3Rpb24gZGV0YWlscyB0aGUgaW50ZXJmYWNlcyBiZXR3ZWVuIHRoZSBQT1NUIGxheWVyIGFuZCB0aGUKK3Jlc3Qgb2YgVS1Cb290LgorCitUaGUgZm9sbG93aW5nIGZsYWdzIHdpbGwgYmUgZGVmaW5lZDoKKworI2RlZmluZSBQT1NUX1JPTQkJMHgwMQkvKiB0ZXN0IHJ1bnMgaW4gUk9NICovCisjZGVmaW5lIFBPU1RfUkFNCQkweDAyCS8qIHRlc3QgcnVucyBpbiBSQU0gKi8KKyNkZWZpbmUgUE9TVF9QT1dFUk9OCQkweDA0CS8qIHRlc3QgcnVucyBvbiBwb3dlci1vbiBib290aW5nICovCisjZGVmaW5lIFBPU1RfTk9STUFMCQkweDA4CS8qIHRlc3QgcnVucyBvbiBub3JtYWwgYm9vdGluZyAqLworI2RlZmluZSBQT1NUX1NIVVRET1dOCQkweDEwCS8qIHRlc3QgcnVucyBvbiBwb3dlci1mYWlsIGJvb3RpbmcgKi8KKyNkZWZpbmUgUE9TVF9NQU5VQUwJCTB4MjAJLyogdGVzdCBjYW4gYmUgZXhlY3V0ZWQgbWFudWFsbHkgKi8KKyNkZWZpbmUgUE9TVF9SRUJPT1QJCTB4ODAJLyogdGVzdCBtYXkgY2F1c2UgcmVib290aW5nICovCisKK1RoZSBQT1NUIGxheWVyIHdpbGwgZXhwb3J0IHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlIHJvdXRpbmVzOgorCisgIG8pIGludCBwb3N0X3J1bihiZF90ICpiZCwgY2hhciAqbmFtZSwgaW50IGZsYWdzKTsKKworICAgICBUaGlzIHJvdXRpbmUgd2lsbCBydW4gdGhlIHRlc3QgKG9yIHRoZSBncm91cCBvZiB0ZXN0cykgc3BlY2lmaWVkCisgICAgIGJ5IHRoZSBuYW1lIGFuZCBmbGFnIGFyZ3VtZW50cy4gTW9yZSBzcGVjaWZpY2FsbHksIGlmIHRoZSBuYW1lCisgICAgIGFyZ3VtZW50IGlzIG5vdCBOVUxMLCB0aGUgdGVzdCB3aXRoIHRoaXMgbmFtZSB3aWxsIGJlIHBlcmZvcm1lZCwKKyAgICAgb3RoZXJ3aXNlIGFsbCB0ZXN0cyBydW5uaW5nIGluIFJPTS9SQU0gKGRlcGVuZGluZyBvbiB0aGUgZmxhZworICAgICBhcmd1bWVudCkgd2lsbCBiZSBleGVjdXRlZC4gVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGF0IGxlYXN0CisgICAgIHR3aWNlIHdpdGggbmFtZSBzZXQgdG8gTlVMTCwgb25jZSBmcm9tIGJvYXJkX2luaXRfZigpIGFuZCBvbmNlCisgICAgIGZyb20gYm9hcmRfaW5pdF9yKCkuIFRoZSBmbGFncyBhcmd1bWVudCB3aWxsIGFsc28gc3BlY2lmeSB0aGUKKyAgICAgbW9kZSB0aGUgdGVzdCBpcyBleGVjdXRlZCBpbiAocG93ZXItb24sIG5vcm1hbCwgcG93ZXItZmFpbCwKKyAgICAgbWFudWFsKS4KKworICBvKSB2b2lkIHBvc3RfcmVsb2ModWxvbmcgb2Zmc2V0KTsKKworICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgZnJvbSBib2FyZF9pbml0X3IoKSBhbmQgd2lsbAorICAgICByZWxvY2F0ZSB0aGUgUE9TVCB0ZXN0IHRhYmxlLgorCisgIG8pIGludCBwb3N0X2luZm8oY2hhciAqbmFtZSk7CisKKyAgICAgVGhpcyByb3V0aW5lIHdpbGwgcHJpbnQgdGhlIGxpc3Qgb2YgYWxsIFBPU1QgdGVzdHMgdGhhdCBjYW4gYmUKKyAgICAgZXhlY3V0ZWQgbWFudWFsbHkgaWYgbmFtZSBpcyBOVUxMLCBhbmQgdGhlIGRlc2NyaXB0aW9uIG9mIGEKKyAgICAgcGFydGljdWxhciB0ZXN0IGlmIG5hbWUgaXMgbm90IE5VTEwuCisKKyAgbykgaW50IHBvc3RfbG9nKGNoYXIgKmZvcm1hdCwgLi4uKTsKKworICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgZnJvbSBQT1NUIHRlc3RzIHRvIGxvZyB0aGVpcgorICAgICByZXN1bHRzLiBCYXNpY2FsbHksIHRoaXMgcm91dGluZSB3aWxsIHByaW50IHRoZSByZXN1bHRzIHRvCisgICAgIHN0ZGVyci4gVGhlIGZvcm1hdCBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlCisgICAgIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBwcmludGYoKSByb3V0aW5lLgorCitBbHNvLCB0aGUgZm9sbG93aW5nIGJvYXJkLXNwZWNpZmljIHJvdXRpbmVzIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlCitVLUJvb3QgY29tbW9uIGNvZGU6CisKKyAgbykgaW50IGJvYXJkX3Bvd2VyX21vZGUodm9pZCkKKworICAgICBUaGlzIHJvdXRpbmUgd2lsbCByZXR1cm4gdGhlIG1vZGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nIGluCisgICAgIChQT1NUX1BPV0VST04sIFBPU1RfTk9STUFMIG9yIFBPU1RfU0hVVERPV04pLgorCisgIG8pIHZvaWQgYm9hcmRfcG93ZXJvZmYodm9pZCkKKworICAgICBUaGlzIHJvdXRpbmUgd2lsbCB0dXJuIG9mZiB0aGUgcG93ZXIgc3VwcGx5IG9mIHRoZSBib2FyZC4gSXQKKyAgICAgd2lsbCBiZSBjYWxsZWQgb24gcG93ZXItZmFpbCBib290aW5nIGFmdGVyIHJ1bm5pbmcgYWxsIFBPU1QKKyAgICAgdGVzdHMuCisKK1RoZSBsaXN0IG9mIGF2YWlsYWJsZSBQT1NUIHRlc3RzIGJlIGtlcHQgaW4gdGhlIHBvc3RfdGVzdHMgYXJyYXkKK2ZpbGxlZCBhdCBVLUJvb3QgYnVpbGQgdGltZS4gVGhlIGZvcm1hdCBvZiBlbnRyeSBpbiB0aGlzIGFycmF5IHdpbGwKK2JlIGFzIGZvbGxvd3M6CisKK3N0cnVjdCBwb3N0X3Rlc3QgeworICAgIGNoYXIgKm5hbWU7CisgICAgY2hhciAqY21kOworICAgIGNoYXIgKmRlc2M7CisgICAgaW50IGZsYWdzOworICAgIGludCAoKnRlc3QpKGJkX3QgKmJkLCBpbnQgZmxhZ3MpOworfTsKKworICBvKSBuYW1lCisKKyAgICAgVGhpcyBmaWVsZCB3aWxsIGNvbnRhaW4gYSBzaG9ydCBuYW1lIG9mIHRoZSB0ZXN0LCB3aGljaCB3aWxsIGJlCisgICAgIHVzZWQgaW4gbG9ncyBhbmQgb24gbGlzdGluZyBQT1NUIHRlc3RzIChlLmcuIENQVSB0ZXN0KS4KKworICBvKSBjbWQKKworICAgICBUaGlzIGZpZWxkIHdpbGwga2VlcCBhIG5hbWUgZm9yIGlkZW50aWZ5aW5nIHRoZSB0ZXN0IG9uIG1hbnVhbAorICAgICB0ZXN0aW5nIChlLmcuIGNwdSkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byBzZWN0aW9uCisgICAgICJDb21tYW5kIGxpbmUgaW50ZXJmYWNlIi4KKworICBvKSBkZXNjCisKKyAgICAgVGhpcyBmaWVsZCB3aWxsIGNvbnRhaW4gYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwKKyAgICAgd2hpY2ggd2lsbCBiZSBwcmludGVkIG9uIHVzZXIgcmVxdWVzdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICAgICBzZWN0aW9uICJDb21tYW5kIGxpbmUgaW50ZXJmYWNlIi4KKworICBvKSBmbGFncworCisgICAgIFRoaXMgZmllbGQgd2lsbCBjb250YWluIGEgY29tYmluYXRpb24gb2YgdGhlIGJpdCBmbGFncyBkZXNjcmliZWQKKyAgICAgYWJvdmUsIHdoaWNoIHdpbGwgc3BlY2lmeSB0aGUgbW9kZSB0aGUgdGVzdCBpcyBydW5uaW5nIGluCisgICAgIChwb3dlci1vbiwgbm9ybWFsLCBwb3dlci1mYWlsIG9yIG1hbnVhbCBtb2RlKSwgdGhlIG1vbWVudCBpdAorICAgICBzaG91bGQgYmUgcnVuIGF0IChiZWZvcmUgb3IgYWZ0ZXIgcmVsb2NhdGluZyB0byBSQU0pLCB3aGV0aGVyIGl0CisgICAgIGNhbiBjYXVzZSBzeXN0ZW0gcmVib290aW5nIG9yIG5vdC4KKworICBvKSB0ZXN0CisKKyAgICAgVGhpcyBmaWVsZCB3aWxsIGNvbnRhaW4gYSBwb2ludGVyIHRvIHRoZSByb3V0aW5lIHRoYXQgd2lsbAorICAgICBwZXJmb3JtIHRoZSB0ZXN0LCB3aGljaCB3aWxsIHRha2UgMiBhcmd1bWVudHMuIFRoZSBmaXJzdAorICAgICBhcmd1bWVudCB3aWxsIGJlIGEgcG9pbnRlciB0byB0aGUgYm9hcmQgaW5mbyBzdHJ1Y3R1cmUsIHdoaWxlCisgICAgIHRoZSBzZWNvbmQgd2lsbCBiZSBhIGNvbWJpbmF0aW9uIG9mIGJpdCBmbGFncyBzcGVjaWZ5aW5nIHRoZQorICAgICBtb2RlIHRoZSB0ZXN0IGlzIHJ1bm5pbmcgaW4gKFBPU1RfUE9XRVJPTiwgUE9TVF9OT1JNQUwsCisgICAgIFBPU1RfUE9XRVJGQUlMLCBQT1NUX01BTlVBTCkgYW5kIHdoZXRoZXIgdGhlIGxhc3QgZXhlY3V0aW9uIG9mCisgICAgIHRoZSB0ZXN0IGNhdXNlZCBzeXN0ZW0gcmVib290aW5nIChQT1NUX1JFQk9PVCkuIFRoZSByb3V0aW5lIHdpbGwKKyAgICAgcmV0dXJuIDAgb24gc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgdGhlIHRlc3QsIGFuZCAxIGlmIHRoZSB0ZXN0CisgICAgIGZhaWxlZC4KKworVGhlIGxpc3RzIG9mIHRoZSBQT1NUIHRlc3RzIHRoYXQgc2hvdWxkIGJlIHJ1biBhdCBwb3dlci1vbi9ub3JtYWwvCitwb3dlci1mYWlsIGJvb3Rpbmcgd2lsbCBiZSBrZXB0IGluIHRoZSBlbnZpcm9ubWVudC4gTmFtZWx5LCB0aGUKK2ZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBiZSB1c2VkOiBwb3N0X3Bvd2Vyb24sCitwb3dldF9ub3JtYWwsIHBvc3Rfc2h1dGRvd24uCisKKzIuMS4yLiBUZXN0IHJlc3VsdHMKKworVGhlIHJlc3VsdHMgb2YgdGVzdHMgd2lsbCBiZSBjb2xsZWN0ZWQgYnkgdGhlIFBPU1QgbGF5ZXIuIFRoZSBQT1NUCitsb2cgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTVEFSVCA8bmFtZT4KKzx0ZXN0LXNwZWNpZmljIG91dHB1dD4KK1tQQVNTRUR8RkFJTEVEXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy4uLgorCitCYXNpY2FsbHksIHRoZSByZXN1bHRzIG9mIHRlc3RzIHdpbGwgYmUgcHJpbnRlZCB0byBzdGRlcnIuIFRoaXMKK2ZlYXR1cmUgbWF5IGJlIGVuaGFuY2VkIGluIGZ1dHVyZSB0byBzcG9vbCB0aGUgbG9nIHRvIGEgc2VyaWFsIGxpbmUsCitzYXZlIGl0IGluIG5vbi12b2xhdGlsZSBSQU0gKE5WUkFNKSwgdHJhbnNmZXIgaXQgdG8gYSBkZWRpY2F0ZWQKK3N0b3JhZ2Ugc2VydmVyIGFuZCBldGMuCisKKzIuMS4zLiBJbnRlZ3JhdGlvbiBpc3N1ZXMKKworQWxsIFBPU1QtcmVsYXRlZCBjb2RlIHdpbGwgYmUgI2lmZGVmJ2VkIHdpdGggdGhlIENPTkZJR19QT1NUIG1hY3JvLgorVGhpcyBtYWNybyB3aWxsIGJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZ188Ym9hcmQ+LmggZmlsZSBmb3IgdGhvc2UKK2JvYXJkcyB0aGF0IG5lZWQgUE9TVC4gVGhlIENPTkZJR19QT1NUIG1hY3JvIHdpbGwgY29udGFpbiB0aGUgbGlzdCBvZgorUE9TVCB0ZXN0cyBmb3IgdGhlIGJvYXJkLiBUaGUgbWFjcm8gd2lsbCBoYXZlIHRoZSBmb3JtYXQgb2YgYXJyYXkKK2NvbXBvc2VkIG9mIHBvc3RfdGVzdCBzdHJ1Y3R1cmVzOgorCisjZGVmaW5lIENPTkZJR19QT1NUIFwKKwl7CisJCSJPbi1ib2FyZCBwZXJpcGhlcmFscyB0ZXN0IiwgImJvYXJkIiwgXAorCQkiICBUaGlzIHRlc3QgcGVyZm9ybXMgZnVsbCBjaGVjay11cCBvZiB0aGUgIiBcCisJCSJvbi1ib2FyZCBoYXJkd2FyZS4iLCBcCisJCVBPU1RfUkFNIHwgUE9TVF9QT1dFUkZBSUwsIFwKKwkJJmJvYXJkX3Bvc3RfdGVzdCBcCisJfQorCitBIG5ldyBmaWxlLCBwb3N0LmgsIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgaW5jbHVkZS8gZGlyZWN0b3J5LiBUaGlzCitmaWxlIHdpbGwgY29udGFpbiBjb21tb24gUE9TVCBkZWNsYXJhdGlvbnMgYW5kIHdpbGwgZGVmaW5lIGEgc2V0IG9mCittYWNyb3MgdGhhdCB3aWxsIGJlIHJldXNlZCBmb3IgZGVmaW5pbmcgQ09ORklHX1BPU1QuIEFzIGFuIGV4YW1wbGUsCit0aGUgZm9sbG93aW5nIG1hY3JvIG1heSBiZSBkZWZpbmVkOgorCisjZGVmaW5lIFBPU1RfQ0FDSEUgXAorCXsKKwkJIkNhY2hlIHRlc3QiLCAiY2FjaGUiLCBcCisJCSIgIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgQ1BVIGNhY2hlIG9wZXJhdGlvbi4iLCBcCisJCVBPU1RfUkFNIHwgUE9TVF9OT1JNQUwsIFwKKwkJJmNhY2hlX3Bvc3RfdGVzdCBcCisJfQorCitBIG5ldyBzdWJkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBVLUJvb3Qgcm9vdCBkaXJlY3RvcnkuIEl0Cit3aWxsIGNvbnRhaW4gdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBQT1NUIGxheWVyIGFuZCBtb3N0IG9mIFBPU1QKK3Rlc3RzLiBFYWNoIFBPU1QgdGVzdCBpbiB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIHBsYWNlZCBpbnRvIGEKK3NlcGFyYXRlIGZpbGUgKGl0IHdpbGwgYmUgbmVlZGVkIGZvciBidWlsZGluZyBzdGFuZGFsb25lIHRlc3RzKS4gU29tZQorUE9TVCB0ZXN0cyAobWFpbmx5IHRob3NlIGZvciB0ZXN0aW5nIHBlcmlwaGVyYWwgZGV2aWNlcykgd2lsbCBiZQorbG9jYXRlZCBpbiB0aGUgc291cmNlIGZpbGVzIG9mIHRoZSBkcml2ZXJzIGZvciB0aG9zZSBkZXZpY2VzLiBUaGlzCit3YXkgd2lsbCBiZSB1c2VkIG9ubHkgaWYgdGhlIHRlc3Qgc3VidGFudGlhbGx5IHVzZXMgdGhlIGRyaXZlci4KKworMi4xLjQuIFN0YW5kYWxvbmUgdGVzdHMKKworVGhlIFBPU1QgZnJhbWV3b3JrIHdpbGwgYWxsb3cgdG8gZGV2ZWxvcCBhbmQgcnVuIHN0YW5kYWxvbmUgdGVzdHMuIEEKK3VzZXItc3BhY2UgbGlicmFyeSB3aWxsIGJlIGRldmVsb3BlZCB0byBwcm92aWRlIHRoZSBQT1NUIGludGVyZmFjZQorZnVuY3Rpb25zIHRvIHN0YW5kYWxvbmUgdGVzdHMuCisKKzIuMS41LiBDb21tYW5kIGxpbmUgaW50ZXJmYWNlCisKK0EgbmV3IGNvbW1hbmQsIGRpYWcsIHdpbGwgYmUgYWRkZWQgdG8gVS1Cb290LiBUaGlzIGNvbW1hbmQgd2lsbCBiZQordXNlZCBmb3IgbGlzdGluZyBhbGwgYXZhaWxhYmxlIGhhcmR3YXJlIHRlc3RzLCBnZXR0aW5nIGRldGFpbGVkCitkZXNjcmlwdGlvbnMgb2YgdGhlbSBhbmQgcnVubmluZyB0aGVzZSB0ZXN0cy4KKworTW9yZSBzcGVjaWZpY2FsbHksIGJlaW5nIHJ1biB3aXRob3V0IGFueSBhcmd1bWVudHMsIHRoaXMgY29tbWFuZCB3aWxsCitwcmludCB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGhhcmR3YXJlIHRlc3RzOgorCis9PiBkaWFnCitBdmFpbGFibGUgaGFyZHdhcmUgdGVzdHM6CisgIGNhY2hlICAgICAgICAgICAgIC0gY2FjaGUgdGVzdAorICBjcHUgICAgICAgICAgICAgICAtIENQVSB0ZXN0CisgIGVuZXQgICAgICAgICAgICAgIC0gU0NDL0ZDQyBldGhlcm5ldCB0ZXN0CitVc2UgJ2RpYWcgWzx0ZXN0MT4gWzx0ZXN0Mj5dXSAuLi4gJyB0byBnZXQgbW9yZSBpbmZvLgorVXNlICdkaWFnIHJ1biBbPHRlc3QxPiBbPHRlc3QyPl1dIC4uLiAnIHRvIHJ1biB0ZXN0cy4KKz0+CisKK0lmIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZGlhZyBjb21tYW5kIGlzIG5vdCAncnVuJywgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRlc3RzIHdpbGwgYmUgcHJpbnRlZDoKKworPT4gZGlhZyBjcHUgY2FjaGUKK2NwdSAtIENQVSB0ZXN0CisgIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgYXJpdGhtZXRpYyBsb2dpYyB1bml0IG9mIENQVS4KK2NhY2hlIC0gY2FjaGUgdGVzdAorICBUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIENQVSBjYWNoZSBvcGVyYXRpb24uCis9PgorCitJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gZGlhZyBpcyAncnVuJywgdGhlIHNwZWNpZmllZCB0ZXN0cyB3aWxsIGJlCitleGVjdXRlZC4gSWYgbm8gdGVzdHMgYXJlIHNwZWNpZmllZCwgYWxsIGF2YWlsYWJsZSB0ZXN0cyB3aWxsIGJlCitleGVjdXRlZC4KKworSXQgd2lsbCBiZSBwcm9oaWJpdGVkIHRvIGV4ZWN1dGUgdGVzdHMgcnVubmluZyBpbiBST00gbWFudWFsbHkuIFRoZQorJ2RpYWcnIGNvbW1hbmQgd2lsbCBub3QgZGlzcGxheSBzdWNoIHRlc3RzIGFuZC9vciBydW4gdGhlbS4KKworMi4xLjYuIFBvd2VyIGZhaWx1cmUgaGFuZGxpbmcKKworVGhlIExpbnV4IGtlcm5lbCB3aWxsIGJlIG1vZGlmaWVkIHRvIGRldGVjdCBwb3dlciBmYWlsdXJlcyBhbmQKK2F1dG9tYXRpY2FsbHkgcmVib290IHRoZSBzeXN0ZW0gaW4gc3VjaCBjYXNlcy4gSXQgd2lsbCBiZSBhc3N1bWVkCit0aGF0IHRoZSBwb3dlciBmYWlsdXJlIGNhdXNlcyBhIHN5c3RlbSBpbnRlcnJ1cHQuCisKK1RvIHBlcmZvcm0gY29ycmVjdCBzeXN0ZW0gc2h1dGRvd24sIHRoZSBrZXJuZWwgd2lsbCByZWdpc3RlciBhCitoYW5kbGVyIG9mIHRoZSBwb3dlci1mYWlsIElSUSBvbiBib290aW5nLiBCZWluZyBjYWxsZWQsIHRoZSBoYW5kbGVyCit3aWxsIHJ1biAvc2Jpbi9yZWJvb3QgdXNpbmcgdGhlIGNhbGxfdXNlcm1vZGVoZWxwZXIoKSByb3V0aW5lLgorL3NiaW4vcmVib290IHdpbGwgYXV0b21hdGljYWxseSBicmluZyB0aGUgc3lzdGVtIGRvd24gaW4gYSBzZWN1cmUKK3dheS4gVGhpcyBmZWF0dXJlIHdpbGwgYmUgY29uZmlndXJlZCBpbi9vdXQgZnJvbSB0aGUga2VybmVsCitjb25maWd1cmF0aW9uIGZpbGUuCisKK1RoZSBQT1NUIGxheWVyIG9mIFUtQm9vdCB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBydW5zIGluCitwb3dlci1mYWlsIG1vZGUuIElmIGl0IGRvZXMsIHRoZSBzeXN0ZW0gd2lsbCBiZSBwb3dlcmVkIG9mZiBhZnRlcgorZXhlY3V0aW5nIGFsbCBoYXJkd2FyZSB0ZXN0cy4KKworMi4xLjcuIEhhemFyZG91cyB0ZXN0cworCitTb21lIHRlc3RzIG1heSBjYXVzZSBzeXN0ZW0gcmVib290aW5nIGR1cmluZyB0aGVpciBleGVjdXRpb24uIEZvcgorc29tZSB0ZXN0cywgdGhpcyB3aWxsIGluZGljYXRlIGEgZmFpbHVyZSwgd2hpbGUgZm9yIHRoZSBXYXRjaGRvZwordGVzdCwgdGhpcyBtZWFucyBzdWNjZXNzZnVsIG9wZXJhdGlvbiBvZiB0aGUgdGltZXIuCisKK0luIG9yZGVyIHRvIHN1cHBvcnQgc3VjaCB0ZXN0cywgdGhlIGZvbGxvd2luZyBzY2hlbWUgd2lsbCBiZQoraW1wbGVtZW50ZWQuIEFsbCB0aGUgdGVzdHMgdGhhdCBtYXkgY2F1c2Ugc3lzdGVtIHJlYm9vdGluZyB3aWxsIGhhdmUKK3RoZSBQT1NUX1JFQk9PVCBiaXQgZmxhZyBzZXQgaW4gdGhlIGZsYWcgZmllbGQgb2YgdGhlIGNvcnJlc3BvbmRlbnQKK3Bvc3RfdGVzdCBzdHJ1Y3R1cmUuIEJlZm9yZSBzdGFydGluZyB0ZXN0cyBtYXJrZWQgd2l0aCB0aGlzIGJpdCBmbGFnLAordGhlIFBPU1QgbGF5ZXIgd2lsbCBzdG9yZSBhbiBpZGVudGlmaWNhdGlvbiBudW1iZXIgb2YgdGhlIHRlc3QgaW4gYQorbG9jYXRpb24gaW4gSU1NUi4gT24gYm9vdGluZywgdGhlIFBPU1QgbGF5ZXIgd2lsbCBjaGVjayB0aGUgdmFsdWUgb2YKK3RoaXMgdmFyaWFibGUgYW5kIGlmIGl0IGlzIHNldCB3aWxsIHNraXAgb3ZlciB0aGUgdGVzdHMgcHJlY2VkaW5nIHRoZQorZmFpbGVkIG9uZS4gT24gc2Vjb25kIGV4ZWN1dGlvbiBvZiB0aGUgZmFpbGVkIHRlc3QsIHRoZSBQT1NUX1JFQk9PVAorYml0IGZsYWcgd2lsbCBiZSBzZXQgaW4gdGhlIGZsYWcgYXJndW1lbnQgdG8gdGhlIHRlc3Qgcm91dGluZS4gVGhpcword2lsbCBhbGxvdyB0byBkZXRlY3Qgc3lzdGVtIHJlYm9vdGluZyBvbiB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLiBGb3IKK2V4YW1wbGUsIHRoZSB3YXRjaGRvZyB0aW1lciB0ZXN0IG1heSBoYXZlIHRoZSBmb2xsb3dpbmcKK2RlY2xhcmF0aW9uL2JvZHk6CisKKy4uLgorI2RlZmluZSBQT1NUX1dBVENIRE9HIFwKKwl7CisJCSJXYXRjaGRvZyB0aW1lciB0ZXN0IiwgIndhdGNoZG9nIiwgXAorCQkiICBUaGlzIHRlc3QgY2hlY2tzIHRoZSB3YXRjaGRvZyB0aW1lci4iLCBcCisJCVBPU1RfUkFNIHwgUE9TVF9QT1dFUk9OIHwgUE9TVF9SRUJPT1QsIFwKKwkJJndhdGNoZG9nX3Bvc3RfdGVzdCBcCisJfQorLi4uCisKKy4uLgoraW50IHdhdGNoZG9nX3Bvc3RfdGVzdChiZF90ICpiZCwgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKKworCWlmIChmbGFncyAmIFBPU1RfUkVCT09UKSB7CisJCS8qIFRlc3QgcGFzc2VkICovCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQlkaXNhYmxlX2ludGVycnVwdHMoKTsKKwkJLyogMTAtc2Vjb25kIGRlbGF5ICovCisJCS4uLgorCQkvKiBpZiB3ZSd2ZSByZWFjaGVkIHRoaXMsIHRoZSB3YXRjaGRvZyB0aW1lciBkb2VzIG5vdCB3b3JrICovCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCXJldHVybiAxOworCX0KK30KKy4uLgorCisyLjIuIEhhcmR3YXJlLXNwZWNpZmljIGRldGFpbHMKKworVGhpcyBwcm9qZWN0IHdpbGwgYWxzbyBkZXZlbG9wIGEgc2V0IG9mIFBPU1QgdGVzdHMgZm9yIE1QQzh4eC0gYmFzZWQKK3N5c3RlbXMuIFRoaXMgc2VjdGlvbiBwcm92aWRlcyB0ZWNobmljYWwgZGV0YWlscyBvZiBob3cgaXQgd2lsbCBiZQorZG9uZS4KKworMi4yLjEuIEdlbmVyaWMgUFBDIHRlc3RzCisKK1RoZSBmb2xsb3dpbmcgZ2VuZXJpYyBQT1NUIHRlc3RzIHdpbGwgYmUgZGV2ZWxvcGVkOgorCisgIG8pIENQVSB0ZXN0CisKKyAgICAgVGhpcyB0ZXN0IHdpbGwgY2hlY2sgdGhlIGFyaXRobWV0aWMgbG9naWMgdW5pdCAoQUxVKSBvZiBDUFUuIFRoZQorICAgICB0ZXN0IHdpbGwgdGFrZSBzZXZlcmFsIG1pbGxpc2Vjb25kcyBhbmQgd2lsbCBydW4gb24gbm9ybWFsCisgICAgIGJvb3RpbmcuCisKKyAgbykgQ2FjaGUgdGVzdAorCisgICAgIFRoaXMgdGVzdCB3aWxsIHZlcmlmeSB0aGUgQ1BVIGNhY2hlIChMMSBjYWNoZSkuIFRoZSB0ZXN0IHdpbGwKKyAgICAgcnVuIG9uIG5vcm1hbCBib290aW5nLgorCisgIG8pIE1lbW9yeSB0ZXN0CisKKyAgICAgVGhpcyB0ZXN0IHdpbGwgZXhhbWluZSBSQU0gYW5kIGNoZWNrIGl0IGZvciBlcnJvcnMuIFRoZSB0ZXN0CisgICAgIHdpbGwgYWx3YXlzIHJ1biBvbiBib290aW5nLiBPbiBub3JtYWwgYm9vdGluZywgb25seSBhIGxpbWl0ZWQKKyAgICAgYW1vdW50IG9mIFJBTSB3aWxsIGJlIGNoZWNrZWQuIE9uIHBvd2VyLWZhaWwgYm9vdGluZyBhIGZvb2wKKyAgICAgbWVtb3J5IGNoZWNrLXVwIHdpbGwgYmUgcGVyZm9ybWVkLgorCisyLjIuMS4xLiBDUFUgdGVzdAorCitUaGlzIHRlc3Qgd2lsbCB2ZXJpZnkgdGhlIGZvbGxvd2luZyBBTFUgaW5zdHJ1Y3Rpb25zOgorCisgIG8pIENvbmRpdGlvbiByZWdpc3RlciBpc3RydWN0aW9ucworCisgICAgIFRoaXMgZ3JvdXAgd2lsbCBjb250YWluOiBtdGNyZiwgbWZjciwgbWNyeHIsIGNyYW5kLCBjcmFuZGMsCisgICAgIGNyb3IsIGNyb3JjLCBjcnhvciwgY3JuYW5kLCBjcm5vciwgY3JlcXYsIG1jcmYuCisKKyAgICAgVGhlIG10Y3JmL21mY3IgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgdGVzdGVkIGJ5IGxvYWRpbmcgZGlmZmVyZW50CisgICAgIHZhbHVlcyBpbnRvIHRoZSBjb25kaXRpb24gcmVnaXN0ZXIgKG10Y3JmKSwgbW92aW5nIGl0cyB2YWx1ZSB0bworICAgICBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciAobWZjcikgYW5kIGNvbXBhcmluZyB0aGlzIHZhbHVlIHdpdGgKKyAgICAgdGhlIGV4cGVjdGVkIG9uZS4gVGhlIG1jcnhyIGluc3RydWN0aW9uIHdpbGwgYmUgdGVzdGVkIGJ5CisgICAgIGxvYWRpbmcgYSBmaXhlZCB2YWx1ZSBpbnRvIHRoZSBYRVIgcmVnaXN0ZXIgKG10c3ByKSwgbW92aW5nIFhFUgorICAgICB2YWx1ZSB0byB0aGUgY29uZGl0aW9uIHJlZ2lzdGVyIChtY3J4ciksIG1vdmluZyBpdCB0byBhCisgICAgIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciAobWZjcikgYW5kIGNvbXBhcmluZyB0aGUgdmFsdWUgb2YgdGhpcworICAgICByZWdpc3RlciB3aXRoIHRoZSBleHBlY3RlZCBvbmUuIFRoZSByZXN0IG9mIGluc3RydWN0aW9ucyB3aWxsIGJlCisgICAgIHRlc3RlZCBieSBsb2FkaW5nIGEgZml4ZWQgdmFsdWUgaW50byB0aGUgY29uZGl0aW9uIHJlZ2lzdGVyCisgICAgIChtdGNyZiksIGV4ZWN1dGluZyBlYWNoIGluc3RydWN0aW9uIHNldmVyYWwgdGltZXMgdG8gbW9kaWZ5IGFsbAorICAgICA0LWJpdCBjb25kaXRpb24gZmllbGRzLCBtb3ZpbmcgdGhlIHZhbHVlIG9mIHRoZSBjb25kaXRpb25hbAorICAgICByZWdpc3RlciB0byBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciAobWZjcikgYW5kIGNvbXBhcmluZyBpdAorICAgICB3aXRoIHRoZSBleHBlY3RlZCBvbmUuCisKKyAgbykgSW50ZWdlciBjb21wYXJlIGluc3RydWN0aW9ucworCisgICAgIFRoaXMgZ3JvdXAgd2lsbCBjb250YWluOiBjbXAsIGNtcGksIGNtcGwsIGNtcGxpLgorCisgICAgIFRvIHZlcmlmeSB0aGVzZSBpbnN0cnVjdGlvbnMgdGhlIHRlc3Qgd2lsbCBydW4gdGhlbSB3aXRoCisgICAgIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2Ygb3BlcmFuZHMsIHJlYWQgdGhlIGNvbmRpdGlvbiByZWdpc3RlcgorICAgICB2YWx1ZSBhbmQgY29tcGFyZSBpdCB3aXRoIHRoZSBleHBlY3RlZCBvbmUuIE1vcmUgc3BlY2lmaWNhbGx5LAorICAgICB0aGUgdGVzdCB3aWxsIGNvbnRhaW4gYSBwcmUtYnVpbHQgdGFibGUgY29udGFpbmluZyB0aGUKKyAgICAgZGVzY3JpcHRpb24gb2YgZWFjaCB0ZXN0IGNhc2U6IHRoZSBpbnN0cnVjdGlvbiwgdGhlIHZhbHVlcyBvZgorICAgICB0aGUgb3BlcmFuZHMsIHRoZSBjb25kaXRpb24gZmllbGQgdG8gc2F2ZSB0aGUgcmVzdWx0IGluIGFuZCB0aGUKKyAgICAgZXhwZWN0ZWQgcmVzdWx0LgorCisgIG8pIEFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zCisKKyAgICAgVGhpcyBncm91cCB3aWxsIGNvbnRhaW46IGFkZCwgYWRkYywgYWRkZSwgYWRkbWUsIGFkZHplLCBzdWJmLAorICAgICBzdWJmYywgc3ViZmUsIHN1Ym1lLCBzdWJ6ZSwgbXVsbHcsIG11bGh3LCBtdWxod3UsIGRpdncsIGRpdnd1LAorICAgICBleHRzYiwgZXh0c2guCisKKyAgICAgVGhlIHRlc3Qgd2lsbCBjb250YWluIGEgcHJlLWJ1aWx0IHRhYmxlIG9mIGluc3RydWN0aW9ucywKKyAgICAgb3BlcmFuZHMsIGV4cGVjdGVkIHJlc3VsdHMgYW5kIGV4cGVjdGVkIHN0YXRlcyBvZiB0aGUgY29uZGl0aW9uCisgICAgIHJlZ2lzdGVyLiBGb3IgZWFjaCB0YWJsZSBlbnRyeSwgdGhlIHRlc3Qgd2lsbCBjeWNsaWNhbGx5IHVzZQorICAgICBkaWZmZXJlbnQgc2V0cyBvZiBvcGVyYW5kIHJlZ2lzdGVycyBhbmQgcmVzdWx0IHJlZ2lzdGVycy4gRm9yCisgICAgIGV4YW1wbGUsIGZvciBpbnN0cnVjdGlvbnMgdGhhdCB1c2UgMyByZWdpc3RlcnMgb24gdGhlIGZpcnN0CisgICAgIGl0ZXJhdGlvbiByMC9yMSB3aWxsIGJlIHVzZWQgYXMgb3BlcmFuZHMgYW5kIHIyIGZvciByZXN1bHQuIE9uCisgICAgIHRoZSBzZWNvbmQgaXRlcmF0aW9uLCByMS9yMiB3aWxsIGJlIHVzZWQgYXMgb3BlcmFuZHMgYW5kIHIzIGFzCisgICAgIGZvciByZXN1bHQgYW5kIHNvIG9uLiBUaGlzIHdpbGwgZW5hYmxlIHRvIHZlcmlmeSBhbGwKKyAgICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4KKworICBvKSBMb2dpYyBpbnN0cnVjdGlvbnMKKworICAgICBUaGlzIGdyb3VwIHdpbGwgY29udGFpbjogYW5kLCBhbmRjLCBhbmRpLCBhbmRpcywgb3IsIG9yYywgb3JpLAorICAgICBvcmlzLCB4b3IsIHhvcmksIHhvcmlzLCBuYW5kLCBub3IsIG5lZywgZXF2LCBjbnRsencuCisKKyAgICAgVGhlIHRlc3Qgc2NoZW1lIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoYXQgZnJvbSB0aGUgcHJldmlvdXMKKyAgICAgcG9pbnQuCisKKyAgbykgU2hpZnQgaW5zdHJ1Y3Rpb25zCisKKyAgICAgVGhpcyBncm91cCB3aWxsIGNvbnRhaW46IHNsdywgc3J3LCBzcmF3LCBzcmF3aSwgcmx3aW5tLCBybHdubSwKKyAgICAgcmx3aW1pCisKKyAgICAgVGhlIHRlc3Qgc2NoZW1lIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoYXQgZnJvbSB0aGUgcHJldmlvdXMKKyAgICAgcG9pbnQuCisKKyAgbykgQnJhbmNoIGluc3RydWN0aW9ucworCisgICAgIFRoaXMgZ3JvdXAgd2lsbCBjb250YWluOiBiLCBibCwgYmMuCisKKyAgICAgVGhlIGZpcnN0IDIgaW5zdHJ1Y3Rpb25zIChiLCBibCkgd2lsbCBiZSB2ZXJpZmllZCBieSBqdW1waW5nIHRvCisgICAgIGEgZml4ZWQgYWRkcmVzcyBhbmQgY2hlY2tpbmcgd2hldGhlciBjb250cm9sIHdhcyB0cmFuc2ZlcmVkIHRvCisgICAgIHRoYXQgdmVyeSBwb2ludC4gRm9yIHRoZSBibCBpbnN0cnVjdGlvbiB0aGUgdmFsdWUgb2YgdGhlIGxpbmsKKyAgICAgcmVnaXN0ZXIgd2lsbCBiZSBjaGVja2VkIGFzIHdlbGwgKHVzaW5nIG1mc3ByKS4gVG8gdmVyaWZ5IHRoZSBiYworICAgICBpbnN0cnVjdGlvbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiB0aGUgQkkvQk8gZmllbGRzLCB0aGUgQ1RSCisgICAgIGFuZCB0aGUgY29uZGl0aW9uIHJlZ2lzdGVyIHZhbHVlcyB3aWxsIGJlIGNoZWNrZWQuIFRoZSBsaXN0IG9mCisgICAgIHN1Y2ggY29tYmluYXRpb25zIHdpbGwgYmUgcHJlLWJ1aWx0IGFuZCBsaW5rZWQgaW4gVS1Cb290IGF0CisgICAgIGJ1aWxkIHRpbWUuCisKKyAgbykgTG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMKKworICAgICBUaGlzIGdyb3VwIHdpbGwgY29udGFpbjogbGJ6KHgpKHUpLCBsaHooeCkodSksIGxoYSh4KSh1KSwKKyAgICAgbHd6KHgpKHUpLCBzdGIoeCkodSksIHN0aCh4KSh1KSwgc3R3KHgpKHUpLgorCisgICAgIEFsbCBvcGVyYXRpb25zIHdpbGwgYmUgcGVyZm9ybWVkIG9uIGEgMTYtYnl0ZSBhcnJheS4gVGhlIGFycmF5CisgICAgIHdpbGwgYmUgNC1ieXRlIGFsaWduZWQuIFRoZSBiYXNlIHJlZ2lzdGVyIHdpbGwgcG9pbnQgdG8gb2Zmc2V0CisgICAgIDguIFRoZSBpbW1lZGlhdGUgb2Zmc2V0IChpbmRleCByZWdpc3Rlcikgd2lsbCByYW5nZSBpbiBbLTggLi4uCisgICAgICs3XS4gVGhlIHRlc3QgY2FzZXMgd2lsbCBiZSBjb21wb3NlZCBzbyB0aGF0IHRoZXkgd2lsbCBub3QgY2F1c2UKKyAgICAgYWxpZ25tZW50IGV4Y2VwdGlvbnMuIFRoZSB0ZXN0IHdpbGwgY29udGFpbiBhIHByZS1idWlsdCB0YWJsZQorICAgICBkZXNjcmliaW5nIGFsbCB0ZXN0IGNhc2VzLiBGb3Igc3RvcmUgaW5zdHJ1Y3Rpb25zLCB0aGUgdGFibGUKKyAgICAgZW50cnkgd2lsbCBjb250YWluOiB0aGUgaW5zdHJ1Y3Rpb24gb3Bjb2RlLCB0aGUgdmFsdWUgb2YgdGhlCisgICAgIGluZGV4IHJlZ2lzdGVyIGFuZCB0aGUgdmFsdWUgb2YgdGhlIHNvdXJjZSByZWdpc3Rlci4gQWZ0ZXIKKyAgICAgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlvbiwgdGhlIHRlc3Qgd2lsbCB2ZXJpZnkgdGhlIGNvbnRlbnRzIG9mCisgICAgIHRoZSBhcnJheSBhbmQgdGhlIHZhbHVlIG9mIHRoZSBiYXNlIHJlZ2lzdGVyIChpdCBtdXN0IGNoYW5nZSBmb3IKKyAgICAgInN0b3JlIHdpdGggdXBkYXRlIiBpbnN0cnVjdGlvbnMpLiBGb3IgbG9hZCBpbnN0cnVjdGlvbnMsIHRoZQorICAgICB0YWJsZSBlbnRyeSB3aWxsIGNvbnRhaW46IHRoZSBpbnN0cnVjdGlvbiBvcGNvZGUsIHRoZSBhcnJheQorICAgICBjb250ZW50cywgdGhlIHZhbHVlIG9mIHRoZSBpbmRleCByZWdpc3RlciBhbmQgdGhlIGV4cGVjdGVkIHZhbHVlCisgICAgIG9mIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4gQWZ0ZXIgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlvbiwKKyAgICAgdGhlIHRlc3Qgd2lsbCB2ZXJpZnkgdGhlIHZhbHVlIG9mIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBhbmQKKyAgICAgdGhlIHZhbHVlIG9mIHRoZSBiYXNlIHJlZ2lzdGVyIChpdCBtdXN0IGNoYW5nZSBmb3IgImxvYWQgd2l0aAorICAgICB1cGRhdGUiIGluc3RydWN0aW9ucykuCisKKyAgbykgTG9hZC9zdG9yZSBtdWx0aXBsZS9zdHJpbmcgaW5zdHJ1Y3Rpb25zCisKKworVGhlIENQVSB0ZXN0IHdpbGwgcnVuIGluIFJBTSBpbiBvcmRlciB0byBhbGxvdyBydW4tdGltZSBtb2RpZmljYXRpb24KK29mIHRoZSBjb2RlIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludC4KKworMi4yLjEuMiBTcGVjaWFsLVB1cnBvc2UgUmVnaXN0ZXJzIFRlc3RzCisKK1RCRC4KKworMi4yLjEuMy4gQ2FjaGUgdGVzdAorCitUbyB2ZXJpZnkgdGhlIGRhdGEgY2FjaGUgb3BlcmF0aW9uIHRoZSBmb2xsb3dpbmcgdGVzdCBzY2VuYXJpb3Mgd2lsbAorYmUgdXNlZDoKKworICAxKSBCYXNpYyB0ZXN0ICMxCisKKyAgICAtIHR1cm4gb24gdGhlIGRhdGEgY2FjaGUKKyAgICAtIHN3aXRjaCB0aGUgZGF0YSBjYWNoZSB0byB3cml0ZS1iYWNrIG9yIHdyaXRlLXRocm91Z2ggbW9kZQorICAgIC0gaW52YWxpZGF0ZSB0aGUgZGF0YSBjYWNoZQorICAgIC0gd3JpdGUgdGhlIG5lZ2F0aXZlIHBhdHRlcm4gdG8gYSBjYWNoZWQgYXJlYQorICAgIC0gcmVhZCB0aGUgYXJlYQorCisgICAgVGhlIG5lZ2F0aXZlIHBhdHRlcm4gbXVzdCBiZSByZWFkIGF0IHRoZSBsYXN0IHN0ZXAKKworICAyKSBCYXNpYyB0ZXN0ICMyCisKKyAgICAtIHR1cm4gb24gdGhlIGRhdGEgY2FjaGUKKyAgICAtIHN3aXRjaCB0aGUgZGF0YSBjYWNoZSB0byB3cml0ZS1iYWNrIG9yIHdyaXRlLXRocm91Z2ggbW9kZQorICAgIC0gaW52YWxpZGF0ZSB0aGUgZGF0YSBjYWNoZQorICAgIC0gd3JpdGUgdGhlIHplcm8gcGF0dGVybiB0byBhIGNhY2hlZCBhcmVhCisgICAgLSB0dXJuIG9mZiB0aGUgZGF0YSBjYWNoZQorICAgIC0gd3JpdGUgdGhlIG5lZ2F0aXZlIHBhdHRlcm4gdG8gdGhlIGFyZWEKKyAgICAtIHR1cm4gb24gdGhlIGRhdGEgY2FjaGUKKyAgICAtIHJlYWQgdGhlIGFyZWEKKworICAgIFRoZSBuZWdhdGl2ZSBwYXR0ZXJuIG11c3QgYmUgcmVhZCBhdCB0aGUgbGFzdCBzdGVwCisKKyAgMykgV3JpdGUtdGhyb3VnaCBtb2RlIHRlc3QKKworICAgIC0gdHVybiBvbiB0aGUgZGF0YSBjYWNoZQorICAgIC0gc3dpdGNoIHRoZSBkYXRhIGNhY2hlIHRvIHdyaXRlLXRocm91Z2ggbW9kZQorICAgIC0gaW52YWxpZGF0ZSB0aGUgZGF0YSBjYWNoZQorICAgIC0gd3JpdGUgdGhlIHplcm8gcGF0dGVybiB0byBhIGNhY2hlZCBhcmVhCisgICAgLSBmbHVzaCB0aGUgZGF0YSBjYWNoZQorICAgIC0gd3JpdGUgdGhlIG5lZ2F0aXZlIHBhdHRlcm4gdG8gdGhlIGFyZWEKKyAgICAtIHR1cm4gb2ZmIHRoZSBkYXRhIGNhY2hlCisgICAgLSByZWFkIHRoZSBhcmVhCisKKyAgICBUaGUgbmVnYXRpdmUgcGF0dGVybiBtdXN0IGJlIHJlYWQgYXQgdGhlIGxhc3Qgc3RlcAorCisgIDQpIFdyaXRlLWJhY2sgbW9kZSB0ZXN0CisKKyAgICAtIHR1cm4gb24gdGhlIGRhdGEgY2FjaGUKKyAgICAtIHN3aXRjaCB0aGUgZGF0YSBjYWNoZSB0byB3cml0ZS1iYWNrIG1vZGUKKyAgICAtIGludmFsaWRhdGUgdGhlIGRhdGEgY2FjaGUKKyAgICAtIHdyaXRlIHRoZSBuZWdhdGl2ZSBwYXR0ZXJuIHRvIGEgY2FjaGVkIGFyZWEKKyAgICAtIGZsdXNoIHRoZSBkYXRhIGNhY2hlCisgICAgLSB3cml0ZSB0aGUgemVybyBwYXR0ZXJuIHRvIHRoZSBhcmVhCisgICAgLSBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlCisgICAgLSByZWFkIHRoZSBhcmVhCisKKyAgICBUaGUgbmVnYXRpdmUgcGF0dGVybiBtdXN0IGJlIHJlYWQgYXQgdGhlIGxhc3Qgc3RlcAorCitUbyB2ZXJpZnkgdGhlIGluc3RydWN0aW9uIGNhY2hlIG9wZXJhdGlvbiB0aGUgZm9sbG93aW5nIHRlc3QKK3NjZW5hcmlvcyB3aWxsIGJlIHVzZWQ6CisKKyAgMSkgQmFzaWMgdGVzdCAjMQorCisgICAgLSB0dXJuIG9uIHRoZSBpbnN0cnVjdGlvbiBjYWNoZQorICAgIC0gdW5sb2NrIHRoZSBlbnRpcmUgaW5zdHJ1Y3Rpb24gY2FjaGUKKyAgICAtIGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9uIGNhY2hlCisgICAgLSBsb2NrIGEgYnJhbmNoIGluc3RydWN0aW9uIGluIHRoZSBpbnN0cnVjdGlvbiBjYWNoZQorICAgIC0gcmVwbGFjZSB0aGUgYnJhbmNoIGluc3RydWN0aW9uIHdpdGggIm5vcCIKKyAgICAtIGp1bXAgdG8gdGhlIGJyYW5jaCBpbnN0cnVjdGlvbgorICAgIC0gY2hlY2sgdGhhdCB0aGUgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBleGVjdXRlZAorCisgIDIpIEJhc2ljIHRlc3QgIzIKKworICAgIC0gdHVybiBvbiB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUKKyAgICAtIHVubG9jayB0aGUgZW50aXJlIGluc3RydWN0aW9uIGNhY2hlCisgICAgLSBpbnZhbGlkYXRlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZQorICAgIC0ganVtcCB0byBhIGJyYW5jaCBpbnN0cnVjdGlvbgorICAgIC0gY2hlY2sgdGhhdCB0aGUgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBleGVjdXRlZAorICAgIC0gcmVwbGFjZSB0aGUgYnJhbmNoIGluc3RydWN0aW9uIHdpdGggIm5vcCIKKyAgICAtIGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9uIGNhY2hlCisgICAgLSBqdW1wIHRvIHRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24KKyAgICAtIGNoZWNrIHRoYXQgdGhlICJub3AiIGluc3RydWN0aW9uIHdhcyBleGVjdXRlZAorCitUaGUgQ1BVIHRlc3Qgd2lsbCBydW4gaW4gUkFNIGluIG9yZGVyIHRvIGFsbG93IHJ1bi10aW1lIG1vZGlmaWNhdGlvbgorb2YgdGhlIGNvZGUuCisKKzIuMi4xLjQuIE1lbW9yeSB0ZXN0CisKK1RoZSBtZW1vcnkgdGVzdCB3aWxsIHZlcmlmeSBSQU0gdXNpbmcgc2VxdWVudGlhbCB3cml0ZXMgYW5kIHJlYWRzCit0by9mcm9tIFJBTS4gU3BlY2lmaWNhbGx5LCB0aGVyZSB3aWxsIGJlIHNldmVyYWwgdGVzdCBjYXNlcyB0aGF0IHdpbGwKK3VzZSBkaWZmZXJlbnQgcGF0dGVybnMgdG8gdmVyaWZ5IFJBTS4gRWFjaCB0ZXN0IGNhc2Ugd2lsbCBmaXJzdCBmaWxsCithIHJlZ2lvbiBvZiBSQU0gd2l0aCBvbmUgcGF0dGVybiBhbmQgdGhlbiByZWFkIHRoZSByZWdpb24gYmFjayBhbmQKK2NvbXBhcmUgaXRzIGNvbnRlbnRzIHdpdGggdGhlIHBhdHRlcm4uIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgd2lsbCBiZQordXNlZDoKKworIDEpIHplcm8gcGF0dGVybiAoMHgwMDAwMDAwMCkKKyAyKSBuZWdhdGl2ZSBwYXR0ZXJuICgweGZmZmZmZmZmKQorIDMpIGNoZWNrZXJib2FyZCBwYXR0ZXJuICgweDU1NTU1NTU1LCAweGFhYWFhYWFhKQorIDQpIGJpdC1mbGlwIHBhdHRlcm4gKCgxIDw8IChvZmZzZXQgJSAzMikpLCB+KDEgPDwgKG9mZnNldCAlIDMyKSkpCisgNSkgYWRkcmVzcyBwYXR0ZXJuIChvZmZzZXQsIH5vZmZzZXQpCisKK1BhdHRlcm5zICMxLCAjMiB3aWxsIGhlbHAgdG8gZmluZCB1bnN0YWJsZSBiaXRzLiBQYXR0ZXJucyAjMywgIzQgd2lsbAorYmUgdXNlZCB0byBkZXRlY3QgYWRoZXJlbnQgYml0cywgaS5lLiBiaXRzIHdob3NlIHN0YXRlIG1heSByYW5kb21seQorY2hhbmdlIGlmIGFkamFjZW50IGJpdHMgYXJlIG1vZGlmaWVkLiBUaGUgbGFzdCBwYXR0ZXJuIHdpbGwgYmUgdXNlZAordG8gZGV0ZWN0IGZhci1sb2NhdGVkIGVycm9ycywgaS5lLiBzaXR1YXRpb25zIHdoZW4gd3JpdGluZyB0byBvbmUKK2xvY2F0aW9uIG1vZGlmaWVzIGFuIGFyZWEgbG9jYXRlZCBmYXIgZnJvbSBpdC4gQWxzbywgdXNhZ2Ugb2YgdGhlCitsYXN0IHBhdHRlcm4gd2lsbCBoZWxwIHRvIGRldGVjdCBtZW1vcnkgY29udHJvbGxlciBtaXNjb25maWd1cmF0aW9ucword2hlbiBSQU0gcmVwcmVzZW50cyBhIGN5Y2xpY2FsbHkgcmVwZWF0ZWQgcG9ydGlvbiBvZiBhIHNtYWxsZXIgc2l6ZS4KKworQmVpbmcgcnVuIGluIG5vcm1hbCBtb2RlLCB0aGUgdGVzdCB3aWxsIHZlcmlmeSBvbmx5IHNtYWxsIDRLYiByZWdpb25zCitvZiBSQU0gYXJvdW5kIGVhY2ggMU1iIGJvdW5kYXJ5LiBGb3IgZXhhbXBsZSwgZm9yIDY0TWIgUkFNIHRoZQorZm9sbG93aW5nIGFyZWFzIHdpbGwgYmUgdmVyaWZpZWQ6IDB4MDAwMDAwMDAtMHgwMDAwMDgwMCwKKzB4MDAwZmY4MDAtMHgwMDEwMDgwMCwgMHgwMDFmZjgwMC0weDAwMjAwODAwLCAuLi4sIDB4MDNmZmY4MDAtCisweDA0MDAwMDAwLiBJZiB0aGUgdGVzdCBpcyBydW4gaW4gcG93ZXItZmFpbCBtb2RlLCBpdCB3aWxsIHZlcmlmeSB0aGUKK3dob2xlIFJBTS4KKworVGhlIG1lbW9yeSB0ZXN0IHdpbGwgcnVuIGluIFJPTSBiZWZvcmUgcmVsb2NhdGluZyBVLUJvb3QgdG8gUkFNIGluCitvcmRlciB0byBhbGxvdyBSQU0gbW9kaWZpY2F0aW9uIHdpdGhvdXQgc2F2aW5nIGl0cyBjb250ZW50cy4KKworMi4yLjIuIENvbW1vbiB0ZXN0cworCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRlc3RzIHRoYXQgYXJlIG5vdCBiYXNlZCBvbiBhbnkgaGFyZHdhcmUKK3BlY3VsaWFyaXRpZXMgYW5kIHVzZSBjb21tb24gVS1Cb290IGludGVyZmFjZXMgb25seS4gVGhlc2UgdGVzdHMgZG8KK25vdCBuZWVkIGFueSBtb2RpZmljYXRpb25zIGZvciBwb3J0aW5nIHRoZW0gdG8gYW5vdGhlciBib2FyZC9DUFUuCisKKzIuMi4yLjEuIEkyQyB0ZXN0CisKK0ZvciB2ZXJpZnlpbmcgdGhlIEkyQyBidXMsIGEgZnVsbCBJMkMgYnVzIHNjYW5uaW5nIHdpbGwgYmUgcGVyZm9ybWVkCit1c2luZyB0aGUgaTJjX3Byb2JlKCkgcm91dGluZS4gSWYgYW55IEkyQyBkZXZpY2UgaXMgZm91bmQsIHRoZSB0ZXN0Cit3aWxsIGJlIGNvbnNpZGVyZWQgYXMgcGFzc2VkLCBvdGhlcndpc2UgZmFpbGVkLiBUaGlzIHBhcnRpY3VsYXIgd2F5Cit3aWxsIGJlIHVzZWQgYmVjYXVzZSBpdCBwcm92aWRlcyB0aGUgbW9zdCBjb21tb24gbWV0aG9kIG9mIHRlc3RpbmcuCitGb3IgZXhhbXBsZSwgdXNpbmcgdGhlIGludGVybmFsIGxvb3BiYWNrIG1vZGUgb2YgdGhlIENQTSBJMkMKK2NvbnRyb2xsZXIgZm9yIHRlc3Rpbmcgd291bGQgbm90IHdvcmsgb24gYm9hcmRzIHdoZXJlIHRoZSBzb2Z0d2FyZQorSTJDIGRyaXZlciAoYWxzbyBrbm93biBhcyBiaXQtYmFuZ2VkIGRyaXZlcikgaXMgdXNlZC4KKworMi4yLjIuMi4gV2F0Y2hkb2cgdGltZXIgdGVzdAorCitUbyB0ZXN0IHRoZSB3YXRjaGRvZyB0aW1lciB0aGUgc2NoZW1lIG1lbnRpb25lZCBhYm92ZSAocmVmZXIgdG8KK3NlY3Rpb24gIkhhemFyZG91cyB0ZXN0cyIpIHdpbGwgYmUgdXNlZC4gTmFtZWx5LCB0aGlzIHRlc3Qgd2lsbCBiZQorbWFya2VkIHdpdGggdGhlIFBPU1RfUkVCT09UIGJpdCBmbGFnLiBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCB0aGUKK3Rlc3Qgcm91dGluZSB3aWxsIG1ha2UgYSAxMC1zZWNvbmQgZGVsYXkuIElmIHRoZSBzeXN0ZW0gZG9lcyBub3QKK3JlYm9vdCBkdXJpbmcgdGhpcyBkZWxheSwgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIG5vdCBvcGVyYXRpb25hbCBhbmQKK3RoZSB0ZXN0IGZhaWxzLiBJZiB0aGUgc3lzdGVtIHJlYm9vdHMsIG9uIHRoZSBzZWNvbmQgaXRlcmF0aW9uIHRoZQorUE9TVF9SRUJPT1QgYml0IHdpbGwgYmUgc2V0IGluIHRoZSBmbGFnIGFyZ3VtZW50IHRvIHRoZSB0ZXN0IHJvdXRpbmUuCitUaGUgdGVzdCByb3V0aW5lIHdpbGwgY2hlY2sgdGhpcyBiaXQgYW5kIHJlcG9ydCBhIHN1Y2Nlc3MgaWYgaXQgaXMKK3NldC4KKworMi4yLjIuMy4gUlRDIHRlc3QKKworVGhlIFJUQyB0ZXN0IHdpbGwgdXNlIHRoZSBydGNfZ2V0KCkvcnRjX3NldCgpIHJvdXRpbmVzLiBUaGUgZm9sbG93aW5nCitmZWF0dXJlcyB3aWxsIGJlIHZlcmlmaWVkOgorCisgIG8pIFRpbWUgdW5pZm9ybWl0eQorCisgICAgIFRoaXMgd2lsbCBiZSB2ZXJpZmllZCBieSByZWFkaW5nIFJUQyBpbiBwb2xsaW5nIHdpdGhpbiBhIHNob3J0CisgICAgIHBlcmlvZCBvZiB0aW1lICg1LTEwIHNlY29uZHMpLgorCisgIG8pIFBhc3NpbmcgbW9udGggYm91bmRhcmllcworCisgICAgIFRoaXMgd2lsbCBiZSBjaGVja2VkIGJ5IHNldHRpbmcgUlRDIHRvIGEgc2Vjb25kIGJlZm9yZSBhIG1vbnRoCisgICAgIGJvdW5kYXJ5IGFuZCByZWFkaW5nIGl0IGFmdGVyIGl0cyBwYXNzaW5nIHRoZSBib3VuZGFyeS4gVGhlIHRlc3QKKyAgICAgd2lsbCBiZSBwZXJmb3JtZWQgZm9yIGJvdGggbGVhcC0gYW5kIG5vbmxlYXAteWVhcnMuCisKKzIuMi4zLiBNUEM4eHggcGVyaXBoZXJhbHMgdGVzdHMKKworVGhpcyBwcm9qZWN0IHdpbGwgZGV2ZWxvcCBhIHNldCBvZiB0ZXN0cyB2ZXJpZnlpbmcgdGhlIHBlcmlwaGVyYWwKK3VuaXRzIG9mIE1QQzh4eCBwcm9jZXNzb3JzLiBOYW1lbHksIHRoZSBmb2xsb3dpbmcgY29udHJvbGxlcnMgb2YgdGhlCitNUEM4eHggY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgbW9kdWxlIChDUE0pIHdpbGwgYmUgdGVzdGVkOgorCisgIG8pIFNlcmlhbCBNYW5hZ2VtZW50IENvbnRyb2xsZXJzIChTTUMpCisKKyAgbykgU2VyaWFsIENvbW11bmljYXRpb24gQ29udHJvbGxlcnMgKFNDQykKKworMi4yLjMuMS4gRXRoZXJuZXQgdGVzdHMgKFNDQykKKworVGhlIGludGVybmFsIChsb2NhbCkgbG9vcGJhY2sgbW9kZSB3aWxsIGJlIHVzZWQgdG8gdGVzdCBTQ0MuIFRvIGRvCit0aGF0IHRoZSBjb250cm9sbGVycyB3aWxsIGJlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nbHkgYW5kIHNldmVyYWwKK3BhY2tldHMgd2lsbCBiZSB0cmFuc21pdHRlZC4gVGhlc2UgdGVzdHMgbWF5IGJlIGVuaGFuY2VkIGluIGZ1dHVyZSB0bwordXNlIGV4dGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiBUaGF0IHdpbGwgbmVlZCBhcHByb3ByaWF0ZQorcmVjb25maWd1cmF0aW9uIG9mIHRoZSBwaHlzaWNhbCBpbnRlcmZhY2UgY2hpcC4KKworVGhlIHRlc3Qgcm91dGluZXMgZm9yIHRoZSBTQ0MgZXRoZXJuZXQgdGVzdHMgd2lsbCBiZSBsb2NhdGVkIGluCitjcHUvbXBjOHh4L3NjYy5jLgorCisyLjIuMy4yLiBVQVJUIHRlc3RzIChTTUMvU0NDKQorCitUbyBwZXJmb3JtIHRoZXNlIHRlc3RzIHRoZSBpbnRlcm5hbCAobG9jYWwpIGxvb3BiYWNrIG1vZGUgd2lsbCBiZQordXNlZC4gVGhlIFNNQy9TQ0MgY29udHJvbGxlcnMgd2lsbCBiZSBjb25maWd1cmVkIHRvIGNvbm5lY3QgdGhlCit0cmFuc21pdHRlciBvdXRwdXQgdG8gdGhlIHJlY2VpdmVyIGlucHV0LiBBZnRlciB0aGF0LCBzZXZlcmFsIGJ5dGVzCit3aWxsIGJlIHRyYW5zbWl0dGVkLiBUaGVzZSB0ZXN0cyBtYXkgYmUgZW5oYW5jZWQgdG8gbWFrZSB0byBwZXJmb3JtCisiZXh0ZXJuYWwiIGxvb3BiYWNrIHRlc3QgdXNpbmcgYSBsb29wYmFjayBjYWJsZS4gSW4gdGhpcyBjYXNlLCB0aGUKK3Rlc3Qgd2lsbCBiZSBleGVjdXRlZCBtYW51YWxseS4KKworVGhlIHRlc3Qgcm91dGluZSBmb3IgdGhlIFNNQy9TQ0MgVUFSVCB0ZXN0cyB3aWxsIGJlIGxvY2F0ZWQgaW4KK2NwdS9tcGM4eHgvc2VyaWFsLmMuCisKKzIuMi4zLjMuIFVTQiB0ZXN0CisKK1RCRAorCisyLjIuMy40LiBTUEkgdGVzdAorCitUQkQKKworMi4zLiBEZXNpZ24gbm90ZXMKKworQ3VycmVudGx5IGl0IGlzIHVua25vd24gaG93IHdlIHdpbGwgcG93ZXIgb2ZmIHRoZSBib2FyZCBhZnRlciBydW5uaW5nCithbGwgcG93ZXItZmFpbCBQT1NUIHRlc3RzLiBUaGlzIHBvaW50IG5lZWRzIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKaW5kZXggMjk3NWZhMy4uZGRhMjQ2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKQEAgLTEwLDYgKzEwLDggQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZm5kZWYgUFhBX1JFR1NfSAorI2RlZmluZSBQWEFfUkVHU19IIDEKIAogLyogRklYTUUgaGFjayBzbyB0aGF0IFNBLTExMTEuaCB3aWxsIHdvcmsgW2NiXSAqLwogCkBAIC00MjUsNiArNDI3LDM4IEBACiAjZGVmaW5lIElTUgkJX19SRUcoMHg0MDMwMTY5OCkgIC8qIEkyQyBTdGF0dXMgUmVnaXN0ZXIgLSBJU1IgKi8KICNkZWZpbmUgSVNBUgkJX19SRUcoMHg0MDMwMTZBMCkgIC8qIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyIC0gSVNBUiAqLwogCisvKiAtLS0tLSBDb250cm9sIHJlZ2lzdGVyIGJpdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIElDUl9TVEFSVAkweDEJCS8qIHN0YXJ0IGJpdCAqLworI2RlZmluZSBJQ1JfU1RPUAkweDIJCS8qIHN0b3AgYml0ICovCisjZGVmaW5lIElDUl9BQ0tOQUsJMHg0CQkvKiBzZW5kIEFDSygwKSBvciBOQUsoMSkgKi8KKyNkZWZpbmUgSUNSX1RCCQkweDggCQkvKiB0cmFuc2ZlciBieXRlIGJpdCAqLworI2RlZmluZSBJQ1JfTUEJCTB4MTAJCS8qIG1hc3RlciBhYm9ydCAqLworI2RlZmluZSBJQ1JfU0NMRQkweDIwCQkvKiBtYXN0ZXIgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIElDUl9JVUUJCTB4NDAJCS8qIHVuaXQgZW5hYmxlICovCisjZGVmaW5lIElDUl9HQ0QJCTB4ODAJCS8qIGdlbmVyYWwgY2FsbCBkaXNhYmxlICovCisjZGVmaW5lIElDUl9JVEVJRQkweDEwMAkJLyogZW5hYmxlIHR4IGludGVycnVwdHMgKi8KKyNkZWZpbmUgSUNSX0lSRklFCTB4MjAwCQkvKiBlbmFibGUgcnggaW50ZXJydXB0cyAqLworI2RlZmluZSBJQ1JfQkVJRQkweDQwMAkJLyogZW5hYmxlIGJ1cyBlcnJvciBpbnRzICovCisjZGVmaW5lIElDUl9TU0RJRQkweDgwMAkJLyogc2xhdmUgU1RPUCBkZXRlY3RlZCBpbnQgZW5hYmxlICovCisjZGVmaW5lIElDUl9BTERJRQkweDEwMDAgIAkvKiBlbmFibGUgYXJiaXRyYXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lIElDUl9TQURJRQkweDIwMDAJCS8qIHNsYXZlIGFkZHJlc3MgZGV0ZWN0ZWQgaW50IGVuYWJsZSAqLworI2RlZmluZSBJQ1JfVVIJCTB4NDAwMAkJLyogdW5pdCByZXNldCAqLworCisvKiAtLS0tLSBTdGF0dXMgcmVnaXN0ZXIgYml0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIElTUl9SV00gICAgICAgICAweDEJCS8qIHJlYWQvd3JpdGUgbW9kZSAqLworI2RlZmluZSBJU1JfQUNLTkFLICAgICAgMHgyCQkvKiBhY2svbmFrIHN0YXR1cyAqLworI2RlZmluZSBJU1JfVUIgICAgICAgICAgMHg0CQkvKiB1bml0IGJ1c3kgKi8KKyNkZWZpbmUgSVNSX0lCQiAgICAgICAgIDB4OAkJLyogYnVzIGJ1c3kgKi8KKyNkZWZpbmUgSVNSX1NTRCAgICAgICAgIDB4MTAJCS8qIHNsYXZlIHN0b3AgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSVNSX0FMRCAgICAgICAgIDB4MjAJCS8qIGFyYml0cmF0aW9uIGxvc3MgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSVNSX0lURSAgICAgICAgIDB4NDAgICAgICAgICAgICAvKiB0eCBidWZmZXIgZW1wdHkgKi8KKyNkZWZpbmUgSVNSX0lSRiAgICAgICAgIDB4ODAgICAgICAgICAgICAvKiByeCBidWZmZXIgZnVsbCAqLworI2RlZmluZSBJU1JfR0NBRCAgICAgICAgMHgxMDAJCS8qIGdlbmVyYWwgY2FsbCBhZGRyZXNzIGRldGVjdGVkICovCisjZGVmaW5lIElTUl9TQUQgICAgICAgICAweDIwMAkJLyogc2xhdmUgYWRkcmVzcyBkZXRlY3RlZCAqLworI2RlZmluZSBJU1JfQkVEICAgICAgICAgMHg0MDAgICAgICAgICAgIC8qIGJ1cyBlcnJvciBubyBBQ0svTkFLICovCisKIAogLyoKICAqIFNlcmlhbCBBdWRpbyBDb250cm9sbGVyCkBAIC0xMTI4LDYgKzExNjIsNiBAQAogI2RlZmluZSBNQ0lPMV9PRkZTRVQgICAgMHgzQwogI2RlZmluZSBNRE1SU19PRkZTRVQgICAgMHg0MAogCi0KKyNlbmRpZiAvKiBQWEFfUkVHU19IICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gteHNjYWxlL3B4YS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC14c2NhbGUvcHhhLXJlZ3MuaAppbmRleCAyOTc1ZmEzLi40NDllYzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC14c2NhbGUvcHhhLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC14c2NhbGUvcHhhLXJlZ3MuaApAQCAtMSwxNSArMSwyMyBAQAogLyoKICAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAotICoKKyAqICAKICAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKICAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKICAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKKyAqICAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogLSAyMDAzLzAxLzIwOiBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGUKKyAqICAgT3JpZ2luYWwgZmlsZSB0YWtlbiBmcm9tIGxpbnV4LTIuNC4xOS1ybWs0LXB4YTEuIEFkZGVkIHNvbWUgZGVmaW5pdGlvbnMuCisgKiAgIEFkZGVkIGluY2x1ZGUgZm9yIGhhcmR3YXJlLmggKGZvciBfX1JFRyBkZWZpbml0aW9uKQogICovCisjaWZuZGVmIF9QWEFfUkVHU19IXworI2RlZmluZSBfUFhBX1JFR1NfSF8KIAorI2luY2x1ZGUgImJpdGZpZWxkLmgiCisjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIAogLyogRklYTUUgaGFjayBzbyB0aGF0IFNBLTExMTEuaCB3aWxsIHdvcmsgW2NiXSAqLwogCkBAIC0yMiwxMyArMzAsNiBAQAogdHlwZWRlZiB2b2lkICAgICAgICAgICAgKCpFeGNwSG5kbHIpICh2b2lkKSA7CiAjZW5kaWYKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNkZWZpbmUgaW9fcDJ2KFBoQWRkKSAgICAoUGhBZGQpCi0jZGVmaW5lIF9fUkVHKHgpICgqKCh2b2xhdGlsZSB1MzIgKilpb19wMnYoeCkpKQotI2Vsc2UKLSNkZWZpbmUgX19SRUcoeCkgKHgpCi0jZW5kaWYKLQogLyoKICAqIFBYQSBDaGlwIHNlbGVjdHMKICAqLwpAQCAtMzY5LDcgKzM3MCw3IEBACiAjZGVmaW5lIExTUl9PRQkJKDEgPDwgMSkJLyogT3ZlcnJ1biBFcnJvciAqLwogI2RlZmluZSBMU1JfRFIJCSgxIDw8IDApCS8qIERhdGEgUmVhZHkgKi8KIAotI2RlZmluZSBNQ1JfTE9PUAkoMSA8PCA0KQkqLworI2RlZmluZSBNQ1JfTE9PUAkoMSA8PCA0KQkqLyAKICNkZWZpbmUgTUNSX09VVDIJKDEgPDwgMykJLyogZm9yY2UgTVNSX0RDRCBpbiBsb29wYmFjayBtb2RlICovCiAjZGVmaW5lIE1DUl9PVVQxCSgxIDw8IDIpCS8qIGZvcmNlIE1TUl9SSSBpbiBsb29wYmFjayBtb2RlICovCiAjZGVmaW5lIE1DUl9SVFMJCSgxIDw8IDEpCS8qIFJlcXVlc3QgdG8gU2VuZCAqLwpAQCAtNDE0LDcgKzQxNSw2IEBACiAgICAgICAgICAgICAgICAgSXJTUl9SQ1ZFSVJfVUFSVF9NT0RFIHwgXAogICAgICAgICAgICAgICAgIElyU1JfWE1JVElSX0lSX01PREUpCiAKLQogLyoKICAqIEkyQyByZWdpc3RlcnMKICAqLwpAQCAtNDI1LDYgKzQyNSwzOCBAQAogI2RlZmluZSBJU1IJCV9fUkVHKDB4NDAzMDE2OTgpICAvKiBJMkMgU3RhdHVzIFJlZ2lzdGVyIC0gSVNSICovCiAjZGVmaW5lIElTQVIJCV9fUkVHKDB4NDAzMDE2QTApICAvKiBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlciAtIElTQVIgKi8KIAorLyogLS0tLS0gQ29udHJvbCByZWdpc3RlciBiaXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBJQ1JfU1RBUlQJMHgxCQkvKiBzdGFydCBiaXQgKi8KKyNkZWZpbmUgSUNSX1NUT1AJMHgyCQkvKiBzdG9wIGJpdCAqLworI2RlZmluZSBJQ1JfQUNLTkFLCTB4NAkJLyogc2VuZCBBQ0soMCkgb3IgTkFLKDEpICovCisjZGVmaW5lIElDUl9UQgkJMHg4IAkJLyogdHJhbnNmZXIgYnl0ZSBiaXQgKi8KKyNkZWZpbmUgSUNSX01BCQkweDEwCQkvKiBtYXN0ZXIgYWJvcnQgKi8KKyNkZWZpbmUgSUNSX1NDTEUJMHgyMAkJLyogbWFzdGVyIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBJQ1JfSVVFCQkweDQwCQkvKiB1bml0IGVuYWJsZSAqLworI2RlZmluZSBJQ1JfR0NECQkweDgwCQkvKiBnZW5lcmFsIGNhbGwgZGlzYWJsZSAqLworI2RlZmluZSBJQ1JfSVRFSUUJMHgxMDAJCS8qIGVuYWJsZSB0eCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElDUl9JUkZJRQkweDIwMAkJLyogZW5hYmxlIHJ4IGludGVycnVwdHMgKi8KKyNkZWZpbmUgSUNSX0JFSUUJMHg0MDAJCS8qIGVuYWJsZSBidXMgZXJyb3IgaW50cyAqLworI2RlZmluZSBJQ1JfU1NESUUJMHg4MDAJCS8qIHNsYXZlIFNUT1AgZGV0ZWN0ZWQgaW50IGVuYWJsZSAqLworI2RlZmluZSBJQ1JfQUxESUUJMHgxMDAwICAJLyogZW5hYmxlIGFyYml0cmF0aW9uIGludGVycnVwdCAqLworI2RlZmluZSBJQ1JfU0FESUUJMHgyMDAwCQkvKiBzbGF2ZSBhZGRyZXNzIGRldGVjdGVkIGludCBlbmFibGUgKi8KKyNkZWZpbmUgSUNSX1VSCQkweDQwMDAJCS8qIHVuaXQgcmVzZXQgKi8KKyNkZWZpbmUgSUNSX0ZNCQkweDgwMDAJCS8qIEZhc3QgTW9kZSAqLworCisvKiAtLS0tLSBTdGF0dXMgcmVnaXN0ZXIgYml0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIElTUl9SV00gICAgICAgICAweDEJCS8qIHJlYWQvd3JpdGUgbW9kZSAqLworI2RlZmluZSBJU1JfQUNLTkFLICAgICAgMHgyCQkvKiBhY2svbmFrIHN0YXR1cyAqLworI2RlZmluZSBJU1JfVUIgICAgICAgICAgMHg0CQkvKiB1bml0IGJ1c3kgKi8KKyNkZWZpbmUgSVNSX0lCQiAgICAgICAgIDB4OAkJLyogYnVzIGJ1c3kgKi8JCisjZGVmaW5lIElTUl9TU0QgICAgICAgICAweDEwCQkvKiBzbGF2ZSBzdG9wIGRldGVjdGVkICovCisjZGVmaW5lIElTUl9BTEQgICAgICAgICAweDIwCQkvKiBhcmJpdHJhdGlvbiBsb3NzIGRldGVjdGVkICovCisjZGVmaW5lIElTUl9JVEUgICAgICAgICAweDQwICAgICAgICAgICAgLyogdHggYnVmZmVyIGVtcHR5ICovCisjZGVmaW5lIElTUl9JUkYgICAgICAgICAweDgwICAgICAgICAgICAgLyogcnggYnVmZmVyIGZ1bGwgKi8KKyNkZWZpbmUgSVNSX0dDQUQgICAgICAgIDB4MTAwCQkvKiBnZW5lcmFsIGNhbGwgYWRkcmVzcyBkZXRlY3RlZCAqLworI2RlZmluZSBJU1JfU0FEICAgICAgICAgMHgyMDAJCS8qIHNsYXZlIGFkZHJlc3MgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSVNSX0JFRCAgICAgICAgIDB4NDAwICAgICAgICAgICAvKiBidXMgZXJyb3Igbm8gQUNLL05BSyAqLwogCiAvKgogICogU2VyaWFsIEF1ZGlvIENvbnRyb2xsZXIKQEAgLTUyNCwyNCArNTU2LDkyIEBACiAvKgogICogVVNCIERldmljZSBDb250cm9sbGVyCiAgKi8KKyNkZWZpbmUgVURDX1JFUzEJX19SRUcoMHg0MDYwMDAwNCkgIC8qIFVEQyBVbmRvY3VtZW50ZWQgLSBSZXNlcnZlZDEgKi8KKyNkZWZpbmUgVURDX1JFUzIJX19SRUcoMHg0MDYwMDAwOCkgIC8qIFVEQyBVbmRvY3VtZW50ZWQgLSBSZXNlcnZlZDIgKi8KKyNkZWZpbmUgVURDX1JFUzMJX19SRUcoMHg0MDYwMDAwQykgIC8qIFVEQyBVbmRvY3VtZW50ZWQgLSBSZXNlcnZlZDMgKi8KIAogI2RlZmluZSBVRENDUgkJX19SRUcoMHg0MDYwMDAwMCkgIC8qIFVEQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NSX1VERQkoMSA8PCAwKQkvKiBVREMgZW5hYmxlICovCisjZGVmaW5lIFVEQ0NSX1VEQQkoMSA8PCAxKQkvKiBVREMgYWN0aXZlICovCisjZGVmaW5lIFVEQ0NSX1JTTQkoMSA8PCAyKQkvKiBEZXZpY2UgcmVzdW1lICovCisjZGVmaW5lIFVEQ0NSX1JFU0lSCSgxIDw8IDMpCS8qIFJlc3VtZSBpbnRlcnJ1cHQgcmVxdWVzdCAqLworI2RlZmluZSBVRENDUl9TVVNJUgkoMSA8PCA0KQkvKiBTdXNwZW5kIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVEQ0NSX1NSTQkoMSA8PCA1KQkvKiBTdXNwZW5kL3Jlc3VtZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVRENDUl9SU1RJUgkoMSA8PCA2KQkvKiBSZXNldCBpbnRlcnJ1cHQgcmVxdWVzdCAqLworI2RlZmluZSBVRENDUl9SRU0JKDEgPDwgNykJLyogUmVzZXQgaW50ZXJydXB0IG1hc2sgKi8KKwogI2RlZmluZSBVRENDUzAJCV9fUkVHKDB4NDA2MDAwMTApICAvKiBVREMgRW5kcG9pbnQgMCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVRENDUzBfT1BSCSgxIDw8IDApCS8qIE9VVCBwYWNrZXQgcmVhZHkgKi8KKyNkZWZpbmUgVURDQ1MwX0lQUgkoMSA8PCAxKQkvKiBJTiBwYWNrZXQgcmVhZHkgKi8KKyNkZWZpbmUgVURDQ1MwX0ZURgkoMSA8PCAyKQkvKiBGbHVzaCBUeCBGSUZPICovCisjZGVmaW5lIFVEQ0NTMF9EUldGCSgxIDw8IDMpCS8qIERldmljZSByZW1vdGUgd2FrZXVwIGZlYXR1cmUgKi8KKyNkZWZpbmUgVURDQ1MwX1NTVAkoMSA8PCA0KQkvKiBTZW50IHN0YWxsICovCisjZGVmaW5lIFVEQ0NTMF9GU1QJKDEgPDwgNSkJLyogRm9yY2Ugc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1MwX1JORQkoMSA8PCA2KQkvKiBSZWNlaXZlIEZJRk8gbm8gZW1wdHkgKi8KKyNkZWZpbmUgVURDQ1MwX1NBCSgxIDw8IDcpCS8qIFNldHVwIGFjdGl2ZSAqLworCisvKiBCdWxrIElOIC0gRW5kcG9pbnQgMSw2LDExICovCiAjZGVmaW5lIFVEQ0NTMQkJX19SRUcoMHg0MDYwMDAxNCkgIC8qIFVEQyBFbmRwb2ludCAxIChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVURDQ1MyCQlfX1JFRygweDQwNjAwMDE4KSAgLyogVURDIEVuZHBvaW50IDIgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVURDQ1MzCQlfX1JFRygweDQwNjAwMDFDKSAgLyogVURDIEVuZHBvaW50IDMgKElOKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBVRENDUzQJCV9fUkVHKDB4NDA2MDAwMjApICAvKiBVREMgRW5kcG9pbnQgNCAoT1VUKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBVRENDUzUJCV9fUkVHKDB4NDA2MDAwMjQpICAvKiBVREMgRW5kcG9pbnQgNSAoSW50ZXJydXB0KSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBVRENDUzYJCV9fUkVHKDB4NDA2MDAwMjgpICAvKiBVREMgRW5kcG9pbnQgNiAoSU4pIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVEQ0NTNwkJX19SRUcoMHg0MDYwMDAyQykgIC8qIFVEQyBFbmRwb2ludCA3IChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVEQ0NTOAkJX19SRUcoMHg0MDYwMDAzMCkgIC8qIFVEQyBFbmRwb2ludCA4IChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVURDQ1M5CQlfX1JFRygweDQwNjAwMDM0KSAgLyogVURDIEVuZHBvaW50IDkgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVURDQ1MxMAkJX19SRUcoMHg0MDYwMDAzOCkgIC8qIFVEQyBFbmRwb2ludCAxMCAoSW50ZXJydXB0KSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBVRENDUzExCQlfX1JFRygweDQwNjAwMDNDKSAgLyogVURDIEVuZHBvaW50IDExIChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVRENDU19CSV9URlMJKDEgPDwgMCkJLyogVHJhbnNtaXQgRklGTyBzZXJ2aWNlICovCisjZGVmaW5lIFVEQ0NTX0JJX1RQQwkoMSA8PCAxKQkvKiBUcmFuc21pdCBwYWNrZXQgY29tcGxldGUgKi8KKyNkZWZpbmUgVURDQ1NfQklfRlRGCSgxIDw8IDIpCS8qIEZsdXNoIFR4IEZJRk8gKi8KKyNkZWZpbmUgVURDQ1NfQklfVFVSCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgVURDQ1NfQklfU1NUCSgxIDw8IDQpCS8qIFNlbnQgc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfQklfRlNUCSgxIDw8IDUpCS8qIEZvcmNlIHN0YWxsICovCisjZGVmaW5lIFVEQ0NTX0JJX1RTUAkoMSA8PCA3KQkvKiBUcmFuc21pdCBzaG9ydCBwYWNrZXQgKi8KKworLyogQnVsayBPVVQgLSBFbmRwb2ludCAyLDcsMTIgKi8KKyNkZWZpbmUgVURDQ1MyCQlfX1JFRygweDQwNjAwMDE4KSAgLyogVURDIEVuZHBvaW50IDIgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ1M3CQlfX1JFRygweDQwNjAwMDJDKSAgLyogVURDIEVuZHBvaW50IDcgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVURDQ1MxMgkJX19SRUcoMHg0MDYwMDA0MCkgIC8qIFVEQyBFbmRwb2ludCAxMiAoT1VUKSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lIFVEQ0NTX0JPX1JGUwkoMSA8PCAwKQkvKiBSZWNlaXZlIEZJRk8gc2VydmljZSAqLworI2RlZmluZSBVRENDU19CT19SUEMJKDEgPDwgMSkJLyogUmVjZWl2ZSBwYWNrZXQgY29tcGxldGUgKi8KKyNkZWZpbmUgVURDQ1NfQk9fRE1FCSgxIDw8IDMpCS8qIERNQSBlbmFibGUgKi8KKyNkZWZpbmUgVURDQ1NfQk9fU1NUCSgxIDw8IDQpCS8qIFNlbnQgc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfQk9fRlNUCSgxIDw8IDUpCS8qIEZvcmNlIHN0YWxsICovCisjZGVmaW5lIFVEQ0NTX0JPX1JORQkoMSA8PCA2KQkvKiBSZWNlaXZlIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lIFVEQ0NTX0JPX1JTUAkoMSA8PCA3KQkvKiBSZWNlaXZlIHNob3J0IHBhY2tldCAqLworCisvKiBJc29jaHJvbm91cyBJTiAtIEVuZHBvaW50IDMsOCwxMyAqLworI2RlZmluZSBVRENDUzMJCV9fUkVHKDB4NDA2MDAwMUMpICAvKiBVREMgRW5kcG9pbnQgMyAoSU4pIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTOAkJX19SRUcoMHg0MDYwMDAzMCkgIC8qIFVEQyBFbmRwb2ludCA4IChJTikgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVURDQ1MxMwkJX19SRUcoMHg0MDYwMDA0NCkgIC8qIFVEQyBFbmRwb2ludCAxMyAoSU4pIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgVURDQ1NfSUlfVEZTCSgxIDw8IDApCS8qIFRyYW5zbWl0IEZJRk8gc2VydmljZSAqLworI2RlZmluZSBVRENDU19JSV9UUEMJKDEgPDwgMSkJLyogVHJhbnNtaXQgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0lJX0ZURgkoMSA8PCAyKQkvKiBGbHVzaCBUeCBGSUZPICovCisjZGVmaW5lIFVEQ0NTX0lJX1RVUgkoMSA8PCAzKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuICovCisjZGVmaW5lIFVEQ0NTX0lJX1RTUAkoMSA8PCA3KQkvKiBUcmFuc21pdCBzaG9ydCBwYWNrZXQgKi8KKworLyogSXNvY2hyb25vdXMgT1VUIC0gRW5kcG9pbnQgNCw5LDE0ICovCisjZGVmaW5lIFVEQ0NTNAkJX19SRUcoMHg0MDYwMDAyMCkgIC8qIFVEQyBFbmRwb2ludCA0IChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTOQkJX19SRUcoMHg0MDYwMDAzNCkgIC8qIFVEQyBFbmRwb2ludCA5IChPVVQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFVEQ0NTMTQJCV9fUkVHKDB4NDA2MDAwNDgpICAvKiBVREMgRW5kcG9pbnQgMTQgKE9VVCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBVRENDU19JT19SRlMJKDEgPDwgMCkJLyogUmVjZWl2ZSBGSUZPIHNlcnZpY2UgKi8KKyNkZWZpbmUgVURDQ1NfSU9fUlBDCSgxIDw8IDEpCS8qIFJlY2VpdmUgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0lPX1JPRgkoMSA8PCAzKQkvKiBSZWNlaXZlIG92ZXJmbG93ICovCisjZGVmaW5lIFVEQ0NTX0lPX0RNRQkoMSA8PCAzKQkvKiBETUEgZW5hYmxlICovCisjZGVmaW5lIFVEQ0NTX0lPX1JORQkoMSA8PCA2KQkvKiBSZWNlaXZlIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lIFVEQ0NTX0lPX1JTUAkoMSA8PCA3KQkvKiBSZWNlaXZlIHNob3J0IHBhY2tldCAqLworCisvKiBJbnRlcnJ1cHQgSU4gLSBFbmRwb2ludCA1LDEwLDE1ICovCisjZGVmaW5lIFVEQ0NTNQkJX19SRUcoMHg0MDYwMDAyNCkgIC8qIFVEQyBFbmRwb2ludCA1IChJbnRlcnJ1cHQpIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVEQ0NTMTAJCV9fUkVHKDB4NDA2MDAwMzgpICAvKiBVREMgRW5kcG9pbnQgMTAgKEludGVycnVwdCkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVURDQ1MxNQkJX19SRUcoMHg0MDYwMDA0QykgIC8qIFVEQyBFbmRwb2ludCAxNSAoSW50ZXJydXB0KSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworCisjZGVmaW5lIFVEQ0NTX0lOVF9URlMJKDEgPDwgMCkJLyogVHJhbnNtaXQgRklGTyBzZXJ2aWNlICovCisjZGVmaW5lIFVEQ0NTX0lOVF9UUEMJKDEgPDwgMSkJLyogVHJhbnNtaXQgcGFja2V0IGNvbXBsZXRlICovCisjZGVmaW5lIFVEQ0NTX0lOVF9GVEYJKDEgPDwgMikJLyogRmx1c2ggVHggRklGTyAqLworI2RlZmluZSBVRENDU19JTlRfVFVSCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgVURDQ1NfSU5UX1NTVAkoMSA8PCA0KQkvKiBTZW50IHN0YWxsICovCisjZGVmaW5lIFVEQ0NTX0lOVF9GU1QJKDEgPDwgNSkJLyogRm9yY2Ugc3RhbGwgKi8KKyNkZWZpbmUgVURDQ1NfSU5UX1RTUAkoMSA8PCA3KQkvKiBUcmFuc21pdCBzaG9ydCBwYWNrZXQgKi8KKwogI2RlZmluZSBVRk5SSAkJX19SRUcoMHg0MDYwMDA2MCkgIC8qIFVEQyBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgSGlnaCAqLwogI2RlZmluZSBVRk5STAkJX19SRUcoMHg0MDYwMDA2NCkgIC8qIFVEQyBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgTG93ICovCiAjZGVmaW5lIFVCQ1IyCQlfX1JFRygweDQwNjAwMDY4KSAgLyogVURDIEJ5dGUgQ291bnQgUmVnIDIgKi8KQEAgLTU2NiwxMSArNjY2LDUxIEBACiAjZGVmaW5lIFVERFIxMwkJX19SRUcoMHg0MDYwMEMwMCkgIC8qIFVEQyBFbmRwb2ludCAxMyBEYXRhIFJlZ2lzdGVyICovCiAjZGVmaW5lIFVERFIxNAkJX19SRUcoMHg0MDYwMEUwMCkgIC8qIFVEQyBFbmRwb2ludCAxNCBEYXRhIFJlZ2lzdGVyICovCiAjZGVmaW5lIFVERFIxNQkJX19SRUcoMHg0MDYwMDBFMCkgIC8qIFVEQyBFbmRwb2ludCAxNSBEYXRhIFJlZ2lzdGVyICovCisKICNkZWZpbmUgVUlDUjAJCV9fUkVHKDB4NDA2MDAwNTApICAvKiBVREMgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgMCAqLworCisjZGVmaW5lIFVJQ1IwX0lNMAkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAwICovCisjZGVmaW5lIFVJQ1IwX0lNMQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxICovCisjZGVmaW5lIFVJQ1IwX0lNMgkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAyICovCisjZGVmaW5lIFVJQ1IwX0lNMwkoMSA8PCAzKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAzICovCisjZGVmaW5lIFVJQ1IwX0lNNAkoMSA8PCA0KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA0ICovCisjZGVmaW5lIFVJQ1IwX0lNNQkoMSA8PCA1KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA1ICovCisjZGVmaW5lIFVJQ1IwX0lNNgkoMSA8PCA2KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA2ICovCisjZGVmaW5lIFVJQ1IwX0lNNwkoMSA8PCA3KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA3ICovCisKICNkZWZpbmUgVUlDUjEJCV9fUkVHKDB4NDA2MDAwNTQpICAvKiBVREMgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgMSAqLworCisjZGVmaW5lIFVJQ1IxX0lNOAkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA4ICovCisjZGVmaW5lIFVJQ1IxX0lNOQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCA5ICovCisjZGVmaW5lIFVJQ1IxX0lNMTAJKDEgPDwgMikJLyogSW50ZXJydXB0IG1hc2sgZXAgMTAgKi8KKyNkZWZpbmUgVUlDUjFfSU0xMQkoMSA8PCAzKQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxMSAqLworI2RlZmluZSBVSUNSMV9JTTEyCSgxIDw8IDQpCS8qIEludGVycnVwdCBtYXNrIGVwIDEyICovCisjZGVmaW5lIFVJQ1IxX0lNMTMJKDEgPDwgNSkJLyogSW50ZXJydXB0IG1hc2sgZXAgMTMgKi8KKyNkZWZpbmUgVUlDUjFfSU0xNAkoMSA8PCA2KQkvKiBJbnRlcnJ1cHQgbWFzayBlcCAxNCAqLworI2RlZmluZSBVSUNSMV9JTTE1CSgxIDw8IDcpCS8qIEludGVycnVwdCBtYXNrIGVwIDE1ICovCisKICNkZWZpbmUgVVNJUjAJCV9fUkVHKDB4NDA2MDAwNTgpICAvKiBVREMgU3RhdHVzIEludGVycnVwdCBSZWdpc3RlciAwICovCisKKyNkZWZpbmUgVVNJUjBfSVIwCSgxIDw8IDApCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMCAqLworI2RlZmluZSBVU0lSMF9JUjEJKDEgPDwgMSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxICovCisjZGVmaW5lIFVTSVIwX0lSMgkoMSA8PCAyKQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDIgKi8KKyNkZWZpbmUgVVNJUjBfSVIzCSgxIDw8IDMpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMyAqLworI2RlZmluZSBVU0lSMF9JUjQJKDEgPDwgNCkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA0ICovCisjZGVmaW5lIFVTSVIwX0lSNQkoMSA8PCA1KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDUgKi8KKyNkZWZpbmUgVVNJUjBfSVI2CSgxIDw8IDYpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgNiAqLworI2RlZmluZSBVU0lSMF9JUjcJKDEgPDwgNykJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA3ICovCisKICNkZWZpbmUgVVNJUjEJCV9fUkVHKDB4NDA2MDAwNUMpICAvKiBVREMgU3RhdHVzIEludGVycnVwdCBSZWdpc3RlciAxICovCiAKKyNkZWZpbmUgVVNJUjFfSVI4CSgxIDw8IDApCS8qIEludGVycnVwIHJlcXVlc3QgZXAgOCAqLworI2RlZmluZSBVU0lSMV9JUjkJKDEgPDwgMSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCA5ICovCisjZGVmaW5lIFVTSVIxX0lSMTAJKDEgPDwgMikJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxMCAqLworI2RlZmluZSBVU0lSMV9JUjExCSgxIDw8IDMpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMTEgKi8KKyNkZWZpbmUgVVNJUjFfSVIxMgkoMSA8PCA0KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDEyICovCisjZGVmaW5lIFVTSVIxX0lSMTMJKDEgPDwgNSkJLyogSW50ZXJydXAgcmVxdWVzdCBlcCAxMyAqLworI2RlZmluZSBVU0lSMV9JUjE0CSgxIDw8IDYpCS8qIEludGVycnVwIHJlcXVlc3QgZXAgMTQgKi8KKyNkZWZpbmUgVVNJUjFfSVIxNQkoMSA8PCA3KQkvKiBJbnRlcnJ1cCByZXF1ZXN0IGVwIDE1ICovCisKIAogLyoKICAqIEZhc3QgSW5mcmFyZWQgQ29tbXVuaWNhdGlvbiBQb3J0CkBAIC05MTcsNiArMTA1NywyMiBAQAogI2RlZmluZSBQR1NSMgkJX19SRUcoMHg0MEYwMDAyOCkgIC8qIFBvd2VyIE1hbmFnZXIgR1BJTyBTbGVlcCBTdGF0ZSBSZWdpc3RlciBmb3IgR1BbODQtNjRdICovCiAjZGVmaW5lIFJDU1IJCV9fUkVHKDB4NDBGMDAwMzApICAvKiBSZXNldCBDb250cm9sbGVyIFN0YXR1cyBSZWdpc3RlciAqLwogCisjZGVmaW5lIFBTU1JfUkRICSgxIDw8IDUpCS8qIFJlYWQgRGlzYWJsZSBIb2xkICovCisjZGVmaW5lIFBTU1JfUEgJCSgxIDw8IDQpCS8qIFBlcmlwaGVyYWwgQ29udHJvbCBIb2xkICovCisjZGVmaW5lIFBTU1JfVkZTCSgxIDw8IDIpCS8qIFZERCBGYXVsdCBTdGF0dXMgKi8KKyNkZWZpbmUgUFNTUl9CRlMJKDEgPDwgMSkJLyogQmF0dGVyeSBGYXVsdCBTdGF0dXMgKi8KKyNkZWZpbmUgUFNTUl9TU1MJKDEgPDwgMCkJLyogU29mdHdhcmUgU2xlZXAgU3RhdHVzICovCisKKyNkZWZpbmUgUENGUl9EUwkJKDEgPDwgMykJLyogRGVlcCBTbGVlcCBNb2RlICovCisjZGVmaW5lIFBDRlJfRlMJCSgxIDw8IDIpCS8qIEZsb2F0IFN0YXRpYyBDaGlwIFNlbGVjdHMgKi8KKyNkZWZpbmUgUENGUl9GUAkJKDEgPDwgMSkJLyogRmxvYXQgUENNQ0lBIGNvbnRyb2xzICovCisjZGVmaW5lIFBDRlJfT1BERQkoMSA8PCAwKQkvKiAzLjY4NjQgTUh6IG9zY2lsbGF0b3IgcG93ZXItZG93biBlbmFibGUgKi8KKworI2RlZmluZSBSQ1NSX0dQUgkoMSA8PCAzKQkvKiBHUElPIFJlc2V0ICovCisjZGVmaW5lIFJDU1JfU01SCSgxIDw8IDIpCS8qIFNsZWVwIE1vZGUgKi8KKyNkZWZpbmUgUkNTUl9XRFIJKDEgPDwgMSkJLyogV2F0Y2hkb2cgUmVzZXQgKi8KKyNkZWZpbmUgUkNTUl9IV1IJKDEgPDwgMCkJLyogSGFyZHdhcmUgUmVzZXQgKi8KKwogCiAvKgogICogU1NQIFNlcmlhbCBQb3J0IFJlZ2lzdGVycwpAQCAtMTA0MCwxOSArMTE5NiwxMDUgQEAKICNkZWZpbmUgTENDUjBfQk0JKDEgPDwgMjApIAkvKiBCcmFuY2ggbWFzayAqLwogI2RlZmluZSBMQ0NSMF9PVU0JKDEgPDwgMjEpCS8qIE91dHB1dCBGSUZPIHVuZGVycnVuIG1hc2sgKi8KIAorI2RlZmluZSBMQ0NSMV9QUEwgICAgICAgRmxkICgxMCwgMCkgICAgICAvKiBQaXhlbHMgUGVyIExpbmUgLSAxICovCisjZGVmaW5lIExDQ1IxX0Rpc1dkdGgoUGl4ZWwpICAgICAgICAgICAgLyogRGlzcGxheSBXaWR0aCBbMS4uODAwIHBpeC5dICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChQaXhlbCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfUFBMKSkKKworI2RlZmluZSBMQ0NSMV9IU1cgICAgICAgRmxkICg2LCAxMCkgICAgIC8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLworI2RlZmluZSBMQ0NSMV9Ib3JTbmNoV2R0aChUcGl4KSAgICAgICAgIC8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHVsc2UgV2lkdGggWzEuLjY0IFRwaXhdICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKFRwaXgpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX0hTVykpCisKKyNkZWZpbmUgTENDUjFfRUxXICAgICAgIEZsZCAoOCwgMTYpICAgICAvKiBFbmQtb2YtTGluZSBwaXhlbCBjbG9jayBXYWl0ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgLSAxIFtUcGl4XSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMV9FbmRMbkRlbChUcGl4KSAgICAgICAgICAgIC8qICBFbmQtb2YtTGluZSBEZWxheSAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMS4uMjU2IFRwaXhdICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfRUxXKSkKKworI2RlZmluZSBMQ0NSMV9CTFcgICAgICAgRmxkICg4LCAyNCkgICAgIC8qIEJlZ2lubmluZy1vZi1MaW5lIHBpeGVsIGNsb2NrICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGNvdW50IC0gMSBbVHBpeF0gICAgICAgICAgICovCisjZGVmaW5lIExDQ1IxX0JlZ0xuRGVsKFRwaXgpICAgICAgICAgICAgLyogIEJlZ2lubmluZy1vZi1MaW5lIERlbGF5ICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChUcGl4KSAtIDEpIDw8IEZTaGZ0IChMQ0NSMV9CTFcpKQorCisKKyNkZWZpbmUgTENDUjJfTFBQICAgICAgIEZsZCAoMTAsIDApICAgICAvKiBMaW5lIFBlciBQYW5lbCAtIDEgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IyX0Rpc0hnaHQoTGluZSkgICAgICAgICAgICAgLyogIERpc3BsYXkgSGVpZ2h0IFsxLi4xMDI0IGxpbmVzXSAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChMaW5lKSAtIDEpIDw8IEZTaGZ0IChMQ0NSMl9MUFApKQorCisjZGVmaW5lIExDQ1IyX1ZTVyAgICAgICBGbGQgKDYsIDEwKSAgICAgLyogVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpZHRoIC0gMSBbVGxuXSAoTF9GQ0xLKSAgICAgICAgKi8KKyNkZWZpbmUgTENDUjJfVnJ0U25jaFdkdGgoVGxuKSAgICAgICAgICAvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgV2lkdGggWzEuLjY0IFRsbl0gICAgICAgICAgICAgICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKFRsbikgLSAxKSA8PCBGU2hmdCAoTENDUjJfVlNXKSkKKworI2RlZmluZSBMQ0NSMl9FRlcgICAgICAgRmxkICg4LCAxNikgICAgIC8qIEVuZC1vZi1GcmFtZSBsaW5lIGNsb2NrIFdhaXQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IyX0VuZEZybURlbChUbG4pICAgICAgICAgICAgLyogIEVuZC1vZi1GcmFtZSBEZWxheSAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFswLi4yNTUgVGxuXSAgICAgICAgICAgICAgICAgICAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKFRsbikgPDwgRlNoZnQgKExDQ1IyX0VGVykpCisKKyNkZWZpbmUgTENDUjJfQkZXICAgICAgIEZsZCAoOCwgMjQpICAgICAvKiBCZWdpbm5pbmctb2YtRnJhbWUgbGluZSBjbG9jayAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMQ0NSMl9CZWdGcm1EZWwoVGxuKSAgICAgICAgICAgIC8qICBCZWdpbm5pbmctb2YtRnJhbWUgRGVsYXkgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgKChUbG4pIDw8IEZTaGZ0IChMQ0NSMl9CRlcpKQorCisjaWYgMAogI2RlZmluZSBMQ0NSM19QQ0QJKDB4ZmYpCQkvKiBQaXhlbCBjbG9jayBkaXZpc29yICovCiAjZGVmaW5lIExDQ1IzX0FDQgkoMHhmZiA8PCA4KQkvKiBBQyBCaWFzIHBpbiBmcmVxdWVuY3kgKi8KICNkZWZpbmUgTENDUjNfQUNCX1MJOAorI2VuZGlmCisKICNkZWZpbmUgTENDUjNfQVBJCSgweGYgPDwgMTYpCS8qIEFDIEJpYXMgcGluIHRyYXNpdGlvbnMgcGVyIGludGVycnVwdCAqLwogI2RlZmluZSBMQ0NSM19BUElfUwkxNgogI2RlZmluZSBMQ0NSM19WU1AJKDEgPDwgMjApCS8qIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkgKi8KICNkZWZpbmUgTENDUjNfSFNQCSgxIDw8IDIxKQkvKiBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KICNkZWZpbmUgTENDUjNfUENQCSgxIDw8IDIyKQkvKiBwaXhlbCBjbG9jayBwb2xhcml0eSAqLwogI2RlZmluZSBMQ0NSM19PRVAJKDEgPDwgMjMpCS8qIG91dHB1dCBlbmFibGUgcG9sYXJpdHkgKi8KKyNpZiAwCiAjZGVmaW5lIExDQ1IzX0JQUAkoNyA8PCAyNCkJLyogYml0cyBwZXIgcGl4ZWwgKi8KICNkZWZpbmUgTENDUjNfQlBQX1MJMjQKKyNlbmRpZgogI2RlZmluZSBMQ0NSM19EUEMJKDEgPDwgMjcpCS8qIGRvdWJsZSBwaXhlbCBjbG9jayBtb2RlICovCiAKKworI2RlZmluZSBMQ0NSM19QQ0QgICAgICAgRmxkICg4LCAwKSAgICAgIC8qIFBpeGVsIENsb2NrIERpdmlzb3IgKi8KKyNkZWZpbmUgTENDUjNfUGl4Q2xrRGl2KERpdikgICAgICAgICAgICAvKiBQaXhlbCBDbG9jayBEaXZpc29yICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKERpdikgPDwgRlNoZnQgKExDQ1IzX1BDRCkpKQorCisKKyNkZWZpbmUgTENDUjNfQlBQICAgICAgIEZsZCAoMywgMjQpICAgICAvKiBCaXQgUGVyIFBpeGVsICovCisjZGVmaW5lIExDQ1IzX0JwcChCcHApICAgICAgICAgICAgICAgICAgLyogQml0IFBlciBQaXhlbCAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChCcHApIDw8IEZTaGZ0IChMQ0NSM19CUFApKSkKKworI2RlZmluZSBMQ0NSM19BQ0IgICAgICAgRmxkICg4LCA4KSAgICAgIC8qIEFDIEJpYXMgKi8KKyNkZWZpbmUgTENDUjNfQWNiKEFjYikgICAgICAgICAgICAgICAgICAvKiBCQUMgQmlhcyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKChBY2IpIDw8IEZTaGZ0IChMQ0NSM19BQ0IpKSkKKworI2RlZmluZSBMQ0NSM19Ib3JTbmNoSCAgKExDQ1IzX0hTUCowKSAgIC8qICBIb3Jpem9udGFsIFN5bmNocm9uaXphdGlvbiAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgcHVsc2UgYWN0aXZlIEhpZ2ggICAgICAgICAgICAgICovCisjZGVmaW5lIExDQ1IzX0hvclNuY2hMICAoTENDUjNfSFNQKjEpICAgLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLworCisjZGVmaW5lIExDQ1IzX1ZydFNuY2hIICAoTENDUjNfVlNQKjApICAgLyogIFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbiBwdWxzZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBhY3RpdmUgSGlnaCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENDUjNfVnJ0U25jaEwgIChMQ0NSM19WU1AqMSkgICAvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGFjdGl2ZSBMb3cgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIExDU1JfTERECSgxIDw8IDApCS8qIExDRCBEaXNhYmxlIERvbmUgKi8KKyNkZWZpbmUgTENTUl9TT0YJKDEgPDwgMSkJLyogU3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgTENTUl9CRVIJKDEgPDwgMikJLyogQnVzIGVycm9yICovCisjZGVmaW5lIExDU1JfQUJDCSgxIDw8IDMpCS8qIEFDIEJpYXMgY291bnQgKi8KKyNkZWZpbmUgTENTUl9JVUwJKDEgPDwgNCkJLyogaW5wdXQgRklGTyB1bmRlcnJ1biBMb3dlciBwYW5lbCAqLworI2RlZmluZSBMQ1NSX0lVVQkoMSA8PCA1KQkvKiBpbnB1dCBGSUZPIHVuZGVycnVuIFVwcGVyIHBhbmVsICovCisjZGVmaW5lIExDU1JfT1UJCSgxIDw8IDYpCS8qIG91dHB1dCBGSUZPIHVuZGVycnVuICovCisjZGVmaW5lIExDU1JfUUQJCSgxIDw8IDcpCS8qIHF1aWNrIGRpc2FibGUgKi8KKyNkZWZpbmUgTENTUl9FT0YJKDEgPDwgOCkJLyogZW5kIG9mIGZyYW1lICovCisjZGVmaW5lIExDU1JfQlMJCSgxIDw8IDkpCS8qIGJyYW5jaCBzdGF0dXMgKi8KKyNkZWZpbmUgTENTUl9TSU5UCSgxIDw8IDEwKQkvKiBzdWJzZXF1ZW50IGludGVycnVwdCAqLworCisjZGVmaW5lIExEQ01EX1BBTAkoMSA8PCAyNikJLyogaW5zdHJ1Y3RzIERNQSB0byBsb2FkIHBhbGV0dGUgYnVmZmVyICovCisKICNkZWZpbmUgTENTUl9MREQJKDEgPDwgMCkJLyogTENEIERpc2FibGUgRG9uZSAqLwogI2RlZmluZSBMQ1NSX1NPRgkoMSA8PCAxKQkvKiBTdGFydCBvZiBmcmFtZSAqLwogI2RlZmluZSBMQ1NSX0JFUgkoMSA8PCAyKQkvKiBCdXMgZXJyb3IgKi8KQEAgLTEwNzEsNDUgKzEzMTMsNyBAQAogICogTWVtb3J5IGNvbnRyb2xsZXIKICAqLwogCi0jZGVmaW5lIE1FTUNfQkFTRSBfX1JFRygweDQ4MDAwMDAwKSAgLyogQmFzZSBvZiBNZW1vcml5IENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgTURDTkZHCQlfX1JFRygweDQ4MDAwMDAwKSAgLyogU0RSQU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCi0jZGVmaW5lIE1EUkVGUgkJX19SRUcoMHg0ODAwMDAwNCkgIC8qIFNEUkFNIFJlZnJlc2ggQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNU0MwCQlfX1JFRygweDQ4MDAwMDA4KSAgLyogU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgTVNDMQkJX19SRUcoMHg0ODAwMDAwQykgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAxICovCi0jZGVmaW5lIE1TQzIJCV9fUkVHKDB4NDgwMDAwMTApICAvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBNRUNSCQlfX1JFRygweDQ4MDAwMDE0KSAgLyogRXhwYW5zaW9uIE1lbW9yeSAoUENNQ0lBL0NvbXBhY3QgRmxhc2gpIEJ1cyBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFNYTENSCQlfX1JFRygweDQ4MDAwMDE4KSAgLyogTENSIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gU0RSQU0tVGltaW5nIFN5bmNocm9ub3VzIEZsYXNoICovCi0jZGVmaW5lIFNYQ05GRwkJX19SRUcoMHg0ODAwMDAxQykgIC8qIFN5bmNocm9ub3VzIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBTWE1SUwkJX19SRUcoMHg0ODAwMDAyNCkgIC8qIE1SUyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIFN5bmNocm9ub3VzIEZsYXNoIG9yIFNNUk9NICovCi0jZGVmaW5lIE1DTUVNMAkJX19SRUcoMHg0ODAwMDAyOCkgIC8qIENhcmQgaW50ZXJmYWNlIENvbW1vbiBNZW1vcnkgU3BhY2UgU29ja2V0IDAgVGltaW5nICovCi0jZGVmaW5lIE1DTUVNMQkJX19SRUcoMHg0ODAwMDAyQykgIC8qIENhcmQgaW50ZXJmYWNlIENvbW1vbiBNZW1vcnkgU3BhY2UgU29ja2V0IDEgVGltaW5nICovCi0jZGVmaW5lIE1DQVRUMAkJX19SRUcoMHg0ODAwMDAzMCkgIC8qIENhcmQgaW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBTb2NrZXQgMCBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNQ0FUVDEJCV9fUkVHKDB4NDgwMDAwMzQpICAvKiBDYXJkIGludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgU29ja2V0IDEgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUNJTzAJCV9fUkVHKDB4NDgwMDAwMzgpICAvKiBDYXJkIGludGVyZmFjZSBJL08gU3BhY2UgU29ja2V0IDAgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUNJTzEJCV9fUkVHKDB4NDgwMDAwM0MpICAvKiBDYXJkIGludGVyZmFjZSBJL08gU3BhY2UgU29ja2V0IDEgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTURNUlMJCV9fUkVHKDB4NDgwMDAwNDApICAvKiBNUlMgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBTRFJBTSAqLwotI2RlZmluZSBCT09UX0RFRglfX1JFRygweDQ4MDAwMDQ0KSAgLyogUmVhZC1Pbmx5IEJvb3QtVGltZSBSZWdpc3Rlci4gQ29udGFpbnMgQk9PVF9TRUwgYW5kIFBLR19TRUwgKi8KLQotI2RlZmluZSBNRENORkdfREUwICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNRENORkdfREUxICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNRENORkdfREUyICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNRENORkdfREUzICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBNRENORkdfRFdJRDAgICAgMHgwMDAwMDAwNAotCi0jZGVmaW5lIE1EUkVGUl9FMFBJTiAgICAweDAwMDAxMDAwCi0jZGVmaW5lIE1EUkVGUl9LMFJVTgkweDAwMDAyMDAwCi0jZGVmaW5lIE1EUkVGUl9LMERCMgkweDAwMDA0MDAwCi0jZGVmaW5lIE1EUkVGUl9FMVBJTiAgICAweDAwMDA4MDAwCi0jZGVmaW5lIE1EUkVGUl9LMVJVTgkweDAwMDEwMDAwCi0jZGVmaW5lIE1EUkVGUl9LMURCMgkweDAwMDIwMDAwCi0jZGVmaW5lIE1EUkVGUl9LMlJVTgkweDAwMDQwMDAwCi0jZGVmaW5lIE1EUkVGUl9LMkRCMgkweDAwMDgwMDAwCi0jZGVmaW5lIE1EUkVGUl9BUEQJMHgwMDEwMDAwMAotI2RlZmluZSBNRFJFRlJfU0xGUlNICTB4MDA0MDAwMDAKLSNkZWZpbmUgTURSRUZSX0swRlJFRQkweDAwODAwMDAwCi0jZGVmaW5lIE1EUkVGUl9LMUZSRUUJMHgwMTAwMDAwMAotI2RlZmluZSBNRFJFRlJfSzJGUkVFCTB4MDIwMDAwMDAKLQorI2RlZmluZSBNRU1DX0JBU0UJX19SRUcoMHg0ODAwMDAwMCkgIC8qIEJhc2Ugb2YgTWVtb3J5IENvbnRyb2xsZXIgKi8KICNkZWZpbmUgTURDTkZHX09GRlNFVCAgIDB4MAogI2RlZmluZSBNRFJFRlJfT0ZGU0VUICAgMHg0CiAjZGVmaW5lIE1TQzBfT0ZGU0VUICAgICAweDgKQEAgLTExMjcsNyArMTMzMSw0NCBAQAogI2RlZmluZSBNQ0lPMF9PRkZTRVQgICAgMHgzOAogI2RlZmluZSBNQ0lPMV9PRkZTRVQgICAgMHgzQwogI2RlZmluZSBNRE1SU19PRkZTRVQgICAgMHg0MAotCisJCisjZGVmaW5lIE1EQ05GRwkJX19SRUcoMHg0ODAwMDAwMCkgIC8qIFNEUkFNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBNRENORkdfREUwCTB4MDAwMDAwMDEKKyNkZWZpbmUgTURDTkZHX0RFMQkweDAwMDAwMDAyCisjZGVmaW5lIE1EQ05GR19ERTIJMHgwMDAxMDAwMAorI2RlZmluZSBNRENORkdfREUzCTB4MDAwMjAwMDAKKyNkZWZpbmUgTURDTkZHX0RXSUQwCTB4MDAwMDAwMDQKKwkKKyNkZWZpbmUgTURSRUZSCQlfX1JFRygweDQ4MDAwMDA0KSAgLyogU0RSQU0gUmVmcmVzaCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1TQzAJCV9fUkVHKDB4NDgwMDAwMDgpICAvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBNU0MxCQlfX1JFRygweDQ4MDAwMDBDKSAgLyogU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTVNDMgkJX19SRUcoMHg0ODAwMDAxMCkgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIE1FQ1IJCV9fUkVHKDB4NDgwMDAwMTQpICAvKiBFeHBhbnNpb24gTWVtb3J5IChQQ01DSUEvQ29tcGFjdCBGbGFzaCkgQnVzIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU1hMQ1IJCV9fUkVHKDB4NDgwMDAwMTgpICAvKiBMQ1IgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBTRFJBTS1UaW1pbmcgU3luY2hyb25vdXMgRmxhc2ggKi8KKyNkZWZpbmUgU1hDTkZHCQlfX1JFRygweDQ4MDAwMDFDKSAgLyogU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNYTVJTCQlfX1JFRygweDQ4MDAwMDI0KSAgLyogTVJTIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gU3luY2hyb25vdXMgRmxhc2ggb3IgU01ST00gKi8KKyNkZWZpbmUgTUNNRU0wCQlfX1JFRygweDQ4MDAwMDI4KSAgLyogQ2FyZCBpbnRlcmZhY2UgQ29tbW9uIE1lbW9yeSBTcGFjZSBTb2NrZXQgMCBUaW1pbmcgKi8KKyNkZWZpbmUgTUNNRU0xCQlfX1JFRygweDQ4MDAwMDJDKSAgLyogQ2FyZCBpbnRlcmZhY2UgQ29tbW9uIE1lbW9yeSBTcGFjZSBTb2NrZXQgMSBUaW1pbmcgKi8KKyNkZWZpbmUgTUNBVFQwCQlfX1JFRygweDQ4MDAwMDMwKSAgLyogQ2FyZCBpbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFNvY2tldCAwIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1DQVRUMQkJX19SRUcoMHg0ODAwMDAzNCkgIC8qIENhcmQgaW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBTb2NrZXQgMSBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNQ0lPMAkJX19SRUcoMHg0ODAwMDAzOCkgIC8qIENhcmQgaW50ZXJmYWNlIEkvTyBTcGFjZSBTb2NrZXQgMCBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNQ0lPMQkJX19SRUcoMHg0ODAwMDAzQykgIC8qIENhcmQgaW50ZXJmYWNlIEkvTyBTcGFjZSBTb2NrZXQgMSBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNRE1SUwkJX19SRUcoMHg0ODAwMDA0MCkgIC8qIE1SUyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIFNEUkFNICovCisjZGVmaW5lIEJPT1RfREVGCV9fUkVHKDB4NDgwMDAwNDQpICAvKiBSZWFkLU9ubHkgQm9vdC1UaW1lIFJlZ2lzdGVyLiBDb250YWlucyBCT09UX1NFTCBhbmQgUEtHX1NFTCAqLwogCisjZGVmaW5lIE1EUkVGUl9LMkZSRUUJKDEgPDwgMjUpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCisjZGVmaW5lIE1EUkVGUl9LMUZSRUUJKDEgPDwgMjQpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCisjZGVmaW5lIE1EUkVGUl9LMEZSRUUJKDEgPDwgMjMpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCisjZGVmaW5lIE1EUkVGUl9TTEZSU0gJKDEgPDwgMjIpCS8qIFNEUkFNIFNlbGYtUmVmcmVzaCBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfQVBECSgxIDw8IDIwKQkvKiBTRFJBTS9TU1JBTSBBdXRvLVBvd2VyLURvd24gRW5hYmxlICovCisjZGVmaW5lIE1EUkVGUl9LMkRCMgkoMSA8PCAxOSkJLyogU0RDTEsyIERpdmlkZSBieSAyIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9LMlJVTgkoMSA8PCAxOCkJLyogU0RDTEsyIFJ1biBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfSzFEQjIJKDEgPDwgMTcpCS8qIFNEQ0xLMSBEaXZpZGUgYnkgMiBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfSzFSVU4JKDEgPDwgMTYpCS8qIFNEQ0xLMSBSdW4gQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0UxUElOCSgxIDw8IDE1KQkvKiBTRENLRTEgTGV2ZWwgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0swREIyCSgxIDw8IDE0KQkvKiBTRENMSzAgRGl2aWRlIGJ5IDIgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0swUlVOCSgxIDw8IDEzKQkvKiBTRENMSzAgUnVuIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9FMFBJTgkoMSA8PCAxMikJLyogU0RDS0UwIExldmVsIENvbnRyb2wvU3RhdHVzICovCiAKIAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1hcm12L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtYXJtdi9wdHJhY2UuaAppbmRleCA1MTcwOGI5Li5iMzJlZGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1hcm12L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWFybXYvcHRyYWNlLmgKQEAgLTYxLDYgKzYxLDggQEAKICNkZWZpbmUgQVJNX3IwCQl1cmVnc1swXQogI2RlZmluZSBBUk1fT1JJR19yMAl1cmVnc1sxN10KIAorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPkFSTV9pcCkKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2RlZmluZSB1c2VyX21vZGUocmVncykJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2lubm9rb20uaCBiL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlZTk5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmgKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyAqIFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgsIHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGUuCisgKgorICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIEF1ZXJzd2FsZCBJbm5va29tIENQVSBib2FyZC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogaW5jbHVkZS9jb25maWdzL2lubm9rb20uaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjZGVmaW5lIERFQlVHIDEKKworLyoKKyAqIElmIHdlIGFyZSBkZXZlbG9waW5nLCB3ZSBtaWdodCB3YW50IHRvIHN0YXJ0IFUtQm9vdCBmcm9tIHJhbQorICogc28gd2UgTVVTVCBOT1QgaW5pdGlhbGl6ZSBjcml0aWNhbCByZWdzIGxpa2UgbWVtLXRpbWluZyAuLi4KKyAqLworI2RlZmluZSBDT05GSUdfSU5JVF9DUklUSUNBTAkJLyogdW5kZWYgZm9yIGRldmVsb3BpbmcgKi8KKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKiAoZWFzeSB0byBjaGFuZ2UpCisgKi8KKyNkZWZpbmUgQ09ORklHX1BYQTI1MCAJCTEJLyogVGhpcyBpcyBhbiBQWEEyNTAgQ1BVICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX0lOTk9LT00JCTEJLyogb24gYW4gQXVlcnN3YWxkIElubm9rb20gYm9hcmQgICAgKi8KKworI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAgICAgKi8KKwkJCQkJLyogZm9yIHRpbWVyL2NvbnNvbGUvZXRoZXJuZXQgICAgICAgKi8KKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0ZGVUFSVAkJMQkvKiB3ZSB1c2UgRkZVQVJUIG9uIENTQjIyNiAqLworCisvKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxOTIwMAorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKChDT05GSUdfQ01EX0RGTCB8IENGR19DTURfSTJDIHwgQ0ZHX0NNRF9FRVBST00pICYgfkNGR19DTURfTkVUKQorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICAgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKy8qICNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJyb290PS9kZXYvbmZzIGlwPWJvb3RwIGNvbnNvbGU9dHR5UzAsMTkyMDAiICovCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJImNvbnNvbGU9dHR5UzAsMTkyMDAiCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQlGRjpGRjpGRjpGRjpGRjpGRgorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjEuNTYKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjEuMgorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDB4NDAwMDAiCisjZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTkyMDAJCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KKyNlbmRpZgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2w7IHRoaXMgbGl2ZXMgYmVsb3cgdGhlIHVwcGVybW9zdCAxMjggS2lCIHdoaWNoIGFyZQorICogdXNlZCBmb3IgdGhlIFJBTSBjb3B5IG9mIHRoZSB1Ym9vdCBjb2RlCisgKi8KKy8qICNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JKENGR19FTlZfU0laRSArIDEyOCoxMDI0KSAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDEyOCoxMDI0KQorCisjZGVmaW5lIENGR19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAgICAgICAgICovCisjZGVmaW5lIENGR19QUk9NUFQJCSJ1Ym9vdD4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgICAgICovCisjZGVmaW5lIENGR19DQlNJWkUJCTEyOAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICAgICAqLworI2RlZmluZSBDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAgICovCisjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICAgICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHhhMDQwMDAwMCAgICAgIC8qIG1lbXRlc3Qgd29ya3Mgb24gICAgICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORCAgICAgICAgIDB4YTA4MDAwMDAgICAgICAvKiA0IC4uLiA4IE1CIGluIERSQU0gICAqLworCisjdW5kZWYgIENGR19DTEtTX0lOX0haICAgICAgICAgIC8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KKworI2RlZmluZSBDRkdfTE9BRF9BRERSICAgICAgICAgICAweGE3ZmUwMDAwICAgICAgLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKwkJCQkJCS8qIFJTOiB3aGVyZSBpcyB0aGlzIGRvY3VtZW50ZWQ/ICovCisJCQkJCQkvKiBSUzogaXMgdGhpcyB3aGVyZSBVLUJvb3QgaXMgICovCisJCQkJCQkvKiBSUzogcmVsb2NhdGVkIHRvIGluIFJBTT8gICAgICAqLworCisjZGVmaW5lIENGR19IWiAgICAgICAgICAgICAgICAgIDM2ODY0MDAgICAgICAgICAvKiBpbmNyZW1lbnRlciBmcmVxOiAzLjY4NjQgTUh6ICovCisJCQkJCQkvKiBSUzogdGhlIG9zY2lsbGF0b3IgaXMgYWN0dWFsbHkgMzY4MDEzMD8/ICovCisKKyNkZWZpbmUgQ0ZHX0NQVVNQRUVEICAgICAgICAgICAgMHgxNDEgICAgICAgICAgIC8qIHNldCBjb3JlIGNsb2NrIHRvIDIwMC8yMDAvMTAwIE1IeiAqLworCQkJCQkJLyogMDEwMTAwMDAwMSAqLworCQkJCQkJLyogICAgICBeXl5eXiBNZW1vcnkgU3BlZWQgOTkuNTMgTUh6ICAgICAgICAgKi8KKwkJCQkJCS8qICAgIF5eICAgICAgUnVuIE1vZGUgU3BlZWQgPSAyeCBNZW0gU3BlZWQgICovCisJCQkJCQkvKiBeXiAgICAgICAgIFR1cmJvIE1vZGUgU3AuID0gMXggUnVuIE0uIFNwLiAqLworCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJMHgyMDAwMAkJLyogMTI4IEtpQiAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKgorICogSTJDIGJ1cworICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQyAxCisjZGVmaW5lIENGR19JMkNfU1BFRUQgNTAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAweGZlCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9FRVBST00gCQkxCisKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCQkweDAwCS8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICAqLworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkxMDI0CS8qIDEgS2lCICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCQkweDUwCS8qIEEwID0gMCAoaGFyZHdpcmVkKSAgICAgICAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk1CS8qIDUgYml0cyA9IDMyIG9jdGV0cyAgICAgICAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJMTAJLyogYmV0d2VlbiBzdG9wIGFuZCBzdGFydCAgICovCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOCQkyCS8qIGxlbmd0aCBvZiBhZGRyZXNzICAgICAgICAqLworI2RlZmluZSBDRkdfRUVQUk9NX1NJWkUJCQk0MDk2CS8qIHNpemUgaW4gYnl0ZXMgICAgICAgICAgICAqLworCisvKgorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUgICAgICAgICgxMjgqMTAyNCkgICAgICAvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRICAgICg0KjEwMjQpICAgICAgICAvKiBJUlEgc3RhY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEgICAgKDQqMTAyNCkgICAgICAgIC8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkJLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAgICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkJMHhhMDAwMDAwMAkvKiBTRFJBTSBCYW5rICMxICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwNDAwMDAwMAkvKiA2NCBNQiAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MDAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAgICAgICAgICAgICovCisjZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJMHgwMTAwMDAwMAkvKiAxNiBNQiAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDRkdfRFJBTV9CQVNFCQkweGEwMDAwMDAwCS8qIFJBTSBzdGFydHMgaGVyZSAgICAgICAgICAqLworI2RlZmluZSBDRkdfRFJBTV9TSVpFCQkweDA0MDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UgICAgICAgICAgUEhZU19GTEFTSF8xCisKKy8qCisgKiBHUElPIHNldHRpbmdzOworICovCisKKy8qIEdQMTUgPT0gbkNTMSAgICAgIGlzIDEKKyAqIEdQMjQgPT0gU0ZSTSAgICAgIGlzIDEKKyAqIEdQMjUgPT0gVFhEICAgICAgIGlzIDEKKyAqIEdQMzMgPT0gbkNTNSAgICAgIGlzIDEKKyAqIEdQMzkgPT0gRkZUWEQgICAgIGlzIDEKKyAqIEdQNDEgPT0gUlRTICAgICAgIGlzIDEKKyAqIEdQNDcgPT0gVFhEICAgICAgIGlzIDEKKyAqIEdQNDkgPT0gblBXRSAgICAgIGlzIDEKKyAqIEdQNjIgPT0gTEVEX0IgICAgIGlzIDEKKyAqIEdQNjMgPT0gVERNX09FICAgIGlzIDEKKyAqIEdQNzggPT0gbkNTMiAgICAgIGlzIDEKKyAqIEdQNzkgPT0gbkNTMyAgICAgIGlzIDEKKyAqIEdQODAgPT0gbkNTNCAgICAgIGlzIDEKKyAqLworI2RlZmluZSBDRkdfR1BTUjBfVkFMICAgICAgIDB4MDMwMDgwMDAKKyNkZWZpbmUgQ0ZHX0dQU1IxX1ZBTCAgICAgICAweEMwMDI4MjgyCisjZGVmaW5lIENGR19HUFNSMl9WQUwgICAgICAgMHgwMDAxQzAwMAorCisvKiBHUDAyID09IERPTl9SU1QgICBpcyAwCisgKiBHUDIzID09IFNDTEsgICAgICBpcyAwCisgKiBHUDQ1ID09IFVTQl9BQ1QgICBpcyAwCisgKiBHUDYwID09IFBMTEVOICAgICBpcyAwCisgKiBHUDYxID09IExFRF9BICAgICBpcyAwCisgKiBHUDczID09IFNXVVBEX0xFRCBpcyAwCisgKi8KKyNkZWZpbmUgQ0ZHX0dQQ1IwX1ZBTCAgICAgICAweDAwODAwMDA0CisjZGVmaW5lIENGR19HUENSMV9WQUwgICAgICAgMHgzMDAwMjAwMAorI2RlZmluZSBDRkdfR1BDUjJfVkFMICAgICAgIDB4MDAwMDAxMDAKKworLyogR1AwMCA9PSBET05fUkVBRFkgaXMgaW5wdXQKKyAqIEdQMDEgPT0gRE9OX09LICAgIGlzIGlucHV0CisgKiBHUDAyID09IERPTl9SU1QgICBpcyBvdXRwdXQKKyAqIEdQMDMgPT0gUkVTRVRfSU5EIGlzIGlucHV0CisgKiBHUDA3ID09IFJFUzExICAgICBpcyBpbnB1dAorICogR1AwOSA9PSBSRVMxMiAgICAgaXMgaW5wdXQKKyAqIEdQMTEgPT0gU1dVUERBVEUgIGlzIGlucHV0CisgKiBHUDE0ID09IG5QT1dFUk9LICBpcyBpbnB1dAorICogR1AxNSA9PSBuQ1MxICAgICAgaXMgb3V0cHV0CisgKiBHUDE3ID09IFJFUzIyICAgICBpcyBpbnB1dAorICogR1AxOCA9PSBSRFkgICAgICAgaXMgaW5wdXQKKyAqIEdQMjMgPT0gU0NMSyAgICAgIGlzIG91dHB1dAorICogR1AyNCA9PSBTRlJNICAgICAgaXMgb3V0cHV0CisgKiBHUDI1ID09IFRYRCAgICAgICBpcyBvdXRwdXQKKyAqIEdQMjYgPT0gUlhEICAgICAgIGlzIGlucHV0CisgKiBHUDMyID09IFJFUzIxICAgICBpcyBpbnB1dAorICogR1AzMyA9PSBuQ1M1ICAgICAgaXMgb3V0cHV0CisgKiBHUDM0ID09IEZGUlhEICAgICBpcyBpbnB1dAorICogR1AzNSA9PSBDVFMgICAgICAgaXMgaW5wdXQKKyAqIEdQMzkgPT0gRkZUWEQgICAgIGlzIG91dHB1dAorICogR1A0MSA9PSBSVFMgICAgICAgaXMgb3V0cHV0CisgKiBHUDQyID09IFVTQl9PSyAgICBpcyBpbnB1dAorICogR1A0NSA9PSBVU0JfQUNUICAgaXMgb3V0cHV0CisgKiBHUDQ2ID09IFJYRCAgICAgICBpcyBpbnB1dAorICogR1A0NyA9PSBUWEQgICAgICAgaXMgb3V0cHV0CisgKiBHUDQ5ID09IG5QV0UgICAgICBpcyBvdXRwdXQKKyAqIEdQNTggPT0gbkNQVUJVU0lOVCBpcyBpbnB1dAorICogR1A1OSA9PSBMQU5JTlQgICAgaXMgaW5wdXQKKyAqIEdQNjAgPT0gUExMRU4gICAgIGlzIG91dHB1dAorICogR1A2MSA9PSBMRURfQSAgICAgaXMgb3V0cHV0CisgKiBHUDYyID09IExFRF9CICAgICBpcyBvdXRwdXQKKyAqIEdQNjMgPT0gVERNX09FICAgIGlzIG91dHB1dAorICogR1A2NCA9PSBuRFNQSU5UICAgaXMgaW5wdXQKKyAqIEdQNjUgPT0gU1RSQVAwICAgIGlzIGlucHV0CisgKiBHUDY3ID09IFNUUkFQMSAgICBpcyBpbnB1dAorICogR1A2OSA9PSBTVFJBUDIgICAgaXMgaW5wdXQKKyAqIEdQNzAgPT0gU1RSQVAzICAgIGlzIGlucHV0CisgKiBHUDcxID09IFNUUkFQNCAgICBpcyBpbnB1dAorICogR1A3MyA9PSBTV1VQRF9MRUQgaXMgb3V0cHV0CisgKiBHUDc4ID09IG5DUzIgICAgICBpcyBvdXRwdXQKKyAqIEdQNzkgPT0gbkNTMyAgICAgIGlzIG91dHB1dAorICogR1A4MCA9PSBuQ1M0ICAgICAgaXMgb3V0cHV0CisgKi8KKyNkZWZpbmUgQ0ZHX0dQRFIwX1ZBTCAgICAgICAweDAzODA4MDA0CisjZGVmaW5lIENGR19HUERSMV9WQUwgICAgICAgMHhGMDAyQTI4MgorI2RlZmluZSBDRkdfR1BEUjJfVkFMICAgICAgIDB4MDAwMUMyMDAKKworLyogR1AxNSA9PSBuQ1MxICBpcyBBRjEwCisgKiBHUDE4ID09IFJEWSAgIGlzIEFGMDEKKyAqIEdQMjMgPT0gU0NMSyAgaXMgQUYxMAorICogR1AyNCA9PSBTRlJNICBpcyBBRjEwCisgKiBHUDI1ID09IFRYRCAgIGlzIEFGMTAKKyAqIEdQMjYgPT0gUlhEICAgaXMgQUYwMQorICogR1AzMyA9PSBuQ1M1ICBpcyBBRjEwCisgKiBHUDM0ID09IEZGUlhEIGlzIEFGMDEKKyAqIEdQMzUgPT0gQ1RTICAgaXMgQUYwMQorICogR1AzOSA9PSBGRlRYRCBpcyBBRjEwCisgKiBHUDQxID09IFJUUyAgIGlzIEFGMTAKKyAqIEdQNDYgPT0gUlhEICAgaXMgQUYxMAorICogR1A0NyA9PSBUWEQgICBpcyBBRjAxCisgKiBHUDQ5ID09IG5QV0UgIGlzIEFGMTAKKyAqIEdQNzggPT0gbkNTMiAgaXMgQUYxMAorICogR1A3OSA9PSBuQ1MzICBpcyBBRjEwCisgKiBHUDgwID09IG5DUzQgIGlzIEFGMTAKKyAqLworI2RlZmluZSBDRkdfR0FGUjBfTF9WQUwgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0dBRlIwX1VfVkFMICAgICAweDAwMUE4MDEwCisjZGVmaW5lIENGR19HQUZSMV9MX1ZBTCAgICAgMHg2MDA4ODA1OAorI2RlZmluZSBDRkdfR0FGUjFfVV9WQUwgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0ZHX0dBRlIyX0xfVkFMICAgICAweEEwMDAwMDAwCisjZGVmaW5lIENGR19HQUZSMl9VX1ZBTCAgICAgMHgwMDAwMDAwMgorCisvKiBGSVhNRTogc2V0IEdQSU9fUkVSL0ZFUiAqLworCisvKiBSREggPSAxCisgKiBQSCAgPSAxCisgKiBWRlMgPSAxCisgKiBCRlMgPSAxCisgKiBTU1MgPSAxCisgKi8KKyNkZWZpbmUgQ0ZHX1BTU1JfVkFMCQkweDM3CisKKy8qCisgKiBNZW1vcnkgc2V0dGluZ3MKKyAqLworCisvKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1MwLzEgLT4gZmxhc2ggYmFua3MKKyAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzE6CisgKiBbMzFdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCisgKiBbMzA6MjhdIDAxMCAgLSBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAyKigyKk1lbUNsaykgPSA0MCBucworICogWzI3OjI0XSAwMTAxIC0gQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDUrMSkqTWVtQ2xrID0gNjAgbnMKKyAqIFsyMzoyMF0gMTAxMSAtICIgZm9yIGZpcnN0IGFjY2VzczogKDExKzIpKk1lbUNsayA9IDEzMCBucworICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAorICogWzE4OjE2XSAwMDAgIC0gbm9uYnVyc3QgUkFNIG9yIEZMQVNICisgKiBjb25maWd1cmF0aW9uIGZvciBuQ1MwOgorICogWzE1XSAgICAwICAgIC0gU2xvd2VyIERldmljZQorICogWzE0OjEyXSAwMTAgIC0gQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogMiooMipNZW1DbGspID0gNDAgbnMKKyAqIFsxMTowOF0gMDEwMSAtIEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICg1KzEpKk1lbUNsayA9IDYwIG5zCisgKiBbMDc6MDRdIDEwMTEgLSAiIGZvciBmaXJzdCBhY2Nlc3M6ICgxMSsyKSpNZW1DbGsgPSAxMzAgbnMKKyAqIFswM10gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKKyAqIFswMjowMF0gMDAwICAtIG5vbmJ1cnN0IFJBTSBvciBGTEFTSAorICovCisjZGVmaW5lIENGR19NU0MwX1ZBTAkJMHgyNWI4MjViOCAvKiBmbGFzaCBiYW5rcyAgICAgICAgICAgICAgICAgICAqLworCisvKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1MyLzMgLT4gVERNLVN3aXRjaCwgRFNQCisgKiBjb25maWd1cmF0aW9uIGZvciBuQ1MzOiBEU1AKKyAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKKyAqIFszMDoyOF0gMDAxICAtIFJSUjM6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDEqKDIqTWVtQ2xrKSA9IDIwIG5zCisgKiBbMjc6MjRdIDAwMTAgLSBSRE4zOiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMisxKSpNZW1DbGsgPSAzMCBucworICogWzIzOjIwXSAwMDExIC0gUkRGMzogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucworICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAorICogWzE4OjE2XSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KKyAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzI6IFRETS1Td2l0Y2gKKyAqIFsxNV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKKyAqIFsxNDoxMl0gMTAxICAtIFJSUjI6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDUqKDIqTWVtQ2xrKSA9IDEwMCBucworICogWzExOjA4XSAxMDAxIC0gUkROMjogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDkrMSkqTWVtQ2xrID0gMTAwIG5zCisgKiBbMDc6MDRdIDAwMTEgLSBSREYyOiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6ICgzKzEpKk1lbUNsayA9IDQwIG5zCisgKiBbMDNdICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCisgKiBbMDI6MDBdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTworICovCisjZGVmaW5lIENGR19NU0MxX1ZBTAkJMHgxMzJDNTkzQyAvKiBURE0gc3dpdGNoLCBEU1AgICAgICAgICAgICAgICAqLworCisvKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1M0LzUgLT4gRXh0QnVzLCBMQU4gQ29udHJvbGxlcgorICoKKyAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzU6IExBTiBDb250cm9sbGVyCisgKiBbMzFdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCisgKiBbMzA6MjhdIDAwMSAgLSBSUlI1OiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAxKigyKk1lbUNsaykgPSAyMCBucworICogWzI3OjI0XSAwMDEwIC0gUkRONTogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDIrMSkqTWVtQ2xrID0gMzAgbnMKKyAqIFsyMzoyMF0gMDAxMSAtIFJERjU6IEFkZHJlc3MgZm9yIGZpcnN0IGFjY2VzczogKDMrMSkqTWVtQ2xrID0gNDAgbnMKKyAqIFsxOV0gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKKyAqIFsxODoxNl0gMTAwICAtIHZhcmlhYmxlIGxhdGVuY3kgSS9PCisgKiBjb25maWd1cmF0aW9uIGZvciBuQ1M0OiBFeHRCdXMKKyAqIFsxNV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKKyAqIFsxNDoxMl0gMTEwICAtIFJSUjQ6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDYqKDIqTWVtQ2xrKSA9IDEyMCBucworICogWzExOjA4XSAxMTAwIC0gUkRONDogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDEyKzEpKk1lbUNsayA9IDEzMCBucworICogWzA3OjA0XSAxMTAxIC0gUkRGNDogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAxMy0+KDE1KzEpKk1lbUNsayA9IDE2MCBucworICogWzAzXSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAorICogWzAyOjAwXSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KKyAqLworI2RlZmluZSBDRkdfTVNDMl9WQUwJCTB4MTMyQzZDREMgLyogZXh0cmEgYnVzLCBMQU4gY29udHJvbGxlciAgICAgKi8KKworLyogTURDTkZHOiBTRFJBTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKgorICogWzMxOjI5XSAgIDAwMCAtIHJlc2VydmVkCisgKiBbMjhdICAgICAgMAkgLSBubyBTQTExMTEgY29tcGF0aWJsaXR5IG1vZGUKKyAqIFsyN10gICAgICAwICAgLSBsYXRjaCByZXR1cm4gZGF0YSB3aXRoIHJldHVybiBjbG9jaworICogWzI2XSAgICAgIDAgICAtIGFsdGVybmF0ZSBhZGRyZXNzaW5nIGZvciBwYWlyIDIvMworICogWzI1OjI0XSAgIDAwICAtIHRpbWluZ3MKKyAqIFsyM10gICAgICAwICAgLSBpbnRlcm5hbCBiYW5rcyBpbiBsb3dlciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKKyAqIFsyMjoyMV0gICAwMCAgLSByb3cgYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKKyAqIFsyMDoxOV0gICAwMCAgLSBjb2x1bW4gYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMi8zIChub3QgdXNlZCkKKyAqIFsxOF0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMi8zIHdpZHRoIGlzIDMyIGJpdAorICogWzE3XSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAzIGRpc2FibGVkCisgKiBbMTZdICAgICAgMCAgIC0gU0RSQU0gcGFydGl0aW9uIDIgZGlzYWJsZWQKKyAqIFsxNToxM10gICAwMDAgLSByZXNlcnZlZAorICogWzEyXSAgICAgIDEJIC0gU0ExMTExIGNvbXBhdGlibGl0eSBtb2RlCisgKiBbMTFdICAgICAgMSAgIC0gbGF0Y2ggcmV0dXJuIGRhdGEgd2l0aCByZXR1cm4gY2xvY2sKKyAqIFsxMF0gICAgICAwICAgLSBubyBhbHRlcm5hdGUgYWRkcmVzc2luZyBmb3IgcGFpciAwLzEKKyAqIFswOTowOF0gICAwMSAgLSB0UlA9MipNZW1DbGs7IENMPTI7IHRSQ0Q9MipNZW1DbGs7IHRSQVM9NSpNZW1DbGs7IHRSQz04Kk1lbUNsaworICogWzddICAgICAgIDEgICAtIDQgaW50ZXJuYWwgYmFua3MgaW4gbG93ZXIgcGFydGl0aW9uIHBhaXIKKyAqIFswNjowNV0gICAxMCAgLSAxMyByb3cgYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMC8xCisgKiBbMDQ6MDNdICAgMDEgIC0gOSBjb2x1bW4gYWRkcmVzcyBiaXRzIGZvciBwYXJ0aXRpb24gMC8xCisgKiBbMDJdICAgICAgMCAgIC0gU0RSQU0gcGFydGl0aW9uIDAvMSB3aWR0aCBpcyAzMiBiaXQKKyAqIFswMV0gICAgICAwICAgLSBkaXNhYmxlIFNEUkFNIHBhcnRpdGlvbiAxCisgKiBbMDBdICAgICAgMSAgIC0gZW5hYmxlICBTRFJBTSBwYXJ0aXRpb24gMAorICoKKyAqIHVzZSB0aGUgY29uZmlndXJhdGlvbiBhYm92ZSBidXQgZGlzYWJsZSBwYXJ0aXRpb24gMAorICovCisjZGVmaW5lIENGR19NRENORkdfVkFMCQkweDAwMDAxOWM4CisKKy8qIE1EUkVGUjogU0RSQU0gUmVmcmVzaCBDb250cm9sIFJlZ2lzdGVyCisgKgorICogWzMyOjI2XSAwICAgICAtIHJlc2VydmVkCisgKiBbMjVdICAgIDAgICAgIC0gSzJGUkVFOiBub3QgZnJlZSBydW5uaW5nCisgKiBbMjRdICAgIDAgICAgIC0gSzFGUkVFOiBub3QgZnJlZSBydW5uaW5nCisgKiBbMjNdICAgIDAgICAgIC0gSzBGUkVFOiBub3QgZnJlZSBydW5uaW5nCisgKiBbMjJdICAgIDAgICAgIC0gU0xGUlNIOiBzZWxmIHJlZnJlc2ggZGlzYWJsZWQKKyAqIFsyMV0gICAgMCAgICAgLSByZXNlcnZlZAorICogWzIwXSAgICAwICAgICAtIEFQRDogbm8gYXV0byBwb3dlciBkb3duCisgKiBbMTldICAgIDAgICAgIC0gSzJEQjI6IFNEQ0xLMiBpcyBNZW1DbGsKKyAqIFsxOF0gICAgMCAgICAgLSBLMlJVTjogZGlzYWJsZSBTRENMSzIKKyAqIFsxN10gICAgMCAgICAgLSBLMURCMjogU0RDTEsxIGlzIE1lbUNsaworICogWzE2XSAgICAxICAgICAtIEsxUlVOOiBlbmFibGUgU0RDTEsxCisgKiBbMTVdICAgIDEgICAgIC0gRTFQSU46IFNEUkFNIGNsb2NrIGVuYWJsZQorICogWzE0XSAgICAxICAgICAtIEswREIyOiBTRENMSzAgaXMgTWVtQ2xrCisgKiBbMTNdICAgIDEgICAgIC0gSzBSVU46IGRpc2FibGUgU0RDTEswCisgKiBbMTJdICAgIDEgICAgIC0gRTBQSU46IGRpc2FibGUgU0RDS0UwCisgKiBbMTE6MDBdIDAwMDAwMDAxMTAwMCAtICg2NG1zLzgxOTIpKk1lbUNsa0ZyZXEvMzIgPSAyNAorICovCisjZGVmaW5lIENGR19NRFJFRlJfVkFMCQkweDAwMDFGMDE4CisKKy8qIE1ETVJTOiBNb2RlIFJlZ2lzdGVyIFNldCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKgorICogWzMxXSAgICAgIDAgICAgICAgLSByZXNlcnZlZAorICogWzMwOjIzXSAgIDAwMDAwMDAwLSBNRE1SUzI6IFNEUkFNMi8zIE1SUyBWYWx1ZS4gKG5vdCB1c2VkKQorICogWzIyOjIwXSAgIDAwMCAgICAgLSBNRENMMjogIFNEUkFNMi8zIENhcyBMYXRlbmN5LiAgKG5vdCB1c2VkKQorICogWzE5XSAgICAgIDAgICAgICAgLSBNREFERDI6IFNEUkFNMi8zIGJ1cnN0IFR5cGUuIEZpeGVkIHRvIHNlcXVlbnRpYWwuICAobm90IHVzZWQpCisgKiBbMTg6MTZdICAgMDEwICAgICAtIE1EQkwyOiAgU0RSQU0yLzMgYnVyc3QgTGVuZ3RoLiBGaXhlZCB0byA0LiAgKG5vdCB1c2VkKQorICogWzE1XSAgICAgIDAgICAgICAgLSByZXNlcnZlZAorICogWzE0OjA3XSAgIDAwMDAwMDAwLSBNRE1SUzA6IFNEUkFNMC8xIE1SUyBWYWx1ZS4KKyAqIFswNjowNF0gICAwMTAgICAgIC0gTURDTDA6ICBTRFJBTTAvMSBDYXMgTGF0ZW5jeS4KKyAqIFswM10gICAgICAwICAgICAgIC0gTURBREQwOiBTRFJBTTAvMSBidXJzdCBUeXBlLiBGaXhlZCB0byBzZXF1ZW50aWFsLgorICogWzAyOjAwXSAgIDAxMCAgICAgLSBNREJMMDogIFNEUkFNMC8xIGJ1cnN0IExlbmd0aC4gRml4ZWQgdG8gNC4KKyAqLworI2RlZmluZSBDRkdfTURNUlNfVkFMCQkweDAwMDIwMDIyCisKKy8qCisgKiBQQ01DSUEgYW5kIENGIEludGVyZmFjZXMKKyAqLworI2RlZmluZSBDRkdfTUVDUl9WQUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01DTUVNMF9WQUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01DTUVNMV9WQUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01DQVRUMF9WQUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01DQVRUMV9WQUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01DSU8wX1ZBTAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfTUNJTzFfVkFMCQkweDAwMDAwMDAwCisKKy8qCisjZGVmaW5lIENTQjIyNl9VU0VSX0xFRDAJMHgwMDAwMDAwOAorI2RlZmluZSBDU0IyMjZfVVNFUl9MRUQxCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1NCMjI2X1VTRVJfTEVEMgkweDAwMDAwMDIwCisqLworCisvKgorICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MgICAgIDEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgICAgICAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTEyOAkvKiBtYXggbnVtYmVyIG9mIHNlY3QuIG9uIG9uZSBjaGlwICAqLworCisvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgICAgKDIqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVCAgICAoMipDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICAgICAgICovCisKKyNpZiAwCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX0FERFIgICAgICAgICAgICAoUEhZU19GTEFTSF8xICsgMHgxQzAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGRyIG9mIEVudmlyb25tZW50IFNlY3RvciAgICAgICAqLworI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgICAweDQwMDAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZW5kaWYKKworI2VuZGlmICAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdHJhYi5oIGIvaW5jbHVkZS9jb25maWdzL3RyYWIuaAppbmRleCAwODYyOTRlLi4wNmFlZDkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy90cmFiLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgCSJjb25zb2xlPXR0eVMwIgogI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgICAgICAyNTUuMjU1LjAuMAogI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjMuNjgKKyNkZWZpbmUgQ09ORklHX0hPU1ROQU1FCQl0cmFiCiAjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4zLjEKICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gZmxhc2hfbmZzIgogI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCVwKQEAgLTIyMCw3ICsyMjEsMTEgQEAKICAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KICAqLwogI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNpZm5kZWYgQ09ORklHX0JJR19GTEFTSAorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNzEJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjZWxzZQogI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMTI4CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI2VuZGlmCiAKIC8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLwogI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoMipDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCkBAIC0yMjksMTEgKzIzNCwxOCBAQAogI2RlZmluZQlDRkdfRU5WX0lTX0lOX0ZMQVNICTEKIAogLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBQcmltYXJ5IEVudmlyb25tZW50IFNlY3RvcgkqLworI2lmbmRlZiBDT05GSUdfQklHX0ZMQVNICiAjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgMHg0MDAwKQogI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAorI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAKKyNlbHNlCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgMHg0MDAwMCkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDQwMDAKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgyMDAwMAorI2VuZGlmCiAKIC8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUmVkdW5kYW50IEVudmlyb25tZW50IFNlY3RvcgkqLwotI2RlZmluZSBDRkdfRU5WX09GRlNFVF9SRURVTkQJKENGR19FTlZfQUREUitDRkdfRU5WX1NJWkUpCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUX1JFRFVORAkoQ0ZHX0VOVl9BRERSK0NGR19FTlZfU0VDVF9TSVpFKQogI2RlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECShDRkdfRU5WX1NJWkUpCiAKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90b29scy9lbnZjcmMuYyBiL3Rvb2xzL2VudmNyYy5jCmluZGV4IGM1OWY3ZDUuLjE5ZmUxN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmNyYy5jCisrKyBiL3Rvb2xzL2VudmNyYy5jCkBAIC0zNiwxNSArMzYsMzMgQEAKICMgaWZuZGVmICBDRkdfRU5WX09GRlNFVAogIyAgZGVmaW5lIENGR19FTlZfT0ZGU0VUIChDRkdfRU5WX0FERFIgLSBDRkdfRkxBU0hfQkFTRSkKICMgZW5kaWYKKyMgaWYgIWRlZmluZWQoQ0ZHX0VOVl9BRERSX1JFRFVORCkgJiYgZGVmaW5lZChDRkdfRU5WX09GRlNFVF9SRURVTkQpCisjICBkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0ZMQVNIX0JBU0UgKyBDRkdfRU5WX09GRlNFVF9SRURVTkQpCisjIGVuZGlmCiAjIGlmbmRlZiAgQ0ZHX0VOVl9TSVpFCiAjICBkZWZpbmUgQ0ZHX0VOVl9TSVpFCUNGR19FTlZfU0VDVF9TSVpFCiAjIGVuZGlmCisjIGlmIGRlZmluZWQoQ0ZHX0VOVl9BRERSX1JFRFVORCkgJiYgIWRlZmluZWQoQ0ZHX0VOVl9TSVpFX1JFRFVORCkKKyMgIGRlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECUNGR19FTlZfU0laRQorIyBlbmRpZgotIyBpZiAoKENGR19FTlZfQUREUiA+PSBDRkdfTU9OSVRPUl9CQVNFKSAmJiBcCi0gICAgICgoQ0ZHX0VOVl9BRERSK0NGR19FTlZfU0laRSkgPD0gKENGR19NT05JVE9SX0JBU0UgKyBDRkdfTU9OSVRPUl9MRU4pKSkKLSMgIGRlZmluZSBFTlZfSVNfRU1CRURERUQKKyMgaWYgKENGR19FTlZfQUREUiA+PSBDRkdfTU9OSVRPUl9CQVNFKSAmJiBcCisgICAgICgoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFKSA8PSAoQ0ZHX01PTklUT1JfQkFTRSArIENGR19NT05JVE9SX0xFTikpCisjICBkZWZpbmUgRU5WX0lTX0VNQkVEREVECTEKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChDRkdfRU5WX0FERFJfUkVEVU5EKSB8fCBkZWZpbmVkKENGR19FTlZfT0ZGU0VUX1JFRFVORCkKKyMgIGRlZmluZSBDRkdfUkVEVU5EQU5EX0VOVklST05NRU5UCTEKICMgZW5kaWYKICNlbmRpZgkvKiBDRkdfRU5WX0lTX0lOX0ZMQVNIICovCiAKKyNpZmRlZiBDRkdfUkVEVU5EQU5EX0VOVklST05NRU5UCisjIGRlZmluZSBFTlZfSEVBREVSX1NJWkUJKHNpemVvZih1bnNpZ25lZCBsb25nKSArIDEpCisjZWxzZQorIyBkZWZpbmUgRU5WX0hFQURFUl9TSVpFCShzaXplb2YodW5zaWduZWQgbG9uZykpCisjZW5kaWYKKworI2RlZmluZSBFTlZfU0laRSAoQ0ZHX0VOVl9TSVpFIC0gRU5WX0hFQURFUl9TSVpFKQorCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNyYzMyICh1bnNpZ25lZCBsb25nLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7CiAKICNpZmRlZglFTlZfSVNfRU1CRURERUQKQEAgLTU3LDkgKzc1LDggQEAKICNpZmRlZglFTlZfSVNfRU1CRURERUQKICAgICBpbnQgY3JjIDsKICAgICB1bnNpZ25lZCBjaGFyIAkqZW52cHRyIAk9ICZlbnZpcm9ubWVudCwKLQkJCSpkYXRhcHRyIAk9IGVudnB0ciArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgMTsKLSAgICB1bnNpZ25lZCBpbnQJZGF0YXNpemUgCT0gZW52X3NpemUgLSAoZGF0YXB0ciAtIGVudnB0cikgOwotCisJCQkqZGF0YXB0ciAJPSBlbnZwdHIgKyBFTlZfSEVBREVSX1NJWkU7CisgICAgdW5zaWduZWQgaW50CWRhdGFzaXplIAk9IEVOVl9TSVpFOwogCiAgICAgY3JjID0gY3JjMzIoMCwgZGF0YXB0ciwgZGF0YXNpemUpIDsKIAo=