ZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQppbmRleCA5ZDExNGExLi40ODYwY2NhIDEwMDY0NAotLS0gYS9OT1RJQ0UKKysrIGIvTk9USUNFCkBAIC01Miw3ICs1Miw3IEBACiAgIGVuY291cmFnZSB5b3UgdG8gdXNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKIAogICAgIiIiICAKLSAgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBjb3B5cmlnaHQgqSA8eWVhcj4gVGhlIEZyZWVUeXBlCisgICAgUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgY29weXJpZ2h0IMKpIDx5ZWFyPiBUaGUgRnJlZVR5cGUKICAgICBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAiIiIKIApkaWZmIC0tZ2l0IGEvUkVBRE1FLmFuZHJvaWQgYi9SRUFETUUuYW5kcm9pZAppbmRleCBlZDYxOTA3Li4zZjU5OWEwIDEwMDY0NAotLS0gYS9SRUFETUUuYW5kcm9pZAorKysgYi9SRUFETUUuYW5kcm9pZApAQCAtMSw0ICsxLDIxIEBACiBGcmVldHlwZQogCi1Ob3QgYWxsIG1vZHVsZXMgaW4gaW5jbHVkZS9jb25maWcvZnRtb2R1bGUuaCBhcmUgZW5hYmxlZC4KLVNvbWUgb3B0aW9ucyBpbiBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oIGFyZSBlbmFibGVkL2Rpc2FibGVkLgorVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBkaXNhYmxlZCBpbiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oOgorICB0MQorICB0MWNpZAorICBwZnIKKyAgdDQyCisgIHdpbmZudAorICBwY2YKKyAgcHNhdXgKKyAgYmRmCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZGlzYWJsZWQgaW4gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDoKKworICBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKworVGhlIGZvbGxvd2luZyBvcHRpb24gaXMgZW5hYmxlZCB0byBzdXBwb3J0IGNvbG9yIGZvbnRzLgorCisgIEZUX0NPTkZJR19PUFRJT05fVVNFX1BORwpkaWZmIC0tZ2l0IGEvUkVBRE1FLnZlcnNpb24gYi9SRUFETUUudmVyc2lvbgppbmRleCBjOTM1NjkwLi42ZDU3MDI1IDEwMDY0NAotLS0gYS9SRUFETUUudmVyc2lvbgorKysgYi9SRUFETUUudmVyc2lvbgpAQCAtMSwzICsxLDMgQEAKLVVSTDogaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMvZnJlZXR5cGUvZnJlZXR5cGUtMi41LjMudGFyLmJ6MgotVmVyc2lvbjogMi41LjMKK1VSTDogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZnJlZXR5cGUvZnJlZXR5cGUyLmdpdC9jb21taXQvP2lkPWMzOGJlNTJiCitWZXJzaW9uOiBjMzhiZTUyYmY4ZGUzYjE2OTlkNzQ5MzJiODQ5YmYxNTAyNjU4MTllICgyLjcgKyB1cGRhdGUpCiBCdWdDb21wb25lbnQ6IDc1OTcwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCmluZGV4IDA4NmRiNzYuLjE1N2E3MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBTlNJLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzUsOCArMzUsOCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19GVENPTkZJR19IX18KLSNkZWZpbmUgX19GVENPTkZJR19IX18KKyNpZm5kZWYgRlRDT05GSUdfSF8KKyNkZWZpbmUgRlRDT05GSUdfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfT1BUSU9OU19ICkBAIC0yNzUsNyArMjc1LDEzIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2VsaWYgIWRlZmluZWQoIF9fU1REQ19fICkgfHwgZGVmaW5lZCggRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCApCiAKLSNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICYmIF9NU0NfVkVSID49IDkwMCAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KKyNpZiBkZWZpbmVkKCBfX1NURENfVkVSU0lPTl9fICkgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKKworI2VsaWYgZGVmaW5lZCggX01TQ19WRVIgKSAmJiBfTVNDX1ZFUiA+PSA5MDAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCiAKICAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgX19pbnQ2NCB0eXBlICovCiAjZGVmaW5lIEZUX0xPTkc2NApAQCAtMzA5LDcgKzMxNSw3IEBACiAjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAogI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKIAotI2VuZGlmIC8qIF9NU0NfVkVSICovCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCiAKICNlbmRpZiAvKiBGVF9TSVpFT0ZfTE9ORyA9PSAoNjQgLyBGVF9DSEFSX0JJVCkgKi8KIApAQCAtMzM1LDkgKzM0MSw5IEBACiAjaWYgKCBfX0dOVUNfXyA+PSAyICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKICAgICAgIGRlZmluZWQoIF9fSUJNX19UWVBFT0ZfXyApICAgICAgICAgICAgfHwgXAogICAgICAgKCBfX1NVTlBST19DID49IDB4NTExMCAmJiAhX19TVERDX18gKSApCi0jZGVmaW5lIFRZUEVPRiggdHlwZSApICAoX190eXBlb2ZfXyAodHlwZSkpCisjZGVmaW5lIEZUX1RZUEVPRiggdHlwZSApICAoX190eXBlb2ZfXyAodHlwZSkpCiAjZWxzZQotI2RlZmluZSBUWVBFT0YoIHR5cGUgKSAgLyogZW1wdHkgKi8KKyNkZWZpbmUgRlRfVFlQRU9GKCB0eXBlICkgIC8qIGVtcHR5ICovCiAjZW5kaWYKIAogCkBAIC00NjEsNyArNDY3LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19GVENPTkZJR19IX18gKi8KKyNlbmRpZiAvKiBGVENPTkZJR19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWcvZnRoZWFkZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9jb25maWcvZnRoZWFkZXIuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaAppbmRleCA0OTA2YmMxLi42OGUxNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZy9mdGhlYWRlci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQnVpbGQgbWFjcm9zIG9mIHRoZSBGcmVlVHlwZSAyIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE1LDggKzE1LDggQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fRlRfSEVBREVSX0hfXwotI2RlZmluZSBfX0ZUX0hFQURFUl9IX18KKyNpZm5kZWYgRlRIRUFERVJfSF8KKyNkZWZpbmUgRlRIRUFERVJfSF8KIAogCiAgIC8qQCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAqCiAgICAqLwogI2lmbmRlZiBGVF9DT05GSUdfQ09ORklHX0gKLSNkZWZpbmUgRlRfQ09ORklHX0NPTkZJR19IICA8Y29uZmlnL2Z0Y29uZmlnLmg+CisjZGVmaW5lIEZUX0NPTkZJR19DT05GSUdfSCAgPGZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oPgogI2VuZGlmCiAKIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAqCiAgICAqLwogI2lmbmRlZiBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICi0jZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggIDxjb25maWcvZnRzdGRsaWIuaD4KKyNkZWZpbmUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSCAgPGZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oPgogI2VuZGlmCiAKIApAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAqCiAgICAqLwogI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OU19ICi0jZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggIDxjb25maWcvZnRvcHRpb24uaD4KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAgPGZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oPgogI2VuZGlmCiAKIApAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAqCiAgICAqLwogI2lmbmRlZiBGVF9DT05GSUdfTU9EVUxFU19ICi0jZGVmaW5lIEZUX0NPTkZJR19NT0RVTEVTX0ggIDxjb25maWcvZnRtb2R1bGUuaD4KKyNkZWZpbmUgRlRfQ09ORklHX01PRFVMRVNfSCAgPGZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oPgogI2VuZGlmCiAKICAgLyogKi8KQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgKiAgIGJhc2UgRnJlZVR5cGV+MiBBUEkuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9GUkVFVFlQRV9IICA8ZnJlZXR5cGUuaD4KKyNkZWZpbmUgRlRfRlJFRVRZUEVfSCAgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAqICAgSXQgaXMgaW5jbHVkZWQgYnkgQEZUX0ZSRUVUWVBFX0guCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9FUlJPUlNfSCAgPGZ0ZXJyb3JzLmg+CisjZGVmaW5lIEZUX0VSUk9SU19IICA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICogICBsaXN0IG9mIEZyZWVUeXBlfjIgbW9kdWxlIGVycm9yIG9mZnNldHMgKGFuZCBtZXNzYWdlcykuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9NT0RVTEVfRVJST1JTX0ggIDxmdG1vZGVyci5oPgorI2RlZmluZSBGVF9NT0RVTEVfRVJST1JTX0ggIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIxNCw3ICsyMTQsNyBAQAogICAgKiAgIEl0IGlzIGluY2x1ZGVkIGJ5IEBGVF9GUkVFVFlQRV9ILgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfU1lTVEVNX0ggIDxmdHN5c3RlbS5oPgorI2RlZmluZSBGVF9TWVNURU1fSCAgPGZyZWV0eXBlL2Z0c3lzdGVtLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAqICAgSXQgaXMgaW5jbHVkZWQgYnkgQEZUX0ZSRUVUWVBFX0guCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9JTUFHRV9IICA8ZnRpbWFnZS5oPgorI2RlZmluZSBGVF9JTUFHRV9IICA8ZnJlZXR5cGUvZnRpbWFnZS5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgKiAgIEl0IGlzIGluY2x1ZGVkIGJ5IEBGVF9GUkVFVFlQRV9ILgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfVFlQRVNfSCAgPGZ0dHlwZXMuaD4KKyNkZWZpbmUgRlRfVFlQRVNfSCAgPGZyZWV0eXBlL2Z0dHlwZXMuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICogICAoTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCBuZXZlciBuZWVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlLikKICAgICoKICAgICovCi0jZGVmaW5lIEZUX0xJU1RfSCAgPGZ0bGlzdC5oPgorI2RlZmluZSBGVF9MSVNUX0ggIDxmcmVldHlwZS9mdGxpc3QuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNzMsNyArMjczLDcgQEAKICAgICogICBzY2FsYWJsZSBvdXRsaW5lIG1hbmFnZW1lbnQgQVBJIG9mIEZyZWVUeXBlfjIuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9PVVRMSU5FX0ggIDxmdG91dGxuLmg+CisjZGVmaW5lIEZUX09VVExJTkVfSCAgPGZyZWV0eXBlL2Z0b3V0bG4uaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yODYsNyArMjg2LDcgQEAKICAgICogICBBUEkgd2hpY2ggbWFuYWdlcyBtdWx0aXBsZSBARlRfU2l6ZSBvYmplY3RzIHBlciBmYWNlLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfU0laRVNfSCAgPGZ0c2l6ZXMuaD4KKyNkZWZpbmUgRlRfU0laRVNfSCAgPGZyZWV0eXBlL2Z0c2l6ZXMuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTksNyArMjk5LDcgQEAKICAgICogICBtb2R1bGUgbWFuYWdlbWVudCBBUEkgb2YgRnJlZVR5cGV+Mi4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX01PRFVMRV9IICA8ZnRtb2RhcGkuaD4KKyNkZWZpbmUgRlRfTU9EVUxFX0ggIDxmcmVldHlwZS9mdG1vZGFwaS5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMxMiw3ICszMTIsNyBAQAogICAgKiAgIHJlbmRlcmVyIG1vZHVsZSBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfUkVOREVSX0ggIDxmdHJlbmRlci5oPgorI2RlZmluZSBGVF9SRU5ERVJfSCAgPGZyZWV0eXBlL2Z0cmVuZGVyLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzI1LDcgKzMyNSw3IEBACiAgICAqICAgc3RydWN0dXJlcyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gdGhlIGF1dG8taGludGluZyBtb2R1bGUuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9BVVRPSElOVEVSX0ggIDxmdGF1dG9oLmg+CisjZGVmaW5lIEZUX0FVVE9ISU5URVJfSCAgPGZyZWV0eXBlL2Z0YXV0b2guaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzgsNyArMzM4LDcgQEAKICAgICogICBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgcmVsYXRlZCB0byB0aGUgQ0ZGIGRyaXZlciBtb2R1bGUuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9DRkZfRFJJVkVSX0ggIDxmdGNmZmRydi5oPgorI2RlZmluZSBGVF9DRkZfRFJJVkVSX0ggIDxmcmVldHlwZS9mdGNmZmRydi5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM1MSw3ICszNTEsNyBAQAogICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBUcnVlVHlwZSBkcml2ZXIgbW9kdWxlLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfVFJVRVRZUEVfRFJJVkVSX0ggIDxmdHR0ZHJ2Lmg+CisjZGVmaW5lIEZUX1RSVUVUWVBFX0RSSVZFUl9IICA8ZnJlZXR5cGUvZnR0dGRydi5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgKiAgIHR5cGVzIGFuZCBBUEkgc3BlY2lmaWMgdG8gdGhlIFR5cGV+MSBmb3JtYXQuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9UWVBFMV9UQUJMRVNfSCAgPHQxdGFibGVzLmg+CisjZGVmaW5lIEZUX1RZUEUxX1RBQkxFU19IICA8ZnJlZXR5cGUvdDF0YWJsZXMuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzksNyArMzc5LDcgQEAKICAgICogICBkZWZpbml0aW9ucywgdGFrZW4gZnJvbSB0aGUgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIHNwZWNpZmljYXRpb25zLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfVFJVRVRZUEVfSURTX0ggIDx0dG5hbWVpZC5oPgorI2RlZmluZSBGVF9UUlVFVFlQRV9JRFNfSCAgPGZyZWV0eXBlL3R0bmFtZWlkLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzkyLDcgKzM5Miw3IEBACiAgICAqICAgdHlwZXMgYW5kIEFQSSBzcGVjaWZpYyB0byB0aGUgVHJ1ZVR5cGUgKGFzIHdlbGwgYXMgT3BlblR5cGUpIGZvcm1hdC4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1RSVUVUWVBFX1RBQkxFU19IICA8dHR0YWJsZXMuaD4KKyNkZWZpbmUgRlRfVFJVRVRZUEVfVEFCTEVTX0ggIDxmcmVldHlwZS90dHRhYmxlcy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQwNiw3ICs0MDYsNyBAQAogICAgKiAgIFNGTlQtYmFzZWQgZm9udCBmb3JtYXRzIChpLmUuLCBUcnVlVHlwZSBhbmQgT3BlblR5cGUpLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfVFJVRVRZUEVfVEFHU19IICA8dHR0YWdzLmg+CisjZGVmaW5lIEZUX1RSVUVUWVBFX1RBR1NfSCAgPGZyZWV0eXBlL3R0dGFncy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQyMCw3ICs0MjAsNyBAQAogICAgKiAgIGZhY2UuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9CREZfSCAgPGZ0YmRmLmg+CisjZGVmaW5lIEZUX0JERl9IICA8ZnJlZXR5cGUvZnRiZGYuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICogICBmYWNlLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfQ0lEX0ggIDxmdGNpZC5oPgorI2RlZmluZSBGVF9DSURfSCAgPGZyZWV0eXBlL2Z0Y2lkLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIGd6aXAtY29tcHJlc3NlZCBmaWxlcy4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0daSVBfSCAgPGZ0Z3ppcC5oPgorI2RlZmluZSBGVF9HWklQX0ggIDxmcmVldHlwZS9mdGd6aXAuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICogICBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggc3VwcG9ydHMgTFpXLWNvbXByZXNzZWQgZmlsZXMuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9MWldfSCAgPGZ0bHp3Lmg+CisjZGVmaW5lIEZUX0xaV19IICA8ZnJlZXR5cGUvZnRsencuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NzMsNyArNDczLDcgQEAKICAgICogICBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggc3VwcG9ydHMgYnppcDItY29tcHJlc3NlZCBmaWxlcy4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0JaSVAyX0ggIDxmdGJ6aXAyLmg+CisjZGVmaW5lIEZUX0JaSVAyX0ggIDxmcmVldHlwZS9mdGJ6aXAyLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDg2LDcgKzQ4Niw3IEBACiAgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIFdpbmRvd3MgRk5UIGZpbGVzLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfV0lORk9OVFNfSCAgIDxmdHdpbmZudC5oPgorI2RlZmluZSBGVF9XSU5GT05UU19IICAgPGZyZWV0eXBlL2Z0d2luZm50Lmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAqICAgQVBJIG9mIHRoZSBvcHRpb25hbCBnbHlwaCBtYW5hZ2VtZW50IGNvbXBvbmVudC4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0dMWVBIX0ggIDxmdGdseXBoLmg+CisjZGVmaW5lIEZUX0dMWVBIX0ggIDxmcmVldHlwZS9mdGdseXBoLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTEyLDcgKzUxMiw3IEBACiAgICAqICAgQVBJIG9mIHRoZSBvcHRpb25hbCBiaXRtYXAgY29udmVyc2lvbiBjb21wb25lbnQuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9CSVRNQVBfSCAgPGZ0Yml0bWFwLmg+CisjZGVmaW5lIEZUX0JJVE1BUF9IICA8ZnJlZXR5cGUvZnRiaXRtYXAuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MjUsNyArNTI1LDcgQEAKICAgICogICBBUEkgb2YgdGhlIG9wdGlvbmFsIGV4YWN0IGJvdW5kaW5nIGJveCBjb21wdXRhdGlvbiByb3V0aW5lcy4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0JCT1hfSCAgPGZ0YmJveC5oPgorI2RlZmluZSBGVF9CQk9YX0ggIDxmcmVldHlwZS9mdGJib3guaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MzgsNyArNTM4LDcgQEAKICAgICogICBBUEkgb2YgdGhlIG9wdGlvbmFsIEZyZWVUeXBlfjIgY2FjaGUgc3ViLXN5c3RlbS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0NBQ0hFX0ggIDxmdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0ggIDxmcmVldHlwZS9mdGNhY2hlLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjEyLDcgKzYxMiw3IEBACiAgICAqICAgY29tcGlsZWQgb24gdGhlIE1hYyAobm90ZSB0aGF0IHRoZSBiYXNlIEFQSSBzdGlsbCB3b3JrcyB0aG91Z2gpLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfTUFDX0ggIDxmdG1hYy5oPgorI2RlZmluZSBGVF9NQUNfSCAgPGZyZWV0eXBlL2Z0bWFjLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjI1LDcgKzYyNSw3IEBACiAgICAqICAgb3B0aW9uYWwgbXVsdGlwbGUtbWFzdGVycyBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfTVVMVElQTEVfTUFTVEVSU19IICA8ZnRtbS5oPgorI2RlZmluZSBGVF9NVUxUSVBMRV9NQVNURVJTX0ggIDxmcmVldHlwZS9mdG1tLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjM5LDcgKzYzOSw3IEBACiAgICAqICAgU0ZOVC1iYXNlZCBmb250IGZvcm1hdHMgKGkuZS4sIFRydWVUeXBlIGFuZCBPcGVuVHlwZSkuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9TRk5UX05BTUVTX0ggIDxmdHNuYW1lcy5oPgorI2RlZmluZSBGVF9TRk5UX05BTUVTX0ggIDxmcmVldHlwZS9mdHNuYW1lcy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTY1Myw3ICs2NTMsNyBAQAogICAgKiAgIEdQT1MsIEdTVUIsIEpTVEYpLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGZ0b3R2YWwuaD4KKyNkZWZpbmUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGZyZWV0eXBlL2Z0b3R2YWwuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NjcsNyArNjY3LDcgQEAKICAgICogICBtb3J0LCBtb3J4LCBic2xuLCBqdXN0LCBrZXJuLCBvcGJkLCB0cmFrLCBwcm9wKS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0dYX1ZBTElEQVRFX0ggIDxmdGd4dmFsLmg+CisjZGVmaW5lIEZUX0dYX1ZBTElEQVRFX0ggIDxmcmVldHlwZS9mdGd4dmFsLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjgwLDcgKzY4MCw3IEBACiAgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggYWNjZXNzZXMgUEZSLXNwZWNpZmljIGRhdGEuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9QRlJfSCAgPGZ0cGZyLmg+CisjZGVmaW5lIEZUX1BGUl9IICA8ZnJlZXR5cGUvZnRwZnIuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02OTIsNyArNjkyLDcgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCiAgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHN0cm9rZSBvdXRsaW5lIHBhdGhzLgogICAgKi8KLSNkZWZpbmUgRlRfU1RST0tFUl9IICA8ZnRzdHJva2UuaD4KKyNkZWZpbmUgRlRfU1RST0tFUl9IICA8ZnJlZXR5cGUvZnRzdHJva2UuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MDQsNyArNzA0LDcgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCiAgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcGVyZm9ybXMgYXJ0aWZpY2lhbCBvYmxpcXVpbmcgYW5kIGVtYm9sZGVuaW5nLgogICAgKi8KLSNkZWZpbmUgRlRfU1lOVEhFU0lTX0ggIDxmdHN5bnRoLmg+CisjZGVmaW5lIEZUX1NZTlRIRVNJU19IICA8ZnJlZXR5cGUvZnRzeW50aC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTcxNiw3ICs3MTYsNyBAQAogICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKICAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwcm92aWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gZm9udCBmb3JtYXRzLgogICAgKi8KLSNkZWZpbmUgRlRfRk9OVF9GT1JNQVRTX0ggIDxmdGZudGZtdC5oPgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVFNfSCAgPGZyZWV0eXBlL2Z0Zm50Zm10Lmg+CiAKICAgLyogZGVwcmVjYXRlZCAqLwogI2RlZmluZSBGVF9YRlJFRTg2X0ggIEZUX0ZPTlRfRk9STUFUU19ICkBAIC03MzIsNyArNzMyLDcgQEAKICAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyB0cmlnb25vbWV0cmljIGNvbXB1dGF0aW9ucyAoZS5nLiwKICAgICogICBjb3NpbmVzIGFuZCBhcmMgdGFuZ2VudHMpLgogICAgKi8KLSNkZWZpbmUgRlRfVFJJR09OT01FVFJZX0ggIDxmdHRyaWdvbi5oPgorI2RlZmluZSBGVF9UUklHT05PTUVUUllfSCAgPGZyZWV0eXBlL2Z0dHJpZ29uLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzQ0LDcgKzc0NCw3IEBACiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHBlcmZvcm1zIGNvbG9yIGZpbHRlcmluZyBmb3Igc3VicGl4ZWwgcmVuZGVyaW5nLgogICAgKi8KLSNkZWZpbmUgRlRfTENEX0ZJTFRFUl9IICA8ZnRsY2RmaWwuaD4KKyNkZWZpbmUgRlRfTENEX0ZJTFRFUl9IICA8ZnJlZXR5cGUvZnRsY2RmaWwuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03NTMsMTAgKzc1Myw5IEBACiAgICAqICAgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0gKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKLSAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyBjb2xvciBmaWx0ZXJpbmcgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KKyAgICogICBEZXByZWNhdGVkLgogICAgKi8KLSNkZWZpbmUgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0ggIDx0dHVucGF0Lmg+CisjZGVmaW5lIEZUX1VOUEFURU5URURfSElOVElOR19IICA8ZnJlZXR5cGUvdHR1bnBhdC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc2Niw5ICs3NjUsOSBAQAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQotICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHBlcmZvcm1zIGNvbG9yIGZpbHRlcmluZyBmb3Igc3VicGl4ZWwgcmVuZGVyaW5nLgorICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHBlcmZvcm1zIGluY3JlbWVudGFsIGdseXBoIGxvYWRpbmcuCiAgICAqLwotI2RlZmluZSBGVF9JTkNSRU1FTlRBTF9IICA8ZnRpbmNyZW0uaD4KKyNkZWZpbmUgRlRfSU5DUkVNRU5UQUxfSCAgPGZyZWV0eXBlL2Z0aW5jcmVtLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzgwLDcgKzc3OSw3IEBACiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHJldHVybnMgZW50cmllcyBmcm9tIHRoZSBUcnVlVHlwZSBHQVNQIHRhYmxlLgogICAgKi8KLSNkZWZpbmUgRlRfR0FTUF9IICA8ZnRnYXNwLmg+CisjZGVmaW5lIEZUX0dBU1BfSCAgPGZyZWV0eXBlL2Z0Z2FzcC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc5MiwzMCArNzkxLDMwIEBACiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHJldHVybnMgaW5kaXZpZHVhbCBhbmQgcmFuZ2VkIGdseXBoIGFkdmFuY2VzLgogICAgKi8KLSNkZWZpbmUgRlRfQURWQU5DRVNfSCAgPGZ0YWR2YW5jLmg+CisjZGVmaW5lIEZUX0FEVkFOQ0VTX0ggIDxmcmVldHlwZS9mdGFkdmFuYy5oPgogCiAKICAgLyogKi8KIAotI2RlZmluZSBGVF9FUlJPUl9ERUZJTklUSU9OU19IICA8ZnRlcnJkZWYuaD4KKyNkZWZpbmUgRlRfRVJST1JfREVGSU5JVElPTlNfSCAgPGZyZWV0eXBlL2Z0ZXJyZGVmLmg+CiAKIAogICAvKiBUaGUgaW50ZXJuYWxzIG9mIHRoZSBjYWNoZSBzdWItc3lzdGVtIGFyZSBubyBsb25nZXIgZXhwb3NlZC4gIFdlICovCiAgIC8qIGRlZmF1bHQgdG8gRlRfQ0FDSEVfSCBhdCB0aGUgbW9tZW50IGp1c3QgaW4gY2FzZSwgYnV0IHdlIGtub3cgb2YgKi8KICAgLyogbm8gcm9ndWUgY2xpZW50IHRoYXQgdXNlcyB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX0NBQ0hFX01BTkFHRVJfSCAgICAgICAgICAgPGZ0Y2FjaGUuaD4KLSNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfTVJVX0ggICAgICA8ZnRjYWNoZS5oPgotI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9NQU5BR0VSX0ggIDxmdGNhY2hlLmg+Ci0jZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0NBQ0hFX0ggICAgPGZ0Y2FjaGUuaD4KLSNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfR0xZUEhfSCAgICA8ZnRjYWNoZS5oPgotI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9JTUFHRV9IICAgIDxmdGNhY2hlLmg+Ci0jZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX1NCSVRTX0ggICAgPGZ0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfTUFOQUdFUl9IICAgICAgICAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9NUlVfSCAgICAgIDxmcmVldHlwZS9mdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX01BTkFHRVJfSCAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfQ0FDSEVfSCAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9HTFlQSF9IICAgIDxmcmVldHlwZS9mdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0lNQUdFX0ggICAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfU0JJVFNfSCAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgogCiAKLSNkZWZpbmUgRlRfSU5DUkVNRU5UQUxfSCAgICAgICAgICA8ZnRpbmNyZW0uaD4KKyNkZWZpbmUgRlRfSU5DUkVNRU5UQUxfSCAgICAgICAgICA8ZnJlZXR5cGUvZnRpbmNyZW0uaD4KIAotI2RlZmluZSBGVF9UUlVFVFlQRV9VTlBBVEVOVEVEX0ggIDx0dHVucGF0Lmg+CisjZGVmaW5lIEZUX1RSVUVUWVBFX1VOUEFURU5URURfSCAgPGZyZWV0eXBlL3R0dW5wYXQuaD4KIAogCiAgIC8qCkBAIC04MjMsMTIgKzgyMiwxMiBAQAogICAgKiBvbmx5IHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCiAgICAqLwogI2lmZGVmIEZUMl9CVUlMRF9MSUJSQVJZCi0jZGVmaW5lICBGVF9JTlRFUk5BTF9JTlRFUk5BTF9IICA8aW50ZXJuYWwvaW50ZXJuYWwuaD4KKyNkZWZpbmUgIEZUX0lOVEVSTkFMX0lOVEVSTkFMX0ggIDxmcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oPgogI2luY2x1ZGUgRlRfSU5URVJOQUxfSU5URVJOQUxfSAogI2VuZGlmIC8qIEZUMl9CVUlMRF9MSUJSQVJZICovCiAKIAotI2VuZGlmIC8qIF9fRlQyX0JVSUxEX0hfXyAqLworI2VuZGlmIC8qIEZUSEVBREVSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9jb25maWcvZnRtb2R1bGUuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAppbmRleCA2ZThhNTI4Li45NGNjZjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUT1BUSU9OX0hfXwotI2RlZmluZSBfX0ZUT1BUSU9OX0hfXworI2lmbmRlZiBGVE9QVElPTl9IXworI2RlZmluZSBGVE9QVElPTl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzgsOSArMzgsOSBAQAogICAvKiAgICBsaWJyYXJ5IGZyb20gYSBzaW5nbGUgc291cmNlIGRpcmVjdG9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAtIFlvdSBjYW4gcHV0IGEgY29weSBvZiB0aGlzIGZpbGUgaW4geW91ciBidWlsZCBkaXJlY3RvcnksIG1vcmUgICAgICAqLwotICAvKiAgICBwcmVjaXNlbHkgaW4gYCRCVUlMRC9jb25maWcvZnRvcHRpb24uaCcsIHdoZXJlIGAkQlVJTEQnIGlzIHRoZSAgICAgKi8KLSAgLyogICAgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGlzIGluY2x1ZGVkIF9iZWZvcmVfIHRoZSBGcmVlVHlwZSBpbmNsdWRlICovCi0gIC8qICAgIHBhdGggZHVyaW5nIGNvbXBpbGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwcmVjaXNlbHkgaW4gYCRCVUlMRC9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCcsIHdoZXJlIGAkQlVJTEQnICAgKi8KKyAgLyogICAgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgdGhhdCBpcyBpbmNsdWRlZCBfYmVmb3JlXyB0aGUgRnJlZVR5cGUgICovCisgIC8qICAgIGluY2x1ZGUgcGF0aCBkdXJpbmcgY29tcGlsYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIGRlZmF1bHQgRnJlZVR5cGUgTWFrZWZpbGVzIGFuZCBKYW1maWxlcyB1c2UgdGhlIGJ1aWxkICAgICAgICAgICovCiAgIC8qICAgIGRpcmVjdG9yeSBgYnVpbGRzLzxzeXN0ZW0+JyBieSBkZWZhdWx0LCBidXQgeW91IGNhbiBlYXNpbHkgY2hhbmdlICAqLwpAQCAtNTEsNyArNTEsNyBAQAogICAvKiAgICBsb2NhdGUgdGhpcyBmaWxlIGR1cmluZyB0aGUgYnVpbGQuICBGb3IgZXhhbXBsZSwgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICA8bXlmdG9wdGlvbnMuaD4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICNpbmNsdWRlIDxjb25maWcvZnRoZWFkZXIuaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICB3aWxsIHVzZSBgJEJVSUxEL215ZnRvcHRpb25zLmgnIGluc3RlYWQgb2YgdGhpcyBmaWxlIGZvciBtYWNybyAgICAgKi8KICAgLyogICAgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01OSw3ICs1OSw3IEBACiAgIC8qICAgIE5vdGUgYWxzbyB0aGF0IHlvdSBjYW4gc2ltaWxhcmx5IHByZS1kZWZpbmUgdGhlIG1hY3JvICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9DT05GSUdfTU9EVUxFU19IIHVzZWQgdG8gbG9jYXRlIHRoZSBmaWxlIGxpc3Rpbmcgb2YgdGhlIG1vZHVsZXMgKi8KICAgLyogICAgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGxpYnJhcnkgYXQgY29tcGlsZSB0aW1lLiAgQnkgICAgICovCi0gIC8qICAgIGRlZmF1bHQsIHRoaXMgZmlsZSBpcyA8Y29uZmlnL2Z0bW9kdWxlLmg+LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWZhdWx0LCB0aGlzIGZpbGUgaXMgPGZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oPi4gICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFdlIGhpZ2hseSByZWNvbW1lbmQgdXNpbmcgdGhlIHRoaXJkIG1ldGhvZCB3aGVuZXZlciBwb3NzaWJsZS4gICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTc3LDYgKzc3LDM2IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJZiB5b3UgZW5hYmxlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIEZyZWVUeXBlIHJlY29nbml6ZXMgYW4gICAgICAgKi8KKyAgLyogZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIGBGUkVFVFlQRV9QUk9QRVJUSUVTJywgd2hpY2ggY2FuIGJlIHVzZWQgICovCisgIC8qIHRvIGNvbnRyb2wgdGhlIHZhcmlvdXMgZm9udCBkcml2ZXJzIGFuZCBtb2R1bGVzLiAgVGhlIGNvbnRyb2xsYWJsZSAgICAqLworICAvKiBwcm9wZXJ0aWVzIGFyZSBsaXN0ZWQgaW4gdGhlIHNlY3Rpb24gYENvbnRyb2xsaW5nIEZyZWVUeXBlIE1vZHVsZXMnICAgKi8KKyAgLyogaW4gdGhlIHJlZmVyZW5jZSdzIHRhYmxlIG9mIGNvbnRlbnRzOyBjdXJyZW50bHkgdGhlcmUgYXJlIHByb3BlcnRpZXMgICovCisgIC8qIGZvciB0aGUgYXV0by1oaW50ZXIgKGZpbGUgYGZ0YXV0b2guaCcpLCBDRkYgKGZpbGUgYGZ0Y2ZmZHJ2LmgnKSwgYW5kICAqLworICAvKiBUcnVlVHlwZSAoZmlsZSBgZnR0dGRydi5oJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXggZm9ybSAoYnJva2VuIGhlcmUgaW50byAqLworICAvKiBtdWx0aXBsZSBsaW5lcyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgPG9wdGlvbmFsIHdoaXRlc3BhY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIDxtb2R1bGUtbmFtZTE+ICc6JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICA8cHJvcGVydHktbmFtZTE+ICc9JyA8cHJvcGVydHktdmFsdWUxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgPHdoaXRlc3BhY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIDxtb2R1bGUtbmFtZTI+ICc6JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICA8cHJvcGVydHktbmFtZTI+ICc9JyA8cHJvcGVydHktdmFsdWUyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRXhhbXBsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZSRUVUWVBFX1BST1BFUlRJRVM9dHJ1ZXR5cGU6aW50ZXJwcmV0ZXItdmVyc2lvbj0zNSBcICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIGNmZjpuby1zdGVtLWRhcmtlbmluZz0xIFwgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBhdXRvZml0dGVyOndhcnBpbmc9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2FudCB0byBhY3RpdmF0ZSBzdWItcGl4ZWwgcmVuZGVyaW5nICAqLwogICAvKiAoYS5rLmEuIExDRCByZW5kZXJpbmcsIG9yIENsZWFyVHlwZSkgaW4gdGhpcyBidWlsZCBvZiB0aGUgbGlicmFyeS4gICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00OTIsNyArNTIyLDIxIEBACiAgIC8qICAgY29kZSB3aWxsIGJlIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBTZXR0aW5nIHRoaXMgbWFjcm8gaXMgbmVlZGVkIGZvciBzeXN0ZW1zIHRoYXQgcHJvaGliaXQgYWRkcmVzcyAgICAgICovCi0gIC8qICAgZml4dXBzLCBzdWNoIGFzIEJSRVcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGZpeHVwcywgc3VjaCBhcyBCUkVXLiAgW05vdGUgdGhhdCBzdGFuZGFyZCBjb21waWxlcnMgbGlrZSBnY2Mgb3IgICAgKi8KKyAgLyogICBjbGFuZyBoYW5kbGUgUElDIGdlbmVyYXRpb24gYXV0b21hdGljYWxseTsgeW91IGRvbid0IGhhdmUgdG8gc2V0ICAgICovCisgIC8qICAgRlRfQ09ORklHX09QVElPTl9QSUMsIHdoaWNoIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciB2ZXJ5IHNwZWNpYWwgICAgICAqLworICAvKiAgIGNvbXBpbGVycy5dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm90ZSB0aGF0IEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgYWxsICAgICAqLworICAvKiAgIG1vZHVsZXMgKHNlZSBgbW9kdWxlcy5jZmcnIGZvciBhIGNvbXBsZXRlIGxpc3QpLiAgRm9yIGJ1aWxkaW5nIHdpdGggKi8KKyAgLyogICBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0LCBkbyB0aGUgZm9sbG93aW5nLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgMC4gQ2xvbmUgdGhlIHJlcG9zaXRvcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIDEuIERlZmluZSBGVF9DT05GSUdfT1BUSU9OX1BJQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAyLiBSZW1vdmUgYWxsIHN1YmRpcmVjdG9yaWVzIGluIGBzcmMnIHRoYXQgZG9uJ3QgaGF2ZSAgICAgICAgICAgICAqLworICAvKiAgICAgICAgRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIDMuIENvbW1lbnQgb3V0IHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZXMgaW4gYG1vZHVsZXMuY2ZnJy4gICAgICAgICovCisgIC8qICAgICA0LiBDb21waWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIApAQCAtNTg2LDczICs2MzAsNTMgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgICAgICAgKi8KLSAgLyogRVhQRVJJTUVOVEFMIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCBpbnRvIHRoZSBUcnVlVHlwZSBkcml2ZXIuICBUaGlzICovCi0gIC8qIHJlcGxhY2VzIHRoZSBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyBtZWNoYW5pc20gd2hlbiBhbnl0aGluZyBidXQgICAgICAqLwotICAvKiBGVF9SRU5ERVJfTU9ERV9NT05PIGlzIHJlcXVlc3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogc3VicGl4ZWwgaGludGluZyBzdXBwb3J0IGludG8gdGhlIFRydWVUeXBlIGRyaXZlci4gIFRoaXMgbW9kaWZpZXMgdGhlICovCisgIC8qIFRydWVUeXBlIGhpbnRpbmcgbWVjaGFuaXNtIHdoZW4gYW55dGhpbmcgYnV0IEZUX1JFTkRFUl9NT0RFX01PTk8gaXMgICAqLworICAvKiByZXF1ZXN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEVuYWJsaW5nIHRoaXMgY2F1c2VzIHRoZSBUcnVlVHlwZSBkcml2ZXIgdG8gaWdub3JlIGluc3RydWN0aW9ucyB1bmRlciAqLwotICAvKiBjZXJ0YWluIGNvbmRpdGlvbnMuICBUaGlzIGlzIGRvbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBndWlkZSBoZXJlLCAgKi8KLSAgLyogd2l0aCBzb21lIG1pbm9yIGRpZmZlcmVuY2VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEluIHBhcnRpY3VsYXIsIGl0IG1vZGlmaWVzIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciB0byBpbnRlcnByZXQgKG9yICAqLworICAvKiBub3QpIGluc3RydWN0aW9ucyBpbiBhIGNlcnRhaW4gd2F5IHNvIHRoYXQgYWxsIFRydWVUeXBlIGZvbnRzIGxvb2sgICAgKi8KKyAgLyogbGlrZSB0aGV5IGRvIGluIGEgV2luZG93cyBDbGVhclR5cGUgKERpcmVjdFdyaXRlKSBlbnZpcm9ubWVudC4gIFNlZSAgICovCisgIC8qIFsxXSBmb3IgYSB0ZWNobmljYWwgb3ZlcnZpZXcgb24gd2hhdCB0aGlzIG1lYW5zLiAgU2VlIGB0dGludGVycC5oJyAgICAqLworICAvKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBMRUFOIG9wdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweCAqLworICAvKiBUaGVyZSBhcmUgdGhyZWUgb3B0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEJ5IHVuZGVmaW5pbmcgdGhpcywgeW91IG9ubHkgY29tcGlsZSB0aGUgY29kZSBuZWNlc3NhcnkgdG8gaGludCAgICAgICAqLwotICAvKiBUcnVlVHlwZSBnbHlwaHMgd2l0aCBuYXRpdmUgVFQgaGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogMS4gVGhpcyBvcHRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgSW5maW5hbGl0eScgbW9uaWtlci4gICAgICAgICAgICovCisgIC8qICAgIENvbnRyaWJ1dGVkIGJ5IGFuIGluZGl2aWR1YWwgbmlja25hbWVkIEluZmluYWxpdHkgd2l0aCB0aGUgZ29hbCBvZiAqLworICAvKiAgICBtYWtpbmcgVHJ1ZVR5cGUgZm9udHMgcmVuZGVyIGJldHRlciB0aGFuIG9uIFdpbmRvd3MuICBBIGhpZ2ggICAgICAgKi8KKyAgLyogICAgYW1vdW50IG9mIGNvbmZpZ3VyYWJpbGl0eSBhbmQgZmxleGliaWxpdHksIGRvd24gdG8gcnVsZXMgZm9yICAgICAgICovCisgIC8qICAgIHNpbmdsZSBnbHlwaHMgaW4gZm9udHMsIGJ1dCBhbHNvIHZlcnkgc2xvdy4gIEl0cyBleHBlcmltZW50YWwgYW5kICAqLworICAvKiAgICBzbG93IG5hdHVyZSBhbmQgdGhlIG9yaWdpbmFsIGRldmVsb3BlciBsb3NpbmcgaW50ZXJlc3QgbWVhbnQgdGhhdCAgKi8KKyAgLyogICAgdGhpcyBvcHRpb24gd2FzIG5ldmVyIGVuYWJsZWQgaW4gZGVmYXVsdCBidWlsZHMuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoaXMgb3B0aW9uIHJlcXVpcmVzIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgdG8gYmUgICAgKi8KLSAgLyogICBkZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDIuIFRoZSBuZXcgZGVmYXVsdCBtb2RlIGZvciB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhlIEluZmluYWxpdHkgY29kZSAqLworICAvKiAgICBiYXNlIHdhcyBzdHJpcHBlZCB0byB0aGUgYmFyZSBtaW5pbXVtIGFuZCBhbGwgY29uZmlndXJhYmlsaXR5ICAgICAgKi8KKyAgLyogICAgcmVtb3ZlZCBpbiB0aGUgbmFtZSBvZiBzcGVlZCBhbmQgc2ltcGxpY2l0eS4gIFRoZSBjb25maWd1cmFiaWxpdHkgICovCisgIC8qICAgIHdhcyBtYWlubHkgYWltZWQgYXQgbGVnYWN5IGZvbnRzIGxpa2UgQXJpYWwsIFRpbWVzIE5ldyBSb21hbiwgb3IgICAqLworICAvKiAgICBDb3VyaWVyLiAgTGVnYWN5IGZvbnRzIGFyZSBmb250cyB0aGF0IG1vZGlmeSB2ZXJ0aWNhbCBzdGVtcyB0byAgICAgKi8KKyAgLyogICAgYWNoaWV2ZSBjbGVhbiBibGFjay1hbmQtd2hpdGUgYml0bWFwcy4gIFRoZSBuZXcgbW9kZSBmb2N1c2VzIG9uICAgICovCisgIC8qICAgIGFwcGx5aW5nIGEgbWluaW1hbCBzZXQgb2YgcnVsZXMgdG8gYWxsIGZvbnRzIGluZGlzY3JpbWluYXRlbHkgc28gICAqLworICAvKiAgICB0aGF0IG1vZGVybiBhbmQgd2ViIGZvbnRzIHJlbmRlciB3ZWxsIHdoaWxlIGxlZ2FjeSBmb250cyByZW5kZXIgICAgKi8KKyAgLyogICAgb2theS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAzLiBDb21waWxlIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElmIHlvdSBkZWZpbmUgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcsIGEgc3BlY2lhbCB2ZXJzaW9uICAqLwotICAvKiBvZiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaXMgdXNlZCB0aGF0IGRvZXNuJ3QgaW1wbGVtZW50ICAgKi8KLSAgLyogYW55IG9mIHRoZSBwYXRlbnRlZCBvcGNvZGVzIGFuZCBhbGdvcml0aG1zLiAgVGhlIHBhdGVudHMgcmVsYXRlZCB0byAgICovCi0gIC8qIFRydWVUeXBlIGhpbnRpbmcgaGF2ZSBleHBpcmVkIHdvcmxkd2lkZSBzaW5jZSBNYXkgMjAxMDsgdGhpcyBvcHRpb24gICAqLwotICAvKiBpcyBub3cgZGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQnkgdW5kZWZpbmluZyB0aGVzZSwgeW91IGdldCByZW5kZXJpbmcgYmVoYXZpb3IgbGlrZSBvbiBXaW5kb3dzICAgICAgICovCisgIC8qIHdpdGhvdXQgQ2xlYXJUeXBlLCBpLmUuLCBXaW5kb3dzIFhQIHdpdGhvdXQgQ2xlYXJUeXBlIGVuYWJsZWQgYW5kICAgICAqLworICAvKiBXaW45eCAoaW50ZXJwcmV0ZXIgdmVyc2lvbiB2MzUpLiAgT3Igbm90LCBkZXBlbmRpbmcgb24gaG93IG11Y2ggICAgICAgKi8KKyAgLyogaGludGluZyBibG9vZCBhbmQgdGVzdGluZyB0ZWFycyB0aGUgZm9udCBkZXNpZ25lciBwdXQgaW50byBhIGdpdmVuICAgICovCisgIC8qIGZvbnQuICBJZiB5b3UgZGVmaW5lIG9uZSBvciBib3RoIHN1YnBpeGVsIGhpbnRpbmcgb3B0aW9ucywgeW91IGNhbiAgICAqLworICAvKiBzd2l0Y2ggYmV0d2VlbiBiZXR3ZWVuIHYzNSBhbmQgdGhlIG9uZXMgeW91IGRlZmluZS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGUgdGhhdCB0aGUgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgbWFjcm8gaXMgKmlnbm9yZWQqICAqLwotICAvKiBpZiB5b3UgZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVI7IGluIG90aGVyIHdvcmRzLCAgKi8KLSAgLyogZWl0aGVyIGRlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIG9yICAgICAgICAgICAgICAgICovCi0gIC8qIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HIGJ1dCBub3QgYm90aCBhdCB0aGUgc2FtZSB0aW1lLiAgICAqLworICAvKiBUaGlzIG9wdGlvbiByZXF1aXJlcyBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIHRvIGJlICAgICAgKi8KKyAgLyogZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIG1hY3JvIGlzIG9ubHkgdXNlZnVsIGZvciBhIHNtYWxsIG51bWJlciBvZiBmb250IGZpbGVzIChtb3N0bHkgICAgKi8KLSAgLyogZm9yIEFzaWFuIHNjcmlwdHMpIHRoYXQgcmVxdWlyZSBieXRlY29kZSBpbnRlcnByZXRhdGlvbiB0byBwcm9wZXJseSAgICovCi0gIC8qIGxvYWQgZ2x5cGhzLiAgRm9yIGFsbCBvdGhlciBmb250cywgdGhpcyBwcm9kdWNlcyB1bnBsZWFzYW50IHJlc3VsdHMsICAqLwotICAvKiB0aHVzIHRoZSB1bnBhdGVudGVkIGludGVycHJldGVyIGlzIG5ldmVyIHVzZWQgdG8gbG9hZCBnbHlwaHMgZnJvbSAgICAgKi8KLSAgLyogVHJ1ZVR5cGUgZm9udHMgdW5sZXNzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byBvcHRpb25zIGlzIHVzZWQuICAgICAgICovCisgIC8qIFsxXSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweCAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIFRoZSB1bnBhdGVudGVkIGludGVycHJldGVyIGlzIGV4cGxpY2l0bHkgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyICAgICovCi0gIC8qICAgICB0aHJvdWdoIHRoZSBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HIHBhcmFtZXRlciB0YWcgICAgICAgICAqLwotICAvKiAgICAgd2hlbiBvcGVuaW5nIHRoZSBGVF9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgLSBGcmVlVHlwZSBkZXRlY3RzIHRoYXQgdGhlIEZUX0ZhY2UgY29ycmVzcG9uZHMgdG8gb25lIG9mIHRoZSAgICAgICAqLwotICAvKiAgICAgYHRyaWNrJyBmb250cyAoZS5nLiwgYE1pbmdsaXUnKSBpdCBrbm93cyBhYm91dC4gIFRoZSBmb250IGVuZ2luZSAgKi8KLSAgLyogICAgIGNvbnRhaW5zIGEgaGFyZC1jb2RlZCBsaXN0IG9mIGZvbnQgbmFtZXMgYW5kIG90aGVyIG1hdGNoaW5nICAgICAgICovCi0gIC8qICAgICBwYXJhbWV0ZXJzIChzZWUgZnVuY3Rpb24gYHR0X2ZhY2VfaW5pdCcgaW4gZmlsZSAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYHNyYy90cnVldHlwZS90dG9ianMuYycpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEhlcmUgYSBzYW1wbGUgY29kZSBzbmlwcGV0IGZvciB1c2luZyBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBGVF9QYXJhbWV0ZXIgIHBhcmFtZXRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgRlRfT3Blbl9BcmdzICBvcGVuX2FyZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgcGFyYW1ldGVyLnRhZyA9IEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkc7ICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBvcGVuX2FyZ3MuZmxhZ3MgICAgICA9IEZUX09QRU5fUEFUSE5BTUUgfCBGVF9PUEVOX1BBUkFNUzsgICAgICAgICAqLwotICAvKiAgICAgb3Blbl9hcmdzLnBhdGhuYW1lICAgPSBteV9mb250X3BhdGhuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIG9wZW5fYXJncy5udW1fcGFyYW1zID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBvcGVuX2FyZ3MucGFyYW1zICAgICA9ICZwYXJhbWV0ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGVycm9yID0gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmb3Blbl9hcmdzLCBpbmRleCwgJmZhY2UgKTsgICAgICAgICovCi0gIC8qICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HICovCisvKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAgMSAgICAgICAgICovCisvKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAgMiAgICAgICAgICovCisvKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAgKCAxIHwgMiApICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY5Myw2ICs3MTcsMjQgQEAKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3B0aW9uIFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMgY29udHJvbHMgdGhlIG1heGltdW0gICAgICovCisgIC8qIG51bWJlciBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgZm9yIGEgc2luZ2xlIHJ1biBvZiB0aGUgICAgICAqLworICAvKiBieXRlY29kZSBpbnRlcnByZXRlciwgbmVlZGVkIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuICBZb3UgZG9uJ3QgICAgKi8KKyAgLyogd2FudCB0byBjaGFuZ2UgdGhpcyBleGNlcHQgZm9yIHZlcnkgc3BlY2lhbCBzaXR1YXRpb25zIChlLmcuLCBtYWtpbmcgICovCisgIC8qIGEgbGlicmFyeSBmdXp6ZXIgc3BlbmQgbGVzcyB0aW1lIHRvIGhhbmRsZSBicm9rZW4gZm9udHMpLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSXQgaXMgbm90IGV4cGVjdGVkIHRoYXQgdGhpcyB2YWx1ZSBpcyBldmVyIG1vZGlmaWVkIGJ5IGEgY29uZmlndXJpbmcgICovCisgIC8qIHNjcmlwdDsgaW5zdGVhZCwgaXQgZ2V0cyBzdXJyb3VuZGVkIHdpdGggI2lmbmRlZiAuLi4gI2VuZGlmIHNvIHRoYXQgICAqLworICAvKiB0aGUgdmFsdWUgY2FuIGJlIHNldCBhcyBhIHByZXByb2Nlc3NvciBvcHRpb24gb24gdGhlIGNvbXBpbGVyJ3MgICAgICAgKi8KKyAgLyogY29tbWFuZCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX01BWF9SVU5OQUJMRV9PUENPREVTCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMgIDEwMDAwMDBMCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCiAgIC8qKioqICAgICAgVCBZIFAgRSAxICAgRCBSIEkgViBFIFIgICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAgICAgICAqKioqLwpAQCAtODI1LDcgKzg2Nyw3IEBACiAgIC8qIGB3YXJwaW5nJyBwcm9wZXJ0eSBvZiB0aGUgYXV0by1oaW50ZXIgKHNlZSBmaWxlIGBmdGF1dG9oLmgnIGZvciBtb3JlICAqLwogICAvKiBpbmZvcm1hdGlvbjsgYnkgZGVmYXVsdCBpdCBpcyBzd2l0Y2hlZCBvZmYpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworI2RlZmluZSBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKIAogICAvKiAqLwogCkBAIC04MzgsMTQgKzg4MCwxOSBAQAogCiAKICAgLyoKLSAgICogVGhpcyBtYWNybyBpcyBkZWZpbmVkIGlmIGVpdGhlciB1bnBhdGVudGVkIG9yIG5hdGl2ZSBUcnVlVHlwZQotICAgKiBoaW50aW5nIGlzIHJlcXVlc3RlZCBieSB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCisgICAqIFRoaXMgbWFjcm8gaXMgZGVmaW5lZCBpZiBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyBpcyByZXF1ZXN0ZWQgYnkgdGhlCisgICAqIGRlZmluaXRpb25zIGFib3ZlLgogICAgKi8KICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAjZGVmaW5lICBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKLSN1bmRlZiAgIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0jZWxpZiBkZWZpbmVkIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0jZGVmaW5lICBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworI2lmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAmIDEKKyNkZWZpbmUgIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisjZW5kaWYKKworI2lmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAmIDIKKyNkZWZpbmUgIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisjZW5kaWYKICNlbmRpZgogCiAKQEAgLTg4MCw3ICs5MjcsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0ZUT1BUSU9OX0hfXyAqLworI2VuZGlmIC8qIEZUT1BUSU9OX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy9mdHN0ZGxpYi5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2NvbmZpZy9mdHN0ZGxpYi5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCmluZGV4IDhlZjQzYzAuLjZlZWZhOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlnL2Z0c3RkbGliLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEFOU0ktc3BlY2lmaWMgbGlicmFyeSBhbmQgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiAgICovCiAvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsMTQgKzIzLDEzIEBACiAgIC8qIEZyZWVUeXBlIG5vcm1hbGx5IHJlcXVpcmVzLiAgSXQgYWxzbyBkZWZpbmVzIG1hY3JvcyB0byByZW5hbWUgdGhlICAgICAqLwogICAvKiBzdGFuZGFyZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIExvYWQgYSBmaWxlIHdoaWNoIGRlZmluZXMgX19GVFNURExJQl9IX18gYmVmb3JlIHRoaXMgb25lIHRvIG92ZXJyaWRlICAqLwotICAvKiBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTG9hZCBhIGZpbGUgd2hpY2ggZGVmaW5lcyBGVFNURExJQl9IXyBiZWZvcmUgdGhpcyBvbmUgdG8gb3ZlcnJpZGUgaXQuICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRTVERMSUJfSF9fCi0jZGVmaW5lIF9fRlRTVERMSUJfSF9fCisjaWZuZGVmIEZUU1RETElCX0hfCisjZGVmaW5lIEZUU1RETElCX0hfCiAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNjQsNiArNjMsOCBAQAogI2RlZmluZSBGVF9JTlRfTUFYICAgICBJTlRfTUFYCiAjZGVmaW5lIEZUX0lOVF9NSU4gICAgIElOVF9NSU4KICNkZWZpbmUgRlRfVUlOVF9NQVggICAgVUlOVF9NQVgKKyNkZWZpbmUgRlRfTE9OR19NSU4gICAgTE9OR19NSU4KKyNkZWZpbmUgRlRfTE9OR19NQVggICAgTE9OR19NQVgKICNkZWZpbmUgRlRfVUxPTkdfTUFYICAgVUxPTkdfTUFYCiAKIApAQCAtMTQxLDcgKzE0Miw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNkZWZpbmUgZnRfYXRvbCAgYXRvbAorI2RlZmluZSBmdF9zdHJ0b2wgIHN0cnRvbAorI2RlZmluZSBmdF9nZXRlbnYgIGdldGVudgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjcsNyArMTY5LDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAogCi0jZW5kaWYgLyogX19GVFNURExJQl9IX18gKi8KKyNlbmRpZiAvKiBGVFNURExJQl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnJlZXR5cGUuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCmluZGV4IGJjYTkzZTUuLjEwNTAzZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgaGlnaC1sZXZlbCBBUEkgYW5kIGNvbW1vbiB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZSRUVUWVBFX0hfXwotI2RlZmluZSBfX0ZSRUVUWVBFX0hfXworI2lmbmRlZiBGUkVFVFlQRV9IXworI2RlZmluZSBGUkVFVFlQRV9IXwogCiAKICNpZm5kZWYgRlRfRlJFRVRZUEVfSApAQCAtMTQxLDcgKzE0MSw2IEBACiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRkFDRV9GTEFHX0hJTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19UUklDS1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfSEFTX0hPUklaT05UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0hBU19WRVJUSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjUyLDExICs2NTEsMTEgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0VOQ09ESU5HX1NKSVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIEphcGFuZXNlIFNKSVMgZW5jb2RpbmcuICBNb3JlIGluZm8gYXQgICAgICAgICAgICAgKi8KLSAgLyogICAgICBhdCBgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGlmdF9KSVMnLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgYGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hpZnRfSklTJy4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFNlZSBub3RlIG9uIG11bHRpLWJ5dGUgZW5jb2RpbmdzIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0VOQ09ESU5HX0dCMjMxMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIGFuIGVuY29kaW5nIHN5c3RlbSBmb3IgU2ltcGxpZmllZCBDaGluZXNlIGFzIHVzZWQgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byBhbiBlbmNvZGluZyBzeXN0ZW0gZm9yIFNpbXBsaWZpZWQgQ2hpbmVzZSBhcyAgICAgICovCiAgIC8qICAgICAgdXNlZCBpbiBtYWlubGFuZCBDaGluYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRU5DT0RJTkdfQklHNSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04NzYsMTcgKzg3NSwzNiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgZm9ybWF0cyBjYW4gaGF2ZSBtdWx0aXBsZSBmYWNlcyBpbiAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4ICAgICAgICAgIDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSBpbiB0aGUgZm9udCBmaWxlLiAgSXQgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG9+MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmYWNlIGluICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggICAgICAgICAgOjogVGhpcyBmaWVsZCBob2xkcyB0d28gZGlmZmVyZW50IHZhbHVlcy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHMgMC0xNSBhcmUgdGhlIGluZGV4IG9mIHRoZSBmYWNlIGluIHRoZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGZpbGUgKHN0YXJ0aW5nIHdpdGggdmFsdWV+MCkuICBUaGV5ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHNldCB0b34wIGlmIHRoZXJlIGlzIG9ubHkgb25lIGZhY2UgaW4gICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyAxNi0zMCBhcmUgcmVsZXZhbnQgdG8gR1ggdmFyaWF0aW9uICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzIG9ubHksIGhvbGRpbmcgdGhlIG5hbWVkIGluc3RhbmNlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBmb3IgdGhlIGN1cnJlbnQgZmFjZSBpbmRleCAoc3RhcnRpbmcgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB2YWx1ZX4xOyB2YWx1ZX4wIGluZGljYXRlcyBmb250IGFjY2VzcyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgR1ggdmFyaWF0aW9uIGRhdGEpLiAgRm9yIG5vbi1HWCAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250cywgYml0cyAxNi0zMCBhcmUgaWdub3JlZC4gIElmIHdlIGhhdmUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRoaXJkIG5hbWVkIGluc3RhbmNlIG9mIGZhY2V+NCwgc2F5LCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmYWNlX2luZGV4JyBpcyBzZXQgdG8gMHgwMDAzMDAwNC4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDMxIGlzIGFsd2F5cyB6ZXJvICh0aGlzIGlzLCAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmYWNlX2luZGV4JyBpcyBhbHdheXMgYSBwb3NpdGl2ZSB2YWx1ZSkuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGZhY2VfZmxhZ3MgICAgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIHRoYXQgZ2l2ZSBpbXBvcnRhbnQgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWNlOyBzZWUgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfRkFDRV9GTEFHX1hYWCBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHlsZV9mbGFncyAgICAgICAgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmFjZTsgc2VlIEBGVF9TVFlMRV9GTEFHX1hYWCBmb3IgdGhlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHlsZV9mbGFncyAgICAgICAgIDo6IFRoZSBsb3dlciAxNn5iaXRzIGNvbnRhaW4gYSBzZXQgb2YgYml0ICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiB0aGUgZmFjZTsgc2VlICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQEZUX1NUWUxFX0ZMQUdfWFhYIGZvciB0aGUgZGV0YWlscy4gIEJpdHMgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LTMwIGhvbGQgdGhlIG51bWJlciBvZiBuYW1lZCBpbnN0YW5jZXMgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IGZhY2UgaWYgd2UgaGF2ZSBhICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ggdmFyaWF0aW9uIChzdWIpZm9udC4gIEJpdCAzMSBpcyBhbHdheXMgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8gKHRoaXMgaXMsIGBzdHlsZV9mbGFncycgaXMgYWx3YXlzIGEgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZSB2YWx1ZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBudW1fZ2x5cGhzICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoZSBmYWNlLiAgSWYgdGhlICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlIGlzIHNjYWxhYmxlIGFuZCBoYXMgc2JpdHMgKHNlZSAgICAgICAgICovCkBAIC05MzMsNiArOTUxLDEwIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlcyBpbiB0aGUgZmFjZS4gIEl0IGlzIHNldCB0byBOVUxMIGlmICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIGJpdG1hcCBzdHJpa2UuICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IEZyZWVUeXBlIHRyaWVzIHRvIHNhbml0aXplIHRoZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZSBkYXRhIHNpbmNlIHRoZXkgYXJlIHNvbWV0aW1lcyBzbG9wcHkgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbmNvcnJlY3QsIGJ1dCB0aGlzIGNhbiBlYXNpbHkgZmFpbC4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBudW1fY2hhcm1hcHMgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgY2hhcm1hcHMgaW4gdGhlIGZhY2UuICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGNoYXJtYXBzICAgICAgICAgICAgOjogQW4gYXJyYXkgb2YgdGhlIGNoYXJtYXBzIG9mIHRoZSBmYWNlLiAgICAgICAqLwpAQCAtMTA4NSw3ICsxMTA3LDcgQEAKICAgLyogICAgRlRfRkFDRV9GTEFHX1NDQUxBQkxFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgb3V0bGluZSBnbHlwaHMuICBUaGlzIGRvZXNuJ3QgICAqLwogICAvKiAgICAgIHByZXZlbnQgYml0bWFwIHN0cmlrZXMsIGkuZS4sIGEgZmFjZSBjYW4gaGF2ZSBib3RoIHRoaXMgYW5kICAgICAgKi8KLSAgLyogICAgICBhbmQgQEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgYml0bWFwIHN0cmlrZXMuICBTZWUgYWxzbyB0aGUgICAqLwpAQCAtMTIwNCw3ICsxMjI2LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19IT1JJWk9OVEFMKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjE4LDcgKzEyNDAsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX1ZFUlRJQ0FMKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyMzIsNyArMTI1NCw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfS0VSTklORyggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfS0VSTklORyApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfS0VSTklORyApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTI0Nyw3ICsxMjY5LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0lTX1NDQUxBQkxFKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyNjYsNyArMTI4OCw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9JU19TRk5UKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19TRk5UICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19TRk5UICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjgxLDcgKzEzMDMsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfRklYRURfV0lEVEgoIGZhY2UgKSBcCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTI5Niw3ICsxMzE4LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19GSVhFRF9TSVpFUyggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzIyLDcgKzEzNDQsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX0dMWVBIX05BTUVTKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMzcsNyArMTM1OSwyMSBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIGZhY2UgKSBcCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBpcyBhIG5hbWVkIGluc3RhbmNlCisgICAqICAgb2YgYSBHWCB2YXJpYXRpb24gZm9udC4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBmYWNlICkgXAorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2luZGV4ICYgMHg3RkZGMDAwMEwgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzNTUsNyArMTM5MSw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9JU19DSURfS0VZRUQoIGZhY2UgKSBcCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzY5LDcgKzE0MDUsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfVFJJQ0tZKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19UUklDS1kgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1RSSUNLWSApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM4Myw3ICsxNDE5LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19DT0xPUiggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfQ09MT1IgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NPTE9SICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTM5Miw3ICsxNDI4LDcgQEAKICAgLyogICAgRlRfU1RZTEVfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBsaXN0IG9mIGJpdC1mbGFncyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdHlsZSBvZiBhIGdpdmVuIGZhY2UuICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgb2YgYSBnaXZlbiBmYWNlLiAgICAqLwogICAvKiAgICBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgYHN0eWxlX2ZsYWdzJyBmaWVsZCBvZiBARlRfRmFjZVJlYy4gICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTgyNCw3ICsxODYwLDcgQEAKICAgLyogICAgRlRfT1BFTl9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlZCB3aXRoaW4gdGhlIGBmbGFncycgZmllbGQgb2YgdGhlICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQgZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aGluIHRoZSBgZmxhZ3MnIGZpZWxkIG9mIHRoZSAqLwogICAvKiAgICBARlRfT3Blbl9BcmdzIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTkyMyw3ICsxOTU5LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIElmIHRoZSBARlRfT1BFTl9NRU1PUlkgYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgdGhpcyBpcyBhICAgICAgICAgICAqLwogICAvKiAgICBtZW1vcnkgZmlsZSBvZiBgbWVtb3J5X3NpemUnIGJ5dGVzLCBsb2NhdGVkIGF0IGBtZW1vcnlfYWRkcmVzcycuICAgKi8KLSAgLyogICAgVGhlIGRhdGEgYXJlIGFyZSBub3QgY29waWVkLCBhbmQgdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgICAgICovCisgIC8qICAgIFRoZSBkYXRhIGFyZSBub3QgY29waWVkLCBhbmQgdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgICAgICAgICAqLwogICAvKiAgICByZWxlYXNpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbSBfYWZ0ZXJfIHRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gICAgKi8KICAgLyogICAgQEZUX0RvbmVfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTk3MSwxMyArMjAwNywxMiBAQAogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcGF0aG5hbWUgICA6OiBBIHBhdGggdG8gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjAxMCwxMyArMjA0NSwxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmlsZV9zaXplICA6OiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNodW5rIHVzZWQgYnkgdGhlIGZvbnQgZGF0YS4gICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjA0OCwxMyArMjA4Miw0MyBAQAogICAvKiAgICBhcmdzICAgICAgIDo6IEEgcG9pbnRlciB0byBhbiBgRlRfT3Blbl9BcmdzJyBzdHJ1Y3R1cmUgdGhhdCBtdXN0ICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgYnkgdGhlIGNhbGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogVGhpcyBmaWVsZCBob2xkcyB0d28gZGlmZmVyZW50IHZhbHVlcy4gIEJpdHMgMC0xNSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGFyZSB0aGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlIGZvbnQgZmlsZSAoc3RhcnRpbmcgKi8KKyAgLyogICAgICAgICAgICAgICAgICB3aXRoIHZhbHVlfjApLiAgU2V0IGl0IHRvfjAgaWYgdGhlcmUgaXMgb25seSBvbmUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZmFjZSBpbiB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBCaXRzIDE2LTMwIGFyZSByZWxldmFudCB0byBHWCB2YXJpYXRpb24gZm9udHMgb25seSwgICovCisgIC8qICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB0aGUgbmFtZWQgaW5zdGFuY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50ICAqLworICAvKiAgICAgICAgICAgICAgICAgIGZhY2UgaW5kZXggKHN0YXJ0aW5nIHdpdGggdmFsdWV+MTsgdmFsdWV+MCBtYWtlcyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBGcmVlVHlwZSBpZ25vcmUgbmFtZWQgaW5zdGFuY2VzKS4gIEZvciBub24tR1ggZm9udHMsICovCisgIC8qICAgICAgICAgICAgICAgICAgYml0cyAxNi0zMCBhcmUgaWdub3JlZC4gIEFzc3VtaW5nIHRoYXQgeW91IHdhbnQgdG8gICAqLworICAvKiAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgdGhpcmQgbmFtZWQgaW5zdGFuY2UgaW4gZmFjZX40LCAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBgZmFjZV9pbmRleCcgc2hvdWxkIGJlIHNldCB0byAweDAwMDMwMDA0LiAgSWYgeW91ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgd2FudCB0byBhY2Nlc3MgZmFjZX40IHdpdGhvdXQgR1ggdmFyaWF0aW9uIGhhbmRsaW5nLCAqLworICAvKiAgICAgICAgICAgICAgICAgIHNpbXBseSBzZXQgYGZhY2VfaW5kZXgnIHRvIHZhbHVlfjQuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgRlRfT3Blbl9GYWNlIGFuZCBpdHMgc2libGluZ3MgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSAqLworICAvKiAgICAgICAgICAgICAgICAgIGNoZWNrIHdoZXRoZXIgdGhlIGZvbnQgZm9ybWF0IG9mIGEgZ2l2ZW4gZm9udCAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICByZXNvdXJjZSBpcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGUuICBJbiBnZW5lcmFsLCBpZiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdGhlIGBmYWNlX2luZGV4JyBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgdGhlICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzfjAgaWYgdGhlIGZvbnQgZm9ybWF0IGlzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICByZWNvZ25pemVkLCBvciBub24temVybyBvdGhlcndpc2UuICBUaGUgZnVuY3Rpb24gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgYWxsb2NhdGVzIGEgbW9yZSBvciBsZXNzIGVtcHR5IGZhY2UgaGFuZGxlIGluICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGAqYWZhY2UnIChpZiBgYWZhY2UnIGlzbid0IE5VTEwpOyB0aGUgb25seSB0d28gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2VmdWwgZmllbGRzIGluIHRoaXMgc3BlY2lhbCBjYXNlIGFyZSAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgYGZhY2UtPm51bV9mYWNlcycgYW5kIGBmYWNlLT5zdHlsZV9mbGFncycuICBGb3IgYW55ICAqLworICAvKiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIHZhbHVlIG9mIGBmYWNlX2luZGV4JywgYGZhY2UtPm51bV9mYWNlcycgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBnaXZlcyB0aGUgbnVtYmVyIG9mIGZhY2VzIHdpdGhpbiB0aGUgZm9udCBmaWxlLiAgRm9yICovCisgIC8qICAgICAgICAgICAgICAgICAgdGhlIG5lZ2F0aXZlIHZhbHVlIGAtKE4rMSknICh3aXRoIGBOJyBhIDE2LWJpdCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlKSwgYml0cyAxNi0zMCBpbiBgZmFjZS0+c3R5bGVfZmxhZ3MnIGdpdmUgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBudW1iZXIgb2YgbmFtZWQgaW5zdGFuY2VzIGluIGZhY2UgYE4nIGlmIHdlIGhhdmUgYSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgR1ggdmFyaWF0aW9uIGZvbnQgKG9yIHplcm8gb3RoZXJ3aXNlKS4gIEFmdGVyICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGV4YW1pbmF0aW9uLCB0aGUgcmV0dXJuZWQgQEZUX0ZhY2Ugc3RydWN0dXJlIHNob3VsZCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBiZSBkZWFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0byBARlRfRG9uZV9GYWNlLiAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLwotICAvKiAgICAgICAgICAgICAgICAgIFNlZSBub3RlIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwNjQsMTYgKzIxMjgsNiBAQAogICAvKiAgICBzbG90IGZvciB0aGUgZmFjZSBvYmplY3QgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdGhyb3VnaCAgICAgKi8KICAgLyogICAgYGZhY2UtPmdseXBoJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PcGVuX0ZhY2UgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoZSBmb250ICAgICAgICAgKi8KLSAgLyogICAgZm9ybWF0IG9mIGEgZ2l2ZW4gZm9udCByZXNvdXJjZSBpcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGUuICBJZiB0aGUgICovCi0gIC8qICAgIGBmYWNlX2luZGV4JyBmaWVsZCBpcyBuZWdhdGl2ZSwgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzfjAgICAqLwotICAvKiAgICBpZiB0aGUgZm9udCBmb3JtYXQgaXMgcmVjb2duaXplZCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlOyAgICAgICAgICAgKi8KLSAgLyogICAgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBtb3JlIG9yIGxlc3MgZW1wdHkgZmFjZSBoYW5kbGUgaW4gYCphZmFjZScgICovCi0gIC8qICAgIChpZiBgYWZhY2UnIGlzbid0IE5VTEwpLiAgVGhlIG9ubHkgdXNlZnVsIGZpZWxkIGluIHRoaXMgc3BlY2lhbCAgICAqLwotICAvKiAgICBjYXNlIGlzIGBmYWNlLT5udW1fZmFjZXMnIHRoYXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBmYWNlcyB3aXRoaW4gICAgKi8KLSAgLyogICAgdGhlIGZvbnQgZmlsZS4gIEFmdGVyIGV4YW1pbmF0aW9uLCB0aGUgcmV0dXJuZWQgQEZUX0ZhY2Ugc3RydWN0dXJlICovCi0gIC8qICAgIHNob3VsZCBiZSBkZWFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0byBARlRfRG9uZV9GYWNlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRWFjaCBuZXcgZmFjZSBvYmplY3QgY3JlYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gYWxzbyBvd25zIGEgICAgICAgICovCiAgIC8qICAgIGRlZmF1bHQgQEZUX1NpemUgb2JqZWN0LCBhY2Nlc3NpYmxlIGFzIGBmYWNlLT5zaXplJy4gICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwODQsNiArMjEzOCw3NCBAQAogICAvKiAgICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgcmVmZXJlbmNlIGNvdW50ZXJzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgKi8KICAgLyogICAgQEZUX1JlZmVyZW5jZV9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUbyBsb29wIG92ZXIgYWxsIGZhY2VzLCB1c2UgY29kZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgc25pcHBldCAgKi8KKyAgLyogICAgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfRmFjZSAgZmFjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0xvbmcgIGksIG51bV9mYWNlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGVycm9yID0gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCBhcmdzLCAtMSwgJmZhY2UgKTsgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBpZiAoIGVycm9yICkgeyAuLi4gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIG51bV9mYWNlcyA9IGZhY2UtPm51bV9mYWNlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2ZhY2VzOyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksIGFyZ3MsIGksICZmYWNlICk7ICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVG8gbG9vcCBvdmVyIGFsbCB2YWxpZCB2YWx1ZXMgZm9yIGBmYWNlX2luZGV4JywgdXNlIHNvbWV0aGluZyAgICAgICovCisgIC8qICAgIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBzbmlwcGV0LCBhZ2FpbiB3aXRob3V0IGVycm9yIGhhbmRsaW5nLiAgICAqLworICAvKiAgICBUaGUgY29kZSBhY2Nlc3NlcyBhbGwgZmFjZXMgaW1tZWRpYXRlbHkgKHRodXMgb25seSBhIHNpbmdsZSBjYWxsICAgKi8KKyAgLyogICAgb2YgYEZUX09wZW5fRmFjZScgd2l0aGluIHRoZSBkby1sb29wKSwgd2l0aCBhbmQgd2l0aG91dCBuYW1lZCAgICAgICovCisgIC8qICAgIGluc3RhbmNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0ZhY2UgIGZhY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfTG9uZyAgbnVtX2ZhY2VzICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0xvbmcgIG51bV9pbnN0YW5jZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfTG9uZyAgZmFjZV9pZHggICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0xvbmcgIGluc3RhbmNlX2lkeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBGVF9Mb25nICBpZCA9ICggaW5zdGFuY2VfaWR4IDw8IDE2ICkgKyBmYWNlX2lkeDsgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgYXJncywgaWQsICZmYWNlICk7ICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgaWYgKCBlcnJvciApIHsgLi4uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBudW1fZmFjZXMgICAgID0gZmFjZS0+bnVtX2ZhY2VzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgbnVtX2luc3RhbmNlcyA9IGZhY2UtPnN0eWxlX2ZsYWdzID4+IDE2OyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX0RvbmVfRmFjZSggZmFjZSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgaWYgKCBpbnN0YW5jZV9pZHggPCBudW1faW5zdGFuY2VzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgaW5zdGFuY2VfaWR4Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgZmFjZV9pZHgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIGluc3RhbmNlX2lkeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgfSB3aGlsZSAoIGZhY2VfaWR4IDwgbnVtX2ZhY2VzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PcGVuX0ZhY2UoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3Blbl9BcmdzKiAgYXJncywKQEAgLTIyMjcsMTcgKzIzNDksMjYgQEAKICAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB0aGF0IGxpc3RzIHRoZSBzdXBwb3J0ZWQgc2l6ZSByZXF1ZXN0IHR5cGVzLiAgICovCisgIC8qICAgIEFuIGVudW1lcmF0aW9uIHR5cGUgdGhhdCBsaXN0cyB0aGUgc3VwcG9ydGVkIHNpemUgcmVxdWVzdCB0eXBlcywgICAqLworICAvKiAgICBpLmUuLCB3aGF0IGlucHV0IHNpemUgKGluIGZvbnQgdW5pdHMpIG1hcHMgdG8gdGhlIHJlcXVlc3RlZCBvdXRwdXQgKi8KKyAgLyogICAgc2l6ZSAoaW4gcGl4ZWxzLCBhcyBjb21wdXRlZCBmcm9tIHRoZSBhcmd1bWVudHMgb2YgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9TaXplX1JlcXVlc3QpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBub21pbmFsIHNpemUuICBUaGUgYHVuaXRzX3Blcl9FTScgZmllbGQgb2YgQEZUX0ZhY2VSZWMgaXMgICAgKi8KICAgLyogICAgICB1c2VkIHRvIGRldGVybWluZSBib3RoIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHNjYWxpbmcgZm91bmQgaW4gbW9zdCBhcHBsaWNhdGlvbnMuICBJbiAgICAgKi8KKyAgLyogICAgICBwYXJ0aWN1bGFyLCB1c2UgdGhpcyBzaXplIHJlcXVlc3QgdHlwZSBmb3IgVHJ1ZVR5cGUgZm9udHMgaWYgICAgICovCisgIC8qICAgICAgdGhleSBwcm92aWRlIG9wdGljYWwgc2NhbGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gIE5vdGUsICAgICAgICAqLworICAvKiAgICAgIGhvd2V2ZXIsIHRoYXQgYHVuaXRzX3Blcl9FTScgaXMgYSByYXRoZXIgYWJzdHJhY3QgdmFsdWUgd2hpY2ggICAgKi8KKyAgLyogICAgICBiZWFycyBubyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGdseXBocyBpbiBhIGZvbnQuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgcmVhbCBkaW1lbnNpb24uICBUaGUgc3VtIG9mIHRoZSB0aGUgYGFzY2VuZGVyJyBhbmQgKG1pbnVzICAgICovCi0gIC8qICAgICAgb2YpIHRoZSBgZGVzY2VuZGVyJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lICAqLwotICAvKiAgICAgIGJvdGggc2NhbGluZyB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgcmVhbCBkaW1lbnNpb24uICBUaGUgc3VtIG9mIHRoZSBgYXNjZW5kZXInIGFuZCAobWludXMgb2YpICAgICovCisgIC8qICAgICAgdGhlIGBkZXNjZW5kZXInIGZpZWxkcyBvZiBARlRfRmFjZVJlYyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgYm90aCAqLworICAvKiAgICAgIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX0JCT1ggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBmb250IGJvdW5kaW5nIGJveC4gIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBgYmJveCcgZmllbGQgKi8KQEAgLTIyODcsMjIgKzI0MTgsMjkgQEAKICAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHR5cGUgICAgICAgICAgIDo6IFNlZSBARlRfU2l6ZV9SZXF1ZXN0X1R5cGUuICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2lkdGggICAgICAgICAgOjogVGhlIGRlc2lyZWQgd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICAgICAgICAgIDo6IFRoZSBkZXNpcmVkIHdpZHRoLCBnaXZlbiBhcyBhIDI2LjYgZnJhY3Rpb25hbCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBwb2ludCB2YWx1ZSAod2l0aCA3MnB0ID0gMWluKS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhlaWdodCAgICAgICAgIDo6IFRoZSBkZXNpcmVkIGhlaWdodC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgICA6OiBUaGUgZGVzaXJlZCBoZWlnaHQsIGdpdmVuIGFzIGEgMjYuNiBmcmFjdGlvbmFsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgcG9pbnQgdmFsdWUgKHdpdGggNzJwdCA9IDFpbikuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uLiAgSWYgc2V0IHRvIHplcm8sICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEgMjYuNiBmcmFjdGlvbmFsIHBpeGVsICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIChkcGksIGkuZS4sIHBpeGVscyBwZXIgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgaW5jaCkuICBJZiBzZXQgdG8gemVybywgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCAqcGl4ZWwqIHZhbHVlLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVydFJlc29sdXRpb24gOjogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24uICBJZiBzZXQgdG8gemVybywgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIGBoZWlnaHQnIGlzIHRyZWF0ZWQgYXMgYSAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydFJlc29sdXRpb24gOjogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24gKGRwaSwgaS5lLiwgcGl4ZWxzIHBlciAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIGluY2gpLiAgSWYgc2V0IHRvIHplcm8sIGBoZWlnaHQnIGlzIHRyZWF0ZWQgYXMgYSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAyNi42IGZyYWN0aW9uYWwgKnBpeGVsKiB2YWx1ZS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBJZiBgd2lkdGgnIGlzIHplcm8sIHRoZW4gdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZSBpcyBzZXQgZXF1YWwgKi8KICAgLyogICAgdG8gdGhlIHZlcnRpY2FsIHNjYWxpbmcgdmFsdWUsIGFuZCB2aWNlIHZlcnNhLiAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgdHlwZScgaXMgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTLCBgd2lkdGgnIGFuZCBgaGVpZ2h0JyBhcmUgKi8KKyAgLyogICAgaW50ZXJwcmV0ZWQgZGlyZWN0bHkgYXMgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlcywgd2l0aG91dCAgICovCisgIC8qICAgIGFueSBmdXJ0aGVyIG1vZGlmaWNhdGlvbiwgYW5kIGJvdGggYGhvcmlSZXNvbHV0aW9uJyBhbmQgICAgICAgICAgICAqLworICAvKiAgICBgdmVydFJlc29sdXRpb24nIGFyZSBpZ25vcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplX1JlcXVlc3RSZWNfCiAgIHsKICAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgdHlwZTsKQEAgLTI0NzQsNiArMjYxMiwxMCBAQAogICAvKiAgICBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBnbHlwaCBpbiB0aGUgZm9udCkuICBTZWUgdGhlIGRpc2N1c3Npb24gKi8KICAgLyogICAgb2YgdGhlIEBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIGZsYWcgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB5b3UgcmVjZWl2ZSBgRlRfRXJyX0dseXBoX1Rvb19CaWcnLCB0cnkgZ2V0dGluZyB0aGUgZ2x5cGggICAgICAgKi8KKyAgLyogICAgb3V0bGluZSBhdCBFTSBzaXplLCB0aGVuIHNjYWxlIGl0IG1hbnVhbGx5IGFuZCBmaWxsIGl0IGFzIGEgICAgICAgICovCisgIC8qICAgIGdyYXBoaWNzIG9wZXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0xvYWRfR2x5cGgoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2x5cGhfaW5kZXgsCkBAIC0yNTIxLDcgKzI2NjMsNyBAQAogICAgKiAgIEZUX0xPQURfWFhYCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX0xvYWRfR2x5cGggdG8gaW5kaWNhdGUKKyAgICogICBBIGxpc3Qgb2YgYml0IGZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX0xvYWRfR2x5cGggdG8gaW5kaWNhdGUKICAgICogICB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9ucyB0byBwZXJmb3JtIGR1cmluZyBnbHlwaCBsb2FkaW5nLgogICAgKgogICAgKiBAdmFsdWVzOgpAQCAtMjYzOCw2ICsyNzgwLDE2IEBACiAgICAqICAgICBiaXRtYXBzIHRyYW5zcGFyZW50bHkuICBUaG9zZSBiaXRtYXBzIHdpbGwgYmUgaW4gdGhlCiAgICAqICAgICBARlRfUElYRUxfTU9ERV9HUkFZIGZvcm1hdC4KICAgICoKKyAgICogICBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyA6OgorICAgKiAgICAgVGhpcyBmbGFnIHNldHMgY29tcHV0aW5nIGdseXBoIG1ldHJpY3Mgd2l0aG91dCB0aGUgdXNlIG9mIGJ1bmRsZWQKKyAgICogICAgIG1ldHJpY3MgdGFibGVzIChmb3IgZXhhbXBsZSwgdGhlIGBoZG14JyB0YWJsZSBpbiBUcnVlVHlwZSBmb250cykuCisgICAqICAgICBXZWxsLWJlaGF2aW5nIGZvbnRzIGhhdmUgb3B0aW1pemVkIGJ1bmRsZWQgbWV0cmljcyBhbmQgdGhlc2Ugc2hvdWxkCisgICAqICAgICBiZSB1c2VkLiAgVGhpcyBmbGFnIGlzIG1haW5seSB1c2VkIGJ5IGZvbnQgdmFsaWRhdGluZyBvciBmb250CisgICAqICAgICBlZGl0aW5nIGFwcGxpY2F0aW9ucywgd2hpY2ggbmVlZCB0byBpZ25vcmUsIHZlcmlmeSwgb3IgZWRpdCB0aG9zZQorICAgKiAgICAgdGFibGVzLgorICAgKgorICAgKiAgICAgQ3VycmVudGx5LCB0aGlzIGZsYWcgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgVHJ1ZVR5cGUgZm9udHMuCisgICAqCiAgICAqICAgRlRfTE9BRF9DUk9QX0JJVE1BUCA6OgogICAgKiAgICAgSWdub3JlZC4gIERlcHJlY2F0ZWQuCiAgICAqCkBAIC0yNjgzLDYgKzI4MzUsNyBAQAogI2RlZmluZSBGVF9MT0FEX05PX0FVVE9ISU5UICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxNSApCiAgIC8qIEJpdHMgMTYuLjE5IGFyZSB1c2VkIGJ5IGBGVF9MT0FEX1RBUkdFVF8nICovCiAjZGVmaW5lIEZUX0xPQURfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDIwICkKKyNkZWZpbmUgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgICAgICAgICAgICAgICggMUwgPDwgMjEgKQogCiAgIC8qICovCiAKQEAgLTI3MDUsOSArMjg1OCw2IEBACiAgICAqICAgaGF2ZSBzcGVjaWZpZWQgKGUuZy4sIHRoZSBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlcikuICBZb3UgY2FuIHNldAogICAgKiAgIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvLWhpbnRlciBpcyB1c2VkLgogICAgKgotICAgKiAgIEFsc28gbm90ZSB0aGF0IEBGVF9MT0FEX1RBUkdFVF9MSUdIVCBpcyBhbiBleGNlcHRpb24sIGluIHRoYXQgaXQKLSAgICogICBhbHdheXMgaW1wbGllcyBARlRfTE9BRF9GT1JDRV9BVVRPSElOVC4KLSAgICoKICAgICogQHZhbHVlczoKICAgICogICBGVF9MT0FEX1RBUkdFVF9OT1JNQUwgOjoKICAgICogICAgIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGRlZmF1bHQgaGludGluZyBhbGdvcml0aG0sIG9wdGltaXplZCBmb3IKQEAgLTI3MTUsMTEgKzI4NjUsMTQgQEAKICAgICogICAgIEBGVF9MT0FEX1RBUkdFVF9NT05PIGluc3RlYWQuCiAgICAqCiAgICAqICAgRlRfTE9BRF9UQVJHRVRfTElHSFQgOjoKLSAgICogICAgIEEgbGlnaHRlciBoaW50aW5nIGFsZ29yaXRobSBmb3Igbm9uLW1vbm9jaHJvbWUgbW9kZXMuICBNYW55Ci0gICAqICAgICBnZW5lcmF0ZWQgZ2x5cGhzIGFyZSBtb3JlIGZ1enp5IGJ1dCBiZXR0ZXIgcmVzZW1ibGUgaXRzIG9yaWdpbmFsCi0gICAqICAgICBzaGFwZS4gIEEgYml0IGxpa2UgcmVuZGVyaW5nIG9uIE1hYyBPU35YLgotICAgKgotICAgKiAgICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhpcyB0YXJnZXQgaW1wbGllcyBARlRfTE9BRF9GT1JDRV9BVVRPSElOVC4KKyAgICogICAgIEEgbGlnaHRlciBoaW50aW5nIGFsZ29yaXRobSBmb3IgZ3JheS1sZXZlbCBtb2Rlcy4gIE1hbnkgZ2VuZXJhdGVkCisgICAqICAgICBnbHlwaHMgYXJlIGZ1enppZXIgYnV0IGJldHRlciByZXNlbWJsZSB0aGVpciBvcmlnaW5hbCBzaGFwZS4gIFRoaXMKKyAgICogICAgIGlzIGFjaGlldmVkIGJ5IHNuYXBwaW5nIGdseXBocyB0byB0aGUgcGl4ZWwgZ3JpZCBvbmx5IHZlcnRpY2FsbHkKKyAgICogICAgIChZLWF4aXMpLCBhcyBpcyBkb25lIGJ5IE1pY3Jvc29mdCdzIENsZWFyVHlwZSBhbmQgQWRvYmUncworICAgKiAgICAgcHJvcHJpZXRhcnkgZm9udCByZW5kZXJlci4gIFRoaXMgcHJlc2VydmVzIGludGVyLWdseXBoIHNwYWNpbmcgaW4KKyAgICogICAgIGhvcml6b250YWwgdGV4dC4gIFRoZSBzbmFwcGluZyBpcyBkb25lIGVpdGhlciBieSB0aGUgbmF0aXZlIGZvbnQKKyAgICogICAgIGRyaXZlciBpZiB0aGUgZHJpdmVyIGl0c2VsZiBhbmQgdGhlIGZvbnQgc3VwcG9ydCBpdCBvciBieSB0aGUKKyAgICogICAgIGF1dG8taGludGVyLgogICAgKgogICAgKiAgIEZUX0xPQURfVEFSR0VUX01PTk8gOjoKICAgICogICAgIFN0cm9uZyBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vbm9jaHJvbWUKQEAgLTI3NDAsNyArMjg5Myw3IEBACiAgICAqCiAgICAqICAgSWYgQEZUX0xPQURfUkVOREVSIGlzIGFsc28gc2V0LCB0aGUgZ2x5cGggaXMgcmVuZGVyZWQgaW4gdGhlCiAgICAqICAgY29ycmVzcG9uZGluZyBtb2RlIChpLmUuLCB0aGUgbW9kZSB0aGF0IG1hdGNoZXMgdGhlIHVzZWQgYWxnb3JpdGhtCi0gICAqICAgYmVzdCkuICBBbiBleGVwdGlvbiBpcyBGVF9MT0FEX1RBUkdFVF9NT05PIHNpbmNlIGl0IGltcGxpZXMKKyAgICogICBiZXN0KS4gIEFuIGV4Y2VwdGlvbiBpcyBGVF9MT0FEX1RBUkdFVF9NT05PIHNpbmNlIGl0IGltcGxpZXMKICAgICogICBARlRfTE9BRF9NT05PQ0hST01FLgogICAgKgogICAgKiAgIFlvdSBjYW4gdXNlIGEgaGludGluZyBhbGdvcml0aG0gdGhhdCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUKQEAgLTI4MjYsNyArMjk3OSwxMCBAQAogICAvKiAgICBmaWVsZCBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgZ2l2ZXMgdGhlIGZvcm1hdCBvZiB0aGUgICAgKi8KICAgLyogICAgcmV0dXJuZWQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbGwgbW9kZXMgZXhjZXB0IEBGVF9SRU5ERVJfTU9ERV9NT05PIHVzZSAyNTYgbGV2ZWxzIG9mIG9wYWNpdHkuICAgKi8KKyAgLyogICAgQWxsIG1vZGVzIGV4Y2VwdCBARlRfUkVOREVSX01PREVfTU9OTyB1c2UgMjU2IGxldmVscyBvZiBvcGFjaXR5LCAgICovCisgIC8qICAgIGluZGljYXRpbmcgcGl4ZWwgY292ZXJhZ2UuICBVc2UgbGluZWFyIGFscGhhIGJsZW5kaW5nIGFuZCBnYW1tYSAgICAqLworICAvKiAgICBjb3JyZWN0aW9uIHRvIGNvcnJlY3RseSByZW5kZXIgbm9uLW1vbm9jaHJvbWUgZ2x5cGggYml0bWFwcyBvbnRvIGEgKi8KKyAgLyogICAgc3VyZmFjZTsgc2VlIEBGVF9SZW5kZXJfR2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfUkVOREVSX01PREVfTk9STUFMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yOTEyLDYgKzMwNjgsODMgQEAKICAgLyogICAgVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgZm9udCBzY2FsaW5nIHZhbHVlcyBtdXN0IGJlIHNldCB3aXRoICAgICovCiAgIC8qICAgIGZ1bmN0aW9ucyBsaWtlIEBGVF9TZXRfQ2hhcl9TaXplIGJlZm9yZSBjYWxsaW5nIEZUX1JlbmRlcl9HbHlwaC4gICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBGcmVlVHlwZSBvdXRwdXRzIGEgYml0bWFwIG9mIGEgZ2x5cGgsIGl0IHJlYWxseSBvdXRwdXRzIGFuICAgICovCisgIC8qICAgIGFscGhhIGNvdmVyYWdlIG1hcC4gIElmIGEgcGl4ZWwgaXMgY29tcGxldGVseSBjb3ZlcmVkIGJ5IGEgICAgICAgICAqLworICAvKiAgICBmaWxsZWQtaW4gb3V0bGluZSwgdGhlIGJpdG1hcCBjb250YWlucyAweEZGIGF0IHRoYXQgcGl4ZWwsIG1lYW5pbmcgKi8KKyAgLyogICAgdGhhdCAweEZGLzB4RkYgZnJhY3Rpb24gb2YgdGhhdCBwaXhlbCBpcyBjb3ZlcmVkLCBtZWFuaW5nIHRoZSAgICAgICovCisgIC8qICAgIHBpeGVsIGlzIDEwMCUgYmxhY2sgKG9yIDAlIGJyaWdodCkuICBJZiBhIHBpeGVsIGlzIG9ubHkgNTAlICAgICAgICAqLworICAvKiAgICBjb3ZlcmVkICh2YWx1ZSAweDgwKSwgdGhlIHBpeGVsIGlzIG1hZGUgNTAlIGJsYWNrICg1MCUgYnJpZ2h0IG9yIGEgKi8KKyAgLyogICAgbWlkZGxlIHNoYWRlIG9mIGdyZXkpLiAgMCUgY292ZXJlZCBtZWFucyAwJSBibGFjayAoMTAwJSBicmlnaHQgb3IgICovCisgIC8qICAgIHdoaXRlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT24gaGlnaC1EUEkgc2NyZWVucyBsaWtlIG9uIHNtYXJ0cGhvbmVzIGFuZCB0YWJsZXRzLCB0aGUgcGl4ZWxzICAgICovCisgIC8qICAgIGFyZSBzbyBzbWFsbCB0aGF0IHRoZWlyIGNoYW5jZSBvZiBiZWluZyBjb21wbGV0ZWx5IGNvdmVyZWQgYW5kICAgICAqLworICAvKiAgICB0aGVyZWZvcmUgY29tcGxldGVseSBibGFjayBhcmUgZmFpcmx5IGdvb2QuICBPbiB0aGUgbG93LURQSSAgICAgICAgKi8KKyAgLyogICAgc2NyZWVucywgaG93ZXZlciwgdGhlIHNpdHVhdGlvbiBpcyBkaWZmZXJlbnQuICBUaGUgcGl4ZWxzIGFyZSB0b28gICovCisgIC8qICAgIGxhcmdlIGZvciBtb3N0IG9mIHRoZSBkZXRhaWxzIG9mIGEgZ2x5cGggYW5kIHNoYWRlcyBvZiBncmF5IGFyZSAgICAqLworICAvKiAgICB0aGUgbm9ybSByYXRoZXIgdGhhbiB0aGUgZXhjZXB0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgaXMgcmVsZXZhbnQgYmVjYXVzZSBhbGwgb3VyIHNjcmVlbnMgaGF2ZSBhIHNlY29uZCBwcm9ibGVtOiAgICAqLworICAvKiAgICB0aGV5IGFyZSBub3QgbGluZWFyLiAgMX4rfjEgaXMgbm90fjIuICBUd2ljZSB0aGUgdmFsdWUgZG9lcyBub3QgICAgKi8KKyAgLyogICAgcmVzdWx0IGluIHR3aWNlIHRoZSBicmlnaHRuZXNzLiAgV2hlbiBhIHBpeGVsIGlzIG9ubHkgNTAlIGNvdmVyZWQsICovCisgIC8qICAgIHRoZSBjb3ZlcmFnZSBtYXAgc2F5cyA1MCUgYmxhY2ssIGFuZCB0aGlzIHRyYW5zbGF0ZXMgdG8gYSBwaXhlbCAgICAqLworICAvKiAgICB2YWx1ZSBvZiAxMjggd2hlbiB5b3UgdXNlIDh+Yml0cyBwZXIgY2hhbm5lbCAoMC0yNTUpLiAgSG93ZXZlciwgICAgKi8KKyAgLyogICAgdGhpcyBkb2VzIG5vdCB0cmFuc2xhdGUgdG8gNTAlIGJyaWdodG5lc3MgZm9yIHRoYXQgcGl4ZWwgb24gb3VyICAgICovCisgIC8qICAgIHNSR0IgYW5kIGdhbW1hfjIuMiBzY3JlZW5zLiAgRHVlIHRvIHRoZWlyIG5vbi1saW5lYXJpdHksIHRoZXkgICAgICAqLworICAvKiAgICBkd2VsbCBsb25nZXIgaW4gdGhlIGRhcmtzIGFuZCBvbmx5IGEgcGl4ZWwgdmFsdWUgb2YgYWJvdXQgMTg2ICAgICAgKi8KKyAgLyogICAgcmVzdWx0cyBpbiA1MCUgYnJpZ2h0bmVzcyDigJMgMTI4IGVuZHMgdXAgdG9vIGRhcmsgb24gYm90aCBicmlnaHQgICAgKi8KKyAgLyogICAgYW5kIGRhcmsgYmFja2dyb3VuZHMuICBUaGUgbmV0IHJlc3VsdCBpcyB0aGF0IGRhcmsgdGV4dCBsb29rcyAgICAgICovCisgIC8qICAgIGJ1cm50LW91dCwgcGl4ZWx5IGFuZCBibG90Y2h5IG9uIGJyaWdodCBiYWNrZ3JvdW5kLCBicmlnaHQgdGV4dCAgICAqLworICAvKiAgICB0b28gZnJhaWwgb24gZGFyayBiYWNrZ3JvdW5kcywgYW5kIGNvbG9yZWQgdGV4dCBvbiBjb2xvcmVkICAgICAgICAgKi8KKyAgLyogICAgYmFja2dyb3VuZCAoZm9yIGV4YW1wbGUsIHJlZCBvbiBncmVlbikgc2VlbXMgdG8gaGF2ZSBkYXJrIGhhbG9zIG9yICovCisgIC8qICAgIGBkaXJ0JyBhcm91bmQgaXQuICBUaGUgc2l0dWF0aW9uIGlzIGVzcGVjaWFsbHkgdWdseSBmb3IgZGlhZ29uYWwgICAqLworICAvKiAgICBzdGVtcyBsaWtlIGluIGB3JyBnbHlwaCBzaGFwZXMgd2hlcmUgdGhlIHF1YWxpdHkgb2YgRnJlZVR5cGUncyAgICAgKi8KKyAgLyogICAgYW50aS1hbGlhc2luZyBkZXBlbmRzIG9uIHRoZSBjb3JyZWN0IGRpc3BsYXkgb2YgZ3JheXMuICBPbiAgICAgICAgICovCisgIC8qICAgIGhpZ2gtRFBJIHNjcmVlbnMgd2hlcmUgc21hbGxlciwgZnVsbHkgYmxhY2sgcGl4ZWxzIHJlaWduIHN1cHJlbWUsICAqLworICAvKiAgICB0aGlzIGRvZXNuJ3QgbWF0dGVyLCBidXQgb24gb3VyIGxvdy1EUEkgc2NyZWVucyB3aXRoIGFsbCB0aGUgZ3JheSAgKi8KKyAgLyogICAgc2hhZGVzLCBpdCBkb2VzLiAgMCUgYW5kIDEwMCUgYnJpZ2h0bmVzcyBhcmUgdGhlIHNhbWUgdGhpbmdzIGluICAgICovCisgIC8qICAgIGxpbmVhciBhbmQgbm9uLWxpbmVhciBzcGFjZSwganVzdCBhbGwgdGhlIHNoYWRlcyBpbi1iZXR3ZWVuICAgICAgICAqLworICAvKiAgICBhcmVuJ3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBibGVuZGluZyBmdW5jdGlvbiBmb3IgcGxhY2luZyB0ZXh0IG92ZXIgYSBiYWNrZ3JvdW5kIGlzICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgZHN0ID0gYWxwaGEgKiBzcmMgKyAoMSAtIGFscGhhKSAqIGRzdCAgICAsICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdoaWNoIGlzIGtub3duIGFzIHRoZSBPVkVSIG9wZXJhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVG8gY29ycmVjdGx5IGNvbXBvc2l0ZSBhbiBhbnRpYWxpYXNlZCBwaXhlbCBvZiBhIGdseXBoIG9udG8gYSAgICAgICovCisgIC8qICAgIHN1cmZhY2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMS4gdGFrZSB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgKGUuZy4sIGluIHNSR0Igc3BhY2UpICovCisgIC8qICAgICAgIGFuZCBhcHBseSBnYW1tYSB0byBnZXQgdGhlbSBpbiBhIGxpbmVhciBzcGFjZSwgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4gdXNlIE9WRVIgdG8gYmxlbmQgdGhlIHR3byBsaW5lYXIgY29sb3JzIHVzaW5nIHRoZSBnbHlwaCBwaXhlbCAgICovCisgIC8qICAgICAgIGFzIHRoZSBhbHBoYSB2YWx1ZSAocmVtZW1iZXIsIHRoZSBnbHlwaCBiaXRtYXAgaXMgYW4gYWxwaGEgICAgICAqLworICAvKiAgICAgICBjb3ZlcmFnZSBiaXRtYXApLCBhbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDMuIGFwcGx5IGludmVyc2UgZ2FtbWEgdG8gdGhlIGJsZW5kZWQgcGl4ZWwgYW5kIHdyaXRlIGl0IGJhY2sgdG8gICAqLworICAvKiAgICAgICB0aGUgaW1hZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEludGVybmFsIHRlc3RpbmcgYXQgQWRvYmUgZm91bmQgdGhhdCBhIHRhcmdldCBpbnZlcnNlIGdhbW1hIG9mfjEuOCAqLworICAvKiAgICBmb3Igc3RlcH4zIGdpdmVzIGdvb2QgcmVzdWx0cyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGRpc3BsYXlzIHdpdGggKi8KKyAgLyogICAgYW4gc1JHQiBnYW1tYSBjdXJ2ZSBvciBhIHNpbWlsYXIgb25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHByb2Nlc3MgY2FuIGNvc3QgcGVyZm9ybWFuY2UuICBUaGVyZSBpcyBhbiBhcHByb3hpbWF0aW9uIHRoYXQgKi8KKyAgLyogICAgZG9lcyBub3QgbmVlZCB0byBrbm93IGFib3V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yOyBzZWUgICAgICAgICAgICAgICovCisgIC8qICAgIGh0dHBzOi8vYmVsLmZpL2FsYW5raWxhL2xjZC8gYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBodHRwczovL2JlbC5maS9hbGFua2lsYS9sY2QvYWxwY29yLmh0bWwgZm9yIGRldGFpbHMuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICpBVFRFTlRJT04qOiBMaW5lYXIgYmxlbmRpbmcgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB3aGVuIGRlYWxpbmcgICAqLworICAvKiAgICB3aXRoIHN1YnBpeGVsLXJlbmRlcmVkIGdseXBocyB0byBwcmV2ZW50IGNvbG9yLWZyaW5naW5nISAgQSAgICAgICAgKi8KKyAgLyogICAgc3VicGl4ZWwtcmVuZGVyZWQgZ2x5cGggbXVzdCBmaXJzdCBiZSBmaWx0ZXJlZCB3aXRoIGEgZmlsdGVyIHRoYXQgICovCisgIC8qICAgIGdpdmVzIGVxdWFsIHdlaWdodCB0byB0aGUgdGhyZWUgY29sb3IgcHJpbWFyaWVzIGFuZCBkb2VzIG5vdCAgICAgICAqLworICAvKiAgICBleGNlZWQgYSBzdW0gb2YgMHgxMDAsIHNlZSBzZWN0aW9uIEBsY2RfZmlsdGVyaW5nLiAgVGhlbiB0aGUgICAgICAgKi8KKyAgLyogICAgb25seSBkaWZmZXJlbmNlIHRvIGdyYXkgbGluZWFyIGJsZW5kaW5nIGlzIHRoYXQgc3VicGl4ZWwtcmVuZGVyZWQgICovCisgIC8qICAgIGxpbmVhciBibGVuZGluZyBpcyBkb25lIDN+dGltZXMgcGVyIHBpeGVsOiByZWQgZm9yZWdyb3VuZCBzdWJwaXhlbCAqLworICAvKiAgICB0byByZWQgYmFja2dyb3VuZCBzdWJwaXhlbCBhbmQgc28gb24gZm9yIGdyZWVuIGFuZCBibHVlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9SZW5kZXJfR2x5cGgoIEZUX0dseXBoU2xvdCAgICBzbG90LAogICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSApOwpAQCAtMjkyNywxNSArMzE2MCwyMiBAQAogICAvKiAgICBARlRfR2V0X0tlcm5pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9LRVJOSU5HX0RFRkFVTFQgIDo6IFJldHVybiBzY2FsZWQgYW5kIGdyaWQtZml0dGVkIGtlcm5pbmcgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMgKHZhbHVlIGlzfjApLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfREVGQVVMVCAgOjogUmV0dXJuIGdyaWQtZml0dGVkIGtlcm5pbmcgZGlzdGFuY2VzIGluICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyAodmFsdWUgaXN+MCkuICBXaGV0aGVyIHRoZXkgYXJlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWQgZGVwZW5kcyBvbiBARlRfTE9BRF9OT19TQ0FMRS4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9LRVJOSU5HX1VORklUVEVEIDo6IFJldHVybiBzY2FsZWQgYnV0IHVuLWdyaWQtZml0dGVkIGtlcm5pbmcgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfVU5GSVRURUQgOjogUmV0dXJuIHVuLWdyaWQtZml0dGVkIGtlcm5pbmcgZGlzdGFuY2VzIGluICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICBXaGV0aGVyIHRoZXkgYXJlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWQgZGVwZW5kcyBvbiBARlRfTE9BRF9OT19TQ0FMRS4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9LRVJOSU5HX1VOU0NBTEVEIDo6IFJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgaW4gb3JpZ2luYWwgZm9udCAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfS0VSTklOR19ERUZBVUxUIHJldHVybnMgZnVsbCBwaXhlbCB2YWx1ZXM7IGl0IGFsc28gbWFrZXMgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGhldXJpc3RpY2FsbHkgc2NhbGUgZG93biBrZXJuaW5nIGRpc3RhbmNlcyBhdCBzbWFsbCBwcGVtICAqLworICAvKiAgICB2YWx1ZXMgc28gdGhhdCB0aGV5IGRvbid0IGJlY29tZSB0b28gYmlnLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgZW51bSAgRlRfS2VybmluZ19Nb2RlXwogICB7CiAgICAgRlRfS0VSTklOR19ERUZBVUxUICA9IDAsCkBAIC0yOTcyLDkgKzMyMTIsMTAgQEAKICAgLyogICAgICAgICAgICAgICAgICAga2VybmluZyB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWtlcm5pbmcgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBlaXRoZXIgaW4gZm9udCB1bml0cyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIG9yIGluIHBpeGVscyAoMjYuNiBmb3JtYXQpIGZvciBzY2FsYWJsZSBmb3JtYXRzLCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyBmb3JtYXRzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWtlcm5pbmcgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBlaXRoZXIgaW4gZm9udCB1bml0cywgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzICgyNi42IGZvcm1hdCksIG9yIHBpeGVscyBmb3IgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMDcwLDcgKzMzMTEsNyBAQAogICAvKiAgICBgLm5vdGRlZicpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybyAgICAgICAgICAqLwotICAvKiAgICBgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUycgaXMgbm90IGRlZmluZWQgaW4gYGZ0b3B0aW9ucy5oJy4gKi8KKyAgLyogICAgYEZUX0NPTkZJR19PUFRJT05fTk9fR0xZUEhfTkFNRVMnIGlzIG5vdCBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJy4gICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X0dseXBoX05hbWUoIEZUX0ZhY2UgICAgIGZhY2UsCkBAIC0zMjU5LDYgKzM1MDAsMTMgQEAKICAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQmUgYXdhcmUgdGhhdCBjaGFyYWN0ZXIgY29kZXMgY2FuIGhhdmUgdmFsdWVzIHVwIHRvIDB4RkZGRkZGRkY7ICAgICovCisgIC8qICAgIHRoaXMgbWlnaHQgaGFwcGVuIGZvciBub24tVW5pY29kZSBvciBtYWxmb3JtZWQgY21hcHMuICBIb3dldmVyLCAgICAqLworICAvKiAgICBldmVuIHdpdGggcmVndWxhciBVbmljb2RlIGVuY29kaW5nLCBzby1jYWxsZWQgYGxhc3QgcmVzb3J0IGZvbnRzJyAgKi8KKyAgLyogICAgKHVzaW5nIFNGTlQgY21hcCBmb3JtYXQgMTMsIHNlZSBmdW5jdGlvbiBARlRfR2V0X0NNYXBfRm9ybWF0KSAgICAgICovCisgIC8qICAgIG5vcm1hbGx5IGhhdmUgZW50cmllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycyB1cCB0byAweDFGRkZGRiwgICAqLworICAvKiAgICB3aGljaCBjYW4gY2F1c2UgKmEgbG90KiBvZiBpdGVyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIE5vdGUgdGhhdCBgKmFnaW5kZXgnIGlzIHNldCB0b34wIGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5LiAgVGhlICAgICAqLwogICAvKiAgICByZXN1bHQgaXRzZWxmIGNhbiBiZX4wIGluIHR3byBjYXNlczogaWYgdGhlIGNoYXJtYXAgaXMgZW1wdHkgb3IgICAgKi8KICAgLyogICAgaWYgdGhlIHZhbHVlfjAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICovCkBAIC0zNDU0LDYgKzM3MDIsOSBAQAogICAvKiAgICAgIGJpdG1hcHMgYXZhaWxhYmxlIGluIHRoZSBmb250LCB0aGVuIHRoZSBmb250IGlzIHVuZW1iZWRkYWJsZS4gICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZmxhZ3MgYXJlIE9SZWQgdG9nZXRoZXIsIHRodXMgbW9yZSB0aGFuIGEgc2luZ2xlIHZhbHVlIGNhbiBiZSAgKi8KKyAgLyogICAgcmV0dXJuZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBXaGlsZSB0aGUgZnNUeXBlIGZsYWdzIGNhbiBpbmRpY2F0ZSB0aGF0IGEgZm9udCBtYXkgYmUgZW1iZWRkZWQsIGEgKi8KICAgLyogICAgbGljZW5zZSB3aXRoIHRoZSBmb250IHZlbmRvciBtYXkgYmUgc2VwYXJhdGVseSByZXF1aXJlZCB0byB1c2UgdGhlICovCiAgIC8qICAgIGZvbnQgaW4gdGhpcyB3YXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzgzOSw3ICs0MDkwLDggQEAKICAgLyogICAgYSA6OiBUaGUgbnVtYmVyIHRvIGJlIHJvdW5kZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEgKyAweDgwMDApICYgLTB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGBhJyByb3VuZGVkIHRvIG5lYXJlc3QgMTYuMTYgZml4ZWQgaW50ZWdlciwgaGFsZndheSBjYXNlcyBhd2F5ICAgICAqLworICAvKiAgICBmcm9tIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQogICBGVF9Sb3VuZEZpeCggRlRfRml4ZWQgIGEgKTsKQEAgLTM4NTgsNyArNDExMCw3IEBACiAgIC8qICAgIGEgOjogVGhlIG51bWJlciBmb3Igd2hpY2ggdGhlIGNlaWxpbmcgZnVuY3Rpb24gaXMgdG8gYmUgY29tcHV0ZWQuICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZXN1bHQgb2YgYChhICsgMHgxMDAwMCAtIDEpICYgLTB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgYScgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQogICBGVF9DZWlsRml4KCBGVF9GaXhlZCAgYSApOwpAQCAtMzg3Nyw3ICs0MTI5LDcgQEAKICAgLyogICAgYSA6OiBUaGUgbnVtYmVyIGZvciB3aGljaCB0aGUgZmxvb3IgZnVuY3Rpb24gaXMgdG8gYmUgY29tcHV0ZWQuICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgYSAmIC0weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGBhJyByb3VuZGVkIHRvd2FyZHMgbWludXMgaW5maW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9GaXhlZCApCiAgIEZUX0Zsb29yRml4KCBGVF9GaXhlZCAgYSApOwpAQCAtMzk1Nyw3ICs0MjA5LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZSRUVUWVBFX01BSk9SICAyCi0jZGVmaW5lIEZSRUVUWVBFX01JTk9SICA2CisjZGVmaW5lIEZSRUVUWVBFX01JTk9SICA3CiAjZGVmaW5lIEZSRUVUWVBFX1BBVENIICAwCiAKIApAQCAtNDAwMywyMCArNDI1NSwxMyBAQAogICAvKiAgICBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQYXJzZSBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIG9mIGEgVHJ1ZVR5cGUgZm9udCBmaWxlIHRvIGNoZWNrICAgKi8KLSAgLyogICAgd2hldGhlciBhbnkgb2YgdGhlIHBhdGVudGVkIG9wY29kZXMgYXJlIHVzZWQuICBUaGlzIGlzIG9ubHkgdXNlZnVsICovCi0gIC8qICAgIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZSB1bnBhdGVudGVkIGhpbnRlciB3aXRoICAgICAgICAgICAqLwotICAvKiAgICBmb250cyB0aGF0IGRvICpub3QqIHVzZSB0aGVzZSBvcGNvZGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHBhcnNlcyAqYWxsKiBnbHlwaCBpbnN0cnVjdGlvbnMgaW4gdGhlICAgICAqLwotICAvKiAgICBmb250IGZpbGUsIHdoaWNoIG1heSBiZSBzbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVwcmVjYXRlZCwgZG9lcyBub3RoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmFjZSA6OiBBIGZhY2UgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMX5pZiB0aGlzIGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IHVzZXMgb25lIG9mIHRoZSBwYXRlbnRlZCAgICAgICAgICovCi0gIC8qICAgIG9wY29kZXMsIDB+b3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBTaW5jZSBNYXkgMjAxMCwgVHJ1ZVR5cGUgaGludGluZyBpcyBubyBsb25nZXIgcGF0ZW50ZWQuICAgICAgICAgICAgKi8KQEAgLTQwMzQsOSArNDI3OSw3IEBACiAgIC8qICAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1bnBhdGVudGVkIGhpbnRlciBmb3IgYSBnaXZlbiBmYWNlLiAgICAgICAgICAqLwotICAvKiAgICBPbmx5IGVuYWJsZSBpdCBpZiB5b3UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGZhY2UgZG9lc24ndCAgICAgICAgKi8KLSAgLyogICAgdXNlIGFueSBwYXRlbnRlZCBvcGNvZGVzIChzZWUgQEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMpLiAgICAgICovCisgIC8qICAgIERlcHJlY2F0ZWQsIGRvZXMgbm90aGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGZhY2UgIDo6IEEgZmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDA0NCw5ICs0Mjg3LDcgQEAKICAgLyogICAgdmFsdWUgOjogTmV3IGJvb2xlYW4gc2V0dGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIG9sZCBzZXR0aW5nIHZhbHVlLiAgVGhpcyB3aWxsIGFsd2F5cyBiZSBmYWxzZSBpZiB0aGlzIGlzIG5vdCAgICovCi0gIC8qICAgIGFuIFNGTlQgZm9udCwgb3IgaWYgdGhlIHVucGF0ZW50ZWQgaGludGVyIGlzIG5vdCBjb21waWxlZCBpbiB0aGlzICAqLwotICAvKiAgICBpbnN0YW5jZSBvZiB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQWx3YXlzIHJldHVybnMgZmFsc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgU2luY2UgTWF5IDIwMTAsIFRydWVUeXBlIGhpbnRpbmcgaXMgbm8gbG9uZ2VyIHBhdGVudGVkLiAgICAgICAgICAgICovCkBAIC00MDYzLDcgKzQzMDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZSRUVUWVBFX0hfXyAqLworI2VuZGlmIC8qIEZSRUVUWVBFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0YWR2YW5jLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGFkdmFuYy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmgKaW5kZXggYjRkMmFlZC4uMDIzZGQ4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGFkdmFuYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDgtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRBRFZBTkNfSF9fCi0jZGVmaW5lIF9fRlRBRFZBTkNfSF9fCisjaWZuZGVmIEZUQURWQU5DX0hfCisjZGVmaW5lIEZUQURWQU5DX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xODEsNyArMTgxLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEFEVkFOQ19IX18gKi8KKyNlbmRpZiAvKiBGVEFEVkFOQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdGF1dG9oLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaApzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0YXV0b2guaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmgKaW5kZXggY2Y3Yjc2Zi4uNDhmZjFhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGF1dG9oLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgYXV0by1oaW50ZXIgKHNwZWNpZmljYXRpb24gb25seSkuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQVVUT0hfSF9fCi0jZGVmaW5lIF9fRlRBVVRPSF9IX18KKyNpZm5kZWYgRlRBVVRPSF9IXworI2RlZmluZSBGVEFVVE9IX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMjE5LDggKzIxOSw4IEBACiAgICAqICAgICAgIFUrMEYwMCAtIFUrMEZGRiAgLy8gVGliZXRhbgogICAgKiAgICAgICBVKzE5MDAgLSBVKzE5NEYgIC8vIExpbWJ1CiAgICAqICAgICAgIFUrMUI4MCAtIFUrMUJCRiAgLy8gU3VuZGFuZXNlCi0gICAqICAgICAgIFUrMUM4MCAtIFUrMUNERiAgLy8gTWVldGVpIE1heWFrCiAgICAqICAgICAgIFUrQTgwMCAtIFUrQTgyRiAgLy8gU3lsb3RpIE5hZ3JpCisgICAqICAgICAgIFUrQUJDMCAtIFUrQUJGRiAgLy8gTWVldGVpIE1heWVrCiAgICAqICAgICAgVSsxMTgwMCAtIFUrMTE4REYgLy8gU2hhcmFkYQogICAgKiAgICAgfQogICAgKgpAQCAtMjQ3LDggKzI0Nyw4IEBACiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwXwogICB7Ci0gICAgRlRfRmFjZSAgIGZhY2U7Ci0gICAgRlRfQnl0ZSogIG1hcDsKKyAgICBGVF9GYWNlICAgICBmYWNlOworICAgIEZUX1VTaG9ydCogIG1hcDsKIAogICB9IEZUX1Byb3BfR2x5cGhUb1NjcmlwdE1hcDsKIApAQCAtNDI4LDYgKzQyOCw5IEBACiAgICAqIEBub3RlOgogICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCiAgICAqCisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50CisgICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KKyAgICoKICAgICogICBUaGUgd2FycGluZyBjb2RlIGNhbiBhbHNvIGNoYW5nZSBhZHZhbmNlIHdpZHRocy4gIEhhdmUgYSBsb29rIGF0IHRoZQogICAgKiAgIGBsc2JfZGVsdGEnIGFuZCBgcnNiX2RlbHRhJyBmaWVsZHMgaW4gdGhlIEBGVF9HbHlwaFNsb3RSZWMgc3RydWN0dXJlCiAgICAqICAgZm9yIGRldGFpbHMgb24gaW1wcm92aW5nIGludGVyLWdseXBoIGRpc3RhbmNlcyB3aGlsZSByZW5kZXJpbmcuCkBAIC00MzksMTIgKzQ0Miw3MCBAQAogICAgKi8KIAogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgbm8tc3RlbS1kYXJrZW5pbmdbYXV0b2ZpdF0KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICpFeHBlcmltZW50YWwqICpvbmx5LCogKnJlcXVpcmVzKiAqbGluZWFyKiAqYWxwaGEqICpibGVuZGluZyogKmFuZCoKKyAgICogICAqZ2FtbWEqICpjb3JyZWN0aW9uKgorICAgKgorICAgKiAgIFN0ZW0gZGFya2VuaW5nIGVtYm9sZGVucyBnbHlwaHMgYXQgc21hbGxlciBzaXplcyB0byBtYWtlIHRoZW0gbW9yZQorICAgKiAgIHJlYWRhYmxlIG9uIGNvbW1vbiBsb3ctRFBJIHNjcmVlbnMgd2hlbiB1c2luZyBsaW5lYXIgYWxwaGEgYmxlbmRpbmcKKyAgICogICBhbmQgZ2FtbWEgY29ycmVjdGlvbiwgc2VlIEBGVF9SZW5kZXJfR2x5cGguICBXaGVuIG5vdCB1c2luZyBsaW5lYXIKKyAgICogICBhbHBoYSBibGVuZGluZyBhbmQgZ2FtbWEgY29ycmVjdGlvbiwgZ2x5cGhzIHdpbGwgYXBwZWFyIGhlYXZ5IGFuZAorICAgKiAgIGZ1enp5IQorICAgKgorICAgKiAgIEdhbW1hIGNvcnJlY3Rpb24gZXNzZW50aWFsbHkgbGlnaHRlbnMgZm9udHMgc2luY2Ugc2hhZGVzIG9mIGdyZXkgYXJlCisgICAqICAgc2hpZnRlZCB0byBoaWdoZXIgcGl4ZWwgdmFsdWVzICg9fmhpZ2hlciBicmlnaHRuZXNzKSB0byBtYXRjaCB0aGUKKyAgICogICBvcmlnaW5hbCBpbnRlbnRpb24gdG8gdGhlIHJlYWxpdHkgb2Ygb3VyIHNjcmVlbnMuICBUaGUgc2lkZS1lZmZlY3QgaXMKKyAgICogICB0aGF0IGdseXBocyBgdGhpbiBvdXQnLiAgTWFjIE9TflggYW5kIEFkb2JlJ3MgcHJvcHJpZXRhcnkgZm9udAorICAgKiAgIHJlbmRlcmluZyBsaWJyYXJ5IGltcGxlbWVudCBhIGNvdW50ZXItbWVhc3VyZTogc3RlbSBkYXJrZW5pbmcgYXQKKyAgICogICBzbWFsbGVyIHNpemVzIHdoZXJlIHNoYWRlcyBvZiBncmF5IGRvbWluYXRlLiAgQnkgZW1ib2xkZW5pbmcgYSBnbHlwaAorICAgKiAgIHNsaWdodGx5IGluIHJlbGF0aW9uIHRvIGl0cyBwaXhlbCBzaXplLCBpbmRpdmlkdWFsIHBpeGVscyBnZXQgaGlnaGVyCisgICAqICAgY292ZXJhZ2Ugb2YgZmlsbGVkLWluIG91dGxpbmVzIGFuZCBhcmUgdGhlcmVmb3JlIGBibGFja2VyJy4gIFRoaXMKKyAgICogICBjb3VudGVyYWN0cyB0aGUgYHRoaW5uaW5nIG91dCcgb2YgZ2x5cGhzLCBtYWtpbmcgdGV4dCByZW1haW4gcmVhZGFibGUKKyAgICogICBhdCBzbWFsbGVyIHNpemVzLiAgQWxsIGdseXBocyB0aGF0IHBhc3MgdGhyb3VnaCB0aGUgYXV0by1oaW50ZXIgd2lsbAorICAgKiAgIGJlIGVtYm9sZGVuZWQgdW5sZXNzIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIFRSVUUuCisgICAqCisgICAqICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0ZGIGRyaXZlciBmb3IgYWxnb3JpdGhtaWMgZGV0YWlscy4gIFRvdGFsCisgICAqICAgY29uc2lzdGVuY3kgd2l0aCB0aGUgQ0ZGIGRyaXZlciBpcyBjdXJyZW50bHkgbm90IGFjaGlldmVkIGJlY2F1c2UgdGhlCisgICAqICAgZW1ib2xkZW5pbmcgbWV0aG9kIGRpZmZlcnMgYW5kIGdseXBocyBtdXN0IGJlIHNjYWxlZCBkb3duIG9uIHRoZQorICAgKiAgIFktYXhpcyB0byBrZWVwIG91dGxpbmUgcG9pbnRzIGluc2lkZSB0aGVpciBwcmVjb21wdXRlZCBibHVlIHpvbmVzLgorICAgKiAgIFRoZSBzbWFsbGVyIHRoZSBzaXplIChlc3BlY2lhbGx5IDlwcGVtIGFuZCBkb3duKSwgdGhlIGhpZ2hlciB0aGUgbG9zcworICAgKiAgIG9mIGVtYm9sZGVuaW5nIHZlcnN1cyB0aGUgQ0ZGIGRyaXZlci4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSBzaW1pbGFyIHRvIHRoZSBDRkYgZHJpdmVyLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgZGFya2VuaW5nLXBhcmFtZXRlcnNbYXV0b2ZpdF0KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICpFeHBlcmltZW50YWwqICpvbmx5KgorICAgKgorICAgKiAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENGRiBkcml2ZXIgZm9yIGRldGFpbHMuICBUaGlzCisgICAqICAgaW1wbGVtZW50YXRpb24gYXBwcm9wcmlhdGVzIHRoZQorICAgKiAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfKiAjZGVmaW5lcyBmb3IgY29uc2lzdGVuY3kuCisgICAqICAgTm90ZSB0aGUgZGlmZmVyZW5jZXMgZGVzY3JpYmVkIGluIEBuby1zdGVtLWRhcmtlbmluZ1thdXRvZml0XS4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSBzaW1pbGFyIHRvIHRoZSBDRkYgZHJpdmVyLgorICAgKi8KKworCiAgIC8qICovCiAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEFVVE9IX0hfXyAqLworI2VuZGlmIC8qIEZUQVVUT0hfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRiYm94LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRiYm94LmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRiYm94LmgKaW5kZXggOWQ5ZDA0MC4uMmE0ZDIxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGJib3guaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGV4YWN0IGJib3ggY29tcHV0YXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw4ICsyNyw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEJCT1hfSF9fCi0jZGVmaW5lIF9fRlRCQk9YX0hfXworI2lmbmRlZiBGVEJCT1hfSF8KKyNkZWZpbmUgRlRCQk9YX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC05MCw3ICs5MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRCQk9YX0hfXyAqLworI2VuZGlmIC8qIEZUQkJPWF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdGJkZi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRiZGYuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oCmluZGV4IDBiZGFiZjQuLjAxNmRiYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRiZGYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQkRGX0hfXwotI2RlZmluZSBfX0ZUQkRGX0hfXworI2lmbmRlZiBGVEJERl9IXworI2RlZmluZSBGVEJERl9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQkRGX0hfXyAqLworI2VuZGlmIC8qIEZUQkRGX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0Yml0bWFwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGJpdG1hcC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKaW5kZXggNDZjYzQ3Yi4uMGVhYzdiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGJpdG1hcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYml0bWFwcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRCSVRNQVBfSF9fCi0jZGVmaW5lIF9fRlRCSVRNQVBfSF9fCisjaWZuZGVmIEZUQklUTUFQX0hfCisjZGVmaW5lIEZUQklUTUFQX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMzQsNyArMjM0LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEJJVE1BUF9IX18gKi8KKyNlbmRpZiAvKiBGVEJJVE1BUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdGJ6aXAyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0YnppcDIuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKaW5kZXggYzI1Zjk0Ni4uYjdmMmVlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGJ6aXAyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQnppcDItY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBKb2VsIEtsaW5naGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQlpJUDJfSF9fCi0jZGVmaW5lIF9fRlRCWklQMl9IX18KKyNpZm5kZWYgRlRCWklQMl9IXworI2RlZmluZSBGVEJaSVAyX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtOTYsNyArOTYsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQlpJUDJfSF9fICovCisjZW5kaWYgLyogRlRCWklQMl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdGNhY2hlLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0Y2FjaGUuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKaW5kZXggNjg1MjViYi4uODgzYzg4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGNhY2hlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQ2FjaGUgc3Vic3lzdGVtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQ0FDSEVfSF9fCi0jZGVmaW5lIF9fRlRDQUNIRV9IX18KKyNpZm5kZWYgRlRDQUNIRV9IXworI2RlZmluZSBGVENBQ0hFX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC03NDksNyArNzQ5LDcgQEAKICAgLyogICAgYWdseXBoIDo6IFRoZSBjb3JyZXNwb25kaW5nIEBGVF9HbHlwaCBvYmplY3QuICAwfmluIGNhc2Ugb2YgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYW5vZGUgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlICovCisgIC8qICAgIGFub2RlICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyBjYWNoZSAgICAqLwogICAvKiAgICAgICAgICAgICAgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgICAgKi8KICAgLyogICAgICAgICAgICAgIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODAyLDcgKzgwMiw3IEBACiAgIC8qICAgIGFnbHlwaCAgICAgOjogVGhlIGNvcnJlc3BvbmRpbmcgQEZUX0dseXBoIG9iamVjdC4gIDB+aW4gY2FzZSBvZiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgIGZhaWx1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFub2RlICAgICAgOjogVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgICAqLworICAvKiAgICBhbm9kZSAgICAgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBjYWNoZSBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50ICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgKHNlZSBub3RlIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTk1Nyw3ICs5NTcsNyBAQAogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc2JpdCAgIDo6IEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbm9kZSAgOjogVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUgKi8KKyAgLyogICAgYW5vZGUgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlICAgICovCiAgIC8qICAgICAgICAgICAgICBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50IChzZWUgbm90ZSAgICAqLwogICAvKiAgICAgICAgICAgICAgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc2JpdCAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbm9kZSAgICAgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9mIHRoZSBjb3JyZXNwb25kaW5nICAgKi8KKyAgLyogICAgYW5vZGUgICAgICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgY2FjaGUgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgIChzZWUgbm90ZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQ0FDSEVfSF9fICovCisjZW5kaWYgLyogRlRDQUNIRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdGNmZmRydi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRjZmZkcnYuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oCmluZGV4IDZjOGU0MTYuLjhmODhjYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRjZmZkcnYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgQ0ZGIGRyaXZlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQ0ZGRFJWX0hfXwotI2RlZmluZSBfX0ZUQ0ZGRFJWX0hfXworI2lmbmRlZiBGVENGRkRSVl9IXworI2RlZmluZSBGVENGRkRSVl9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTg5LDcgKzg5LDcgQEAKICAgICogICBmZWF0dXJlcyBwcmVzZXJ2ZSB0aGUgZGVzaWduJ3Mgd2VpZ2h0IGFuZCBzcGFjaW5nIG11Y2ggYmV0dGVyIHRoYW4KICAgICogICBhbGlhc2VkIHR5cGUgd291bGQuCiAgICAqCi0gICAqICAgMikgQWxpZ21lbnQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbjogV2VpZ2h0cyBhbmQgc3BhY2luZyBhbG9uZyB0aGUKKyAgICogICAyKSBBbGlnbm1lbnQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbjogV2VpZ2h0cyBhbmQgc3BhY2luZyBhbG9uZyB0aGUKICAgICogICB5fmF4aXMgYXJlIGxlc3MgY3JpdGljYWw7IHdoYXQgaXMgbXVjaCBtb3JlIGltcG9ydGFudCBpcyB0aGUgdmlzdWFsCiAgICAqICAgYWxpZ25tZW50IG9mIHJlbGF0ZWQgZmVhdHVyZXMgKGxpa2UgY2FwLWhlaWdodCBhbmQgeC1oZWlnaHQpLiAgVGhlCiAgICAqICAgc2Vuc2Ugb2YgYWxpZ25tZW50IGZvciB0aGVzZSBpcyBlbmhhbmNlZCBieSB0aGUgc2hhcnBuZXNzIG9mIGdyaWQtZml0CkBAIC0xMTAsOSArMTEwLDkgQEAKICAgICogICB0byBtaW5pbWl6ZSBkaXN0b3J0aW9uLgogICAgKgogICAgKiBAb3JkZXI6Ci0gICAqICAgaGludGluZy1lbmdpbmUKLSAgICogICBuby1zdGVtLWRhcmtlbmluZwotICAgKiAgIGRhcmtlbmluZy1wYXJhbWV0ZXJzCisgICAqICAgaGludGluZy1lbmdpbmVbY2ZmXQorICAgKiAgIG5vLXN0ZW0tZGFya2VuaW5nW2NmZl0KKyAgICogICBkYXJrZW5pbmctcGFyYW1ldGVyc1tjZmZdCiAgICAqCiAgICAqLwogCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBwcm9wZXJ0eToKLSAgICogICBoaW50aW5nLWVuZ2luZQorICAgKiAgIGhpbnRpbmctZW5naW5lW2NmZl0KICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIFRoYW5rcyB0byBBZG9iZSwgd2hpY2ggY29udHJpYnV0ZWQgYSBuZXcgaGludGluZyAoYW5kIHBhcnNpbmcpCkBAIC0xNDgsNiArMTQ4LDggQEAKICAgICogQG5vdGU6CiAgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KICAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGBhZG9iZScgb3IgYGZyZWV0eXBlJykuCiAgICAqLwogCiAKQEAgLTE1Nyw4ICsxNTksOCBAQAogICAgKiAgIEZUX0NGRl9ISU5USU5HX1hYWAogICAgKgogICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGhpbnRpbmctZW5naW5lIHByb3BlcnR5IHRvIHNlbGVjdAotICAgKiAgIHRoZSBoaW50aW5nIGVuZ2luZSBmb3IgQ0ZGIGZvbnRzLgorICAgKiAgIEEgbGlzdCBvZiBjb25zdGFudHMgdXNlZCBmb3IgdGhlIEBoaW50aW5nLWVuZ2luZVtjZmZdIHByb3BlcnR5IHRvCisgICAqICAgc2VsZWN0IHRoZSBoaW50aW5nIGVuZ2luZSBmb3IgQ0ZGIGZvbnRzLgogICAgKgogICAgKiBAdmFsdWVzOgogICAgKiAgIEZUX0NGRl9ISU5USU5HX0ZSRUVUWVBFIDo6CkBAIC0xNzUsNyArMTc3LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBwcm9wZXJ0eToKLSAgICogICBuby1zdGVtLWRhcmtlbmluZworICAgKiAgIG5vLXN0ZW0tZGFya2VuaW5nW2NmZl0KICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEJ5IGRlZmF1bHQsIHRoZSBBZG9iZSBDRkYgZW5naW5lIGRhcmtlbnMgc3RlbXMgYXQgc21hbGxlciBzaXplcywKQEAgLTE5OSwxMyArMjAxLDE2IEBACiAgICAqIEBub3RlOgogICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCiAgICAqCisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50CisgICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KKyAgICoKICAgICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQHByb3BlcnR5OgotICAgKiAgIGRhcmtlbmluZy1wYXJhbWV0ZXJzCisgICAqICAgZGFya2VuaW5nLXBhcmFtZXRlcnNbY2ZmXQogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQnkgZGVmYXVsdCwgdGhlIEFkb2JlIENGRiBlbmdpbmUgZGFya2VucyBzdGVtcyBhcyBmb2xsb3dzIChpZiB0aGUKQEAgLTI0OCw2ICsyNTMsMTQgQEAKICAgICogQG5vdGU6CiAgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KICAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSwgdXNpbmcgZWlnaHQgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzIHdpdGhvdXQgc3BhY2VzLiAgSGVyZQorICAgKiAgIHRoZSBhYm92ZSBleGFtcGxlLCB1c2luZyBgXCcgdG8gYnJlYWsgdGhlIGxpbmUgZm9yIHJlYWRhYmlsaXR5LgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZSRUVUWVBFX1BST1BFUlRJRVM9XAorICAgKiAgICAgY2ZmOmRhcmtlbmluZy1wYXJhbWV0ZXJzPTUwMCwzMDAsMTAwMCwyMDAsMTUwMCwxMDAsMjAwMCwwCisgICAqICAgfQogICAgKi8KIAogICAvKiAqLwpAQCAtMjU2LDcgKzI2OSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fRlRDRkZEUlZfSF9fICovCisjZW5kaWYgLyogRlRDRkZEUlZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRjaGFwdGVycy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGNoYXB0ZXJzLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRjaGFwdGVycy5oCmluZGV4IGQzMzM3NjEuLmFiNDM4OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRjaGFwdGVycy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjaGFwdGVycy5oCkBAIC0xMTksMyArMTE5LDE3IEBACiAvKiAgICBsY2RfZmlsdGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPENoYXB0ZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGVycm9yX2NvZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEVycm9yIENvZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFNlY3Rpb25zPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGVycm9yX2VudW1lcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBlcnJvcl9jb2RlX3ZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0Y2lkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGNpZC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmgKaW5kZXggMDU3NDFjOC4uZTFiYzlmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGNpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBDSUQgZm9udCBpbmZvcm1hdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERlcmVnIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRDSURfSF9fCi0jZGVmaW5lIF9fRlRDSURfSF9fCisjaWZuZGVmIEZUQ0lEX0hfCisjZGVmaW5lIEZUQ0lEX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtOTcsOCArOTcsOCBAQAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgIFJldHJpZXZlIHRoZSB0eXBlIG9mIHRoZSBpbnB1dCBmYWNlLCBDSUQga2V5ZWQgb3Igbm90LiAgSW4KLSAgICogICAgY29uc3RyYXN0IHRvIHRoZSBARlRfSVNfQ0lEX0tFWUVEIG1hY3JvIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICAgKiAgICBzdWNjZXNzZnVsbHkgYWxzbyBmb3IgQ0lELWtleWVkIGZvbnRzIGluIGFuIFNORlQgd3JhcHBlci4KKyAgICogICAgY29udHJhc3QgdG8gdGhlIEBGVF9JU19DSURfS0VZRUQgbWFjcm8gdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICAqICAgIHN1Y2Nlc3NmdWxseSBhbHNvIGZvciBDSUQta2V5ZWQgZm9udHMgaW4gYW4gU0ZOVCB3cmFwcGVyLgogICAgKgogICAgKiBAaW5wdXQ6CiAgICAqICAgIGZhY2UgOjoKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQ0lEX0hfXyAqLworI2VuZGlmIC8qIEZUQ0lEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0ZXJyZGVmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKc2ltaWxhcml0eSBpbmRleCA4MSUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGVycmRlZi5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKaW5kZXggMWJmMDc1MS4uM2Y1M2RkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGVycmRlZi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTggKzE2LDQzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqICAgICAgICAgICAgICAgIExJU1QgT0YgRVJST1IgQ09ERVMvTUVTU0FHRVMgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZXJyb3JfY29kZV92YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRXJyb3IgQ29kZSBWYWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgQWxsIHBvc3NpYmxlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IEZyZWVUeXBlIGZ1bmN0aW9ucy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhlIGxpc3QgYmVsb3cgaXMgdGFrZW4gdmVyYmF0aW0gZnJvbSB0aGUgZmlsZSBgZnRlcnJkZWYuaCcgICAgICAgICAqLworICAvKiAgIChsb2FkZWQgYXV0b21hdGljYWxseSBieSBpbmNsdWRpbmcgYEZUX0ZSRUVUWVBFX0gnKS4gIFRoZSBmaXJzdCAgICAgKi8KKyAgLyogICBhcmd1bWVudCBvZiB0aGUgYEZUX0VSUk9SX0RFRl8nIG1hY3JvIGlzIHRoZSBlcnJvciBsYWJlbDsgYnkgICAgICAgICovCisgIC8qICAgZGVmYXVsdCwgdGhlIHByZWZpeCBgRlRfRXJyXycgZ2V0cyBhZGRlZCBzbyB0aGF0IHlvdSBnZXQgZXJyb3IgICAgICAqLworICAvKiAgIG5hbWVzIGxpa2UgYEZUX0Vycl9DYW5ub3RfT3Blbl9SZXNvdXJjZScuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzICAgKi8KKyAgLyogICB0aGUgZXJyb3IgY29kZSwgYW5kIHRoZSBsYXN0IGFyZ3VtZW50IGFuIGVycm9yIHN0cmluZywgd2hpY2ggaXMgbm90ICovCisgIC8qICAgdXNlZCBieSBGcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBXaXRoaW4geW91ciBhcHBsaWNhdGlvbiB5b3Ugc2hvdWxkICpvbmx5KiB1c2UgZXJyb3IgbmFtZXMgYW5kICAgICAgICovCisgIC8qICAgKm5ldmVyKiBpdHMgbnVtZXJpYyB2YWx1ZXMhICBUaGUgbGF0dGVyIG1pZ2h0IChhbmQgYWN0dWFsbHkgZG8pICAgICAqLworICAvKiAgIGNoYW5nZSBpbiBmb3J0aGNvbWluZyBGcmVlVHlwZSB2ZXJzaW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTWFjcm8gYEZUX05PRVJST1JERUZfJyBkZWZpbmVzIGBGVF9FcnJfT2snLCB3aGljaCBpcyBhbHdheXMgemVyby4gICAqLworICAvKiAgIFNlZSB0aGUgYEVycm9yIEVudW1lcmF0aW9ucycgc3Vic2VjdGlvbiBob3cgdG8gYXV0b21hdGljYWxseSAgICAgICAgKi8KKyAgLyogICBnZW5lcmF0ZSBhIGxpc3Qgb2YgZXJyb3Igc3RyaW5ncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qIFlvdSBuZWVkIHRvIGRlZmluZSBib3RoIEZUX0VSUk9SREVGXyBhbmQgRlRfTk9FUlJPUkRFRl8gYmVmb3JlICovCi0gIC8qIGluY2x1ZGluZyB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRXJyX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKiBnZW5lcmljIGVycm9ycyAqLwogCkBAIC0yMTgsNyArMjQzLDcgQEAKICAgRlRfRVJST1JERUZfKCBOb19Vbmljb2RlX0dseXBoX05hbWUsICAgICAgICAgICAgICAgICAgICAgICAweEEzLAogICAgICAgICAgICAgICAgICJubyBVbmljb2RlIGdseXBoIG5hbWUgZm91bmQiICkKICAgRlRfRVJST1JERUZfKCBHbHlwaF9Ub29fQmlnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEE0LAotICAgICAgICAgICAgICAgICJnbHlwaCB0byBiaWcgZm9yIGhpbnRpbmciICkKKyAgICAgICAgICAgICAgICAiZ2x5cGggdG9vIGJpZyBmb3IgaGludGluZyIgKQogCiAgIC8qIEJERiBlcnJvcnMgKi8KIApAQCAtMjQ1LDUgKzI3MCw3IEBACiAgIEZUX0VSUk9SREVGXyggQ29ycnVwdGVkX0ZvbnRfR2x5cGhzLCAgICAgICAgICAgICAgICAgICAgICAgMHhCQSwKICAgICAgICAgICAgICAgICAiRm9udCBnbHlwaHMgY29ycnVwdGVkIG9yIG1pc3NpbmcgZmllbGRzIiApCiAKKyAgLyogKi8KKwogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTViZmIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oCkBAIC0wLDAgKzEsMjI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGVycm9ycy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBlcnJvcl9lbnVtZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBFcnJvciBFbnVtZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBIb3cgdG8gaGFuZGxlIGVycm9ycyBhbmQgZXJyb3Igc3RyaW5ncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGUgaGVhZGVyIGZpbGUgYGZ0ZXJyb3JzLmgnICh3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5ICAgICovCisgIC8qICAgYGZyZWV0eXBlLmgnIGRlZmluZXMgdGhlIGhhbmRsaW5nIG9mIEZyZWVUeXBlJ3MgZW51bWVyYXRpb24gICAgICAgICAqLworICAvKiAgIGNvbnN0YW50cy4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgZXJyb3IgbWVzc2FnZSBzdHJpbmdzICAgKi8KKyAgLyogICB3aXRoIGEgc21hbGwgbWFjcm8gdHJpY2sgZXhwbGFpbmVkIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICpFcnJvciogKkZvcm1hdHMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhlIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBjYW4gYmUgICAqLworICAvKiAgIGRlZmluZWQgaW4gYGZ0b3B0aW9uLmgnIGluIG9yZGVyIHRvIG1ha2UgdGhlIGhpZ2hlciBieXRlIGluZGljYXRlICAgKi8KKyAgLyogICB0aGUgbW9kdWxlIHdoZXJlIHRoZSBlcnJvciBoYXMgaGFwcGVuZWQgKHRoaXMgaXMgbm90IGNvbXBhdGlibGUgICAgICovCisgIC8qICAgd2l0aCBzdGFuZGFyZCBidWlsZHMgb2YgRnJlZVR5cGUmbmJzcDsyLCBob3dldmVyKS4gIFNlZSB0aGUgZmlsZSAgICAqLworICAvKiAgIGBmdG1vZGVyci5oJyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgKkVycm9yKiAqTWVzc2FnZSogKlN0cmluZ3MqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBFcnJvciBkZWZpbml0aW9ucyBhcmUgc2V0IHVwIHdpdGggc3BlY2lhbCBtYWNyb3MgdGhhdCBhbGxvdyBjbGllbnQgICovCisgIC8qICAgYXBwbGljYXRpb25zIHRvIGJ1aWxkIGEgdGFibGUgb2YgZXJyb3IgbWVzc2FnZSBzdHJpbmdzLiAgVGhlICAgICAgICAqLworICAvKiAgIHN0cmluZ3MgYXJlIG5vdCBpbmNsdWRlZCBpbiBhIG5vcm1hbCBidWlsZCBvZiBGcmVlVHlwZSZuYnNwOzIgdG8gICAgKi8KKyAgLyogICBzYXZlIHNwYWNlIChtb3N0IGNsaWVudCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSB0aGVtKS4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRvIGRvIHNvLCB5b3UgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlIGluY2x1ZGluZyAgKi8KKyAgLyogICB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIG1hY3JvIGlzIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0byBkZWZpbmUgdGhlIHN0YXJ0IG9mICAgICovCisgIC8qICAgdGhlIGVycm9yIGxpc3QuICBJdCBpcyBmb2xsb3dlZCBieSBzZXZlcmFsIEZUX0VSUk9SX0RFRiBjYWxscy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBGVF9FUlJPUl9ERUYoIGUsIHYsIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgdG8gZGVmaW5lIG9uZSBzaW5nbGUgZXJyb3IuICBgZScgaXMgdGhlIGVycm9yICAqLworICAvKiAgIGNvZGUgaWRlbnRpZmllciAoZS5nLiwgYEludmFsaWRfQXJndW1lbnQnKSwgYHYnIGlzIHRoZSBlcnJvcidzICAgICAgKi8KKyAgLyogICBudW1lcmljYWwgdmFsdWUsIGFuZCBgcycgaXMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3Igc3RyaW5nLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VSUk9SX0VORF9MSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIG1hY3JvIGVuZHMgdGhlIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFkZGl0aW9uYWxseSwgeW91IGhhdmUgdG8gdW5kZWZpbmUgYEZURVJST1JTX0hfJyBiZWZvcmUgI2luY2x1ZGluZyAgKi8KKyAgLyogICB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI3VuZGVmIEZURVJST1JTX0hfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICNkZWZpbmUgRlRfRVJST1JERUYoIGUsIHYsIHMgKSAgeyBlLCBzIH0sICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAjZGVmaW5lIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI2RlZmluZSBGVF9FUlJPUl9FTkRfTElTVCAgICAgICB7IDAsIE5VTEwgfSB9OyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBjb25zdCBzdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgaW50ICAgICAgICAgIGVycl9jb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGNvbnN0IGNoYXIqICBlcnJfbXNnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgfSBmdF9lcnJvcnNbXSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAjaW5jbHVkZSBGVF9FUlJPUlNfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm90ZSB0aGF0IGBGVF9FcnJfT2snIGlzIF9ub3RfIGRlZmluZWQgd2l0aCBgRlRfRVJST1JERUYnIGJ1dCB3aXRoICAqLworICAvKiAgIGBGVF9OT0VSUk9SREVGJzsgaXQgaXMgYWx3YXlzIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qICovCisKKyAgLyogSW4gcHJldmlvdXMgRnJlZVR5cGUgdmVyc2lvbnMgd2UgdXNlZCBgX19GVEVSUk9SU19IX18nLiAgSG93ZXZlciwgKi8KKyAgLyogdXNpbmcgdHdvIHN1Y2Nlc3NpdmUgdW5kZXJzY29yZXMgaW4gYSBub24tc3lzdGVtIHN5bWJvbCBuYW1lICAgICAgKi8KKyAgLyogdmlvbGF0ZXMgdGhlIEMgKGFuZCBDKyspIHN0YW5kYXJkLCBzbyBpdCB3YXMgY2hhbmdlZCB0byB0aGUgICAgICAgKi8KKyAgLyogY3VycmVudCBmb3JtLiAgSW4gc3BpdGUgb2YgdGhpcywgd2UgaGF2ZSB0byBtYWtlICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAjdW5kZWZpbmUgX19GVEVSUk9SU19IX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogd29yayBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiAhKCBkZWZpbmVkKCBGVEVSUk9SU19IXyApICYmIGRlZmluZWQgKCBfX0ZURVJST1JTX0hfXyApICkKKyNkZWZpbmUgRlRFUlJPUlNfSF8KKyNkZWZpbmUgX19GVEVSUk9SU19IX18KKworCisgIC8qIGluY2x1ZGUgbW9kdWxlIGJhc2UgZXJyb3IgY29kZXMgKi8KKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICBTRVRVUCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI3VuZGVmICBGVF9ORUVEX0VYVEVSTl9DCisKKworICAvKiBGVF9FUlJfUFJFRklYIGlzIHVzZWQgYXMgYSBwcmVmaXggZm9yIGVycm9yIGlkZW50aWZpZXJzLiAqLworICAvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgYEZUX0Vycl8nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEZUX0Vycl8KKyNlbmRpZgorCisKKyAgLyogRlRfRVJSX0JBU0UgaXMgdXNlZCBhcyB0aGUgYmFzZSBmb3IgbW9kdWxlLXNwZWNpZmljIGVycm9ycy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9NT0RVTEVfRVJST1JTCisKKyNpZm5kZWYgRlRfRVJSX0JBU0UKKyNkZWZpbmUgRlRfRVJSX0JBU0UgIEZUX01vZF9FcnJfQmFzZQorI2VuZGlmCisKKyNlbHNlCisKKyN1bmRlZiBGVF9FUlJfQkFTRQorI2RlZmluZSBGVF9FUlJfQkFTRSAgMAorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyAqLworCisKKyAgLyogSWYgRlRfRVJST1JERUYgaXMgbm90IGRlZmluZWQsIHdlIG5lZWQgdG8gZGVmaW5lIGEgc2ltcGxlICovCisgIC8qIGVudW1lcmF0aW9uIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgRlRfRVJST1JERUYKKworI2RlZmluZSBGVF9FUlJPUkRFRiggZSwgdiwgcyApICBlID0gdiwKKyNkZWZpbmUgRlRfRVJST1JfU1RBUlRfTElTVCAgICAgZW51bSB7CisjZGVmaW5lIEZUX0VSUk9SX0VORF9MSVNUICAgICAgIEZUX0VSUl9DQVQoIEZUX0VSUl9QUkVGSVgsIE1heCApIH07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9ORUVEX0VYVEVSTl9DCisgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfRVJST1JERUYgKi8KKworCisgIC8qIHRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWZpbmUgYW4gZXJyb3IgKi8KKyNkZWZpbmUgRlRfRVJST1JERUZfKCBlLCB2LCBzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfRVJST1JERUYoIEZUX0VSUl9DQVQoIEZUX0VSUl9QUkVGSVgsIGUgKSwgdiArIEZUX0VSUl9CQVNFLCBzICkKKworICAvKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgPG1vZHVsZT5fRXJyX09rLCB3aGljaCBtdXN0IGJlIDAhICovCisjZGVmaW5lIEZUX05PRVJST1JERUZfKCBlLCB2LCBzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FUlJPUkRFRiggRlRfRVJSX0NBVCggRlRfRVJSX1BSRUZJWCwgZSApLCB2LCBzICkKKworCisjaWZkZWYgRlRfRVJST1JfU1RBUlRfTElTVAorICBGVF9FUlJPUl9TVEFSVF9MSVNUCisjZW5kaWYKKworCisgIC8qIG5vdyBpbmNsdWRlIHRoZSBlcnJvciBjb2RlcyAqLworI2luY2x1ZGUgRlRfRVJST1JfREVGSU5JVElPTlNfSAorCisKKyNpZmRlZiBGVF9FUlJPUl9FTkRfTElTVAorICBGVF9FUlJPUl9FTkRfTElTVAorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgU0lNUExFIENMRUFOVVAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEZUX05FRURfRVhURVJOX0MKKyAgfQorI2VuZGlmCisKKyN1bmRlZiBGVF9FUlJPUl9TVEFSVF9MSVNUCisjdW5kZWYgRlRfRVJST1JfRU5EX0xJU1QKKworI3VuZGVmIEZUX0VSUk9SREVGCisjdW5kZWYgRlRfRVJST1JERUZfCisjdW5kZWYgRlRfTk9FUlJPUkRFRl8KKworI3VuZGVmIEZUX05FRURfRVhURVJOX0MKKyN1bmRlZiBGVF9FUlJfQkFTRQorCisgIC8qIEZUX0VSUl9QUkVGSVggaXMgbmVlZGVkIGludGVybmFsbHkgKi8KKyNpZm5kZWYgRlQyX0JVSUxEX0xJQlJBUlkKKyN1bmRlZiBGVF9FUlJfUFJFRklYCisjZW5kaWYKKworI2VuZGlmIC8qICEoRlRFUlJPUlNfSF8gJiYgX19GVEVSUk9SU19IX18pICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0Zm50Zm10LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGZudGZtdC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKaW5kZXggMWY4ZmYyOC4uYmQ0MjMyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGZudGZtdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZm9udCBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRGTlRGTVRfSF9fCi0jZGVmaW5lIF9fRlRGTlRGTVRfSF9fCisjaWZuZGVmIEZURk5URk1UX0hfCisjZGVmaW5lIEZURk5URk1UX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtODksNCArODksNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZURk5URk1UX0hfXyAqLworI2VuZGlmIC8qIEZURk5URk1UX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0Z2FzcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0Z2FzcC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oCmluZGV4IDlhOWI2MzIuLjNmNWIzYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRnYXNwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9GVF9HQVNQX0hfCi0jZGVmaW5lIF9GVF9HQVNQX0hfCisjaWZuZGVmIEZUR0FTUF9IXworI2RlZmluZSBGVEdBU1BfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0xMjMsNyArMTIzLDcgQEAKICAgLyogKi8KIAogCi0jZW5kaWYgLyogX0ZUX0dBU1BfSF8gKi8KKyNlbmRpZiAvKiBGVEdBU1BfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRnbHlwaC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGdseXBoLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCmluZGV4IDgwM2FkMzkuLmQ5ODQwYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRnbHlwaC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yOSw4ICsyOSw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdMWVBIX0hfXwotI2RlZmluZSBfX0ZUR0xZUEhfSF9fCisjaWZuZGVmIEZUR0xZUEhfSF8KKyNkZWZpbmUgRlRHTFlQSF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNTk0LDcgKzU5NCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRHTFlQSF9IX18gKi8KKyNlbmRpZiAvKiBGVEdMWVBIX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0Z3h2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRneHZhbC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaAppbmRleCAwZTlhYzFkLi5hNThlODZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0Z3h2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkaGF0IEsuSywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjUsOCArMjUsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRHWFZBTF9IX18KLSNkZWZpbmUgX19GVEdYVkFMX0hfXworI2lmbmRlZiBGVEdYVkFMX0hfCisjZGVmaW5lIEZUR1hWQUxfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0zNTEsNyArMzUxLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEdYVkFMX0hfXyAqLworI2VuZGlmIC8qIEZUR1hWQUxfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRnemlwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRnemlwLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgKaW5kZXggYjNhNTMyZC4uMzkzMmNlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGd6aXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEd6aXAtY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdaSVBfSF9fCi0jZGVmaW5lIF9fRlRHWklQX0hfXworI2lmbmRlZiBGVEdaSVBfSF8KKyNkZWZpbmUgRlRHWklQX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMTE3LDExICsxMTcsMTEgQEAKICAgKgogICAqIEBpbm91dDoKICAgKiAgIG91dHB1dF9sZW4gOjoKLSAgKiAgICAgQmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCB0aGlzIGlzIHRoZSB0aGUgdG90YWwgc2l6ZSBvZiB0aGUKLSAgKiAgICAgb3V0cHV0IGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlCi0gICogICAgIHVuY29tcHJlc3NlZCBkYXRhIChzbyB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBiZQotICAqICAgICBrbm93biBpbiBhZHZhbmNlKS4gIEFmdGVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCBgb3V0cHV0X2xlbicgaXMgdGhlCi0gICogICAgIHNpemUgb2YgdGhlIHVzZWQgZGF0YSBpbiBgb3V0cHV0Jy4KKyAgKiAgICAgQmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBvdXRwdXQKKyAgKiAgICAgYnVmZmVyLCB3aGljaCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgdW5jb21wcmVzc2VkCisgICogICAgIGRhdGEgKHNvIHRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGJlIGtub3duIGluCisgICogICAgIGFkdmFuY2UpLiAgQWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24sIGBvdXRwdXRfbGVuJyBpcyB0aGUgc2l6ZSBvZgorICAqICAgICB0aGUgdXNlZCBkYXRhIGluIGBvdXRwdXQnLgogICAqCiAgICogQHJldHVybjoKICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEdaSVBfSF9fICovCisjZW5kaWYgLyogRlRHWklQX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0aW1hZ2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRpbWFnZS5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaAppbmRleCA4MmYyODRjLi40Zjg2YzU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0aW1hZ2UuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEZyZWVUeXBlIGdseXBoIGltYWdlIGZvcm1hdHMgYW5kIGRlZmF1bHQgcmFzdGVyIGludGVyZmFjZSAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQsMTIgKzI0LDEyIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVElNQUdFX0hfXwotI2RlZmluZSBfX0ZUSU1BR0VfSF9fCisjaWZuZGVmIEZUSU1BR0VfSF8KKyNkZWZpbmUgRlRJTUFHRV9IXwogCiAKLSAgLyogX1NUQU5EQUxPTkVfIGlzIGZyb20gZnRncmF5cy5jICovCi0jaWZuZGVmIF9TVEFOREFMT05FXworICAvKiBTVEFOREFMT05FXyBpcyBmcm9tIGZ0Z3JheXMuYyAqLworI2lmbmRlZiBTVEFOREFMT05FXwogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjZW5kaWYKIApAQCAtNzQ3LDcgKzc0Nyw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogQSByYXN0ZXIgaXMgYSBzY2FuIGNvbnZlcnRlciwgaW4gY2hhcmdlIG9mIHJlbmRlcmluZyBhbiBvdXRsaW5lIGludG8gICovCi0gIC8qIGEgYSBiaXRtYXAuICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIHB1YmxpYyBBUEkgZm9yIHJhc3RlcnMuICAgICAgICAqLworICAvKiBhIGJpdG1hcC4gIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgcHVibGljIEFQSSBmb3IgcmFzdGVycy4gICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE5vdGUgdGhhdCBpbiBGcmVlVHlwZSAyLCBhbGwgcmFzdGVycyBhcmUgbm93IGVuY2Fwc3VsYXRlZCB3aXRoaW4gICAgICAqLwogICAvKiBzcGVjaWZpYyBtb2R1bGVzIGNhbGxlZCBgcmVuZGVyZXJzJy4gIFNlZSBgZnRyZW5kZXIuaCcgZm9yIG1vcmUgICAgICAgKi8KQEAgLTg2MCwxNiArODYwLDYgQEAKICAgLyogICAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cml0ZSBhbnRpLWFsaWFzZWQgb3V0bGluZXMgZGlyZWN0bHkgdG8gYSAgICAgICovCiAgIC8qICAgIGdpdmVuIGJhY2tncm91bmQgYml0bWFwLCBhbmQgZXZlbiBwZXJmb3JtIHRyYW5zbHVjZW5jeS4gICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm90ZSB0aGF0IHRoZSBgY291bnQnIGZpZWxkIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gYSBmaXhlZCB2YWx1ZSAgICovCi0gIC8qICAgIGRlZmluZWQgYnkgdGhlIGBGVF9NQVhfR1JBWV9TUEFOUycgY29uZmlndXJhdGlvbiBtYWNybyBpbiAgICAgICAgICAqLwotICAvKiAgICBgZnRvcHRpb24uaCcuICBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIHNldCB0b34zMiwgd2hpY2ggbWVhbnMgICAgKi8KLSAgLyogICAgdGhhdCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMyfnNwYW5zIG9uIGEgZ2l2ZW4gc2NhbmxpbmUsIHRoZSAgICAgICovCi0gIC8qICAgIGNhbGxiYWNrIGlzIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHdpdGggdGhlIHNhbWUgYHknIHBhcmFtZXRlciBpbiAgICAqLwotICAvKiAgICBvcmRlciB0byBkcmF3IGFsbCBjYWxsYmFja3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE90aGVyd2lzZSwgdGhlIGNhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIHNjYW4tbGluZSwgYW5kICAgICAqLwotICAvKiAgICBvbmx5IGZvciB0aG9zZSBzY2FubGluZXMgdGhhdCBkbyBoYXZlIGBncmF5JyBwaXhlbHMgb24gdGhlbS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgdm9pZAogICAoKkZUX1NwYW5GdW5jKSggaW50ICAgICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQsCkBAIC0xMjAzLDcgKzExOTMsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUSU1BR0VfSF9fICovCisjZW5kaWYgLyogRlRJTUFHRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdGluY3JlbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRpbmNyZW0uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCmluZGV4IDg0MGFmMjUuLjQ2YjU4YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRpbmNyZW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgaW5jcmVtZW50YWwgbG9hZGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUSU5DUkVNX0hfXwotI2RlZmluZSBfX0ZUSU5DUkVNX0hfXworI2lmbmRlZiBGVElOQ1JFTV9IXworI2RlZmluZSBGVElOQ1JFTV9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTM0OCw3ICszNDgsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUSU5DUkVNX0hfXyAqLworI2VuZGlmIC8qIEZUSU5DUkVNX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2YTg5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaApAQCAtMCwwICsxLDI4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRsY2RmaWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMgICAgICAgICAgICovCisvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBGVExDREZJTF9IXworI2RlZmluZSBGVExDREZJTF9IXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBsY2RfZmlsdGVyaW5nCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBMQ0QgRmlsdGVyaW5nCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBSZWR1Y2UgY29sb3IgZnJpbmdlcyBvZiBzdWJwaXhlbC1yZW5kZXJlZCBiaXRtYXBzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU3VicGl4ZWwgcmVuZGVyaW5nIGV4cGxvaXRzIHRoZSBjb2xvci1zdHJpcGVkIHN0cnVjdHVyZSBvZiBMQ0QKKyAgICogICBwaXhlbHMsIGluY3JlYXNpbmcgdGhlIGF2YWlsYWJsZSByZXNvbHV0aW9uIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlCisgICAqICAgc3RyaXBlICh1c3VhbGx5IGhvcml6b250YWwgUkdCKSBieSBhIGZhY3RvciBvZn4zLiAgU2luY2UgdGhlc2UKKyAgICogICBzdWJwaXhlbHMgYXJlIGNvbG9yIHBpeGVscywgdXNpbmcgdGhlbSB1bmZpbHRlcmVkIGNyZWF0ZXMgc2V2ZXJlCisgICAqICAgY29sb3IgZnJpbmdlcy4gIFVzZSB0aGUgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIEFQSSB0byBzcGVjaWZ5IGEKKyAgICogICBsb3ctcGFzcyBmaWx0ZXIsIHdoaWNoIGlzIHRoZW4gYXBwbGllZCB0byBzdWJwaXhlbC1yZW5kZXJlZCBiaXRtYXBzCisgICAqICAgZ2VuZXJhdGVkIHRocm91Z2ggQEZUX1JlbmRlcl9HbHlwaC4gIFRoZSBmaWx0ZXIgc2FjcmlmaWNlcyBzb21lIG9mCisgICAqICAgdGhlIGhpZ2hlciByZXNvbHV0aW9uIHRvIHJlZHVjZSBjb2xvciBmcmluZ2VzLCBtYWtpbmcgdGhlIGdseXBoIGltYWdlCisgICAqICAgc2xpZ2h0bHkgYmx1cnJpZXIuICBQb3NpdGlvbmFsIGltcHJvdmVtZW50cyB3aWxsIHJlbWFpbi4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgbm8gZmlsdGVyIGlzIGFjdGl2ZSBieSBkZWZhdWx0LCBhbmQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzCisgICAqICAgKm5vdCogaW1wbGVtZW50ZWQgaW4gZGVmYXVsdCBidWlsZHMgb2YgdGhlIGxpYnJhcnkuICBZb3UgbmVlZCB0bworICAgKiAgICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaW4geW91ciBgZnRvcHRpb24uaCcgZmlsZQorICAgKiAgIGluIG9yZGVyIHRvIGFjdGl2YXRlIGl0IGFuZCBleHBsaWNpdGx5IGNhbGwgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyCisgICAqICAgdG8gZW5hYmxlIGl0LgorICAgKgorICAgKiAgIEEgZmlsdGVyIHNob3VsZCBoYXZlIHR3byBwcm9wZXJ0aWVzOgorICAgKgorICAgKiAgIDEpIEl0IHNob3VsZCBiZSBub3JtYWxpemVkLCBtZWFuaW5nIHRoZSBzdW0gb2YgdGhlIDV+Y29tcG9uZW50cworICAgKiAgICAgIHNob3VsZCBiZSAyNTYgKDB4MTAwKS4gIEl0IGlzIHBvc3NpYmxlIHRvIGdvIGFib3ZlIG9yIHVuZGVyIHRoaXMKKyAgICogICAgICB0YXJnZXQgc3VtLCBob3dldmVyOiBnb2luZyB1bmRlciBtZWFucyB0b3NzaW5nIG91dCBjb250cmFzdCwgZ29pbmcKKyAgICogICAgICBvdmVyIG1lYW5zIGludm9raW5nIGNsYW1waW5nIGFuZCB0aGVyZWJ5IG5vbi1saW5lYXJpdGllcyB0aGF0CisgICAqICAgICAgaW5jcmVhc2UgY29udHJhc3Qgc29tZXdoYXQgYXQgdGhlIGV4cGVuc2Ugb2YgZ3JlYXRlciBkaXN0b3J0aW9uCisgICAqICAgICAgYW5kIGNvbG9yLWZyaW5naW5nLiAgQ29udHJhc3QgaXMgYmV0dGVyIGVuaGFuY2VkIHRocm91Z2ggc3RlbQorICAgKiAgICAgIGRhcmtlbmluZy4KKyAgICoKKyAgICogICAyKSBJdCBzaG91bGQgYmUgY29sb3ItYmFsYW5jZWQsIG1lYW5pbmcgYSBmaWx0ZXIgYHt+YSwgYiwgYywgYiwgYX59JworICAgKiAgICAgIHdoZXJlIGF+KyBifj1+Yy4gIEl0IGRpc3RyaWJ1dGVzIHRoZSBjb21wdXRlZCBjb3ZlcmFnZSBmb3Igb25lCisgICAqICAgICAgc3VicGl4ZWwgdG8gYWxsIHN1YnBpeGVscyBlcXVhbGx5LCBzYWNyaWZpY2luZyBzb21lIHdvbiByZXNvbHV0aW9uCisgICAqICAgICAgYnV0IGRyYXN0aWNhbGx5IHJlZHVjaW5nIGNvbG9yLWZyaW5naW5nLiAgUG9zaXRpb25pbmcgaW1wcm92ZW1lbnRzCisgICAqICAgICAgcmVtYWluISAgTm90ZSB0aGF0IGNvbG9yLWZyaW5naW5nIGNhbiBvbmx5IHJlYWxseSBiZSBtaW5pbWl6ZWQKKyAgICogICAgICB3aGVuIHVzaW5nIGEgY29sb3ItYmFsYW5jZWQgZmlsdGVyIGFuZCBhbHBoYS1ibGVuZGluZyB0aGUgZ2x5cGgKKyAgICogICAgICBvbnRvIGEgc3VyZmFjZSBpbiBsaW5lYXIgc3BhY2U7IHNlZSBARlRfUmVuZGVyX0dseXBoLgorICAgKgorICAgKiAgIFJlZ2FyZGluZyB0aGUgZm9ybSwgYSBmaWx0ZXIgY2FuIGJlIGEgYGJveHknIGZpbHRlciBvciBhIGBiZXZlbGVkJworICAgKiAgIGZpbHRlci4gIEJveHkgZmlsdGVycyBhcmUgc2hhcnBlciBidXQgYXJlIGxlc3MgZm9yZ2l2aW5nIG9mIG5vbi1pZGVhbAorICAgKiAgIGdhbW1hIGN1cnZlcyBvZiBhIHNjcmVlbiAodmlld2luZyBhbmdsZXMhKSwgYmV2ZWxlZCBmaWx0ZXJzIGFyZQorICAgKiAgIGZ1enppZXIgYnV0IG1vcmUgdG9sZXJhbnQuCisgICAqCisgICAqICAgRXhhbXBsZXM6CisgICAqCisgICAqICAgLSBbMHgxMCAweDQwIDB4NzAgMHg0MCAweDEwXSBpcyBiZXZlbGVkIGFuZCBuZWl0aGVyIGJhbGFuY2VkIG5vcgorICAgKiAgICAgbm9ybWFsaXplZC4KKyAgICoKKyAgICogICAtIFsweDFBIDB4MzMgMHg0RCAweDMzIDB4MUFdIGlzIGJldmVsZWQgYW5kIGJhbGFuY2VkIGJ1dCBub3QKKyAgICogICAgIG5vcm1hbGl6ZWQuCisgICAqCisgICAqICAgLSBbMHgxOSAweDMzIDB4NjYgMHg0YyAweDE5XSBpcyBiZXZlbGVkIGFuZCBub3JtYWxpemVkIGJ1dCBub3QKKyAgICogICAgIGJhbGFuY2VkLgorICAgKgorICAgKiAgIC0gWzB4MDAgMHg0YyAweDY2IDB4NGMgMHgwMF0gaXMgYm94aWx5IGJldmVsZWQgYW5kIG5vcm1hbGl6ZWQgYnV0IG5vdAorICAgKiAgICAgYmFsYW5jZWQuCisgICAqCisgICAqICAgLSBbMHgwMCAweDU1IDB4NTYgMHg1NSAweDAwXSBpcyBib3h5LCBub3JtYWxpemVkLCBhbmQgYWxtb3N0CisgICAqICAgICBiYWxhbmNlZC4KKyAgICoKKyAgICogICAtIFsweDA4IDB4NEQgMHg1NiAweDREIDB4MDhdIGlzIGJldmVsZWQsIG5vcm1hbGl6ZWQgYW5kLCBhbG1vc3QKKyAgICogICAgIGJhbGFuY2VkLgorICAgKgorICAgKiAgIFRoZSBmaWx0ZXIgYWZmZWN0cyBnbHlwaCBiaXRtYXBzIHJlbmRlcmVkIHRocm91Z2ggQEZUX1JlbmRlcl9HbHlwaCwKKyAgICogICBARlRfTG9hZF9HbHlwaCwgYW5kIEBGVF9Mb2FkX0NoYXIuICBJdCBkb2VzIF9ub3RfIGFmZmVjdCB0aGUgb3V0cHV0CisgICAqICAgb2YgQEZUX091dGxpbmVfUmVuZGVyIGFuZCBARlRfT3V0bGluZV9HZXRfQml0bWFwLgorICAgKgorICAgKiAgIElmIHRoaXMgZmVhdHVyZSBpcyBhY3RpdmF0ZWQsIHRoZSBkaW1lbnNpb25zIG9mIExDRCBnbHlwaCBiaXRtYXBzIGFyZQorICAgKiAgIGVpdGhlciB3aWRlciBvciB0YWxsZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZworICAgKiAgIG91dGxpbmUgd2l0aCByZWdhcmQgdG8gdGhlIHBpeGVsIGdyaWQuICBGb3IgZXhhbXBsZSwgZm9yCisgICAqICAgQEZUX1JFTkRFUl9NT0RFX0xDRCwgdGhlIGZpbHRlciBhZGRzIDN+c3VicGl4ZWxzIHRvIHRoZSBsZWZ0LCBhbmQKKyAgICogICAzfnN1YnBpeGVscyB0byB0aGUgcmlnaHQuICBUaGUgYml0bWFwIG9mZnNldCB2YWx1ZXMgYXJlIGFkanVzdGVkCisgICAqICAgYWNjb3JkaW5nbHksIHNvIGNsaWVudHMgc2hvdWxkbid0IG5lZWQgdG8gbW9kaWZ5IHRoZWlyIGxheW91dCBhbmQKKyAgICogICBnbHlwaCBwb3NpdGlvbmluZyBjb2RlIHdoZW4gZW5hYmxpbmcgdGhlIGZpbHRlci4KKyAgICoKKyAgICogICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IGxpbmVhciBhbHBoYSBibGVuZGluZyBhbmQgZ2FtbWEKKyAgICogICBjb3JyZWN0aW9uIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bHkgcmVuZGVyaW5nIGdseXBocyBvbnRvIHN1cmZhY2VzCisgICAqICAgd2l0aG91dCBhcnRpZmFjdHMgYW5kIGV2ZW4gbW9yZSBjcml0aWNhbCB3aGVuIHN1YnBpeGVsIHJlbmRlcmluZyBpcworICAgKiAgIGludm9sdmVkLgorICAgKgorICAgKiAgIEVhY2ggb2YgdGhlIDN+YWxwaGEgdmFsdWVzIChzdWJwaXhlbHMpIGlzIGluZGVwZW5kZW50bHkgdXNlZCB0byBibGVuZAorICAgKiAgIG9uZSBjb2xvciBjaGFubmVsLiAgVGhhdCBpcywgcmVkIGFscGhhIGJsZW5kcyB0aGUgcmVkIGNoYW5uZWwgb2YgdGhlCisgICAqICAgdGV4dCBjb2xvciB3aXRoIHRoZSByZWQgY2hhbm5lbCBvZiB0aGUgYmFja2dyb3VuZCBwaXhlbC4gIFRoZQorICAgKiAgIGRpc3RyaWJ1dGlvbiBvZiBkZW5zaXR5IHZhbHVlcyBieSB0aGUgY29sb3ItYmFsYW5jZWQgZmlsdGVyIGFzc3VtZXMKKyAgICogICBhbHBoYSBibGVuZGluZyBpcyBkb25lIGluIGxpbmVhciBzcGFjZTsgb25seSB0aGVuIGNvbG9yIGFydGlmYWN0cworICAgKiAgIGNhbmNlbCBvdXQuCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfTGNkRmlsdGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgdmFsdWVzIHRvIGlkZW50aWZ5IHZhcmlvdXMgdHlwZXMgb2YgTENEIGZpbHRlcnMuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfTENEX0ZJTFRFUl9OT05FIDo6CisgICAqICAgICBEbyBub3QgcGVyZm9ybSBmaWx0ZXJpbmcuICBXaGVuIHVzZWQgd2l0aCBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMKKyAgICogICAgIHJlc3VsdHMgaW4gc29tZXRpbWVzIHNldmVyZSBjb2xvciBmcmluZ2VzLgorICAgKgorICAgKiAgIEZUX0xDRF9GSUxURVJfREVGQVVMVCA6OgorICAgKiAgICAgVGhlIGRlZmF1bHQgZmlsdGVyIHJlZHVjZXMgY29sb3IgZnJpbmdlcyBjb25zaWRlcmFibHksIGF0IHRoZSBjb3N0CisgICAqICAgICBvZiBhIHNsaWdodCBibHVycmluZXNzIGluIHRoZSBvdXRwdXQuCisgICAqCisgICAqICAgICBJdCBpcyBhIGJldmVsZWQsIG5vcm1hbGl6ZWQsIGFuZCBjb2xvci1iYWxhbmNlZCBmaXZlLXRhcCBmaWx0ZXIKKyAgICogICAgIHRoYXQgaXMgbW9yZSBmb3JnaXZpbmcgdG8gc2NyZWVucyB3aXRoIG5vbi1pZGVhbCBnYW1tYSBjdXJ2ZXMgYW5kCisgICAqICAgICB2aWV3aW5nIGFuZ2xlcy4gIE5vdGUgdGhhdCB3aGlsZSBjb2xvci1mcmluZ2luZyBpcyByZWR1Y2VkLCBpdCBjYW4KKyAgICogICAgIG9ubHkgYmUgbWluaW1pemVkIGJ5IHVzaW5nIGxpbmVhciBhbHBoYSBibGVuZGluZyBhbmQgZ2FtbWEKKyAgICogICAgIGNvcnJlY3Rpb24gdG8gcmVuZGVyIGdseXBocyBvbnRvIHN1cmZhY2VzLiAgVGhlIGRlZmF1bHQgZmlsdGVyCisgICAqICAgICB3ZWlnaHRzIGFyZSBbMHgwOCAweDREIDB4NTYgMHg0RCAweDA4XS4KKyAgICoKKyAgICogICBGVF9MQ0RfRklMVEVSX0xJR0hUIDo6CisgICAqICAgICBUaGUgbGlnaHQgZmlsdGVyIGlzIGEgdmFyaWFudCB0aGF0IGlzIHNoYXJwZXIgYXQgdGhlIGNvc3Qgb2YKKyAgICogICAgIHNsaWdodGx5IG1vcmUgY29sb3IgZnJpbmdlcyB0aGFuIHRoZSBkZWZhdWx0IG9uZS4KKyAgICoKKyAgICogICAgIEl0IGlzIGEgYm94eSwgbm9ybWFsaXplZCwgYW5kIGNvbG9yLWJhbGFuY2VkIHRocmVlLXRhcCBmaWx0ZXIgdGhhdAorICAgKiAgICAgaXMgbGVzcyBmb3JnaXZpbmcgdG8gc2NyZWVucyB3aXRoIG5vbi1pZGVhbCBnYW1tYSBjdXJ2ZXMgYW5kCisgICAqICAgICB2aWV3aW5nIGFuZ2xlcy4gIFRoaXMgZmlsdGVyIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbQorICAgKiAgICAgdXNlcyBsaW5lYXIgYWxwaGEgYmxlbmRpbmcgYW5kIGdhbW1hIGNvcnJlY3Rpb24gdG8gcmVuZGVyIGdseXBocworICAgKiAgICAgb250byBzdXJmYWNlcy4gIFRoZSBsaWdodCBmaWx0ZXIgd2VpZ2h0cyBhcmUKKyAgICogICAgIFsweDAwIDB4NTUgMHg1NiAweDU1IDB4MDBdLgorICAgKgorICAgKiAgIEZUX0xDRF9GSUxURVJfTEVHQUNZIDo6CisgICAqICAgICBUaGlzIGZpbHRlciBjb3JyZXNwb25kcyB0byB0aGUgb3JpZ2luYWwgbGliWGZ0IGNvbG9yIGZpbHRlci4gIEl0CisgICAqICAgICBwcm92aWRlcyBoaWdoIGNvbnRyYXN0IG91dHB1dCBidXQgY2FuIGV4aGliaXQgcmVhbGx5IGJhZCBjb2xvcgorICAgKiAgICAgZnJpbmdlcyBpZiBnbHlwaHMgYXJlIG5vdCBleHRyZW1lbHkgd2VsbCBoaW50ZWQgdG8gdGhlIHBpeGVsIGdyaWQuCisgICAqICAgICBJbiBvdGhlciB3b3JkcywgaXQgb25seSB3b3JrcyB3ZWxsIGlmIHRoZSBUcnVlVHlwZSBieXRlY29kZQorICAgKiAgICAgaW50ZXJwcmV0ZXIgaXMgZW5hYmxlZCAqYW5kKiBoaWdoLXF1YWxpdHkgaGludGVkIGZvbnRzIGFyZSB1c2VkLgorICAgKgorICAgKiAgICAgVGhpcyBmaWx0ZXIgaXMgb25seSBwcm92aWRlZCBmb3IgY29tcGFyaXNvbiBwdXJwb3NlcywgYW5kIG1pZ2h0IGJlCisgICAqICAgICBkaXNhYmxlZCBvciBzdGF5IHVuc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUuCisgICAqCisgICAqICAgRlRfTENEX0ZJTFRFUl9MRUdBQ1kxIDo6CisgICAqICAgICBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGUgRm9udENvbmZpZyBsaWJyYXJ5IHJldHVybnMgYSBkaWZmZXJlbnQKKyAgICogICAgIGVudW1lcmF0aW9uIHZhbHVlIGZvciBsZWdhY3kgTENEIGZpbHRlcmluZy4gIFRvIG1ha2UgY29kZSB3b3JrIHRoYXQKKyAgICogICAgIChpbmNvcnJlY3RseSkgZm9yd2FyZHMgRm9udENvbmZpZydzIGVudW1lcmF0aW9uIHZhbHVlIHRvCisgICAqICAgICBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgd2l0aG91dCBwcm9wZXIgbWFwcGluZywgaXQgaXMgdGh1cyBlYXNpZXN0CisgICAqICAgICB0byBoYXZlIGFub3RoZXIgZW51bWVyYXRpb24gdmFsdWUsIHdoaWNoIGlzIGNvbXBsZXRlbHkgZXF1YWwgdG8KKyAgICogICAgIGBGVF9MQ0RfRklMVEVSX0xFR0FDWScuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjMuMCAoYEZUX0xDRF9GSUxURVJfTEVHQUNZMScgc2luY2UgMi42LjIpCisgICAqLworICB0eXBlZGVmIGVudW0gIEZUX0xjZEZpbHRlcl8KKyAgeworICAgIEZUX0xDRF9GSUxURVJfTk9ORSAgICA9IDAsCisgICAgRlRfTENEX0ZJTFRFUl9ERUZBVUxUID0gMSwKKyAgICBGVF9MQ0RfRklMVEVSX0xJR0hUICAgPSAyLAorICAgIEZUX0xDRF9GSUxURVJfTEVHQUNZMSA9IDMsCisgICAgRlRfTENEX0ZJTFRFUl9MRUdBQ1kgID0gMTYsCisKKyAgICBGVF9MQ0RfRklMVEVSX01BWCAgIC8qIGRvIG5vdCByZW1vdmUgKi8KKworICB9IEZUX0xjZEZpbHRlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuYzoKKyAgICogICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFwcGx5IGNvbG9yIGZpbHRlcmluZyB0byBMQ0QgZGVjaW1hdGVkCisgICAqICAgYml0bWFwcywgbGlrZSB0aGUgb25lcyB1c2VkIHdoZW4gY2FsbGluZyBARlRfUmVuZGVyX0dseXBoIHdpdGgKKyAgICogICBARlRfUkVOREVSX01PREVfTENEIG9yIEBGVF9SRU5ERVJfTU9ERV9MQ0RfVi4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogICBmaWx0ZXIgOjoKKyAgICogICAgIFRoZSBmaWx0ZXIgdHlwZS4KKyAgICoKKyAgICogICAgIFlvdSBjYW4gdXNlIEBGVF9MQ0RfRklMVEVSX05PTkUgaGVyZSB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgb3IKKyAgICogICAgIEBGVF9MQ0RfRklMVEVSX0RFRkFVTFQgdG8gdXNlIGEgZGVmYXVsdCBmaWx0ZXIgdGhhdCBzaG91bGQgd29yaworICAgKiAgICAgd2VsbCBvbiBtb3N0IExDRCBzY3JlZW5zLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZmVhdHVyZSBpcyBhbHdheXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIENsaWVudHMgbXVzdCBtYWtlIGFuCisgICAqICAgZXhwbGljaXQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggYSBgZmlsdGVyJyB2YWx1ZSBvdGhlciB0aGFuCisgICAqICAgQEZUX0xDRF9GSUxURVJfTk9ORSBpbiBvcmRlciB0byBlbmFibGUgaXQuCisgICAqCisgICAqICAgRHVlIHRvICpQQVRFTlRTKiBjb3ZlcmluZyBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMgZnVuY3Rpb24gZG9lc24ndAorICAgKiAgIGRvIGFueXRoaW5nIGV4Y2VwdCByZXR1cm5pbmcgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHRoZQorICAgKiAgIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaXMgbm90CisgICAqICAgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwKKyAgICogICBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy4wCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xjZEZpbHRlciAgZmlsdGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmM6CisgICAqICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBMQ0QgZmlsdGVyIHdpdGggY3VzdG9tIHdlaWdodHMsCisgICAqICAgaW5zdGVhZCBvZiB1c2luZyBwcmVzZXRzIGluIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlci4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogICB3ZWlnaHRzIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXk7IHRoZSBmdW5jdGlvbiBjb3BpZXMgdGhlIGZpcnN0IGZpdmUgYnl0ZXMgYW5kCisgICAqICAgICB1c2VzIHRoZW0gdG8gc3BlY2lmeSB0aGUgZmlsdGVyIHdlaWdodHMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRHVlIHRvICpQQVRFTlRTKiBjb3ZlcmluZyBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMgZnVuY3Rpb24gZG9lc24ndAorICAgKiAgIGRvIGFueXRoaW5nIGV4Y2VwdCByZXR1cm5pbmcgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHRoZQorICAgKiAgIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaXMgbm90CisgICAqICAgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwKKyAgICogICBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC4wCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICAqd2VpZ2h0cyApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogRlRMQ0RGSUxfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRsaXN0LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRsaXN0LmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKaW5kZXggMTJiNDhjNy4uODJmNDM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGxpc3QuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEdlbmVyaWMgbGlzdCBzdXBwb3J0IGZvciBGcmVlVHlwZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCw4ICsyNCw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVExJU1RfSF9fCi0jZGVmaW5lIF9fRlRMSVNUX0hfXworI2lmbmRlZiBGVExJU1RfSF8KKyNkZWZpbmUgRlRMSVNUX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNzAsNyArMjcwLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVExJU1RfSF9fICovCisjZW5kaWYgLyogRlRMSVNUX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0bHp3LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdGx6dy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmgKaW5kZXggZDNlYzI4ZS4uNTgyZTJjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdGx6dy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBMWlctY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRMWldfSF9fCi0jZGVmaW5lIF9fRlRMWldfSF9fCisjaWZuZGVmIEZUTFpXX0hfCisjZGVmaW5lIEZUTFpXX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtOTMsNyArOTMsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUTFpXX0hfXyAqLworI2VuZGlmIC8qIEZUTFpXX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0bWFjLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdG1hYy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKaW5kZXggMTRjNTVjZi4uYWRiMTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdG1hYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZGRpdGlvbmFsIE1hYy1zcGVjaWZpYyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsOCArMjUsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRNQUNfSF9fCi0jZGVmaW5lIF9fRlRNQUNfSF9fCisjaWZuZGVmIEZUTUFDX0hfCisjZGVmaW5lIEZUTUFDX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNjgsNyArMjY4LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19GVE1BQ19IX18gKi8KKyNlbmRpZiAvKiBGVE1BQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdG1tLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0bW0uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKaW5kZXggNmVmNDc5OC4uYjVkNjg1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdG1tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVyIGZvbnQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUTU1fSF9fCi0jZGVmaW5lIF9fRlRNTV9IX18KKyNpZm5kZWYgRlRNTV9IXworI2RlZmluZSBGVE1NX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xOTUsMTcgKzE5NSwyNSBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgKHdoZXJlIGV2ZXJ5IGdseXBoIGNvdWxkIGhhdmUgYSBkaWZmZXJlbnQgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBkZXNpZ25zKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fbmFtZWRzdHlsZXMgOjogVGhlIG51bWJlciBvZiBuYW1lZCBzdHlsZXM7IG9ubHkgbWVhbmluZ2Z1bCBmb3IgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIEdYIHRoYXQgYWxsb3dzIGNlcnRhaW4gZGVzaWduIGNvb3JkaW5hdGVzIHRvICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGEgc3RyaW5nIElEIChpbiB0aGUgYG5hbWUnIHRhYmxlKSAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZW0uICBUaGUgZm9udCBjYW4gdGVsbCB0aGUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIHVzZXIgdGhhdCwgZm9yIGV4YW1wbGUsIFdlaWdodD0xLjUgaXMgYEJvbGQnLiAgICovCisgIC8qICAgIG51bV9uYW1lZHN0eWxlcyA6OiBUaGUgbnVtYmVyIG9mIG5hbWVkIHN0eWxlczsgYSBgbmFtZWQgc3R5bGUnIGlzICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgYSB0dXBsZSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgdGhhdCBoYXMgYSBzdHJpbmcgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIElEIChpbiB0aGUgYG5hbWUnIHRhYmxlKSBhc3NvY2lhdGVkIHdpdGggaXQuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9udCBjYW4gdGVsbCB0aGUgdXNlciB0aGF0LCBmb3IgZXhhbXBsZSwgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgW1dlaWdodD0xLjUsV2lkdGg9MS4xXSBpcyBgQm9sZCcuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBGb3IgVHlwZSAxIE11bHRpcGxlIE1hc3RlcnMgZm9udHMsIHRoaXMgdmFsdWUgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgaXMgYWx3YXlzIHplcm8gYmVjYXVzZSB0aGUgZm9ybWF0IGRvZXMgbm90ICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbmFtZWQgc3R5bGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBheGlzICAgICAgICAgICAgOjogQW4gYXhpcyBkZXNjcmlwdG9yIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgIEdYIGZvbnRzIGNvbnRhaW4gc2xpZ2h0bHkgbW9yZSBkYXRhIHRoYW4gTU0uICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnkgbWFuYWdlbWVudCBvZiB0aGlzIHBvaW50ZXIgaXMgZG9uZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBieSBGcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIG5hbWVkc3R5bGUgICAgICA6OiBBIG5hbWVkIHN0eWxlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgT25seSBtZWFuaW5nZnVsIHdpdGggR1guICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoaXMgcG9pbnRlciBpcyBkb25lICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX01NX1Zhcl8KICAgewpAQCAtMjU1LDcgKzI2Myw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYW1hc3RlciA6OiBUaGUgTXVsdGlwbGUgTWFzdGVycy9HWCB2YXIgZGVzY3JpcHRvci4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgQWxsb2NhdGVzIGEgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIHRoZSB1c2VyIG11c3QgZnJlZS4gICAqLworICAvKiAgICAgICAgICAgICAgIEFsbG9jYXRlcyBhIGRhdGEgc3RydWN0dXJlLCB3aGljaCB0aGUgdXNlciBtdXN0ICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBkZWFsbG9jYXRlIHdpdGggYGZyZWUnIGFmdGVyIHVzZS4gICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNzMsNyArMzgyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVE1NX0hfXyAqLworI2VuZGlmIC8qIEZUTU1fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRtb2RhcGkuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0bW9kYXBpLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaAppbmRleCAyZWYzZjQ2Li5iNGQyNzU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0bW9kYXBpLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIG1vZHVsZXMgcHVibGljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE1PREFQSV9IX18KLSNkZWZpbmUgX19GVE1PREFQSV9IX18KKyNpZm5kZWYgRlRNT0RBUElfSF8KKyNkZWZpbmUgRlRNT0RBUElfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgLyogICAgICBwc2F1eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgcHNoaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIHBzbmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICByYXN0ZXIxLCByYXN0ZXI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgcmFzdGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIHNmbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBzbW9vdGgsIHNtb290aC1sY2QsIHNtb290aC1sY2R2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgdHJ1ZXR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTExLDEyICsxMTEsMTQgQEAKICNkZWZpbmUgRlRfTU9EVUxFX0hJTlRFUiAgICAgICAgICAgICAgNCAgLyogdGhpcyBtb2R1bGUgaXMgYSBnbHlwaCBoaW50ZXIgKi8KICNkZWZpbmUgRlRfTU9EVUxFX1NUWUxFUiAgICAgICAgICAgICAgOCAgLyogdGhpcyBtb2R1bGUgaXMgYSBzdHlsZXIgICAgICAgKi8KIAotI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX1NDQUxBQkxFICAgICAweDEwMCAgIC8qIHRoZSBkcml2ZXIgc3VwcG9ydHMgICAgICAqLworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX1NDQUxBQkxFICAgICAgMHgxMDAgIC8qIHRoZSBkcml2ZXIgc3VwcG9ydHMgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjYWxhYmxlIGZvbnRzICAgICAgICAgICAqLwotI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX05PX09VVExJTkVTICAweDIwMCAgIC8qIHRoZSBkcml2ZXIgZG9lcyBub3QgICAgICAqLworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX05PX09VVExJTkVTICAgMHgyMDAgIC8qIHRoZSBkcml2ZXIgZG9lcyBub3QgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgdmVjdG9yIG91dGxpbmVzICAqLwotI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIgICAweDQwMCAgIC8qIHRoZSBkcml2ZXIgcHJvdmlkZXMgaXRzICAqLworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIgICAgMHg0MDAgIC8qIHRoZSBkcml2ZXIgcHJvdmlkZXMgaXRzICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG93biBoaW50ZXIgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX0hJTlRTX0xJR0hUTFkgMHg4MDAgIC8qIHRoZSBkcml2ZXIncyBoaW50ZXIgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2R1Y2VzIExJR0hUIGhpbnRzICAgICAqLwogCiAKICAgLyogZGVwcmVjYXRlZCB2YWx1ZXMgKi8KQEAgLTEyNSw5ICsxMjcsMTAgQEAKICNkZWZpbmUgZnRfbW9kdWxlX2hpbnRlciAgICAgICAgICAgICAgRlRfTU9EVUxFX0hJTlRFUgogI2RlZmluZSBmdF9tb2R1bGVfc3R5bGVyICAgICAgICAgICAgICBGVF9NT0RVTEVfU1RZTEVSCiAKLSNkZWZpbmUgZnRfbW9kdWxlX2RyaXZlcl9zY2FsYWJsZSAgICAgRlRfTU9EVUxFX0RSSVZFUl9TQ0FMQUJMRQotI2RlZmluZSBmdF9tb2R1bGVfZHJpdmVyX25vX291dGxpbmVzICBGVF9NT0RVTEVfRFJJVkVSX05PX09VVExJTkVTCi0jZGVmaW5lIGZ0X21vZHVsZV9kcml2ZXJfaGFzX2hpbnRlciAgIEZUX01PRFVMRV9EUklWRVJfSEFTX0hJTlRFUgorI2RlZmluZSBmdF9tb2R1bGVfZHJpdmVyX3NjYWxhYmxlICAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUKKyNkZWZpbmUgZnRfbW9kdWxlX2RyaXZlcl9ub19vdXRsaW5lcyAgICBGVF9NT0RVTEVfRFJJVkVSX05PX09VVExJTkVTCisjZGVmaW5lIGZ0X21vZHVsZV9kcml2ZXJfaGFzX2hpbnRlciAgICAgRlRfTU9EVUxFX0RSSVZFUl9IQVNfSElOVEVSCisjZGVmaW5lIGZ0X21vZHVsZV9kcml2ZXJfaGludHNfbGlnaHRseSAgRlRfTU9EVUxFX0RSSVZFUl9ISU5UU19MSUdIVExZCiAKIAogICB0eXBlZGVmIEZUX1BvaW50ZXIgIEZUX01vZHVsZV9JbnRlcmZhY2U7CkBAIC02MTAsMTIgKzYxMyw3IEBACiAgICAqICAgICAgIFRoZSBsaWJyYXJ5IGRvZXNuJ3QgaW1wbGVtZW50IGFueSBraW5kIG9mIGJ5dGVjb2RlIGludGVycHJldGVyLgogICAgKgogICAgKiAgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfVU5QQVRFTlRFRCA6OgotICAgKiAgICAgICBUaGUgbGlicmFyeSBpbXBsZW1lbnRzIGEgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdGhhdCBkb2Vzbid0Ci0gICAqICAgICAgIHN1cHBvcnQgdGhlIHBhdGVudGVkIG9wZXJhdGlvbnMgb2YgdGhlIFRydWVUeXBlIHZpcnR1YWwgbWFjaGluZS4KLSAgICoKLSAgICogICAgICAgSXRzIG1haW4gdXNlIGlzIHRvIGxvYWQgY2VydGFpbiBBc2lhbiBmb250cyB0aGF0IHBvc2l0aW9uIGFuZAotICAgKiAgICAgICBzY2FsZSBnbHlwaCBjb21wb25lbnRzIHdpdGggYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLiAgSXQgcHJvZHVjZXMKLSAgICogICAgICAgYmFkIG91dHB1dCBmb3IgbW9zdCBvdGhlciBmb250cy4KKyAgICogICAgICAgRGVwcmVjYXRlZCBhbmQgcmVtb3ZlZC4KICAgICoKICAgICogICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1BBVEVOVEVEIDo6CiAgICAqICAgICAgIFRoZSBsaWJyYXJ5IGltcGxlbWVudHMgYSBieXRlY29kZSBpbnRlcnByZXRlciB0aGF0IGNvdmVycwpAQCAtNjYzLDcgKzY2MSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRNT0RBUElfSF9fICovCisjZW5kaWYgLyogRlRNT0RBUElfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRtb2RlcnIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0bW9kZXJyLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaAppbmRleCA5ZDdmOTgxLi4yYTc2NzFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0bW9kZXJyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIG1vZHVsZSBlcnJvciBvZmZzZXRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03NCw3ICs3NCw3IEBACiAgIC8qIHdpdGggc29tZXRoaW5nIGxpa2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAjdW5kZWYgX19GVE1PREVSUl9IX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI3VuZGVmIEZUTU9ERVJSX0hfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICNkZWZpbmUgRlRfTU9ERVJSREVGKCBlLCB2LCBzICkgIHsgRlRfTW9kX0Vycl8gIyMgZSwgcyB9LCAgICAgICAgICovCiAgIC8qICAgICAjZGVmaW5lIEZUX01PREVSUl9TVEFSVF9MSVNUICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgI2RlZmluZSBGVF9NT0RFUlJfRU5EX0xJU1QgICAgICAgeyAwLCAwIH0gfTsgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTkxLDggKzkxLDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUTU9ERVJSX0hfXwotI2RlZmluZSBfX0ZUTU9ERVJSX0hfXworI2lmbmRlZiBGVE1PREVSUl9IXworI2RlZmluZSBGVE1PREVSUl9IXwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODgsNyArMTg4LDcgQEAKICN1bmRlZiBGVF9ORUVEX0VYVEVSTl9DCiAKIAotI2VuZGlmIC8qIF9fRlRNT0RFUlJfSF9fICovCisjZW5kaWYgLyogRlRNT0RFUlJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRvdHZhbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdG90dmFsLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oCmluZGV4IGU3NDRiNzEuLjNlNmUxOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRvdHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw4ICsyNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE9UVkFMX0hfXwotI2RlZmluZSBfX0ZUT1RWQUxfSF9fCisjaWZuZGVmIEZUT1RWQUxfSF8KKyNkZWZpbmUgRlRPVFZBTF9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTEwNiwxMiArMTA2LDEyIEBACiAjZGVmaW5lIEZUX1ZBTElEQVRFX0pTVEYgIDB4MTAwMAogI2RlZmluZSBGVF9WQUxJREFURV9NQVRIICAweDIwMDAKIAotI2RlZmluZSBGVF9WQUxJREFURV9PVCAgRlRfVkFMSURBVEVfQkFTRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dERUYgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9WQUxJREFURV9HUE9TIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfR1NVQiB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0pTVEYgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9WQUxJREFURV9NQVRICisjZGVmaW5lIEZUX1ZBTElEQVRFX09UICAoIEZUX1ZBTElEQVRFX0JBU0UgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dERUYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dQT1MgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dTVUIgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0pTVEYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX01BVEggKQogCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKgpAQCAtMTk4LDcgKzE5OCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRPVFZBTF9IX18gKi8KKyNlbmRpZiAvKiBGVE9UVkFMX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0b3V0bG4uaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRvdXRsbi5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaAppbmRleCAxMDZjZmRlLi5lZjY2ZDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0b3V0bG4uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFN1cHBvcnQgZm9yIHRoZSBGVF9PdXRsaW5lIHR5cGUgdXNlZCB0byBzdG9yZSBnbHlwaCBzaGFwZXMgb2YgICAgICAgICovCiAvKiAgICBtb3N0IHNjYWxhYmxlIGZvbnQgZm9ybWF0cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRPVVRMTl9IX18KLSNkZWZpbmUgX19GVE9VVExOX0hfXworI2lmbmRlZiBGVE9VVExOX0hfCisjZGVmaW5lIEZUT1VUTE5fSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTExNSw2ICsxMTUsMTAgQEAKICAgLyogICAgb3V0bGluZSBmb3Igc3Ryb2tpbmcgcHVycG9zZXMgKG90aGVyd2lzZSBpdCB3b3VsZCByZXN1bHQgaW4gYSAgICAgICovCiAgIC8qICAgIHZpc2libGUgZG90IHdoZW4gcm91bmQgY2FwcyBhcmUgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2ltaWxhcmx5LCB0aGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzIGZvciBhbiBlbXB0eSBvdXRsaW5lIGFsc28gICovCisgIC8qICAgIChkb2luZyBub3RoaW5nLCB0aGlzIGlzLCBub3QgY2FsbGluZyBhbnkgZW1pdHRlcik7IGlmIG5lY2Vzc2FyeSwgICAqLworICAvKiAgICB5b3Ugc2hvdWxkIGZpbHRlciB0aGlzIG91dCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PdXRsaW5lX0RlY29tcG9zZSggRlRfT3V0bGluZSogICAgICAgICAgICAgIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9PdXRsaW5lX0Z1bmNzKiAgZnVuY19pbnRlcmZhY2UsCkBAIC0yMTMsNiArMjE3LDEwIEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlbXB0eSBvdXRsaW5lLCBvciBhbiBvdXRsaW5lIHdpdGggYSBzaW5nbGUgcG9pbnQgb25seSBpcyBhbHNvICAgKi8KKyAgLyogICAgdmFsaWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9DaGVjayggRlRfT3V0bGluZSogIG91dGxpbmUgKTsKIApAQCAtMzU0LDggKzM2Miw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCBpbmRleCwgRlRfTE9BRF9ERUZBVUxUICk7ICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaWYgKCBmYWNlLT5zbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKSAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgRlRfT3V0bGluZV9FbWJvbGRlbiggJmZhY2UtPnNsb3QtPm91dGxpbmUsIHN0cmVuZ3RoICk7ICAgICAgICAgKi8KKyAgLyogICAgICBpZiAoIGZhY2UtPmdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKSAgICAgICAgICAgICovCisgIC8qICAgICAgICBGVF9PdXRsaW5lX0VtYm9sZGVuKCAmZmFjZS0+Z2x5cGgtPm91dGxpbmUsIHN0cmVuZ3RoICk7ICAgICAgICAqLwogICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMsIGZvbnQgc2NhbGluZyB2YWx1ZXMgbXVzdCBiZSBzZXQgd2l0aCAgICAqLwpAQCAtNTYzLDcgKzU3MSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRPVVRMTl9IX18gKi8KKyNlbmRpZiAvKiBGVE9VVExOX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0cGZyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9mdHBmci5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKaW5kZXggYTFjMDJhMi4uMmUxYmZmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdHBmci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRQRlJfSF9fCi0jZGVmaW5lIF9fRlRQRlJfSF9fCisjaWZuZGVmIEZUUEZSX0hfCisjZGVmaW5lIEZUUEZSX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMTY2LDcgKzE2Niw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRQRlJfSF9fICovCisjZW5kaWYgLyogRlRQRlJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRyZW5kZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0cmVuZGVyLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaAppbmRleCBlYzhkYTcwLi45ZjdlZDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0cmVuZGVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHJlbmRlcmVyIG1vZHVsZXMgcHVibGljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFJFTkRFUl9IX18KLSNkZWZpbmUgX19GVFJFTkRFUl9IX18KKyNpZm5kZWYgRlRSRU5ERVJfSF8KKyNkZWZpbmUgRlRSRU5ERVJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTIyNiw3ICsyMjYsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUUkVOREVSX0hfXyAqLworI2VuZGlmIC8qIEZUUkVOREVSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0c2l6ZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRzaXplcy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0c2l6ZXMuaAppbmRleCBiZWY4NDI0Li41NWUwZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0c2l6ZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c2l6ZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzaXplIG9iamVjdHMgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsOCArMjUsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRTSVpFU19IX18KLSNkZWZpbmUgX19GVFNJWkVTX0hfXworI2lmbmRlZiBGVFNJWkVTX0hfCisjZGVmaW5lIEZUU0laRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE1Myw3ICsxNTMsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUU0laRVNfSF9fICovCisjZW5kaWYgLyogRlRTSVpFU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdHNuYW1lcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRzbmFtZXMuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCmluZGV4IDBmN2ZiZTEuLmE3YjUxYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRzbmFtZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgKQEAgLTcsNyArNyw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE5LDggKzE5LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUX1NGTlRfTkFNRVNfSF9fCi0jZGVmaW5lIF9fRlRfU0ZOVF9OQU1FU19IX18KKyNpZm5kZWYgRlRTTkFNRVNfSF8KKyNkZWZpbmUgRlRTTkFNRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE5NCw3ICsxOTQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUX1NGTlRfTkFNRVNfSF9fICovCisjZW5kaWYgLyogRlRTTkFNRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRzdHJva2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0c3Ryb2tlLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaAppbmRleCA3ZWJiMWU3Li5iM2I5OTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0c3Ryb2tlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVF9TVFJPS0VfSF9fCi0jZGVmaW5lIF9fRlRfU1RST0tFX0hfXworI2lmbmRlZiBGVFNUUk9LRV9IXworI2RlZmluZSBGVFNUUk9LRV9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX09VVExJTkVfSApAQCAtNzc0LDcgKzc3NCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRfU1RST0tFX0hfXyAqLworI2VuZGlmIC8qIEZUU1RST0tFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0c3ludGguaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzeW50aC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRzeW50aC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAppbmRleCBmYmNiYWQ4Li5mZGZjYjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0c3ludGguaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDEsOCArNDEsOCBAQAogICAvKiBhZGFwdGVkIHRvIHRoZSBwYXJ0aWN1bGFyIG5lZWRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKLSNpZm5kZWYgX19GVFNZTlRIX0hfXwotI2RlZmluZSBfX0ZUU1lOVEhfSF9fCisjaWZuZGVmIEZUU1lOVEhfSF8KKyNkZWZpbmUgRlRTWU5USF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNzgsNyArNzgsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUU1lOVEhfSF9fICovCisjZW5kaWYgLyogRlRTWU5USF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdHN5c3RlbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnRzeXN0ZW0uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCmluZGV4IDJiYzk5OTkuLmE3NWY5NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnRzeXN0ZW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgZGVmaW5pdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU1lTVEVNX0hfXwotI2RlZmluZSBfX0ZUU1lTVEVNX0hfXworI2lmbmRlZiBGVFNZU1RFTV9IXworI2RlZmluZSBGVFNZU1RFTV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjkwLDcgKzI5MCw3IEBACiAgICAqICAgICBUaGUgc3RyZWFtIHNpemUgaW4gYnl0ZXMuCiAgICAqCiAgICAqICAgICBJbiBjYXNlIG9mIGNvbXByZXNzZWQgc3RyZWFtcyB3aGVyZSB0aGUgc2l6ZSBpcyB1bmtub3duIGJlZm9yZQotICAgKiAgICAgYWN0dWFsbHkgZG9pbmcgdGhlIGRlY29tcHJlc3Npb24sIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMHg3RkZGRkZGRi4gCisgICAqICAgICBhY3R1YWxseSBkb2luZyB0aGUgZGVjb21wcmVzc2lvbiwgdGhlIHZhbHVlIGlzIHNldCB0byAweDdGRkZGRkZGLgogICAgKiAgICAgKE5vdGUgdGhhdCB0aGlzIHNpemUgdmFsdWUgY2FuIG9jY3VyIGZvciBub3JtYWwgc3RyZWFtcyBhbHNvOyBpdCBpcwogICAgKiAgICAgdGh1cyBqdXN0IGEgaGludC4pCiAgICAqCkBAIC0zNDksNyArMzQ5LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFNZU1RFTV9IX18gKi8KKyNlbmRpZiAvKiBGVFNZU1RFTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdHRyaWdvbi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnR0cmlnb24uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCmluZGV4IDNkODIxYmEuLmY3ODliNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnR0cmlnb24uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdHJpZ29ub21ldHJpYyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUVFJJR09OX0hfXwotI2RlZmluZSBfX0ZUVFJJR09OX0hfXworI2lmbmRlZiBGVFRSSUdPTl9IXworI2RlZmluZSBGVFRSSUdPTl9IXwogCiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICiAKQEAgLTIyNSw4ICsyMjUsOCBAQAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgUmV0dXJuIHRoZSB1bml0IHZlY3RvciBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gYW5nbGUuICBBZnRlciB0aGUKLSAgICogICBjYWxsLCB0aGUgdmFsdWUgb2YgYHZlYy54JyB3aWxsIGJlIGBzaW4oYW5nbGUpJywgYW5kIHRoZSB2YWx1ZSBvZgotICAgKiAgIGB2ZWMueScgd2lsbCBiZSBgY29zKGFuZ2xlKScuCisgICAqICAgY2FsbCwgdGhlIHZhbHVlIG9mIGB2ZWMueCcgd2lsbCBiZSBgY29zKGFuZ2xlKScsIGFuZCB0aGUgdmFsdWUgb2YKKyAgICogICBgdmVjLnknIHdpbGwgYmUgYHNpbihhbmdsZSknLgogICAgKgogICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvIHJldHJpZXZlIGJvdGggdGhlIHNpbnVzIGFuZCBjb3NpbnVzIG9mIGEKICAgICogICBnaXZlbiBhbmdsZSBxdWlja2x5LgpAQCAtMzQ0LDcgKzM0NCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRUUklHT05fSF9fICovCisjZW5kaWYgLyogRlRUUklHT05fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0dGRydi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHR0ZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxODZlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0dGRydi5oCkBAIC0wLDAgKzEsMzI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHR0ZHJ2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgVHJ1ZVR5cGUgZHJpdmVyICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIEZUVFREUlZfSF8KKyNkZWZpbmUgRlRUVERSVl9IXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgdHRfZHJpdmVyCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUaGUgVHJ1ZVR5cGUgZHJpdmVyCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBDb250cm9sbGluZyB0aGUgVHJ1ZVR5cGUgZHJpdmVyIG1vZHVsZS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFdoaWxlIEZyZWVUeXBlJ3MgVHJ1ZVR5cGUgZHJpdmVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkKKyAgICogICBpdHNlbGYsIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQKKyAgICogICBhbmQgQEZUX1Byb3BlcnR5X0dldC4gIFRoZSBmb2xsb3dpbmcgbGlzdHMgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzCisgICAqICAgdG9nZXRoZXIgd2l0aCB0aGUgbmVjZXNzYXJ5IG1hY3JvcyBhbmQgc3RydWN0dXJlcy4KKyAgICoKKyAgICogICBUaGUgVHJ1ZVR5cGUgZHJpdmVyJ3MgbW9kdWxlIG5hbWUgaXMgYHRydWV0eXBlJy4KKyAgICoKKyAgICogICBXZSBzdGFydCB3aXRoIGEgbGlzdCBvZiBkZWZpbml0aW9ucywga2luZGx5IHByb3ZpZGVkIGJ5IEdyZWcKKyAgICogICBIaXRjaGNvY2suCisgICAqCisgICAqICAgX0JpLUxldmVsXyBfUmVuZGVyaW5nXworICAgKgorICAgKiAgIE1vbm9jaHJvbWF0aWMgcmVuZGVyaW5nLCBleGNsdXNpdmVseSB1c2VkIGluIHRoZSBlYXJseSBkYXlzIG9mCisgICAqICAgVHJ1ZVR5cGUgYnkgYm90aCBBcHBsZSBhbmQgTWljcm9zb2Z0LiAgTWljcm9zb2Z0J3MgR0RJIGludGVyZmFjZQorICAgKiAgIHN1cHBvcnRlZCBoaW50aW5nIG9mIHRoZSByaWdodC1zaWRlIGJlYXJpbmcgcG9pbnQsIHN1Y2ggdGhhdCB0aGUKKyAgICogICBhZHZhbmNlIHdpZHRoIGNvdWxkIGJlIG5vbi1saW5lYXIuICBNb3N0IG9mdGVuIHRoaXMgd2FzIGRvbmUgdG8KKyAgICogICBhY2hpZXZlIHNvbWUgbGV2ZWwgb2YgZ2x5cGggc3ltbWV0cnkuICBUbyBlbmFibGUgcmVhc29uYWJsZQorICAgKiAgIHBlcmZvcm1hbmNlIChlLmcuLCBub3QgaGF2aW5nIHRvIHJ1biBoaW50aW5nIG9uIGFsbCBnbHlwaHMganVzdCB0bworICAgKiAgIGdldCB0aGUgd2lkdGhzKSB0aGVyZSB3YXMgYSBiaXQgaW4gdGhlIGhlYWQgdGFibGUgaW5kaWNhdGluZyBpZiB0aGUKKyAgICogICBzaWRlIGJlYXJpbmcgd2FzIGhpbnRlZCwgYW5kIGFkZGl0aW9uYWwgdGFibGVzLCBgaGRteCcgYW5kIGBMVFNIJywgdG8KKyAgICogICBjYWNoZSBoaW50aW5nIHdpZHRocyBhY3Jvc3MgbXVsdGlwbGUgc2l6ZXMgYW5kIGRldmljZSBhc3BlY3QgcmF0aW9zLgorICAgKgorICAgKiAgIF9Gb250XyBfU21vb3RoaW5nXworICAgKgorICAgKiAgIE1pY3Jvc29mdCdzIEdESSBpbXBsZW1lbnRhdGlvbiBvZiBhbnRpLWFsaWFzaW5nLiAgTm90IHRyYWRpdGlvbmFsCisgICAqICAgYW50aS1hbGlhc2luZyBhcyB0aGUgb3V0bGluZXMgd2VyZSBoaW50ZWQgYmVmb3JlIHRoZSBzYW1wbGluZy4gIFRoZQorICAgKiAgIHdpZHRocyBtYXRjaGVkIHRoZSBiaS1sZXZlbCByZW5kZXJpbmcuCisgICAqCisgICAqICAgX0NsZWFyVHlwZV8gX1JlbmRlcmluZ18KKyAgICoKKyAgICogICBUZWNobmlxdWUgdGhhdCB1c2VzIHBoeXNpY2FsIHN1YnBpeGVscyB0byBpbXByb3ZlIHJlbmRlcmluZyBvbiBMQ0QKKyAgICogICAoYW5kIG90aGVyKSBkaXNwbGF5cy4gIEJlY2F1c2Ugb2YgdGhlIGhpZ2hlciByZXNvbHV0aW9uLCBtYW55IG1ldGhvZHMKKyAgICogICBvZiBpbXByb3Zpbmcgc3ltbWV0cnkgaW4gZ2x5cGhzIHRocm91Z2ggaGludGluZyB0aGUgcmlnaHQtc2lkZQorICAgKiAgIGJlYXJpbmcgd2VyZSBubyBsb25nZXIgbmVjZXNzYXJ5LiAgVGhpcyBsZWFkIHRvIHdoYXQgR0RJIGNhbGxzCisgICAqICAgYG5hdHVyYWwgd2lkdGhzJyBDbGVhclR5cGUsIHNlZQorICAgKiAgIGh0dHA6Ly93d3cuYmVhdHN0YW1tLmNvbS90eXBvZ3JhcGh5L1JUUkNoNC5odG0jU2VjMjEuICBTaW5jZSBoaW50aW5nCisgICAqICAgaGFzIGV4dHJhIHJlc29sdXRpb24sIG1vc3Qgbm9uLWxpbmVhcml0eSB3ZW50IGF3YXksIGJ1dCBpdCBpcyBzdGlsbAorICAgKiAgIHBvc3NpYmxlIGZvciBoaW50cyB0byBjaGFuZ2UgdGhlIGFkdmFuY2Ugd2lkdGhzIGluIHRoaXMgbW9kZS4KKyAgICoKKyAgICogICBfQ2xlYXJUeXBlXyBfQ29tcGF0aWJsZV8gX1dpZHRoc18KKyAgICoKKyAgICogICBPbmUgb2YgdGhlIGVhcmxpZXN0IGNoYWxsZW5nZXMgd2l0aCBDbGVhclR5cGUgd2FzIGFsbG93aW5nIHRoZQorICAgKiAgIGltcGxlbWVudGF0aW9uIGluIEdESSB0byBiZSBzZWxlY3RlZCB3aXRob3V0IHJlcXVpcmluZyBhbGwgVUkgYW5kCisgICAqICAgZG9jdW1lbnRzIHRvIHJlZmxvdy4gIFRvIGFkZHJlc3MgdGhpcywgYSBjb21wYXRpYmxlIG1ldGhvZCBvZgorICAgKiAgIHJlbmRlcmluZyBDbGVhclR5cGUgd2FzIGFkZGVkIHdoZXJlIHRoZSBmb250IGhpbnRzIGFyZSBleGVjdXRlZCBvbmNlCisgICAqICAgdG8gZGV0ZXJtaW5lIHRoZSB3aWR0aCBpbiBiaS1sZXZlbCByZW5kZXJpbmcsIGFuZCB0aGVuIHJlLXJ1biBpbgorICAgKiAgIENsZWFyVHlwZSwgd2l0aCB0aGUgZGlmZmVyZW5jZSBpbiB3aWR0aHMgYmVpbmcgYWJzb3JiZWQgaW4gdGhlIGZvbnQKKyAgICogICBoaW50cyBmb3IgQ2xlYXJUeXBlIChtb3N0bHkgaW4gdGhlIHdoaXRlIHNwYWNlIG9mIGhpbnRzKTsgc2VlCisgICAqICAgaHR0cDovL3d3dy5iZWF0c3RhbW0uY29tL3R5cG9ncmFwaHkvUlRSQ2g0Lmh0bSNTZWMyMC4gIFNvbWV3aGF0IGJ5CisgICAqICAgZGVmaW5pdGlvbiwgY29tcGF0aWJsZSB3aWR0aCBDbGVhclR5cGUgYWxsb3dzIGZvciBub24tbGluZWFyIHdpZHRocywKKyAgICogICBidXQgb25seSB3aGVuIHRoZSBiaS1sZXZlbCB2ZXJzaW9uIGhhcyBub24tbGluZWFyIHdpZHRocy4KKyAgICoKKyAgICogICBfQ2xlYXJUeXBlXyBfU3VicGl4ZWxfIF9Qb3NpdGlvbmluZ18KKyAgICoKKyAgICogICBPbmUgb2YgdGhlIG5pY2UgYmVuZWZpdHMgb2YgQ2xlYXJUeXBlIGlzIHRoZSBhYmlsaXR5IHRvIG1vcmUgY3Jpc3BseQorICAgKiAgIGRpc3BsYXkgZnJhY3Rpb25hbCB3aWR0aHM7IHVuZm9ydHVuYXRlbHksIHRoZSBHREkgbW9kZWwgb2YgaW50ZWdlcgorICAgKiAgIGJpdG1hcHMgZGlkIG5vdCBzdXBwb3J0IHRoaXMuICBIb3dldmVyLCB0aGUgV1BGIGFuZCBEaXJlY3QgV3JpdGUKKyAgICogICBmcmFtZXdvcmtzIGRvIHN1cHBvcnQgZnJhY3Rpb25hbCB3aWR0aHMuICBEV3JpdGUgY2FsbHMgdGhpcyBgbmF0dXJhbAorICAgKiAgIG1vZGUnLCBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBHREkncyBgbmF0dXJhbCB3aWR0aHMnLiAgU3VicGl4ZWwKKyAgICogICBwb3NpdGlvbmluZywgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0IFdyaXRlLAorICAgKiAgIHVuZm9ydHVuYXRlbHkgZG9lcyBub3Qgc3VwcG9ydCBoaW50ZWQgYWR2YW5jZSB3aWR0aHMsIHNlZQorICAgKiAgIGh0dHA6Ly93d3cuYmVhdHN0YW1tLmNvbS90eXBvZ3JhcGh5L1JUUkNoNC5odG0jU2VjMjIuICBOb3RlIHRoYXQgdGhlCisgICAqICAgVHJ1ZVR5cGUgaW50ZXJwcmV0ZXIgZnVsbHkgYWxsb3dzIHRoZSBhZHZhbmNlIHdpZHRoIHRvIGJlIGFkanVzdGVkIGluCisgICAqICAgdGhpcyBtb2RlLCBqdXN0IHRoZSBEV3JpdGUgY2xpZW50IHdpbGwgaWdub3JlIHRob3NlIGNoYW5nZXMuCisgICAqCisgICAqICAgX0NsZWFyVHlwZV8gX0JhY2t3YXJkc18gX0NvbXBhdGliaWxpdHlfCisgICAqCisgICAqICAgVGhpcyBpcyBhIHNldCBvZiBleGNlcHRpb25zIG1hZGUgaW4gdGhlIFRydWVUeXBlIGludGVycHJldGVyIHRvCisgICAqICAgbWluaW1pemUgaGludGluZyB0ZWNobmlxdWVzIHRoYXQgd2VyZSBwcm9ibGVtYXRpYyB3aXRoIHRoZSBleHRyYQorICAgKiAgIHJlc29sdXRpb24gb2YgQ2xlYXJUeXBlOyBzZWUKKyAgICogICBodHRwOi8vd3d3LmJlYXRzdGFtbS5jb20vdHlwb2dyYXBoeS9SVFJDaDQuaHRtI1NlYzEgYW5kCisgICAqICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHguCisgICAqICAgVGhpcyB0ZWNobmlxdWUgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggQ2xlYXJUeXBlIGNvbXBhdGlibGUKKyAgICogICB3aWR0aHMuICBDbGVhclR5cGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFzIG5vIGRpcmVjdCBpbXBhY3Qgb24KKyAgICogICBjaGFuZ2luZyBhZHZhbmNlIHdpZHRocywgYnV0IHRoZXJlIG1pZ2h0IGJlIGFuIGluZGlyZWN0IGltcGFjdCBvbgorICAgKiAgIGRpc2FibGluZyBzb21lIGRlbHRhcy4gIFRoaXMgY291bGQgYmUgd29ya2VkIGFyb3VuZCBpbiBiYWNrd2FyZHMKKyAgICogICBjb21wYXRpYmlsaXR5IG1vZGUuCisgICAqCisgICAqICAgX05hdGl2ZV8gX0NsZWFyVHlwZV8gX01vZGVfCisgICAqCisgICAqICAgKE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGBuYXR1cmFsIHdpZHRocycuKSAgVGhpcyBtb2RlIHJlbW92ZXMgYWxsCisgICAqICAgdGhlIGV4Y2VwdGlvbnMgaW4gdGhlIFRydWVUeXBlIGludGVycHJldGVyIHdoZW4gcnVubmluZyB3aXRoCisgICAqICAgQ2xlYXJUeXBlLiAgQW55IGlzc3VlcyBvbiB3aWR0aHMgd291bGQgc3RpbGwgYXBwbHksIHRob3VnaC4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIGludGVycHJldGVyLXZlcnNpb24KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorCisgICAqICAgQ3VycmVudGx5LCB0aHJlZSB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlLCB0d28gcmVwcmVzZW50aW5nIHRoZQorICAgKiAgIGJ5dGVjb2RlIGludGVycHJldGVyIHdpdGggc3VicGl4ZWwgaGludGluZyBzdXBwb3J0IChvbGQgYEluZmluYWxpdHknCisgICAqICAgY29kZSBhbmQgbmV3IHN0cmlwcGVkLWRvd24gYW5kIGhpZ2hlciBwZXJmb3JtYW5jZSBgbWluaW1hbCcgY29kZSkgYW5kCisgICAqICAgb25lIHdpdGhvdXQsIHJlc3BlY3RpdmVseS4gIFRoZSBkZWZhdWx0IGlzIHN1YnBpeGVsIHN1cHBvcnQgaWYKKyAgICogICBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaXMgZGVmaW5lZCwgYW5kIG5vIHN1YnBpeGVsIHN1cHBvcnQKKyAgICogICBvdGhlcndpc2UgKHNpbmNlIGl0IGlzbid0IGF2YWlsYWJsZSB0aGVuKS4KKyAgICoKKyAgICogICBJZiBzdWJwaXhlbCBoaW50aW5nIGlzIG9uLCBtYW55IFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBiZWhhdmUKKyAgICogICBkaWZmZXJlbnRseSBjb21wYXJlZCB0byBCL1cgb3IgZ3JheXNjYWxlIHJlbmRlcmluZyAoZXhjZXB0IGlmIGBuYXRpdmUKKyAgICogICBDbGVhclR5cGUnIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb250KS4gIE1pY3Jvc29mdCdzIG1haW4gaWRlYSBpcyB0bworICAgKiAgIHJlbmRlciBhdCBhIG11Y2ggaW5jcmVhc2VkIGhvcml6b250YWwgcmVzb2x1dGlvbiwgdGhlbiBzYW1wbGluZyBkb3duCisgICAqICAgdGhlIGNyZWF0ZWQgb3V0cHV0IHRvIHN1YnBpeGVsIHByZWNpc2lvbi4gIEhvd2V2ZXIsIG1hbnkgb2xkZXIgZm9udHMKKyAgICogICBhcmUgbm90IHN1aXRlZCB0byB0aGlzIGFuZCBtdXN0IGJlIHNwZWNpYWxseSB0YWtlbiBjYXJlIG9mIGJ5CisgICAqICAgYXBwbHlpbmcgKGhhcmRjb2RlZCkgdHdlYWtzIGluIE1pY3Jvc29mdCdzIGludGVycHJldGVyLgorICAgKgorICAgKiAgIERldGFpbHMgb24gc3VicGl4ZWwgaGludGluZyBhbmQgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHR3ZWFrcyBjYW4gYmUKKyAgICogICBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzIHdoaXRlcGFwZXIgYXQKKyAgICogICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgnLiAKKyAgICogICBOb3RlIHRoYXQgRnJlZVR5cGUgY3VycmVudGx5IGRvZXNuJ3QgcmVhbGx5IGBzdWJwaXhlbCBoaW50JyAoNngxLCA2eDIsCisgICAqICAgb3IgNng1IHN1cGVyc2FtcGxpbmcpIGxpa2UgZGlzY3Vzc2VkIGluIHRoZSBwYXBlci4gIERlcGVuZGluZyBvbiB0aGUKKyAgICogICBjaG9zZW4gaW50ZXJwcmV0ZXIsIGl0IHNpbXBseSBpZ25vcmVzIGluc3RydWN0aW9ucyBvbiB2ZXJ0aWNhbCBzdGVtcworICAgKiAgIHRvIGFycml2ZSBhdCB2ZXJ5IHNpbWlsYXIgcmVzdWx0cy4KKyAgICoKKyAgICogICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBkZW1vbnN0cmF0ZXMgaG93IHRvIGRlYWN0aXZhdGUgc3VicGl4ZWwKKyAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9GYWNlICAgICBmYWNlOworICAgKiAgICAgRlRfVUludCAgICAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHJ1ZXR5cGUiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJwcmV0ZXItdmVyc2lvbiIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcnByZXRlcl92ZXJzaW9uICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlICh1c2luZyB2YWx1ZXMgYDM1JywgYDM4Jywgb3IgYDQwJykuCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgY29uc3RhbnRzIHVzZWQgZm9yIHRoZSBAaW50ZXJwcmV0ZXItdmVyc2lvbiBwcm9wZXJ0eSB0bworICAgKiAgIHNlbGVjdCB0aGUgaGludGluZyBlbmdpbmUgZm9yIFRydWV0eXBlIGZvbnRzLgorICAgKgorICAgKiAgIFRoZSBudW1lcmljIHZhbHVlIGluIHRoZSBjb25zdGFudCBuYW1lcyByZXByZXNlbnRzIHRoZSB2ZXJzaW9uCisgICAqICAgbnVtYmVyIGFzIHJldHVybmVkIGJ5IHRoZSBgR0VUSU5GTycgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSA6OgorICAgKiAgICAgVmVyc2lvbn4zNSBjb3JyZXNwb25kcyB0byBNUyByYXN0ZXJpemVyIHYuMS43IGFzIHVzZWQgZS5nLiBpbgorICAgKiAgICAgV2luZG93c345ODsgb25seSBncmF5c2NhbGUgYW5kIEIvVyByYXN0ZXJpemluZyBpcyBzdXBwb3J0ZWQuCisgICAqCisgICAqICAgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCA6OgorICAgKiAgICAgVmVyc2lvbn4zOCBjb3JyZXNwb25kcyB0byBNUyByYXN0ZXJpemVyIHYuMS45OyBpdCBpcyByb3VnaGx5CisgICAqICAgICBlcXVpdmFsZW50IHRvIHRoZSBoaW50aW5nIHByb3ZpZGVkIGJ5IERpcmVjdFdyaXRlIENsZWFyVHlwZSAoYXMgY2FuCisgICAqICAgICBiZSBmb3VuZCwgZm9yIGV4YW1wbGUsIGluIHRoZSBJbnRlcm5ldCBFeHBsb3Jlcn45IHJ1bm5pbmcgb24KKyAgICogICAgIFdpbmRvd3N+NykuICBJdCBpcyB1c2VkIGluIEZyZWVUeXBlIHRvIHNlbGVjdCB0aGUgYEluZmluYWxpdHknCisgICAqICAgICBzdWJwaXhlbCBoaW50aW5nIGNvZGUuICBUaGUgY29kZSBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZQorICAgKiAgICAgdmVyc2lvbi4KKyAgICoKKyAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwIDo6CisgICAqICAgICBWZXJzaW9ufjQwIGNvcnJlc3BvbmRzIHRvIE1TIHJhc3Rlcml6ZXIgdi4yLjE7IGl0IGlzIHJvdWdobHkKKyAgICogICAgIGVxdWl2YWxlbnQgdG8gdGhlIGhpbnRpbmcgcHJvdmlkZWQgYnkgRGlyZWN0V3JpdGUgQ2xlYXJUeXBlIChhcyBjYW4KKyAgICogICAgIGJlIGZvdW5kLCBmb3IgZXhhbXBsZSwgaW4gTWljcm9zb2Z0J3MgRWRnZSBCcm93c2VyIG9uIFdpbmRvd3N+MTApLiAKKyAgICogICAgIEl0IGlzIHVzZWQgaW4gRnJlZVR5cGUgdG8gc2VsZWN0IHRoZSBgbWluaW1hbCcgc3VicGl4ZWwgaGludGluZworICAgKiAgICAgY29kZSwgYSBzdHJpcHBlZC1kb3duIGFuZCBoaWdoZXIgcGVyZm9ybWFuY2UgdmVyc2lvbiBvZiB0aGUKKyAgICogICAgIGBJbmZpbmFsaXR5JyBjb2RlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCisgICAqICAgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuICBJdCBkb2VzICpub3QqIGNvbnRyb2wgaG93IGdseXBoCisgICAqICAgZ2V0IHJhc3Rlcml6ZWQhICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCBjb250cm9sIHN1YnBpeGVsIGNvbG9yCisgICAqICAgZmlsdGVyaW5nLgorICAgKgorICAgKiAgIElmIEZyZWVUeXBlIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgorICAgKiAgIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORywgc2VsZWN0aW5nIHZlcnNpb25+Mzggb3J+NDAgY2F1c2VzCisgICAqICAgYW4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGVycm9yLgorICAgKgorICAgKiAgIERlcGVuZGluZyBvbiB0aGUgZ3JhcGhpY3MgZnJhbWV3b3JrLCBNaWNyb3NvZnQgdXNlcyBkaWZmZXJlbnQKKyAgICogICBieXRlY29kZSBhbmQgcmVuZGVyaW5nIGVuZ2luZXMuICBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgdmVyc2lvbgorICAgKiAgIG51bWJlcnMgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHRoZSBgR0VUSU5GTycgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYXJlCisgICAqICAgbW9yZSBjb252b2x1dGVkIHRoYW4gZGVzaXJlZC4KKyAgICoKKyAgICogICBIZXJlIGFyZSB0d28gdGFibGVzIHRoYXQgdHJ5IHRvIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG9zc2libGUKKyAgICogICB2YWx1ZXMgZm9yIHRoZSBNUyByYXN0ZXJpemVyIGVuZ2luZSwgdG9nZXRoZXIgd2l0aCB0aGUgYWRkaXRpb25hbAorICAgKiAgIGZlYXR1cmVzIGludHJvZHVjZWQgYnkgaXQuCisgICAqCisgICAqICAgeworICAgKiAgICAgR0VUSU5GTyBmcmFtZXdvcmsgICAgICAgICAgICAgICB2ZXJzaW9uIGZlYXR1cmUKKyAgICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogICAgICAgICAzICAgR0RJIChXaW4gMy4xKSwgICAgICAgICAgICB2MS4wICAxNi1iaXQsIGZpcnN0IHZlcnNpb24KKyAgICogICAgICAgICAgICAgVHJ1ZUltYWdlCisgICAqICAgICAgICAzMyAgIEdESSAoV2luIE5UIDMuMSksICAgICAgICAgdjEuNSAgMzItYml0CisgICAqICAgICAgICAgICAgIEhQIExhc2VyamV0CisgICAqICAgICAgICAzNCAgIEdESSAoV2luIDk1KSAgICAgICAgICAgICAgdjEuNiAgZm9udCBzbW9vdGhpbmcsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNDQU5UWVBFIG9wY29kZQorICAgKiAgICAgICAgMzUgICBHREkgKFdpbiA5OC8yMDAwKSAgICAgICAgIHYxLjcgIChVTilTQ0FMRURfQ09NUE9ORU5UX09GRlNFVAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyBpbiBjb21wb3NpdGUgZ2x5cGhzCisgICAqICAgICAgICAzNiAgIE1HREkgKFdpbiBDRSAyKSAgICAgICAgICAgdjEuNisgY2xhc3NpYyBDbGVhclR5cGUKKyAgICogICAgICAgIDM3ICAgR0RJIChYUCBhbmQgbGF0ZXIpLCAgICAgICB2MS44ICBDbGVhclR5cGUKKyAgICogICAgICAgICAgICAgR0RJKyBvbGQgKGJlZm9yZSBWaXN0YSkKKyAgICogICAgICAgIDM4ICAgR0RJKyBvbGQgKFZpc3RhLCBXaW4gNyksICB2MS45ICBzdWJwaXhlbCBDbGVhclR5cGUsCisgICAqICAgICAgICAgICAgIFdQRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgZXJyb3IgY2hlY2tpbmcKKyAgICogICAgICAgIDM5ICAgRFdyaXRlIChiZWZvcmUgV2luIDgpICAgICB2Mi4wICBzdWJwaXhlbCBDbGVhclR5cGUgZmxhZ3MKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEdFVElORk8gb3Bjb2RlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZyBmaXhlcworICAgKiAgICAgICAgNDAgICBHREkrIChhZnRlciBXaW4gNyksICAgICAgIHYyLjEgIFktZGlyZWN0aW9uIENsZWFyVHlwZSBmbGFnCisgICAqICAgICAgICAgICAgIERXcml0ZSAoV2luIDgpICAgICAgICAgICAgICAgICAgICBpbiBHRVRJTkZPIG9wY29kZSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmF5IENsZWFyVHlwZQorICAgKiAgIH0KKyAgICoKKyAgICogICBUaGUgYHZlcnNpb24nIGZpZWxkIGdpdmVzIGEgcm91Z2ggb3JpZW50YXRpb24gb25seSwgc2luY2Ugc29tZQorICAgKiAgIGFwcGxpY2F0aW9ucyBwcm92aWRlZCBjZXJ0YWluIGZlYXR1cmVzIG11Y2ggZWFybGllciAoYXMgYW4gZXhhbXBsZSwKKyAgICogICBNaWNyb3NvZnQgUmVhZGVyIHVzZWQgc3VicGl4ZWwgYW5kIFktZGlyZWN0aW9uIENsZWFyVHlwZSBhbHJlYWR5IGluCisgICAqICAgV2luZG93cyAyMDAwKS4gIFNpbWlsYXJseSwgdXBkYXRlcyB0byBhIGdpdmVuIGZyYW1ld29yayBtaWdodCBpbmNsdWRlCisgICAqICAgaW1wcm92ZWQgaGludGluZyBzdXBwb3J0LgorICAgKgorICAgKiAgIHsKKyAgICogICAgICB2ZXJzaW9uICAgc2FtcGxpbmcgICAgICAgICAgcmVuZGVyaW5nICAgICAgICBjb21tZW50CisgICAqICAgICAgICAgICAgICAgeCAgICAgICAgeSAgICAgICB4ICAgICAgICAgICB5CisgICAqICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICAgICB2MS4wICAgbm9ybWFsICBub3JtYWwgIEIvVyAgICAgICAgICAgQi9XICAgIGJpLWxldmVsCisgICAqICAgICAgIHYxLjYgICBoaWdoICAgIGhpZ2ggICAgZ3JheSAgICAgICAgICBncmF5ICAgZ3JheXNjYWxlCisgICAqICAgICAgIHYxLjggICBoaWdoICAgIG5vcm1hbCAgY29sb3ItZmlsdGVyICBCL1cgICAgKEdESSkgQ2xlYXJUeXBlCisgICAqICAgICAgIHYxLjkgICBoaWdoICAgIGhpZ2ggICAgY29sb3ItZmlsdGVyICBncmF5ICAgQ29sb3IgQ2xlYXJUeXBlCisgICAqICAgICAgIHYyLjEgICBoaWdoICAgIG5vcm1hbCAgZ3JheSAgICAgICAgICBCL1cgICAgR3JheSBDbGVhclR5cGUKKyAgICogICAgICAgdjIuMSAgIGhpZ2ggICAgaGlnaCAgICBncmF5ICAgICAgICAgIGdyYXkgICBHcmF5IENsZWFyVHlwZQorICAgKiAgIH0KKyAgICoKKyAgICogICBDb2xvciBhbmQgR3JheSBDbGVhclR5cGUgYXJlIHRoZSB0d28gYXZhaWxhYmxlIHZhcmlhbnRzIG9mCisgICAqICAgYFktZGlyZWN0aW9uIENsZWFyVHlwZScsIG1lYW5pbmcgZ3JheXNjYWxlIHJhc3Rlcml6YXRpb24gYWxvbmcgdGhlCisgICAqICAgWS1kaXJlY3Rpb247IHRoZSBuYW1lIHVzZWQgaW4gdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZm9yIHRoaXMKKyAgICogICBmZWF0dXJlIGlzIGBzeW1tZXRyaWMgc21vb3RoaW5nJy4gIGBDbGFzc2ljIENsZWFyVHlwZScgaXMgdGhlCisgICAqICAgb3JpZ2luYWwgYWxnb3JpdGhtIHVzZWQgYmVmb3JlIGludHJvZHVjaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBpbgorICAgKiAgIFdpbn5YUC4gIEFub3RoZXIgbmFtZSBmb3IgdjEuNidzIGdyYXlzY2FsZSByZW5kZXJpbmcgaXMgYGZvbnQKKyAgICogICBzbW9vdGhpbmcnLCBhbmQgYENvbG9yIENsZWFyVHlwZScgaXMgc29tZXRpbWVzIGFsc28gY2FsbGVkIGBEV3JpdGUKKyAgICogICBDbGVhclR5cGUnLiAgVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRvZGF5J3MgQ29sb3IgQ2xlYXJUeXBlIGFuZCB0aGUKKyAgICogICBlYXJsaWVyIENsZWFyVHlwZSB2YXJpYW50IHdpdGggQi9XIHJlbmRlcmluZyBhbG9uZyB0aGUgdmVydGljYWwgYXhpcywKKyAgICogICB0aGUgbGF0dGVyIGlzIHNvbWV0aW1lcyBjYWxsZWQgYEdESSBDbGVhclR5cGUnLgorICAgKgorICAgKiAgIGBOb3JtYWwnIGFuZCBgaGlnaCcgc2FtcGxpbmcgZGVzY3JpYmUgdGhlICh2aXJ0dWFsKSByZXNvbHV0aW9uIHRvCisgICAqICAgYWNjZXNzIHRoZSByYXN0ZXJpemVkIG91dGxpbmUgYWZ0ZXIgdGhlIGhpbnRpbmcgcHJvY2Vzcy4gIGBOb3JtYWwnCisgICAqICAgbWVhbnMgMSBzYW1wbGUgcGVyIGdyaWQgbGluZSAoaS5lLiwgQi9XKS4gIEluIHRoZSBjdXJyZW50IE1pY3Jvc29mdAorICAgKiAgIGltcGxlbWVudGF0aW9uLCBgaGlnaCcgbWVhbnMgYW4gZXh0cmEgdmlydHVhbCByZXNvbHV0aW9uIG9mIDE2eDE2IChvcgorICAgKiAgIDE2eDEpIGdyaWQgbGluZXMgcGVyIHBpeGVsIGZvciBieXRlY29kZSBpbnN0cnVjdGlvbnMgbGlrZSBgTUlSUCcuCisgICAqICAgQWZ0ZXIgaGludGluZywgdGhlc2UgMTYgZ3JpZCBsaW5lcyBhcmUgbWFwcGVkIHRvIDZ4NSAob3IgNngxKSBncmlkCisgICAqICAgbGluZXMgZm9yIGNvbG9yIGZpbHRlcmluZyBpZiBDb2xvciBDbGVhclR5cGUgaXMgYWN0aXZhdGVkLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBgR3JheSBDbGVhclR5cGUnIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHYxLjYncworICAgKiAgIGdyYXlzY2FsZSByZW5kZXJpbmcuICBIb3dldmVyLCB0aGUgR0VUSU5GTyBpbnN0cnVjdGlvbiBoYW5kbGVzIGl0CisgICAqICAgZGlmZmVyZW50bHk6IHYxLjYgcmV0dXJucyBiaXR+MTIgKGhpbnRpbmcgZm9yIGdyYXlzY2FsZSksIHdoaWxlIHYyLjEKKyAgICogICByZXR1cm5zIGJpdHN+MTMgKGhpbnRpbmcgZm9yIENsZWFyVHlwZSksIDE4IChzeW1tZXRyaWNhbCBzbW9vdGhpbmcpLAorICAgKiAgIGFuZH4xOSAoR3JheSBDbGVhclR5cGUpLiAgQWxzbywgdGhpcyBtb2RlIHJlc3BlY3RzIGJpdHMgMiBhbmR+MyBmb3IKKyAgICogICB0aGUgdmVyc2lvbn4xIGdhc3AgdGFibGUgZXhjbHVzaXZlbHkgKGxpa2UgQ29sb3IgQ2xlYXJUeXBlKSwgd2hpbGUKKyAgICogICB2MS42IG9ubHkgcmVzcGVjdHMgdGhlIHZhbHVlcyBvZiB2ZXJzaW9ufjAgKGJpdHMgMCBhbmR+MSkuCisgICAqCisgICAqICAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZlYXR1cmVzIG9mIHRoZSBhYm92ZSBpbnRlcnByZXRlciB2ZXJzaW9ucworICAgKiAgIG1pZ2h0IG5vdCBtYXAgZXhhY3RseSB0byBGcmVlVHlwZSBmZWF0dXJlcyBvciBiZWhhdmlvciBiZWNhdXNlIGl0IGlzCisgICAqICAgYSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBsaWJyYXJ5IHdpdGggZGlmZmVyZW50IGludGVybmFscy4KKyAgICoKKyAgICovCisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgIDM1CisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggIDM4CisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgIDQwCisKKyAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogRlRUVERSVl9IXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdHR5cGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0dHlwZXMuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKaW5kZXggNzA2YTFiZS4uMjY3M2U3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdHR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc2ltcGxlIHR5cGVzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUVFlQRVNfSF9fCi0jZGVmaW5lIF9fRlRUWVBFU19IX18KKyNpZm5kZWYgRlRUWVBFU19IXworI2RlZmluZSBGVFRZUEVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01OTYsNyArNTk2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFRZUEVTX0hfXyAqLworI2VuZGlmIC8qIEZUVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnR3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2Z0d2luZm50LmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaAppbmRleCBjYWVkYWExLi5hMWE3MTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgZm50LXNwZWNpZmljIGRhdGEuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFdJTkZOVF9IX18KLSNkZWZpbmUgX19GVFdJTkZOVF9IX18KKyNpZm5kZWYgRlRXSU5GTlRfSF8KKyNkZWZpbmUgRlRXSU5GTlRfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0yNjQsNyArMjY0LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFdJTkZOVF9IX18gKi8KKyNlbmRpZiAvKiBGVFdJTkZOVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9hdXRvaGludC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvYXV0b2hpbnQuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCmluZGV4IDhkNWE5NzcuLjdlZjgyYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvYXV0b2hpbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBgYXV0b2hpbnQnIG1vZHVsZS1zcGVjaWZpYyBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI0LDggKzI0LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FVVE9ISU5UX0hfXwotI2RlZmluZSBfX0FVVE9ISU5UX0hfXworI2lmbmRlZiBBVVRPSElOVF9IXworI2RlZmluZSBBVVRPSElOVF9IXwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BVVRPSElOVF9IX18gKi8KKyNlbmRpZiAvKiBBVVRPSElOVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9mdGNhbGMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9mdGNhbGMuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaAppbmRleCA3NTc1MmMzLi44YTg4NGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQ0FMQ19IX18KLSNkZWZpbmUgX19GVENBTENfSF9fCisjaWZuZGVmIEZUQ0FMQ19IXworI2RlZmluZSBGVENBTENfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgRlRfTXVsRml4X2FybSggRlRfSW50MzIgIGEsCiAgICAgICAgICAgICAgICAgIEZUX0ludDMyICBiICkKICAgewotICAgIHJlZ2lzdGVyIEZUX0ludDMyICB0LCB0MjsKKyAgICBGVF9JbnQzMiAgdCwgdDI7CiAKIAogICAgIF9fYXNtCkBAIC04MCw3ICs4MCw3IEBACiAgIEZUX011bEZpeF9hcm0oIEZUX0ludDMyICBhLAogICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgYiApCiAgIHsKLSAgICByZWdpc3RlciBGVF9JbnQzMiAgdCwgdDI7CisgICAgRlRfSW50MzIgIHQsIHQyOwogCiAKICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgRlRfTXVsRml4X2kzODYoIEZUX0ludDMyICBhLAogICAgICAgICAgICAgICAgICAgRlRfSW50MzIgIGIgKQogICB7Ci0gICAgcmVnaXN0ZXIgRlRfSW50MzIgIHJlc3VsdDsKKyAgICBGVF9JbnQzMiAgcmVzdWx0OwogCiAKICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCkBAIC0xNTIsNyArMTUyLDcgQEAKICAgRlRfTXVsRml4X2kzODYoIEZUX0ludDMyICBhLAogICAgICAgICAgICAgICAgICAgRlRfSW50MzIgIGIgKQogICB7Ci0gICAgcmVnaXN0ZXIgRlRfSW50MzIgIHJlc3VsdDsKKyAgICBGVF9JbnQzMiAgcmVzdWx0OwogCiAgICAgX19hc20KICAgICB7CkBAIC0zMDAsNiArMzAwLDE4IEBACiAKIAogICAvKgorICAgKiAgVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIGEgdmVjdG9yIGFuZCByZXR1cm5zIGl0cyBvcmlnaW5hbCBsZW5ndGguCisgICAqICBUaGUgbm9ybWFsaXplZCB2ZWN0b3IgaXMgYSAxNi4xNiBmaXhlZC1wb2ludCB1bml0IHZlY3RvciB3aXRoIGxlbmd0aAorICAgKiAgY2xvc2UgdG8gMHgxMDAwMC4gIFRoZSBhY2N1cmFjeSBvZiB0aGUgcmV0dXJuZWQgbGVuZ3RoIGlzIGxpbWl0ZWQgdG8KKyAgICogIDE2IGJpdHMgYWxzby4gIFRoZSBmdW5jdGlvbiB1dGlsaXplcyBxdWljayBpbnZlcnNlIHNxdWFyZSByb290CisgICAqICBhcHByb3hpbWF0aW9uIHdpdGhvdXQgZGl2aXNpb25zIGFuZCBzcXVhcmUgcm9vdHMgcmVseWluZyBvbiBOZXd0b24ncworICAgKiAgaXRlcmF0aW9ucyBpbnN0ZWFkLgorICAgKi8KKyAgRlRfQkFTRSggRlRfVUludDMyICkKKyAgRlRfVmVjdG9yX05vcm1MZW4oIEZUX1ZlY3RvciogIHZlY3RvciApOworCisKKyAgLyoKICAgICogIFJldHVybiAtMSwgMCwgb3IgKzEsIGRlcGVuZGluZyBvbiB0aGUgb3JpZW50YXRpb24gb2YgYSBnaXZlbiBjb3JuZXIuCiAgICAqICBXZSB1c2UgdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbSwgd2l0aCBwb3NpdGl2ZSB2ZXJ0aWNhbCB2YWx1ZXMKICAgICogIGdvaW5nIHVwd2FyZHMuICBUaGUgZnVuY3Rpb24gcmV0dXJucyArMSBpZiB0aGUgY29ybmVyIHR1cm5zIHRvIHRoZQpAQCAtNDAwLDcgKzQxMiw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRDQUxDX0hfXyAqLworI2VuZGlmIC8qIEZUQ0FMQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9mdGRlYnVnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL2Z0ZGVidWcuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmgKaW5kZXggMjE2YzczMC4uZDExMDQ1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9mdGRlYnVnLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxLDggKzIxLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUREVCVUdfSF9fCi0jZGVmaW5lIF9fRlRERUJVR19IX18KKyNpZm5kZWYgRlRERUJVR19IXworI2RlZmluZSBGVERFQlVHX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNDksNyArMjQ5LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVERFQlVHX0hfXyAqLworI2VuZGlmIC8qIEZUREVCVUdfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvZnRkcml2ZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL2Z0ZHJpdmVyLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaAppbmRleCAxNjg1NmQzLi45MDJmMDJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2Z0ZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVERSSVZFUl9IX18KLSNkZWZpbmUgX19GVERSSVZFUl9IX18KKyNpZm5kZWYgRlREUklWRVJfSF8KKyNkZWZpbmUgRlREUklWRVJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTY3LDE1ICs2Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApOwogCiAKLSAgdHlwZWRlZiBGVF9VSW50Ci0gICgqRlRfQ2hhck1hcF9DaGFySW5kZXhGdW5jKSggRlRfQ2hhck1hcCAgY2hhcm1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBjaGFyY29kZSApOwotCi0gIHR5cGVkZWYgRlRfTG9uZwotICAoKkZUX0NoYXJNYXBfQ2hhck5leHRGdW5jKSggRlRfQ2hhck1hcCAgY2hhcm1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIGNoYXJjb2RlICk7Ci0KLQogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqRlRfRmFjZV9HZXRLZXJuaW5nRnVuYykoIEZUX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCkBAIC0yMTMsNyArMjA0LDcgQEAKICAgLyogICAgQW5kIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhIGBkZXN0cm95JyBmdW5jdGlvbiBuZWVkcyB0byBiZSAgICovCiAgIC8qICAgIGNhbGxlZCB0byByZWxlYXNlIHRoYXQgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYGZjaW5pdC5jJyAoZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMpIGFscmVhZHkgY29udGFpbnMgYSAgICovCisgIC8qICAgIGBmdGluaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zIGEgICAqLwogICAvKiAgICBtZWNoYW5pc20gdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgZm9yIHRoZSBkZWZhdWx0IG1vZHVsZXMgICAgICAgICAgKi8KICAgLyogICAgZGVzY3JpYmVkIGluIGBmdG1vZHVsZS5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDAzLDcgKzM5NCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlREUklWRVJfSF9fICovCisjZW5kaWYgLyogRlREUklWRVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvZnRnbG9hZHIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaApzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL2Z0Z2xvYWRyLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaAppbmRleCA5NzBkZDcwLi5iZWJmNWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2Z0Z2xvYWRyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdMT0FEUl9IX18KLSNkZWZpbmUgX19GVEdMT0FEUl9IX18KKyNpZm5kZWYgRlRHTE9BRFJfSF8KKyNkZWZpbmUgRlRHTE9BRFJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM2LDI0ICszNiw2IEBACiAgIC8qICAgIFRoZSBnbHlwaCBsb2FkZXIgaXMgYW4gaW50ZXJuYWwgb2JqZWN0IHVzZWQgdG8gbG9hZCBzZXZlcmFsIGdseXBocyAqLwogICAvKiAgICB0b2dldGhlciAoZm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIGNvbXBvc2l0ZXMpLiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZ2x5cGggbG9hZGVyIGltcGxlbWVudGF0aW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSBoaWdoLWxldmVsIEFQSSwgKi8KLSAgLyogICAgaGVuY2UgdGhlIGZvcndhcmQgc3RydWN0dXJlIGRlY2xhcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHN0cnVjdCBGVF9HbHlwaExvYWRlclJlY18qICBGVF9HbHlwaExvYWRlciA7Ci0KLQotI2lmIDAgIC8qIG1vdmVkIHRvIGZyZWV0eXBlLmggaW4gdmVyc2lvbiAyLjIgKi8KLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9XT1JEUyAgICAgICAgICAxCi0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTICAgICAgMgotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1JPVU5EX1hZX1RPX0dSSUQgICAgICAgIDQKLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19TQ0FMRSAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfWFlfU0NBTEUgICAgICAgICAgICAgMHg0MAotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHXzJYMiAgICAgICAgICAgICAgICAgIDB4ODAKLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19VU0VfTVlfTUVUUklDUyAgICAgIDB4MjAwCi0jZW5kaWYKLQotCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9TdWJHbHlwaFJlY18KICAgewogICAgIEZUX0ludCAgICAgaW5kZXg7CkBAIC04OSw3ICs3MSw3IEBACiAKICAgICB2b2lkKiAgICAgICAgICAgIG90aGVyOyAgICAgICAgICAgIC8qIGZvciBwb3NzaWJsZSBmdXR1cmUgZXh0ZW5zaW9uPyAqLwogCi0gIH0gRlRfR2x5cGhMb2FkZXJSZWM7CisgIH0gRlRfR2x5cGhMb2FkZXJSZWMsICpGVF9HbHlwaExvYWRlcjsKIAogCiAgIC8qIGNyZWF0ZSBuZXcgZW1wdHkgZ2x5cGggbG9hZGVyICovCkBAIC0xNjYsNyArMTQ4LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEdMT0FEUl9IX18gKi8KKyNlbmRpZiAvKiBGVEdMT0FEUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyZjlkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0aGFzaC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIYXNoaW5nIGZ1bmN0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMCBDb21wdXRpbmcgUmVzZWFyY2ggTGFicywgTmV3IE1leGljbyBTdGF0ZSBVbml2ZXJzaXR5CisgKiBDb3B5cmlnaHQgMjAwMS0yMDE1CisgKiAgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPTVBVVElORyBSRVNFQVJDSCBMQUIgT1IgTkVXIE1FWElDTyBTVEFURSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUCisgKiBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBiZGYuYyx2IDEuMjIgMjAwMC8wMy8xNiAyMDowODo1MCAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICB0YWtlbiBmcm9tIE1hcmsgTGVpc2hlcidzIHhtYmRmZWQgcGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBGVEhBU0hfSF8KKyNkZWZpbmUgRlRIQVNIX0hfCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICB0eXBlZGVmIHVuaW9uICBGVF9IYXNoa2V5XworICB7CisgICAgRlRfSW50ICAgICAgIG51bTsKKyAgICBjb25zdCBjaGFyKiAgc3RyOworCisgIH0gRlRfSGFzaGtleTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGVF9IYXNobm9kZVJlY18KKyAgeworICAgIEZUX0hhc2hrZXkgIGtleTsKKyAgICBzaXplX3QgICAgICBkYXRhOworCisgIH0gRlRfSGFzaG5vZGVSZWM7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfSGFzaG5vZGVSZWNfICAqRlRfSGFzaG5vZGU7CisKKworICB0eXBlZGVmIEZUX1VMb25nCisgICgqRlRfSGFzaF9Mb29rdXBGdW5jKSggRlRfSGFzaGtleSogIGtleSApOworCisgIHR5cGVkZWYgRlRfQm9vbAorICAoKkZUX0hhc2hfQ29tcGFyZUZ1bmMpKCBGVF9IYXNoa2V5KiAgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaGtleSogIGIgKTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGVF9IYXNoUmVjXworICB7CisgICAgRlRfVUludCAgbGltaXQ7CisgICAgRlRfVUludCAgc2l6ZTsKKyAgICBGVF9VSW50ICB1c2VkOworCisgICAgRlRfSGFzaF9Mb29rdXBGdW5jICAgbG9va3VwOworICAgIEZUX0hhc2hfQ29tcGFyZUZ1bmMgIGNvbXBhcmU7CisKKyAgICBGVF9IYXNobm9kZSogIHRhYmxlOworCisgIH0gRlRfSGFzaFJlYzsKKworICB0eXBlZGVmIHN0cnVjdCBGVF9IYXNoUmVjXyAgKkZUX0hhc2g7CisKKworICBGVF9FcnJvcgorICBmdF9oYXNoX3N0cl9pbml0KCBGVF9IYXNoICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICk7CisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9udW1faW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIHZvaWQKKyAgZnRfaGFzaF9zdHJfZnJlZSggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisjZGVmaW5lIGZ0X2hhc2hfbnVtX2ZyZWUgIGZ0X2hhc2hfc3RyX2ZyZWUKKworICBGVF9FcnJvcgorICBmdF9oYXNoX3N0cl9pbnNlcnQoIGNvbnN0IGNoYXIqICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaCAgICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSApOworCisgIEZUX0Vycm9yCisgIGZ0X2hhc2hfbnVtX2luc2VydCggRlRfSW50ICAgICBudW0sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIHNpemVfdCoKKyAgZnRfaGFzaF9zdHJfbG9va3VwKCBjb25zdCBjaGFyKiAga2V5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgICBoYXNoICk7CisKKyAgc2l6ZV90KgorICBmdF9oYXNoX251bV9sb29rdXAoIEZUX0ludCAgIG51bSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9IYXNoICBoYXNoICk7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBGVEhBU0hfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvZnRtZW1vcnkuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL2Z0bWVtb3J5LmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaAppbmRleCBjMGM1NTNiLi5mYzMzYjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2Z0bWVtb3J5LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBtZW1vcnkgbWFuYWdlbWVudCBtYWNyb3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE1FTU9SWV9IX18KLSNkZWZpbmUgX19GVE1FTU9SWV9IX18KKyNpZm5kZWYgRlRNRU1PUllfSF8KKyNkZWZpbmUgRlRNRU1PUllfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTY1LDEzICs2NSwxNSBAQAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIAotICBleHRlcm4gIkMrKyIKK2V4dGVybiAiQysrIgorewogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqCiAgIGNwbHVzcGx1c190eXBlb2YoICAgICAgICBUKiwKICAgICAgICAgICAgICAgICAgICAgdm9pZCAgKnYgKQogICB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0IDxUKj4gKCB2ICk7CiAgIH0KK30KIAogI2RlZmluZSBGVF9BU1NJR05QKCBwLCB2YWwgKSAgKHApID0gY3BsdXNwbHVzX3R5cGVvZiggKHApLCAodmFsKSApCiAKQEAgLTEwNiwxMCArMTA4LDEyIEBACiAKICAgLyoKICAgICogIFRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyLCBhbmQgdGhlIGVycm9yIGNvZGUKLSAgICogIGlzIHdyaXR0ZW4gdG8gdGhyb3VnaCB0aGUgYHBfZXJyb3InIHBhcmFtZXRlci4gIFNlZSBiZWxvdyBmb3IKLSAgICogIGZvciBkb2N1bWVudGF0aW9uLgorICAgKiAgaXMgd3JpdHRlbiB0byB0aHJvdWdoIHRoZSBgcF9lcnJvcicgcGFyYW1ldGVyLgogICAgKi8KIAorICAvKiBUaGUgYHEnIHZhcmlhbnRzIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgKGBxJyBmb3IgYHF1aWNrJykgZG9uJ3QgZmlsbCAqLworICAvKiB0aGUgYWxsb2NhdGVkIG9yIHJlYWxsb2NhdGVkIG1lbW9yeSB3aXRoIHplcm8gYnl0ZXMuICAgICAgICAgICAgICAgICAqLworCiAgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQogICBmdF9tZW1fYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAogICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgc2l6ZSwKQEAgLTE0MSw2ICsxNDUsOSBAQAogICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIFAgKTsKIAogCisgIC8qIFRoZSBgUScgdmFyaWFudHMgb2YgdGhlIG1hY3JvcyBiZWxvdyAoYFEnIGZvciBgcXVpY2snKSBkb24ndCBmaWxsICovCisgIC8qIHRoZSBhbGxvY2F0ZWQgb3IgcmVhbGxvY2F0ZWQgbWVtb3J5IHdpdGggemVybyBieXRlcy4gICAgICAgICAgICAgICovCisKICNkZWZpbmUgRlRfTUVNX0FMTE9DKCBwdHIsIHNpemUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fYWxsb2MoIG1lbW9yeSwgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoc2l6ZSksIFwKQEAgLTM4MCw3ICszODcsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUTUVNT1JZX0hfXyAqLworI2VuZGlmIC8qIEZUTUVNT1JZX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oCmluZGV4IDM3MzE3YTQuLjBhOWYyZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcHJpdmF0ZSBiYXNlIGNsYXNzZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsOCArMjMsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRPQkpTX0hfXwotI2RlZmluZSBfX0ZUT0JKU19IX18KKyNpZm5kZWYgRlRPQkpTX0hfCisjZGVmaW5lIEZUT0JKU19IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX1JFTkRFUl9ICkBAIC04MywxMiArODMsMTIgQEAKICAgICAgICAgICAgIHggPiB5ID8geCArICggMyAqIHkgPj4gMyApICAgXAogICAgICAgICAgICAgICAgICAgOiB5ICsgKCAzICogeCA+PiAzICkgKQogCi0gIC8qIHdlIHVzZSB0aGUgVFlQRU9GIG1hY3JvIHRvIHN1cHByZXNzIHNpZ25lZG5lc3MgY29tcGlsYXRpb24gd2FybmluZ3MgKi8KLSNkZWZpbmUgRlRfUEFEX0ZMT09SKCB4LCBuICkgICggKHgpICYgflRZUEVPRiggeCApKCAobiktMSApICkKKyAgLyogd2UgdXNlIEZUX1RZUEVPRiB0byBzdXBwcmVzcyBzaWduZWRuZXNzIGNvbXBpbGF0aW9uIHdhcm5pbmdzICovCisjZGVmaW5lIEZUX1BBRF9GTE9PUiggeCwgbiApICAoICh4KSAmIH5GVF9UWVBFT0YoIHggKSggKG4pLTEgKSApCiAjZGVmaW5lIEZUX1BBRF9ST1VORCggeCwgbiApICBGVF9QQURfRkxPT1IoICh4KSArICgobikvMiksIG4gKQogI2RlZmluZSBGVF9QQURfQ0VJTCggeCwgbiApICAgRlRfUEFEX0ZMT09SKCAoeCkgKyAoKG4pLTEpLCBuICkKIAotI2RlZmluZSBGVF9QSVhfRkxPT1IoIHggKSAgICAgKCAoeCkgJiB+VFlQRU9GKCB4ICk2MyApCisjZGVmaW5lIEZUX1BJWF9GTE9PUiggeCApICAgICAoICh4KSAmIH5GVF9UWVBFT0YoIHggKTYzICkKICNkZWZpbmUgRlRfUElYX1JPVU5EKCB4ICkgICAgIEZUX1BJWF9GTE9PUiggKHgpICsgMzIgKQogI2RlZmluZSBGVF9QSVhfQ0VJTCggeCApICAgICAgRlRfUElYX0ZMT09SKCAoeCkgKyA2MyApCiAKQEAgLTM0MSwxMiArMzQxLDYgQEAKICAgLyogICAgICB0aGlzIGRhdGEgd2hlbiBmaXJzdCBvcGVuZWQuICBUaGlzIGZpZWxkIGV4aXN0cyBvbmx5IGlmICAgICAgICAgICovCiAgIC8qICAgICAgQEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgaXMgZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaWdub3JlX3VucGF0ZW50ZWRfaGludGVyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhpcyBib29sZWFuIGZsYWcgaW5zdHJ1Y3RzIHRoZSBnbHlwaCBsb2FkZXIgdG8gaWdub3JlIHRoZSAgICAgICAqLwotICAvKiAgICAgIG5hdGl2ZSBmb250IGhpbnRlciwgaWYgb25lIGlzIGZvdW5kLiAgVGhpcyBpcyBleGNsdXNpdmVseSB1c2VkICAgKi8KLSAgLyogICAgICBpbiB0aGUgY2FzZSB3aGVuIHRoZSB1bnBhdGVudGVkIGhpbnRlciBpcyBjb21waWxlZCB3aXRoaW4gdGhlICAgICovCi0gIC8qICAgICAgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcmVmY291bnQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgQSBjb3VudGVyIGluaXRpYWxpemVkIHRvfjEgYXQgdGhlIHRpbWUgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGlzICAqLwogICAvKiAgICAgIGNyZWF0ZWQuICBARlRfUmVmZXJlbmNlX0ZhY2UgaW5jcmVtZW50cyB0aGlzIGNvdW50ZXIsIGFuZCAgICAgICAgKi8KQEAgLTM2NSw3ICszNTksNiBAQAogICAgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyogIGluY3JlbWVudGFsX2ludGVyZmFjZTsKICNlbmRpZgogCi0gICAgRlRfQm9vbCAgICAgICAgICAgICBpZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXI7CiAgICAgRlRfSW50ICAgICAgICAgICAgICByZWZjb3VudDsKIAogICB9IEZUX0ZhY2VfSW50ZXJuYWxSZWM7CkBAIC01MDYsNiArNDk5LDkgQEAKICNkZWZpbmUgRlRfRFJJVkVSX0hBU19ISU5URVIoIHggKSAgKCBGVF9NT0RVTEVfQ0xBU1MoIHggKS0+bW9kdWxlX2ZsYWdzICYgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9EUklWRVJfSEFTX0hJTlRFUiApCiAKKyNkZWZpbmUgRlRfRFJJVkVSX0hJTlRTX0xJR0hUTFkoIHggKSAgKCBGVF9NT0RVTEVfQ0xBU1MoIHggKS0+bW9kdWxlX2ZsYWdzICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9EUklWRVJfSElOVFNfTElHSFRMWSApCisKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01MzYsNiArNTMyLDE0IEBACiAgIGZ0X21vZHVsZV9nZXRfc2VydmljZSggRlRfTW9kdWxlICAgIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgc2VydmljZV9pZCApOwogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgZnRfcHJvcGVydHlfc3RyaW5nX3NldCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyogICAgICAgIHZhbHVlICk7CisjZW5kaWYKKwogICAvKiAqLwogCiAKQEAgLTc3MiwxMyArNzc2LDYgQEAKICNkZWZpbmUgRlRfREVCVUdfSE9PS19UUlVFVFlQRSAgICAgICAgICAgIDAKIAogCi0gIC8qIFNldCB0aGlzIGRlYnVnIGhvb2sgdG8gYSBub24tbnVsbCBwb2ludGVyIHRvIGZvcmNlIHVucGF0ZW50ZWQgaGludGluZyAqLwotICAvKiBmb3IgYWxsIGZhY2VzIHdoZW4gYm90aCBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgYW5kICAgICAgICAgICAgICAgKi8KLSAgLyogVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgYXJlIGRlZmluZWQuICBUaGlzIGlzIG9ubHkgdXNlZCAgICovCi0gIC8qIGR1cmluZyBkZWJ1Z2dpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9ERUJVR19IT09LX1VOUEFURU5URURfSElOVElORyAgMQotCi0KICAgdHlwZWRlZiB2b2lkICAoKkZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jKSggRlRfQml0bWFwKiAgICAgIGJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSApOwpAQCAtODQ0LDcgKzg0MSw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcGljX2NvbnRhaW5lciAgICA6OiBDb250YWlucyBnbG9iYWwgc3RydWN0cyBhbmQgdGFibGVzLCBpbnN0ZWFkICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGVmaW5pbmcgdGhlbSBnbG9iYWxsbHkuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIG9mIGRlZmluaW5nIHRoZW0gZ2xvYmFsbHkuICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHJlZmNvdW50ICAgICAgICAgOjogQSBjb3VudGVyIGluaXRpYWxpemVkIHRvfjEgYXQgdGhlIHRpbWUgYW4gICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9MaWJyYXJ5IHN0cnVjdHVyZSBpcyBjcmVhdGVkLiAgICAgICAgICAgICAgKi8KQEAgLTk4Miw4ICs5NzksOCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9PdXRsaW5lX0Z1bmNzIHN0cnVjdC4gICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW50aW9uIHdpbGwgbmVlZCB0byAgKi8KLSAgLyogICAgYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhbiBpbml0IGZ1bmN0aW9uIHdpbGwgbmVlZCAgICAqLworICAvKiAgICB0byBiZSBjYWxsZWQgd2l0aCBhIHByZS1hbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gICAgICAgICAgKi8KICAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBub3QgZGVmaW5lZCB0aGUgc3RydWN0IHdpbGwgYmUgICAgICAgICovCiAgIC8qICAgIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUgd2hlcmUgdGhlIG1hY3JvICAgICAgICAqLwogICAvKiAgICBpcyB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNDEsOCArMTAzOCw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIEZUX1Jhc3Rlcl9GdW5jcyBzdHJ1Y3QuICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhbiBpbml0IGZ1bnRpb24gd2lsbCBuZWVkIHRvICAqLwotICAvKiAgICBiZSBjYWxsZWQgd2l0aCBhIHByZS1hbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGFuIGluaXQgZnVuY3Rpb24gd2lsbCBuZWVkICAgICovCisgIC8qICAgIHRvIGJlIGNhbGxlZCB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkLiAgICAgICAgICAqLwogICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIG5vdCBkZWZpbmVkIHRoZSBzdHJ1Y3Qgd2lsbCBiZSAgICAgICAgKi8KICAgLyogICAgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZSB3aGVyZSB0aGUgbWFjcm8gICAgICAgICovCiAgIC8qICAgIGlzIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTEwMSw4ICsxMDk4LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgRlRfR2x5cGhfQ2xhc3Mgc3RydWN0LiAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGFuIGluaXQgZnVudGlvbiB3aWxsIG5lZWQgdG8gICovCi0gIC8qICAgIGJlIGNhbGxlZCB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdGN0dXJlIHRvIGJlIGZpbGxlZC4gICAgICAgICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW5jdGlvbiB3aWxsIG5lZWQgICAgKi8KKyAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICovCiAgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLwogICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KICAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTc1LDExICsxMTcyLDExIEBACiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgRlRfUmVuZGVyZXJfQ2xhc3Mgc3RydWN0LiAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhIGBjcmVhdGUnIGZ1bnRpb24gd2lsbCBuZWVkICAqLwotICAvKiAgICB0byBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgd2hlcmUgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgaXMgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGEgYGNyZWF0ZScgZnVuY3Rpb24gd2lsbCAgICAgICovCisgIC8qICAgIG5lZWQgdG8gYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzICAqLwogICAvKiAgICByZXR1cm5lZC4gIEFuZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYSBgZGVzdHJveScgZnVuY3Rpb24gICAgKi8KICAgLyogICAgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIHJlbGVhc2UgdGhhdCBhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBmY2luaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zICAgICAqLworICAvKiAgICBgZnRpbml0LmMnIChmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcykgYWxyZWFkeSBjb250YWlucyAgICAgKi8KICAgLyogICAgYSBtZWNoYW5pc20gdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgZm9yIHRoZSBkZWZhdWx0IG1vZHVsZXMgICAgICAgICovCiAgIC8qICAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzNzksMTEgKzEzNzYsMTEgQEAKICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBhbiBGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0LiAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGEgYGNyZWF0ZScgZnVudGlvbiBuZWVkcyB0byAgICovCi0gIC8qICAgIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB3aGVyZSB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBpcyAgICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYSBgY3JlYXRlJyBmdW5jdGlvbiBuZWVkcyAgICAgKi8KKyAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzICAgICAgICovCiAgIC8qICAgIHJldHVybmVkLiAgQW5kIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhIGBkZXN0cm95JyBmdW5jdGlvbiAgICAqLwogICAvKiAgICBuZWVkcyB0byBiZSBjYWxsZWQgdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYGZjaW5pdC5jJyAoZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMpIGFscmVhZHkgY29udGFpbnMgICAgICovCisgIC8qICAgIGBmdGluaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zICAgICAqLwogICAvKiAgICBhIG1lY2hhbmlzbSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbW9kdWxlcyAgICAgICAgKi8KICAgLyogICAgZGVzY3JpYmVkIGluIGBmdG1vZHVsZS5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTU2NSw3ICsxNTYyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVE9CSlNfSF9fICovCisjZW5kaWYgLyogRlRPQkpTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2Z0cGljLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9mdHBpYy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmgKaW5kZXggN2Y5MTU0Zi4uNmQ4MDBhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9mdHBpYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyAoZGVjbGFyYXRpb24pLiAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsOCArMjMsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRQSUNfSF9fCi0jZGVmaW5lIF9fRlRQSUNfSF9fCisjaWZuZGVmIEZUUElDX0hfCisjZGVmaW5lIEZUUElDX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC02NSw3ICs2NSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRQSUNfSF9fICovCisjZW5kaWYgLyogRlRQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvZnRyZm9yay5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9mdHJmb3JrLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oCmluZGV4IGRhNjFjYTcuLmI5MjM0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvZnRyZm9yay5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEVtYmVkZGVkIHJlc291cmNlIGZvcmtzIGFjY2Vzc29yIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMSw4ICsyMSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFJGT1JLX0hfXwotI2RlZmluZSBfX0ZUUkZPUktfSF9fCisjaWZuZGVmIEZUUkZPUktfSF8KKyNkZWZpbmUgRlRSRk9SS19IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjI3LDcgKzIyNyw3IEBACiAgIC8qICAgIHNvcnRfYnlfcmVzX2lkIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEEgQm9vbGVhbiB0byBzb3J0IHRoZSBmcmFnbWVudGVkIHJlc291cmNlIGJ5IHRoZWlyIGlkcy4gICAgICAgICAgKi8KICAgLyogICAgICBUaGUgZnJhZ21lbnRlZCByZXNvdXJjZXMgZm9yIGBQT1NUJyByZXNvdXJjZSBzaG91bGQgYmUgc29ydGVkICAgICovCi0gIC8qICAgICAgdG8gcmVzdG9yZSBUeXBlMSBmb250IHByb3Blcmx5LiAgRm9yIGBzbmZ0JyByZXNvdXJjZXMsIHNvcnRpbmcgICAqLworICAvKiAgICAgIHRvIHJlc3RvcmUgVHlwZTEgZm9udCBwcm9wZXJseS4gIEZvciBgc2ZudCcgcmVzb3VyY2VzLCBzb3J0aW5nICAgKi8KICAgLyogICAgICBtYXkgaW5kdWNlIGEgZGlmZmVyZW50IG9yZGVyIG9mIHRoZSBmYWNlcyBpbiBjb21wYXJpc29uIHRvIHRoYXQgICovCiAgIC8qICAgICAgYnkgUXVpY2tEcmF3IEFQSS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI2MCw3ICsyNjAsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUUkZPUktfSF9fICovCisjZW5kaWYgLyogRlRSRk9SS19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9mdHNlcnYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9mdHNlcnYuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaAppbmRleCA4ZjgzN2U0Li45MTg5NzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2Z0c2Vydi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI4LDggKzI4LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU0VSVl9IX18KLSNkZWZpbmUgX19GVFNFUlZfSF9fCisjaWZuZGVmIEZUU0VSVl9IXworI2RlZmluZSBGVFNFUlZfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTczNCwzMCArNzM0LDMwIEBACiAgICAqICBUaGUgaGVhZGVyIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNlcnZpY2VzLgogICAgKi8KIAotI2RlZmluZSBGVF9TRVJWSUNFX0JERl9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0NJRF9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSCAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0dYX1ZBTElEQVRFX0ggICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfS0VSTklOR19IICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oPgotI2RlZmluZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSCAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QRlJfSCAgICAgICAgICAgICAgICA8aW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0ggICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSCAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSCAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0ggICAgICAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfU0ZOVF9IICAgICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0VOR0lORV9IICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfVFRfQ01BUF9IICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfV0lORk5UX0ggICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2d2luZm50Lmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSCAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10Lmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfR0xZRl9IICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfQkRGX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfQ0lEX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9IICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSCAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9LRVJOSU5HX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19IICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9PUEVOVFlQRV9WQUxJREFURV9IICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BGUl9IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSCAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSCAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9TRk5UX0ggICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50Lmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfRU5HSU5FX0ggICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9UVF9DTUFQX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9XSU5GTlRfSCAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9IICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaD4KIAogIC8qICovCiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRTRVJWX0hfXyAqLworI2VuZGlmIC8qIEZUU0VSVl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9mdHN0cmVhbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvZnRzdHJlYW0uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCmluZGV4IDM4NGU1ZGYuLjZkMDQ4NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvZnRzdHJlYW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU3RyZWFtIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU1RSRUFNX0hfXwotI2RlZmluZSBfX0ZUU1RSRUFNX0hfXworI2lmbmRlZiBGVFNUUkVBTV9IXworI2RlZmluZSBGVFNUUkVBTV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNTMwLDcgKzUzMCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRTVFJFQU1fSF9fICovCisjZW5kaWYgLyogRlRTVFJFQU1fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9mdHRyYWNlLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCmluZGV4IDlkMjhkMjEuLmVmYjMzNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRyYWNpbmcgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNDgsNyArMTQ4LDcgQEAKIEZUX1RSQUNFX0RFRiggYWZsYXRpbiApCiBGVF9UUkFDRV9ERUYoIGFmbGF0aW4yICkKIEZUX1RSQUNFX0RFRiggYWZ3YXJwICkKLUZUX1RSQUNFX0RFRiggYWZoYXJmYnV6eiApCitGVF9UUkFDRV9ERUYoIGFmc2hhcGVyICkKIEZUX1RSQUNFX0RFRiggYWZnbG9iYWwgKQogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvZnR2YWxpZC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9mdHZhbGlkLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCmluZGV4IDljZGE2ZWUuLmFhYzkyYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvZnR2YWxpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHZhbGlkYXRpb24gc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFZBTElEX0hfXwotI2RlZmluZSBfX0ZUVkFMSURfSF9fCisjaWZuZGVmIEZUVkFMSURfSF8KKyNkZWZpbmUgRlRWQUxJRF9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggICAvKiBmb3IgZnRfc2V0am1wIGFuZCBmdF9sb25nam1wICovCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFZBTElEX0hfXyAqLworI2VuZGlmIC8qIEZUVkFMSURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvaW50ZXJuYWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaApzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL2ludGVybmFsLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaAppbmRleCAxYzFmZDBlLi44YzNjMTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2ludGVybmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEludGVybmFsIGhlYWRlciBmaWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCwyOCArMjQsMjggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2RlZmluZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0ggICAgICAgICAgICAgPGludGVybmFsL2Z0b2Jqcy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9QSUNfSCAgICAgICAgICAgICAgICAgPGludGVybmFsL2Z0cGljLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1NUUkVBTV9IICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRzdHJlYW0uaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfTUVNT1JZX0ggICAgICAgICAgICAgIDxpbnRlcm5hbC9mdG1lbW9yeS5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9ERUJVR19IICAgICAgICAgICAgICAgPGludGVybmFsL2Z0ZGVidWcuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfQ0FMQ19IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9mdGNhbGMuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfRFJJVkVSX0ggICAgICAgICAgICAgIDxpbnRlcm5hbC9mdGRyaXZlci5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9UUkFDRV9IICAgICAgICAgICAgICAgPGludGVybmFsL2Z0dHJhY2UuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfR0xZUEhfTE9BREVSX0ggICAgICAgIDxpbnRlcm5hbC9mdGdsb2Fkci5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9TRk5UX0ggICAgICAgICAgICAgICAgPGludGVybmFsL3NmbnQuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfU0VSVklDRV9IICAgICAgICAgICAgIDxpbnRlcm5hbC9mdHNlcnYuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfUkZPUktfSCAgICAgICAgICAgICAgIDxpbnRlcm5hbC9mdHJmb3JrLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0ggICAgICAgICAgICA8aW50ZXJuYWwvZnR2YWxpZC5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0ggICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9QSUNfSCAgICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1NUUkVBTV9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfTUVNT1JZX0ggICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9ERUJVR19IICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfQ0FMQ19IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfSEFTSF9IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfRFJJVkVSX0ggICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9UUkFDRV9IICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfR0xZUEhfTE9BREVSX0ggICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9TRk5UX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NmbnQuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfU0VSVklDRV9IICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfUkZPUktfSCAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oPgogCi0jZGVmaW5lIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0ggICAgICA8aW50ZXJuYWwvdHR0eXBlcy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19IICAgICAgICAgPGludGVybmFsL3QxdHlwZXMuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSCAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0ggICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oPgogCi0jZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0ggICAgICA8aW50ZXJuYWwvcHNhdXguaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19IICAgIDxpbnRlcm5hbC9wc2hpbnRzLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfR0xPQkFMU19IICA8aW50ZXJuYWwvcHNnbG9iYWwuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSCAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0ggICAgPGZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaD4KIAotI2RlZmluZSBGVF9JTlRFUk5BTF9BVVRPSElOVF9IICAgICAgICAgICAgPGludGVybmFsL2F1dG9oaW50Lmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0FVVE9ISU5UX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaD4KIAogCiAjaWYgZGVmaW5lZCggX01TQ19WRVIgKSAgICAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3BzYXV4LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9wc2F1eC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKaW5kZXggMWM1Zjc4NC4uMTVkZWRmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9wc2F1eC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIFBvc3RTY3JpcHQgZm9udHMgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsMTMgKzE3LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0FVWF9IX18KLSNkZWZpbmUgX19QU0FVWF9IX18KKyNpZm5kZWYgUFNBVVhfSF8KKyNkZWZpbmUgUFNBVVhfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAogCiAKQEAgLTY3OCw2ICs2NzksNyBAQAogICAgIEZUX0ludCAgICAgICAgICAgICAgIG51bV9zdWJyczsKICAgICBGVF9CeXRlKiogICAgICAgICAgICBzdWJyczsKICAgICBGVF9VSW50KiAgICAgICAgICAgICBzdWJyc19sZW47ICAgIC8qIGFycmF5IG9mIHN1YnJzIGxlbmd0aCAob3B0aW9uYWwpICovCisgICAgRlRfSGFzaCAgICAgICAgICAgICAgc3VicnNfaGFzaDsgICAvKiB1c2VkIGlmIGBudW1fc3VicnMnIHdhcyBtYXNzYWdlZCAqLwogCiAgICAgRlRfTWF0cml4ICAgICAgICAgICAgZm9udF9tYXRyaXg7CiAgICAgRlRfVmVjdG9yICAgICAgICAgICAgZm9udF9vZmZzZXQ7CkBAIC04NzEsNyArODczLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19QU0FVWF9IX18gKi8KKyNlbmRpZiAvKiBQU0FVWF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9wc2hpbnRzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL3BzaGludHMuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmgKaW5kZXggMTJhYWFiYS4uZTYwZGM5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9wc2hpbnRzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmgKQEAgLTYsNyArNiw3IEBACiAvKiAgICByZWNvcmRlcnMgKHNwZWNpZmljYXRpb24gb25seSkuICBUaGVzZSBhcmUgdXNlZCB0byBzdXBwb3J0IG5hdGl2ZSAgICAqLwogLyogICAgVDEvVDIgaGludHMgaW4gdGhlIGB0eXBlMScsIGBjaWQnLCBhbmQgYGNmZicgZm9udCBkcml2ZXJzLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE4LDggKzE4LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1BTSElOVFNfSF9fCi0jZGVmaW5lIF9fUFNISU5UU19IX18KKyNpZm5kZWYgUFNISU5UU19IXworI2RlZmluZSBQU0hJTlRTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC03MTYsNyArNzE2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19QU0hJTlRTX0hfXyAqLworI2VuZGlmIC8qIFBTSElOVFNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaAppbmRleCA4NjViNTM2Li5jMjQ0NzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBCREYgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVkJERl9IX18KLSNkZWZpbmUgX19TVkJERl9IX18KKyNpZm5kZWYgU1ZCREZfSF8KKyNkZWZpbmUgU1ZCREZfSF8KIAogI2luY2x1ZGUgRlRfQkRGX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSApAQCAtNzYsNyArNzYsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWQkRGX0hfXyAqLworI2VuZGlmIC8qIFNWQkRGX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKaW5kZXggNGE1MzVhNi4uZGJiZTYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgQ0lEIGZvbnQgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERlcmVrIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZDSURfSF9fCi0jZGVmaW5lIF9fU1ZDSURfSF9fCisjaWZuZGVmIFNWQ0lEX0hfCisjZGVmaW5lIFNWQ0lEX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAogCkBAIC04NCw3ICs4NCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZDSURfSF9fICovCisjZW5kaWYgLyogU1ZDSURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaAppbmRleCBmOGIzNjE3Li5iZDI5NWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBmb250IGZvcm1hdCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVkZOVEZNVF9IX18KLSNkZWZpbmUgX19TVkZOVEZNVF9IX18KKyNpZm5kZWYgU1ZGTlRGTVRfSF8KKyNkZWZpbmUgU1ZGTlRGTVRfSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVkZOVEZNVF9IX18gKi8KKyNlbmRpZiAvKiBTVkZOVEZNVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCmluZGV4IGY3OGJjYTUuLmZmZjI5YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIGRpY3Rpb25hcnkgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWR0xESUNUX0hfXwotI2RlZmluZSBfX1NWR0xESUNUX0hfXworI2lmbmRlZiBTVkdMRElDVF9IXworI2RlZmluZSBTVkdMRElDVF9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKIApAQCAtODUsNCArODUsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWR0xESUNUX0hfXyAqLworI2VuZGlmIC8qIFNWR0xESUNUX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaAppbmRleCA1OWNjM2I3Li5mYjhmZmJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjUsOCArMjUsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZHWFZBTF9IX18KLSNkZWZpbmUgX19TVkdYVkFMX0hfXworI2lmbmRlZiBTVkdYVkFMX0hfCisjZGVmaW5lIFNWR1hWQUxfSF8KIAogI2luY2x1ZGUgRlRfR1hfVkFMSURBVEVfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfVkFMSURBVEVfSApAQCAtNjYsNyArNjYsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWR1hWQUxfSF9fICovCisjZW5kaWYgLyogU1ZHWFZBTF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaAppbmRleCBiYzI2ZjE1Li5hNjM2ZjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIEtlcm5pbmcgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWS0VSTl9IX18KLSNkZWZpbmUgX19TVktFUk5fSF9fCisjaWZuZGVmIFNWS0VSTl9IXworI2RlZmluZSBTVktFUk5fSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSApAQCAtNDUsNyArNDUsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWS0VSTl9IX18gKi8KKyNlbmRpZiAvKiBTVktFUk5fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCmluZGV4IGYyY2VjZmIuLmI3OGExOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBNdWx0aXBsZSBNYXN0ZXJzIGFuZCBHWCB2YXIgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVk1NX0hfXwotI2RlZmluZSBfX1NWTU1fSF9fCisjaWZuZGVmIFNWTU1fSF8KKyNkZWZpbmUgU1ZNTV9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKIApAQCAtMTA3LDcgKzEwNyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU1ZNTV9IX18gKi8KKyNlbmRpZiAvKiBTVk1NX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAppbmRleCBhODJhNjQyLi5iYzkyOWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgT3BlblR5cGUgdmFsaWRhdGlvbiBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZPVFZBTF9IX18KLSNkZWZpbmUgX19TVk9UVkFMX0hfXworI2lmbmRlZiBTVk9UVkFMX0hfCisjZGVmaW5lIFNWT1RWQUxfSF8KIAogI2luY2x1ZGUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfVkFMSURBVEVfSApAQCAtNDksNyArNDksNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWT1RWQUxfSF9fICovCisjZW5kaWYgLyogU1ZPVFZBTF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCmluZGV4IGQ0ZWIxNjkuLmQwZjdjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSW50ZXJuYWwgUEZSIHNlcnZpY2UgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWUEZSX0hfXwotI2RlZmluZSBfX1NWUEZSX0hfXworI2lmbmRlZiBTVlBGUl9IXworI2RlZmluZSBTVlBGUl9IXwogCiAjaW5jbHVkZSBGVF9QRlJfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICkBAIC02MCw3ICs2MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU1ZQRlJfSF9fICovCisjZW5kaWYgLyogU1ZQRlJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaAppbmRleCBhODlmNzllLi5mMTI0MzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IG5hbWUgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVlBPU1ROTV9IX18KLSNkZWZpbmUgX19TVlBPU1ROTV9IX18KKyNpZm5kZWYgU1ZQT1NUTk1fSF8KKyNkZWZpbmUgU1ZQT1NUTk1fSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAKQEAgLTc1LDcgKzc1LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlBPU1ROTV9IX18gKi8KKyNlbmRpZiAvKiBTVlBPU1ROTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaAppbmRleCBjOWYwN2NlLi43NWU2MjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByb3BlcnR5IHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWUFJPUF9IX18KLSNkZWZpbmUgX19TVlBST1BfSF9fCisjaWZuZGVmIFNWUFJPUF9IXworI2RlZmluZSBTVlBST1BfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTI5LDcgKzI5LDggQEAKICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKkZUX1Byb3BlcnRpZXNfU2V0RnVuYykoIEZUX01vZHVsZSAgICBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICB2YWx1ZV9pc19zdHJpbmcgKTsKIAogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqRlRfUHJvcGVydGllc19HZXRGdW5jKSggRlRfTW9kdWxlICAgIG1vZHVsZSwKQEAgLTc1LDcgKzc2LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlBST1BfSF9fICovCisjZW5kaWYgLyogU1ZQUk9QX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKaW5kZXggNjZkYTZlMS4uOWFjYzIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgUG9zdFNjcmlwdCBjaGFybWFwIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZQU0NNQVBfSF9fCi0jZGVmaW5lIF9fU1ZQU0NNQVBfSF9fCisjaWZuZGVmIFNWUFNDTUFQX0hfCisjZGVmaW5lIFNWUFNDTUFQX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogCkBAIC0xNzEsNyArMTcxLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlBTQ01BUF9IX18gKi8KKyNlbmRpZiAvKiBTVlBTQ01BUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCmluZGV4IDc1MmEyNjYuLmYyYzgwNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgaW5mbyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWUFNJTkZPX0hfXwotI2RlZmluZSBfX1NWUFNJTkZPX0hfXworI2lmbmRlZiBTVlBTSU5GT19IXworI2RlZmluZSBTVlBTSU5GT19IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKQEAgLTEwNSw3ICsxMDUsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWUFNJTkZPX0hfXyAqLworI2VuZGlmIC8qIFNWUFNJTkZPX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCmluZGV4IDI1MmFlMWMuLjBmMzhjZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgU0ZOVCB0YWJsZSBsb2FkaW5nIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZTRk5UX0hfXwotI2RlZmluZSBfX1NWU0ZOVF9IX18KKyNpZm5kZWYgU1ZTRk5UX0hfCisjZGVmaW5lIFNWU0ZOVF9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICkBAIC05Nyw3ICs5Nyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZTRk5UX0hfXyAqLworI2VuZGlmIC8qIFNWU0ZOVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCmluZGV4IDQzNTFhOWEuLjc3MmM3MjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlL3NmbnQgY21hcCBleHRyYSBpbmZvcm1hdGlvbiBzZXJ2aWNlLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBNYXNhdGFrZSBZQU1BVE8sIFJlZGhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE5LDggKzE5LDggQEAKIC8qIERldmVsb3BtZW50IG9mIHRoaXMgc2VydmljZSBpcyBzdXBwb3J0IG9mCiAgICBJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuLiAqLwogCi0jaWZuZGVmIF9fU1ZUVENNQVBfSF9fCi0jZGVmaW5lIF9fU1ZUVENNQVBfSF9fCisjaWZuZGVmIFNWVFRDTUFQX0hfCisjZGVmaW5lIFNWVFRDTUFQX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKQEAgLTQ4LDExICs0OCwxMiBAQAogICAvKiAgICAgIGB0dG5hbWVpZC5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGZvcm1hdCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBjbWFwIGZvcm1hdC4gIE9wZW5UeXBlIDEuNSBkZWZpbmVzIHRoZSBmb3JtYXRzIDAgKGJ5dGUgICAgICAgKi8KKyAgLyogICAgICBUaGUgY21hcCBmb3JtYXQuICBPcGVuVHlwZSAxLjYgZGVmaW5lcyB0aGUgZm9ybWF0cyAwIChieXRlICAgICAgICovCiAgIC8qICAgICAgZW5jb2RpbmcgdGFibGUpLCAyfihoaWdoLWJ5dGUgbWFwcGluZyB0aHJvdWdoIHRhYmxlKSwgNH4oc2VnbWVudCAqLwogICAvKiAgICAgIG1hcHBpbmcgdG8gZGVsdGEgdmFsdWVzKSwgNn4odHJpbW1lZCB0YWJsZSBtYXBwaW5nKSwgOH4obWl4ZWQgICAgKi8KICAgLyogICAgICAxNi1iaXQgYW5kIDMyLWJpdCBjb3ZlcmFnZSksIDEwfih0cmltbWVkIGFycmF5KSwgMTJ+KHNlZ21lbnRlZCAgICovCi0gIC8qICAgICAgY292ZXJhZ2UpLCBhbmQgMTQgKFVuaWNvZGUgVmFyaWF0aW9uIFNlcXVlbmNlcykuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGNvdmVyYWdlKSwgMTN+KGxhc3QgcmVzb3J0IGZvbnQpLCBhbmQgMTQgKFVuaWNvZGUgVmFyaWF0aW9uICAgICAgKi8KKyAgLyogICAgICBTZXF1ZW5jZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfQ01hcEluZm9fCiAgIHsKQEAgLTk5LDcgKzEwMCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU1ZUVENNQVBfSF9fICovCisjZW5kaWYgLyogU1ZUVENNQVBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCmluZGV4IDI3MmVlOGMuLmM1NTA2MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBlbmdpbmUgcXVlcnkgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVlRURU5HX0hfXwotI2RlZmluZSBfX1NWVFRFTkdfSF9fCisjaWZuZGVmIFNWVFRFTkdfSF8KKyNkZWZpbmUgU1ZUVEVOR19IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKICNpbmNsdWRlIEZUX01PRFVMRV9ICkBAIC00Nyw3ICs0Nyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZUVEVOR19IX18gKi8KKyNlbmRpZiAvKiBTVlRURU5HX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKaW5kZXggZjVjYjc2YS4uYzMzZWRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUgZ2x5cGggc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTUsOCArMTUsOCBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19TVlRUR0xZRl9IX18KLSNkZWZpbmUgX19TVlRUR0xZRl9IX18KKyNpZm5kZWYgU1ZUVEdMWUZfSF8KKyNkZWZpbmUgU1ZUVEdMWUZfSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSApAQCAtNjMsNyArNjMsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1NWVFRHTFlGX0hfXyAqLworI2VuZGlmIC8qIFNWVFRHTFlGX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKaW5kZXggMDAzNjkyOS4uYzJmNmQ0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgV2luZG93cyBGTlQvRk9OVCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZXSU5GTlRfSF9fCi0jZGVmaW5lIF9fU1ZXSU5GTlRfSF9fCisjaWZuZGVmIFNWV0lORk5UX0hfCisjZGVmaW5lIFNWV0lORk5UX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAogI2luY2x1ZGUgRlRfV0lORk9OVFNfSApAQCAtNDQsNyArNDQsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWV0lORk5UX0hfXyAqLworI2VuZGlmIC8qIFNWV0lORk5UX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3NmbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvc2ZudC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaAppbmRleCA5N2NlMzkwLi5lMTM5MzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3NmbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIGBzZm50JyBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU0ZOVF9IX18KLSNkZWZpbmUgX19TRk5UX0hfXworI2lmbmRlZiBTRk5UX0hfCisjZGVmaW5lIFNGTlRfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTQ0LDcgKzQ0LDkgQEAKICAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbiwgaW4gYml0cyAwLTE1LiAgVGhlIG51bWJlcmVkIGluc3RhbmNlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGluZGV4fit+MSBvZiBhIEdYIChzdWIpZm9udCwgaWYgYXBwbGljYWJsZSwgaW4gYml0cyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAxNi0zMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBudW1fcGFyYW1zIDo6IFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04Nyw3ICs4OSw5IEBACiAgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIFRydWVUeXBlIGZvbnQsIGlmIHdlIGFyZSBvcGVuaW5nIGEgICovCi0gIC8qICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sIGluIGJpdHMgMC0xNS4gIFRoZSBudW1iZXJlZCBpbnN0YW5jZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpbmRleH4rfjEgb2YgYSBHWCAoc3ViKWZvbnQsIGlmIGFwcGxpY2FibGUsIGluIGJpdHMgICovCisgIC8qICAgICAgICAgICAgICAgICAgMTYtMzAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgbnVtX3BhcmFtcyA6OiBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDI3LDYgKzQzMSwzMyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9HZXRfTmFtZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcm9tIHRoZSBgbmFtZScgdGFibGUsIHJldHVybiBhIGdpdmVuIEVOR0xJU0ggbmFtZSByZWNvcmQgaW4gICAgICAgKi8KKyAgLyogICAgQVNDSUkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuYW1laWQgICA6OiBUaGUgbmFtZSBpZCBvZiB0aGUgbmFtZSByZWNvcmQgdG8gcmV0dXJuLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuYW1lICAgICA6OiBUaGUgYWRkcmVzcyBvZiBhbiBhbGxvY2F0ZWQgc3RyaW5nIHBvaW50ZXIuICBOVUxMIGlmICAgKi8KKyAgLyogICAgICAgICAgICAgICAgbm8gbmFtZSBpcyBwcmVzZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfR2V0X05hbWVfRnVuYykoIFRUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgbmFtZWlkLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqKiAgbmFtZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU1Niw2ICs1ODcsOCBAQAogCiAgICAgVFRfR2V0X01ldHJpY3NfRnVuYyAgICAgICAgICBnZXRfbWV0cmljczsKIAorICAgIFRUX0dldF9OYW1lX0Z1bmMgICAgICAgICAgICAgZ2V0X25hbWU7CisKICAgfSBTRk5UX0ludGVyZmFjZTsKIAogCkBAIC01OTQsNyArNjI3LDggQEAKICAgICAgICAgICBmcmVlX2VibGNfLCAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHNldF9zYml0X3N0cmlrZV8sICAgICAgICAgICAgICBcCiAgICAgICAgICAgbG9hZF9zdHJpa2VfbWV0cmljc18sICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfbWV0cmljc18gKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9tZXRyaWNzXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X25hbWVfICkgICAgICAgICAgICAgICAgICAgIFwKICAgc3RhdGljIGNvbnN0IFNGTlRfSW50ZXJmYWNlICBjbGFzc18gPSAgXAogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZ290b190YWJsZV8sICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTYyNiw2ICs2NjAsNyBAQAogICAgIHNldF9zYml0X3N0cmlrZV8sICAgICAgICAgICAgICAgICAgICBcCiAgICAgbG9hZF9zdHJpa2VfbWV0cmljc18sICAgICAgICAgICAgICAgIFwKICAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH07CiAKICNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCkBAIC02NjMsNyArNjk4LDggQEAKICAgICAgICAgICBmcmVlX2VibGNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHNldF9zYml0X3N0cmlrZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgbG9hZF9zdHJpa2VfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfbWV0cmljc18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9tZXRyaWNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X25hbWVfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0ZOVF9JbnRlcmZhY2UqICBjbGF6eiApICAgIFwKQEAgLTY5OSwxMyArNzM1LDE0IEBACiAgICAgY2xhenotPnNldF9zYml0X3N0cmlrZSAgICAgPSBzZXRfc2JpdF9zdHJpa2VfOyAgICAgIFwKICAgICBjbGF6ei0+bG9hZF9zdHJpa2VfbWV0cmljcyA9IGxvYWRfc3RyaWtlX21ldHJpY3NfOyAgXAogICAgIGNsYXp6LT5nZXRfbWV0cmljcyAgICAgICAgID0gZ2V0X21ldHJpY3NfOyAgICAgICAgICBcCisgICAgY2xhenotPmdldF9uYW1lICAgICAgICAgICAgPSBnZXRfbmFtZV87ICAgICAgICAgICAgIFwKICAgfQogCiAjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19TRk5UX0hfXyAqLworI2VuZGlmIC8qIFNGTlRfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvdDF0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9pbnRlcm5hbC90MXR5cGVzLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCmluZGV4IDAyOWFjYzQuLjQ5NGMwMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvdDF0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgVHlwZTEvVHlwZTIgdHlwZSBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAgICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywxNCArMTcsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1QxVFlQRVNfSF9fCi0jZGVmaW5lIF9fVDFUWVBFU19IX18KKyNpZm5kZWYgVDFUWVBFU19IXworI2RlZmluZSBUMVRZUEVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9UWVBFMV9UQUJMRVNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKIAogCkBAIC0xMDcsNiArMTA4LDcgQEAKICAgICBGVF9JbnQgICAgICAgICAgIG51bV9zdWJyczsKICAgICBGVF9CeXRlKiogICAgICAgIHN1YnJzOwogICAgIEZUX1VJbnQqICAgICAgICAgc3VicnNfbGVuOworICAgIEZUX0hhc2ggICAgICAgICAgc3VicnNfaGFzaDsKIAogICAgIEZUX0ludCAgICAgICAgICAgbnVtX2dseXBoczsKICAgICBGVF9TdHJpbmcqKiAgICAgIGdseXBoX25hbWVzOyAgICAgICAvKiBhcnJheSBvZiBnbHlwaCBuYW1lcyAgICAgICAqLwpAQCAtMjQ5LDcgKzI1MSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVDFUWVBFU19IX18gKi8KKyNlbmRpZiAvKiBUMVRZUEVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL3R0dHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvaW50ZXJuYWwvdHR0eXBlcy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaAppbmRleCAzMWRkMGFhLi4xNzY3MTMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL3R0dHlwZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEJhc2ljIFNGTlQvVHJ1ZVR5cGUgdHlwZSBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAgICovCiAvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRUWVBFU19IX18KLSNkZWZpbmUgX19UVFRZUEVTX0hfXworI2lmbmRlZiBUVFRZUEVTX0hfCisjZGVmaW5lIFRUVFlQRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE4NSw3ICsxODUsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgQ29tcExlbmd0aCA6OiBDb21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPcmlnTGVuZ3RoIDo6IFVub21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT3JpZ0xlbmd0aCA6OiBVbmNvbXByZXNzZWQgdGFibGUgbGVuZ3RoIChpbiBieXRlcykuICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBDaGVja1N1bSAgIDo6IFRoZSB0YWJsZSBjaGVja3N1bS4gIFRoaXMgdmFsdWUgY2FuIGJlIGlnbm9yZWQuICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMjMzLDkgKzEyMzMsNiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRlcnMgZmllbGQgaXMgYWxzbyB1c2VkIHRvIGhvb2sgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlYnVnZ2VyIGluIGB0dGRlYnVnJy4gICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB1bnBhdGVudGVkX2hpbnRpbmcgICA6OiBJZiB0cnVlLCB1c2Ugb25seSB1bnBhdGVudGVkIG1ldGhvZHMgaW4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBkb2JsZW5kICAgICAgICAgICAgICA6OiBBIGJvb2xlYW4gd2hpY2ggaXMgc2V0IGlmIHRoZSBmb250IHNob3VsZCAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYmxlbmRlZCAodGhpcyBpcyBmb3IgR1ggdmFyKS4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTMzNCwxMCArMTMzMSw2IEBACiAgICAgLyogdXNlZCB0byBob29rIHRoZSBkZWJ1Z2dlciBmb3IgdGhlIGB0dGRlYnVnJyB1dGlsaXR5LiAgICAgICAgKi8KICAgICBUVF9JbnRlcnByZXRlciAgICAgICAgaW50ZXJwcmV0ZXI7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIC8qIFVzZSB1bnBhdGVudGVkIGhpbnRpbmcgb25seS4gKi8KLSAgICBGVF9Cb29sICAgICAgICAgICAgICAgdW5wYXRlbnRlZF9oaW50aW5nOwotI2VuZGlmCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTM3OCw2ICsxMzcxLDcgQEAKICAgICBGVF9VTG9uZyAgICAgICAgICAgICAgc2JpdF90YWJsZV9zaXplOwogICAgIFRUX1NiaXRUYWJsZVR5cGUgICAgICBzYml0X3RhYmxlX3R5cGU7CiAgICAgRlRfVUludCAgICAgICAgICAgICAgIHNiaXRfbnVtX3N0cmlrZXM7CisgICAgRlRfVUludCogICAgICAgICAgICAgIHNiaXRfc3RyaWtlX21hcDsKIAogICAgIEZUX0J5dGUqICAgICAgICAgICAgICBrZXJuX3RhYmxlOwogICAgIEZUX1VMb25nICAgICAgICAgICAgICBrZXJuX3RhYmxlX3NpemU7CkBAIC0xMzkzLDEyICsxMzg3LDE4IEBACiAgICAgRlRfVUxvbmcgICAgICAgICAgICAgIGhvcnpfbWV0cmljc19vZmZzZXQ7CiAgICAgRlRfVUxvbmcgICAgICAgICAgICAgIHZlcnRfbWV0cmljc19vZmZzZXQ7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIHNpbmNlIDIuNC4xMiAqLwogICAgIEZUX1VMb25nICAgICAgICAgICAgICBzcGhfZm91bmRfZnVuY19mbGFnczsgLyogc3BlY2lhbCBmdW5jdGlvbnMgZm91bmQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIGZhY2UgICAgICAgICAgICovCiAgICAgRlRfQm9vbCAgICAgICAgICAgICAgIHNwaF9jb21wYXRpYmlsaXR5X21vZGU7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworICAgIC8qIHNpbmNlIDIuNyAqLworICAgIEZUX1VMb25nICAgICAgICAgICAgICBlYmR0X3N0YXJ0OyAgLyogZWl0aGVyIGBDQkRUJywgYEVCRFQnLCBvciBgYmRhdCcgKi8KKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgZWJkdF9zaXplOworI2VuZGlmCiAKICAgfSBUVF9GYWNlUmVjOwogCkBAIC0xNDU3LDExICsxNDU3LDIzIEBACiAgIC8qIGhhbmRsZSB0byBleGVjdXRpb24gY29udGV4dCAqLwogICB0eXBlZGVmIHN0cnVjdCBUVF9FeGVjQ29udGV4dFJlY18qICBUVF9FeGVjQ29udGV4dDsKIAorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgVFRfU2l6ZVJlY18qICBUVF9TaXplOworCisKICAgLyogZ2x5cGggbG9hZGVyIHN0cnVjdHVyZSAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfTG9hZGVyUmVjXwogICB7Ci0gICAgRlRfRmFjZSAgICAgICAgICBmYWNlOwotICAgIEZUX1NpemUgICAgICAgICAgc2l6ZTsKKyAgICBUVF9GYWNlICAgICAgICAgIGZhY2U7CisgICAgVFRfU2l6ZSAgICAgICAgICBzaXplOwogICAgIEZUX0dseXBoU2xvdCAgICAgZ2x5cGg7CiAgICAgRlRfR2x5cGhMb2FkZXIgICBnbG9hZGVyOwogCkBAIC0xNTAzLDEyICsxNTE1LDE1IEBACiAgICAgRlRfQnl0ZSogICAgICAgICBjdXJzb3I7CiAgICAgRlRfQnl0ZSogICAgICAgICBsaW1pdDsKIAorICAgIC8qIHNpbmNlIHZlcnNpb24gMi42LjIgKi8KKyAgICBGVF9MaXN0UmVjICAgICAgIGNvbXBvc2l0ZXM7CisKICAgfSBUVF9Mb2FkZXJSZWM7CiAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVFRZUEVTX0hfXyAqLworI2VuZGlmIC8qIFRUVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdDF0YWJsZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBpbmNsdWRlL3QxdGFibGVzLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaAppbmRleCBhNmVhNDE1Li5lMjcyMzI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3QxdGFibGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgVHlwZSAxL1R5cGUgMiB0YWJsZXMgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UMVRBQkxFU19IX18KLSNkZWZpbmUgX19UMVRBQkxFU19IX18KKyNpZm5kZWYgVDFUQUJMRVNfSF8KKyNkZWZpbmUgVDFUQUJMRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTc1NSw3ICs3NTUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1QxVEFCTEVTX0hfXyAqLworI2VuZGlmIC8qIFQxVEFCTEVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3R0bmFtZWlkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS90dG5hbWVpZC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKaW5kZXggYzk1ODVmMi4uY2U3MDdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90dG5hbWVpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBuYW1lIElEIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFROQU1FSURfSF9fCi0jZGVmaW5lIF9fVFROQU1FSURfSF9fCisjaWZuZGVmIFRUTkFNRUlEX0hfCisjZGVmaW5lIFRUTkFNRUlEX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xMjMxLDcgKzEyMzEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUTkFNRUlEX0hfXyAqLworI2VuZGlmIC8qIFRUTkFNRUlEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3R0dGFibGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS90dHRhYmxlcy5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgKaW5kZXggMTU2OGY0MC4uMWMwNzVkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90dHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEJhc2ljIFNGTlQvVHJ1ZVR5cGUgdGFibGVzIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRUQUJMRVNfSF9fCi0jZGVmaW5lIF9fVFRUQUJMRVNfSF9fCisjaWZuZGVmIFRUVEFCTEVTX0hfCisjZGVmaW5lIFRUVEFCTEVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01ODcsNyArNTg3LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NGTlRfSEhFQSA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfSG9yaUhlYWRlciBzdHJ1Y3R1cmUuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU0ZOVF9WSEVBIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9WZXJ0SGVhZGVyIHN0cnV0dXJlLiAgICAgICovCisgIC8qICAgIEZUX1NGTlRfVkhFQSA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfVmVydEhlYWRlciBzdHJ1Y3R1cmUuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfU0ZOVF9QT1NUIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9Qb3N0c2NyaXB0IHN0cnVjdHVyZS4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODIzLDcgKzgyMyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRUQUJMRVNfSF9fICovCisjZW5kaWYgLyogVFRUQUJMRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHR0YWdzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvdHR0YWdzLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmgKaW5kZXggMzgzNmM3Yi4uZjNjOWFhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90dHRhZ3MuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRhZ3MgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVEFHU19IX18KLSNkZWZpbmUgX19UVEFHU19IX18KKyNpZm5kZWYgVFRBR1NfSF8KKyNkZWZpbmUgVFRBR1NfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUQUdTX0hfXyAqLworI2VuZGlmIC8qIFRUQUdTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3R0dW5wYXQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvdHR1bnBhdC5oCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIGluY2x1ZGUvdHR1bnBhdC5oCnJlbmFtZSB0byBpbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaAppbmRleCA4ZWE1NTY4Li5jYTQ2NzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3R0dW5wYXQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaApAQCAtMiw5ICsyLDEwIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHR0dW5wYXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBEZWZpbml0aW9ucyBmb3IgdGhlIHVucGF0ZW50ZWQgVHJ1ZVR5cGUgaGludGluZyBzeXN0ZW0gICAgICAgICAgICAgICAqLworLyogICAgRGVmaW5pdGlvbnMgZm9yIHRoZSB1bnBhdGVudGVkIFRydWVUeXBlIGhpbnRpbmcgc3lzdGVtLiAgICAgICAgICAgICAgKi8KKy8qICAgIE9ic29sZXRlLCByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXcml0dGVuIGJ5IEdyYWhhbSBBc2hlciA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPiAgICAgICAgICAgICAgICAgICovCkBAIC0xOCw4ICsxOSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFVOUEFUX0hfXwotI2RlZmluZSBfX1RUVU5QQVRfSF9fCisjaWZuZGVmIFRUVU5QQVRfSF8KKyNkZWZpbmUgVFRVTlBBVF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDEsOSArNDIsMTEgQEAKICAgKiAgIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcKICAgKgogICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgIEEgY29uc3RhbnQgdXNlZCBhcyB0aGUgdGFnIG9mIGFuIEBGVF9QYXJhbWV0ZXIgc3RydWN0dXJlIHRvIGluZGljYXRlCi0gICogICB0aGF0IHVucGF0ZW50ZWQgbWV0aG9kcyBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBieXRlY29kZQotICAqICAgaW50ZXJwcmV0ZXIgZm9yIGEgdHlwZWZhY2Ugb3BlbmVkIGJ5IEBGVF9PcGVuX0ZhY2UuCisgICogICBEZXByZWNhdGVkLgorICAqCisgICogICBQcmV2aW91c2x5OiBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBhbiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZSB0bworICAqICAgaW5kaWNhdGUgdGhhdCB1bnBhdGVudGVkIG1ldGhvZHMgb25seSBzaG91bGQgYmUgdXNlZCBieSB0aGUgVHJ1ZVR5cGUKKyAgKiAgIGJ5dGVjb2RlIGludGVycHJldGVyIGZvciBhIHR5cGVmYWNlIG9wZW5lZCBieSBARlRfT3Blbl9GYWNlLgogICAqCiAgICovCiAjZGVmaW5lIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcgIEZUX01BS0VfVEFHKCAndScsICduJywgJ3AnLCAnYScgKQpAQCAtNTQsNyArNTcsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1RUVU5QQVRfSF9fICovCisjZW5kaWYgLyogVFRVTlBBVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdDJidWlsZC5oIGIvaW5jbHVkZS9mdDJidWlsZC5oCmluZGV4IDA5YzE5ZDQuLmM4OWNiNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnQyYnVpbGQuaAorKysgYi9pbmNsdWRlL2Z0MmJ1aWxkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgMiBidWlsZCBhbmQgc2V0dXAgbWFjcm9zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMxLDEyICszMSwxMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlQyQlVJTERfSF9fCi0jZGVmaW5lIF9fRlQyQlVJTERfSF9fCisjaWZuZGVmIEZUMkJVSUxEX0hfCisjZGVmaW5lIEZUMkJVSUxEX0hfCiAKLSNpbmNsdWRlIDxjb25maWcvZnRoZWFkZXIuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4KIAotI2VuZGlmIC8qIF9fRlQyQlVJTERfSF9fICovCisjZW5kaWYgLyogRlQyQlVJTERfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRlcnJvcnMuaCBiL2luY2x1ZGUvZnRlcnJvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc2YmVlNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2Z0ZXJyb3JzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRlcnJvcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBzcGVjaWFsIGhlYWRlciBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBoYW5kbGluZyBvZiBGVDIgICAgICAgICovCi0gIC8qIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgZXJyb3IgbWVzc2FnZSAqLwotICAvKiBzdHJpbmdzIHdpdGggYSBzbWFsbCBtYWNybyB0cmljayBleHBsYWluZWQgYmVsb3cuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEkgLSBFcnJvciBGb3JtYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhlIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBjYW4gYmUgICAqLwotICAvKiAgIGRlZmluZWQgaW4gZnRvcHRpb24uaCBpbiBvcmRlciB0byBtYWtlIHRoZSBoaWdoZXIgYnl0ZSBpbmRpY2F0ZSAgICAgKi8KLSAgLyogICB0aGUgbW9kdWxlIHdoZXJlIHRoZSBlcnJvciBoYXMgaGFwcGVuZWQgKHRoaXMgaXMgbm90IGNvbXBhdGlibGUgICAgICovCi0gIC8qICAgd2l0aCBzdGFuZGFyZCBidWlsZHMgb2YgRnJlZVR5cGUgMikuICBTZWUgdGhlIGZpbGUgYGZ0bW9kZXJyLmgnIGZvciAqLwotICAvKiAgIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJSSAtIEVycm9yIE1lc3NhZ2Ugc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoZSBlcnJvciBkZWZpbml0aW9ucyBiZWxvdyBhcmUgbWFkZSB0aHJvdWdoIHNwZWNpYWwgbWFjcm9zIHRoYXQgICAgKi8KLSAgLyogICBhbGxvdyBjbGllbnQgYXBwbGljYXRpb25zIHRvIGJ1aWxkIGEgdGFibGUgb2YgZXJyb3IgbWVzc2FnZSBzdHJpbmdzICovCi0gIC8qICAgaWYgdGhleSBuZWVkIGl0LiAgVGhlIHN0cmluZ3MgYXJlIG5vdCBpbmNsdWRlZCBpbiBhIG5vcm1hbCBidWlsZCBvZiAqLwotICAvKiAgIEZyZWVUeXBlIDIgdG8gc2F2ZSBzcGFjZSAobW9zdCBjbGllbnQgYXBwbGljYXRpb25zIGRvIG5vdCB1c2UgICAgICAgKi8KLSAgLyogICB0aGVtKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRvIGRvIHNvLCB5b3UgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlIGluY2x1ZGluZyAgKi8KLSAgLyogICB0aGlzIGZpbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZUX0VSUk9SX1NUQVJUX0xJU1QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGJlZm9yZSBhbnl0aGluZyBlbHNlIHRvIGRlZmluZSB0aGUgc3RhcnQgb2YgICovCi0gIC8qICAgICB0aGUgZXJyb3IgbGlzdC4gIEl0IGlzIGZvbGxvd2VkIGJ5IHNldmVyYWwgRlRfRVJST1JfREVGIGNhbGxzICAgICAqLwotICAvKiAgICAgKHNlZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJST1JfREVGKCBlLCB2LCBzICkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgdG8gZGVmaW5lIG9uZSBzaW5nbGUgZXJyb3IuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGBlJyBpcyB0aGUgZXJyb3IgY29kZSBpZGVudGlmaWVyIChlLmcuIEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50KS4gICovCi0gIC8qICAgICBgdicgaXMgdGhlIGVycm9yIG51bWVyaWNhbCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYHMnIGlzIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJST1JfRU5EX0xJU1QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVGhpcyBtYWNybyBlbmRzIHRoZSBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQWRkaXRpb25hbGx5LCB5b3UgaGF2ZSB0byB1bmRlZmluZSBfX0ZURVJST1JTX0hfXyBiZWZvcmUgI2luY2x1ZGluZyAqLwotICAvKiAgIHRoaXMgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICN1bmRlZiBfX0ZURVJST1JTX0hfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAjZGVmaW5lIEZUX0VSUk9SREVGKCBlLCB2LCBzICkgIHsgZSwgcyB9LCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgI2RlZmluZSBGVF9FUlJPUl9TVEFSVF9MSVNUICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICNkZWZpbmUgRlRfRVJST1JfRU5EX0xJU1QgICAgICAgeyAwLCAwIH0gfTsgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgY29uc3Qgc3RydWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgIGludCAgICAgICAgICBlcnJfY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICBjb25zdCBjaGFyKiAgZXJyX21zZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIH0gZnRfZXJyb3JzW10gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgI2luY2x1ZGUgRlRfRVJST1JTX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0ZURVJST1JTX0hfXwotI2RlZmluZSBfX0ZURVJST1JTX0hfXwotCi0KLSAgLyogaW5jbHVkZSBtb2R1bGUgYmFzZSBlcnJvciBjb2RlcyAqLwotI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgIFNFVFVQIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jdW5kZWYgIEZUX05FRURfRVhURVJOX0MKLQotCi0gIC8qIEZUX0VSUl9QUkVGSVggaXMgdXNlZCBhcyBhIHByZWZpeCBmb3IgZXJyb3IgaWRlbnRpZmllcnMuICovCi0gIC8qIEJ5IGRlZmF1bHQsIHdlIHVzZSBgRlRfRXJyXycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0VSUl9QUkVGSVgKLSNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgRlRfRXJyXwotI2VuZGlmCi0KLQotICAvKiBGVF9FUlJfQkFTRSBpcyB1c2VkIGFzIHRoZSBiYXNlIGZvciBtb2R1bGUtc3BlY2lmaWMgZXJyb3JzLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMKLQotI2lmbmRlZiBGVF9FUlJfQkFTRQotI2RlZmluZSBGVF9FUlJfQkFTRSAgRlRfTW9kX0Vycl9CYXNlCi0jZW5kaWYKLQotI2Vsc2UKLQotI3VuZGVmIEZUX0VSUl9CQVNFCi0jZGVmaW5lIEZUX0VSUl9CQVNFICAwCi0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1VTRV9NT0RVTEVfRVJST1JTICovCi0KLQotICAvKiBJZiBGVF9FUlJPUkRFRiBpcyBub3QgZGVmaW5lZCwgd2UgbmVlZCB0byBkZWZpbmUgYSBzaW1wbGUgKi8KLSAgLyogZW51bWVyYXRpb24gdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9FUlJPUkRFRgotCi0jZGVmaW5lIEZUX0VSUk9SREVGKCBlLCB2LCBzICkgIGUgPSB2LAotI2RlZmluZSBGVF9FUlJPUl9TVEFSVF9MSVNUICAgICBlbnVtIHsKLSNkZWZpbmUgRlRfRVJST1JfRU5EX0xJU1QgICAgICAgRlRfRVJSX0NBVCggRlRfRVJSX1BSRUZJWCwgTWF4ICkgfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX05FRURfRVhURVJOX0MKLSAgZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FUlJPUkRFRiAqLwotCi0KLSAgLyogdGhpcyBtYWNybyBpcyB1c2VkIHRvIGRlZmluZSBhbiBlcnJvciAqLwotI2RlZmluZSBGVF9FUlJPUkRFRl8oIGUsIHYsIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBGVF9FUlJPUkRFRiggRlRfRVJSX0NBVCggRlRfRVJSX1BSRUZJWCwgZSApLCB2ICsgRlRfRVJSX0JBU0UsIHMgKQotCi0gIC8qIHRoaXMgaXMgb25seSB1c2VkIGZvciA8bW9kdWxlPl9FcnJfT2ssIHdoaWNoIG11c3QgYmUgMCEgKi8KLSNkZWZpbmUgRlRfTk9FUlJPUkRFRl8oIGUsIHYsIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIEZUX0VSUk9SREVGKCBGVF9FUlJfQ0FUKCBGVF9FUlJfUFJFRklYLCBlICksIHYsIHMgKQotCi0KLSNpZmRlZiBGVF9FUlJPUl9TVEFSVF9MSVNUCi0gIEZUX0VSUk9SX1NUQVJUX0xJU1QKLSNlbmRpZgotCi0KLSAgLyogbm93IGluY2x1ZGUgdGhlIGVycm9yIGNvZGVzICovCi0jaW5jbHVkZSBGVF9FUlJPUl9ERUZJTklUSU9OU19ICi0KLQotI2lmZGVmIEZUX0VSUk9SX0VORF9MSVNUCi0gIEZUX0VSUk9SX0VORF9MSVNUCi0jZW5kaWYKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBTSU1QTEUgQ0xFQU5VUCAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgRlRfTkVFRF9FWFRFUk5fQwotICB9Ci0jZW5kaWYKLQotI3VuZGVmIEZUX0VSUk9SX1NUQVJUX0xJU1QKLSN1bmRlZiBGVF9FUlJPUl9FTkRfTElTVAotCi0jdW5kZWYgRlRfRVJST1JERUYKLSN1bmRlZiBGVF9FUlJPUkRFRl8KLSN1bmRlZiBGVF9OT0VSUk9SREVGXwotCi0jdW5kZWYgRlRfTkVFRF9FWFRFUk5fQwotI3VuZGVmIEZUX0VSUl9CQVNFCi0KLSAgLyogRlRfRVJSX1BSRUZJWCBpcyBuZWVkZWQgaW50ZXJuYWxseSAqLwotI2lmbmRlZiBGVDJfQlVJTERfTElCUkFSWQotI3VuZGVmIEZUX0VSUl9QUkVGSVgKLSNlbmRpZgotCi0jZW5kaWYgLyogX19GVEVSUk9SU19IX18gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnRsY2RmaWwuaCBiL2luY2x1ZGUvZnRsY2RmaWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNkOTk5YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2Z0bGNkZmlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRsY2RmaWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMgICAgICAgICAgICovCi0vKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0ZUX0xDRF9GSUxURVJfSF9fCi0jZGVmaW5lIF9fRlRfTENEX0ZJTFRFUl9IX18KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0KLSNpZmRlZiBGUkVFVFlQRV9ICi0jZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgotI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCi0jZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKLSNlbmRpZgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHNlY3Rpb246Ci0gICAqICAgbGNkX2ZpbHRlcmluZwotICAgKgotICAgKiBAdGl0bGU6Ci0gICAqICAgTENEIEZpbHRlcmluZwotICAgKgotICAgKiBAYWJzdHJhY3Q6Ci0gICAqICAgUmVkdWNlIGNvbG9yIGZyaW5nZXMgb2YgTENELW9wdGltaXplZCBiaXRtYXBzLgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgVGhlIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciBBUEkgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxvdy1wYXNzCi0gICAqICAgZmlsdGVyLCB3aGljaCBpcyB0aGVuIGFwcGxpZWQgdG8gTENELW9wdGltaXplZCBiaXRtYXBzIGdlbmVyYXRlZAotICAgKiAgIHRocm91Z2ggQEZUX1JlbmRlcl9HbHlwaC4gIFRoaXMgaXMgdXNlZnVsIHRvIHJlZHVjZSBjb2xvciBmcmluZ2VzCi0gICAqICAgdGhhdCB3b3VsZCBvY2N1ciB3aXRoIHVuZmlsdGVyZWQgcmVuZGVyaW5nLgotICAgKgotICAgKiAgIE5vdGUgdGhhdCBubyBmaWx0ZXIgaXMgYWN0aXZlIGJ5IGRlZmF1bHQsIGFuZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMKLSAgICogICAqbm90KiBpbXBsZW1lbnRlZCBpbiBkZWZhdWx0IGJ1aWxkcyBvZiB0aGUgbGlicmFyeS4gIFlvdSBuZWVkIHRvCi0gICAqICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpbiB5b3VyIGBmdG9wdGlvbi5oJyBmaWxlCi0gICAqICAgaW4gb3JkZXIgdG8gYWN0aXZhdGUgaXQuCi0gICAqCi0gICAqICAgRnJlZVR5cGUgZ2VuZXJhdGVzIGFscGhhIGNvdmVyYWdlIG1hcHMsIHdoaWNoIGFyZSBsaW5lYXIgYnkgbmF0dXJlLgotICAgKiAgIEZvciBpbnN0YW5jZSwgdGhlIHZhbHVlIDB4ODAgaW4gYml0bWFwIHJlcHJlc2VudGF0aW9uIG1lYW5zIHRoYXQKLSAgICogICAod2l0aGluIG51bWVyaWNhbCBwcmVjaXNpb24pIDB4ODAvMHhGRiBmcmFjdGlvbiBvZiB0aGF0IHBpeGVsIGlzCi0gICAqICAgY292ZXJlZCBieSB0aGUgZ2x5cGgncyBvdXRsaW5lLiAgVGhlIGJsZW5kaW5nIGZ1bmN0aW9uIGZvciBwbGFjaW5nCi0gICAqICAgdGV4dCBvdmVyIGEgYmFja2dyb3VuZCBpcwotICAgKgotICAgKiAgIHsKLSAgICogICAgIGRzdCA9IGFscGhhICogc3JjICsgKDEgLSBhbHBoYSkgKiBkc3QgICAgLAotICAgKiAgIH0KLSAgICoKLSAgICogICB3aGljaCBpcyBrbm93biBhcyBPVkVSLiAgSG93ZXZlciwgd2hlbiBjYWxjdWxhdGluZyB0aGUgb3V0cHV0IG9mIHRoZQotICAgKiAgIE9WRVIgb3BlcmF0b3IsIHRoZSBzb3VyY2UgY29sb3JzIHNob3VsZCBmaXJzdCBiZSB0cmFuc2Zvcm1lZCB0byBhCi0gICAqICAgbGluZWFyIGNvbG9yIHNwYWNlLCB0aGVuIGFscGhhIGJsZW5kZWQgaW4gdGhhdCBzcGFjZSwgYW5kIHRyYW5zZm9ybWVkCi0gICAqICAgYmFjayB0byB0aGUgb3V0cHV0IGNvbG9yIHNwYWNlLgotICAgKgotICAgKiAgIFdoZW4gbGluZWFyIGxpZ2h0IGJsZW5kaW5nIGlzIHVzZWQsIHRoZSBkZWZhdWx0IEZJUjUgZmlsdGVyaW5nCi0gICAqICAgd2VpZ2h0cyAoYXMgZ2l2ZW4gYnkgRlRfTENEX0ZJTFRFUl9ERUZBVUxUKSBhcmUgbm8gbG9uZ2VyIG9wdGltYWwsIGFzCi0gICAqICAgdGhleSBoYXZlIGJlZW4gZGVzaWduZWQgZm9yIGJsYWNrIG9uIHdoaXRlIHJlbmRlcmluZyB3aGlsZSBsYWNraW5nCi0gICAqICAgZ2FtbWEgY29ycmVjdGlvbi4gIFRvIHByZXNlcnZlIGNvbG9yIG5ldXRyYWxpdHksIHdlaWdodHMgZm9yIGEgRklSNQotICAgKiAgIGZpbHRlciBzaG91bGQgYmUgY2hvc2VuIGFjY29yZGluZyB0byB0d28gZnJlZSBwYXJhbWV0ZXJzIGBhJyBhbmQgYGMnLAotICAgKiAgIGFuZCB0aGUgRklSIHdlaWdodHMgc2hvdWxkIGJlCi0gICAqCi0gICAqICAgewotICAgKiAgICAgW2EgLSBjLCBhICsgYywgMiAqIGEsIGEgKyBjLCBhIC0gY10gICAgLgotICAgKiAgIH0KLSAgICoKLSAgICogICBUaGlzIGZvcm11bGEgZ2VuZXJhdGVzIGVxdWFsIHdlaWdodHMgZm9yIGFsbCB0aGUgY29sb3IgcHJpbWFyaWVzCi0gICAqICAgYWNyb3NzIHRoZSBmaWx0ZXIga2VybmVsLCB3aGljaCBtYWtlcyBpdCBjb2xvcmxlc3MuICBPbmUgc3VnZ2VzdGVkCi0gICAqICAgc2V0IG9mIHdlaWdodHMgaXMKLSAgICoKLSAgICogICB7Ci0gICAqICAgICBbMHgxMCwgMHg1MCwgMHg2MCwgMHg1MCwgMHgxMF0gICAgLAotICAgKiAgIH0KLSAgICoKLSAgICogICB3aGVyZSBgYScgaGFzIHZhbHVlIDB4MzAgYW5kIGBiJyB2YWx1ZSAweDIwLiAgVGhlIHdlaWdodHMgaW4gZmlsdGVyCi0gICAqICAgbWF5IGhhdmUgYSBzdW0gbGFyZ2VyIHRoYW4gMHgxMDAsIHdoaWNoIGluY3JlYXNlcyBjb2xvcmF0aW9uIHNsaWdodGx5Ci0gICAqICAgYnV0IGFsc28gaW1wcm92ZXMgY29udHJhc3QuCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQGVudW06Ci0gICAqICAgRlRfTGNkRmlsdGVyCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIGxpc3Qgb2YgdmFsdWVzIHRvIGlkZW50aWZ5IHZhcmlvdXMgdHlwZXMgb2YgTENEIGZpbHRlcnMuCi0gICAqCi0gICAqIEB2YWx1ZXM6Ci0gICAqICAgRlRfTENEX0ZJTFRFUl9OT05FIDo6Ci0gICAqICAgICBEbyBub3QgcGVyZm9ybSBmaWx0ZXJpbmcuICBXaGVuIHVzZWQgd2l0aCBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMKLSAgICogICAgIHJlc3VsdHMgaW4gc29tZXRpbWVzIHNldmVyZSBjb2xvciBmcmluZ2VzLgotICAgKgotICAgKiAgIEZUX0xDRF9GSUxURVJfREVGQVVMVCA6OgotICAgKiAgICAgVGhlIGRlZmF1bHQgZmlsdGVyIHJlZHVjZXMgY29sb3IgZnJpbmdlcyBjb25zaWRlcmFibHksIGF0IHRoZSBjb3N0Ci0gICAqICAgICBvZiBhIHNsaWdodCBibHVycmluZXNzIGluIHRoZSBvdXRwdXQuCi0gICAqCi0gICAqICAgRlRfTENEX0ZJTFRFUl9MSUdIVCA6OgotICAgKiAgICAgVGhlIGxpZ2h0IGZpbHRlciBpcyBhIHZhcmlhbnQgdGhhdCBwcm9kdWNlcyBsZXNzIGJsdXJyaW5lc3MgYXQgdGhlCi0gICAqICAgICBjb3N0IG9mIHNsaWdodGx5IG1vcmUgY29sb3IgZnJpbmdlcyB0aGFuIHRoZSBkZWZhdWx0IG9uZS4gIEl0IG1pZ2h0Ci0gICAqICAgICBiZSBiZXR0ZXIsIGRlcGVuZGluZyBvbiB0YXN0ZSwgeW91ciBtb25pdG9yLCBvciB5b3VyIHBlcnNvbmFsIHZpc2lvbi4KLSAgICoKLSAgICogICBGVF9MQ0RfRklMVEVSX0xFR0FDWSA6OgotICAgKiAgICAgVGhpcyBmaWx0ZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9yaWdpbmFsIGxpYlhmdCBjb2xvciBmaWx0ZXIuICBJdAotICAgKiAgICAgcHJvdmlkZXMgaGlnaCBjb250cmFzdCBvdXRwdXQgYnV0IGNhbiBleGhpYml0IHJlYWxseSBiYWQgY29sb3IKLSAgICogICAgIGZyaW5nZXMgaWYgZ2x5cGhzIGFyZSBub3QgZXh0cmVtZWx5IHdlbGwgaGludGVkIHRvIHRoZSBwaXhlbCBncmlkLgotICAgKiAgICAgSW4gb3RoZXIgd29yZHMsIGl0IG9ubHkgd29ya3Mgd2VsbCBpZiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUKLSAgICogICAgIGludGVycHJldGVyIGlzIGVuYWJsZWQgKmFuZCogaGlnaC1xdWFsaXR5IGhpbnRlZCBmb250cyBhcmUgdXNlZC4KLSAgICoKLSAgICogICAgIFRoaXMgZmlsdGVyIGlzIG9ubHkgcHJvdmlkZWQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMsIGFuZCBtaWdodCBiZQotICAgKiAgICAgZGlzYWJsZWQgb3Igc3RheSB1bnN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLgotICAgKgotICAgKiBAc2luY2U6Ci0gICAqICAgMi4zLjAKLSAgICovCi0gIHR5cGVkZWYgZW51bSAgRlRfTGNkRmlsdGVyXwotICB7Ci0gICAgRlRfTENEX0ZJTFRFUl9OT05FICAgID0gMCwKLSAgICBGVF9MQ0RfRklMVEVSX0RFRkFVTFQgPSAxLAotICAgIEZUX0xDRF9GSUxURVJfTElHSFQgICA9IDIsCi0gICAgRlRfTENEX0ZJTFRFUl9MRUdBQ1kgID0gMTYsCi0KLSAgICBGVF9MQ0RfRklMVEVSX01BWCAgIC8qIGRvIG5vdCByZW1vdmUgKi8KLQotICB9IEZUX0xjZEZpbHRlcjsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAZnVuYzoKLSAgICogICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFwcGx5IGNvbG9yIGZpbHRlcmluZyB0byBMQ0QgZGVjaW1hdGVkCi0gICAqICAgYml0bWFwcywgbGlrZSB0aGUgb25lcyB1c2VkIHdoZW4gY2FsbGluZyBARlRfUmVuZGVyX0dseXBoIHdpdGgKLSAgICogICBARlRfUkVOREVSX01PREVfTENEIG9yIEBGVF9SRU5ERVJfTU9ERV9MQ0RfVi4KLSAgICoKLSAgICogQGlucHV0OgotICAgKiAgIGxpYnJhcnkgOjoKLSAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBpbnN0YW5jZS4KLSAgICoKLSAgICogICBmaWx0ZXIgOjoKLSAgICogICAgIFRoZSBmaWx0ZXIgdHlwZS4KLSAgICoKLSAgICogICAgIFlvdSBjYW4gdXNlIEBGVF9MQ0RfRklMVEVSX05PTkUgaGVyZSB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgb3IKLSAgICogICAgIEBGVF9MQ0RfRklMVEVSX0RFRkFVTFQgdG8gdXNlIGEgZGVmYXVsdCBmaWx0ZXIgdGhhdCBzaG91bGQgd29yawotICAgKiAgICAgd2VsbCBvbiBtb3N0IExDRCBzY3JlZW5zLgotICAgKgotICAgKiBAcmV0dXJuOgotICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCi0gICAqCi0gICAqIEBub3RlOgotICAgKiAgIFRoaXMgZmVhdHVyZSBpcyBhbHdheXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIENsaWVudHMgbXVzdCBtYWtlIGFuCi0gICAqICAgZXhwbGljaXQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggYSBgZmlsdGVyJyB2YWx1ZSBvdGhlciB0aGFuCi0gICAqICAgQEZUX0xDRF9GSUxURVJfTk9ORSBpbiBvcmRlciB0byBlbmFibGUgaXQuCi0gICAqCi0gICAqICAgRHVlIHRvICpQQVRFTlRTKiBjb3ZlcmluZyBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMgZnVuY3Rpb24gZG9lc24ndAotICAgKiAgIGRvIGFueXRoaW5nIGV4Y2VwdCByZXR1cm5pbmcgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaXMgbm90Ci0gICAqICAgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwKLSAgICogICBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS4KLSAgICoKLSAgICogICBUaGUgZmlsdGVyIGFmZmVjdHMgZ2x5cGggYml0bWFwcyByZW5kZXJlZCB0aHJvdWdoIEBGVF9SZW5kZXJfR2x5cGgsCi0gICAqICAgQEZUX091dGxpbmVfR2V0X0JpdG1hcCwgQEZUX0xvYWRfR2x5cGgsIGFuZCBARlRfTG9hZF9DaGFyLgotICAgKgotICAgKiAgIEl0IGRvZXMgX25vdF8gYWZmZWN0IHRoZSBvdXRwdXQgb2YgQEZUX091dGxpbmVfUmVuZGVyIGFuZAotICAgKiAgIEBGVF9PdXRsaW5lX0dldF9CaXRtYXAuCi0gICAqCi0gICAqICAgSWYgdGhpcyBmZWF0dXJlIGlzIGFjdGl2YXRlZCwgdGhlIGRpbWVuc2lvbnMgb2YgTENEIGdseXBoIGJpdG1hcHMgYXJlCi0gICAqICAgZWl0aGVyIGxhcmdlciBvciB0YWxsZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZwotICAgKiAgIG91dGxpbmUgd2l0aCByZWdhcmRzIHRvIHRoZSBwaXhlbCBncmlkLiAgRm9yIGV4YW1wbGUsIGZvcgotICAgKiAgIEBGVF9SRU5ERVJfTU9ERV9MQ0QsIHRoZSBmaWx0ZXIgYWRkcyB1cCB0byAzfnBpeGVscyB0byB0aGUgbGVmdCwgYW5kCi0gICAqICAgdXAgdG8gM35waXhlbHMgdG8gdGhlIHJpZ2h0LgotICAgKgotICAgKiAgIFRoZSBiaXRtYXAgb2Zmc2V0IHZhbHVlcyBhcmUgYWRqdXN0ZWQgY29ycmVjdGx5LCBzbyBjbGllbnRzIHNob3VsZG4ndAotICAgKiAgIG5lZWQgdG8gbW9kaWZ5IHRoZWlyIGxheW91dCBhbmQgZ2x5cGggcG9zaXRpb25pbmcgY29kZSB3aGVuIGVuYWJsaW5nCi0gICAqICAgdGhlIGZpbHRlci4KLSAgICoKLSAgICogQHNpbmNlOgotICAgKiAgIDIuMy4wCi0gICAqLwotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKLSAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xjZEZpbHRlciAgZmlsdGVyICk7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQGZ1bmM6Ci0gICAqICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBVc2UgdGhpcyBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZmlsdGVyIHdlaWdodHMgc2VsZWN0ZWQgYnkKLSAgICogICBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIuICBCeSBkZWZhdWx0LCBGcmVlVHlwZSB1c2VzIHRoZSBxdWludHVwbGUKLSAgICogICAoMHgwMCwgMHg1NSwgMHg1NiwgMHg1NSwgMHgwMCkgZm9yIEZUX0xDRF9GSUxURVJfTElHSFQsIGFuZCAoMHgxMCwKLSAgICogICAweDQwLCAweDcwLCAweDQwLCAweDEwKSBmb3IgRlRfTENEX0ZJTFRFUl9ERUZBVUxUIGFuZAotICAgKiAgIEZUX0xDRF9GSUxURVJfTEVHQUNZLgotICAgKgotICAgKiBAaW5wdXQ6Ci0gICAqICAgbGlicmFyeSA6OgotICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBsaWJyYXJ5IGluc3RhbmNlLgotICAgKgotICAgKiAgIHdlaWdodHMgOjoKLSAgICogICAgIEEgcG9pbnRlciB0byBhbiBhcnJheTsgdGhlIGZ1bmN0aW9uIGNvcGllcyB0aGUgZmlyc3QgZml2ZSBieXRlcyBhbmQKLSAgICogICAgIHVzZXMgdGhlbSB0byBzcGVjaWZ5IHRoZSBmaWx0ZXIgd2VpZ2h0cy4KLSAgICoKLSAgICogQHJldHVybjoKLSAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgotICAgKgotICAgKiBAbm90ZToKLSAgICogICBEdWUgdG8gKlBBVEVOVFMqIGNvdmVyaW5nIHN1YnBpeGVsIHJlbmRlcmluZywgdGhpcyBmdW5jdGlvbiBkb2Vzbid0Ci0gICAqICAgZG8gYW55dGhpbmcgZXhjZXB0IHJldHVybmluZyBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgaWYgdGhlCi0gICAqICAgY29uZmlndXJhdGlvbiBtYWNybyBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpcyBub3QKLSAgICogICBkZWZpbmVkIGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHdoaWNoIHNob3VsZCBjb3JyZXNwb25kIHRvIGFsbAotICAgKiAgIGRlZmF1bHQgYnVpbGRzIG9mIEZyZWVUeXBlLgotICAgKgotICAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIHRvIGhhdmUKLSAgICogICBhbnkgZWZmZWN0LgotICAgKgotICAgKiBAc2luY2U6Ci0gICAqICAgMi40LjAKLSAgICovCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQotICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMoIEZUX0xpYnJhcnkgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgICp3ZWlnaHRzICk7Ci0KLSAgLyogKi8KLQotCi1GVF9FTkRfSEVBREVSCi0KLSNlbmRpZiAvKiBfX0ZUX0xDRF9GSUxURVJfSF9fICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0dHRkcnYuaCBiL2luY2x1ZGUvZnR0dGRydi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTYwNDBiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZnR0dGRydi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0dHRkcnYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBUcnVlVHlwZSBkcml2ZXIgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpZm5kZWYgX19GVFRURFJWX0hfXwotI2RlZmluZSBfX0ZUVFREUlZfSF9fCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotCi0jaWZkZWYgRlJFRVRZUEVfSAotI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKLSNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgotI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCi0jZW5kaWYKLQotCi1GVF9CRUdJTl9IRUFERVIKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAc2VjdGlvbjoKLSAgICogICB0dF9kcml2ZXIKLSAgICoKLSAgICogQHRpdGxlOgotICAgKiAgIFRoZSBUcnVlVHlwZSBkcml2ZXIKLSAgICoKLSAgICogQGFic3RyYWN0OgotICAgKiAgIENvbnRyb2xsaW5nIHRoZSBUcnVlVHlwZSBkcml2ZXIgbW9kdWxlLgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgV2hpbGUgRnJlZVR5cGUncyBUcnVlVHlwZSBkcml2ZXIgZG9lc24ndCBleHBvc2UgQVBJIGZ1bmN0aW9ucyBieQotICAgKiAgIGl0c2VsZiwgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3VyIHdpdGggQEZUX1Byb3BlcnR5X1NldAotICAgKiAgIGFuZCBARlRfUHJvcGVydHlfR2V0LiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXMKLSAgICogICB0b2dldGhlciB3aXRoIHRoZSBuZWNlc3NhcnkgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzLgotICAgKgotICAgKiAgIFRoZSBUcnVlVHlwZSBkcml2ZXIncyBtb2R1bGUgbmFtZSBpcyBgdHJ1ZXR5cGUnLgotICAgKgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAcHJvcGVydHk6Ci0gICAqICAgaW50ZXJwcmV0ZXItdmVyc2lvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQ3VycmVudGx5LCB0d28gdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgcmVwcmVzZW50aW5nIHRoZSBieXRlY29kZQotICAgKiAgIGludGVycHJldGVyIHdpdGggYW5kIHdpdGhvdXQgc3VicGl4ZWwgaGludGluZyBzdXBwb3J0LAotICAgKiAgIHJlc3BlY3RpdmVseS4gIFRoZSBkZWZhdWx0IGlzIHN1YnBpeGVsIHN1cHBvcnQgaWYKLSAgICogICBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaXMgZGVmaW5lZCwgYW5kIG5vIHN1YnBpeGVsCi0gICAqICAgc3VwcG9ydCBvdGhlcndpc2UgKHNpbmNlIGl0IGlzbid0IGF2YWlsYWJsZSB0aGVuKS4KLSAgICoKLSAgICogICBJZiBzdWJwaXhlbCBoaW50aW5nIGlzIG9uLCBtYW55IFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBiZWhhdmUKLSAgICogICBkaWZmZXJlbnRseSBjb21wYXJlZCB0byBCL1cgb3IgZ3JheXNjYWxlIHJlbmRlcmluZyAoZXhjZXB0IGlmIGBuYXRpdmUKLSAgICogICBDbGVhclR5cGUnIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb250KS4gIFRoZSBtYWluIGlkZWEgaXMgdG8gcmVuZGVyIGF0IGEKLSAgICogICBtdWNoIGluY3JlYXNlZCBob3Jpem9udGFsIHJlc29sdXRpb24sIHRoZW4gc2FtcGxpbmcgZG93biB0aGUgY3JlYXRlZAotICAgKiAgIG91dHB1dCB0byBzdWJwaXhlbCBwcmVjaXNpb24uICBIb3dldmVyLCBtYW55IG9sZGVyIGZvbnRzIGFyZSBub3QKLSAgICogICBzdWl0ZWQgdG8gdGhpcyBhbmQgbXVzdCBiZSBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieSBhcHBseWluZwotICAgKiAgIChoYXJkY29kZWQpIGZvbnQtc3BlY2lmaWMgdHdlYWtzLgotICAgKgotICAgKiAgIERldGFpbHMgb24gc3VicGl4ZWwgaGludGluZyBhbmQgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHR3ZWFrcyBjYW4gYmUKLSAgICogICBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzIHdoaXRlcGFwZXIgYXQKLSAgICogICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgnLgotICAgKgotICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWN0aXZhdGUgc3VicGl4ZWwKLSAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgotICAgKgotICAgKiAgIHsKLSAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0gICAqICAgICBGVF9GYWNlICAgICBmYWNlOwotICAgKiAgICAgRlRfVUludCAgICAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7Ci0gICAqCi0gICAqCi0gICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOwotICAgKgotICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHJ1ZXR5cGUiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJwcmV0ZXItdmVyc2lvbiIsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcnByZXRlcl92ZXJzaW9uICk7Ci0gICAqICAgfQotICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgotICAgKgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAZW51bToKLSAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGludGVycHJldGVyLXZlcnNpb24gcHJvcGVydHkgdG8KLSAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBUcnVldHlwZSBmb250cy4KLSAgICoKLSAgICogICBUaGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgY29uc3RhbnQgbmFtZXMgcmVwcmVzZW50cyB0aGUgdmVyc2lvbgotICAgKiAgIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgKgotICAgKiBAdmFsdWVzOgotICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgOjoKLSAgICogICAgIFZlcnNpb25+MzUgY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuNyBhcyB1c2VkIGUuZy4gaW4KLSAgICogICAgIFdpbmRvd3N+OTg7IG9ubHkgZ3JheXNjYWxlIGFuZCBCL1cgcmFzdGVyaXppbmcgaXMgc3VwcG9ydGVkLgotICAgKgotICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggOjoKLSAgICogICAgIFZlcnNpb25+MzggY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuOTsgaXQgaXMgcm91Z2hseQotICAgKiAgICAgZXF1aXZhbGVudCB0byB0aGUgaGludGluZyBwcm92aWRlZCBieSBEaXJlY3RXcml0ZSBDbGVhclR5cGUgKGFzCi0gICAqICAgICBjYW4gYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXJ+OSBydW5uaW5nIG9uCi0gICAqICAgICBXaW5kb3dzfjcpLgotICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCi0gICAqICAgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuICBJdCBkb2VzICpub3QqIGNvbnRyb2wgaG93IGdseXBoCi0gICAqICAgZ2V0IHJhc3Rlcml6ZWQhICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCBjb250cm9sIHN1YnBpeGVsIGNvbG9yCi0gICAqICAgZmlsdGVyaW5nLgotICAgKgotICAgKiAgIElmIEZyZWVUeXBlIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9uCi0gICAqICAgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HLCBzZWxlY3RpbmcgdmVyc2lvbn4zOCBjYXVzZXMgYW4KLSAgICogICBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgZXJyb3IuCi0gICAqCi0gICAqICAgRGVwZW5kaW5nIG9uIHRoZSBncmFwaGljcyBmcmFtZXdvcmssIE1pY3Jvc29mdCB1c2VzIGRpZmZlcmVudAotICAgKiAgIGJ5dGVjb2RlIGFuZCByZW5kZXJpbmcgZW5naW5lcy4gIEFzIGEgY29uc2VxdWVuY2UsIHRoZSB2ZXJzaW9uCi0gICAqICAgbnVtYmVycyByZXR1cm5lZCBieSBhIGNhbGwgdG8gdGhlIGBHRVRJTkZPJyBieXRlY29kZSBpbnN0cnVjdGlvbiBhcmUKLSAgICogICBtb3JlIGNvbnZvbHV0ZWQgdGhhbiBkZXNpcmVkLgotICAgKgotICAgKiAgIEhlcmUgYXJlIHR3byB0YWJsZXMgdGhhdCB0cnkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwb3NzaWJsZQotICAgKiAgIHZhbHVlcyBmb3IgdGhlIE1TIHJhc3Rlcml6ZXIgZW5naW5lLCB0b2dldGhlciB3aXRoIHRoZSBhZGRpdGlvbmFsCi0gICAqICAgZmVhdHVyZXMgaW50cm9kdWNlZCBieSBpdC4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICBHRVRJTkZPIGZyYW1ld29yayAgICAgICAgICAgICAgIHZlcnNpb24gZmVhdHVyZQotICAgKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgKiAgICAgICAgIDMgICBHREkgKFdpbiAzLjEpLCAgICAgICAgICAgIHYxLjAgIDE2LWJpdCwgZmlyc3QgdmVyc2lvbgotICAgKiAgICAgICAgICAgICBUcnVlSW1hZ2UKLSAgICogICAgICAgIDMzICAgR0RJIChXaW4gTlQgMy4xKSwgICAgICAgICB2MS41ICAzMi1iaXQKLSAgICogICAgICAgICAgICAgSFAgTGFzZXJqZXQKLSAgICogICAgICAgIDM0ICAgR0RJIChXaW4gOTUpICAgICAgICAgICAgICB2MS42ICBmb250IHNtb290aGluZywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU0NBTlRZUEUgb3Bjb2RlCi0gICAqICAgICAgICAzNSAgIEdESSAoV2luIDk4LzIwMDApICAgICAgICAgdjEuNyAgKFVOKVNDQUxFRF9DT01QT05FTlRfT0ZGU0VUCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzIGluIGNvbXBvc2l0ZSBnbHlwaHMKLSAgICogICAgICAgIDM2ICAgTUdESSAoV2luIENFIDIpICAgICAgICAgICB2MS42KyBjbGFzc2ljIENsZWFyVHlwZQotICAgKiAgICAgICAgMzcgICBHREkgKFhQIGFuZCBsYXRlciksICAgICAgIHYxLjggIENsZWFyVHlwZQotICAgKiAgICAgICAgICAgICBHREkrIG9sZCAoYmVmb3JlIFZpc3RhKQotICAgKiAgICAgICAgMzggICBHREkrIG9sZCAoVmlzdGEsIFdpbiA3KSwgIHYxLjkgIHN1YnBpeGVsIENsZWFyVHlwZSwKLSAgICogICAgICAgICAgICAgV1BGICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZLWRpcmVjdGlvbiBDbGVhclR5cGUsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBlcnJvciBjaGVja2luZwotICAgKiAgICAgICAgMzkgICBEV3JpdGUgKGJlZm9yZSBXaW4gOCkgICAgIHYyLjAgIHN1YnBpeGVsIENsZWFyVHlwZSBmbGFncwotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gR0VUSU5GTyBvcGNvZGUsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnIGZpeGVzCi0gICAqICAgICAgICA0MCAgIEdESSsgKGFmdGVyIFdpbiA3KSwgICAgICAgdjIuMSAgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlIGZsYWcKLSAgICogICAgICAgICAgICAgRFdyaXRlIChXaW4gOCkgICAgICAgICAgICAgICAgICAgIGluIEdFVElORk8gb3Bjb2RlLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXkgQ2xlYXJUeXBlCi0gICAqICAgfQotICAgKgotICAgKiAgIFRoZSBgdmVyc2lvbicgZmllbGQgZ2l2ZXMgYSByb3VnaCBvcmllbnRhdGlvbiBvbmx5LCBzaW5jZSBzb21lCi0gICAqICAgYXBwbGljYXRpb25zIHByb3ZpZGVkIGNlcnRhaW4gZmVhdHVyZXMgbXVjaCBlYXJsaWVyIChhcyBhbiBleGFtcGxlLAotICAgKiAgIE1pY3Jvc29mdCBSZWFkZXIgdXNlZCBzdWJwaXhlbCBhbmQgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlIGFscmVhZHkgaW4KLSAgICogICBXaW5kb3dzIDIwMDApLiAgU2ltaWxhcmx5LCB1cGRhdGVzIHRvIGEgZ2l2ZW4gZnJhbWV3b3JrIG1pZ2h0IGluY2x1ZGUKLSAgICogICBpbXByb3ZlZCBoaW50aW5nIHN1cHBvcnQuCi0gICAqCi0gICAqICAgewotICAgKiAgICAgIHZlcnNpb24gICBzYW1wbGluZyAgICAgICAgICByZW5kZXJpbmcgICAgICAgIGNvbW1lbnQKLSAgICogICAgICAgICAgICAgICB4ICAgICAgICB5ICAgICAgIHggICAgICAgICAgIHkKLSAgICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAqICAgICAgIHYxLjAgICBub3JtYWwgIG5vcm1hbCAgQi9XICAgICAgICAgICBCL1cgICAgYmktbGV2ZWwKLSAgICogICAgICAgdjEuNiAgIGhpZ2ggICAgaGlnaCAgICBncmF5ICAgICAgICAgIGdyYXkgICBncmF5c2NhbGUKLSAgICogICAgICAgdjEuOCAgIGhpZ2ggICAgbm9ybWFsICBjb2xvci1maWx0ZXIgIEIvVyAgICAoR0RJKSBDbGVhclR5cGUKLSAgICogICAgICAgdjEuOSAgIGhpZ2ggICAgaGlnaCAgICBjb2xvci1maWx0ZXIgIGdyYXkgICBDb2xvciBDbGVhclR5cGUKLSAgICogICAgICAgdjIuMSAgIGhpZ2ggICAgbm9ybWFsICBncmF5ICAgICAgICAgIEIvVyAgICBHcmF5IENsZWFyVHlwZQotICAgKiAgICAgICB2Mi4xICAgaGlnaCAgICBoaWdoICAgIGdyYXkgICAgICAgICAgZ3JheSAgIEdyYXkgQ2xlYXJUeXBlCi0gICAqICAgfQotICAgKgotICAgKiAgIENvbG9yIGFuZCBHcmF5IENsZWFyVHlwZSBhcmUgdGhlIHR3byBhdmFpbGFibGUgdmFyaWFudHMgb2YKLSAgICogICBgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlJywgbWVhbmluZyBncmF5c2NhbGUgcmFzdGVyaXphdGlvbiBhbG9uZyB0aGUKLSAgICogICBZLWRpcmVjdGlvbjsgdGhlIG5hbWUgdXNlZCBpbiB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcwotICAgKiAgIGZlYXR1cmUgaXMgYHN5bW1ldHJpYyBzbW9vdGhpbmcnLiAgYENsYXNzaWMgQ2xlYXJUeXBlJyBpcyB0aGUKLSAgICogICBvcmlnaW5hbCBhbGdvcml0aG0gdXNlZCBiZWZvcmUgaW50cm9kdWNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIGluCi0gICAqICAgV2luflhQLiAgQW5vdGhlciBuYW1lIGZvciB2MS42J3MgZ3JheXNjYWxlIHJlbmRlcmluZyBpcyBgZm9udAotICAgKiAgIHNtb290aGluZycsIGFuZCBgQ29sb3IgQ2xlYXJUeXBlJyBpcyBzb21ldGltZXMgYWxzbyBjYWxsZWQgYERXcml0ZQotICAgKiAgIENsZWFyVHlwZScuICBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdG9kYXkncyBDb2xvciBDbGVhclR5cGUgYW5kIHRoZQotICAgKiAgIGVhcmxpZXIgQ2xlYXJUeXBlIHZhcmlhbnQgd2l0aCBCL1cgcmVuZGVyaW5nIGFsb25nIHRoZSB2ZXJ0aWNhbCBheGlzLAotICAgKiAgIHRoZSBsYXR0ZXIgaXMgc29tZXRpbWVzIGNhbGxlZCBgR0RJIENsZWFyVHlwZScuCi0gICAqCi0gICAqICAgYE5vcm1hbCcgYW5kIGBoaWdoJyBzYW1wbGluZyBkZXNjcmliZSB0aGUgKHZpcnR1YWwpIHJlc29sdXRpb24gdG8KLSAgICogICBhY2Nlc3MgdGhlIHJhc3Rlcml6ZWQgb3V0bGluZSBhZnRlciB0aGUgaGludGluZyBwcm9jZXNzLiAgYE5vcm1hbCcKLSAgICogICBtZWFucyAxIHNhbXBsZSBwZXIgZ3JpZCBsaW5lIChpLmUuLCBCL1cpLiAgSW4gdGhlIGN1cnJlbnQgTWljcm9zb2Z0Ci0gICAqICAgaW1wbGVtZW50YXRpb24sIGBoaWdoJyBtZWFucyBhbiBleHRyYSB2aXJ0dWFsIHJlc29sdXRpb24gb2YgMTZ4MTYgKG9yCi0gICAqICAgMTZ4MSkgZ3JpZCBsaW5lcyBwZXIgcGl4ZWwgZm9yIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBsaWtlIGBNSVJQJy4KLSAgICogICBBZnRlciBoaW50aW5nLCB0aGVzZSAxNiBncmlkIGxpbmVzIGFyZSBtYXBwZWQgdG8gNng1IChvciA2eDEpIGdyaWQKLSAgICogICBsaW5lcyBmb3IgY29sb3IgZmlsdGVyaW5nIGlmIENvbG9yIENsZWFyVHlwZSBpcyBhY3RpdmF0ZWQuCi0gICAqCi0gICAqICAgTm90ZSB0aGF0IGBHcmF5IENsZWFyVHlwZScgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdjEuNidzCi0gICAqICAgZ3JheXNjYWxlIHJlbmRlcmluZy4gIEhvd2V2ZXIsIHRoZSBHRVRJTkZPIGluc3RydWN0aW9uIGhhbmRsZXMgaXQKLSAgICogICBkaWZmZXJlbnRseTogdjEuNiByZXR1cm5zIGJpdH4xMiAoaGludGluZyBmb3IgZ3JheXNjYWxlKSwgd2hpbGUgdjIuMQotICAgKiAgIHJldHVybnMgYml0c34xMyAoaGludGluZyBmb3IgQ2xlYXJUeXBlKSwgMTggKHN5bW1ldHJpY2FsIHNtb290aGluZyksCi0gICAqICAgYW5kfjE5IChHcmF5IENsZWFyVHlwZSkuICBBbHNvLCB0aGlzIG1vZGUgcmVzcGVjdHMgYml0cyAyIGFuZH4zIGZvcgotICAgKiAgIHRoZSB2ZXJzaW9ufjEgZ2FzcCB0YWJsZSBleGNsdXNpdmVseSAobGlrZSBDb2xvciBDbGVhclR5cGUpLCB3aGlsZQotICAgKiAgIHYxLjYgb25seSByZXNwZWN0cyB0aGUgdmFsdWVzIG9mIHZlcnNpb25+MCAoYml0cyAwIGFuZH4xKS4KLSAgICoKLSAgICogICBGcmVlVHlwZSBkb2Vzbid0IHByb3ZpZGUgYWxsIGNhcGFiaWxpdGllcyBvZiB0aGUgbW9zdCByZWNlbnQKLSAgICogICBDbGVhclR5cGUgaW5jYXJuYXRpb24sIHRodXMgd2UgaWRlbnRpZnkgb3VyIHN1YnBpeGVsIHN1cHBvcnQgYXMKLSAgICogICB2ZXJzaW9ufjM4LgotICAgKgotICAgKi8KLSNkZWZpbmUgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSAgMzUKLSNkZWZpbmUgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCAgMzgKLQotIC8qICovCi0KLQotRlRfRU5EX0hFQURFUgotCi0KLSNlbmRpZiAvKiBfX0ZUVFREUlZfSF9fICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jIGIvc3JjL2F1dG9maXQvYWZhbmdsZXMuYwppbmRleCAxYjFlYjMxLi5iODU2ZTU3IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jCisrKyBiL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBSb3V0aW5lcyB1c2VkIHRvIGNvbXB1dGUgdmVjdG9yIGFuZ2xlcyB3aXRoIGxpbWl0ZWQgYWNjdXJhY3kgICAgICAgICAqLwogLyogICAgYW5kIHZlcnkgaGlnaCBzcGVlZC4gIEl0IGFsc28gY29udGFpbnMgc29ydGluZyByb3V0aW5lcyAoYm9keSkuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5jIGIvc3JjL2F1dG9maXQvYWZibHVlLmMKaW5kZXggZTJiMjQ1MS4uNzcxOWMwMiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmMKKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmMKQEAgLTcsNyArNyw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI2LDEwNyArMjYsMjQ5IEBACiAgIGFmX2JsdWVfc3RyaW5nc1tdID0KICAgewogICAgIC8qICovCi0gICAgJ1x4RDgnLCAnXHhBNycsICdceEQ4JywgJ1x4QTUnLCAnXHhEOScsICdceDg0JywgJ1x4RDknLCAnXHg4MycsICdceEQ4JywgJ1x4QjcnLCAnXHhEOCcsICdceEI4JywgIC8qINinINilINmEINmDINi3INi4ICovCisgICAgJ1x4RDgnLCAnXHhBNycsICcgJywgJ1x4RDgnLCAnXHhBNScsICcgJywgJ1x4RDknLCAnXHg4NCcsICcgJywgJ1x4RDknLCAnXHg4MycsICcgJywgJ1x4RDgnLCAnXHhCNycsICcgJywgJ1x4RDgnLCAnXHhCOCcsICAvKiDYpyDYpSDZhCDZgyDYtyDYuCAqLwogICAgICdcMCcsCi0gICAgJ1x4RDgnLCAnXHhBQScsICdceEQ4JywgJ1x4QUInLCAnXHhEOCcsICdceEI3JywgJ1x4RDgnLCAnXHhCOCcsICdceEQ5JywgJ1x4ODMnLCAgLyog2Kog2Ksg2Lcg2Lgg2YMgKi8KKyAgICAnXHhEOCcsICdceEFBJywgJyAnLCAnXHhEOCcsICdceEFCJywgJyAnLCAnXHhEOCcsICdceEI3JywgJyAnLCAnXHhEOCcsICdceEI4JywgJyAnLCAnXHhEOScsICdceDgzJywgIC8qINiqINirINi3INi4INmDICovCiAgICAgJ1wwJywKLSAgICAnXHhEMCcsICdceDkxJywgJ1x4RDAnLCAnXHg5MicsICdceEQwJywgJ1x4OTUnLCAnXHhEMCcsICdceDlGJywgJ1x4RDAnLCAnXHg5NycsICdceEQwJywgJ1x4OUUnLCAnXHhEMCcsICdceEExJywgJ1x4RDAnLCAnXHhBRCcsICAvKiDQkdCS0JXQn9CX0J7QodCtICovCisgICAgJ1x4RDknLCAnXHg4MCcsICAvKiDZgCAqLwogICAgICdcMCcsCi0gICAgJ1x4RDAnLCAnXHg5MScsICdceEQwJywgJ1x4OTInLCAnXHhEMCcsICdceDk1JywgJ1x4RDAnLCAnXHhBOCcsICdceEQwJywgJ1x4OTcnLCAnXHhEMCcsICdceDlFJywgJ1x4RDAnLCAnXHhBMScsICdceEQwJywgJ1x4QUQnLCAgLyog0JHQktCV0KjQl9Ce0KHQrSAqLworICAgICdceEQ0JywgJ1x4QjEnLCAnICcsICdceEQ1JywgJ1x4ODQnLCAnICcsICdceEQ1JywgJ1x4OTInLCAnICcsICdceEQ1JywgJ1x4OEQnLCAnICcsICdceEQ0JywgJ1x4QjInLCAnICcsICdceEQ0JywgJ1x4QjMnLCAnICcsICdceEQ0JywgJ1x4QjQnLCAnICcsICdceEQ1JywgJ1x4OTUnLCAgLyog1LEg1YQg1ZIg1Y0g1LIg1LMg1LQg1ZUgKi8KICAgICAnXDAnLAotICAgICdceEQxJywgJ1x4ODUnLCAnXHhEMCcsICdceEJGJywgJ1x4RDAnLCAnXHhCRCcsICdceEQxJywgJ1x4ODgnLCAnXHhEMCcsICdceEI1JywgJ1x4RDAnLCAnXHhCNycsICdceEQwJywgJ1x4QkUnLCAnXHhEMScsICdceDgxJywgIC8qINGF0L/QvdGI0LXQt9C+0YEgKi8KKyAgICAnXHhENScsICdceDkyJywgJyAnLCAnXHhENScsICdceDg4JywgJyAnLCAnXHhENCcsICdceEI0JywgJyAnLCAnXHhENScsICdceDgzJywgJyAnLCAnXHhENScsICdceDg3JywgJyAnLCAnXHhENScsICdceDhEJywgJyAnLCAnXHhENScsICdceDhGJywgJyAnLCAnXHhENScsICdceDk1JywgIC8qINWSINWIINS0INWDINWHINWNINWPINWVICovCiAgICAgJ1wwJywKLSAgICAnXHhEMScsICdceDgwJywgJ1x4RDEnLCAnXHg4MycsICdceEQxJywgJ1x4ODQnLCAgLyog0YDRg9GEICovCisgICAgJ1x4RDUnLCAnXHhBNScsICcgJywgJ1x4RDUnLCAnXHhBNycsICcgJywgJ1x4RDUnLCAnXHhBQicsICcgJywgJ1x4RDUnLCAnXHhCNCcsICcgJywgJ1x4RDUnLCAnXHhCRScsICcgJywgJ1x4RDYnLCAnXHg4NicsICcgJywgJ1x4RDUnLCAnXHhCMycsICAvKiDVpSDVpyDVqyDVtCDVviDWhiDVsyAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhBNCcsICdceDk1JywgJ1x4RTAnLCAnXHhBNCcsICdceEFFJywgJ1x4RTAnLCAnXHhBNCcsICdceDg1JywgJ1x4RTAnLCAnXHhBNCcsICdceDg2JywgJ1x4RTAnLCAnXHhBNCcsICdceEE1JywgJ1x4RTAnLCAnXHhBNCcsICdceEE3JywgJ1x4RTAnLCAnXHhBNCcsICdceEFEJywgJ1x4RTAnLCAnXHhBNCcsICdceEI2JywgIC8qIOCklSDgpK4g4KSFIOCkhiDgpKUg4KSnIOCkrSDgpLYgKi8KKyAgICAnXHhENScsICdceEExJywgJyAnLCAnXHhENScsICdceEI1JywgJyAnLCAnXHhENicsICdceDgyJywgJyAnLCAnXHhENScsICdceEJEJywgJyAnLCAnXHhENScsICdceEEzJywgJyAnLCAnXHhENScsICdceEI3JywgJyAnLCAnXHhENicsICdceDgwJywgJyAnLCAnXHhENicsICdceDg1JywgIC8qINWhINW1INaCINW9INWjINW3INaAINaFICovCiAgICAgJ1wwJywKLSAgICAnXHhFMCcsICdceEE0JywgJ1x4ODgnLCAnXHhFMCcsICdceEE0JywgJ1x4OTAnLCAnXHhFMCcsICdceEE0JywgJ1x4OTMnLCAnXHhFMCcsICdceEE0JywgJ1x4OTQnLCAnXHhFMCcsICdceEE0JywgJ1x4QkYnLCAnXHhFMCcsICdceEE1JywgJ1x4ODAnLCAnXHhFMCcsICdceEE1JywgJ1x4OEInLCAnXHhFMCcsICdceEE1JywgJ1x4OEMnLCAgLyog4KSIIOCkkCDgpJMg4KSUIOCkvyDgpYAg4KWLIOCljCAqLworICAgICdceEQ1JywgJ1x4QjAnLCAnICcsICdceEQ1JywgJ1x4QjgnLCAnICcsICdceEQ1JywgJ1x4QjMnLCAnICcsICdceEQ1JywgJ1x4QTEnLCAnICcsICdceEQ1JywgJ1x4QTUnLCAnICcsICdceEQ1JywgJ1x4QUUnLCAnICcsICdceEQ1JywgJ1x4QkQnLCAnICcsICdceEQ2JywgJ1x4ODUnLCAgLyog1bAg1bgg1bMg1aEg1aUg1a4g1b0g1oUgKi8KICAgICAnXDAnLAotICAgICdceEUwJywgJ1x4QTQnLCAnXHg5NScsICdceEUwJywgJ1x4QTQnLCAnXHhBRScsICdceEUwJywgJ1x4QTQnLCAnXHg4NScsICdceEUwJywgJ1x4QTQnLCAnXHg4NicsICdceEUwJywgJ1x4QTQnLCAnXHhBNScsICdceEUwJywgJ1x4QTQnLCAnXHhBNycsICdceEUwJywgJ1x4QTQnLCAnXHhBRCcsICdceEUwJywgJ1x4QTQnLCAnXHhCNicsICAvKiDgpJUg4KSuIOCkhSDgpIYg4KSlIOCkpyDgpK0g4KS2ICovCisgICAgJ1x4RDUnLCAnXHhBMicsICcgJywgJ1x4RDUnLCAnXHhBOCcsICcgJywgJ1x4RDUnLCAnXHhBQicsICcgJywgJ1x4RDUnLCAnXHhBQycsICcgJywgJ1x4RDUnLCAnXHhCMicsICcgJywgJ1x4RDUnLCAnXHhCQScsICcgJywgJ1x4RDYnLCAnXHg4MycsICcgJywgJ1x4RDYnLCAnXHg4MScsICAvKiDVoiDVqCDVqyDVrCDVsiDVuiDWgyDWgSAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhBNScsICdceDgxJywgJ1x4RTAnLCAnXHhBNScsICdceDgzJywgIC8qIOClgSDgpYMgKi8KKyAgICAnXHhFMCcsICdceEE2JywgJ1x4ODUnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBMScsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEE0JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTgnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBQycsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEFEJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QjInLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHg5NScsICAvKiDgpoUg4KahIOCmpCDgpqgg4KasIOCmrSDgprIg4KaVICovCiAgICAgJ1wwJywKLSAgICAnXHhDRScsICdceDkzJywgJ1x4Q0UnLCAnXHg5MicsICdceENFJywgJ1x4OTUnLCAnXHhDRScsICdceDk2JywgJ1x4Q0UnLCAnXHg5OCcsICdceENFJywgJ1x4OUYnLCAnXHhDRScsICdceEE5JywgIC8qIM6TzpLOlc6WzpjOn86pICovCisgICAgJ1x4RTAnLCAnXHhBNicsICdceDg3JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEE3JywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QTcnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBNycsICdceDk3JywgIC8qIOCmhyDgpp8g4KagIOCmvyDgp4Ag4KeIIOCnlyAqLwogICAgICdcMCcsCi0gICAgJ1x4Q0UnLCAnXHg5MicsICdceENFJywgJ1x4OTQnLCAnXHhDRScsICdceDk2JywgJ1x4Q0UnLCAnXHg5RScsICdceENFJywgJ1x4OTgnLCAnXHhDRScsICdceDlGJywgIC8qIM6SzpTOls6ezpjOnyAqLworICAgICdceEUwJywgJ1x4QTYnLCAnXHg5MycsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceDhGJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTEnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBNCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QUMnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhCMicsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceDk1JywgIC8qIOCmkyDgpo8g4KahIOCmpCDgpqgg4KasIOCmsiDgppUgKi8KICAgICAnXDAnLAotICAgICdceENFJywgJ1x4QjInLCAnXHhDRScsICdceEI4JywgJ1x4Q0UnLCAnXHhCNCcsICdceENFJywgJ1x4QjYnLCAnXHhDRScsICdceEJCJywgJ1x4Q0UnLCAnXHhCRScsICAvKiDOss64zrTOts67zr4gKi8KKyAgICAnXHhFMScsICdceDhGJywgJ1x4ODYnLCAnICcsICdceEUxJywgJ1x4OEUnLCAnXHhCQicsICcgJywgJ1x4RTEnLCAnXHg4RScsICdceEFDJywgJyAnLCAnXHhFMScsICdceDhGJywgJ1x4ODMnLCAnICcsICdceEUxJywgJ1x4OEUnLCAnXHhBNCcsICcgJywgJ1x4RTEnLCAnXHg4RicsICdceEEzJywgJyAnLCAnXHhFMScsICdceDhFJywgJ1x4QTYnLCAnICcsICdceEUxJywgJ1x4OEYnLCAnXHg5NScsICAvKiDhj4Yg4Y67IOGOrCDhj4Mg4Y6kIOGPoyDhjqYg4Y+VICovCiAgICAgJ1wwJywKLSAgICAnXHhDRScsICdceEIxJywgJ1x4Q0UnLCAnXHhCNScsICdceENFJywgJ1x4QjknLCAnXHhDRScsICdceEJGJywgJ1x4Q0YnLCAnXHg4MCcsICdceENGJywgJ1x4ODMnLCAnXHhDRicsICdceDg0JywgJ1x4Q0YnLCAnXHg4OScsICAvKiDOsc61zrnOv8+Az4PPhM+JICovCisgICAgJ1x4RUEnLCAnXHhBRScsICdceDkyJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4QTQnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHhCNicsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEI0JywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QkUnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHg5NycsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceDlEJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4QkYnLCAgLyog6q6SIOqupCDqrrYg6q20IOqtviDqrpcg6q6dIOquvyAqLwogICAgICdcMCcsCi0gICAgJ1x4Q0UnLCAnXHhCMicsICdceENFJywgJ1x4QjMnLCAnXHhDRScsICdceEI3JywgJ1x4Q0UnLCAnXHhCQycsICdceENGJywgJ1x4ODEnLCAnXHhDRicsICdceDg2JywgJ1x4Q0YnLCAnXHg4NycsICdceENGJywgJ1x4ODgnLCAgLyogzrLOs863zrzPgc+Gz4fPiCAqLworICAgICdceEVBJywgJ1x4QUUnLCAnXHg5NicsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEJDJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4OTMnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHhBMCcsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceEIzJywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QjYnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHhBNScsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceEJCJywgIC8qIOquliDqrbwg6q6TIOquoCDqrrMg6q22IOqupSDqrrsgKi8KICAgICAnXDAnLAotICAgICdceEQ3JywgJ1x4OTEnLCAnXHhENycsICdceDkzJywgJ1x4RDcnLCAnXHg5NCcsICdceEQ3JywgJ1x4OTcnLCAnXHhENycsICdceDlBJywgJ1x4RDcnLCAnXHg5QicsICdceEQ3JywgJ1x4OUQnLCAnXHhENycsICdceEExJywgIC8qINeR15PXlNeX15rXm9ed16EgKi8KKyAgICAnXHhFMScsICdceDhGJywgJ1x4QjgnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHg5MCcsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEI5JywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QkInLCAgLyog4Y+4IOqukCDqrbkg6q27ICovCiAgICAgJ1wwJywKLSAgICAnXHhENycsICdceDkxJywgJ1x4RDcnLCAnXHg5OCcsICdceEQ3JywgJ1x4OUInLCAnXHhENycsICdceDlEJywgJ1x4RDcnLCAnXHhBMScsICdceEQ3JywgJ1x4QTYnLCAgLyog15HXmNeb153XodemICovCisgICAgJ1x4RDAnLCAnXHg5MScsICcgJywgJ1x4RDAnLCAnXHg5MicsICcgJywgJ1x4RDAnLCAnXHg5NScsICcgJywgJ1x4RDAnLCAnXHg5RicsICcgJywgJ1x4RDAnLCAnXHg5NycsICcgJywgJ1x4RDAnLCAnXHg5RScsICcgJywgJ1x4RDAnLCAnXHhBMScsICcgJywgJ1x4RDAnLCAnXHhBRCcsICAvKiDQkSDQkiDQlSDQnyDQlyDQniDQoSDQrSAqLwogICAgICdcMCcsCi0gICAgJ1x4RDcnLCAnXHhBNycsICdceEQ3JywgJ1x4OUEnLCAnXHhENycsICdceDlGJywgJ1x4RDcnLCAnXHhBMycsICdceEQ3JywgJ1x4QTUnLCAgLyog16fXmtef16PXpSAqLworICAgICdceEQwJywgJ1x4OTEnLCAnICcsICdceEQwJywgJ1x4OTInLCAnICcsICdceEQwJywgJ1x4OTUnLCAnICcsICdceEQwJywgJ1x4QTgnLCAnICcsICdceEQwJywgJ1x4OTcnLCAnICcsICdceEQwJywgJ1x4OUUnLCAnICcsICdceEQwJywgJ1x4QTEnLCAnICcsICdceEQwJywgJ1x4QUQnLCAgLyog0JEg0JIg0JUg0Kgg0Jcg0J4g0KEg0K0gKi8KICAgICAnXDAnLAotICAgICdUJywgJ0gnLCAnRScsICdaJywgJ08nLCAnQycsICdRJywgJ1MnLCAgLyogVEhFWk9DUVMgKi8KKyAgICAnXHhEMScsICdceDg1JywgJyAnLCAnXHhEMCcsICdceEJGJywgJyAnLCAnXHhEMCcsICdceEJEJywgJyAnLCAnXHhEMScsICdceDg4JywgJyAnLCAnXHhEMCcsICdceEI1JywgJyAnLCAnXHhEMCcsICdceEI3JywgJyAnLCAnXHhEMCcsICdceEJFJywgJyAnLCAnXHhEMScsICdceDgxJywgIC8qINGFINC/INC9INGIINC1INC3INC+INGBICovCiAgICAgJ1wwJywKLSAgICAnSCcsICdFJywgJ1onLCAnTCcsICdPJywgJ0MnLCAnVScsICdTJywgIC8qIEhFWkxPQ1VTICovCisgICAgJ1x4RDEnLCAnXHg4MCcsICcgJywgJ1x4RDEnLCAnXHg4MycsICcgJywgJ1x4RDEnLCAnXHg4NCcsICAvKiDRgCDRgyDRhCAqLwogICAgICdcMCcsCi0gICAgJ2YnLCAnaScsICdqJywgJ2snLCAnZCcsICdiJywgJ2gnLCAgLyogZmlqa2RiaCAqLworICAgICdceEUwJywgJ1x4QTQnLCAnXHg5NScsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEFFJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4ODUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg4NicsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEE1JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHhBRCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEI2JywgIC8qIOCklSDgpK4g4KSFIOCkhiDgpKUg4KSnIOCkrSDgpLYgKi8KICAgICAnXDAnLAotICAgICd4JywgJ3onLCAncicsICdvJywgJ2UnLCAncycsICdjJywgIC8qIHh6cm9lc2MgKi8KKyAgICAnXHhFMCcsICdceEE0JywgJ1x4ODgnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg5MCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceDkzJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4OTQnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHhCRicsICcgJywgJ1x4RTAnLCAnXHhBNScsICdceDgwJywgJyAnLCAnXHhFMCcsICdceEE1JywgJ1x4OEInLCAnICcsICdceEUwJywgJ1x4QTUnLCAnXHg4QycsICAvKiDgpIgg4KSQIOCkkyDgpJQg4KS/IOClgCDgpYsg4KWMICovCiAgICAgJ1wwJywKLSAgICAncCcsICdxJywgJ2cnLCAnaicsICd5JywgIC8qIHBxZ2p5ICovCisgICAgJ1x4RTAnLCAnXHhBNCcsICdceDk1JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QUUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg4NScsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceDg2JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QTUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEFEJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QjYnLCAgLyog4KSVIOCkriDgpIUg4KSGIOCkpSDgpKcg4KStIOCktiAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhCMCcsICdceDg3JywgJ1x4RTAnLCAnXHhCMCcsICdceDhDJywgJ1x4RTAnLCAnXHhCMCcsICdceDk5JywgJ1x4RTAnLCAnXHhCMCcsICdceDlFJywgJ1x4RTAnLCAnXHhCMCcsICdceEEzJywgJ1x4RTAnLCAnXHhCMCcsICdceEIxJywgJ1x4RTAnLCAnXHhCMScsICdceEFGJywgIC8qIOCwhyDgsIwg4LCZIOCwniDgsKMg4LCxIOCxryAqLworICAgICdceEUwJywgJ1x4QTUnLCAnXHg4MScsICcgJywgJ1x4RTAnLCAnXHhBNScsICdceDgzJywgIC8qIOClgSDgpYMgKi8KICAgICAnXDAnLAotICAgICdceEUwJywgJ1x4QjAnLCAnXHg4NScsICdceEUwJywgJ1x4QjAnLCAnXHg5NScsICdceEUwJywgJ1x4QjAnLCAnXHg5QScsICdceEUwJywgJ1x4QjAnLCAnXHhCMCcsICdceEUwJywgJ1x4QjAnLCAnXHhCRCcsICdceEUwJywgJ1x4QjEnLCAnXHhBOCcsICdceEUwJywgJ1x4QjEnLCAnXHhBQycsICAvKiDgsIUg4LCVIOCwmiDgsLAg4LC9IOCxqCDgsawgKi8KKyAgICAnXHhFMScsICdceDg4JywgJ1x4ODAnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg4MycsICcgJywgJ1x4RTEnLCAnXHg4QicsICdceDk4JywgJyAnLCAnXHhFMScsICdceDhEJywgJ1x4OTAnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHg4OScsICdceEEwJywgJyAnLCAnXHhFMScsICdceDhCJywgJ1x4OEInLCAnICcsICdceEUxJywgJ1x4OEInLCAnXHg5MCcsICAvKiDhiIAg4YiDIOGLmCDhjZAg4YibIOGJoCDhi4sg4YuQICovCiAgICAgJ1wwJywKLSAgICAnXHhFMCcsICdceEI4JywgJ1x4OUEnLCAnXHhFMCcsICdceEI5JywgJ1x4ODAnLCAnXHhFMCcsICdceEI5JywgJ1x4ODEnLCAnXHhFMCcsICdceEI4JywgJ1x4QUQnLCAnXHhFMCcsICdceEI4JywgJ1x4ODEnLCAnXHhFMCcsICdceEI4JywgJ1x4QjInLCAgLyog4LiaIOC5gCDguYEg4LitIOC4gSDguLIgKi8KKyAgICAnXHhFMScsICdceDg4JywgJ1x4ODgnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg5MCcsICcgJywgJ1x4RTEnLCAnXHg4OScsICdceEEwJywgJyAnLCAnXHhFMScsICdceDhCJywgJ1x4OTgnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg4MCcsICcgJywgJ1x4RTEnLCAnXHg4OCcsICdceEFBJywgJyAnLCAnXHhFMScsICdceDhCJywgJ1x4OTAnLCAnICcsICdceEUxJywgJ1x4OEMnLCAnXHhBOCcsICAvKiDhiIgg4YiQIOGJoCDhi5gg4YiAIOGIqiDhi5Ag4YyoICovCiAgICAgJ1wwJywKLSAgICAnXHhFMCcsICdceEI4JywgJ1x4OUEnLCAnXHhFMCcsICdceEI4JywgJ1x4OUInLCAnXHhFMCcsICdceEI4JywgJ1x4QTknLCAnXHhFMCcsICdceEI4JywgJ1x4QUYnLCAnXHhFMCcsICdceEI4JywgJ1x4QUQnLCAnXHhFMCcsICdceEI4JywgJ1x4QTInLCAnXHhFMCcsICdceEI4JywgJ1x4QUUnLCAgLyog4LiaIOC4myDguKkg4LivIOC4rSDguKIg4LiuICovCisgICAgJ1x4RTEnLCAnXHg4MycsICdceDkyJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OTMnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5NCcsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDk1JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OTcnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5OCcsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDlEJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTYnLCAgLyog4YOSIOGDkyDhg5Qg4YOVIOGDlyDhg5gg4YOdIOGDpiAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhCOCcsICdceDlCJywgJ1x4RTAnLCAnXHhCOCcsICdceDlEJywgJ1x4RTAnLCAnXHhCOCcsICdceDlGJywgIC8qIOC4myDguJ0g4LifICovCisgICAgJ1x4RTEnLCAnXHg4MycsICdceDkwJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OTYnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEExJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTgnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBQicsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEFFJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OUUnLCAgLyog4YOQIOGDliDhg5sg4YOhIOGDqCDhg6sg4YOuIOGDniAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhCOScsICdceDgyJywgJ1x4RTAnLCAnXHhCOScsICdceDgzJywgJ1x4RTAnLCAnXHhCOScsICdceDg0JywgIC8qIOC5giDguYMg4LmEICovCisgICAgJ1x4RTEnLCAnXHg4MycsICdceEExJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QUUnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBNScsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDk2JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OUInLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBOCcsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEE5JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QUMnLCAgLyog4YOhIOGDriDhg6Ug4YOWIOGDmyDhg6gg4YOpIOGDrCAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhCOCcsICdceDhFJywgJ1x4RTAnLCAnXHhCOCcsICdceDhGJywgJ1x4RTAnLCAnXHhCOCcsICdceEE0JywgJ1x4RTAnLCAnXHhCOCcsICdceEE2JywgIC8qIOC4jiDguI8g4LikIOC4piAqLworICAgICdceEUxJywgJ1x4ODMnLCAnXHg5NCcsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDk1JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OUYnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBMicsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEEzJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTQnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBNScsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEE3JywgIC8qIOGDlCDhg5Ug4YOfIOGDoiDhg6Mg4YOkIOGDpSDhg6cgKi8KICAgICAnXDAnLAotICAgICdceEUwJywgJ1x4QjgnLCAnXHg4RCcsICdceEUwJywgJ1x4QjgnLCAnXHg5MCcsICAvKiDguI0g4LiQICovCisgICAgJ1x4RTEnLCAnXHg4MicsICdceEIxJywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QTcnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhCOScsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEJDJywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QTQnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBNScsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEIzJywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QkEnLCAgLyog4YKxIOGCpyDhgrkg4YK8IOGCpCDhgqUg4YKzIOGCuiAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhCOScsICdceDkwJywgJ1x4RTAnLCAnXHhCOScsICdceDkxJywgJ1x4RTAnLCAnXHhCOScsICdceDkzJywgIC8qIOC5kCDguZEg4LmTICovCisgICAgJ1x4RTEnLCAnXHg4MicsICdceEE0JywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QTUnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBNycsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEE4JywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QTYnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhCMScsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEFBJywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QUInLCAgLyog4YKkIOGCpSDhgqcg4YKoIOGCpiDhgrEg4YKqIOGCqyAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCNCcsICdceDgxJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTcnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4MicsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDg0JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4NycsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk0JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTYnLCAgLyog4rSBIOK0lyDitIIg4rSEIOK0hSDitIcg4rSUIOK0liAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCNCcsICdceDg4JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OEMnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5NicsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDhFJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODMnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4NicsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDhCJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4QTInLCAgLyog4rSIIOK0jCDitJYg4rSOIOK0gyDitIYg4rSLIOK0oiAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCNCcsICdceDkwJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTEnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5MycsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk1JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTknLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5QicsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceEExJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4QTMnLCAgLyog4rSQIOK0kSDitJMg4rSVIOK0mSDitJsg4rShIOK0oyAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCNCcsICdceDg0JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5NCcsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk1JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODEnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4MicsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk4JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OUQnLCAgLyog4rSEIOK0hSDitJQg4rSVIOK0gSDitIIg4rSYIOK0nSAqLworICAgICdcMCcsCisgICAgJ1x4Q0UnLCAnXHg5MycsICcgJywgJ1x4Q0UnLCAnXHg5MicsICcgJywgJ1x4Q0UnLCAnXHg5NScsICcgJywgJ1x4Q0UnLCAnXHg5NicsICcgJywgJ1x4Q0UnLCAnXHg5OCcsICcgJywgJ1x4Q0UnLCAnXHg5RicsICcgJywgJ1x4Q0UnLCAnXHhBOScsICAvKiDOkyDOkiDOlSDOliDOmCDOnyDOqSAqLworICAgICdcMCcsCisgICAgJ1x4Q0UnLCAnXHg5MicsICcgJywgJ1x4Q0UnLCAnXHg5NCcsICcgJywgJ1x4Q0UnLCAnXHg5NicsICcgJywgJ1x4Q0UnLCAnXHg5RScsICcgJywgJ1x4Q0UnLCAnXHg5OCcsICcgJywgJ1x4Q0UnLCAnXHg5RicsICAvKiDOkiDOlCDOliDOniDOmCDOnyAqLworICAgICdcMCcsCisgICAgJ1x4Q0UnLCAnXHhCMicsICcgJywgJ1x4Q0UnLCAnXHhCOCcsICcgJywgJ1x4Q0UnLCAnXHhCNCcsICcgJywgJ1x4Q0UnLCAnXHhCNicsICcgJywgJ1x4Q0UnLCAnXHhCQicsICcgJywgJ1x4Q0UnLCAnXHhCRScsICAvKiDOsiDOuCDOtCDOtiDOuyDOviAqLworICAgICdcMCcsCisgICAgJ1x4Q0UnLCAnXHhCMScsICcgJywgJ1x4Q0UnLCAnXHhCNScsICcgJywgJ1x4Q0UnLCAnXHhCOScsICcgJywgJ1x4Q0UnLCAnXHhCRicsICcgJywgJ1x4Q0YnLCAnXHg4MCcsICcgJywgJ1x4Q0YnLCAnXHg4MycsICcgJywgJ1x4Q0YnLCAnXHg4NCcsICcgJywgJ1x4Q0YnLCAnXHg4OScsICAvKiDOsSDOtSDOuSDOvyDPgCDPgyDPhCDPiSAqLworICAgICdcMCcsCisgICAgJ1x4Q0UnLCAnXHhCMicsICcgJywgJ1x4Q0UnLCAnXHhCMycsICcgJywgJ1x4Q0UnLCAnXHhCNycsICcgJywgJ1x4Q0UnLCAnXHhCQycsICcgJywgJ1x4Q0YnLCAnXHg4MScsICcgJywgJ1x4Q0YnLCAnXHg4NicsICcgJywgJ1x4Q0YnLCAnXHg4NycsICcgJywgJ1x4Q0YnLCAnXHg4OCcsICAvKiDOsiDOsyDOtyDOvCDPgSDPhiDPhyDPiCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBQScsICdceEE0JywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4QTgnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg4QicsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDhDJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OUInLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5RicsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceEIwJywgJyAnLCAnXHhFMCcsICdceEFCJywgJ1x4QTYnLCAgLyog4KqkIOCqqCDgqosg4KqMIOCqmyDgqp8g4KqwIOCrpiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBQScsICdceDk2JywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OTcnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5OCcsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDlFJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4ODcnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceEEwJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OUMnLCAgLyog4KqWIOCqlyDgqpgg4KqeIOCqhyDgqogg4KqgIOCqnCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBQScsICdceDg4JywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OEEnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHhCRicsICcgJywgJ1x4RTAnLCAnXHhBQicsICdceDgwJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4QjInLCAnXHhFMCcsICdceEFCJywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHhCNicsICdceEUwJywgJ1x4QUInLCAnXHg4RCcsICdceEUwJywgJ1x4QUEnLCAnXHg5QScsICdceEUwJywgJ1x4QUEnLCAnXHhCRicsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDlDJywgJ1x4RTAnLCAnXHhBQScsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4QjgnLCAnXHhFMCcsICdceEFCJywgJ1x4ODAnLCAgLyog4KqIIOCqiiDgqr8g4KuAIOCqsuCrgCDgqrbgq43gqprgqr8g4Kqc4Kq/IOCquOCrgCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBQicsICdceDgxJywgJyAnLCAnXHhFMCcsICdceEFCJywgJ1x4ODMnLCAnICcsICdceEUwJywgJ1x4QUInLCAnXHg4NCcsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDk2JywgJ1x4RTAnLCAnXHhBQicsICdceDgxJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OUInLCAnXHhFMCcsICdceEFCJywgJ1x4ODMnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5QicsICdceEUwJywgJ1x4QUInLCAnXHg4NCcsICAvKiDgq4Eg4KuDIOCrhCDgqpbgq4Eg4Kqb4KuDIOCqm+CrhCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBQicsICdceEE2JywgJyAnLCAnXHhFMCcsICdceEFCJywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QUInLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhBQicsICdceEE5JywgJyAnLCAnXHhFMCcsICdceEFCJywgJ1x4QUQnLCAgLyog4KumIOCrpyDgq6gg4KupIOCrrSAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBOCcsICdceDk1JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OTcnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5OScsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OUMnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHhBNCcsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEE3JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QjgnLCAgLyog4KiVIOColyDgqJkg4KiaIOConCDgqKQg4KinIOCouCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBOCcsICdceDk1JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OTcnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5OScsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OUMnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHhBNCcsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEE3JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QjgnLCAgLyog4KiVIOColyDgqJkg4KiaIOConCDgqKQg4KinIOCouCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBOCcsICdceDg3JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4ODgnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg4OScsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDhGJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OTMnLCAnICcsICdceEUwJywgJ1x4QTknLCAnXHhCMycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEE5JywgJ1x4ODAnLCAgLyog4KiHIOCoiCDgqIkg4KiPIOCokyDgqbMg4Ki/IOCpgCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBOCcsICdceDg1JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OEYnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5MycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDk3JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OUMnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEIwJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QjgnLCAgLyog4KiFIOCojyDgqJMg4KiXIOConCDgqKAg4KiwIOCouCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBOScsICdceEE2JywgJyAnLCAnXHhFMCcsICdceEE5JywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QTknLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhBOScsICdceEE5JywgJyAnLCAnXHhFMCcsICdceEE5JywgJ1x4QUQnLCAgLyog4KmmIOCppyDgqagg4KmpIOCprSAqLworICAgICdcMCcsCisgICAgJ1x4RDcnLCAnXHg5MScsICcgJywgJ1x4RDcnLCAnXHg5MycsICcgJywgJ1x4RDcnLCAnXHg5NCcsICcgJywgJ1x4RDcnLCAnXHg5NycsICcgJywgJ1x4RDcnLCAnXHg5QScsICcgJywgJ1x4RDcnLCAnXHg5QicsICcgJywgJ1x4RDcnLCAnXHg5RCcsICcgJywgJ1x4RDcnLCAnXHhBMScsICAvKiDXkSDXkyDXlCDXlyDXmiDXmyDXnSDXoSAqLworICAgICdcMCcsCisgICAgJ1x4RDcnLCAnXHg5MScsICcgJywgJ1x4RDcnLCAnXHg5OCcsICcgJywgJ1x4RDcnLCAnXHg5QicsICcgJywgJ1x4RDcnLCAnXHg5RCcsICcgJywgJ1x4RDcnLCAnXHhBMScsICcgJywgJ1x4RDcnLCAnXHhBNicsICAvKiDXkSDXmCDXmyDXnSDXoSDXpiAqLworICAgICdcMCcsCisgICAgJ1x4RDcnLCAnXHhBNycsICcgJywgJ1x4RDcnLCAnXHg5QScsICcgJywgJ1x4RDcnLCAnXHg5RicsICcgJywgJ1x4RDcnLCAnXHhBMycsICcgJywgJ1x4RDcnLCAnXHhBNScsICAvKiDXpyDXmiDXnyDXoyDXpSAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCMicsICdceDg3JywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4OEEnLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHg5MCcsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceEEzJywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4QjgnLCAnXHhFMCcsICdceEIyJywgJ1x4QkUnLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHhBOCcsICdceEUwJywgJ1x4QjInLCAnXHhCRScsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceEE2JywgJ1x4RTAnLCAnXHhCMicsICdceEJFJywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4QjAnLCAnXHhFMCcsICdceEIyJywgJ1x4QkUnLCAgLyog4LKHIOCyiiDgspAg4LKjIOCyuOCyviDgsqjgsr4g4LKm4LK+IOCysOCyviAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCMicsICdceDg1JywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4ODknLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHg4RScsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEIzJywgJ1x4QTYnLCAnICcsICdceEUwJywgJ1x4QjMnLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhCMycsICdceEFDJywgJyAnLCAnXHhFMCcsICdceEIzJywgJ1x4QUQnLCAgLyog4LKFIOCyiSDgso4g4LKyIOCzpiDgs6gg4LOsIOCzrSAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RScsICdceDgxJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4OTEnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg5MycsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceEE3JywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4QTknLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHhCNicsICAvKiDhnoEg4Z6RIOGekyDhnqcg4Z6pIOGetiAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4ODAnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4ODEnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg4MCcsICdceEUxJywgJ1x4OUYnLCAnXHg5MicsICdceEUxJywgJ1x4OUUnLCAnXHg4MicsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDkwJywgIC8qIOGegOGfkuGegCDhnoDhn5LhnoEg4Z6A4Z+S4Z6CIOGegOGfkuGekCAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RScsICdceDgxJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4ODMnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg4NScsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDhCJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4OTQnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg5OCcsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDk5JywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4QjInLCAgLyog4Z6BIOGegyDhnoUg4Z6LIOGelCDhnpgg4Z6ZIOGesiAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RScsICdceDhGJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDlBJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4OUEnLCAnXHhFMScsICdceDlGJywgJ1x4ODAnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHhCMicsICdceEUxJywgJ1x4OUYnLCAnXHg5MicsICdceEUxJywgJ1x4OUUnLCAnXHg5OScsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceEEyJywgJ1x4RTEnLCAnXHg5RScsICdceEJGJywgIC8qIOGej+GfkuGemiDhnprhn4Ag4Z6y4Z+S4Z6ZIOGeouGevyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RScsICdceDkzJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDhGJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDlBJywgJ1x4RTEnLCAnXHg5RicsICdceDgzJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4ODQnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4ODEnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4OTknLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg4MCcsICdceEUxJywgJ1x4OUYnLCAnXHg5MicsICdceEUxJywgJ1x4OUUnLCAnXHg5NCcsICdceEUxJywgJ1x4OUYnLCAnXHg4MCcsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDg1JywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDlBJywgJ1x4RTEnLCAnXHg5RicsICdceDgwJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4OTMnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4OEYnLCAnXHhFMScsICdceDlFJywgJ1x4QkYnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg5QicsICdceEUxJywgJ1x4OUYnLCAnXHg5MicsICdceEUxJywgJ1x4OUUnLCAnXHg5NCcsICdceEUxJywgJ1x4OUUnLCAnXHhCRicsICAvKiDhnpPhn5Lhno/hn5Lhnprhn4Mg4Z6E4Z+S4Z6B4Z+S4Z6ZIOGegOGfkuGelOGfgCDhnoXhn5Lhnprhn4Ag4Z6T4Z+S4Z6P4Z6/IOGem+GfkuGelOGevyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhBNycsICdceEEwJywgJyAnLCAnXHhFMScsICdceEE3JywgJ1x4QTEnLCAgLyog4aegIOGnoSAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhBNycsICdceEI2JywgJyAnLCAnXHhFMScsICdceEE3JywgJ1x4QjknLCAgLyog4ae2IOGnuSAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCQScsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4OTQnLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHhBRCcsICcgJywgJ1x4RTAnLCAnXHhCQScsICdceEExJywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4QTUnLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhCQScsICdceEEzJywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4ODcnLCAgLyog4LqyIOC6lCDguq0g4LqhIOC6pSDguqcg4LqjIOC6hyAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCQScsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4QUQnLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCQScsICdceDhEJywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4QTMnLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHhBRScsICcgJywgJ1x4RTAnLCAnXHhCQScsICdceEE3JywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4QTInLCAgLyog4LqyIOC6rSDgupog4LqNIOC6oyDguq4g4LqnIOC6oiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCQScsICdceDlCJywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4QTInLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHg5RicsICcgJywgJ1x4RTAnLCAnXHhCQScsICdceDlEJywgIC8qIOC6myDguqIg4LqfIOC6nSAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCQicsICdceDgyJywgJyAnLCAnXHhFMCcsICdceEJCJywgJ1x4ODQnLCAnICcsICdceEUwJywgJ1x4QkInLCAnXHg4MycsICAvKiDgu4Ig4LuEIOC7gyAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCQScsICdceDg3JywgJyAnLCAnXHhFMCcsICdceEJBJywgJ1x4OEEnLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHg5NicsICcgJywgJ1x4RTAnLCAnXHhCQScsICdceEJEJywgJyAnLCAnXHhFMCcsICdceEJCJywgJ1x4ODYnLCAnICcsICdceEUwJywgJ1x4QkEnLCAnXHhBRicsICAvKiDguocg4LqKIOC6liDgur0g4LuGIOC6ryAqLworICAgICdcMCcsCisgICAgJ1QnLCAnICcsICdIJywgJyAnLCAnRScsICcgJywgJ1onLCAnICcsICdPJywgJyAnLCAnQycsICcgJywgJ1EnLCAnICcsICdTJywgIC8qIFQgSCBFIFogTyBDIFEgUyAqLworICAgICdcMCcsCisgICAgJ0gnLCAnICcsICdFJywgJyAnLCAnWicsICcgJywgJ0wnLCAnICcsICdPJywgJyAnLCAnQycsICcgJywgJ1UnLCAnICcsICdTJywgIC8qIEggRSBaIEwgTyBDIFUgUyAqLworICAgICdcMCcsCisgICAgJ2YnLCAnICcsICdpJywgJyAnLCAnaicsICcgJywgJ2snLCAnICcsICdkJywgJyAnLCAnYicsICcgJywgJ2gnLCAgLyogZiBpIGogayBkIGIgaCAqLworICAgICdcMCcsCisgICAgJ3gnLCAnICcsICd6JywgJyAnLCAncicsICcgJywgJ28nLCAnICcsICdlJywgJyAnLCAncycsICcgJywgJ2MnLCAgLyogeCB6IHIgbyBlIHMgYyAqLworICAgICdcMCcsCisgICAgJ3AnLCAnICcsICdxJywgJyAnLCAnZycsICcgJywgJ2onLCAnICcsICd5JywgIC8qIHAgcSBnIGogeSAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHg4MicsICdceDgwJywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4ODMnLCAnICcsICdceEUyJywgJ1x4ODInLCAnXHg4NScsICcgJywgJ1x4RTInLCAnXHg4MicsICdceDg3JywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4ODgnLCAgLyog4oKAIOKCgyDigoUg4oKHIOKCiCAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHg4MicsICdceDgwJywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4ODEnLCAnICcsICdceEUyJywgJ1x4ODInLCAnXHg4MicsICcgJywgJ1x4RTInLCAnXHg4MicsICdceDgzJywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4ODgnLCAgLyog4oKAIOKCgSDigoIg4oKDIOKCiCAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhCNScsICdceEEyJywgJyAnLCAnXHhFMicsICdceEIxJywgJ1x4QkMnLCAnICcsICdceEUyJywgJ1x4ODInLCAnXHg5NScsICcgJywgJ1x4RTInLCAnXHg4MicsICdceDk2JywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4OTcnLCAgLyog4bWiIOKxvCDigpUg4oKWIOKClyAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHg4MicsICdceDkwJywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4OTEnLCAnICcsICdceEUyJywgJ1x4ODInLCAnXHg5MicsICcgJywgJ1x4RTInLCAnXHg4MicsICdceDkzJywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4OTknLCAnICcsICdceEUyJywgJ1x4ODInLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHhCNScsICdceEE1JywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4QTQnLCAnICcsICdceEUxJywgJ1x4QjUnLCAnXHhBMycsICAvKiDigpAg4oKRIOKCkiDigpMg4oKZIOKCmyDhtaUg4bWkIOG1oyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhCNScsICdceEE2JywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4QTcnLCAnICcsICdceEUxJywgJ1x4QjUnLCAnXHhBOCcsICcgJywgJ1x4RTEnLCAnXHhCNScsICdceEE5JywgJyAnLCAnXHhFMicsICdceDgyJywgJ1x4OUEnLCAgLyog4bWmIOG1pyDhtagg4bWpIOKCmiAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHg4MScsICdceEIwJywgJyAnLCAnXHhDMicsICdceEIzJywgJyAnLCAnXHhFMicsICdceDgxJywgJ1x4QjUnLCAnICcsICdceEUyJywgJ1x4ODEnLCAnXHhCNycsICcgJywgJ1x4RTEnLCAnXHhCNScsICdceDgwJywgJyAnLCAnXHhFMScsICdceEI0JywgJ1x4QjQnLCAnICcsICdceEUxJywgJ1x4QjQnLCAnXHhCMScsICcgJywgJ1x4RTEnLCAnXHhCNCcsICdceEJDJywgIC8qIOKBsCDCsyDigbUg4oG3IOG1gCDhtLQg4bSxIOG0vCAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHg4MScsICdceEIwJywgJyAnLCAnXHhDMicsICdceEI5JywgJyAnLCAnXHhDMicsICdceEIyJywgJyAnLCAnXHhDMicsICdceEIzJywgJyAnLCAnXHhFMScsICdceEI0JywgJ1x4QjEnLCAnICcsICdceEUxJywgJ1x4QjQnLCAnXHhCOCcsICcgJywgJ1x4RTEnLCAnXHhCNCcsICdceEJDJywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4ODEnLCAgLyog4oGwIMK5IMKyIMKzIOG0sSDhtLgg4bS8IOG1gSAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhCNScsICdceDg3JywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4ODgnLCAnICcsICdceEUxJywgJ1x4QjUnLCAnXHg4RicsICcgJywgJ1x4Q0EnLCAnXHhCMCcsICcgJywgJ1x4Q0EnLCAnXHhCMicsICcgJywgJ1x4RTEnLCAnXHhCNicsICdceEEwJywgJyAnLCAnXHhFMicsICdceDgxJywgJ1x4QjEnLCAgLyog4bWHIOG1iCDhtY8gyrAgyrIg4bagIOKBsSAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhCNScsICdceDg5JywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4OTInLCAnICcsICdceENBJywgJ1x4QjMnLCAnICcsICdceENCJywgJ1x4QTInLCAnICcsICdceENCJywgJ1x4QTMnLCAnICcsICdceEUxJywgJ1x4QjYnLCAnXHg5QycsICcgJywgJ1x4RTEnLCAnXHhCNicsICdceEJCJywgIC8qIOG1iSDhtZIgyrMgy6Igy6Mg4bacIOG2uyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHhCNScsICdceDk2JywgJyAnLCAnXHhDQScsICdceEI4JywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4OEQnLCAgLyog4bWWIMq4IOG1jSAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCNCcsICdceDkyJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEIxJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBQScsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceDlBJywgJ1x4RTAnLCAnXHhCNScsICdceDhEJywgJ1x4RTAnLCAnXHhCNCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QUEnLCAnXHhFMCcsICdceEI1JywgJ1x4OEQnLCAnXHhFMCcsICdceEI0JywgJ1x4QUEnLCAgLyog4LSSIOC0nyDgtKAg4LSxIOC0miDgtKog4LSa4LWN4LSaIOC0quC1jeC0qiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCNCcsICdceDlGJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QTAnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEI2JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OTgnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEE1JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QjInLCAgLyog4LSfIOC0oCDgtKcg4LS2IOC0mCDgtJog4LSlIOC0siAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg4MCcsICdceDgxJywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4ODInLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg4NCcsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceDkyJywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4OUQnLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHhBNScsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceDhBJywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4OEInLCAgLyog4YCBIOGAgiDhgIQg4YCSIOGAnSDhgaUg4YGKIOGBiyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg4MCcsICdceDg0JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4OEUnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg5MicsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceDk1JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4OTcnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg5RCcsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceDhBJywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4OEInLCAgLyog4YCEIOGAjiDhgJIg4YCVIOGAlyDhgJ0g4YGKIOGBiyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg4MCcsICdceEE5JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4QkMnLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHg4RCcsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceDhGJywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4ODYnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHhBQicsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceEFEJywgIC8qIOGAqSDhgLwg4YGNIOGBjyDhgYYg4YCrIOGArSAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg4MCcsICdceDg5JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4OEEnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHhBNScsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceEE5JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4QTgnLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHg4MicsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceDg1JywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4ODknLCAgLyog4YCJIOGAiiDhgKUg4YCpIOGAqCDhgYIg4YGFIOGBiSAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCNicsICdceDg5JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHg5RCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEIzJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QjQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCQScsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEJEJywgJyAnLCAnXHhFMCcsICdceEI3JywgJ1x4ODYnLCAgLyog4LaJIOC2miDgtp0g4LazIOC2tCDgtrog4La9IOC3hiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCNicsICdceDkxJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4OTQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHg5RCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEEyJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhBRScsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEIwJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QkInLCAgLyog4LaRIOC2lCDgtp0g4LaiIOC2pyDgtq4g4LawIOC2uyAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCNicsICdceEFGJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QjMnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHg4QicsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEJEJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QUQnLCAnXHhFMCcsICdceEI3JywgJ1x4OTYnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhBRCcsICdceEUwJywgJ1x4QjcnLCAnXHg5NCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEI2JywgJ1x4RTAnLCAnXHhCNycsICdceDk0JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QUYnLCAnXHhFMCcsICdceEI3JywgJ1x4OTQnLCAgLyog4LavIOC2syDgtosg4La9IOC2reC3liDgtq3gt5Qg4La24LeUIOC2r+C3lCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBRScsICdceDg5JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OTInLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5MycsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceEIxJywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4ODgnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5NScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDk5JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OUEnLCAgLyog4K6JIOCukiDgrpMg4K6xIOCuiCDgrpUg4K6ZIOCumiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBRScsICdceDk1JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHhCMicsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceEI2JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4ODknLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5OScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDlGJywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4QUEnLCAgLyog4K6VIOCumiDgrrIg4K62IOCuiSDgrpkg4K6fIOCuqiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCMCcsICdceDg3JywgJyAnLCAnXHhFMCcsICdceEIwJywgJ1x4OEMnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHg5OScsICcgJywgJ1x4RTAnLCAnXHhCMCcsICdceDlFJywgJyAnLCAnXHhFMCcsICdceEIwJywgJ1x4QTMnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHhCMScsICcgJywgJ1x4RTAnLCAnXHhCMScsICdceEFGJywgIC8qIOCwhyDgsIwg4LCZIOCwniDgsKMg4LCxIOCxryAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCMCcsICdceDg1JywgJyAnLCAnXHhFMCcsICdceEIwJywgJ1x4OTUnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCMCcsICdceEIwJywgJyAnLCAnXHhFMCcsICdceEIwJywgJ1x4QkQnLCAnICcsICdceEUwJywgJ1x4QjEnLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhCMScsICdceEFDJywgIC8qIOCwhSDgsJUg4LCaIOCwsCDgsL0g4LGoIOCxrCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEI5JywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QjknLCAnXHg4MScsICcgJywgJ1x4RTAnLCAnXHhCOCcsICdceEFEJywgJyAnLCAnXHhFMCcsICdceEI4JywgJ1x4ODEnLCAnICcsICdceEUwJywgJ1x4QjgnLCAnXHhCMicsICAvKiDguJog4LmAIOC5gSDguK0g4LiBIOC4siAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEI4JywgJ1x4OUInLCAnICcsICdceEUwJywgJ1x4QjgnLCAnXHhBOScsICcgJywgJ1x4RTAnLCAnXHhCOCcsICdceEFGJywgJyAnLCAnXHhFMCcsICdceEI4JywgJ1x4QUQnLCAnICcsICdceEUwJywgJ1x4QjgnLCAnXHhBMicsICcgJywgJ1x4RTAnLCAnXHhCOCcsICdceEFFJywgIC8qIOC4miDguJsg4LipIOC4ryDguK0g4LiiIOC4riAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDlCJywgJyAnLCAnXHhFMCcsICdceEI4JywgJ1x4OUQnLCAnICcsICdceEUwJywgJ1x4QjgnLCAnXHg5RicsICAvKiDguJsg4LidIOC4nyAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOScsICdceDgyJywgJyAnLCAnXHhFMCcsICdceEI5JywgJ1x4ODMnLCAnICcsICdceEUwJywgJ1x4QjknLCAnXHg4NCcsICAvKiDguYIg4LmDIOC5hCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDhFJywgJyAnLCAnXHhFMCcsICdceEI4JywgJ1x4OEYnLCAnICcsICdceEUwJywgJ1x4QjgnLCAnXHhBNCcsICcgJywgJ1x4RTAnLCAnXHhCOCcsICdceEE2JywgIC8qIOC4jiDguI8g4LikIOC4piAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDhEJywgJyAnLCAnXHhFMCcsICdceEI4JywgJ1x4OTAnLCAgLyog4LiNIOC4kCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOScsICdceDkwJywgJyAnLCAnXHhFMCcsICdceEI5JywgJ1x4OTEnLCAnICcsICdceEUwJywgJ1x4QjknLCAnXHg5MycsICAvKiDguZAg4LmRIOC5kyAqLwogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCiAgICAgJ1wwJywKLSAgICAnXHhFNCcsICdceEJCJywgJ1x4OTYnLCAnXHhFNCcsICdceEJCJywgJ1x4QUMnLCAnXHhFNCcsICdceEJEJywgJ1x4QTAnLCAnXHhFNCcsICdceEJFJywgJ1x4ODYnLCAnXHhFNScsICdceDgwJywgJ1x4OTEnLCAnXHhFNScsICdceDg4JywgJ1x4QjAnLCAnXHhFNScsICdceDkyJywgJ1x4OEMnLCAnXHhFNScsICdceDlDJywgJ1x4QjAnLCAgLyog5LuW5Lus5L2g5L6G5YCR5Yiw5ZKM5ZywICovCi0gICAgJ1x4RTUnLCAnXHhBRicsICdceEI5JywgJ1x4RTUnLCAnXHhCMCcsICdceDhEJywgJ1x4RTUnLCAnXHhCMCcsICdceEIxJywgJ1x4RTUnLCAnXHhCOCcsICdceEFEJywgJ1x4RTYnLCAnXHg4OCcsICdceDkxJywgJ1x4RTYnLCAnXHg5NycsICdceEI2JywgJ1x4RTYnLCAnXHg5OScsICdceDgyJywgJ1x4RTYnLCAnXHg5QycsICdceDgzJywgIC8qIOWvueWwjeWwseW4reaIkeaXtuaZguacgyAqLwotICAgICdceEU2JywgJ1x4OUQnLCAnXHhBNScsICdceEU3JywgJ1x4ODInLCAnXHhCQScsICdceEU4JywgJ1x4ODMnLCAnXHhCRCcsICdceEU4JywgJ1x4ODgnLCAnXHhCMCcsICdceEU4JywgJ1x4QUEnLCAnXHhBQScsICdceEU4JywgJ1x4QUYnLCAnXHhCNCcsICdceEU4JywgJ1x4QkYnLCAnXHg5OScsICdceEU5JywgJ1x4ODAnLCAnXHg5OScsICAvKiDmnaXngrrog73oiLDoqqror7Tov5npgJkgKi8KLSAgICAnXHhFOScsICdceEJEJywgJ1x4OEEnLCAnfCcsICAvKiDpvYogfCAqLwotICAgICdceEU1JywgJ1x4ODYnLCAnXHg5QicsICdceEU1JywgJ1x4OTAnLCAnXHg4QycsICdceEU1JywgJ1x4QjcnLCAnXHhCMicsICdceEU2JywgJ1x4ODQnLCAnXHhCRicsICdceEU2JywgJ1x4OTcnLCAnXHhBMicsICdceEU2JywgJ1x4OTgnLCAnXHg5RicsICdceEU2JywgJ1x4OTgnLCAnXHhBRicsICdceEU2JywgJ1x4OTknLCAnXHhBRicsICAvKiDlhpvlkIzlt7LmhL/ml6LmmJ/mmK/mma8gKi8KLSAgICAnXHhFNicsICdceEIwJywgJ1x4OTEnLCAnXHhFNycsICdceDg1JywgJ1x4QTcnLCAnXHhFNycsICdceDhFJywgJ1x4QjAnLCAnXHhFNycsICdceDhGJywgJ1x4QkUnLCAnXHhFNycsICdceDkwJywgJ1x4ODYnLCAnXHhFNycsICdceDk0JywgJ1x4QTgnLCAnXHhFNycsICdceEJEJywgJ1x4QUUnLCAnXHhFOCcsICdceEE2JywgJ1x4ODEnLCAgLyog5rCR54Wn546w54++55CG55So572u6KaBICovCi0gICAgJ1x4RTgnLCAnXHhCQicsICdceDhEJywgJ1x4RTknLCAnXHg4MicsICdceEEzJywgJ1x4RTknLCAnXHg4NScsICdceDhEJywgJ1x4RTknLCAnXHg4NycsICdceDhDJywgJ1x4RTknLCAnXHg5NicsICdceDhCJywgJ1x4RTknLCAnXHg5QicsICdceEI3JywgJ1x4RTknLCAnXHg5QycsICdceEIyJywgJ1x4RTknLCAnXHg5RCcsICdceEEyJywgIC8qIOi7jemCo+mFjemHjOmWi+mbt+mcsumdoiAqLwotICAgICdceEU5JywgJ1x4QTEnLCAnXHhCRScsICAvKiDpob4gKi8KKyAgICAnXHhFNCcsICdceEJCJywgJ1x4OTYnLCAnICcsICdceEU0JywgJ1x4QkInLCAnXHhBQycsICcgJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJyAnLCAnXHhFNCcsICdceEJFJywgJ1x4ODYnLCAnICcsICdceEU1JywgJ1x4ODAnLCAnXHg5MScsICcgJywgJ1x4RTUnLCAnXHg4OCcsICdceEIwJywgJyAnLCAnXHhFNScsICdceDkyJywgJ1x4OEMnLCAnICcsICdceEU1JywgJ1x4OUMnLCAnXHhCMCcsICAvKiDku5Yg5LusIOS9oCDkvoYg5YCRIOWIsCDlkowg5ZywICovCisgICAgJyAnLCAnXHhFNScsICdceEFGJywgJ1x4QjknLCAnICcsICdceEU1JywgJ1x4QjAnLCAnXHg4RCcsICcgJywgJ1x4RTUnLCAnXHhCMCcsICdceEIxJywgJyAnLCAnXHhFNScsICdceEI4JywgJ1x4QUQnLCAnICcsICdceEU2JywgJ1x4ODgnLCAnXHg5MScsICcgJywgJ1x4RTYnLCAnXHg5NycsICdceEI2JywgJyAnLCAnXHhFNicsICdceDk5JywgJ1x4ODInLCAnICcsICdceEU2JywgJ1x4OUMnLCAnXHg4MycsICAvKiAg5a+5IOWwjSDlsLEg5bitIOaIkSDml7Yg5pmCIOacgyAqLworICAgICcgJywgJ1x4RTYnLCAnXHg5RCcsICdceEE1JywgJyAnLCAnXHhFNycsICdceDgyJywgJ1x4QkEnLCAnICcsICdceEU4JywgJ1x4ODMnLCAnXHhCRCcsICcgJywgJ1x4RTgnLCAnXHg4OCcsICdceEIwJywgJyAnLCAnXHhFOCcsICdceEFBJywgJ1x4QUEnLCAnICcsICdceEU4JywgJ1x4QUYnLCAnXHhCNCcsICcgJywgJ1x4RTgnLCAnXHhCRicsICdceDk5JywgJyAnLCAnXHhFOScsICdceDgwJywgJ1x4OTknLCAgLyogIOadpSDngrog6IO9IOiIsCDoqqog6K+0IOi/mSDpgJkgKi8KKyAgICAnICcsICdceEU5JywgJ1x4QkQnLCAnXHg4QScsICcgJywgJ3wnLCAgLyogIOm9iiB8ICovCisgICAgJyAnLCAnXHhFNScsICdceDg2JywgJ1x4OUInLCAnICcsICdceEU1JywgJ1x4OTAnLCAnXHg4QycsICcgJywgJ1x4RTUnLCAnXHhCNycsICdceEIyJywgJyAnLCAnXHhFNicsICdceDg0JywgJ1x4QkYnLCAnICcsICdceEU2JywgJ1x4OTcnLCAnXHhBMicsICcgJywgJ1x4RTYnLCAnXHg5OCcsICdceDlGJywgJyAnLCAnXHhFNicsICdceDk4JywgJ1x4QUYnLCAnICcsICdceEU2JywgJ1x4OTknLCAnXHhBRicsICAvKiAg5YabIOWQjCDlt7Ig5oS/IOaXoiDmmJ8g5pivIOaZryAqLworICAgICcgJywgJ1x4RTYnLCAnXHhCMCcsICdceDkxJywgJyAnLCAnXHhFNycsICdceDg1JywgJ1x4QTcnLCAnICcsICdceEU3JywgJ1x4OEUnLCAnXHhCMCcsICcgJywgJ1x4RTcnLCAnXHg4RicsICdceEJFJywgJyAnLCAnXHhFNycsICdceDkwJywgJ1x4ODYnLCAnICcsICdceEU3JywgJ1x4OTQnLCAnXHhBOCcsICcgJywgJ1x4RTcnLCAnXHhCRCcsICdceEFFJywgJyAnLCAnXHhFOCcsICdceEE2JywgJ1x4ODEnLCAgLyogIOawkSDnhacg546wIOePviDnkIYg55SoIOe9riDopoEgKi8KKyAgICAnICcsICdceEU4JywgJ1x4QkInLCAnXHg4RCcsICcgJywgJ1x4RTknLCAnXHg4MicsICdceEEzJywgJyAnLCAnXHhFOScsICdceDg1JywgJ1x4OEQnLCAnICcsICdceEU5JywgJ1x4ODcnLCAnXHg4QycsICcgJywgJ1x4RTknLCAnXHg5NicsICdceDhCJywgJyAnLCAnXHhFOScsICdceDlCJywgJ1x4QjcnLCAnICcsICdceEU5JywgJ1x4OUMnLCAnXHhCMicsICcgJywgJ1x4RTknLCAnXHg5RCcsICdceEEyJywgIC8qICDou40g6YKjIOmFjSDph4wg6ZaLIOmbtyDpnLIg6Z2iICovCisgICAgJyAnLCAnXHhFOScsICdceEExJywgJ1x4QkUnLCAgLyogIOmhviAqLwogICAgICdcMCcsCi0gICAgJ1x4RTQnLCAnXHhCOCcsICdceEFBJywgJ1x4RTQnLCAnXHhCOCcsICdceEJBJywgJ1x4RTQnLCAnXHhCQScsICdceEJBJywgJ1x4RTQnLCAnXHhCQicsICdceDk2JywgJ1x4RTQnLCAnXHhCQicsICdceEE1JywgJ1x4RTQnLCAnXHhCQicsICdceEFDJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJ1x4RTQnLCAnXHhCRScsICdceDg2JywgIC8qIOS4quS4uuS6uuS7luS7peS7rOS9oOS+hiAqLwotICAgICdceEU1JywgJ1x4ODAnLCAnXHg4QicsICdceEU1JywgJ1x4ODAnLCAnXHg5MScsICdceEU1JywgJ1x4ODgnLCAnXHhCMCcsICdceEU1JywgJ1x4OTInLCAnXHg4QycsICdceEU1JywgJ1x4QTQnLCAnXHhBNycsICdceEU1JywgJ1x4QUYnLCAnXHhCOScsICdceEU1JywgJ1x4QjAnLCAnXHg4RCcsICdceEU1JywgJ1x4QjAnLCAnXHhCMScsICAvKiDlgIvlgJHliLDlkozlpKflr7nlsI3lsLEgKi8KLSAgICAnXHhFNicsICdceDg4JywgJ1x4OTEnLCAnXHhFNicsICdceDk3JywgJ1x4QjYnLCAnXHhFNicsICdceDk5JywgJ1x4ODInLCAnXHhFNicsICdceDlDJywgJ1x4ODknLCAnXHhFNicsICdceDlEJywgJ1x4QTUnLCAnXHhFNycsICdceDgyJywgJ1x4QkEnLCAnXHhFOCcsICdceEE2JywgJ1x4ODEnLCAnXHhFOCcsICdceEFBJywgJ1x4QUEnLCAgLyog5oiR5pe25pmC5pyJ5p2l54K66KaB6KqqICovCi0gICAgJ1x4RTgnLCAnXHhBRicsICdceEI0JywgJ3wnLCAgLyog6K+0IHwgKi8KLSAgICAnXHhFNCcsICdceEI4JywgJ1x4QkInLCAnXHhFNCcsICdceEJBJywgJ1x4OUInLCAnXHhFNScsICdceDlCJywgJ1x4QTAnLCAnXHhFNScsICdceEFFJywgJ1x4ODMnLCAnXHhFNicsICdceDgzJywgJ1x4QjMnLCAnXHhFNicsICdceDg0JywgJ1x4OEYnLCAnXHhFNycsICdceDkwJywgJ1x4ODYnLCAnXHhFNycsICdceDk0JywgJ1x4OUYnLCAgLyog5Li75Lqb5Zug5a6D5oOz5oSP55CG55SfICovCi0gICAgJ1x4RTcnLCAnXHg5NScsICdceEI2JywgJ1x4RTcnLCAnXHg5QycsICdceDhCJywgJ1x4RTcnLCAnXHg5RCcsICdceDgwJywgJ1x4RTcnLCAnXHhCRCcsICdceEFFJywgJ1x4RTgnLCAnXHg4MCcsICdceDg1JywgJ1x4RTgnLCAnXHg4NycsICdceEFBJywgJ1x4RTgnLCAnXHg5MScsICdceDk3JywgJ1x4RTgnLCAnXHhBMycsICdceEExJywgIC8qIOeVtueci+edgOe9ruiAheiHquiRl+ijoSAqLwotICAgICdceEU4JywgJ1x4QkYnLCAnXHg4NycsICdceEU4JywgJ1x4QkYnLCAnXHg5OCcsICdceEU4JywgJ1x4QkYnLCAnXHg5QicsICdceEU5JywgJ1x4ODAnLCAnXHhCMicsICdceEU5JywgJ1x4ODEnLCAnXHg4RScsICdceEU5JywgJ1x4ODEnLCAnXHg5MycsICdceEU5JywgJ1x4ODInLCAnXHg4NCcsICdceEU5JywgJ1x4ODcnLCAnXHg4QycsICAvKiDov4fov5jov5vpgLLpgY7pgZPpgoTph4wgKi8KLSAgICAnXHhFOScsICdceDlEJywgJ1x4QTInLCAgLyog6Z2iICovCisgICAgJ1x4RTQnLCAnXHhCOCcsICdceEFBJywgJyAnLCAnXHhFNCcsICdceEI4JywgJ1x4QkEnLCAnICcsICdceEU0JywgJ1x4QkEnLCAnXHhCQScsICcgJywgJ1x4RTQnLCAnXHhCQicsICdceDk2JywgJyAnLCAnXHhFNCcsICdceEJCJywgJ1x4QTUnLCAnICcsICdceEU0JywgJ1x4QkInLCAnXHhBQycsICcgJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJyAnLCAnXHhFNCcsICdceEJFJywgJ1x4ODYnLCAgLyog5LiqIOS4uiDkurog5LuWIOS7pSDku6wg5L2gIOS+hiAqLworICAgICcgJywgJ1x4RTUnLCAnXHg4MCcsICdceDhCJywgJyAnLCAnXHhFNScsICdceDgwJywgJ1x4OTEnLCAnICcsICdceEU1JywgJ1x4ODgnLCAnXHhCMCcsICcgJywgJ1x4RTUnLCAnXHg5MicsICdceDhDJywgJyAnLCAnXHhFNScsICdceEE0JywgJ1x4QTcnLCAnICcsICdceEU1JywgJ1x4QUYnLCAnXHhCOScsICcgJywgJ1x4RTUnLCAnXHhCMCcsICdceDhEJywgJyAnLCAnXHhFNScsICdceEIwJywgJ1x4QjEnLCAgLyogIOWAiyDlgJEg5YiwIOWSjCDlpKcg5a+5IOWwjSDlsLEgKi8KKyAgICAnICcsICdceEU2JywgJ1x4ODgnLCAnXHg5MScsICcgJywgJ1x4RTYnLCAnXHg5NycsICdceEI2JywgJyAnLCAnXHhFNicsICdceDk5JywgJ1x4ODInLCAnICcsICdceEU2JywgJ1x4OUMnLCAnXHg4OScsICcgJywgJ1x4RTYnLCAnXHg5RCcsICdceEE1JywgJyAnLCAnXHhFNycsICdceDgyJywgJ1x4QkEnLCAnICcsICdceEU4JywgJ1x4QTYnLCAnXHg4MScsICcgJywgJ1x4RTgnLCAnXHhBQScsICdceEFBJywgIC8qICDmiJEg5pe2IOaZgiDmnIkg5p2lIOeCuiDopoEg6KqqICovCisgICAgJyAnLCAnXHhFOCcsICdceEFGJywgJ1x4QjQnLCAnICcsICd8JywgIC8qICDor7QgfCAqLworICAgICcgJywgJ1x4RTQnLCAnXHhCOCcsICdceEJCJywgJyAnLCAnXHhFNCcsICdceEJBJywgJ1x4OUInLCAnICcsICdceEU1JywgJ1x4OUInLCAnXHhBMCcsICcgJywgJ1x4RTUnLCAnXHhBRScsICdceDgzJywgJyAnLCAnXHhFNicsICdceDgzJywgJ1x4QjMnLCAnICcsICdceEU2JywgJ1x4ODQnLCAnXHg4RicsICcgJywgJ1x4RTcnLCAnXHg5MCcsICdceDg2JywgJyAnLCAnXHhFNycsICdceDk0JywgJ1x4OUYnLCAgLyogIOS4uyDkupsg5ZugIOWugyDmg7Mg5oSPIOeQhiDnlJ8gKi8KKyAgICAnICcsICdceEU3JywgJ1x4OTUnLCAnXHhCNicsICcgJywgJ1x4RTcnLCAnXHg5QycsICdceDhCJywgJyAnLCAnXHhFNycsICdceDlEJywgJ1x4ODAnLCAnICcsICdceEU3JywgJ1x4QkQnLCAnXHhBRScsICcgJywgJ1x4RTgnLCAnXHg4MCcsICdceDg1JywgJyAnLCAnXHhFOCcsICdceDg3JywgJ1x4QUEnLCAnICcsICdceEU4JywgJ1x4OTEnLCAnXHg5NycsICcgJywgJ1x4RTgnLCAnXHhBMycsICdceEExJywgIC8qICDnlbYg55yLIOedgCDnva4g6ICFIOiHqiDokZcg6KOhICovCisgICAgJyAnLCAnXHhFOCcsICdceEJGJywgJ1x4ODcnLCAnICcsICdceEU4JywgJ1x4QkYnLCAnXHg5OCcsICcgJywgJ1x4RTgnLCAnXHhCRicsICdceDlCJywgJyAnLCAnXHhFOScsICdceDgwJywgJ1x4QjInLCAnICcsICdceEU5JywgJ1x4ODEnLCAnXHg4RScsICcgJywgJ1x4RTknLCAnXHg4MScsICdceDkzJywgJyAnLCAnXHhFOScsICdceDgyJywgJ1x4ODQnLCAnICcsICdceEU5JywgJ1x4ODcnLCAnXHg4QycsICAvKiAg6L+HIOi/mCDov5sg6YCyIOmBjiDpgZMg6YKEIOmHjCAqLworICAgICcgJywgJ1x4RTknLCAnXHg5RCcsICdceEEyJywgIC8qICDpnaIgKi8KICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVAogICAgICdcMCcsCi0gICAgJ1x4RTQnLCAnXHhCQScsICdceDlCJywgJ1x4RTQnLCAnXHhCQicsICdceEFDJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJ1x4RTQnLCAnXHhCRScsICdceDg2JywgJ1x4RTUnLCAnXHg4MCcsICdceDkxJywgJ1x4RTUnLCAnXHg4OCcsICdceEIwJywgJ1x4RTUnLCAnXHg5MicsICdceDhDJywgJ1x4RTUnLCAnXHg5QycsICdceEIwJywgIC8qIOS6m+S7rOS9oOS+huWAkeWIsOWSjOWcsCAqLwotICAgICdceEU1JywgJ1x4QTUnLCAnXHhCOScsICdceEU1JywgJ1x4QjAnLCAnXHg4NicsICdceEU1JywgJ1x4QjAnLCAnXHg4NycsICdceEU1JywgJ1x4QjAnLCAnXHhCMScsICdceEU1JywgJ1x4QjknLCAnXHhCNCcsICdceEU1JywgJ1x4QkUnLCAnXHg5NycsICdceEU2JywgJ1x4ODMnLCAnXHg4NScsICdceEU2JywgJ1x4OUMnLCAnXHg4MCcsICAvKiDlpbnlsIblsIflsLHlubTlvpfmg4XmnIAgKi8KLSAgICAnXHhFNicsICdceEEwJywgJ1x4QjcnLCAnXHhFNicsICdceEE4JywgJ1x4QTMnLCAnXHhFNycsICdceDkwJywgJ1x4ODYnLCAnXHhFOCcsICdceDgzJywgJ1x4QkQnLCAnXHhFOCcsICdceEFBJywgJ1x4QUEnLCAnXHhFOCcsICdceEFGJywgJ1x4QjQnLCAnXHhFOCcsICdceEJGJywgJ1x4OTknLCAnXHhFOScsICdceDgwJywgJ1x4OTknLCAgLyog5qC35qij55CG6IO96Kqq6K+06L+Z6YCZICovCi0gICAgJ1x4RTknLCAnXHg4MCcsICdceDlBJywgJ3wnLCAgLyog6YCaIHwgKi8KLSAgICAnXHhFNScsICdceDhEJywgJ1x4QjMnLCAnXHhFNScsICdceDkwJywgJ1x4OTcnLCAnXHhFNScsICdceDkwJywgJ1x4QTcnLCAnXHhFNScsICdceDkwJywgJ1x4QUMnLCAnXHhFNScsICdceDkxJywgJ1x4QTInLCAnXHhFNScsICdceDkzJywgJ1x4ODEnLCAnXHhFNScsICdceDkzJywgJ1x4OEQnLCAnXHhFNScsICdceDk3JywgJ1x4OEUnLCAgLyog5Y2z5ZCX5ZCn5ZCs5ZGi5ZOB5ZON5ZeOICovCi0gICAgJ1x4RTUnLCAnXHhCOCcsICdceDg4JywgJ1x4RTUnLCAnXHhCOCcsICdceEFCJywgJ1x4RTYnLCAnXHg5NCcsICdceEI2JywgJ1x4RTYnLCAnXHg5NicsICdceEFEJywgJ1x4RTYnLCAnXHg5NicsICdceEI3JywgJ1x4RTYnLCAnXHg5OCcsICdceDhFJywgJ1x4RTcnLCAnXHg5QycsICdceEJDJywgJ1x4RTknLCAnXHg5NicsICdceDkzJywgIC8qIOW4iOW4q+aUtuaWreaWt+aYjuecvOmWkyAqLwotICAgICdceEU5JywgJ1x4OTcnLCAnXHhCNCcsICdceEU5JywgJ1x4OTknLCAnXHg4NScsICdceEU5JywgJ1x4OTknLCAnXHg4OCcsICdceEU5JywgJ1x4OTknLCAnXHg5MCcsICdceEU5JywgJ1x4OTknLCAnXHhBNCcsICdceEU5JywgJ1x4OTknLCAnXHhCMycsICdceEU5JywgJ1x4OUEnLCAnXHg4RicsICdceEU5JywgJ1x4OUEnLCAnXHg5QicsICAvKiDpl7TpmYXpmYjpmZDpmaTpmbPpmo/pmpsgKi8KLSAgICAnXHhFOScsICdceDlBJywgJ1x4QTgnLCAgLyog6ZqoICovCisgICAgJyAnLCAnXHhFNCcsICdceEJBJywgJ1x4OUInLCAnICcsICdceEU0JywgJ1x4QkInLCAnXHhBQycsICcgJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJyAnLCAnXHhFNCcsICdceEJFJywgJ1x4ODYnLCAnICcsICdceEU1JywgJ1x4ODAnLCAnXHg5MScsICcgJywgJ1x4RTUnLCAnXHg4OCcsICdceEIwJywgJyAnLCAnXHhFNScsICdceDkyJywgJ1x4OEMnLCAnICcsICdceEU1JywgJ1x4OUMnLCAnXHhCMCcsICAvKiAg5LqbIOS7rCDkvaAg5L6GIOWAkSDliLAg5ZKMIOWcsCAqLworICAgICcgJywgJ1x4RTUnLCAnXHhBNScsICdceEI5JywgJyAnLCAnXHhFNScsICdceEIwJywgJ1x4ODYnLCAnICcsICdceEU1JywgJ1x4QjAnLCAnXHg4NycsICcgJywgJ1x4RTUnLCAnXHhCMCcsICdceEIxJywgJyAnLCAnXHhFNScsICdceEI5JywgJ1x4QjQnLCAnICcsICdceEU1JywgJ1x4QkUnLCAnXHg5NycsICcgJywgJ1x4RTYnLCAnXHg4MycsICdceDg1JywgJyAnLCAnXHhFNicsICdceDlDJywgJ1x4ODAnLCAgLyogIOWluSDlsIYg5bCHIOWwsSDlubQg5b6XIOaDhSDmnIAgKi8KKyAgICAnICcsICdceEU2JywgJ1x4QTAnLCAnXHhCNycsICcgJywgJ1x4RTYnLCAnXHhBOCcsICdceEEzJywgJyAnLCAnXHhFNycsICdceDkwJywgJ1x4ODYnLCAnICcsICdceEU4JywgJ1x4ODMnLCAnXHhCRCcsICcgJywgJ1x4RTgnLCAnXHhBQScsICdceEFBJywgJyAnLCAnXHhFOCcsICdceEFGJywgJ1x4QjQnLCAnICcsICdceEU4JywgJ1x4QkYnLCAnXHg5OScsICcgJywgJ1x4RTknLCAnXHg4MCcsICdceDk5JywgIC8qICDmoLcg5qijIOeQhiDog70g6KqqIOivtCDov5kg6YCZICovCisgICAgJyAnLCAnXHhFOScsICdceDgwJywgJ1x4OUEnLCAnICcsICd8JywgIC8qICDpgJogfCAqLworICAgICcgJywgJ1x4RTUnLCAnXHg4RCcsICdceEIzJywgJyAnLCAnXHhFNScsICdceDkwJywgJ1x4OTcnLCAnICcsICdceEU1JywgJ1x4OTAnLCAnXHhBNycsICcgJywgJ1x4RTUnLCAnXHg5MCcsICdceEFDJywgJyAnLCAnXHhFNScsICdceDkxJywgJ1x4QTInLCAnICcsICdceEU1JywgJ1x4OTMnLCAnXHg4MScsICcgJywgJ1x4RTUnLCAnXHg5MycsICdceDhEJywgJyAnLCAnXHhFNScsICdceDk3JywgJ1x4OEUnLCAgLyogIOWNsyDlkJcg5ZCnIOWQrCDlkaIg5ZOBIOWTjSDll44gKi8KKyAgICAnICcsICdceEU1JywgJ1x4QjgnLCAnXHg4OCcsICcgJywgJ1x4RTUnLCAnXHhCOCcsICdceEFCJywgJyAnLCAnXHhFNicsICdceDk0JywgJ1x4QjYnLCAnICcsICdceEU2JywgJ1x4OTYnLCAnXHhBRCcsICcgJywgJ1x4RTYnLCAnXHg5NicsICdceEI3JywgJyAnLCAnXHhFNicsICdceDk4JywgJ1x4OEUnLCAnICcsICdceEU3JywgJ1x4OUMnLCAnXHhCQycsICcgJywgJ1x4RTknLCAnXHg5NicsICdceDkzJywgIC8qICDluIgg5birIOaUtiDmlq0g5pa3IOaYjiDnnLwg6ZaTICovCisgICAgJyAnLCAnXHhFOScsICdceDk3JywgJ1x4QjQnLCAnICcsICdceEU5JywgJ1x4OTknLCAnXHg4NScsICcgJywgJ1x4RTknLCAnXHg5OScsICdceDg4JywgJyAnLCAnXHhFOScsICdceDk5JywgJ1x4OTAnLCAnICcsICdceEU5JywgJ1x4OTknLCAnXHhBNCcsICcgJywgJ1x4RTknLCAnXHg5OScsICdceEIzJywgJyAnLCAnXHhFOScsICdceDlBJywgJ1x4OEYnLCAnICcsICdceEU5JywgJ1x4OUEnLCAnXHg5QicsICAvKiAg6Ze0IOmZhSDpmYgg6ZmQIOmZpCDpmbMg6ZqPIOmamyAqLworICAgICcgJywgJ1x4RTknLCAnXHg5QScsICdceEE4JywgIC8qICDpmqggKi8KICAgICAnXDAnLAotICAgICdceEU0JywgJ1x4QkEnLCAnXHg4QicsICdceEU1JywgJ1x4ODknLCAnXHg4RCcsICdceEU1JywgJ1x4QUQnLCAnXHhCOCcsICdceEU1JywgJ1x4QjAnLCAnXHg4NicsICdceEU1JywgJ1x4QjAnLCAnXHg4NycsICdceEU2JywgJ1x4ODMnLCAnXHg4NScsICdceEU2JywgJ1x4ODMnLCAnXHhCMycsICdceEU2JywgJ1x4ODgnLCAnXHg5NicsICAvKiDkuovliY3lrbjlsIblsIfmg4Xmg7PmiJYgKi8KLSAgICAnXHhFNicsICdceDk0JywgJ1x4QkYnLCAnXHhFNicsICdceDk2JywgJ1x4QUYnLCAnXHhFNicsICdceDk2JywgJ1x4QjAnLCAnXHhFNicsICdceEEwJywgJ1x4QjcnLCAnXHhFNicsICdceEE4JywgJ1x4QTMnLCAnXHhFNicsICdceEIwJywgJ1x4OTEnLCAnXHhFNicsICdceEIyJywgJ1x4OTInLCAnXHhFNicsICdceEIyJywgJ1x4QTEnLCAgLyog5pS/5pav5paw5qC35qij5rCR5rKS5rKhICovCi0gICAgJ1x4RTcnLCAnXHg4NCcsICdceEI2JywgJ1x4RTcnLCAnXHg4OScsICdceEI5JywgJ1x4RTcnLCAnXHg4RScsICdceEIwJywgJ1x4RTcnLCAnXHg4RicsICdceEJFJywgJ1x4RTcnLCAnXHg5MCcsICdceDgzJywgJ1x4RTcnLCAnXHhBQycsICdceEFDJywgJ1x4RTcnLCAnXHhCNicsICdceDkzJywgJ1x4RTgnLCAnXHhCMCcsICdceDgxJywgIC8qIOeEtueJueeOsOePvueQg+esrOe2k+iwgSAqLwotICAgICdceEU4JywgJ1x4QjUnLCAnXHhCNycsICd8JywgIC8qIOi1tyB8ICovCi0gICAgJ1x4RTQnLCAnXHhCRScsICdceDhCJywgJ1x4RTUnLCAnXHg4OCcsICdceEE1JywgJ1x4RTUnLCAnXHg4OCcsICdceEFCJywgJ1x4RTUnLCAnXHg4OCcsICdceEI2JywgJ1x4RTUnLCAnXHg4QScsICdceEE4JywgJ1x4RTUnLCAnXHg4QicsICdceDk1JywgJ1x4RTUnLCAnXHg5MCcsICdceDk3JywgJ1x4RTUnLCAnXHg5NycsICdceDhFJywgIC8qIOS+i+WIpeWIq+WItuWKqOWLleWQl+WXjiAqLwotICAgICdceEU1JywgJ1x4QTInLCAnXHg5RScsICdceEU2JywgJ1x4OEMnLCAnXHg4NycsICdceEU2JywgJ1x4OTgnLCAnXHg4RScsICdceEU2JywgJ1x4OUMnLCAnXHg5RCcsICdceEU2JywgJ1x4OUMnLCAnXHg5RicsICdceEU2JywgJ1x4OUUnLCAnXHg4NCcsICdceEU3JywgJ1x4ODknLCAnXHhBOScsICdceEU3JywgJ1x4QTEnLCAnXHhBRScsICAvKiDlop7mjIfmmI7mnJ3mnJ/mnoTniannoa4gKi8KLSAgICAnXHhFNycsICdceEE3JywgJ1x4OEQnLCAnXHhFOCcsICdceEFBJywgJ1x4QkYnLCAnXHhFOCcsICdceEIwJywgJ1x4ODMnLCAnXHhFOCcsICdceEIyJywgJ1x4QkInLCAnXHhFOCcsICdceEI0JywgJ1x4QjknLCAnXHhFOScsICdceDgyJywgJ1x4QTMnLCAnXHhFOScsICdceDgzJywgJ1x4QkQnLCAnXHhFOScsICdceDk2JywgJ1x4OTMnLCAgLyog56eN6Kq/6LCD6LK76LS56YKj6YO96ZaTICovCi0gICAgJ1x4RTknLCAnXHg5NycsICdceEI0JywgIC8qIOmXtCAqLworICAgICdceEU0JywgJ1x4QkEnLCAnXHg4QicsICcgJywgJ1x4RTUnLCAnXHg4OScsICdceDhEJywgJyAnLCAnXHhFNScsICdceEFEJywgJ1x4QjgnLCAnICcsICdceEU1JywgJ1x4QjAnLCAnXHg4NicsICcgJywgJ1x4RTUnLCAnXHhCMCcsICdceDg3JywgJyAnLCAnXHhFNicsICdceDgzJywgJ1x4ODUnLCAnICcsICdceEU2JywgJ1x4ODMnLCAnXHhCMycsICcgJywgJ1x4RTYnLCAnXHg4OCcsICdceDk2JywgIC8qIOS6iyDliY0g5a24IOWwhiDlsIcg5oOFIOaDsyDmiJYgKi8KKyAgICAnICcsICdceEU2JywgJ1x4OTQnLCAnXHhCRicsICcgJywgJ1x4RTYnLCAnXHg5NicsICdceEFGJywgJyAnLCAnXHhFNicsICdceDk2JywgJ1x4QjAnLCAnICcsICdceEU2JywgJ1x4QTAnLCAnXHhCNycsICcgJywgJ1x4RTYnLCAnXHhBOCcsICdceEEzJywgJyAnLCAnXHhFNicsICdceEIwJywgJ1x4OTEnLCAnICcsICdceEU2JywgJ1x4QjInLCAnXHg5MicsICcgJywgJ1x4RTYnLCAnXHhCMicsICdceEExJywgIC8qICDmlL8g5pavIOaWsCDmoLcg5qijIOawkSDmspIg5rKhICovCisgICAgJyAnLCAnXHhFNycsICdceDg0JywgJ1x4QjYnLCAnICcsICdceEU3JywgJ1x4ODknLCAnXHhCOScsICcgJywgJ1x4RTcnLCAnXHg4RScsICdceEIwJywgJyAnLCAnXHhFNycsICdceDhGJywgJ1x4QkUnLCAnICcsICdceEU3JywgJ1x4OTAnLCAnXHg4MycsICcgJywgJ1x4RTcnLCAnXHhBQycsICdceEFDJywgJyAnLCAnXHhFNycsICdceEI2JywgJ1x4OTMnLCAnICcsICdceEU4JywgJ1x4QjAnLCAnXHg4MScsICAvKiAg54S2IOeJuSDnjrAg54++IOeQgyDnrKwg57aTIOiwgSAqLworICAgICcgJywgJ1x4RTgnLCAnXHhCNScsICdceEI3JywgJyAnLCAnfCcsICAvKiAg6LW3IHwgKi8KKyAgICAnICcsICdceEU0JywgJ1x4QkUnLCAnXHg4QicsICcgJywgJ1x4RTUnLCAnXHg4OCcsICdceEE1JywgJyAnLCAnXHhFNScsICdceDg4JywgJ1x4QUInLCAnICcsICdceEU1JywgJ1x4ODgnLCAnXHhCNicsICcgJywgJ1x4RTUnLCAnXHg4QScsICdceEE4JywgJyAnLCAnXHhFNScsICdceDhCJywgJ1x4OTUnLCAnICcsICdceEU1JywgJ1x4OTAnLCAnXHg5NycsICcgJywgJ1x4RTUnLCAnXHg5NycsICdceDhFJywgIC8qICDkvosg5YilIOWIqyDliLYg5YqoIOWLlSDlkJcg5ZeOICovCisgICAgJyAnLCAnXHhFNScsICdceEEyJywgJ1x4OUUnLCAnICcsICdceEU2JywgJ1x4OEMnLCAnXHg4NycsICcgJywgJ1x4RTYnLCAnXHg5OCcsICdceDhFJywgJyAnLCAnXHhFNicsICdceDlDJywgJ1x4OUQnLCAnICcsICdceEU2JywgJ1x4OUMnLCAnXHg5RicsICcgJywgJ1x4RTYnLCAnXHg5RScsICdceDg0JywgJyAnLCAnXHhFNycsICdceDg5JywgJ1x4QTknLCAnICcsICdceEU3JywgJ1x4QTEnLCAnXHhBRScsICAvKiAg5aKeIOaMhyDmmI4g5pydIOacnyDmnoQg54mpIOehriAqLworICAgICcgJywgJ1x4RTcnLCAnXHhBNycsICdceDhEJywgJyAnLCAnXHhFOCcsICdceEFBJywgJ1x4QkYnLCAnICcsICdceEU4JywgJ1x4QjAnLCAnXHg4MycsICcgJywgJ1x4RTgnLCAnXHhCMicsICdceEJCJywgJyAnLCAnXHhFOCcsICdceEI0JywgJ1x4QjknLCAnICcsICdceEU5JywgJ1x4ODInLCAnXHhBMycsICcgJywgJ1x4RTknLCAnXHg4MycsICdceEJEJywgJyAnLCAnXHhFOScsICdceDk2JywgJ1x4OTMnLCAgLyogIOenjSDoqr8g6LCDIOiyuyDotLkg6YKjIOmDvSDplpMgKi8KKyAgICAnICcsICdceEU5JywgJ1x4OTcnLCAnXHhCNCcsICAvKiAg6Ze0ICovCiAjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQgKi8KICNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0NKSyAgICAgICAgICAgICAgICAqLwogICAgICdcMCcsCkBAIC0xMzksOSArMjgxLDMzIEBACiAgIGFmX2JsdWVfc3RyaW5nc2V0c1tdID0KICAgewogICAgIC8qICovCi0gICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QLCAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTiwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4sICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9UT1AsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRCwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0JBU0UsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0JBU0UsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwsICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMLCAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMLCAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTEwsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfApAQCAtMTU3LDYgKzMyMywyMyBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFLCAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fQVNPTVRBVlJVTElfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0JFVEFfVE9QLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCkBAIC0xNjUsMTEgKzM0OCw0NyBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTEwsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ESUdJVF9UT1AsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9IRUFELCAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQkFTRSwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0RJR0lUX1RPUCwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORyAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LQU5OQURBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX1NVQlNDUklQVF9UT1AsICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9TVUJfVE9QICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9CT1RUT00sICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0hNRVJfREVTQ0VOREVSLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX0xBUkdFX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1lNQk9MU19XQVhJTkdfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19UT1AsICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSwgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19BU0NFTkRFUiwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0RFU0NFTkRFUiwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0ZfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCkBAIC0xNzgsNiArMzk3LDM5IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTCwgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMX0ZfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMLCAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0ZfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMLCAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsIDAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbiBiL3NyYy9hdXRvZml0L2FmYmx1ZS5jaW4KaW5kZXggYjMwM2E0Yi4uMGMzY2FlOCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbgorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuY2luCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0IGIvc3JjL2F1dG9maXQvYWZibHVlLmRhdAppbmRleCBmZDU2ODRlLi5mNWYwNGYyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0CisrKyBiL3NyYy9hdXRvZml0L2FmYmx1ZS5kYXQKQEAgLTIsNyArMiw3IEBACiAvLwogLy8gICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzLgogLy8KLS8vICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5CisvLyAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieQogLy8gIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIC8vCiAvLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogLy8gbGFiZWxzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIGFuZCBmb2xsb3dlZCBieSBhIGNvbG9uIChldmVyeXRoaW5nIGluIGEKIC8vIHNpbmdsZSBsaW5lKTsgdGhlIGZpcnN0IGxhYmVsIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbnVtZXJhdGlvbiB0ZW1wbGF0ZSwKIC8vIHRoZSBzZWNvbmQgdGhlIG5hbWUgb2YgdGhlIGFycmF5IHRlbXBsYXRlLCBhbmQgdGhlIHRoaXJkIHRoZSBuYW1lIG9mIHRoZQotLy8gYG1heGltdW0nIHRlbXBsYXRlLCBob2xkaW5nIHRoZSBzaXplIG9mIHRoZSBsYXJnZXN0IGFycmF5IGVsZW1lbnQuICBUaGUKLS8vIHNjcmlwdCB0aGVuIGZpbGxzIHRoZSBjb3JyZXNwb25kaW5nIHRlbXBsYXRlcyAoaW5kaWNhdGVkIGJ5IGBAJwotLy8gY2hhcmFjdGVycyBhcm91bmQgdGhlIG5hbWUpLgorLy8gYG1heGltdW0nIHRlbXBsYXRlLiAgVGhlIHNjcmlwdCB0aGVuIGZpbGxzIHRoZSBjb3JyZXNwb25kaW5nIHRlbXBsYXRlcworLy8gKGluZGljYXRlZCBieSBgQCcgY2hhcmFjdGVycyBhcm91bmQgdGhlIG5hbWUpLgogLy8KIC8vIEEgc2VjdGlvbiBjb250YWlucyBvbmUgb3IgbW9yZSBkYXRhIHJlY29yZHMuICBFYWNoIGRhdGEgcmVjb3JkIGNvbnNpc3RzCiAvLyBvZiB0d28gb3IgbW9yZSBsaW5lcy4gIFRoZSBmaXJzdCBsaW5lIGhvbGRzIHRoZSBlbnVtZXJhdGlvbiBuYW1lLCBhbmQgdGhlCkBAIC0zMCwxNSArMjksMjAgQEAKIC8vCiAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHJlcHJlc2VudGF0aW9ucyBmb3IgYXJyYXkgZGF0YS4KIC8vCi0vLyAtIEEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaW4gVVRGLTggZW5jb2RpbmcgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcywKLS8vICAgdXNpbmcgQyBzeW50YXguICBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3RyaW5nIHBlciBsaW5lLCB0aHVzIHRoZQotLy8gICBzdGFydGluZyBhbmQgZW5kaW5nIGRvdWJsZSBxdW90ZSBtdXN0IGJlIHRoZSBmaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXIKLS8vICAgaW4gdGhlIGxpbmUsIHJlc3BlY3RpdmVseSwgaWdub3Jpbmcgd2hpdGVzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZQotLy8gICBzdHJpbmcuICBTcGFjZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgc3RyaW5nIGFyZSBpZ25vcmVkIHRvby4gIElmIHRoZXJlCi0vLyAgIGFyZSBtdWx0aXBsZSBzdHJpbmdzIChpbiBtdWx0aXBsZSBsaW5lcyksIHRoZXkgYXJlIGNvbmNhdGVuYXRlZCB0byBhCi0vLyAgIHNpbmdsZSBzdHJpbmcuICBJbiB0aGUgb3V0cHV0LCBhIHN0cmluZyBnZXRzIHJlcHJlc2VudGVkIGFzIGEgc2VyaWVzIG9mCi0vLyAgIHNpbmdsZXMgYnl0ZXMsIGZvbGxvd2VkIGJ5IGEgemVybyBieXRlLiAgVGhlIGVudW1lcmF0aW9uIHZhbHVlcyBzaW1wbHkKLS8vICAgaG9sZCBieXRlIG9mZnNldHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZ3MuCisvLyAtIEEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgb3IgY2hhcmFjdGVyIGNsdXN0ZXJzIChmb3IgZXhhbXBsZSwgcmVwcmVzZW50aW5nCisvLyAgIEFrc2hhcmFzLCBEZXZhbmFnYXJpIHN5bGxhYmxlcykgaW4gVVRGLTggZW5jb2RpbmcgZW5jbG9zZWQgaW4gZG91YmxlCisvLyAgIHF1b3RlcywgdXNpbmcgQyBzeW50YXgsIHdoZXJlIHRoZSBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKy8vICAgVGhlcmUgY2FuIGJlIG9ubHkgb25lIHN0cmluZyBwZXIgbGluZSwgdGh1cyB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZworLy8gICBkb3VibGUgcXVvdGUgbXVzdCBiZSB0aGUgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lLAorLy8gICByZXNwZWN0aXZlbHksIGlnbm9yaW5nIHdoaXRlc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgc3RyaW5nLiAgSWYKKy8vICAgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MgKGluIG11bHRpcGxlIGxpbmVzKSwgdGhleSBhcmUgY29uY2F0ZW5hdGVkCisvLyAgIHRvIGEgc2luZ2xlIHN0cmluZy4gIEluIHRoZSBvdXRwdXQsIGEgc3RyaW5nIGdldHMgcmVwcmVzZW50ZWQgYXMgYQorLy8gICBzZXJpZXMgb2Ygc2luZ2xlcyBieXRlcywgZm9sbG93ZWQgYnkgYSB6ZXJvIGJ5dGUuICBUaGUgZW51bWVyYXRpb24KKy8vICAgdmFsdWVzIHNpbXBseSBob2xkIGJ5dGUgb2Zmc2V0cyB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKy8vICAgc3RyaW5ncy4KKy8vCisvLyAgIEZvciBzdHJpbmdzLCB0aGUgYG1heGltdW0nIHRlbXBsYXRlIGhvbGRzIHRoZSBtYXhpbXVtIG51bWJlciBvZgorLy8gICBub24tc3BhY2UgY2hhcmFjdGVycyBpbiBhbGwgc3RyaW5ncy4KIC8vCiAvLyAtIERhdGEgYmxvY2tzIGVuY2xvc2VkIGluIGJhbGFuY2VkIGJyYWNlcywgd2hpY2ggZ2V0IGNvcGllZCB2ZXJiYXRpbSBhbmQKIC8vICAgd2hpY2ggY2FuIHNwYW4gbXVsdGlwbGUgbGluZXMuICBUaGUgb3BlbmluZyBicmFjZSBvZiBhIGJsb2NrIG11c3QgYmUKQEAgLTQ3LDYgKzUxLDkgQEAKIC8vICAgY2hhcmFjdGVyIGFmdGVyIGVhY2ggYmxvY2sgYW5kIGNvdW50cyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBzZXQgdGhlCiAvLyAgIGVudW1lcmF0aW9uIHZhbHVlcy4KIC8vCisvLyAgIEZvciBkYXRhIGJsb2NrcywgdGhlIGBtYXhpbXVtJyB0ZW1wbGF0ZSBob2xkcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKKy8vICAgYXJyYXkgZWxlbWVudHMuCisvLwogLy8gQSBzZWN0aW9uIGNhbiBjb250YWluIGVpdGhlciBzdHJpbmdzIG9ubHkgb3IgZGF0YSBibG9ja3Mgb25seS4KIC8vCiAvLyBBIGNvbW1lbnQgbGluZSBzdGFydHMgd2l0aCBgLy8nOyBpdCBnZXRzIHJlbW92ZWQuICBBIHByZXByb2Nlc3NvcgpAQCAtNTgsOCArNjUsOCBAQAogLy8gdmFsdWVzOyB0aGlzIGVzc2VudGlhbGx5IG1lYW5zIHRoYXQgdGhlIG1heGltdW0gdmFsdWVzIGNhbiBlYXNpbHkgYmUgdG9vCiAvLyBsYXJnZS4gIEdpdmVuIHRoYXQgdGhlIHB1cnBvc2Ugb2YgdGhvc2UgdmFsdWVzIGlzIHRvIGNyZWF0ZSBsb2NhbAogLy8gZml4ZWQtc2l6ZSBhcnJheXMgYXQgY29tcGlsZSB0aW1lIGZvciBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgdGhlIGJsdWUgem9uZQotLy8gZGF0YSwgdGhpcyBpc24ndCBhIHByb2JsZW0uICBOb3RlIHRoZSB0aGUgZmluYWwgemVybyBieXRlIG9mIGEgc3RyaW5nIGlzCi0vLyBub3QgY291bnRlZC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3VudCBob2xkcyB0aGUgbnVtYmVyIG9mIFVURi04IGVuY29kZWQKKy8vIGRhdGEsIHRoaXMgaXNuJ3QgYSBwcm9ibGVtLiAgTm90ZSB0aGUgZmluYWwgemVybyBieXRlIG9mIGEgc3RyaW5nIGlzIG5vdAorLy8gY291bnRlZC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3VudCBob2xkcyB0aGUgbnVtYmVyIG9mIFVURi04IGVuY29kZWQKIC8vIGNoYXJhY3RlcnMsIG5vdCBieXRlcy4KIAogCkBAIC02OSwyMCArNzYsNTQgQEAKIAogICBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QCiAgICAgItinINilINmEINmDINi3INi4IgotICBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTgorICBBRl9CTFVFX1NUUklOR19BUkFCSUNfQk9UVE9NCiAgICAgItiqINirINi3INi4INmDIgorICAvLyBXZSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGFjY2VzcyB0byBtZWRpYWwgZm9ybXMgdmlhIFVuaWNvZGUgaW4gY2FzZQorICAvLyBBcmFiaWMgcHJlc2VudGF0aW9uYWwgZm9ybXMgYXJlIG1pc3NpbmcuICBUaGUgb25seSBjaGFyYWN0ZXIgdGhhdCBpcworICAvLyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIHNhbWUgdmVydGljYWwgcG9zaXRpb24gd2l0aCBqb2luaW5nICh0aGlzIGlzLAorICAvLyBub24taXNvbGF0ZWQpIGZvcm1zIGlzIFUrMDY0MCwgQVJBQklDIFRBVFdFRUwsIHdoaWNoIG11c3Qgam9pbiBib3RoCisgIC8vIHJvdW5kIGFuZCBmbGF0IGN1cnZlcy4KKyAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4KKyAgICAi2YAiCisKKyAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9UT1AKKyAgICAi1LEg1YQg1ZIg1Y0g1LIg1LMg1LQg1ZUiCisgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX0NBUElUQUxfQk9UVE9NCisgICAgItWSINWIINS0INWDINWHINWNINWPINWVIgorICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9BU0NFTkRFUgorICAgICLVpSDVpyDVqyDVtCDVviDWhiDVsyIKKyAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfVE9QCisgICAgItWhINW1INaCINW9INWjINW3INaAINaFIgorICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9CT1RUT00KKyAgICAi1bAg1bgg1bMg1aEg1aUg1a4g1b0g1oUiCisgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0RFU0NFTkRFUgorICAgICLVoiDVqCDVqyDVrCDVsiDVuiDWgyDWgSIKKworICBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0JBU0UKKyAgICAi4KaFIOCmoSDgpqQg4KaoIOCmrCDgpq0g4KayIOCmlSIKKyAgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9UT1AKKyAgICAi4KaHIOCmnyDgpqAg4Ka/IOCngCDgp4gg4KeXIgorICBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0hFQUQKKyAgICAi4KaTIOCmjyDgpqEg4KakIOCmqCDgpqwg4KayIOCmlSIKKworICBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMCisgICAgIuGPhiDhjrsg4Y6sIOGPgyDhjqQg4Y+jIOGOpiDhj5UiCisgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0FTQ0VOREVSCisgICAgIuqukiDqrqQg6q62IOqttCDqrb4g6q6XIOqunSDqrr8iCisgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMCisgICAgIuquliDqrbwg6q6TIOquoCDqrrMg6q22IOqupSDqrrsiCisgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUgorICAgICLhj7gg6q6QIOqtuSDqrbsiCiAKICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AKLSAgICAi0JHQktCV0J/Ql9Ce0KHQrSIKKyAgICAi0JEg0JIg0JUg0J8g0Jcg0J4g0KEg0K0iCiAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NCi0gICAgItCR0JLQldCo0JfQntCh0K0iCisgICAgItCRINCSINCVINCoINCXINCeINChINCtIgogICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTAotICAgICLRhdC/0L3RiNC10LfQvtGBIgorICAgICLRhSDQvyDQvSDRiCDQtSDQtyDQviDRgSIKICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTExfREVTQ0VOREVSCi0gICAgItGA0YPRhCIKKyAgICAi0YAg0YMg0YQiCiAKLSAgLy8gd2Ugc2VwYXJhdGUgdGhlIGxldHRlcnMgd2l0aCBzcGFjZXMgdG8gYXZvaWQgbGlnYXR1cmVzOwotICAvLyB0aGlzIGlzIGp1c3QgZm9yIGNvbnZlbmllbmNlIHRvIHNpbXBsaWZ5IHJlYWRpbmcKICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFCiAgICAgIuCklSDgpK4g4KSFIOCkhiDgpKUg4KSnIOCkrSDgpLYiCiAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfVE9QCkBAIC05NSwzNyArMTM2LDE2OCBAQAogICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JPVFRPTQogICAgICLgpYEg4KWDIgogCisgIEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX1RPUAorICAgICLhiIAg4YiDIOGLmCDhjZAg4YibIOGJoCDhi4sg4YuQIgorICBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19CT1RUT00KKyAgICAi4YiIIOGIkCDhiaAg4YuYIOGIgCDhiKog4YuQIOGMqCIKKworICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfVE9QCisgICAgIuGDkiDhg5Mg4YOUIOGDlSDhg5cg4YOYIOGDnSDhg6YiCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9CT1RUT00KKyAgICAi4YOQIOGDliDhg5sg4YOhIOGDqCDhg6sg4YOuIOGDniIKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0FTQ0VOREVSCisgICAgIuGDoSDhg64g4YOlIOGDliDhg5sg4YOoIOGDqSDhg6wiCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9ERVNDRU5ERVIKKyAgICAi4YOUIOGDlSDhg58g4YOiIOGDoyDhg6Qg4YOlIOGDpyIKKworICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9UT1AKKyAgICAi4YKxIOGCpyDhgrkg4YK8IOGCpCDhgqUg4YKzIOGCuiIKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fQVNPTVRBVlJVTElfQk9UVE9NCisgICAgIuGCpCDhgqUg4YKnIOGCqCDhgqYg4YKxIOGCqiDhgqsiCisKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfVE9QCisgICAgIuK0gSDitJcg4rSCIOK0hCDitIUg4rSHIOK0lCDitJYiCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0JPVFRPTQorICAgICLitIgg4rSMIOK0liDitI4g4rSDIOK0hiDitIsg4rSiIgorICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9BU0NFTkRFUgorICAgICLitJAg4rSRIOK0kyDitJUg4rSZIOK0myDitKEg4rSjIgorICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9ERVNDRU5ERVIKKyAgICAi4rSEIOK0hSDitJQg4rSVIOK0gSDitIIg4rSYIOK0nSIKKwogICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX1RPUAotICAgICLOk86SzpXOls6Yzp/OqSIKKyAgICAizpMgzpIgzpUgzpYgzpggzp8gzqkiCiAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NCi0gICAgIs6SzpTOls6ezpjOnyIKKyAgICAizpIgzpQgzpYgzp4gzpggzp8iCiAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0JFVEFfVE9QCi0gICAgIs6yzrjOtM62zrvOviIKKyAgICAizrIgzrggzrQgzrYgzrsgzr4iCiAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMCi0gICAgIs6xzrXOuc6/z4DPg8+Ez4kiCisgICAgIs6xIM61IM65IM6/IM+AIM+DIM+EIM+JIgogICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIKLSAgICAizrLOs863zrzPgc+Gz4fPiCIKKyAgICAizrIgzrMgzrcgzrwgz4Egz4Ygz4cgz4giCisKKyAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfVE9QCisgICAgIuCqpCDgqqgg4KqLIOCqjCDgqpsg4KqfIOCqsCDgq6YiCisgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0JPVFRPTQorICAgICLgqpYg4KqXIOCqmCDgqp4g4KqHIOCqiCDgqqAg4KqcIgorICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9BU0NFTkRFUgorICAgICLgqogg4KqKIOCqvyDgq4Ag4Kqy4KuAIOCqtuCrjeCqmuCqvyDgqpzgqr8g4Kq44KuAIgorICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ERVNDRU5ERVIKKyAgICAi4KuBIOCrgyDgq4Qg4KqW4KuBIOCqm+CrgyDgqpvgq4QiCisgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0RJR0lUX1RPUAorICAgICLgq6Yg4KunIOCrqCDgq6kg4KutIgorCisgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UKKyAgICAi4KiVIOColyDgqJkg4KiaIOConCDgqKQg4KinIOCouCIKKyAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfSEVBRAorICAgICLgqJUg4KiXIOComSDgqJog4KicIOCopCDgqKcg4Ki4IgorICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9UT1AKKyAgICAi4KiHIOCoiCDgqIkg4KiPIOCokyDgqbMg4Ki/IOCpgCIKKyAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NCisgICAgIuCohSDgqI8g4KiTIOColyDgqJwg4KigIOCosCDgqLgiCisgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0RJR0lUX1RPUAorICAgICLgqaYg4KmnIOCpqCDgqakg4KmtIgogCiAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AKLSAgICAi15HXk9eU15fXmteb153XoSIKKyAgICAi15Eg15Mg15Qg15cg15og15sg150g16EiCiAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00KLSAgICAi15HXmNeb153XodemIgorICAgICLXkSDXmCDXmyDXnSDXoSDXpiIKICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0RFU0NFTkRFUgotICAgICLXp9ea15/Xo9elIgorICAgICLXpyDXmiDXnyDXoyDXpSIKKworICBBRl9CTFVFX1NUUklOR19LQU5OQURBX1RPUAorICAgICLgsocg4LKKIOCykCDgsqMg4LK44LK+IOCyqOCyviDgsqbgsr4g4LKw4LK+IgorICBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTQorICAgICLgsoUg4LKJIOCyjiDgsrIg4LOmIOCzqCDgs6wg4LOtIgorCisgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1RPUAorICAgICLhnoEg4Z6RIOGekyDhnqcg4Z6pIOGetiIKKyAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1VCU0NSSVBUX1RPUAorICAgICLhnoDhn5LhnoAg4Z6A4Z+S4Z6BIOGegOGfkuGegiDhnoDhn5LhnpAiCisgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0JPVFRPTQorICAgICLhnoEg4Z6DIOGehSDhnosg4Z6UIOGemCDhnpkg4Z6yIgorICBBRl9CTFVFX1NUUklOR19LSE1FUl9ERVNDRU5ERVIKKyAgICAi4Z6P4Z+S4Z6aIOGemuGfgCDhnrLhn5Lhnpkg4Z6i4Z6/IgorICBBRl9CTFVFX1NUUklOR19LSE1FUl9MQVJHRV9ERVNDRU5ERVIKKyAgICAi4Z6T4Z+S4Z6P4Z+S4Z6a4Z+DIOGehOGfkuGegeGfkuGemSDhnoDhn5LhnpThn4Ag4Z6F4Z+S4Z6a4Z+AIOGek+GfkuGej+GevyDhnpvhn5LhnpThnr8iCisKKyAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1lNQk9MU19XQVhJTkdfVE9QCisgICAgIuGnoCDhp6EiCisgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FOSU5HX0JPVFRPTQorICAgICLhp7Yg4ae5IgorCisgIEFGX0JMVUVfU1RSSU5HX0xBT19UT1AKKyAgICAi4LqyIOC6lCDguq0g4LqhIOC6pSDguqcg4LqjIOC6hyIKKyAgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTQorICAgICLgurIg4LqtIOC6miDguo0g4LqjIOC6riDguqcg4LqiIgorICBBRl9CTFVFX1NUUklOR19MQU9fQVNDRU5ERVIKKyAgICAi4LqbIOC6oiDgup8g4LqdIgorICBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIKKyAgICAi4LuCIOC7hCDgu4MiCisgIEFGX0JMVUVfU1RSSU5HX0xBT19ERVNDRU5ERVIKKyAgICAi4LqHIOC6iiDgupYg4Lq9IOC7hiDguq8iCiAKICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9UT1AKLSAgICAiVEhFWk9DUVMiCisgICAgIlQgSCBFIFogTyBDIFEgUyIKICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9CT1RUT00KLSAgICAiSEVaTE9DVVMiCisgICAgIkggRSBaIEwgTyBDIFUgUyIKICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AKLSAgICAiZmlqa2RiaCIKKyAgICAiZiBpIGogayBkIGIgaCIKICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTEwKLSAgICAieHpyb2VzYyIKKyAgICAieCB6IHIgbyBlIHMgYyIKICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfREVTQ0VOREVSCi0gICAgInBxZ2p5IgorICAgICJwIHEgZyBqIHkiCiAKLSAgLy8gd2Ugc2VwYXJhdGUgdGhlIGxldHRlcnMgd2l0aCBzcGFjZXMgdG8gYXZvaWQgbGlnYXR1cmVzOwotICAvLyB0aGlzIGlzIGp1c3QgZm9yIGNvbnZlbmllbmNlIHRvIHNpbXBsaWZ5IHJlYWRpbmcKKyAgLy8gd2UgYXNzdW1lIHRoYXQgYm90aCB0aGUgc3Vic2NyaXB0IGFuZCBzdXBlcnNjcmlwdCByYW5nZXMKKyAgLy8gZG9uJ3QgY29udGFpbiBvbGRzdHlsZSBkaWdpdHMgKGFjdHVhbGx5LCBtb3N0IGZvbnRzIHByb2JhYmx5CisgIC8vIGhhdmUgZGlnaXRzIG9ubHkgaW4gdGhvc2UgcmFuZ2VzKQorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfVE9QCisgICAgIuKCgCDigoMg4oKFIOKChyDigogiCisgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9CT1RUT00KKyAgICAi4oKAIOKCgSDigoIg4oKDIOKCiCIKKyAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19TTUFMTF9GX1RPUAorICAgICLhtaIg4rG8IOKClSDigpYg4oKXIgorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMCisgICAgIuKCkCDigpEg4oKSIOKCkyDigpkg4oKbIOG1pSDhtaQg4bWjIgorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMX0RFU0NFTkRFUgorICAgICLhtaYg4bWnIOG1qCDhtakg4oKaIgorCisgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfQ0FQSVRBTF9UT1AKKyAgICAi4oGwIMKzIOKBtSDigbcg4bWAIOG0tCDhtLEg4bS8IgorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NCisgICAgIuKBsCDCuSDCsiDCsyDhtLEg4bS4IOG0vCDhtYEiCisgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfRl9UT1AKKyAgICAi4bWHIOG1iCDhtY8gyrAgyrIg4bagIOKBsSIKKyAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTAorICAgICLhtYkg4bWSIMqzIMuiIMujIOG2nCDhtrsiCisgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSCisgICAgIuG1liDKuCDhtY0iCisKKyAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUAorICAgICLgtJIg4LSfIOC0oCDgtLEg4LSaIOC0qiDgtJrgtY3gtJog4LSq4LWN4LSqIgorICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NCisgICAgIuC0nyDgtKAg4LSnIOC0tiDgtJgg4LSaIOC0pSDgtLIiCisKKyAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9UT1AKKyAgICAi4YCBIOGAgiDhgIQg4YCSIOGAnSDhgaUg4YGKIOGBiyIKKyAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00KKyAgICAi4YCEIOGAjiDhgJIg4YCVIOGAlyDhgJ0g4YGKIOGBiyIKKyAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9BU0NFTkRFUgorICAgICLhgKkg4YC8IOGBjSDhgY8g4YGGIOGAqyDhgK0iCisgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSCisgICAgIuGAiSDhgIog4YClIOGAqSDhgKgg4YGCIOGBhSDhgYkiCisKKyAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AKKyAgICAi4LaJIOC2miDgtp0g4LazIOC2tCDgtrog4La9IOC3hiIKKyAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9CT1RUT00KKyAgICAi4LaRIOC2lCDgtp0g4LaiIOC2pyDgtq4g4LawIOC2uyIKKyAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9ERVNDRU5ERVIKKyAgICAi4LavIOC2syDgtosg4La9IOC2reC3liDgtq3gt5Qg4La24LeUIOC2r+C3lCIKKworICBBRl9CTFVFX1NUUklOR19UQU1JTF9UT1AKKyAgICAi4K6JIOCukiDgrpMg4K6xIOCuiCDgrpUg4K6ZIOCumiIKKyAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NCisgICAgIuCulSDgrpog4K6yIOCutiDgrokg4K6ZIOCunyDgrqoiCisKICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUAogICAgICLgsIcg4LCMIOCwmSDgsJ4g4LCjIOCwsSDgsa8iCiAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00KQEAgLTE1MCw0NCArMzIyLDQ0IEBACiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKIAogICBBRl9CTFVFX1NUUklOR19DSktfVE9QCi0gICAgIuS7luS7rOS9oOS+huWAkeWIsOWSjOWcsCIKLSAgICAi5a+55bCN5bCx5bit5oiR5pe25pmC5pyDIgotICAgICLmnaXngrrog73oiLDoqqror7Tov5npgJkiCi0gICAgIum9iiB8IgotICAgICLlhpvlkIzlt7LmhL/ml6LmmJ/mmK/mma8iCi0gICAgIuawkeeFp+eOsOePvueQhueUqOe9ruimgSIKLSAgICAi6LuN6YKj6YWN6YeM6ZaL6Zu36Zyy6Z2iIgotICAgICLpob4iCisgICAgIuS7liDku6wg5L2gIOS+hiDlgJEg5YiwIOWSjCDlnLAiCisgICAgIiDlr7kg5bCNIOWwsSDluK0g5oiRIOaXtiDmmYIg5pyDIgorICAgICIg5p2lIOeCuiDog70g6IiwIOiqqiDor7Qg6L+ZIOmAmSIKKyAgICAiIOm9iiB8IgorICAgICIg5YabIOWQjCDlt7Ig5oS/IOaXoiDmmJ8g5pivIOaZryIKKyAgICAiIOawkSDnhacg546wIOePviDnkIYg55SoIOe9riDopoEiCisgICAgIiDou40g6YKjIOmFjSDph4wg6ZaLIOmbtyDpnLIg6Z2iIgorICAgICIg6aG+IgogICBBRl9CTFVFX1NUUklOR19DSktfQk9UVE9NCi0gICAgIuS4quS4uuS6uuS7luS7peS7rOS9oOS+hiIKLSAgICAi5YCL5YCR5Yiw5ZKM5aSn5a+55bCN5bCxIgotICAgICLmiJHml7bmmYLmnInmnaXngrropoHoqqoiCi0gICAgIuivtCB8IgotICAgICLkuLvkupvlm6DlroPmg7PmhI/nkIbnlJ8iCi0gICAgIueVtueci+edgOe9ruiAheiHquiRl+ijoSIKLSAgICAi6L+H6L+Y6L+b6YCy6YGO6YGT6YKE6YeMIgotICAgICLpnaIiCisgICAgIuS4qiDkuLog5Lq6IOS7liDku6Ug5LusIOS9oCDkvoYiCisgICAgIiDlgIsg5YCRIOWIsCDlkowg5aSnIOWvuSDlsI0g5bCxIgorICAgICIg5oiRIOaXtiDmmYIg5pyJIOadpSDngrog6KaBIOiqqiIKKyAgICAiIOivtCB8IgorICAgICIg5Li7IOS6myDlm6Ag5a6DIOaDsyDmhI8g55CGIOeUnyIKKyAgICAiIOeVtiDnnIsg552AIOe9riDogIUg6IeqIOiRlyDoo6EiCisgICAgIiDov4cg6L+YIOi/myDpgLIg6YGOIOmBkyDpgoQg6YeMIgorICAgICIg6Z2iIgogCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQKIAogICBBRl9CTFVFX1NUUklOR19DSktfTEVGVAotICAgICLkupvku6zkvaDkvoblgJHliLDlkozlnLAiCi0gICAgIuWlueWwhuWwh+WwseW5tOW+l+aDheacgCIKLSAgICAi5qC35qij55CG6IO96Kqq6K+06L+Z6YCZIgotICAgICLpgJogfCIKLSAgICAi5Y2z5ZCX5ZCn5ZCs5ZGi5ZOB5ZON5ZeOIgotICAgICLluIjluKvmlLbmlq3mlrfmmI7nnLzplpMiCi0gICAgIumXtOmZhemZiOmZkOmZpOmZs+maj+mamyIKLSAgICAi6ZqoIgorICAgICIg5LqbIOS7rCDkvaAg5L6GIOWAkSDliLAg5ZKMIOWcsCIKKyAgICAiIOWluSDlsIYg5bCHIOWwsSDlubQg5b6XIOaDhSDmnIAiCisgICAgIiDmoLcg5qijIOeQhiDog70g6KqqIOivtCDov5kg6YCZIgorICAgICIg6YCaIHwiCisgICAgIiDljbMg5ZCXIOWQpyDlkKwg5ZGiIOWTgSDlk40g5ZeOIgorICAgICIg5biIIOW4qyDmlLYg5patIOaWtyDmmI4g55y8IOmWkyIKKyAgICAiIOmXtCDpmYUg6ZmIIOmZkCDpmaQg6ZmzIOmajyDpmpsiCisgICAgIiDpmqgiCiAgIEFGX0JMVUVfU1RSSU5HX0NKS19SSUdIVAotICAgICLkuovliY3lrbjlsIblsIfmg4Xmg7PmiJYiCi0gICAgIuaUv+aWr+aWsOagt+aoo+awkeaykuayoSIKLSAgICAi54S254m5546w54++55CD56ys57aT6LCBIgotICAgICLotbcgfCIKLSAgICAi5L6L5Yil5Yir5Yi25Yqo5YuV5ZCX5ZeOIgotICAgICLlop7mjIfmmI7mnJ3mnJ/mnoTniannoa4iCi0gICAgIuenjeiqv+iwg+iyu+i0uemCo+mDvemWkyIKLSAgICAi6Ze0IgorICAgICLkuosg5YmNIOWtuCDlsIYg5bCHIOaDhSDmg7Mg5oiWIgorICAgICIg5pS/IOaWryDmlrAg5qC3IOaooyDmsJEg5rKSIOayoSIKKyAgICAiIOeEtiDnibkg546wIOePviDnkIMg56ysIOe2kyDosIEiCisgICAgIiDotbcgfCIKKyAgICAiIOS+iyDliKUg5YirIOWItiDliqgg5YuVIOWQlyDll44iCisgICAgIiDlop4g5oyHIOaYjiDmnJ0g5pyfIOaehCDniakg56GuIgorICAgICIg56eNIOiqvyDosIMg6LK7IOi0uSDpgqMg6YO9IOmWkyIKKyAgICAiIOmXtCIKIAogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLX0JMVUVfSEFOSV9WRVJUICovCiAKQEAgLTIxOSw2ICszOTEsMTQgQEAKIC8vIHJlc3BlY3RpdmVseS4gIE9ubHkgaG9yaXpvbnRhbCBibHVlIHpvbmVzIChpLmUuLCBhZGp1c3RpbmcgdmVydGljYWwKIC8vIGNvb3JkaW5hdGUgdmFsdWVzKSBhcmUgc3VwcG9ydGVkLgogLy8KKy8vIFNvbWUgc2NyaXB0cyBsaWtlIEtobWVyIG5lZWQgY2hhcmFjdGVyIGNvbXBvc2l0aW9uIHRvIGdldCBhbGwgbmVjZXNzYXJ5CisvLyBibHVlIHpvbmVzLCBzaW5jZSBVbmljb2RlIG9ubHkgcHJvdmlkZXMgYW4gYWJzdHJhY3QgZGF0YSBtb2RlbCB0aGF0CisvLyBkb2Vzbid0IHJlcHJlc2VudCBhbGwgcG9zc2libGUgZ2x5cGggc2hhcGVzLiAgRm9yIHN1Y2ggY2hhcmFjdGVyCisvLyBjbHVzdGVycywgdGhlIEhhcmZCdXp6IGxpYnJhcnkgaXMgdXNlZCB0byBjb252ZXJ0IHRoZW0gaW50byB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgZ2x5cGhzLiAgVGhlIGxhcmdlc3QgZ2x5cGggZWxlbWVudCAod2hlcmUgYGxhcmdlc3QnIGNhbiBiZQorLy8gZWl0aGVyIGBsYXJnZXN0IGFzY2VuZGVyJyBvciBgbGFyZ2VzdCBkZXNjZW5kZXInKSB0aGVuIGRlZmluZXMgdGhlCisvLyBjb3JyZXNwb25kaW5nIGZsYXQgb3Igcm91bmQgZXh0cmVtdW0uCisvLwogLy8gRm9yIHRoZSBsYXRpbiBhdXRvLWhpbnRlciwgdGhlIG92ZXJzaG9vdCBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gdGhlCiAvLyByZWZlcmVuY2UgZm9yIHRvcCB6b25lcywgYW5kIHZpY2UgdmVyc2EgZm9yIGJvdHRvbSB6b25lcy4KIC8vCkBAIC0yMjksNiArNDA5LDIxIEBACiAvLwogLy8gICAgIElmIG5vdCBzZXQsIHRha2UgdGhlIG1pbmltdW0gdmFsdWVzLgogLy8KKy8vICAgICBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgTEFUSU5fU1VCX1RPUCcuCisvLworLy8gICBMQVRJTl9TVUJfVE9QCisvLyAgICAgRm9yIGFsbCBnbHlwaHMgb2YgYSBjaGFyYWN0ZXIgY2x1c3RlciwgY29tcHV0ZSB0aGUgbWF4aW11bSBmbGF0CisvLyAgICAgYW5kIHJvdW5kIGNvb3JkaW5hdGUgdmFsdWVzIG9mIGVhY2ggY29tcG9uZW50LCB0aGVuIHRha2UgdGhlCisvLyAgICAgc21hbGxlc3Qgb2YgdGhlIG1heGltdW0gdmFsdWVzLiAgVGhlIGlkZWEgaXMgdG8gZ2V0IHRoZSB0b3Agb2YKKy8vICAgICBzdWJzY3JpcHQgZ2x5cGhzLCBhcyB1c2VkIGluIEtobWVyLCBmb3IgZXhhbXBsZS4gIE5vdGUgdGhhdAorLy8gICAgIHRoaXMgbWVjaGFuaXNtIGRvZXNuJ3Qgd29yayBmb3Igb3JkaW5hcnkgbGlnYXR1cmVzLgorLy8KKy8vICAgICBUaGlzIGZsYWdzIGluZGljYXRlcyBhIHNlY29uZGFyeSBibHVlIHpvbmU6IEl0IGdldHMgcmVtb3ZlZCBpZgorLy8gICAgIHRoZXJlIGlzIGEgbm9uLUxBVElOX1NVQl9UT1AgYmx1ZSB6b25lIGF0IHRoZSBzYW1lIGNvb3JkaW5hdGUKKy8vICAgICB2YWx1ZSAoYWZ0ZXIgc2NhbGluZykuCisvLworLy8gICAgIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBMQVRJTl9UT1AnLgorLy8KIC8vICAgTEFUSU5fTkVVVFJBTAogLy8gICAgIElnbm9yZSByb3VuZCBleHRyZW1hIGFuZCBkZWZpbmUgdGhlIGJsdWUgem9uZSB3aXRoIGZsYXQgdmFsdWVzIG9ubHkuCiAvLyAgICAgQm90aCB0b3AgYW5kIGJvdHRvbSBvZiBjb250b3VycyBjYW4gbWF0Y2guICBUaGlzIGlzIHVzZWZ1bCBmb3IKQEAgLTI2NCwxMSArNDU5LDExIEBACiAvLwogLy8gQ2hhcmFjdGVycyBpbiBhIGJsdWUgc3RyaW5nIGFyZSAqbm90KiBhdXRvbWF0aWNhbGx5IGNsYXNzaWZpZWQuICBJbnN0ZWFkLAogLy8gZmlyc3QgY29tZSB0aGUgY2hhcmFjdGVycyB1c2VkIGZvciB0aGUgb3ZlcnNob290IHZhbHVlLCB0aGVuIHRoZQotLy8gY2hhcmFjdGVyIGB8JywgdGhlbiB0aGUgY2hhcmFjdGVycyB1c2VkIGZvciB0aGUgcmVmZXJlbmNlIHZhbHVlLiAgVGhlCi0vLyBibHVlIHpvbmUgaXMgdGhlbiBzZXQgdXAgYnkgdGhlIG1lYW4gdmFsdWVzIG9mIGFsbCByZWZlcmVuY2UgdmFsdWVzIGFuZAotLy8gYWxsIG92ZXJzaG9vdCB2YWx1ZXMsIHJlc3BlY3RpdmVseS4gIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYmx1ZQotLy8gem9uZXMgKGkuZS4sIGFkanVzdGluZyB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBjb29yZGluYXRlIHZhbHVlcywKLS8vIHJlc3BlY3RpdmVseSkgYXJlIHN1cHBvcnRlZC4KKy8vIGNoYXJhY3RlciBgfCcsIHRoZW4gdGhlIGNoYXJhY3RlcnMgdXNlZCBmb3IgdGhlIHJlZmVyZW5jZSB2YWx1ZQorLy8gKGV2ZXJ5dGhpbmcgc2VwYXJhdGVkIGJ5IHNwYWNlIGNoYXJhY3RlcnMpLiAgVGhlIGJsdWUgem9uZSBpcyB0aGVuIHNldCB1cAorLy8gYnkgdGhlIG1lYW4gdmFsdWVzIG9mIGFsbCByZWZlcmVuY2UgdmFsdWVzIGFuZCBhbGwgb3ZlcnNob290IHZhbHVlcywKKy8vIHJlc3BlY3RpdmVseS4gIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYmx1ZSB6b25lcyAoaS5lLiwgYWRqdXN0aW5nCisvLyB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBjb29yZGluYXRlIHZhbHVlcywgcmVzcGVjdGl2ZWx5KSBhcmUgc3VwcG9ydGVkLgogLy8KIC8vIEZvciB0aGUgY2prIGF1dG8taGludGVyLCB0aGUgb3ZlcnNob290IHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlCiAvLyByZWZlcmVuY2UgZm9yIHRvcCB6b25lcywgYW5kIHZpY2UgdmVyc2EgZm9yIGJvdHRvbSB6b25lcy4KQEAgLTI4OSw5ICs0ODQsMzkgQEAKIEFGX0JMVUVfU1RSSU5HU0VUX0VOVU0gQUZfQkxVRV9TVFJJTkdTRVRTX0FSUkFZIEFGX0JMVUVfU1RSSU5HU0VUX01BWF9MRU46CiAKICAgQUZfQkxVRV9TVFJJTkdTRVRfQVJBQgotICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX1RPUCwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTiwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTiwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9BUk1OCisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0JFTkcKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRCwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfQkFTRSwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0NIRVIKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwsICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwsICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMLCAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTCwgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgQUZfQkxVRV9TVFJJTkdTRVRfQ1lSTAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQpAQCAtMzEyLDYgKzUzNywzMCBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9FVEhJCisgICAgeyBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgLy8gYmx1ZSB6b25lcyBmb3IgTXRhdnJ1bGkgYXJlIG1pc3NpbmcgKG5vdCB5ZXQgZGVmaW5lZCBpbiBVbmljb2RlKQorICBBRl9CTFVFX1NUUklOR1NFVF9HRU9SCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0dFT0sKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgQUZfQkxVRV9TVFJJTkdTRVRfR1JFSwogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzIyLDYgKzU3MSwyNSBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgIEFGX0JMVUVfU1RSSU5HU0VUX0dVSlIKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ESUdJVF9UT1AsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfR1VSVQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfSEVBRCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQkFTRSwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9ESUdJVF9UT1AsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgQUZfQkxVRV9TVFJJTkdTRVRfSEVCUgogICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORyAgIH0KQEAgLTMyOSw2ICs1OTcsMzUgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9LTkRBCisgICAgeyBBRl9CTFVFX1NUUklOR19LQU5OQURBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUgorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX1NVQlNDUklQVF9UT1AsICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9TVUJfVE9QICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX0JPVFRPTSwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX0RFU0NFTkRFUiwgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX0xBUkdFX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9LSE1TCisgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBWElOR19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1lNQk9MU19XQU5JTkdfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTworICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCwgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19CT1RUT00sICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19BU0NFTkRFUiwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19MQVJHRV9BU0NFTkRFUiwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19ERVNDRU5ERVIsICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICBBRl9CTFVFX1NUUklOR1NFVF9MQVROCiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMzksNiArNjM2LDUzIEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUQgorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfRl9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUUAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfRl9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfTUxZTQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfTk9ORQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAwIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9TSU5ICisgICAgeyBBRl9CTFVFX1NUUklOR19TSU5IQUxBX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX1RBTUwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RBTUlMX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICBBRl9CTFVFX1NUUklOR1NFVF9URUxVCiAgICAgeyBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmJsdWUuaCBiL3NyYy9hdXRvZml0L2FmYmx1ZS5oCmluZGV4IDk0ZTMzYTkuLjc1YzNhYjUgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oCisrKyBiL3NyYy9hdXRvZml0L2FmYmx1ZS5oCkBAIC03LDcgKzcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOSw4ICsxOSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRkJMVUVfSF9fCi0jZGVmaW5lIF9fQUZCTFVFX0hfXworI2lmbmRlZiBBRkJMVUVfSF8KKyNkZWZpbmUgQUZCTFVFX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0yOCwzMiArMjgsMzUgQEAKIAogICAvKiBhbiBhdXhpbGlhcnkgbWFjcm8gdG8gZGVjb2RlIGEgVVRGLTggY2hhcmFjdGVyIC0tIHNpbmNlIHdlIG9ubHkgdXNlICovCiAgIC8qIGhhcmQtY29kZWQsIHNlbGYtY29udmVydGVkIGRhdGEsIG5vIGVycm9yIGNoZWNraW5nIGlzIHBlcmZvcm1lZCAgICAgKi8KLSNkZWZpbmUgR0VUX1VURjhfQ0hBUiggY2gsIHAgKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKnArKzsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCBjaCA+PSAweDgwICkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfVUludCAgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCBjaCA8IDB4RTAgKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgbGVuID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBjaCAmPSAweDFGOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGVsc2UgaWYgKCBjaCA8IDB4RjAgKSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGxlbiA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgY2ggJj0gMHgwRjsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBsZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGNoICY9IDB4MDc7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKCA7IGxlbiA+IDA7IGxlbi0tICkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgY2ggPSAoIGNoIDw8IDYgKSB8ICggKnArKyAmIDB4M0YgKTsgXAotICAgICAgICAgIH0KKyNkZWZpbmUgR0VUX1VURjhfQ0hBUiggY2gsIHAgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKnArKzsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIGNoID49IDB4ODAgKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgRlRfVUludCAgbGVuXzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKCBjaCA8IDB4RTAgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGxlbl8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjaCAgJj0gMHgxRjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBlbHNlIGlmICggY2ggPCAweEYwICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbGVuXyA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNoICAmPSAweDBGOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsZW5fID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY2ggICY9IDB4MDc7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGZvciAoIDsgbGVuXyA+IDA7IGxlbl8tLSApICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNoID0gKCBjaCA8PCA2ICkgfCAoICpwKysgJiAweDNGICk7IFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03NSw0NiArNzgsMTE3IEBACiAgIHR5cGVkZWYgZW51bSAgQUZfQmx1ZV9TdHJpbmdfCiAgIHsKICAgICBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QID0gMCwKLSAgICBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTiA9IDEzLAotICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfVE9QID0gMjQsCi0gICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9CT1RUT00gPSA0MSwKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTCA9IDU4LAotICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMX0RFU0NFTkRFUiA9IDc1LAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQkFTRSA9IDgyLAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfVE9QID0gMTA3LAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfSEVBRCA9IDEzMiwKLSAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JPVFRPTSA9IDE1NywKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX1RPUCA9IDE2NCwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTSA9IDE3OSwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9CRVRBX1RPUCA9IDE5MiwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTCA9IDIwNSwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIgPSAyMjIsCi0gICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUCA9IDIzOSwKLSAgICBBRl9CTFVFX1NUUklOR19IRUJSRVdfQk9UVE9NID0gMjU2LAotICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIgPSAyNjksCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9UT1AgPSAyODAsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9CT1RUT00gPSAyODksCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AgPSAyOTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTEwgPSAzMDYsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfREVTQ0VOREVSID0gMzE0LAotICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AgPSAzMjAsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTSA9IDM0MiwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX1RPUCA9IDM2NCwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0JPVFRPTSA9IDM4MywKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0FTQ0VOREVSID0gNDA1LAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIgPSA0MTUsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ERVNDRU5ERVIgPSA0MjUsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9ERVNDRU5ERVIgPSA0MzgsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AgPSA0NDUsCi0gICAgYWZfYmx1ZV8xXzEgPSA0NTQsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0JPVFRPTSA9IDE4LAorICAgIEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19KT0lOID0gMzMsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9UT1AgPSAzNiwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX0JPVFRPTSA9IDYwLAorICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0FTQ0VOREVSID0gODQsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfVE9QID0gMTA1LAorICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0JPVFRPTSA9IDEyOSwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9ERVNDRU5ERVIgPSAxNTMsCisgICAgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFID0gMTc3LAorICAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QID0gMjA5LAorICAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRCA9IDIzNywKKyAgICBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMID0gMjY5LAorICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0FTQ0VOREVSID0gMzAxLAorICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMID0gMzMzLAorICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUiA9IDM2NSwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX1RPUCA9IDM4MSwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX0JPVFRPTSA9IDQwNSwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTCA9IDQyOSwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTF9ERVNDRU5ERVIgPSA0NTMsCisgICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFID0gNDYyLAorICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfVE9QID0gNDk0LAorICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfSEVBRCA9IDUyNiwKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JPVFRPTSA9IDU1OCwKKyAgICBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19UT1AgPSA1NjYsCisgICAgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfQk9UVE9NID0gNTk4LAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9UT1AgPSA2MzAsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0JPVFRPTSA9IDY2MiwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfQVNDRU5ERVIgPSA2OTQsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0RFU0NFTkRFUiA9IDcyNiwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9UT1AgPSA3NTgsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fQVNPTVRBVlJVTElfQk9UVE9NID0gNzkwLAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX1RPUCA9IDgyMiwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9CT1RUT00gPSA4NTQsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQVNDRU5ERVIgPSA4ODYsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSID0gOTE4LAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QID0gOTUwLAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NID0gOTcxLAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0JFVEFfVE9QID0gOTg5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMID0gMTAwNywKKyAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIgPSAxMDMxLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX1RPUCA9IDEwNTUsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NID0gMTA4NywKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9BU0NFTkRFUiA9IDExMTksCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfREVTQ0VOREVSID0gMTE2OSwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ESUdJVF9UT1AgPSAxMjAyLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UgPSAxMjIyLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0hFQUQgPSAxMjU0LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUCA9IDEyODYsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NID0gMTMxOCwKKyAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9ESUdJVF9UT1AgPSAxMzUwLAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AgPSAxMzcwLAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00gPSAxMzk0LAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIgPSAxNDEyLAorICAgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QID0gMTQyNywKKyAgICBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTSA9IDE0NzEsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QID0gMTUwMywKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TVUJTQ1JJUFRfVE9QID0gMTUyNywKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9CT1RUT00gPSAxNTY3LAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0RFU0NFTkRFUiA9IDE1OTksCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfTEFSR0VfREVTQ0VOREVSID0gMTYzMywKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBWElOR19UT1AgPSAxNzIwLAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FOSU5HX0JPVFRPTSA9IDE3MjgsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCA9IDE3MzYsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSA9IDE3NjgsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSID0gMTgwMCwKKyAgICBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIgPSAxODE2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBT19ERVNDRU5ERVIgPSAxODI4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QID0gMTg1MiwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX0JPVFRPTSA9IDE4NjgsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AgPSAxODg0LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMID0gMTg5OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIgPSAxOTEyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9UT1AgPSAxOTIyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9CT1RUT00gPSAxOTQyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfRl9UT1AgPSAxOTYyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTEwgPSAxOTgyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfREVTQ0VOREVSID0gMjAxOCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfVE9QID0gMjAzOCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NID0gMjA2OSwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0ZfVE9QID0gMjA5OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMID0gMjEyNCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUiA9IDIxNDksCisgICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCA9IDIxNjAsCisgICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSA9IDIyMDQsCisgICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9UT1AgPSAyMjM2LAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQk9UVE9NID0gMjI2OCwKKyAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0FTQ0VOREVSID0gMjMwMCwKKyAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0RFU0NFTkRFUiA9IDIzMjgsCisgICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AgPSAyMzYwLAorICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfQk9UVE9NID0gMjM5MiwKKyAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiA9IDI0MjQsCisgICAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QID0gMjQ2OCwKKyAgICBBRl9CTFVFX1NUUklOR19UQU1JTF9CT1RUT00gPSAyNTAwLAorICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AgPSAyNTMyLAorICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00gPSAyNTYwLAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QID0gMjU4OCwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0JPVFRPTSA9IDI2MTIsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9BU0NFTkRFUiA9IDI2NDAsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9BU0NFTkRFUiA9IDI2NTIsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ERVNDRU5ERVIgPSAyNjY0LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfREVTQ0VOREVSID0gMjY4MCwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0RJR0lUX1RPUCA9IDI2ODgsCisgICAgYWZfYmx1ZV8xXzEgPSAyNjk5LAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCiAgICAgQUZfQkxVRV9TVFJJTkdfQ0pLX1RPUCA9IGFmX2JsdWVfMV8xICsgMSwKLSAgICBBRl9CTFVFX1NUUklOR19DSktfQk9UVE9NID0gYWZfYmx1ZV8xXzEgKyAxNTMsCi0gICAgYWZfYmx1ZV8xXzFfMSA9IGFmX2JsdWVfMV8xICsgMzA0LAorICAgIEFGX0JMVUVfU1RSSU5HX0NKS19CT1RUT00gPSBhZl9ibHVlXzFfMSArIDIwMywKKyAgICBhZl9ibHVlXzFfMV8xID0gYWZfYmx1ZV8xXzEgKyA0MDQsCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQKICAgICBBRl9CTFVFX1NUUklOR19DSktfTEVGVCA9IGFmX2JsdWVfMV8xXzEgKyAxLAotICAgIEFGX0JMVUVfU1RSSU5HX0NKS19SSUdIVCA9IGFmX2JsdWVfMV8xXzEgKyAxNTMsCi0gICAgYWZfYmx1ZV8xXzFfMiA9IGFmX2JsdWVfMV8xXzEgKyAzMDQsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0pLX1JJR0hUID0gYWZfYmx1ZV8xXzFfMSArIDIwNCwKKyAgICBhZl9ibHVlXzFfMV8yID0gYWZfYmx1ZV8xXzFfMSArIDQwNSwKICNlbHNlCiAgICAgYWZfYmx1ZV8xXzFfMiA9IGFmX2JsdWVfMV8xXzEgKyAwLAogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLX0JMVUVfSEFOSV9WRVJUICovCkBAIC0xNDgsOSArMjIyLDEwIEBACiAgIC8qIGJsdWUgc3RyaW5nIGNhbid0IGJlIHVzZWQgaW4gbW9yZSB0aGFuIGEgc2luZ2xlIHdyaXRpbmcgc3lzdGVtLCB3aGljaCAqLwogICAvKiBpcyBhIHNhZmUgYmV0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgKCAxVSA8PCAwICkgIC8qIG11c3QgaGF2ZSB2YWx1ZSAxICovCi0jZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgICggMVUgPDwgMSApCi0jZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICggMVUgPDwgMiApCi0jZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORyAgICAgICggMVUgPDwgMyApCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fU1VCX1RPUCAgICggMVUgPDwgMSApCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgICggMVUgPDwgMiApCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICggMVUgPDwgMyApCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORyAgICAgICggMVUgPDwgNCApCiAKICNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9DSktfVE9QICAgICggMVUgPDwgMCApICAgICAgIC8qIG11c3QgaGF2ZSB2YWx1ZSAxICovCiAjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfQ0pLX0hPUklaICAoIDFVIDw8IDEgKSAgICAgICAvKiBtdXN0IGhhdmUgdmFsdWUgMiAqLwpAQCAtMTY1LDE0ICsyNDAsMzMgQEAKICAgdHlwZWRlZiBlbnVtICBBRl9CbHVlX1N0cmluZ3NldF8KICAgewogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FSQUIgPSAwLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NZUkwgPSAzLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0RFVkEgPSA5LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsgPSAxNSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSID0gMjIsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUTiA9IDI2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RFTFUgPSAzMywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9USEFJID0gMzYsCi0gICAgYWZfYmx1ZV8yXzEgPSA0NCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9BUk1OID0gNCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9CRU5HID0gMTEsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQ0hFUiA9IDE2LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NZUkwgPSAyMywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBID0gMjksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfRVRISSA9IDM1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dFT1IgPSAzOCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HRU9LID0gNDMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1JFSyA9IDUwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dVSlIgPSA1NywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HVVJVID0gNjMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEVCUiA9IDY5LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tOREEgPSA3MywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1SID0gNzYsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUyA9IDgyLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTyA9IDg1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVE4gPSA5MSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRCID0gOTgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUUCA9IDEwNSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9NTFlNID0gMTEyLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIgPSAxMTUsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTk9ORSA9IDEyMCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9TSU5IID0gMTIxLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RBTUwgPSAxMjUsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEVMVSA9IDEyOCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9USEFJID0gMTMxLAorICAgIGFmX2JsdWVfMl8xID0gMTM5LAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCiAgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEFOSSA9IGFmX2JsdWVfMl8xICsgMCwKICAgICBhZl9ibHVlXzJfMV8xID0gYWZfYmx1ZV8yXzEgKyAyLApAQCAtMjA4LDcgKzMwMiw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQUZCTFVFX0hfXyAqLworI2VuZGlmIC8qIEFGQkxVRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmhpbiBiL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4KaW5kZXggYWQ0M2ZlNi4uZGQ0NGU3NyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmhpbgorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRkJMVUVfSF9fCi0jZGVmaW5lIF9fQUZCTFVFX0hfXworI2lmbmRlZiBBRkJMVUVfSF8KKyNkZWZpbmUgQUZCTFVFX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0yNSwzMiArMjUsMzUgQEAKIAogICAvKiBhbiBhdXhpbGlhcnkgbWFjcm8gdG8gZGVjb2RlIGEgVVRGLTggY2hhcmFjdGVyIC0tIHNpbmNlIHdlIG9ubHkgdXNlICovCiAgIC8qIGhhcmQtY29kZWQsIHNlbGYtY29udmVydGVkIGRhdGEsIG5vIGVycm9yIGNoZWNraW5nIGlzIHBlcmZvcm1lZCAgICAgKi8KLSNkZWZpbmUgR0VUX1VURjhfQ0hBUiggY2gsIHAgKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKnArKzsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCBjaCA+PSAweDgwICkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfVUludCAgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCBjaCA8IDB4RTAgKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgbGVuID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBjaCAmPSAweDFGOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGVsc2UgaWYgKCBjaCA8IDB4RjAgKSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGxlbiA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgY2ggJj0gMHgwRjsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBsZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGNoICY9IDB4MDc7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKCA7IGxlbiA+IDA7IGxlbi0tICkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgY2ggPSAoIGNoIDw8IDYgKSB8ICggKnArKyAmIDB4M0YgKTsgXAotICAgICAgICAgIH0KKyNkZWZpbmUgR0VUX1VURjhfQ0hBUiggY2gsIHAgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKnArKzsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIGNoID49IDB4ODAgKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgRlRfVUludCAgbGVuXzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKCBjaCA8IDB4RTAgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGxlbl8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjaCAgJj0gMHgxRjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBlbHNlIGlmICggY2ggPCAweEYwICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbGVuXyA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNoICAmPSAweDBGOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsZW5fID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY2ggICY9IDB4MDc7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGZvciAoIDsgbGVuXyA+IDA7IGxlbl8tLSApICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNoID0gKCBjaCA8PCA2ICkgfCAoICpwKysgJiAweDNGICk7IFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Nyw5ICsxMDAsMTAgQEAKICAgLyogYmx1ZSBzdHJpbmcgY2FuJ3QgYmUgdXNlZCBpbiBtb3JlIHRoYW4gYSBzaW5nbGUgd3JpdGluZyBzeXN0ZW0sIHdoaWNoICovCiAgIC8qIGlzIGEgc2FmZSBiZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAoIDFVIDw8IDAgKSAgLyogbXVzdCBoYXZlIHZhbHVlIDEgKi8KLSNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMICAgKCAxVSA8PCAxICkKLSNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgKCAxVSA8PCAyICkKLSNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9MT05HICAgICAgKCAxVSA8PCAzICkKKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9TVUJfVE9QICAgKCAxVSA8PCAxICkKKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMICAgKCAxVSA8PCAyICkKKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgKCAxVSA8PCAzICkKKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9MT05HICAgICAgKCAxVSA8PCA0ICkKIAogI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0NKS19UT1AgICAgKCAxVSA8PCAwICkgICAgICAgLyogbXVzdCBoYXZlIHZhbHVlIDEgKi8KICNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9DSktfSE9SSVogICggMVUgPDwgMSApICAgICAgIC8qIG11c3QgaGF2ZSB2YWx1ZSAyICovCkBAIC0xMzYsNyArMTQwLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19BRkJMVUVfSF9fICovCisjZW5kaWYgLyogQUZCTFVFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmNqay5jIGIvc3JjL2F1dG9maXQvYWZjamsuYwppbmRleCA5MDU0MDhiLi40ODIzYzFkIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmNqay5jCisrKyBiL3NyYy9hdXRvZml0L2FmY2prLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgQ0pLIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTg4LDcgKzg4LDYgQEAKICAgICB7CiAgICAgICBGVF9FcnJvciAgICAgICAgICBlcnJvcjsKICAgICAgIEZUX1VMb25nICAgICAgICAgIGdseXBoX2luZGV4OwotICAgICAgRlRfTG9uZyAgICAgICAgICAgeV9vZmZzZXQ7CiAgICAgICBpbnQgICAgICAgICAgICAgICBkaW07CiAgICAgICBBRl9DSktNZXRyaWNzUmVjICBkdW1teVsxXTsKICAgICAgIEFGX1NjYWxlciAgICAgICAgIHNjYWxlciA9ICZkdW1teS0+cm9vdC5zY2FsZXI7CkBAIC0xMDEsNDUgKzEwMCw2MSBAQAogICAgICAgQUZfU2NyaXB0Q2xhc3MgIHNjcmlwdF9jbGFzcyA9IEFGX1NDUklQVF9DTEFTU0VTX0dFVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlX2NsYXNzLT5zY3JpcHRdOwogCi0gICAgICBGVF9VSW50MzIgIHN0YW5kYXJkX2NoYXI7CisgICAgICB2b2lkKiAgICAgICAgc2hhcGVyX2J1ZjsKKyAgICAgIGNvbnN0IGNoYXIqICBwOwogCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgIEZUX1VMb25nICBjaCA9IDA7CisjZW5kaWYKIAotICAgICAgc3RhbmRhcmRfY2hhciA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcjE7Ci0gICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRfY2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJnlfb2Zmc2V0ICk7Ci0gICAgICBpZiAoICFnbHlwaF9pbmRleCApCisgICAgICBwICAgICAgICAgID0gc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyc3RyaW5nOworICAgICAgc2hhcGVyX2J1ZiA9IGFmX3NoYXBlcl9idWZfY3JlYXRlKCBmYWNlICk7CisKKyAgICAgIC8qIFdlIGNoZWNrIGEgbGlzdCBvZiBzdGFuZGFyZCBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IG1hdGNoIHdpbnMuICovCisKKyAgICAgIGdseXBoX2luZGV4ID0gMDsKKyAgICAgIHdoaWxlICggKnAgKQogICAgICAgewotICAgICAgICBpZiAoIHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcjIgKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhbmRhcmRfY2hhciA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcjI7Ci0gICAgICAgICAgYWZfZ2V0X2NoYXJfaW5kZXgoICZtZXRyaWNzLT5yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5X29mZnNldCApOwotICAgICAgICAgIGlmICggIWdseXBoX2luZGV4ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcjMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyID0gc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMzsKLSAgICAgICAgICAgICAgYWZfZ2V0X2NoYXJfaW5kZXgoICZtZXRyaWNzLT5yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRfY2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5X29mZnNldCApOwotICAgICAgICAgICAgICBpZiAoICFnbHlwaF9pbmRleCApCi0gICAgICAgICAgICAgICAgZ290byBFeGl0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIHVuc2lnbmVkIGludCAgbnVtX2lkeDsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGNvbnN0IGNoYXIqICBwX29sZDsKKyNlbmRpZgorCisKKyAgICAgICAgd2hpbGUgKCAqcCA9PSAnICcgKQorICAgICAgICAgIHArKzsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIHBfb2xkID0gcDsKKyAgICAgICAgR0VUX1VURjhfQ0hBUiggY2gsIHBfb2xkICk7CisjZW5kaWYKKworICAgICAgICAvKiByZWplY3QgaW5wdXQgdGhhdCBtYXBzIHRvIG1vcmUgdGhhbiBhIHNpbmdsZSBnbHlwaCAqLworICAgICAgICBwID0gYWZfc2hhcGVyX2dldF9jbHVzdGVyKCBwLCAmbWV0cmljcy0+cm9vdCwgc2hhcGVyX2J1ZiwgJm51bV9pZHggKTsKKyAgICAgICAgaWYgKCBudW1faWR4ID4gMSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogb3RoZXJ3aXNlIGV4aXQgbG9vcCBpZiB3ZSBoYXZlIGEgcmVzdWx0ICovCisgICAgICAgIGdseXBoX2luZGV4ID0gYWZfc2hhcGVyX2dldF9lbGVtKCAmbWV0cmljcy0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsKKyAgICAgICAgaWYgKCBnbHlwaF9pbmRleCApCisgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKKyAgICAgIGFmX3NoYXBlcl9idWZfZGVzdHJveSggZmFjZSwgc2hhcGVyX2J1ZiApOworCisgICAgICBpZiAoICFnbHlwaF9pbmRleCApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCAhZ2x5cGhfaW5kZXggKQorICAgICAgICBnb3RvIEV4aXQ7CisKICAgICAgIEZUX1RSQUNFNSgoICJzdGFuZGFyZCBjaGFyYWN0ZXI6IFUrJTA0bFggKGdseXBoIGluZGV4ICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIsIGdseXBoX2luZGV4ICkpOworICAgICAgICAgICAgICAgICAgY2gsIGdseXBoX2luZGV4ICkpOwogCiAgICAgICBlcnJvciA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LCBGVF9MT0FEX05PX1NDQUxFICk7CiAgICAgICBpZiAoIGVycm9yIHx8IGZhY2UtPmdseXBoLT5vdXRsaW5lLm5fcG9pbnRzIDw9IDAgKQpAQCAtMTc3LDYgKzE5MiwxMiBAQAogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICBnb3RvIEV4aXQ7CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogIFdlIGFzc3VtZSB0aGF0IHRoZSBnbHlwaHMgc2VsZWN0ZWQgZm9yIHRoZSBzdGVtIHdpZHRoCisgICAgICAgICAqICBjb21wdXRhdGlvbiBhcmUgYGZlYXR1cmVsZXNzJyBlbm91Z2ggc28gdGhhdCB0aGUgbGlua2luZworICAgICAgICAgKiAgYWxnb3JpdGhtIHdvcmtzIGZpbmUgd2l0aG91dCBhZGp1c3RtZW50cyBvZiBpdHMgc2NvcmluZworICAgICAgICAgKiAgZnVuY3Rpb24uCisgICAgICAgICAqLwogICAgICAgICBhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzKCBoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKQEAgLTI3NSw2ICsyOTYsOCBAQAogICAgIEFGX0JsdWVfU3RyaW5nc2V0ICAgICAgICAgYnNzID0gc2MtPmJsdWVfc3RyaW5nc2V0OwogICAgIGNvbnN0IEFGX0JsdWVfU3RyaW5nUmVjKiAgYnMgID0gJmFmX2JsdWVfc3RyaW5nc2V0c1tic3NdOwogCisgICAgdm9pZCogIHNoYXBlcl9idWY7CisKIAogICAgIC8qIHdlIHdhbGsgb3ZlciB0aGUgYmx1ZSBjaGFyYWN0ZXIgc3RyaW5ncyBhcyBzcGVjaWZpZWQgaW4gdGhlICAgKi8KICAgICAvKiBzdHlsZSdzIGVudHJ5IGluIHRoZSBgYWZfYmx1ZV9zdHJpbmdzZXQnIGFycmF5LCBjb21wdXRpbmcgaXRzICovCkBAIC0yODQsNiArMzA3LDggQEAKICAgICAgICAgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKICAgICAgICAgICAgICAgICAiXG4iICkpOwogCisgICAgc2hhcGVyX2J1ZiA9IGFmX3NoYXBlcl9idWZfY3JlYXRlKCBmYWNlICk7CisKICAgICBmb3IgKCA7IGJzLT5zdHJpbmcgIT0gQUZfQkxVRV9TVFJJTkdfTUFYOyBicysrICkKICAgICB7CiAgICAgICBjb25zdCBjaGFyKiAgcCA9ICZhZl9ibHVlX3N0cmluZ3NbYnMtPnN0cmluZ107CkBAIC0zMjIsMjYgKzM0Nyw0NyBAQAogCiAgICAgICB3aGlsZSAoICpwICkKICAgICAgIHsKLSAgICAgICAgRlRfVUxvbmcgICAgY2g7CiAgICAgICAgIEZUX1VMb25nICAgIGdseXBoX2luZGV4OwotICAgICAgICBGVF9Mb25nICAgICB5X29mZnNldDsKICAgICAgICAgRlRfUG9zICAgICAgYmVzdF9wb3M7ICAgICAgIC8qIHNhbWUgYXMgcG9pbnRzLnkgb3IgcG9pbnRzLngsIHJlc3AuICovCiAgICAgICAgIEZUX0ludCAgICAgIGJlc3RfcG9pbnQ7CiAgICAgICAgIEZUX1ZlY3RvciogIHBvaW50czsKIAorICAgICAgICB1bnNpZ25lZCBpbnQgIG51bV9pZHg7CiAKLSAgICAgICAgR0VUX1VURjhfQ0hBUiggY2gsIHAgKTsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBjb25zdCBjaGFyKiAgcF9vbGQ7CisgICAgICAgIEZUX1VMb25nICAgICBjaDsKKyNlbmRpZgorCisKKyAgICAgICAgd2hpbGUgKCAqcCA9PSAnICcgKQorICAgICAgICAgIHArKzsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIHBfb2xkID0gcDsKKyAgICAgICAgR0VUX1VURjhfQ0hBUiggY2gsIHBfb2xkICk7CisjZW5kaWYKIAogICAgICAgICAvKiBzd2l0Y2ggdG8gY2hhcmFjdGVycyB0aGF0IGRlZmluZSBmbGF0IHZhbHVlcyAqLwotICAgICAgICBpZiAoIGNoID09ICd8JyApCisgICAgICAgIGlmICggKnAgPT0gJ3wnICkKICAgICAgICAgewogICAgICAgICAgIGZpbGwgPSAwOwogICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFtyZWZlcmVuY2UgdmFsdWVzXVxuIiApKTsKKyAgICAgICAgICBwKys7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICAvKiByZWplY3QgaW5wdXQgdGhhdCBtYXBzIHRvIG1vcmUgdGhhbiBhIHNpbmdsZSBnbHlwaCAqLworICAgICAgICBwID0gYWZfc2hhcGVyX2dldF9jbHVzdGVyKCBwLCAmbWV0cmljcy0+cm9vdCwgc2hhcGVyX2J1ZiwgJm51bV9pZHggKTsKKyAgICAgICAgaWYgKCBudW1faWR4ID4gMSApCisgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgLyogbG9hZCB0aGUgY2hhcmFjdGVyIGluIHRoZSBmYWNlIC0tIHNraXAgdW5rbm93biBvciBlbXB0eSBvbmVzICovCi0gICAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwgY2gsICZnbHlwaF9pbmRleCwgJnlfb2Zmc2V0ICk7CisgICAgICAgIGdseXBoX2luZGV4ID0gYWZfc2hhcGVyX2dldF9lbGVtKCAmbWV0cmljcy0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsKICAgICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwICkKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFUrJTA0bFggdW5hdmFpbGFibGVcbiIsIGNoICkpOwpAQCAtMzUwLDkgKzM5Niw5IEBACiAKICAgICAgICAgZXJyb3IgICA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LCBGVF9MT0FEX05PX1NDQUxFICk7CiAgICAgICAgIG91dGxpbmUgPSBmYWNlLT5nbHlwaC0+b3V0bGluZTsKLSAgICAgICAgaWYgKCBlcnJvciB8fCBvdXRsaW5lLm5fcG9pbnRzIDw9IDAgKQorICAgICAgICBpZiAoIGVycm9yIHx8IG91dGxpbmUubl9wb2ludHMgPD0gMiApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9UUkFDRTUoKCAiICBVKyUwNGxYIGNvbnRhaW5zIG5vIG91dGxpbmVzXG4iLCBjaCApKTsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBVKyUwNGxYIGNvbnRhaW5zIG5vICh1c2FibGUpIG91dGxpbmVzXG4iLCBjaCApKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MzEsNyArNDc3LDggQEAKICAgICAgICAgICBmaWxsc1tudW1fZmlsbHMrK10gPSBiZXN0X3BvczsKICAgICAgICAgZWxzZQogICAgICAgICAgIGZsYXRzW251bV9mbGF0cysrXSA9IGJlc3RfcG9zOwotICAgICAgfQorCisgICAgICB9IC8qIGVuZCB3aGlsZSBsb29wICovCiAKICAgICAgIGlmICggbnVtX2ZsYXRzID09IDAgJiYgbnVtX2ZpbGxzID09IDAgKQogICAgICAgewpAQCAtNDk4LDcgKzU0NSwxMCBAQAogICAgICAgRlRfVFJBQ0U1KCggIiAgICAtPiByZWZlcmVuY2UgPSAlbGRcbiIKICAgICAgICAgICAgICAgICAgICIgICAgICAgb3ZlcnNob290ID0gJWxkXG4iLAogICAgICAgICAgICAgICAgICAgKmJsdWVfcmVmLCAqYmx1ZV9zaG9vdCApKTsKLSAgICB9CisKKyAgICB9IC8qIGVuZCBmb3IgbG9vcCAqLworCisgICAgYWZfc2hhcGVyX2J1Zl9kZXN0cm95KCBmYWNlLCBzaGFwZXJfYnVmICk7CiAKICAgICBGVF9UUkFDRTUoKCAiXG4iICkpOwogCkBAIC01MTIsMjcgKzU2MiwzNiBAQAogICBhZl9jamtfbWV0cmljc19jaGVja19kaWdpdHMoIEFGX0NKS01ldHJpY3MgIG1ldHJpY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgZmFjZSApCiAgIHsKLSAgICBGVF9VSW50ICAgaTsKICAgICBGVF9Cb29sICAgc3RhcnRlZCA9IDAsIHNhbWVfd2lkdGggPSAxOwogICAgIEZUX0ZpeGVkICBhZHZhbmNlLCBvbGRfYWR2YW5jZSA9IDA7CiAKKyAgICB2b2lkKiAgc2hhcGVyX2J1ZjsKIAotICAgIC8qIGRpZ2l0IGAwJyBpcyAweDMwIGluIGFsbCBzdXBwb3J0ZWQgY2hhcm1hcHMgKi8KLSAgICBmb3IgKCBpID0gMHgzMDsgaSA8PSAweDM5OyBpKysgKQorICAgIC8qIGluIGFsbCBzdXBwb3J0ZWQgY2hhcm1hcHMsIGRpZ2l0cyBoYXZlIGNoYXJhY3RlciBjb2RlcyAweDMwLTB4MzkgKi8KKyAgICBjb25zdCBjaGFyICAgZGlnaXRzW10gPSAiMCAxIDIgMyA0IDUgNiA3IDggOSI7CisgICAgY29uc3QgY2hhciogIHA7CisKKworICAgIHAgICAgICAgICAgPSBkaWdpdHM7CisgICAgc2hhcGVyX2J1ZiA9IGFmX3NoYXBlcl9idWZfY3JlYXRlKCBmYWNlICk7CisKKyAgICB3aGlsZSAoICpwICkKICAgICB7Ci0gICAgICBGVF9VTG9uZyAgZ2x5cGhfaW5kZXg7Ci0gICAgICBGVF9Mb25nICAgeV9vZmZzZXQ7CisgICAgICBGVF9VTG9uZyAgICAgIGdseXBoX2luZGV4OworICAgICAgdW5zaWduZWQgaW50ICBudW1faWR4OwogCiAKLSAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwgaSwgJmdseXBoX2luZGV4LCAmeV9vZmZzZXQgKTsKLSAgICAgIGlmICggZ2x5cGhfaW5kZXggPT0gMCApCisgICAgICAvKiByZWplY3QgaW5wdXQgdGhhdCBtYXBzIHRvIG1vcmUgdGhhbiBhIHNpbmdsZSBnbHlwaCAqLworICAgICAgcCA9IGFmX3NoYXBlcl9nZXRfY2x1c3RlciggcCwgJm1ldHJpY3MtPnJvb3QsIHNoYXBlcl9idWYsICZudW1faWR4ICk7CisgICAgICBpZiAoIG51bV9pZHggPiAxICkKICAgICAgICAgY29udGludWU7CiAKLSAgICAgIGlmICggRlRfR2V0X0FkdmFuY2UoIGZhY2UsIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfTk9fSElOVElORyAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZSApICkKKyAgICAgIGdseXBoX2luZGV4ID0gYWZfc2hhcGVyX2dldF9lbGVtKCAmbWV0cmljcy0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZXJfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgICAgaWYgKCAhZ2x5cGhfaW5kZXggKQogICAgICAgICBjb250aW51ZTsKIAogICAgICAgaWYgKCBzdGFydGVkICkKQEAgLTU1MCw2ICs2MDksOCBAQAogICAgICAgfQogICAgIH0KIAorICAgIGFmX3NoYXBlcl9idWZfZGVzdHJveSggZmFjZSwgc2hhcGVyX2J1ZiApOworCiAgICAgbWV0cmljcy0+cm9vdC5kaWdpdHNfaGF2ZV9zYW1lX3dpZHRoID0gc2FtZV93aWR0aDsKICAgfQogCkBAIC02ODgsNiArNzQ5LDIyIEBACiAgIH0KIAogCisgIC8qIEV4dHJhY3Qgc3RhbmRhcmRfd2lkdGggZnJvbSB3cml0aW5nIHN5c3RlbS9zY3JpcHQgc3BlY2lmaWMgKi8KKyAgLyogbWV0cmljcyBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2Nqa19nZXRfc3RhbmRhcmRfd2lkdGhzKCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICAgc3RkSFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgICBzdGRWVyApCisgIHsKKyAgICBpZiAoIHN0ZEhXICkKKyAgICAgICpzdGRIVyA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLnN0YW5kYXJkX3dpZHRoOworCisgICAgaWYgKCBzdGRWVyApCisgICAgICAqc3RkVlcgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5zdGFuZGFyZF93aWR0aDsKKyAgfQorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KQEAgLTg4OSwxNSArOTY2LDEyIEBACiAKICAgICAgIGlmICggc2VnMiApCiAgICAgICB7Ci0gICAgICAgIHNlZzItPm51bV9saW5rZWQrKzsKICAgICAgICAgaWYgKCBzZWcyLT5saW5rICE9IHNlZzEgKQogICAgICAgICB7CiAgICAgICAgICAgc2VnMS0+bGluayA9IE5VTEw7CiAKICAgICAgICAgICBpZiAoIHNlZzItPnNjb3JlIDwgZGlzdF90aHJlc2hvbGQgfHwgc2VnMS0+c2NvcmUgPCBzZWcyLT5zY29yZSAqIDQgKQogICAgICAgICAgICAgc2VnMS0+c2VyaWYgPSBzZWcyLT5saW5rOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlZzItPm51bV9saW5rZWQtLTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTEwMTQsNyArMTA4OCw3IEBACiAgICAgICAgIC8qIGluc2VydCBhIG5ldyBlZGdlIGluIHRoZSBsaXN0IGFuZCAqLwogICAgICAgICAvKiBzb3J0IGFjY29yZGluZyB0byB0aGUgcG9zaXRpb24gICAgKi8KICAgICAgICAgZXJyb3IgPSBhZl9heGlzX2hpbnRzX25ld19lZGdlKCBheGlzLCBzZWctPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfRGlyZWN0aW9uKXNlZy0+ZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBRl9EaXJlY3Rpb24pc2VnLT5kaXIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCAmZWRnZSApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNDUxLDcgKzE1MjUsNyBAQAogICAgICAgfQogCiAgICAgICBpZiAoIGRpc3QgPCA1NCApCi0gICAgICAgIGRpc3QgKz0gKCA1NCAtIGRpc3QgKSAvIDIgOworICAgICAgICBkaXN0ICs9ICggNTQgLSBkaXN0ICkgLyAyOwogICAgICAgZWxzZSBpZiAoIGRpc3QgPCAzICogNjQgKQogICAgICAgewogICAgICAgICBGVF9Qb3MgIGRlbHRhOwpAQCAtMjE4MSw3ICsyMjU1LDggQEAKICAgLyogQXBwbHkgdGhlIGNvbXBsZXRlIGhpbnRpbmcgYWxnb3JpdGhtIHRvIGEgQ0pLIGdseXBoLiAqLwogCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQotICBhZl9jamtfaGludHNfYXBwbHkoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICBhZl9jamtfaGludHNfYXBwbHkoIEZUX1VJbnQgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEFGX0dseXBoSGludHMgIGhpbnRzLAogICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcyApCiAgIHsKQEAgLTIxODksNiArMjI2NCw3IEBACiAgICAgaW50ICAgICAgIGRpbTsKIAogICAgIEZUX1VOVVNFRCggbWV0cmljcyApOworICAgIEZUX1VOVVNFRCggZ2x5cGhfaW5kZXggKTsKIAogCiAgICAgZXJyb3IgPSBhZl9nbHlwaF9oaW50c19yZWxvYWQoIGhpbnRzLCBvdXRsaW5lICk7CkBAIC0yMjc4LDYgKzIzNTQsNyBAQAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgYWZfY2prX21ldHJpY3NfaW5pdCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jKWFmX2Nqa19tZXRyaWNzX3NjYWxlLAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0RvbmVNZXRyaWNzRnVuYykgTlVMTCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9HZXRTdGRXaWR0aHNGdW5jKWFmX2Nqa19nZXRfc3RhbmRhcmRfd2lkdGhzLAogCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdEhpbnRzRnVuYykgICBhZl9jamtfaGludHNfaW5pdCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9BcHBseUhpbnRzRnVuYykgIGFmX2Nqa19oaW50c19hcHBseQpAQCAtMjI5Nyw2ICsyMzc0LDcgQEAKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0TWV0cmljc0Z1bmMpIE5VTEwsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fU2NhbGVNZXRyaWNzRnVuYylOVUxMLAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0RvbmVNZXRyaWNzRnVuYykgTlVMTCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9HZXRTdGRXaWR0aHNGdW5jKU5VTEwsCiAKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIE5VTEwsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBOVUxMCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmNqay5oIGIvc3JjL2F1dG9maXQvYWZjamsuaAppbmRleCBiZmQxMWYyLi40MGQxMTg0IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmNqay5oCisrKyBiL3NyYy9hdXRvZml0L2FmY2prLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgQ0pLIHdyaXRpbmcgc3lzdGVtIChzcGVjaWZpY2F0aW9uKS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGQ0pLX0hfXwotI2RlZmluZSBfX0FGQ0pLX0hfXworI2lmbmRlZiBBRkNKS19IXworI2RlZmluZSBBRkNKS19IXwogCiAjaW5jbHVkZSAiYWZoaW50cy5oIgogI2luY2x1ZGUgImFmbGF0aW4uaCIKQEAgLTExNSw3ICsxMTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcyApOwogCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCi0gIGFmX2Nqa19oaW50c19hcHBseSggQUZfR2x5cGhIaW50cyAgaGludHMsCisgIGFmX2Nqa19oaW50c19hcHBseSggRlRfVUludCAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICBBRl9DSktNZXRyaWNzICBtZXRyaWNzICk7CiAKQEAgLTEzNCw3ICsxMzUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGQ0pLX0hfXyAqLworI2VuZGlmIC8qIEFGQ0pLX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmNvdmVyLmggYi9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKaW5kZXggNTIwZThhNC4uMWMzOWE3MCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjb3Zlci5oCisrKyBiL3NyYy9hdXRvZml0L2FmY292ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBjb3ZlcmFnZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZkdW1teS5jIGIvc3JjL2F1dG9maXQvYWZkdW1teS5jCmluZGV4IDAzY2EyNWYuLmYzOTYwYzggMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZHVtbXkuYworKysgYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBBdXRvLWZpdHRlciBkdW1teSByb3V0aW5lcyB0byBiZSB1c2VkIGlmIG5vIGhpbnRpbmcgc2hvdWxkIGJlICAgICAgICAqLwogLyogICAgcGVyZm9ybWVkIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM4LDExICszOCwxNCBAQAogCiAKICAgc3RhdGljIEZUX0Vycm9yCi0gIGFmX2R1bW15X2hpbnRzX2FwcGx5KCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgYWZfZHVtbXlfaGludHNfYXBwbHkoIEZUX1VJbnQgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICBvdXRsaW5lICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvcjsKIAorICAgIEZUX1VOVVNFRCggZ2x5cGhfaW5kZXggKTsKKwogCiAgICAgZXJyb3IgPSBhZl9nbHlwaF9oaW50c19yZWxvYWQoIGhpbnRzLCBvdXRsaW5lICk7CiAgICAgaWYgKCAhZXJyb3IgKQpAQCAtNjIsNiArNjUsNyBAQAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgTlVMTCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jKU5VTEwsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jKSBOVUxMLAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0dldFN0ZFdpZHRoc0Z1bmMpTlVMTCwKIAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRIaW50c0Z1bmMpICAgYWZfZHVtbXlfaGludHNfaW5pdCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9BcHBseUhpbnRzRnVuYykgIGFmX2R1bW15X2hpbnRzX2FwcGx5CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmggYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKaW5kZXggYjRmZGM3OC4uN2U1OGQxYSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZkdW1teS5oCisrKyBiL3NyYy9hdXRvZml0L2FmZHVtbXkuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1dG8tZml0dGVyIGR1bW15IHJvdXRpbmVzIHRvIGJlIHVzZWQgaWYgbm8gaGludGluZyBzaG91bGQgYmUgICAgICAgICovCiAvKiAgICBwZXJmb3JtZWQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZEVU1NWV9IX18KLSNkZWZpbmUgX19BRkRVTU1ZX0hfXworI2lmbmRlZiBBRkRVTU1ZX0hfCisjZGVmaW5lIEFGRFVNTVlfSF8KIAogI2luY2x1ZGUgImFmdHlwZXMuaCIKIApAQCAtMzQsNyArMzQsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0FGRFVNTVlfSF9fICovCisjZW5kaWYgLyogQUZEVU1NWV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZlcnJvcnMuaCBiL3NyYy9hdXRvZml0L2FmZXJyb3JzLmgKaW5kZXggN2I0MTZlNC4uNTNjMDFmNiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZlcnJvcnMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG9maXR0ZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMywxMiArMjMsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fQUZFUlJPUlNfSF9fCi0jZGVmaW5lIF9fQUZFUlJPUlNfSF9fCisjaWZuZGVmIEFGRVJST1JTX0hfCisjZGVmaW5lIEFGRVJST1JTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgQUZfRXJyXwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19BRkVSUk9SU19IX18gKi8KKyNlbmRpZiAvKiBBRkVSUk9SU19IXyAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuYyBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMKaW5kZXggNjRiOTI5My4uYWM2ZGNhZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuYworKysgYi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHJvdXRpbmVzIHRvIGNvbXB1dGUgZ2xvYmFsIGhpbnRpbmcgdmFsdWVzIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpbmNsdWRlICJhZmdsb2JhbC5oIgogI2luY2x1ZGUgImFmcmFuZ2VzLmgiCi0jaW5jbHVkZSAiaGJzaGltLmgiCisjaW5jbHVkZSAiYWZzaGFwZXIuaCIKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKIAogCkBAIC00MiwxMiArNDIsMTQgQEAKIAogCiAjdW5kZWYgIFNDUklQVAotI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNjMSwgc2MyLCBzYzMgKSBcCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3MgKSAgICAgICAgIFwKICAgICAgICAgICBBRl9ERUZJTkVfU0NSSVBUX0NMQVNTKCAgICAgICAgICAgXAogICAgICAgICAgICAgYWZfICMjIHMgIyMgX3NjcmlwdF9jbGFzcywgICAgICBcCiAgICAgICAgICAgICBBRl9TQ1JJUFRfICMjIFMsICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGFmXyAjIyBzICMjIF91bmlyYW5nZXMsICAgICAgICAgXAotICAgICAgICAgICAgc2MxLCBzYzIsIHNjMyApCisgICAgICAgICAgICBhZl8gIyMgcyAjIyBfbm9uYmFzZV91bmlyYW5nZXMsIFwKKyAgICAgICAgICAgIEFGXyAjIyBILCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3MgKQogCiAjaW5jbHVkZSAiYWZzY3JpcHQuaCIKIApAQCAtODIsNyArODQsNyBAQAogCiAKICN1bmRlZiAgU0NSSVBUCi0jZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc2MxLCBzYzIsIHNjMyApIFwKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBILCBzcyApICAgXAogICAgICAgICAgICZhZl8gIyMgcyAjIyBfc2NyaXB0X2NsYXNzLAogCiAgIEZUX0xPQ0FMX0FSUkFZX0RFRiggQUZfU2NyaXB0Q2xhc3MgKQpAQCAtMTM1LDE2ICsxMzcsMTUgQEAKICAgICBGVF9FcnJvciAgICBlcnJvcjsKICAgICBGVF9GYWNlICAgICBmYWNlICAgICAgICA9IGdsb2JhbHMtPmZhY2U7CiAgICAgRlRfQ2hhck1hcCAgb2xkX2NoYXJtYXAgPSBmYWNlLT5jaGFybWFwOwotICAgIEZUX0J5dGUqICAgIGdzdHlsZXMgICAgID0gZ2xvYmFscy0+Z2x5cGhfc3R5bGVzOworICAgIEZUX1VTaG9ydCogIGdzdHlsZXMgICAgID0gZ2xvYmFscy0+Z2x5cGhfc3R5bGVzOwogICAgIEZUX1VJbnQgICAgIHNzOwogICAgIEZUX1VJbnQgICAgIGk7CiAgICAgRlRfVUludCAgICAgZGZsdCAgICAgICAgPSB+MFU7IC8qIGEgbm9uLXZhbGlkIHZhbHVlICovCiAKIAogICAgIC8qIHRoZSB2YWx1ZSBBRl9TVFlMRV9VTkFTU0lHTkVEIG1lYW5zIGB1bmNvdmVyZWQgZ2x5cGgnICovCi0gICAgRlRfTUVNX1NFVCggZ2xvYmFscy0+Z2x5cGhfc3R5bGVzLAotICAgICAgICAgICAgICAgIEFGX1NUWUxFX1VOQVNTSUdORUQsCi0gICAgICAgICAgICAgICAgZ2xvYmFscy0+Z2x5cGhfY291bnQgKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IChGVF9VSW50KWdsb2JhbHMtPmdseXBoX2NvdW50OyBpKysgKQorICAgICAgZ3N0eWxlc1tpXSA9IEFGX1NUWUxFX1VOQVNTSUdORUQ7CiAKICAgICBlcnJvciA9IEZUX1NlbGVjdF9DaGFybWFwKCBmYWNlLCBGVF9FTkNPRElOR19VTklDT0RFICk7CiAgICAgaWYgKCBlcnJvciApCkBAIC0xOTAsMTAgKzE5MSwxMCBAQAogCiAgICAgICAgICAgZ2luZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGNoYXJjb2RlICk7CiAKLSAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgZ2luZGV4IDwgKEZUX1VMb25nKWdsb2JhbHMtPmdseXBoX2NvdW50ICYmCi0gICAgICAgICAgICAgICBnc3R5bGVzW2dpbmRleF0gPT0gQUZfU1RZTEVfVU5BU1NJR05FRCAgKQotICAgICAgICAgICAgZ3N0eWxlc1tnaW5kZXhdID0gKEZUX0J5dGUpc3M7CisgICAgICAgICAgaWYgKCBnaW5kZXggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBnaW5kZXggPCAoRlRfVUxvbmcpZ2xvYmFscy0+Z2x5cGhfY291bnQgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAoIGdzdHlsZXNbZ2luZGV4XSAmIEFGX1NUWUxFX01BU0sgKSA9PSBBRl9TVFlMRV9VTkFTU0lHTkVEICkKKyAgICAgICAgICAgIGdzdHlsZXNbZ2luZGV4XSA9IChGVF9VU2hvcnQpc3M7CiAKICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgIHsKQEAgLTIwMiwzMiArMjAzLDYxIEBACiAgICAgICAgICAgICBpZiAoIGdpbmRleCA9PSAwIHx8IGNoYXJjb2RlID4gcmFuZ2UtPmxhc3QgKQogICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCBnaW5kZXggPCAoRlRfVUxvbmcpZ2xvYmFscy0+Z2x5cGhfY291bnQgJiYKLSAgICAgICAgICAgICAgICAgZ3N0eWxlc1tnaW5kZXhdID09IEFGX1NUWUxFX1VOQVNTSUdORUQgICkKLSAgICAgICAgICAgICAgZ3N0eWxlc1tnaW5kZXhdID0gKEZUX0J5dGUpc3M7CisgICAgICAgICAgICBpZiAoIGdpbmRleCA8IChGVF9VTG9uZylnbG9iYWxzLT5nbHlwaF9jb3VudCAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgKCBnc3R5bGVzW2dpbmRleF0gJiBBRl9TVFlMRV9NQVNLICkgPT0gQUZfU1RZTEVfVU5BU1NJR05FRCApCisgICAgICAgICAgICAgIGdzdHlsZXNbZ2luZGV4XSA9IChGVF9VU2hvcnQpc3M7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogZG8gdGhlIHNhbWUgZm9yIHRoZSBzY3JpcHQncyBub24tYmFzZSBjaGFyYWN0ZXJzICovCisgICAgICAgIGZvciAoIHJhbmdlID0gc2NyaXB0X2NsYXNzLT5zY3JpcHRfdW5pX25vbmJhc2VfcmFuZ2VzOworICAgICAgICAgICAgICByYW5nZS0+Zmlyc3QgIT0gMDsKKyAgICAgICAgICAgICAgcmFuZ2UrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUgPSByYW5nZS0+Zmlyc3Q7CisgICAgICAgICAgRlRfVUludCAgIGdpbmRleDsKKworCisgICAgICAgICAgZ2luZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGNoYXJjb2RlICk7CisKKyAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGdpbmRleCA8IChGVF9VTG9uZylnbG9iYWxzLT5nbHlwaF9jb3VudCAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICggZ3N0eWxlc1tnaW5kZXhdICYgQUZfU1RZTEVfTUFTSyApID09IChGVF9VU2hvcnQpc3MgKQorICAgICAgICAgICAgZ3N0eWxlc1tnaW5kZXhdIHw9IEFGX05PTkJBU0U7CisKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXJjb2RlID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgY2hhcmNvZGUsICZnaW5kZXggKTsKKworICAgICAgICAgICAgaWYgKCBnaW5kZXggPT0gMCB8fCBjaGFyY29kZSA+IHJhbmdlLT5sYXN0ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICggZ2luZGV4IDwgKEZUX1VMb25nKWdsb2JhbHMtPmdseXBoX2NvdW50ICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAoIGdzdHlsZXNbZ2luZGV4XSAmIEFGX1NUWUxFX01BU0sgKSA9PSAoRlRfVVNob3J0KXNzICkKKyAgICAgICAgICAgICAgZ3N0eWxlc1tnaW5kZXhdIHw9IEFGX05PTkJBU0U7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIGdldCBnbHlwaHMgbm90IGRpcmVjdGx5IGFkZHJlc3NhYmxlIGJ5IGNtYXAgKi8KLSAgICAgICAgYWZfZ2V0X2NvdmVyYWdlKCBnbG9iYWxzLCBzdHlsZV9jbGFzcywgZ3N0eWxlcyApOworICAgICAgICBhZl9zaGFwZXJfZ2V0X2NvdmVyYWdlKCBnbG9iYWxzLCBzdHlsZV9jbGFzcywgZ3N0eWxlcywgMCApOwogICAgICAgfQogICAgIH0KIAotICAgIC8qIGhhbmRsZSB0aGUgZGVmYXVsdCBPcGVuVHlwZSBmZWF0dXJlcyBvZiB0aGUgZGVmYXVsdCBzY3JpcHQgLi4uICovCi0gICAgYWZfZ2V0X2NvdmVyYWdlKCBnbG9iYWxzLCBBRl9TVFlMRV9DTEFTU0VTX0dFVFtkZmx0XSwgZ3N0eWxlcyApOwotCi0gICAgLyogLi4uIGFuZCB0aGUgcmVtYWluaW5nIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgKi8KKyAgICAvKiBoYW5kbGUgdGhlIHJlbWFpbmluZyBkZWZhdWx0IE9wZW5UeXBlIGZlYXR1cmVzIC4uLiAqLwogICAgIGZvciAoIHNzID0gMDsgQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdOyBzcysrICkKICAgICB7CiAgICAgICBBRl9TdHlsZUNsYXNzICBzdHlsZV9jbGFzcyA9IEFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXTsKIAogCi0gICAgICBpZiAoIHNzICE9IGRmbHQgJiYgc3R5bGVfY2xhc3MtPmNvdmVyYWdlID09IEFGX0NPVkVSQUdFX0RFRkFVTFQgKQotICAgICAgICBhZl9nZXRfY292ZXJhZ2UoIGdsb2JhbHMsIHN0eWxlX2NsYXNzLCBnc3R5bGVzICk7CisgICAgICBpZiAoIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSA9PSBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKyAgICAgICAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgc3R5bGVfY2xhc3MsIGdzdHlsZXMsIDAgKTsKICAgICB9CiAKKyAgICAvKiAuLi4gYW5kIGZpbmFsbHkgdGhlIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgb2YgdGhlIGRlZmF1bHQgc2NyaXB0ICovCisgICAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgQUZfU1RZTEVfQ0xBU1NFU19HRVRbZGZsdF0sIGdzdHlsZXMsIDEgKTsKKwogICAgIC8qIG1hcmsgQVNDSUkgZGlnaXRzICovCiAgICAgZm9yICggaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrICkKICAgICB7CkBAIC0yNTAsOSArMjgwLDkgQEAKIAogICAgICAgZm9yICggbm4gPSAwOyBubiA8IGdsb2JhbHMtPmdseXBoX2NvdW50OyBubisrICkKICAgICAgIHsKLSAgICAgICAgaWYgKCAoIGdzdHlsZXNbbm5dICYgfkFGX0RJR0lUICkgPT0gQUZfU1RZTEVfVU5BU1NJR05FRCApCisgICAgICAgIGlmICggKCBnc3R5bGVzW25uXSAmIEFGX1NUWUxFX01BU0sgKSA9PSBBRl9TVFlMRV9VTkFTU0lHTkVEICkKICAgICAgICAgewotICAgICAgICAgIGdzdHlsZXNbbm5dICY9IH5BRl9TVFlMRV9VTkFTU0lHTkVEOworICAgICAgICAgIGdzdHlsZXNbbm5dICY9IH5BRl9TVFlMRV9NQVNLOwogICAgICAgICAgIGdzdHlsZXNbbm5dIHw9IGdsb2JhbHMtPm1vZHVsZS0+ZmFsbGJhY2tfc3R5bGU7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTI3Niw3ICszMDYsNyBAQAogCiAgICAgICBmb3IgKCBpZHggPSAwOyBpZHggPCBnbG9iYWxzLT5nbHlwaF9jb3VudDsgaWR4KysgKQogICAgICAgewotICAgICAgICBpZiAoICggZ3N0eWxlc1tpZHhdICYgfkFGX0RJR0lUICkgPT0gc3R5bGVfY2xhc3MtPnN0eWxlICkKKyAgICAgICAgaWYgKCAoIGdzdHlsZXNbaWR4XSAmIEFGX1NUWUxFX01BU0sgKSA9PSBzdHlsZV9jbGFzcy0+c3R5bGUgKQogICAgICAgICB7CiAgICAgICAgICAgaWYgKCAhKCBjb3VudCAlIDEwICkgKQogICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAiICkpOwpAQCAtMzE0LDE4ICszNDQsMjggQEAKIAogICAgIG1lbW9yeSA9IGZhY2UtPm1lbW9yeTsKIAorICAgIC8qIHdlIGFsbG9jYXRlIGFuIEFGX0ZhY2VHbG9iYWxzIHN0cnVjdHVyZSB0b2dldGhlciAqLworICAgIC8qIHdpdGggdGhlIGdseXBoX3N0eWxlcyBhcnJheSAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggRlRfQUxMT0MoIGdsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggKmdsb2JhbHMgKSArCi0gICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpZmFjZS0+bnVtX2dseXBocyAqIHNpemVvZiAoIEZUX0J5dGUgKSApICkKKyAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZylmYWNlLT5udW1fZ2x5cGhzICogc2l6ZW9mICggRlRfVVNob3J0ICkgKSApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICBnbG9iYWxzLT5mYWNlICAgICAgICAgPSBmYWNlOwotICAgIGdsb2JhbHMtPmdseXBoX2NvdW50ICA9IGZhY2UtPm51bV9nbHlwaHM7Ci0gICAgZ2xvYmFscy0+Z2x5cGhfc3R5bGVzID0gKEZUX0J5dGUqKSggZ2xvYmFscyArIDEgKTsKLSAgICBnbG9iYWxzLT5tb2R1bGUgICAgICAgPSBtb2R1bGU7CisgICAgZ2xvYmFscy0+ZmFjZSAgICAgICAgICAgICAgICAgICAgICA9IGZhY2U7CisgICAgZ2xvYmFscy0+Z2x5cGhfY291bnQgICAgICAgICAgICAgICA9IGZhY2UtPm51bV9nbHlwaHM7CisgICAgLyogcmlnaHQgYWZ0ZXIgdGhlIGdsb2JhbHMgc3RydWN0dXJlIGNvbWUgdGhlIGdseXBoIHN0eWxlcyAqLworICAgIGdsb2JhbHMtPmdseXBoX3N0eWxlcyAgICAgICAgICAgICAgPSAoRlRfVVNob3J0KikoIGdsb2JhbHMgKyAxICk7CisgICAgZ2xvYmFscy0+bW9kdWxlICAgICAgICAgICAgICAgICAgICA9IG1vZHVsZTsKKyAgICBnbG9iYWxzLT5zdGVtX2RhcmtlbmluZ19mb3JfcHBlbSAgID0gMDsKKyAgICBnbG9iYWxzLT5kYXJrZW5feCAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBnbG9iYWxzLT5kYXJrZW5feSAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBnbG9iYWxzLT5zdGFuZGFyZF92ZXJ0aWNhbF93aWR0aCAgID0gMDsKKyAgICBnbG9iYWxzLT5zdGFuZGFyZF9ob3Jpem9udGFsX3dpZHRoID0gMDsKKyAgICBnbG9iYWxzLT5zY2FsZV9kb3duX2ZhY3RvciAgICAgICAgID0gMDsKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCiAgICAgZ2xvYmFscy0+aGJfZm9udCA9IGhiX2Z0X2ZvbnRfY3JlYXRlKCBmYWNlLCBOVUxMICk7CisgICAgZ2xvYmFscy0+aGJfYnVmICA9IGhiX2J1ZmZlcl9jcmVhdGUoKTsKICNlbmRpZgogCiAgICAgZXJyb3IgPSBhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zdHlsZV9jb3ZlcmFnZSggZ2xvYmFscyApOwpAQCAtMzcyLDExICs0MTIsMjEgQEAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgogICAgICAgaGJfZm9udF9kZXN0cm95KCBnbG9iYWxzLT5oYl9mb250ICk7CiAgICAgICBnbG9iYWxzLT5oYl9mb250ID0gTlVMTDsKKworICAgICAgaGJfYnVmZmVyX2Rlc3Ryb3koIGdsb2JhbHMtPmhiX2J1ZiApOworICAgICAgZ2xvYmFscy0+aGJfYnVmID0gTlVMTDsKICNlbmRpZgogCi0gICAgICBnbG9iYWxzLT5nbHlwaF9jb3VudCAgPSAwOwotICAgICAgZ2xvYmFscy0+Z2x5cGhfc3R5bGVzID0gTlVMTDsgIC8qIG5vIG5lZWQgdG8gZnJlZSB0aGlzIG9uZSEgKi8KLSAgICAgIGdsb2JhbHMtPmZhY2UgICAgICAgICA9IE5VTEw7CisgICAgICBnbG9iYWxzLT5nbHlwaF9jb3VudCAgICAgICAgICAgICAgID0gMDsKKyAgICAgIGdsb2JhbHMtPnN0ZW1fZGFya2VuaW5nX2Zvcl9wcGVtICAgPSAwOworICAgICAgZ2xvYmFscy0+ZGFya2VuX3ggICAgICAgICAgICAgICAgICA9IDA7CisgICAgICBnbG9iYWxzLT5kYXJrZW5feSAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAgIGdsb2JhbHMtPnN0YW5kYXJkX3ZlcnRpY2FsX3dpZHRoICAgPSAwOworICAgICAgZ2xvYmFscy0+c3RhbmRhcmRfaG9yaXpvbnRhbF93aWR0aCA9IDA7CisgICAgICBnbG9iYWxzLT5zY2FsZV9kb3duX2ZhY3RvciAgICAgICAgID0gMDsKKyAgICAgIC8qIG5vIG5lZWQgdG8gZnJlZSB0aGlzIG9uZSEgKi8KKyAgICAgIGdsb2JhbHMtPmdseXBoX3N0eWxlcyAgICAgICAgICAgICAgPSBOVUxMOworICAgICAgZ2xvYmFscy0+ZmFjZSAgICAgICAgICAgICAgICAgICAgICA9IE5VTEw7CiAKICAgICAgIEZUX0ZSRUUoIGdsb2JhbHMgKTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oIGIvc3JjL2F1dG9maXQvYWZnbG9iYWwuaAppbmRleCA5YmJiNjg3Li5jZTZiOWU4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oCisrKyBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcyAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDEzICsxNywxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZHTE9CQUxfSF9fCi0jZGVmaW5lIF9fQUZHTE9CQUxfSF9fCisjaWZuZGVmIEFGR0xPQkFMX0hfCisjZGVmaW5lIEFGR0xPQkFMX0hfCiAKIAogI2luY2x1ZGUgImFmdHlwZXMuaCIKICNpbmNsdWRlICJhZm1vZHVsZS5oIgotI2luY2x1ZGUgImhic2hpbS5oIgorI2luY2x1ZGUgImFmc2hhcGVyLmgiCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0zNCw3ICszNCw3IEBACiAKIAogI3VuZGVmICBTQ1JJUFQKLSNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzYzEsIHNjMiwgc2MzICkgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBILCBzcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBBRl9ERUNMQVJFX1NDUklQVF9DTEFTUyggYWZfICMjIHMgIyMgX3NjcmlwdF9jbGFzcyApCiAKICNpbmNsdWRlICJhZnNjcmlwdC5oIgpAQCAtNzIsMTAgKzcyLDE2IEBACiAjZW5kaWYKICAgLyogZGVmYXVsdCBzY3JpcHQgZm9yIE9wZW5UeXBlOyBpZ25vcmVkIGlmIEhhcmZCdXp6IGlzbid0IHVzZWQgKi8KICNkZWZpbmUgQUZfU0NSSVBUX0RFRkFVTFQgICAgQUZfU0NSSVBUX0xBVE4KLSAgLyogYSBiaXQgbWFzayBpbmRpY2F0aW5nIGFuIHVuY292ZXJlZCBnbHlwaCAgICAgICAgKi8KLSNkZWZpbmUgQUZfU1RZTEVfVU5BU1NJR05FRCAgMHg3RgotICAvKiBpZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIGFuIEFTQ0lJIGRpZ2l0ICAgICAqLwotI2RlZmluZSBBRl9ESUdJVCAgICAgICAgICAgICAweDgwCisKKyAgLyogYSBiaXQgbWFzayBmb3IgQUZfRElHSVQgYW5kIEFGX05PTkJBU0UgKi8KKyNkZWZpbmUgQUZfU1RZTEVfTUFTSyAgICAgICAgMHgzRkZGCisgIC8qIGFuIHVuY292ZXJlZCBnbHlwaCAgICAgICovCisjZGVmaW5lIEFGX1NUWUxFX1VOQVNTSUdORUQgIEFGX1NUWUxFX01BU0sKKworICAvKiBpZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIGFuIEFTQ0lJIGRpZ2l0ICAgKi8KKyNkZWZpbmUgQUZfRElHSVQgICAgICAgICAgICAgMHg4MDAwVQorICAvKiBpZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIGEgbm9uLWJhc2UgY2hhcmFjdGVyICovCisjZGVmaW5lIEFGX05PTkJBU0UgICAgICAgICAgIDB4NDAwMFUKIAogICAvKiBgaW5jcmVhc2UteC1oZWlnaHQnIHByb3BlcnR5ICovCiAjZGVmaW5lIEFGX1BST1BfSU5DUkVBU0VfWF9IRUlHSFRfTUlOICA2CkBAIC0xMDAsMTAgKzEwNiwxMSBAQAogICB7CiAgICAgRlRfRmFjZSAgICAgICAgICBmYWNlOwogICAgIEZUX0xvbmcgICAgICAgICAgZ2x5cGhfY291bnQ7ICAgIC8qIHNhbWUgYXMgZmFjZS0+bnVtX2dseXBocyAqLwotICAgIEZUX0J5dGUqICAgICAgICAgZ2x5cGhfc3R5bGVzOworICAgIEZUX1VTaG9ydCogICAgICAgZ2x5cGhfc3R5bGVzOwogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKICAgICBoYl9mb250X3QqICAgICAgIGhiX2ZvbnQ7CisgICAgaGJfYnVmZmVyX3QqICAgICBoYl9idWY7ICAgICAgICAgICAvKiBmb3IgZmVhdHVyZSBjb21wYXJpc29uICovCiAjZW5kaWYKIAogICAgIC8qIHBlci1mYWNlIGF1dG8taGludGVyIHByb3BlcnRpZXMgKi8KQEAgLTExMSw2ICsxMTgsMjIgQEAKIAogICAgIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljc1tBRl9TVFlMRV9NQVhdOwogCisgICAgLyogQ29tcHV0ZSBkYXJrZW5pbmcgYW1vdW50IG9uY2UgcGVyIHNpemUuICBVc2UgdGhpcyB0byBjaGVjayB3aGV0aGVyICovCisgICAgLyogZGFya2VuX3t4LHl9IG5lZWRzIHRvIGJlIHJlY29tcHV0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfVVNob3J0ICAgICAgICBzdGVtX2RhcmtlbmluZ19mb3JfcHBlbTsKKyAgICAvKiBDb3B5IGZyb20gZS5nLiBBRl9MYXRpbk1ldHJpY3MuYXhpc1tBRl9ESU1FTlNJT05fSE9SWl0gKi8KKyAgICAvKiB0byBjb21wdXRlIHRoZSBkYXJrZW5pbmcgYW1vdW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Qb3MgICAgICAgICAgIHN0YW5kYXJkX3ZlcnRpY2FsX3dpZHRoOworICAgIC8qIENvcHkgZnJvbSBlLmcuIEFGX0xhdGluTWV0cmljcy5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXSAqLworICAgIC8qIHRvIGNvbXB1dGUgdGhlIGRhcmtlbmluZyBhbW91bnQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX1BvcyAgICAgICAgICAgc3RhbmRhcmRfaG9yaXpvbnRhbF93aWR0aDsKKyAgICAvKiBUaGUgYWN0dWFsIGFtb3VudCB0byBkYXJrZW4gYSBnbHlwaCBhbG9uZyB0aGUgWCBheGlzLiAqLworICAgIEZUX1BvcyAgICAgICAgICAgZGFya2VuX3g7CisgICAgLyogVGhlIGFjdHVhbCBhbW91bnQgdG8gZGFya2VuIGEgZ2x5cGggYWxvbmcgdGhlIFkgYXhpcy4gKi8KKyAgICBGVF9Qb3MgICAgICAgICAgIGRhcmtlbl95OworICAgIC8qIEFtb3VudCB0byBzY2FsZSBkb3duIGJ5IHRvIGtlZXAgZW1ib2xkZW5lZCBwb2ludHMgKi8KKyAgICAvKiBvbiB0aGUgWS1heGlzIGluIHByZS1jb21wdXRlZCBibHVlIHpvbmVzLiAgICAgICAgICovCisgICAgRlRfRml4ZWQgICAgICAgICBzY2FsZV9kb3duX2ZhY3RvcjsKICAgICBBRl9Nb2R1bGUgICAgICAgIG1vZHVsZTsgICAgICAgICAvKiB0byBhY2Nlc3MgZ2xvYmFsIHByb3BlcnRpZXMgKi8KIAogICB9IEFGX0ZhY2VHbG9iYWxzUmVjOwpAQCAtMTQ0LDcgKzE2Nyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQUZHTE9CQUxfSF9fICovCisjZW5kaWYgLyogQUZHTE9CQUxfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmaGludHMuYyBiL3NyYy9hdXRvZml0L2FmaGludHMuYwppbmRleCAzNzQ4MmViLi4wZjdmNmU1IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKKysrIGIvc3JjL2F1dG9maXQvYWZoaW50cy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC05OSw2ICs5OSw3IEBACiAgIGFmX2F4aXNfaGludHNfbmV3X2VkZ2UoIEFGX0F4aXNIaW50cyAgYXhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBmcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaXJlY3Rpb24gIGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICB0b3BfdG9fYm90dG9tX2hpbnRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9FZGdlICAgICAgKmFuZWRnZSApCiAgIHsKQEAgLTE1Myw3ICsxNTQsOCBAQAogCiAgICAgd2hpbGUgKCBlZGdlID4gZWRnZXMgKQogICAgIHsKLSAgICAgIGlmICggZWRnZVstMV0uZnBvcyA8IGZwb3MgKQorICAgICAgaWYgKCB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPyAoIGVkZ2VbLTFdLmZwb3MgPiBmcG9zICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBlZGdlWy0xXS5mcG9zIDwgZnBvcyApICkKICAgICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHdlIHdhbnQgdGhlIGVkZ2Ugd2l0aCBzYW1lIHBvc2l0aW9uIGFuZCBtaW5vciBkaXJlY3Rpb24gKi8KQEAgLTIxOSw2ICsyMjEsODIgQEAKICNkZWZpbmUgQUZfSU5ERVhfTlVNKCBwdHIsIGJhc2UgKSAgKGludCkoIChwdHIpID8gKCAocHRyKSAtIChiYXNlKSApIDogLTEgKQogCiAKKyAgc3RhdGljIGNoYXIqCisgIGFmX3ByaW50X2lkeCggY2hhciogcCwKKyAgICAgICAgICAgICAgICBpbnQgICBpZHggKQorICB7CisgICAgaWYgKCBpZHggPT0gLTEgKQorICAgIHsKKyAgICAgIHBbMF0gPSAnLSc7CisgICAgICBwWzFdID0gJy0nOworICAgICAgcFsyXSA9ICdcMCc7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZ0X3NwcmludGYoIHAsICIlZCIsIGlkeCApOworCisgICAgcmV0dXJuIHA7CisgIH0KKworCisgIHN0YXRpYyBpbnQKKyAgYWZfZ2V0X3NlZ21lbnRfaW5kZXgoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgcG9pbnRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgZGltZW5zaW9uICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgICAgPSAmaGludHMtPmF4aXNbZGltZW5zaW9uXTsKKyAgICBBRl9Qb2ludCAgICAgIHBvaW50ICAgID0gaGludHMtPnBvaW50cyArIHBvaW50X2lkeDsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzID0gYXhpcy0+c2VnbWVudHM7CisgICAgQUZfU2VnbWVudCAgICBsaW1pdCAgICA9IHNlZ21lbnRzICsgYXhpcy0+bnVtX3NlZ21lbnRzOworICAgIEFGX1NlZ21lbnQgICAgc2VnbWVudDsKKworCisgICAgZm9yICggc2VnbWVudCA9IHNlZ21lbnRzOyBzZWdtZW50IDwgbGltaXQ7IHNlZ21lbnQrKyApCisgICAgeworICAgICAgaWYgKCBzZWdtZW50LT5maXJzdCA8PSBzZWdtZW50LT5sYXN0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBwb2ludCA+PSBzZWdtZW50LT5maXJzdCAmJiBwb2ludCA8PSBzZWdtZW50LT5sYXN0ICkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgQUZfUG9pbnQgIHAgPSBzZWdtZW50LT5maXJzdDsKKworCisgICAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHBvaW50ID09IHAgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgaWYgKCBwID09IHNlZ21lbnQtPmxhc3QgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBwID0gcC0+bmV4dDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgIGlmICggc2VnbWVudCA9PSBsaW1pdCApCisgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gKGludCkoIHNlZ21lbnQgLSBzZWdtZW50cyApOworICB9CisKKworICBzdGF0aWMgaW50CisgIGFmX2dldF9lZGdlX2luZGV4KCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIHNlZ21lbnRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgZGltZW5zaW9uICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgICA9ICZoaW50cy0+YXhpc1tkaW1lbnNpb25dOworICAgIEFGX0VkZ2UgICAgICAgZWRnZXMgICA9IGF4aXMtPmVkZ2VzOworICAgIEFGX1NlZ21lbnQgICAgc2VnbWVudCA9IGF4aXMtPnNlZ21lbnRzICsgc2VnbWVudF9pZHg7CisKKworICAgIHJldHVybiBzZWdtZW50X2lkeCA9PSAtMSA/IC0xIDogQUZfSU5ERVhfTlVNKCBzZWdtZW50LT5lZGdlLCBlZGdlcyApOworICB9CisKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiAgIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC0yMjYsMzAgKzMwNCw1OSBAQAogICBhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICB0b19zdGRvdXQgKQogICB7Ci0gICAgQUZfUG9pbnQgIHBvaW50cyA9IGhpbnRzLT5wb2ludHM7Ci0gICAgQUZfUG9pbnQgIGxpbWl0ICA9IHBvaW50cyArIGhpbnRzLT5udW1fcG9pbnRzOwotICAgIEFGX1BvaW50ICBwb2ludDsKKyAgICBBRl9Qb2ludCAgIHBvaW50cyAgPSBoaW50cy0+cG9pbnRzOworICAgIEFGX1BvaW50ICAgbGltaXQgICA9IHBvaW50cyArIGhpbnRzLT5udW1fcG9pbnRzOworICAgIEFGX1BvaW50KiAgY29udG91ciA9IGhpbnRzLT5jb250b3VyczsKKyAgICBBRl9Qb2ludCogIGNsaW1pdCAgPSBjb250b3VyICsgaGludHMtPm51bV9jb250b3VyczsKKyAgICBBRl9Qb2ludCAgIHBvaW50OwogCiAKICAgICBBRl9EVU1QKCggIlRhYmxlIG9mIHBvaW50czpcbiIgKSk7CiAKICAgICBpZiAoIGhpbnRzLT5udW1fcG9pbnRzICkKLSAgICAgIEFGX0RVTVAoKCAiICBbIGluZGV4IHwgIHhvcmcgfCAgeW9yZyB8IHhzY2FsZSB8IHlzY2FsZSIKLSAgICAgICAgICAgICAgICAiIHwgIHhmaXQgfCAgeWZpdCB8ICBmbGFncyBdXG4iICkpOworICAgICAgQUZfRFVNUCgoICIgIGluZGV4ICBoZWRnZSAgaHNlZyAgdmVkZ2UgIHZzZWcgIGZsYWdzICIKKyAgICAgICAgICAgICAgICAiICB4b3JnICB5b3JnICB4c2NhbGUgIHlzY2FsZSAgIHhmaXQgICAgeWZpdCIgKSk7CiAgICAgZWxzZQogICAgICAgQUZfRFVNUCgoICIgIChub25lKVxuIiApKTsKIAogICAgIGZvciAoIHBvaW50ID0gcG9pbnRzOyBwb2ludCA8IGxpbWl0OyBwb2ludCsrICkKLSAgICAgIEFGX0RVTVAoKCAiICBbICU1ZCB8ICU1ZCB8ICU1ZCB8ICU2LjJmIHwgJTYuMmYiCi0gICAgICAgICAgICAgICAgIiB8ICU1LjJmIHwgJTUuMmYgfCAlYyBdXG4iLAotICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggcG9pbnQsIHBvaW50cyApLAorICAgIHsKKyAgICAgIGludCAgcG9pbnRfaWR4ICAgICA9IEFGX0lOREVYX05VTSggcG9pbnQsIHBvaW50cyApOworICAgICAgaW50ICBzZWdtZW50X2lkeF8wID0gYWZfZ2V0X3NlZ21lbnRfaW5kZXgoIGhpbnRzLCBwb2ludF9pZHgsIDAgKTsKKyAgICAgIGludCAgc2VnbWVudF9pZHhfMSA9IGFmX2dldF9zZWdtZW50X2luZGV4KCBoaW50cywgcG9pbnRfaWR4LCAxICk7CisKKyAgICAgIGNoYXIgIGJ1ZjFbMTZdLCBidWYyWzE2XSwgYnVmM1sxNl0sIGJ1ZjRbMTZdOworCisKKyAgICAgIC8qIGluc2VydCBleHRyYSBuZXdsaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb250b3VyICovCisgICAgICBpZiAoIGNvbnRvdXIgPCBjbGltaXQgJiYgKmNvbnRvdXIgPT0gcG9pbnQgKQorICAgICAgeworICAgICAgICBBRl9EVU1QKCggIlxuIiApKTsKKyAgICAgICAgY29udG91cisrOworICAgICAgfQorCisgICAgICBBRl9EVU1QKCggIiAgJTVkICAlNXMgJTVzICAlNXMgJTVzICAlcyIKKyAgICAgICAgICAgICAgICAiICU1ZCAlNWQgJTcuMmYgJTcuMmYgJTcuMmYgJTcuMmZcbiIsCisgICAgICAgICAgICAgICAgcG9pbnRfaWR4LAorICAgICAgICAgICAgICAgIGFmX3ByaW50X2lkeCggYnVmMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmX2dldF9lZGdlX2luZGV4KCBoaW50cywgc2VnbWVudF9pZHhfMSwgMSApICksCisgICAgICAgICAgICAgICAgYWZfcHJpbnRfaWR4KCBidWYyLCBzZWdtZW50X2lkeF8xICksCisgICAgICAgICAgICAgICAgYWZfcHJpbnRfaWR4KCBidWYzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZfZ2V0X2VkZ2VfaW5kZXgoIGhpbnRzLCBzZWdtZW50X2lkeF8wLCAwICkgKSwKKyAgICAgICAgICAgICAgICBhZl9wcmludF9pZHgoIGJ1ZjQsIHNlZ21lbnRfaWR4XzAgKSwKKyAgICAgICAgICAgICAgICAoIHBvaW50LT5mbGFncyAmIEFGX0ZMQUdfTkVBUiApCisgICAgICAgICAgICAgICAgICA/ICIgbmVhciAiCisgICAgICAgICAgICAgICAgICA6ICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gKQorICAgICAgICAgICAgICAgICAgICA/ICIgd2VhayAiCisgICAgICAgICAgICAgICAgICAgIDogInN0cm9uZyIsCisKICAgICAgICAgICAgICAgICBwb2ludC0+ZngsCiAgICAgICAgICAgICAgICAgcG9pbnQtPmZ5LAogICAgICAgICAgICAgICAgIHBvaW50LT5veCAvIDY0LjAsCiAgICAgICAgICAgICAgICAgcG9pbnQtPm95IC8gNjQuMCwKICAgICAgICAgICAgICAgICBwb2ludC0+eCAvIDY0LjAsCi0gICAgICAgICAgICAgICAgcG9pbnQtPnkgLyA2NC4wLAotICAgICAgICAgICAgICAgICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gKSA/ICd3JyA6ICcgJykpOworICAgICAgICAgICAgICAgIHBvaW50LT55IC8gNjQuMCApKTsKKyAgICB9CiAgICAgQUZfRFVNUCgoICJcbiIgKSk7CiAgIH0KICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMzA2LDMxICs0MTMsMzQgQEAKICAgICAgIEFGX1NlZ21lbnQgICAgbGltaXQgICAgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKICAgICAgIEFGX1NlZ21lbnQgICAgc2VnOwogCisgICAgICBjaGFyICBidWYxWzE2XSwgYnVmMlsxNl0sIGJ1ZjNbMTZdOworCiAKICAgICAgIEFGX0RVTVAoKCAiVGFibGUgb2YgJXMgc2VnbWVudHM6XG4iLAogICAgICAgICAgICAgICAgIGRpbWVuc2lvbiA9PSBBRl9ESU1FTlNJT05fSE9SWiA/ICJ2ZXJ0aWNhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaG9yaXpvbnRhbCIgKSk7CiAgICAgICBpZiAoIGF4aXMtPm51bV9zZWdtZW50cyApCi0gICAgICAgIEFGX0RVTVAoKCAiICBbIGluZGV4IHwgIHBvcyAgfCAgZGlyICB8IGZyb20iCi0gICAgICAgICAgICAgICAgICAiIHwgIHRvICB8IGxpbmsgfCBzZXJpZiB8IGVkZ2UiCi0gICAgICAgICAgICAgICAgICAiIHwgaGVpZ2h0IHwgZXh0cmEgfCAgICBmbGFncyAgICBdXG4iICkpOworICAgICAgICBBRl9EVU1QKCggIiAgaW5kZXggICBwb3MgICBkZWx0YSAgIGRpciAgIGZyb20gICB0byAiCisgICAgICAgICAgICAgICAgICAiICBsaW5rICBzZXJpZiAgZWRnZSIKKyAgICAgICAgICAgICAgICAgICIgIGhlaWdodCAgZXh0cmEgICAgIGZsYWdzXG4iICkpOwogICAgICAgZWxzZQogICAgICAgICBBRl9EVU1QKCggIiAgKG5vbmUpXG4iICkpOwogCiAgICAgICBmb3IgKCBzZWcgPSBzZWdtZW50czsgc2VnIDwgbGltaXQ7IHNlZysrICkKLSAgICAgICAgQUZfRFVNUCgoICIgIFsgJTVkIHwgJTUuMmcgfCAlNXMgfCAlNGQiCi0gICAgICAgICAgICAgICAgICAiIHwgJTRkIHwgJTRkIHwgJTVkIHwgJTRkIgotICAgICAgICAgICAgICAgICAgIiB8ICU2ZCB8ICU1ZCB8ICUxMXMgXVxuIiwKKyAgICAgICAgQUZfRFVNUCgoICIgICU1ZCAgJTVkICAlNWQgICU1cyAgJTRkICAlNGQiCisgICAgICAgICAgICAgICAgICAiICAlNHMgICU1cyAgJTRzIgorICAgICAgICAgICAgICAgICAgIiAgJTZkICAlNWQgICUxMXNcbiIsCiAgICAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIHNlZywgc2VnbWVudHMgKSwKLSAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbiA9PSBBRl9ESU1FTlNJT05fSE9SWgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGludClzZWctPmZpcnN0LT5veCAvIDY0LjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpbnQpc2VnLT5maXJzdC0+b3kgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgc2VnLT5wb3MsCisgICAgICAgICAgICAgICAgICBzZWctPmRlbHRhLAogICAgICAgICAgICAgICAgICAgYWZfZGlyX3N0ciggKEFGX0RpcmVjdGlvbilzZWctPmRpciApLAogICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPmZpcnN0LCBwb2ludHMgKSwKICAgICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggc2VnLT5sYXN0LCBwb2ludHMgKSwKLSAgICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggc2VnLT5saW5rLCBzZWdtZW50cyApLAotICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPnNlcmlmLCBzZWdtZW50cyApLAotICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPmVkZ2UsIGVkZ2VzICksCisKKyAgICAgICAgICAgICAgICAgIGFmX3ByaW50X2lkeCggYnVmMSwgQUZfSU5ERVhfTlVNKCBzZWctPmxpbmssIHNlZ21lbnRzICkgKSwKKyAgICAgICAgICAgICAgICAgIGFmX3ByaW50X2lkeCggYnVmMiwgQUZfSU5ERVhfTlVNKCBzZWctPnNlcmlmLCBzZWdtZW50cyApICksCisgICAgICAgICAgICAgICAgICBhZl9wcmludF9pZHgoIGJ1ZjMsIEFGX0lOREVYX05VTSggc2VnLT5lZGdlLCBlZGdlcyApICksCisKICAgICAgICAgICAgICAgICAgIHNlZy0+aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgc2VnLT5oZWlnaHQgLSAoIHNlZy0+bWF4X2Nvb3JkIC0gc2VnLT5taW5fY29vcmQgKSwKICAgICAgICAgICAgICAgICAgIGFmX2VkZ2VfZmxhZ3NfdG9fc3RyaW5nKCBzZWctPmZsYWdzICkgKSk7CkBAIC00MzUsMjggKzU0NSwzOSBAQAogICAgICAgQUZfRWRnZSAgICAgICBsaW1pdCA9IGVkZ2VzICsgYXhpcy0+bnVtX2VkZ2VzOwogICAgICAgQUZfRWRnZSAgICAgICBlZGdlOwogCisgICAgICBjaGFyICBidWYxWzE2XSwgYnVmMlsxNl07CisKIAogICAgICAgLyoKICAgICAgICAqICBub3RlOiBBRl9ESU1FTlNJT05fSE9SWiBjb3JyZXNwb25kcyB0byBfdmVydGljYWxfIGVkZ2VzCiAgICAgICAgKiAgICAgICAgc2luY2UgdGhleSBoYXZlIGEgY29uc3RhbnQgWCBjb29yZGluYXRlLgogICAgICAgICovCi0gICAgICBBRl9EVU1QKCggIlRhYmxlIG9mICVzIGVkZ2VzOlxuIiwKLSAgICAgICAgICAgICAgICBkaW1lbnNpb24gPT0gQUZfRElNRU5TSU9OX0hPUlogPyAidmVydGljYWwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImhvcml6b250YWwiICkpOworICAgICAgaWYgKCBkaW1lbnNpb24gPT0gQUZfRElNRU5TSU9OX0hPUlogKQorICAgICAgICBBRl9EVU1QKCggIlRhYmxlIG9mICVzIGVkZ2VzICgxcHg9JS4yZnUsIDEwdT0lLjJmcHgpOlxuIiwKKyAgICAgICAgICAgICAgICAgICJ2ZXJ0aWNhbCIsCisgICAgICAgICAgICAgICAgICA2NTUzNi4wICogNjQuMCAvIGhpbnRzLT54X3NjYWxlLAorICAgICAgICAgICAgICAgICAgMTAuMCAqIGhpbnRzLT54X3NjYWxlIC8gNjU1MzYuMCAvIDY0LjAgKSk7CisgICAgICBlbHNlCisgICAgICAgIEFGX0RVTVAoKCAiVGFibGUgb2YgJXMgZWRnZXMgKDFweD0lLjJmdSwgMTB1PSUuMmZweCk6XG4iLAorICAgICAgICAgICAgICAgICAgImhvcml6b250YWwiLAorICAgICAgICAgICAgICAgICAgNjU1MzYuMCAqIDY0LjAgLyBoaW50cy0+eV9zY2FsZSwKKyAgICAgICAgICAgICAgICAgIDEwLjAgKiBoaW50cy0+eV9zY2FsZSAvIDY1NTM2LjAgLyA2NC4wICkpOworCiAgICAgICBpZiAoIGF4aXMtPm51bV9lZGdlcyApCi0gICAgICAgIEFGX0RVTVAoKCAiICBbIGluZGV4IHwgIHBvcyAgfCAgZGlyICB8IGxpbmsiCi0gICAgICAgICAgICAgICAgICAiIHwgc2VyaWYgfCBibHVlIHwgb3BvcyAgfCAgcG9zICB8ICAgIGZsYWdzICAgIF1cbiIgKSk7CisgICAgICAgIEFGX0RVTVAoKCAiICBpbmRleCAgICBwb3MgICAgIGRpciAgIGxpbmsgIHNlcmlmIgorICAgICAgICAgICAgICAgICAgIiAgYmx1ZSAgICBvcG9zICAgICBwb3MgICAgICAgZmxhZ3NcbiIgKSk7CiAgICAgICBlbHNlCiAgICAgICAgIEFGX0RVTVAoKCAiICAobm9uZSlcbiIgKSk7CiAKICAgICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGxpbWl0OyBlZGdlKysgKQotICAgICAgICBBRl9EVU1QKCggIiAgWyAlNWQgfCAlNS4yZyB8ICU1cyB8ICU0ZCIKLSAgICAgICAgICAgICAgICAgICIgfCAlNWQgfCAgICVjICB8ICU1LjJmIHwgJTUuMmYgfCAlMTFzIF1cbiIsCisgICAgICAgIEFGX0RVTVAoKCAiICAlNWQgICU3LjJmICAlNXMgICU0cyAgJTVzIgorICAgICAgICAgICAgICAgICAgIiAgICAlYyAgICU3LjJmICAlNy4yZiAgJTExc1xuIiwKICAgICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggZWRnZSwgZWRnZXMgKSwKICAgICAgICAgICAgICAgICAgIChpbnQpZWRnZS0+b3BvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICBhZl9kaXJfc3RyKCAoQUZfRGlyZWN0aW9uKWVkZ2UtPmRpciApLAotICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBlZGdlLT5saW5rLCBlZGdlcyApLAotICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBlZGdlLT5zZXJpZiwgZWRnZXMgKSwKKyAgICAgICAgICAgICAgICAgIGFmX3ByaW50X2lkeCggYnVmMSwgQUZfSU5ERVhfTlVNKCBlZGdlLT5saW5rLCBlZGdlcyApICksCisgICAgICAgICAgICAgICAgICBhZl9wcmludF9pZHgoIGJ1ZjIsIEFGX0lOREVYX05VTSggZWRnZS0+c2VyaWYsIGVkZ2VzICkgKSwKKwogICAgICAgICAgICAgICAgICAgZWRnZS0+Ymx1ZV9lZGdlID8gJ3knIDogJ24nLAogICAgICAgICAgICAgICAgICAgZWRnZS0+b3BvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLApAQCAtNzAyLDE4ICs4MjMsMjYgQEAKICAgICAgIEFGX1BvaW50ICBwb2ludDsKICAgICAgIEFGX1BvaW50ICBwb2ludF9saW1pdCA9IHBvaW50cyArIGhpbnRzLT5udW1fcG9pbnRzOwogCisgICAgICAvKiB2YWx1ZSAyMCBpbiBgbmVhcl9saW1pdCcgaXMgaGV1cmlzdGljICovCisgICAgICBGVF9VSW50ICB1bml0c19wZXJfZW0gPSBoaW50cy0+bWV0cmljcy0+c2NhbGVyLmZhY2UtPnVuaXRzX3Blcl9FTTsKKyAgICAgIEZUX0ludCAgIG5lYXJfbGltaXQgICA9IDIwICogdW5pdHNfcGVyX2VtIC8gMjA0ODsKKwogCiAgICAgICAvKiBjb21wdXRlIGNvb3JkaW5hdGVzICYgQmV6aWVyIGZsYWdzLCBuZXh0IGFuZCBwcmV2ICovCiAgICAgICB7CiAgICAgICAgIEZUX1ZlY3RvciogIHZlYyAgICAgICAgICAgPSBvdXRsaW5lLT5wb2ludHM7CiAgICAgICAgIGNoYXIqICAgICAgIHRhZyAgICAgICAgICAgPSBvdXRsaW5lLT50YWdzOwotICAgICAgICBBRl9Qb2ludCAgICBlbmQgICAgICAgICAgID0gcG9pbnRzICsgb3V0bGluZS0+Y29udG91cnNbMF07CisgICAgICAgIEZUX1Nob3J0ICAgIGVuZHBvaW50ICAgICAgPSBvdXRsaW5lLT5jb250b3Vyc1swXTsKKyAgICAgICAgQUZfUG9pbnQgICAgZW5kICAgICAgICAgICA9IHBvaW50cyArIGVuZHBvaW50OwogICAgICAgICBBRl9Qb2ludCAgICBwcmV2ICAgICAgICAgID0gZW5kOwogICAgICAgICBGVF9JbnQgICAgICBjb250b3VyX2luZGV4ID0gMDsKIAogCiAgICAgICAgIGZvciAoIHBvaW50ID0gcG9pbnRzOyBwb2ludCA8IHBvaW50X2xpbWl0OyBwb2ludCsrLCB2ZWMrKywgdGFnKysgKQogICAgICAgICB7CisgICAgICAgICAgRlRfUG9zICBvdXRfeCwgb3V0X3k7CisKKwogICAgICAgICAgIHBvaW50LT5pbl9kaXIgID0gKEZUX0NoYXIpQUZfRElSX05PTkU7CiAgICAgICAgICAgcG9pbnQtPm91dF9kaXIgPSAoRlRfQ2hhcilBRl9ESVJfTk9ORTsKIApAQCAtNzIyLDYgKzg1MSw5IEBACiAgICAgICAgICAgcG9pbnQtPm94ID0gcG9pbnQtPnggPSBGVF9NdWxGaXgoIHZlYy0+eCwgeF9zY2FsZSApICsgeF9kZWx0YTsKICAgICAgICAgICBwb2ludC0+b3kgPSBwb2ludC0+eSA9IEZUX011bEZpeCggdmVjLT55LCB5X3NjYWxlICkgKyB5X2RlbHRhOwogCisgICAgICAgICAgZW5kLT5meCA9IChGVF9TaG9ydClvdXRsaW5lLT5wb2ludHNbZW5kcG9pbnRdLng7CisgICAgICAgICAgZW5kLT5meSA9IChGVF9TaG9ydClvdXRsaW5lLT5wb2ludHNbZW5kcG9pbnRdLnk7CisKICAgICAgICAgICBzd2l0Y2ggKCBGVF9DVVJWRV9UQUcoICp0YWcgKSApCiAgICAgICAgICAgewogICAgICAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX0NPTklDOgpAQCAtNzM0LDYgKzg2NiwxMiBAQAogICAgICAgICAgICAgcG9pbnQtPmZsYWdzID0gQUZfRkxBR19OT05FOwogICAgICAgICAgIH0KIAorICAgICAgICAgIG91dF94ID0gcG9pbnQtPmZ4IC0gcHJldi0+Zng7CisgICAgICAgICAgb3V0X3kgPSBwb2ludC0+ZnkgLSBwcmV2LT5meTsKKworICAgICAgICAgIGlmICggRlRfQUJTKCBvdXRfeCApICsgRlRfQUJTKCBvdXRfeSApIDwgbmVhcl9saW1pdCApCisgICAgICAgICAgICBwcmV2LT5mbGFncyB8PSBBRl9GTEFHX05FQVI7CisKICAgICAgICAgICBwb2ludC0+cHJldiA9IHByZXY7CiAgICAgICAgICAgcHJldi0+bmV4dCAgPSBwb2ludDsKICAgICAgICAgICBwcmV2ICAgICAgICA9IHBvaW50OwpAQCAtNzQyLDggKzg4MCw5IEBACiAgICAgICAgICAgewogICAgICAgICAgICAgaWYgKCArK2NvbnRvdXJfaW5kZXggPCBvdXRsaW5lLT5uX2NvbnRvdXJzICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZW5kICA9IHBvaW50cyArIG91dGxpbmUtPmNvbnRvdXJzW2NvbnRvdXJfaW5kZXhdOwotICAgICAgICAgICAgICBwcmV2ID0gZW5kOworICAgICAgICAgICAgICBlbmRwb2ludCA9IG91dGxpbmUtPmNvbnRvdXJzW2NvbnRvdXJfaW5kZXhdOworICAgICAgICAgICAgICBlbmQgICAgICA9IHBvaW50cyArIGVuZHBvaW50OworICAgICAgICAgICAgICBwcmV2ICAgICA9IGVuZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc2OSwxNyArOTA4LDE1IEBACiAgICAgICAgICAqICBDb21wdXRlIGRpcmVjdGlvbnMgb2YgYGluJyBhbmQgYG91dCcgdmVjdG9ycy4KICAgICAgICAgICoKICAgICAgICAgICogIE5vdGUgdGhhdCBkaXN0YW5jZXMgYmV0d2VlbiBwb2ludHMgdGhhdCBhcmUgdmVyeSBuZWFyIHRvIGVhY2gKLSAgICAgICAgICogIG90aGVyIGFyZSBhY2N1bXVsYXRlZC4gIEluIG90aGVyIHdvcmRzLCB0aGUgYXV0by1oaW50ZXIKKyAgICAgICAgICogIG90aGVyIGFyZSBhY2N1bXVsYXRlZC4gIEluIG90aGVyIHdvcmRzLCB0aGUgYXV0by1oaW50ZXIgZWl0aGVyCiAgICAgICAgICAqICBwcmVwZW5kcyB0aGUgc21hbGwgdmVjdG9ycyBiZXR3ZWVuIG5lYXIgcG9pbnRzIHRvIHRoZSBmaXJzdAotICAgICAgICAgKiAgbm9uLW5lYXIgdmVjdG9yLiAgQWxsIGludGVybWVkaWF0ZSBwb2ludHMgYXJlIHRhZ2dlZCBhcwotICAgICAgICAgKiAgd2VhazsgdGhlIGRpcmVjdGlvbnMgYXJlIGFkanVzdGVkIGFsc28gdG8gYmUgZXF1YWwgdG8gdGhlCi0gICAgICAgICAqICBhY2N1bXVsYXRlZCBvbmUuCisgICAgICAgICAqICBub24tbmVhciB2ZWN0b3IsIG9yIHRoZSBzdW0gb2Ygc21hbGwgdmVjdG9yIGxlbmd0aHMgZXhjZWVkcyBhCisgICAgICAgICAqICB0aHJlc2hvbGQsIHRodXMgYGdyb3VwaW5nJyB0aGUgc21hbGwgdmVjdG9ycy4gIEFsbCBpbnRlcm1lZGlhdGUKKyAgICAgICAgICogIHBvaW50cyBhcmUgdGFnZ2VkIGFzIHdlYWs7IHRoZSBkaXJlY3Rpb25zIGFyZSBhZGp1c3RlZCBhbHNvIHRvCisgICAgICAgICAqICBiZSBlcXVhbCB0byB0aGUgYWNjdW11bGF0ZWQgb25lLgogICAgICAgICAgKi8KIAotICAgICAgICAvKiB2YWx1ZSAyMCBpbiBgbmVhcl9saW1pdCcgaXMgaGV1cmlzdGljICovCi0gICAgICAgIEZUX1VJbnQgIHVuaXRzX3Blcl9lbSA9IGhpbnRzLT5tZXRyaWNzLT5zY2FsZXIuZmFjZS0+dW5pdHNfcGVyX0VNOwotICAgICAgICBGVF9JbnQgICBuZWFyX2xpbWl0ICAgPSAyMCAqIHVuaXRzX3Blcl9lbSAvIDIwNDg7Ci0gICAgICAgIEZUX0ludCAgIG5lYXJfbGltaXQyICA9IDIgKiBuZWFyX2xpbWl0IC0gMTsKKyAgICAgICAgRlRfSW50ICBuZWFyX2xpbWl0MiA9IDIgKiBuZWFyX2xpbWl0IC0gMTsKIAogICAgICAgICBBRl9Qb2ludCogIGNvbnRvdXI7CiAgICAgICAgIEFGX1BvaW50KiAgY29udG91cl9saW1pdCA9IGhpbnRzLT5jb250b3VycyArIGhpbnRzLT5udW1fY29udG91cnM7CkBAIC04MjYsNyArOTYzLDcgQEAKICAgICAgICAgICAvKiBub3cgbG9vcCBvdmVyIGFsbCBwb2ludHMgb2YgdGhlIGNvbnRvdXIgdG8gZ2V0ICovCiAgICAgICAgICAgLyogYGluJyBhbmQgYG91dCcgdmVjdG9yIGRpcmVjdGlvbnMgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgY3VyciAgPSBmaXJzdDsKKyAgICAgICAgICBjdXJyID0gZmlyc3Q7CiAKICAgICAgICAgICAvKgogICAgICAgICAgICAqICBXZSBhYnVzZSB0aGUgYHUnIGFuZCBgdicgZmllbGRzIHRvIHN0b3JlIGluZGV4IGRlbHRhcyB0byB0aGUKQEAgLTg0OSw3ICs5ODYsNyBAQAogCiAKICAgICAgICAgICAgIHBvaW50ID0gbmV4dDsKLSAgICAgICAgICAgIG5leHQgPSBwb2ludC0+bmV4dDsKKyAgICAgICAgICAgIG5leHQgID0gcG9pbnQtPm5leHQ7CiAKICAgICAgICAgICAgIG91dF94ICs9IG5leHQtPmZ4IC0gcG9pbnQtPmZ4OwogICAgICAgICAgICAgb3V0X3kgKz0gbmV4dC0+ZnkgLSBwb2ludC0+Znk7CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmhpbnRzLmggYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKaW5kZXggYTY0YzdhNC4uNGZkZjczMiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZoaW50cy5oCisrKyBiL3NyYy9hdXRvZml0L2FmaGludHMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZISU5UU19IX18KLSNkZWZpbmUgX19BRkhJTlRTX0hfXworI2lmbmRlZiBBRkhJTlRTX0hfCisjZGVmaW5lIEFGSElOVFNfSF8KIAogI2luY2x1ZGUgImFmdHlwZXMuaCIKIApAQCAtMjIxLDYgKzIyMSw5IEBACiAgIC8qIGNhbmRpZGF0ZXMgZm9yIHdlYWsgaW50ZXJwb2xhdGlvbiBoYXZlIHRoaXMgZmxhZyBzZXQgKi8KICNkZWZpbmUgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gICggMVUgPDwgNCApCiAKKyAgLyogdGhlIGRpc3RhbmNlIHRvIHRoZSBuZXh0IHBvaW50IGlzIHZlcnkgc21hbGwgKi8KKyNkZWZpbmUgQUZfRkxBR19ORUFSICAoIDFVIDw8IDUgKQorCiAKICAgLyogZWRnZSBoaW50IGZsYWdzICovCiAjZGVmaW5lIEFGX0VER0VfTk9STUFMICAwCkBAIC0yNTcsNiArMjYwLDcgQEAKICAgICBGVF9CeXRlICAgICBmbGFnczsgICAgICAgLyogZWRnZS9zZWdtZW50IGZsYWdzIGZvciB0aGlzIHNlZ21lbnQgKi8KICAgICBGVF9DaGFyICAgICBkaXI7ICAgICAgICAgLyogc2VnbWVudCBkaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgKi8KICAgICBGVF9TaG9ydCAgICBwb3M7ICAgICAgICAgLyogcG9zaXRpb24gb2Ygc2VnbWVudCAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9TaG9ydCAgICBkZWx0YTsgICAgICAgLyogZGV2aWF0aW9uIGZyb20gc2VnbWVudCBwb3NpdGlvbiAgICAgKi8KICAgICBGVF9TaG9ydCAgICBtaW5fY29vcmQ7ICAgLyogbWluaW11bSBjb29yZGluYXRlIG9mIHNlZ21lbnQgICAgICAgKi8KICAgICBGVF9TaG9ydCAgICBtYXhfY29vcmQ7ICAgLyogbWF4aW11bSBjb29yZGluYXRlIG9mIHNlZ21lbnQgICAgICAgKi8KICAgICBGVF9TaG9ydCAgICBoZWlnaHQ7ICAgICAgLyogdGhlIGhpbnRlZCBzZWdtZW50IGhlaWdodCAgICAgICAgICAgKi8KQEAgLTI2Niw3ICsyNzAsNiBAQAogCiAgICAgQUZfU2VnbWVudCAgbGluazsgICAgICAgIC8qIChzdGVtKSBsaW5rIHNlZ21lbnQgICAgICAgICovCiAgICAgQUZfU2VnbWVudCAgc2VyaWY7ICAgICAgIC8qIHByaW1hcnkgc2VnbWVudCBmb3Igc2VyaWZzICovCi0gICAgRlRfUG9zICAgICAgbnVtX2xpbmtlZDsgIC8qIG51bWJlciBvZiBsaW5rZWQgc2VnbWVudHMgICovCiAgICAgRlRfUG9zICAgICAgc2NvcmU7ICAgICAgIC8qIHVzZWQgZHVyaW5nIHN0ZW0gbWF0Y2hpbmcgICovCiAgICAgRlRfUG9zICAgICAgbGVuOyAgICAgICAgIC8qIHVzZWQgZHVyaW5nIHN0ZW0gbWF0Y2hpbmcgICovCiAKQEAgLTI4OSw3ICsyOTIsNiBAQAogICAgIEFGX1dpZHRoICAgIGJsdWVfZWRnZTsgIC8qIG5vbi1OVUxMIGlmIHRoaXMgaXMgYSBibHVlIGVkZ2UgKi8KICAgICBBRl9FZGdlICAgICBsaW5rOyAgICAgICAvKiBsaW5rIGVkZ2UgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgQUZfRWRnZSAgICAgc2VyaWY7ICAgICAgLyogcHJpbWFyeSBlZGdlIGZvciBzZXJpZnMgICAgICAgICAqLwotICAgIEZUX1Nob3J0ICAgIG51bV9saW5rZWQ7IC8qIG51bWJlciBvZiBsaW5rZWQgZWRnZXMgICAgICAgICAgKi8KICAgICBGVF9JbnQgICAgICBzY29yZTsgICAgICAvKiB1c2VkIGR1cmluZyBzdGVtIG1hdGNoaW5nICAgICAgICovCiAKICAgICBBRl9TZWdtZW50ICBmaXJzdDsgICAgICAvKiBmaXJzdCBzZWdtZW50IGluIGVkZ2UgKi8KQEAgLTQxOSw2ICs0MjEsNyBAQAogICBhZl9heGlzX2hpbnRzX25ld19lZGdlKCBBRl9BeGlzSGludHMgIGF4aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgZnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGlyZWN0aW9uICBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgdG9wX3RvX2JvdHRvbV9oaW50aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICplZGdlICk7CiAKQEAgLTQ3Miw3ICs0NzUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGSElOVFNfSF9fICovCisjZW5kaWYgLyogQUZISU5UU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZpbmRpYy5jIGIvc3JjL2F1dG9maXQvYWZpbmRpYy5jCmluZGV4IDc0MTJjZDEuLjA5N2EyYjIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaW5kaWMuYworKysgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgSW5kaWMgd3JpdGluZyBzeXN0ZW0gKGJvZHkpLiAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBSYWh1bCBCaGFsZXJhbyA8cmFodWwuYmhhbGVyYW9AcmVkaGF0LmNvbT4sIDxiLnJhaHVsLnBtQGdtYWlsLmNvbT4uICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTc5LDEyICs3OSwyOSBAQAogCiAKICAgc3RhdGljIEZUX0Vycm9yCi0gIGFmX2luZGljX2hpbnRzX2FwcGx5KCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgYWZfaW5kaWNfaGludHNfYXBwbHkoIEZUX1VJbnQgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICBvdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcyApCiAgIHsKICAgICAvKiB1c2UgQ0pLIHJvdXRpbmVzICovCi0gICAgcmV0dXJuIGFmX2Nqa19oaW50c19hcHBseSggaGludHMsIG91dGxpbmUsIG1ldHJpY3MgKTsKKyAgICByZXR1cm4gYWZfY2prX2hpbnRzX2FwcGx5KCBnbHlwaF9pbmRleCwgaGludHMsIG91dGxpbmUsIG1ldHJpY3MgKTsKKyAgfQorCisKKyAgLyogRXh0cmFjdCBzdGFuZGFyZF93aWR0aCBmcm9tIHdyaXRpbmcgc3lzdGVtL3NjcmlwdCBzcGVjaWZpYyAqLworICAvKiBtZXRyaWNzIGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfaW5kaWNfZ2V0X3N0YW5kYXJkX3dpZHRocyggQUZfQ0pLTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICAgc3RkSFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAgIHN0ZFZXICkKKyAgeworICAgIGlmICggc3RkSFcgKQorICAgICAgKnN0ZEhXID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fVkVSVF0uc3RhbmRhcmRfd2lkdGg7CisKKyAgICBpZiAoIHN0ZFZXICkKKyAgICAgICpzdGRWVyA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLnN0YW5kYXJkX3dpZHRoOwogICB9CiAKIApAQCAtMTA3LDYgKzEyNCw3IEBACiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdE1ldHJpY3NGdW5jKSBhZl9pbmRpY19tZXRyaWNzX2luaXQsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fU2NhbGVNZXRyaWNzRnVuYylhZl9pbmRpY19tZXRyaWNzX3NjYWxlLAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0RvbmVNZXRyaWNzRnVuYykgTlVMTCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9HZXRTdGRXaWR0aHNGdW5jKWFmX2luZGljX2dldF9zdGFuZGFyZF93aWR0aHMsCiAKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIGFmX2luZGljX2hpbnRzX2luaXQsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBhZl9pbmRpY19oaW50c19hcHBseQpAQCAtMTI2LDYgKzE0NCw3IEBACiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdE1ldHJpY3NGdW5jKSBOVUxMLAogICAgIChBRl9Xcml0aW5nU3lzdGVtX1NjYWxlTWV0cmljc0Z1bmMpTlVMTCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9Eb25lTWV0cmljc0Z1bmMpIE5VTEwsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fR2V0U3RkV2lkdGhzRnVuYylOVUxMLAogCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdEhpbnRzRnVuYykgICBOVUxMLAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKSAgTlVMTApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZpbmRpYy5oIGIvc3JjL2F1dG9maXQvYWZpbmRpYy5oCmluZGV4IDRjMzY5MDguLjA3NzJlMDcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaW5kaWMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBSYWh1bCBCaGFsZXJhbyA8cmFodWwuYmhhbGVyYW9AcmVkaGF0LmNvbT4sIDxiLnJhaHVsLnBtQGdtYWlsLmNvbT4uICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDggKzE3LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGSU5ESUNfSF9fCi0jZGVmaW5lIF9fQUZJTkRJQ19IX18KKyNpZm5kZWYgQUZJTkRJQ19IXworI2RlZmluZSBBRklORElDX0hfCiAKICNpbmNsdWRlICJhZmhpbnRzLmgiCiAKQEAgLTM1LDcgKzM1LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRklORElDX0hfXyAqLworI2VuZGlmIC8qIEFGSU5ESUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4uYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4uYwppbmRleCA4OTNlOTg2Li5kYjdhYWZmIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmMKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC00MSw2ICs0MSwxMCBAQAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2FmbGF0aW4KIAogCisgIC8qIG5lZWRlZCBmb3IgY29tcHV0YXRpb24gb2Ygcm91bmQgdnMuIGZsYXQgc2VnbWVudHMgKi8KKyNkZWZpbmUgRkxBVF9USFJFU0hPTEQoIHggKSAgKCB4IC8gMTQgKQorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KQEAgLTc1LDcgKzc5LDYgQEAKICAgICB7CiAgICAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOwogICAgICAgRlRfVUxvbmcgICAgICAgICAgICBnbHlwaF9pbmRleDsKLSAgICAgIEZUX0xvbmcgICAgICAgICAgICAgeV9vZmZzZXQ7CiAgICAgICBpbnQgICAgICAgICAgICAgICAgIGRpbTsKICAgICAgIEFGX0xhdGluTWV0cmljc1JlYyAgZHVtbXlbMV07CiAgICAgICBBRl9TY2FsZXIgICAgICAgICAgIHNjYWxlciA9ICZkdW1teS0+cm9vdC5zY2FsZXI7CkBAIC04OCw1MiArOTEsNjMgQEAKICAgICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV9jbGFzcy0+c2NyaXB0XTsKIAotICAgICAgRlRfVUludDMyICBzdGFuZGFyZF9jaGFyOworICAgICAgdm9pZCogICAgICAgIHNoYXBlcl9idWY7CisgICAgICBjb25zdCBjaGFyKiAgcDsKIAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBGVF9VTG9uZyAgY2ggPSAwOworI2VuZGlmCisKKyAgICAgIHAgICAgICAgICAgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXJzdHJpbmc7CisgICAgICBzaGFwZXJfYnVmID0gYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIGZhY2UgKTsKIAogICAgICAgLyoKLSAgICAgICAqIFdlIGNoZWNrIG1vcmUgdGhhbiBhIHNpbmdsZSBzdGFuZGFyZCBjaGFyYWN0ZXIgdG8gY2F0Y2ggZmVhdHVyZXMKLSAgICAgICAqIGxpa2UgYGMyc2MnIChzbWFsbCBjYXBzIGZyb20gY2FwcykgdGhhdCBkb24ndCBjb250YWluIGxvd2VyY2FzZQotICAgICAgICogbGV0dGVycyBieSBkZWZpbml0aW9uLCBvciBvdGhlciBmZWF0dXJlcyB0aGF0IG1haW5seSBvcGVyYXRlIG9uCi0gICAgICAgKiBudW1lcmFscy4KKyAgICAgICAqIFdlIGNoZWNrIGEgbGlzdCBvZiBzdGFuZGFyZCBjaGFyYWN0ZXJzIHRvIGNhdGNoIGZlYXR1cmVzIGxpa2UKKyAgICAgICAqIGBjMnNjJyAoc21hbGwgY2FwcyBmcm9tIGNhcHMpIHRoYXQgZG9uJ3QgY29udGFpbiBsb3dlcmNhc2UgbGV0dGVycworICAgICAgICogYnkgZGVmaW5pdGlvbiwgb3Igb3RoZXIgZmVhdHVyZXMgdGhhdCBtYWlubHkgb3BlcmF0ZSBvbiBudW1lcmFscy4KKyAgICAgICAqIFRoZSBmaXJzdCBtYXRjaCB3aW5zLgogICAgICAgICovCiAKLSAgICAgIHN0YW5kYXJkX2NoYXIgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXIxOwotICAgICAgYWZfZ2V0X2NoYXJfaW5kZXgoICZtZXRyaWNzLT5yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICZ5X29mZnNldCApOwotICAgICAgaWYgKCAhZ2x5cGhfaW5kZXggKQorICAgICAgZ2x5cGhfaW5kZXggPSAwOworICAgICAgd2hpbGUgKCAqcCApCiAgICAgICB7Ci0gICAgICAgIGlmICggc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMiApCi0gICAgICAgIHsKLSAgICAgICAgICBzdGFuZGFyZF9jaGFyID0gc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMjsKLSAgICAgICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnlfb2Zmc2V0ICk7Ci0gICAgICAgICAgaWYgKCAhZ2x5cGhfaW5kZXggKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXIzOwotICAgICAgICAgICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnlfb2Zmc2V0ICk7Ci0gICAgICAgICAgICAgIGlmICggIWdseXBoX2luZGV4ICkKLSAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgdW5zaWduZWQgaW50ICBudW1faWR4OworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgY29uc3QgY2hhciogIHBfb2xkOworI2VuZGlmCisKKworICAgICAgICB3aGlsZSAoICpwID09ICcgJyApCisgICAgICAgICAgcCsrOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgcF9vbGQgPSBwOworICAgICAgICBHRVRfVVRGOF9DSEFSKCBjaCwgcF9vbGQgKTsKKyNlbmRpZgorCisgICAgICAgIC8qIHJlamVjdCBpbnB1dCB0aGF0IG1hcHMgdG8gbW9yZSB0aGFuIGEgc2luZ2xlIGdseXBoICovCisgICAgICAgIHAgPSBhZl9zaGFwZXJfZ2V0X2NsdXN0ZXIoIHAsICZtZXRyaWNzLT5yb290LCBzaGFwZXJfYnVmLCAmbnVtX2lkeCApOworICAgICAgICBpZiAoIG51bV9pZHggPiAxICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBvdGhlcndpc2UgZXhpdCBsb29wIGlmIHdlIGhhdmUgYSByZXN1bHQgKi8KKyAgICAgICAgZ2x5cGhfaW5kZXggPSBhZl9zaGFwZXJfZ2V0X2VsZW0oICZtZXRyaWNzLT5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVyX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgICAgICBpZiAoIGdseXBoX2luZGV4ICkKKyAgICAgICAgICBicmVhazsKICAgICAgIH0KIAorICAgICAgYWZfc2hhcGVyX2J1Zl9kZXN0cm95KCBmYWNlLCBzaGFwZXJfYnVmICk7CisKKyAgICAgIGlmICggIWdseXBoX2luZGV4ICkKKyAgICAgICAgZ290byBFeGl0OworCiAgICAgICBGVF9UUkFDRTUoKCAic3RhbmRhcmQgY2hhcmFjdGVyOiBVKyUwNGxYIChnbHlwaCBpbmRleCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyLCBnbHlwaF9pbmRleCApKTsKKyAgICAgICAgICAgICAgICAgIGNoLCBnbHlwaF9pbmRleCApKTsKIAogICAgICAgZXJyb3IgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9OT19TQ0FMRSApOwogICAgICAgaWYgKCBlcnJvciB8fCBmYWNlLT5nbHlwaC0+b3V0bGluZS5uX3BvaW50cyA8PSAwICkKQEAgLTI3NCw2ICsyODgsMTAgQEAKICAgICBBRl9CbHVlX1N0cmluZ3NldCAgICAgICAgIGJzcyA9IHNjLT5ibHVlX3N0cmluZ3NldDsKICAgICBjb25zdCBBRl9CbHVlX1N0cmluZ1JlYyogIGJzICA9ICZhZl9ibHVlX3N0cmluZ3NldHNbYnNzXTsKIAorICAgIEZUX1BvcyAgZmxhdF90aHJlc2hvbGQgPSBGTEFUX1RIUkVTSE9MRCggbWV0cmljcy0+dW5pdHNfcGVyX2VtICk7CisKKyAgICB2b2lkKiAgc2hhcGVyX2J1ZjsKKwogCiAgICAgLyogd2Ugd2FsayBvdmVyIHRoZSBibHVlIGNoYXJhY3RlciBzdHJpbmdzIGFzIHNwZWNpZmllZCBpbiB0aGUgKi8KICAgICAvKiBzdHlsZSdzIGVudHJ5IGluIHRoZSBgYWZfYmx1ZV9zdHJpbmdzZXQnIGFycmF5ICAgICAgICAgICAgICAqLwpAQCAtMjgyLDExICszMDAsMTUgQEAKICAgICAgICAgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgogICAgICAgICAgICAgICAgICJcbiIgKSk7CiAKKyAgICBzaGFwZXJfYnVmID0gYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIGZhY2UgKTsKKwogICAgIGZvciAoIDsgYnMtPnN0cmluZyAhPSBBRl9CTFVFX1NUUklOR19NQVg7IGJzKysgKQogICAgIHsKICAgICAgIGNvbnN0IGNoYXIqICBwID0gJmFmX2JsdWVfc3RyaW5nc1ticy0+c3RyaW5nXTsKICAgICAgIEZUX1BvcyogICAgICBibHVlX3JlZjsKICAgICAgIEZUX1BvcyogICAgICBibHVlX3Nob290OworICAgICAgRlRfUG9zICAgICAgIGFzY2VuZGVyOworICAgICAgRlRfUG9zICAgICAgIGRlc2NlbmRlcjsKIAogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKQEAgLTMwNSw2ICszMjcsMTEgQEAKICAgICAgICAgICAgIEZUX1RSQUNFNSgoICJ0b3AiICkpOwogICAgICAgICAgICAgaGF2ZV9mbGFnID0gMTsKICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIEFGX0xBVElOX0lTX1NVQl9UT1BfQkxVRSggYnMgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U1KCggInN1YiB0b3AiICkpOworICAgICAgICAgICAgaGF2ZV9mbGFnID0gMTsKKyAgICAgICAgICB9CiAKICAgICAgICAgICBpZiAoIEFGX0xBVElOX0lTX05FVVRSQUxfQkxVRSggYnMgKSApCiAgICAgICAgICAgewpAQCAtMzM4LDM5NCArMzY1LDQ4MiBAQAogCiAgICAgICBudW1fZmxhdHMgID0gMDsKICAgICAgIG51bV9yb3VuZHMgPSAwOworICAgICAgYXNjZW5kZXIgICA9IDA7CisgICAgICBkZXNjZW5kZXIgID0gMDsKIAogICAgICAgd2hpbGUgKCAqcCApCiAgICAgICB7Ci0gICAgICAgIEZUX1VMb25nICAgIGNoOwogICAgICAgICBGVF9VTG9uZyAgICBnbHlwaF9pbmRleDsKICAgICAgICAgRlRfTG9uZyAgICAgeV9vZmZzZXQ7Ci0gICAgICAgIEZUX1BvcyAgICAgIGJlc3RfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2FtZSBhcyBwb2ludHMueSAqLwogICAgICAgICBGVF9JbnQgICAgICBiZXN0X3BvaW50LCBiZXN0X2NvbnRvdXJfZmlyc3QsIGJlc3RfY29udG91cl9sYXN0OwogICAgICAgICBGVF9WZWN0b3IqICBwb2ludHM7Ci0gICAgICAgIEZUX0Jvb2wgICAgIHJvdW5kID0gMDsKKworICAgICAgICBGVF9Qb3MgICBiZXN0X3lfZXh0cmVtdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhbWUgYXMgcG9pbnRzLnkgKi8KKyAgICAgICAgRlRfQm9vbCAgYmVzdF9yb3VuZCA9IDA7CisKKyAgICAgICAgdW5zaWduZWQgaW50ICBpLCBudW1faWR4OworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgY29uc3QgY2hhciogIHBfb2xkOworICAgICAgICBGVF9VTG9uZyAgICAgY2g7CisjZW5kaWYKIAogCi0gICAgICAgIEdFVF9VVEY4X0NIQVIoIGNoLCBwICk7CisgICAgICAgIHdoaWxlICggKnAgPT0gJyAnICkKKyAgICAgICAgICBwKys7CiAKLSAgICAgICAgLyogbG9hZCB0aGUgY2hhcmFjdGVyIGluIHRoZSBmYWNlIC0tIHNraXAgdW5rbm93biBvciBlbXB0eSBvbmVzICovCi0gICAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwgY2gsICZnbHlwaF9pbmRleCwgJnlfb2Zmc2V0ICk7Ci0gICAgICAgIGlmICggZ2x5cGhfaW5kZXggPT0gMCApCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgcF9vbGQgPSBwOworICAgICAgICBHRVRfVVRGOF9DSEFSKCBjaCwgcF9vbGQgKTsKKyNlbmRpZgorCisgICAgICAgIHAgPSBhZl9zaGFwZXJfZ2V0X2NsdXN0ZXIoIHAsICZtZXRyaWNzLT5yb290LCBzaGFwZXJfYnVmLCAmbnVtX2lkeCApOworCisgICAgICAgIGlmICggIW51bV9pZHggKQogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgVSslMDRsWCB1bmF2YWlsYWJsZVxuIiwgY2ggKSk7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvciAgID0gRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsIEZUX0xPQURfTk9fU0NBTEUgKTsKLSAgICAgICAgb3V0bGluZSA9IGZhY2UtPmdseXBoLT5vdXRsaW5lOwotICAgICAgICAvKiByZWplY3QgZ2x5cGhzIHRoYXQgZG9uJ3QgcHJvZHVjZSBhbnkgcmVuZGVyaW5nICovCi0gICAgICAgIGlmICggZXJyb3IgfHwgb3V0bGluZS5uX3BvaW50cyA8PSAyICkKKyAgICAgICAgaWYgKCBBRl9MQVRJTl9JU19UT1BfQkxVRSggYnMgKSApCisgICAgICAgICAgYmVzdF95X2V4dHJlbXVtID0gRlRfSU5UX01JTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGJlc3RfeV9leHRyZW11bSA9IEZUX0lOVF9NQVg7CisKKyAgICAgICAgLyogaXRlcmF0ZSBvdmVyIGFsbCBnbHlwaCBlbGVtZW50cyBvZiB0aGUgY2hhcmFjdGVyIGNsdXN0ZXIgKi8KKyAgICAgICAgLyogYW5kIGdldCB0aGUgZGF0YSBvZiB0aGUgYGJpZ2dlc3QnIG9uZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1faWR4OyBpKysgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgVSslMDRsWCBjb250YWlucyBubyAodXNhYmxlKSBvdXRsaW5lc1xuIiwgY2ggKSk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBub3cgY29tcHV0ZSBtaW4gb3IgbWF4IHBvaW50IGluZGljZXMgYW5kIGNvb3JkaW5hdGVzICovCi0gICAgICAgIHBvaW50cyAgICAgICAgICAgICA9IG91dGxpbmUucG9pbnRzOwotICAgICAgICBiZXN0X3BvaW50ICAgICAgICAgPSAtMTsKLSAgICAgICAgYmVzdF95ICAgICAgICAgICAgID0gMDsgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KLSAgICAgICAgYmVzdF9jb250b3VyX2ZpcnN0ID0gMDsgIC8qIGRpdHRvICovCi0gICAgICAgIGJlc3RfY29udG91cl9sYXN0ICA9IDA7ICAvKiBkaXR0byAqLwotCi0gICAgICAgIHsKLSAgICAgICAgICBGVF9JbnQgIG5uOwotICAgICAgICAgIEZUX0ludCAgZmlyc3QgPSAwOwotICAgICAgICAgIEZUX0ludCAgbGFzdCAgPSAtMTsKKyAgICAgICAgICBGVF9Qb3MgICBiZXN0X3k7CisgICAgICAgICAgRlRfQm9vbCAgcm91bmQgPSAwOwogCiAKLSAgICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgb3V0bGluZS5uX2NvbnRvdXJzOyBmaXJzdCA9IGxhc3QgKyAxLCBubisrICkKKyAgICAgICAgICAvKiBsb2FkIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGZhY2UgLS0gc2tpcCB1bmtub3duIG9yIGVtcHR5IG9uZXMgKi8KKyAgICAgICAgICBnbHlwaF9pbmRleCA9IGFmX3NoYXBlcl9nZXRfZWxlbSggJm1ldHJpY3MtPnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5X29mZnNldCApOworICAgICAgICAgIGlmICggZ2x5cGhfaW5kZXggPT0gMCApCiAgICAgICAgICAgewotICAgICAgICAgICAgRlRfSW50ICBvbGRfYmVzdF9wb2ludCA9IGJlc3RfcG9pbnQ7Ci0gICAgICAgICAgICBGVF9JbnQgIHBwOwotCi0KLSAgICAgICAgICAgIGxhc3QgPSBvdXRsaW5lLmNvbnRvdXJzW25uXTsKLQotICAgICAgICAgICAgLyogQXZvaWQgc2luZ2xlLXBvaW50IGNvbnRvdXJzIHNpbmNlIHRoZXkgYXJlIG5ldmVyIHJhc3Rlcml6ZWQuICovCi0gICAgICAgICAgICAvKiBJbiBzb21lIGZvbnRzLCB0aGV5IGNvcnJlc3BvbmQgdG8gbWFyayBhdHRhY2htZW50IHBvaW50cyAgICAgKi8KLSAgICAgICAgICAgIC8qIHRoYXQgYXJlIHdheSBvdXRzaWRlIG9mIHRoZSBnbHlwaCdzIHJlYWwgb3V0bGluZS4gICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCBsYXN0IDw9IGZpcnN0ICkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICggQUZfTEFUSU5fSVNfVE9QX0JMVUUoIGJzICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBmb3IgKCBwcCA9IGZpcnN0OyBwcCA8PSBsYXN0OyBwcCsrICkKLSAgICAgICAgICAgICAgICBpZiAoIGJlc3RfcG9pbnQgPCAwIHx8IHBvaW50c1twcF0ueSA+IGJlc3RfeSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgYmVzdF9wb2ludCA9IHBwOwotICAgICAgICAgICAgICAgICAgYmVzdF95ICAgICA9IHBvaW50c1twcF0ueTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZvciAoIHBwID0gZmlyc3Q7IHBwIDw9IGxhc3Q7IHBwKysgKQotICAgICAgICAgICAgICAgIGlmICggYmVzdF9wb2ludCA8IDAgfHwgcG9pbnRzW3BwXS55IDwgYmVzdF95ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBiZXN0X3BvaW50ID0gcHA7Ci0gICAgICAgICAgICAgICAgICBiZXN0X3kgICAgID0gcG9pbnRzW3BwXS55OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBiZXN0X3BvaW50ICE9IG9sZF9iZXN0X3BvaW50ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYmVzdF9jb250b3VyX2ZpcnN0ID0gZmlyc3Q7Ci0gICAgICAgICAgICAgIGJlc3RfY29udG91cl9sYXN0ICA9IGxhc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogbm93IGNoZWNrIHdoZXRoZXIgdGhlIHBvaW50IGJlbG9uZ3MgdG8gYSBzdHJhaWdodCBvciByb3VuZCAgICovCi0gICAgICAgIC8qIHNlZ21lbnQ7IHdlIGZpcnN0IG5lZWQgdG8gZmluZCBpbiB3aGljaCBjb250b3VyIHRoZSBleHRyZW11bSAqLwotICAgICAgICAvKiBsaWVzLCB0aGVuIGluc3BlY3QgaXRzIHByZXZpb3VzIGFuZCBuZXh0IHBvaW50cyAgICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKCBiZXN0X3BvaW50ID49IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgRlRfUG9zICBiZXN0X3ggPSBwb2ludHNbYmVzdF9wb2ludF0ueDsKLSAgICAgICAgICBGVF9JbnQgIHByZXYsIG5leHQ7Ci0gICAgICAgICAgRlRfSW50ICBiZXN0X3NlZ21lbnRfZmlyc3QsIGJlc3Rfc2VnbWVudF9sYXN0OwotICAgICAgICAgIEZUX0ludCAgYmVzdF9vbl9wb2ludF9maXJzdCwgYmVzdF9vbl9wb2ludF9sYXN0OwotICAgICAgICAgIEZUX1BvcyAgZGlzdDsKLQotCi0gICAgICAgICAgYmVzdF9zZWdtZW50X2ZpcnN0ID0gYmVzdF9wb2ludDsKLSAgICAgICAgICBiZXN0X3NlZ21lbnRfbGFzdCAgPSBiZXN0X3BvaW50OwotCi0gICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tiZXN0X3BvaW50XSApID09IEZUX0NVUlZFX1RBR19PTiApCi0gICAgICAgICAgewotICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9maXJzdCA9IGJlc3RfcG9pbnQ7Ci0gICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgID0gYmVzdF9wb2ludDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfZmlyc3QgPSAtMTsKLSAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfbGFzdCAgPSAtMTsKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFUrJTA0bFggdW5hdmFpbGFibGVcbiIsIGNoICkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgfQogCi0gICAgICAgICAgLyogbG9vayBmb3IgdGhlIHByZXZpb3VzIGFuZCBuZXh0IHBvaW50cyBvbiB0aGUgY29udG91ciAgKi8KLSAgICAgICAgICAvKiB0aGF0IGFyZSBub3Qgb24gdGhlIHNhbWUgWSBjb29yZGluYXRlLCB0aGVuIHRocmVzaG9sZCAqLwotICAgICAgICAgIC8qIHRoZSBgY2xvc2VuZXNzJy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgcHJldiA9IGJlc3RfcG9pbnQ7Ci0gICAgICAgICAgbmV4dCA9IHByZXY7Ci0KLSAgICAgICAgICBkbworICAgICAgICAgIGVycm9yICAgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9OT19TQ0FMRSApOworICAgICAgICAgIG91dGxpbmUgPSBmYWNlLT5nbHlwaC0+b3V0bGluZTsKKyAgICAgICAgICAvKiByZWplY3QgZ2x5cGhzIHRoYXQgZG9uJ3QgcHJvZHVjZSBhbnkgcmVuZGVyaW5nICovCisgICAgICAgICAgaWYgKCBlcnJvciB8fCBvdXRsaW5lLm5fcG9pbnRzIDw9IDIgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcHJldiA+IGJlc3RfY29udG91cl9maXJzdCApCi0gICAgICAgICAgICAgIHByZXYtLTsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgICAgaWYgKCBudW1faWR4ID09IDEgKQorICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBVKyUwNGxYIGNvbnRhaW5zIG5vICh1c2FibGUpIG91dGxpbmVzXG4iLCBjaCApKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJldiA9IGJlc3RfY29udG91cl9sYXN0OworICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBjb21wb25lbnQgJWQgb2YgY2x1c3RlciBzdGFydGluZyB3aXRoIFUrJTA0bFgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgY29udGFpbnMgbm8gKHVzYWJsZSkgb3V0bGluZXNcbiIsIGksIGNoICkpOworI2VuZGlmCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGRpc3QgPSBGVF9BQlMoIHBvaW50c1twcmV2XS55IC0gYmVzdF95ICk7Ci0gICAgICAgICAgICAvKiBhY2NlcHQgYSBzbWFsbCBkaXN0YW5jZSBvciBhIHNtYWxsIGFuZ2xlIChib3RoIHZhbHVlcyBhcmUgKi8KLSAgICAgICAgICAgIC8qIGhldXJpc3RpYzsgdmFsdWUgMjAgY29ycmVzcG9uZHMgdG8gYXBwcm94LiAyLjkgZGVncmVlcykgICAqLwotICAgICAgICAgICAgaWYgKCBkaXN0ID4gNSApCi0gICAgICAgICAgICAgIGlmICggRlRfQUJTKCBwb2ludHNbcHJldl0ueCAtIGJlc3RfeCApIDw9IDIwICogZGlzdCApCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgLyogbm93IGNvbXB1dGUgbWluIG9yIG1heCBwb2ludCBpbmRpY2VzIGFuZCBjb29yZGluYXRlcyAqLworICAgICAgICAgIHBvaW50cyAgICAgICAgICAgICA9IG91dGxpbmUucG9pbnRzOworICAgICAgICAgIGJlc3RfcG9pbnQgICAgICAgICA9IC0xOworICAgICAgICAgIGJlc3RfeSAgICAgICAgICAgICA9IDA7ICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgICAgICAgYmVzdF9jb250b3VyX2ZpcnN0ID0gMDsgIC8qIGRpdHRvICovCisgICAgICAgICAgYmVzdF9jb250b3VyX2xhc3QgID0gMDsgIC8qIGRpdHRvICovCiAKLSAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9maXJzdCA9IHByZXY7Ci0KLSAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbcHJldl0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2ZpcnN0ID0gcHJldjsKLSAgICAgICAgICAgICAgaWYgKCBiZXN0X29uX3BvaW50X2xhc3QgPCAwICkKLSAgICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgPSBwcmV2OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfSB3aGlsZSAoIHByZXYgIT0gYmVzdF9wb2ludCApOwotCi0gICAgICAgICAgZG8KICAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIG5leHQgPCBiZXN0X2NvbnRvdXJfbGFzdCApCi0gICAgICAgICAgICAgIG5leHQrKzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgbmV4dCA9IGJlc3RfY29udG91cl9maXJzdDsKKyAgICAgICAgICAgIEZUX0ludCAgbm47CisgICAgICAgICAgICBGVF9JbnQgIGZpcnN0ID0gMDsKKyAgICAgICAgICAgIEZUX0ludCAgbGFzdCAgPSAtMTsKIAotICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW25leHRdLnkgLSBiZXN0X3kgKTsKLSAgICAgICAgICAgIGlmICggZGlzdCA+IDUgKQotICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW25leHRdLnggLSBiZXN0X3ggKSA8PSAyMCAqIGRpc3QgKQotICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBiZXN0X3NlZ21lbnRfbGFzdCA9IG5leHQ7Ci0KLSAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbbmV4dF0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IG91dGxpbmUubl9jb250b3VyczsgZmlyc3QgPSBsYXN0ICsgMSwgbm4rKyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfbGFzdCA9IG5leHQ7Ci0gICAgICAgICAgICAgIGlmICggYmVzdF9vbl9wb2ludF9maXJzdCA8IDAgKQotICAgICAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfZmlyc3QgPSBuZXh0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfSB3aGlsZSAoIG5leHQgIT0gYmVzdF9wb2ludCApOwotCi0gICAgICAgICAgaWYgKCBBRl9MQVRJTl9JU19MT05HX0JMVUUoIGJzICkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIElmIHRoaXMgZmxhZyBpcyBzZXQsIHdlIGhhdmUgYW4gYWRkaXRpb25hbCBjb25zdHJhaW50IHRvICAqLwotICAgICAgICAgICAgLyogZ2V0IHRoZSBibHVlIHpvbmUgZGlzdGFuY2U6IEZpbmQgYSBzZWdtZW50IG9mIHRoZSB0b3Btb3N0ICovCi0gICAgICAgICAgICAvKiAob3IgYm90dG9tbW9zdCkgY29udG91ciB0aGF0IGlzIGxvbmdlciB0aGFuIGEgaGV1cmlzdGljICAgKi8KLSAgICAgICAgICAgIC8qIHRocmVzaG9sZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHNtYWxsIGJ1bXBzIGluIHRoZSBvdXRsaW5lICAqLwotICAgICAgICAgICAgLyogYXJlIGlnbm9yZWQgKGZvciBleGFtcGxlLCB0aGUgYHZlcnRpY2FsIHNlcmlmcycgZm91bmQgaW4gICovCi0gICAgICAgICAgICAvKiBtYW55IEhlYnJldyBnbHlwaCBkZXNpZ25zKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgLyogSWYgdGhpcyBzZWdtZW50IGlzIGxvbmcgZW5vdWdoLCB3ZSBhcmUgZG9uZS4gIE90aGVyd2lzZSwgICovCi0gICAgICAgICAgICAvKiBzZWFyY2ggdGhlIHNlZ21lbnQgbmV4dCB0byB0aGUgZXh0cmVtdW0gdGhhdCBpcyBsb25nICAgICAgKi8KLSAgICAgICAgICAgIC8qIGVub3VnaCwgaGFzIHRoZSBzYW1lIGRpcmVjdGlvbiwgYW5kIGEgbm90IHRvbyBsYXJnZSAgICAgICAqLwotICAgICAgICAgICAgLyogdmVydGljYWwgZGlzdGFuY2UgZnJvbSB0aGUgZXh0cmVtdW0uICBOb3RlIHRoYXQgdGhlICAgICAgICovCi0gICAgICAgICAgICAvKiBhbGdvcml0aG0gZG9lc24ndCBjaGVjayB3aGV0aGVyIHRoZSBmb3VuZCBzZWdtZW50IGlzICAgICAgKi8KLSAgICAgICAgICAgIC8qIGFjdHVhbGx5IHRoZSBvbmUgKHZlcnRpY2FsbHkpIG5lYXJlc3QgdG8gdGhlIGV4dHJlbXVtLiAgICAqLwotCi0gICAgICAgICAgICAvKiBoZXVyaXN0aWMgdGhyZXNob2xkIHZhbHVlICovCi0gICAgICAgICAgICBGVF9Qb3MgIGxlbmd0aF90aHJlc2hvbGQgPSBtZXRyaWNzLT51bml0c19wZXJfZW0gLyAyNTsKKyAgICAgICAgICAgICAgRlRfSW50ICBvbGRfYmVzdF9wb2ludCA9IGJlc3RfcG9pbnQ7CisgICAgICAgICAgICAgIEZUX0ludCAgcHA7CiAKIAotICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW2Jlc3Rfc2VnbWVudF9sYXN0XS54IC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2Jlc3Rfc2VnbWVudF9maXJzdF0ueCApOworICAgICAgICAgICAgICBsYXN0ID0gb3V0bGluZS5jb250b3Vyc1tubl07CiAKLSAgICAgICAgICAgIGlmICggZGlzdCA8IGxlbmd0aF90aHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9sYXN0IC0gYmVzdF9zZWdtZW50X2ZpcnN0ICsgMiA8PQotICAgICAgICAgICAgICAgICAgIGJlc3RfY29udG91cl9sYXN0IC0gYmVzdF9jb250b3VyX2ZpcnN0ICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvKiBoZXVyaXN0aWMgdGhyZXNob2xkIHZhbHVlICovCi0gICAgICAgICAgICAgIEZUX1BvcyAgaGVpZ2h0X3RocmVzaG9sZCA9IG1ldHJpY3MtPnVuaXRzX3Blcl9lbSAvIDQ7Ci0KLSAgICAgICAgICAgICAgRlRfSW50ICAgZmlyc3Q7Ci0gICAgICAgICAgICAgIEZUX0ludCAgIGxhc3Q7Ci0gICAgICAgICAgICAgIEZUX0Jvb2wgIGhpdDsKLQotICAgICAgICAgICAgICAvKiB3ZSBpbnRlbnRpb25hbGx5IGRlY2xhcmUgdGhlc2UgdHdvIHZhcmlhYmxlcyAgICAgICAgKi8KLSAgICAgICAgICAgICAgLyogb3V0c2lkZSBvZiB0aGUgbG9vcCBzaW5jZSB2YXJpb3VzIGNvbXBpbGVycyBlbWl0ICAgICovCi0gICAgICAgICAgICAgIC8qIGluY29ycmVjdCB3YXJuaW5nIG1lc3NhZ2VzIG90aGVyd2lzZSwgdGFsa2luZyBhYm91dCAqLwotICAgICAgICAgICAgICAvKiBgcG9zc2libHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMnICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgRlRfSW50ICBwX2ZpcnN0ID0gMDsgICAgICAgICAgICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCi0gICAgICAgICAgICAgIEZUX0ludCAgcF9sYXN0ICA9IDA7Ci0KLSAgICAgICAgICAgICAgRlRfQm9vbCAgbGVmdDJyaWdodDsKLQotCi0gICAgICAgICAgICAgIC8qIGNvbXB1dGUgZGlyZWN0aW9uICovCi0gICAgICAgICAgICAgIHByZXYgPSBiZXN0X3BvaW50OwotCi0gICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIHByZXYgPiBiZXN0X2NvbnRvdXJfZmlyc3QgKQotICAgICAgICAgICAgICAgICAgcHJldi0tOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHByZXYgPSBiZXN0X2NvbnRvdXJfbGFzdDsKLQotICAgICAgICAgICAgICAgIGlmICggcG9pbnRzW3ByZXZdLnggIT0gYmVzdF94ICkKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIH0gd2hpbGUgKCBwcmV2ICE9IGJlc3RfcG9pbnQgKTsKLQotICAgICAgICAgICAgICAvKiBza2lwIGdseXBoIGZvciB0aGUgZGVnZW5lcmF0ZSBjYXNlICovCi0gICAgICAgICAgICAgIGlmICggcHJldiA9PSBiZXN0X3BvaW50ICkKKyAgICAgICAgICAgICAgLyogQXZvaWQgc2luZ2xlLXBvaW50IGNvbnRvdXJzIHNpbmNlIHRoZXkgYXJlIG5ldmVyICAgICAgKi8KKyAgICAgICAgICAgICAgLyogcmFzdGVyaXplZC4gIEluIHNvbWUgZm9udHMsIHRoZXkgY29ycmVzcG9uZCB0byBtYXJrICAgKi8KKyAgICAgICAgICAgICAgLyogYXR0YWNobWVudCBwb2ludHMgdGhhdCBhcmUgd2F5IG91dHNpZGUgb2YgdGhlIGdseXBoJ3MgKi8KKyAgICAgICAgICAgICAgLyogcmVhbCBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgaWYgKCBsYXN0IDw9IGZpcnN0ICkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICBsZWZ0MnJpZ2h0ID0gRlRfQk9PTCggcG9pbnRzW3ByZXZdLnggPCBwb2ludHNbYmVzdF9wb2ludF0ueCApOwotCi0gICAgICAgICAgICAgIGZpcnN0ID0gYmVzdF9zZWdtZW50X2xhc3Q7Ci0gICAgICAgICAgICAgIGxhc3QgID0gZmlyc3Q7Ci0gICAgICAgICAgICAgIGhpdCAgID0gMDsKLQotICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICBpZiAoIEFGX0xBVElOX0lTX1RPUF9CTFVFKCBicyApICAgICB8fAorICAgICAgICAgICAgICAgICAgIEFGX0xBVElOX0lTX1NVQl9UT1BfQkxVRSggYnMgKSApCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGVF9Cb29sICBsMnI7Ci0gICAgICAgICAgICAgICAgRlRfUG9zICAgZDsKLQotCi0gICAgICAgICAgICAgICAgaWYgKCAhaGl0ICkKKyAgICAgICAgICAgICAgICBmb3IgKCBwcCA9IGZpcnN0OyBwcCA8PSBsYXN0OyBwcCsrICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvKiBubyBoaXQ7IGFkanVzdCBmaXJzdCBwb2ludCAqLwotICAgICAgICAgICAgICAgICAgZmlyc3QgPSBsYXN0OwotCi0gICAgICAgICAgICAgICAgICAvKiBhbHNvIGFkanVzdCBmaXJzdCBhbmQgbGFzdCBvbiBwb2ludCAqLwotICAgICAgICAgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tmaXJzdF0gKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgICAgICAgICAgICBpZiAoIGJlc3RfcG9pbnQgPCAwIHx8IHBvaW50c1twcF0ueSA+IGJlc3RfeSApCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBfZmlyc3QgPSBmaXJzdDsKLSAgICAgICAgICAgICAgICAgICAgcF9sYXN0ICA9IGZpcnN0OworICAgICAgICAgICAgICAgICAgICBiZXN0X3BvaW50ID0gcHA7CisgICAgICAgICAgICAgICAgICAgIGJlc3RfeSAgICAgPSBwb2ludHNbcHBdLnk7CisgICAgICAgICAgICAgICAgICAgIGFzY2VuZGVyICAgPSBGVF9NQVgoIGFzY2VuZGVyLCBiZXN0X3kgKyB5X29mZnNldCApOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkZXNjZW5kZXIgPSBGVF9NSU4oIGRlc2NlbmRlciwgcG9pbnRzW3BwXS55ICsgeV9vZmZzZXQgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICggcHAgPSBmaXJzdDsgcHAgPD0gbGFzdDsgcHArKyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKCBiZXN0X3BvaW50IDwgMCB8fCBwb2ludHNbcHBdLnkgPCBiZXN0X3kgKQogICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwX2ZpcnN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIHBfbGFzdCAgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgYmVzdF9wb2ludCA9IHBwOworICAgICAgICAgICAgICAgICAgICBiZXN0X3kgICAgID0gcG9pbnRzW3BwXS55OworICAgICAgICAgICAgICAgICAgICBkZXNjZW5kZXIgID0gRlRfTUlOKCBkZXNjZW5kZXIsIGJlc3RfeSArIHlfb2Zmc2V0ICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFzY2VuZGVyID0gRlRfTUFYKCBhc2NlbmRlciwgcG9pbnRzW3BwXS55ICsgeV9vZmZzZXQgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoIGJlc3RfcG9pbnQgIT0gb2xkX2Jlc3RfcG9pbnQgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmVzdF9jb250b3VyX2ZpcnN0ID0gZmlyc3Q7CisgICAgICAgICAgICAgICAgYmVzdF9jb250b3VyX2xhc3QgID0gbGFzdDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIC8qIG5vdyBjaGVjayB3aGV0aGVyIHRoZSBwb2ludCBiZWxvbmdzIHRvIGEgc3RyYWlnaHQgb3Igcm91bmQgICAqLworICAgICAgICAgIC8qIHNlZ21lbnQ7IHdlIGZpcnN0IG5lZWQgdG8gZmluZCBpbiB3aGljaCBjb250b3VyIHRoZSBleHRyZW11bSAqLworICAgICAgICAgIC8qIGxpZXMsIHRoZW4gaW5zcGVjdCBpdHMgcHJldmlvdXMgYW5kIG5leHQgcG9pbnRzICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggYmVzdF9wb2ludCA+PSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3MgIGJlc3RfeCA9IHBvaW50c1tiZXN0X3BvaW50XS54OworICAgICAgICAgICAgRlRfSW50ICBwcmV2LCBuZXh0OworICAgICAgICAgICAgRlRfSW50ICBiZXN0X3NlZ21lbnRfZmlyc3QsIGJlc3Rfc2VnbWVudF9sYXN0OworICAgICAgICAgICAgRlRfSW50ICBiZXN0X29uX3BvaW50X2ZpcnN0LCBiZXN0X29uX3BvaW50X2xhc3Q7CisgICAgICAgICAgICBGVF9Qb3MgIGRpc3Q7CisKKworICAgICAgICAgICAgYmVzdF9zZWdtZW50X2ZpcnN0ID0gYmVzdF9wb2ludDsKKyAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9sYXN0ICA9IGJlc3RfcG9pbnQ7CisKKyAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbYmVzdF9wb2ludF0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2ZpcnN0ID0gYmVzdF9wb2ludDsKKyAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9sYXN0ICA9IGJlc3RfcG9pbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfZmlyc3QgPSAtMTsKKyAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9sYXN0ICA9IC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBsb29rIGZvciB0aGUgcHJldmlvdXMgYW5kIG5leHQgcG9pbnRzIG9uIHRoZSBjb250b3VyICAqLworICAgICAgICAgICAgLyogdGhhdCBhcmUgbm90IG9uIHRoZSBzYW1lIFkgY29vcmRpbmF0ZSwgdGhlbiB0aHJlc2hvbGQgKi8KKyAgICAgICAgICAgIC8qIHRoZSBgY2xvc2VuZXNzJy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcmV2ID0gYmVzdF9wb2ludDsKKyAgICAgICAgICAgIG5leHQgPSBwcmV2OworCisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHByZXYgPiBiZXN0X2NvbnRvdXJfZmlyc3QgKQorICAgICAgICAgICAgICAgIHByZXYtLTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByZXYgPSBiZXN0X2NvbnRvdXJfbGFzdDsKKworICAgICAgICAgICAgICBkaXN0ID0gRlRfQUJTKCBwb2ludHNbcHJldl0ueSAtIGJlc3RfeSApOworICAgICAgICAgICAgICAvKiBhY2NlcHQgYSBzbWFsbCBkaXN0YW5jZSBvciBhIHNtYWxsIGFuZ2xlIChib3RoIHZhbHVlcyBhcmUgKi8KKyAgICAgICAgICAgICAgLyogaGV1cmlzdGljOyB2YWx1ZSAyMCBjb3JyZXNwb25kcyB0byBhcHByb3guIDIuOSBkZWdyZWVzKSAgICovCisgICAgICAgICAgICAgIGlmICggZGlzdCA+IDUgKQorICAgICAgICAgICAgICAgIGlmICggRlRfQUJTKCBwb2ludHNbcHJldl0ueCAtIGJlc3RfeCApIDw9IDIwICogZGlzdCApCisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBiZXN0X3NlZ21lbnRfZmlyc3QgPSBwcmV2OworCisgICAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbcHJldl0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9maXJzdCA9IHByZXY7CisgICAgICAgICAgICAgICAgaWYgKCBiZXN0X29uX3BvaW50X2xhc3QgPCAwICkKKyAgICAgICAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfbGFzdCA9IHByZXY7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSB3aGlsZSAoIHByZXYgIT0gYmVzdF9wb2ludCApOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIG5leHQgPCBiZXN0X2NvbnRvdXJfbGFzdCApCisgICAgICAgICAgICAgICAgbmV4dCsrOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV4dCA9IGJlc3RfY29udG91cl9maXJzdDsKKworICAgICAgICAgICAgICBkaXN0ID0gRlRfQUJTKCBwb2ludHNbbmV4dF0ueSAtIGJlc3RfeSApOworICAgICAgICAgICAgICBpZiAoIGRpc3QgPiA1ICkKKyAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW25leHRdLnggLSBiZXN0X3ggKSA8PSAyMCAqIGRpc3QgKQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgYmVzdF9zZWdtZW50X2xhc3QgPSBuZXh0OworCisgICAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbbmV4dF0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9sYXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICBpZiAoIGJlc3Rfb25fcG9pbnRfZmlyc3QgPCAwICkKKyAgICAgICAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfZmlyc3QgPSBuZXh0OworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gd2hpbGUgKCBuZXh0ICE9IGJlc3RfcG9pbnQgKTsKKworICAgICAgICAgICAgaWYgKCBBRl9MQVRJTl9JU19MT05HX0JMVUUoIGJzICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIGFuIGFkZGl0aW9uYWwgY29uc3RyYWludCB0byAgKi8KKyAgICAgICAgICAgICAgLyogZ2V0IHRoZSBibHVlIHpvbmUgZGlzdGFuY2U6IEZpbmQgYSBzZWdtZW50IG9mIHRoZSB0b3Btb3N0ICovCisgICAgICAgICAgICAgIC8qIChvciBib3R0b21tb3N0KSBjb250b3VyIHRoYXQgaXMgbG9uZ2VyIHRoYW4gYSBoZXVyaXN0aWMgICAqLworICAgICAgICAgICAgICAvKiB0aHJlc2hvbGQuICBUaGlzIGVuc3VyZXMgdGhhdCBzbWFsbCBidW1wcyBpbiB0aGUgb3V0bGluZSAgKi8KKyAgICAgICAgICAgICAgLyogYXJlIGlnbm9yZWQgKGZvciBleGFtcGxlLCB0aGUgYHZlcnRpY2FsIHNlcmlmcycgZm91bmQgaW4gICovCisgICAgICAgICAgICAgIC8qIG1hbnkgSGVicmV3IGdseXBoIGRlc2lnbnMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgIC8qIElmIHRoaXMgc2VnbWVudCBpcyBsb25nIGVub3VnaCwgd2UgYXJlIGRvbmUuICBPdGhlcndpc2UsICAqLworICAgICAgICAgICAgICAvKiBzZWFyY2ggdGhlIHNlZ21lbnQgbmV4dCB0byB0aGUgZXh0cmVtdW0gdGhhdCBpcyBsb25nICAgICAgKi8KKyAgICAgICAgICAgICAgLyogZW5vdWdoLCBoYXMgdGhlIHNhbWUgZGlyZWN0aW9uLCBhbmQgYSBub3QgdG9vIGxhcmdlICAgICAgICovCisgICAgICAgICAgICAgIC8qIHZlcnRpY2FsIGRpc3RhbmNlIGZyb20gdGhlIGV4dHJlbXVtLiAgTm90ZSB0aGF0IHRoZSAgICAgICAqLworICAgICAgICAgICAgICAvKiBhbGdvcml0aG0gZG9lc24ndCBjaGVjayB3aGV0aGVyIHRoZSBmb3VuZCBzZWdtZW50IGlzICAgICAgKi8KKyAgICAgICAgICAgICAgLyogYWN0dWFsbHkgdGhlIG9uZSAodmVydGljYWxseSkgbmVhcmVzdCB0byB0aGUgZXh0cmVtdW0uICAgICovCisKKyAgICAgICAgICAgICAgLyogaGV1cmlzdGljIHRocmVzaG9sZCB2YWx1ZSAqLworICAgICAgICAgICAgICBGVF9Qb3MgIGxlbmd0aF90aHJlc2hvbGQgPSBtZXRyaWNzLT51bml0c19wZXJfZW0gLyAyNTsKKworCisgICAgICAgICAgICAgIGRpc3QgPSBGVF9BQlMoIHBvaW50c1tiZXN0X3NlZ21lbnRfbGFzdF0ueCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2Jlc3Rfc2VnbWVudF9maXJzdF0ueCApOworCisgICAgICAgICAgICAgIGlmICggZGlzdCA8IGxlbmd0aF90aHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgYmVzdF9zZWdtZW50X2xhc3QgLSBiZXN0X3NlZ21lbnRfZmlyc3QgKyAyIDw9CisgICAgICAgICAgICAgICAgICAgICBiZXN0X2NvbnRvdXJfbGFzdCAtIGJlc3RfY29udG91cl9maXJzdCAgICAgICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGhldXJpc3RpYyB0aHJlc2hvbGQgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICBGVF9Qb3MgIGhlaWdodF90aHJlc2hvbGQgPSBtZXRyaWNzLT51bml0c19wZXJfZW0gLyA0OworCisgICAgICAgICAgICAgICAgRlRfSW50ICAgZmlyc3Q7CisgICAgICAgICAgICAgICAgRlRfSW50ICAgbGFzdDsKKyAgICAgICAgICAgICAgICBGVF9Cb29sICBoaXQ7CisKKyAgICAgICAgICAgICAgICAvKiB3ZSBpbnRlbnRpb25hbGx5IGRlY2xhcmUgdGhlc2UgdHdvIHZhcmlhYmxlcyAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAvKiBvdXRzaWRlIG9mIHRoZSBsb29wIHNpbmNlIHZhcmlvdXMgY29tcGlsZXJzIGVtaXQgICAgKi8KKyAgICAgICAgICAgICAgICAvKiBpbmNvcnJlY3Qgd2FybmluZyBtZXNzYWdlcyBvdGhlcndpc2UsIHRhbGtpbmcgYWJvdXQgKi8KKyAgICAgICAgICAgICAgICAvKiBgcG9zc2libHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMnICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBGVF9JbnQgIHBfZmlyc3QgPSAwOyAgICAgICAgICAgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICAgICAgICAgICAgICBGVF9JbnQgIHBfbGFzdCAgPSAwOworCisgICAgICAgICAgICAgICAgRlRfQm9vbCAgbGVmdDJyaWdodDsKKworCisgICAgICAgICAgICAgICAgLyogY29tcHV0ZSBkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICBwcmV2ID0gYmVzdF9wb2ludDsKKworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKCBwcmV2ID4gYmVzdF9jb250b3VyX2ZpcnN0ICkKKyAgICAgICAgICAgICAgICAgICAgcHJldi0tOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmV2ID0gYmVzdF9jb250b3VyX2xhc3Q7CisKKyAgICAgICAgICAgICAgICAgIGlmICggcG9pbnRzW3ByZXZdLnggIT0gYmVzdF94ICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICB9IHdoaWxlICggcHJldiAhPSBiZXN0X3BvaW50ICk7CisKKyAgICAgICAgICAgICAgICAvKiBza2lwIGdseXBoIGZvciB0aGUgZGVnZW5lcmF0ZSBjYXNlICovCisgICAgICAgICAgICAgICAgaWYgKCBwcmV2ID09IGJlc3RfcG9pbnQgKQorICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBsZWZ0MnJpZ2h0ID0gRlRfQk9PTCggcG9pbnRzW3ByZXZdLnggPCBwb2ludHNbYmVzdF9wb2ludF0ueCApOworCisgICAgICAgICAgICAgICAgZmlyc3QgPSBiZXN0X3NlZ21lbnRfbGFzdDsKKyAgICAgICAgICAgICAgICBsYXN0ICA9IGZpcnN0OworICAgICAgICAgICAgICAgIGhpdCAgID0gMDsKKworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgbDJyOworICAgICAgICAgICAgICAgICAgRlRfUG9zICAgZDsKKworCisgICAgICAgICAgICAgICAgICBpZiAoICFoaXQgKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBubyBoaXQ7IGFkanVzdCBmaXJzdCBwb2ludCAqLworICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGxhc3Q7CisKKyAgICAgICAgICAgICAgICAgICAgLyogYWxzbyBhZGp1c3QgZmlyc3QgYW5kIGxhc3Qgb24gcG9pbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tmaXJzdF0gKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHBfZmlyc3QgPSBmaXJzdDsKKyAgICAgICAgICAgICAgICAgICAgICBwX2xhc3QgID0gZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcF9maXJzdCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgIHBfbGFzdCAgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGhpdCA9IDE7CiAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgIGhpdCA9IDE7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaWYgKCBsYXN0IDwgYmVzdF9jb250b3VyX2xhc3QgKQorICAgICAgICAgICAgICAgICAgICBsYXN0Kys7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBiZXN0X2NvbnRvdXJfZmlyc3Q7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGxhc3QgPCBiZXN0X2NvbnRvdXJfbGFzdCApCi0gICAgICAgICAgICAgICAgICBsYXN0Kys7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgbGFzdCA9IGJlc3RfY29udG91cl9maXJzdDsKLQotICAgICAgICAgICAgICAgIGlmICggRlRfQUJTKCBiZXN0X3kgLSBwb2ludHNbZmlyc3RdLnkgKSA+IGhlaWdodF90aHJlc2hvbGQgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8qIHZlcnRpY2FsIGRpc3RhbmNlIHRvbyBsYXJnZSAqLwotICAgICAgICAgICAgICAgICAgaGl0ID0gMDsKLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIHNhbWUgdGVzdCBhcyBhYm92ZSAqLwotICAgICAgICAgICAgICAgIGRpc3QgPSBGVF9BQlMoIHBvaW50c1tsYXN0XS55IC0gcG9pbnRzW2ZpcnN0XS55ICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBkaXN0ID4gNSApCi0gICAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW2xhc3RdLnggLSBwb2ludHNbZmlyc3RdLnggKSA8PQotICAgICAgICAgICAgICAgICAgICAgICAgIDIwICogZGlzdCApCisgICAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggYmVzdF95IC0gcG9pbnRzW2ZpcnN0XS55ICkgPiBoZWlnaHRfdGhyZXNob2xkICkKICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogdmVydGljYWwgZGlzdGFuY2UgdG9vIGxhcmdlICovCiAgICAgICAgICAgICAgICAgICAgIGhpdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tsYXN0XSApID09IEZUX0NVUlZFX1RBR19PTiApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcF9sYXN0ID0gbGFzdDsKLSAgICAgICAgICAgICAgICAgIGlmICggcF9maXJzdCA8IDAgKQotICAgICAgICAgICAgICAgICAgICBwX2ZpcnN0ID0gbGFzdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsMnIgPSBGVF9CT09MKCBwb2ludHNbZmlyc3RdLnggPCBwb2ludHNbbGFzdF0ueCApOwotICAgICAgICAgICAgICAgIGQgICA9IEZUX0FCUyggcG9pbnRzW2xhc3RdLnggLSBwb2ludHNbZmlyc3RdLnggKTsKLQotICAgICAgICAgICAgICAgIGlmICggbDJyID09IGxlZnQycmlnaHQgICAgICYmCi0gICAgICAgICAgICAgICAgICAgICBkID49IGxlbmd0aF90aHJlc2hvbGQgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8qIGFsbCBjb25zdHJhaW50cyBhcmUgbWV0OyB1cGRhdGUgc2VnbWVudCBhZnRlciBmaW5kaW5nICovCi0gICAgICAgICAgICAgICAgICAvKiBpdHMgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgZG8KLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBsYXN0IDwgYmVzdF9jb250b3VyX2xhc3QgKQotICAgICAgICAgICAgICAgICAgICAgIGxhc3QrKzsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBiZXN0X2NvbnRvdXJfZmlyc3Q7Ci0KLSAgICAgICAgICAgICAgICAgICAgZCA9IEZUX0FCUyggcG9pbnRzW2xhc3RdLnkgLSBwb2ludHNbZmlyc3RdLnkgKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkID4gNSApCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCBGVF9BQlMoIHBvaW50c1tuZXh0XS54IC0gcG9pbnRzW2ZpcnN0XS54ICkgPD0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgKiBkaXN0ICkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3QgPiBiZXN0X2NvbnRvdXJfZmlyc3QgKQotICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBiZXN0X2NvbnRvdXJfbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBwX2xhc3QgPSBsYXN0OwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbbGFzdF0gKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgICAgICAgICAgIC8qIHNhbWUgdGVzdCBhcyBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW2xhc3RdLnkgLSBwb2ludHNbZmlyc3RdLnkgKTsKKyAgICAgICAgICAgICAgICAgIGlmICggZGlzdCA+IDUgKQorICAgICAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW2xhc3RdLnggLSBwb2ludHNbZmlyc3RdLnggKSA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgKiBkaXN0ICkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHBfbGFzdCA9IGxhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKCBwX2ZpcnN0IDwgMCApCi0gICAgICAgICAgICAgICAgICAgICAgICBwX2ZpcnN0ID0gbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICBoaXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCBsYXN0ICE9IGJlc3Rfc2VnbWVudF9maXJzdCApOworICAgICAgICAgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tsYXN0XSApID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBfbGFzdCA9IGxhc3Q7CisgICAgICAgICAgICAgICAgICAgIGlmICggcF9maXJzdCA8IDAgKQorICAgICAgICAgICAgICAgICAgICAgIHBfZmlyc3QgPSBsYXN0OworICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICBiZXN0X3kgPSBwb2ludHNbZmlyc3RdLnk7CisgICAgICAgICAgICAgICAgICBsMnIgPSBGVF9CT09MKCBwb2ludHNbZmlyc3RdLnggPCBwb2ludHNbbGFzdF0ueCApOworICAgICAgICAgICAgICAgICAgZCAgID0gRlRfQUJTKCBwb2ludHNbbGFzdF0ueCAtIHBvaW50c1tmaXJzdF0ueCApOwogCi0gICAgICAgICAgICAgICAgICBiZXN0X3NlZ21lbnRfZmlyc3QgPSBmaXJzdDsKLSAgICAgICAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9sYXN0ICA9IGxhc3Q7CisgICAgICAgICAgICAgICAgICBpZiAoIGwyciA9PSBsZWZ0MnJpZ2h0ICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgICBkID49IGxlbmd0aF90aHJlc2hvbGQgKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBhbGwgY29uc3RyYWludHMgYXJlIG1ldDsgdXBkYXRlIHNlZ21lbnQgYWZ0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogZmluZGluZyBpdHMgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3QgPCBiZXN0X2NvbnRvdXJfbGFzdCApCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Kys7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGJlc3RfY29udG91cl9maXJzdDsKIAotICAgICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9maXJzdCA9IHBfZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgID0gcF9sYXN0OworICAgICAgICAgICAgICAgICAgICAgIGQgPSBGVF9BQlMoIHBvaW50c1tsYXN0XS55IC0gcG9pbnRzW2ZpcnN0XS55ICk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkID4gNSApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW25leHRdLnggLSBwb2ludHNbZmlyc3RdLnggKSA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICogZGlzdCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGFzdCA+IGJlc3RfY29udG91cl9maXJzdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGJlc3RfY29udG91cl9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIHBfbGFzdCA9IGxhc3Q7CiAKLSAgICAgICAgICAgICAgfSB3aGlsZSAoIGxhc3QgIT0gYmVzdF9zZWdtZW50X2ZpcnN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tsYXN0XSApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcF9sYXN0ID0gbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcF9maXJzdCA8IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwX2ZpcnN0ID0gbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIGxhc3QgIT0gYmVzdF9zZWdtZW50X2ZpcnN0ICk7CisKKyAgICAgICAgICAgICAgICAgICAgYmVzdF95ID0gcG9pbnRzW2ZpcnN0XS55OworCisgICAgICAgICAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9maXJzdCA9IGZpcnN0OworICAgICAgICAgICAgICAgICAgICBiZXN0X3NlZ21lbnRfbGFzdCAgPSBsYXN0OworCisgICAgICAgICAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfZmlyc3QgPSBwX2ZpcnN0OworICAgICAgICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgID0gcF9sYXN0OworCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoIGxhc3QgIT0gYmVzdF9zZWdtZW50X2ZpcnN0ICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogZm9yIGNvbXB1dGluZyBibHVlIHpvbmVzLCB3ZSBhZGQgdGhlIHkgb2Zmc2V0IGFzIHJldHVybmVkICovCisgICAgICAgICAgICAvKiBieSB0aGUgY3VycmVudGx5IHVzZWQgT3BlblR5cGUgZmVhdHVyZSAtLSBmb3IgZXhhbXBsZSwgICAgKi8KKyAgICAgICAgICAgIC8qIHN1cGVyc2NyaXB0IGdseXBocyBtaWdodCBiZSBpZGVudGljYWwgdG8gc3Vic2NyaXB0IGdseXBocyAqLworICAgICAgICAgICAgLyogd2l0aCBhIHZlcnRpY2FsIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBiZXN0X3kgKz0geV9vZmZzZXQ7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgICAgaWYgKCBudW1faWR4ID09IDEgKQorICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBVKyUwNGxYOiBiZXN0X3kgPSAlNWxkIiwgY2gsIGJlc3RfeSApKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgY29tcG9uZW50ICVkIG9mIGNsdXN0ZXIgc3RhcnRpbmcgd2l0aCBVKyUwNGxYOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBiZXN0X3kgPSAlNWxkIiwgaSwgY2gsIGJlc3RfeSApKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvKiBub3cgc2V0IHRoZSBgcm91bmQnIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBzZWdtZW50J3Mga2luZDogKi8KKyAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogLSBpZiB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCAgICovCisgICAgICAgICAgICAvKiAgIGBvbicgcG9pbnQgaXMgbGFyZ2VyIHRoYW4gYSBoZXVyaXN0aWMgdGhyZXNob2xkICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qICAgd2UgaGF2ZSBhIGZsYXQgc2VnbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogLSBpZiBlaXRoZXIgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IHBvaW50IG9mIHRoZSBzZWdtZW50IGlzICovCisgICAgICAgICAgICAvKiAgIGFuIGBvZmYnIHBvaW50LCB0aGUgc2VnbWVudCBpcyByb3VuZCwgb3RoZXJ3aXNlIGl0IGlzICAgKi8KKyAgICAgICAgICAgIC8qICAgZmxhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBiZXN0X29uX3BvaW50X2ZpcnN0ID49IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9sYXN0ID49IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICggRlRfQUJTKCBwb2ludHNbYmVzdF9vbl9wb2ludF9sYXN0XS54IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tiZXN0X29uX3BvaW50X2ZpcnN0XS54ICkgKSA+CisgICAgICAgICAgICAgICAgICAgZmxhdF90aHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgIHJvdW5kID0gMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcm91bmQgPSBGVF9CT09MKAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbYmVzdF9zZWdtZW50X2ZpcnN0XSApICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBR19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBRyggb3V0bGluZS50YWdzW2Jlc3Rfc2VnbWVudF9sYXN0XSAgKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9DVVJWRV9UQUdfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIGlmICggcm91bmQgJiYgQUZfTEFUSU5fSVNfTkVVVFJBTF9CTFVFKCBicyApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogb25seSB1c2UgZmxhdCBzZWdtZW50cyBmb3IgYSBuZXV0cmFsIGJsdWUgem9uZSAqLworICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiIChyb3VuZCwgc2tpcHBlZClcbiIgKSk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICglcylcbiIsIHJvdW5kID8gInJvdW5kIiA6ICJmbGF0IiApKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIEFGX0xBVElOX0lTX1RPUF9CTFVFKCBicyApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGJlc3RfeSA+IGJlc3RfeV9leHRyZW11bSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJlc3RfeV9leHRyZW11bSA9IGJlc3RfeTsKKyAgICAgICAgICAgICAgYmVzdF9yb3VuZCAgICAgID0gcm91bmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGJlc3RfeSA8IGJlc3RfeV9leHRyZW11bSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJlc3RfeV9leHRyZW11bSA9IGJlc3RfeTsKKyAgICAgICAgICAgICAgYmVzdF9yb3VuZCAgICAgID0gcm91bmQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogCi0gICAgICAgICAgLyogZm9yIGNvbXB1dGluZyBibHVlIHpvbmVzLCB3ZSBhZGQgdGhlIHkgb2Zmc2V0IGFzIHJldHVybmVkICovCi0gICAgICAgICAgLyogYnkgdGhlIGN1cnJlbnRseSB1c2VkIE9wZW5UeXBlIGZlYXR1cmUgLS0gZm9yIGV4YW1wbGUsICAgICovCi0gICAgICAgICAgLyogc3VwZXJzY3JpcHQgZ2x5cGhzIG1pZ2h0IGJlIGlkZW50aWNhbCB0byBzdWJzY3JpcHQgZ2x5cGhzICovCi0gICAgICAgICAgLyogd2l0aCBhIHZlcnRpY2FsIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgYmVzdF95ICs9IHlfb2Zmc2V0OworICAgICAgICB9IC8qIGVuZCBmb3IgbG9vcCAqLwogCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgVSslMDRsWDogYmVzdF95ID0gJTVsZCIsIGNoLCBiZXN0X3kgKSk7Ci0KLSAgICAgICAgICAvKiBub3cgc2V0IHRoZSBgcm91bmQnIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBzZWdtZW50J3Mga2luZDogKi8KLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAtIGlmIHRoZSBob3Jpem9udGFsIGRpc3RhbmNlIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0ICAgKi8KLSAgICAgICAgICAvKiAgIGBvbicgcG9pbnQgaXMgbGFyZ2VyIHRoYW4gdXBlbS84ICh2YWx1ZSA4IGlzIGhldXJpc3RpYykgKi8KLSAgICAgICAgICAvKiAgIHdlIGhhdmUgYSBmbGF0IHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAtIGlmIGVpdGhlciB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgcG9pbnQgb2YgdGhlIHNlZ21lbnQgaXMgKi8KLSAgICAgICAgICAvKiAgIGFuIGBvZmYnIHBvaW50LCB0aGUgc2VnbWVudCBpcyByb3VuZCwgb3RoZXJ3aXNlIGl0IGlzICAgKi8KLSAgICAgICAgICAvKiAgIGZsYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICBpZiAoIGJlc3Rfb25fcG9pbnRfZmlyc3QgPj0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9sYXN0ID49IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAoRlRfVUludCkoIEZUX0FCUyggcG9pbnRzW2Jlc3Rfb25fcG9pbnRfbGFzdF0ueCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2Jlc3Rfb25fcG9pbnRfZmlyc3RdLnggKSApID4KLSAgICAgICAgICAgICAgICAgbWV0cmljcy0+dW5pdHNfcGVyX2VtIC8gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICByb3VuZCA9IDA7CisgICAgICAgIGlmICggISggYmVzdF95X2V4dHJlbXVtID09IEZUX0lOVF9NSU4gfHwKKyAgICAgICAgICAgICAgICBiZXN0X3lfZXh0cmVtdW0gPT0gRlRfSU5UX01BWCApICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggYmVzdF9yb3VuZCApCisgICAgICAgICAgICByb3VuZHNbbnVtX3JvdW5kcysrXSA9IGJlc3RfeV9leHRyZW11bTsKICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICByb3VuZCA9IEZUX0JPT0woCi0gICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbYmVzdF9zZWdtZW50X2ZpcnN0XSApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICBGVF9DVVJWRV9UQUdfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbYmVzdF9zZWdtZW50X2xhc3RdICApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICBGVF9DVVJWRV9UQUdfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICBpZiAoIHJvdW5kICYmIEFGX0xBVElOX0lTX05FVVRSQUxfQkxVRSggYnMgKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogb25seSB1c2UgZmxhdCBzZWdtZW50cyBmb3IgYSBuZXV0cmFsIGJsdWUgem9uZSAqLwotICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAocm91bmQsIHNraXBwZWQpXG4iICkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAoJXMpXG4iLCByb3VuZCA/ICJyb3VuZCIgOiAiZmxhdCIgKSk7CisgICAgICAgICAgICBmbGF0c1tudW1fZmxhdHMrK10gICA9IGJlc3RfeV9leHRyZW11bTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICggcm91bmQgKQotICAgICAgICAgIHJvdW5kc1tudW1fcm91bmRzKytdID0gYmVzdF95OwotICAgICAgICBlbHNlCi0gICAgICAgICAgZmxhdHNbbnVtX2ZsYXRzKytdICAgPSBiZXN0X3k7Ci0gICAgICB9CisgICAgICB9IC8qIGVuZCB3aGlsZSBsb29wICovCiAKICAgICAgIGlmICggbnVtX2ZsYXRzID09IDAgJiYgbnVtX3JvdW5kcyA9PSAwICkKICAgICAgIHsKQEAgLTc3NSw3ICs4OTAsOCBAQAogICAgICAgICBGVF9Cb29sICBvdmVyX3JlZiA9IEZUX0JPT0woIHNob290ID4gcmVmICk7CiAKIAotICAgICAgICBpZiAoIEFGX0xBVElOX0lTX1RPUF9CTFVFKCBicyApIF4gb3Zlcl9yZWYgKQorICAgICAgICBpZiAoICggQUZfTEFUSU5fSVNfVE9QX0JMVUUoIGJzICkgICAgfHwKKyAgICAgICAgICAgICAgIEFGX0xBVElOX0lTX1NVQl9UT1BfQkxVRSggYnMpICkgXiBvdmVyX3JlZiApCiAgICAgICAgIHsKICAgICAgICAgICAqYmx1ZV9yZWYgICA9CiAgICAgICAgICAgKmJsdWVfc2hvb3QgPSAoIHNob290ICsgcmVmICkgLyAyOwpAQCAtNzg1LDkgKzkwMSwxNCBAQAogICAgICAgICB9CiAgICAgICB9CiAKKyAgICAgIGJsdWUtPmFzY2VuZGVyICA9IGFzY2VuZGVyOworICAgICAgYmx1ZS0+ZGVzY2VuZGVyID0gZGVzY2VuZGVyOworCiAgICAgICBibHVlLT5mbGFncyA9IDA7CiAgICAgICBpZiAoIEFGX0xBVElOX0lTX1RPUF9CTFVFKCBicyApICkKICAgICAgICAgYmx1ZS0+ZmxhZ3MgfD0gQUZfTEFUSU5fQkxVRV9UT1A7CisgICAgICBpZiAoIEFGX0xBVElOX0lTX1NVQl9UT1BfQkxVRSggYnMgKSApCisgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0xBVElOX0JMVUVfU1VCX1RPUDsKICAgICAgIGlmICggQUZfTEFUSU5fSVNfTkVVVFJBTF9CTFVFKCBicyApICkKICAgICAgICAgYmx1ZS0+ZmxhZ3MgfD0gQUZfTEFUSU5fQkxVRV9ORVVUUkFMOwogCkBAIC04MDIsNyArOTIzLDEwIEBACiAgICAgICBGVF9UUkFDRTUoKCAiICAgIC0+IHJlZmVyZW5jZSA9ICVsZFxuIgogICAgICAgICAgICAgICAgICAgIiAgICAgICBvdmVyc2hvb3QgPSAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAqYmx1ZV9yZWYsICpibHVlX3Nob290ICkpOwotICAgIH0KKworICAgIH0gLyogZW5kIGZvciBsb29wICovCisKKyAgICBhZl9zaGFwZXJfYnVmX2Rlc3Ryb3koIGZhY2UsIHNoYXBlcl9idWYgKTsKIAogICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CiAKQEAgLTgxNiwyNyArOTQwLDM2IEBACiAgIGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzKCBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgIGZhY2UgKQogICB7Ci0gICAgRlRfVUludCAgIGk7CiAgICAgRlRfQm9vbCAgIHN0YXJ0ZWQgPSAwLCBzYW1lX3dpZHRoID0gMTsKICAgICBGVF9GaXhlZCAgYWR2YW5jZSwgb2xkX2FkdmFuY2UgPSAwOwogCisgICAgdm9pZCogIHNoYXBlcl9idWY7CiAKLSAgICAvKiBkaWdpdCBgMCcgaXMgMHgzMCBpbiBhbGwgc3VwcG9ydGVkIGNoYXJtYXBzICovCi0gICAgZm9yICggaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrICkKKyAgICAvKiBpbiBhbGwgc3VwcG9ydGVkIGNoYXJtYXBzLCBkaWdpdHMgaGF2ZSBjaGFyYWN0ZXIgY29kZXMgMHgzMC0weDM5ICovCisgICAgY29uc3QgY2hhciAgIGRpZ2l0c1tdID0gIjAgMSAyIDMgNCA1IDYgNyA4IDkiOworICAgIGNvbnN0IGNoYXIqICBwOworCisKKyAgICBwICAgICAgICAgID0gZGlnaXRzOworICAgIHNoYXBlcl9idWYgPSBhZl9zaGFwZXJfYnVmX2NyZWF0ZSggZmFjZSApOworCisgICAgd2hpbGUgKCAqcCApCiAgICAgewotICAgICAgRlRfVUxvbmcgIGdseXBoX2luZGV4OwotICAgICAgRlRfTG9uZyAgIHlfb2Zmc2V0OworICAgICAgRlRfVUxvbmcgICAgICBnbHlwaF9pbmRleDsKKyAgICAgIHVuc2lnbmVkIGludCAgbnVtX2lkeDsKIAogCi0gICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsIGksICZnbHlwaF9pbmRleCwgJnlfb2Zmc2V0ICk7Ci0gICAgICBpZiAoIGdseXBoX2luZGV4ID09IDAgKQorICAgICAgLyogcmVqZWN0IGlucHV0IHRoYXQgbWFwcyB0byBtb3JlIHRoYW4gYSBzaW5nbGUgZ2x5cGggKi8KKyAgICAgIHAgPSBhZl9zaGFwZXJfZ2V0X2NsdXN0ZXIoIHAsICZtZXRyaWNzLT5yb290LCBzaGFwZXJfYnVmLCAmbnVtX2lkeCApOworICAgICAgaWYgKCBudW1faWR4ID4gMSApCiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBpZiAoIEZUX0dldF9BZHZhbmNlKCBmYWNlLCBnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfTk9fU0NBTEUgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX05PX0hJTlRJTkcgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkdmFuY2UgKSApCisgICAgICBnbHlwaF9pbmRleCA9IGFmX3NoYXBlcl9nZXRfZWxlbSggJm1ldHJpY3MtPnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVyX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsKKyAgICAgIGlmICggIWdseXBoX2luZGV4ICkKICAgICAgICAgY29udGludWU7CiAKICAgICAgIGlmICggc3RhcnRlZCApCkBAIC04NTQsNiArOTg3LDggQEAKICAgICAgIH0KICAgICB9CiAKKyAgICBhZl9zaGFwZXJfYnVmX2Rlc3Ryb3koIGZhY2UsIHNoYXBlcl9idWYgKTsKKwogICAgIG1ldHJpY3MtPnJvb3QuZGlnaXRzX2hhdmVfc2FtZV93aWR0aCA9IHNhbWVfd2lkdGg7CiAgIH0KIApAQCAtOTQxLDcgKzEwNzYsNyBAQAogICAgICAgICBGVF9VSW50ICBwcGVtOwogCiAKLSAgICAgICAgc2NhbGVkICAgID0gRlRfTXVsRml4KCBibHVlLT5zaG9vdC5vcmcsIHNjYWxlci0+eV9zY2FsZSApOworICAgICAgICBzY2FsZWQgICAgPSBGVF9NdWxGaXgoIGJsdWUtPnNob290Lm9yZywgc2NhbGUgKTsKICAgICAgICAgcHBlbSAgICAgID0gbWV0cmljcy0+cm9vdC5zY2FsZXIuZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CiAgICAgICAgIGxpbWl0ICAgICA9IG1ldHJpY3MtPnJvb3QuZ2xvYmFscy0+aW5jcmVhc2VfeF9oZWlnaHQ7CiAgICAgICAgIHRocmVzaG9sZCA9IDQwOwpAQCAtOTY3LDE4ICsxMTAyLDUyIEBACiAjZW5kaWYKICAgICAgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCApCiAgICAgICAgICAgewotICAgICAgICAgICAgc2NhbGUgPSBGVF9NdWxEaXYoIHNjYWxlLCBmaXR0ZWQsIHNjYWxlZCApOworICAgICAgICAgICAgRlRfUG9zICAgIG1heF9oZWlnaHQ7CisgICAgICAgICAgICBGVF9Qb3MgICAgZGlzdDsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBuZXdfc2NhbGU7CiAKLSAgICAgICAgICAgIEZUX1RSQUNFNSgoCi0gICAgICAgICAgICAgICJhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbToiCi0gICAgICAgICAgICAgICIgeCBoZWlnaHQgYWxpZ25tZW50IChzdHlsZSBgJXMnKTpcbiIKLSAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgIiB2ZXJ0aWNhbCBzY2FsaW5nIGNoYW5nZWQgZnJvbSAlLjRmIHRvICUuNGYgKGJ5ICVkJSUpXG4iCi0gICAgICAgICAgICAgICJcbiIsCi0gICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSwKLSAgICAgICAgICAgICAgYXhpcy0+b3JnX3NjYWxlIC8gNjU1MzYuMCwKLSAgICAgICAgICAgICAgc2NhbGUgLyA2NTUzNi4wLAotICAgICAgICAgICAgICAoIGZpdHRlZCAtIHNjYWxlZCApICogMTAwIC8gc2NhbGVkICkpOworCisgICAgICAgICAgICBuZXdfc2NhbGUgPSBGVF9NdWxEaXYoIHNjYWxlLCBmaXR0ZWQsIHNjYWxlZCApOworCisgICAgICAgICAgICAvKiB0aGUgc2NhbGluZyBzaG91bGQgbm90IGNoYW5nZSB0aGUgcmVzdWx0IGJ5IG1vcmUgdGhhbiB0d28gcGl4ZWxzICovCisgICAgICAgICAgICBtYXhfaGVpZ2h0ID0gbWV0cmljcy0+dW5pdHNfcGVyX2VtOworCisgICAgICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgQXhpcy0+Ymx1ZV9jb3VudDsgbm4rKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1heF9oZWlnaHQgPSBGVF9NQVgoIG1heF9oZWlnaHQsIEF4aXMtPmJsdWVzW25uXS5hc2NlbmRlciApOworICAgICAgICAgICAgICBtYXhfaGVpZ2h0ID0gRlRfTUFYKCBtYXhfaGVpZ2h0LCAtQXhpcy0+Ymx1ZXNbbm5dLmRlc2NlbmRlciApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkaXN0ICA9IEZUX0FCUyggRlRfTXVsRml4KCBtYXhfaGVpZ2h0LCBuZXdfc2NhbGUgLSBzY2FsZSApICk7CisgICAgICAgICAgICBkaXN0ICY9IH4xMjc7CisKKyAgICAgICAgICAgIGlmICggZGlzdCA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U1KCgKKyAgICAgICAgICAgICAgICAiYWZfbGF0aW5fbWV0cmljc19zY2FsZV9kaW06IgorICAgICAgICAgICAgICAgICIgeCBoZWlnaHQgYWxpZ25tZW50IChzdHlsZSBgJXMnKTpcbiIKKyAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICIgdmVydGljYWwgc2NhbGluZyBjaGFuZ2VkIGZyb20gJS40ZiB0byAlLjRmIChieSAlZCUlKVxuIgorICAgICAgICAgICAgICAgICJcbiIsCisgICAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzcy0+c3R5bGVdLAorICAgICAgICAgICAgICAgIHNjYWxlIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICBuZXdfc2NhbGUgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICggZml0dGVkIC0gc2NhbGVkICkgKiAxMDAgLyBzY2FsZWQgKSk7CisKKyAgICAgICAgICAgICAgc2NhbGUgPSBuZXdfc2NhbGU7CisgICAgICAgICAgICB9CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U1KCgKKyAgICAgICAgICAgICAgICAiYWZfbGF0aW5fbWV0cmljc19zY2FsZV9kaW06IgorICAgICAgICAgICAgICAgICIgeCBoZWlnaHQgYWxpZ25tZW50IChzdHlsZSBgJXMnKTpcbiIKKyAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICIgZXhjZXNzaXZlIHZlcnRpY2FsIHNjYWxpbmcgYWJhbmRvbmVkXG4iCisgICAgICAgICAgICAgICAgIlxuIiwKKyAgICAgICAgICAgICAgICBhZl9zdHlsZV9uYW1lc1ttZXRyaWNzLT5yb290LnN0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTEwMzIsOCArMTIwMSwxMSBAQAogCiAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgKQogICAgIHsKLSAgICAgIEZUX1RSQUNFNSgoICJibHVlIHpvbmVzIChzdHlsZSBgJXMnKVxuIiwKLSAgICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgaWYgKCBheGlzLT5ibHVlX2NvdW50ICkKKyAgICAgICAgRlRfVFJBQ0U1KCggImJsdWUgem9uZXMgKHN0eWxlIGAlcycpXG4iLAorICAgICAgICAgICAgICAgICAgICBhZl9zdHlsZV9uYW1lc1ttZXRyaWNzLT5yb290LnN0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CisjZW5kaWYKIAogICAgICAgLyogc2NhbGUgdGhlIGJsdWUgem9uZXMgKi8KICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBheGlzLT5ibHVlX2NvdW50OyBubisrICkKQEAgLTExMDYsMjEgKzEyNzgsNjMgQEAKICNlbmRpZgogCiAgICAgICAgICAgYmx1ZS0+ZmxhZ3MgfD0gQUZfTEFUSU5fQkxVRV9BQ1RJVkU7Ci0KLSAgICAgICAgICBGVF9UUkFDRTUoKCAiICByZWZlcmVuY2UgJWQ6ICVkIHNjYWxlZCB0byAlLjJmJXNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICBvdmVyc2hvb3QgJWQ6ICVkIHNjYWxlZCB0byAlLjJmJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYmx1ZS0+cmVmLm9yZywKLSAgICAgICAgICAgICAgICAgICAgICBibHVlLT5yZWYuZml0IC8gNjQuMCwKLSAgICAgICAgICAgICAgICAgICAgICBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfQUNUSVZFID8gIiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiAoaW5hY3RpdmUpIiwKLSAgICAgICAgICAgICAgICAgICAgICBubiwKLSAgICAgICAgICAgICAgICAgICAgICBibHVlLT5zaG9vdC5vcmcsCi0gICAgICAgICAgICAgICAgICAgICAgYmx1ZS0+c2hvb3QuZml0IC8gNjQuMCwKLSAgICAgICAgICAgICAgICAgICAgICBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfQUNUSVZFID8gIiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiAoaW5hY3RpdmUpIiApKTsKICAgICAgICAgfQogICAgICAgfQorCisgICAgICAvKiB1c2Ugc3ViLXRvcCBibHVlIHpvbmUgb25seSBpZiBpdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCAqLworICAgICAgLyogYW5vdGhlciAobm9uLXN1cC10b3ApIGJsdWUgem9uZTsgb3RoZXJ3aXNlLCB0aGUgICAgICAgKi8KKyAgICAgIC8qIGVmZmVjdCB3b3VsZCBiZSBzaW1pbGFyIHRvIGEgbmV1dHJhbCBibHVlIHpvbmUsIHdoaWNoICovCisgICAgICAvKiBpcyBub3QgZGVzaXJlZCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgZm9yICggbm4gPSAwOyBubiA8IGF4aXMtPmJsdWVfY291bnQ7IG5uKysgKQorICAgICAgeworICAgICAgICBBRl9MYXRpbkJsdWUgIGJsdWUgPSAmYXhpcy0+Ymx1ZXNbbm5dOworICAgICAgICBGVF9VSW50ICAgICAgIGk7CisKKworICAgICAgICBpZiAoICEoIGJsdWUtPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9TVUJfVE9QICkgKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoICEoIGJsdWUtPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9BQ1RJVkUgKSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBheGlzLT5ibHVlX2NvdW50OyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgQUZfTGF0aW5CbHVlICBiID0gJmF4aXMtPmJsdWVzW2ldOworCisKKyAgICAgICAgICBpZiAoIGItPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9TVUJfVE9QICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGlmICggISggYi0+ZmxhZ3MgJiBBRl9MQVRJTl9CTFVFX0FDVElWRSApICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgaWYgKCBiLT5yZWYuZml0IDw9IGJsdWUtPnNob290LmZpdCAmJgorICAgICAgICAgICAgICAgYi0+c2hvb3QuZml0ID49IGJsdWUtPnJlZi5maXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJsdWUtPmZsYWdzICY9IH5BRl9MQVRJTl9CTFVFX0FDVElWRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBheGlzLT5ibHVlX2NvdW50OyBubisrICkKKyAgICAgIHsKKyAgICAgICAgQUZfTGF0aW5CbHVlICBibHVlID0gJmF4aXMtPmJsdWVzW25uXTsKKworCisgICAgICAgIEZUX1RSQUNFNSgoICIgIHJlZmVyZW5jZSAlZDogJWQgc2NhbGVkIHRvICUuMmYlc1xuIgorICAgICAgICAgICAgICAgICAgICAiICBvdmVyc2hvb3QgJWQ6ICVkIHNjYWxlZCB0byAlLjJmJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIG5uLAorICAgICAgICAgICAgICAgICAgICBibHVlLT5yZWYub3JnLAorICAgICAgICAgICAgICAgICAgICBibHVlLT5yZWYuZml0IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgYmx1ZS0+ZmxhZ3MgJiBBRl9MQVRJTl9CTFVFX0FDVElWRSA/ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIChpbmFjdGl2ZSkiLAorICAgICAgICAgICAgICAgICAgICBubiwKKyAgICAgICAgICAgICAgICAgICAgYmx1ZS0+c2hvb3Qub3JnLAorICAgICAgICAgICAgICAgICAgICBibHVlLT5zaG9vdC5maXQgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfQUNUSVZFID8gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgKGluYWN0aXZlKSIgKSk7CisgICAgICB9CisjZW5kaWYKICAgICB9CiAgIH0KIApAQCAtMTE0MCw2ICsxMzU0LDIyIEBACiAgIH0KIAogCisgIC8qIEV4dHJhY3Qgc3RhbmRhcmRfd2lkdGggZnJvbSB3cml0aW5nIHN5c3RlbS9zY3JpcHQgc3BlY2lmaWMgKi8KKyAgLyogbWV0cmljcyBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xhdGluX2dldF9zdGFuZGFyZF93aWR0aHMoIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICAgICBzdGRIVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICAgICBzdGRWVyApCisgIHsKKyAgICBpZiAoIHN0ZEhXICkKKyAgICAgICpzdGRIVyA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLnN0YW5kYXJkX3dpZHRoOworCisgICAgaWYgKCBzdGRWVyApCisgICAgICAqc3RkVlcgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5zdGFuZGFyZF93aWR0aDsKKyAgfQorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KQEAgLTExNTUsMTQgKzEzODUsMTcgQEAKICAgYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCiAgIHsKLSAgICBBRl9BeGlzSGludHMgICBheGlzICAgICAgICAgID0gJmhpbnRzLT5heGlzW2RpbV07Ci0gICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ICAgICAgICA9IGhpbnRzLT5tZW1vcnk7Ci0gICAgRlRfRXJyb3IgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKLSAgICBBRl9TZWdtZW50ICAgICBzZWdtZW50ICAgICAgID0gTlVMTDsKLSAgICBBRl9TZWdtZW50UmVjICBzZWcwOwotICAgIEFGX1BvaW50KiAgICAgIGNvbnRvdXIgICAgICAgPSBoaW50cy0+Y29udG91cnM7Ci0gICAgQUZfUG9pbnQqICAgICAgY29udG91cl9saW1pdCA9IGNvbnRvdXIgKyBoaW50cy0+bnVtX2NvbnRvdXJzOwotICAgIEFGX0RpcmVjdGlvbiAgIG1ham9yX2Rpciwgc2VnbWVudF9kaXI7CisgICAgQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzICAgICAgID0gKEFGX0xhdGluTWV0cmljcyloaW50cy0+bWV0cmljczsKKyAgICBBRl9BeGlzSGludHMgICAgIGF4aXMgICAgICAgICAgPSAmaGludHMtPmF4aXNbZGltXTsKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSAgICAgICAgPSBoaW50cy0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICBBRl9TZWdtZW50ICAgICAgIHNlZ21lbnQgICAgICAgPSBOVUxMOworICAgIEFGX1NlZ21lbnRSZWMgICAgc2VnMDsKKyAgICBBRl9Qb2ludCogICAgICAgIGNvbnRvdXIgICAgICAgPSBoaW50cy0+Y29udG91cnM7CisgICAgQUZfUG9pbnQqICAgICAgICBjb250b3VyX2xpbWl0ID0gY29udG91ciArIGhpbnRzLT5udW1fY29udG91cnM7CisgICAgQUZfRGlyZWN0aW9uICAgICBtYWpvcl9kaXIsIHNlZ21lbnRfZGlyOworCisgICAgRlRfUG9zICBmbGF0X3RocmVzaG9sZCA9IEZMQVRfVEhSRVNIT0xEKCBtZXRyaWNzLT51bml0c19wZXJfZW0gKTsKIAogCiAgICAgRlRfWkVSTyggJnNlZzAgKTsKQEAgLTEyMDMsMTYgKzE0MzYsMzUgQEAKICAgICAvKiBkbyBlYWNoIGNvbnRvdXIgc2VwYXJhdGVseSAqLwogICAgIGZvciAoIDsgY29udG91ciA8IGNvbnRvdXJfbGltaXQ7IGNvbnRvdXIrKyApCiAgICAgewotICAgICAgQUZfUG9pbnQgIHBvaW50ICAgPSAgY29udG91clswXTsKLSAgICAgIEFGX1BvaW50ICBsYXN0ICAgID0gIHBvaW50LT5wcmV2OwotICAgICAgaW50ICAgICAgIG9uX2VkZ2UgPSAgMDsKLSAgICAgIEZUX1BvcyAgICBtaW5fcG9zID0gIDMyMDAwOyAgLyogbWluaW11bSBzZWdtZW50IHBvcyAhPSBtaW5fY29vcmQgKi8KLSAgICAgIEZUX1BvcyAgICBtYXhfcG9zID0gLTMyMDAwOyAgLyogbWF4aW11bSBzZWdtZW50IHBvcyAhPSBtYXhfY29vcmQgKi8KLSAgICAgIEZUX0Jvb2wgICBwYXNzZWQ7CisgICAgICBBRl9Qb2ludCAgcG9pbnQgICA9IGNvbnRvdXJbMF07CisgICAgICBBRl9Qb2ludCAgbGFzdCAgICA9IHBvaW50LT5wcmV2OworICAgICAgaW50ICAgICAgIG9uX2VkZ2UgPSAwOwogCisgICAgICAvKiB3ZSBjYWxsIHZhbHVlcyBtZWFzdXJlZCBhbG9uZyBhIHNlZ21lbnQgKHBvaW50LT52KSAgICAqLworICAgICAgLyogYGNvb3JkaW5hdGVzJywgYW5kIHZhbHVlcyBvcnRob2dvbmFsIHRvIGl0IChwb2ludC0+dSkgKi8KKyAgICAgIC8qIGBwb3NpdGlvbnMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBGVF9Qb3MgICAgIG1pbl9wb3MgICAgICA9ICAzMjAwMDsKKyAgICAgIEZUX1BvcyAgICAgbWF4X3BvcyAgICAgID0gLTMyMDAwOworICAgICAgRlRfUG9zICAgICBtaW5fY29vcmQgICAgPSAgMzIwMDA7CisgICAgICBGVF9Qb3MgICAgIG1heF9jb29yZCAgICA9IC0zMjAwMDsKKyAgICAgIEZUX1VTaG9ydCAgbWluX2ZsYWdzICAgID0gIEFGX0ZMQUdfTk9ORTsKKyAgICAgIEZUX1VTaG9ydCAgbWF4X2ZsYWdzICAgID0gIEFGX0ZMQUdfTk9ORTsKKyAgICAgIEZUX1BvcyAgICAgbWluX29uX2Nvb3JkID0gIDMyMDAwOworICAgICAgRlRfUG9zICAgICBtYXhfb25fY29vcmQgPSAtMzIwMDA7CiAKLSAgICAgIGlmICggcG9pbnQgPT0gbGFzdCApICAvKiBza2lwIHNpbmdsZXRvbnMgLS0ganVzdCBpbiBjYXNlICovCi0gICAgICAgIGNvbnRpbnVlOworICAgICAgRlRfQm9vbCAgcGFzc2VkOworCisgICAgICBBRl9TZWdtZW50ICBwcmV2X3NlZ21lbnQgPSBOVUxMOworCisgICAgICBGVF9Qb3MgICAgIHByZXZfbWluX3BvcyAgICAgID0gbWluX3BvczsKKyAgICAgIEZUX1BvcyAgICAgcHJldl9tYXhfcG9zICAgICAgPSBtYXhfcG9zOworICAgICAgRlRfUG9zICAgICBwcmV2X21pbl9jb29yZCAgICA9IG1pbl9jb29yZDsKKyAgICAgIEZUX1BvcyAgICAgcHJldl9tYXhfY29vcmQgICAgPSBtYXhfY29vcmQ7CisgICAgICBGVF9VU2hvcnQgIHByZXZfbWluX2ZsYWdzICAgID0gbWluX2ZsYWdzOworICAgICAgRlRfVVNob3J0ICBwcmV2X21heF9mbGFncyAgICA9IG1heF9mbGFnczsKKyAgICAgIEZUX1BvcyAgICAgcHJldl9taW5fb25fY29vcmQgPSBtaW5fb25fY29vcmQ7CisgICAgICBGVF9Qb3MgICAgIHByZXZfbWF4X29uX2Nvb3JkID0gbWF4X29uX2Nvb3JkOworCiAKICAgICAgIGlmICggRlRfQUJTKCBsYXN0LT5vdXRfZGlyICkgID09IG1ham9yX2RpciAmJgogICAgICAgICAgICBGVF9BQlMoIHBvaW50LT5vdXRfZGlyICkgPT0gbWFqb3JfZGlyICkKQEAgLTEyNDMsNDAgKzE0OTUsMTgyIEBACiAKICAgICAgICAgaWYgKCBvbl9lZGdlICkKICAgICAgICAgeworICAgICAgICAgIC8qIGdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIHBvc2l0aW9uICovCiAgICAgICAgICAgdSA9IHBvaW50LT51OwogICAgICAgICAgIGlmICggdSA8IG1pbl9wb3MgKQogICAgICAgICAgICAgbWluX3BvcyA9IHU7CiAgICAgICAgICAgaWYgKCB1ID4gbWF4X3BvcyApCiAgICAgICAgICAgICBtYXhfcG9zID0gdTsKIAorICAgICAgICAgIC8qIGdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvb3JkaW5hdGUgdG9nZXRoZXIgd2l0aCBmbGFncyAqLworICAgICAgICAgIHYgPSBwb2ludC0+djsKKyAgICAgICAgICBpZiAoIHYgPCBtaW5fY29vcmQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG1pbl9jb29yZCA9IHY7CisgICAgICAgICAgICBtaW5fZmxhZ3MgPSBwb2ludC0+ZmxhZ3M7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICggdiA+IG1heF9jb29yZCApCisgICAgICAgICAgeworICAgICAgICAgICAgbWF4X2Nvb3JkID0gdjsKKyAgICAgICAgICAgIG1heF9mbGFncyA9IHBvaW50LT5mbGFnczsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBnZXQgbWluaW11bSBhbmQgbWF4aW11bSBjb29yZGluYXRlIG9mIGBvbicgcG9pbnRzICovCisgICAgICAgICAgaWYgKCAhKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0wgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgdiA9IHBvaW50LT52OworICAgICAgICAgICAgaWYgKCB2IDwgbWluX29uX2Nvb3JkICkKKyAgICAgICAgICAgICAgbWluX29uX2Nvb3JkID0gdjsKKyAgICAgICAgICAgIGlmICggdiA+IG1heF9vbl9jb29yZCApCisgICAgICAgICAgICAgIG1heF9vbl9jb29yZCA9IHY7CisgICAgICAgICAgfQorCiAgICAgICAgICAgaWYgKCBwb2ludC0+b3V0X2RpciAhPSBzZWdtZW50X2RpciB8fCBwb2ludCA9PSBsYXN0ICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiB3ZSBhcmUganVzdCBsZWF2aW5nIGFuIGVkZ2U7IHJlY29yZCBhIG5ldyBzZWdtZW50ISAqLwotICAgICAgICAgICAgc2VnbWVudC0+bGFzdCA9IHBvaW50OwotICAgICAgICAgICAgc2VnbWVudC0+cG9zICA9IChGVF9TaG9ydCkoICggbWluX3BvcyArIG1heF9wb3MgKSA+PiAxICk7CisgICAgICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBuZXcgc2VnbWVudCdzIHN0YXJ0IHBvaW50IGlzIGlkZW50aWNhbCB0byAqLworICAgICAgICAgICAgLyogdGhlIHByZXZpb3VzIHNlZ21lbnQncyBlbmQgcG9pbnQ7IGZvciBleGFtcGxlLCB0aGlzIG1pZ2h0ICAgKi8KKyAgICAgICAgICAgIC8qIGhhcHBlbiBmb3Igc3Bpa2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIC8qIGEgc2VnbWVudCBpcyByb3VuZCBpZiBlaXRoZXIgaXRzIGZpcnN0IG9yIGxhc3QgcG9pbnQgKi8KLSAgICAgICAgICAgIC8qIGlzIGEgY29udHJvbCBwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggKCBzZWdtZW50LT5maXJzdC0+ZmxhZ3MgfCBwb2ludC0+ZmxhZ3MgKSAmCi0gICAgICAgICAgICAgICAgIEFGX0ZMQUdfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICBzZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworICAgICAgICAgICAgaWYgKCAhcHJldl9zZWdtZW50IHx8IHNlZ21lbnQtPmZpcnN0ICE9IHByZXZfc2VnbWVudC0+bGFzdCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIHBvaW50cyBhcmUgZGlmZmVyZW50OiB3ZSBhcmUganVzdCBsZWF2aW5nIGFuIGVkZ2UsIHRodXMgKi8KKyAgICAgICAgICAgICAgLyogcmVjb3JkIGEgbmV3IHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAvKiBjb21wdXRlIHNlZ21lbnQgc2l6ZSAqLwotICAgICAgICAgICAgbWluX3BvcyA9IG1heF9wb3MgPSBwb2ludC0+djsKKyAgICAgICAgICAgICAgc2VnbWVudC0+bGFzdCAgPSBwb2ludDsKKyAgICAgICAgICAgICAgc2VnbWVudC0+cG9zICAgPSAoRlRfU2hvcnQpKCAoIG1pbl9wb3MgKyBtYXhfcG9zICkgPj4gMSApOworICAgICAgICAgICAgICBzZWdtZW50LT5kZWx0YSA9IChGVF9TaG9ydCkoICggbWF4X3BvcyAtIG1pbl9wb3MgKSA+PiAxICk7CiAKLSAgICAgICAgICAgIHYgPSBzZWdtZW50LT5maXJzdC0+djsKLSAgICAgICAgICAgIGlmICggdiA8IG1pbl9wb3MgKQotICAgICAgICAgICAgICBtaW5fcG9zID0gdjsKLSAgICAgICAgICAgIGlmICggdiA+IG1heF9wb3MgKQotICAgICAgICAgICAgICBtYXhfcG9zID0gdjsKKyAgICAgICAgICAgICAgLyogYSBzZWdtZW50IGlzIHJvdW5kIGlmIGVpdGhlciBpdHMgZmlyc3Qgb3IgbGFzdCBwb2ludCAqLworICAgICAgICAgICAgICAvKiBpcyBhIGNvbnRyb2wgcG9pbnQsIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBvbiBwb2ludHMgICovCisgICAgICAgICAgICAgIC8qIGluYmV0d2VlbiBkb2Vzbid0IGV4Y2VlZCBhIGhldXJpc3RpYyBsaW1pdCAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgaWYgKCAoIG1pbl9mbGFncyB8IG1heF9mbGFncyApICYgQUZfRkxBR19DT05UUk9MICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAoIG1heF9vbl9jb29yZCAtIG1pbl9vbl9jb29yZCApIDwgZmxhdF90aHJlc2hvbGQgKQorICAgICAgICAgICAgICAgIHNlZ21lbnQtPmZsYWdzIHw9IEFGX0VER0VfUk9VTkQ7CiAKLSAgICAgICAgICAgIHNlZ21lbnQtPm1pbl9jb29yZCA9IChGVF9TaG9ydCltaW5fcG9zOwotICAgICAgICAgICAgc2VnbWVudC0+bWF4X2Nvb3JkID0gKEZUX1Nob3J0KW1heF9wb3M7Ci0gICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgICAgPSAoRlRfU2hvcnQpKCBzZWdtZW50LT5tYXhfY29vcmQgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC0+bWluX2Nvb3JkICk7CisgICAgICAgICAgICAgIHNlZ21lbnQtPm1pbl9jb29yZCA9IChGVF9TaG9ydCltaW5fY29vcmQ7CisgICAgICAgICAgICAgIHNlZ21lbnQtPm1heF9jb29yZCA9IChGVF9TaG9ydCltYXhfY29vcmQ7CisgICAgICAgICAgICAgIHNlZ21lbnQtPmhlaWdodCAgICA9IHNlZ21lbnQtPm1heF9jb29yZCAtIHNlZ21lbnQtPm1pbl9jb29yZDsKKworICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQgICAgICA9IHNlZ21lbnQ7CisgICAgICAgICAgICAgIHByZXZfbWluX3BvcyAgICAgID0gbWluX3BvczsKKyAgICAgICAgICAgICAgcHJldl9tYXhfcG9zICAgICAgPSBtYXhfcG9zOworICAgICAgICAgICAgICBwcmV2X21pbl9jb29yZCAgICA9IG1pbl9jb29yZDsKKyAgICAgICAgICAgICAgcHJldl9tYXhfY29vcmQgICAgPSBtYXhfY29vcmQ7CisgICAgICAgICAgICAgIHByZXZfbWluX2ZsYWdzICAgID0gbWluX2ZsYWdzOworICAgICAgICAgICAgICBwcmV2X21heF9mbGFncyAgICA9IG1heF9mbGFnczsKKyAgICAgICAgICAgICAgcHJldl9taW5fb25fY29vcmQgPSBtaW5fb25fY29vcmQ7CisgICAgICAgICAgICAgIHByZXZfbWF4X29uX2Nvb3JkID0gbWF4X29uX2Nvb3JkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBwb2ludHMgYXJlIHRoZSBzYW1lOiB3ZSBkb24ndCBjcmVhdGUgYSBuZXcgc2VnbWVudCBidXQgKi8KKyAgICAgICAgICAgICAgLyogbWVyZ2UgdGhlIGN1cnJlbnQgc2VnbWVudCB3aXRoIHRoZSBwcmV2aW91cyBvbmUgICAgICAgICovCisKKyAgICAgICAgICAgICAgaWYgKCBwcmV2X3NlZ21lbnQtPmxhc3QtPmluX2RpciA9PSBwb2ludC0+aW5fZGlyICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgaWRlbnRpY2FsIGRpcmVjdGlvbnMgKHRoaXMgY2FuIGhhcHBlbiBmb3IgICAgICAgKi8KKyAgICAgICAgICAgICAgICAvKiBkZWdlbmVyYXRlIG91dGxpbmVzIHRoYXQgbW92ZSB6aWctemFnIGFsb25nIHRoZSBtYWluICAgICovCisgICAgICAgICAgICAgICAgLyogYXhpcyB3aXRob3V0IGNoYW5naW5nIHRoZSBjb29yZGluYXRlIHZhbHVlIG9mIHRoZSBvdGhlciAqLworICAgICAgICAgICAgICAgIC8qIGF4aXMsIGFuZCB3aGVyZSB0aGUgc2VnbWVudHMgaGF2ZSBqdXN0IGJlZW4gbWVyZ2VkKTogICAgKi8KKyAgICAgICAgICAgICAgICAvKiB1bmlmeSBzZWdtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAvKiB1cGRhdGUgY29uc3RyYWludHMgKi8KKworICAgICAgICAgICAgICAgIGlmICggcHJldl9taW5fcG9zIDwgbWluX3BvcyApCisgICAgICAgICAgICAgICAgICBtaW5fcG9zID0gcHJldl9taW5fcG9zOworICAgICAgICAgICAgICAgIGlmICggcHJldl9tYXhfcG9zID4gbWF4X3BvcyApCisgICAgICAgICAgICAgICAgICBtYXhfcG9zID0gcHJldl9tYXhfcG9zOworCisgICAgICAgICAgICAgICAgaWYgKCBwcmV2X21pbl9jb29yZCA8IG1pbl9jb29yZCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgbWluX2Nvb3JkID0gcHJldl9taW5fY29vcmQ7CisgICAgICAgICAgICAgICAgICBtaW5fZmxhZ3MgPSBwcmV2X21pbl9mbGFnczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBwcmV2X21heF9jb29yZCA+IG1heF9jb29yZCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgbWF4X2Nvb3JkID0gcHJldl9tYXhfY29vcmQ7CisgICAgICAgICAgICAgICAgICBtYXhfZmxhZ3MgPSBwcmV2X21heF9mbGFnczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHByZXZfbWluX29uX2Nvb3JkIDwgbWluX29uX2Nvb3JkICkKKyAgICAgICAgICAgICAgICAgIG1pbl9vbl9jb29yZCA9IHByZXZfbWluX29uX2Nvb3JkOworICAgICAgICAgICAgICAgIGlmICggcHJldl9tYXhfb25fY29vcmQgPiBtYXhfb25fY29vcmQgKQorICAgICAgICAgICAgICAgICAgbWF4X29uX2Nvb3JkID0gcHJldl9tYXhfb25fY29vcmQ7CisKKyAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPmxhc3QgPSBwb2ludDsKKyAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPnBvcyAgPSAoRlRfU2hvcnQpKCAoIG1pbl9wb3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BvcyApID4+IDEgKTsKKworICAgICAgICAgICAgICAgIGlmICggKCBtaW5fZmxhZ3MgfCBtYXhfZmxhZ3MgKSAmIEFGX0ZMQUdfQ09OVFJPTCAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAoIG1heF9vbl9jb29yZCAtIG1pbl9vbl9jb29yZCApIDwgZmxhdF90aHJlc2hvbGQgKQorICAgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+ZmxhZ3MgJj0gfkFGX0VER0VfUk9VTkQ7CisKKyAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPm1pbl9jb29yZCA9IChGVF9TaG9ydCltaW5fY29vcmQ7CisgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5tYXhfY29vcmQgPSAoRlRfU2hvcnQpbWF4X2Nvb3JkOworICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+aGVpZ2h0ICAgID0gcHJldl9zZWdtZW50LT5tYXhfY29vcmQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5taW5fY29vcmQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogd2UgaGF2ZSBkaWZmZXJlbnQgZGlyZWN0aW9uczsgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAqLworICAgICAgICAgICAgICAgIC8qIGxvbmdlciBzZWdtZW50IGFuZCBkaXNjYXJkIHRoZSBvdGhlciBvbmUgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIGlmICggRlRfQUJTKCBwcmV2X21heF9jb29yZCAtIHByZXZfbWluX2Nvb3JkICkgPgorICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBtYXhfY29vcmQgLSBtaW5fY29vcmQgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogZGlzY2FyZCBjdXJyZW50IHNlZ21lbnQgKi8KKworICAgICAgICAgICAgICAgICAgaWYgKCBtaW5fcG9zIDwgcHJldl9taW5fcG9zICkKKyAgICAgICAgICAgICAgICAgICAgcHJldl9taW5fcG9zID0gbWluX3BvczsKKyAgICAgICAgICAgICAgICAgIGlmICggbWF4X3BvcyA+IHByZXZfbWF4X3BvcyApCisgICAgICAgICAgICAgICAgICAgIHByZXZfbWF4X3BvcyA9IG1heF9wb3M7CisKKyAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+bGFzdCA9IHBvaW50OworICAgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5wb3MgID0gKEZUX1Nob3J0KSggKCBwcmV2X21pbl9wb3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X21heF9wb3MgKSA+PiAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBkaXNjYXJkIHByZXZpb3VzIHNlZ21lbnQgKi8KKworICAgICAgICAgICAgICAgICAgaWYgKCBwcmV2X21pbl9wb3MgPCBtaW5fcG9zICkKKyAgICAgICAgICAgICAgICAgICAgbWluX3BvcyA9IHByZXZfbWluX3BvczsKKyAgICAgICAgICAgICAgICAgIGlmICggcHJldl9tYXhfcG9zID4gbWF4X3BvcyApCisgICAgICAgICAgICAgICAgICAgIG1heF9wb3MgPSBwcmV2X21heF9wb3M7CisKKyAgICAgICAgICAgICAgICAgIHNlZ21lbnQtPmxhc3QgPSBwb2ludDsKKyAgICAgICAgICAgICAgICAgIHNlZ21lbnQtPnBvcyAgPSAoRlRfU2hvcnQpKCAoIG1pbl9wb3MgKyBtYXhfcG9zICkgPj4gMSApOworCisgICAgICAgICAgICAgICAgICBpZiAoICggbWluX2ZsYWdzIHwgbWF4X2ZsYWdzICkgJiBBRl9GTEFHX0NPTlRST0wgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgICAoIG1heF9vbl9jb29yZCAtIG1pbl9vbl9jb29yZCApIDwgZmxhdF90aHJlc2hvbGQgKQorICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworCisgICAgICAgICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpbWluX2Nvb3JkOworICAgICAgICAgICAgICAgICAgc2VnbWVudC0+bWF4X2Nvb3JkID0gKEZUX1Nob3J0KW1heF9jb29yZDsKKyAgICAgICAgICAgICAgICAgIHNlZ21lbnQtPmhlaWdodCAgICA9IHNlZ21lbnQtPm1heF9jb29yZCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQ7CisKKyAgICAgICAgICAgICAgICAgICpwcmV2X3NlZ21lbnQgPSAqc2VnbWVudDsKKworICAgICAgICAgICAgICAgICAgcHJldl9taW5fcG9zICAgICAgPSBtaW5fcG9zOworICAgICAgICAgICAgICAgICAgcHJldl9tYXhfcG9zICAgICAgPSBtYXhfcG9zOworICAgICAgICAgICAgICAgICAgcHJldl9taW5fY29vcmQgICAgPSBtaW5fY29vcmQ7CisgICAgICAgICAgICAgICAgICBwcmV2X21heF9jb29yZCAgICA9IG1heF9jb29yZDsKKyAgICAgICAgICAgICAgICAgIHByZXZfbWluX2ZsYWdzICAgID0gbWluX2ZsYWdzOworICAgICAgICAgICAgICAgICAgcHJldl9tYXhfZmxhZ3MgICAgPSBtYXhfZmxhZ3M7CisgICAgICAgICAgICAgICAgICBwcmV2X21pbl9vbl9jb29yZCA9IG1pbl9vbl9jb29yZDsKKyAgICAgICAgICAgICAgICAgIHByZXZfbWF4X29uX2Nvb3JkID0gbWF4X29uX2Nvb3JkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGF4aXMtPm51bV9zZWdtZW50cy0tOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBvbl9lZGdlID0gMDsKICAgICAgICAgICAgIHNlZ21lbnQgPSBOVUxMOworCiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyODksNyArMTY4MywxMiBAQAogICAgICAgICAgIHBhc3NlZCA9IDE7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFvbl9lZGdlICYmIEZUX0FCUyggcG9pbnQtPm91dF9kaXIgKSA9PSBtYWpvcl9kaXIgKQorICAgICAgICAvKiBpZiB3ZSBhcmUgbm90IG9uIGFuIGVkZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIG1ham9yIGRpcmVjdGlvbiAqLworICAgICAgICAvKiBjb2luY2lkZXMgd2l0aCB0aGUgY3VycmVudCBwb2ludCdzIGBvdXQnIGRpcmVjdGlvbiwgb3IgICAgICAqLworICAgICAgICAvKiB3aGV0aGVyIHdlIGhhdmUgYSBzaW5nbGUtcG9pbnQgY29udG91ciAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoICFvbl9lZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCBGVF9BQlMoIHBvaW50LT5vdXRfZGlyICkgPT0gbWFqb3JfZGlyIHx8CisgICAgICAgICAgICAgICBwb2ludCA9PSBwb2ludC0+cHJldiAgICAgICAgICAgICAgICAgICkgKQogICAgICAgICB7CiAgICAgICAgICAgLyogdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBuZXcgc2VnbWVudCEgKi8KICAgICAgICAgICBzZWdtZW50X2RpciA9IChBRl9EaXJlY3Rpb24pcG9pbnQtPm91dF9kaXI7CkBAIC0xMzAxLDEyICsxNzAwLDQ2IEBACiAgICAgICAgICAgLyogY2xlYXIgYWxsIHNlZ21lbnQgZmllbGRzICovCiAgICAgICAgICAgc2VnbWVudFswXSA9IHNlZzA7CiAKLSAgICAgICAgICBzZWdtZW50LT5kaXIgICAgICA9IChGVF9DaGFyKXNlZ21lbnRfZGlyOwotICAgICAgICAgIG1pbl9wb3MgPSBtYXhfcG9zID0gcG9pbnQtPnU7Ci0gICAgICAgICAgc2VnbWVudC0+Zmlyc3QgICAgPSBwb2ludDsKLSAgICAgICAgICBzZWdtZW50LT5sYXN0ICAgICA9IHBvaW50OworICAgICAgICAgIHNlZ21lbnQtPmRpciAgID0gKEZUX0NoYXIpc2VnbWVudF9kaXI7CisgICAgICAgICAgc2VnbWVudC0+Zmlyc3QgPSBwb2ludDsKKyAgICAgICAgICBzZWdtZW50LT5sYXN0ICA9IHBvaW50OworCisgICAgICAgICAgLyogYGFmX2F4aXNfaGludHNfbmV3X3NlZ21lbnQnIHJlYWxsb2NhdGVzIG1lbW9yeSwgICAgKi8KKyAgICAgICAgICAvKiB0aHVzIHdlIGhhdmUgdG8gcmVmcmVzaCB0aGUgYHByZXZfc2VnbWVudCcgcG9pbnRlciAqLworICAgICAgICAgIGlmICggcHJldl9zZWdtZW50ICkKKyAgICAgICAgICAgIHByZXZfc2VnbWVudCA9IHNlZ21lbnQgLSAxOworCisgICAgICAgICAgbWluX3BvcyAgID0gbWF4X3BvcyAgID0gcG9pbnQtPnU7CisgICAgICAgICAgbWluX2Nvb3JkID0gbWF4X2Nvb3JkID0gcG9pbnQtPnY7CisgICAgICAgICAgbWluX2ZsYWdzID0gbWF4X2ZsYWdzID0gcG9pbnQtPmZsYWdzOworCisgICAgICAgICAgaWYgKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0wgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG1pbl9vbl9jb29yZCA9ICAzMjAwMDsKKyAgICAgICAgICAgIG1heF9vbl9jb29yZCA9IC0zMjAwMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbWluX29uX2Nvb3JkID0gbWF4X29uX2Nvb3JkID0gcG9pbnQtPnY7CiAKICAgICAgICAgICBvbl9lZGdlID0gMTsKKworICAgICAgICAgIGlmICggcG9pbnQgPT0gcG9pbnQtPnByZXYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBvbmUtcG9pbnQgc2VnbWVudDogdGhpcyBpcyBhIG9uZS1wb2ludCAqLworICAgICAgICAgICAgLyogY29udG91ciB3aXRoIGBpbicgYW5kIGBvdXQnIGRpcmVjdGlvbiBzZXQgdG8gICAgICovCisgICAgICAgICAgICAvKiBBRl9ESVJfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNlZ21lbnQtPnBvcyA9IChGVF9TaG9ydCltaW5fcG9zOworCisgICAgICAgICAgICBpZiAocG9pbnQtPmZsYWdzICYgQUZfRkxBR19DT05UUk9MKQorICAgICAgICAgICAgICBzZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworCisgICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpcG9pbnQtPnY7CisgICAgICAgICAgICBzZWdtZW50LT5tYXhfY29vcmQgPSAoRlRfU2hvcnQpcG9pbnQtPnY7CisgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgPSAwOworCisgICAgICAgICAgICBvbl9lZGdlID0gMDsKKyAgICAgICAgICAgIHNlZ21lbnQgPSBOVUxMOworICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CkBAIC0xNTE4LDYgKzE5NTEsMTIgQEAKICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGhpbnRzLT5tZW1vcnk7CiAgICAgQUZfTGF0aW5BeGlzICBsYXhpcyAgPSAmKChBRl9MYXRpbk1ldHJpY3MpaGludHMtPm1ldHJpY3MpLT5heGlzW2RpbV07CiAKKyAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MgID0gaGludHMtPm1ldHJpY3MtPnN0eWxlX2NsYXNzOworICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisKKyAgICBGVF9Cb29sICB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPSAwOworCiAgICAgQUZfU2VnbWVudCAgICBzZWdtZW50cyAgICAgID0gYXhpcy0+c2VnbWVudHM7CiAgICAgQUZfU2VnbWVudCAgICBzZWdtZW50X2xpbWl0ID0gc2VnbWVudHMgKyBheGlzLT5udW1fc2VnbWVudHM7CiAgICAgQUZfU2VnbWVudCAgICBzZWc7CkBAIC0xNTI4LDYgKzE5NjcsNyBAQAogICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CiAgICAgRlRfUG9zICAgICAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZDsKICAgICBGVF9Qb3MgICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZDsKKyAgICBGVF9Qb3MgICAgICAgIHNlZ21lbnRfd2lkdGhfdGhyZXNob2xkOwogCiAKICAgICBheGlzLT5udW1fZWRnZXMgPSAwOwpAQCAtMTU0MCwxNSArMTk4MCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBRl9ESVJfUklHSFQ7CiAjZW5kaWYKIAorICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9WRVJUICkKKyAgICAgIHRvcF90b19ib3R0b21faGludGluZyA9IHNjcmlwdF9jbGFzcy0+dG9wX3RvX2JvdHRvbV9oaW50aW5nOworCiAgICAgLyoKICAgICAgKiAgV2UgaWdub3JlIGFsbCBzZWdtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gMSBwaXhlbCBpbiBsZW5ndGgKICAgICAgKiAgdG8gYXZvaWQgbWFueSBwcm9ibGVtcyB3aXRoIHNlcmlmIGZvbnRzLiAgV2UgY29tcHV0ZSB0aGUKICAgICAgKiAgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgaW4gZm9udCB1bml0cy4KICAgICAgKi8KICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCi0gICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCA9IEZUX0RpdkZpeCggNjQsIGhpbnRzLT55X3NjYWxlICk7CisgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSBGVF9EaXZGaXgoIDY0LCBoaW50cy0+eV9zY2FsZSApOwogICAgIGVsc2UKLSAgICAgICAgc2VnbWVudF9sZW5ndGhfdGhyZXNob2xkID0gMDsKKyAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCA9IDA7CisKKyAgICAvKgorICAgICAqICBTaW1pbGFybHksIHdlIGlnbm9yZSBzZWdtZW50cyB0aGF0IGhhdmUgYSB3aWR0aCBkZWx0YQorICAgICAqICBsYXJnZXIgdGhhbiAwLjVweCAoaS5lLiwgYSB3aWR0aCBsYXJnZXIgdGhhbiAxcHgpLgorICAgICAqLworICAgIHNlZ21lbnRfd2lkdGhfdGhyZXNob2xkID0gRlRfRGl2Rml4KCAzMiwgc2NhbGUgKTsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE1ODEsNyArMjAzMCwxMSBAQAogICAgICAgRlRfSW50ICAgZWU7CiAKIAotICAgICAgaWYgKCBzZWctPmhlaWdodCA8IHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCApCisgICAgICAvKiBpZ25vcmUgdG9vIHNob3J0IHNlZ21lbnRzLCB0b28gd2lkZSBvbmVzLCBhbmQsIGluIHRoaXMgbG9vcCwgKi8KKyAgICAgIC8qIG9uZS1wb2ludCBzZWdtZW50cyB3aXRob3V0IGEgZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBzZWctPmhlaWdodCA8IHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCB8fAorICAgICAgICAgICBzZWctPmRlbHRhID4gc2VnbWVudF93aWR0aF90aHJlc2hvbGQgICB8fAorICAgICAgICAgICBzZWctPmRpciA9PSBBRl9ESVJfTk9ORSAgICAgICAgICAgICAgICApCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAvKiBBIHNwZWNpYWwgY2FzZSBmb3Igc2VyaWYgZWRnZXM6IElmIHRoZXkgYXJlIHNtYWxsZXIgdGhhbiAqLwpAQCAtMTYxNyw2ICsyMDcwLDcgQEAKICAgICAgICAgLyogc29ydCBhY2NvcmRpbmcgdG8gdGhlIHBvc2l0aW9uICAgICovCiAgICAgICAgIGVycm9yID0gYWZfYXhpc19oaW50c19uZXdfZWRnZSggYXhpcywgc2VnLT5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFGX0RpcmVjdGlvbilzZWctPmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfdG9fYm90dG9tX2hpbnRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCAmZWRnZSApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNjQyLDYgKzIwOTYsNDQgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvKiB3ZSBsb29wIGFnYWluIG92ZXIgYWxsIHNlZ21lbnRzIHRvIGNhdGNoIG9uZS1wb2ludCBzZWdtZW50cyAgICovCisgICAgLyogd2l0aG91dCBhIGRpcmVjdGlvbjogaWYgcG9zc2libGUsIGxpbmsgdGhlbSB0byBleGlzdGluZyBlZGdlcyAqLworICAgIGZvciAoIHNlZyA9IHNlZ21lbnRzOyBzZWcgPCBzZWdtZW50X2xpbWl0OyBzZWcrKyApCisgICAgeworICAgICAgQUZfRWRnZSAgZm91bmQgPSBOVUxMOworICAgICAgRlRfSW50ICAgZWU7CisKKworICAgICAgaWYgKCBzZWctPmRpciAhPSBBRl9ESVJfTk9ORSApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBsb29rIGZvciBhbiBlZGdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlZ21lbnQgKi8KKyAgICAgIGZvciAoIGVlID0gMDsgZWUgPCBheGlzLT5udW1fZWRnZXM7IGVlKysgKQorICAgICAgeworICAgICAgICBBRl9FZGdlICBlZGdlID0gYXhpcy0+ZWRnZXMgKyBlZTsKKyAgICAgICAgRlRfUG9zICAgZGlzdDsKKworCisgICAgICAgIGRpc3QgPSBzZWctPnBvcyAtIGVkZ2UtPmZwb3M7CisgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgIGRpc3QgPSAtZGlzdDsKKworICAgICAgICBpZiAoIGRpc3QgPCBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCApCisgICAgICAgIHsKKyAgICAgICAgICBmb3VuZCA9IGVkZ2U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogb25lLXBvaW50IHNlZ21lbnRzIHdpdGhvdXQgYSBtYXRjaCBhcmUgaWdub3JlZCAqLworICAgICAgaWYgKCBmb3VuZCApCisgICAgICB7CisgICAgICAgIHNlZy0+ZWRnZV9uZXh0ICAgICAgICAgPSBmb3VuZC0+Zmlyc3Q7CisgICAgICAgIGZvdW5kLT5sYXN0LT5lZGdlX25leHQgPSBzZWc7CisgICAgICAgIGZvdW5kLT5sYXN0ICAgICAgICAgICAgPSBzZWc7CisgICAgICB9CisgICAgfQorCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xODcyLDcgKzIzNjQsOCBAQAogICAgICAgICAvKiB0aGUgbWFqb3IgZGlyZWN0aW9uKSAtLSB0aGlzIGFzc3VtZXMgdGhlIFRydWVUeXBlIGNvbnZlbnRpb24gICovCiAgICAgICAgIC8qIGZvciB0aGUgb3JpZW50YXRpb24gb2YgY29udG91cnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgaXNfdG9wX2JsdWUgPQotICAgICAgICAgIChGVF9CeXRlKSggKCBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfVE9QICkgIT0gMCApOworICAgICAgICAgIChGVF9CeXRlKSggKCBibHVlLT5mbGFncyAmICggQUZfTEFUSU5fQkxVRV9UT1AgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0xBVElOX0JMVUVfU1VCX1RPUCApICkgIT0gMCApOwogICAgICAgICBpc19uZXV0cmFsX2JsdWUgPQogICAgICAgICAgIChGVF9CeXRlKSggKCBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfTkVVVFJBTCApICE9IDApOwogICAgICAgICBpc19tYWpvcl9kaXIgPQpAQCAtMjA4MSw2ICsyNTc0LDcgQEAKICAgYWZfbGF0aW5fY29tcHV0ZV9zdGVtX3dpZHRoKCBBRl9HbHlwaEhpbnRzICBoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgYmFzZV9kZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBiYXNlX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIHN0ZW1fZmxhZ3MgKQogICB7CkBAIC0yMTU4LDcgKzI2NTIsMzkgQEAKICAgICAgICAgICAgIGRpc3QgKz0gZGVsdGE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAgIGRpc3QgPSAoIGRpc3QgKyAzMiApICYgfjYzOworICAgICAgICB7CisgICAgICAgICAgLyogQSBzdGVtJ3MgZW5kIHBvc2l0aW9uIGRlcGVuZHMgb24gdHdvIHZhbHVlczogdGhlIHN0YXJ0ICAgICAgICAqLworICAgICAgICAgIC8qIHBvc2l0aW9uIGFuZCB0aGUgc3RlbSBsZW5ndGguICBUaGUgZm9ybWVyIGdldHMgdXN1YWxseSAgICAgICAgKi8KKyAgICAgICAgICAvKiByb3VuZGVkIHRvIHRoZSBncmlkLCB3aGlsZSB0aGUgbGF0dGVyIGdldHMgcm91bmRlZCBhbHNvIGlmIGl0ICovCisgICAgICAgICAgLyogZXhjZWVkcyBhIGNlcnRhaW4gbGVuZ3RoIChzZWUgYmVsb3cgaW4gdGhpcyBmdW5jdGlvbikuICBUaGlzICAqLworICAgICAgICAgIC8qIGBkb3VibGUgcm91bmRpbmcnIGNhbiBsZWFkIHRvIGEgZ3JlYXQgZGlmZmVyZW5jZSB0byB0aGUgICAgICAgKi8KKyAgICAgICAgICAvKiBvcmlnaW5hbCwgdW5oaW50ZWQgcG9zaXRpb247IHRoaXMgbm9ybWFsbHkgZG9lc24ndCBtYXR0ZXIgZm9yICovCisgICAgICAgICAgLyogbGFyZ2UgUFBFTSB2YWx1ZXMsIGJ1dCBmb3Igc21hbGwgc2l6ZXMgaXQgY2FuIGVhc2lseSBtYWtlICAgICAqLworICAgICAgICAgIC8qIG91dGxpbmVzIGNvbGxpZGUuICBGb3IgdGhpcyByZWFzb24sIHdlIGFkanVzdCB0aGUgc3RlbSBsZW5ndGggKi8KKyAgICAgICAgICAvKiBieSBhIHNtYWxsIGFtb3VudCBkZXBlbmRpbmcgb24gdGhlIFBQRU0gdmFsdWUgaW4gY2FzZSB0aGUgICAgICovCisgICAgICAgICAgLyogZm9ybWVyIGFuZCBsYXR0ZXIgcm91bmRpbmcgYm90aCBwb2ludCBpbnRvIHRoZSBzYW1lICAgICAgICAgICAqLworICAgICAgICAgIC8qIGRpcmVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgIEZUX1BvcyAgYmRlbHRhID0gMDsKKworCisgICAgICAgICAgaWYgKCAoICggd2lkdGggPiAwICkgJiYgKCBiYXNlX2RlbHRhID4gMCApICkgfHwKKyAgICAgICAgICAgICAgICggKCB3aWR0aCA8IDAgKSAmJiAoIGJhc2VfZGVsdGEgPCAwICkgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgcHBlbSA9IG1ldHJpY3MtPnJvb3Quc2NhbGVyLmZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtOworCisKKyAgICAgICAgICAgIGlmICggcHBlbSA8IDEwICkKKyAgICAgICAgICAgICAgYmRlbHRhID0gYmFzZV9kZWx0YTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBwcGVtIDwgMzAgKQorICAgICAgICAgICAgICBiZGVsdGEgPSAoIGJhc2VfZGVsdGEgKiAoRlRfUG9zKSggMzAgLSBwcGVtICkgKSAvIDIwOworCisgICAgICAgICAgICBpZiAoIGJkZWx0YSA8IDAgKQorICAgICAgICAgICAgICBiZGVsdGEgPSAtYmRlbHRhOworICAgICAgICAgIH0KKworICAgICAgICAgIGRpc3QgPSAoIGRpc3QgLSBiZGVsdGEgKyAzMiApICYgfjYzOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIGVsc2UKQEAgLTIyNDcsMTEgKzI3NzMsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIGJhc2VfZWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIHN0ZW1fZWRnZSApCiAgIHsKLSAgICBGVF9Qb3MgIGRpc3QgPSBzdGVtX2VkZ2UtPm9wb3MgLSBiYXNlX2VkZ2UtPm9wb3M7CisgICAgRlRfUG9zICBkaXN0LCBiYXNlX2RlbHRhOworICAgIEZUX1BvcyAgZml0dGVkX3dpZHRoOwogCi0gICAgRlRfUG9zICBmaXR0ZWRfd2lkdGggPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIGRpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfZWRnZS0+ZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW1fZWRnZS0+ZmxhZ3MgKTsKKworICAgIGRpc3QgICAgICAgPSBzdGVtX2VkZ2UtPm9wb3MgLSBiYXNlX2VkZ2UtPm9wb3M7CisgICAgYmFzZV9kZWx0YSA9IGJhc2VfZWRnZS0+cG9zIC0gYmFzZV9lZGdlLT5vcG9zOworCisgICAgZml0dGVkX3dpZHRoID0gYWZfbGF0aW5fY29tcHV0ZV9zdGVtX3dpZHRoKCBoaW50cywgZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCwgYmFzZV9kZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfZWRnZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtX2VkZ2UtPmZsYWdzICk7CiAKIAogICAgIHN0ZW1fZWRnZS0+cG9zID0gYmFzZV9lZGdlLT5wb3MgKyBmaXR0ZWRfd2lkdGg7CkBAIC0yMzAyLDggKzI4MzQsMTQgQEAKICAgICBBRl9FZGdlICAgICAgIGFuY2hvciAgICAgPSBOVUxMOwogICAgIEZUX0ludCAgICAgICAgaGFzX3NlcmlmcyA9IDA7CiAKKyAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MgID0gaGludHMtPm1ldHJpY3MtPnN0eWxlX2NsYXNzOworICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisKKyAgICBGVF9Cb29sICB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPSAwOworCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICBGVF9VSW50ICAgICAgIG51bV9hY3Rpb25zID0gMDsKKyAgICBGVF9VSW50ICBudW1fYWN0aW9ucyA9IDA7CiAjZW5kaWYKIAogCkBAIC0yMzExLDYgKzI4NDksOSBAQAogICAgICAgICAgICAgICAgIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbaGludHMtPm1ldHJpY3MtPnN0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CiAKKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCApCisgICAgICB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPSBzY3JpcHRfY2xhc3MtPnRvcF90b19ib3R0b21faGludGluZzsKKwogICAgIC8qIHdlIGJlZ2luIGJ5IGFsaWduaW5nIGFsbCBzdGVtcyByZWxhdGl2ZSB0byB0aGUgYmx1ZSB6b25lICovCiAgICAgLyogaWYgbmVlZGVkIC0tIHRoYXQncyBvbmx5IGZvciBob3Jpem9udGFsIGVkZ2VzICAgICAgICAgICAgKi8KIApAQCAtMjQ0Niw3ICsyOTg3LDggQEAKIAogCiAgICAgICAgIG9yZ19sZW4gPSBlZGdlMi0+b3BvcyAtIGVkZ2UtPm9wb3M7Ci0gICAgICAgIGN1cl9sZW4gPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIG9yZ19sZW4sCisgICAgICAgIGN1cl9sZW4gPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ19sZW4sIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlMi0+ZmxhZ3MgKTsKIApAQCAtMjUxNSw3ICszMDU3LDggQEAKICAgICAgICAgb3JnX2xlbiAgICA9IGVkZ2UyLT5vcG9zIC0gZWRnZS0+b3BvczsKICAgICAgICAgb3JnX2NlbnRlciA9IG9yZ19wb3MgKyAoIG9yZ19sZW4gPj4gMSApOwogCi0gICAgICAgIGN1cl9sZW4gPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIG9yZ19sZW4sCisgICAgICAgIGN1cl9sZW4gPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ19sZW4sIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlMi0+ZmxhZ3MgKTsKIApAQCAtMjU3NSw3ICszMTE4LDggQEAKICAgICAgICAgICBvcmdfbGVuICAgID0gZWRnZTItPm9wb3MgLSBlZGdlLT5vcG9zOwogICAgICAgICAgIG9yZ19jZW50ZXIgPSBvcmdfcG9zICsgKCBvcmdfbGVuID4+IDEgKTsKIAotICAgICAgICAgIGN1cl9sZW4gICAgPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIG9yZ19sZW4sCisgICAgICAgICAgY3VyX2xlbiAgICA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdfbGVuLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UyLT5mbGFncyApOwogCkBAIC0yNjA2LDE2ICszMTUwLDI1IEBACiAgICAgICAgIGVkZ2UtPmZsYWdzICB8PSBBRl9FREdFX0RPTkU7CiAgICAgICAgIGVkZ2UyLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CiAKLSAgICAgICAgaWYgKCBlZGdlID4gZWRnZXMgJiYgZWRnZS0+cG9zIDwgZWRnZVstMV0ucG9zICkKKyAgICAgICAgaWYgKCBlZGdlID4gZWRnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICggdG9wX3RvX2JvdHRvbV9oaW50aW5nID8gKCBlZGdlLT5wb3MgPiBlZGdlWy0xXS5wb3MgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBlZGdlLT5wb3MgPCBlZGdlWy0xXS5wb3MgKSApICkKICAgICAgICAgeworICAgICAgICAgIC8qIGRvbid0IG1vdmUgaWYgc3RlbSB3b3VsZCAoYWxtb3N0KSBkaXNhcHBlYXIgb3RoZXJ3aXNlOyAqLworICAgICAgICAgIC8qIHRoZSBhZC1ob2MgdmFsdWUgMTYgY29ycmVzcG9uZHMgdG8gMS80cHggICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggZWRnZS0+bGluayAmJiBGVF9BQlMoIGVkZ2UtPmxpbmstPnBvcyAtIGVkZ2VbLTFdLnBvcyApID4gMTYgKQorICAgICAgICAgIHsKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsIGVkZ2UtPnBvcyAvIDY0LjAsIGVkZ2VbLTFdLnBvcyAvIDY0LjAgKSk7CisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCT1VORDogZWRnZSAlZCAocG9zPSUuMmYpIG1vdmVkIHRvICUuMmZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZVstMV0ucG9zIC8gNjQuMCApKTsKIAotICAgICAgICAgIG51bV9hY3Rpb25zKys7CisgICAgICAgICAgICBudW1fYWN0aW9ucysrOwogI2VuZGlmCiAKLSAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWy0xXS5wb3M7CisgICAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWy0xXS5wb3M7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMjc2NywyOSArMzMyMCw0NiBAQAogI2VuZGlmCiAgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKIAotICAgICAgICBpZiAoIGVkZ2UgPiBlZGdlcyAmJiBlZGdlLT5wb3MgPCBlZGdlWy0xXS5wb3MgKQorICAgICAgICBpZiAoIGVkZ2UgPiBlZGdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPyAoIGVkZ2UtPnBvcyA+IGVkZ2VbLTFdLnBvcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGVkZ2UtPnBvcyA8IGVkZ2VbLTFdLnBvcyApICkgKQogICAgICAgICB7CisgICAgICAgICAgLyogZG9uJ3QgbW92ZSBpZiBzdGVtIHdvdWxkIChhbG1vc3QpIGRpc2FwcGVhciBvdGhlcndpc2U7ICovCisgICAgICAgICAgLyogdGhlIGFkLWhvYyB2YWx1ZSAxNiBjb3JyZXNwb25kcyB0byAxLzRweCAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBlZGdlLT5saW5rICYmIEZUX0FCUyggZWRnZS0+bGluay0+cG9zIC0gZWRnZVstMV0ucG9zICkgPiAxNiApCisgICAgICAgICAgewogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAotICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+cG9zIC8gNjQuMCwgZWRnZVstMV0ucG9zIC8gNjQuMCApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlWy0xXS5wb3MgLyA2NC4wICkpOwogCi0gICAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyAgICAgICAgICAgIG51bV9hY3Rpb25zKys7CiAjZW5kaWYKLSAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWy0xXS5wb3M7CisgICAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWy0xXS5wb3M7CisgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBlZGdlICsgMSA8IGVkZ2VfbGltaXQgICAgICAgICYmCi0gICAgICAgICAgICAgZWRnZVsxXS5mbGFncyAmIEFGX0VER0VfRE9ORSAmJgotICAgICAgICAgICAgIGVkZ2UtPnBvcyA+IGVkZ2VbMV0ucG9zICAgICAgKQorICAgICAgICBpZiAoIGVkZ2UgKyAxIDwgZWRnZV9saW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBlZGdlWzFdLmZsYWdzICYgQUZfRURHRV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPyAoIGVkZ2UtPnBvcyA8IGVkZ2VbMV0ucG9zICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggZWRnZS0+cG9zID4gZWRnZVsxXS5wb3MgKSApICkKICAgICAgICAgeworICAgICAgICAgIC8qIGRvbid0IG1vdmUgaWYgc3RlbSB3b3VsZCAoYWxtb3N0KSBkaXNhcHBlYXIgb3RoZXJ3aXNlOyAqLworICAgICAgICAgIC8qIHRoZSBhZC1ob2MgdmFsdWUgMTYgY29ycmVzcG9uZHMgdG8gMS80cHggICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggZWRnZS0+bGluayAmJiBGVF9BQlMoIGVkZ2UtPmxpbmstPnBvcyAtIGVkZ2VbLTFdLnBvcyApID4gMTYgKQorICAgICAgICAgIHsKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsIGVkZ2UtPnBvcyAvIDY0LjAsIGVkZ2VbMV0ucG9zIC8gNjQuMCApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlWzFdLnBvcyAvIDY0LjAgKSk7CiAKLSAgICAgICAgICBudW1fYWN0aW9ucysrOworICAgICAgICAgICAgbnVtX2FjdGlvbnMrKzsKICNlbmRpZgogCi0gICAgICAgICAgZWRnZS0+cG9zID0gZWRnZVsxXS5wb3M7CisgICAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWzFdLnBvczsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0yODA1LDcgKzMzNzUsOCBAQAogICAvKiBBcHBseSB0aGUgY29tcGxldGUgaGludGluZyBhbGdvcml0aG0gdG8gYSBsYXRpbiBnbHlwaC4gKi8KIAogICBzdGF0aWMgRlRfRXJyb3IKLSAgYWZfbGF0aW5faGludHNfYXBwbHkoIEFGX0dseXBoSGludHMgICAgaGludHMsCisgIGFmX2xhdGluX2hpbnRzX2FwcGx5KCBGVF9VSW50ICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfR2x5cGhIaW50cyAgICBoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcyApCiAgIHsKQEAgLTI4NDcsNyArMzQxOCw5IEBACiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICBhZl9sYXRpbl9oaW50c19jb21wdXRlX2JsdWVfZWRnZXMoIGhpbnRzLCBtZXRyaWNzICk7CisgICAgICAvKiBhcHBseSBibHVlIHpvbmVzIHRvIGJhc2UgY2hhcmFjdGVycyBvbmx5ICovCisgICAgICBpZiAoICEoIG1ldHJpY3MtPnJvb3QuZ2xvYmFscy0+Z2x5cGhfc3R5bGVzW2dseXBoX2luZGV4XSAmIEFGX05PTkJBU0UgKSApCisgICAgICAgIGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfYmx1ZV9lZGdlcyggaGludHMsIG1ldHJpY3MgKTsKICAgICB9CiAKICAgICAvKiBncmlkLWZpdCB0aGUgb3V0bGluZSAqLwpAQCAtMjkwNyw2ICszNDgwLDcgQEAKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0TWV0cmljc0Z1bmMpIGFmX2xhdGluX21ldHJpY3NfaW5pdCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jKWFmX2xhdGluX21ldHJpY3Nfc2NhbGUsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jKSBOVUxMLAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0dldFN0ZFdpZHRoc0Z1bmMpYWZfbGF0aW5fZ2V0X3N0YW5kYXJkX3dpZHRocywKIAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRIaW50c0Z1bmMpICAgYWZfbGF0aW5faGludHNfaW5pdCwKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9BcHBseUhpbnRzRnVuYykgIGFmX2xhdGluX2hpbnRzX2FwcGx5CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmggYi9zcmMvYXV0b2ZpdC9hZmxhdGluLmgKaW5kZXggNjg1NTQ5Mi4uZmU2YmJkOCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbi5oCisrKyBiL3NyYy9hdXRvZml0L2FmbGF0aW4uaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZMQVRJTl9IX18KLSNkZWZpbmUgX19BRkxBVElOX0hfXworI2lmbmRlZiBBRkxBVElOX0hfCisjZGVmaW5lIEFGTEFUSU5fSF8KIAogI2luY2x1ZGUgImFmaGludHMuaCIKIApAQCAtNTMsNiArNTMsOCBAQAogCiAjZGVmaW5lIEFGX0xBVElOX0lTX1RPUF9CTFVFKCBiICkgXAogICAgICAgICAgICggKGIpLT5wcm9wZXJ0aWVzICYgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgKQorI2RlZmluZSBBRl9MQVRJTl9JU19TVUJfVE9QX0JMVUUoIGIgKSBcCisgICAgICAgICAgKCAoYiktPnByb3BlcnRpZXMgJiBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1NVQl9UT1AgKQogI2RlZmluZSBBRl9MQVRJTl9JU19ORVVUUkFMX0JMVUUoIGIgKSBcCiAgICAgICAgICAgKCAoYiktPnByb3BlcnRpZXMgJiBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgKQogI2RlZmluZSBBRl9MQVRJTl9JU19YX0hFSUdIVF9CTFVFKCBiICkgXApAQCAtNjUsOCArNjcsMTAgQEAKIAogI2RlZmluZSBBRl9MQVRJTl9CTFVFX0FDVElWRSAgICAgICggMVUgPDwgMCApIC8qIHpvbmUgaGVpZ2h0IGlzIDw9IDMvNHB4ICAgKi8KICNkZWZpbmUgQUZfTEFUSU5fQkxVRV9UT1AgICAgICAgICAoIDFVIDw8IDEgKSAvKiB3ZSBoYXZlIGEgdG9wIGJsdWUgem9uZSAgICovCi0jZGVmaW5lIEFGX0xBVElOX0JMVUVfTkVVVFJBTCAgICAgKCAxVSA8PCAyICkgLyogd2UgaGF2ZSBuZXV0cmFsIGJsdWUgem9uZSAqLwotI2RlZmluZSBBRl9MQVRJTl9CTFVFX0FESlVTVE1FTlQgICggMVUgPDwgMyApIC8qIHVzZWQgZm9yIHNjYWxlIGFkanVzdG1lbnQgKi8KKyNkZWZpbmUgQUZfTEFUSU5fQkxVRV9TVUJfVE9QICAgICAoIDFVIDw8IDIgKSAvKiB3ZSBoYXZlIGEgc3Vic2NyaXB0IHRvcCAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmx1ZSB6b25lICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBRl9MQVRJTl9CTFVFX05FVVRSQUwgICAgICggMVUgPDwgMyApIC8qIHdlIGhhdmUgbmV1dHJhbCBibHVlIHpvbmUgKi8KKyNkZWZpbmUgQUZfTEFUSU5fQkxVRV9BREpVU1RNRU5UICAoIDFVIDw8IDQgKSAvKiB1c2VkIGZvciBzY2FsZSBhZGp1c3RtZW50ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3B0aW1pemF0aW9uICAgICAgICAgICAgICAqLwogCiAKQEAgLTc0LDYgKzc4LDggQEAKICAgewogICAgIEFGX1dpZHRoUmVjICByZWY7CiAgICAgQUZfV2lkdGhSZWMgIHNob290OworICAgIEZUX1BvcyAgICAgICBhc2NlbmRlcjsKKyAgICBGVF9Qb3MgICAgICAgZGVzY2VuZGVyOwogICAgIEZUX1VJbnQgICAgICBmbGFnczsKIAogICB9IEFGX0xhdGluQmx1ZVJlYywgKkFGX0xhdGluQmx1ZTsKQEAgLTE4Miw3ICsxODgsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGTEFUSU5fSF9fICovCisjZW5kaWYgLyogQUZMQVRJTl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmMKaW5kZXggYWM5ZjkzMy4uNWRiNGE0MSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYworKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5jCkBAIC0xLDEwICsxLDE1IEBACisvKiBBVFRFTlRJT046IFRoaXMgZmlsZSBkb2Vzbid0IGNvbXBpbGUuICBJdCBpcyBvbmx5IGhlcmUgYXMgYSByZWZlcmVuY2UgKi8KKy8qICAgICAgICAgICAgb2YgYW4gYWx0ZXJuYXRpdmUgbGF0aW4gaGludGluZyBhbGdvcml0aG0gdGhhdCB3YXMgYWx3YXlzICAqLworLyogICAgICAgICAgICBtYXJrZWQgYXMgZXhwZXJpbWVudGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgYWZsYXRpbjIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02OTMsNiArNjk4LDIyIEBACiAgIH0KIAogCisgIC8qIEV4dHJhY3Qgc3RhbmRhcmRfd2lkdGggZnJvbSB3cml0aW5nIHN5c3RlbS9zY3JpcHQgc3BlY2lmaWMgKi8KKyAgLyogbWV0cmljcyBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xhdGluMl9nZXRfc3RhbmRhcmRfd2lkdGhzKCBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgICAgIHN0ZEhXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICAgICBzdGRWVyApCisgIHsKKyAgICBpZiAoIHN0ZEhXICkKKyAgICAgICpzdGRIVyA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLnN0YW5kYXJkX3dpZHRoOworCisgICAgaWYgKCBzdGRWVyApCisgICAgICAqc3RkVlcgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5zdGFuZGFyZF93aWR0aDsKKyAgfQorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KQEAgLTExNzksNyArMTIwMCw3IEBACiAKICAgICAgICAgLyogaW5zZXJ0IGEgbmV3IGVkZ2UgaW4gdGhlIGxpc3QgYW5kICovCiAgICAgICAgIC8qIHNvcnQgYWNjb3JkaW5nIHRvIHRoZSBwb3NpdGlvbiAgICAqLwotICAgICAgICBlcnJvciA9IGFmX2F4aXNfaGludHNfbmV3X2VkZ2UoIGF4aXMsIHNlZy0+cG9zLCBzZWctPmRpciwKKyAgICAgICAgZXJyb3IgPSBhZl9heGlzX2hpbnRzX25ld19lZGdlKCBheGlzLCBzZWctPnBvcywgc2VnLT5kaXIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCAmZWRnZSApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC0yMzAwLDEzICsyMzIxLDE2IEBACiAKIAogICBzdGF0aWMgRlRfRXJyb3IKLSAgYWZfbGF0aW4yX2hpbnRzX2FwcGx5KCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICBhZl9sYXRpbjJfaGludHNfYXBwbHkoIEZUX1VJbnQgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgQUZfR2x5cGhIaW50cyAgICBoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvcjsKICAgICBpbnQgICAgICAgZGltOwogCisgICAgRlRfVU5VU0VEKCBnbHlwaF9pbmRleCApOworCiAKICAgICBlcnJvciA9IGFmX2dseXBoX2hpbnRzX3JlbG9hZCggaGludHMsIG91dGxpbmUgKTsKICAgICBpZiAoIGVycm9yICkKQEAgLTIzODksNiArMjQxMyw3IEBACiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdE1ldHJpY3NGdW5jKSBhZl9sYXRpbjJfbWV0cmljc19pbml0LAogICAgIChBRl9Xcml0aW5nU3lzdGVtX1NjYWxlTWV0cmljc0Z1bmMpYWZfbGF0aW4yX21ldHJpY3Nfc2NhbGUsCiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jKSBOVUxMLAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0dldFN0ZFdpZHRoc0Z1bmMpYWZfbGF0aW4yX2dldF9zdGFuZGFyZF93aWR0aHMsCiAKICAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIGFmX2xhdGluMl9oaW50c19pbml0LAogICAgIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKSAgYWZfbGF0aW4yX2hpbnRzX2FwcGx5CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oIGIvc3JjL2F1dG9maXQvYWZsYXRpbjIuaAppbmRleCA5MzI2NzUzLi5mODNmNzA0IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oCisrKyBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmgKQEAgLTEsMyArMSw4IEBACisvKiBBVFRFTlRJT046IFRoaXMgZmlsZSBkb2Vzbid0IGNvbXBpbGUuICBJdCBpcyBvbmx5IGhlcmUgYXMgYSByZWZlcmVuY2UgKi8KKy8qICAgICAgICAgICAgb2YgYW4gYWx0ZXJuYXRpdmUgbGF0aW4gaGludGluZyBhbGdvcml0aG0gdGhhdCB3YXMgYWx3YXlzICAqLworLyogICAgICAgICAgICBtYXJrZWQgYXMgZXhwZXJpbWVudGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgYWZsYXRpbjIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNSw3ICsxMCw3IEBACiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDggKzIyLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGTEFUSU4yX0hfXwotI2RlZmluZSBfX0FGTEFUSU4yX0hfXworI2lmbmRlZiBBRkxBVElOMl9IXworI2RlZmluZSBBRkxBVElOMl9IXwogCiAjaW5jbHVkZSAiYWZoaW50cy5oIgogCkBAIC0zNSw3ICs0MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQUZMQVRJTl9IX18gKi8KKyNlbmRpZiAvKiBBRkxBVElOX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuYwppbmRleCA3YzJmYTdjLi4yNmJiYTA2IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jCisrKyBiL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgZ2x5cGggbG9hZGluZyByb3V0aW5lcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJhZm1vZHVsZS5oIgogI2luY2x1ZGUgImFmcGljLmgiCiAKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorCiAKICAgLyogSW5pdGlhbGl6ZSBnbHlwaCBsb2FkZXIuICovCiAKQEAgLTc2LDYgKzc4LDE0IEBACiAgIH0KIAogCisjZGVmaW5lIGFmX2ludFRvRml4ZWQoIGkgKSBcCisgICAgICAgICAgKCAoRlRfRml4ZWQpKCAoRlRfVUludDMyKShpKSA8PCAxNiApICkKKyNkZWZpbmUgYWZfZml4ZWRUb0ludCggeCApIFwKKyAgICAgICAgICAoIChGVF9TaG9ydCkoICggKEZUX1VJbnQzMikoeCkgKyAweDgwMDBVICkgPj4gMTYgKSApCisjZGVmaW5lIGFmX2Zsb2F0VG9GaXhlZCggZiApIFwKKyAgICAgICAgICAoIChGVF9GaXhlZCkoIChmKSAqIDY1NTM2LjAgKyAwLjUgKSApCisKKwogICAvKiBEbyB0aGUgbWFpbiB3b3JrIG9mIGBhZl9sb2FkZXJfbG9hZF9nbHlwaCcuICBOb3RlIHRoYXQgd2UgbmV2ZXIgICAqLwogICAvKiBoYXZlIHRvIGRlYWwgd2l0aCBjb21wb3NpdGUgZ2x5cGhzIGFzIHRob3NlIGdldCBsb2FkZWQgaW50byAgICAgICAqLwogICAvKiBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSBieSB0aGUgcmVjdXJzZWQgYEZUX0xvYWRfR2x5cGgnIGZ1bmN0aW9uLiAqLwpAQCAtODgsNiArOTgsOCBAQAogICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGxvYWRfZmxhZ3MgKQogICB7CisgICAgQUZfTW9kdWxlICBtb2R1bGUgPSBsb2FkZXItPmdsb2JhbHMtPm1vZHVsZTsKKwogICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yOwogICAgIEZUX0ZhY2UgICAgICAgICAgIGZhY2UgICAgID0gbG9hZGVyLT5mYWNlOwogICAgIEFGX1N0eWxlTWV0cmljcyAgIG1ldHJpY3MgID0gbG9hZGVyLT5tZXRyaWNzOwpAQCAtMTAzLDYgKzExNSwxMzIgQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAorICAgIC8qCisgICAgICogQXBwbHkgc3RlbSBkYXJrZW5pbmcgKGVtYm9sZGVuaW5nKSBoZXJlIGJlZm9yZSBoaW50cyBhcmUgYXBwbGllZCB0bworICAgICAqIHRoZSBvdXRsaW5lLiAgR2x5cGhzIGFyZSBzY2FsZWQgZG93biBwcm9wb3J0aW9uYWxseSB0byB0aGUKKyAgICAgKiBlbWJvbGRlbmluZyBzbyB0aGF0IGN1cnZlIHBvaW50cyBkb24ndCBmYWxsIG91dHNpZGUgdGhlaXIgcHJlY29tcHV0ZWQKKyAgICAgKiBibHVlIHpvbmVzLgorICAgICAqCisgICAgICogQW55IGVtYm9sZGVuaW5nIGRvbmUgYnkgdGhlIGZvbnQgZHJpdmVyIChlLmcuLCB0aGUgQ0ZGIGRyaXZlcikKKyAgICAgKiBkb2Vzbid0IHJlYWNoIGhlcmUgYmVjYXVzZSB0aGUgYXV0b2hpbnRlciBsb2FkcyB0aGUgdW5wcm9jZXNzZWQKKyAgICAgKiBnbHlwaHMgaW4gZm9udCB1bml0cyBmb3IgYW5hbHlzaXMgKGZ1bmN0aW9ucyBgYWZfKl9tZXRyaWNzX2luaXRfKicpCisgICAgICogYW5kIHRoZW4gYWJvdmUgdG8gcHJlcGFyZSBpdCBmb3IgdGhlIHJhc3Rlcml6ZXJzIGJ5IGl0c2VsZiwKKyAgICAgKiBpbmRlcGVuZGVudGx5IG9mIHRoZSBmb250IGRyaXZlci4gIFNvIGVtYm9sZGVuaW5nIG11c3QgYmUgZG9uZSBoZXJlLAorICAgICAqIHdpdGhpbiB0aGUgYXV0b2hpbnRlci4KKyAgICAgKgorICAgICAqIEFsbCBnbHlwaHMgdG8gYmUgYXV0b2hpbnRlZCBwYXNzIHRocm91Z2ggaGVyZSBvbmUgYnkgb25lLiAgVGhlCisgICAgICogc3RhbmRhcmQgd2lkdGhzIGNhbiB0aGVyZWZvcmUgY2hhbmdlIGZyb20gb25lIGdseXBoIHRvIHRoZSBuZXh0LAorICAgICAqIGRlcGVuZGluZyBvbiB3aGF0IHNjcmlwdCBhIGdseXBoIGlzIGFzc2lnbmVkIHRvIChlYWNoIHNjcmlwdCBoYXMgaXRzCisgICAgICogb3duIHNldCBvZiBzdGFuZGFyZCB3aWR0aHMgYW5kIG90aGVyIG1ldHJpY3MpLiAgVGhlIGRhcmtlbmluZyBhbW91bnQKKyAgICAgKiBtdXN0IHRoZXJlZm9yZSBiZSByZWNvbXB1dGVkIGZvciBlYWNoIHNpemUgYW5kCisgICAgICogYHN0YW5kYXJkX3t2ZXJ0aWNhbCxob3Jpem9udGFsfV93aWR0aCcgY2hhbmdlLgorICAgICAqLworICAgIGlmICggIW1vZHVsZS0+bm9fc3RlbV9kYXJrZW5pbmcgKQorICAgIHsKKyAgICAgIEFGX0ZhY2VHbG9iYWxzICAgICAgICAgZ2xvYmFscyA9IGxvYWRlci0+Z2xvYmFsczsKKyAgICAgIEFGX1dyaXRpbmdTeXN0ZW1DbGFzcyAgd3JpdGluZ19zeXN0ZW1fY2xhc3M7CisKKyAgICAgIEZUX1BvcyAgc3RkVlcgPSAwOworICAgICAgRlRfUG9zICBzdGRIVyA9IDA7CisKKyAgICAgIEZUX0Jvb2wgIHNpemVfY2hhbmdlZCA9IGZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IGdsb2JhbHMtPnN0ZW1fZGFya2VuaW5nX2Zvcl9wcGVtOworCisgICAgICBGVF9GaXhlZCAgZW1fc2l6ZSAgPSBhZl9pbnRUb0ZpeGVkKCBmYWNlLT51bml0c19wZXJfRU0gKTsKKyAgICAgIEZUX0ZpeGVkICBlbV9yYXRpbyA9IEZUX0RpdkZpeCggYWZfaW50VG9GaXhlZCggMTAwMCApLCBlbV9zaXplICk7CisKKyAgICAgIEZUX01hdHJpeCAgc2NhbGVfZG93bl9tYXRyaXggPSB7IDB4MTAwMDBMLCAwLCAwLCAweDEwMDAwTCB9OworCisKKyAgICAgIC8qIFNraXAgc3RlbSBkYXJrZW5pbmcgZm9yIGJyb2tlbiBmb250cy4gKi8KKyAgICAgIGlmICggIWZhY2UtPnVuaXRzX3Blcl9FTSApCisgICAgICAgIGdvdG8gQWZ0ZXJfRW1ib2xkZW5pbmc7CisKKyAgICAgIC8qCisgICAgICAgKiBXZSBkZXBlbmQgb24gdGhlIHdyaXRpbmcgc3lzdGVtIChzY3JpcHQgYW5hbHl6ZXJzKSB0byBzdXBwbHkKKyAgICAgICAqIHN0YW5kYXJkIHdpZHRocyBmb3IgdGhlIHNjcmlwdCBvZiB0aGUgZ2x5cGggd2UgYXJlIGxvb2tpbmcgYXQuICBJZgorICAgICAgICogaXQgY2FuJ3QgZGVsaXZlciwgc3RlbSBkYXJrZW5pbmcgaXMgZWZmZWN0aXZlbHkgZGlzYWJsZWQuCisgICAgICAgKi8KKyAgICAgIHdyaXRpbmdfc3lzdGVtX2NsYXNzID0KKyAgICAgICAgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVRbbWV0cmljcy0+c3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKKworICAgICAgaWYgKCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfbWV0cmljc19nZXRzdGR3ICkKKyAgICAgICAgd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX21ldHJpY3NfZ2V0c3RkdyggbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZEhXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RkVlcgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ290byBBZnRlcl9FbWJvbGRlbmluZzsKKworCisgICAgICBpZiAoIHNpemVfY2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCBzdGRWVyA+IDAgJiYgc3RkVlcgIT0gZ2xvYmFscy0+c3RhbmRhcmRfdmVydGljYWxfd2lkdGggKSApCisgICAgICB7CisgICAgICAgIEZUX0ZpeGVkICBkYXJrZW5fYnlfZm9udF91bml0c194LCBkYXJrZW5feDsKKworCisgICAgICAgIGRhcmtlbl9ieV9mb250X3VuaXRzX3ggPQorICAgICAgICAgIGFmX2ludFRvRml4ZWQoIGFmX2xvYWRlcl9jb21wdXRlX2RhcmtlbmluZyggbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZFZXICkgKTsKKyAgICAgICAgZGFya2VuX3ggPSBGVF9EaXZGaXgoIEZUX011bEZpeCggZGFya2VuX2J5X2ZvbnRfdW5pdHNfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0cmljcy54X3NjYWxlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbV9yYXRpbyApOworCisgICAgICAgIGdsb2JhbHMtPnN0YW5kYXJkX3ZlcnRpY2FsX3dpZHRoID0gc3RkVlc7CisgICAgICAgIGdsb2JhbHMtPnN0ZW1fZGFya2VuaW5nX2Zvcl9wcGVtID0gZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisgICAgICAgIGdsb2JhbHMtPmRhcmtlbl94ICAgICAgICAgICAgICAgID0gYWZfZml4ZWRUb0ludCggZGFya2VuX3ggKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBzaXplX2NoYW5nZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCBzdGRIVyA+IDAgJiYgc3RkSFcgIT0gZ2xvYmFscy0+c3RhbmRhcmRfaG9yaXpvbnRhbF93aWR0aCApICkKKyAgICAgIHsKKyAgICAgICAgRlRfRml4ZWQgIGRhcmtlbl9ieV9mb250X3VuaXRzX3ksIGRhcmtlbl95OworCisKKyAgICAgICAgZGFya2VuX2J5X2ZvbnRfdW5pdHNfeSA9CisgICAgICAgICAgYWZfaW50VG9GaXhlZCggYWZfbG9hZGVyX2NvbXB1dGVfZGFya2VuaW5nKCBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkSFcgKSApOworICAgICAgICBkYXJrZW5feSA9IEZUX0RpdkZpeCggRlRfTXVsRml4KCBkYXJrZW5fYnlfZm9udF91bml0c195LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnlfc2NhbGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtX3JhdGlvICk7CisKKyAgICAgICAgZ2xvYmFscy0+c3RhbmRhcmRfaG9yaXpvbnRhbF93aWR0aCA9IHN0ZEhXOworICAgICAgICBnbG9iYWxzLT5zdGVtX2RhcmtlbmluZ19mb3JfcHBlbSAgID0gZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisgICAgICAgIGdsb2JhbHMtPmRhcmtlbl95ICAgICAgICAgICAgICAgICAgPSBhZl9maXhlZFRvSW50KCBkYXJrZW5feSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFNjYWxlIG91dGxpbmVzIGRvd24gb24gdGhlIFktYXhpcyB0byBrZWVwIHRoZW0gaW5zaWRlIHRoZWlyIGJsdWUKKyAgICAgICAgICogem9uZXMuICBUaGUgc3Ryb25nZXIgdGhlIGVtYm9sZGVuaW5nLCB0aGUgc3Ryb25nZXIgdGhlCisgICAgICAgICAqIGRvd25zY2FsaW5nIChwbHVzIGhldXJpc3RpY2FsIHBhZGRpbmcgdG8gcHJldmVudCBvdXRsaW5lcyBzdGlsbAorICAgICAgICAgKiBmYWxsaW5nIG91dCB0aGVpciB6b25lcyBkdWUgdG8gcm91bmRpbmcpLgorICAgICAgICAgKgorICAgICAgICAgKiBSZWFzb246IGBGVF9PdXRsaW5lX0VtYm9sZGVuJyB3b3JrcyBieSBzaGlmdGluZyB0aGUgcmlnaHRtb3N0CisgICAgICAgICAqIHBvaW50cyBvZiBzdGVtcyBmYXJ0aGVyIHRvIHRoZSByaWdodCwgYW5kIHRvcG1vc3QgcG9pbnRzIGZhcnRoZXIKKyAgICAgICAgICogdXAuICBUaGlzIHBvc2l0aW9ucyBwb2ludHMgb24gdGhlIFktYXhpcyBvdXRzaWRlIHRoZWlyCisgICAgICAgICAqIHByZS1jb21wdXRlZCBibHVlIHpvbmVzIGFuZCBsZWFkcyB0byBkaXN0b3J0aW9uIHdoZW4gYXBwbHlpbmcgdGhlCisgICAgICAgICAqIGhpbnRzIGluIHRoZSBjb2RlIGZ1cnRoZXIgYmVsb3cuICBDb2RlIG91dHNpZGUgdGhpcyBlbWJvbGRlbmluZworICAgICAgICAgKiBibG9jayBkb2Vzbid0IGtub3cgd2UgYXJlIHByZXNlbnRpbmcgaXQgd2l0aCBtb2RpZmllZCBvdXRsaW5lcworICAgICAgICAgKiB0aGUgYW5hbHl6ZXIgZGlkbid0IHNlZSEKKyAgICAgICAgICoKKyAgICAgICAgICogQW4gdW5mb3J0dW5hdGUgc2lkZSBlZmZlY3Qgb2YgZG93bnNjYWxpbmcgaXMgdGhhdCB0aGUgZW1ib2xkZW5pbmcKKyAgICAgICAgICogZWZmZWN0IGlzIHNsaWdodGx5IGRlY3JlYXNlZC4gIFRoZSBsb3NzIGJlY29tZXMgbW9yZSBwcm9ub3VuY2VkCisgICAgICAgICAqIHZlcnN1cyB0aGUgQ0ZGIGRyaXZlciBhdCBzbWFsbGVyIHNpemVzLCBlLmcuLCBhdCA5cHBlbSBhbmQgYmVsb3cuCisgICAgICAgICAqLworICAgICAgICBnbG9iYWxzLT5zY2FsZV9kb3duX2ZhY3RvciA9CisgICAgICAgICAgRlRfRGl2Rml4KCBlbV9zaXplIC0gKCBkYXJrZW5fYnlfZm9udF91bml0c195ICsgYWZfaW50VG9GaXhlZCggOCApICksCisgICAgICAgICAgICAgICAgICAgICBlbV9zaXplICk7CisgICAgICB9CisKKyAgICAgIEZUX091dGxpbmVfRW1ib2xkZW5YWSggJnNsb3QtPm91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHMtPmRhcmtlbl94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzLT5kYXJrZW5feSApOworCisgICAgICBzY2FsZV9kb3duX21hdHJpeC55eSA9IGdsb2JhbHMtPnNjYWxlX2Rvd25fZmFjdG9yOworICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oICZzbG90LT5vdXRsaW5lLCAmc2NhbGVfZG93bl9tYXRyaXggKTsKKyAgICB9CisKKyAgQWZ0ZXJfRW1ib2xkZW5pbmc6CiAgICAgbG9hZGVyLT50cmFuc2Zvcm1lZCA9IGludGVybmFsLT5nbHlwaF90cmFuc2Zvcm1lZDsKICAgICBpZiAoIGxvYWRlci0+dHJhbnNmb3JtZWQgKQogICAgIHsKQEAgLTE1MCw3ICsyODgsOCBAQAogCiAKICAgICAgICAgaWYgKCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfaGludHNfYXBwbHkgKQotICAgICAgICAgIHdyaXRpbmdfc3lzdGVtX2NsYXNzLT5zdHlsZV9oaW50c19hcHBseSggaGludHMsCisgICAgICAgICAgd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX2hpbnRzX2FwcGx5KCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdsb2FkZXItPmJhc2Uub3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MgKTsKICAgICAgIH0KQEAgLTQwNCw0ICs1NDMsMTM0IEBACiAgIH0KIAogCisgIC8qCisgICAqIENvbXB1dGUgYW1vdW50IG9mIGZvbnQgdW5pdHMgdGhlIGZhY2Ugc2hvdWxkIGJlIGVtYm9sZGVuZWQgYnksIGluCisgICAqIGFuYWxvZ3kgdG8gdGhlIENGRiBkcml2ZXIncyBgY2YyX2NvbXB1dGVEYXJrZW5pbmcnIGZ1bmN0aW9uLiAgU2VlIHRoZXJlCisgICAqIGZvciBkZXRhaWxzIG9mIHRoZSBhbGdvcml0aG0uCisgICAqCisgICAqIFhYWDogQ3VycmVudGx5IGEgY3J1ZGUgYWRhcHRpb24gb2YgdGhlIG9yaWdpbmFsIGFsZ29yaXRobS4gIERvIGJldHRlcj8KKyAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfSW50MzIgKQorICBhZl9sb2FkZXJfY29tcHV0ZV9kYXJrZW5pbmcoIEFGX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgIHN0YW5kYXJkX3dpZHRoICkKKyAgeworICAgIEFGX01vZHVsZSAgbW9kdWxlID0gbG9hZGVyLT5nbG9iYWxzLT5tb2R1bGU7CisKKyAgICBGVF9VU2hvcnQgIHVuaXRzX3Blcl9FTTsKKyAgICBGVF9GaXhlZCAgIHBwZW0sIGVtX3JhdGlvOworICAgIEZUX0ZpeGVkICAgc3RlbV93aWR0aCwgc3RlbV93aWR0aF9wZXJfMTAwMCwgc2NhbGVkX3N0ZW0sIGRhcmtlbl9hbW91bnQ7CisgICAgRlRfSW50ICAgICBsb2dfYmFzZV8yOworICAgIEZUX0ludCAgICAgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0OworCisKKyAgICBwcGVtICAgICAgICAgPSBGVF9NQVgoIGFmX2ludFRvRml4ZWQoIDQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmX2ludFRvRml4ZWQoIGZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtICkgKTsKKyAgICB1bml0c19wZXJfRU0gPSBmYWNlLT51bml0c19wZXJfRU07CisKKyAgICBlbV9yYXRpbyA9IEZUX0RpdkZpeCggYWZfaW50VG9GaXhlZCggMTAwMCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhZl9pbnRUb0ZpeGVkICggdW5pdHNfcGVyX0VNICkgKTsKKyAgICBpZiAoIGVtX3JhdGlvIDwgYWZfZmxvYXRUb0ZpeGVkKCAuMDEgKSApCisgICAgeworICAgICAgLyogSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGRvbid0IGVtYm9sZGVuLiAqLworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgeDEgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbMF07CisgICAgeTEgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbMV07CisgICAgeDIgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbMl07CisgICAgeTIgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbM107CisgICAgeDMgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbNF07CisgICAgeTMgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbNV07CisgICAgeDQgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbNl07CisgICAgeTQgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbN107CisKKyAgICBpZiAoIHN0YW5kYXJkX3dpZHRoIDw9IDAgKQorICAgIHsKKyAgICAgIHN0ZW1fd2lkdGggICAgICAgICAgPSBhZl9pbnRUb0ZpeGVkKCA3NSApOyAvKiB0YWtlbiBmcm9tIGNmMmZvbnQuYyAqLworICAgICAgc3RlbV93aWR0aF9wZXJfMTAwMCA9IHN0ZW1fd2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzdGVtX3dpZHRoICAgICAgICAgID0gYWZfaW50VG9GaXhlZCggc3RhbmRhcmRfd2lkdGggKTsKKyAgICAgIHN0ZW1fd2lkdGhfcGVyXzEwMDAgPSBGVF9NdWxGaXgoIHN0ZW1fd2lkdGgsIGVtX3JhdGlvICk7CisgICAgfQorCisgICAgbG9nX2Jhc2VfMiA9IEZUX01TQiggKEZUX1VJbnQzMilzdGVtX3dpZHRoX3Blcl8xMDAwICkgKworICAgICAgICAgICAgICAgICBGVF9NU0IoIChGVF9VSW50MzIpcHBlbSApOworCisgICAgaWYgKCBsb2dfYmFzZV8yID49IDQ2ICkKKyAgICB7CisgICAgICAvKiBwb3NzaWJsZSBvdmVyZmxvdyAqLworICAgICAgc2NhbGVkX3N0ZW0gPSBhZl9pbnRUb0ZpeGVkKCB4NCApOworICAgIH0KKyAgICBlbHNlCisgICAgICBzY2FsZWRfc3RlbSA9IEZUX011bEZpeCggc3RlbV93aWR0aF9wZXJfMTAwMCwgcHBlbSApOworCisgICAgLyogbm93IGFwcGx5IHRoZSBkYXJrZW5pbmcgcGFyYW1ldGVycyAqLworICAgIGlmICggc2NhbGVkX3N0ZW0gPCBhZl9pbnRUb0ZpeGVkKCB4MSApICkKKyAgICAgIGRhcmtlbl9hbW91bnQgPSBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHkxICksIHBwZW0gKTsKKworICAgIGVsc2UgaWYgKCBzY2FsZWRfc3RlbSA8IGFmX2ludFRvRml4ZWQoIHgyICkgKQorICAgIHsKKyAgICAgIEZUX0ludCAgeGRlbHRhID0geDIgLSB4MTsKKyAgICAgIEZUX0ludCAgeWRlbHRhID0geTIgLSB5MTsKKyAgICAgIEZUX0ludCAgeCAgICAgID0gc3RlbV93aWR0aF9wZXJfMTAwMCAtCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0RpdkZpeCggYWZfaW50VG9GaXhlZCggeDEgKSwgcHBlbSApOworCisKKyAgICAgIGlmICggIXhkZWx0YSApCisgICAgICAgIGdvdG8gVHJ5X3gzOworCisgICAgICBkYXJrZW5fYW1vdW50ID0gRlRfTXVsRGl2KCB4LCB5ZGVsdGEsIHhkZWx0YSApICsKKyAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHkxICksIHBwZW0gKTsKKyAgICB9CisKKyAgICBlbHNlIGlmICggc2NhbGVkX3N0ZW0gPCBhZl9pbnRUb0ZpeGVkKCB4MyApICkKKyAgICB7CisgICAgVHJ5X3gzOgorICAgICAgeworICAgICAgICBGVF9JbnQgIHhkZWx0YSA9IHgzIC0geDI7CisgICAgICAgIEZUX0ludCAgeWRlbHRhID0geTMgLSB5MjsKKyAgICAgICAgRlRfSW50ICB4ICAgICAgPSBzdGVtX3dpZHRoX3Blcl8xMDAwIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHgyICksIHBwZW0gKTsKKworCisgICAgICAgIGlmICggIXhkZWx0YSApCisgICAgICAgICAgZ290byBUcnlfeDQ7CisKKyAgICAgICAgZGFya2VuX2Ftb3VudCA9IEZUX011bERpdiggeCwgeWRlbHRhLCB4ZGVsdGEgKSArCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHkyICksIHBwZW0gKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlIGlmICggc2NhbGVkX3N0ZW0gPCBhZl9pbnRUb0ZpeGVkKCB4NCApICkKKyAgICB7CisgICAgVHJ5X3g0OgorICAgICAgeworICAgICAgICBGVF9JbnQgIHhkZWx0YSA9IHg0IC0geDM7CisgICAgICAgIEZUX0ludCAgeWRlbHRhID0geTQgLSB5MzsKKyAgICAgICAgRlRfSW50ICB4ICAgICAgPSBzdGVtX3dpZHRoX3Blcl8xMDAwIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHgzICksIHBwZW0gKTsKKworCisgICAgICAgIGlmICggIXhkZWx0YSApCisgICAgICAgICAgZ290byBVc2VfeTQ7CisKKyAgICAgICAgZGFya2VuX2Ftb3VudCA9IEZUX011bERpdiggeCwgeWRlbHRhLCB4ZGVsdGEgKSArCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHkzICksIHBwZW0gKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlCisgICAgeworICAgIFVzZV95NDoKKyAgICAgIGRhcmtlbl9hbW91bnQgPSBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIHk0ICksIHBwZW0gKTsKKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IGRhcmtlbl9hbW91bnQgZnJvbSBwZXIgMTAwMCBlbSB0byB0cnVlIGNoYXJhY3RlciBzcGFjZS4gKi8KKyAgICByZXR1cm4gYWZfZml4ZWRUb0ludCggRlRfRGl2Rml4KCBkYXJrZW5fYW1vdW50LCBlbV9yYXRpbyApICk7CisgIH0KKworCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmggYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5oCmluZGV4IDM3Y2ZkMTQuLjAwNjJlYjkgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZMT0FERVJfSF9fCi0jZGVmaW5lIF9fQUZMT0FERVJfSF9fCisjaWZuZGVmIEFGTE9BREVSX0hfCisjZGVmaW5lIEFGTE9BREVSX0hfCiAKICNpbmNsdWRlICJhZmhpbnRzLmgiCiAjaW5jbHVkZSAiYWZtb2R1bGUuaCIKQEAgLTc1LDEyICs3NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGxvYWRfZmxhZ3MgKTsKIAorICBGVF9MT0NBTF9ERUYoIEZUX0ludDMyICkKKyAgYWZfbG9hZGVyX2NvbXB1dGVfZGFya2VuaW5nKCBBRl9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICBzdGFuZGFyZF93aWR0aCApOworCiAvKiAqLwogCiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQUZMT0FERVJfSF9fICovCisjZW5kaWYgLyogQUZMT0FERVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5jCmluZGV4IDhhZTQyNWMuLmU4ZjhmZjQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMKKysrIGIvc3JjL2F1dG9maXQvYWZtb2R1bGUuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsNiArMjUsMTAgQEAKICNpZmRlZiBGVF9ERUJVR19BVVRPRklUCiAKICNpZm5kZWYgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgZXh0ZXJuICJDIiB7CisjZW5kaWYKICAgZXh0ZXJuIHZvaWQKICAgYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgIHRvX3N0ZG91dCApOwpAQCAtMzQsNiArMzgsMTAgQEAKICAgZXh0ZXJuIHZvaWQKICAgYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgIHRvX3N0ZG91dCApOworI2lmZGVmIF9fY3BsdXNwbHVzCisgIH0KKyNlbmRpZgorCiAjZW5kaWYKIAogICBpbnQgIF9hZl9kZWJ1Z19kaXNhYmxlX2hvcnpfaGludHM7CkBAIC05OSwxOCArMTA3LDI5IEBACiAgIHN0YXRpYyBGVF9FcnJvcgogICBhZl9wcm9wZXJ0eV9zZXQoIEZUX01vZHVsZSAgICBmdF9tb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlICkKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHZhbHVlX2lzX3N0cmluZyApCiAgIHsKICAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKICAgICBBRl9Nb2R1bGUgIG1vZHVsZSA9IChBRl9Nb2R1bGUpZnRfbW9kdWxlOwogCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgIEZUX1VOVVNFRCggdmFsdWVfaXNfc3RyaW5nICk7CisjZW5kaWYKKwogCiAgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZmFsbGJhY2stc2NyaXB0IiApICkKICAgICB7Ci0gICAgICBGVF9VSW50KiAgZmFsbGJhY2tfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOworICAgICAgRlRfVUludCogIGZhbGxiYWNrX3NjcmlwdDsKKyAgICAgIEZUX1VJbnQgICBzczsKIAotICAgICAgRlRfVUludCAgc3M7CiAKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisjZW5kaWYKKworICAgICAgZmFsbGJhY2tfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOwogCiAgICAgICAvKiBXZSB0cmFuc2xhdGUgdGhlIGZhbGxiYWNrIHNjcmlwdCB0byBhIGZhbGxiYWNrIHN0eWxlIHRoYXQgdXNlcyAqLwogICAgICAgLyogYGZhbGxiYWNrLXNjcmlwdCcgYXMgaXRzIHNjcmlwdCBhbmQgYEFGX0NPVkVSQUdFX05PTkUnIGFzIGl0cyAgKi8KQEAgLTEzOSwxOSArMTU4LDMzIEBACiAgICAgfQogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZGVmYXVsdC1zY3JpcHQiICkgKQogICAgIHsKLSAgICAgIEZUX1VJbnQqICBkZWZhdWx0X3NjcmlwdCA9IChGVF9VSW50Kil2YWx1ZTsKKyAgICAgIEZUX1VJbnQqICBkZWZhdWx0X3NjcmlwdDsKIAogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworI2VuZGlmCisKKyAgICAgIGRlZmF1bHRfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOworCiAgICAgICBtb2R1bGUtPmRlZmF1bHRfc2NyaXB0ID0gKmRlZmF1bHRfc2NyaXB0OwogCiAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiaW5jcmVhc2UteC1oZWlnaHQiICkgKQogICAgIHsKLSAgICAgIEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0KiAgcHJvcCA9IChGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCopdmFsdWU7CisgICAgICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCogIHByb3A7CiAgICAgICBBRl9GYWNlR2xvYmFscyAgICAgICAgICAgIGdsb2JhbHM7CiAKIAorI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyNlbmRpZgorCisgICAgICBwcm9wID0gKEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0Kil2YWx1ZTsKKwogICAgICAgZXJyb3IgPSBhZl9wcm9wZXJ0eV9nZXRfZmFjZV9nbG9iYWxzKCBwcm9wLT5mYWNlLCAmZ2xvYmFscywgbW9kdWxlICk7CiAgICAgICBpZiAoICFlcnJvciApCiAgICAgICAgIGdsb2JhbHMtPmluY3JlYXNlX3hfaGVpZ2h0ID0gcHJvcC0+bGltaXQ7CkBAIC0xNjEsMTQgKzE5NCwxMjEgQEAKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgIndhcnBpbmciICkgKQogICAgIHsKLSAgICAgIEZUX0Jvb2wqICB3YXJwaW5nID0gKEZUX0Jvb2wqKXZhbHVlOworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcyA9IChjb25zdCBjaGFyKil2YWx1ZTsKKyAgICAgICAgbG9uZyAgICAgICAgIHcgPSBmdF9zdHJ0b2woIHMsIE5VTEwsIDEwICk7CiAKIAotICAgICAgbW9kdWxlLT53YXJwaW5nID0gKndhcnBpbmc7CisgICAgICAgIGlmICggdyA9PSAwICkKKyAgICAgICAgICBtb2R1bGUtPndhcnBpbmcgPSAwOworICAgICAgICBlbHNlIGlmICggdyA9PSAxICkKKyAgICAgICAgICBtb2R1bGUtPndhcnBpbmcgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIHsKKyAgICAgICAgRlRfQm9vbCogIHdhcnBpbmcgPSAoRlRfQm9vbCopdmFsdWU7CisKKworICAgICAgICBtb2R1bGUtPndhcnBpbmcgPSAqd2FycGluZzsKKyAgICAgIH0KIAogICAgICAgcmV0dXJuIGVycm9yOwogICAgIH0KICNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIgKi8KKyAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImRhcmtlbmluZy1wYXJhbWV0ZXJzIiApICkKKyAgICB7CisgICAgICBGVF9JbnQqICBkYXJrZW5fcGFyYW1zOworICAgICAgRlRfSW50ICAgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0OworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBGVF9JbnQgICBkcFs4XTsKKworCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBjaGFyKiAgICAgICAgZXA7CisgICAgICAgIGludCAgICAgICAgICBpOworCisKKyAgICAgICAgLyogZWlnaHQgY29tbWEtc2VwYXJhdGVkIG51bWJlcnMgKi8KKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCA3OyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgZHBbaV0gPSAoRlRfSW50KWZ0X3N0cnRvbCggcywgJmVwLCAxMCApOworICAgICAgICAgIGlmICggKmVwICE9ICcsJyB8fCBzID09IGVwICkKKyAgICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgICAgICAgcyA9IGVwICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGRwWzddID0gKEZUX0ludClmdF9zdHJ0b2woIHMsICZlcCwgMTAgKTsKKyAgICAgICAgaWYgKCAhKCAqZXAgPT0gJ1wwJyB8fCAqZXAgPT0gJyAnICkgfHwgcyA9PSBlcCApCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgICAgZGFya2VuX3BhcmFtcyA9IGRwOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRhcmtlbl9wYXJhbXMgPSAoRlRfSW50Kil2YWx1ZTsKKworICAgICAgeDEgPSBkYXJrZW5fcGFyYW1zWzBdOworICAgICAgeTEgPSBkYXJrZW5fcGFyYW1zWzFdOworICAgICAgeDIgPSBkYXJrZW5fcGFyYW1zWzJdOworICAgICAgeTIgPSBkYXJrZW5fcGFyYW1zWzNdOworICAgICAgeDMgPSBkYXJrZW5fcGFyYW1zWzRdOworICAgICAgeTMgPSBkYXJrZW5fcGFyYW1zWzVdOworICAgICAgeDQgPSBkYXJrZW5fcGFyYW1zWzZdOworICAgICAgeTQgPSBkYXJrZW5fcGFyYW1zWzddOworCisgICAgICBpZiAoIHgxIDwgMCAgIHx8IHgyIDwgMCAgIHx8IHgzIDwgMCAgIHx8IHg0IDwgMCAgIHx8CisgICAgICAgICAgIHkxIDwgMCAgIHx8IHkyIDwgMCAgIHx8IHkzIDwgMCAgIHx8IHk0IDwgMCAgIHx8CisgICAgICAgICAgIHgxID4geDIgIHx8IHgyID4geDMgIHx8IHgzID4geDQgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIHkxID4gNTAwIHx8IHkyID4gNTAwIHx8IHkzID4gNTAwIHx8IHk0ID4gNTAwICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1swXSA9IHgxOworICAgICAgbW9kdWxlLT5kYXJrZW5fcGFyYW1zWzFdID0geTE7CisgICAgICBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbMl0gPSB4MjsKKyAgICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1szXSA9IHkyOworICAgICAgbW9kdWxlLT5kYXJrZW5fcGFyYW1zWzRdID0geDM7CisgICAgICBtb2R1bGUtPmRhcmtlbl9wYXJhbXNbNV0gPSB5MzsKKyAgICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1s2XSA9IHg0OworICAgICAgbW9kdWxlLT5kYXJrZW5fcGFyYW1zWzddID0geTQ7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJuby1zdGVtLWRhcmtlbmluZyIgKSApCisgICAgeworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcyAgID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBsb25nICAgICAgICAgbnNkID0gZnRfc3RydG9sKCBzLCBOVUxMLCAxMCApOworCisKKyAgICAgICAgaWYgKCBuc2QgPT0gMCApCisgICAgICAgICAgbW9kdWxlLT5ub19zdGVtX2RhcmtlbmluZyA9IDA7CisgICAgICAgIGVsc2UgaWYgKCBuc2QgPT0gMSApCisgICAgICAgICAgbW9kdWxlLT5ub19zdGVtX2RhcmtlbmluZyA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICBGVF9Cb29sKiAgbm9fc3RlbV9kYXJrZW5pbmcgPSAoRlRfQm9vbCopdmFsdWU7CisKKworICAgICAgICBtb2R1bGUtPm5vX3N0ZW1fZGFya2VuaW5nID0gKm5vX3N0ZW1fZGFya2VuaW5nOworICAgICAgfQorCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQogCiAgICAgRlRfVFJBQ0UwKCggImFmX3Byb3BlcnR5X3NldDogbWlzc2luZyBwcm9wZXJ0eSBgJXMnXG4iLAogICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUgKSk7CkBAIC0yNDUsNiArMzg1LDMzIEBACiAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZGFya2VuaW5nLXBhcmFtZXRlcnMiICkgKQorICAgIHsKKyAgICAgIEZUX0ludCogIGRhcmtlbl9wYXJhbXMgPSBtb2R1bGUtPmRhcmtlbl9wYXJhbXM7CisgICAgICBGVF9JbnQqICB2YWwgICAgICAgICAgID0gKEZUX0ludCopdmFsdWU7CisKKworICAgICAgdmFsWzBdID0gZGFya2VuX3BhcmFtc1swXTsKKyAgICAgIHZhbFsxXSA9IGRhcmtlbl9wYXJhbXNbMV07CisgICAgICB2YWxbMl0gPSBkYXJrZW5fcGFyYW1zWzJdOworICAgICAgdmFsWzNdID0gZGFya2VuX3BhcmFtc1szXTsKKyAgICAgIHZhbFs0XSA9IGRhcmtlbl9wYXJhbXNbNF07CisgICAgICB2YWxbNV0gPSBkYXJrZW5fcGFyYW1zWzVdOworICAgICAgdmFsWzZdID0gZGFya2VuX3BhcmFtc1s2XTsKKyAgICAgIHZhbFs3XSA9IGRhcmtlbl9wYXJhbXNbN107CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJuby1zdGVtLWRhcmtlbmluZyIgKSApCisgICAgeworICAgICAgRlRfQm9vbCAgIG5vX3N0ZW1fZGFya2VuaW5nID0gbW9kdWxlLT5ub19zdGVtX2RhcmtlbmluZzsKKyAgICAgIEZUX0Jvb2wqICB2YWwgICAgICAgICAgICAgICA9IChGVF9Cb29sKil2YWx1ZTsKKworCisgICAgICAqdmFsID0gbm9fc3RlbV9kYXJrZW5pbmc7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CiAKICAgICBGVF9UUkFDRTAoKCAiYWZfcHJvcGVydHlfZ2V0OiBtaXNzaW5nIHByb3BlcnR5IGAlcydcbiIsCiAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSApKTsKQEAgLTI1NCw4ICs0MjEsOCBAQAogCiAgIEZUX0RFRklORV9TRVJWSUNFX1BST1BFUlRJRVNSRUMoCiAgICAgYWZfc2VydmljZV9wcm9wZXJ0aWVzLAotICAgIChGVF9Qcm9wZXJ0aWVzX1NldEZ1bmMpYWZfcHJvcGVydHlfc2V0LAotICAgIChGVF9Qcm9wZXJ0aWVzX0dldEZ1bmMpYWZfcHJvcGVydHlfZ2V0ICkKKyAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKWFmX3Byb3BlcnR5X3NldCwgICAgICAgIC8qIHNldF9wcm9wZXJ0eSAqLworICAgIChGVF9Qcm9wZXJ0aWVzX0dldEZ1bmMpYWZfcHJvcGVydHlfZ2V0ICkgICAgICAgLyogZ2V0X3Byb3BlcnR5ICovCiAKIAogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxKApAQCAtMjkxLDExICs0NTgsMjEgQEAKICAgICBBRl9Nb2R1bGUgIG1vZHVsZSA9IChBRl9Nb2R1bGUpZnRfbW9kdWxlOwogCiAKLSAgICBtb2R1bGUtPmZhbGxiYWNrX3N0eWxlID0gQUZfU1RZTEVfRkFMTEJBQ0s7Ci0gICAgbW9kdWxlLT5kZWZhdWx0X3NjcmlwdCA9IEFGX1NDUklQVF9ERUZBVUxUOworICAgIG1vZHVsZS0+ZmFsbGJhY2tfc3R5bGUgICAgPSBBRl9TVFlMRV9GQUxMQkFDSzsKKyAgICBtb2R1bGUtPmRlZmF1bHRfc2NyaXB0ICAgID0gQUZfU0NSSVBUX0RFRkFVTFQ7CiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCi0gICAgbW9kdWxlLT53YXJwaW5nICAgICAgICA9IDA7CisgICAgbW9kdWxlLT53YXJwaW5nICAgICAgICAgICA9IDA7CiAjZW5kaWYKKyAgICBtb2R1bGUtPm5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKKworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1swXSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxOworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1sxXSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxOworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1syXSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gyOworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1szXSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kyOworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1s0XSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzOworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1s1XSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kzOworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1s2XSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1g0OworICAgIG1vZHVsZS0+ZGFya2VuX3BhcmFtc1s3XSAgPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0OwogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaCBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmgKaW5kZXggYjljMmZkOC4uZTY1ZGI1ZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaAorKysgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRk1PRFVMRV9IX18KLSNkZWZpbmUgX19BRk1PRFVMRV9IX18KKyNpZm5kZWYgQUZNT0RVTEVfSF8KKyNkZWZpbmUgQUZNT0RVTEVfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKQEAgLTQxLDYgKzQxLDggQEAKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKICAgICBGVF9Cb29sICAgICAgIHdhcnBpbmc7CiAjZW5kaWYKKyAgICBGVF9Cb29sICAgICAgIG5vX3N0ZW1fZGFya2VuaW5nOworICAgIEZUX0ludCAgICAgICAgZGFya2VuX3BhcmFtc1s4XTsKIAogICB9IEFGX01vZHVsZVJlYywgKkFGX01vZHVsZTsKIApAQCAtNTAsNyArNTIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGTU9EVUxFX0hfXyAqLworI2VuZGlmIC8qIEFGTU9EVUxFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnBpYy5jIGIvc3JjL2F1dG9maXQvYWZwaWMuYwppbmRleCA1NTg5ZTYxLi4zY2JkOTE2IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnBpYy5jCisrKyBiL3NyYy9hdXRvZml0L2FmcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGF1dG9maXQgbW9kdWxlLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEyMiw3ICsxMjIsNyBAQAogI2luY2x1ZGUgImFmd3J0c3lzLmgiCiAKICN1bmRlZiAgU0NSSVBUCi0jZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc2MxLCBzYzIsIHNjMyApICAgICAgICAgIFwKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBILCBzc3MgKSAgICAgICAgICAgICAgICAgXAogICAgICAgICBGVF9Jbml0X0NsYXNzX2FmXyAjIyBzICMjIF9zY3JpcHRfY2xhc3MoICAgICBcCiAgICAgICAgICAgJmNvbnRhaW5lci0+YWZfc2NyaXB0X2NsYXNzZXNfcmVjW3NzKytdICk7CiAKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmcGljLmggYi9zcmMvYXV0b2ZpdC9hZnBpYy5oCmluZGV4IDI1MDcxZTMuLjk4YTQ1YTIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmcGljLmgKKysrIGIvc3JjL2F1dG9maXQvYWZwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYXV0b2ZpdCBtb2R1bGUuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTIgKzE2LDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRlBJQ19IX18KLSNkZWZpbmUgX19BRlBJQ19IX18KKyNpZm5kZWYgQUZQSUNfSF8KKyNkZWZpbmUgQUZQSUNfSF8KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAogCkBAIC00Myw2ICs0MSw4IEBACiAjaW5jbHVkZSAiYWZ0eXBlcy5oIgogCiAKK0ZUX0JFR0lOX0hFQURFUgorCiAgIHR5cGVkZWYgc3RydWN0ICBBRk1vZHVsZVBJQ18KICAgewogICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgICBhZl9zZXJ2aWNlczsKQEAgLTkzLDEzICs5MywxMyBAQAogICBGVF9FcnJvcgogICBhdXRvZml0X21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCitGVF9FTkRfSEVBREVSCisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgLyogKi8KIAotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogX19BRlBJQ19IX18gKi8KKyNlbmRpZiAvKiBBRlBJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYyBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmMKaW5kZXggYzFlMGFmYi4uNzMyZjNkMSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYworKysgYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIFVuaWNvZGUgc2NyaXB0IHJhbmdlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOCwxNzUgKzE4LDY0NyBAQAogCiAjaW5jbHVkZSAiYWZyYW5nZXMuaCIKIAorICAvKgorICAgKiBUaGUgYWxnb3JpdGhtIGZvciBhc3NpZ25pbmcgcHJvcGVydGllcyBhbmQgc3R5bGVzIHRvIHRoZSBgZ2x5cGhfc3R5bGVzJworICAgKiBhcnJheSBpcyBhcyBmb2xsb3dzIChjZi4gdGhlIGltcGxlbWVudGF0aW9uIGluCisgICAqIGBhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zdHlsZV9jb3ZlcmFnZScpLgorICAgKgorICAgKiAgIFdhbGsgb3ZlciBhbGwgc2NyaXB0cyAoYXMgbGlzdGVkIGluIGBhZnNjcmlwdC5oJykuCisgICAqCisgICAqICAgRm9yIGEgZ2l2ZW4gc2NyaXB0LCB3YWxrIG92ZXIgYWxsIHN0eWxlcyAoYXMgbGlzdGVkIGluIGBhZnN0eWxlcy5oJykuCisgICAqICAgVGhlIG9yZGVyIG9mIHN0eWxlcyBpcyBpbXBvcnRhbnQgYW5kIHNob3VsZCBiZSBhcyBmb2xsb3dzLgorICAgKgorICAgKiAgIC0gRmlyc3QgY29tZSBzdHlsZXMgYmFzZWQgb24gT3BlblR5cGUgZmVhdHVyZXMgKHNtYWxsIGNhcHMsIGZvcgorICAgKiAgICAgZXhhbXBsZSkuICBTaW5jZSBmZWF0dXJlcyByZWx5IG9uIGdseXBoIGluZGljZXMsIHRodXMgY29tcGxldGVseQorICAgKiAgICAgYnlwYXNzaW5nIGNoYXJhY3RlciBjb2Rlcywgbm8gcHJvcGVydGllcyBhcmUgYXNzaWduZWQuCisgICAqCisgICAqICAgLSBOZXh0IGNvbWVzIHRoZSBkZWZhdWx0IHN0eWxlLCB1c2luZyB0aGUgY2hhcmFjdGVyIHJhbmdlcyBhcyBkZWZpbmVkCisgICAqICAgICBiZWxvdy4gIFRoaXMgYWxzbyBhc3NpZ25zIHByb3BlcnRpZXMuCisgICAqCisgICAqICAgTm90ZSB0aGF0IHRoZXJlIGFsc28gZXhpc3QgZmFsbGJhY2sgc2NyaXB0cywgbWFpbmx5IGNvdmVyaW5nCisgICAqICAgc3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdCBnbHlwaHMgb2YgYSBzY3JpcHQgdGhhdCBhcmUgbm90IHByZXNlbnQgYXMKKyAgICogICBPcGVuVHlwZSBmZWF0dXJlcy4gIEZhbGxiYWNrIHNjcmlwdHMgYXJlIGRlZmluZWQgYmVsb3csIGFsc28KKyAgICogICBhc3NpZ25pbmcgcHJvcGVydGllczsgdGhleSBhcmUgYXBwbGllZCBhZnRlciB0aGUgY29ycmVzcG9uZGluZworICAgKiAgIHNjcmlwdC4KKyAgICoKKyAgICovCisKKworICAvKiBYWFggQ2hlY2sgYmFzZSBjaGFyYWN0ZXIgcmFuZ2VzIGFnYWluOiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBSaWdodCBub3csIHRoZXkgYXJlIHF1aWNrbHkgZGVyaXZlZCBieSB2aXN1YWwgaW5zcGVjdGlvbi4gKi8KKyAgLyogICAgIEkgY2FuIGltYWdpbmUgdGhhdCBmaW5lLXR1bmluZyBpcyBuZWNlc3NhcnkuICAgICAgICAgICAgICAqLworCisgIC8qIGZvciB0aGUgYXV0by1oaW50ZXIsIGEgYG5vbi1iYXNlIGNoYXJhY3RlcicgaXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkICovCisgIC8qIG5vdCBiZSBhZmZlY3RlZCBieSBibHVlIHpvbmVzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBpcyBhICAgICAgICovCisgIC8qIHNwYWNpbmcgb3Igbm8tc3BhY2luZyBnbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogdGhlIGB0YV94eHh4X25vbmJhc2VfdW5pcmFuZ2VzJyByYW5nZXMgbXVzdCBiZSBzdHJpY3Qgc3Vic2V0cyAqLworICAvKiBvZiB0aGUgY29ycmVzcG9uZGluZyBgdGFfeHh4eF91bmlyYW5nZXMnIHJhbmdlcyAgICAgICAgICAgICAgICovCisKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2FyYWJfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjAwVUwsICAweDA2RkZVTCApLCAgLyogQXJhYmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA3NTBVTCwgIDB4MDdGRlVMICksICAvKiBBcmFiaWMgU3VwcGxlbWVudCAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDhBMFVMLCAgMHgwOEZGVUwgKSwgIC8qIEFyYWJpYyBFeHRlbmRlZC1BICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjUwVUwsICAweEZERkZVTCApLCAgLyogQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFNzBVTCwgIDB4RkVGRlVMICksICAvKiBBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxRUUwMFVMLCAweDFFRUZGVUwgKSwgIC8qIEFyYWJpYyBNYXRoZW1hdGljYWwgQWxwaGFiZXRpYyBTeW1ib2xzICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjAwLCAgMHgwNkZGICksICAvKiBBcmFiaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDc1MCwgIDB4MDdGRiApLCAgLyogQXJhYmljIFN1cHBsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4QTAsICAweDA4RkYgKSwgIC8qIEFyYWJpYyBFeHRlbmRlZC1BICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjUwLCAgMHhGREZGICksICAvKiBBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkU3MCwgIDB4RkVGRiApLCAgLyogQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUVFMDAsIDB4MUVFRkYgKSwgIC8qIEFyYWJpYyBNYXRoZW1hdGljYWwgQWxwaGFiZXRpYyBTeW1ib2xzICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2N5cmxfdW5pcmFuZ2VzW10gPQorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2FyYWJfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA0MDBVTCwgIDB4MDRGRlVMICksICAvKiBDeXJpbGxpYyAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTAwVUwsICAweDA1MkZVTCApLCAgLyogQ3lyaWxsaWMgU3VwcGxlbWVudCAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkRFMFVMLCAgMHgyREZGVUwgKSwgIC8qIEN5cmlsbGljIEV4dGVuZGVkLUEgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEE2NDBVTCwgIDB4QTY5RlVMICksICAvKiBDeXJpbGxpYyBFeHRlbmRlZC1CICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjAwLCAgMHgwNjA1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjEwLCAgMHgwNjFBICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjRCLCAgMHgwNjVGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjcwLCAgMHgwNjcwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkQ2LCAgMHgwNkRDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkRGLCAgMHgwNkU0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkU3LCAgMHgwNkU4ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkVBLCAgMHgwNkVEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOEQ0LCAgMHgwOEUxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOEUzLCAgMHgwOEZGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQkIyLCAgMHhGQkMxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTcwLCAgMHhGRTcwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTcyLCAgMHhGRTcyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc0LCAgMHhGRTc0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc2LCAgMHhGRTc2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc4LCAgMHhGRTc4ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdBLCAgMHhGRTdBICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdDLCAgMHhGRTdDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdFLCAgMHhGRTdFICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAotICAvKiB0aGVyZSBhcmUgc29tZSBjaGFyYWN0ZXJzIGluIHRoZSBEZXZhbmFnYXJpIFVuaWNvZGUgYmxvY2sgdGhhdCBhcmUgICAgKi8KLSAgLyogZ2VuZXJpYyB0byBJbmRpYyBzY3JpcHRzOyB3ZSBvbWl0IHRoZW0gc28gdGhhdCB0aGVpciBwcmVzZW5jZSBkb2Vzbid0ICovCi0gIC8qIHRyaWdnZXIgRGV2YW5hZ2FyaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZGV2YV91bmlyYW5nZXNbXSA9CisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYXJtbl91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5MDBVTCwgIDB4MDkzQlVMICksICAvKiBEZXZhbmFnYXJpICAgICAgICovCi0gICAgLyogb21pdHRpbmcgVSswOTNDIG51a3RhICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTNEVUwsICAweDA5NTBVTCApLAotICAgIC8qIG9taXR0aW5nIFUrMDk1MSB1ZGF0dGEsIFUrMDk1MiBhbnVkYXR0YSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDk1M1VMLCAgMHgwOTYzVUwgKSwKLSAgICAvKiBvbWl0dGluZyBVKzA5NjQgZGFuZGEsIFUrMDk2NSBkb3VibGUgZGFuZGEgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NjZVTCwgIDB4MDk3RlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMEI5VUwsICAweDIwQjlVTCApLCAgLyogKG5ldykgUnVwZWUgc2lnbiAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDUzMCwgIDB4MDU4RiApLCAgLyogQXJtZW5pYW4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjEzLCAgMHhGQjE3ICksICAvKiBBbHBoYWIuIFByZXNlbnQuIEZvcm1zIChBcm1lbmlhbikgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ3Jla191bmlyYW5nZXNbXSA9CisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYXJtbl9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDM3MFVMLCAgMHgwM0ZGVUwgKSwgIC8qIEdyZWVrIGFuZCBDb3B0aWMgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGMDBVTCwgIDB4MUZGRlVMICksICAvKiBHcmVlayBFeHRlbmRlZCAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTU5LCAgMHgwNTVGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2hlYnJfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTkwVUwsICAweDA1RkZVTCApLCAgLyogSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIxRFVMLCAgMHhGQjRGVUwgKSwgIC8qIEFscGhhYi4gUHJlc2VudC4gRm9ybXMgKEhlYnJldykgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdG5fdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMDIwVUwsICAweDAwN0ZVTCApLCAgLyogQmFzaWMgTGF0aW4gKG5vIGNvbnRyb2wgY2hhcnMpICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQTBVTCwgIDB4MDBGRlVMICksICAvKiBMYXRpbi0xIFN1cHBsZW1lbnQgKG5vIGNvbnRyb2wgY2hhcnMpICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDEwMFVMLCAgMHgwMTdGVUwgKSwgIC8qIExhdGluIEV4dGVuZGVkLUEgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMTgwVUwsICAweDAyNEZVTCApLCAgLyogTGF0aW4gRXh0ZW5kZWQtQiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyNTBVTCwgIDB4MDJBRlVMICksICAvKiBJUEEgRXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJCMFVMLCAgMHgwMkZGVUwgKSwgIC8qIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzAwVUwsICAweDAzNkZVTCApLCAgLyogQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFEMDBVTCwgIDB4MUQ3RlVMICksICAvKiBQaG9uZXRpYyBFeHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ4MFVMLCAgMHgxREJGVUwgKSwgIC8qIFBob25ldGljIEV4dGVuc2lvbnMgU3VwcGxlbWVudCAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxREMwVUwsICAweDFERkZVTCApLCAgLyogQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFFMDBVTCwgIDB4MUVGRlVMICksICAvKiBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjAwMFVMLCAgMHgyMDZGVUwgKSwgIC8qIEdlbmVyYWwgUHVuY3R1YXRpb24gICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDcwVUwsICAweDIwOUZVTCApLCAgLyogU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwQTBVTCwgIDB4MjBCOFVMICksICAvKiBDdXJyZW5jeSBTeW1ib2xzIC4uLiAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjBCQVVMLCAgMHgyMENGVUwgKSwgIC8qIC4uLiBleGNlcHQgbmV3IFJ1cGVlIHNpZ24gICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMTUwVUwsICAweDIxOEZVTCApLCAgLyogTnVtYmVyIEZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDI0NjBVTCwgIDB4MjRGRlVMICksICAvKiBFbmNsb3NlZCBBbHBoYW51bWVyaWNzICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkM2MFVMLCAgMHgyQzdGVUwgKSwgIC8qIExhdGluIEV4dGVuZGVkLUMgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRTAwVUwsICAweDJFN0ZVTCApLCAgLyogU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3MjBVTCwgIDB4QTdGRlVMICksICAvKiBMYXRpbiBFeHRlbmRlZC1EICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIwMFVMLCAgMHhGQjA2VUwgKSwgIC8qIEFscGhhYi4gUHJlc2VudC4gRm9ybXMgKExhdGluIExpZ3MpICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDFENDAwVUwsIDB4MUQ3RkZVTCApLCAgLyogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUYxMDBVTCwgMHgxRjFGRlVMICksICAvKiBFbmNsb3NlZCBBbHBoYW51bWVyaWMgU3VwcGxlbWVudCAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbm9uZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoIDBVTCwgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RlbHVfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwVUwsICAweDBDN0ZVTCApLCAgLyogVGVsdWd1ICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCi0gIH07Ci0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90aGFpX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEUwMFVMLCAgMHgwRTdGVUwgKSwgIC8qIFRoYWkgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2JlbmdfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTgwVUwsICAweDA5RkZVTCApLCAgLyogQmVuZ2FsaSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDk4MCwgIDB4MDlGRiApLCAgLyogQmVuZ2FsaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9iZW5nX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTgxLCAgMHgwOTgxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUJDLCAgMHgwOUJDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUMxLCAgMHgwOUM0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUNELCAgMHgwOUNEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUUyLCAgMHgwOUUzICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2hlcl91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEzQTAsICAweDEzRkYgKSwgIC8qIENoZXJva2VlICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCNzAsICAweEFCQkYgKSwgIC8qIENoZXJva2VlIFN1cHBsZW1lbnQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2hlcl9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2N5cmxfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNDAwLCAgMHgwNEZGICksICAvKiBDeXJpbGxpYyAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTAwLCAgMHgwNTJGICksICAvKiBDeXJpbGxpYyBTdXBwbGVtZW50ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyREUwLCAgMHgyREZGICksICAvKiBDeXJpbGxpYyBFeHRlbmRlZC1BICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNjQwLCAgMHhBNjlGICksICAvKiBDeXJpbGxpYyBFeHRlbmRlZC1CICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQzgwLCAgMHgxQzhGICksICAvKiBDeXJpbGxpYyBFeHRlbmRlZC1DICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2N5cmxfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA0ODMsICAweDA0ODkgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJERTAsICAweDJERkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE2NkYsICAweEE2N0YgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE2OUUsICAweEE2OUYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgLyogVGhlcmUgYXJlIHNvbWUgY2hhcmFjdGVycyBpbiB0aGUgRGV2YW5hZ2FyaSBVbmljb2RlIGJsb2NrIHRoYXQgYXJlICAgICovCisgIC8qIGdlbmVyaWMgdG8gSW5kaWMgc2NyaXB0czsgd2Ugb21pdCB0aGVtIHNvIHRoYXQgdGhlaXIgcHJlc2VuY2UgZG9lc24ndCAqLworICAvKiB0cmlnZ2VyIERldmFuYWdhcmkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2RldmFfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTAwLCAgMHgwOTNCICksICAvKiBEZXZhbmFnYXJpICAgICAgICAgICovCisgICAgLyogb21pdHRpbmcgVSswOTNDIG51a3RhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTNELCAgMHgwOTUwICksICAvKiAuLi4gY29udGludWVkICAgICAgICovCisgICAgLyogb21pdHRpbmcgVSswOTUxIHVkYXR0YSwgVSswOTUyIGFudWRhdHRhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTUzLCAgMHgwOTYzICksICAvKiAuLi4gY29udGludWVkICAgICAgICovCisgICAgLyogb21pdHRpbmcgVSswOTY0IGRhbmRhLCBVKzA5NjUgZG91YmxlIGRhbmRhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTY2LCAgMHgwOTdGICksICAvKiAuLi4gY29udGludWVkICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMEI5LCAgMHgyMEI5ICksICAvKiAobmV3KSBSdXBlZSBzaWduICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBOEUwLCAgMHhBOEZGICksICAvKiBEZXZhbmFnYXJpIEV4dGVuZGVkICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2RldmFfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5MDAsICAweDA5MDIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5M0EsICAweDA5M0EgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NDEsICAweDA5NDggKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NEQsICAweDA5NEQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NTMsICAweDA5NTcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NjIsICAweDA5NjMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4RTAsICAweEE4RjEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ldGhpX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTIwMCwgIDB4MTM3RiApLCAgLyogRXRoaW9waWMgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTM4MCwgIDB4MTM5RiApLCAgLyogRXRoaW9waWMgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkQ4MCwgIDB4MkRERiApLCAgLyogRXRoaW9waWMgRXh0ZW5kZWQgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUIwMCwgIDB4QUIyRiApLCAgLyogRXRoaW9waWMgRXh0ZW5kZWQtQSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ldGhpX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMzVELCAgMHgxMzVGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ2Vvcl91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwRDAsICAweDEwRkYgKSwgIC8qIEdlb3JnaWFuIChNa2hlZHJ1bGkpICovCisjaWYgMAorICAgIC8qIHRoZSBmb2xsb3dpbmcgcmFuZ2UgaXMgcHJvcG9zZWQgZm9yIGluY2x1c2lvbiBpbiBVbmljb2RlICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQzkwLCAgMHgxQ0JGICksICAvKiBHZW9yZ2lhbiAoTXRhdnJ1bGkpICAqLworI2VuZGlmCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dlb3Jfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9nZW9rX3VuaXJhbmdlc1tdID0KKyAgeworICAgIC8qIEtodXRzdXJpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMEEwLCAgMHgxMENEICksICAvKiBHZW9yZ2lhbiAoQXNvbXRhdnJ1bGkpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRDAwLCAgMHgyRDJEICksICAvKiBHZW9yZ2lhbiAoTnVza2h1cmkpICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dlb2tfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ncmVrX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDM3MCwgIDB4MDNGRiApLCAgLyogR3JlZWsgYW5kIENvcHRpYyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUYwMCwgIDB4MUZGRiApLCAgLyogR3JlZWsgRXh0ZW5kZWQgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ncmVrX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzdBLCAgMHgwMzdBICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzg0LCAgMHgwMzg1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRkJELCAgMHgxRkMxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRkNELCAgMHgxRkNGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRkRELCAgMHgxRkRGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRkVELCAgMHgxRkVGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRkZELCAgMHgxRkZFICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ3Vqcl91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBODBVTCwgIDB4MEFGRlVMICksICAvKiBHdWphcmF0aSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEE4MCwgIDB4MEFGRiApLCAgLyogR3VqYXJhdGkgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ3Vqcl9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEE4MSwgIDB4MEE4MiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFCQywgIDB4MEFCQyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFDMSwgIDB4MEFDOCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFDRCwgIDB4MEFDRCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFFMiwgIDB4MEFFMyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKwogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2d1cnVfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQTAwVUwsICAweDBBN0ZVTCApLCAgLyogR3VybXVraGkgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBMDAsICAweDBBN0YgKSwgIC8qIEd1cm11a2hpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2d1cnVfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBMDEsICAweDBBMDIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBM0MsICAweDBBM0MgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNDEsICAweDBBNTEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNzAsICAweDBBNzEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNzUsICAweDBBNzUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9oZWJyX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDU5MCwgIDB4MDVGRiApLCAgLyogSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIxRCwgIDB4RkI0RiApLCAgLyogQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoSGVicmV3KSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9oZWJyX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTkxLCAgMHgwNUJGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUMxLCAgMHgwNUMyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUM0LCAgMHgwNUM1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUM3LCAgMHgwNUM3ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjFFLCAgMHhGQjFFICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa25kYV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDODBVTCwgIDB4MENGRlVMICksICAvKiBLYW5uYWRhICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzgwLCAgMHgwQ0ZGICksICAvKiBLYW5uYWRhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xpbWJfdW5pcmFuZ2VzW10gPQorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2tuZGFfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDE5MDBVTCwgIDB4MTk0RlVMICksICAvKiBMaW1idSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEM4MSwgIDB4MEM4MSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENCQywgIDB4MENCQyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENCRiwgIDB4MENCRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENDNiwgIDB4MENDNiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENDQywgIDB4MENDRCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENFMiwgIDB4MENFMyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2tobXJfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxNzgwLCAgMHgxN0ZGICksICAvKiBLaG1lciAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1yX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxN0I3LCAgMHgxN0JEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxN0M2LCAgMHgxN0M2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxN0M5LCAgMHgxN0QzICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxN0RELCAgMHgxN0REICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa2htc191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE5RTAsICAweDE5RkYgKSwgIC8qIEtobWVyIFN5bWJvbHMgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa2htc19ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhb191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFODAsICAweDBFRkYgKSwgIC8qIExhbyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9sYW9fbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFQjEsICAweDBFQjEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFQjQsICAweDBFQkMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFQzgsICAweDBFQ0QgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9sYXRuX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDAyMCwgIDB4MDA3RiApLCAgLyogQmFzaWMgTGF0aW4gKG5vIGNvbnRyb2wgY2hhcnMpICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQTAsICAweDAwQTkgKSwgIC8qIExhdGluLTEgU3VwcGxlbWVudCAobm8gY29udHJvbCBjaGFycykgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEFCLCAgMHgwMEIxICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCNCwgIDB4MDBCOCApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQkIsICAweDAwRkYgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMTAwLCAgMHgwMTdGICksICAvKiBMYXRpbiBFeHRlbmRlZC1BICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDE4MCwgIDB4MDI0RiApLCAgLyogTGF0aW4gRXh0ZW5kZWQtQiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyNTAsICAweDAyQUYgKSwgIC8qIElQQSBFeHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMkI5LCAgMHgwMkRGICksICAvKiBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJFNSwgIDB4MDJGRiApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzMDAsICAweDAzNkYgKSwgIC8qIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQUIwLCAgMHgxQUJFICksICAvKiBDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgRXh0ZW5kZWQgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQwMCwgIDB4MUQyQiApLCAgLyogUGhvbmV0aWMgRXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFENkIsICAweDFENzcgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDc5LCAgMHgxRDdGICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ4MCwgIDB4MUQ5QSApLCAgLyogUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50ICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFEQzAsICAweDFERkYgKSwgIC8qIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBTdXBwbGVtZW50ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRTAwLCAgMHgxRUZGICksICAvKiBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjAwMCwgIDB4MjA2RiApLCAgLyogR2VuZXJhbCBQdW5jdHVhdGlvbiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwQTAsICAweDIwQjggKSwgIC8qIEN1cnJlbmN5IFN5bWJvbHMgLi4uICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMEJBLCAgMHgyMENGICksICAvKiAuLi4gZXhjZXB0IG5ldyBSdXBlZSBzaWduICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjE1MCwgIDB4MjE4RiApLCAgLyogTnVtYmVyIEZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDNjAsICAweDJDN0IgKSwgIC8qIExhdGluIEV4dGVuZGVkLUMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyQzdFLCAgMHgyQzdGICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkUwMCwgIDB4MkU3RiApLCAgLyogU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3MjAsICAweEE3NkYgKSwgIC8qIExhdGluIEV4dGVuZGVkLUQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNzcxLCAgMHhBN0Y3ICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTdGQSwgIDB4QTdGRiApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCMzAsICAweEFCNUIgKSwgIC8qIExhdGluIEV4dGVuZGVkLUUgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBQjYwLCAgMHhBQjZGICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIwMCwgIDB4RkIwNiApLCAgLyogQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoTGF0aW4gTGlncykgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUQ0MDAsIDB4MUQ3RkYgKSwgIC8qIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdG5fbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwNUUsICAweDAwNjAgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwN0UsICAweDAwN0UgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQTgsICAweDAwQTkgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQUUsICAweDAwQjAgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQjQsICAweDAwQjQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQjgsICAweDAwQjggKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQkMsICAweDAwQkUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyQjksICAweDAyREYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyRTUsICAweDAyRkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzMDAsICAweDAzNkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFBQjAsICAweDFBQkUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFEQzAsICAweDFERkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwMTcsICAweDIwMTcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwM0UsICAweDIwM0UgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3ODgsICAweEE3ODggKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3RjgsICAweEE3RkEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9sYXRiX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ2MiwgIDB4MUQ2QSApLCAgLyogc29tZSBzbWFsbCBzdWJzY3JpcHQgbGV0dGVycyAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDgwLCAgMHgyMDlDICksICAvKiBzdWJzY3JpcHQgZGlnaXRzIGFuZCBsZXR0ZXJzICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDN0MsICAweDJDN0MgKSwgIC8qIGxhdGluIHN1YnNjcmlwdCBzbWFsbCBsZXR0ZXIgaiAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9sYXRiX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0cF91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQUEsICAweDAwQUEgKSwgIC8qIGZlbWluaW5lIG9yZGluYWwgaW5kaWNhdG9yICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEIyLCAgMHgwMEIzICksICAvKiBzdXBlcnNjcmlwdCB0d28gYW5kIHRocmVlICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCOSwgIDB4MDBCQSApLCAgLyogc3VwZXJzY3JpcHQgb25lLCBtYXNjLiBvcmQuIGluZGljLiAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyQjAsICAweDAyQjggKSwgIC8qIHNvbWUgbGF0aW4gc3VwZXJzY3JpcHQgbW9kLiBsZXR0ZXJzICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMkUwLCAgMHgwMkU0ICksICAvKiBzb21lIElQQSBtb2RpZmllciBsZXR0ZXJzICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQyQywgIDB4MUQ2MSApLCAgLyogbGF0aW4gc3VwZXJzY3JpcHQgbW9kaWZpZXIgbGV0dGVycyAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFENzgsICAweDFENzggKSwgIC8qIG1vZGlmaWVyIGxldHRlciBjeXJpbGxpYyBlbiAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDlCLCAgMHgxREJGICksICAvKiBtb3JlIG1vZGlmaWVyIGxldHRlcnMgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjA3MCwgIDB4MjA3RiApLCAgLyogc3VwZXJzY3JpcHQgZGlnaXRzIGFuZCBsZXR0ZXJzICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDN0QsICAweDJDN0QgKSwgIC8qIG1vZGlmaWVyIGxldHRlciBjYXBpdGFsIHYgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNzcwLCAgMHhBNzcwICksICAvKiBtb2RpZmllciBsZXR0ZXIgdXMgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTdGOCwgIDB4QTdGOSApLCAgLyogbW9yZSBtb2RpZmllciBsZXR0ZXJzICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCNUMsICAweEFCNUYgKSwgIC8qIG1vcmUgbW9kaWZpZXIgbGV0dGVycyAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdHBfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9tbHltX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMFVMLCAgMHgwRDdGVUwgKSwgIC8qIE1hbGF5YWxhbSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMCwgIDB4MEQ3RiApLCAgLyogTWFsYXlhbGFtICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29yeWFfdW5pcmFuZ2VzW10gPQorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX21seW1fbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCMDBVTCwgIDB4MEI3RlVMICksICAvKiBPcml5YSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMSwgIDB4MEQwMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ0RCwgIDB4MEQ0RSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ2MiwgIDB4MEQ2MyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX215bXJfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwMDAsIDB4MTA5RiApLCAgICAvKiBNeWFubWFyICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4QTlFMCwgMHhBOUZGICksICAgIC8qIE15YW5tYXIgRXh0ZW5kZWQtQiAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBQTYwLCAweEFBN0YgKSwgICAgLyogTXlhbm1hciBFeHRlbmRlZC1BICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgIDAsICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9teW1yX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwMkQsIDB4MTAzMCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDMyLCAweDEwMzcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAzQSwgMHgxMDNBICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwM0QsIDB4MTAzRSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDU4LCAweDEwNTkgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA1RSwgMHgxMDYwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwNzEsIDB4MTA3NCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDgyLCAweDEwODIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA4NSwgMHgxMDg2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwOEQsIDB4MTA4RCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBOUU1LCAweEE5RTUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4QUE3QywgMHhBQTdDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgIDAsICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX25vbmVfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX25vbmVfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zaW5oX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ4MFVMLCAgMHgwREZGVUwgKSwgIC8qIFNpbmhhbGEgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBEODAsICAweDBERkYgKSwgIC8qIFNpbmhhbGEgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc3VuZF91bmlyYW5nZXNbXSA9CisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc2luaF9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUI4MFVMLCAgMHgxQkJGVUwgKSwgIC8qIFN1bmRhbmVzZSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MERDQSwgIDB4MERDQSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEREMiwgIDB4MERENiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zeWxvX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTgwMFVMLCAgMHhBODJGVUwgKSwgIC8qIFN5bG90aSBOYWdyaSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGFtbF91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCODBVTCwgIDB4MEJGRlVMICksICAvKiBUYW1pbCAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEI4MCwgIDB4MEJGRiApLCAgLyogVGFtaWwgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGFtbF9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEI4MiwgIDB4MEI4MiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEJDMCwgIDB4MEJDMiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEJDRCwgIDB4MEJDRCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RlbHVfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwLCAgMHgwQzdGICksICAvKiBUZWx1Z3UgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGVsdV9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEMwMCwgIDB4MEMwMCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEMzRSwgIDB4MEM0MCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEM0NiwgIDB4MEM1NiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEM2MiwgIDB4MEM2MyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RoYWlfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRTAwLCAgMHgwRTdGICksICAvKiBUaGFpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RoYWlfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFMzEsICAweDBFMzEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFMzQsICAweDBFM0EgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFNDcsICAweDBFNEUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0lORElDCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9saW1iX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkwMCwgIDB4MTk0RiApLCAgLyogTGltYnUgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGltYl9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkyMCwgIDB4MTkyMiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkyNywgIDB4MTkzNCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkzNywgIDB4MTkzQiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29yeWFfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjAwLCAgMHgwQjdGICksICAvKiBPcml5YSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9vcnlhX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjAxLCAgMHgwQjAyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjNDLCAgMHgwQjNDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjNGLCAgMHgwQjNGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjQxLCAgMHgwQjQ0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjRELCAgMHgwQjU2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjYyLCAgMHgwQjYzICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc3VuZF91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFCODAsICAweDFCQkYgKSwgIC8qIFN1bmRhbmVzZSAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQ0MwLCAgMHgxQ0NGICksICAvKiBTdW5kYW5lc2UgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQjgwLCAgMHgxQjgyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQkExLCAgMHgxQkFEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc3lsb191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MDAsICAweEE4MkYgKSwgIC8qIFN5bG90aSBOYWdyaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zeWxvX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODAyLCAgMHhBODAyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODA2LCAgMHhBODA2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODBCLCAgMHhBODBCICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODI1LCAgMHhBODI2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGlidF91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMDBVTCwgIDB4MEZGRlVMICksICAvKiBUaWJldGFuICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRjAwLCAgMHgwRkZGICksICAvKiBUaWJldGFuICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RpYnRfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMTgsICAweDBGMTkgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMzUsICAweDBGMzUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMzcsICAweDBGMzcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMzksICAweDBGMzkgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGM0UsICAweDBGM0YgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGNzEsICAweDBGN0UgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGODAsICAweDBGODQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGODYsICAweDBGODcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGOEQsICAweDBGQkMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAjZW5kaWYgLyogIUFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KQEAgLTE5NywzOSArNjY5LDQ0IEBACiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9oYW5pX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTEwMFVMLCAgMHgxMUZGVUwgKSwgIC8qIEhhbmd1bCBKYW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkU4MFVMLCAgMHgyRUZGVUwgKSwgIC8qIENKSyBSYWRpY2FscyBTdXBwbGVtZW50ICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkYwMFVMLCAgMHgyRkRGVUwgKSwgIC8qIEthbmd4aSBSYWRpY2FscyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkZGMFVMLCAgMHgyRkZGVUwgKSwgIC8qIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzAwMFVMLCAgMHgzMDNGVUwgKSwgIC8qIENKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzA0MFVMLCAgMHgzMDlGVUwgKSwgIC8qIEhpcmFnYW5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzBBMFVMLCAgMHgzMEZGVUwgKSwgIC8qIEthdGFrYW5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzEwMFVMLCAgMHgzMTJGVUwgKSwgIC8qIEJvcG9tb2ZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzEzMFVMLCAgMHgzMThGVUwgKSwgIC8qIEhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8gICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzE5MFVMLCAgMHgzMTlGVUwgKSwgIC8qIEthbmJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzFBMFVMLCAgMHgzMUJGVUwgKSwgIC8qIEJvcG9tb2ZvIEV4dGVuZGVkICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzFDMFVMLCAgMHgzMUVGVUwgKSwgIC8qIENKSyBTdHJva2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzFGMFVMLCAgMHgzMUZGVUwgKSwgIC8qIEthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzIwMFVMLCAgMHgzMkZGVUwgKSwgIC8qIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzMwMFVMLCAgMHgzM0ZGVUwgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzQwMFVMLCAgMHg0REJGVUwgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4NERDMFVMLCAgMHg0REZGVUwgKSwgIC8qIFlpamluZyBIZXhhZ3JhbSBTeW1ib2xzICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4NEUwMFVMLCAgMHg5RkZGVUwgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTk2MFVMLCAgMHhBOTdGVUwgKSwgIC8qIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUEgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUMwMFVMLCAgMHhEN0FGVUwgKSwgIC8qIEhhbmd1bCBTeWxsYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RDdCMFVMLCAgMHhEN0ZGVUwgKSwgIC8qIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUIgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RjkwMFVMLCAgMHhGQUZGVUwgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkUxMFVMLCAgMHhGRTFGVUwgKSwgIC8qIFZlcnRpY2FsIGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkUzMFVMLCAgMHhGRTRGVUwgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkYwMFVMLCAgMHhGRkVGVUwgKSwgIC8qIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxQjAwMFVMLCAweDFCMEZGVUwgKSwgIC8qIEthbmEgU3VwcGxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxRDMwMFVMLCAweDFEMzVGVUwgKSwgIC8qIFRhaSBYdWFuIEhpbmcgU3ltYm9scyAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxRjIwMFVMLCAweDFGMkZGVUwgKSwgIC8qIEVuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnQgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyMDAwMFVMLCAweDJBNkRGVUwgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyQTcwMFVMLCAweDJCNzNGVUwgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyQjc0MFVMLCAweDJCODFGVUwgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyRjgwMFVMLCAweDJGQTFGVUwgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudCAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTEwMCwgIDB4MTFGRiApLCAgLyogSGFuZ3VsIEphbW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRTgwLCAgMHgyRUZGICksICAvKiBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJGMDAsICAweDJGREYgKSwgIC8qIEthbmd4aSBSYWRpY2FscyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkZGMCwgIDB4MkZGRiApLCAgLyogSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMDAwLCAgMHgzMDNGICksICAvKiBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24gICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMwNDAsICAweDMwOUYgKSwgIC8qIEhpcmFnYW5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzBBMCwgIDB4MzBGRiApLCAgLyogS2F0YWthbmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTAwLCAgMHgzMTJGICksICAvKiBCb3BvbW9mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxMzAsICAweDMxOEYgKSwgIC8qIEhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8gICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzE5MCwgIDB4MzE5RiApLCAgLyogS2FuYnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMUEwLCAgMHgzMUJGICksICAvKiBCb3BvbW9mbyBFeHRlbmRlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxQzAsICAweDMxRUYgKSwgIC8qIENKSyBTdHJva2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzFGMCwgIDB4MzFGRiApLCAgLyogS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMzAwLCAgMHgzM0ZGICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDM0MDAsICAweDREQkYgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4NERDMCwgIDB4NERGRiApLCAgLyogWWlqaW5nIEhleGFncmFtIFN5bWJvbHMgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHg0RTAwLCAgMHg5RkZGICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE5NjAsICAweEE5N0YgKSwgIC8qIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUEgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUMwMCwgIDB4RDdBRiApLCAgLyogSGFuZ3VsIFN5bGxhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhEN0IwLCAgMHhEN0ZGICksICAvKiBIYW5ndWwgSmFtbyBFeHRlbmRlZC1CICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEY5MDAsICAweEZBRkYgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkUxMCwgIDB4RkUxRiApLCAgLyogVmVydGljYWwgZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTMwLCAgMHhGRTRGICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEZGMDAsICAweEZGRUYgKSwgIC8qIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxQjAwMCwgMHgxQjBGRiApLCAgLyogS2FuYSBTdXBwbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDFEMzAwLCAweDFEMzVGICksICAvKiBUYWkgWHVhbiBIaW5nIFN5bWJvbHMgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MjAwMDAsIDB4MkE2REYgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyQTcwMCwgMHgyQjczRiApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQyAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDJCNzQwLCAweDJCODFGICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBEICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MkY4MDAsIDB4MkZBMUYgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9oYW5pX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMDJBLCAgMHgzMDJGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTkwLCAgMHgzMTlGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogI2VuZGlmIC8qICFBRl9DT05GSUdfT1BUSU9OX0NKSyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuaCBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmgKaW5kZXggN2M3OGFiMC4uMWEwZTRiMSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIFVuaWNvZGUgc2NyaXB0IHJhbmdlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRlJBTkdFU19IX18KLSNkZWZpbmUgX19BRlJBTkdFU19IX18KKyNpZm5kZWYgQUZSQU5HRVNfSF8KKyNkZWZpbmUgQUZSQU5HRVNfSF8KIAogCiAjaW5jbHVkZSAiYWZ0eXBlcy5oIgpAQCAtMjYsMTYgKzI2LDIyIEBACiBGVF9CRUdJTl9IRUFERVIKIAogI3VuZGVmICBTQ1JJUFQKLSNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzYzEsIHNjMiwgc2MzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBILCBzcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBleHRlcm4gY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl8gIyMgcyAjIyBfdW5pcmFuZ2VzW107CiAKICNpbmNsdWRlICJhZnNjcmlwdC5oIgogCisjdW5kZWYgIFNDUklQVAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIEgsIHNzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXh0ZXJuIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfICMjIHMgIyMgX25vbmJhc2VfdW5pcmFuZ2VzW107CisKKyNpbmNsdWRlICJhZnNjcmlwdC5oIgorCiAgLyogKi8KIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRlJBTkdFU19IX18gKi8KKyNlbmRpZiAvKiBBRlJBTkdFU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZzY3JpcHQuaCBiL3NyYy9hdXRvZml0L2Fmc2NyaXB0LmgKaW5kZXggZGZjYzgzMC4uY2ZmZTU5MSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZzY3JpcHQuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHNjcmlwdHMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNSwxMTQgKzI1LDIwOSBAQAogICAvKiBieSBhIGRlc2NyaXB0aW9uIHN0cmluZy4gIFRoZW4gY29tZXMgdGhlIGNvcnJlc3BvbmRpbmcgSGFyZkJ1enogICovCiAgIC8qIHNjcmlwdCBuYW1lIHRhZywgZm9sbG93ZWQgYnkgYSBzdHJpbmcgb2Ygc3RhbmRhcmQgY2hhcmFjdGVycyAodG8gKi8KICAgLyogZGVyaXZlIHRoZSBzdGFuZGFyZCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHN0ZW1zKS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGUgdGhhdCBmYWxsYmFjayBzY3JpcHRzIG9ubHkgaGF2ZSBhIGRlZmF1bHQgc3R5bGUsIHRodXMgd2UgICAgKi8KKyAgLyogdXNlIGBIQl9TQ1JJUFRfSU5WQUxJRCcgYXMgdGhlIEhhcmZCdXp6IHNjcmlwdCBuYW1lIHRhZyBmb3IgICAgICAqLworICAvKiB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgU0NSSVBUKCBhcmFiLCBBUkFCLAogICAgICAgICAgICJBcmFiaWMiLAogICAgICAgICAgIEhCX1NDUklQVF9BUkFCSUMsCi0gICAgICAgICAgMHg2NDQsIDB4NjJELCAweDY0MCApIC8qINmEINitINmAICovCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEQ5XHg4NCBceEQ4XHhBRCBceEQ5XHg4MCIgKSAvKiDZhCDYrSDZgCAqLworCisgIFNDUklQVCggYXJtbiwgQVJNTiwKKyAgICAgICAgICAiQXJtZW5pYW4iLAorICAgICAgICAgIEhCX1NDUklQVF9BUk1FTklBTiwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RDVceEJEIFx4RDVceDhEIiApIC8qINW9INWNICovCisKKyAgLyogdGhlcmUgYXJlIG5vIHNpbXBsZSBmb3JtcyBmb3IgbGV0dGVyczsgd2UgdGh1cyB1c2UgdHdvIGRpZ2l0IHNoYXBlcyAqLworICBTQ1JJUFQoIGJlbmcsIEJFTkcsCisgICAgICAgICAgIkJlbmdhbGkiLAorICAgICAgICAgIEhCX1NDUklQVF9CRU5HQUxJLAorICAgICAgICAgIEhJTlRJTkdfVE9QX1RPX0JPVFRPTSwKKyAgICAgICAgICAiXHhFMFx4QTdceEE2IFx4RTBceEE3XHhBQSIgKSAvKiDgp6Yg4KeqICovCisKKyAgU0NSSVBUKCBjaGVyLCBDSEVSLAorICAgICAgICAgICJDaGVyb2tlZSIsCisgICAgICAgICAgSEJfU0NSSVBUX0NIRVJPS0VFLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4OEVceEE0IFx4RTFceDhGXHg4NSBceEVBXHhBRVx4OTUiICkgLyog4Y6kIOGPhSDqrpUgKi8KIAogICBTQ1JJUFQoIGN5cmwsIENZUkwsCiAgICAgICAgICAgIkN5cmlsbGljIiwKICAgICAgICAgICBIQl9TQ1JJUFRfQ1lSSUxMSUMsCi0gICAgICAgICAgMHg0M0UsIDB4NDFFLCAweDAgKSAvKiDQvtCeICovCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEQwXHhCRSBceEQwXHg5RSIgKSAvKiDQviDQniAqLwogCiAgIFNDUklQVCggZGV2YSwgREVWQSwKICAgICAgICAgICAiRGV2YW5hZ2FyaSIsCiAgICAgICAgICAgSEJfU0NSSVBUX0RFVkFOQUdBUkksCi0gICAgICAgICAgMHg5MjAsIDB4OTM1LCAweDkxRiApIC8qIOCkoCDgpLUg4KSfICovCisgICAgICAgICAgSElOVElOR19UT1BfVE9fQk9UVE9NLAorICAgICAgICAgICJceEUwXHhBNFx4QTAgXHhFMFx4QTRceEI1IFx4RTBceEE0XHg5RiIgKSAvKiDgpKAg4KS1IOCknyAqLworCisgIFNDUklQVCggZXRoaSwgRVRISSwKKyAgICAgICAgICAiRXRoaW9waWMiLAorICAgICAgICAgIEhCX1NDUklQVF9FVEhJT1BJQywKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTFceDhCXHg5MCIgKSAvKiDhi5AgKi8KKworICBTQ1JJUFQoIGdlb3IsIEdFT1IsCisgICAgICAgICAgIkdlb3JnaWFuIChNa2hlZHJ1bGkpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfR0VPUkdJQU4sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUxXHg4M1x4OTggXHhFMVx4ODNceDk0IFx4RTFceDgzXHg5MCIgKSAvKiDhg5gg4YOUIOGDkCAqLworCisgIFNDUklQVCggZ2VvaywgR0VPSywKKyAgICAgICAgICAiR2VvcmdpYW4gKEtodXRzdXJpKSIsCisgICAgICAgICAgSEJfU0NSSVBUX0lOVkFMSUQsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUxXHg4Mlx4QjYgXHhFMVx4ODJceEIxIFx4RTJceEI0XHg5OSIgKSAvKiDhgrYg4YKxIOK0mSAqLwogCiAgIFNDUklQVCggZ3JlaywgR1JFSywKICAgICAgICAgICAiR3JlZWsiLAogICAgICAgICAgIEhCX1NDUklQVF9HUkVFSywKLSAgICAgICAgICAweDNCRiwgMHgzOUYsIDB4MCApIC8qIM6/zp8gKi8KKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4Q0VceEJGIFx4Q0VceDlGIiApIC8qIM6/IM6fICovCisKKyAgU0NSSVBUKCBndWpyLCBHVUpSLAorICAgICAgICAgICJHdWphcmF0aSIsCisgICAgICAgICAgSEJfU0NSSVBUX0dVSkFSQVRJLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMFx4QUFceDlGIFx4RTBceEFCXHhBNiIgKSAvKiDgqp8g4KumICovCisKKyAgU0NSSVBUKCBndXJ1LCBHVVJVLAorICAgICAgICAgICJHdXJtdWtoaSIsCisgICAgICAgICAgSEJfU0NSSVBUX0dVUk1VS0hJLAorICAgICAgICAgIEhJTlRJTkdfVE9QX1RPX0JPVFRPTSwKKyAgICAgICAgICAiXHhFMFx4QThceEEwIFx4RTBceEE4XHhCMCBceEUwXHhBOVx4QTYiICkgLyog4KigIOCosCDgqaYgKi8KIAogICBTQ1JJUFQoIGhlYnIsIEhFQlIsCiAgICAgICAgICAgIkhlYnJldyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0hFQlJFVywKLSAgICAgICAgICAweDVERCwgMHgwLCAweDAgKSAvKiDXnSAqLworICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhEN1x4OUQiICkgLyog150gKi8KKworICBTQ1JJUFQoIGtuZGEsIEtOREEsCisgICAgICAgICAgIkthbm5hZGEiLAorICAgICAgICAgIEhCX1NDUklQVF9LQU5OQURBLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMFx4QjNceEE2IFx4RTBceEIyXHhBQyIgKSAvKiDgs6Yg4LKsICovCisKKyAgLyogb25seSBkaWdpdCB6ZXJvIGhhcyBhIHNpbXBsZSBzaGFwZSBpbiB0aGUgS2htZXIgc2NyaXB0ICovCisgIFNDUklQVCgga2htciwgS0hNUiwKKyAgICAgICAgICAiS2htZXIiLAorICAgICAgICAgIEhCX1NDUklQVF9LSE1FUiwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTFceDlGXHhBMCIgKSAvKiDhn6AgKi8KKworICBTQ1JJUFQoIGtobXMsIEtITVMsCisgICAgICAgICAgIktobWVyIFN5bWJvbHMiLAorICAgICAgICAgIEhCX1NDUklQVF9JTlZBTElELAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4QTdceEExIFx4RTFceEE3XHhBQSIgKSAvKiDhp6Eg4aeqICovCisKKyAgLyogb25seSBkaWdpdCB6ZXJvIGhhcyBhIHNpbXBsZSBzaGFwZSBpbiB0aGUgTGFvIHNjcmlwdCAqLworICBTQ1JJUFQoIGxhbywgTEFPLAorICAgICAgICAgICJMYW8iLAorICAgICAgICAgIEhCX1NDUklQVF9MQU8sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUwXHhCQlx4OTAiICkgLyog4LuQICovCiAKICAgU0NSSVBUKCBsYXRuLCBMQVROLAogICAgICAgICAgICJMYXRpbiIsCiAgICAgICAgICAgSEJfU0NSSVBUX0xBVElOLAotICAgICAgICAgICdvJywgJ08nLCAnMCcgKQorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAibyBPIDAiICkKKworICBTQ1JJUFQoIGxhdGIsIExBVEIsCisgICAgICAgICAgIkxhdGluIFN1YnNjcmlwdCBGYWxsYmFjayIsCisgICAgICAgICAgSEJfU0NSSVBUX0lOVkFMSUQsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUyXHg4Mlx4OTIgXHhFMlx4ODJceDgwIiApIC8qIOKCkiDigoAgKi8KKworICBTQ1JJUFQoIGxhdHAsIExBVFAsCisgICAgICAgICAgIkxhdGluIFN1cGVyc2NyaXB0IEZhbGxiYWNrIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfSU5WQUxJRCwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTFceEI1XHg5MiBceEUxXHhCNFx4QkMgXHhFMlx4ODFceEIwIiApIC8qIOG1kiDhtLwg4oGwICovCisKKyAgU0NSSVBUKCBtbHltLCBNTFlNLAorICAgICAgICAgICJNYWxheWFsYW0iLAorICAgICAgICAgIEhCX1NDUklQVF9NQUxBWUFMQU0sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUwXHhCNFx4QTAgXHhFMFx4QjRceEIxIiApIC8qIOC0oCDgtLEgKi8KKworICBTQ1JJUFQoIG15bXIsIE1ZTVIsCisgICAgICAgICAgIk15YW5tYXIiLAorICAgICAgICAgIEhCX1NDUklQVF9NWUFOTUFSLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4ODBceDlEIFx4RTFceDgwXHg4NCBceEUxXHg4MFx4ODIiICkgLyog4YCdIOGAhCDhgIIgKi8KIAogICBTQ1JJUFQoIG5vbmUsIE5PTkUsCiAgICAgICAgICAgIm5vIHNjcmlwdCIsCiAgICAgICAgICAgSEJfU0NSSVBUX0lOVkFMSUQsCi0gICAgICAgICAgMHgwLCAweDAsIDB4MCApCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICIiICkKKworICBTQ1JJUFQoIHNpbmgsIFNJTkgsCisgICAgICAgICAgIlNpbmhhbGEiLAorICAgICAgICAgIEhCX1NDUklQVF9TSU5IQUxBLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMFx4QjZceEE3IiApIC8qIOC2pyAqLworCisgIC8qIG9ubHkgZGlnaXQgemVybyBoYXMgYSBzaW1wbGUgKHJvdW5kKSBzaGFwZSBpbiB0aGUgVGFtaWwgc2NyaXB0ICovCisgIFNDUklQVCggdGFtbCwgVEFNTCwKKyAgICAgICAgICAiVGFtaWwiLAorICAgICAgICAgIEhCX1NDUklQVF9UQU1JTCwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTBceEFGXHhBNiIgKSAvKiDgr6YgKi8KIAogICAvKiB0aGVyZSBhcmUgbm8gc2ltcGxlIGZvcm1zIGZvciBsZXR0ZXJzOyB3ZSB0aHVzIHVzZSB0d28gZGlnaXQgc2hhcGVzICovCiAgIFNDUklQVCggdGVsdSwgVEVMVSwKICAgICAgICAgICAiVGVsdWd1IiwKICAgICAgICAgICBIQl9TQ1JJUFRfVEVMVUdVLAotICAgICAgICAgIDB4QzY2LCAweEM2NywgMHgwICkgLyog4LGmIOCxpyAqLworICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMFx4QjFceEE2IFx4RTBceEIxXHhBNyIgKSAvKiDgsaYg4LGnICovCiAKICAgU0NSSVBUKCB0aGFpLCBUSEFJLAogICAgICAgICAgICJUaGFpIiwKICAgICAgICAgICBIQl9TQ1JJUFRfVEhBSSwKLSAgICAgICAgICAweEUzMiwgMHhFNDUsIDB4RTUwICkgLyog4LiyIOC5hSDguZAgKi8KKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTBceEI4XHhCMiBceEUwXHhCOVx4ODUgXHhFMFx4QjlceDkwIiApIC8qIOC4siDguYUg4LmQICovCiAKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0lORElDCiAKLSAgU0NSSVBUKCBiZW5nLCBCRU5HLAotICAgICAgICAgICJCZW5nYWxpIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfQkVOR0FMSSwKLSAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCi0KLSAgU0NSSVBUKCBndWpyLCBHVUpSLAotICAgICAgICAgICJHdWphcmF0aSIsCi0gICAgICAgICAgSEJfU0NSSVBUX0dVSkFSQVRJLAotICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KLQotICBTQ1JJUFQoIGd1cnUsIEdVUlUsCi0gICAgICAgICAgIkd1cm11a2hpIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfR1VSTVVLSEksCi0gICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLwotCi0gIFNDUklQVCgga25kYSwgS05EQSwKLSAgICAgICAgICAiS2FubmFkYSIsCi0gICAgICAgICAgSEJfU0NSSVBUX0tBTk5BREEsCi0gICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLwotCiAgIFNDUklQVCggbGltYiwgTElNQiwKICAgICAgICAgICAiTGltYnUiLAogICAgICAgICAgIEhCX1NDUklQVF9MSU1CVSwKLSAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCi0KLSAgU0NSSVBUKCBtbHltLCBNTFlNLAotICAgICAgICAgICJNYWxheWFsYW0iLAotICAgICAgICAgIEhCX1NDUklQVF9NQUxBWUFMQU0sCi0gICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLworICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAibyIgKSAvKiBYWFggKi8KIAogICBTQ1JJUFQoIG9yeWEsIE9SWUEsCiAgICAgICAgICAgIk9yaXlhIiwKICAgICAgICAgICBIQl9TQ1JJUFRfT1JJWUEsCi0gICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLwotCi0gIFNDUklQVCggc2luaCwgU0lOSCwKLSAgICAgICAgICAiU2luaGFsYSIsCi0gICAgICAgICAgSEJfU0NSSVBUX1NJTkhBTEEsCi0gICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLworICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAibyIgKSAvKiBYWFggKi8KIAogICBTQ1JJUFQoIHN1bmQsIFNVTkQsCiAgICAgICAgICAgIlN1bmRhbmVzZSIsCiAgICAgICAgICAgSEJfU0NSSVBUX1NVTkRBTkVTRSwKLSAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJvIiApIC8qIFhYWCAqLwogCiAgIFNDUklQVCggc3lsbywgU1lMTywKICAgICAgICAgICAiU3lsb3RpIE5hZ3JpIiwKICAgICAgICAgICBIQl9TQ1JJUFRfU1lMT1RJX05BR1JJLAotICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KLQotICBTQ1JJUFQoIHRhbWwsIFRBTUwsCi0gICAgICAgICAgIlRhbWlsIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfVEFNSUwsCi0gICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLworICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAibyIgKSAvKiBYWFggKi8KIAogICBTQ1JJUFQoIHRpYnQsIFRJQlQsCiAgICAgICAgICAgIlRpYmV0YW4iLAogICAgICAgICAgIEhCX1NDUklQVF9USUJFVEFOLAotICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIm8iICkgLyogWFhYICovCiAKICNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0lORElDICovCiAKQEAgLTE0MSw3ICsyMzYsOCBAQAogICBTQ1JJUFQoIGhhbmksIEhBTkksCiAgICAgICAgICAgIkNKS1YgaWRlb2dyYXBocyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0hBTiwKLSAgICAgICAgICAweDc1MzAsIDB4NTZENywgMHgwICkgLyog55Sw5ZuXICovCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEU3XHg5NFx4QjAgXHhFNVx4OUJceDk3IiApIC8qIOeUsCDlm5cgKi8KIAogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLICovCiAKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2hic2hpbS5jIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuYwpzaW1pbGFyaXR5IGluZGV4IDY4JQpyZW5hbWUgZnJvbSBzcmMvYXV0b2ZpdC9oYnNoaW0uYwpyZW5hbWUgdG8gc3JjL2F1dG9maXQvYWZzaGFwZXIuYwppbmRleCBjOWMxZGIwLi42ZDEzYjY1IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9oYnNoaW0uYworKysgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5jCkBAIC0xLDEwICsxLDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBoYnNoaW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZzaGFwZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhhcmZCdXp6IGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIE9wZW5UeXBlIGZlYXR1cmVzIChib2R5KS4gICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKICNpbmNsdWRlICJhZnR5cGVzLmgiCi0jaW5jbHVkZSAiaGJzaGltLmgiCisjaW5jbHVkZSAiYWZzaGFwZXIuaCIKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCiAKQEAgLTMyLDcgKzMyLDcgQEAKICAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKLSNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZmhhcmZidXp6CisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYWZzaGFwZXIKIAogCiAgIC8qCkBAIC04Niw3ICs4Niw3IEBACiAKICAgLyogbG9hZCBIYXJmQnV6eiBzY3JpcHQgdGFncyAqLwogI3VuZGVmICBTQ1JJUFQKLSNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzYzEsIHNjMiwgc2MzICkgIGgsCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3MgKSAgaCwKIAogCiAgIHN0YXRpYyBjb25zdCBoYl9zY3JpcHRfdCAgc2NyaXB0c1tdID0KQEAgLTk2LDkgKzk2LDEwIEBACiAKIAogICBGVF9FcnJvcgotICBhZl9nZXRfY292ZXJhZ2UoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzLAotICAgICAgICAgICAgICAgICAgIEFGX1N0eWxlQ2xhc3MgICBzdHlsZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgZ3N0eWxlcyApCisgIGFmX3NoYXBlcl9nZXRfY292ZXJhZ2UoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICBnc3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZGVmYXVsdF9zY3JpcHQgKQogICB7CiAgICAgaGJfZmFjZV90KiAgZmFjZTsKIApAQCAtMTQzLDggKzE0NCw3IEBACiAgICAgLyogYGhiX290X3RhZ3NfZnJvbV9zY3JpcHQnIHVzdWFsbHkgcmV0dXJucyBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQgKi8KICAgICAvKiBhcyB0aGUgc2Vjb25kIHRhZy4gIFdlIGNoYW5nZSB0aGF0IHRvIEhCX1RBR19OT05FIGV4Y2VwdCBmb3IgdGhlICAqLwogICAgIC8qIGRlZmF1bHQgc2NyaXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBzdHlsZV9jbGFzcy0+c2NyaXB0ID09IGdsb2JhbHMtPm1vZHVsZS0+ZGVmYXVsdF9zY3JpcHQgJiYKLSAgICAgICAgIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSA9PSBBRl9DT1ZFUkFHRV9ERUZBVUxUICAgICAgICAgICApCisgICAgaWYgKCBkZWZhdWx0X3NjcmlwdCApCiAgICAgewogICAgICAgaWYgKCBzY3JpcHRfdGFnc1swXSA9PSBIQl9UQUdfTk9ORSApCiAgICAgICAgIHNjcmlwdF90YWdzWzBdID0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUOwpAQCAtMTU4LDYgKzE1OCwxMSBAQAogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICAgLyogd2UgdXNlIG5vbi1zdGFuZGFyZCB0YWdzIGxpa2UgYGtobXMnIGZvciBzcGVjaWFsIHB1cnBvc2VzOyAgICAgICAqLworICAgICAgLyogSGFyZkJ1enogbWFwcyB0aGVtIHRvIGBERkxUJywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBoYW5kbGUgaGVyZSAqLworICAgICAgaWYgKCBzY3JpcHRfdGFnc1swXSA9PSBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQgKQorICAgICAgICBnb3RvIEV4aXQ7CisKICAgICAgIGlmICggc2NyaXB0X3RhZ3NbMV0gPT0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUICkKICAgICAgICAgc2NyaXB0X3RhZ3NbMV0gPSBIQl9UQUdfTk9ORTsKICAgICB9CkBAIC0zNjMsNyArMzY4LDcgQEAKICAgICAgICAgY29udGludWU7CiAKICAgICAgIGlmICggZ3N0eWxlc1tpZHhdID09IEFGX1NUWUxFX1VOQVNTSUdORUQgKQotICAgICAgICBnc3R5bGVzW2lkeF0gPSAoRlRfQnl0ZSlzdHlsZV9jbGFzcy0+c3R5bGU7CisgICAgICAgIGdzdHlsZXNbaWR4XSA9IChGVF9VU2hvcnQpc3R5bGVfY2xhc3MtPnN0eWxlOwogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAgICAgICBlbHNlCiAgICAgICAgIEZUX1RSQUNFNCgoICIqIiApKTsKQEAgLTQxOCw4OCArNDIzLDE1MCBAQAogICB9OwogCiAKLSAgRlRfRXJyb3IKLSAgYWZfZ2V0X2NoYXJfaW5kZXgoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKLSAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgY2hhcmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgKmNvZGVwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAqeV9vZmZzZXQgKQorICB2b2lkKgorICBhZl9zaGFwZXJfYnVmX2NyZWF0ZSggRlRfRmFjZSAgZmFjZSApCiAgIHsKLSAgICBBRl9TdHlsZUNsYXNzICBzdHlsZV9jbGFzczsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKIAorICAgIHJldHVybiAodm9pZCopaGJfYnVmZmVyX2NyZWF0ZSgpOworICB9CisKKworICB2b2lkCisgIGFmX3NoYXBlcl9idWZfZGVzdHJveSggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICBidWYgKQorICB7CisgICAgRlRfVU5VU0VEKCBmYWNlICk7CisKKyAgICBoYl9idWZmZXJfZGVzdHJveSggKGhiX2J1ZmZlcl90KilidWYgKTsKKyAgfQorCisKKyAgY29uc3QgY2hhcioKKyAgYWZfc2hhcGVyX2dldF9jbHVzdGVyKCBjb25zdCBjaGFyKiAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgYnVmXywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqICAgIGNvdW50ICkKKyAgeworICAgIEFGX1N0eWxlQ2xhc3MgICAgICAgIHN0eWxlX2NsYXNzOwogICAgIGNvbnN0IGhiX2ZlYXR1cmVfdCogIGZlYXR1cmU7CisgICAgRlRfSW50ICAgICAgICAgICAgICAgdXBlbTsKKyAgICBjb25zdCBjaGFyKiAgICAgICAgICBxOworICAgIGludCAgICAgICAgICAgICAgICAgIGxlbjsKIAotICAgIEZUX1VMb25nICBpbl9pZHgsIG91dF9pZHg7CisgICAgaGJfYnVmZmVyX3QqICAgIGJ1ZiA9IChoYl9idWZmZXJfdCopYnVmXzsKKyAgICBoYl9mb250X3QqICAgICAgZm9udDsKKyAgICBoYl9jb2RlcG9pbnRfdCAgZHVtbXk7CiAKIAotICAgIGlmICggIW1ldHJpY3MgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBpbl9pZHggPSBGVF9HZXRfQ2hhcl9JbmRleCggbWV0cmljcy0+Z2xvYmFscy0+ZmFjZSwgY2hhcmNvZGUgKTsKLQorICAgIHVwZW0gICAgICAgID0gKEZUX0ludCltZXRyaWNzLT5nbG9iYWxzLT5mYWNlLT51bml0c19wZXJfRU07CiAgICAgc3R5bGVfY2xhc3MgPSBtZXRyaWNzLT5zdHlsZV9jbGFzczsKKyAgICBmZWF0dXJlICAgICA9IGZlYXR1cmVzW3N0eWxlX2NsYXNzLT5jb3ZlcmFnZV07CiAKLSAgICBmZWF0dXJlID0gZmVhdHVyZXNbc3R5bGVfY2xhc3MtPmNvdmVyYWdlXTsKKyAgICBmb250ID0gbWV0cmljcy0+Z2xvYmFscy0+aGJfZm9udDsKKworICAgIC8qIHdlIHNoYXBlIGF0IGEgc2l6ZSBvZiB1bml0cyBwZXIgRU07IHRoaXMgbWVhbnMgZm9udCB1bml0cyAqLworICAgIGhiX2ZvbnRfc2V0X3NjYWxlKCBmb250LCB1cGVtLCB1cGVtICk7CisKKyAgICB3aGlsZSAoICpwID09ICcgJyApCisgICAgICBwKys7CisKKyAgICAvKiBjb3VudCBieXRlcyB1cCB0byBuZXh0IHNwYWNlIChvciBlbmQgb2YgYnVmZmVyKSAqLworICAgIHEgPSBwOworICAgIHdoaWxlICggISggKnEgPT0gJyAnIHx8ICpxID09ICdcMCcgKSApCisgICAgICBHRVRfVVRGOF9DSEFSKCBkdW1teSwgcSApOworICAgIGxlbiA9IChpbnQpKCBxIC0gcCApOworCisgICAgLyogZmVlZCBjaGFyYWN0ZXIocykgdG8gdGhlIEhhcmZCdXp6IGJ1ZmZlciAqLworICAgIGhiX2J1ZmZlcl9jbGVhcl9jb250ZW50cyggYnVmICk7CisgICAgaGJfYnVmZmVyX2FkZF91dGY4KCBidWYsIHAsIGxlbiwgMCwgbGVuICk7CisKKyAgICAvKiB3ZSBsZXQgSGFyZkJ1enogZ3Vlc3MgdGhlIHNjcmlwdCBhbmQgd3JpdGluZyBkaXJlY3Rpb24gKi8KKyAgICBoYl9idWZmZXJfZ3Vlc3Nfc2VnbWVudF9wcm9wZXJ0aWVzKCBidWYgKTsKKworICAgIC8qIHNoYXBlIGJ1ZmZlciwgd2hpY2ggbWVhbnMgY29udmVyc2lvbiBmcm9tIGNoYXJhY3RlciBjb2RlcyB0byAqLworICAgIC8qIGdseXBoIGluZGljZXMsIHBvc3NpYmx5IGFwcGx5aW5nIGEgZmVhdHVyZSAgICAgICAgICAgICAgICAgICAqLworICAgIGhiX3NoYXBlKCBmb250LCBidWYsIGZlYXR1cmUsIGZlYXR1cmUgPyAxIDogMCApOwogCiAgICAgaWYgKCBmZWF0dXJlICkKICAgICB7Ci0gICAgICBGVF9JbnQgIHVwZW0gPSAoRlRfSW50KW1ldHJpY3MtPmdsb2JhbHMtPmZhY2UtPnVuaXRzX3Blcl9FTTsKKyAgICAgIGhiX2J1ZmZlcl90KiAgaGJfYnVmID0gbWV0cmljcy0+Z2xvYmFscy0+aGJfYnVmOwogCi0gICAgICBoYl9mb250X3QqICAgIGZvbnQgPSBtZXRyaWNzLT5nbG9iYWxzLT5oYl9mb250OwotICAgICAgaGJfYnVmZmVyX3QqICBidWYgID0gaGJfYnVmZmVyX2NyZWF0ZSgpOworICAgICAgdW5zaWduZWQgaW50ICAgICAgZ2NvdW50OworICAgICAgaGJfZ2x5cGhfaW5mb190KiAgZ2luZm87CiAKLSAgICAgIHVpbnQzMl90ICBjID0gKHVpbnQzMl90KWNoYXJjb2RlOwotCi0gICAgICBoYl9nbHlwaF9pbmZvX3QqICAgICAgZ2luZm87Ci0gICAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiAgZ3BvczsKLSAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICBnY291bnQ7CisgICAgICB1bnNpZ25lZCBpbnQgICAgICBoYl9nY291bnQ7CisgICAgICBoYl9nbHlwaF9pbmZvX3QqICBoYl9naW5mbzsKIAogCi0gICAgICAvKiB3ZSBzaGFwZSBhdCBhIHNpemUgb2YgdW5pdHMgcGVyIEVNOyB0aGlzIG1lYW5zIGZvbnQgdW5pdHMgKi8KLSAgICAgIGhiX2ZvbnRfc2V0X3NjYWxlKCBmb250LCB1cGVtLCB1cGVtICk7CisgICAgICAvKiB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgYXBwbHlpbmcgYSBmZWF0dXJlIGRvZXMgYWN0dWFsbHkgY2hhbmdlICovCisgICAgICAvKiBnbHlwaCBpbmRpY2VzOyBvdGhlcndpc2UgdGhlIGFmZmVjdGVkIGdseXBoIG9yIGdseXBocyBhcmVuJ3QgICAgICovCisgICAgICAvKiBhdmFpbGFibGUgYXQgYWxsIGluIHRoZSBmZWF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgIC8qIFhYWDogaXMgdGhpcyBzdWZmaWNpZW50IGZvciBhIHNpbmdsZSBjaGFyYWN0ZXIgb2YgYW55IHNjcmlwdD8gKi8KLSAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKCBidWYsIEhCX0RJUkVDVElPTl9MVFIgKTsKLSAgICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KCBidWYsIHNjcmlwdHNbc3R5bGVfY2xhc3MtPnNjcmlwdF0gKTsKKyAgICAgIGhiX2J1ZmZlcl9jbGVhcl9jb250ZW50cyggaGJfYnVmICk7CisgICAgICBoYl9idWZmZXJfYWRkX3V0ZjgoIGhiX2J1ZiwgcCwgbGVuLCAwLCBsZW4gKTsKKyAgICAgIGhiX2J1ZmZlcl9ndWVzc19zZWdtZW50X3Byb3BlcnRpZXMoIGhiX2J1ZiApOworICAgICAgaGJfc2hhcGUoIGZvbnQsIGhiX2J1ZiwgTlVMTCwgMCApOwogCi0gICAgICAvKiB3ZSBhZGQgb25lIGNoYXJhY3RlciB0byBgYnVmJyAuLi4gKi8KLSAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMzIoIGJ1ZiwgJmMsIDEsIDAsIDEgKTsKKyAgICAgIGdpbmZvICAgID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyggYnVmLCAmZ2NvdW50ICk7CisgICAgICBoYl9naW5mbyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MoIGhiX2J1ZiwgJmhiX2djb3VudCApOwogCi0gICAgICAvKiAuLi4gYW5kIGFwcGx5IG9uZSBmZWF0dXJlICovCi0gICAgICBoYl9zaGFwZSggZm9udCwgYnVmLCBmZWF0dXJlLCAxICk7Ci0KLSAgICAgIGdpbmZvID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyggYnVmLCAmZ2NvdW50ICk7Ci0gICAgICBncG9zICA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKCBidWYsICZnY291bnQgKTsKLQotICAgICAgb3V0X2lkeCA9IGdpbmZvWzBdLmNvZGVwb2ludDsKLQotICAgICAgLyogZ2V0dGluZyB0aGUgc2FtZSBpbmRleCBpbmRpY2F0ZXMgbm8gc3Vic3RpdHV0aW9uLCAgICAgICAgICovCi0gICAgICAvKiB3aGljaCBtZWFucyB0aGF0IHRoZSBnbHlwaCBpc24ndCBhdmFpbGFibGUgaW4gdGhlIGZlYXR1cmUgKi8KLSAgICAgIGlmICggaW5faWR4ID09IG91dF9pZHggKQorICAgICAgaWYgKCBnY291bnQgPT0gaGJfZ2NvdW50ICkKICAgICAgIHsKLSAgICAgICAgKmNvZGVwb2ludCA9IDA7Ci0gICAgICAgICp5X29mZnNldCAgPSAwOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAqY29kZXBvaW50ID0gb3V0X2lkeDsKLSAgICAgICAgKnlfb2Zmc2V0ICA9IGdwb3NbMF0ueV9vZmZzZXQ7Ci0gICAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCAgaTsKIAotICAgICAgaGJfYnVmZmVyX2Rlc3Ryb3koIGJ1ZiApOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBnY291bnQ7IGkrKyApCisgICAgICAgICAgaWYgKCBnaW5mb1tpXS5jb2RlcG9pbnQgIT0gaGJfZ2luZm9baV0uY29kZXBvaW50ICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggaSA9PSBnY291bnQgKQorICAgICAgICB7CisgICAgICAgICAgLyogYm90aCBidWZmZXJzIGhhdmUgaWRlbnRpY2FsIGdseXBoIGluZGljZXMgKi8KKyAgICAgICAgICBoYl9idWZmZXJfY2xlYXJfY29udGVudHMoIGJ1ZiApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgKmNvdW50ID0gaGJfYnVmZmVyX2dldF9sZW5ndGgoIGJ1ZiApOwogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgIGlmICggZ2NvdW50ID4gMSApCi0gICAgICAgIEZUX1RSQUNFMSgoICJhZl9nZXRfY2hhcl9pbmRleDoiCi0gICAgICAgICAgICAgICAgICAgICIgaW5wdXQgY2hhcmFjdGVyIG1hcHBlZCB0byBtdWx0aXBsZSBnbHlwaHNcbiIgKSk7CisgICAgaWYgKCBmZWF0dXJlICYmICpjb3VudCA+IDEgKQorICAgICAgRlRfVFJBQ0UxKCggImFmX3NoYXBlcl9nZXRfY2x1c3RlcjoiCisgICAgICAgICAgICAgICAgICAiIGlucHV0IGNoYXJhY3RlciBtYXBwZWQgdG8gbXVsdGlwbGUgZ2x5cGhzXG4iICkpOwogI2VuZGlmCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAqY29kZXBvaW50ID0gaW5faWR4OwotICAgICAgKnlfb2Zmc2V0ICA9IDA7Ci0gICAgfQogCi0gICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICByZXR1cm4gcTsKKyAgfQorCisKKyAgRlRfVUxvbmcKKyAgYWZfc2hhcGVyX2dldF9lbGVtKCBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICBidWZfLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICAgYWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgIHlfb2Zmc2V0ICkKKyAgeworICAgIGhiX2J1ZmZlcl90KiAgICAgICAgICBidWYgPSAoaGJfYnVmZmVyX3QqKWJ1Zl87CisgICAgaGJfZ2x5cGhfaW5mb190KiAgICAgIGdpbmZvOworICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqICBncG9zOworICAgIHVuc2lnbmVkIGludCAgICAgICAgICBnY291bnQ7CisKKyAgICBGVF9VTlVTRUQoIG1ldHJpY3MgKTsKKworCisgICAgZ2luZm8gPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKCBidWYsICZnY291bnQgKTsKKyAgICBncG9zICA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKCBidWYsICZnY291bnQgKTsKKworICAgIGlmICggaWR4ID49IGdjb3VudCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggYWR2YW5jZSApCisgICAgICAqYWR2YW5jZSA9IGdwb3NbaWR4XS54X2FkdmFuY2U7CisgICAgaWYgKCB5X29mZnNldCApCisgICAgICAqeV9vZmZzZXQgPSBncG9zW2lkeF0ueV9vZmZzZXQ7CisKKyAgICByZXR1cm4gZ2luZm9baWR4XS5jb2RlcG9pbnQ7CiAgIH0KIAogCkBAIC01MDcsMzYgKzU3NCwxMDYgQEAKIAogCiAgIEZUX0Vycm9yCi0gIGFmX2dldF9jb3ZlcmFnZSggQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBnc3R5bGVzICkKKyAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1N0eWxlQ2xhc3MgICBzdHlsZV9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgIGdzdHlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICBkZWZhdWx0X3NjcmlwdCApCiAgIHsKICAgICBGVF9VTlVTRUQoIGdsb2JhbHMgKTsKICAgICBGVF9VTlVTRUQoIHN0eWxlX2NsYXNzICk7CiAgICAgRlRfVU5VU0VEKCBnc3R5bGVzICk7CisgICAgRlRfVU5VU0VEKCBkZWZhdWx0X3NjcmlwdCApOwogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQogCiAKLSAgRlRfRXJyb3IKLSAgYWZfZ2V0X2NoYXJfaW5kZXgoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKLSAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgY2hhcmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgKmNvZGVwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAqeV9vZmZzZXQgKQorICB2b2lkKgorICBhZl9zaGFwZXJfYnVmX2NyZWF0ZSggRlRfRmFjZSAgZmFjZSApCiAgIHsKLSAgICBGVF9GYWNlICBmYWNlOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5tZW1vcnk7CisgICAgRlRfVUxvbmcqICBidWY7CiAKIAotICAgIGlmICggIW1ldHJpY3MgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgRlRfTUVNX0FMTE9DKCBidWYsIHNpemVvZiAoIEZUX1VMb25nICkgKTsKIAotICAgIGZhY2UgPSBtZXRyaWNzLT5nbG9iYWxzLT5mYWNlOworICAgIHJldHVybiAodm9pZCopYnVmOworICB9CiAKLSAgICAqY29kZXBvaW50ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGNoYXJjb2RlICk7Ci0gICAgKnlfb2Zmc2V0ICA9IDA7CiAKLSAgICByZXR1cm4gRlRfRXJyX09rOworICB2b2lkCisgIGFmX3NoYXBlcl9idWZfZGVzdHJveSggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICBidWYgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5tZW1vcnk7CisKKworICAgIEZUX0ZSRUUoIGJ1ZiApOworICB9CisKKworICBjb25zdCBjaGFyKgorICBhZl9zaGFwZXJfZ2V0X2NsdXN0ZXIoIGNvbnN0IGNoYXIqICAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICBidWZfLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogICAgY291bnQgKQorICB7CisgICAgRlRfRmFjZSAgICBmYWNlICAgICAgPSBtZXRyaWNzLT5nbG9iYWxzLT5mYWNlOworICAgIEZUX1VMb25nICAgY2gsIGR1bW15ID0gMDsKKyAgICBGVF9VTG9uZyogIGJ1ZiAgICAgICA9IChGVF9VTG9uZyopYnVmXzsKKworCisgICAgd2hpbGUgKCAqcCA9PSAnICcgKQorICAgICAgcCsrOworCisgICAgR0VUX1VURjhfQ0hBUiggY2gsIHAgKTsKKworICAgIC8qIHNpbmNlIHdlIGRvbid0IGhhdmUgYW4gZW5naW5lIHRvIGhhbmRsZSBjbHVzdGVycywgKi8KKyAgICAvKiB3ZSBzY2FuIHRoZSBjaGFyYWN0ZXJzIGJ1dCByZXR1cm4gemVybyAgICAgICAgICAgICovCisgICAgd2hpbGUgKCAhKCAqcCA9PSAnICcgfHwgKnAgPT0gJ1wwJyApICkKKyAgICAgIEdFVF9VVEY4X0NIQVIoIGR1bW15LCBwICk7CisKKyAgICBpZiAoIGR1bW15ICkKKyAgICB7CisgICAgICAqYnVmICAgPSAwOworICAgICAgKmNvdW50ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICpidWYgICA9IEZUX0dldF9DaGFyX0luZGV4KCBmYWNlLCBjaCApOworICAgICAgKmNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gcDsKKyAgfQorCisKKyAgRlRfVUxvbmcKKyAgYWZfc2hhcGVyX2dldF9lbGVtKCBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICBidWZfLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICAgYWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgIHlfb2Zmc2V0ICkKKyAgeworICAgIEZUX0ZhY2UgICBmYWNlICAgICAgICA9IG1ldHJpY3MtPmdsb2JhbHMtPmZhY2U7CisgICAgRlRfVUxvbmcgIGdseXBoX2luZGV4ID0gKihGVF9VTG9uZyopYnVmXzsKKworICAgIEZUX1VOVVNFRCggaWR4ICk7CisKKworICAgIGlmICggYWR2YW5jZSApCisgICAgICBGVF9HZXRfQWR2YW5jZSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX05PX1NDQUxFICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfTk9fSElOVElORyAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKTsKKworICAgIGlmICggeV9vZmZzZXQgKQorICAgICAgKnlfb2Zmc2V0ID0gMDsKKworICAgIHJldHVybiBnbHlwaF9pbmRleDsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmggYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDFmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmc2hhcGVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoc3BlY2lmaWNhdGlvbikuICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBBRlNIQVBFUl9IXworI2RlZmluZSBBRlNIQVBFUl9IXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgorCisjaW5jbHVkZSA8aGIuaD4KKyNpbmNsdWRlIDxoYi1vdC5oPgorI2luY2x1ZGUgPGhiLWZ0Lmg+CisKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIEZUX0Vycm9yCisgIGFmX3NoYXBlcl9nZXRfY292ZXJhZ2UoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICBnc3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZGVmYXVsdF9zY3JpcHQgKTsKKworCisgIHZvaWQqCisgIGFmX3NoYXBlcl9idWZfY3JlYXRlKCBGVF9GYWNlICBmYWNlICk7CisKKyAgdm9pZAorICBhZl9zaGFwZXJfYnVmX2Rlc3Ryb3koIEZUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgYnVmICk7CisKKyAgY29uc3QgY2hhcioKKyAgYWZfc2hhcGVyX2dldF9jbHVzdGVyKCBjb25zdCBjaGFyKiAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgYnVmXywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqICAgIGNvdW50ICk7CisKKyAgRlRfVUxvbmcKKyAgYWZfc2hhcGVyX2dldF9lbGVtKCBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICBidWZfLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICAgeF9hZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICAgeV9vZmZzZXQgKTsKKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIEFGU0hBUEVSX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oIGIvc3JjL2F1dG9maXQvYWZzdHlsZXMuaAppbmRleCBiZmQ1YmI5Li5lODNhOTViIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oCisrKyBiL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgc3R5bGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI3LDcgKzI3LDkgQEAKICAgLyogY292ZXJhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE5vdGUgdGhhdCBzdHlsZXMgdXNpbmcgYEFGX0NPVkVSQUdFX0RFRkFVTFQnIHNob3VsZCBhbHdheXMgICAgKi8KLSAgLyogY29tZSBhZnRlciBzdHlsZXMgd2l0aCBvdGhlciBjb3ZlcmFnZXMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBjb21lIGFmdGVyIHN0eWxlcyB3aXRoIG90aGVyIGNvdmVyYWdlcy4gIEFsc28gbm90ZSB0aGF0ICAgICAgICovCisgIC8qIGZhbGxiYWNrIHNjcmlwdHMgb25seSB1c2UgYEFGX0NPVkVSQUdFX0RFRkFVTFQnIGZvciBpdHMgICAgICAgKi8KKyAgLyogc3R5bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTAsMTAgKzUyLDEwIEBACiAjdW5kZWYgIE1FVEFfU1RZTEVfTEFUSU4KICNkZWZpbmUgTUVUQV9TVFlMRV9MQVRJTiggcywgUywgZHMgKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBTVFlMRV9MQVRJTiggcywgUywgYzJjcCwgQzJDUCwgZHMsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgInBldGl0ZSBjYXB0aWNhbHMgZnJvbSBjYXBpdGFscyIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgInBldGl0ZSBjYXBpdGFscyBmcm9tIGNhcGl0YWxzIiwgXAogICAgICAgICAgICAgICAgICAgICAgICBQRVRJVEVfQ0FQSVRBTFNfRlJPTV9DQVBJVEFMUyApICAgXAogICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBjMnNjLCBDMlNDLCBkcywgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAic21hbGwgY2FwdGljYWxzIGZyb20gY2FwaXRhbHMiLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAic21hbGwgY2FwaXRhbHMgZnJvbSBjYXBpdGFscyIsICBcCiAgICAgICAgICAgICAgICAgICAgICAgIFNNQUxMX0NBUElUQUxTX0ZST01fQ0FQSVRBTFMgKSAgICBcCiAgICAgICAgICAgU1RZTEVfTEFUSU4oIHMsIFMsIG9yZG4sIE9SRE4sIGRzLCAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICJvcmRpbmFscyIsICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04OCwyMyArOTAsMTIyIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9BUkFCLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIGFybW5fZGZsdCwgQVJNTl9ERkxULAorICAgICAgICAgIkFybWVuaWFuIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfQVJNTiwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FSTU4sCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggYmVuZ19kZmx0LCBCRU5HX0RGTFQsCisgICAgICAgICAiQmVuZ2FsaSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0JFTkcsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9CRU5HLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGNoZXJfZGZsdCwgQ0hFUl9ERkxULAorICAgICAgICAgIkNoZXJva2VlIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfQ0hFUiwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NIRVIsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBNRVRBX1NUWUxFX0xBVElOKCBjeXJsLCBDWVJMLCAiQ3lyaWxsaWMiICkKIAorICBTVFlMRSggZGV2YV9kZmx0LCBERVZBX0RGTFQsCisgICAgICAgICAiRGV2YW5hZ2FyaSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0RFVkEsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGV0aGlfZGZsdCwgRVRISV9ERkxULAorICAgICAgICAgIkV0aGlvcGljIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfRVRISSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0VUSEksCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggZ2Vvcl9kZmx0LCBHRU9SX0RGTFQsCisgICAgICAgICAiR2VvcmdpYW4gKE1raGVkcnVsaSkgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9HRU9SLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPUiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBnZW9rX2RmbHQsIEdFT0tfREZMVCwKKyAgICAgICAgICJHZW9yZ2lhbiAoS2h1dHN1cmkpIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfR0VPSywKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dFT0ssCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBNRVRBX1NUWUxFX0xBVElOKCBncmVrLCBHUkVLLCAiR3JlZWsiICkKIAorICBTVFlMRSggZ3Vqcl9kZmx0LCBHVUpSX0RGTFQsCisgICAgICAgICAiR3VqYXJhdGkgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9HVUpSLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VKUiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBndXJ1X2RmbHQsIEdVUlVfREZMVCwKKyAgICAgICAgICJHdXJtdWtoaSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0dVUlUsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9HVVJVLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIGhlYnJfZGZsdCwgSEVCUl9ERkxULAogICAgICAgICAgIkhlYnJldyBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAogICAgICAgICAgQUZfU0NSSVBUX0hFQlIsCiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGtuZGFfZGZsdCwgS05EQV9ERkxULAorICAgICAgICAgIkthbm5hZGEgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9LTkRBLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQSwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBraG1yX2RmbHQsIEtITVJfREZMVCwKKyAgICAgICAgICJLaG1lciBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0tITVIsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1SLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGtobXNfZGZsdCwgS0hNU19ERkxULAorICAgICAgICAgIktobWVyIFN5bWJvbHMgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9LSE1TLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUywKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBsYW9fZGZsdCwgTEFPX0RGTFQsCisgICAgICAgICAiTGFvIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfTEFPLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFPLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgTUVUQV9TVFlMRV9MQVRJTiggbGF0biwgTEFUTiwgIkxhdGluIiApCiAKLSAgU1RZTEUoIGRldmFfZGZsdCwgREVWQV9ERkxULAotICAgICAgICAgIkRldmFuYWdhcmkgZGVmYXVsdCBzdHlsZSIsCisgIFNUWUxFKCBsYXRiX2RmbHQsIExBVEJfREZMVCwKKyAgICAgICAgICJMYXRpbiBzdWJzY3JpcHQgZmFsbGJhY2sgZGVmYXVsdCBzdHlsZSIsCiAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKLSAgICAgICAgIEFGX1NDUklQVF9ERVZBLAotICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfREVWQSwKKyAgICAgICAgIEFGX1NDUklQVF9MQVRCLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUQiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBsYXRwX2RmbHQsIExBVFBfREZMVCwKKyAgICAgICAgICJMYXRpbiBzdXBlcnNjcmlwdCBmYWxsYmFjayBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0xBVFAsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRQLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKICNpZmRlZiBGVF9PUFRJT05fQVVUT0ZJVDIKQEAgLTExNiwxMSArMjE3LDM5IEBACiAgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKICNlbmRpZgogCisgIFNUWUxFKCBtbHltX2RmbHQsIE1MWU1fREZMVCwKKyAgICAgICAgICJNYWxheWFsYW0gZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9NTFlNLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTUxZTSwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBteW1yX2RmbHQsIE1ZTVJfREZMVCwKKyAgICAgICAgICJNeWFubWFyIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfTVlNUiwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggbm9uZV9kZmx0LCBOT05FX0RGTFQsCiAgICAgICAgICAibm8gc3R5bGUiLAogICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fRFVNTVksCiAgICAgICAgICBBRl9TQ1JJUFRfTk9ORSwKLSAgICAgICAgIChBRl9CbHVlX1N0cmluZ3NldCkwLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTk9ORSwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBzaW5oX2RmbHQsIFNJTkhfREZMVCwKKyAgICAgICAgICJTaW5oYWxhIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfU0lOSCwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NJTkgsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggdGFtbF9kZmx0LCBUQU1MX0RGTFQsCisgICAgICAgICAiVGFtaWwgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9UQU1MLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEFNTCwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCiAgIFNUWUxFKCB0ZWx1X2RmbHQsIFRFTFVfREZMVCwKQEAgLTE0OSwxNyArMjc4LDEwIEBACiAgICAgICAgICAgICAgICAgIChBRl9CbHVlX1N0cmluZ3NldCkwLCAgICBcCiAgICAgICAgICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIGJlbmcsIEJFTkcsICJCZW5nYWxpIiApCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIGd1anIsIEdVSlIsICJHdWphcmF0aSIgKQotICBTVFlMRV9ERUZBVUxUX0lORElDKCBndXJ1LCBHVVJVLCAiR3VybXVraGkiICkKLSAgU1RZTEVfREVGQVVMVF9JTkRJQygga25kYSwgS05EQSwgIkthbm5hZGEiICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggbGltYiwgTElNQiwgIkxpbWJ1IiApCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIG1seW0sIE1MWU0sICJNYWxheWFsYW0iICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggb3J5YSwgT1JZQSwgIk9yaXlhIiApCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHNpbmgsIFNJTkgsICJTaW5oYWxhIiApCiAgIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHN1bmQsIFNVTkQsICJTdW5kYW5lc2UiICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggc3lsbywgU1lMTywgIlN5bG90aSBOYWdyaSIgKQotICBTVFlMRV9ERUZBVUxUX0lORElDKCB0YW1sLCBUQU1MLCAiVGFtaWwiICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggdGlidCwgVElCVCwgIlRpYmV0YW4iICkKIAogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmdHlwZXMuaCBiL3NyYy9hdXRvZml0L2FmdHlwZXMuaAppbmRleCA3OGUzZmQ3Li5lZjYyMDQzIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnR5cGVzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMiwxNSArMjIsMTUgQEAKICAgICogIEl0cyBtYWluIGZlYXR1cmUgaXMgdGhlIGFiaWxpdHkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGRpZmZlcmVudAogICAgKiAgd3JpdGluZyBzeXN0ZW1zIGFuZCBzY3JpcHRzIGluIG9yZGVyIHRvIGFwcGx5IHNwZWNpZmljIHJ1bGVzLgogICAgKgotICAgKiAgVGhlIGNvZGUgaGFzIGFsc28gYmVlbiBjb21wYXJ0bWVudGl6ZWQgaW50byBzZXZlcmFsIGVudGl0aWVzIHRoYXQKKyAgICogIFRoZSBjb2RlIGhhcyBhbHNvIGJlZW4gY29tcGFydG1lbnRhbGl6ZWQgaW50byBzZXZlcmFsIGVudGl0aWVzIHRoYXQKICAgICogIHNob3VsZCBtYWtlIGFsZ29yaXRobWljIGV4cGVyaW1lbnRhdGlvbiBlYXNpZXIgdGhhbiB3aXRoIHRoZSBvbGQKICAgICogIGNvZGUuCiAgICAqCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRlRZUEVTX0hfXwotI2RlZmluZSBfX0FGVFlQRVNfSF9fCisjaWZuZGVmIEFGVFlQRVNfSF8KKyNkZWZpbmUgQUZUWVBFU19IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIApAQCAtNDEsNiArNDEsMTAgQEAKIAogI2luY2x1ZGUgImFmYmx1ZS5oIgogCisjaWZkZWYgRlRfREVCVUdfQVVUT0ZJVAorI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAorI2VuZGlmCisKIAogRlRfQkVHSU5fSEVBREVSCiAKQEAgLTU0LDggKzU4LDYgQEAKIAogI2lmZGVmIEZUX0RFQlVHX0FVVE9GSVQKIAotI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAotCiBleHRlcm4gaW50ICAgIF9hZl9kZWJ1Z19kaXNhYmxlX2hvcnpfaGludHM7CiBleHRlcm4gaW50ICAgIF9hZl9kZWJ1Z19kaXNhYmxlX3ZlcnRfaGludHM7CiBleHRlcm4gaW50ICAgIF9hZl9kZWJ1Z19kaXNhYmxlX2JsdWVfaGludHM7CkBAIC0yMDksMTMgKzIxMSwxOSBAQAogICB0eXBlZGVmIHZvaWQKICAgKCpBRl9Xcml0aW5nU3lzdGVtX0RvbmVNZXRyaWNzRnVuYykoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcyApOwogCisgIHR5cGVkZWYgdm9pZAorICAoKkFGX1dyaXRpbmdTeXN0ZW1fR2V0U3RkV2lkdGhzRnVuYykoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgICAgIHN0ZEhXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAgICAgc3RkVlcgKTsKKwogCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpBRl9Xcml0aW5nU3lzdGVtX0luaXRIaW50c0Z1bmMpKCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcyApOwogCiAgIHR5cGVkZWYgdm9pZAotICAoKkFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpKCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICAoKkFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpKCBGVF9VSW50ICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcyApOwogCkBAIC0yNDcsNyArMjU1LDcgQEAKICAgICogICAgb3V0bGluZSBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMgb2YgdGhlIGdseXBoIGFuYWx5emVyLgogICAgKi8KIAotI2RlZmluZSBfX0FGV1JUU1lTX0hfXyAgLyogZG9uJ3QgbG9hZCBoZWFkZXIgZmlsZXMgKi8KKyNkZWZpbmUgQUZXUlRTWVNfSF8gIC8qIGRvbid0IGxvYWQgaGVhZGVyIGZpbGVzICovCiAjdW5kZWYgIFdSSVRJTkdfU1lTVEVNCiAjZGVmaW5lIFdSSVRJTkdfU1lTVEVNKCB3cywgV1MgKSAgICBcCiAgICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fICMjIFdTLApAQCAtMjYyLDcgKzI3MCw3IEBACiAKICAgfSBBRl9Xcml0aW5nU3lzdGVtOwogCi0jdW5kZWYgIF9fQUZXUlRTWVNfSF9fCisjdW5kZWYgIEFGV1JUU1lTX0hfCiAKIAogICB0eXBlZGVmIHN0cnVjdCAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjXwpAQCAtMjczLDYgKzI4MSw3IEBACiAgICAgQUZfV3JpdGluZ1N5c3RlbV9Jbml0TWV0cmljc0Z1bmMgICBzdHlsZV9tZXRyaWNzX2luaXQ7CiAgICAgQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jICBzdHlsZV9tZXRyaWNzX3NjYWxlOwogICAgIEFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jICAgc3R5bGVfbWV0cmljc19kb25lOworICAgIEFGX1dyaXRpbmdTeXN0ZW1fR2V0U3RkV2lkdGhzRnVuYyAgc3R5bGVfbWV0cmljc19nZXRzdGR3OwogCiAgICAgQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jICAgICBzdHlsZV9oaW50c19pbml0OwogICAgIEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMgICAgc3R5bGVfaGludHNfYXBwbHk7CkBAIC0yOTEsMTUgKzMwMCwxNiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKgotICAgKiAgRWFjaCBzY3JpcHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc2V0IG9mIFVuaWNvZGUgcmFuZ2VzIHRoYXQgZ2V0cyB1c2VkCi0gICAqICB0byB0ZXN0IHdoZXRoZXIgdGhlIGZvbnQgZmFjZSBzdXBwb3J0cyB0aGUgc2NyaXB0LgorICAgKiAgRWFjaCBzY3JpcHQgaXMgYXNzb2NpYXRlZCB3aXRoIHR3byBzZXRzIG9mIFVuaWNvZGUgcmFuZ2VzIHRvIHRlc3QKKyAgICogIHdoZXRoZXIgdGhlIGZvbnQgZmFjZSBzdXBwb3J0cyB0aGUgc2NyaXB0LCBhbmQgd2hpY2ggbm9uLWJhc2UKKyAgICogIGNoYXJhY3RlcnMgdGhlIHNjcmlwdCBjb250YWlucy4KICAgICoKICAgICogIFdlIHVzZSBmb3VyLWxldHRlciBzY3JpcHQgdGFncyBmcm9tIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLAogICAgKiAgZXh0ZW5kZWQgYnkgYE5PTkUnLCB3aGljaCBpbmRpY2F0ZXMgYG5vIHNjcmlwdCcuCiAgICAqLwogCiAjdW5kZWYgIFNDUklQVAotI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNjMSwgc2MyLCBzYzMgKSBcCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3MgKSBcCiAgICAgICAgICAgQUZfU0NSSVBUXyAjIyBTLAogCiAgIC8qIFRoZSBsaXN0IG9mIGtub3duIHNjcmlwdHMuICovCkBAIC0zMjksMTEgKzMzOSwxMyBAQAogICB7CiAgICAgQUZfU2NyaXB0ICBzY3JpcHQ7CiAKLSAgICBBRl9TY3JpcHRfVW5pUmFuZ2UgIHNjcmlwdF91bmlfcmFuZ2VzOyAvKiBsYXN0IG11c3QgYmUgeyAwLCAwIH0gICAgICAgICovCisgICAgLyogbGFzdCBlbGVtZW50IGluIHRoZSByYW5nZXMgbXVzdCBiZSB7IDAsIDAgfSAqLworICAgIEFGX1NjcmlwdF9VbmlSYW5nZSAgc2NyaXB0X3VuaV9yYW5nZXM7CisgICAgQUZfU2NyaXB0X1VuaVJhbmdlICBzY3JpcHRfdW5pX25vbmJhc2VfcmFuZ2VzOwogCi0gICAgRlRfVUludDMyICBzdGFuZGFyZF9jaGFyMTsgICAgICAgICAgICAgLyogZm9yIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCAqLwotICAgIEZUX1VJbnQzMiAgc3RhbmRhcmRfY2hhcjI7ICAgICAgICAgICAgIC8qIGRpdHRvICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBGVF9VSW50MzIgIHN0YW5kYXJkX2NoYXIzOyAgICAgICAgICAgICAvKiBkaXR0byAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfQm9vbCAgdG9wX3RvX2JvdHRvbV9oaW50aW5nOworCisgICAgY29uc3QgY2hhciogIHN0YW5kYXJkX2NoYXJzdHJpbmc7ICAgICAgLyogZm9yIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCAqLwogCiAgIH0gQUZfU2NyaXB0Q2xhc3NSZWM7CiAKQEAgLTQ2OSw2ICs0ODEsMTAgQEAKICAgfSBBRl9TdHlsZU1ldHJpY3NSZWM7CiAKIAorI2RlZmluZSBBRl9ISU5USU5HX0JPVFRPTV9UT19UT1AgIDAKKyNkZWZpbmUgQUZfSElOVElOR19UT1BfVE9fQk9UVE9NICAxCisKKwogICAvKiBEZWNsYXJlIGFuZCBkZWZpbmUgdnRhYmxlcyBmb3IgY2xhc3NlcyAqLwogI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwogCkBAIC00ODMsNiArNDk5LDcgQEAKICAgICAgICAgICBtX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBtX3NjYWxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBtX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtX3N0ZHcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBoX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBoX2FwcGx5ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTQ5NSw2ICs1MTIsNyBAQAogICAgIG1faW5pdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIG1fc2NhbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIG1fZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1fc3RkdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGhfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGhfYXBwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTA5LDE3ICs1MjcsMTcgQEAKICAgICAgICAgICBzY3JpcHRfY2xhc3MsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBzY3JpcHQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICByYW5nZXMsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzdGRfY2hhcjEsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzdGRfY2hhcjIsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzdGRfY2hhcjMgKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBub25iYXNlX3JhbmdlcywgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB0b3BfdG9fYm90dG9tLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzdGRfY2hhcnN0cmluZyApICAgICAgICAgICAgICAgIFwKICAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAgICAgICAgICAgICAgICAgIFwKICAgY29uc3QgQUZfU2NyaXB0Q2xhc3NSZWMgIHNjcmlwdF9jbGFzcyA9IFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzY3JpcHQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICByYW5nZXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGRfY2hhcjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGRfY2hhcjIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGRfY2hhcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBub25iYXNlX3JhbmdlcywgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0b3BfdG9fYm90dG9tLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGRfY2hhcnN0cmluZywgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAogCkBAIC01NjIsMTYgKzU4MCwxNyBAQAogICBGVF9MT0NBTF9ERUYoIHZvaWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIEZUX0luaXRfQ2xhc3NfICMjIHdyaXRpbmdfc3lzdGVtX2NsYXNzKCBBRl9Xcml0aW5nU3lzdGVtQ2xhc3NSZWMqICBhYyApIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT53cml0aW5nX3N5c3RlbSAgICAgID0gc3lzdGVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPndyaXRpbmdfc3lzdGVtICAgICAgICA9IHN5c3RlbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdHlsZV9tZXRyaWNzX3NpemUgID0gbV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnN0eWxlX21ldHJpY3Nfc2l6ZSAgICA9IG1fc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdHlsZV9tZXRyaWNzX2luaXQgID0gbV9pbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnN0eWxlX21ldHJpY3Nfc2NhbGUgPSBtX3NjYWxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c3R5bGVfbWV0cmljc19kb25lICA9IG1fZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zdHlsZV9tZXRyaWNzX2luaXQgICAgPSBtX2luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnN0eWxlX21ldHJpY3Nfc2NhbGUgICA9IG1fc2NhbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c3R5bGVfbWV0cmljc19kb25lICAgID0gbV9kb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zdHlsZV9tZXRyaWNzX2dldHN0ZHcgPSBtX3N0ZHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c3R5bGVfaGludHNfaW5pdCAgICA9IGhfaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdHlsZV9oaW50c19hcHBseSAgID0gaF9hcHBseTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnN0eWxlX2hpbnRzX2luaXQgICAgICA9IGhfaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c3R5bGVfaGludHNfYXBwbHkgICAgID0gaF9hcHBseTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9CiAKIApAQCAtNTgzLDE3ICs2MDIsMTcgQEAKICAgICAgICAgICBzY3JpcHRfY2xhc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHNjcmlwdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgcmFuZ2VzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzdGRfY2hhcjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHN0ZF9jaGFyMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc3RkX2NoYXIzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBub25iYXNlX3JhbmdlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHRvcF90b19ib3R0b20sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc3RkX2NoYXJzdHJpbmcgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfTE9DQUxfREVGKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGVF9Jbml0X0NsYXNzXyAjIyBzY3JpcHRfY2xhc3MoIEFGX1NjcmlwdENsYXNzUmVjKiAgYWMgKSBcCiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c2NyaXB0ICAgICAgICAgICAgPSBzY3JpcHRfOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zY3JpcHRfdW5pX3JhbmdlcyA9IHJhbmdlczsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnN0YW5kYXJkX2NoYXIxICAgID0gc3RkX2NoYXIxOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c3RhbmRhcmRfY2hhcjIgICAgPSBzdGRfY2hhcjI7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdGFuZGFyZF9jaGFyMyAgICA9IHN0ZF9jaGFyMzsgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnNjcmlwdCAgICAgICAgICAgICAgICAgICAgPSBzY3JpcHRfOyAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c2NyaXB0X3VuaV9yYW5nZXMgICAgICAgICA9IHJhbmdlczsgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zY3JpcHRfdW5pX25vbmJhc2VfcmFuZ2VzID0gbm9uYmFzZV9yYW5nZXM7ICAgICAgICBcCisgICAgYWMtPnRvcF90b19ib3R0b21faGludGluZyAgICAgPSB0b3BfdG9fYm90dG9tOyAgICAgICAgIFwKKyAgICBhYy0+c3RhbmRhcmRfY2hhcnN0cmluZyAgICAgICA9IHN0ZF9jaGFyc3RyaW5nOyAgICAgICAgXAogICB9CiAKIApAQCAtNjI1LDcgKzY0NCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQUZUWVBFU19IX18gKi8KKyNlbmRpZiAvKiBBRlRZUEVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndhcnAuYyBiL3NyYy9hdXRvZml0L2Fmd2FycC5jCmluZGV4IDU5YWY0ZjAuLmNlMTgwNmMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd2FycC5jCisrKyBiL3NyYy9hdXRvZml0L2Fmd2FycC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogICAgIHdhcnBlci0+YmVzdF9zY2FsZSAgID0gb3JnX3NjYWxlOwogICAgIHdhcnBlci0+YmVzdF9kZWx0YSAgID0gb3JnX2RlbHRhOwotICAgIHdhcnBlci0+YmVzdF9zY29yZSAgID0gSU5UX01JTjsKKyAgICB3YXJwZXItPmJlc3Rfc2NvcmUgICA9IEZUX0lOVF9NSU47CiAgICAgd2FycGVyLT5iZXN0X2Rpc3RvcnQgPSAwOwogCiAgICAgYXhpcyAgICAgICAgID0gJmhpbnRzLT5heGlzW2RpbV07CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndhcnAuaCBiL3NyYy9hdXRvZml0L2Fmd2FycC5oCmluZGV4IDVhNjIwOGEuLjZkOTZmODYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd2FycC5oCisrKyBiL3NyYy9hdXRvZml0L2Fmd2FycC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRldBUlBfSF9fCi0jZGVmaW5lIF9fQUZXQVJQX0hfXworI2lmbmRlZiBBRldBUlBfSF8KKyNkZWZpbmUgQUZXQVJQX0hfCiAKICNpbmNsdWRlICJhZmhpbnRzLmgiCiAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2RlZmluZSBBRl9XQVJQRVJfU0NBTEUKIAotI2RlZmluZSBBRl9XQVJQRVJfRkxPT1IoIHggKSAgKCAoeCkgJiB+VFlQRU9GKCB4ICk2MyApCisjZGVmaW5lIEFGX1dBUlBFUl9GTE9PUiggeCApICAoICh4KSAmIH5GVF9UWVBFT0YoIHggKTYzICkKICNkZWZpbmUgQUZfV0FSUEVSX0NFSUwoIHggKSAgIEFGX1dBUlBFUl9GTE9PUiggKHgpICsgNjMgKQogCiAKQEAgLTU4LDcgKzU4LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19BRldBUlBfSF9fICovCisjZW5kaWYgLyogQUZXQVJQX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndydHN5cy5oIGIvc3JjL2F1dG9maXQvYWZ3cnRzeXMuaAppbmRleCA0YWE4OWQyLi44NDJmNDkyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndydHN5cy5oCisrKyBiL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgd3JpdGluZyBzeXN0ZW1zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGV1JUU1lTX0hfXwotI2RlZmluZSBfX0FGV1JUU1lTX0hfXworI2lmbmRlZiBBRldSVFNZU19IXworI2RlZmluZSBBRldSVFNZU19IXwogCiAgIC8qIFNpbmNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGNhbid0IGNyZWF0ZSBvdGhlciBwcmVwcm9jZXNzb3IgKi8KICAgLyogZGlyZWN0aXZlcywgd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgbWFudWFsbHkuICAgICAqLwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImFmbGF0aW4yLmgiCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fQUZXUlRTWVNfSF9fICovCisjZW5kaWYgLyogQUZXUlRTWVNfSF8gKi8KIAogCiAgIC8qIFRoZSBmb2xsb3dpbmcgcGFydCBjYW4gYmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hdXRvZml0LmMgYi9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKaW5kZXggYjZlZDRhMC4uZGRhOWFlYiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCisrKyBiL3NyYy9hdXRvZml0L2F1dG9maXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBtb2R1bGUgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgImFmY2prLmMiCiAjaW5jbHVkZSAiYWZpbmRpYy5jIgogCi0jaW5jbHVkZSAiaGJzaGltLmMiCisjaW5jbHVkZSAiYWZzaGFwZXIuYyIKIAogI2luY2x1ZGUgImFmbG9hZGVyLmMiCiAjaW5jbHVkZSAiYWZtb2R1bGUuYyIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2hic2hpbS5oIGIvc3JjL2F1dG9maXQvaGJzaGltLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MzZjYTYuLjAwMDAwMDAKLS0tIGEvc3JjL2F1dG9maXQvaGJzaGltLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBoYnNoaW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGFyZkJ1enogaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgT3BlblR5cGUgZmVhdHVyZXMgKHNwZWNpZmljYXRpb24pLiAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpZm5kZWYgX19IQlNISU1fSF9fCi0jZGVmaW5lIF9fSEJTSElNX0hfXwotCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotCi0KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgotCi0jaW5jbHVkZSA8aGIuaD4KLSNpbmNsdWRlIDxoYi1vdC5oPgotI2luY2x1ZGUgPGhiLWZ0Lmg+Ci0KLSNlbmRpZgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIEZUX0Vycm9yCi0gIGFmX2dldF9jb3ZlcmFnZSggQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBnc3R5bGVzICk7Ci0KLSAgRlRfRXJyb3IKLSAgYWZfZ2V0X2NoYXJfaW5kZXgoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKLSAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgY2hhcmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgKmNvZGVwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAqeV9vZmZzZXQgKTsKLQotIC8qICovCi0KLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIF9fSEJTSElNX0hfXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvYmFzZXBpYy5jIGIvc3JjL2Jhc2UvYmFzZXBpYy5jCmluZGV4IDk4NTBlZDkuLmYyY2VhOTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Jhc2VwaWMuYworKysgYi9zcmMvYmFzZS9iYXNlcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGJhc2UuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Jhc2VwaWMuaCBiL3NyYy9iYXNlL2Jhc2VwaWMuaAppbmRleCA1MWVjZjllLi5hMWE3NWEwIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9iYXNlcGljLmgKKysrIGIvc3JjL2Jhc2UvYmFzZXBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBiYXNlLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiwxNCArMTYsMTMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0JBU0VQSUNfSF9fCi0jZGVmaW5lIF9fQkFTRVBJQ19IX18KKyNpZm5kZWYgQkFTRVBJQ19IXworI2RlZmluZSBCQVNFUElDX0hfCiAKIAotRlRfQkVHSU5fSEVBREVSCi0KICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICiAKKwogI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwogCiAjZGVmaW5lIEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICAmZnRfb3V0bGluZV9nbHlwaF9jbGFzcwpAQCAtNDMsNiArNDIsOCBAQAogI2VuZGlmCiAKIAorRlRfQkVHSU5fSEVBREVSCisKICAgdHlwZWRlZiBzdHJ1Y3QgIEJhc2VQSUNfCiAgIHsKICAgICBGVF9Nb2R1bGVfQ2xhc3MqKiAgZGVmYXVsdF9tb2R1bGVfY2xhc3NlczsKQEAgLTc4LDEzICs3OSwxMyBAQAogICBGVF9FcnJvcgogICBmdF9iYXNlX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKK0ZUX0VORF9IRUFERVIKKwogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAgLyogKi8KIAotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogX19CQVNFUElDX0hfXyAqLworI2VuZGlmIC8qIEJBU0VQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YWR2YW5jLmMgYi9zcmMvYmFzZS9mdGFkdmFuYy5jCmluZGV4IGYxMjkwOGYuLjllMmFiODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YWR2YW5jLmMKKysrIGIvc3JjL2Jhc2UvZnRhZHZhbmMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDgtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNjAsMTAgKzYwLDEyIEBACiAgICAvKiAgLSB1bnNjYWxlZCBsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgIC8qICAtIHVuaGludGVkIGxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgLyogIC0gbGlnaHQtaGludGVkIGxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAgLSBuZWl0aGVyIGEgTU0gbm9yIGEgR1ggZm9udCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotI2RlZmluZSBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBmbGFncyAmICggRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfTk9fSElOVElORyApICAgIHx8IFwKLSAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX01PREUoIGZsYWdzICkgPT0gRlRfUkVOREVSX01PREVfTElHSFQgKQorI2RlZmluZSBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmFjZSwgZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKCBmbGFncyAmICggRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfTk9fSElOVElORyApICAgIHx8ICAgXAorICAgICAgICAgICAgICBGVF9MT0FEX1RBUkdFVF9NT0RFKCBmbGFncyApID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICkgJiYgXAorICAgICAgICAgICAgIUZUX0hBU19NVUxUSVBMRV9NQVNURVJTKCBmYWNlICkgICAgICAgICAgICAgICAgICAgICAgICAgKQogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGFkdmFuYy5oICovCkBAIC04Nyw3ICs4OSw3IEBACiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfSW5kZXggKTsKIAogICAgIGZ1bmMgPSBmYWNlLT5kcml2ZXItPmNsYXp6LT5nZXRfYWR2YW5jZXM7Ci0gICAgaWYgKCBmdW5jICYmIExPQURfQURWQU5DRV9GQVNUX0NIRUNLKCBmbGFncyApICkKKyAgICBpZiAoIGZ1bmMgJiYgTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0soIGZhY2UsIGZsYWdzICkgKQogICAgIHsKICAgICAgIEZUX0Vycm9yICBlcnJvcjsKIApAQCAtMTMzLDcgKzEzNSw3IEBACiAgICAgICByZXR1cm4gRlRfRXJyX09rOwogCiAgICAgZnVuYyA9IGZhY2UtPmRyaXZlci0+Y2xhenotPmdldF9hZHZhbmNlczsKLSAgICBpZiAoIGZ1bmMgJiYgTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0soIGZsYWdzICkgKQorICAgIGlmICggZnVuYyAmJiBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmFjZSwgZmxhZ3MgKSApCiAgICAgewogICAgICAgZXJyb3IgPSBmdW5jKCBmYWNlLCBzdGFydCwgY291bnQsIGZsYWdzLCBwYWR2YW5jZXMgKTsKICAgICAgIGlmICggIWVycm9yICkKQEAgLTE1Nyw4ICsxNTksOCBAQAogCiAgICAgICAvKiBzY2FsZSBmcm9tIDI2LjYgdG8gMTYuMTYgKi8KICAgICAgIHBhZHZhbmNlc1tubl0gPSAoIGZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQotICAgICAgICAgICAgICAgICAgICAgID8gZmFjZS0+Z2x5cGgtPmFkdmFuY2UueSA8PCAxMAotICAgICAgICAgICAgICAgICAgICAgIDogZmFjZS0+Z2x5cGgtPmFkdmFuY2UueCA8PCAxMDsKKyAgICAgICAgICAgICAgICAgICAgICA/IGZhY2UtPmdseXBoLT5hZHZhbmNlLnkgKiAxMDI0CisgICAgICAgICAgICAgICAgICAgICAgOiBmYWNlLT5nbHlwaC0+YWR2YW5jZS54ICogMTAyNDsKICAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGFwaS5jIGIvc3JjL2Jhc2UvZnRhcGkuYwppbmRleCBmMjJhMTgxLi5iOTRjM2ViIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGFwaS5jCisrKyBiL3NyYy9iYXNlL2Z0YXBpLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmFzZS5jIGIvc3JjL2Jhc2UvZnRiYXNlLmMKaW5kZXggMjUzZGZiNy4uYWIxYWY2ZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYXNlLmMKKysrIGIvc3JjL2Jhc2UvZnRiYXNlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU2luZ2xlIG9iamVjdCBsaWJyYXJ5IGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJmdGNhbGMuYyIKICNpbmNsdWRlICJmdGRiZ21lbS5jIgogI2luY2x1ZGUgImZ0Z2xvYWRyLmMiCisjaW5jbHVkZSAiZnRoYXNoLmMiCiAjaW5jbHVkZSAiZnRvYmpzLmMiCiAjaW5jbHVkZSAiZnRvdXRsbi5jIgogI2luY2x1ZGUgImZ0cmZvcmsuYyIKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmFzZS5oIGIvc3JjL2Jhc2UvZnRiYXNlLmgKaW5kZXggY2I1N2Y5Ni4uNzE3ZmRhYSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYXNlLmgKKysrIGIvc3JjL2Jhc2UvZnRiYXNlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgZnVuY3Rpb25zIHVzZWQgaW4gYmFzZSBtb2R1bGUgKHNwZWNpZmljYXRpb24pLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA4LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZywgYW5kIHN1enVraSB0b3NoaXlhLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQkFTRV9IX18KLSNkZWZpbmUgX19GVEJBU0VfSF9fCisjaWZuZGVmIEZUQkFTRV9IXworI2RlZmluZSBGVEJBU0VfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI3LDYgKzI3LDExIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCisgIC8qIE1hY09TIHJlc291cmNlIGZvcmsgY2Fubm90IGV4Y2VlZCAxNk1CIGF0IGxlYXN0IGZvciBDYXJib24gY29kZTsgKi8KKyAgLyogc2VlIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2tiLzEzMDQzNyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9NQUNfUkZPUktfTUFYX0xFTiAgMHgwMEZGRkZGRlVMCisKKwogICAvKiBBc3N1bWUgdGhlIHN0cmVhbSBpcyBzZm50LXdyYXBwZWQgUFMgVHlwZTEgb3Igc2ZudC13cmFwcGVkIENJRC1rZXllZCAqLwogICAvKiBmb250LCBhbmQgdHJ5IHRvIGxvYWQgYSBmYWNlIHNwZWNpZmllZCBieSB0aGUgZmFjZV9pbmRleC4gICAgICAgICAgICAqLwogICBGVF9MT0NBTCggRlRfRXJyb3IgKQpAQCAtNjMsNyArNjgsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQkFTRV9IX18gKi8KKyNlbmRpZiAvKiBGVEJBU0VfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmJveC5jIGIvc3JjL2Jhc2UvZnRiYm94LmMKaW5kZXggMTBkZjk4ZC4uZDNlNDVmZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYm94LmMKKysrIGIvc3JjL2Jhc2UvZnRiYm94LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgYmJveCBjb21wdXRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Yml0bWFwLmMgYi9zcmMvYmFzZS9mdGJpdG1hcC5jCmluZGV4IGE1NDU3MmEuLjI0ZmVhZDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Yml0bWFwLmMKKysrIGIvc3JjL2Jhc2UvZnRiaXRtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYml0bWFwcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgfQogCiAgICAgLyogZm9yIGVhY2ggcm93ICovCi0gICAgZm9yICggeSA9IDA7IHkgPCBiaXRtYXAtPnJvd3MgOyB5KysgKQorICAgIGZvciAoIHkgPSAwOyB5IDwgYml0bWFwLT5yb3dzOyB5KysgKQogICAgIHsKICAgICAgIC8qCiAgICAgICAgKiBIb3Jpem9udGFsbHk6CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGNhbGMuYyBiL3NyYy9iYXNlL2Z0Y2FsYy5jCmluZGV4IGRjYTBlMWQuLjY3NTQ5ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Y2FsYy5jCisrKyBiL3NyYy9iYXNlL2Z0Y2FsYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFyaXRobWV0aWMgY29tcHV0YXRpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC04Niw4ICs4Niw3IEBACiAgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKICAgRlRfUm91bmRGaXgoIEZUX0ZpeGVkICBhICkKICAgewotICAgIHJldHVybiBhID49IDAgPyAgICggYSArIDB4ODAwMEwgKSAmIH4weEZGRkZMCi0gICAgICAgICAgICAgICAgICA6IC0oKC1hICsgMHg4MDAwTCApICYgfjB4RkZGRkwgKTsKKyAgICByZXR1cm4gKCBhICsgMHg4MDAwTCAtICggYSA8IDAgKSApICYgfjB4RkZGRkw7CiAgIH0KIAogCkBAIC05Niw4ICs5NSw3IEBACiAgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKICAgRlRfQ2VpbEZpeCggRlRfRml4ZWQgIGEgKQogICB7Ci0gICAgcmV0dXJuIGEgPj0gMCA/ICAgKCBhICsgMHhGRkZGTCApICYgfjB4RkZGRkwKLSAgICAgICAgICAgICAgICAgIDogLSgoLWEgKyAweEZGRkZMICkgJiB+MHhGRkZGTCApOworICAgIHJldHVybiAoIGEgKyAweEZGRkZMICkgJiB+MHhGRkZGTDsKICAgfQogCiAKQEAgLTEwNiw4ICsxMDQsNyBAQAogICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApCiAgIEZUX0Zsb29yRml4KCBGVF9GaXhlZCAgYSApCiAgIHsKLSAgICByZXR1cm4gYSA+PSAwID8gICBhICYgfjB4RkZGRkwKLSAgICAgICAgICAgICAgICAgIDogLSgoLWEpICYgfjB4RkZGRkwgKTsKKyAgICByZXR1cm4gYSAmIH4weEZGRkZMOwogICB9CiAKICNpZm5kZWYgRlRfTVNCCkBAIC0yMzYsMjYgKzIzMywxNCBAQAogICB7CiAjaWZkZWYgRlRfTVVMRklYX0FTU0VNQkxFUgogCi0gICAgcmV0dXJuIEZUX01VTEZJWF9BU1NFTUJMRVIoIGFfLCBiXyApOworICAgIHJldHVybiBGVF9NVUxGSVhfQVNTRU1CTEVSKCAoRlRfSW50MzIpYV8sIChGVF9JbnQzMiliXyApOwogCiAjZWxzZQogCi0gICAgRlRfSW50ICAgICBzID0gMTsKLSAgICBGVF9VSW50NjQgIGEsIGIsIGM7Ci0gICAgRlRfTG9uZyAgICBjXzsKKyAgICBGVF9JbnQ2NCAgYWIgPSAoRlRfSW50NjQpYV8gKiAoRlRfSW50NjQpYl87CiAKLQotICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7Ci0KLSAgICBhID0gKEZUX1VJbnQ2NClhXzsKLSAgICBiID0gKEZUX1VJbnQ2NCliXzsKLQotICAgIGMgPSAoIGEgKiBiICsgMHg4MDAwVUwgKSA+PiAxNjsKLQotICAgIGNfID0gKEZUX0xvbmcpYzsKLQotICAgIHJldHVybiBzIDwgMCA/IC1jXyA6IGNfOworICAgIC8qIHRoaXMgcmVxdWlyZXMgYXJpdGhtZXRpYyByaWdodCBzaGlmdCBvZiBzaWduZWQgbnVtYmVycyAqLworICAgIHJldHVybiAoRlRfTG9uZykoICggYWIgKyAweDgwMDBMIC0gKCBhYiA8IDAgKSApID4+IDE2ICk7CiAKICNlbmRpZiAvKiBGVF9NVUxGSVhfQVNTRU1CTEVSICovCiAgIH0KQEAgLTQzNyw5ICs0MjIsNiBAQAogCiAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KIAotICAgIGlmICggYV8gPT0gMCB8fCBiXyA9PSBjXyApCi0gICAgICByZXR1cm4gYV87Ci0KICAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CiAgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOwogICAgIEZUX01PVkVfU0lHTiggY18sIHMgKTsKQEAgLTQ4OCw5ICs0NzAsNiBAQAogCiAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KIAotICAgIGlmICggYV8gPT0gMCB8fCBiXyA9PSBjXyApCi0gICAgICByZXR1cm4gYV87Ci0KICAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CiAgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOwogICAgIEZUX01PVkVfU0lHTiggY18sIHMgKTsKQEAgLTU0Niw5ICs1MjUsNiBAQAogICAgIEZUX1VJbnQzMiAgYSwgYjsKIAogCi0gICAgaWYgKCBhXyA9PSAwIHx8IGJfID09IDB4MTAwMDBMICkKLSAgICAgIHJldHVybiBhXzsKLQogICAgIC8qCiAgICAgICogIFRoaXMgaXMgYSBjbGV2ZXIgd2F5IG9mIGNvbnZlcnRpbmcgYSBzaWduZWQgbnVtYmVyIGBhJyBpbnRvIGl0cwogICAgICAqICBhYnNvbHV0ZSB2YWx1ZSAoc3RvcmVkIGJhY2sgaW50byBgYScpIGFuZCBpdHMgc2lnbi4gIFRoZSBzaWduIGlzCkBAIC01OTksOSArNTc1LDYgQEAKIAogICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvdyA2NC1iaXQgYXJndW1lbnRzICovCiAKLSAgICBpZiAoIGFfID09IDAgfHwgYl8gPT0gMHgxMDAwMEwgKQotICAgICAgcmV0dXJuIGFfOwotCiAgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOwogICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKIApAQCAtNzg1LDYgKzc1OCwxMDIgQEAKICAgfQogCiAKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhbGMuaCAqLworCisgIEZUX0JBU0VfREVGKCBGVF9VSW50MzIgKQorICBGVF9WZWN0b3JfTm9ybUxlbiggRlRfVmVjdG9yKiAgdmVjdG9yICkKKyAgeworICAgIEZUX0ludDMyICAgeF8gPSB2ZWN0b3ItPng7CisgICAgRlRfSW50MzIgICB5XyA9IHZlY3Rvci0+eTsKKyAgICBGVF9JbnQzMiAgIGIsIHo7CisgICAgRlRfVUludDMyICB4LCB5LCB1LCB2LCBsOworICAgIEZUX0ludCAgICAgc3ggPSAxLCBzeSA9IDEsIHNoaWZ0OworCisKKyAgICBGVF9NT1ZFX1NJR04oIHhfLCBzeCApOworICAgIEZUX01PVkVfU0lHTiggeV8sIHN5ICk7CisKKyAgICB4ID0gKEZUX1VJbnQzMil4XzsKKyAgICB5ID0gKEZUX1VJbnQzMil5XzsKKworICAgIC8qIHRyaXZpYWwgY2FzZXMgKi8KKyAgICBpZiAoIHggPT0gMCApCisgICAgeworICAgICAgaWYgKCB5ID4gMCApCisgICAgICAgIHZlY3Rvci0+eSA9IHN5ICogMHgxMDAwMDsKKyAgICAgIHJldHVybiB5OworICAgIH0KKyAgICBlbHNlIGlmICggeSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoIHggPiAwICkKKyAgICAgICAgdmVjdG9yLT54ID0gc3ggKiAweDEwMDAwOworICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgICAgLyogRXN0aW1hdGUgbGVuZ3RoIGFuZCBwcmVub3JtYWxpemUgYnkgc2hpZnRpbmcgc28gdGhhdCAqLworICAgIC8qIHRoZSBuZXcgYXBwcm94aW1hdGUgbGVuZ3RoIGlzIGJldHdlZW4gMi8zIGFuZCA0LzMuICAgKi8KKyAgICAvKiBUaGUgbWFnaWMgY29uc3RhbnQgMHhBQUFBQUFBQVVMICgyLzMgb2YgMl4zMikgaGVscHMgICovCisgICAgLyogYWNoaWV2ZSB0aGlzIGluIDE2LjE2IGZpeGVkLXBvaW50IHJlcHJlc2VudGF0aW9uLiAgICAqLworICAgIGwgPSB4ID4geSA/IHggKyAoIHkgPj4gMSApCisgICAgICAgICAgICAgIDogeSArICggeCA+PiAxICk7CisKKyAgICBzaGlmdCAgPSAzMSAtIEZUX01TQiggbCApOworICAgIHNoaWZ0IC09IDE1ICsgKCBsID49ICggMHhBQUFBQUFBQVVMID4+IHNoaWZ0ICkgKTsKKworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICB7CisgICAgICB4IDw8PSBzaGlmdDsKKyAgICAgIHkgPDw9IHNoaWZ0OworCisgICAgICAvKiByZS1lc3RpbWF0ZSBsZW5ndGggZm9yIHRpbnkgdmVjdG9ycyAqLworICAgICAgbCA9IHggPiB5ID8geCArICggeSA+PiAxICkKKyAgICAgICAgICAgICAgICA6IHkgKyAoIHggPj4gMSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgeCA+Pj0gLXNoaWZ0OworICAgICAgeSA+Pj0gLXNoaWZ0OworICAgICAgbCA+Pj0gLXNoaWZ0OworICAgIH0KKworICAgIC8qIGxvd2VyIGxpbmVhciBhcHByb3hpbWF0aW9uIGZvciByZWNpcHJvY2FsIGxlbmd0aCBtaW51cyBvbmUgKi8KKyAgICBiID0gMHgxMDAwMCAtIChGVF9JbnQzMilsOworCisgICAgeF8gPSAoRlRfSW50MzIpeDsKKyAgICB5XyA9IChGVF9JbnQzMil5OworCisgICAgLyogTmV3dG9uJ3MgaXRlcmF0aW9ucyAqLworICAgIGRvCisgICAgeworICAgICAgdSA9IChGVF9VSW50MzIpKCB4XyArICggeF8gKiBiID4+IDE2ICkgKTsKKyAgICAgIHYgPSAoRlRfVUludDMyKSggeV8gKyAoIHlfICogYiA+PiAxNiApICk7CisKKyAgICAgIC8qIE5vcm1hbGl6ZWQgc3F1YXJlZCBsZW5ndGggaW4gdGhlIHBhcmVudGhlc2VzIGFwcHJvYWNoZXMgMl4zMi4gKi8KKyAgICAgIC8qIE9uIHR3bydzIGNvbXBsZW1lbnQgc3lzdGVtcywgY29udmVydGluZyB0byBzaWduZWQgZ2l2ZXMgdGhlICAgKi8KKyAgICAgIC8qIGRpZmZlcmVuY2Ugd2l0aCAyXjMyIGV2ZW4gaWYgdGhlIGV4cHJlc3Npb24gd3JhcHMgYXJvdW5kLiAgICAgKi8KKyAgICAgIHogPSAtKEZUX0ludDMyKSggdSAqIHUgKyB2ICogdiApIC8gMHgyMDA7CisgICAgICB6ID0geiAqICggKCAweDEwMDAwICsgYiApID4+IDggKSAvIDB4MTAwMDA7CisKKyAgICAgIGIgKz0gejsKKworICAgIH0gd2hpbGUgKCB6ID4gMCApOworCisgICAgdmVjdG9yLT54ID0gc3ggPCAwID8gLShGVF9Qb3MpdSA6IChGVF9Qb3MpdTsKKyAgICB2ZWN0b3ItPnkgPSBzeSA8IDAgPyAtKEZUX1Bvcyl2IDogKEZUX1Bvcyl2OworCisgICAgLyogQ29udmVyc2lvbiB0byBzaWduZWQgaGVscHMgdG8gcmVjb3ZlciBmcm9tIGxpa2VseSB3cmFwIGFyb3VuZCAqLworICAgIC8qIGluIGNhbGN1bGF0aW5nIHRoZSBwcmVub3JtYWxpemVkIGxlbmd0aCwgYmVjYXVzZSBpdCBnaXZlcyB0aGUgKi8KKyAgICAvKiBjb3JyZWN0IGRpZmZlcmVuY2Ugd2l0aCAyXjMyIG9uIHR3bydzIGNvbXBsZW1lbnQgc3lzdGVtcy4gICAgICovCisgICAgbCA9IChGVF9VSW50MzIpKCAweDEwMDAwICsgKEZUX0ludDMyKSggdSAqIHggKyB2ICogeSApIC8gMHgxMDAwMCApOworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICAgIGwgPSAoIGwgKyAoIDEgPDwgKCBzaGlmdCAtIDEgKSApICkgPj4gc2hpZnQ7CisgICAgZWxzZQorICAgICAgbCA8PD0gLXNoaWZ0OworCisgICAgcmV0dXJuIGw7CisgIH0KKworCiAjaWYgMAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KQEAgLTgzMiw1MiArOTAxLDM0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIG91dF95ICkKICAgewotICAgIEZUX0xvbmcgIHJlc3VsdDsgLyogYXZvaWQgb3ZlcmZsb3cgb24gMTYtYml0IHN5c3RlbSAqLwotCi0KLSAgICAvKiBkZWFsIHdpdGggdGhlIHRyaXZpYWwgY2FzZXMgcXVpY2tseSAqLwotICAgIGlmICggaW5feSA9PSAwICkKLSAgICB7Ci0gICAgICBpZiAoIGluX3ggPj0gMCApCi0gICAgICAgIHJlc3VsdCA9IG91dF95OwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSAtb3V0X3k7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBpbl94ID09IDAgKQotICAgIHsKLSAgICAgIGlmICggaW5feSA+PSAwICkKLSAgICAgICAgcmVzdWx0ID0gLW91dF94OwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBvdXRfeDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIG91dF95ID09IDAgKQotICAgIHsKLSAgICAgIGlmICggb3V0X3ggPj0gMCApCi0gICAgICAgIHJlc3VsdCA9IGluX3k7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IC1pbl95OwotICAgIH0KLSAgICBlbHNlIGlmICggb3V0X3ggPT0gMCApCi0gICAgewotICAgICAgaWYgKCBvdXRfeSA+PSAwICkKLSAgICAgICAgcmVzdWx0ID0gLWluX3g7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9ICBpbl94OwotICAgIH0KLSAgICBlbHNlIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgIHsKICNpZmRlZiBGVF9MT05HNjQKIAotICAgICAgRlRfSW50NjQgIGRlbHRhID0gKEZUX0ludDY0KWluX3ggKiBvdXRfeSAtIChGVF9JbnQ2NClpbl95ICogb3V0X3g7CisgICAgRlRfSW50NjQgIGRlbHRhID0gKEZUX0ludDY0KWluX3ggKiBvdXRfeSAtIChGVF9JbnQ2NClpbl95ICogb3V0X3g7CiAKIAotICAgICAgaWYgKCBkZWx0YSA9PSAwICkKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gMSAtIDIgKiAoIGRlbHRhIDwgMCApOworICAgIHJldHVybiAoIGRlbHRhID4gMCApIC0gKCBkZWx0YSA8IDAgKTsKIAogI2Vsc2UKIAorICAgIEZUX0ludCAgcmVzdWx0OworCisKKyAgICBpZiAoIChGVF9VTG9uZylGVF9BQlMoIGluX3ggKSArIChGVF9VTG9uZylGVF9BQlMoIG91dF95ICkgPD0gMTMxMDcxVUwgJiYKKyAgICAgICAgIChGVF9VTG9uZylGVF9BQlMoIGluX3kgKSArIChGVF9VTG9uZylGVF9BQlMoIG91dF94ICkgPD0gMTMxMDcxVUwgKQorICAgIHsKKyAgICAgIEZUX0xvbmcgIHoxID0gaW5feCAqIG91dF95OworICAgICAgRlRfTG9uZyAgejIgPSBpbl95ICogb3V0X3g7CisKKworICAgICAgaWYgKCB6MSA+IHoyICkKKyAgICAgICAgcmVzdWx0ID0gKzE7CisgICAgICBlbHNlIGlmICggejEgPCB6MiApCisgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgZWxzZQorICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKyAgICBlbHNlIC8qIHByb2R1Y3RzIG1pZ2h0IG92ZXJmbG93IDMyIGJpdHMgKi8KKyAgICB7CiAgICAgICBGVF9JbnQ2NCAgejEsIHoyOwogCiAKQEAgLTg5NSwxMiArOTQ2LDEyIEBACiAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSAwOwotCi0jZW5kaWYKICAgICB9CiAKICAgICAvKiBYWFg6IG9ubHkgdGhlIHNpZ24gb2YgcmV0dXJuIHZhbHVlLCArMS8wLy0xIG11c3QgYmUgdXNlZCAqLwotICAgIHJldHVybiAoRlRfSW50KXJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworCisjZW5kaWYKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMgYi9zcmMvYmFzZS9mdGRiZ21lbS5jCmluZGV4IDZmMjAzMTMuLjM4ZDFhODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMKKysrIGIvc3JjL2Jhc2UvZnRkYmdtZW0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBNZW1vcnkgZGVidWdnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzY3LDcgKzM2Nyw4IEBACiAgICAgICAgIHsKICAgICAgICAgICBwcmludGYoCiAgICAgICAgICAgICAibGVha2VkIG1lbW9yeSBibG9jayBhdCBhZGRyZXNzICVwLCBzaXplICU4bGQgaW4gKCVzOiVsZClcbiIsCi0gICAgICAgICAgICBub2RlLT5hZGRyZXNzLCBub2RlLT5zaXplLAorICAgICAgICAgICAgKHZvaWQqKW5vZGUtPmFkZHJlc3MsCisgICAgICAgICAgICBub2RlLT5zaXplLAogICAgICAgICAgICAgRlRfRklMRU5BTUUoIG5vZGUtPnNvdXJjZS0+ZmlsZV9uYW1lICksCiAgICAgICAgICAgICBub2RlLT5zb3VyY2UtPmxpbmVfbm8gKTsKIApAQCAtNDYyLDcgKzQ2Myw3IEBACiAgICAgICAgICAgICAgIChGVF9VSW50MzIpKCA1ICogX2Z0X2RlYnVnX2xpbmVubyApOwogICAgIHBub2RlID0gJnRhYmxlLT5zb3VyY2VzW2hhc2ggJSBGVF9NRU1fU09VUkNFX0JVQ0tFVFNdOwogCi0gICAgZm9yICggOzsgKQorICAgIGZvciAoOzspCiAgICAgewogICAgICAgbm9kZSA9ICpwbm9kZTsKICAgICAgIGlmICggbm9kZSA9PSBOVUxMICkKQEAgLTg0MSw3ICs4NDIsNyBAQAogICAgICAgICBwID0gZ2V0ZW52KCAiRlQyX0FMTE9DX1RPVEFMX01BWCIgKTsKICAgICAgICAgaWYgKCBwICE9IE5VTEwgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfTG9uZyAgIHRvdGFsX21heCA9IGZ0X2F0b2woIHAgKTsKKyAgICAgICAgICBGVF9Mb25nICB0b3RhbF9tYXggPSBmdF9zdHJ0b2woIHAsIE5VTEwsIDEwICk7CiAKIAogICAgICAgICAgIGlmICggdG90YWxfbWF4ID4gMCApCkBAIC04NTQsNyArODU1LDcgQEAKICAgICAgICAgcCA9IGdldGVudiggIkZUMl9BTExPQ19DT1VOVF9NQVgiICk7CiAgICAgICAgIGlmICggcCAhPSBOVUxMICkKICAgICAgICAgewotICAgICAgICAgIEZUX0xvbmcgIHRvdGFsX2NvdW50ID0gZnRfYXRvbCggcCApOworICAgICAgICAgIEZUX0xvbmcgIHRvdGFsX2NvdW50ID0gZnRfc3RydG9sKCBwLCBOVUxMLCAxMCApOwogCiAKICAgICAgICAgICBpZiAoIHRvdGFsX2NvdW50ID4gMCApCkBAIC04NjcsNyArODY4LDcgQEAKICAgICAgICAgcCA9IGdldGVudiggIkZUMl9LRUVQX0FMSVZFIiApOwogICAgICAgICBpZiAoIHAgIT0gTlVMTCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9Mb25nICBrZWVwX2FsaXZlID0gZnRfYXRvbCggcCApOworICAgICAgICAgIEZUX0xvbmcgIGtlZXBfYWxpdmUgPSBmdF9zdHJ0b2woIHAsIE5VTEwsIDEwICk7CiAKIAogICAgICAgICAgIGlmICgga2VlcF9hbGl2ZSA+IDAgKQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRkZWJ1Zy5jIGIvc3JjL2Jhc2UvZnRkZWJ1Zy5jCmluZGV4IDJjZGI3YzIuLjQwOTI1ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGVidWcuYworKysgYi9zcmMvYmFzZS9mdGRlYnVnLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE1Miw4ICsxNTIsOCBAQAogICAvKiB0aGUgbWVtb3J5IGFuZCBzdHJlYW0gY29tcG9uZW50cyB3aGljaCBhcmUgc2V0IHRvIDcgYW5kIDUsICAgICAgICAgICAgKi8KICAgLyogcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTZWUgdGhlIGZpbGUgPGluY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oPiBmb3IgZGV0YWlscyBvZiB0aGUgICAgICAgICAgKi8KLSAgLyogYXZhaWxhYmxlIHRvZ2dsZSBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNlZSB0aGUgZmlsZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgnIGZvciBkZXRhaWxzIG9mICAgICAqLworICAvKiB0aGUgYXZhaWxhYmxlIHRvZ2dsZSBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoZSBsZXZlbCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNzsgMCBtZWFucyBxdWlldCAoZXhjZXB0IGZvciBzZXJpb3VzICAqLwogICAvKiBydW50aW1lIGVycm9ycyksIGFuZCA3IG1lYW5zIF92ZXJ5XyB2ZXJib3NlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Zm50Zm10LmMgYi9zcmMvYmFzZS9mdGZudGZtdC5jCmluZGV4IDk4ZTc0MzEuLmM2ZWIzMTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Zm50Zm10LmMKKysrIGIvc3JjL2Jhc2UvZnRmbnRmbXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIGZvbnQgZm9ybWF0cyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRmc3R5cGUuYyBiL3NyYy9iYXNlL2Z0ZnN0eXBlLmMKaW5kZXggY2QzNDU4Zi4uYWU1NmM4ZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRmc3R5cGUuYworKysgYi9zcmMvYmFzZS9mdGZzdHlwZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSB0byBhY2Nlc3MgRlNUeXBlIGRhdGEgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA4LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGdhc3AuYyBiL3NyYy9iYXNlL2Z0Z2FzcC5jCmluZGV4IGJiZDI1N2MuLmUzOGU1NWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2FzcC5jCisrKyBiL3NyYy9iYXNlL2Z0Z2FzcC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFjY2VzcyBvZiBUcnVlVHlwZSdzIGBnYXNwJyB0YWJsZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGdsb2Fkci5jIGIvc3JjL2Jhc2UvZnRnbG9hZHIuYwppbmRleCA3ZTI4NjM4Li5jNGYwZmY3IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGdsb2Fkci5jCisrKyBiL3NyYy9iYXNlL2Z0Z2xvYWRyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2x5cGguYyBiL3NyYy9iYXNlL2Z0Z2x5cGguYwppbmRleCBjYjdmYzM3Li5jMjM3NmRkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGdseXBoLmMKKysrIGIvc3JjL2Jhc2UvZnRnbHlwaC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChib2R5KS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMjUsMTAgKzEyNSwxMCBAQAogICAgIEZUX0JpdG1hcEdseXBoICBnbHlwaCA9IChGVF9CaXRtYXBHbHlwaCliaXRtYXBfZ2x5cGg7CiAKIAotICAgIGNib3gtPnhNaW4gPSBnbHlwaC0+bGVmdCA8PCA2OwotICAgIGNib3gtPnhNYXggPSBjYm94LT54TWluICsgKEZUX1BvcykoIGdseXBoLT5iaXRtYXAud2lkdGggPDwgNiApOwotICAgIGNib3gtPnlNYXggPSBnbHlwaC0+dG9wIDw8IDY7Ci0gICAgY2JveC0+eU1pbiA9IGNib3gtPnlNYXggLSAoRlRfUG9zKSggZ2x5cGgtPmJpdG1hcC5yb3dzIDw8IDYgKTsKKyAgICBjYm94LT54TWluID0gZ2x5cGgtPmxlZnQgKiA2NDsKKyAgICBjYm94LT54TWF4ID0gY2JveC0+eE1pbiArIChGVF9Qb3MpKCBnbHlwaC0+Yml0bWFwLndpZHRoICogNjQgKTsKKyAgICBjYm94LT55TWF4ID0gZ2x5cGgtPnRvcCAqIDY0OworICAgIGNib3gtPnlNaW4gPSBjYm94LT55TWF4IC0gKEZUX1BvcykoIGdseXBoLT5iaXRtYXAucm93cyAqIDY0ICk7CiAgIH0KIAogCkBAIC00MDMsOSArNDAzLDkgQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIC8qIGNvcHkgYWR2YW5jZSB3aGlsZSBjb252ZXJ0aW5nIGl0IHRvIDE2LjE2IGZvcm1hdCAqLwotICAgIGdseXBoLT5hZHZhbmNlLnggPSBzbG90LT5hZHZhbmNlLnggPDwgMTA7Ci0gICAgZ2x5cGgtPmFkdmFuY2UueSA9IHNsb3QtPmFkdmFuY2UueSA8PCAxMDsKKyAgICAvKiBjb3B5IGFkdmFuY2Ugd2hpbGUgY29udmVydGluZyAyNi42IHRvIDE2LjE2IGZvcm1hdCAqLworICAgIGdseXBoLT5hZHZhbmNlLnggPSBzbG90LT5hZHZhbmNlLnggKiAxMDI0OworICAgIGdseXBoLT5hZHZhbmNlLnkgPSBzbG90LT5hZHZhbmNlLnkgKiAxMDI0OwogCiAgICAgLyogbm93IGltcG9ydCB0aGUgaW1hZ2UgZnJvbSB0aGUgZ2x5cGggc2xvdCAqLwogICAgIGVycm9yID0gY2xhenotPmdseXBoX2luaXQoIGdseXBoLCBzbG90ICk7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGhhc2guYyBiL3NyYy9iYXNlL2Z0aGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmM4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFzZS9mdGhhc2guYwpAQCAtMCwwICsxLDMzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRoYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEhhc2hpbmcgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAyMDAwIENvbXB1dGluZyBSZXNlYXJjaCBMYWJzLCBOZXcgTWV4aWNvIFN0YXRlIFVuaXZlcnNpdHkKKyAqIENvcHlyaWdodCAyMDAxLTIwMTUKKyAqICAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09NUFVUSU5HIFJFU0VBUkNIIExBQiBPUiBORVcgTUVYSUNPIFNUQVRFIFVOSVZFUlNJVFkgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQKKyAqIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gY29kZSBmcm9tIGJkZi5jLHYgMS4yMiAyMDAwLzAzLzE2IDIwOjA4OjUwICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIHRha2VuIGZyb20gTWFyayBMZWlzaGVyJ3MgeG1iZGZlZCBwYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKKworCisjZGVmaW5lIElOSVRJQUxfSFRfU0laRSAgMjQxCisKKworICBzdGF0aWMgRlRfVUxvbmcKKyAgaGFzaF9zdHJfbG9va3VwKCBGVF9IYXNoa2V5KiAga2V5ICkKKyAgeworICAgIGNvbnN0IGNoYXIqICBrcCAgPSBrZXktPnN0cjsKKyAgICBGVF9VTG9uZyAgICAgcmVzID0gMDsKKworCisgICAgLyogTW9ja2xpc3AgaGFzaCBmdW5jdGlvbi4gKi8KKyAgICB3aGlsZSAoICprcCApCisgICAgICByZXMgPSAoIHJlcyA8PCA1ICkgLSByZXMgKyAoRlRfVUxvbmcpKmtwKys7CisKKyAgICByZXR1cm4gcmVzOworICB9CisKKworICBzdGF0aWMgRlRfVUxvbmcKKyAgaGFzaF9udW1fbG9va3VwKCBGVF9IYXNoa2V5KiAga2V5ICkKKyAgeworICAgIEZUX1VMb25nICBudW0gPSAoRlRfVUxvbmcpa2V5LT5udW07CisgICAgRlRfVUxvbmcgIHJlczsKKworCisgICAgLyogTW9ja2xpc3AgaGFzaCBmdW5jdGlvbi4gKi8KKyAgICByZXMgPSBudW0gJiAweEZGOworICAgIHJlcyA9ICggcmVzIDw8IDUgKSAtIHJlcyArICggKCBudW0gPj4gIDggKSAmIDB4RkYgKTsKKyAgICByZXMgPSAoIHJlcyA8PCA1ICkgLSByZXMgKyAoICggbnVtID4+IDE2ICkgJiAweEZGICk7CisgICAgcmVzID0gKCByZXMgPDwgNSApIC0gcmVzICsgKCAoIG51bSA+PiAyNCApICYgMHhGRiApOworCisgICAgcmV0dXJuIHJlczsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgaGFzaF9zdHJfY29tcGFyZSggRlRfSGFzaGtleSogIGEsCisgICAgICAgICAgICAgICAgICAgIEZUX0hhc2hrZXkqICBiICkKKyAgeworICAgIGlmICggYS0+c3RyWzBdID09IGItPnN0clswXSAgICAgICAgICAgJiYKKyAgICAgICAgIGZ0X3N0cmNtcCggYS0+c3RyLCBiLT5zdHIgKSA9PSAwICkKKyAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGhhc2hfbnVtX2NvbXBhcmUoIEZUX0hhc2hrZXkqICBhLAorICAgICAgICAgICAgICAgICAgICBGVF9IYXNoa2V5KiAgYiApCisgIHsKKyAgICBpZiAoIGEtPm51bSA9PSBiLT5udW0gKQorICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0hhc2hub2RlKgorICBoYXNoX2J1Y2tldCggRlRfSGFzaGtleSAga2V5LAorICAgICAgICAgICAgICAgRlRfSGFzaCAgICAgaGFzaCApCisgIHsKKyAgICBGVF9VTG9uZyAgICAgIHJlcyA9IDA7CisgICAgRlRfSGFzaG5vZGUqICBicCAgPSBoYXNoLT50YWJsZTsKKyAgICBGVF9IYXNobm9kZSogIG5kcDsKKworCisgICAgcmVzID0gKGhhc2gtPmxvb2t1cCkoICZrZXkgKTsKKworICAgIG5kcCA9IGJwICsgKCByZXMgJSBoYXNoLT5zaXplICk7CisgICAgd2hpbGUgKCAqbmRwICkKKyAgICB7CisgICAgICBpZiAoIChoYXNoLT5jb21wYXJlKSggJigqbmRwKS0+a2V5LCAma2V5ICkgKQorICAgICAgICBicmVhazsKKworICAgICAgbmRwLS07CisgICAgICBpZiAoIG5kcCA8IGJwICkKKyAgICAgICAgbmRwID0gYnAgKyAoIGhhc2gtPnNpemUgLSAxICk7CisgICAgfQorCisgICAgcmV0dXJuIG5kcDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGhhc2hfcmVoYXNoKCBGVF9IYXNoICAgIGhhc2gsCisgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9IYXNobm9kZSogIG9icCA9IGhhc2gtPnRhYmxlOworICAgIEZUX0hhc2hub2RlKiAgYnA7CisgICAgRlRfSGFzaG5vZGUqICBuYnA7CisKKyAgICBGVF9VSW50ICAgaSwgc3ogPSBoYXNoLT5zaXplOworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaGFzaC0+c2l6ZSA8PD0gMTsKKyAgICBoYXNoLT5saW1pdCAgPSBoYXNoLT5zaXplIC8gMzsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBoYXNoLT50YWJsZSwgaGFzaC0+c2l6ZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIGkgPSAwLCBicCA9IG9icDsgaSA8IHN6OyBpKyssIGJwKysgKQorICAgIHsKKyAgICAgIGlmICggKmJwICkKKyAgICAgIHsKKyAgICAgICAgbmJwID0gaGFzaF9idWNrZXQoICgqYnApLT5rZXksIGhhc2ggKTsKKyAgICAgICAgKm5icCA9ICpicDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBGVF9GUkVFKCBvYnAgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGhhc2hfaW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgIEZUX0Jvb2wgICAgaXNfbnVtLAorICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX1VJbnQgICBzeiA9IElOSVRJQUxfSFRfU0laRTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGhhc2gtPnNpemUgID0gc3o7CisgICAgaGFzaC0+bGltaXQgPSBzeiAvIDM7CisgICAgaGFzaC0+dXNlZCAgPSAwOworCisgICAgaWYgKCBpc19udW0gKQorICAgIHsKKyAgICAgIGhhc2gtPmxvb2t1cCAgPSBoYXNoX251bV9sb29rdXA7CisgICAgICBoYXNoLT5jb21wYXJlID0gaGFzaF9udW1fY29tcGFyZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhhc2gtPmxvb2t1cCAgPSBoYXNoX3N0cl9sb29rdXA7CisgICAgICBoYXNoLT5jb21wYXJlID0gaGFzaF9zdHJfY29tcGFyZTsKKyAgICB9CisKKyAgICBGVF9NRU1fTkVXX0FSUkFZKCBoYXNoLT50YWJsZSwgc3ogKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9zdHJfaW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICByZXR1cm4gaGFzaF9pbml0KCBoYXNoLCAwLCBtZW1vcnkgKTsKKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9udW1faW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICByZXR1cm4gaGFzaF9pbml0KCBoYXNoLCAxLCBtZW1vcnkgKTsKKyAgfQorCisKKyAgdm9pZAorICBmdF9oYXNoX3N0cl9mcmVlKCBGVF9IYXNoICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIGlmICggaGFzaCApCisgICAgeworICAgICAgRlRfVUludCAgICAgICBzeiA9IGhhc2gtPnNpemU7CisgICAgICBGVF9IYXNobm9kZSogIGJwID0gaGFzaC0+dGFibGU7CisgICAgICBGVF9VSW50ICAgICAgIGk7CisKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBzejsgaSsrLCBicCsrICkKKyAgICAgICAgRlRfRlJFRSggKmJwICk7CisKKyAgICAgIEZUX0ZSRUUoIGhhc2gtPnRhYmxlICk7CisgICAgfQorICB9CisKKworICAvKiBgZnRfaGFzaF9udW1fZnJlZScgaXMgdGhlIHNhbWUgYXMgYGZ0X2hhc2hfc3RyX2ZyZWUnICovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgaGFzaF9pbnNlcnQoIEZUX0hhc2hrZXkgIGtleSwKKyAgICAgICAgICAgICAgIHNpemVfdCAgICAgIGRhdGEsCisgICAgICAgICAgICAgICBGVF9IYXNoICAgICBoYXNoLAorICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0hhc2hub2RlICAgbm47CisgICAgRlRfSGFzaG5vZGUqICBicCAgICA9IGhhc2hfYnVja2V0KCBrZXksIGhhc2ggKTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBubiA9ICpicDsKKyAgICBpZiAoICFubiApCisgICAgeworICAgICAgaWYgKCBGVF9ORVcoIG5uICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAqYnAgPSBubjsKKworICAgICAgbm4tPmtleSAgPSBrZXk7CisgICAgICBubi0+ZGF0YSA9IGRhdGE7CisKKyAgICAgIGlmICggaGFzaC0+dXNlZCA+PSBoYXNoLT5saW1pdCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gaGFzaF9yZWhhc2goIGhhc2gsIG1lbW9yeSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGhhc2gtPnVzZWQrKzsKKyAgICB9CisgICAgZWxzZQorICAgICAgbm4tPmRhdGEgPSBkYXRhOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9FcnJvcgorICBmdF9oYXNoX3N0cl9pbnNlcnQoIGNvbnN0IGNoYXIqICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaCAgICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9IYXNoa2V5ICBoazsKKworCisgICAgaGsuc3RyID0ga2V5OworCisgICAgcmV0dXJuIGhhc2hfaW5zZXJ0KCBoaywgZGF0YSwgaGFzaCwgbWVtb3J5ICk7CisgIH0KKworCisgIEZUX0Vycm9yCisgIGZ0X2hhc2hfbnVtX2luc2VydCggRlRfSW50ICAgICBudW0sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9IYXNoa2V5ICBoazsKKworCisgICAgaGsubnVtID0gbnVtOworCisgICAgcmV0dXJuIGhhc2hfaW5zZXJ0KCBoaywgZGF0YSwgaGFzaCwgbWVtb3J5ICk7CisgIH0KKworCisgIHN0YXRpYyBzaXplX3QqCisgIGhhc2hfbG9va3VwKCBGVF9IYXNoa2V5ICBrZXksCisgICAgICAgICAgICAgICBGVF9IYXNoICAgICBoYXNoICkKKyAgeworICAgIEZUX0hhc2hub2RlKiAgbnAgPSBoYXNoX2J1Y2tldCgga2V5LCBoYXNoICk7CisKKworICAgIHJldHVybiAoKm5wKSA/ICYoKm5wKS0+ZGF0YQorICAgICAgICAgICAgICAgICA6IE5VTEw7CisgIH0KKworCisgIHNpemVfdCoKKyAgZnRfaGFzaF9zdHJfbG9va3VwKCBjb25zdCBjaGFyKiAga2V5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgICBoYXNoICkKKyAgeworICAgIEZUX0hhc2hrZXkgIGhrOworCisKKyAgICBoay5zdHIgPSBrZXk7CisKKyAgICByZXR1cm4gaGFzaF9sb29rdXAoIGhrLCBoYXNoICk7CisgIH0KKworCisgIHNpemVfdCoKKyAgZnRfaGFzaF9udW1fbG9va3VwKCBGVF9JbnQgICBudW0sCisgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaCAgaGFzaCApCisgIHsKKyAgICBGVF9IYXNoa2V5ICBoazsKKworCisgICAgaGsubnVtID0gbnVtOworCisgICAgcmV0dXJuIGhhc2hfbG9va3VwKCBoaywgaGFzaCApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGluaXQuYyBiL3NyYy9iYXNlL2Z0aW5pdC5jCmluZGV4IGNjOTVlNmEuLjAyZWY5MzggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0aW5pdC5jCisrKyBiL3NyYy9iYXNlL2Z0aW5pdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGluaXRpYWxpemF0aW9uIGxheWVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMyw4ICsyMyw4IEBACiAgIC8qICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFkZCB0aGUgc2V0IG9mIGRlZmF1bHQgbW9kdWxlcyB0byBhICAgICAgKi8KICAgLyogICAgIGZyZXNoIG5ldyBsaWJyYXJ5IG9iamVjdC4gIFRoZSBzZXQgaXMgdGFrZW4gZnJvbSB0aGUgaGVhZGVyIGZpbGUgICovCi0gIC8qICAgICBgY29uZmlnL2Z0bW9kdWxlLmgnLiAgU2VlIHRoZSBkb2N1bWVudCBgRnJlZVR5cGUgMi4wIEJ1aWxkICAgICAgICAqLwotICAvKiAgICAgU3lzdGVtJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGBmcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaCcuICBTZWUgdGhlIGRvY3VtZW50IGBGcmVlVHlwZSAyLjAgICAgICovCisgIC8qICAgICBCdWlsZCBTeXN0ZW0nIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogIEZUX0luaXRfRnJlZVR5cGUoKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzeXN0ZW0gb2JqZWN0IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSwgICAqLwpAQCAtMjI2LDYgKzIyNiwxMTUgQEAKICAgfQogCiAKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKworI2RlZmluZSBNQVhfTEVOR1RIICAxMjgKKworICAvKgorICAgKiBTZXQgZGVmYXVsdCBwcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnCisgICAqIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgKgorICAgKiBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlIGludG8KKyAgICogbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkKKyAgICoKKyAgICogICA8b3B0aW9uYWwgd2hpdGVzcGFjZT4KKyAgICogICA8bW9kdWxlLW5hbWUxPiAnOicKKyAgICogICA8cHJvcGVydHktbmFtZTE+ICc9JyA8cHJvcGVydHktdmFsdWUxPgorICAgKiAgIDx3aGl0ZXNwYWNlPgorICAgKiAgIDxtb2R1bGUtbmFtZTI+ICc6JworICAgKiAgIDxwcm9wZXJ0eS1uYW1lMj4gJz0nIDxwcm9wZXJ0eS12YWx1ZTI+CisgICAqICAgLi4uCisgICAqCisgICAqIEV4YW1wbGU6CisgICAqCisgICAqICAgRlJFRVRZUEVfUFJPUEVSVElFUz10cnVldHlwZTppbnRlcnByZXRlci12ZXJzaW9uPTM1IFwKKyAgICogICAgICAgICAgICAgICAgICAgICAgIGNmZjpuby1zdGVtLWRhcmtlbmluZz0xIFwKKyAgICogICAgICAgICAgICAgICAgICAgICAgIGF1dG9maXR0ZXI6d2FycGluZz0xCisgICAqCisgICAqLworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3NldF9kZWZhdWx0X3Byb3BlcnRpZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgY29uc3QgY2hhciogIGVudjsKKyAgICBjb25zdCBjaGFyKiAgcDsKKyAgICBjb25zdCBjaGFyKiAgcTsKKworICAgIGNoYXIgIG1vZHVsZV9uYW1lW01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyICBwcm9wZXJ0eV9uYW1lW01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyICBwcm9wZXJ0eV92YWx1ZVtNQVhfTEVOR1RIICsgMV07CisKKyAgICBpbnQgIGk7CisKKworICAgIGVudiA9IGZ0X2dldGVudiggIkZSRUVUWVBFX1BST1BFUlRJRVMiICk7CisgICAgaWYgKCAhZW52ICkKKyAgICAgIHJldHVybjsKKworICAgIGZvciAoIHAgPSBlbnY7ICpwOyBwKysgKQorICAgIHsKKyAgICAgIC8qIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBzZXBhcmF0b3JzICovCisgICAgICBpZiAoICpwID09ICcgJyB8fCAqcCA9PSAnXHQnICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIC8qIHJlYWQgbW9kdWxlIG5hbWUsIGZvbGxvd2VkIGJ5IGA6JyAqLworICAgICAgcSA9IHA7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IE1BWF9MRU5HVEg7IGkrKyApCisgICAgICB7CisgICAgICAgIGlmICggISpwIHx8ICpwID09ICc6JyApCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1vZHVsZV9uYW1lW2ldID0gKnArKzsKKyAgICAgIH0KKyAgICAgIG1vZHVsZV9uYW1lW2ldID0gJ1wwJzsKKworICAgICAgaWYgKCAhKnAgfHwgKnAgIT0gJzonIHx8IHAgPT0gcSApCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiByZWFkIHByb3BlcnR5IG5hbWUsIGZvbGxvd2VkIGJ5IGA9JyAqLworICAgICAgcSA9ICsrcDsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX0xFTkdUSDsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhKnAgfHwgKnAgPT0gJz0nICkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJvcGVydHlfbmFtZVtpXSA9ICpwKys7CisgICAgICB9CisgICAgICBwcm9wZXJ0eV9uYW1lW2ldID0gJ1wwJzsKKworICAgICAgaWYgKCAhKnAgfHwgKnAgIT0gJz0nIHx8IHAgPT0gcSApCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiByZWFkIHByb3BlcnR5IHZhbHVlLCBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlIChpZiBhbnkpICovCisgICAgICBxID0gKytwOworICAgICAgZm9yICggaSA9IDA7IGkgPCBNQVhfTEVOR1RIOyBpKysgKQorICAgICAgeworICAgICAgICBpZiAoICEqcCB8fCAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JyApCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByb3BlcnR5X3ZhbHVlW2ldID0gKnArKzsKKyAgICAgIH0KKyAgICAgIHByb3BlcnR5X3ZhbHVlW2ldID0gJ1wwJzsKKworICAgICAgaWYgKCAhKCAqcCA9PSAnXDAnIHx8ICpwID09ICcgJyB8fCAqcCA9PSAnXHQnICkgfHwgcCA9PSBxICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHdlIGNvbXBsZXRlbHkgaWdub3JlIGVycm9ycyAqLworICAgICAgZnRfcHJvcGVydHlfc3RyaW5nX3NldCggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X3ZhbHVlICk7CisgICAgfQorICB9CisKKyNlbHNlCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfc2V0X2RlZmF1bHRfcHJvcGVydGllcyggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKyAgfQorCisjZW5kaWYKKworCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKQEAgLTI1Niw2ICszNjUsOCBAQAogICAgIGVsc2UKICAgICAgIEZUX0FkZF9EZWZhdWx0X01vZHVsZXMoICphbGlicmFyeSApOwogCisgICAgZnRfc2V0X2RlZmF1bHRfcHJvcGVydGllcyggKmFsaWJyYXJ5ICk7CisKICAgICByZXR1cm4gZXJyb3I7CiAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRsY2RmaWwuYyBiL3NyYy9iYXNlL2Z0bGNkZmlsLmMKaW5kZXggZmY2ZjdlOS4uOGJjYmVkNyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRsY2RmaWwuYworKysgYi9zcmMvYmFzZS9mdGxjZGZpbC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMgKGJvZHkpLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yOTYsNiArMjk2LDggQEAKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogCiAgICAgZnRfbWVtY3B5KCBsaWJyYXJ5LT5sY2Rfd2VpZ2h0cywgd2VpZ2h0cywgNSApOworICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IF9mdF9sY2RfZmlsdGVyX2ZpcjsKKyAgICBsaWJyYXJ5LT5sY2RfZXh0cmEgICAgICAgPSAyOwogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQpAQCAtMzA1LDEyICszMDcsMTAgQEAKICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xjZEZpbHRlciAgZmlsdGVyICkKICAgeworICAgIHN0YXRpYyBjb25zdCBGVF9CeXRlICBkZWZhdWx0X2ZpbHRlcls1XSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAweDA4LCAweDRkLCAweDU2LCAweDRkLCAweDA4IH07CiAgICAgc3RhdGljIGNvbnN0IEZUX0J5dGUgIGxpZ2h0X2ZpbHRlcls1XSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAweDAwLCAweDU1LCAweDU2LCAweDU1LCAweDAwIH07Ci0gICAgLyogdGhlIHZhbHVlcyBoZXJlIHN1bSB1cCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIDI1NiwgKi8KLSAgICAvKiBwcm92aWRpbmcgYSBjaGVhcCBnYW1tYSBjb3JyZWN0aW9uICAgICAgICAgICAgICAgICAqLwotICAgIHN0YXRpYyBjb25zdCBGVF9CeXRlICBkZWZhdWx0X2ZpbHRlcls1XSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAweDEwLCAweDQwLCAweDcwLCAweDQwLCAweDEwIH07CiAKIAogICAgIGlmICggIWxpYnJhcnkgKQpAQCAtMzI0LDI1ICszMjQsOSBAQAogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZUX0xDRF9GSUxURVJfREVGQVVMVDoKLSNpZiBkZWZpbmVkKCBGVF9GT1JDRV9MRUdBQ1lfTENEX0ZJTFRFUiApCi0KLSAgICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IF9mdF9sY2RfZmlsdGVyX2xlZ2FjeTsKLSAgICAgIGxpYnJhcnktPmxjZF9leHRyYSAgICAgICA9IDA7Ci0KLSNlbGlmIGRlZmluZWQoIEZUX0ZPUkNFX0xJR0hUX0xDRF9GSUxURVIgKQotCi0gICAgICBmdF9tZW1jcHkoIGxpYnJhcnktPmxjZF93ZWlnaHRzLCBsaWdodF9maWx0ZXIsIDUgKTsKLSAgICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IF9mdF9sY2RfZmlsdGVyX2ZpcjsKLSAgICAgIGxpYnJhcnktPmxjZF9leHRyYSAgICAgICA9IDI7Ci0KLSNlbHNlCi0KICAgICAgIGZ0X21lbWNweSggbGlicmFyeS0+bGNkX3dlaWdodHMsIGRlZmF1bHRfZmlsdGVyLCA1ICk7CiAgICAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgPSBfZnRfbGNkX2ZpbHRlcl9maXI7CiAgICAgICBsaWJyYXJ5LT5sY2RfZXh0cmEgICAgICAgPSAyOwotCi0jZW5kaWYKLQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZUX0xDRF9GSUxURVJfTElHSFQ6CkBAIC0zNTQsNiArMzM4LDcgQEAKICNpZmRlZiBVU0VfTEVHQUNZCiAKICAgICBjYXNlIEZUX0xDRF9GSUxURVJfTEVHQUNZOgorICAgIGNhc2UgRlRfTENEX0ZJTFRFUl9MRUdBQ1kxOgogICAgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gX2Z0X2xjZF9maWx0ZXJfbGVnYWN5OwogICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMDsKICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRtbS5jIGIvc3JjL2Jhc2UvZnRtbS5jCmluZGV4IDdjMDEyYWEuLjZiNzU5Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0bW0uYworKysgYi9zcmMvYmFzZS9mdG1tLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTXVsdGlwbGUgTWFzdGVyIGZvbnQgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b2Jqcy5jIGIvc3JjL2Jhc2UvZnRvYmpzLmMKaW5kZXggOWMzMzMyYy4uOTAwNmI1OSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRvYmpzLmMKKysrIGIvc3JjL2Jhc2UvZnRvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgYmFzZSBjbGFzc2VzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTU1LDcgKzU1LDE4IEBACiAjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MjQ0ICkKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCi0gIC8qIGl0J3MgZWFzaWVzdCB0byBpbmNsdWRlIGBtZDUuYycgZGlyZWN0bHkgKi8KKyAgLyogSXQncyBlYXNpZXN0IHRvIGluY2x1ZGUgYG1kNS5jJyBkaXJlY3RseS4gIEhvd2V2ZXIsIHNpbmNlIE9wZW5TU0wgKi8KKyAgLyogYWxzbyBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbnMsIHRoZXJlIG1pZ2h0IGJlIGNvbmZsaWN0cyBpZiAgICAgKi8KKyAgLyogYm90aCBGcmVlVHlwZSBhbmQgT3BlblNTTCBhcmUgYnVpbHQgYXMgc3RhdGljIGxpYnJhcmllcy4gIEZvciAgICAgKi8KKyAgLyogdGhpcyByZWFzb24sIHdlIHB1dCB0aGUgTUQ1IHN0dWZmIGludG8gdGhlIGBGVF8nIG5hbWVzcGFjZS4gICAgICAgKi8KKyNkZWZpbmUgTUQ1X3UzMnBsdXMgIEZUX01ENV91MzJwbHVzCisjZGVmaW5lIE1ENV9DVFggICAgICBGVF9NRDVfQ1RYCisjZGVmaW5lIE1ENV9Jbml0ICAgICBGVF9NRDVfSW5pdAorI2RlZmluZSBNRDVfVXBkYXRlICAgRlRfTUQ1X1VwZGF0ZQorI2RlZmluZSBNRDVfRmluYWwgICAgRlRfTUQ1X0ZpbmFsCisKKyN1bmRlZiAgSEFWRV9PUEVOU1NMCisKICNpbmNsdWRlICJtZDUuYyIKIAogI2lmIGRlZmluZWQoIF9NU0NfVkVSICkKQEAgLTY3NSw4ICs2ODYsOCBAQAogICAgICAgICAvKiBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgYGZwZ20nIGFuZCBgcHJlcCcgdGFibGVzLCB0b28gLS0gICAgKi8KICAgICAgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBkb24ndCBleGlzdCByZWFsIFRURnMgd2hlcmUgICovCiAgICAgICAgIC8qIGJvdGggYGZwZ20nIGFuZCBgcHJlcCcgdGFibGVzIGFyZSBtaXNzaW5nICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgICAgZmFjZS0+aW50ZXJuYWwtPmlnbm9yZV91bnBhdGVudGVkX2hpbnRlciAgICAgICAgICAgfHwKKyAgICAgICAgaWYgKCAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICFGVF9EUklWRVJfSElOVFNfTElHSFRMWSggZHJpdmVyICkgKSAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICggRlRfSVNfU0ZOVCggZmFjZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgdHRmYWNlLT5udW1fbG9jYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgdHRmYWNlLT5tYXhfcHJvZmlsZS5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgPT0gMCAmJgpAQCAtMTM3NSwxMyArMTM4NiwxMyBAQAogICAgIH0KIAogI2lmZGVmIEZUX01BQ0lOVE9TSAotICAgIC8qIEF0IHRoaXMgcG9pbnQsIGZhY2VfaW5kZXggaGFzIHNlcnZlZCBpdHMgcHVycG9zZTsgICAgICAqLworICAgIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBmYWNlIGluZGV4IGhhcyBzZXJ2ZWQgaXRzIHB1cnBvc2U7ICAqLwogICAgIC8qIHdob2V2ZXIgY2FsbHMgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSB1c2VkIGl0IHRvICAgICAqLwogICAgIC8qIGxvY2F0ZSB0aGUgY29ycmVjdCBmb250IGRhdGEuICBXZSBzaG91bGQgbm90IHByb3BhZ2F0ZSAqLwogICAgIC8qIHRoaXMgaW5kZXggdG8gRlRfT3Blbl9GYWNlKCkgKHVubGVzcyBpdCBpcyBuZWdhdGl2ZSkuICAqLwogCiAgICAgaWYgKCBmYWNlX2luZGV4ID4gMCApCi0gICAgICBmYWNlX2luZGV4ID0gMDsKKyAgICAgIGZhY2VfaW5kZXggJj0gMHg3RkZGMDAwMEw7IC8qIHJldGFpbiBHWCBkYXRhICovCiAjZW5kaWYKIAogICAgIGVycm9yID0gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmYXJncywgZmFjZV9pbmRleCwgYWZhY2UgKTsKQEAgLTE0MDcsNyArMTQxOCw3IEBACiAKICAgLyogVHlwZSAxIGFuZCBDSUQta2V5ZWQgZm9udCBkcml2ZXJzIHNob3VsZCByZWNvZ25pemUgc2ZudC13cmFwcGVkICovCiAgIC8qIGZvcm1hdCB0b28uICBIZXJlLCBzaW5jZSB3ZSBjYW4ndCBleHBlY3QgdGhhdCB0aGUgVHJ1ZVR5cGUgZm9udCAqLwotICAvKiBkcml2ZXIgaXMgbG9hZGVkIHVuY29uZGl0aWFsbHksIHdlIG11c3QgcGFyc2UgdGhlIGZvbnQgYnkgICAgICAgKi8KKyAgLyogZHJpdmVyIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHksIHdlIG11c3QgcGFyc2UgdGhlIGZvbnQgYnkgICAgICovCiAgIC8qIG91cnNlbHZlcy4gIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGFuZCAqLwogICAvKiB0aGUgb2Zmc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMTQ3Miw2ICsxNDgzLDcgQEAKICAgICAgIGlmICggZmFjZV9pbmRleCA+PSAwICYmIHBzdGFibGVfaW5kZXggPT0gZmFjZV9pbmRleCApCiAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAgICAgfQorCiAgICAgcmV0dXJuIEZUX1RIUk9XKCBUYWJsZV9NaXNzaW5nICk7CiAgIH0KIApAQCAtMTQ5NSw2ICsxNTA3LDEwIEBACiAgICAgRlRfVU5VU0VEKCBwYXJhbXMgKTsKIAogCisgICAgLyogaWdub3JlIEdYIHN0dWZmICovCisgICAgaWYgKCBmYWNlX2luZGV4ID4gMCApCisgICAgICBmYWNlX2luZGV4ICY9IDB4RkZGRkw7CisKICAgICBwb3MgPSBGVF9TVFJFQU1fUE9TKCk7CiAKICAgICBlcnJvciA9IGZ0X2xvb2t1cF9QU19pbl9zZm50X3N0cmVhbSggc3RyZWFtLApAQCAtMTUwNSw3ICsxNTIxLDIxIEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICBpZiAoIEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIHBvcyArIG9mZnNldCApICkKKyAgICBpZiAoIG9mZnNldCA+IHN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIm9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtOiBpbnZhbGlkIHRhYmxlIG9mZnNldFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoIGxlbmd0aCA+IHN0cmVhbS0+c2l6ZSAtIG9mZnNldCApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIm9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtOiBpbnZhbGlkIHRhYmxlIGxlbmd0aFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIHBvcyArIG9mZnNldCApOworICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgaWYgKCBGVF9BTExPQyggc2ZudF9wcywgKEZUX0xvbmcpbGVuZ3RoICkgKQpAQCAtMTUxMyw3ICsxNTQzLDEwIEBACiAKICAgICBlcnJvciA9IEZUX1N0cmVhbV9SZWFkKCBzdHJlYW0sIChGVF9CeXRlICopc2ZudF9wcywgbGVuZ3RoICk7CiAgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgRlRfRlJFRSggc2ZudF9wcyApOwogICAgICAgZ290byBFeGl0OworICAgIH0KIAogICAgIGVycm9yID0gb3Blbl9mYWNlX2Zyb21fYnVmZmVyKCBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X3BzLApAQCAtMTU4MiwxMiArMTYxNSwxNCBAQAogICAgICAgLyogRlQyIGFsbG9jYXRvciB0YWtlcyBzaWduZWQgbG9uZyBidWZmZXIgbGVuZ3RoLAogICAgICAgICogdG9vIGxhcmdlIHZhbHVlIGNhdXNpbmcgb3ZlcmZsb3cgc2hvdWxkIGJlIGNoZWNrZWQKICAgICAgICAqLwotICAgICAgRlRfVFJBQ0U0KCggIiAgICAgICAgICAgICAgICAgUE9TVCBmcmFnbWVudCAjJWQ6IGxlbmd0aD0weCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICBpLCB0ZW1wKSk7Ci0gICAgICBpZiAoIDB4N0ZGRkZGRkZVTCA8IHRlbXAgfHwgcGZiX2xlbiArIHRlbXAgKyA2IDwgcGZiX2xlbiApCisgICAgICBGVF9UUkFDRTQoKCAiICAgICAgICAgICAgICAgICBQT1NUIGZyYWdtZW50ICMlZDogbGVuZ3RoPTB4JTA4eCIKKyAgICAgICAgICAgICAgICAgICIgdG90YWwgcGZiX2xlbj0weCUwOHhcbiIsCisgICAgICAgICAgICAgICAgICBpLCB0ZW1wLCBwZmJfbGVuICsgdGVtcCArIDYpKTsKKyAgICAgIGlmICggRlRfTUFDX1JGT1JLX01BWF9MRU4gPCB0ZW1wICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfTUFDX1JGT1JLX01BWF9MRU4gLSB0ZW1wIDwgcGZiX2xlbiArIDYgKQogICAgICAgewotICAgICAgICBGVF9UUkFDRTIoKCAiICAgICAgICAgICAgIHRvbyBsb25nIGZyYWdtZW50IGxlbmd0aCBtYWtlcyIKLSAgICAgICAgICAgICAgICAgICAgIiBwZmJfbGVuIGNvbmZ1c2VkOiB0ZW1wPTB4JTA4eFxuIiwgdGVtcCApKTsKKyAgICAgICAgRlRfVFJBQ0UyKCggIiAgICAgICAgICAgICBNYWNPUyByZXNvdXJjZSBsZW5ndGggY2Fubm90IGV4Y2VlZCIKKyAgICAgICAgICAgICAgICAgICAgIiAweCUwOHhcbiIsIEZUX01BQ19SRk9SS19NQVhfTEVOICkpOwogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09mZnNldCApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CkBAIC0xNjYwLDcgKzE2OTUsNyBAQAogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBGVF9UUkFDRTMoKCAiICAgIFdyaXRlIFBPU1QgZnJhZ21lbnQgIyVkIGhlYWRlciAoNC1ieXRlKSB0byBidWZmZXIiCi0gICAgICAgICAgICAgICAgICAgICIgMHglcCArIDB4JTA4eFxuIiwgaSwgcGZiX2RhdGEsIHBmYl9sZW5wb3MgKSk7CisgICAgICAgICAgICAgICAgICAgICIgJXAgKyAweCUwOHhcbiIsIGksIHBmYl9kYXRhLCBwZmJfbGVucG9zICkpOwogICAgICAgICBpZiAoIHBmYl9sZW5wb3MgKyAzID4gcGZiX2xlbiArIDIgKQogICAgICAgICAgIGdvdG8gRXhpdDI7CiAgICAgICAgIHBmYl9kYXRhW3BmYl9sZW5wb3MgICAgXSA9IChGVF9CeXRlKSggbGVuICk7CkBAIC0xNjcyLDcgKzE3MDcsNyBAQAogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEZUX1RSQUNFMygoICIgICAgV3JpdGUgUE9TVCBmcmFnbWVudCAjJWQgaGVhZGVyICg2LWJ5dGUpIHRvIGJ1ZmZlciIKLSAgICAgICAgICAgICAgICAgICAgIiAweCVwICsgMHglMDh4XG4iLCBpLCBwZmJfZGF0YSwgcGZiX3BvcyApKTsKKyAgICAgICAgICAgICAgICAgICAgIiAlcCArIDB4JTA4eFxuIiwgaSwgcGZiX2RhdGEsIHBmYl9wb3MgKSk7CiAgICAgICAgIGlmICggcGZiX3BvcyArIDYgPiBwZmJfbGVuICsgMiApCiAgICAgICAgICAgZ290byBFeGl0MjsKICAgICAgICAgcGZiX2RhdGFbcGZiX3BvcysrXSA9IDB4ODA7CkBAIC0xNjkyLDcgKzE3MjcsNyBAQAogICAgICAgICBnb3RvIEV4aXQyOwogCiAgICAgICBGVF9UUkFDRTMoKCAiICAgIExvYWQgUE9TVCBmcmFnbWVudCAjJWQgKCVkIGJ5dGUpIHRvIGJ1ZmZlciIKLSAgICAgICAgICAgICAgICAgICIgMHglcCArIDB4JTA4eFxuIiwgaSwgcmxlbiwgcGZiX2RhdGEsIHBmYl9wb3MgKSk7CisgICAgICAgICAgICAgICAgICAiICVwICsgMHglMDh4XG4iLCBpLCBybGVuLCBwZmJfZGF0YSwgcGZiX3BvcyApKTsKICAgICAgIGVycm9yID0gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgKEZUX0J5dGUgKilwZmJfZGF0YSArIHBmYl9wb3MsIHJsZW4gKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQyOwpAQCAtMTczNyw3ICsxNzcyLDcgQEAKICAgLyogVGhlIHJlc291cmNlIGhlYWRlciBzYXlzIHdlJ3ZlIGdvdCByZXNvdXJjZV9jbnQgYHNmbnQnICAgICAgKi8KICAgLyogKFRydWVUeXBlL09wZW5UeXBlKSByZXNvdXJjZXMgaW4gdGhpcyBmaWxlLiAgTG9vayB0aHJvdWdoICAgKi8KICAgLyogdGhlbSBmb3IgdGhlIG9uZSBpbmRpY2F0ZWQgYnkgZmFjZV9pbmRleCwgbG9hZCBpdCBpbnRvIG1lbSwgKi8KLSAgLyogcGFzcyBpdCBvbiB0aGUgdGhlIHRydWV0eXBlIGRyaXZlciBhbmQgcmV0dXJuIGl0LiAgICAgICAgICAgKi8KKyAgLyogcGFzcyBpdCBvbiB0byB0aGUgdHJ1ZXR5cGUgZHJpdmVyLCBhbmQgcmV0dXJuIGl0LiAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIE1hY19SZWFkX3NmbnRfUmVzb3VyY2UoIEZUX0xpYnJhcnkgIGxpYnJhcnksCkBAIC0xNzU2LDggKzE3OTEsOCBAQAogICAgIEZUX0xvbmcgICAgZmFjZV9pbmRleF9pbl9yZXNvdXJjZSA9IDA7CiAKIAotICAgIGlmICggZmFjZV9pbmRleCA9PSAtMSApCi0gICAgICBmYWNlX2luZGV4ID0gMDsKKyAgICBpZiAoIGZhY2VfaW5kZXggPCAwICkKKyAgICAgIGZhY2VfaW5kZXggPSAtZmFjZV9pbmRleCAtIDE7CiAgICAgaWYgKCBmYWNlX2luZGV4ID49IHJlc291cmNlX2NudCApCiAgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CiAKQEAgLTE3NzAsNiArMTgwNSw4IEBACiAgICAgICBnb3RvIEV4aXQ7CiAgICAgaWYgKCBybGVuID09IC0xICkKICAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKyAgICBpZiAoIChGVF9VTG9uZylybGVuID4gRlRfTUFDX1JGT1JLX01BWF9MRU4gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX09mZnNldCApOwogCiAgICAgZXJyb3IgPSBvcGVuX2ZhY2VfUFNfZnJvbV9zZm50X3N0cmVhbSggbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCkBAIC0xNzgwLDE0ICsxODE3LDE3IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKiByZXdpbmQgc2ZudCBzdHJlYW0gYmVmb3JlIG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKCkgKi8KLSAgICBpZiAoIEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIGZsYWdfb2Zmc2V0ICsgNCApICkKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIGZsYWdfb2Zmc2V0ICsgNCApOworICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgaWYgKCBGVF9BTExPQyggc2ZudF9kYXRhLCBybGVuICkgKQogICAgICAgcmV0dXJuIGVycm9yOwogICAgIGVycm9yID0gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgKEZUX0J5dGUgKilzZm50X2RhdGEsIChGVF9VTG9uZylybGVuICk7Ci0gICAgaWYgKCBlcnJvciApCisgICAgaWYgKCBlcnJvciApIHsKKyAgICAgIEZUX0ZSRUUoIHNmbnRfZGF0YSApOwogICAgICAgZ290byBFeGl0OworICAgIH0KIAogICAgIGlzX2NmZiA9IHJsZW4gPiA0ICYmICFmdF9tZW1jbXAoIHNmbnRfZGF0YSwgIk9UVE8iLCA0ICk7CiAgICAgZXJyb3IgPSBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIGxpYnJhcnksCkBAIC0xODg5LDEzICsxOTI5LDE0IEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICBpZiAoICAgICAgICAgICAgaGVhZGVyWyAwXSAhPSAgMCB8fAotICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNzRdICE9ICAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlYWRlcls4Ml0gIT0gIDAgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyWyAxXSA9PSAgMCB8fAotICAgICAgICAgICAgICAgICAgICBoZWFkZXJbIDFdID4gIDMzIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlYWRlcls2M10gIT0gIDAgfHwKLSAgICAgICAgIGhlYWRlclsyICsgaGVhZGVyWzFdXSAhPSAgMCApCisgICAgaWYgKCAgICAgICAgICAgIGhlYWRlclsgMF0gIT0gICAwIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls3NF0gIT0gICAwIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls4Ml0gIT0gICAwIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlclsgMV0gPT0gICAwIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlclsgMV0gPiAgIDMzIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls2M10gIT0gICAwIHx8CisgICAgICAgICBoZWFkZXJbMiArIGhlYWRlclsxXV0gIT0gICAwIHx8CisgICAgICAgICAgICAgICAgICBoZWFkZXJbMHg1M10gPiAweDdGICkKICAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwogCiAgICAgZGxlbiA9ICggaGVhZGVyWzB4NTNdIDw8IDI0ICkgfApAQCAtMjAzMiw3ICsyMDczLDExIEBACiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3JhY2Nlc3MKIAotICAgICAgRlRfVFJBQ0UzKCggIlRyeSBhcyBkZm9udDogJXMgLi4uIiwgYXJncy0+cGF0aG5hbWUgKSk7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgIEZUX1RSQUNFMygoICJUcnkgYXMgZGZvbnQ6ICIgKSk7CisgICAgICBpZiAoICEoIGFyZ3MtPmZsYWdzICYgRlRfT1BFTl9NRU1PUlkgKSApCisgICAgICAgIEZUX1RSQUNFMygoICIlcyAuLi4iLCBhcmdzLT5wYXRobmFtZSApKTsKKyNlbmRpZgogCiAgICAgICBlcnJvciA9IElzTWFjUmVzb3VyY2UoIGxpYnJhcnksIHN0cmVhbSwgMCwgZmFjZV9pbmRleCwgYWZhY2UgKTsKIApAQCAtMjE1NCw3ICsyMTk5LDggQEAKICAgICAgICAgICAgICAgIEZUX0VSUl9FUSggZXJyb3IsIFRhYmxlX01pc3NpbmcgKSAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBUcnVlVHlwZSBidXQgZXNzZW50aWFsIHRhYmxlcyBhcmUgbWlzc2luZyAqLwotICAgICAgICAgICAgaWYgKCBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAwICkgKQorICAgICAgICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAwICk7CisgICAgICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGVycm9yID0gb3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW0oIGxpYnJhcnksCkBAIC0yMjY4LDExICsyMzE0LDI0IEBACiAKIAogICAgICAgICBpZiAoIGJzaXplLT5oZWlnaHQgPCAwICkKLSAgICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gKEZUX1Nob3J0KS1ic2l6ZS0+aGVpZ2h0OworICAgICAgICAgIGJzaXplLT5oZWlnaHQgPSAtYnNpemUtPmhlaWdodDsKICAgICAgICAgaWYgKCBic2l6ZS0+eF9wcGVtIDwgMCApCi0gICAgICAgICAgYnNpemUtPnhfcHBlbSA9IChGVF9TaG9ydCktYnNpemUtPnhfcHBlbTsKKyAgICAgICAgICBic2l6ZS0+eF9wcGVtID0gLWJzaXplLT54X3BwZW07CiAgICAgICAgIGlmICggYnNpemUtPnlfcHBlbSA8IDAgKQogICAgICAgICAgIGJzaXplLT55X3BwZW0gPSAtYnNpemUtPnlfcHBlbTsKKworICAgICAgICAvKiBjaGVjayB3aGV0aGVyIG5lZ2F0aW9uIGFjdHVhbGx5IGhhcyB3b3JrZWQgKi8KKyAgICAgICAgaWYgKCBic2l6ZS0+aGVpZ2h0IDwgMCB8fCBic2l6ZS0+eF9wcGVtIDwgMCB8fCBic2l6ZS0+eV9wcGVtIDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTAoKCAiRlRfT3Blbl9GYWNlOiIKKyAgICAgICAgICAgICAgICAgICAgICAiIEludmFsaWQgYml0bWFwIGRpbWVuc2lvbnMgZm9yIHN0cm9rZSAlZCwiCisgICAgICAgICAgICAgICAgICAgICAgIiBub3cgZGlzYWJsZWRcbiIsIGkgKSk7CisgICAgICAgICAgYnNpemUtPndpZHRoICA9IDA7CisgICAgICAgICAgYnNpemUtPmhlaWdodCA9IDA7CisgICAgICAgICAgYnNpemUtPnNpemUgICA9IDA7CisgICAgICAgICAgYnNpemUtPnhfcHBlbSA9IDA7CisgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IDA7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKQEAgLTI1NzIsNiArMjYzMSw5IEBACiAgICAgdyA9IEZUX1BJWF9ST1VORCggdyApOwogICAgIGggPSBGVF9QSVhfUk9VTkQoIGggKTsKIAorICAgIGlmICggIXcgfHwgIWggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1BpeGVsX1NpemUgKTsKKwogICAgIGZvciAoIGkgPSAwOyBpIDwgZmFjZS0+bnVtX2ZpeGVkX3NpemVzOyBpKysgKQogICAgIHsKICAgICAgIEZUX0JpdG1hcF9TaXplKiAgYnNpemUgPSBmYWNlLT5hdmFpbGFibGVfc2l6ZXMgKyBpOwpAQCAtMjU5MSw2ICsyNjUzLDggQEAKICAgICAgIH0KICAgICB9CiAKKyAgICBGVF9UUkFDRTMoKCAiRlRfTWF0Y2hfU2l6ZTogbm8gbWF0Y2hpbmcgYml0bWFwIHN0cmlrZVxuIiApKTsKKwogICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9QaXhlbF9TaXplICk7CiAgIH0KIApAQCAtMzA2OCwxOCArMzEzMiwzNyBAQAogCiAgICAgICAgICAgaWYgKCBrZXJuX21vZGUgIT0gRlRfS0VSTklOR19VTkZJVFRFRCApCiAgICAgICAgICAgeworICAgICAgICAgICAgRlRfUG9zICBvcmlnX3ggPSBha2VybmluZy0+eDsKKyAgICAgICAgICAgIEZUX1BvcyAgb3JpZ195ID0gYWtlcm5pbmctPnk7CisKKwogICAgICAgICAgICAgLyogd2Ugc2NhbGUgZG93biBrZXJuaW5nIHZhbHVlcyBmb3Igc21hbGwgcHBlbSB2YWx1ZXMgKi8KICAgICAgICAgICAgIC8qIHRvIGF2b2lkIHRoYXQgcm91bmRpbmcgbWFrZXMgdGhlbSB0b28gYmlnLiAgICAgICAgICovCiAgICAgICAgICAgICAvKiBgMjUnIGhhcyBiZWVuIGRldGVybWluZWQgaGV1cmlzdGljYWxseS4gICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCBmYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbSA8IDI1ICkKLSAgICAgICAgICAgICAgYWtlcm5pbmctPnggPSBGVF9NdWxEaXYoIGFrZXJuaW5nLT54LAorICAgICAgICAgICAgICBha2VybmluZy0+eCA9IEZUX011bERpdiggb3JpZ194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW0sIDI1ICk7CiAgICAgICAgICAgICBpZiAoIGZhY2UtPnNpemUtPm1ldHJpY3MueV9wcGVtIDwgMjUgKQotICAgICAgICAgICAgICBha2VybmluZy0+eSA9IEZUX011bERpdiggYWtlcm5pbmctPnksCisgICAgICAgICAgICAgIGFrZXJuaW5nLT55ID0gRlRfTXVsRGl2KCBvcmlnX3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnlfcHBlbSwgMjUgKTsKIAogICAgICAgICAgICAgYWtlcm5pbmctPnggPSBGVF9QSVhfUk9VTkQoIGFrZXJuaW5nLT54ICk7CiAgICAgICAgICAgICBha2VybmluZy0+eSA9IEZUX1BJWF9ST1VORCggYWtlcm5pbmctPnkgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX1BvcyAgb3JpZ194X3JvdW5kZWQgPSBGVF9QSVhfUk9VTkQoIG9yaWdfeCApOworICAgICAgICAgICAgICBGVF9Qb3MgIG9yaWdfeV9yb3VuZGVkID0gRlRfUElYX1JPVU5EKCBvcmlnX3kgKTsKKworCisgICAgICAgICAgICAgIGlmICggYWtlcm5pbmctPnggIT0gb3JpZ194X3JvdW5kZWQgfHwKKyAgICAgICAgICAgICAgICAgICBha2VybmluZy0+eSAhPSBvcmlnX3lfcm91bmRlZCApCisgICAgICAgICAgICAgICAgRlRfVFJBQ0U1KCggIkZUX0dldF9LZXJuaW5nOiBob3Jpem9udGFsIGtlcm5pbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoJWQsICVkKSBzY2FsZWQgZG93biB0byAoJWQsICVkKSBwaXhlbHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ194X3JvdW5kZWQgLyA2NCwgb3JpZ195X3JvdW5kZWQgLyA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBha2VybmluZy0+eCAvIDY0LCBha2VybmluZy0+eSAvIDY0ICkpOworICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC0zMzUwLDggKzM0MzMsMTIgQEAKICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgY2hhcmNvZGUiICkpOwogICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCBjaGFyY29kZSApKTsKICAgICAgIH0KKwogICAgICAgcmVzdWx0ID0gY21hcC0+Y2xhenotPmNoYXJfaW5kZXgoIGNtYXAsIChGVF9VSW50MzIpY2hhcmNvZGUgKTsKKyAgICAgIGlmICggcmVzdWx0ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgICByZXN1bHQgPSAwOwogICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIApAQCAtMzM3MCw3ICszNDU3LDcgQEAKICAgICBpZiAoIGZhY2UgJiYgZmFjZS0+Y2hhcm1hcCAmJiBmYWNlLT5udW1fZ2x5cGhzICkKICAgICB7CiAgICAgICBnaW5kZXggPSBGVF9HZXRfQ2hhcl9JbmRleCggZmFjZSwgMCApOwotICAgICAgaWYgKCBnaW5kZXggPT0gMCB8fCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCisgICAgICBpZiAoIGdpbmRleCA9PSAwICkKICAgICAgICAgcmVzdWx0ID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgMCwgJmdpbmRleCApOwogICAgIH0KIApAQCAtNDExNiwzOSArNDIwMyw1MSBAQAogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9iaXRtYXAKIAotICAgIC8qIHdlIGNvbnZlcnQgdG8gYSBzaW5nbGUgYml0bWFwIGZvcm1hdCBmb3IgY29tcHV0aW5nIHRoZSBjaGVja3N1bSAqLwotICAgIGlmICggIWVycm9yICkKKyAgICAvKgorICAgICAqIENvbXB1dGluZyB0aGUgTUQ1IGNoZWNrc3VtIGlzIGV4cGVuc2l2ZSwgdW5uZWNlc3NhcmlseSBkaXN0b3J0aW5nIGEKKyAgICAgKiBwb3NzaWJsZSBwcm9maWxpbmcgb2YgRnJlZVR5cGUgaWYgY29tcGlsZWQgd2l0aCB0cmFjaW5nIHN1cHBvcnQuICBGb3IKKyAgICAgKiB0aGlzIHJlYXNvbiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvZGUgb25seSBpZiBleHBsaWNpdGx5CisgICAgICogcmVxdWVzdGVkLgorICAgICAqLworCisgICAgLyogd2UgdXNlIEZUX1RSQUNFMyBpbiB0aGlzIGJsb2NrICovCisgICAgaWYgKCBmdF90cmFjZV9sZXZlbHNbdHJhY2VfYml0bWFwXSA+PSAzICkKICAgICB7Ci0gICAgICBGVF9CaXRtYXAgIGJpdG1hcDsKLSAgICAgIEZUX0Vycm9yICAgZXJyOwotCi0KLSAgICAgIEZUX0JpdG1hcF9Jbml0KCAmYml0bWFwICk7Ci0KLSAgICAgIC8qIHRoaXMgYWxzbyBjb252ZXJ0cyB0aGUgYml0bWFwIGZsb3cgdG8gYGRvd24nIChpLmUuLCBwaXRjaCA+IDApICovCi0gICAgICBlcnIgPSBGVF9CaXRtYXBfQ29udmVydCggbGlicmFyeSwgJnNsb3QtPmJpdG1hcCwgJmJpdG1hcCwgMSApOwotICAgICAgaWYgKCAhZXJyICkKKyAgICAgIC8qIHdlIGNvbnZlcnQgdG8gYSBzaW5nbGUgYml0bWFwIGZvcm1hdCBmb3IgY29tcHV0aW5nIHRoZSBjaGVja3N1bSAqLworICAgICAgaWYgKCAhZXJyb3IgKQogICAgICAgewotICAgICAgICBNRDVfQ1RYICAgICAgICBjdHg7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIG1kNVsxNl07Ci0gICAgICAgIGludCAgICAgICAgICAgIGk7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgIHJvd3MgID0gYml0bWFwLnJvd3M7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgIHBpdGNoID0gKHVuc2lnbmVkIGludCliaXRtYXAucGl0Y2g7CisgICAgICAgIEZUX0JpdG1hcCAgYml0bWFwOworICAgICAgICBGVF9FcnJvciAgIGVycjsKIAogCi0gICAgICAgIE1ENV9Jbml0KCAmY3R4ICk7Ci0gICAgICAgIE1ENV9VcGRhdGUoICZjdHgsIGJpdG1hcC5idWZmZXIsIHJvd3MgKiBwaXRjaCApOwotICAgICAgICBNRDVfRmluYWwoIG1kNSwgJmN0eCApOworICAgICAgICBGVF9CaXRtYXBfSW5pdCggJmJpdG1hcCApOwogCi0gICAgICAgIEZUX1RSQUNFMygoICJNRDUgY2hlY2tzdW0gZm9yICVkeCVkIGJpdG1hcDpcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgIiwKLSAgICAgICAgICAgICAgICAgICAgcm93cywgcGl0Y2ggKSk7Ci0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMTY7IGkrKyApCi0gICAgICAgICAgRlRfVFJBQ0UzKCggIiUwMlgiLCBtZDVbaV0gKSk7Ci0gICAgICAgIEZUX1RSQUNFMygoICJcbiIgKSk7CisgICAgICAgIC8qIHRoaXMgYWxzbyBjb252ZXJ0cyB0aGUgYml0bWFwIGZsb3cgdG8gYGRvd24nIChpLmUuLCBwaXRjaCA+IDApICovCisgICAgICAgIGVyciA9IEZUX0JpdG1hcF9Db252ZXJ0KCBsaWJyYXJ5LCAmc2xvdC0+Yml0bWFwLCAmYml0bWFwLCAxICk7CisgICAgICAgIGlmICggIWVyciApCisgICAgICAgIHsKKyAgICAgICAgICBNRDVfQ1RYICAgICAgICBjdHg7CisgICAgICAgICAgdW5zaWduZWQgY2hhciAgbWQ1WzE2XTsKKyAgICAgICAgICBpbnQgICAgICAgICAgICBpOworICAgICAgICAgIHVuc2lnbmVkIGludCAgIHJvd3MgID0gYml0bWFwLnJvd3M7CisgICAgICAgICAgdW5zaWduZWQgaW50ICAgcGl0Y2ggPSAodW5zaWduZWQgaW50KWJpdG1hcC5waXRjaDsKKworCisgICAgICAgICAgTUQ1X0luaXQoICZjdHggKTsKKyAgICAgICAgICBpZiAoIGJpdG1hcC5idWZmZXIgKQorICAgICAgICAgICAgTUQ1X1VwZGF0ZSggJmN0eCwgYml0bWFwLmJ1ZmZlciwgcm93cyAqIHBpdGNoICk7CisgICAgICAgICAgTUQ1X0ZpbmFsKCBtZDUsICZjdHggKTsKKworICAgICAgICAgIEZUX1RSQUNFMygoICJNRDUgY2hlY2tzdW0gZm9yICVkeCVkIGJpdG1hcDpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAiLAorICAgICAgICAgICAgICAgICAgICAgIHJvd3MsIHBpdGNoICkpOworICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICBGVF9UUkFDRTMoKCAiJTAyWCIsIG1kNVtpXSApKTsKKyAgICAgICAgICBGVF9UUkFDRTMoKCAiXG4iICkpOworICAgICAgICB9CisKKyAgICAgICAgRlRfQml0bWFwX0RvbmUoIGxpYnJhcnksICZiaXRtYXAgKTsKICAgICAgIH0KLQotICAgICAgRlRfQml0bWFwX0RvbmUoIGxpYnJhcnksICZiaXRtYXAgKTsKICAgICB9CiAKICN1bmRlZiAgRlRfQ09NUE9ORU5UCkBAIC00MjQyLDcgKzQzNDEsNyBAQAogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKLSAgICBGVF9Nb2R1bGUgIG1vZHVsZTsKKyAgICBGVF9Nb2R1bGUgIG1vZHVsZSA9IE5VTEw7CiAgICAgRlRfVUludCAgICBubjsKIAogCkBAIC00NDgzLDcgKzQ1ODIsOCBAQAogICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgbW9kdWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wZXJ0eV9uYW1lLAogICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgICBzZXQgKQorICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgc2V0LAorICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgdmFsdWVfaXNfc3RyaW5nICkKICAgewogICAgIEZUX01vZHVsZSogICAgICAgICAgIGN1cjsKICAgICBGVF9Nb2R1bGUqICAgICAgICAgICBsaW1pdDsKQEAgLTQ1NTMsOCArNDY1MywxMyBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKICAgICB9CiAKLSAgICByZXR1cm4gc2V0ID8gc2VydmljZS0+c2V0X3Byb3BlcnR5KCBjdXJbMF0sIHByb3BlcnR5X25hbWUsIHZhbHVlICkKLSAgICAgICAgICAgICAgIDogc2VydmljZS0+Z2V0X3Byb3BlcnR5KCBjdXJbMF0sIHByb3BlcnR5X25hbWUsIHZhbHVlICk7CisgICAgcmV0dXJuIHNldCA/IHNlcnZpY2UtPnNldF9wcm9wZXJ0eSggY3VyWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgICAgICAgICAgIDogc2VydmljZS0+Z2V0X3Byb3BlcnR5KCBjdXJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSApOwogICB9CiAKIApAQCAtNDU3MCw3ICs0Njc1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSApOwogICB9CiAKIApAQCAtNDU4NiwxMCArNDY5MiwzMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFICk7CiAgIH0KIAogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisKKyAgLyogdGhpcyB2YXJpYW50IGlzIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSBGUkVFVFlQRV9QUk9QRVJUSUVTICovCisgIC8qIGVudmlyb25tZW50IHZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIGZ0X3Byb3BlcnR5X3N0cmluZ19zZXQoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICAgICAgICB2YWx1ZSApCisgIHsKKyAgICByZXR1cm4gZnRfcHJvcGVydHlfZG8oIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSApOworICB9CisKKyNlbmRpZgorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b3V0bG4uYyBiL3NyYy9iYXNlL2Z0b3V0bG4uYwppbmRleCBkODIxYzQ5Li5mYzI4MjI1IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG91dGxuLmMKKysrIGIvc3JjL2Jhc2UvZnRvdXRsbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIG91dGxpbmUgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC00Miw3ICs0Miw3IEBACiAKIAogICBzdGF0aWMKLSAgY29uc3QgRlRfT3V0bGluZSAgbnVsbF9vdXRsaW5lID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGNvbnN0IEZUX091dGxpbmUgIG51bGxfb3V0bGluZSA9IHsgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgMCB9OwogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KQEAgLTUyLDggKzUyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX091dGxpbmVfRnVuY3MqICBmdW5jX2ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICB1c2VyICkKICAgewotI3VuZGVmIFNDQUxFRAotI2RlZmluZSBTQ0FMRUQoIHggKSAgKCAoICh4KSA8PCBzaGlmdCApIC0gZGVsdGEgKQorI3VuZGVmICBTQ0FMRUQKKyNkZWZpbmUgU0NBTEVEKCB4ICkgICggKCAoeCkgPCAwID8gLSggLSh4KSA8PCBzaGlmdCApICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICggICh4KSA8PCBzaGlmdCApICkgLSBkZWx0YSApCiAKICAgICBGVF9WZWN0b3IgICB2X2xhc3Q7CiAgICAgRlRfVmVjdG9yICAgdl9jb250cm9sOwpAQCAtNDE0LDExICs0MTUsMTQgQEAKICAgICBpZiAoIHNvdXJjZSA9PSB0YXJnZXQgKQogICAgICAgcmV0dXJuIEZUX0Vycl9PazsKIAotICAgIEZUX0FSUkFZX0NPUFkoIHRhcmdldC0+cG9pbnRzLCBzb3VyY2UtPnBvaW50cywgc291cmNlLT5uX3BvaW50cyApOworICAgIGlmICggc291cmNlLT5uX3BvaW50cyApCisgICAgeworICAgICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT5wb2ludHMsIHNvdXJjZS0+cG9pbnRzLCBzb3VyY2UtPm5fcG9pbnRzICk7CisgICAgICBGVF9BUlJBWV9DT1BZKCB0YXJnZXQtPnRhZ3MsICAgc291cmNlLT50YWdzLCAgIHNvdXJjZS0+bl9wb2ludHMgKTsKKyAgICB9CiAKLSAgICBGVF9BUlJBWV9DT1BZKCB0YXJnZXQtPnRhZ3MsIHNvdXJjZS0+dGFncywgc291cmNlLT5uX3BvaW50cyApOwotCi0gICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT5jb250b3Vycywgc291cmNlLT5jb250b3Vycywgc291cmNlLT5uX2NvbnRvdXJzICk7CisgICAgaWYgKCBzb3VyY2UtPm5fY29udG91cnMgKQorICAgICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT5jb250b3Vycywgc291cmNlLT5jb250b3Vycywgc291cmNlLT5uX2NvbnRvdXJzICk7CiAKICAgICAvKiBjb3B5IGFsbCBmbGFncywgZXhjZXB0IHRoZSBgRlRfT1VUTElORV9PV05FUicgb25lICovCiAgICAgaXNfb3duZXIgICAgICA9IHRhcmdldC0+ZmxhZ3MgJiBGVF9PVVRMSU5FX09XTkVSOwpAQCAtOTA3LDggKzkxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHlzdHJlbmd0aCApCiAgIHsKICAgICBGVF9WZWN0b3IqICBwb2ludHM7Ci0gICAgRlRfVmVjdG9yICAgdl9wcmV2LCB2X2ZpcnN0LCB2X25leHQsIHZfY3VyOwotICAgIEZUX0ludCAgICAgIGMsIG4sIGZpcnN0OworICAgIEZUX0ludCAgICAgIGMsIGZpcnN0LCBsYXN0OwogICAgIEZUX0ludCAgICAgIG9yaWVudGF0aW9uOwogCiAKQEAgLTkzNCw4NyArOTM3LDk4IEBACiAgICAgZmlyc3QgPSAwOwogICAgIGZvciAoIGMgPSAwOyBjIDwgb3V0bGluZS0+bl9jb250b3VyczsgYysrICkKICAgICB7Ci0gICAgICBGVF9WZWN0b3IgIGluLCBvdXQsIHNoaWZ0OwotICAgICAgRlRfRml4ZWQgICBsX2luLCBsX291dCwgbCwgcSwgZDsKLSAgICAgIGludCAgICAgICAgbGFzdCA9IG91dGxpbmUtPmNvbnRvdXJzW2NdOworICAgICAgRlRfVmVjdG9yICBpbiwgb3V0LCBhbmNob3IsIHNoaWZ0OworICAgICAgRlRfRml4ZWQgICBsX2luLCBsX291dCwgbF9hbmNob3IgPSAwLCBsLCBxLCBkOworICAgICAgRlRfSW50ICAgICBpLCBqLCBrOwogCiAKLSAgICAgIHZfZmlyc3QgPSBwb2ludHNbZmlyc3RdOwotICAgICAgdl9wcmV2ICA9IHBvaW50c1tsYXN0XTsKLSAgICAgIHZfY3VyICAgPSB2X2ZpcnN0OworICAgICAgbF9pbiA9IDA7CisgICAgICBsYXN0ID0gb3V0bGluZS0+Y29udG91cnNbY107CiAKLSAgICAgIC8qIGNvbXB1dGUgaW5jb21pbmcgbm9ybWFsaXplZCB2ZWN0b3IgKi8KLSAgICAgIGluLnggPSB2X2N1ci54IC0gdl9wcmV2Lng7Ci0gICAgICBpbi55ID0gdl9jdXIueSAtIHZfcHJldi55OwotICAgICAgbF9pbiA9IEZUX1ZlY3Rvcl9MZW5ndGgoICZpbiApOwotICAgICAgaWYgKCBsX2luICkKKyAgICAgIC8qIHBhY2lmeSBjb21waWxlciAqLworICAgICAgaW4ueCA9IGluLnkgPSBhbmNob3IueCA9IGFuY2hvci55ID0gMDsKKworICAgICAgLyogQ291bnRlciBqIGN5Y2xlcyB0aG91Z2ggdGhlIHBvaW50czsgY291bnRlciBpIGFkdmFuY2VzIG9ubHkgICovCisgICAgICAvKiB3aGVuIHBvaW50cyBhcmUgbW92ZWQ7IGFuY2hvciBrIG1hcmtzIHRoZSBmaXJzdCBtb3ZlZCBwb2ludC4gKi8KKyAgICAgIGZvciAoIGkgPSBsYXN0LCBqID0gZmlyc3QsIGsgPSAtMTsKKyAgICAgICAgICAgIGogIT0gaSAmJiBpICE9IGs7CisgICAgICAgICAgICBqID0gaiA8IGxhc3QgPyBqICsgMSA6IGZpcnN0ICkKICAgICAgIHsKLSAgICAgICAgaW4ueCA9IEZUX0RpdkZpeCggaW4ueCwgbF9pbiApOwotICAgICAgICBpbi55ID0gRlRfRGl2Rml4KCBpbi55LCBsX2luICk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoIG4gPSBmaXJzdDsgbiA8PSBsYXN0OyBuKysgKQotICAgICAgewotICAgICAgICBpZiAoIG4gPCBsYXN0ICkKLSAgICAgICAgICB2X25leHQgPSBwb2ludHNbbiArIDFdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdl9uZXh0ID0gdl9maXJzdDsKLQotICAgICAgICAvKiBjb21wdXRlIG91dGdvaW5nIG5vcm1hbGl6ZWQgdmVjdG9yICovCi0gICAgICAgIG91dC54ID0gdl9uZXh0LnggLSB2X2N1ci54OwotICAgICAgICBvdXQueSA9IHZfbmV4dC55IC0gdl9jdXIueTsKLSAgICAgICAgbF9vdXQgPSBGVF9WZWN0b3JfTGVuZ3RoKCAmb3V0ICk7Ci0gICAgICAgIGlmICggbF9vdXQgKQorICAgICAgICBpZiAoIGogIT0gayApCiAgICAgICAgIHsKLSAgICAgICAgICBvdXQueCA9IEZUX0RpdkZpeCggb3V0LngsIGxfb3V0ICk7Ci0gICAgICAgICAgb3V0LnkgPSBGVF9EaXZGaXgoIG91dC55LCBsX291dCApOwotICAgICAgICB9CisgICAgICAgICAgb3V0LnggPSBwb2ludHNbal0ueCAtIHBvaW50c1tpXS54OworICAgICAgICAgIG91dC55ID0gcG9pbnRzW2pdLnkgLSBwb2ludHNbaV0ueTsKKyAgICAgICAgICBsX291dCA9IChGVF9GaXhlZClGVF9WZWN0b3JfTm9ybUxlbiggJm91dCApOwogCi0gICAgICAgIGQgPSBGVF9NdWxGaXgoIGluLngsIG91dC54ICkgKyBGVF9NdWxGaXgoIGluLnksIG91dC55ICk7Ci0KLSAgICAgICAgLyogc2hpZnQgb25seSBpZiB0dXJuIGlzIGxlc3MgdGhhbiB+MTYwIGRlZ3JlZXMgKi8KLSAgICAgICAgaWYgKCBkID4gLTB4RjAwMEwgKQotICAgICAgICB7Ci0gICAgICAgICAgZCA9IGQgKyAweDEwMDAwTDsKLQotICAgICAgICAgIC8qIHNoaWZ0IGNvbXBvbmVudHMgYXJlIGFsaWduZWQgYWxvbmcgbGF0ZXJhbCBiaXNlY3RvciAqLwotICAgICAgICAgIC8qIGFuZCBkaXJlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIG91dGxpbmUgb3JpZW50YXRpb24uICAqLwotICAgICAgICAgIHNoaWZ0LnggPSBpbi55ICsgb3V0Lnk7Ci0gICAgICAgICAgc2hpZnQueSA9IGluLnggKyBvdXQueDsKLQotICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQotICAgICAgICAgICAgc2hpZnQueCA9IC1zaGlmdC54OwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNoaWZ0LnkgPSAtc2hpZnQueTsKLQotICAgICAgICAgIC8qIHJlc3RyaWN0IHNoaWZ0IG1hZ25pdHVkZSB0byBiZXR0ZXIgaGFuZGxlIGNvbGxhcHNpbmcgc2VnbWVudHMgKi8KLSAgICAgICAgICBxID0gRlRfTXVsRml4KCBvdXQueCwgaW4ueSApIC0gRlRfTXVsRml4KCBvdXQueSwgaW4ueCApOwotICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQotICAgICAgICAgICAgcSA9IC1xOwotCi0gICAgICAgICAgbCA9IEZUX01JTiggbF9pbiwgbF9vdXQgKTsKLQotICAgICAgICAgIC8qIG5vbi1zdHJpY3QgaW5lcXVhbGl0aWVzIGF2b2lkIGRpdmlkZS1ieS16ZXJvIHdoZW4gcSA9PSBsID09IDAgKi8KLSAgICAgICAgICBpZiAoIEZUX011bEZpeCggeHN0cmVuZ3RoLCBxICkgPD0gRlRfTXVsRml4KCBsLCBkICkgKQotICAgICAgICAgICAgc2hpZnQueCA9IEZUX011bERpdiggc2hpZnQueCwgeHN0cmVuZ3RoLCBkICk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hpZnQueCA9IEZUX011bERpdiggc2hpZnQueCwgbCwgcSApOwotCi0KLSAgICAgICAgICBpZiAoIEZUX011bEZpeCggeXN0cmVuZ3RoLCBxICkgPD0gRlRfTXVsRml4KCBsLCBkICkgKQotICAgICAgICAgICAgc2hpZnQueSA9IEZUX011bERpdiggc2hpZnQueSwgeXN0cmVuZ3RoLCBkICk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hpZnQueSA9IEZUX011bERpdiggc2hpZnQueSwgbCwgcSApOworICAgICAgICAgIGlmICggbF9vdXQgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgc2hpZnQueCA9IHNoaWZ0LnkgPSAwOworICAgICAgICB7CisgICAgICAgICAgb3V0ICAgPSBhbmNob3I7CisgICAgICAgICAgbF9vdXQgPSBsX2FuY2hvcjsKKyAgICAgICAgfQogCi0gICAgICAgIG91dGxpbmUtPnBvaW50c1tuXS54ID0gdl9jdXIueCArIHhzdHJlbmd0aCArIHNoaWZ0Lng7Ci0gICAgICAgIG91dGxpbmUtPnBvaW50c1tuXS55ID0gdl9jdXIueSArIHlzdHJlbmd0aCArIHNoaWZ0Lnk7CisgICAgICAgIGlmICggbF9pbiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggayA8IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGsgICAgICAgID0gaTsKKyAgICAgICAgICAgIGFuY2hvciAgID0gaW47CisgICAgICAgICAgICBsX2FuY2hvciA9IGxfaW47CisgICAgICAgICAgfQogCi0gICAgICAgIGluICAgID0gb3V0OwotICAgICAgICBsX2luICA9IGxfb3V0OwotICAgICAgICB2X2N1ciA9IHZfbmV4dDsKKyAgICAgICAgICBkID0gRlRfTXVsRml4KCBpbi54LCBvdXQueCApICsgRlRfTXVsRml4KCBpbi55LCBvdXQueSApOworCisgICAgICAgICAgLyogc2hpZnQgb25seSBpZiB0dXJuIGlzIGxlc3MgdGhhbiB+MTYwIGRlZ3JlZXMgKi8KKyAgICAgICAgICBpZiAoIGQgPiAtMHhGMDAwTCApCisgICAgICAgICAgeworICAgICAgICAgICAgZCA9IGQgKyAweDEwMDAwTDsKKworICAgICAgICAgICAgLyogc2hpZnQgY29tcG9uZW50cyBhbG9uZyBsYXRlcmFsIGJpc2VjdG9yIGluIHByb3BlciBvcmllbnRhdGlvbiAqLworICAgICAgICAgICAgc2hpZnQueCA9IGluLnkgKyBvdXQueTsKKyAgICAgICAgICAgIHNoaWZ0LnkgPSBpbi54ICsgb3V0Lng7CisKKyAgICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQorICAgICAgICAgICAgICBzaGlmdC54ID0gLXNoaWZ0Lng7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNoaWZ0LnkgPSAtc2hpZnQueTsKKworICAgICAgICAgICAgLyogcmVzdHJpY3Qgc2hpZnQgbWFnbml0dWRlIHRvIGJldHRlciBoYW5kbGUgY29sbGFwc2luZyBzZWdtZW50cyAqLworICAgICAgICAgICAgcSA9IEZUX011bEZpeCggb3V0LngsIGluLnkgKSAtIEZUX011bEZpeCggb3V0LnksIGluLnggKTsKKyAgICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQorICAgICAgICAgICAgICBxID0gLXE7CisKKyAgICAgICAgICAgIGwgPSBGVF9NSU4oIGxfaW4sIGxfb3V0ICk7CisKKyAgICAgICAgICAgIC8qIG5vbi1zdHJpY3QgaW5lcXVhbGl0aWVzIGF2b2lkIGRpdmlkZS1ieS16ZXJvIHdoZW4gcSA9PSBsID09IDAgKi8KKyAgICAgICAgICAgIGlmICggRlRfTXVsRml4KCB4c3RyZW5ndGgsIHEgKSA8PSBGVF9NdWxGaXgoIGwsIGQgKSApCisgICAgICAgICAgICAgIHNoaWZ0LnggPSBGVF9NdWxEaXYoIHNoaWZ0LngsIHhzdHJlbmd0aCwgZCApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzaGlmdC54ID0gRlRfTXVsRGl2KCBzaGlmdC54LCBsLCBxICk7CisKKworICAgICAgICAgICAgaWYgKCBGVF9NdWxGaXgoIHlzdHJlbmd0aCwgcSApIDw9IEZUX011bEZpeCggbCwgZCApICkKKyAgICAgICAgICAgICAgc2hpZnQueSA9IEZUX011bERpdiggc2hpZnQueSwgeXN0cmVuZ3RoLCBkICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNoaWZ0LnkgPSBGVF9NdWxEaXYoIHNoaWZ0LnksIGwsIHEgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hpZnQueCA9IHNoaWZ0LnkgPSAwOworCisgICAgICAgICAgZm9yICggOworICAgICAgICAgICAgICAgIGkgIT0gajsKKyAgICAgICAgICAgICAgICBpID0gaSA8IGxhc3QgPyBpICsgMSA6IGZpcnN0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwb2ludHNbaV0ueCArPSB4c3RyZW5ndGggKyBzaGlmdC54OworICAgICAgICAgICAgcG9pbnRzW2ldLnkgKz0geXN0cmVuZ3RoICsgc2hpZnQueTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGkgPSBqOworCisgICAgICAgIGluICAgPSBvdXQ7CisgICAgICAgIGxfaW4gPSBsX291dDsKICAgICAgIH0KIAogICAgICAgZmlyc3QgPSBsYXN0ICsgMTsKQEAgLTEwNjYsMTMgKzEwODAsMTYgQEAKICAgICAgIEZUX0ludCAgbGFzdCA9IG91dGxpbmUtPmNvbnRvdXJzW2NdOwogCiAKLSAgICAgIHZfcHJldiA9IHBvaW50c1tsYXN0XTsKKyAgICAgIHZfcHJldi54ID0gcG9pbnRzW2xhc3RdLnggPj4geHNoaWZ0OworICAgICAgdl9wcmV2LnkgPSBwb2ludHNbbGFzdF0ueSA+PiB5c2hpZnQ7CiAKICAgICAgIGZvciAoIG4gPSBmaXJzdDsgbiA8PSBsYXN0OyBuKysgKQogICAgICAgewotICAgICAgICB2X2N1ciA9IHBvaW50c1tuXTsKLSAgICAgICAgYXJlYSArPSAoICggdl9jdXIueSAtIHZfcHJldi55ICkgPj4geXNoaWZ0ICkgKgotICAgICAgICAgICAgICAgICggKCB2X2N1ci54ICsgdl9wcmV2LnggKSA+PiB4c2hpZnQgKTsKKyAgICAgICAgdl9jdXIueCA9IHBvaW50c1tuXS54ID4+IHhzaGlmdDsKKyAgICAgICAgdl9jdXIueSA9IHBvaW50c1tuXS55ID4+IHlzaGlmdDsKKworICAgICAgICBhcmVhICs9ICggdl9jdXIueSAtIHZfcHJldi55ICkgKiAoIHZfY3VyLnggKyB2X3ByZXYueCApOworCiAgICAgICAgIHZfcHJldiA9IHZfY3VyOwogICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHBhdGVudC5jIGIvc3JjL2Jhc2UvZnRwYXRlbnQuYwppbmRleCBiZjJiMDg1Li40ODYxYmUxIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHBhdGVudC5jCisrKyBiL3NyYy9iYXNlL2Z0cGF0ZW50LmMKQEAgLTMsOSArMyw5IEBACiAvKiAgZnRwYXRlbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY2hlY2tpbmcgcGF0ZW50ZWQgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zICAgICovCi0vKiAgICAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgKGJvZHkpLiAgT2Jzb2xldGUsIHJldGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI1LDIzOCArMjUsMTQgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfVFJVRVRZUEVfR0xZRl9ICiAKIAotICBzdGF0aWMgRlRfQm9vbAotICBfdHRfY2hlY2tfcGF0ZW50c19pbl9yYW5nZSggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHNpemUgKQotICB7Ci0gICAgRlRfQm9vbCAgIHJlc3VsdCA9IEZBTFNFOwotICAgIEZUX0Vycm9yICBlcnJvcjsKLSAgICBGVF9CeXRlcyAgcCwgZW5kOwotCi0KLSAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCBzaXplICkgKQotICAgICAgcmV0dXJuIDA7Ci0KLSAgICBwICAgPSBzdHJlYW0tPmN1cnNvcjsKLSAgICBlbmQgPSBwICsgc2l6ZTsKLQotICAgIHdoaWxlICggcCA8IGVuZCApCi0gICAgewotICAgICAgc3dpdGNoIChwWzBdKQotICAgICAgewotICAgICAgY2FzZSAweDA2OiAgLyogU1B2VEwgLy8gKi8KLSAgICAgIGNhc2UgMHgwNzogIC8qIFNQdlRMICsgICovCi0gICAgICBjYXNlIDB4MDg6ICAvKiBTRnZUTCAvLyAqLwotICAgICAgY2FzZSAweDA5OiAgLyogU0Z2VEwgKyAgKi8KLSAgICAgIGNhc2UgMHgwQTogIC8qIFNQdkZTICAgICovCi0gICAgICBjYXNlIDB4MEI6ICAvKiBTRnZGUyAgICAqLwotICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIGNhc2UgMHg0MDoKLSAgICAgICAgaWYgKCBwICsgMSA+PSBlbmQgKQotICAgICAgICAgIGdvdG8gRXhpdDsKLQotICAgICAgICBwICs9IHBbMV0gKyAyOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAweDQxOgotICAgICAgICBpZiAoIHAgKyAxID49IGVuZCApCi0gICAgICAgICAgZ290byBFeGl0OwotCi0gICAgICAgIHAgKz0gcFsxXSAqIDIgKyAyOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAweDcxOiAgLyogREVMVEFQMiAqLwotICAgICAgY2FzZSAweDcyOiAgLyogREVMVEFQMyAqLwotICAgICAgY2FzZSAweDczOiAgLyogREVMVEFDMCAqLwotICAgICAgY2FzZSAweDc0OiAgLyogREVMVEFDMSAqLwotICAgICAgY2FzZSAweDc1OiAgLyogREVMVEFDMiAqLwotICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIGNhc2UgMHhCMDoKLSAgICAgIGNhc2UgMHhCMToKLSAgICAgIGNhc2UgMHhCMjoKLSAgICAgIGNhc2UgMHhCMzoKLSAgICAgIGNhc2UgMHhCNDoKLSAgICAgIGNhc2UgMHhCNToKLSAgICAgIGNhc2UgMHhCNjoKLSAgICAgIGNhc2UgMHhCNzoKLSAgICAgICAgcCArPSAoIHBbMF0gLSAweEIwICkgKyAyOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAweEI4OgotICAgICAgY2FzZSAweEI5OgotICAgICAgY2FzZSAweEJBOgotICAgICAgY2FzZSAweEJCOgotICAgICAgY2FzZSAweEJDOgotICAgICAgY2FzZSAweEJEOgotICAgICAgY2FzZSAweEJFOgotICAgICAgY2FzZSAweEJGOgotICAgICAgICBwICs9ICggcFswXSAtIDB4QjggKSAqIDIgKyAzOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcCArPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgRXhpdDoKLSAgICBGVF9VTlVTRUQoIGVycm9yICk7Ci0gICAgRlRfRlJBTUVfRVhJVCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotCi0gIHN0YXRpYyBGVF9Cb29sCi0gIF90dF9jaGVja19wYXRlbnRzX2luX3RhYmxlKCBGVF9GYWNlICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB0YWcgKQotICB7Ci0gICAgRlRfU3RyZWFtICAgICAgICAgICAgICBzdHJlYW0gPSBmYWNlLT5zdHJlYW07Ci0gICAgRlRfRXJyb3IgICAgICAgICAgICAgICBlcnJvciAgPSBGVF9FcnJfT2s7Ci0gICAgRlRfU2VydmljZV9TRk5UX1RhYmxlICBzZXJ2aWNlOwotICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0KLQotICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBTRk5UX1RBQkxFICk7Ci0KLSAgICBpZiAoIHNlcnZpY2UgKQotICAgIHsKLSAgICAgIEZUX1VJbnQgICBpID0gMDsKLSAgICAgIEZUX1VMb25nICB0YWdfaSA9IDAsIG9mZnNldF9pID0gMCwgbGVuZ3RoX2kgPSAwOwotCi0KLSAgICAgIGZvciAoIGkgPSAwOyAhZXJyb3IgJiYgdGFnX2kgIT0gdGFnIDsgaSsrICkKLSAgICAgICAgZXJyb3IgPSBzZXJ2aWNlLT50YWJsZV9pbmZvKCBmYWNlLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWdfaSwgJm9mZnNldF9pLCAmbGVuZ3RoX2kgKTsKLQotICAgICAgaWYgKCBlcnJvciAgICAgICAgICAgICAgICAgICAgICB8fAotICAgICAgICAgICBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0X2kgKSApCi0gICAgICAgIGdvdG8gRXhpdDsKLQotICAgICAgcmVzdWx0ID0gX3R0X2NoZWNrX3BhdGVudHNfaW5fcmFuZ2UoIHN0cmVhbSwgbGVuZ3RoX2kgKTsKLSAgICB9Ci0KLSAgRXhpdDoKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLQotICBzdGF0aWMgRlRfQm9vbAotICBfdHRfZmFjZV9jaGVja19wYXRlbnRzKCBGVF9GYWNlICBmYWNlICkKLSAgewotICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gZmFjZS0+c3RyZWFtOwotICAgIEZUX1VJbnQgICAgZ2luZGV4OwotICAgIEZUX0Vycm9yICAgZXJyb3I7Ci0gICAgRlRfQm9vbCAgICByZXN1bHQ7Ci0KLSAgICBGVF9TZXJ2aWNlX1RUR2x5ZiAgc2VydmljZTsKLQotCi0gICAgcmVzdWx0ID0gX3R0X2NoZWNrX3BhdGVudHNfaW5fdGFibGUoIGZhY2UsIFRUQUdfZnBnbSApOwotICAgIGlmICggcmVzdWx0ICkKLSAgICAgIGdvdG8gRXhpdDsKLQotICAgIHJlc3VsdCA9IF90dF9jaGVja19wYXRlbnRzX2luX3RhYmxlKCBmYWNlLCBUVEFHX3ByZXAgKTsKLSAgICBpZiAoIHJlc3VsdCApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgVFRfR0xZRiApOwotICAgIGlmICggc2VydmljZSA9PSBOVUxMICkKLSAgICAgIGdvdG8gRXhpdDsKLQotICAgIGZvciAoIGdpbmRleCA9IDA7IGdpbmRleCA8IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHM7IGdpbmRleCsrICkKLSAgICB7Ci0gICAgICBGVF9VTG9uZyAgb2Zmc2V0LCBudW1faW5zLCBzaXplOwotICAgICAgRlRfSW50ICAgIG51bV9jb250b3VyczsKLQotCi0gICAgICBvZmZzZXQgPSBzZXJ2aWNlLT5nZXRfbG9jYXRpb24oIGZhY2UsIGdpbmRleCwgJnNpemUgKTsKLSAgICAgIGlmICggc2l6ZSA9PSAwICkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCApICAgICAgfHwKLSAgICAgICAgICAgRlRfUkVBRF9TSE9SVCggbnVtX2NvbnRvdXJzICkgKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgaWYgKCBudW1fY29udG91cnMgPj0gMCApICAvKiBzaW1wbGUgZ2x5cGggKi8KLSAgICAgIHsKLSAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggOCArIG51bV9jb250b3VycyAqIDIgKSApCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBlbHNlICAvKiBjb21wb3VuZCBnbHlwaCAqLwotICAgICAgewotICAgICAgICBGVF9Cb29sICBoYXNfaW5zdHIgPSAwOwotCi0KLSAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggOCApICkKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBub3cgcmVhZCBlYWNoIGNvbXBvbmVudCAqLwotICAgICAgICBmb3IgKDs7KQotICAgICAgICB7Ci0gICAgICAgICAgRlRfVUludCAgZmxhZ3MsIHRvc2tpcDsKLQotCi0gICAgICAgICAgaWYoIEZUX1JFQURfVVNIT1JUKCBmbGFncyApICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgdG9za2lwID0gMiArIDEgKyAxOwotCi0gICAgICAgICAgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDAgKSApICE9IDAgKSAgICAgICAvKiBBUkdTX0FSRV9XT1JEUyAqLwotICAgICAgICAgICAgdG9za2lwICs9IDI7Ci0KLSAgICAgICAgICBpZiAoICggZmxhZ3MgJiAoIDEgPDwgMyApICkgIT0gMCApICAgICAgIC8qIFdFX0hBVkVfQV9TQ0FMRSAqLwotICAgICAgICAgICAgdG9za2lwICs9IDI7Ci0gICAgICAgICAgZWxzZSBpZiAoICggZmxhZ3MgJiAoIDEgPDwgNiApICkgIT0gMCApICAvKiBXRV9IQVZFX1hfWV9TQ0FMRSAqLwotICAgICAgICAgICAgdG9za2lwICs9IDQ7Ci0gICAgICAgICAgZWxzZSBpZiAoICggZmxhZ3MgJiAoIDEgPDwgNyApICkgIT0gMCApICAvKiBXRV9IQVZFX0FfMngyICovCi0gICAgICAgICAgICB0b3NraXAgKz0gODsKLQotICAgICAgICAgIGlmICggKCBmbGFncyAmICggMSA8PCA4ICkgKSAhPSAwICkgICAgICAgLyogV0VfSEFWRV9JTlNUUlVDVElPTlMgKi8KLSAgICAgICAgICAgIGhhc19pbnN0ciA9IDE7Ci0KLSAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCB0b3NraXAgKSApCi0gICAgICAgICAgICBnb3RvIE5leHRHbHlwaDsKLQotICAgICAgICAgIGlmICggKCBmbGFncyAmICggMSA8PCA1ICkgKSA9PSAwICkgICAgICAgLyogTU9SRV9DT01QT05FTlRTICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIWhhc19pbnN0ciApCi0gICAgICAgICAgZ290byBOZXh0R2x5cGg7Ci0gICAgICB9Ci0KLSAgICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIG51bV9pbnMgKSApCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICByZXN1bHQgPSBfdHRfY2hlY2tfcGF0ZW50c19pbl9yYW5nZSggc3RyZWFtLCBudW1faW5zICk7Ci0gICAgICBpZiAoIHJlc3VsdCApCi0gICAgICAgIGdvdG8gRXhpdDsKLQotICAgIE5leHRHbHlwaDoKLSAgICAgIDsKLSAgICB9Ci0KLSAgRXhpdDoKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLQogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAogICBGVF9FWFBPUlRfREVGKCBGVF9Cb29sICkKICAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyggRlRfRmFjZSAgZmFjZSApCiAgIHsKLSAgICBGVF9Cb29sICByZXN1bHQgPSBGQUxTRTsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKIAotCi0gICAgaWYgKCBmYWNlICYmIEZUX0lTX1NGTlQoIGZhY2UgKSApCi0gICAgICByZXN1bHQgPSBfdHRfZmFjZV9jaGVja19wYXRlbnRzKCBmYWNlICk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBGQUxTRTsKICAgfQogCiAKQEAgLTI2NiwyMiArNDIsMTAgQEAKICAgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZyggRlRfRmFjZSAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgdmFsdWUgKQogICB7Ci0gICAgRlRfQm9vbCAgcmVzdWx0ID0gRkFMU0U7Ci0KLQotI2lmIGRlZmluZWQoIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HICkgJiYgXAotICAgICFkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSICkKLSAgICBpZiAoIGZhY2UgJiYgRlRfSVNfU0ZOVCggZmFjZSApICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAhZmFjZS0+aW50ZXJuYWwtPmlnbm9yZV91bnBhdGVudGVkX2hpbnRlcjsKLSAgICAgIGZhY2UtPmludGVybmFsLT5pZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXIgPSAhdmFsdWU7Ci0gICAgfQotI2Vsc2UKICAgICBGVF9VTlVTRUQoIGZhY2UgKTsKICAgICBGVF9VTlVTRUQoIHZhbHVlICk7Ci0jZW5kaWYKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEZBTFNFOwogICB9CiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRwaWMuYyBiL3NyYy9iYXNlL2Z0cGljLmMKaW5kZXggNmM0YjFjZC4uMDM3NjlkYiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRwaWMuYworKysgYi9zcmMvYmFzZS9mdHBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIChib2R5KS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHJmb3JrLmMgYi9zcmMvYmFzZS9mdHJmb3JrLmMKaW5kZXggODJkNTRmOC4uNDY2MGM5NyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRyZm9yay5jCisrKyBiL3NyYy9iYXNlL2Z0cmZvcmsuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbygpIGFuZCByYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzKCkgYXJlICAgICAqLwpAQCAtNzEsMjQgKzcxLDM1IEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICByZXR1cm4gZXJyb3I7CiAKLSAgICAqcmRhdGFfcG9zID0gcmZvcmtfb2Zmc2V0ICsgKCAoIGhlYWRbMF0gPDwgMjQgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBoZWFkWzFdIDw8IDE2ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaGVhZFsyXSA8PCAgOCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRbM10gICAgICAgICApOwotICAgIG1hcF9wb3MgICAgPSByZm9ya19vZmZzZXQgKyAoICggaGVhZFs0XSA8PCAyNCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGhlYWRbNV0gPDwgMTYgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBoZWFkWzZdIDw8ICA4ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFs3XSAgICAgICAgICk7Ci0gICAgcmRhdGFfbGVuID0gKCBoZWFkWyA4XSA8PCAyNCApIHwKLSAgICAgICAgICAgICAgICAoIGhlYWRbIDldIDw8IDE2ICkgfAotICAgICAgICAgICAgICAgICggaGVhZFsxMF0gPDwgIDggKSB8Ci0gICAgICAgICAgICAgICAgICBoZWFkWzExXTsKKyAgICAvKiBlbnN1cmUgcG9zaXRpdmUgdmFsdWVzICovCisgICAgaWYgKCBoZWFkWzBdID49IDB4ODAgfHwgaGVhZFs0XSA+PSAweDgwIHx8IGhlYWRbOF0gPj0gMHg4MCApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgICpyZGF0YV9wb3MgPSAoIGhlYWRbIDBdIDw8IDI0ICkgfAorICAgICAgICAgICAgICAgICAoIGhlYWRbIDFdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAoIGhlYWRbIDJdIDw8ICA4ICkgfAorICAgICAgICAgICAgICAgICAgIGhlYWRbIDNdOworICAgIG1hcF9wb3MgICAgPSAoIGhlYWRbIDRdIDw8IDI0ICkgfAorICAgICAgICAgICAgICAgICAoIGhlYWRbIDVdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAoIGhlYWRbIDZdIDw8ICA4ICkgfAorICAgICAgICAgICAgICAgICAgIGhlYWRbIDddOworICAgIHJkYXRhX2xlbiAgPSAoIGhlYWRbIDhdIDw8IDI0ICkgfAorICAgICAgICAgICAgICAgICAoIGhlYWRbIDldIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAoIGhlYWRbMTBdIDw8ICA4ICkgfAorICAgICAgICAgICAgICAgICAgIGhlYWRbMTFdOwogCiAgICAgLyogbWFwX2xlbiA9IGhlYWRbMTJdIC4uIGhlYWRbMTVdICovCiAKLSAgICBpZiAoICpyZGF0YV9wb3MgKyByZGF0YV9sZW4gIT0gbWFwX3BvcyB8fCBtYXBfcG9zID09IHJmb3JrX29mZnNldCApCisgICAgaWYgKCAqcmRhdGFfcG9zICE9IG1hcF9wb3MgLSByZGF0YV9sZW4gfHwgbWFwX3BvcyA9PSAwICkKICAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwogCisgICAgaWYgKCBGVF9MT05HX01BWCAtIHJmb3JrX29mZnNldCA8ICpyZGF0YV9wb3MgfHwKKyAgICAgICAgIEZUX0xPTkdfTUFYIC0gcmZvcmtfb2Zmc2V0IDwgbWFwX3BvcyAgICApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgICpyZGF0YV9wb3MgKz0gcmZvcmtfb2Zmc2V0OworICAgIG1hcF9wb3MgICAgKz0gcmZvcmtfb2Zmc2V0OworCiAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpbWFwX3BvcyApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwpAQCAtMzkyLDcgKzQwMyw3IEBACiAgICAgICAgIGVycm9yc1tpXSA9IEZUX0Vycl9PazsKIAogICAgICAgaWYgKCBlcnJvcnNbaV0gKQotICAgICAgICBjb250aW51ZSA7CisgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBlcnJvcnNbaV0gPSAoRlRfUkFDQ0VTU19HVUVTU19UQUJMRV9HRVRbaV0uZnVuYykoIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBiYXNlX25hbWUsCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHNuYW1lcy5jIGIvc3JjL2Jhc2UvZnRzbmFtZXMuYwppbmRleCA4MDMwNGU1Li5jZTc5NjQxIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHNuYW1lcy5jCisrKyBiL3NyYy9iYXNlL2Z0c25hbWVzLmMKQEAgLTcsNyArNyw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3RyZWFtLmMgYi9zcmMvYmFzZS9mdHN0cmVhbS5jCmluZGV4IGI2OGYzZjguLmJiNTEyYTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3RyZWFtLmMKKysrIGIvc3JjL2Jhc2UvZnRzdHJlYW0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBJL08gc3RyZWFtIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzc4LDcgKzc3OCw3IEBACiAKICAgICAgIGNhc2UgZnRfZnJhbWVfc2hvcnRfYmU6CiAgICAgICBjYXNlIGZ0X2ZyYW1lX3VzaG9ydF9iZTogIC8qIHJlYWQgYSAyLWJ5dGUgYmlnLWVuZGlhbiBzaG9ydCAqLwotICAgICAgICB2YWx1ZSA9IEZUX05FWFRfVVNIT1JUKCBjdXJzb3IpIDsKKyAgICAgICAgdmFsdWUgPSBGVF9ORVhUX1VTSE9SVCggY3Vyc29yICk7CiAgICAgICAgIHNpZ25fc2hpZnQgPSAxNjsKICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3Ryb2tlLmMgYi9zcmMvYmFzZS9mdHN0cm9rZS5jCmluZGV4IDg0MmVlMzAuLjRmM2M0OTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3Ryb2tlLmMKKysrIGIvc3JjL2Jhc2UvZnRzdHJva2UuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBwYXRoIHN0cm9rZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQsNiArMjQsMTYgQEAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogCisjaW5jbHVkZSAiYmFzZXBpYy5oIgorCisKKyAgLyogZGVjbGFyZSBhbiBleHRlcm4gdG8gYWNjZXNzIGBmdF9vdXRsaW5lX2dseXBoX2NsYXNzJyBnbG9iYWxseSAgICAgKi8KKyAgLyogYWxsb2NhdGVkICBpbiBgZnRnbHlwaC5jJywgYW5kIHVzZSB0aGUgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgKi8KKyAgLyogbWFjcm8gdG8gYWNjZXNzIGl0IHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCAgICAgICAgICAgKi8KKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUgY29uc3QgRlRfR2x5cGhfQ2xhc3MgIGZ0X291dGxpbmVfZ2x5cGhfY2xhc3M7CisjZW5kaWYKKwogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLwogCkBAIC03MDIsOSArNzEyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgIG91dGxpbmUgKQogICB7CiAgICAgLyogY29weSBwb2ludCBsb2NhdGlvbnMgKi8KLSAgICBGVF9BUlJBWV9DT1BZKCBvdXRsaW5lLT5wb2ludHMgKyBvdXRsaW5lLT5uX3BvaW50cywKLSAgICAgICAgICAgICAgICAgICBib3JkZXItPnBvaW50cywKLSAgICAgICAgICAgICAgICAgICBib3JkZXItPm51bV9wb2ludHMgKTsKKyAgICBpZiAoIGJvcmRlci0+bnVtX3BvaW50cyApCisgICAgICBGVF9BUlJBWV9DT1BZKCBvdXRsaW5lLT5wb2ludHMgKyBvdXRsaW5lLT5uX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgIGJvcmRlci0+cG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLT5udW1fcG9pbnRzICk7CiAKICAgICAvKiBjb3B5IHRhZ3MgKi8KICAgICB7CkBAIC0yMjg1LDE1ICsyMjk2LDYgQEAKICAgfQogCiAKLSAgLyogZGVjbGFyZSBhbiBleHRlcm4gdG8gYWNjZXNzIGBmdF9vdXRsaW5lX2dseXBoX2NsYXNzJyBnbG9iYWxseSAgICAgKi8KLSAgLyogYWxsb2NhdGVkICBpbiBgZnRnbHlwaC5jJywgYW5kIHVzZSB0aGUgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgKi8KLSAgLyogbWFjcm8gdG8gYWNjZXNzIGl0IHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCAgICAgICAgICAgKi8KLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgZXh0ZXJuIGNvbnN0IEZUX0dseXBoX0NsYXNzICBmdF9vdXRsaW5lX2dseXBoX2NsYXNzOwotI2VuZGlmCi0jaW5jbHVkZSAiYmFzZXBpYy5oIgotCi0KICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzeW50aC5jIGIvc3JjL2Jhc2UvZnRzeW50aC5jCmluZGV4IGNkNjg1MzMuLjRiNjZhMzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3ludGguYworKysgYi9zcmMvYmFzZS9mdHN5bnRoLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc3ludGhlc2l6aW5nIGNvZGUgZm9yIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZyAoYm9keSkuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3lzdGVtLmMgYi9zcmMvYmFzZS9mdHN5c3RlbS5jCmluZGV4IDE5MzhmZDguLmFjMWYwMWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKKysrIGIvc3JjL2Jhc2UvZnRzeXN0ZW0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBTlNJLXNwZWNpZmljIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR0cmlnb24uYyBiL3NyYy9iYXNlL2Z0dHJpZ29uLmMKaW5kZXggNWIyNDMwNC4uN2I1ODJjOCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR0cmlnb24uYworKysgYi9zcmMvYmFzZS9mdHRyaWdvbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03MSw3ICs3MSw4IEBACiAKICAgICAvKiAweDQwMDAwMDAwIGNvbWVzIGZyb20gcmVncmVzc2lvbiBhbmFseXNpcyBiZXR3ZWVuIHRydWUgKi8KICAgICAvKiBhbmQgQ09SRElDIGh5cG90ZW51c2UsIHNvIGl0IG1pbmltaXplcyB0aGUgZXJyb3IgICAgICAgKi8KLSAgICB2YWwgPSAoRlRfRml4ZWQpKCAoIChGVF9JbnQ2NCl2YWwgKiBGVF9UUklHX1NDQUxFICsgMHg0MDAwMDAwMFVMICkgPj4gMzIgKTsKKyAgICB2YWwgPSAoRlRfRml4ZWQpKAorICAgICAgICAgICAgKCAoRlRfVUludDY0KXZhbCAqIEZUX1RSSUdfU0NBTEUgKyAweDQwMDAwMDAwVUwgKSA+PiAzMiApOwogCiAgICAgcmV0dXJuIHMgPCAwID8gLXZhbCA6IHZhbDsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR0eXBlMS5jIGIvc3JjL2Jhc2UvZnR0eXBlMS5jCmluZGV4IGM1NDkzODIuLjVjMGZjZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dHlwZTEuYworKysgYi9zcmMvYmFzZS9mdHR5cGUxLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBQUyBuYW1lcyBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dXRpbC5jIGIvc3JjL2Jhc2UvZnR1dGlsLmMKaW5kZXggZjViNzJkYi4uZmFkN2QxYSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR1dGlsLmMKKysrIGIvc3JjL2Jhc2UvZnR1dGlsLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBtZW1vcnkgYW5kIGxpc3QgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0d2luZm50LmMgYi9zcmMvYmFzZS9mdHdpbmZudC5jCmluZGV4IDc2YTE5YWYuLjg5ZTkxNTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0d2luZm50LmMKKysrIGIvc3JjL2Jhc2UvZnR3aW5mbnQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBXaW5kb3dzIEZOVCBzcGVjaWZpYyBpbmZvIChib2R5KS4gICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvbWQ1LmMgYi9zcmMvYmFzZS9tZDUuYwppbmRleCA1MmQ5NmFjLi5iMjM1ZTE3IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9tZDUuYworKysgYi9zcmMvYmFzZS9tZDUuYwpAQCAtNjMsMTIgKzYzLDE5IEBACiAJKGEpICs9IChiKTsKIAogLyoKLSAqIFNFVCByZWFkcyA0IGlucHV0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlciBhbmQgc3RvcmVzIHRoZW0KLSAqIGluIGEgcHJvcGVybHkgYWxpZ25lZCB3b3JkIGluIGhvc3QgYnl0ZSBvcmRlci4KKyAqIFNFVCByZWFkcyA0IGlucHV0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlciBhbmQgc3RvcmVzIHRoZW0gaW4gYQorICogcHJvcGVybHkgYWxpZ25lZCB3b3JkIGluIGhvc3QgYnl0ZSBvcmRlci4KICAqCi0gKiBUaGUgY2hlY2sgZm9yIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJlcyB0aGF0IHRvbGVyYXRlIHVuYWxpZ25lZAotICogbWVtb3J5IGFjY2Vzc2VzIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLiAgTm90aGluZyB3aWxsIGJyZWFrIGlmIGl0Ci0gKiBkb2Vzbid0IHdvcmsuCisgKiBUaGUgY2hlY2sgZm9yIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJlcyB0aGF0IHRvbGVyYXRlIHVuYWxpZ25lZCBtZW1vcnkKKyAqIGFjY2Vzc2VzIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLiAgTm90aGluZyB3aWxsIGJyZWFrIGlmIGl0IGZhaWxzIHRvIGRldGVjdAorICogYSBzdWl0YWJsZSBhcmNoaXRlY3R1cmUuCisgKgorICogVW5mb3J0dW5hdGVseSwgdGhpcyBvcHRpbWl6YXRpb24gbWF5IGJlIGEgQyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMgdmlvbGF0aW9uCisgKiBpZiB0aGUgY2FsbGVyJ3MgZGF0YSBidWZmZXIgaGFzIGVmZmVjdGl2ZSB0eXBlIHRoYXQgY2Fubm90IGJlIGFsaWFzZWQgYnkKKyAqIE1ENV91MzJwbHVzLiAgSW4gcHJhY3RpY2UsIHRoaXMgcHJvYmxlbSBtYXkgb2NjdXIgaWYgdGhlc2UgTUQ1IHJvdXRpbmVzIGFyZQorICogaW5saW5lZCBpbnRvIGEgY2FsbGluZyBmdW5jdGlvbiwgb3Igd2l0aCBmdXR1cmUgYW5kIGRhbmdlcm91c2x5IGFkdmFuY2VkCisgKiBsaW5rLXRpbWUgb3B0aW1pemF0aW9ucy4gIEZvciB0aGUgdGltZSBiZWluZywga2VlcGluZyB0aGVzZSBNRDUgcm91dGluZXMgaW4KKyAqIHRoZWlyIG93biB0cmFuc2xhdGlvbiB1bml0IGF2b2lkcyB0aGUgcHJvYmxlbS4KICAqLwogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3ZheF9fKQogI2RlZmluZSBTRVQobikgXApAQCAtODcsOCArOTQsOCBAQAogI2VuZGlmCiAKIC8qCi0gKiBUaGlzIHByb2Nlc3NlcyBvbmUgb3IgbW9yZSA2NC1ieXRlIGRhdGEgYmxvY2tzLCBidXQgZG9lcyBOT1QgdXBkYXRlCi0gKiB0aGUgYml0IGNvdW50ZXJzLiAgVGhlcmUgYXJlIG5vIGFsaWdubWVudCByZXF1aXJlbWVudHMuCisgKiBUaGlzIHByb2Nlc3NlcyBvbmUgb3IgbW9yZSA2NC1ieXRlIGRhdGEgYmxvY2tzLCBidXQgZG9lcyBOT1QgdXBkYXRlIHRoZSBiaXQKKyAqIGNvdW50ZXJzLiAgVGhlcmUgYXJlIG5vIGFsaWdubWVudCByZXF1aXJlbWVudHMuCiAgKi8KIHN0YXRpYyBjb25zdCB2b2lkICpib2R5KE1ENV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQogewpAQCAtMjQyLDYgKzI0OSwxMiBAQAogCW1lbWNweShjdHgtPmJ1ZmZlciwgZGF0YSwgc2l6ZSk7CiB9CiAKKyNkZWZpbmUgT1VUKGRzdCwgc3JjKSBcCisJKGRzdClbMF0gPSAodW5zaWduZWQgY2hhcikoc3JjKTsgXAorCShkc3QpWzFdID0gKHVuc2lnbmVkIGNoYXIpKChzcmMpID4+IDgpOyBcCisJKGRzdClbMl0gPSAodW5zaWduZWQgY2hhcikoKHNyYykgPj4gMTYpOyBcCisJKGRzdClbM10gPSAodW5zaWduZWQgY2hhcikoKHNyYykgPj4gMjQpOworCiB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENV9DVFggKmN0eCkKIHsKIAl1bnNpZ25lZCBsb25nIHVzZWQsIGF2YWlsYWJsZTsKQEAgLTI2MiwzMyArMjc1LDE1IEBACiAJbWVtc2V0KCZjdHgtPmJ1ZmZlclt1c2VkXSwgMCwgYXZhaWxhYmxlIC0gOCk7CiAKIAljdHgtPmxvIDw8PSAzOwotCWN0eC0+YnVmZmVyWzU2XSA9IGN0eC0+bG87Ci0JY3R4LT5idWZmZXJbNTddID0gY3R4LT5sbyA+PiA4OwotCWN0eC0+YnVmZmVyWzU4XSA9IGN0eC0+bG8gPj4gMTY7Ci0JY3R4LT5idWZmZXJbNTldID0gY3R4LT5sbyA+PiAyNDsKLQljdHgtPmJ1ZmZlcls2MF0gPSBjdHgtPmhpOwotCWN0eC0+YnVmZmVyWzYxXSA9IGN0eC0+aGkgPj4gODsKLQljdHgtPmJ1ZmZlcls2Ml0gPSBjdHgtPmhpID4+IDE2OwotCWN0eC0+YnVmZmVyWzYzXSA9IGN0eC0+aGkgPj4gMjQ7CisJT1VUKCZjdHgtPmJ1ZmZlcls1Nl0sIGN0eC0+bG8pCisJT1VUKCZjdHgtPmJ1ZmZlcls2MF0sIGN0eC0+aGkpCiAKIAlib2R5KGN0eCwgY3R4LT5idWZmZXIsIDY0KTsKIAotCXJlc3VsdFswXSA9IGN0eC0+YTsKLQlyZXN1bHRbMV0gPSBjdHgtPmEgPj4gODsKLQlyZXN1bHRbMl0gPSBjdHgtPmEgPj4gMTY7Ci0JcmVzdWx0WzNdID0gY3R4LT5hID4+IDI0OwotCXJlc3VsdFs0XSA9IGN0eC0+YjsKLQlyZXN1bHRbNV0gPSBjdHgtPmIgPj4gODsKLQlyZXN1bHRbNl0gPSBjdHgtPmIgPj4gMTY7Ci0JcmVzdWx0WzddID0gY3R4LT5iID4+IDI0OwotCXJlc3VsdFs4XSA9IGN0eC0+YzsKLQlyZXN1bHRbOV0gPSBjdHgtPmMgPj4gODsKLQlyZXN1bHRbMTBdID0gY3R4LT5jID4+IDE2OwotCXJlc3VsdFsxMV0gPSBjdHgtPmMgPj4gMjQ7Ci0JcmVzdWx0WzEyXSA9IGN0eC0+ZDsKLQlyZXN1bHRbMTNdID0gY3R4LT5kID4+IDg7Ci0JcmVzdWx0WzE0XSA9IGN0eC0+ZCA+PiAxNjsKLQlyZXN1bHRbMTVdID0gY3R4LT5kID4+IDI0OworCU9VVCgmcmVzdWx0WzBdLCBjdHgtPmEpCisJT1VUKCZyZXN1bHRbNF0sIGN0eC0+YikKKwlPVVQoJnJlc3VsdFs4XSwgY3R4LT5jKQorCU9VVCgmcmVzdWx0WzEyXSwgY3R4LT5kKQogCiAJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyYXJyc3QuYyBiL3NyYy9jZmYvY2YyYXJyc3QuYwppbmRleCA1MjhiMWZhLi44OWYzZTlmIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmFycnN0LmMKKysrIGIvc3JjL2NmZi9jZjJhcnJzdC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgIHNpemVfdCAgbmV3U2l6ZSA9IG51bUVsZW1lbnRzICogYXJyc3RhY2stPnNpemVJdGVtOwogCiAKLSAgICAgIGlmICggbnVtRWxlbWVudHMgPiBMT05HX01BWCAvIGFycnN0YWNrLT5zaXplSXRlbSApCisgICAgICBpZiAoIG51bUVsZW1lbnRzID4gRlRfTE9OR19NQVggLyBhcnJzdGFjay0+c2l6ZUl0ZW0gKQogICAgICAgICBnb3RvIGV4aXQ7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJhcnJzdC5oIGIvc3JjL2NmZi9jZjJhcnJzdC5oCmluZGV4IGZmNWFkOGIuLjNjMjFhM2IgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyYXJyc3QuaAorKysgYi9zcmMvY2ZmL2NmMmFycnN0LmgKQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGMkFSUlNUX0hfXwotI2RlZmluZSBfX0NGMkFSUlNUX0hfXworI2lmbmRlZiBDRjJBUlJTVF9IXworI2RlZmluZSBDRjJBUlJTVF9IXwogCiAKICNpbmNsdWRlICJjZjJlcnJvci5oIgpAQCAtOTQsNyArOTQsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGMkFSUlNUX0hfXyAqLworI2VuZGlmIC8qIENGMkFSUlNUX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmJsdWVzLmggYi9zcmMvY2ZmL2NmMmJsdWVzLmgKaW5kZXggMmYzOGZjYS4uOTZmYjYwZiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJibHVlcy5oCisrKyBiL3NyYy9jZmYvY2YyYmx1ZXMuaApAQCAtNjUsOCArNjUsOCBAQAogICAgKi8KIAogCi0jaWZuZGVmIF9fQ0YyQkxVRVNfSF9fCi0jZGVmaW5lIF9fQ0YyQkxVRVNfSF9fCisjaWZuZGVmIENGMkJMVUVTX0hfCisjZGVmaW5lIENGMkJMVUVTX0hfCiAKIAogI2luY2x1ZGUgImNmMmdsdWUuaCIKQEAgLTE3OSw3ICsxNzksNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGMkJMVUVTX0hfXyAqLworI2VuZGlmIC8qIENGMkJMVUVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmVycm9yLmggYi9zcmMvY2ZmL2NmMmVycm9yLmgKaW5kZXggNjQ1M2ViYy4uNTEyZWRkMSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJlcnJvci5oCisrKyBiL3NyYy9jZmYvY2YyZXJyb3IuaApAQCAtMzYsMTMgKzM2LDEzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJFUlJPUl9IX18KLSNkZWZpbmUgX19DRjJFUlJPUl9IX18KKyNpZm5kZWYgQ0YyRVJST1JfSF8KKyNkZWZpbmUgQ0YyRVJST1JfSF8KIAogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIENGMl9FcnJfCkBAIC03MCw3ICs3MCw3IEBACiAgICAqIFVwb24gYSBmdW5jdGlvbiBjYWxsIGlmIHRoZSBlcnJvciBjb2RlIGlzIGFueXRoaW5nIG90aGVyIHRoYW4KICAgICogYEZUX0Vycl9PaycsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVybywgd2UKICAgICogd2lsbCByZXR1cm4gd2l0aG91dCBhbHRlcmluZyB0aGF0IGVycm9yLiAgVGhpcyB3aWxsIGFsbG93IHRoZQotICAgKiBlcnJvciB0byBwcm9wb2dhdGUgYW5kIGJlIGhhbmRsZWQgYXQgdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uIGluCisgICAqIGVycm9yIHRvIHByb3BhZ2F0ZSBhbmQgYmUgaGFuZGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gaW4KICAgICogdGhlIGNvZGUuCiAgICAqCiAgICAqIFRoaXMgYWxsb3dzIGEgc3R5bGUgb2YgY29kZSB3aGVyZSB0aGUgZXJyb3IgY29kZSBpcyBpbml0aWFsaXplZApAQCAtMTEzLDcgKzExMyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyRVJST1JfSF9fICovCisjZW5kaWYgLyogQ0YyRVJST1JfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZml4ZWQuaCBiL3NyYy9jZmYvY2YyZml4ZWQuaAppbmRleCBkNmQ5ZmFmLi43NGFmMzc3IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmZpeGVkLmgKKysrIGIvc3JjL2NmZi9jZjJmaXhlZC5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJGSVhFRF9IX18KLSNkZWZpbmUgX19DRjJGSVhFRF9IX18KKyNpZm5kZWYgQ0YyRklYRURfSF8KKyNkZWZpbmUgQ0YyRklYRURfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTg5LDcgKzg5LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogIF9fQ0YyRklYRURfSF9fICovCisjZW5kaWYgLyogQ0YyRklYRURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZm9udC5oIGIvc3JjL2NmZi9jZjJmb250LmgKaW5kZXggODZjZjAyZi4uYmQwNWU2OSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJmb250LmgKKysrIGIvc3JjL2NmZi9jZjJmb250LmgKQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGMkZPTlRfSF9fCi0jZGVmaW5lIF9fQ0YyRk9OVF9IX18KKyNpZm5kZWYgQ0YyRk9OVF9IXworI2RlZmluZSBDRjJGT05UX0hfCiAKIAogI2luY2x1ZGUgImNmMmZ0LmgiCkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIFczOyAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDguMmQ2ZTE7IDIwMTQtMTItMTkpIHRoYXQgZXhjZWVkICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENGMl9TVE9SQUdFX1NJWkUgICAgICAgIDMyCiAKIAogICAvKiB0eXBlZGVmIGlzIGluIGBjZjJnbHVlLmgnICovCkBAIC0xMTUsNyArMTE2LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19DRjJGT05UX0hfXyAqLworI2VuZGlmIC8qIENGMkZPTlRfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZnQuYyBiL3NyYy9jZmYvY2YyZnQuYwppbmRleCBkMjU0NGEyLi41NWYzMjA2IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmZ0LmMKKysrIGIvc3JjL2NmZi9jZjJmdC5jCkBAIC01NDQsMTQgKzU0NCwxNyBAQAogICAvKiByZXR1cm4gMCBvbiBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIENGMl9JbnQgKQogICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgIHN1YnJOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApCiAgIHsKKyAgICBDRjJfVUludCAgaWR4OworCisKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKIAogICAgIEZUX1pFUk8oIGJ1ZiApOwogCi0gICAgaWR4ICs9IChDRjJfVUludClkZWNvZGVyLT5nbG9iYWxzX2JpYXM7CisgICAgaWR4ID0gKENGMl9VSW50KSggc3Vick51bSArIGRlY29kZXItPmdsb2JhbHNfYmlhcyApOwogICAgIGlmICggaWR4ID49IGRlY29kZXItPm51bV9nbG9iYWxzICkKICAgICAgIHJldHVybiBUUlVFOyAgICAgLyogZXJyb3IgKi8KIApAQCAtNjI4LDE0ICs2MzEsMTcgQEAKIAogICBGVF9MT0NBTF9ERUYoIENGMl9JbnQgKQogICBjZjJfaW5pdExvY2FsUmVnaW9uQnVmZmVyKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgIHN1YnJOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICkKICAgeworICAgIENGMl9VSW50ICBpZHg7CisKKwogICAgIEZUX0FTU0VSVCggZGVjb2RlciApOwogCiAgICAgRlRfWkVSTyggYnVmICk7CiAKLSAgICBpZHggKz0gKENGMl9VSW50KWRlY29kZXItPmxvY2Fsc19iaWFzOworICAgIGlkeCA9IChDRjJfVUludCkoIHN1YnJOdW0gKyBkZWNvZGVyLT5sb2NhbHNfYmlhcyApOwogICAgIGlmICggaWR4ID49IGRlY29kZXItPm51bV9sb2NhbHMgKQogICAgICAgcmV0dXJuIFRSVUU7ICAgICAvKiBlcnJvciAqLwogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmZ0LmggYi9zcmMvY2ZmL2NmMmZ0LmgKaW5kZXggMzA3M2RmMy4uOGU1NWU4NCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJmdC5oCisrKyBiL3NyYy9jZmYvY2YyZnQuaApAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0YyRlRfSF9fCi0jZGVmaW5lIF9fQ0YyRlRfSF9fCisjaWZuZGVmIENGMkZUX0hfCisjZGVmaW5lIENGMkZUX0hfCiAKIAogI2luY2x1ZGUgImNmMnR5cGVzLmgiCkBAIC05OSw3ICs5OSw3IEBACiAKICAgRlRfTE9DQUwoIENGMl9JbnQgKQogICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgIHN1YnJOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApOwogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICBjZjJfZ2V0U2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKTsKICAgRlRfTE9DQUwoIENGMl9JbnQgKQogICBjZjJfaW5pdExvY2FsUmVnaW9uQnVmZmVyKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgIHN1YnJOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICk7CiAKICAgRlRfTE9DQUwoIENGMl9GaXhlZCApCkBAIC0xNDEsNyArMTQxLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19DRjJGVF9IX18gKi8KKyNlbmRpZiAvKiBDRjJGVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJnbHVlLmggYi9zcmMvY2ZmL2NmMmdsdWUuaAppbmRleCBhMjRkYTM5Li41NmE3YzI0IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmdsdWUuaAorKysgYi9zcmMvY2ZmL2NmMmdsdWUuaApAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0YyR0xVRV9IX18KLSNkZWZpbmUgX19DRjJHTFVFX0hfXworI2lmbmRlZiBDRjJHTFVFX0hfCisjZGVmaW5lIENGMkdMVUVfSF8KIAogCiAvKiBjb21tb24gaW5jbHVkZXMgZm9yIG90aGVyIG1vZHVsZXMgKi8KQEAgLTEzOCw3ICsxMzgsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGMkdMVUVfSF9fICovCisjZW5kaWYgLyogQ0YyR0xVRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJoaW50cy5jIGIvc3JjL2NmZi9jZjJoaW50cy5jCmluZGV4IDBlMjcwMDAuLmJiYmU4ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyaGludHMuYworKysgYi9zcmMvY2ZmL2NmMmhpbnRzLmMKQEAgLTU4Nyw4ICs1ODcsOSBAQAogICAgIH0KIAogICAgIC8qIHBhaXJlZCBlZGdlcyBtdXN0IGJlIGluIHByb3BlciBvcmRlciAqLwotICAgIEZUX0FTU0VSVCggIWlzUGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAgIHRvcEhpbnRFZGdlLT5jc0Nvb3JkID49IGJvdHRvbUhpbnRFZGdlLT5jc0Nvb3JkICk7CisgICAgaWYgKCBpc1BhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICB0b3BIaW50RWRnZS0+Y3NDb29yZCA8IGJvdHRvbUhpbnRFZGdlLT5jc0Nvb3JkICkKKyAgICAgIHJldHVybjsKIAogICAgIC8qIGxpbmVhciBzZWFyY2ggdG8gZmluZCBpbmRleCB2YWx1ZSBvZiBpbnNlcnRpb24gcG9pbnQgKi8KICAgICBpbmRleEluc2VydCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmhpbnRzLmggYi9zcmMvY2ZmL2NmMmhpbnRzLmgKaW5kZXggZjI1ZDkxYi4uYTg5ODQ1NCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJoaW50cy5oCisrKyBiL3NyYy9jZmYvY2YyaGludHMuaApAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0YySElOVFNfSF9fCi0jZGVmaW5lIF9fQ0YySElOVFNfSF9fCisjaWZuZGVmIENGMkhJTlRTX0hfCisjZGVmaW5lIENGMkhJTlRTX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0yMjAsNyArMjIwLDcgQEAKIAogICAgIC8qIGNoYXJhY3RlciBzcGFjZSBtaXRlciBsaW1pdCB0aHJlc2hvbGQgKi8KICAgICBDRjJfRml4ZWQgIG1pdGVyTGltaXQ7Ci0gICAgLyogdmVydGljYWwvaG9yeml6b250YWwgc25hcCBkaXN0YW5jZSBpbiBjaGFyYWN0ZXIgc3BhY2UgKi8KKyAgICAvKiB2ZXJ0aWNhbC9ob3Jpem9udGFsIHNuYXAgZGlzdGFuY2UgaW4gY2hhcmFjdGVyIHNwYWNlICovCiAgICAgQ0YyX0ZpeGVkICBzbmFwVGhyZXNob2xkOwogCiAgICAgRlRfVmVjdG9yICBvZmZzZXRTdGFydDA7ICAvKiBmaXJzdCBhbmQgc2Vjb25kIHBvaW50cyBvZiBmaXJzdCAqLwpAQCAtMjgzLDcgKzI4Myw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YySElOVFNfSF9fICovCisjZW5kaWYgLyogQ0YySElOVFNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyaW50cnAuYyBiL3NyYy9jZmYvY2YyaW50cnAuYwppbmRleCA1MzdlMDYwLi4xMGU3YjRiIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmludHJwLmMKKysrIGIvc3JjL2NmZi9jZjJpbnRycC5jCkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgIHJldHVybjsKIAogICAgIEZUX0FTU0VSVCggaGludG1hc2stPmJ5dGVDb3VudCA+IDAgKTsKLSAgICBGVF9BU1NFUlQoIGhpbnRtYXNrLT5ieXRlQ291bnQgPAorICAgIEZUX0FTU0VSVCggaGludG1hc2stPmJ5dGVDb3VudCA8PQogICAgICAgICAgICAgICAgICBzaXplb2YgKCBoaW50bWFzay0+bWFzayApIC8gc2l6ZW9mICggaGludG1hc2stPm1hc2tbMF0gKSApOwogCiAgICAgLyogc2V0IG1hc2sgdG8gYWxsIG9uZXMgKi8KQEAgLTI5Myw3ICsyOTMsOCBAQAogICAgIC8qIHZhcmlhYmxlIGFjY3VtdWxhdGVzIGRlbHRhIHZhbHVlcyBmcm9tIG9wZXJhbmQgc3RhY2sgKi8KICAgICBDRjJfRml4ZWQgIHBvc2l0aW9uID0gaGludE9mZnNldDsKIAotICAgIGlmICggaGFzV2lkdGhBcmcgJiYgISAqaGF2ZVdpZHRoICkKKworICAgIGlmICggaGFzV2lkdGhBcmcgJiYgISpoYXZlV2lkdGggKQogICAgICAgKndpZHRoID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIDAgKSArCiAgICAgICAgICAgICAgICAgIGNmMl9nZXROb21pbmFsV2lkdGhYKCBmb250LT5kZWNvZGVyICk7CiAKQEAgLTQ0Niw2ICs0NDcsOCBAQAogICAgIENGMl9TdGFjayAgb3BTdGFjayA9IE5VTEw7CiAgICAgRlRfQnl0ZSAgICBvcDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBvcGNvZGUgYnl0ZSAqLwogCisgICAgQ0YyX0YxNkRvdDE2ICBzdG9yYWdlW0NGMl9TVE9SQUdFX1NJWkVdOyAgICAvKiBmb3IgYHB1dCcgYW5kIGBnZXQnICovCisKICAgICAvKiBpbnN0cnVjdGlvbiBsaW1pdDsgMjAsMDAwLDAwMCBtYXRjaGVzIEF2YWxvbiAqLwogICAgIEZUX1VJbnQzMiAgaW5zdHJ1Y3Rpb25MaW1pdCA9IDIwMDAwMDAwVUw7CiAKQEAgLTQ2Niw2ICs0NjksOCBAQAogICAgIENGMl9HbHlwaFBhdGhSZWMgIGdseXBoUGF0aDsKIAogCisgICAgRlRfWkVSTyggJnN0b3JhZ2UgKTsKKwogICAgIC8qIGluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBvYmplY3RzICovCiAgICAgY2YyX2FycnN0YWNrX2luaXQoICZzdWJyU3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKQEAgLTYwOCw3ICs2MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgMCApOwogCiAgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCi0gICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgZ290byBleGl0OwogCiAgICAgICAgIGJyZWFrOwogCkBAIC02MzIsNyArNjM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIDAgKTsKIAogICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgICAgICBicmVhazsKIApAQCAtNjQ2LDcgKzY1MSw3IEBACiAgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CiAKICAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKIApAQCAtNzQ2LDcgKzc1MSw3IEBACiAgICAgICBjYXNlIGNmMl9jbWRDQUxMR1NVQlI6CiAgICAgICBjYXNlIGNmMl9jbWRDQUxMU1VCUjoKICAgICAgICAgewotICAgICAgICAgIENGMl9VSW50ICBzdWJySW5kZXg7CisgICAgICAgICAgQ0YyX0ludCAgc3Vick51bTsKIAogCiAgICAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRDQUxMR1NVQlIgPyAiIGNhbGxnc3ViciIKQEAgLTc2NiwxNyArNzcxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWNoYXJzdHJpbmdJbmRleCArIDEgKTsKIAogICAgICAgICAgIC8qIHNldCB1cCB0aGUgbmV3IENGRiByZWdpb24gYW5kIHBvaW50ZXIgKi8KLSAgICAgICAgICBzdWJySW5kZXggPSAoQ0YyX1VJbnQpY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgIHN1YnJOdW0gPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CiAKICAgICAgICAgICBzd2l0Y2ggKCBvcDEgKQogICAgICAgICAgIHsKICAgICAgICAgICBjYXNlIGNmMl9jbWRDQUxMR1NVQlI6CiAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIChpZHggJWQsIGVudGVyaW5nIGxldmVsICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJJbmRleCArIChDRjJfVUludClkZWNvZGVyLT5nbG9iYWxzX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtICsgZGVjb2Rlci0+Z2xvYmFsc19iaWFzLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKIAogICAgICAgICAgICAgaWYgKCBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKQEAgLTc4NywxMSArNzkyLDExIEBACiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8qIGNmMl9jbWRDQUxMU1VCUiAqLwogICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXggKyAoQ0YyX1VJbnQpZGVjb2Rlci0+bG9jYWxzX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtICsgZGVjb2Rlci0+bG9jYWxzX2JpYXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nSW5kZXggKyAxICkpOwogCiAgICAgICAgICAgICBpZiAoIGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIoIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vick51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZyApICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CkBAIC04MzMsODQgKzgzOCwxODkgQEAKIAogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAvKiBUT0RPOiBzaG91bGQgdGhlc2Ugb3BlcmF0b3JzIGJlIHN1cHBvcnRlZD8gKi8KLSAgICAgICAgICBjYXNlIGNmMl9lc2NBTkQ6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYW5kXG4iICkpOworICAgICAgICAgIGNhc2UgY2YyX2VzY0FORDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjT1I6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgb3JcbiIgKSk7CisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYW5kXG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgYXJnMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBhcmcxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NOT1Q6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbm90XG4iICkpOworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSAmJiBhcmcyICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGNmMl9lc2NPUjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NBQlM6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYWJzXG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBvclxuIiApKTsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0FERDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhZGRcbiIgKSk7CisgICAgICAgICAgICAgIGFyZzIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgYXJnMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssIGFyZzEgfHwgYXJnMiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KIAotICAgICAgICAgIGNhc2UgY2YyX2VzY1NVQjogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdWJcbiIgKSk7CisgICAgICAgICAgY2FzZSBjZjJfZXNjTk9UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NESVY6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZGl2XG4iICkpOworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG5vdFxuIiApKTsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjTkVHOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG5lZ1xuIiApKTsKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssICFhcmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgY2YyX2VzY0FCUzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NFUTogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYWJzXG4iICkpOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjRFJPUDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBGVF9BQlMoIGFyZyApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjQUREOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1bW1hbmQxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1bW1hbmQyOworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhZGRcbiIgKSk7CisKKyAgICAgICAgICAgICAgc3VtbWFuZDIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgc3VtbWFuZDEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBzdW1tYW5kMSArIHN1bW1hbmQyICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjU1VCOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIG1pbnVlbmQ7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgc3VidHJhaGVuZDsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3ViXG4iICkpOworCisgICAgICAgICAgICAgIHN1YnRyYWhlbmQgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgbWludWVuZCAgICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIG1pbnVlbmQgLSBzdWJ0cmFoZW5kICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjRElWOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGRpdmlkZW5kOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGRpdmlzb3I7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRpdlxuIiApKTsKKworICAgICAgICAgICAgICBkaXZpc29yICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBkaXZpZGVuZCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIEZUX0RpdkZpeCggZGl2aWRlbmQsIGRpdmlzb3IgKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY05FRzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG5lZ1xuIiApKTsKKworICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCAtYXJnICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjRVE6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKKworICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSA9PSBhcmcyICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjRFJPUDoKICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZHJvcFxuIiApKTsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAodm9pZCljZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NQVVQ6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcHV0XG4iICkpOworICAgICAgICAgIGNhc2UgY2YyX2VzY1BVVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICB2YWw7CisgICAgICAgICAgICAgIENGMl9JbnQgICAgICAgaWR4OwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0dFVDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBnZXRcbiIgKSk7CisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcHV0XG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgaWR4ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgICAgICB2YWwgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0lGRUxTRTogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpZmVsc2VcbiIgKSk7CisgICAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0YyX1NUT1JBR0VfU0laRSApCisgICAgICAgICAgICAgICAgc3RvcmFnZVtpZHhdID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBjZjJfZXNjR0VUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfSW50ICBpZHg7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGdldFxuIiApKTsKKworICAgICAgICAgICAgICBpZHggPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgaWYgKCBpZHggPj0gMCAmJiBpZHggPCBDRjJfU1RPUkFHRV9TSVpFICkKKyAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBzdG9yYWdlW2lkeF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NJRkVMU0U6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGNvbmQxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGNvbmQyOworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpZmVsc2VcbiIgKSk7CisKKyAgICAgICAgICAgICAgY29uZDIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgY29uZDEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgYXJnMiAgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgYXJnMSAgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBjb25kMSA8PSBjb25kMiA/IGFyZzEgOiBhcmcyICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCiAgICAgICAgICAgY2FzZSBjZjJfZXNjUkFORE9NOiAvKiBpbiBzcGVjICovCiAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJhbmRvbVxuIiApKTsKQEAgLTkxOCw0MSArMTAyOCwxMjYgQEAKICAgICAgICAgICAgIENGMl9GSVhNRTsKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjTVVMOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG11bFxuIiApKTsKKyAgICAgICAgICBjYXNlIGNmMl9lc2NNVUw6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgZmFjdG9yMTsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBmYWN0b3IyOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY1NRUlQ6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3FydFxuIiApKTsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBtdWxcbiIgKSk7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBmYWN0b3IyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIGZhY3RvcjEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0RVUDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkdXBcbiIgKSk7CisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIEZUX011bEZpeCggZmFjdG9yMSwgZmFjdG9yMiApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGNmMl9lc2NTUVJUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0VYQ0g6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZXhjaFxuIiApKTsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3FydFxuIiApKTsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0lOREVYOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgaWYgKCBhcmcgPiAwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUX0ZpeGVkICByb290ID0gYXJnOworICAgICAgICAgICAgICAgIEZUX0ZpeGVkICBuZXdfcm9vdDsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NST0xMOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJvbGxcbiIgKSk7CisgICAgICAgICAgICAgICAgLyogQmFieWxvbmlhbiBtZXRob2QgKi8KKyAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG5ld19yb290ID0gKCByb290ICsgRlRfRGl2Rml4KCBhcmcsIHJvb3QgKSArIDEgKSA+PiAxOworICAgICAgICAgICAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSByb290ICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICByb290ID0gbmV3X3Jvb3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFyZyA9IG5ld19yb290OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmcgPSAwOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjRFVQOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZHVwXG4iICkpOworCisgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZyApOworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBhcmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NFWENIOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMjsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZXhjaFxuIiApKTsKKworICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBhcmcyICk7CisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZzEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NJTkRFWDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0ludCAgIGlkeDsKKyAgICAgICAgICAgICAgQ0YyX1VJbnQgIHNpemU7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGluZGV4XG4iICkpOworCisgICAgICAgICAgICAgIGlkeCAgPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIHNpemUgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBpZiAoIHNpemUgPiAwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGZvciBgY2YyX3N0YWNrX2dldFJlYWwnLCBpbmRleCAwIGlzIGJvdHRvbSBvZiBzdGFjayAqLworICAgICAgICAgICAgICAgIENGMl9VSW50ICBncl9pZHg7CisKKworICAgICAgICAgICAgICAgIGlmICggaWR4IDwgMCApCisgICAgICAgICAgICAgICAgICBncl9pZHggPSBzaXplIC0gMTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICggKENGMl9VSW50KWlkeCA+PSBzaXplICkKKyAgICAgICAgICAgICAgICAgIGdyX2lkeCA9IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZ3JfaWR4ID0gc2l6ZSAtIDEgLSAoQ0YyX1VJbnQpaWR4OworCisgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgZ3JfaWR4ICkgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY1JPTEw6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9JbnQgIGlkeDsKKyAgICAgICAgICAgICAgQ0YyX0ludCAgY291bnQ7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJvbGxcbiIgKSk7CisKKyAgICAgICAgICAgICAgaWR4ICAgPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIGNvdW50ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19yb2xsKCBvcFN0YWNrLCBjb3VudCwgaWR4ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCiAgICAgICAgICAgY2FzZSBjZjJfZXNjSEZMRVg6CiAgICAgICAgICAgICB7CkBAIC0xMDg1LDcgKzEyODAsNyBAQAogICAgICAgICBoYXZlV2lkdGggPSBUUlVFOwogCiAgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCi0gICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgZ290byBleGl0OwogCiAgICAgICAgIC8qIGNsb3NlIHBhdGggaWYgc3RpbGwgb3BlbiAqLwogICAgICAgICBjZjJfZ2x5cGhwYXRoX2Nsb3NlT3BlblBhdGgoICZnbHlwaFBhdGggKTsKQEAgLTExMTcsOCArMTMxMiw4IEBACiAgICAgICAgICAgZXJyb3IyID0gY2YyX2dldFNlYWNDb21wb25lbnQoIGRlY29kZXIsIGFjaGFyLCAmY29tcG9uZW50ICk7CiAgICAgICAgICAgaWYgKCBlcnJvcjIgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvcjI7ICAgICAgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCi0gICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3IyOyAgICAgIC8qIHBhc3MgRnJlZVR5cGUgZXJyb3IgdGhyb3VnaCAqLworICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgIH0KICAgICAgICAgICBjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKCBmb250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnQsCkBAIC0xMTcyLDcgKzEzNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgMCApOwogCiAgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCi0gICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgZ290byBleGl0OwogCiAgICAgICAgIGlmICggb3AxID09IGNmMl9jbWRISU5UTUFTSyApCiAgICAgICAgIHsKQEAgLTEyMzEsNyArMTQyNiw3IEBACiAgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CiAKICAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKICAgICAgICAgY3VyWCArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKQEAgLTEyNTAsNyArMTQ0NSw3IEBACiAgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CiAKICAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAgICAgY3VyWCArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKIApAQCAtMTMwNSw3ICsxNTAwLDcgQEAKICAgICAgICAgICAvKiBpZiBgY2YyX3N0YWNrX2NvdW50JyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLwogICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICovCiAgICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICAgKi8KLSAgICAgICAgICBjb3VudCAgPSBjb3VudDEgJiB+MjsKKyAgICAgICAgICBjb3VudCAgPSBjb3VudDEgJiB+MlU7CiAgICAgICAgICAgaW5kZXggKz0gY291bnQxIC0gY291bnQ7CiAKICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZ2Y3VydmV0b1xuIiApKTsKQEAgLTEzNTAsNyArMTU0NSw3IEBACiAgICAgICAgICAgLyogaWYgYGNmMl9zdGFja19jb3VudCcgaXNuJ3Qgb2YgdGhlIGZvcm0gNG4gb3IgNG4rMSwgKi8KICAgICAgICAgICAvKiB3ZSBlbmZvcmNlIGl0IGJ5IGNsZWFyaW5nIHRoZSBzZWNvbmQgYml0ICAgICAgICAgICAqLwogICAgICAgICAgIC8qIChhbmQgc29ydGluZyB0aGUgc3RhY2sgaW5kZXhpbmcgdG8gc3VpdCkgICAgICAgICAgICovCi0gICAgICAgICAgY291bnQgID0gY291bnQxICYgfjI7CisgICAgICAgICAgY291bnQgID0gY291bnQxICYgfjJVOwogICAgICAgICAgIGluZGV4ICs9IGNvdW50MSAtIGNvdW50OwogCiAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBoaGN1cnZldG9cbiIgKSk7CkBAIC0xMzk5LDcgKzE1OTQsNyBAQAogICAgICAgICAgIC8qIDhuKzQsIG9yIDhuKzUsIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlICAgICAqLwogICAgICAgICAgIC8qIHNlY29uZCBiaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgIC8qIChhbmQgc29ydGluZyB0aGUgc3RhY2sgaW5kZXhpbmcgdG8gc3VpdCkgICAgICAgICAqLwotICAgICAgICAgIGNvdW50ICA9IGNvdW50MSAmIH4yOworICAgICAgICAgIGNvdW50ICA9IGNvdW50MSAmIH4yVTsKICAgICAgICAgICBpbmRleCArPSBjb3VudDEgLSBjb3VudDsKIAogICAgICAgICAgIEZUX1RSQUNFNCgoIGFsdGVybmF0ZSA/ICIgaHZjdXJ2ZXRvXG4iIDogIiB2aGN1cnZldG9cbiIgKSk7CkBAIC0xNDYzLDkgKzE2NTgsMTIgQEAKICAgICAgICAgewogICAgICAgICAgIENGMl9JbnQgIHY7CiAKKyAgICAgICAgICBDRjJfSW50ICBieXRlMSA9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKyAgICAgICAgICBDRjJfSW50ICBieXRlMiA9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKIAotICAgICAgICAgIHYgPSAoRlRfU2hvcnQpKCAoIGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCA4ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSAgICAgICAgKTsKKworICAgICAgICAgIHYgPSAoRlRfU2hvcnQpKCAoIGJ5dGUxIDw8IDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZTIgICAgICAgICk7CiAKICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKIApAQCAtMTUyNywxMiArMTcyNSwxNiBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIENGMl9GaXhlZCAgdjsKIAorICAgICAgICAgICAgRlRfVUludDMyICBieXRlMSA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMiA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMyA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlNCA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOwogCi0gICAgICAgICAgICB2ID0gKENGMl9GaXhlZCkKLSAgICAgICAgICAgICAgICAgICggKCAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCAyNCApIHwKLSAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCAxNiApIHwKLSAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCAgOCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSAgICAgICAgICk7CisKKyAgICAgICAgICAgIHYgPSAoQ0YyX0ZpeGVkKSggKCBieXRlMSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBieXRlMiA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBieXRlMyA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlNCAgICAgICAgICk7CiAKICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgJS4yZiIsIHYgLyA2NTUzNi4wICkpOwogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmludHJwLmggYi9zcmMvY2ZmL2NmMmludHJwLmgKaW5kZXggYjVkODk0Ny4uZWMwMzBlOCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJpbnRycC5oCisrKyBiL3NyYy9jZmYvY2YyaW50cnAuaApAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0YySU5UUlBfSF9fCi0jZGVmaW5lIF9fQ0YySU5UUlBfSF9fCisjaWZuZGVmIENGMklOVFJQX0hfCisjZGVmaW5lIENGMklOVFJQX0hfCiAKIAogI2luY2x1ZGUgImNmMmZ0LmgiCkBAIC03Nyw3ICs3Nyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YySU5UUlBfSF9fICovCisjZW5kaWYgLyogQ0YySU5UUlBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YycmVhZC5oIGIvc3JjL2NmZi9jZjJyZWFkLmgKaW5kZXggN2VmN2M4Yy4uYjBiMGRiOCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJyZWFkLmgKKysrIGIvc3JjL2NmZi9jZjJyZWFkLmgKQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGMlJFQURfSF9fCi0jZGVmaW5lIF9fQ0YyUkVBRF9IX18KKyNpZm5kZWYgQ0YyUkVBRF9IXworI2RlZmluZSBDRjJSRUFEX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC02Miw3ICs2Miw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyUkVBRF9IX18gKi8KKyNlbmRpZiAvKiBDRjJSRUFEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMnN0YWNrLmMgYi9zcmMvY2ZmL2NmMnN0YWNrLmMKaW5kZXggODMzMmI1ZC4uOGYzYWRiNiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJzdGFjay5jCisrKyBiL3NyYy9jZmYvY2Yyc3RhY2suYwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgIGNmMl9zdGFja19pbml0KCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZSApCiAgIHsKLSAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7ICAgICAvKiBmb3IgRlRfUU5FVyAqLworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsgICAgIC8qIGZvciBGVF9ORVcgKi8KIAogICAgIENGMl9TdGFjayAgc3RhY2sgPSBOVUxMOwogCiAKLSAgICBpZiAoICFGVF9RTkVXKCBzdGFjayApICkKKyAgICBpZiAoICFGVF9ORVcoIHN0YWNrICkgKQogICAgIHsKLSAgICAgIC8qIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZTsgRlRfUU5FVyB6ZXJvZXMgaXQgKi8KKyAgICAgIC8qIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZTsgRlRfTkVXIHplcm9lcyBpdCAqLwogICAgICAgc3RhY2stPm1lbW9yeSA9IG1lbW9yeTsKICAgICAgIHN0YWNrLT5lcnJvciAgPSBlOwogICAgICAgc3RhY2stPnRvcCAgICA9ICZzdGFjay0+YnVmZmVyWzBdOyAvKiBlbXB0eSBzdGFjayAqLwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAKIAogICAvKiBOb3RlOiB0eXBlIG1pc21hdGNoIGlzIHNpbGVudGx5IGNhc3QgKi8KLSAgLyogVE9ETzogY2hlY2sgdGhpcyAqLworICAvKiBUT0RPOiBjaGVjayB0aGlzICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCBDRjJfRml4ZWQgKQogICBjZjJfc3RhY2tfcG9wRml4ZWQoIENGMl9TdGFjayAgc3RhY2sgKQogICB7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAogCiAgIC8qIE5vdGU6IHR5cGUgbWlzbWF0Y2ggaXMgc2lsZW50bHkgY2FzdCAqLwotICAvKiBUT0RPOiBjaGVjayB0aGlzICovCisgIC8qIFRPRE86IGNoZWNrIHRoaXMgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCiAgIGNmMl9zdGFja19nZXRSZWFsKCBDRjJfU3RhY2sgIHN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICBpZHggKQpAQCAtMTk1LDYgKzE5NSw4NiBAQAogICB9CiAKIAorICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zdGFja19yb2xsKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgc2hpZnQgKQorICB7CisgICAgLyogd2UgaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCisgICAgQ0YyX1N0YWNrTnVtYmVyICBsYXN0ID0geyB7IDAgfSwgQ0YyX051bWJlckludCB9OworCisgICAgQ0YyX0ludCAgc3RhcnRfaWR4LCBpZHgsIGk7CisKKworICAgIGlmICggY291bnQgPCAyICkKKyAgICAgIHJldHVybjsgLyogbm90aGluZyB0byBkbyAodmFsdWVzIDAgYW5kIDEpLCBvciB1bmRlZmluZWQgdmFsdWUgKi8KKworICAgIGlmICggKENGMl9VSW50KWNvdW50ID4gY2YyX3N0YWNrX2NvdW50KCBzdGFjayApICkKKyAgICB7CisgICAgICBDRjJfU0VUX0VSUk9SKCBzdGFjay0+ZXJyb3IsIFN0YWNrX092ZXJmbG93ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCBzaGlmdCA8IDAgKQorICAgICAgc2hpZnQgPSAtKCAoIC1zaGlmdCApICUgY291bnQgKTsKKyAgICBlbHNlCisgICAgICBzaGlmdCAlPSBjb3VudDsKKworICAgIGlmICggc2hpZnQgPT0gMCApCisgICAgICByZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIC8qIFdlIHVzZSB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBkbyB0aGUgcm9sbGluZywgKi8KKyAgICAvKiB3aGljaCBuZWVkcyB0d28gdGVtcG9yYXJ5IHZhcmlhYmxlcyBvbmx5LiAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBjb3VudCA9IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgc2hpZnQgPSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBzdGFjayBpbmRpY2VzIGJlZm9yZSByb2xsOiAgNyA2IDUgNCAzIDIgMSAwICAgICAqLworICAgIC8qICAgc3RhY2sgaW5kaWNlcyBhZnRlciByb2xsOiAgIDEgMCA3IDYgNSA0IDMgMiAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhlIHZhbHVlIG9mIGluZGV4IDAgZ2V0cyBtb3ZlZCB0byBpbmRleCAyLCB3aGlsZSAqLworICAgIC8qIHRoZSBvbGQgdmFsdWUgb2YgaW5kZXggMiBnZXRzIG1vdmVkIHRvIGluZGV4IDQsICAgKi8KKyAgICAvKiBhbmQgc28gb24uICBXZSB0aHVzIGhhdmUgdGhlIGZvbGxvd2luZyBjb3B5aW5nICAgICovCisgICAgLyogY2hhaW5zIGZvciBzaGlmdCB2YWx1ZSAyLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIDAgLT4gMiAtPiA0IC0+IDYgLT4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAxIC0+IDMgLT4gNSAtPiA3IC0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJZiBgY291bnQnIGFuZCBgc2hpZnQnIGFyZSBpbmNvbW1lbnN1cmFibGUsIHdlICAgICovCisgICAgLyogaGF2ZSBhIHNpbmdsZSBjaGFpbiBvbmx5LiAgT3RoZXJ3aXNlLCBpbmNyZWFzZSAgICAqLworICAgIC8qIHRoZSBzdGFydCBpbmRleCBieSAxIGFmdGVyIHRoZSBmaXJzdCBjaGFpbiwgdGhlbiAgKi8KKyAgICAvKiBkbyB0aGUgbmV4dCBjaGFpbiB1bnRpbCBhbGwgZWxlbWVudHMgaW4gYWxsICAgICAgICovCisgICAgLyogY2hhaW5zIGFyZSBoYW5kbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgc3RhcnRfaWR4ID0gLTE7CisgICAgaWR4ICAgICAgID0gLTE7CisgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKyAgICB7CisgICAgICBDRjJfU3RhY2tOdW1iZXIgIHRtcDsKKworCisgICAgICBpZiAoIHN0YXJ0X2lkeCA9PSBpZHggKQorICAgICAgeworICAgICAgICBzdGFydF9pZHgrKzsKKyAgICAgICAgaWR4ICA9IHN0YXJ0X2lkeDsKKyAgICAgICAgbGFzdCA9IHN0YWNrLT5idWZmZXJbaWR4XTsKKyAgICAgIH0KKworICAgICAgaWR4ICs9IHNoaWZ0OworICAgICAgaWYgKCBpZHggPj0gY291bnQgKQorICAgICAgICBpZHggLT0gY291bnQ7CisgICAgICBlbHNlIGlmICggaWR4IDwgMCApCisgICAgICAgIGlkeCArPSBjb3VudDsKKworICAgICAgdG1wICAgICAgICAgICAgICAgID0gc3RhY2stPmJ1ZmZlcltpZHhdOworICAgICAgc3RhY2stPmJ1ZmZlcltpZHhdID0gbGFzdDsKKyAgICAgIGxhc3QgICAgICAgICAgICAgICA9IHRtcDsKKyAgICB9CisgIH0KKworCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNmMl9zdGFja19jbGVhciggQ0YyX1N0YWNrICBzdGFjayApCiAgIHsKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2Yyc3RhY2suaCBiL3NyYy9jZmYvY2Yyc3RhY2suaAppbmRleCA3ZDZkMTk2Li5lNzQwYTdhIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMnN0YWNrLmgKKysrIGIvc3JjL2NmZi9jZjJzdGFjay5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJTVEFDS19IX18KLSNkZWZpbmUgX19DRjJTVEFDS19IX18KKyNpZm5kZWYgQ0YyU1RBQ0tfSF8KKyNkZWZpbmUgQ0YyU1RBQ0tfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTk0LDEzICs5NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICBpZHggKTsKIAogICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zdGFja19yb2xsKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgaWR4ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQogICBjZjJfc3RhY2tfY2xlYXIoIENGMl9TdGFjayAgc3RhY2sgKTsKIAogCiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyU1RBQ0tfSF9fICovCisjZW5kaWYgLyogQ0YyU1RBQ0tfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YydHlwZXMuaCBiL3NyYy9jZmYvY2YydHlwZXMuaAppbmRleCBhYzZhMDIyLi41YjdlMTIzIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMnR5cGVzLmgKKysrIGIvc3JjL2NmZi9jZjJ0eXBlcy5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJUWVBFU19IX18KLSNkZWZpbmUgX19DRjJUWVBFU19IX18KKyNpZm5kZWYgQ0YyVFlQRVNfSF8KKyNkZWZpbmUgQ0YyVFlQRVNfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC03Miw3ICs3Miw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyVFlQRVNfSF9fICovCisjZW5kaWYgLyogQ0YyVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmLmMgYi9zcmMvY2ZmL2NmZi5jCmluZGV4IGJiMmNmYjUuLjg2Y2ExYmUgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmLmMKKysrIGIvc3JjL2NmZi9jZmYuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBPcGVuVHlwZSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZjbWFwLmMgYi9zcmMvY2ZmL2NmZmNtYXAuYwppbmRleCBlNzUzOGU5Li4zZWY0ODMyIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmNtYXAuYworKysgYi9zcmMvY2ZmL2NmZmNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZjbWFwLmggYi9zcmMvY2ZmL2NmZmNtYXAuaAppbmRleCA2ZWFlZDYzLi4yMzc5NWQ1IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmNtYXAuaAorKysgYi9zcmMvY2ZmL2NmZmNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGQ01BUF9IX18KLSNkZWZpbmUgX19DRkZDTUFQX0hfXworI2lmbmRlZiBDRkZDTUFQX0hfCisjZGVmaW5lIENGRkNNQVBfSF8KIAogI2luY2x1ZGUgImNmZm9ianMuaCIKIApAQCAtNjEsNyArNjEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRkNNQVBfSF9fICovCisjZW5kaWYgLyogQ0ZGQ01BUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZkcml2ci5jIGIvc3JjL2NmZi9jZmZkcml2ci5jCmluZGV4IGE3MThiN2EuLjY3YmYwOWQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZHJpdnIuYworKysgYi9zcmMvY2ZmL2NmZmRyaXZyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgZm9udCBkcml2ZXIgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM1OCw4ICszNTgsOCBAQAogCiAgIEZUX0RFRklORV9TRVJWSUNFX0dMWVBIRElDVFJFQygKICAgICBjZmZfc2VydmljZV9nbHlwaF9kaWN0LAotICAgIChGVF9HbHlwaERpY3RfR2V0TmFtZUZ1bmMpICBjZmZfZ2V0X2dseXBoX25hbWUsCi0gICAgKEZUX0dseXBoRGljdF9OYW1lSW5kZXhGdW5jKWNmZl9nZXRfbmFtZV9pbmRleAorICAgIChGVF9HbHlwaERpY3RfR2V0TmFtZUZ1bmMpICBjZmZfZ2V0X2dseXBoX25hbWUsICAgICAgLyogZ2V0X25hbWUgICAqLworICAgIChGVF9HbHlwaERpY3RfTmFtZUluZGV4RnVuYyljZmZfZ2V0X25hbWVfaW5kZXggICAgICAgLyogbmFtZV9pbmRleCAqLwogICApCiAKIApAQCAtNDIxLDExICs0MjEsMTMgQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9QU0lORk9SRUMoCiAgICAgY2ZmX3NlcnZpY2VfcHNfaW5mbywKLSAgICAoUFNfR2V0Rm9udEluZm9GdW5jKSAgIGNmZl9wc19nZXRfZm9udF9pbmZvLAotICAgIChQU19HZXRGb250RXh0cmFGdW5jKSAgTlVMTCwKLSAgICAoUFNfSGFzR2x5cGhOYW1lc0Z1bmMpIGNmZl9wc19oYXNfZ2x5cGhfbmFtZXMsCi0gICAgKFBTX0dldEZvbnRQcml2YXRlRnVuYylOVUxMLCAgICAgICAgLyogdW5zdXBwb3J0ZWQgd2l0aCBDRkYgZm9udHMgKi8KLSAgICAoUFNfR2V0Rm9udFZhbHVlRnVuYykgIE5VTEwgICAgICAgICAvKiBub3QgaW1wbGVtZW50ZWQgICAgICAgICAgICAqLworICAgIChQU19HZXRGb250SW5mb0Z1bmMpICAgY2ZmX3BzX2dldF9mb250X2luZm8sICAgIC8qIHBzX2dldF9mb250X2luZm8gICAgKi8KKyAgICAoUFNfR2V0Rm9udEV4dHJhRnVuYykgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBwc19nZXRfZm9udF9leHRyYSAgICovCisgICAgKFBTX0hhc0dseXBoTmFtZXNGdW5jKSBjZmZfcHNfaGFzX2dseXBoX25hbWVzLCAgLyogcHNfaGFzX2dseXBoX25hbWVzICAqLworICAgIC8qIHVuc3VwcG9ydGVkIHdpdGggQ0ZGIGZvbnRzICovCisgICAgKFBTX0dldEZvbnRQcml2YXRlRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogcHNfZ2V0X2ZvbnRfcHJpdmF0ZSAqLworICAgIC8qIG5vdCBpbXBsZW1lbnRlZCAgICAgICAgICAgICovCisgICAgKFBTX0dldEZvbnRWYWx1ZUZ1bmMpICBOVUxMICAgICAgICAgICAgICAgICAgICAgLyogcHNfZ2V0X2ZvbnRfdmFsdWUgICAqLwogICApCiAKIApAQCAtNDQ0LDcgKzQ0Niw3IEBACiAgICAgLyogZm9sbG93aW5nIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIDEuNywgd2UgcmV0dXJuIHRoZSBuYW1lIHN0b3JlZCAqLwogICAgIC8qIGluIHRoZSBgbmFtZScgdGFibGUgZm9yIGEgQ0ZGIHdyYXBwZWQgaW50byBhbiBTRk5UIGNvbnRhaW5lciAgICAgICAgKi8KIAotICAgIGlmICggc2ZudCApCisgICAgaWYgKCBGVF9JU19TRk5UKCBGVF9GQUNFKCBmYWNlICkgKSAmJiBzZm50ICkKICAgICB7CiAgICAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgIGxpYnJhcnkgICAgID0gRlRfRkFDRV9MSUJSQVJZKCBmYWNlICk7CiAgICAgICBGVF9Nb2R1bGUgICAgICAgICAgICAgIHNmbnRfbW9kdWxlID0gRlRfR2V0X01vZHVsZSggbGlicmFyeSwgInNmbnQiICk7CkBAIC00NjQsNyArNDY2LDcgQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9QU0ZPTlROQU1FUkVDKAogICAgIGNmZl9zZXJ2aWNlX3BzX25hbWUsCi0gICAgKEZUX1BzTmFtZV9HZXRGdW5jKWNmZl9nZXRfcHNfbmFtZQorICAgIChGVF9Qc05hbWVfR2V0RnVuYyljZmZfZ2V0X3BzX25hbWUgICAgICAvKiBnZXRfcHNfZm9udF9uYW1lICovCiAgICkKIAogCkBAIC01MTEsNyArNTEzLDcgQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9UVENNQVBTUkVDKAogICAgIGNmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8sCi0gICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKWNmZl9nZXRfY21hcF9pbmZvCisgICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKWNmZl9nZXRfY21hcF9pbmZvICAgIC8qIGdldF9jbWFwX2luZm8gKi8KICAgKQogCiAKQEAgLTY0MSw5ICs2NDMsMTIgQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9DSURSRUMoCiAgICAgY2ZmX3NlcnZpY2VfY2lkX2luZm8sCi0gICAgKEZUX0NJRF9HZXRSZWdpc3RyeU9yZGVyaW5nU3VwcGxlbWVudEZ1bmMpY2ZmX2dldF9yb3MsCi0gICAgKEZUX0NJRF9HZXRJc0ludGVybmFsbHlDSURLZXllZEZ1bmMpICAgICAgY2ZmX2dldF9pc19jaWQsCi0gICAgKEZUX0NJRF9HZXRDSURGcm9tR2x5cGhJbmRleEZ1bmMpICAgICAgICAgY2ZmX2dldF9jaWRfZnJvbV9nbHlwaF9pbmRleAorICAgIChGVF9DSURfR2V0UmVnaXN0cnlPcmRlcmluZ1N1cHBsZW1lbnRGdW5jKQorICAgICAgY2ZmX2dldF9yb3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXRfcm9zICAgICAgICAgICAgICAgICAgKi8KKyAgICAoRlRfQ0lEX0dldElzSW50ZXJuYWxseUNJREtleWVkRnVuYykKKyAgICAgIGNmZl9nZXRfaXNfY2lkLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0X2lzX2NpZCAgICAgICAgICAgICAgICovCisgICAgKEZUX0NJRF9HZXRDSURGcm9tR2x5cGhJbmRleEZ1bmMpCisgICAgICBjZmZfZ2V0X2NpZF9mcm9tX2dseXBoX2luZGV4ICAgICAgICAgICAgIC8qIGdldF9jaWRfZnJvbV9nbHlwaF9pbmRleCAqLwogICApCiAKIApAQCAtNjU0LDI2ICs2NTksNjIgQEAKICAgc3RhdGljIEZUX0Vycm9yCiAgIGNmZl9wcm9wZXJ0eV9zZXQoIEZUX01vZHVsZSAgICBtb2R1bGUsICAgICAgICAgLyogQ0ZGX0RyaXZlciAqLwogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgcHJvcGVydHlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlICkKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgdmFsdWVfaXNfc3RyaW5nICkKICAgewogICAgIEZUX0Vycm9yICAgIGVycm9yICA9IEZUX0Vycl9PazsKICAgICBDRkZfRHJpdmVyICBkcml2ZXIgPSAoQ0ZGX0RyaXZlciltb2R1bGU7CiAKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgRlRfVU5VU0VEKCB2YWx1ZV9pc19zdHJpbmcgKTsKKyNlbmRpZgorCiAKICAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJkYXJrZW5pbmctcGFyYW1ldGVycyIgKSApCiAgICAgewotICAgICAgRlRfSW50KiAgZGFya2VuX3BhcmFtcyA9IChGVF9JbnQqKXZhbHVlOworICAgICAgRlRfSW50KiAgZGFya2VuX3BhcmFtczsKKyAgICAgIEZUX0ludCAgIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NDsKIAotICAgICAgRlRfSW50ICB4MSA9IGRhcmtlbl9wYXJhbXNbMF07Ci0gICAgICBGVF9JbnQgIHkxID0gZGFya2VuX3BhcmFtc1sxXTsKLSAgICAgIEZUX0ludCAgeDIgPSBkYXJrZW5fcGFyYW1zWzJdOwotICAgICAgRlRfSW50ICB5MiA9IGRhcmtlbl9wYXJhbXNbM107Ci0gICAgICBGVF9JbnQgIHgzID0gZGFya2VuX3BhcmFtc1s0XTsKLSAgICAgIEZUX0ludCAgeTMgPSBkYXJrZW5fcGFyYW1zWzVdOwotICAgICAgRlRfSW50ICB4NCA9IGRhcmtlbl9wYXJhbXNbNl07Ci0gICAgICBGVF9JbnQgIHk0ID0gZGFya2VuX3BhcmFtc1s3XTsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIEZUX0ludCAgIGRwWzhdOwogCiAKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogIHMgPSAoY29uc3QgY2hhciopdmFsdWU7CisgICAgICAgIGNoYXIqICAgICAgICBlcDsKKyAgICAgICAgaW50ICAgICAgICAgIGk7CisKKworICAgICAgICAvKiBlaWdodCBjb21tYS1zZXBhcmF0ZWQgbnVtYmVycyAqLworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDc7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICBkcFtpXSA9IChGVF9JbnQpZnRfc3RydG9sKCBzLCAmZXAsIDEwICk7CisgICAgICAgICAgaWYgKCAqZXAgIT0gJywnIHx8IHMgPT0gZXAgKQorICAgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgICAgICBzID0gZXAgKyAxOworICAgICAgICB9CisKKyAgICAgICAgZHBbN10gPSAoRlRfSW50KWZ0X3N0cnRvbCggcywgJmVwLCAxMCApOworICAgICAgICBpZiAoICEoICplcCA9PSAnXDAnIHx8ICplcCA9PSAnICcgKSB8fCBzID09IGVwICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICAgICBkYXJrZW5fcGFyYW1zID0gZHA7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgZGFya2VuX3BhcmFtcyA9IChGVF9JbnQqKXZhbHVlOworCisgICAgICB4MSA9IGRhcmtlbl9wYXJhbXNbMF07CisgICAgICB5MSA9IGRhcmtlbl9wYXJhbXNbMV07CisgICAgICB4MiA9IGRhcmtlbl9wYXJhbXNbMl07CisgICAgICB5MiA9IGRhcmtlbl9wYXJhbXNbM107CisgICAgICB4MyA9IGRhcmtlbl9wYXJhbXNbNF07CisgICAgICB5MyA9IGRhcmtlbl9wYXJhbXNbNV07CisgICAgICB4NCA9IGRhcmtlbl9wYXJhbXNbNl07CisgICAgICB5NCA9IGRhcmtlbl9wYXJhbXNbN107CisKICAgICAgIGlmICggeDEgPCAwICAgfHwgeDIgPCAwICAgfHwgeDMgPCAwICAgfHwgeDQgPCAwICAgfHwKICAgICAgICAgICAgeTEgPCAwICAgfHwgeTIgPCAwICAgfHwgeTMgPCAwICAgfHwgeTQgPCAwICAgfHwKICAgICAgICAgICAgeDEgPiB4MiAgfHwgeDIgPiB4MyAgfHwgeDMgPiB4NCAgICAgICAgICAgICAgfHwKQEAgLTY5MywyNCArNzM0LDYyIEBACiAgICAgfQogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiaGludGluZy1lbmdpbmUiICkgKQogICAgIHsKLSAgICAgIEZUX1VJbnQqICBoaW50aW5nX2VuZ2luZSA9IChGVF9VSW50Kil2YWx1ZTsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogIHMgPSAoY29uc3QgY2hhciopdmFsdWU7CiAKIAotI2lmbmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCi0gICAgICBpZiAoICpoaW50aW5nX2VuZ2luZSAhPSBGVF9DRkZfSElOVElOR19BRE9CRSApCi0gICAgICAgIGVycm9yID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgICAgICAgaWYgKCAhZnRfc3RyY21wKCBzLCAiYWRvYmUiICkgKQorICAgICAgICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSBGVF9DRkZfSElOVElOR19BRE9CRTsKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBzLCAiZnJlZXR5cGUiICkgKQorICAgICAgICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSBGVF9DRkZfSElOVElOR19GUkVFVFlQRTsKKyNlbmRpZgorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICB9CiAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9ICpoaW50aW5nX2VuZ2luZTsKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCogIGhpbnRpbmdfZW5naW5lID0gKEZUX1VJbnQqKXZhbHVlOwogCi0gICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIGlmICggKmhpbnRpbmdfZW5naW5lID09IEZUX0NGRl9ISU5USU5HX0FET0JFCisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgICAgICAgIHx8ICpoaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRQorI2VuZGlmCisgICAgICAgICAgICkKKyAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gKmhpbnRpbmdfZW5naW5lOworICAgICAgICBlbHNlCisgICAgICAgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworCisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJuby1zdGVtLWRhcmtlbmluZyIgKSApCiAgICAgewotICAgICAgRlRfQm9vbCogIG5vX3N0ZW1fZGFya2VuaW5nID0gKEZUX0Jvb2wqKXZhbHVlOworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcyAgID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBsb25nICAgICAgICAgbnNkID0gZnRfc3RydG9sKCBzLCBOVUxMLCAxMCApOwogCiAKLSAgICAgIGRyaXZlci0+bm9fc3RlbV9kYXJrZW5pbmcgPSAqbm9fc3RlbV9kYXJrZW5pbmc7CisgICAgICAgIGlmICggbnNkID09IDAgKQorICAgICAgICAgIGRyaXZlci0+bm9fc3RlbV9kYXJrZW5pbmcgPSAwOworICAgICAgICBlbHNlIGlmICggbnNkID09IDEgKQorICAgICAgICAgIGRyaXZlci0+bm9fc3RlbV9kYXJrZW5pbmcgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIHsKKyAgICAgICAgRlRfQm9vbCogIG5vX3N0ZW1fZGFya2VuaW5nID0gKEZUX0Jvb2wqKXZhbHVlOworCisKKyAgICAgICAgZHJpdmVyLT5ub19zdGVtX2RhcmtlbmluZyA9ICpub19zdGVtX2RhcmtlbmluZzsKKyAgICAgIH0KIAogICAgICAgcmV0dXJuIGVycm9yOwogICAgIH0KQEAgLTc3Niw4ICs4NTUsOCBAQAogCiAgIEZUX0RFRklORV9TRVJWSUNFX1BST1BFUlRJRVNSRUMoCiAgICAgY2ZmX3NlcnZpY2VfcHJvcGVydGllcywKLSAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKWNmZl9wcm9wZXJ0eV9zZXQsCi0gICAgKEZUX1Byb3BlcnRpZXNfR2V0RnVuYyljZmZfcHJvcGVydHlfZ2V0ICkKKyAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKWNmZl9wcm9wZXJ0eV9zZXQsICAgICAgLyogc2V0X3Byb3BlcnR5ICovCisgICAgKEZUX1Byb3BlcnRpZXNfR2V0RnVuYyljZmZfcHJvcGVydHlfZ2V0ICkgICAgIC8qIGdldF9wcm9wZXJ0eSAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04NjUsOSArOTQ0LDEwIEBACiAgIEZUX0RFRklORV9EUklWRVIoCiAgICAgY2ZmX2RyaXZlcl9jbGFzcywKIAotICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICAgIHwKLSAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUgICB8Ci0gICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIsCisgICAgICBGVF9NT0RVTEVfRk9OVF9EUklWRVIgICAgICAgICAgfAorICAgICAgRlRfTU9EVUxFX0RSSVZFUl9TQ0FMQUJMRSAgICAgIHwKKyAgICAgIEZUX01PRFVMRV9EUklWRVJfSEFTX0hJTlRFUiAgICB8CisgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hJTlRTX0xJR0hUTFksCiAKICAgICAgIHNpemVvZiAoIENGRl9Ecml2ZXJSZWMgKSwKICAgICAgICJjZmYiLApAQCAtODc2LDMxICs5NTYsMjkgQEAKIAogICAgICAgMCwgICAvKiBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlICovCiAKLSAgICAgIGNmZl9kcml2ZXJfaW5pdCwKLSAgICAgIGNmZl9kcml2ZXJfZG9uZSwKLSAgICAgIGNmZl9nZXRfaW50ZXJmYWNlLAorICAgICAgY2ZmX2RyaXZlcl9pbml0LCAgICAgICAgICAvKiBGVF9Nb2R1bGVfQ29uc3RydWN0b3IgIG1vZHVsZV9pbml0ICAgKi8KKyAgICAgIGNmZl9kcml2ZXJfZG9uZSwgICAgICAgICAgLyogRlRfTW9kdWxlX0Rlc3RydWN0b3IgICBtb2R1bGVfZG9uZSAgICovCisgICAgICBjZmZfZ2V0X2ludGVyZmFjZSwgICAgICAgIC8qIEZUX01vZHVsZV9SZXF1ZXN0ZXIgICAgZ2V0X2ludGVyZmFjZSAqLwogCi0gICAgLyogbm93IHRoZSBzcGVjaWZpYyBkcml2ZXIgZmllbGRzICovCiAgICAgc2l6ZW9mICggVFRfRmFjZVJlYyApLAogICAgIHNpemVvZiAoIENGRl9TaXplUmVjICksCiAgICAgc2l6ZW9mICggQ0ZGX0dseXBoU2xvdFJlYyApLAogCi0gICAgY2ZmX2ZhY2VfaW5pdCwKLSAgICBjZmZfZmFjZV9kb25lLAotICAgIGNmZl9zaXplX2luaXQsCi0gICAgY2ZmX3NpemVfZG9uZSwKLSAgICBjZmZfc2xvdF9pbml0LAotICAgIGNmZl9zbG90X2RvbmUsCisgICAgY2ZmX2ZhY2VfaW5pdCwgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfSW5pdEZ1bmMgIGluaXRfZmFjZSAqLworICAgIGNmZl9mYWNlX2RvbmUsICAgICAgICAgICAgICAvKiBGVF9GYWNlX0RvbmVGdW5jICBkb25lX2ZhY2UgKi8KKyAgICBjZmZfc2l6ZV9pbml0LCAgICAgICAgICAgICAgLyogRlRfU2l6ZV9Jbml0RnVuYyAgaW5pdF9zaXplICovCisgICAgY2ZmX3NpemVfZG9uZSwgICAgICAgICAgICAgIC8qIEZUX1NpemVfRG9uZUZ1bmMgIGRvbmVfc2l6ZSAqLworICAgIGNmZl9zbG90X2luaXQsICAgICAgICAgICAgICAvKiBGVF9TbG90X0luaXRGdW5jICBpbml0X3Nsb3QgKi8KKyAgICBjZmZfc2xvdF9kb25lLCAgICAgICAgICAgICAgLyogRlRfU2xvdF9Eb25lRnVuYyAgZG9uZV9zbG90ICovCiAKLSAgICBjZmZfZ2x5cGhfbG9hZCwKKyAgICBjZmZfZ2x5cGhfbG9hZCwgICAgICAgICAgICAgLyogRlRfU2xvdF9Mb2FkRnVuYyAgbG9hZF9nbHlwaCAqLwogCi0gICAgY2ZmX2dldF9rZXJuaW5nLAotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0F0dGFjaEZ1bmMgKi8KLSAgICBjZmZfZ2V0X2FkdmFuY2VzLAorICAgIGNmZl9nZXRfa2VybmluZywgICAgICAgICAgICAvKiBGVF9GYWNlX0dldEtlcm5pbmdGdW5jICAgZ2V0X2tlcm5pbmcgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfQXR0YWNoRnVuYyAgICAgICBhdHRhY2hfZmlsZSAgKi8KKyAgICBjZmZfZ2V0X2FkdmFuY2VzLCAgICAgICAgICAgLyogRlRfRmFjZV9HZXRBZHZhbmNlc0Z1bmMgIGdldF9hZHZhbmNlcyAqLwogCi0gICAgY2ZmX3NpemVfcmVxdWVzdCwKLQotICAgIENGRl9TSVpFX1NFTEVDVAorICAgIGNmZl9zaXplX3JlcXVlc3QsICAgICAgICAgICAvKiBGVF9TaXplX1JlcXVlc3RGdW5jICByZXF1ZXN0X3NpemUgKi8KKyAgICBDRkZfU0laRV9TRUxFQ1QgICAgICAgICAgICAgLyogRlRfU2l6ZV9TZWxlY3RGdW5jICAgc2VsZWN0X3NpemUgICovCiAgICkKIAogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmRyaXZyLmggYi9zcmMvY2ZmL2NmZmRyaXZyLmgKaW5kZXggOTUyN2Y1ZS4uZDdiMDU5OCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZkcml2ci5oCisrKyBiL3NyYy9jZmYvY2ZmZHJpdnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIE9wZW5UeXBlIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGRFJJVkVSX0hfXwotI2RlZmluZSBfX0NGRkRSSVZFUl9IX18KKyNpZm5kZWYgQ0ZGRFJJVkVSX0hfCisjZGVmaW5lIENGRkRSSVZFUl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzIsNyArMzIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRkRSSVZFUl9IX18gKi8KKyNlbmRpZiAvKiBDRkZEUklWRVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmZXJycy5oIGIvc3JjL2NmZi9jZmZlcnJzLmgKaW5kZXggNTQzYmRiMC4uZTdmYzZlYiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZlcnJzLmgKKysrIGIvc3JjL2NmZi9jZmZlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0ZGIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyLDEyICsyMiwxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19DRkZFUlJTX0hfXwotI2RlZmluZSBfX0NGRkVSUlNfSF9fCisjaWZuZGVmIENGRkVSUlNfSF8KKyNkZWZpbmUgQ0ZGRVJSU19IXwogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIENGRl9FcnJfCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIEZUX0VSUk9SU19ICiAKLSNlbmRpZiAvKiBfX0NGRkVSUlNfSF9fICovCisjZW5kaWYgLyogQ0ZGRVJSU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZnbG9hZC5jIGIvc3JjL2NmZi9jZmZnbG9hZC5jCmluZGV4IDQzMDU0ZjguLjRmMzc1YTYgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZ2xvYWQuYworKysgYi9zcmMvY2ZmL2NmZmdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTY4MCw3ICs2ODAsNyBAQAogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KIAogICAgIHsKLSAgICAgIENGRl9Gb250ICBjZmYgID0gKENGRl9Gb250KShmYWNlLT5leHRyYS5kYXRhKTsKKyAgICAgIENGRl9Gb250ICBjZmYgPSAoQ0ZGX0ZvbnQpKGZhY2UtPmV4dHJhLmRhdGEpOwogCiAKICAgICAgIHJldHVybiBjZmZfaW5kZXhfYWNjZXNzX2VsZW1lbnQoICZjZmYtPmNoYXJzdHJpbmdzX2luZGV4LCBnbHlwaF9pbmRleCwKQEAgLTgyNiw3ICs4MjYsNyBAQAogICAgICAgLyogdGhlIHNlYWMgb3BlcmF0b3IgbXVzdCBub3QgYmUgbmVzdGVkICovCiAgICAgICBkZWNvZGVyLT5zZWFjID0gVFJVRTsKICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIGRlY29kZXIsIGNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sIDAgKTsKICAgICAgIGRlY29kZXItPnNlYWMgPSBGQUxTRTsKIAogICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsIGNoYXJzdHJpbmdfbGVuICk7CkBAIC04NTYsNyArODU2LDcgQEAKICAgICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLwogICAgICAgZGVjb2Rlci0+c2VhYyA9IFRSVUU7CiAgICAgICBlcnJvciA9IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBkZWNvZGVyLCBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLCAwICk7CiAgICAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7CiAKICAgICAgIGNmZl9mcmVlX2dseXBoX2RhdGEoIGZhY2UsICZjaGFyc3RyaW5nLCBjaGFyc3RyaW5nX2xlbiApOwpAQCAtODk1LDEzICs4OTUsMTcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW5fZGljdCAgICAgICAgIDo6IFNldCB0byAxIGlmIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvcCBvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIERJQ1QgKG5lZWRlZCBmb3IgTXVsdGlwbGUgTWFzdGVyIENGRnMpLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgaW5fZGljdCApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CiAgICAgQ0ZGX0RlY29kZXJfWm9uZSogIHpvbmU7CkBAIC05MTMsNiArOTE3LDEwIEBACiAgICAgRlRfRml4ZWQqICAgICAgICAgIHN0YWNrOwogICAgIEZUX0ludCAgICAgICAgICAgICBjaGFyc3RyaW5nX3R5cGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LmNoYXJzdHJpbmdfdHlwZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgbnVtX2Rlc2lnbnMgPQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0Lm51bV9kZXNpZ25zOworICAgIEZUX1VTaG9ydCAgICAgICAgICBudW1fYXhlcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QubnVtX2F4ZXM7CiAKICAgICBUMl9IaW50c19GdW5jcyAgICAgaGludGVyOwogCkBAIC0xMjQxLDYgKzEyNDksNDQgQEAKICAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfdW5rbm93biApCiAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgLyogaW4gTXVsdGlwbGUgTWFzdGVyIENGRnMsIFQyIGNoYXJzdHJpbmdzIGNhbiBhcHBlYXIgaW4gKi8KKyAgICAgICAgLyogZGljdGlvbmFyaWVzLCBidXQgc29tZSBvcGVyYXRvcnMgYXJlIHByb2hpYml0ZWQgICAgICAgKi8KKyAgICAgICAgaWYgKCBpbl9kaWN0ICkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBjZmZfb3BfaHN0ZW06CisgICAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW06CisgICAgICAgICAgY2FzZSBjZmZfb3Bfdm1vdmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9ybGluZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hsaW5ldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfdmxpbmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9ycmN1cnZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaHN0ZW1obToKKyAgICAgICAgICBjYXNlIGNmZl9vcF9oaW50bWFzazoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9jbnRybWFzazoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9ybW92ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2htb3ZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW1obToKKyAgICAgICAgICBjYXNlIGNmZl9vcF9yY3VydmVsaW5lOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3JsaW5lY3VydmU6CisgICAgICAgICAgY2FzZSBjZmZfb3BfdnZjdXJ2ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hoY3VydmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF92aGN1cnZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaHZjdXJ2ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4OgorICAgICAgICAgIGNhc2UgY2ZmX29wX2ZsZXg6CisgICAgICAgICAgY2FzZSBjZmZfb3BfaGZsZXgxOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2ZsZXgxOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2NhbGxzdWJyOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2NhbGxnc3VicjoKKyAgICAgICAgICAgIGdvdG8gTU1fRXJyb3I7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgLyogY2hlY2sgYXJndW1lbnRzICovCiAgICAgICAgIHJlcV9hcmdzID0gY2ZmX2FyZ3VtZW50X2NvdW50c1tvcF07CiAgICAgICAgIGlmICggcmVxX2FyZ3MgJiBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEggKQpAQCAtMTI3OCw3ICsxMzI0LDkgQEAKICAgICAgICAgICAgIGNhc2UgY2ZmX29wX2VuZGNoYXI6CiAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgd2lkdGggc3BlY2lmaWVkIGZvciBlbmRjaGFyLCB3ZSBlaXRoZXIgaGF2ZSAqLwogICAgICAgICAgICAgICAvKiAxIGFyZ3VtZW50IG9yIDUgYXJndW1lbnRzLiAgV2UgbGlrZSB0byBhcmd1ZS4gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gKCBudW1fYXJncyA9PSA1ICkgfHwgKCBudW1fYXJncyA9PSAxICk7CisgICAgICAgICAgICAgIHNldF93aWR0aF9vayA9IGluX2RpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggKCBudW1fYXJncyA9PSA1ICkgfHwgKCBudW1fYXJncyA9PSAxICkgKTsKICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xOTcxLDYgKzIwMTksMTAgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKIAogICAgICAgICBjYXNlIGNmZl9vcF9lbmRjaGFyOgorICAgICAgICAgIC8qIGluIGRpY3Rpb25hcmllcywgYGVuZGNoYXInIHNpbXBseSBpbmRpY2F0ZXMgZW5kIG9mIGRhdGEgKi8KKyAgICAgICAgICBpZiAoIGluX2RpY3QgKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworCiAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlbmRjaGFyXG4iICkpOwogCiAgICAgICAgICAgLyogV2UgYXJlIGdvaW5nIHRvIGVtdWxhdGUgdGhlIHNlYWMgb3BlcmF0b3IuICovCkBAIC0yMDgyLDE1ICsyMTM0LDE0IEBACiAKICAgICAgICAgICBpZiAoIGFyZ3NbMF0gPiAwICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9JbnQgICAgY291bnQgPSA5OwotICAgICAgICAgICAgRlRfRml4ZWQgIHJvb3QgID0gYXJnc1swXTsKKyAgICAgICAgICAgIEZUX0ZpeGVkICByb290ID0gYXJnc1swXTsKICAgICAgICAgICAgIEZUX0ZpeGVkICBuZXdfcm9vdDsKIAogCiAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBuZXdfcm9vdCA9ICggcm9vdCArIEZUX0RpdkZpeCggYXJnc1swXSwgcm9vdCApICsgMSApID4+IDE7Ci0gICAgICAgICAgICAgIGlmICggbmV3X3Jvb3QgPT0gcm9vdCB8fCBjb3VudCA8PSAwICkKKyAgICAgICAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSByb290ICkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgcm9vdCA9IG5ld19yb290OwogICAgICAgICAgICAgfQpAQCAtMjE5OSw2ICsyMjUwLDEwIEBACiAKICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcHV0XG4iICkpOwogCisgICAgICAgICAgICAvKiB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiBiZWZvcmUgdmVyc2lvbiAxNi1NYXJjaC0yMDAwICovCisgICAgICAgICAgICAvKiBkaWRuJ3QgZ2l2ZSBhIGhhcmQtY29kZWQgc2l6ZSBsaW1pdCBvZiB0aGUgdGVtcG9yYXJ5ICovCisgICAgICAgICAgICAvKiBzdG9yYWdlIGFycmF5OyBpbnN0ZWFkLCBhbiBhcmd1bWVudCBvZiB0aGUgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBgTXVsdGlwbGVNYXN0ZXInIG9wZXJhdG9yIHNldCB0aGUgc2l6ZSAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgKQogICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XSA9IHZhbDsKICAgICAgICAgICB9CkBAIC0yMjIxLDE0ICsyMjc2LDY4IEBACiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBjZmZfb3Bfc3RvcmU6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdG9yZVxuIikpOworICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igd2FzIHJlbW92ZWQgZnJvbSB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiAqLworICAgICAgICAgIC8qIGluIHZlcnNpb24gMTYtTWFyY2gtMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgZ290byBVbmltcGxlbWVudGVkOworICAgICAgICAgIC8qIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgaW50ZXJwb2xhdGlvbiBvZiBtdWx0aXBsZSAqLworICAgICAgICAgIC8qIG1hc3RlciBmb250cywgdGhpcyBpcyBhIG5vLW9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3RvcmVcbiIpKTsKKyAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGNmZl9vcF9sb2FkOgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgbG9hZFxuIiApKTsKKyAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIHdhcyByZW1vdmVkIGZyb20gdGhlIFR5cGUyIHNwZWNpZmljYXRpb24gKi8KKyAgICAgICAgICAvKiBpbiB2ZXJzaW9uIDE2LU1hcmNoLTIwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHJlZ19pZHggPSAoRlRfSW50KWFyZ3NbMF07CisgICAgICAgICAgICBGVF9JbnQgIGlkeCAgICAgPSAoRlRfSW50KWFyZ3NbMV07CisgICAgICAgICAgICBGVF9JbnQgIGNvdW50ICAgPSAoRlRfSW50KWFyZ3NbMl07CiAKLSAgICAgICAgICBnb3RvIFVuaW1wbGVtZW50ZWQ7CisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbG9hZFxuIiApKTsKKworICAgICAgICAgICAgLyogc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IGhhbmRsZSBpbnRlcnBvbGF0aW9uIG9mIG11bHRpcGxlICovCisgICAgICAgICAgICAvKiBtYXN0ZXIgZm9udHMsIHdlIHN0b3JlIGEgdmVjdG9yIFsxIDAgMCAuLi5dIGluIHRoZSAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBzdG9yYWdlIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIFJlZ2lzdHJ5IGluZGV4ICAqLworICAgICAgICAgICAgaWYgKCByZWdfaWR4ID49IDAgJiYgcmVnX2lkeCA8PSAyICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgJiYKKyAgICAgICAgICAgICAgICAgY291bnQgPj0gMCAmJiBjb3VudCA8PSBudW1fYXhlcyAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0ludCAgZW5kLCBpOworCisKKyAgICAgICAgICAgICAgZW5kID0gRlRfTUlOKCBpZHggKyBjb3VudCwgQ0ZGX01BWF9UUkFOU19FTEVNRU5UUyApOworCisgICAgICAgICAgICAgIGlmICggaWR4IDwgZW5kICkKKyAgICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XSA9IDEgPDwgMTY7CisKKyAgICAgICAgICAgICAgZm9yICggaSA9IGlkeCArIDE7IGkgPCBlbmQ7IGkrKyApCisgICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2ldID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfYmxlbmQ6CisgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBUeXBlMiBzcGVjaWZpY2F0aW9uICovCisgICAgICAgICAgLyogaW4gdmVyc2lvbiAxNi1NYXJjaC0yMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBudW1fcmVzdWx0cyA9IChGVF9JbnQpKCBhcmdzWzBdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBibGVuZFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fcmVzdWx0cyA8IDAgKQorICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgICAgaWYgKCBudW1fcmVzdWx0cyAqIChGVF9JbnQpbnVtX2Rlc2lnbnMgPiBudW1fYXJncyApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBzaW5jZSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGFuZGxlIGludGVycG9sYXRpb24gb2YgbXVsdGlwbGUgKi8KKyAgICAgICAgICAgIC8qIG1hc3RlciBmb250cywgcmV0dXJuIHRoZSBgbnVtX3Jlc3VsdHMnIHZhbHVlcyBvZiB0aGUgICAgICAqLworICAgICAgICAgICAgLyogZmlyc3QgbWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBhcmdzICAgICAtPSBudW1fcmVzdWx0cyAqICggbnVtX2Rlc2lnbnMgLSAxICk7CisgICAgICAgICAgICBudW1fYXJncyAtPSBudW1fcmVzdWx0cyAqICggbnVtX2Rlc2lnbnMgLSAxICk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgY2ZmX29wX2RvdHNlY3Rpb246CiAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVkIGJ5IHRoZSBwYXJzZXIgKi8KQEAgLTIzNTgsMTEgKzI0NjcsMjMgQEAKICAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBjZmZfb3BfZXE6CisgICAgICAgIGNhc2UgY2ZmX29wX25vdDoKICAgICAgICAgICB7CiAgICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICFhcmdzWzBdOwogCiAKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbm90XG4iICkpOworCisgICAgICAgICAgICBhcmdzWzBdID0gY29uZCA/IDB4MTAwMDBMIDogMDsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfZXE6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRml4ZWQgIGNvbmQgPSBhcmdzWzBdID09IGFyZ3NbMV07CisKKwogICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKIAogICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7CkBAIC0yNDg5LDcgKzI2MTAsNiBAQAogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVuaW1wbGVtZW50ZWQ6CiAgICAgICAgICAgRlRfRVJST1IoKCAiVW5pbXBsZW1lbnRlZCBvcGNvZGU6ICVkIiwgaXBbLTFdICkpOwogCiAgICAgICAgICAgaWYgKCBpcFstMV0gPT0gMTIgKQpAQCAtMjUxMyw2ICsyNjMzLDExIEBACiAgIEZhaWw6CiAgICAgcmV0dXJuIGVycm9yOwogCisgIE1NX0Vycm9yOgorICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgIiBpbnZhbGlkIG9wY29kZSBmb3VuZCBpbiB0b3AgRElDVCBjaGFyc3RyaW5nXG4iKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKICAgU3ludGF4X0Vycm9yOgogICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczogc3ludGF4IGVycm9yXG4iICkpOwogICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwpAQCAtMjU4Niw3ICsyNzExLDggQEAKICAgICAgICAgaWYgKCAhZXJyb3IgKQogICAgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICk7CiAKICAgICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsICZjaGFyc3RyaW5nX2xlbiApOwogICAgICAgfQpAQCAtMjgxNiw2ICsyOTQyLDcgQEAKICAgICAgIGNmZl9kZWNvZGVyX2luaXQoICZkZWNvZGVyLCBmYWNlLCBzaXplLCBnbHlwaCwgaGludGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSApOwogCisgICAgICAvKiB0aGlzIGlzIGZvciBwdXJlIENGRnMgKi8KICAgICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfQURWQU5DRV9PTkxZICkKICAgICAgICAgZGVjb2Rlci53aWR0aF9vbmx5ID0gVFJVRTsKIApAQCAtMjgzNyw3ICsyOTY0LDggQEAKICAgICAgIGlmICggZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRSApCiAgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOwogICAgICAgZWxzZQogI2VuZGlmCiAgICAgICB7CkBAIC0yOTQ5LDcgKzMwNzcsNiBAQAogICAgICAgewogICAgICAgICBGVF9CQm94ICAgICAgICAgICAgY2JveDsKICAgICAgICAgRlRfR2x5cGhfTWV0cmljcyogIG1ldHJpY3MgPSAmZ2x5cGgtPnJvb3QubWV0cmljczsKLSAgICAgICAgRlRfVmVjdG9yICAgICAgICAgIGFkdmFuY2U7CiAgICAgICAgIEZUX0Jvb2wgICAgICAgICAgICBoYXNfdmVydGljYWxfaW5mbzsKIAogCkBAIC0zMDE0LDI2ICszMTQxLDI3IEBACiAKICAgICAgICAgZ2x5cGgtPnJvb3Qub3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX1JFVkVSU0VfRklMTDsKIAotICAgICAgICBpZiAoICEoIGZvbnRfbWF0cml4Lnh4ID09IDB4MTAwMDBMICYmCi0gICAgICAgICAgICAgICAgZm9udF9tYXRyaXgueXkgPT0gMHgxMDAwMEwgJiYKLSAgICAgICAgICAgICAgICBmb250X21hdHJpeC54eSA9PSAwICAgICAgICAmJgotICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnl4ID09IDAgICAgICAgICkgKQorICAgICAgICAvKiBhcHBseSB0aGUgZm9udCBtYXRyaXgsIGlmIGFueSAqLworICAgICAgICBpZiAoIGZvbnRfbWF0cml4Lnh4ICE9IDB4MTAwMDBMIHx8IGZvbnRfbWF0cml4Lnl5ICE9IDB4MTAwMDBMIHx8CisgICAgICAgICAgICAgZm9udF9tYXRyaXgueHkgIT0gMCAgICAgICAgfHwgZm9udF9tYXRyaXgueXggIT0gMCAgICAgICAgKQorICAgICAgICB7CiAgICAgICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oICZnbHlwaC0+cm9vdC5vdXRsaW5lLCAmZm9udF9tYXRyaXggKTsKIAotICAgICAgICBpZiAoICEoIGZvbnRfb2Zmc2V0LnggPT0gMCAmJgotICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LnkgPT0gMCApICkKKyAgICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IEZUX011bEZpeCggbWV0cmljcy0+aG9yaUFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnh4ICk7CisgICAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPSBGVF9NdWxGaXgoIG1ldHJpY3MtPnZlcnRBZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X21hdHJpeC55eSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmb250X29mZnNldC54IHx8IGZvbnRfb2Zmc2V0LnkgKQorICAgICAgICB7CiAgICAgICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoICZnbHlwaC0+cm9vdC5vdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X29mZnNldC54LCBmb250X29mZnNldC55ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LnkgKTsKIAotICAgICAgICBhZHZhbmNlLnggPSBtZXRyaWNzLT5ob3JpQWR2YW5jZTsKLSAgICAgICAgYWR2YW5jZS55ID0gMDsKLSAgICAgICAgRlRfVmVjdG9yX1RyYW5zZm9ybSggJmFkdmFuY2UsICZmb250X21hdHJpeCApOwotICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IGFkdmFuY2UueCArIGZvbnRfb2Zmc2V0Lng7Ci0KLSAgICAgICAgYWR2YW5jZS54ID0gMDsKLSAgICAgICAgYWR2YW5jZS55ID0gbWV0cmljcy0+dmVydEFkdmFuY2U7Ci0gICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZhZHZhbmNlLCAmZm9udF9tYXRyaXggKTsKLSAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPSBhZHZhbmNlLnkgKyBmb250X29mZnNldC55OworICAgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlICs9IGZvbnRfb2Zmc2V0Lng7CisgICAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgKz0gZm9udF9vZmZzZXQueTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgfHwgZm9yY2Vfc2NhbGluZyApCiAgICAgICAgIHsKQEAgLTMwNjQsOSArMzE5Miw3IEBACiAgICAgICAgIG1ldHJpY3MtPndpZHRoICA9IGNib3gueE1heCAtIGNib3gueE1pbjsKICAgICAgICAgbWV0cmljcy0+aGVpZ2h0ID0gY2JveC55TWF4IC0gY2JveC55TWluOwogCi0gICAgICAgIGlmICggIWZhY2UtPmhvcml6b250YWwubnVtYmVyX09mX0hNZXRyaWNzICkKLSAgICAgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggPSBjYm94LnhNaW47Ci0KKyAgICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYID0gY2JveC54TWluOwogICAgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSBjYm94LnlNYXg7CiAKICAgICAgICAgaWYgKCBoYXNfdmVydGljYWxfaW5mbyApCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmdsb2FkLmggYi9zcmMvY2ZmL2NmZmdsb2FkLmgKaW5kZXggNWYyNjU1Zi4uYjg3NWZiZSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZnbG9hZC5oCisrKyBiL3NyYy9jZmYvY2ZmZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGR0xPQURfSF9fCi0jZGVmaW5lIF9fQ0ZGR0xPQURfSF9fCisjaWZuZGVmIENGRkdMT0FEX0hfCisjZGVmaW5lIENGRkdMT0FEX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMjcsNyArMjI3LDggQEAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgY2hhcnN0cmluZ19iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgaW5fZGljdCApOwogI2VuZGlmCiAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKQEAgLTIzOSw3ICsyNDAsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRkdMT0FEX0hfXyAqLworI2VuZGlmIC8qIENGRkdMT0FEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmxvYWQuYyBiL3NyYy9jZmYvY2ZmbG9hZC5jCmluZGV4IGZjYjczNDguLjQ3MGZhODIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmbG9hZC5jCisrKyBiL3NyYy9jZmYvY2ZmbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIGFuZCBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zODIsMTMgKzM4MiwxNSBAQAogICBzdGF0aWMgRlRfRXJyb3IKICAgY2ZmX2luZGV4X2dldF9wb2ludGVycyggQ0ZGX0luZGV4ICAgaWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKioqICB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICAgcG9vbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgIHBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgIHBvb2xfc2l6ZSApCiAgIHsKICAgICBGVF9FcnJvciAgIGVycm9yICAgICA9IEZUX0Vycl9PazsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSAgICA9IGlkeC0+c3RyZWFtLT5tZW1vcnk7CiAKICAgICBGVF9CeXRlKiogIHQgICAgICAgICA9IE5VTEw7CiAgICAgRlRfQnl0ZSogICBuZXdfYnl0ZXMgPSBOVUxMOworICAgIEZUX1VMb25nICAgbmV3X3NpemU7CiAKIAogICAgICp0YWJsZSA9IE5VTEw7CkBAIC00MDAsMTAgKzQwMiwxMSBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCi0gICAgaWYgKCBpZHgtPmNvdW50ID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgIUZUX05FV19BUlJBWSggdCwgaWR4LT5jb3VudCArIDEgKSAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICggIXBvb2wgfHwgIUZUX0FMTE9DKCBuZXdfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LT5kYXRhX3NpemUgKyBpZHgtPmNvdW50ICkgKSApCisgICAgbmV3X3NpemUgPSBpZHgtPmRhdGFfc2l6ZSArIGlkeC0+Y291bnQ7CisKKyAgICBpZiAoIGlkeC0+Y291bnQgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgIUZUX05FV19BUlJBWSggdCwgaWR4LT5jb3VudCArIDEgKSAgICAgICAgICAgICYmCisgICAgICAgICAoICFwb29sIHx8ICFGVF9BTExPQyggbmV3X2J5dGVzLCBuZXdfc2l6ZSApICkgKQogICAgIHsKICAgICAgIEZUX1VMb25nICBuLCBjdXJfb2Zmc2V0OwogICAgICAgRlRfVUxvbmcgIGV4dHJhID0gMDsKQEAgLTQ1OSw2ICs0NjIsOCBAQAogCiAgICAgICBpZiAoIHBvb2wgKQogICAgICAgICAqcG9vbCA9IG5ld19ieXRlczsKKyAgICAgIGlmICggcG9vbF9zaXplICkKKyAgICAgICAgKnBvb2xfc2l6ZSA9IG5ld19zaXplOwogICAgIH0KIAogICBFeGl0OgpAQCAtNTAxLDggKzUwNiw4IEBACiAgICAgICAgICAgewogICAgICAgICAgICAgZWxlbWVudCsrOwogICAgICAgICAgICAgb2ZmMiA9IGNmZl9pbmRleF9yZWFkX29mZnNldCggaWR4LCAmZXJyb3IgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgd2hpbGUgKCBvZmYyID09IDAgJiYgZWxlbWVudCA8IGlkeC0+Y291bnQgKTsKKworICAgICAgICAgIH0gd2hpbGUgKCBvZmYyID09IDAgJiYgZWxlbWVudCA8IGlkeC0+Y291bnQgKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSAgIC8qIHVzZSBvZmZzZXRzIHRhYmxlICovCkBAIC01OTcsNyArNjAyLDggQEAKIAogICAgIGlmICggIUZUX0FMTE9DKCBuYW1lLCBieXRlX2xlbiArIDEgKSApCiAgICAgewotICAgICAgRlRfTUVNX0NPUFkoIG5hbWUsIGJ5dGVzLCBieXRlX2xlbiApOworICAgICAgaWYgKCBieXRlX2xlbiApCisgICAgICAgIEZUX01FTV9DT1BZKCBuYW1lLCBieXRlcywgYnl0ZV9sZW4gKTsKICAgICAgIG5hbWVbYnl0ZV9sZW5dID0gMDsKICAgICB9CiAgICAgY2ZmX2luZGV4X2ZvcmdldF9lbGVtZW50KCBpZHgsICZieXRlcyApOwpAQCAtODA5LDcgKzgxNSw3IEBACiAgICAgLyogV2hlbiBtdWx0aXBsZSBHSURzIG1hcCB0byB0aGUgc2FtZSBDSUQsIHdlIGNob29zZSB0aGUgbG93ZXN0ICovCiAgICAgLyogR0lELiAgVGhpcyBpcyBub3QgZGVzY3JpYmVkIGluIGFueSBzcGVjLCBidXQgaXQgbWF0Y2hlcyB0aGUgICovCiAgICAgLyogYmVoYXZpb3VyIG9mIHJlY2VudCBBY3JvcmVhZCB2ZXJzaW9ucy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgZm9yICggaiA9IChGVF9Mb25nKW51bV9nbHlwaHMgLSAxOyBqID49IDAgOyBqLS0gKQorICAgIGZvciAoIGogPSAoRlRfTG9uZyludW1fZ2x5cGhzIC0gMTsgaiA+PSAwOyBqLS0gKQogICAgICAgY2hhcnNldC0+Y2lkc1tjaGFyc2V0LT5zaWRzW2pdXSA9IChGVF9VU2hvcnQpajsKIAogICAgIGNoYXJzZXQtPm1heF9jaWQgICAgPSBtYXhfY2lkOwpAQCAtODcxLDggKzg3Nyw4IEBACiAgICAgRlRfVVNob3J0ICBnbHlwaF9zaWQ7CiAKIAotICAgIC8qIElmIHRoZSB0aGUgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiAyLCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSAqLwotICAgIC8qIGNoYXJzZXQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIElmIHRoZSBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIDIsIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGNoYXJzZXQgKi8KKyAgICAvKiB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCBvZmZzZXQgPiAyICkKICAgICB7CiAgICAgICBGVF9VSW50ICBqOwpAQCAtMTMxNiw3ICsxMzIyLDEyIEBACiAgICAgQ0ZGX1ByaXZhdGUgICAgICBwcml2ID0gJmZvbnQtPnByaXZhdGVfZGljdDsKIAogCi0gICAgY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLCBDRkZfQ09ERV9UT1BESUNULCAmZm9udC0+Zm9udF9kaWN0LCBsaWJyYXJ5ICk7CisgICAgY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgQ0ZGX0NPREVfVE9QRElDVCwKKyAgICAgICAgICAgICAgICAgICAgICZmb250LT5mb250X2RpY3QsCisgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgIDAgKTsKIAogICAgIC8qIHNldCBkZWZhdWx0cyAqLwogICAgIEZUX01FTV9aRVJPKCB0b3AsIHNpemVvZiAoICp0b3AgKSApOwpAQCAtMTM3MCw3ICsxMzgxLDEyIEBACiAgICAgICBwcml2LT5leHBhbnNpb25fZmFjdG9yID0gKEZUX0ZpeGVkKSggMC4wNiAqIDB4MTAwMDBMICk7CiAgICAgICBwcml2LT5ibHVlX3NjYWxlICAgICAgID0gKEZUX0ZpeGVkKSggMC4wMzk2MjUgKiAweDEwMDAwTCAqIDEwMDAgKTsKIAotICAgICAgY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLCBDRkZfQ09ERV9QUklWQVRFLCBwcml2LCBsaWJyYXJ5ICk7CisgICAgICBjZmZfcGFyc2VyX2luaXQoICZwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgIENGRl9DT0RFX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgICAgICAgIHByaXYsCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgIHRvcC0+bnVtX2Rlc2lnbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHRvcC0+bnVtX2F4ZXMgKTsKIAogICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggYmFzZV9vZmZzZXQgKyBmb250LT5mb250X2RpY3QucHJpdmF0ZV9vZmZzZXQgKSB8fAogICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggZm9udC0+Zm9udF9kaWN0LnByaXZhdGVfc2l6ZSApICAgICAgICAgICAgICAgICApCkBAIC0xNDAwLDcgKzE0MTYsNyBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgIGVycm9yID0gY2ZmX2luZGV4X2dldF9wb2ludGVycyggJmZvbnQtPmxvY2FsX3N1YnJzX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+bG9jYWxfc3VicnMsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmxvY2FsX3N1YnJzLCBOVUxMLCBOVUxMICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogICAgIH0KQEAgLTE0NzgsMTYgKzE0OTQsMTcgQEAKIAogICAgIC8qIHJlYWQgdGhlIG5hbWUsIHRvcCBkaWN0LCBzdHJpbmcgYW5kIGdsb2JhbCBzdWJycyBpbmRleCAqLwogICAgIGlmICggRlRfU0VUX0VSUk9SKCBjZmZfaW5kZXhfaW5pdCggJmZvbnQtPm5hbWVfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIDAgKSApICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgMCApICkgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9pbml0KCAmZm9udC0+Zm9udF9kaWN0X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAwICkgKSAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIDAgKSApICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgRlRfU0VUX0VSUk9SKCBjZmZfaW5kZXhfaW5pdCggJnN0cmluZ19pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgMSApICkgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAxICkgKSAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgIEZUX1NFVF9FUlJPUiggY2ZmX2luZGV4X2luaXQoICZmb250LT5nbG9iYWxfc3VicnNfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIDEgKSApICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgMSApICkgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9nZXRfcG9pbnRlcnMoICZzdHJpbmdfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5zdHJpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+c3RyaW5nX3Bvb2wgKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPnN0cmluZ19wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+c3RyaW5nX3Bvb2xfc2l6ZSApICkgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgZm9udC0+bnVtX3N0cmluZ3MgPSBzdHJpbmdfaW5kZXguY291bnQ7CkBAIC0xNDk1LDkgKzE1MTIsOSBAQAogICAgIGlmICggcHVyZV9jZmYgKQogICAgIHsKICAgICAgIC8qIHdlbGwsIHdlIGRvbid0IHJlYWxseSBmb3JnZXQgdGhlIGBkaXNhYmxlZCcgZm9udHMuLi4gKi8KLSAgICAgIHN1YmZvbnRfaW5kZXggPSAoRlRfVUludClmYWNlX2luZGV4OworICAgICAgc3ViZm9udF9pbmRleCA9IChGVF9VSW50KSggZmFjZV9pbmRleCAmIDB4RkZGRiApOwogCi0gICAgICBpZiAoIHN1YmZvbnRfaW5kZXggPj0gZm9udC0+bmFtZV9pbmRleC5jb3VudCApCisgICAgICBpZiAoIGZhY2VfaW5kZXggPiAwICYmIHN1YmZvbnRfaW5kZXggPj0gZm9udC0+bmFtZV9pbmRleC5jb3VudCApCiAgICAgICB7CiAgICAgICAgIEZUX0VSUk9SKCggImNmZl9mb250X2xvYWQ6IgogICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBzdWJmb250IGluZGV4IGZvciBwdXJlIENGRiBmb250ICglZClcbiIsCkBAIC0xNjE0LDcgKzE2MzEsNyBAQAogICAgIGZvbnQtPm51bV9nbHlwaHMgPSBmb250LT5jaGFyc3RyaW5nc19pbmRleC5jb3VudDsKIAogICAgIGVycm9yID0gY2ZmX2luZGV4X2dldF9wb2ludGVycyggJmZvbnQtPmdsb2JhbF9zdWJyc19pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5nbG9iYWxfc3VicnMsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5nbG9iYWxfc3VicnMsIE5VTEwsIE5VTEwgKTsKIAogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZsb2FkLmggYi9zcmMvY2ZmL2NmZmxvYWQuaAppbmRleCA0NTllN2IwLi4xZGQwN2JhIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmxvYWQuaAorKysgYi9zcmMvY2ZmL2NmZmxvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSAmIENGRiBkYXRhL3Byb2dyYW0gdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGTE9BRF9IX18KLSNkZWZpbmUgX19DRkZMT0FEX0hfXworI2lmbmRlZiBDRkZMT0FEX0hfCisjZGVmaW5lIENGRkxPQURfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTc3LDcgKzc3LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19DRkZMT0FEX0hfXyAqLworI2VuZGlmIC8qIENGRkxPQURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2Zmb2Jqcy5jIGIvc3JjL2NmZi9jZmZvYmpzLmMKaW5kZXggNGExZWYxMS4uMGYwNzY5NiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZvYmpzLmMKKysrIGIvc3JjL2NmZi9jZmZvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTU4MywxMCArNTgzLDE4IEBACiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogCisgICAgICAvKiBpZiB3ZSBhcmUgcGVyZm9ybWluZyBhIHNpbXBsZSBmb250IGZvcm1hdCBjaGVjaywgZXhpdCBpbW1lZGlhdGVseSAqLworICAgICAgLyogKHRoaXMgaXMgaGVyZSBmb3IgcHVyZSBDRkYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgeworICAgICAgICBjZmZmYWNlLT5udW1fZmFjZXMgPSAoRlRfTG9uZyljZmYtPm51bV9mYWNlczsKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICAgIH0KKwogICAgICAgY2ZmLT5wc2hpbnRlciA9IHBzaGludGVyOwogICAgICAgY2ZmLT5wc25hbWVzICA9IHBzbmFtZXM7CiAKLSAgICAgIGNmZmZhY2UtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworICAgICAgY2ZmZmFjZS0+ZmFjZV9pbmRleCA9IGZhY2VfaW5kZXggJiAweEZGRkY7CiAKICAgICAgIC8qIENvbXBsZW1lbnQgdGhlIHJvb3QgZmxhZ3Mgd2l0aCBzb21lIGludGVyZXN0aW5nIGluZm9ybWF0aW9uLiAqLwogICAgICAgLyogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIHB1cmUgQ0ZGIGFuZCBDRUYgZm9udHM7ICovCkBAIC02MTcsMTEgKzYyNSw0NCBAQAogICAgICAgICBGVF9UUkFDRTQoKCAiU0lEc1xuIiApKTsKIAogICAgICAgICAvKiBkdW1wIHN0cmluZyBpbmRleCwgaW5jbHVkaW5nIGRlZmF1bHQgc3RyaW5ncyBmb3IgY29udmVuaWVuY2UgKi8KLSAgICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgY2ZmLT5udW1fc3RyaW5ncyArIDM5MDsgaWR4KysgKQorICAgICAgICBmb3IgKCBpZHggPSAwOyBpZHggPD0gMzkwOyBpZHgrKyApCiAgICAgICAgIHsKICAgICAgICAgICBzID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsIGlkeCApOwogICAgICAgICAgIGlmICggcyApCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCIgICU1ZCAlc1xuIiwgaWR4LCBzICkpOworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAgJTVkICVzXG4iLCBpZHgsIHMgKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBJbiBNdWx0aXBsZSBNYXN0ZXIgQ0ZGcywgdHdvIFNJRHMgaG9sZCB0aGUgTm9ybWFsaXplIERlc2lnbiAgKi8KKyAgICAgICAgLyogVmVjdG9yIChORFYpIGFuZCBDb252ZXJ0IERlc2lnbiBWZWN0b3IgKENEVikgY2hhcnN0cmluZ3MsICAgICovCisgICAgICAgIC8qIHdoaWNoIG1heSBjb250YWluIE5VTEwgYnl0ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZGF0YSwgdG9vLiAqLworICAgICAgICAvKiBXZSB0aHVzIGFjY2VzcyBgY2ZmLT5zdHJpbmdzJyBkaXJlY3RseS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgZm9yICggaWR4ID0gMTsgaWR4IDwgY2ZmLT5udW1fc3RyaW5nczsgaWR4KysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSogICAgczEgICAgPSBjZmYtPnN0cmluZ3NbaWR4IC0gMV07CisgICAgICAgICAgRlRfQnl0ZSogICAgczIgICAgPSBjZmYtPnN0cmluZ3NbaWR4XTsKKyAgICAgICAgICBGVF9QdHJEaXN0ICBzMWxlbiA9IHMyIC0gczEgLSAxOyAvKiB3aXRob3V0IHRoZSBmaW5hbCBOVUxMIGJ5dGUgKi8KKyAgICAgICAgICBGVF9QdHJEaXN0ICBsOworCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICAlNWQgIiwgaWR4ICsgMzkwICkpOworICAgICAgICAgIGZvciAoIGwgPSAwOyBsIDwgczFsZW47IGwrKyApCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJWMiLCBzMVtsXSApKTsKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICAgICAgICB9CisKKyAgICAgICAgLyogcHJpbnQgbGFzdCBlbGVtZW50ICovCisgICAgICAgIGlmICggY2ZmLT5udW1fc3RyaW5ncyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9CeXRlKiAgICBzMSAgICA9IGNmZi0+c3RyaW5nc1tjZmYtPm51bV9zdHJpbmdzIC0gMV07CisgICAgICAgICAgRlRfQnl0ZSogICAgczIgICAgPSBjZmYtPnN0cmluZ19wb29sICsgY2ZmLT5zdHJpbmdfcG9vbF9zaXplOworICAgICAgICAgIEZUX1B0ckRpc3QgIHMxbGVuID0gczIgLSBzMSAtIDE7CisgICAgICAgICAgRlRfUHRyRGlzdCAgbDsKKworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiAgJTVkICIsIGNmZi0+bnVtX3N0cmluZ3MgKyAzOTAgKSk7CisgICAgICAgICAgZm9yICggbCA9IDA7IGwgPCBzMWxlbjsgbCsrICkKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIlYyIsIHMxW2xdICkpOworICAgICAgICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CiAgICAgICAgIH0KICAgICAgIH0KICNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLwpAQCAtNjI5LDEwICs2NzAsMTEgQEAKICAgICAgIGlmICggIWRpY3QtPmhhc19mb250X21hdHJpeCApCiAgICAgICAgIGRpY3QtPnVuaXRzX3Blcl9lbSA9IHB1cmVfY2ZmID8gMTAwMCA6IGZhY2UtPnJvb3QudW5pdHNfcGVyX0VNOwogCi0gICAgICAvKiBOb3JtYWxpemUgdGhlIGZvbnQgbWF0cml4IHNvIHRoYXQgYG1hdHJpeC0+eHgnIGlzIDE7IHRoZSAqLwotICAgICAgLyogc2NhbGluZyBpcyBkb25lIHdpdGggYHVuaXRzX3Blcl9lbScgdGhlbiAoYXQgdGhpcyBwb2ludCwgKi8KLSAgICAgIC8qIGl0IGFscmVhZHkgY29udGFpbnMgdGhlIHNjYWxpbmcgZmFjdG9yLCBidXQgd2l0aG91dCAgICAgICovCi0gICAgICAvKiBub3JtYWxpemF0aW9uIG9mIHRoZSBtYXRyaXgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogTm9ybWFsaXplIHRoZSBmb250IG1hdHJpeCBzbyB0aGF0IGBtYXRyaXgtPnl5JyBpcyAxOyBpZiAgKi8KKyAgICAgIC8qIGl0IGlzIHplcm8sIHdlIHVzZSBgbWF0cml4LT55eCcgaW5zdGVhZC4gIFRoZSBzY2FsaW5nIGlzICovCisgICAgICAvKiBkb25lIHdpdGggYHVuaXRzX3Blcl9lbScgdGhlbiAoYXQgdGhpcyBwb2ludCwgaXQgYWxyZWFkeSAqLworICAgICAgLyogY29udGFpbnMgdGhlIHNjYWxpbmcgZmFjdG9yLCBidXQgd2l0aG91dCBub3JtYWxpemF0aW9uICAgKi8KKyAgICAgIC8qIG9mIHRoZSBtYXRyaXgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgLyogTm90ZSB0aGF0IHRoZSBvZmZzZXRzIG11c3QgYmUgZXhwcmVzc2VkIGluIGludGVnZXIgZm9udCAgKi8KICAgICAgIC8qIHVuaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NDEsOSArNjgzLDEyIEBACiAgICAgICAgIEZUX01hdHJpeCogIG1hdHJpeCA9ICZkaWN0LT5mb250X21hdHJpeDsKICAgICAgICAgRlRfVmVjdG9yKiAgb2Zmc2V0ID0gJmRpY3QtPmZvbnRfb2Zmc2V0OwogICAgICAgICBGVF9VTG9uZyogICB1cG0gICAgPSAmZGljdC0+dW5pdHNfcGVyX2VtOwotICAgICAgICBGVF9GaXhlZCAgICB0ZW1wICAgPSBGVF9BQlMoIG1hdHJpeC0+eXkgKTsKKyAgICAgICAgRlRfRml4ZWQgICAgdGVtcDsKIAogCisgICAgICAgIHRlbXAgPSBtYXRyaXgtPnl5ID8gRlRfQUJTKCBtYXRyaXgtPnl5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBGVF9BQlMoIG1hdHJpeC0+eXggKTsKKwogICAgICAgICBpZiAoIHRlbXAgIT0gMHgxMDAwMEwgKQogICAgICAgICB7CiAgICAgICAgICAgKnVwbSA9IChGVF9VTG9uZylGVF9EaXZGaXgoIChGVF9Mb25nKSp1cG0sIHRlbXAgKTsKQEAgLTcxMSw3ICs3NTYsMTAgQEAKICAgICAgICAgbWF0cml4ID0gJnN1Yi0+Zm9udF9tYXRyaXg7CiAgICAgICAgIG9mZnNldCA9ICZzdWItPmZvbnRfb2Zmc2V0OwogICAgICAgICB1cG0gICAgPSAmc3ViLT51bml0c19wZXJfZW07Ci0gICAgICAgIHRlbXAgICA9IEZUX0FCUyggbWF0cml4LT55eSApOworCisgICAgICAgIHRlbXAgPSBtYXRyaXgtPnl5ID8gRlRfQUJTKCBtYXRyaXgtPnl5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBGVF9BQlMoIG1hdHJpeC0+eXggKTsKKwogCiAgICAgICAgIGlmICggdGVtcCAhPSAweDEwMDAwTCApCiAgICAgICAgIHsKQEAgLTc2NSw4ICs4MTMsOSBAQAogICAgICAgICAgIChGVF9TaG9ydCkoIGRpY3QtPnVuZGVybGluZV90aGlja25lc3MgPj4gMTYgKTsKIAogICAgICAgICAvKiByZXRyaWV2ZSBmb250IGZhbWlseSAmIHN0eWxlIG5hbWUgKi8KLSAgICAgICAgY2ZmZmFjZS0+ZmFtaWx5X25hbWUgPSBjZmZfaW5kZXhfZ2V0X25hbWUoIGNmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWZhY2VfaW5kZXggKTsKKyAgICAgICAgY2ZmZmFjZS0+ZmFtaWx5X25hbWUgPSBjZmZfaW5kZXhfZ2V0X25hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCkoIGZhY2VfaW5kZXggJiAweEZGRkYgKSApOwogICAgICAgICBpZiAoIGNmZmZhY2UtPmZhbWlseV9uYW1lICkKICAgICAgICAgewogICAgICAgICAgIGNoYXIqICBmdWxsICAgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwKQEAgLTEwNDYsNyArMTA5NSw3IEBACiAgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9IEZUX0NGRl9ISU5USU5HX0FET0JFOwogI2VuZGlmCiAKLSAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gRkFMU0U7CisgICAgZHJpdmVyLT5ub19zdGVtX2RhcmtlbmluZyA9IFRSVUU7CiAKICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMF0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxOwogICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1sxXSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTE7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZm9ianMuaCBiL3NyYy9jZmYvY2Zmb2Jqcy5oCmluZGV4IDNjYzk1MzEuLjlkYzc3NTMgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2Zmb2Jqcy5oCisrKyBiL3NyYy9jZmYvY2Zmb2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRkZPQkpTX0hfXwotI2RlZmluZSBfX0NGRk9CSlNfSF9fCisjaWZuZGVmIENGRk9CSlNfSF8KKyNkZWZpbmUgQ0ZGT0JKU19IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQ0ZGT0JKU19IX18gKi8KKyNlbmRpZiAvKiBDRkZPQkpTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBhcnNlLmMgYi9zcmMvY2ZmL2NmZnBhcnNlLmMKaW5kZXggMDYzYjM1MS4uYTRmOTg2YiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZwYXJzZS5jCisrKyBiL3NyYy9jZmYvY2ZmcGFyc2UuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgdG9rZW4gc3RyZWFtIHBhcnNlciAoYm9keSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiY2ZmZXJycy5oIgogI2luY2x1ZGUgImNmZnBpYy5oIgorI2luY2x1ZGUgImNmZmdsb2FkLmgiCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM5LDcgKzQwLDkgQEAKICAgY2ZmX3BhcnNlcl9pbml0KCBDRkZfUGFyc2VyICBwYXJzZXIsCiAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgY29kZSwKICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgbGlicmFyeSkKKyAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgIG51bV9kZXNpZ25zLAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgIG51bV9heGVzICkKICAgewogICAgIEZUX01FTV9aRVJPKCBwYXJzZXIsIHNpemVvZiAoICpwYXJzZXIgKSApOwogCkBAIC00Nyw2ICs1MCw4IEBACiAgICAgcGFyc2VyLT5vYmplY3RfY29kZSA9IGNvZGU7CiAgICAgcGFyc2VyLT5vYmplY3QgICAgICA9IG9iamVjdDsKICAgICBwYXJzZXItPmxpYnJhcnkgICAgID0gbGlicmFyeTsKKyAgICBwYXJzZXItPm51bV9kZXNpZ25zID0gbnVtX2Rlc2lnbnM7CisgICAgcGFyc2VyLT5udW1fYXhlcyAgICA9IG51bV9heGVzOwogICB9CiAKIApAQCAtNTE2LDcgKzUyMSwxMSBAQAogCiAgICAgaWYgKCBwYXJzZXItPnRvcCA+PSBwYXJzZXItPnN0YWNrICsgNiApCiAgICAgewotICAgICAgRlRfTG9uZyAgc2NhbGluZzsKKyAgICAgIEZUX0ZpeGVkICB2YWx1ZXNbNl07CisgICAgICBGVF9Mb25nICAgc2NhbGluZ3NbNl07CisKKyAgICAgIEZUX0xvbmcgIG1pbl9zY2FsaW5nLCBtYXhfc2NhbGluZzsKKyAgICAgIGludCAgICAgIGk7CiAKIAogICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CkBAIC01MjUsMjIgKzUzNCwzNiBAQAogCiAgICAgICAvKiBXZSBleHBlY3QgYSB3ZWxsLWZvcm1lZCBmb250IG1hdHJpeCwgdGhpcyBpcywgdGhlIG1hdHJpeCBlbGVtZW50cyAqLwogICAgICAgLyogYHh4JyBhbmQgYHl5JyBhcmUgb2YgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBtYWduaXR1ZGUuICBUbyBhdm9pZCAgKi8KLSAgICAgIC8qIGxvc3Mgb2YgcHJlY2lzaW9uLCB3ZSB1c2UgdGhlIG1hZ25pdHVkZSBvZiBlbGVtZW50IGB4eCcgdG8gc2NhbGUgICovCi0gICAgICAvKiBhbGwgb3RoZXIgZWxlbWVudHMuICBUaGUgc2NhbGluZyBmYWN0b3IgaXMgdGhlbiBjb250YWluZWQgaW4gdGhlICAqLwotICAgICAgLyogYHVuaXRzX3Blcl9lbScgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIGxvc3Mgb2YgcHJlY2lzaW9uLCB3ZSB1c2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgbGFyZ2VzdCBtYXRyaXggICAgICovCisgICAgICAvKiBlbGVtZW50IHRvIHNjYWxlIGFsbCBvdGhlciBlbGVtZW50cy4gIFRoZSBzY2FsaW5nIGZhY3RvciBpcyB0aGVuICAqLworICAgICAgLyogY29udGFpbmVkIGluIHRoZSBgdW5pdHNfcGVyX2VtJyB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgbWF0cml4LT54eCA9IGNmZl9wYXJzZV9maXhlZF9keW5hbWljKCBkYXRhKyssICZzY2FsaW5nICk7CisgICAgICBtYXhfc2NhbGluZyA9IEZUX0xPTkdfTUlOOworICAgICAgbWluX3NjYWxpbmcgPSBGVF9MT05HX01BWDsKIAotICAgICAgc2NhbGluZyA9IC1zY2FsaW5nOworICAgICAgZm9yICggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgICAgeworICAgICAgICB2YWx1ZXNbaV0gPSBjZmZfcGFyc2VfZml4ZWRfZHluYW1pYyggZGF0YSsrLCAmc2NhbGluZ3NbaV0gKTsKKyAgICAgICAgaWYgKCB2YWx1ZXNbaV0gKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBzY2FsaW5nc1tpXSA+IG1heF9zY2FsaW5nICkKKyAgICAgICAgICAgIG1heF9zY2FsaW5nID0gc2NhbGluZ3NbaV07CisgICAgICAgICAgaWYgKCBzY2FsaW5nc1tpXSA8IG1pbl9zY2FsaW5nICkKKyAgICAgICAgICAgIG1pbl9zY2FsaW5nID0gc2NhbGluZ3NbaV07CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgICAgaWYgKCBzY2FsaW5nIDwgMCB8fCBzY2FsaW5nID4gOSApCisgICAgICBpZiAoIG1heF9zY2FsaW5nIDwgLTkgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBtYXhfc2NhbGluZyA+IDAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCBtYXhfc2NhbGluZyAtIG1pbl9zY2FsaW5nICkgPCAwIHx8CisgICAgICAgICAgICggbWF4X3NjYWxpbmcgLSBtaW5fc2NhbGluZyApID4gOSApCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBkZWZhdWx0IG1hdHJpeCBpbiBjYXNlIG9mIHVubGlrZWx5IHZhbHVlcy4gKi8KIAogICAgICAgICBGVF9UUkFDRTEoKCAiY2ZmX3BhcnNlX2ZvbnRfbWF0cml4OiIKLSAgICAgICAgICAgICAgICAgICAgIiBzdHJhbmdlIHNjYWxpbmcgdmFsdWUgZm9yIHh4IGVsZW1lbnQgKCVkKSxcbiIKKyAgICAgICAgICAgICAgICAgICAgIiBzdHJhbmdlIHNjYWxpbmcgdmFsdWVzIChtaW5pbXVtICVkLCBtYXhpbXVtICVkKSxcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAgICAgICAgICAgICAgICIgdXNpbmcgZGVmYXVsdCBtYXRyaXhcbiIsIHNjYWxpbmcgKSk7CisgICAgICAgICAgICAgICAgICAgICIgdXNpbmcgZGVmYXVsdCBtYXRyaXhcbiIsIG1pbl9zY2FsaW5nLCBtYXhfc2NhbGluZyApKTsKIAogICAgICAgICBtYXRyaXgtPnh4ID0gMHgxMDAwMEw7CiAgICAgICAgIG1hdHJpeC0+eXggPSAwOwpAQCAtNTUzLDEzICs1NzYsNDIgQEAKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCi0gICAgICBtYXRyaXgtPnl4ID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSsrLCBzY2FsaW5nICk7Ci0gICAgICBtYXRyaXgtPnh5ID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSsrLCBzY2FsaW5nICk7Ci0gICAgICBtYXRyaXgtPnl5ID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSsrLCBzY2FsaW5nICk7Ci0gICAgICBvZmZzZXQtPnggID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSsrLCBzY2FsaW5nICk7Ci0gICAgICBvZmZzZXQtPnkgID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSwgICBzY2FsaW5nICk7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgICB7CisgICAgICAgIEZUX0ZpeGVkICB2YWx1ZSA9IHZhbHVlc1tpXTsKKyAgICAgICAgRlRfTG9uZyAgIGRpdmlzb3IsIGhhbGZfZGl2aXNvcjsKIAotICAgICAgKnVwbSA9IChGVF9VTG9uZylwb3dlcl90ZW5zW3NjYWxpbmddOworCisgICAgICAgIGlmICggIXZhbHVlICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkaXZpc29yICAgICAgPSBwb3dlcl90ZW5zW21heF9zY2FsaW5nIC0gc2NhbGluZ3NbaV1dOworICAgICAgICBoYWxmX2Rpdmlzb3IgPSBkaXZpc29yID4+IDE7CisKKyAgICAgICAgaWYgKCB2YWx1ZSA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9MT05HX01JTiArIGhhbGZfZGl2aXNvciA8IHZhbHVlICkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9ICggdmFsdWUgLSBoYWxmX2Rpdmlzb3IgKSAvIGRpdmlzb3I7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWVzW2ldID0gRlRfTE9OR19NSU4gLyBkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICggRlRfTE9OR19NQVggLSBoYWxmX2Rpdmlzb3IgPiB2YWx1ZSApCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSAoIHZhbHVlICsgaGFsZl9kaXZpc29yICkgLyBkaXZpc29yOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IEZUX0xPTkdfTUFYIC8gZGl2aXNvcjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBtYXRyaXgtPnh4ID0gdmFsdWVzWzBdOworICAgICAgbWF0cml4LT55eCA9IHZhbHVlc1sxXTsKKyAgICAgIG1hdHJpeC0+eHkgPSB2YWx1ZXNbMl07CisgICAgICBtYXRyaXgtPnl5ID0gdmFsdWVzWzNdOworICAgICAgb2Zmc2V0LT54ICA9IHZhbHVlc1s0XTsKKyAgICAgIG9mZnNldC0+eSAgPSB2YWx1ZXNbNV07CisKKyAgICAgICp1cG0gPSAoRlRfVUxvbmcpcG93ZXJfdGVuc1stbWF4X3NjYWxpbmddOwogCiAgICAgICBGVF9UUkFDRTQoKCAiIFslZiAlZiAlZiAlZiAlZiAlZl1cbiIsCiAgICAgICAgICAgICAgICAgICAoZG91YmxlKW1hdHJpeC0+eHggLyAqdXBtIC8gNjU1MzYsCkBAIC02NDksNiArNzAxLDU2IEBACiAgIH0KIAogCisgIC8qIFRoZSBgTXVsdGlwbGVNYXN0ZXInIG9wZXJhdG9yIGNvbWVzIGJlZm9yZSBhbnkgICovCisgIC8qIHRvcCBESUNUIG9wZXJhdG9ycyB0aGF0IGNvbnRhaW4gVDIgY2hhcnN0cmluZ3MuICovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9wYXJzZV9tdWx0aXBsZV9tYXN0ZXIoIENGRl9QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBDRkZfRm9udFJlY0RpY3QgIGRpY3QgPSAoQ0ZGX0ZvbnRSZWNEaWN0KXBhcnNlci0+b2JqZWN0OworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgLyogYmVhdXRpZnkgdHJhY2luZyBtZXNzYWdlICovCisgICAgaWYgKCBmdF90cmFjZV9sZXZlbHNbRlRfQ09NUE9ORU5UXSA8IDQgKQorICAgICAgRlRfVFJBQ0UxKCggIk11bHRpcGxlIE1hc3RlciBDRkZzIG5vdCBzdXBwb3J0ZWQgeWV0LCIKKyAgICAgICAgICAgICAgICAgICIgaGFuZGxpbmcgZmlyc3QgbWFzdGVyIGRlc2lnbiBvbmx5XG4iICkpOworICAgIGVsc2UKKyAgICAgIEZUX1RSQUNFMSgoICIgKG5vdCBzdXBwb3J0ZWQgeWV0LCIKKyAgICAgICAgICAgICAgICAgICIgaGFuZGxpbmcgZmlyc3QgbWFzdGVyIGRlc2lnbiBvbmx5KVxuIiApKTsKKyNlbmRpZgorCisgICAgZXJyb3IgPSBGVF9FUlIoIFN0YWNrX1VuZGVyZmxvdyApOworCisgICAgLyogY3VycmVudGx5LCB3ZSBoYW5kbGUgb25seSB0aGUgZmlyc3QgYXJndW1lbnQgKi8KKyAgICBpZiAoIHBhcnNlci0+dG9wID49IHBhcnNlci0+c3RhY2sgKyA1ICkKKyAgICB7CisgICAgICBGVF9Mb25nICBudW1fZGVzaWducyA9IGNmZl9wYXJzZV9udW0oIHBhcnNlci0+c3RhY2sgKTsKKworCisgICAgICBpZiAoIG51bV9kZXNpZ25zID4gMTYgfHwgbnVtX2Rlc2lnbnMgPCAyICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX3BhcnNlX211bHRpcGxlX21hc3RlcjoiCisgICAgICAgICAgICAgICAgICAgIiBJbnZhbGlkIG51bWJlciBvZiBkZXNpZ25zXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGRpY3QtPm51bV9kZXNpZ25zICAgPSAoRlRfVVNob3J0KW51bV9kZXNpZ25zOworICAgICAgICBkaWN0LT5udW1fYXhlcyAgICAgID0gKEZUX1VTaG9ydCkoIHBhcnNlci0+dG9wIC0gcGFyc2VyLT5zdGFjayAtIDQgKTsKKworICAgICAgICBwYXJzZXItPm51bV9kZXNpZ25zID0gZGljdC0+bnVtX2Rlc2lnbnM7CisgICAgICAgIHBhcnNlci0+bnVtX2F4ZXMgICAgPSBkaWN0LT5udW1fYXhlczsKKworICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCiAgIHN0YXRpYyBGVF9FcnJvcgogICBjZmZfcGFyc2VfY2lkX3JvcyggQ0ZGX1BhcnNlciAgcGFyc2VyICkKICAgewpAQCAtOTcyLDcgKzEwNzQsNyBAQAogICAgICAgICBpZiAoIHBhcnNlci0+dG9wIC0gcGFyc2VyLT5zdGFjayA+PSBDRkZfTUFYX1NUQUNLX0RFUFRIICkKICAgICAgICAgICBnb3RvIFN0YWNrX092ZXJmbG93OwogCi0gICAgICAgICpwYXJzZXItPnRvcCArKyA9IHA7CisgICAgICAgICpwYXJzZXItPnRvcCsrID0gcDsKIAogICAgICAgICAvKiBub3csIHNraXAgaXQgKi8KICAgICAgICAgaWYgKCB2ID09IDMwICkKQEAgLTEwMDEsNiArMTEwMywxMzYgQEAKICAgICAgICAgZWxzZSBpZiAoIHYgPiAyNDYgKQogICAgICAgICAgIHAgKz0gMTsKICAgICAgIH0KKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgICBlbHNlIGlmICggdiA9PSAzMSApCisgICAgICB7CisgICAgICAgIC8qIGEgVHlwZSAyIGNoYXJzdHJpbmcgKi8KKworICAgICAgICBDRkZfRGVjb2RlciAgZGVjb2RlcjsKKyAgICAgICAgQ0ZGX0ZvbnRSZWMgIGNmZl9yZWM7CisgICAgICAgIEZUX0J5dGUqICAgICBjaGFyc3RyaW5nX2Jhc2U7CisgICAgICAgIEZUX1VMb25nICAgICBjaGFyc3RyaW5nX2xlbjsKKworICAgICAgICBGVF9GaXhlZCogIHN0YWNrOworICAgICAgICBGVF9CeXRlKiAgIHE7CisKKworICAgICAgICBjaGFyc3RyaW5nX2Jhc2UgPSArK3A7CisKKyAgICAgICAgLyogc2VhcmNoIGBlbmRjaGFyJyBvcGVyYXRvciAqLworICAgICAgICBmb3IgKDs7KQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBwID49IGxpbWl0ICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICBpZiAoICpwID09IDE0ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHArKzsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXJzdHJpbmdfbGVuID0gKEZUX1VMb25nKSggcCAtIGNoYXJzdHJpbmdfYmFzZSApICsgMTsKKworICAgICAgICAvKiBjb25zdHJ1Y3QgQ0ZGX0RlY29kZXIgb2JqZWN0ICovCisgICAgICAgIEZUX01FTV9aRVJPKCAmZGVjb2Rlciwgc2l6ZW9mICggZGVjb2RlciApICk7CisgICAgICAgIEZUX01FTV9aRVJPKCAmY2ZmX3JlYywgc2l6ZW9mICggY2ZmX3JlYyApICk7CisKKyAgICAgICAgY2ZmX3JlYy50b3BfZm9udC5mb250X2RpY3QubnVtX2Rlc2lnbnMgPSBwYXJzZXItPm51bV9kZXNpZ25zOworICAgICAgICBjZmZfcmVjLnRvcF9mb250LmZvbnRfZGljdC5udW1fYXhlcyAgICA9IHBhcnNlci0+bnVtX2F4ZXM7CisgICAgICAgIGRlY29kZXIuY2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJmNmZl9yZWM7CisKKyAgICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggJmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKTsKKworICAgICAgICAvKiBOb3cgY29weSB0aGUgc3RhY2sgZGF0YSBpbiB0aGUgdGVtcG9yYXJ5IGRlY29kZXIgb2JqZWN0LCAgICAqLworICAgICAgICAvKiBjb252ZXJ0aW5nIGl0IGJhY2sgdG8gY2hhcnN0cmluZyBudW1iZXIgcmVwcmVzZW50YXRpb25zICAgICAqLworICAgICAgICAvKiAodGhpcyBpcyB1Z2x5LCBJIGtub3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBXZSBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIHRvcCBESUNUIGNoYXJzdHJpbmcgdW5kZXIgdGhlICAgICAqLworICAgICAgICAvKiBhc3N1bXB0aW9uIHRoYXQgdGhlIGNoYXJzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdCAqLworICAgICAgICAvKiBvZiBgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MnIGlzIHNob3J0ZXIsIHdoaWNoIHNob3VsZCAqLworICAgICAgICAvKiBiZSBhbHdheXMgdHJ1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHEgICAgID0gY2hhcnN0cmluZ19iYXNlIC0gMTsKKyAgICAgICAgc3RhY2sgPSBkZWNvZGVyLnN0YWNrOworCisgICAgICAgIHdoaWxlICggc3RhY2sgPCBkZWNvZGVyLnRvcCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VTG9uZyAgbnVtOworICAgICAgICAgIEZUX0Jvb2wgICBuZWc7CisKKworICAgICAgICAgIGlmICggcGFyc2VyLT50b3AgLSBwYXJzZXItPnN0YWNrID49IENGRl9NQVhfU1RBQ0tfREVQVEggKQorICAgICAgICAgICAgZ290byBTdGFja19PdmVyZmxvdzsKKworICAgICAgICAgICpwYXJzZXItPnRvcCsrID0gcTsKKworICAgICAgICAgIGlmICggKnN0YWNrIDwgMCApCisgICAgICAgICAgeworICAgICAgICAgICAgbnVtID0gKEZUX1VMb25nKS0qc3RhY2s7CisgICAgICAgICAgICBuZWcgPSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbnVtID0gKEZUX1VMb25nKSpzdGFjazsKKyAgICAgICAgICAgIG5lZyA9IDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBudW0gJiAweEZGRkZVICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIG5lZyApCisgICAgICAgICAgICAgIG51bSA9IChGVF9VTG9uZyktbnVtOworCisgICAgICAgICAgICAqcSsrID0gMjU1OworICAgICAgICAgICAgKnErKyA9ICggbnVtICYgMHhGRjAwMDAwMFUgKSA+PiAyNDsKKyAgICAgICAgICAgICpxKysgPSAoIG51bSAmIDB4MDBGRjAwMDBVICkgPj4gMTY7CisgICAgICAgICAgICAqcSsrID0gKCBudW0gJiAweDAwMDBGRjAwVSApID4+ICA4OworICAgICAgICAgICAgKnErKyA9ICAgbnVtICYgMHgwMDAwMDBGRlU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBudW0gPj49IDE2OworCisgICAgICAgICAgICBpZiAoIG5lZyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggbnVtIDw9IDEwNyApCisgICAgICAgICAgICAgICAgKnErKyA9IChGVF9CeXRlKSggMTM5IC0gbnVtICk7CisgICAgICAgICAgICAgIGVsc2UgaWYgKCBudW0gPD0gMTEzMSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcSsrID0gKEZUX0J5dGUpKCAoICggbnVtIC0gMTA4ICkgPj4gOCApICsgMjUxICk7CisgICAgICAgICAgICAgICAgKnErKyA9IChGVF9CeXRlKSggKCBudW0gLSAxMDggKSAmIDB4RkYgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBudW0gPSAoRlRfVUxvbmcpLW51bTsKKworICAgICAgICAgICAgICAgICpxKysgPSAyODsKKyAgICAgICAgICAgICAgICAqcSsrID0gKEZUX0J5dGUpKCBudW0gPj4gOCApOworICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoIG51bSAmIDB4RkYgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIG51bSA8PSAxMDcgKQorICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoIG51bSArIDEzOSApOworICAgICAgICAgICAgICBlbHNlIGlmICggbnVtIDw9IDExMzEgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnErKyA9IChGVF9CeXRlKSggKCAoIG51bSAtIDEwOCApID4+IDggKSArIDI0NyApOworICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoICggbnVtIC0gMTA4ICkgJiAweEZGICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnErKyA9IDI4OworICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoIG51bSA+PiA4ICk7CisgICAgICAgICAgICAgICAgKnErKyA9IChGVF9CeXRlKSggbnVtICYgMHhGRiApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgc3RhY2srKzsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmIC8qIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgKi8KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgLyogVGhpcyBpcyBub3QgYSBudW1iZXIsIGhlbmNlIGl0J3MgYW4gb3BlcmF0b3IuICBDb21wdXRlIGl0cyBjb2RlICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBhcnNlLmggYi9zcmMvY2ZmL2NmZnBhcnNlLmgKaW5kZXggOGFkMDJlYS4uYTk1OTcwZSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZwYXJzZS5oCisrKyBiL3NyYy9jZmYvY2ZmcGFyc2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgdG9rZW4gc3RyZWFtIHBhcnNlciAoc3BlY2lmaWNhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGX1BBUlNFX0hfXwotI2RlZmluZSBfX0NGRl9QQVJTRV9IX18KKyNpZm5kZWYgQ0ZGUEFSU0VfSF8KKyNkZWZpbmUgQ0ZGUEFSU0VfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM2LDE2ICszNiwxOSBAQAogCiAgIHR5cGVkZWYgc3RydWN0ICBDRkZfUGFyc2VyUmVjXwogICB7Ci0gICAgRlRfTGlicmFyeSBsaWJyYXJ5OwotICAgIEZUX0J5dGUqICAgc3RhcnQ7Ci0gICAgRlRfQnl0ZSogICBsaW1pdDsKLSAgICBGVF9CeXRlKiAgIGN1cnNvcjsKKyAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgIEZUX0J5dGUqICAgIHN0YXJ0OworICAgIEZUX0J5dGUqICAgIGxpbWl0OworICAgIEZUX0J5dGUqICAgIGN1cnNvcjsKIAotICAgIEZUX0J5dGUqICAgc3RhY2tbQ0ZGX01BWF9TVEFDS19ERVBUSCArIDFdOwotICAgIEZUX0J5dGUqKiAgdG9wOworICAgIEZUX0J5dGUqICAgIHN0YWNrW0NGRl9NQVhfU1RBQ0tfREVQVEggKyAxXTsKKyAgICBGVF9CeXRlKiogICB0b3A7CiAKLSAgICBGVF9VSW50ICAgIG9iamVjdF9jb2RlOwotICAgIHZvaWQqICAgICAgb2JqZWN0OworICAgIEZUX1VJbnQgICAgIG9iamVjdF9jb2RlOworICAgIHZvaWQqICAgICAgIG9iamVjdDsKKworICAgIEZUX1VTaG9ydCAgIG51bV9kZXNpZ25zOyAvKiBhIGNvcHkgb2YgYENGRl9Gb250UmVjRGljdC0+bnVtX2Rlc2lnbnMnICovCisgICAgRlRfVVNob3J0ICAgbnVtX2F4ZXM7ICAgIC8qIGEgY29weSBvZiBgQ0ZGX0ZvbnRSZWNEaWN0LT5udW1fYXhlcycgICAgKi8KIAogICB9IENGRl9QYXJzZXJSZWMsICpDRkZfUGFyc2VyOwogCkBAIC01NCw3ICs1Nyw5IEBACiAgIGNmZl9wYXJzZXJfaW5pdCggQ0ZGX1BhcnNlciAgcGFyc2VyLAogICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGNvZGUsCiAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgb2JqZWN0LAotICAgICAgICAgICAgICAgICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkpOworICAgICAgICAgICAgICAgICAgIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgbnVtX2Rlc2lnbnMsCisgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgbnVtX2F4ZXMgKTsKIAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICBjZmZfcGFyc2VyX3J1biggQ0ZGX1BhcnNlciAgcGFyc2VyLApAQCAtMTAwLDcgKzEwNSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0ZGX1BBUlNFX0hfXyAqLworI2VuZGlmIC8qIENGRlBBUlNFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBpYy5jIGIvc3JjL2NmZi9jZmZwaWMuYwppbmRleCBkNDBkZWM1Li5hMGJjMzRmIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnBpYy5jCisrKyBiL3NyYy9jZmYvY2ZmcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGNmZiBtb2R1bGUuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmcGljLmggYi9zcmMvY2ZmL2NmZnBpYy5oCmluZGV4IGEyOTYyMGUuLmJlZDZiMzUgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmcGljLmgKKysrIGIvc3JjL2NmZi9jZmZwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgY2ZmIG1vZHVsZS4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTIgKzE2LDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRkZQSUNfSF9fCi0jZGVmaW5lIF9fQ0ZGUElDX0hfXworI2lmbmRlZiBDRkZQSUNfSF8KKyNkZWZpbmUgQ0ZGUElDX0hfCiAKIAotRlRfQkVHSU5fSEVBREVSCi0KICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICiAKIApAQCAtNDksNiArNDcsOCBAQAogI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKIAogCitGVF9CRUdJTl9IRUFERVIKKwogICB0eXBlZGVmIHN0cnVjdCAgQ2ZmTW9kdWxlUElDXwogICB7CiAgICAgRlRfU2VydmljZURlc2NSZWMqICAgICAgICBjZmZfc2VydmljZXM7CkBAIC05NiwxMyArOTYsMTMgQEAKICAgRlRfRXJyb3IKICAgY2ZmX2RyaXZlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCitGVF9FTkRfSEVBREVSCisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgLyogKi8KIAotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogX19DRkZQSUNfSF9fICovCisjZW5kaWYgLyogQ0ZGUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnRva2VuLmggYi9zcmMvY2ZmL2NmZnRva2VuLmgKaW5kZXggNWIzMjA3Ni4uMjI2MzdjNyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZ0b2tlbi5oCisrKyBiL3NyYy9jZmYvY2ZmdG9rZW4uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgdG9rZW4gZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzgsNiArMzgsOSBAQAogICBDRkZfRklFTERfTlVNICAgICAoIDEzLCAgICB1bmlxdWVfaWQsICAgICAgICAgICAiVW5pcXVlSUQiICkKICAgQ0ZGX0ZJRUxEX0NBTExCQUNLKCA1LCAgICAgZm9udF9iYm94LCAgICAgICAgICAgIkZvbnRCQm94IiApCiAgIENGRl9GSUVMRF9OVU0gICAgICggMHgxMDgsIHN0cm9rZV93aWR0aCwgICAgICAgICJTdHJva2VXaWR0aCIgKQorI2lmIDAKKyAgQ0ZGX0ZJRUxEX0RFTFRBICAgKCAxNCwgICAgeHVpZCwgMTYsICAgICAgICAgICAgIlhVSUQiICkKKyNlbmRpZgogICBDRkZfRklFTERfTlVNICAgICAoIDE1LCAgICBjaGFyc2V0X29mZnNldCwgICAgICAiY2hhcnNldCIgKQogICBDRkZfRklFTERfTlVNICAgICAoIDE2LCAgICBlbmNvZGluZ19vZmZzZXQsICAgICAiRW5jb2RpbmciICkKICAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAxNywgICAgY2hhcnN0cmluZ3Nfb2Zmc2V0LCAgIkNoYXJTdHJpbmdzIiApCkBAIC00OCw4ICs1MSwxMyBAQAogI2lmIDAKICAgQ0ZGX0ZJRUxEX1NUUklORyAgKCAweDExNiwgYmFzZV9mb250X25hbWUsICAgICAgIkJhc2VGb250TmFtZSIgKQogICBDRkZfRklFTERfREVMVEEgICAoIDB4MTE3LCBiYXNlX2ZvbnRfYmxlbmQsIDE2LCAiQmFzZUZvbnRCbGVuZCIgKQorI2VuZGlmCisKKyAgLyogdGhlIG5leHQgdHdvIG9wZXJhdG9ycyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiAqLworICAvKiBpbiB2ZXJzaW9uIDE2LU1hcmNoLTIwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIENGRl9GSUVMRF9DQUxMQkFDSyggMHgxMTgsIG11bHRpcGxlX21hc3RlciwgICAgICJNdWx0aXBsZU1hc3RlciIgKQotICBDRkZfRklFTERfQ0FMTEJBQ0soIDB4MTE5LCBibGVuZF9heGlzX3R5cGVzLCAgICAiQmxlbmRBeGlzVHlwZXMiICkKKyNpZiAwCisgIENGRl9GSUVMRF9DQUxMQkFDSyggMHgxMUEsIGJsZW5kX2F4aXNfdHlwZXMsICAgICJCbGVuZEF4aXNUeXBlcyIgKQogI2VuZGlmCiAKICAgQ0ZGX0ZJRUxEX0NBTExCQUNLKCAweDExRSwgY2lkX3JvcywgICAgICAgICAgICAgICJST1MiICkKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmdHlwZXMuaCBiL3NyYy9jZmYvY2ZmdHlwZXMuaAppbmRleCBkZThhNWVlLi40NDI2YzdlIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnR5cGVzLmgKKysrIGIvc3JjL2NmZi9jZmZ0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgT3BlblR5cGUvQ0ZGIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRkZUWVBFU19IX18KLSNkZWZpbmUgX19DRkZUWVBFU19IX18KKyNpZm5kZWYgQ0ZGVFlQRVNfSF8KKyNkZWZpbmUgQ0ZGVFlQRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE0NSw2ICsxNDUsMTIgQEAKICAgICBGVF9VTG9uZyAgIGNpZF9mZF9zZWxlY3Rfb2Zmc2V0OwogICAgIEZUX1VJbnQgICAgY2lkX2ZvbnRfbmFtZTsKIAorICAgIC8qIHRoZSBuZXh0IGZpZWxkcyBjb21lIGZyb20gdGhlIGRhdGEgb2YgdGhlIGRlcHJlY2F0ZWQgICAgICAgICAgKi8KKyAgICAvKiBgTXVsdGlwbGVNYXN0ZXInIG9wZXJhdG9yOyB0aGV5IGFyZSBuZWVkZWQgdG8gcGFyc2UgdGhlIChhbHNvICovCisgICAgLyogZGVwcmVjYXRlZCkgYGJsZW5kJyBvcGVyYXRvciBpbiBUeXBlIDIgY2hhcnN0cmluZ3MgICAgICAgICAgICAqLworICAgIEZUX1VTaG9ydCAgbnVtX2Rlc2lnbnM7CisgICAgRlRfVVNob3J0ICBudW1fYXhlczsKKwogICB9IENGRl9Gb250UmVjRGljdFJlYywgKkNGRl9Gb250UmVjRGljdDsKIAogCkBAIC0yNTAsNiArMjU2LDcgQEAKICAgICBGVF9VSW50ICAgICAgICAgIG51bV9zdHJpbmdzOwogICAgIEZUX0J5dGUqKiAgICAgICAgc3RyaW5nczsKICAgICBGVF9CeXRlKiAgICAgICAgIHN0cmluZ19wb29sOworICAgIEZUX1VMb25nICAgICAgICAgc3RyaW5nX3Bvb2xfc2l6ZTsKIAogICAgIENGRl9TdWJGb250UmVjICAgdG9wX2ZvbnQ7CiAgICAgRlRfVUludCAgICAgICAgICBudW1fc3ViZm9udHM7CkBAIC0yNzgsNyArMjg1LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19DRkZUWVBFU19IX18gKi8KKyNlbmRpZiAvKiBDRkZUWVBFU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d6aXAvZnRnemlwLmMgYi9zcmMvZ3ppcC9mdGd6aXAuYwppbmRleCA4NzllYjg4Li45Y2FiODBlIDEwMDY0NAotLS0gYS9zcmMvZ3ppcC9mdGd6aXAuYworKysgYi9zcmMvZ3ppcC9mdGd6aXAuYwpAQCAtOCw3ICs4LDcgQEAKIC8qICBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAgICAgICAgICAgICovCiAvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEd6aXBfRXJyXwpAQCAtNTksNyArNTksNyBAQAogIC8qIG9yaWdpbmFsIFpMaWIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmbmRlZiBVU0VfWkxJQl9aQ0FMTE9DCi0jZGVmaW5lIE1ZX1pDQUxMT0MgLyogcHJldmVudCBhbGwgemNhbGxvYygpICYgemZyZWUoKSBpbiB6dXRpbHMuYyAqLworI2RlZmluZSBNWV9aQ0FMTE9DIC8qIHByZXZlbnQgYWxsIHpjYWxsb2MoKSAmIHpmcmVlKCkgaW4genV0aWwuYyAqLwogI2VuZGlmCiAKICNpbmNsdWRlICJ6bGliLmgiCkBAIC0zNzcsNyArMzc3LDEwIEBACiAgICAgICBzaXplID0gc3RyZWFtLT5yZWFkKCBzdHJlYW0sIHN0cmVhbS0+cG9zLCB6aXAtPmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR1pJUF9CVUZGRVJfU0laRSApOwogICAgICAgaWYgKCBzaXplID09IDAgKQorICAgICAgeworICAgICAgICB6aXAtPmxpbWl0ID0gemlwLT5jdXJzb3I7CiAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0zODYsNyArMzg5LDEwIEBACiAgICAgICAgIHNpemUgPSBGVF9HWklQX0JVRkZFUl9TSVpFOwogCiAgICAgICBpZiAoIHNpemUgPT0gMCApCisgICAgICB7CisgICAgICAgIHppcC0+bGltaXQgPSB6aXAtPmN1cnNvcjsKICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKyAgICAgIH0KIAogICAgICAgRlRfTUVNX0NPUFkoIHppcC0+aW5wdXQsIHN0cmVhbS0+YmFzZSArIHN0cmVhbS0+cG9zLCBzaXplICk7CiAgICAgfQpAQCAtNDMzLDcgKzQzOSw4IEBACiAgICAgICB9CiAgICAgICBlbHNlIGlmICggZXJyICE9IFpfT0sgKQogICAgICAgewotICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKyAgICAgICAgemlwLT5saW1pdCA9IHppcC0+Y3Vyc29yOworICAgICAgICBlcnJvciAgICAgID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CkBAIC01NTcsMTkgKzU2NCwyMiBAQAogCiAgICAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IE5VTEw7CiAgICAgfQorCisgICAgaWYgKCAhc3RyZWFtLT5yZWFkICkKKyAgICAgIEZUX0ZSRUUoIHN0cmVhbS0+YmFzZSApOwogICB9CiAKIAotICBzdGF0aWMgRlRfVUxvbmcKLSAgZnRfZ3ppcF9zdHJlYW1faW8oIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBwb3MsCi0gICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQorICBzdGF0aWMgdW5zaWduZWQgbG9uZworICBmdF9nemlwX3N0cmVhbV9pbyggRlRfU3RyZWFtICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIGNvdW50ICkKICAgewogICAgIEZUX0daaXBGaWxlICB6aXAgPSAoRlRfR1ppcEZpbGUpc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXI7CiAKIAotICAgIHJldHVybiBmdF9nemlwX2ZpbGVfaW8oIHppcCwgcG9zLCBidWZmZXIsIGNvdW50ICk7CisgICAgcmV0dXJuIGZ0X2d6aXBfZmlsZV9pbyggemlwLCBvZmZzZXQsIGJ1ZmZlciwgY291bnQgKTsKICAgfQogCiAKQEAgLTU4NCw3ICs1OTQsNyBAQAogICAgIG9sZF9wb3MgPSBzdHJlYW0tPnBvczsKICAgICBpZiAoICFGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCBzdHJlYW0tPnNpemUgLSA0ICkgKQogICAgIHsKLSAgICAgIHJlc3VsdCA9IEZUX1N0cmVhbV9SZWFkVUxvbmcoIHN0cmVhbSwgJmVycm9yICk7CisgICAgICByZXN1bHQgPSBGVF9TdHJlYW1fUmVhZFVMb25nTEUoIHN0cmVhbSwgJmVycm9yICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgcmVzdWx0ID0gMDsKIApAQCAtNjgxLDExICs2OTEsMTUgQEAKICAgICAgICAgfQogICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICAgIH0KKworICAgICAgaWYgKCB6aXBfc2l6ZSApCisgICAgICAgIHN0cmVhbS0+c2l6ZSA9IHppcF9zaXplOworICAgICAgZWxzZQorICAgICAgICBzdHJlYW0tPnNpemUgID0gMHg3RkZGRkZGRkw7ICAvKiBkb24ndCBrbm93IHRoZSByZWFsIHNpemUhICovCiAgICAgfQogCi0gICAgc3RyZWFtLT5zaXplICA9IDB4N0ZGRkZGRkZMOyAgLyogZG9uJ3Qga25vdyB0aGUgcmVhbCBzaXplISAqLwogICAgIHN0cmVhbS0+cG9zICAgPSAwOwotICAgIHN0cmVhbS0+YmFzZSAgPSAwOworICAgIHN0cmVhbS0+YmFzZSAgPSBOVUxMOwogICAgIHN0cmVhbS0+cmVhZCAgPSBmdF9nemlwX3N0cmVhbV9pbzsKICAgICBzdHJlYW0tPmNsb3NlID0gZnRfZ3ppcF9zdHJlYW1fY2xvc2U7CiAKZGlmZiAtLWdpdCBhL3NyYy9nemlwL3psaWIuaCBiL3NyYy9nemlwL3psaWIuaAppbmRleCA1MGQwZDNmLi5kMzYxZmY0IDEwMDY0NAotLS0gYS9zcmMvZ3ppcC96bGliLmgKKysrIGIvc3JjL2d6aXAvemxpYi5oCkBAIC01NjAsNyArNTYwLDcgQEAKICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLCBaX0JVRl9FUlJPUgogICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLAogICBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LiBJbiB0aGUgc3VjY2VzcwotICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZiB0b3RhbF9pbiB3aGljaAorICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4gd2hpY2gKICAgaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuIEluIHRoZSBlcnJvciBjYXNlLCB0aGUKICAgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaCB0aW1lLAogICB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMgYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCmluZGV4IGJmZGIzZWQuLjhmMTMxYmUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGFsZ28uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGhpbnRpbmcgYWxnb3JpdGhtIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpAQCAtNzc5LDcgKzc3OSw3IEBACiAgICAgICAgICAgICogSXQgdHVybnMgb3V0IHRob3VnaCB0aGF0IG1pbmltaXppbmcgdGhlIHRvdGFsIG51bWJlciBvZiBsaXQKICAgICAgICAgICAgKiBwaXhlbHMgaXMgYWxzbyBpbXBvcnRhbnQsIHNvIHBvc2l0aW9uIEMpLCB3aXRoIG9uZSBlZGdlCiAgICAgICAgICAgICogYWxpZ25lZCB3aXRoIGEgcGl4ZWwgYm91bmRhcnkgaXMgYWN0dWFsbHkgcHJlZmVyYWJsZQotICAgICAgICAgICAqIHRvIEEpLiAgVGhlcmUgYXJlIGFsc28gbW9yZSBwb3NzaWJpbGUgcG9zaXRpb25zIGZvciBDKSB0aGFuCisgICAgICAgICAgICogdG8gQSkuICBUaGVyZSBhcmUgYWxzbyBtb3JlIHBvc3NpYmxlIHBvc2l0aW9ucyBmb3IgQykgdGhhbgogICAgICAgICAgICAqIGZvciBBKSBvciBCKSwgc28gaXQgaW52b2x2ZXMgbGVzcyBkaXN0b3J0aW9uIG9mIHRoZSBvdmVyYWxsCiAgICAgICAgICAgICogY2hhcmFjdGVyIHNoYXBlLgogICAgICAgICAgICAqLwpAQCAtODAyLDcgKzgwMiw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIFdlIGNob29zZSBiZXR3ZWVuIEIpIGFuZCBDKSBhYm92ZSBiYXNlZCBvbiB0aGUgYW1vdW50Ci0gICAgICAgICAgICAgKiBvZiBmcmFjdGluYWwgc3RlbSB3aWR0aDsgZm9yIHNtYWxsIGFtb3VudHMsIGNob29zZQorICAgICAgICAgICAgICogb2YgZnJhY3Rpb25hbCBzdGVtIHdpZHRoOyBmb3Igc21hbGwgYW1vdW50cywgY2hvb3NlCiAgICAgICAgICAgICAgKiBDKSBhbHdheXMsIGZvciBsYXJnZSBhbW91bnRzLCBCKSBhbHdheXMsIGFuZCBpbmJldHdlZW4sCiAgICAgICAgICAgICAgKiBwaWNrIHdoaWNoZXZlciBvbmUgaW52b2x2ZXMgbGVzcyBzdGVtIG1vdmVtZW50LgogICAgICAgICAgICAgICovCkBAIC05MTYsMTAzICs5MTYsOSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiAxCi0KICNkZWZpbmUgIHBzaF9jb3JuZXJfaXNfZmxhdCAgICAgIGZ0X2Nvcm5lcl9pc19mbGF0CiAjZGVmaW5lICBwc2hfY29ybmVyX29yaWVudGF0aW9uICBmdF9jb3JuZXJfb3JpZW50YXRpb24KIAotI2Vsc2UKLQotICBGVF9MT0NBTF9ERUYoIEZUX0ludCApCi0gIHBzaF9jb3JuZXJfaXNfZmxhdCggRlRfUG9zICB4X2luLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgeV9pbiwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIHhfb3V0LAotICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgeV9vdXQgKQotICB7Ci0gICAgRlRfUG9zICBheCA9IHhfaW47Ci0gICAgRlRfUG9zICBheSA9IHlfaW47Ci0KLSAgICBGVF9Qb3MgIGRfaW4sIGRfb3V0LCBkX2Nvcm5lcjsKLQotCi0gICAgaWYgKCBheCA8IDAgKQotICAgICAgYXggPSAtYXg7Ci0gICAgaWYgKCBheSA8IDAgKQotICAgICAgYXkgPSAtYXk7Ci0gICAgZF9pbiA9IGF4ICsgYXk7Ci0KLSAgICBheCA9IHhfb3V0OwotICAgIGlmICggYXggPCAwICkKLSAgICAgIGF4ID0gLWF4OwotICAgIGF5ID0geV9vdXQ7Ci0gICAgaWYgKCBheSA8IDAgKQotICAgICAgYXkgPSAtYXk7Ci0gICAgZF9vdXQgPSBheCArIGF5OwotCi0gICAgYXggPSB4X291dCArIHhfaW47Ci0gICAgaWYgKCBheCA8IDAgKQotICAgICAgYXggPSAtYXg7Ci0gICAgYXkgPSB5X291dCArIHlfaW47Ci0gICAgaWYgKCBheSA8IDAgKQotICAgICAgYXkgPSAtYXk7Ci0gICAgZF9jb3JuZXIgPSBheCArIGF5OwotCi0gICAgcmV0dXJuICggZF9pbiArIGRfb3V0IC0gZF9jb3JuZXIgKSA8ICggZF9jb3JuZXIgPj4gNCApOwotICB9Ci0KLSAgc3RhdGljIEZUX0ludAotICBwc2hfY29ybmVyX29yaWVudGF0aW9uKCBGVF9Qb3MgIGluX3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgaW5feSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeSApCi0gIHsKLSAgICBGVF9JbnQgIHJlc3VsdDsKLQotCi0gICAgLyogZGVhbCB3aXRoIHRoZSB0cml2aWFsIGNhc2VzIHF1aWNrbHkgKi8KLSAgICBpZiAoIGluX3kgPT0gMCApCi0gICAgewotICAgICAgaWYgKCBpbl94ID49IDAgKQotICAgICAgICByZXN1bHQgPSBvdXRfeTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gLW91dF95OwotICAgIH0KLSAgICBlbHNlIGlmICggaW5feCA9PSAwICkKLSAgICB7Ci0gICAgICBpZiAoIGluX3kgPj0gMCApCi0gICAgICAgIHJlc3VsdCA9IC1vdXRfeDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gb3V0X3g7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBvdXRfeSA9PSAwICkKLSAgICB7Ci0gICAgICBpZiAoIG91dF94ID49IDAgKQotICAgICAgICByZXN1bHQgPSBpbl95OwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSAtaW5feTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIG91dF94ID09IDAgKQotICAgIHsKLSAgICAgIGlmICggb3V0X3kgPj0gMCApCi0gICAgICAgIHJlc3VsdCA9IC1pbl94OwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSAgaW5feDsKLSAgICB9Ci0gICAgZWxzZSAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICB7Ci0gICAgICBsb25nIGxvbmcgIGRlbHRhID0gKGxvbmcgbG9uZylpbl94ICogb3V0X3kgLSAobG9uZyBsb25nKWluX3kgKiBvdXRfeDsKLQotICAgICAgaWYgKCBkZWx0YSA9PSAwICkKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gMSAtIDIgKiAoIGRlbHRhIDwgMCApOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotI2VuZGlmIC8qICExICovCi0KIAogI2lmZGVmIENPTVBVVEVfSU5GTEVYUwogCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNoYWxnby5oIGIvc3JjL3BzaGludGVyL3BzaGFsZ28uaAppbmRleCA4MzczZTVlLi5mMWJkYTY1IDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBoaW50aW5nIGFsZ29yaXRobSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1BTSEFMR09fSF9fCi0jZGVmaW5lIF9fUFNIQUxHT19IX18KKyNpZm5kZWYgUFNIQUxHT19IXworI2RlZmluZSBQU0hBTEdPX0hfCiAKIAogI2luY2x1ZGUgInBzaHJlYy5oIgpAQCAtMjM1LDcgKzIzNSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fUFNIQUxHT19IX18gKi8KKyNlbmRpZiAvKiBQU0hBTEdPX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIGIvc3JjL3BzaGludGVyL3BzaGdsb2IuYwppbmRleCA2NzIzYjcxLi4yYWM1ZWYxIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBQb3N0U2NyaXB0IGhpbnRlciBnbG9iYWwgaGludGluZyBtYW5hZ2VtZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgSW5zcGlyZWQgYnkgdGhlIG5ldyBhdXRvLWhpbnRlciBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KQEAgLTgwLDcgKzgwLDcgQEAKIAogI2lmIDAKIAotICAvKiBvcmdfd2lkdGggaXMgaXMgZm9udCB1bml0cywgcmVzdWx0IGluIGRldmljZSBwaXhlbHMsIDI2LjYgZm9ybWF0ICovCisgIC8qIG9yZ193aWR0aCBpcyBpbiBmb250IHVuaXRzLCByZXN1bHQgaW4gZGV2aWNlIHBpeGVscywgMjYuNiBmb3JtYXQgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9Qb3MgKQogICBwc2hfZGltZW5zaW9uX3NuYXBfd2lkdGgoIFBTSF9EaW1lbnNpb24gIGRpbWVuc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBvcmdfd2lkdGggKQpAQCAtMzM5LDcgKzMzOSw3IEBACiAgICAgICAgICAgICBib3QgICA9IHpvbmVbMV0ub3JnX2JvdHRvbTsKICAgICAgICAgICAgIGRlbHRhID0gYm90IC0gdG9wOwogCi0gICAgICAgICAgICBpZiAoIGRlbHRhIDwgMiAqIGZ1enogKQorICAgICAgICAgICAgaWYgKCBkZWx0YSAvIDIgPCBmdXp6ICkKICAgICAgICAgICAgICAgem9uZVswXS5vcmdfdG9wID0gem9uZVsxXS5vcmdfYm90dG9tID0gdG9wICsgZGVsdGEgLyAyOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGdsb2IuaCBiL3NyYy9wc2hpbnRlci9wc2hnbG9iLmgKaW5kZXggYzM3NmRmNy4uNDVjOTU3YiAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGdsb2IuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0hHTE9CX0hfXwotI2RlZmluZSBfX1BTSEdMT0JfSF9fCisjaWZuZGVmIFBTSEdMT0JfSF8KKyNkZWZpbmUgUFNIR0xPQl9IXwogCiAKICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTE5MCw3ICsxOTAsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1BTSEdMT0JfSF9fICovCisjZW5kaWYgLyogUFNIR0xPQl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGludGVyLmMgYi9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYwppbmRleCA5ZTY1ZmUyLi42MTRlMGJiIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYworKysgYi9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQb3N0U2NyaXB0IEhpbnRpbmcgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG1vZC5jIGIvc3JjL3BzaGludGVyL3BzaG1vZC5jCmluZGV4IDk2MWI0NjguLmZhNGFkMWYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2htb2QuYworKysgYi9zcmMvcHNoaW50ZXIvcHNobW9kLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBoaW50ZXIgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2htb2QuaCBiL3NyYy9wc2hpbnRlci9wc2htb2QuaAppbmRleCBhNThkODU2Li4zOTExMmE5IDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNobW9kLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaG1vZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgaGludGVyIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0hNT0RfSF9fCi0jZGVmaW5lIF9fUFNITU9EX0hfXworI2lmbmRlZiBQU0hNT0RfSF8KKyNkZWZpbmUgUFNITU9EX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMyw3ICszMyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fUFNITU9EX0hfXyAqLworI2VuZGlmIC8qIFBTSE1PRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG50ZXJyLmggYi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaAppbmRleCBjZTc5MGE4Li43YTk0NTg4IDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQUyBIaW50ZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjIsMTIgKzIyLDEyIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBfX1BTSE5URVJSX0hfXwotI2RlZmluZSBfX1BTSE5URVJSX0hfXworI2lmbmRlZiBQU0hOVEVSUl9IXworI2RlZmluZSBQU0hOVEVSUl9IXwogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBTSF9FcnJfCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlIEZUX0VSUk9SU19ICiAKLSNlbmRpZiAvKiBfX1BTSE5URVJSX0hfXyAqLworI2VuZGlmIC8qIFBTSE5URVJSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNocGljLmMgYi9zcmMvcHNoaW50ZXIvcHNocGljLmMKaW5kZXggYWZkOGZiOS4uZDBhM2Q4ZSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaHBpYy5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2hwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNoaW50ZXIgbW9kdWxlLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHBpYy5oIGIvc3JjL3BzaGludGVyL3BzaHBpYy5oCmluZGV4IDYyZGU0NTcuLjc1ZWU1NzMgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hwaWMuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNocGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHBzaGludGVyIG1vZHVsZS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDEyICsxNiwxMCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fUFNIUElDX0hfXwotI2RlZmluZSBfX1BTSFBJQ19IX18KKyNpZm5kZWYgUFNIUElDX0hfCisjZGVmaW5lIFBTSFBJQ19IXwogCiAKLUZUX0JFR0lOX0hFQURFUgotCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAogCiAKQEAgLTMzLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICiAKK0ZUX0JFR0lOX0hFQURFUgorCiAgIHR5cGVkZWYgc3RydWN0ICBQU0hpbnRlclBJQ18KICAgewogICAgIFBTSGludGVyX0ludGVyZmFjZSAgcHNoaW50ZXJfaW50ZXJmYWNlOwpAQCAtNTEsMTMgKzUxLDEzIEBACiAgIEZUX0Vycm9yCiAgIHBzaGludGVyX21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCitGVF9FTkRfSEVBREVSCisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgLyogKi8KIAotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogX19QU0hQSUNfSF9fICovCisjZW5kaWYgLyogUFNIUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNocmVjLmMgYi9zcmMvcHNoaW50ZXIvcHNocmVjLmMKaW5kZXggZjg4OTVmYy4uZDdjYzRhMCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaHJlYy5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2hyZWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRzIHJlY29yZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHJlYy5oIGIvc3JjL3BzaGludGVyL3BzaHJlYy5oCmluZGV4IDJiMWFkOTQuLjk3ZTZmMGUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hyZWMuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNocmVjLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdHNjcmlwdCAoVHlwZTEvVHlwZTIpIGhpbnRzIHJlY29yZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI4LDggKzI4LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0hSRUNfSF9fCi0jZGVmaW5lIF9fUFNIUkVDX0hfXworI2lmbmRlZiBQU0hSRUNfSF8KKyNkZWZpbmUgUFNIUkVDX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xNjYsNyArMTY2LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19QU19ISU5URVJfUkVDT1JEX0hfXyAqLworI2VuZGlmIC8qIFBTSFJFQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMKaW5kZXggMGYwNGMyZi4uMzQ1NDAyZCAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYworKysgYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBTTmFtZXMgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01MjUsMzEgKzUyNSwzMSBAQAogCiAgIEZUX0RFRklORV9TRVJWSUNFX1BTQ01BUFNSRUMoCiAgICAgcHNjbWFwc19pbnRlcmZhY2UsCi0gICAgKFBTX1VuaWNvZGVfVmFsdWVGdW5jKSAgICAgcHNfdW5pY29kZV92YWx1ZSwKLSAgICAoUFNfVW5pY29kZXNfSW5pdEZ1bmMpICAgICBwc191bmljb2Rlc19pbml0LAotICAgIChQU19Vbmljb2Rlc19DaGFySW5kZXhGdW5jKXBzX3VuaWNvZGVzX2NoYXJfaW5kZXgsCi0gICAgKFBTX1VuaWNvZGVzX0NoYXJOZXh0RnVuYykgcHNfdW5pY29kZXNfY2hhcl9uZXh0LAorICAgIChQU19Vbmljb2RlX1ZhbHVlRnVuYykgICAgIHBzX3VuaWNvZGVfdmFsdWUsICAgICAgICAvKiB1bmljb2RlX3ZhbHVlICAgICAgICAgKi8KKyAgICAoUFNfVW5pY29kZXNfSW5pdEZ1bmMpICAgICBwc191bmljb2Rlc19pbml0LCAgICAgICAgLyogdW5pY29kZXNfaW5pdCAgICAgICAgICovCisgICAgKFBTX1VuaWNvZGVzX0NoYXJJbmRleEZ1bmMpcHNfdW5pY29kZXNfY2hhcl9pbmRleCwgIC8qIHVuaWNvZGVzX2NoYXJfaW5kZXggICAqLworICAgIChQU19Vbmljb2Rlc19DaGFyTmV4dEZ1bmMpIHBzX3VuaWNvZGVzX2NoYXJfbmV4dCwgICAvKiB1bmljb2Rlc19jaGFyX25leHQgICAgKi8KIAotICAgIChQU19NYWNpbnRvc2hfTmFtZUZ1bmMpICAgIHBzX2dldF9tYWNpbnRvc2hfbmFtZSwKLSAgICAoUFNfQWRvYmVfU3RkX1N0cmluZ3NGdW5jKSBwc19nZXRfc3RhbmRhcmRfc3RyaW5ncywKKyAgICAoUFNfTWFjaW50b3NoX05hbWVGdW5jKSAgICBwc19nZXRfbWFjaW50b3NoX25hbWUsICAgLyogbWFjaW50b3NoX25hbWUgICAgICAgICovCisgICAgKFBTX0Fkb2JlX1N0ZF9TdHJpbmdzRnVuYykgcHNfZ2V0X3N0YW5kYXJkX3N0cmluZ3MsIC8qIGFkb2JlX3N0ZF9zdHJpbmdzICAgICAqLwogCi0gICAgdDFfc3RhbmRhcmRfZW5jb2RpbmcsCi0gICAgdDFfZXhwZXJ0X2VuY29kaW5nICkKKyAgICB0MV9zdGFuZGFyZF9lbmNvZGluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRvYmVfc3RkX2VuY29kaW5nICAgICovCisgICAgdDFfZXhwZXJ0X2VuY29kaW5nICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkb2JlX2V4cGVydF9lbmNvZGluZyAqLwogCiAjZWxzZQogCiAgIEZUX0RFRklORV9TRVJWSUNFX1BTQ01BUFNSRUMoCiAgICAgcHNjbWFwc19pbnRlcmZhY2UsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5pY29kZV92YWx1ZSAgICAgICAgICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVzX2luaXQgICAgICAgICAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmljb2Rlc19jaGFyX2luZGV4ICAgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5pY29kZXNfY2hhcl9uZXh0ICAgICovCiAKLSAgICAoUFNfTWFjaW50b3NoX05hbWVGdW5jKSAgICBwc19nZXRfbWFjaW50b3NoX25hbWUsCi0gICAgKFBTX0Fkb2JlX1N0ZF9TdHJpbmdzRnVuYykgcHNfZ2V0X3N0YW5kYXJkX3N0cmluZ3MsCisgICAgKFBTX01hY2ludG9zaF9OYW1lRnVuYykgICAgcHNfZ2V0X21hY2ludG9zaF9uYW1lLCAgIC8qIG1hY2ludG9zaF9uYW1lICAgICAgICAqLworICAgIChQU19BZG9iZV9TdGRfU3RyaW5nc0Z1bmMpIHBzX2dldF9zdGFuZGFyZF9zdHJpbmdzLCAvKiBhZG9iZV9zdGRfc3RyaW5ncyAgICAgKi8KIAotICAgIHQxX3N0YW5kYXJkX2VuY29kaW5nLAotICAgIHQxX2V4cGVydF9lbmNvZGluZyApCisgICAgdDFfc3RhbmRhcmRfZW5jb2RpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkb2JlX3N0ZF9lbmNvZGluZyAgICAqLworICAgIHQxX2V4cGVydF9lbmNvZGluZyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZG9iZV9leHBlcnRfZW5jb2RpbmcgKi8KIAogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVCAqLwogCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc21vZHVsZS5oIGIvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaAppbmRleCBmODVmMzIyLi5lZTNjNmNiIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCisrKyBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBQU05hbWVzIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1BTTU9EVUxFX0hfXwotI2RlZmluZSBfX1BTTU9EVUxFX0hfXworI2lmbmRlZiBQU01PRFVMRV9IXworI2RlZmluZSBQU01PRFVMRV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzIsNyArMzIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1BTTU9EVUxFX0hfXyAqLworI2VuZGlmIC8qIFBTTU9EVUxFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc25hbWVyci5oIGIvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaAppbmRleCAwOWNjMjQ3Li4zYTlmNjUzIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc25hbWVyci5oCisrKyBiL3NyYy9wc25hbWVzL3BzbmFtZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgbmFtZXMgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzLDEyICsyMywxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19QU05BTUVSUl9IX18KLSNkZWZpbmUgX19QU05BTUVSUl9IX18KKyNpZm5kZWYgUFNOQU1FUlJfSF8KKyNkZWZpbmUgUFNOQU1FUlJfSF8KIAogI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICiAKLSN1bmRlZiBfX0ZURVJST1JTX0hfXworI3VuZGVmIEZURVJST1JTX0hfCiAKICN1bmRlZiAgRlRfRVJSX1BSRUZJWAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBQU25hbWVzX0Vycl8KQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgRlRfRVJST1JTX0gKIAotI2VuZGlmIC8qIF9fUFNOQU1FUlJfSF9fICovCisjZW5kaWYgLyogUFNOQU1FUlJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbmFtZXMuYyBiL3NyYy9wc25hbWVzL3BzbmFtZXMuYwppbmRleCBhNDM4NTk2Li5lN2IyYzBiIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc25hbWVzLmMKKysrIGIvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBTTmFtZXMgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc3BpYy5jIGIvc3JjL3BzbmFtZXMvcHNwaWMuYwppbmRleCAxMzk0Zjk3Li5hNzhlYzVhIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc3BpYy5jCisrKyBiL3NyYy9wc25hbWVzL3BzcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHBzbmFtZXMgbW9kdWxlLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzcGljLmggYi9zcmMvcHNuYW1lcy9wc3BpYy5oCmluZGV4IDg4Y2NkYTMuLjQ4MzQ4NzYgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzcGljLmgKKysrIGIvc3JjL3BzbmFtZXMvcHNwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNuYW1lcyBtb2R1bGUuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTQgKzE2LDEzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU1BJQ19IX18KLSNkZWZpbmUgX19QU1BJQ19IX18KKyNpZm5kZWYgUFNQSUNfSF8KKyNkZWZpbmUgUFNQSUNfSF8KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAorCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICNkZWZpbmUgUFNDTUFQU19TRVJWSUNFU19HRVQgICBwc2NtYXBzX3NlcnZpY2VzCkBAIC0zMyw2ICszMiw5IEBACiAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICiAKKworRlRfQkVHSU5fSEVBREVSCisKICAgdHlwZWRlZiBzdHJ1Y3QgIFBTTW9kdWxlUElDXwogICB7CiAgICAgRlRfU2VydmljZURlc2NSZWMqICAgICBwc2NtYXBzX3NlcnZpY2VzOwpAQCAtNTQsMTMgKzU2LDEzIEBACiAgIEZUX0Vycm9yCiAgIHBzbmFtZXNfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKK0ZUX0VORF9IRUFERVIKKwogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAvKiAqLwogCi1GVF9FTkRfSEVBREVSCi0KLSNlbmRpZiAvKiBfX1BTUElDX0hfXyAqLworI2VuZGlmIC8qIFBTUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oIGIvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaAppbmRleCAzZjMxYzMxLi5lYjgyN2ZhIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCisrKyBiL3NyYy9wc25hbWVzL3BzdGFibGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRtaXNjLmggYi9zcmMvcmFzdGVyL2Z0bWlzYy5oCmluZGV4IDE5YmU0Y2EuLjk4MWNlMzIgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvZnRtaXNjLmgKKysrIGIvc3JjL3Jhc3Rlci9mdG1pc2MuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIE1pc2NlbGxhbmVvdXMgbWFjcm9zIGZvciBzdGFuZC1hbG9uZSByYXN0ZXJpemVyIChzcGVjaWZpY2F0aW9uICAgICAgICovCiAvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpAQCAtMjQsOCArMjQsOCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fRlRNSVNDX0hfXwotI2RlZmluZSBfX0ZUTUlTQ19IX18KKyNpZm5kZWYgRlRNSVNDX0hfCisjZGVmaW5lIEZUTUlTQ19IXwogCiAKICAgLyogbWVtc2V0ICovCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICAgc3RhdGljIHgKIAogCi0gIC8qIGZyb20gaW5jbHVkZS9mcmVldHlwZTIvZnR0eXBlcy5oICovCisgIC8qIGZyb20gaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmggKi8KIAogICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEZUX0J5dGU7CiAgIHR5cGVkZWYgc2lnbmVkIGludCAgICAgRlRfSW50OwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgICAoRlRfVUxvbmcpX3g0ICAgICAgICAgKQogCiAKLSAgLyogZnJvbSBpbmNsdWRlL2ZyZWV0eXBlMi9mdHN5c3RlbS5oICovCisgIC8qIGZyb20gaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oICovCiAKICAgdHlwZWRlZiBzdHJ1Y3QgRlRfTWVtb3J5UmVjXyogIEZUX01lbW9yeTsKIApAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgcmV0dXJuICggcyA+IDAgKSA/IGQgOiAtZDsKICAgfQogCi0jZW5kaWYgLyogX19GVE1JU0NfSF9fICovCisjZW5kaWYgLyogRlRNSVNDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMgYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMKaW5kZXggZWVhYjE0My4uMGZhMmYyNiAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCisrKyBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsMTggKzE4LDE4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogVGhpcyBmaWxlIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IHRoZSByZXN0IG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUsIGJ5ICovCi0gIC8qIGRlZmluaW5nIHRoZSBfU1RBTkRBTE9ORV8gbWFjcm8gd2hlbiBjb21waWxpbmcgaXQuICBZb3UgYWxzbyBuZWVkIHRvICAqLworICAvKiBkZWZpbmluZyB0aGUgU1RBTkRBTE9ORV8gbWFjcm8gd2hlbiBjb21waWxpbmcgaXQuICBZb3UgYWxzbyBuZWVkIHRvICAgKi8KICAgLyogcHV0IHRoZSBmaWxlcyBgZnRpbWFnZS5oJyBhbmQgYGZ0bWlzYy5oJyBpbnRvIHRoZSAkKGluY2RpcikgICAgICAgICAgICovCiAgIC8qIGRpcmVjdG9yeS4gIFR5cGljYWxseSwgeW91IHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogLSBjb3B5IGBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMnICh0aGlzIGZpbGUpIHRvIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNvcHkgYGluY2x1ZGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9yYXN0ZXIvZnRtaXNjLmgnIHRvIHlvdXIgY3VycmVudCAgKi8KLSAgLyogICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gY29weSBgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgnIGFuZCBgc3JjL3Jhc3Rlci9mdG1pc2MuaCcgdG8geW91ciAqLworICAvKiAgIGN1cnJlbnQgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gY29tcGlsZSBgZnRyYXN0ZXInIHdpdGggdGhlIF9TVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAqLworICAvKiAtIGNvbXBpbGUgYGZ0cmFzdGVyJyB3aXRoIHRoZSBTVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjYyAtYyAtRF9TVEFOREFMT05FXyBmdHJhc3Rlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgY2MgLWMgLURTVEFOREFMT05FXyBmdHJhc3Rlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoZSByZW5kZXJlciBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBgZnRfc3RhbmRhcmRfcmFzdGVyLnJhc3Rlcl9uZXcnOyBhIGJpdG1hcCBjYW4gYmUgZ2VuZXJhdGVkICAgICAgICAgICAgKi8KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KIAogICAvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wgdXNlZCBieSB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciAgKi8KICAgLyogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiZnRtaXNjLmgiCiAjaW5jbHVkZSAiZnRpbWFnZS5oIgogCi0jZWxzZSAvKiAhX1NUQU5EQUxPTkVfICovCisjZWxzZSAvKiAhU1RBTkRBTE9ORV8gKi8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAiZnRyYXN0ZXIuaCIKQEAgLTY4LDcgKzY4LDcgQEAKIAogI2luY2x1ZGUgInJhc3RwaWMuaCIKIAotI2VuZGlmIC8qICFfU1RBTkRBTE9ORV8gKi8KKyNlbmRpZiAvKiAhU1RBTkRBTE9ORV8gKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTczLDE0ICsxNzMsMTIgQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9yYXN0ZXIKIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KIAogICAvKiBBdXhpbGlhcnkgbWFjcm9zIGZvciB0b2tlbiBjb25jYXRlbmF0aW9uLiAqLwogI2RlZmluZSBGVF9FUlJfWENBVCggeCwgeSApICB4ICMjIHkKICNkZWZpbmUgRlRfRVJSX0NBVCggeCwgeSApICAgRlRfRVJSX1hDQVQoIHgsIHkgKQogCi0jZGVmaW5lIEZUX01BWCggYSwgYiApICAoIChhKSA+IChiKSA/IChhKSA6IChiKSApCi0KICAgLyogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgaXMgdW51c2VkLiAqLwogICAvKiBJdHMgcHVycG9zZSBpcyBzaW1wbHkgdG8gcmVkdWNlIGNvbXBpbGVyIHdhcm5pbmdzLiAgTm90ZSBhbHNvIHRoYXQgICovCiAgIC8qIHNpbXBseSBkZWZpbmluZyBpdCBhcyBgKHZvaWQpeCcgZG9lc24ndCBhdm9pZCB3YXJuaW5ncyB3aXRoIGNlcnRhaW4gKi8KQEAgLTIyNiw3ICsyMjQsNyBAQAogICAgICAgICAgICAgcmFzdGVyX2RvbmVfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB9OwogCi0jZWxzZSAvKiAhX1NUQU5EQUxPTkVfICovCisjZWxzZSAvKiAhU1RBTkRBTE9ORV8gKi8KIAogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKQEAgLTI0Miw3ICsyNDAsNyBAQAogI2RlZmluZSBSYXN0ZXJfRXJyX1Vuc3VwcG9ydGVkICBSYXN0ZXJfRXJyX0Nhbm5vdF9SZW5kZXJfR2x5cGgKIAogCi0jZW5kaWYgLyogIV9TVEFOREFMT05FXyAqLworI2VuZGlmIC8qICFTVEFOREFMT05FXyAqLwogCiAKICNpZm5kZWYgRlRfTUVNX1NFVApAQCAtNDUwLDEzICs0NDgsMjEgQEAKICNkZWZpbmUgQ0VJTElORyggeCApICAoICggKHgpICsgcmFzLnByZWNpc2lvbiAtIDEgKSAmIC1yYXMucHJlY2lzaW9uICkKICNkZWZpbmUgVFJVTkMoIHggKSAgICAoIChMb25nKSh4KSA+PiByYXMucHJlY2lzaW9uX2JpdHMgKQogI2RlZmluZSBGUkFDKCB4ICkgICAgICggKHgpICYgKCByYXMucHJlY2lzaW9uIC0gMSApICkKLSNkZWZpbmUgU0NBTEVEKCB4ICkgICAoICggKExvbmcpKHgpIDw8IHJhcy5zY2FsZV9zaGlmdCApIC0gcmFzLnByZWNpc2lvbl9oYWxmICkKKyNkZWZpbmUgU0NBTEVEKCB4ICkgICAoICggKHgpIDwgMCA/IC0oIC0oeCkgPDwgcmFzLnNjYWxlX3NoaWZ0ICkgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgKCAgKHgpIDw8IHJhcy5zY2FsZV9zaGlmdCApICkgXAorICAgICAgICAgICAgICAgICAgICAgICAgLSByYXMucHJlY2lzaW9uX2hhbGYgKQogCiAjZGVmaW5lIElTX0JPVFRPTV9PVkVSU0hPT1QoIHggKSBcCiAgICAgICAgICAgKEJvb2wpKCBDRUlMSU5HKCB4ICkgLSB4ID49IHJhcy5wcmVjaXNpb25faGFsZiApCiAjZGVmaW5lIElTX1RPUF9PVkVSU0hPT1QoIHggKSAgICBcCiAgICAgICAgICAgKEJvb2wpKCB4IC0gRkxPT1IoIHggKSA+PSByYXMucHJlY2lzaW9uX2hhbGYgKQogCisjaWYgRlRfUkVOREVSX1BPT0xfU0laRSA+IDIwNDgKKyNkZWZpbmUgRlRfTUFYX0JMQUNLX1BPT0wgICggRlRfUkVOREVSX1BPT0xfU0laRSAvIHNpemVvZiAoIExvbmcgKSApCisjZWxzZQorI2RlZmluZSBGVF9NQVhfQkxBQ0tfUE9PTCAgKCAyMDQ4IC8gc2l6ZW9mICggTG9uZyApICkKKyNlbmRpZgorCiAgIC8qIFRoZSBtb3N0IHVzZWQgdmFyaWFibGVzIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSB0b3Agb2YgdGhlIHN0cnVjdHVyZS4gKi8KICAgLyogVGh1cywgdGhlaXIgb2Zmc2V0IGNhbiBiZSBjb2RlZCB3aXRoIGxlc3Mgb3Bjb2RlcywgcmVzdWx0aW5nIGluIGEgICAqLwogICAvKiBzbWFsbGVyIGV4ZWN1dGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03OTksMTUgKzgwNSwxNCBAQAogCiAgICAgLyogaWYgaXQgaXMgPCwgc2ltcGx5IGluc2VydCBpdCwgaWdub3JlIGlmID09ICovCiAgICAgaWYgKCBuID49IDAgJiYgeSA+IHlfdHVybnNbbl0gKQotICAgICAgd2hpbGUgKCBuID49IDAgKQorICAgICAgZG8KICAgICAgIHsKICAgICAgICAgSW50ICB5MiA9IChJbnQpeV90dXJuc1tuXTsKIAogCiAgICAgICAgIHlfdHVybnNbbl0gPSB5OwogICAgICAgICB5ID0geTI7Ci0gICAgICAgIG4tLTsKLSAgICAgIH0KKyAgICAgIH0gd2hpbGUgKCAtLW4gPj0gMCApOwogCiAgICAgaWYgKCBuIDwgMCApCiAgICAgewpAQCAtODQ4LDcgKzg1Myw3IEBACiAKICAgICBpZiAoIG4gPiAxICYmIHAgKQogICAgIHsKLSAgICAgIHdoaWxlICggbiA+IDAgKQorICAgICAgZG8KICAgICAgIHsKICAgICAgICAgSW50ICBib3R0b20sIHRvcDsKIApAQCAtODc2LDggKzg4MSw3IEBACiAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7CiAKICAgICAgICAgcCA9IHAtPmxpbms7Ci0gICAgICAgIG4tLTsKLSAgICAgIH0KKyAgICAgIH0gd2hpbGUgKCAtLW4gKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgcmFzLmZQcm9maWxlID0gTlVMTDsKQEAgLTEyNDgsNyArMTI1Miw3IEBACiAKICAgICBzdGFydF9hcmMgPSBhcmM7CiAKLSAgICB3aGlsZSAoIGFyYyA+PSBzdGFydF9hcmMgJiYgZSA8PSBlMiApCisgICAgZG8KICAgICB7CiAgICAgICByYXMuam9pbnQgPSBGQUxTRTsKIApAQCAtMTI4MSw3ICsxMjg1LDcgQEAKICAgICAgICAgfQogICAgICAgICBhcmMgLT0gZGVncmVlOwogICAgICAgfQotICAgIH0KKyAgICB9IHdoaWxlICggYXJjID49IHN0YXJ0X2FyYyAmJiBlIDw9IGUyICk7CiAKICAgRmluOgogICAgIHJhcy50b3AgID0gdG9wOwpAQCAtMjExNCw3ICsyMTE4LDcgQEAKICAgICB3aGlsZSAoIGN1cnJlbnQgKQogICAgIHsKICAgICAgIGN1cnJlbnQtPlggICAgICAgPSAqY3VycmVudC0+b2Zmc2V0OwotICAgICAgY3VycmVudC0+b2Zmc2V0ICs9IGN1cnJlbnQtPmZsYWdzICYgRmxvd19VcCA/IDEgOiAtMTsKKyAgICAgIGN1cnJlbnQtPm9mZnNldCArPSAoIGN1cnJlbnQtPmZsYWdzICYgRmxvd19VcCApID8gMSA6IC0xOwogICAgICAgY3VycmVudC0+aGVpZ2h0LS07CiAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bGluazsKICAgICB9CkBAIC0zMDQxLDcgKzMwNDUsNyBAQAogICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YXRpYyBvYmplY3QuICAgICAgICAgICAgICAgICAgKioqKiovCiAKIAotI2lmZGVmIF9TVEFOREFMT05FXworI2lmZGVmIFNUQU5EQUxPTkVfCiAKIAogICBzdGF0aWMgaW50CkBAIC0zMDY4LDcgKzMwNzIsNyBAQAogICB9CiAKIAotI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworI2Vsc2UgLyogIVNUQU5EQUxPTkVfICovCiAKIAogICBzdGF0aWMgaW50CkBAIC0zMTAyLDEzICszMTA2LDEzIEBACiAgIH0KIAogCi0jZW5kaWYgLyogIV9TVEFOREFMT05FXyAqLworI2VuZGlmIC8qICFTVEFOREFMT05FXyAqLwogCiAKICAgc3RhdGljIHZvaWQKLSAgZnRfYmxhY2tfcmVzZXQoIGJsYWNrX1BSYXN0ZXIgIHJhc3RlciwKLSAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgICAgIHBvb2xfYmFzZSwKLSAgICAgICAgICAgICAgICAgIExvbmcgICAgICAgICAgIHBvb2xfc2l6ZSApCisgIGZ0X2JsYWNrX3Jlc2V0KCBGVF9SYXN0ZXIgIHJhc3RlciwKKyAgICAgICAgICAgICAgICAgIFBCeXRlICAgICAgcG9vbF9iYXNlLAorICAgICAgICAgICAgICAgICAgVUxvbmcgICAgICBwb29sX3NpemUgKQogICB7CiAgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKICAgICBGVF9VTlVTRUQoIHBvb2xfYmFzZSApOwpAQCAtMzExNywyMCArMzEyMSwyMCBAQAogCiAKICAgc3RhdGljIGludAotICBmdF9ibGFja19zZXRfbW9kZSggYmxhY2tfUFJhc3RlciAgcmFzdGVyLAotICAgICAgICAgICAgICAgICAgICAgVUxvbmcgICAgICAgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgIHBhbGV0dGUgKQorICBmdF9ibGFja19zZXRfbW9kZSggRlRfUmFzdGVyICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICBVTG9uZyAgICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKICAgICBGVF9VTlVTRUQoIG1vZGUgKTsKLSAgICBGVF9VTlVTRUQoIHBhbGV0dGUgKTsKKyAgICBGVF9VTlVTRUQoIGFyZ3MgKTsKIAogICAgIHJldHVybiAwOwogICB9CiAKIAogICBzdGF0aWMgaW50Ci0gIGZ0X2JsYWNrX3JlbmRlciggYmxhY2tfUFJhc3RlciAgICAgICAgICAgIHJhc3RlciwKKyAgZnRfYmxhY2tfcmVuZGVyKCBGVF9SYXN0ZXIgICAgICAgICAgICAgICAgcmFzdGVyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1Jhc3Rlcl9QYXJhbXMqICBwYXJhbXMgKQogICB7CiAgICAgY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7CkBAIC0zMTM4LDcgKzMxNDIsNyBAQAogCiAgICAgYmxhY2tfVFdvcmtlciAgd29ya2VyWzFdOwogCi0gICAgTG9uZyAgYnVmZmVyW0ZUX01BWCggRlRfUkVOREVSX1BPT0xfU0laRSwgMjA0OCApIC8gc2l6ZW9mICggTG9uZyApXTsKKyAgICBMb25nICBidWZmZXJbRlRfTUFYX0JMQUNLX1BPT0xdOwogCiAKICAgICBpZiAoICFyYXN0ZXIgKQpAQCAtMzE3NSw2ICszMTc5LDIwIEBACiAgICAgaWYgKCAhdGFyZ2V0X21hcC0+YnVmZmVyICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZCApOwogCisgICAgLyogcmVqZWN0IHRvbyBsYXJnZSBvdXRsaW5lIGNvb3JkaW5hdGVzICovCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgdmVjICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICBGVF9WZWN0b3IqICBsaW1pdCA9IHZlYyArIG91dGxpbmUtPm5fcG9pbnRzOworCisKKyAgICAgIGZvciAoIDsgdmVjIDwgbGltaXQ7IHZlYysrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCB2ZWMtPnggPCAtMHgxMDAwMDAwTCB8fCB2ZWMtPnggPiAweDEwMDAwMDBMIHx8CisgICAgICAgICAgICAgdmVjLT55IDwgLTB4MTAwMDAwMEwgfHwgdmVjLT55ID4gMHgxMDAwMDAwTCApCisgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWQgKTsKKyAgICAgIH0KKyAgICB9CisKICAgICByYXMub3V0bGluZSA9ICpvdXRsaW5lOwogICAgIHJhcy50YXJnZXQgID0gKnRhcmdldF9tYXA7CiAKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaCBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaAppbmRleCBhMjcwZDQ4Li42NWNkNWY5IDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmgKKysrIGIvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFJBU1RFUl9IX18KLSNkZWZpbmUgX19GVFJBU1RFUl9IX18KKyNpZm5kZWYgRlRSQVNURVJfSF8KKyNkZWZpbmUgRlRSQVNURVJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTMzLDE0ICszMywxNCBAQAogICAvKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSBhcmUgdXNpbmcgZnRyYXN0ZXIuYyBhcyBhICAgICAgICAgKi8KICAgLyogc3RhbmRhbG9uZSBtb2R1bGUsIGZ1bGx5IGluZGVwZW5kZW50IG9mIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfU1RBTkRBTE9ORV8gKi8KKy8qICNkZWZpbmUgU1RBTkRBTE9ORV8gKi8KIAogICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9SYXN0ZXJfRnVuY3MgKSAgZnRfc3RhbmRhcmRfcmFzdGVyOwogCiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRSQVNURVJfSF9fICovCisjZW5kaWYgLyogRlRSQVNURVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyZW5kMS5jIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKaW5kZXggZjMxNDM5Mi4uNDk0ZjExMiAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKKysrIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyZW5kMS5oIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKaW5kZXggYzM2NzI2MC4uYTQzMWYxOCAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKKysrIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUUkVORDFfSF9fCi0jZGVmaW5lIF9fRlRSRU5EMV9IX18KKyNpZm5kZWYgRlRSRU5EMV9IXworI2RlZmluZSBGVFJFTkQxX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yOSwxNiArMjksMTAgQEAKIAogICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzICkKIAotICAvKiB0aGlzIHJlbmRlcmVyIGlzIF9OT1RfIHBhcnQgb2YgdGhlIGRlZmF1bHQgbW9kdWxlcywgeW91J2xsIG5lZWQgKi8KLSAgLyogdG8gcmVnaXN0ZXIgaXQgYnkgaGFuZCBpbiB5b3VyIGFwcGxpY2F0aW9uLiAgSXQgc2hvdWxkIG9ubHkgYmUgICovCi0gIC8qIHVzZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggRlQgMS54IGFueXdheS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfREVDTEFSRV9SRU5ERVJFUiggZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzcyApCi0KIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFJFTkQxX0hfXyAqLworI2VuZGlmIC8qIEZUUkVORDFfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdGVyLmMgYi9zcmMvcmFzdGVyL3Jhc3Rlci5jCmluZGV4IDIxYmIxNmQuLjViMjFkY2IgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcmFzdGVyLmMKKysrIGIvc3JjL3Jhc3Rlci9yYXN0ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBtb25vY2hyb21lIHJhc3RlcmVyIG1vZHVsZSBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oIGIvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oCmluZGV4IGU3ZjAwYmMuLjQ0ZGE3ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcmFzdGVycnMuaAorKysgYi9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgbW9ub2Nocm9tZSByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzLDEyICsyMywxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19SQVNURVJSU19IX18KLSNkZWZpbmUgX19SQVNURVJSU19IX18KKyNpZm5kZWYgUkFTVEVSUlNfSF8KKyNkZWZpbmUgUkFTVEVSUlNfSF8KIAogI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICiAKLSN1bmRlZiBfX0ZURVJST1JTX0hfXworI3VuZGVmIEZURVJST1JTX0hfCiAKICN1bmRlZiAgRlRfRVJSX1BSRUZJWAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBSYXN0ZXJfRXJyXwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19SQVNURVJSU19IX18gKi8KKyNlbmRpZiAvKiBSQVNURVJSU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0cGljLmMgYi9zcmMvcmFzdGVyL3Jhc3RwaWMuYwppbmRleCBmZTU4Yzk5Li5kY2ZhOTJlIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL3Jhc3RwaWMuYworKysgYi9zcmMvcmFzdGVyL3Jhc3RwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcmFzdGVyIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTksOCArNTksOSBAQAogICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwogCiAKLSAgICAvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFsc28gc2VydmVzIHJhc3RlcjUgcmVuZGVyZXIsICovCi0gICAgLyogaXQgaW1wbGVtZW50cyByZWZlcmVuY2UgY291bnRpbmcgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFhYWDogc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIHNlcnZlZCB0aGUgbm8gbG9uZ2VyIGF2YWlsYWJsZSAgKi8KKyAgICAvKiAgICAgIHJhc3RlcjUgcmVuZGVyZXIgaXQgdXNlcyByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGNvdWxkICovCisgICAgLyogICAgICBiZSByZW1vdmVkIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggcGljX2NvbnRhaW5lci0+cmFzdGVyICkKICAgICB7CiAgICAgICAoKFJhc3RlclBJQyopcGljX2NvbnRhaW5lci0+cmFzdGVyKS0+cmVmX2NvdW50Kys7CkBAIC04MiwyMSArODMsNiBAQAogICAgIHJldHVybiBlcnJvcjsKICAgfQogCi0KLSAgLyogcmUtcm91dGUgdGhlc2UgaW5pdCBhbmQgZnJlZSBmdW5jdGlvbnMgdG8gdGhlIGFib3ZlIGZ1bmN0aW9ucyAqLwotICBGVF9FcnJvcgotICBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIHJldHVybiBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBsaWJyYXJ5ICk7Ci0gIH0KLQotCi0gIHZvaWQKLSAgZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBsaWJyYXJ5ICk7Ci0gIH0KLQogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0cGljLmggYi9zcmMvcmFzdGVyL3Jhc3RwaWMuaAppbmRleCBhODc1ODg0Li43ODE1ODc2IDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL3Jhc3RwaWMuaAorKysgYi9zcmMvcmFzdGVyL3Jhc3RwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcmFzdGVyIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTUgKzE2LDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19SQVNUUElDX0hfXwotI2RlZmluZSBfX1JBU1RQSUNfSF9fCisjaWZuZGVmIFJBU1RQSUNfSF8KKyNkZWZpbmUgUkFTVFBJQ19IXwogCiAKLUZUX0JFR0lOX0hFQURFUgotCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAogCiAKK0ZUX0JFR0lOX0hFQURFUgorCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICNkZWZpbmUgRlRfU1RBTkRBUkRfUkFTVEVSX0dFVCAgZnRfc3RhbmRhcmRfcmFzdGVyCkBAIC00OCwyMiArNDgsMTYgQEAKICAgdm9pZAogICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKLSAgdm9pZAotICBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KICAgRlRfRXJyb3IKICAgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCi0gIEZUX0Vycm9yCi0gIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAvKiAqLwogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1JBU1RQSUNfSF9fICovCisjZW5kaWYgLyogUkFTVFBJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcG5nc2hpbS5jIGIvc3JjL3NmbnQvcG5nc2hpbS5jCmluZGV4IGVhNjA0NTIuLjI4MTU3NTkgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3BuZ3NoaW0uYworKysgYi9zcmMvc2ZudC9wbmdzaGltLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUE5HIEJpdG1hcCBnbHlwaCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3BuZ3NoaW0uaCBiL3NyYy9zZm50L3BuZ3NoaW0uaAppbmRleCA0Y2M1YzJiLi5mZjA1ODcxIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9wbmdzaGltLmgKKysrIGIvc3JjL3NmbnQvcG5nc2hpbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBORyBCaXRtYXAgZ2x5cGggc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QTkdTSElNX0hfXwotI2RlZmluZSBfX1BOR1NISU1fSF9fCisjaWZuZGVmIFBOR1NISU1fSF8KKyNkZWZpbmUgUE5HU0hJTV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDQsNyArNDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1BOR1NISU1fSF9fICovCisjZW5kaWYgLyogUE5HU0hJTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuYyBiL3NyYy9zZm50L3NmZHJpdmVyLmMKaW5kZXggMDk0OGFkNC4uMjIzMzI2OSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuYworKysgYi9zcmMvc2ZudC9zZmRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMzksOSArMTM5LDkgQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9TRk5UX1RBQkxFUkVDKAogICAgIHNmbnRfc2VydmljZV9zZm50X3RhYmxlLAotICAgIChGVF9TRk5UX1RhYmxlTG9hZEZ1bmMpdHRfZmFjZV9sb2FkX2FueSwKLSAgICAoRlRfU0ZOVF9UYWJsZUdldEZ1bmMpIGdldF9zZm50X3RhYmxlLAotICAgIChGVF9TRk5UX1RhYmxlSW5mb0Z1bmMpc2ZudF90YWJsZV9pbmZvICkKKyAgICAoRlRfU0ZOVF9UYWJsZUxvYWRGdW5jKXR0X2ZhY2VfbG9hZF9hbnksICAgICAvKiBsb2FkX3RhYmxlICovCisgICAgKEZUX1NGTlRfVGFibGVHZXRGdW5jKSBnZXRfc2ZudF90YWJsZSwgICAgICAgLyogZ2V0X3RhYmxlICAqLworICAgIChGVF9TRk5UX1RhYmxlSW5mb0Z1bmMpc2ZudF90YWJsZV9pbmZvICkgICAgIC8qIHRhYmxlX2luZm8gKi8KIAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCkBAIC0yMDUsOCArMjA1LDggQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9HTFlQSERJQ1RSRUMoCiAgICAgc2ZudF9zZXJ2aWNlX2dseXBoX2RpY3QsCi0gICAgKEZUX0dseXBoRGljdF9HZXROYW1lRnVuYykgIHNmbnRfZ2V0X2dseXBoX25hbWUsCi0gICAgKEZUX0dseXBoRGljdF9OYW1lSW5kZXhGdW5jKXNmbnRfZ2V0X25hbWVfaW5kZXggKQorICAgIChGVF9HbHlwaERpY3RfR2V0TmFtZUZ1bmMpICBzZm50X2dldF9nbHlwaF9uYW1lLCAgICAvKiBnZXRfbmFtZSAgICovCisgICAgKEZUX0dseXBoRGljdF9OYW1lSW5kZXhGdW5jKXNmbnRfZ2V0X25hbWVfaW5kZXggKSAgIC8qIG5hbWVfaW5kZXggKi8KIAogCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTICovCkBAIC0zMzAsNyArMzMwLDcgQEAKIAogICBGVF9ERUZJTkVfU0VSVklDRV9QU0ZPTlROQU1FUkVDKAogICAgIHNmbnRfc2VydmljZV9wc19uYW1lLAotICAgIChGVF9Qc05hbWVfR2V0RnVuYylzZm50X2dldF9wc19uYW1lICkKKyAgICAoRlRfUHNOYW1lX0dldEZ1bmMpc2ZudF9nZXRfcHNfbmFtZSApICAgICAvKiBnZXRfcHNfZm9udF9uYW1lICovCiAKIAogICAvKgpAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAqLwogICBGVF9ERUZJTkVfU0VSVklDRV9UVENNQVBTUkVDKAogICAgIHR0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbywKLSAgICAoVFRfQ01hcF9JbmZvX0dldEZ1bmMpdHRfZ2V0X2NtYXBfaW5mbyApCisgICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKXR0X2dldF9jbWFwX2luZm8gKSAgLyogZ2V0X2NtYXBfaW5mbyAqLwogCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgpAQCAtMzgxLDggKzM4MSw4IEBACiAKICAgRlRfREVGSU5FX1NFUlZJQ0VfQkRGUmVjKAogICAgIHNmbnRfc2VydmljZV9iZGYsCi0gICAgKEZUX0JERl9HZXRDaGFyc2V0SWRGdW5jKXNmbnRfZ2V0X2NoYXJzZXRfaWQsCi0gICAgKEZUX0JERl9HZXRQcm9wZXJ0eUZ1bmMpIHR0X2ZhY2VfZmluZF9iZGZfcHJvcCApCisgICAgKEZUX0JERl9HZXRDaGFyc2V0SWRGdW5jKXNmbnRfZ2V0X2NoYXJzZXRfaWQsICAgICAvKiBnZXRfY2hhcnNldF9pZCAqLworICAgIChGVF9CREZfR2V0UHJvcGVydHlGdW5jKSB0dF9mYWNlX2ZpbmRfYmRmX3Byb3AgKSAgLyogZ2V0X3Byb3BlcnR5ICAgKi8KIAogCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9CREYgKi8KQEAgLTQ1OSw1MyArNDU5LDYyIEBACiAKICAgRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKAogICAgIHNmbnRfaW50ZXJmYWNlLAotICAgIHR0X2ZhY2VfZ290b190YWJsZSwKKyAgICB0dF9mYWNlX2dvdG9fdGFibGUsICAgICAvKiBUVF9Mb2FkZXJfR290b1RhYmxlRnVuYyBnb3RvX3RhYmxlICAgICAgKi8KIAotICAgIHNmbnRfaW5pdF9mYWNlLAotICAgIHNmbnRfbG9hZF9mYWNlLAotICAgIHNmbnRfZG9uZV9mYWNlLAotICAgIHNmbnRfZ2V0X2ludGVyZmFjZSwKKyAgICBzZm50X2luaXRfZmFjZSwgICAgICAgICAvKiBUVF9Jbml0X0ZhY2VfRnVuYyAgICAgICBpbml0X2ZhY2UgICAgICAgKi8KKyAgICBzZm50X2xvYWRfZmFjZSwgICAgICAgICAvKiBUVF9Mb2FkX0ZhY2VfRnVuYyAgICAgICBsb2FkX2ZhY2UgICAgICAgKi8KKyAgICBzZm50X2RvbmVfZmFjZSwgICAgICAgICAvKiBUVF9Eb25lX0ZhY2VfRnVuYyAgICAgICBkb25lX2ZhY2UgICAgICAgKi8KKyAgICBzZm50X2dldF9pbnRlcmZhY2UsICAgICAvKiBGVF9Nb2R1bGVfUmVxdWVzdGVyICAgICBnZXRfaW50ZXJmYWNlICAgKi8KIAotICAgIHR0X2ZhY2VfbG9hZF9hbnksCisgICAgdHRfZmFjZV9sb2FkX2FueSwgICAgICAgLyogVFRfTG9hZF9BbnlfRnVuYyAgICAgICAgbG9hZF9hbnkgICAgICAgICovCiAKLSAgICB0dF9mYWNlX2xvYWRfaGVhZCwKLSAgICB0dF9mYWNlX2xvYWRfaGhlYSwKLSAgICB0dF9mYWNlX2xvYWRfY21hcCwKLSAgICB0dF9mYWNlX2xvYWRfbWF4cCwKLSAgICB0dF9mYWNlX2xvYWRfb3MyLAotICAgIHR0X2ZhY2VfbG9hZF9wb3N0LAorICAgIHR0X2ZhY2VfbG9hZF9oZWFkLCAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfaGVhZCAgICAgICAqLworICAgIHR0X2ZhY2VfbG9hZF9oaGVhLCAgICAgIC8qIFRUX0xvYWRfTWV0cmljc19GdW5jICAgIGxvYWRfaGhlYSAgICAgICAqLworICAgIHR0X2ZhY2VfbG9hZF9jbWFwLCAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfY21hcCAgICAgICAqLworICAgIHR0X2ZhY2VfbG9hZF9tYXhwLCAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfbWF4cCAgICAgICAqLworICAgIHR0X2ZhY2VfbG9hZF9vczIsICAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfb3MyICAgICAgICAqLworICAgIHR0X2ZhY2VfbG9hZF9wb3N0LCAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfcG9zdCAgICAgICAqLwogCi0gICAgdHRfZmFjZV9sb2FkX25hbWUsCi0gICAgdHRfZmFjZV9mcmVlX25hbWUsCisgICAgdHRfZmFjZV9sb2FkX25hbWUsICAgICAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9uYW1lICAgICAgICovCisgICAgdHRfZmFjZV9mcmVlX25hbWUsICAgICAgLyogVFRfRnJlZV9UYWJsZV9GdW5jICAgICAgZnJlZV9uYW1lICAgICAgICovCiAKLSAgICB0dF9mYWNlX2xvYWRfa2VybiwKLSAgICB0dF9mYWNlX2xvYWRfZ2FzcCwKLSAgICB0dF9mYWNlX2xvYWRfcGNsdCwKKyAgICB0dF9mYWNlX2xvYWRfa2VybiwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2tlcm4gICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfZ2FzcCwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2dhc3AgICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfcGNsdCwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2luaXQgICAgICAgKi8KIAogICAgIC8qIHNlZSBgdHRsb2FkLmgnICovCiAgICAgUFVUX0VNQkVEREVEX0JJVE1BUFMoIHR0X2ZhY2VfbG9hZF9iaGVkICksCi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2JoZWQgICAgICAgKi8KICAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9sb2FkX3NiaXRfaW1hZ2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9Mb2FkX1NCaXRfSW1hZ2VfRnVuYyBsb2FkX3NiaXRfaW1hZ2UgKi8KIAogICAgIC8qIHNlZSBgdHRwb3N0LmgnICovCiAgICAgUFVUX1BTX05BTUVTKCB0dF9mYWNlX2dldF9wc19uYW1lICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9HZXRfUFNfTmFtZV9GdW5jICAgICBnZXRfcHNuYW1lICAgICAgKi8KICAgICBQVVRfUFNfTkFNRVMoIHR0X2ZhY2VfZnJlZV9wc19uYW1lcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRUX0ZyZWVfVGFibGVfRnVuYyAgICAgIGZyZWVfcHNuYW1lcyAgICAqLwogCiAgICAgLyogc2luY2UgdmVyc2lvbiAyLjEuOCAqLwotICAgIHR0X2ZhY2VfZ2V0X2tlcm5pbmcsCisgICAgdHRfZmFjZV9nZXRfa2VybmluZywgICAgLyogVFRfRmFjZV9HZXRLZXJuaW5nRnVuYyAgZ2V0X2tlcm5pbmcgICAgICovCiAKICAgICAvKiBzaW5jZSB2ZXJzaW9uIDIuMiAqLwotICAgIHR0X2ZhY2VfbG9hZF9mb250X2RpciwKLSAgICB0dF9mYWNlX2xvYWRfaG10eCwKKyAgICB0dF9mYWNlX2xvYWRfZm9udF9kaXIsICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2ZvbnRfZGlyICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfaG10eCwgICAgICAvKiBUVF9Mb2FkX01ldHJpY3NfRnVuYyAgICBsb2FkX2htdHggICAgICAgKi8KIAogICAgIC8qIHNlZSBgdHRzYml0LmgnIGFuZCBgc2ZudC5oJyAqLwogICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2xvYWRfc2JpdCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfZWJsYyAgICAgICAqLwogICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2ZyZWVfc2JpdCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRUX0ZyZWVfVGFibGVfRnVuYyAgICAgIGZyZWVfZWJsYyAgICAgICAqLwogCiAgICAgUFVUX0VNQkVEREVEX0JJVE1BUFMoIHR0X2ZhY2Vfc2V0X3NiaXRfc3RyaWtlICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRUX1NldF9TQml0X1N0cmlrZV9GdW5jIHNldF9zYml0X3N0cmlrZSAqLwogICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MgKSwKKyAgICAgICAgICAgICAgICAgICAgLyogVFRfTG9hZF9TdHJpa2VfTWV0cmljc19GdW5jIGxvYWRfc3RyaWtlX21ldHJpY3MgKi8KIAotICAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MKKyAgICB0dF9mYWNlX2dldF9tZXRyaWNzLCAgICAvKiBUVF9HZXRfTWV0cmljc19GdW5jICAgICBnZXRfbWV0cmljcyAgICAgKi8KKworICAgIHR0X2ZhY2VfZ2V0X25hbWUgICAgICAgIC8qIFRUX0dldF9OYW1lX0Z1bmMgICAgICAgIGdldF9uYW1lICAgICAgICAqLwogICApCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuaCBiL3NyYy9zZm50L3NmZHJpdmVyLmgKaW5kZXggOTQ0MTE5Yy4uMjY5NDQ4OCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuaAorKysgYi9zcmMvc2ZudC9zZmRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TRkRSSVZFUl9IX18KLSNkZWZpbmUgX19TRkRSSVZFUl9IX18KKyNpZm5kZWYgU0ZEUklWRVJfSF8KKyNkZWZpbmUgU0ZEUklWRVJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTMyLDcgKzMyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19TRkRSSVZFUl9IX18gKi8KKyNlbmRpZiAvKiBTRkRSSVZFUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZlcnJvcnMuaCBiL3NyYy9zZm50L3NmZXJyb3JzLmgKaW5kZXggZTNiZWYzZi4uYzJmOWZkZiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZlcnJvcnMuaAorKysgYi9zcmMvc2ZudC9zZmVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fU0ZFUlJPUlNfSF9fCi0jZGVmaW5lIF9fU0ZFUlJPUlNfSF9fCisjaWZuZGVmIFNGRVJST1JTX0hfCisjZGVmaW5lIFNGRVJST1JTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgU0ZOVF9FcnJfCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIEZUX0VSUk9SU19ICiAKLSNlbmRpZiAvKiBfX1NGRVJST1JTX0hfXyAqLworI2VuZGlmIC8qIFNGRVJST1JTX0hfICovCisKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm50LmMgYi9zcmMvc2ZudC9zZm50LmMKaW5kZXggMGI4YjVmNC4uOTUyZDZkNCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZudC5jCisrKyBiL3NyYy9zZm50L3NmbnQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZudHBpYy5jIGIvc3JjL3NmbnQvc2ZudHBpYy5jCmluZGV4IDJhYWY0YmMuLjFmNTk2YzAgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3NmbnRwaWMuYworKysgYi9zcmMvc2ZudC9zZm50cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHNmbnQgbW9kdWxlLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3NmbnRwaWMuaCBiL3NyYy9zZm50L3NmbnRwaWMuaAppbmRleCA1NjNkNjM0Li41Y2U5NmQzIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZm50cGljLmgKKysrIGIvc3JjL3NmbnQvc2ZudHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiwxMiArMTYsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NGTlRQSUNfSF9fCi0jZGVmaW5lIF9fU0ZOVFBJQ19IX18KKyNpZm5kZWYgU0ZOVFBJQ19IXworI2RlZmluZSBTRk5UUElDX0hfCiAKIAotRlRfQkVHSU5fSEVBREVSCi0KICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICiAKIApAQCAtMzEsNyArMjksNiBAQAogI2RlZmluZSBTRk5UX1NFUlZJQ0VfR0xZUEhfRElDVF9HRVQgIHNmbnRfc2VydmljZV9nbHlwaF9kaWN0CiAjZGVmaW5lIFNGTlRfU0VSVklDRV9QU19OQU1FX0dFVCAgICAgc2ZudF9zZXJ2aWNlX3BzX25hbWUKICNkZWZpbmUgVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICAgICB0dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8KLSNkZWZpbmUgU0ZOVF9TRVJWSUNFU19HRVQgICAgICAgICAgICBzZm50X3NlcnZpY2VzCiAjZGVmaW5lIFRUX0NNQVBfQ0xBU1NFU19HRVQgICAgICAgICAgdHRfY21hcF9jbGFzc2VzCiAjZGVmaW5lIFNGTlRfU0VSVklDRV9TRk5UX1RBQkxFX0dFVCAgc2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUKICNkZWZpbmUgU0ZOVF9TRVJWSUNFX0JERl9HRVQgICAgICAgICBzZm50X3NlcnZpY2VfYmRmCkBAIC01Niw2ICs1Myw4IEBACiAjaW5jbHVkZSAidHRjbWFwLmgiCiAKIAorRlRfQkVHSU5fSEVBREVSCisKICAgdHlwZWRlZiBzdHJ1Y3QgIHNmbnRNb2R1bGVQSUNfCiAgIHsKICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogICAgICAgIHNmbnRfc2VydmljZXM7CkBAIC04Myw4ICs4Miw2IEBACiAgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnNmbnRfc2VydmljZV9wc19uYW1lICkKICNkZWZpbmUgVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8gKQotI2RlZmluZSBTRk5UX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X3NlcnZpY2VzICkKICNkZWZpbmUgVFRfQ01BUF9DTEFTU0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9jbWFwX2NsYXNzZXMgKQogI2RlZmluZSBTRk5UX1NFUlZJQ0VfU0ZOVF9UQUJMRV9HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwMiwxMyArOTksMTQgQEAKICAgRlRfRXJyb3IKICAgc2ZudF9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKIAorCitGVF9FTkRfSEVBREVSCisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgIC8qICovCiAKLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIF9fU0ZOVFBJQ19IX18gKi8KKyNlbmRpZiAvKiBTRk5UUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm9ianMuYyBiL3NyYy9zZm50L3Nmb2Jqcy5jCmluZGV4IDQwYzI3ZmEuLmNlZWFlMjAgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3Nmb2Jqcy5jCisrKyBiL3NyYy9zZm50L3Nmb2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKGJhc2UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMjAsMjcgKzEyMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9nZXRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJucyBhIGdpdmVuIEVOR0xJU0ggbmFtZSByZWNvcmQgaW4gQVNDSUkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1laWQgOjogVGhlIG5hbWUgaWQgb2YgdGhlIG5hbWUgcmVjb3JkIHRvIHJldHVybi4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lICAgOjogVGhlIGFkZHJlc3Mgb2YgYSBzdHJpbmcgcG9pbnRlci4gIE5VTEwgaWYgbm8gbmFtZSBpcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgIHByZXNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgRlRfRXJyb3IKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBzZm50LmggKi8KKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9nZXRfbmFtZSggVFRfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICBuYW1laWQsCiAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBuYW1lICkKQEAgLTQ2OSwxMCArNDUxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29mZi5tZXRhT3JpZ0xlbmd0aCAhPSAwICkgKSB8fAogICAgICAgICAgKCB3b2ZmLm1ldGFMZW5ndGggIT0gMCAmJiB3b2ZmLm1ldGFPcmlnTGVuZ3RoID09IDAgKSAgICAgfHwKICAgICAgICAgICggd29mZi5wcml2T2Zmc2V0ID09IDAgJiYgd29mZi5wcml2TGVuZ3RoICE9IDAgKSAgICAgICAgICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ3b2ZmX2ZvbnRfb3BlbjogaW52YWxpZCBXT0ZGIGhlYWRlclxuIiApKTsKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIH0KIAotICAgIGlmICggRlRfQUxMT0MoIHNmbnQsIHdvZmYudG90YWxTZm50U2l6ZSApIHx8Ci0gICAgICAgICBGVF9ORVcoIHNmbnRfc3RyZWFtICkgICAgICAgICAgICAgICAgKQorICAgIC8qIERvbid0IHRydXN0IGB0b3RhbFNmbnRTaXplJyBiZWZvcmUgdGhvcm91Z2ggY2hlY2tzLiAqLworICAgIGlmICggRlRfQUxMT0MoIHNmbnQsIDEyICsgd29mZi5udW1fdGFibGVzICogMTZVTCApIHx8CisgICAgICAgICBGVF9ORVcoIHNmbnRfc3RyZWFtICkgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgc2ZudF9oZWFkZXIgPSBzZm50OwpAQCAtNTM5LDYgKzUyNSw4IEBACiAgICAgICBpZiAoIHRhYmxlLT5UYWcgPD0gb2xkX3RhZyApCiAgICAgICB7CiAgICAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgICAgICBGVF9FUlJPUigoICJ3b2ZmX2ZvbnRfb3BlbjogdGFibGUgdGFncyBhcmUgbm90IHNvcnRlZFxuIiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CkBAIC01NzMsNiArNTYxLDcgQEAKICAgICAgICAgICAgc2ZudF9vZmZzZXQgPiB3b2ZmLnRvdGFsU2ZudFNpemUgLSB0YWJsZS0+T3JpZ0xlbmd0aCB8fAogICAgICAgICAgICB0YWJsZS0+Q29tcExlbmd0aCA+IHRhYmxlLT5PcmlnTGVuZ3RoICAgICAgICAgICAgICAgICkKICAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAid29mZl9mb250X29wZW46IGludmFsaWQgdGFibGUgb2Zmc2V0c1xuIiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CkBAIC01OTgsNiArNTg3LDggQEAKICAgICAgIGlmICggd29mZi5tZXRhT2Zmc2V0ICE9IHdvZmZfb2Zmc2V0ICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgd29mZi5tZXRhT2Zmc2V0ICsgd29mZi5tZXRhTGVuZ3RoID4gd29mZi5sZW5ndGggKQogICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJ3b2ZmX2ZvbnRfb3BlbjoiCisgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGBtZXRhZGF0YScgb2Zmc2V0IG9yIGxlbmd0aFxuIiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CkBAIC02MTQsNiArNjA1LDcgQEAKICAgICAgIGlmICggd29mZi5wcml2T2Zmc2V0ICE9IHdvZmZfb2Zmc2V0ICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgd29mZi5wcml2T2Zmc2V0ICsgd29mZi5wcml2TGVuZ3RoID4gd29mZi5sZW5ndGggKQogICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJ3b2ZmX2ZvbnRfb3BlbjogaW52YWxpZCBgcHJpdmF0ZScgb2Zmc2V0IG9yIGxlbmd0aFxuIiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CkBAIC02MjUsMTAgKzYxNywxOSBAQAogICAgIGlmICggc2ZudF9vZmZzZXQgIT0gd29mZi50b3RhbFNmbnRTaXplIHx8CiAgICAgICAgICB3b2ZmX29mZnNldCAhPSB3b2ZmLmxlbmd0aCAgICAgICAgKQogICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIndvZmZfZm9udF9vcGVuOiBpbnZhbGlkIGBzZm50JyB0YWJsZSBzdHJ1Y3R1cmVcbiIgKSk7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCisgICAgLyogTm93IHVzZSBgdG90YWxTZm50U2l6ZScuICovCisgICAgaWYgKCBGVF9SRUFMTE9DKCBzZm50LAorICAgICAgICAgICAgICAgICAgICAgMTIgKyB3b2ZmLm51bV90YWJsZXMgKiAxNlVMLAorICAgICAgICAgICAgICAgICAgICAgd29mZi50b3RhbFNmbnRTaXplICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgc2ZudF9oZWFkZXIgPSBzZm50ICsgMTI7CisKICAgICAvKiBXcml0ZSB0aGUgdGFibGVzLiAqLwogCiAgICAgZm9yICggbm4gPSAwOyBubiA8IHdvZmYubnVtX3RhYmxlczsgbm4rKyApCkBAIC02NjksNiArNjcwLDcgQEAKICAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICAgIGlmICggb3V0cHV0X2xlbiAhPSB0YWJsZS0+T3JpZ0xlbmd0aCApCiAgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ3b2ZmX2ZvbnRfb3BlbjogY29tcHJlc3NlZCB0YWJsZSBsZW5ndGggbWlzbWF0Y2hcbiIgKSk7CiAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgICAgfQpAQCAtODM5LDEzICs4NDEsMTQgQEAKICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHNmbnRfaW5pdF9mYWNlKCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5zdGFuY2VfaW5kZXgsCiAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAogICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKICAgewotICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKLSAgICBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSA9IGZhY2UtPnJvb3QuZHJpdmVyLT5yb290LmxpYnJhcnk7Ci0gICAgU0ZOVF9TZXJ2aWNlICAgIHNmbnQ7CisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBGVF9MaWJyYXJ5ICAgIGxpYnJhcnkgPSBmYWNlLT5yb290LmRyaXZlci0+cm9vdC5saWJyYXJ5OworICAgIFNGTlRfU2VydmljZSAgc2ZudDsKKyAgICBGVF9JbnQgICAgICAgIGZhY2VfaW5kZXg7CiAKIAogICAgIC8qIGZvciBub3csIHBhcmFtZXRlcnMgYXJlIHVudXNlZCAqLwpAQCAtODc4LDI0ICs4ODEsMTAzIEBACiAgICAgLyogU3RyZWFtIG1heSBoYXZlIGNoYW5nZWQgaW4gc2ZudF9vcGVuX2ZvbnQuICovCiAgICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CiAKLSAgICBGVF9UUkFDRTIoKCAic2ZudF9pbml0X2ZhY2U6ICUwOHAsICVsZFxuIiwgZmFjZSwgZmFjZV9pbmRleCApKTsKKyAgICBGVF9UUkFDRTIoKCAic2ZudF9pbml0X2ZhY2U6ICUwOHAsICVsZFxuIiwgZmFjZSwgZmFjZV9pbnN0YW5jZV9pbmRleCApKTsKIAotICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQotICAgICAgZmFjZV9pbmRleCA9IDA7CisgICAgZmFjZV9pbmRleCA9IEZUX0FCUyggZmFjZV9pbnN0YW5jZV9pbmRleCApICYgMHhGRkZGOwogCiAgICAgaWYgKCBmYWNlX2luZGV4ID49IGZhY2UtPnR0Y19oZWFkZXIuY291bnQgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgeworICAgICAgaWYgKCBmYWNlX2luc3RhbmNlX2luZGV4ID49IDAgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFjZV9pbmRleCA9IDA7CisgICAgfQogCiAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggZmFjZS0+dHRjX2hlYWRlci5vZmZzZXRzW2ZhY2VfaW5kZXhdICkgKQogICAgICAgcmV0dXJuIGVycm9yOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgVHJ1ZVR5cGUgZmlsZSAqLworICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIHZhbGlkIFRydWVUeXBlIGZpbGUgKi8KICAgICBlcnJvciA9IHNmbnQtPmxvYWRfZm9udF9kaXIoIGZhY2UsIHN0cmVhbSApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgIHsKKyAgICAgIEZUX1VMb25nICBmdmFyX2xlbjsKKworICAgICAgRlRfVUxvbmcgIHZlcnNpb247CisgICAgICBGVF9VTG9uZyAgb2Zmc2V0OworCisgICAgICBGVF9VU2hvcnQgIG51bV9heGVzOworICAgICAgRlRfVVNob3J0ICBheGlzX3NpemU7CisgICAgICBGVF9VU2hvcnQgIG51bV9pbnN0YW5jZXM7CisgICAgICBGVF9VU2hvcnQgIGluc3RhbmNlX3NpemU7CisKKyAgICAgIEZUX0ludCAgaW5zdGFuY2VfaW5kZXg7CisKKworICAgICAgaW5zdGFuY2VfaW5kZXggPSBGVF9BQlMoIGZhY2VfaW5zdGFuY2VfaW5kZXggKSA+PiAxNjsKKworICAgICAgLyogdGVzdCB3aGV0aGVyIGN1cnJlbnQgZmFjZSBpcyBhIEdYIGZvbnQgd2l0aCBuYW1lZCBpbnN0YW5jZXMgKi8KKyAgICAgIGlmICggZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19mdmFyLCBzdHJlYW0sICZmdmFyX2xlbiApIHx8CisgICAgICAgICAgIGZ2YXJfbGVuIDwgMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9SRUFEX1VMT05HKCB2ZXJzaW9uICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfUkVBRF9VU0hPUlQoIG9mZnNldCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIEZUX1NUUkVBTV9TS0lQKCAyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9SRUFEX1VTSE9SVCggbnVtX2F4ZXMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfUkVBRF9VU0hPUlQoIGF4aXNfc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIEZUX1JFQURfVVNIT1JUKCBudW1faW5zdGFuY2VzICkgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9SRUFEX1VTSE9SVCggaW5zdGFuY2Vfc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgeworICAgICAgICB2ZXJzaW9uICAgICAgID0gMDsKKyAgICAgICAgb2Zmc2V0ICAgICAgICA9IDA7CisgICAgICAgIG51bV9heGVzICAgICAgPSAwOworICAgICAgICBheGlzX3NpemUgICAgID0gMDsKKyAgICAgICAgbnVtX2luc3RhbmNlcyA9IDA7CisgICAgICAgIGluc3RhbmNlX3NpemUgPSAwOworICAgICAgfQorCisgICAgICAvKiBjaGVjayB0aGF0IHRoZSBkYXRhIGlzIGJvdW5kIGJ5IHRoZSB0YWJsZSBsZW5ndGg7ICovCisgICAgICAvKiBiYXNlZCBvbiBzaW1pbGFyIGNvZGUgaW4gZnVuY3Rpb24gYFRUX0dldF9NTV9WYXInICovCisgICAgICBpZiAoIHZlcnNpb24gIT0gMHgwMDAxMDAwMFVMICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBheGlzX3NpemUgIT0gMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgbnVtX2F4ZXMgPiAweDNGRkUgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIGluc3RhbmNlX3NpemUgIT0gNCArIDQgKiBudW1fYXhlcyAgICAgICAgICB8fAorICAgICAgICAgICBudW1faW5zdGFuY2VzID4gMHg3RUZGICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgYXhpc19zaXplICogbnVtX2F4ZXMgICAgICAgICAgKworICAgICAgICAgICAgIGluc3RhbmNlX3NpemUgKiBudW1faW5zdGFuY2VzID4gZnZhcl9sZW4gKQorICAgICAgICBudW1faW5zdGFuY2VzID0gMDsKKworICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBNdWx0aXBsZSBNYXN0ZXIgQ0ZGcyB5ZXQgKi8KKyAgICAgIGlmICggIWZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfQ0ZGLCBzdHJlYW0sIDAgKSApCisgICAgICAgIG51bV9pbnN0YW5jZXMgPSAwOworCisgICAgICAvKiB3ZSBzdXBwb3J0IGF0IG1vc3QgMl4xNSAtIDEgaW5zdGFuY2VzICovCisgICAgICBpZiAoIG51bV9pbnN0YW5jZXMgPj0gKCAxVSA8PCAxNSApIC0gMSApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZV9pbnN0YW5jZV9pbmRleCA+PSAwICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG51bV9pbnN0YW5jZXMgPSAwOworICAgICAgfQorCisgICAgICAvKiBpbnN0YW5jZSBpbmRpY2VzIGluIGBmYWNlX2luc3RhbmNlX2luZGV4JyBzdGFydCB3aXRoIGluZGV4IDEsICovCisgICAgICAvKiB0aHVzIGA+JyBhbmQgbm90IGA+PScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGluc3RhbmNlX2luZGV4ID4gbnVtX2luc3RhbmNlcyApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZV9pbnN0YW5jZV9pbmRleCA+PSAwICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG51bV9pbnN0YW5jZXMgPSAwOworICAgICAgfQorCisgICAgICBmYWNlLT5yb290LnN0eWxlX2ZsYWdzID0gKEZUX0xvbmcpbnVtX2luc3RhbmNlcyA8PCAxNjsKKyAgICB9CisjZW5kaWYKKwogICAgIGZhY2UtPnJvb3QubnVtX2ZhY2VzICA9IGZhY2UtPnR0Y19oZWFkZXIuY291bnQ7Ci0gICAgZmFjZS0+cm9vdC5mYWNlX2luZGV4ID0gZmFjZV9pbmRleDsKKyAgICBmYWNlLT5yb290LmZhY2VfaW5kZXggPSBmYWNlX2luc3RhbmNlX2luZGV4OwogCiAgICAgcmV0dXJuIGVycm9yOwogICB9CkBAIC05NDYsNyArMTAyOCw3IEBACiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBzZm50X2xvYWRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luc3RhbmNlX2luZGV4LAogICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKICAgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApCiAgIHsKQEAgLTk2Miw3ICsxMDQ0LDcgQEAKIAogICAgIFNGTlRfU2VydmljZSAgc2ZudCA9IChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudDsKIAotICAgIEZUX1VOVVNFRCggZmFjZV9pbmRleCApOworICAgIEZUX1VOVVNFRCggZmFjZV9pbnN0YW5jZV9pbmRleCApOwogCiAKICAgICAvKiBDaGVjayBwYXJhbWV0ZXJzICovCkBAIC0xMjg0LDcgKzEzNjYsNyBAQAogICAgICAgICAgIGZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfSVRBTElDOwogICAgICAgfQogCi0gICAgICByb290LT5zdHlsZV9mbGFncyA9IGZsYWdzOworICAgICAgcm9vdC0+c3R5bGVfZmxhZ3MgfD0gZmxhZ3M7CiAKICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTMyOSw3ICsxNDExLDcgQEAKICAgICAgICAqICBkZXB0aHMgaW4gdGhlIEZUX0JpdG1hcF9TaXplIHJlY29yZC4gIFRoaXMgaXMgYSBkZXNpZ24gZXJyb3IuCiAgICAgICAgKi8KICAgICAgIHsKLSAgICAgICAgRlRfVUludCAgaSwgY291bnQ7CisgICAgICAgIEZUX1VJbnQgIGNvdW50OwogCiAKICAgICAgICAgY291bnQgPSBmYWNlLT5zYml0X251bV9zdHJpa2VzOwpAQCAtMTM0MSw2ICsxNDIzLDkgQEAKICAgICAgICAgICBGVF9TaG9ydCAgICAgICAgIGF2Z3dpZHRoID0gZmFjZS0+b3MyLnhBdmdDaGFyV2lkdGg7CiAgICAgICAgICAgRlRfU2l6ZV9NZXRyaWNzICBtZXRyaWNzOwogCisgICAgICAgICAgRlRfVUludCogIHNiaXRfc3RyaWtlX21hcCA9IE5VTEw7CisgICAgICAgICAgRlRfVUludCAgIHN0cmlrZV9pZHgsIGJzaXplX2lkeDsKKwogCiAgICAgICAgICAgaWYgKCBlbV9zaXplID09IDAgfHwgZmFjZS0+b3MyLnZlcnNpb24gPT0gMHhGRkZGVSApCiAgICAgICAgICAgewpAQCAtMTM0OCwzMSArMTQzMyw1MCBAQAogICAgICAgICAgICAgZW1fc2l6ZSA9IDE7CiAgICAgICAgICAgfQogCi0gICAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHJvb3QtPmF2YWlsYWJsZV9zaXplcywgY291bnQgKSApCisgICAgICAgICAgLyogdG8gYXZvaWQgaW52YWxpZCBzdHJpa2UgZGF0YSBpbiB0aGUgYGF2YWlsYWJsZV9zaXplcycgZmllbGQgKi8KKyAgICAgICAgICAvKiBvZiBgRlRfRmFjZScsIHdlIG1hcCBgYXZhaWxhYmxlX3NpemVzJyBpbmRpY2VzIHRvIHN0cmlrZSAgICAqLworICAgICAgICAgIC8qIGluZGljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHJvb3QtPmF2YWlsYWJsZV9zaXplcywgY291bnQgKSB8fAorICAgICAgICAgICAgICAgRlRfTkVXX0FSUkFZKCBzYml0X3N0cmlrZV9tYXAsIGNvdW50ICkgKQogICAgICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKyAgICAgICAgICBic2l6ZV9pZHggPSAwOworICAgICAgICAgIGZvciAoIHN0cmlrZV9pZHggPSAwOyBzdHJpa2VfaWR4IDwgY291bnQ7IHN0cmlrZV9pZHgrKyApCiAgICAgICAgICAgewotICAgICAgICAgICAgRlRfQml0bWFwX1NpemUqICBic2l6ZSA9IHJvb3QtPmF2YWlsYWJsZV9zaXplcyArIGk7CisgICAgICAgICAgICBGVF9CaXRtYXBfU2l6ZSogIGJzaXplID0gcm9vdC0+YXZhaWxhYmxlX3NpemVzICsgYnNpemVfaWR4OwogCiAKLSAgICAgICAgICAgIGVycm9yID0gc2ZudC0+bG9hZF9zdHJpa2VfbWV0cmljcyggZmFjZSwgaSwgJm1ldHJpY3MgKTsKKyAgICAgICAgICAgIGVycm9yID0gc2ZudC0+bG9hZF9zdHJpa2VfbWV0cmljcyggZmFjZSwgc3RyaWtlX2lkeCwgJm1ldHJpY3MgKTsKICAgICAgICAgICAgIGlmICggZXJyb3IgKQotICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gKEZUX1Nob3J0KSggbWV0cmljcy5oZWlnaHQgPj4gNiApOwotICAgICAgICAgICAgYnNpemUtPndpZHRoID0gKEZUX1Nob3J0KSgKLSAgICAgICAgICAgICAgICAoIGF2Z3dpZHRoICogbWV0cmljcy54X3BwZW0gKyBlbV9zaXplIC8gMiApIC8gZW1fc2l6ZSApOworICAgICAgICAgICAgYnNpemUtPndpZHRoICA9IChGVF9TaG9ydCkoCisgICAgICAgICAgICAgICggYXZnd2lkdGggKiBtZXRyaWNzLnhfcHBlbSArIGVtX3NpemUgLyAyICkgLyBlbV9zaXplICk7CiAKICAgICAgICAgICAgIGJzaXplLT54X3BwZW0gPSBtZXRyaWNzLnhfcHBlbSA8PCA2OwogICAgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IG1ldHJpY3MueV9wcGVtIDw8IDY7CiAKICAgICAgICAgICAgIC8qIGFzc3VtZSA3MmRwaSAqLwogICAgICAgICAgICAgYnNpemUtPnNpemUgICA9IG1ldHJpY3MueV9wcGVtIDw8IDY7CisKKyAgICAgICAgICAgIC8qIG9ubHkgdXNlIHN0cmlrZXMgd2l0aCB2YWxpZCBQUEVNIHZhbHVlcyAqLworICAgICAgICAgICAgaWYgKCBic2l6ZS0+eF9wcGVtICYmIGJzaXplLT55X3BwZW0gKQorICAgICAgICAgICAgICBzYml0X3N0cmlrZV9tYXBbYnNpemVfaWR4KytdID0gc3RyaWtlX2lkeDsKICAgICAgICAgICB9CiAKLSAgICAgICAgICByb290LT5mYWNlX2ZsYWdzICAgICB8PSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVM7Ci0gICAgICAgICAgcm9vdC0+bnVtX2ZpeGVkX3NpemVzID0gKEZUX0ludCljb3VudDsKKyAgICAgICAgICAvKiByZWR1Y2UgYXJyYXkgc2l6ZSB0byB0aGUgYWN0dWFsbHkgdXNlZCBlbGVtZW50cyAqLworICAgICAgICAgICh2b2lkKUZUX1JFTkVXX0FSUkFZKCBzYml0X3N0cmlrZV9tYXAsIGNvdW50LCBic2l6ZV9pZHggKTsKKworICAgICAgICAgIC8qIGZyb20gbm93IG9uLCBhbGwgc3RyaWtlIGluZGljZXMgYXJlIG1hcHBlZCAqLworICAgICAgICAgIC8qIHVzaW5nIGBzYml0X3N0cmlrZV9tYXAnICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggYnNpemVfaWR4ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmYWNlLT5zYml0X3N0cmlrZV9tYXAgPSBzYml0X3N0cmlrZV9tYXA7CisKKyAgICAgICAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgICAgIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUzsKKyAgICAgICAgICAgIHJvb3QtPm51bV9maXhlZF9zaXplcyA9IChGVF9JbnQpYnNpemVfaWR4OworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogCkBAIC0xNTY2LDYgKzE2NzAsNyBAQAogCiAgICAgLyogZnJlZWluZyBzYml0IHNpemUgdGFibGUgKi8KICAgICBGVF9GUkVFKCBmYWNlLT5yb290LmF2YWlsYWJsZV9zaXplcyApOworICAgIEZUX0ZSRUUoIGZhY2UtPnNiaXRfc3RyaWtlX21hcCApOwogICAgIGZhY2UtPnJvb3QubnVtX2ZpeGVkX3NpemVzID0gMDsKIAogICAgIEZUX0ZSRUUoIGZhY2UtPnBvc3RzY3JpcHRfbmFtZSApOwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZvYmpzLmggYi9zcmMvc2ZudC9zZm9ianMuaAppbmRleCA3N2M3ZDkyLi42MGI1Njk4IDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZm9ianMuaAorKysgYi9zcmMvc2ZudC9zZm9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTRk5UIG9iamVjdCBtYW5hZ2VtZW50IChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU0ZPQkpTX0hfXwotI2RlZmluZSBfX1NGT0JKU19IX18KKyNpZm5kZWYgU0ZPQkpTX0hfCisjZGVmaW5lIFNGT0JKU19IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzEsMjQgKzMxLDI5IEBACiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIHNmbnRfaW5pdF9mYWNlKCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5zdGFuY2VfaW5kZXgsCiAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAogICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICk7CiAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgc2ZudF9sb2FkX2ZhY2UoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbnN0YW5jZV9pbmRleCwKICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCiAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKTsKIAogICBGVF9MT0NBTCggdm9pZCApCiAgIHNmbnRfZG9uZV9mYWNlKCBUVF9GYWNlICBmYWNlICk7CiAKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9nZXRfbmFtZSggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICBuYW1laWQsCisgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBuYW1lICk7CisKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19TRkRSSVZFUl9IX18gKi8KKyNlbmRpZiAvKiBTRkRSSVZFUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRiZGYuYyBiL3NyYy9zZm50L3R0YmRmLmMKaW5kZXggMDk4Yjc4MS4uZjg5MTY5MSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRiZGYuYworKysgYi9zcmMvc2ZudC90dGJkZi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoYm9keSkuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGJkZi5oIGIvc3JjL3NmbnQvdHRiZGYuaAppbmRleCBmZTRiYTQ4Li5hZTUyMWM2IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGJkZi5oCisrKyBiL3NyYy9zZm50L3R0YmRmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIEJERiBwcm9wZXJ0aWVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUQkRGX0hfXwotI2RlZmluZSBfX1RUQkRGX0hfXworI2lmbmRlZiBUVEJERl9IXworI2RlZmluZSBUVEJERl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDAsNyArNDAsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUQkRGX0hfXyAqLworI2VuZGlmIC8qIFRUQkRGX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGNtYXAuYyBiL3NyYy9zZm50L3R0Y21hcC5jCmluZGV4IDgxNWVlN2MuLmNkNzQ2N2QgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0Y21hcC5jCisrKyBiL3NyYy9zZm50L3R0Y21hcC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01MSw2ICs1MSwxMyBAQAogI2RlZmluZSBUVF9ORVhUX1VMT05HICAgRlRfTkVYVF9VTE9ORwogCiAKKyAgLyogVG9vIGxhcmdlIGdseXBoIGluZGV4IHJldHVybiB2YWx1ZXMgYXJlIGNhdWdodCBpbiBgRlRfR2V0X0NoYXJfSW5kZXgnICovCisgIC8qIGFuZCBgRlRfR2V0X05leHRfQ2hhcicgKHRoZSBsYXR0ZXIgY2FsbHMgdGhlIGludGVybmFsIGBuZXh0JyBmdW5jdGlvbiAqLworICAvKiBhZ2FpbiBpbiB0aGlzIGNhc2UpLiAgVG8gbWFyayBjaGFyYWN0ZXIgY29kZSByZXR1cm4gdmFsdWVzIGFzIGludmFsaWQgKi8KKyAgLyogaXQgaXMgc3VmZmljaWVudCB0byBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW5kZXggcmV0dXJuIHZhbHVlIHRvICovCisgIC8qIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKICAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCiAgIHR0X2NtYXBfaW5pdCggVFRfQ01hcCAgIGNtYXAsCiAgICAgICAgICAgICAgICAgRlRfQnl0ZSogIHRhYmxlICkKQEAgLTE5OSw3ICsyMDYsNyBAQAogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiBUaGlzIGlzIHVzZWQgZm9yIGNlcnRhaW4gQ0pLIGVuY29kaW5ncyB0aGF0IGVuY29kZSB0ZXh0IGluIGEgICoqKioqLwotICAvKioqKiogbWl4ZWQgOC8xNiBiaXRzIGVuY29kaW5nIGFsb25nIHRoZSBmb2xsb3dpbmcgbGluZXM6ICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIG1peGVkIDgvMTYgYml0cyBlbmNvZGluZyBhbG9uZyB0aGUgZm9sbG93aW5nIGxpbmVzLiAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogKiBDZXJ0YWluIGJ5dGUgdmFsdWVzIGNvcnJlc3BvbmQgdG8gYW4gOC1iaXQgY2hhcmFjdGVyIGNvZGUgICAqKioqKi8KICAgLyoqKioqICAgKHR5cGljYWxseSBpbiB0aGUgcmFuZ2UgMC4uMTI3IGZvciBBU0NJSSBjb21wYXRpYmlsaXR5KS4gICAgKioqKiovCkBAIC0yMDksMTkgKzIxNiwxOSBAQAogICAvKioqKiogICBzZWNvbmQgYnl0ZSBvZiBhIDItYnl0ZSBjaGFyYWN0ZXIpLiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiBUaGUgZm9sbG93aW5nIGNoYXJtYXAgbG9va3VwIGFuZCBpdGVyYXRpb24gZnVuY3Rpb25zIGFsbCAgICAgICoqKioqLwotICAvKioqKiogYXNzdW1lIHRoYXQgdGhlIHZhbHVlICJjaGFyY29kZSIgY29ycmVzcG9uZCB0byBmb2xsb3dpbmc6ICAgICAqKioqKi8KKyAgLyoqKioqIGFzc3VtZSB0aGF0IHRoZSB2YWx1ZSBgY2hhcmNvZGUnIGZ1bGZpbGxzIHRoZSBmb2xsb3dpbmcuICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAtIEZvciBvbmUgYnl0ZSBjaGFyYWN0ZXJzLCAiY2hhcmNvZGUiIGlzIHNpbXBseSB0aGUgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgLSBGb3Igb25lIGJ5dGUgY2hhcmFjdGVycywgYGNoYXJjb2RlJyBpcyBzaW1wbHkgdGhlICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqICAgLSBGb3IgdHdvIGJ5dGUgY2hhcmFjdGVycywgImNoYXJjb2RlIiBpcyB0aGUgMi1ieXRlICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgICAgY2hhcmFjdGVyIGNvZGUgaW4gYmlnIGVuZGlhbiBmb3JtYXQuICBNb3JlIGV4YWN0bHk6ICAgICAgICoqKioqLworICAvKioqKiogICAtIEZvciB0d28gYnl0ZSBjaGFyYWN0ZXJzLCBgY2hhcmNvZGUnIGlzIHRoZSAyLWJ5dGUgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICBjaGFyYWN0ZXIgY29kZSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gIE1vcmUgcHJlY2lzZWx5OiAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgKGNoYXJjb2RlID4+IDgpICAgIGlzIHRoZSBmaXJzdCBieXRlIHZhbHVlICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgIChjaGFyY29kZSAmIDB4RkYpICBpcyB0aGUgc2Vjb25kIGJ5dGUgdmFsdWUgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogTm90ZSB0aGF0IG5vdCBhbGwgdmFsdWVzIG9mICJjaGFyY29kZSIgYXJlIHZhbGlkIGFjY29yZGluZyAgICAqKioqKi8KLSAgLyoqKioqIHRvIHRoZXNlIHJ1bGVzLCBhbmQgdGhlIGZ1bmN0aW9uIG1vZGVyYXRlbHkgY2hlY2sgdGhlICAgICAgICAgKioqKiovCisgIC8qKioqKiBOb3RlIHRoYXQgbm90IGFsbCB2YWx1ZXMgb2YgYGNoYXJjb2RlJyBhcmUgdmFsaWQgYWNjb3JkaW5nICAgICoqKioqLworICAvKioqKiogdG8gdGhlc2UgcnVsZXMsIGFuZCB0aGUgZnVuY3Rpb24gbW9kZXJhdGVseSBjaGVja3MgdGhlICAgICAgICAqKioqKi8KICAgLyoqKioqIGFyZ3VtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI0OSw3ICsyNTYsNyBAQAogICAvKiB0YWJsZSwgaS5lLiwgaXQgaXMgdGhlIGNvcnJlc3BvbmRpbmcgc3ViLWhlYWRlciBpbmRleCBtdWx0aXBsaWVkICAgICAgKi8KICAgLyogYnkgOC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFYWNoIHN1Yi1oZWFkZXIgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRWFjaCBzdWItaGVhZGVyIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgIFRZUEUgICAgICAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNjQsMTEgKzI3MSwxMSBAQAogICAvKiBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIElmIGEgY2hhcmFjdGVyIGNvZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIGdpdmVuIHN1Yi1oZWFkZXIsIHRoZW4gICAgICAqLwotICAvKiBtYXBwaW5nIGl0IHRvIGEgZ2x5cGggaW5kZXggaXMgZG9uZSBhcyBmb2xsb3dzOiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogbWFwcGluZyBpdCB0byBhIGdseXBoIGluZGV4IGlzIGRvbmUgYXMgZm9sbG93cy4gICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAqIFRoZSB2YWx1ZSBvZiBgb2Zmc2V0JyBpcyByZWFkLiAgVGhpcyBpcyBhIF9ieXRlXyBkaXN0YW5jZSBmcm9tIHRoZSAgKi8KICAgLyogICBsb2NhdGlvbiBvZiB0aGUgYG9mZnNldCcgZmllbGQgaXRzZWxmIGludG8gYSBzbGljZSBvZiB0aGUgICAgICAgICAgICovCi0gIC8qICAgYGdseXBoX2lkcycgdGFibGUuICBMZXQncyBjYWxsIGl0IGBzbGljZScgKGl0IGlzIGEgVVNIT1JUW10gdG9vKS4gICAqLworICAvKiAgIGBnbHlwaF9pZHMnIHRhYmxlLiAgTGV0J3MgY2FsbCBpdCBgc2xpY2UnIChpdCBpcyBhIFVTSE9SVFtdLCB0b28pLiAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICogVGhlIHZhbHVlIGBzbGljZVtjaGFyLmxvIC0gZmlyc3RdJyBpcyByZWFkLiAgSWYgaXQgaXMgMCwgdGhlcmUgaXMgICAqLwogICAvKiAgIG5vIGdseXBoIGZvciB0aGUgY2hhcmNvZGUuICBPdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiBgZGVsdGEnIGlzICAgICAgKi8KQEAgLTMyNiw3ICszMzMsNyBAQAogICAgIEZUX0FTU0VSVCggcCA9PSB0YWJsZSArIDUxOCApOwogCiAgICAgc3VicyAgICAgID0gcDsKLSAgICBnbHlwaF9pZHMgPSBzdWJzICsgKG1heF9zdWJzICsgMSkgKiA4OworICAgIGdseXBoX2lkcyA9IHN1YnMgKyAoIG1heF9zdWJzICsgMSApICogODsKICAgICBpZiAoIGdseXBoX2lkcyA+IHZhbGlkLT5saW1pdCApCiAgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKIApAQCAtNDM2LDYgKzQ0Myw3IEBACiAgICAgICB9CiAgICAgICByZXN1bHQgPSBzdWI7CiAgICAgfQorCiAgIEV4aXQ6CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpAQCAtNDc1LDYgKzQ4Myw3IEBACiAgICAgICAgICAgcmVzdWx0ID0gKEZUX1VJbnQpKCAoRlRfSW50KWlkeCArIGRlbHRhICkgJiAweEZGRkZVOwogICAgICAgfQogICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIApAQCAtNzU0LDYgKzc2Myw5IEBACiAgIHN0YXRpYyB2b2lkCiAgIHR0X2NtYXA0X25leHQoIFRUX0NNYXA0ICBjbWFwICkKICAgeworICAgIFRUX0ZhY2UgICBmYWNlICA9IChUVF9GYWNlKWNtYXAtPmNtYXAuY21hcC5jaGFybWFwLmZhY2U7CisgICAgRlRfQnl0ZSogIGxpbWl0ID0gZmFjZS0+Y21hcF90YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKKwogICAgIEZUX1VJbnQgIGNoYXJjb2RlOwogCiAKQEAgLTc2NSw3ICs3NzcsNyBAQAogICAgIGlmICggY2hhcmNvZGUgPCBjbWFwLT5jdXJfc3RhcnQgKQogICAgICAgY2hhcmNvZGUgPSBjbWFwLT5jdXJfc3RhcnQ7CiAKLSAgICBmb3IgKCA7OyApCisgICAgZm9yICg7OykKICAgICB7CiAgICAgICBGVF9CeXRlKiAgdmFsdWVzID0gY21hcC0+Y3VyX3ZhbHVlczsKICAgICAgIEZUX1VJbnQgICBlbmQgICAgPSBjbWFwLT5jdXJfZW5kOwpAQCAtNzc5LDE1ICs3OTEsMTkgQEAKICAgICAgICAgICBGVF9CeXRlKiAgcCA9IHZhbHVlcyArIDIgKiAoIGNoYXJjb2RlIC0gY21hcC0+Y3VyX3N0YXJ0ICk7CiAKIAorICAgICAgICAgIC8qIGlmIHAgPiBsaW1pdCwgdGhlIHdob2xlIHNlZ21lbnQgaXMgaW52YWxpZCAqLworICAgICAgICAgIGlmICggcCA+IGxpbWl0ICkKKyAgICAgICAgICAgIGdvdG8gTmV4dF9TZWdtZW50OworCiAgICAgICAgICAgZG8KICAgICAgICAgICB7CiAgICAgICAgICAgICBGVF9VSW50ICBnaW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOwogCiAKLSAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgICAgaWYgKCBnaW5kZXggKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7Ci0gICAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgICAgICBpZiAoIGdpbmRleCApCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyY29kZTsKICAgICAgICAgICAgICAgICBjbWFwLT5jdXJfZ2luZGV4ICAgPSBnaW5kZXg7CkBAIC04MDMsNyArODE5LDI2IEBACiAgICAgICAgICAgICBGVF9VSW50ICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpY2hhcmNvZGUgKyBkZWx0YSApICYgMHhGRkZGVTsKIAogCi0gICAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKKyAgICAgICAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIHdlIGhhdmUgYW4gaW52YWxpZCBnbHlwaCBpbmRleDsgaWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3csICovCisgICAgICAgICAgICAgIC8qIHdlIGNhbiBhZGp1c3QgYGNoYXJjb2RlJywgb3RoZXJ3aXNlIHRoZSB3aG9sZSBzZWdtZW50IGlzICovCisgICAgICAgICAgICAgIC8qIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGdpbmRleCA9IDA7CisKKyAgICAgICAgICAgICAgaWYgKCAoRlRfSW50KWNoYXJjb2RlICsgZGVsdGEgPCAwICYmCisgICAgICAgICAgICAgICAgICAgKEZUX0ludCllbmQgKyBkZWx0YSA+PSAwICAgICApCisgICAgICAgICAgICAgICAgY2hhcmNvZGUgPSAoRlRfVUludCkoIC1kZWx0YSApOworCisgICAgICAgICAgICAgIGVsc2UgaWYgKCAoRlRfSW50KWNoYXJjb2RlICsgZGVsdGEgPCAweDEwMDAwTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludCllbmQgKyBkZWx0YSA+PSAweDEwMDAwTCAgICAgKQorICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX1VJbnQpKCAweDEwMDAwTCAtIGRlbHRhICk7CisKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gTmV4dF9TZWdtZW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGdpbmRleCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNtYXAtPmN1cl9jaGFyY29kZSA9IGNoYXJjb2RlOwogICAgICAgICAgICAgICBjbWFwLT5jdXJfZ2luZGV4ICAgPSBnaW5kZXg7CkBAIC04MTMsNiArODQ4LDcgQEAKICAgICAgICAgfQogICAgICAgfQogCisgICAgTmV4dF9TZWdtZW50OgogICAgICAgLyogd2UgbmVlZCB0byBmaW5kIGFub3RoZXIgcmFuZ2UgKi8KICAgICAgIGlmICggdHRfY21hcDRfc2V0X3JhbmdlKCBjbWFwLCBjbWFwLT5jdXJfcmFuZ2UgKyAxICkgPCAwICkKICAgICAgICAgYnJlYWs7CkBAIC05NzMsNyArMTAwOSw3IEBACiAgICAgICAgICAgLyogc2VnbWVudCBpZiBpdCBjb250YWlucyBvbmx5IGEgc2luZ2xlIGNoYXJhY3Rlci4gICAgICovCiAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgLyogV2UgdGh1cyBvbWl0IHRoZSB0ZXN0IGhlcmUsIGRlbGF5aW5nIGl0IHRvIHRoZSAgICAgICovCi0gICAgICAgICAgLyogcm91dGluZXMgd2hpY2ggYWN0dWFsbHkgYWNjZXNzIHRoZSBjbWFwLiAgICAgICAgICAgICovCisgICAgICAgICAgLyogcm91dGluZXMgdGhhdCBhY3R1YWxseSBhY2Nlc3MgdGhlIGNtYXAuICAgICAgICAgICAgICovCiAgICAgICAgICAgZWxzZSBpZiAoIG4gIT0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAhKCBzdGFydCA9PSAweEZGRkZVICYmIGVuZCA9PSAweEZGRkZVICkgKQogICAgICAgICAgIHsKQEAgLTEwMjYsMTIgKzEwNjIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIqICBwY2hhcmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgbmV4dCApCiAgIHsKKyAgICBUVF9GYWNlICAgZmFjZSAgPSAoVFRfRmFjZSljbWFwLT5jbWFwLmNoYXJtYXAuZmFjZTsKKyAgICBGVF9CeXRlKiAgbGltaXQgPSBmYWNlLT5jbWFwX3RhYmxlICsgZmFjZS0+Y21hcF9zaXplOworCisKICAgICBGVF9VSW50ICAgIG51bV9zZWdzMiwgc3RhcnQsIGVuZCwgb2Zmc2V0OwogICAgIEZUX0ludCAgICAgZGVsdGE7CiAgICAgRlRfVUludCAgICBpLCBudW1fc2VnczsKICAgICBGVF9VSW50MzIgIGNoYXJjb2RlID0gKnBjaGFyY29kZTsKICAgICBGVF9VSW50ICAgIGdpbmRleCAgID0gMDsKICAgICBGVF9CeXRlKiAgIHA7CisgICAgRlRfQnl0ZSogICBxOwogCiAKICAgICBwID0gY21hcC0+ZGF0YSArIDY7CkBAIC0xMDQ1LDY1ICsxMDg2LDEwNiBAQAogICAgIGlmICggbmV4dCApCiAgICAgICBjaGFyY29kZSsrOwogCisgICAgaWYgKCBjaGFyY29kZSA+IDB4RkZGRlUgKQorICAgICAgcmV0dXJuIDA7CisKICAgICAvKiBsaW5lYXIgc2VhcmNoICovCi0gICAgZm9yICggOyBjaGFyY29kZSA8PSAweEZGRkZVOyBjaGFyY29kZSsrICkKKyAgICBwID0gY21hcC0+ZGF0YSArIDE0OyAgICAgICAgICAgICAgIC8qIGVuZHMgdGFibGUgICAqLworICAgIHEgPSBjbWFwLT5kYXRhICsgMTYgKyBudW1fc2VnczI7ICAgLyogc3RhcnRzIHRhYmxlICovCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9zZWdzOyBpKysgKQogICAgIHsKLSAgICAgIEZUX0J5dGUqICBxOworICAgICAgZW5kICAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgc3RhcnQgPSBUVF9ORVhUX1VTSE9SVCggcSApOwogCi0KLSAgICAgIHAgPSBjbWFwLT5kYXRhICsgMTQ7ICAgICAgICAgICAgICAgLyogZW5kcyB0YWJsZSAgICovCi0gICAgICBxID0gY21hcC0+ZGF0YSArIDE2ICsgbnVtX3NlZ3MyOyAgIC8qIHN0YXJ0cyB0YWJsZSAqLwotCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9zZWdzOyBpKysgKQorICAgICAgaWYgKCBjaGFyY29kZSA8IHN0YXJ0ICkKICAgICAgIHsKLSAgICAgICAgZW5kICAgPSBUVF9ORVhUX1VTSE9SVCggcCApOwotICAgICAgICBzdGFydCA9IFRUX05FWFRfVVNIT1JUKCBxICk7Ci0KLSAgICAgICAgaWYgKCBjaGFyY29kZSA+PSBzdGFydCAmJiBjaGFyY29kZSA8PSBlbmQgKQotICAgICAgICB7Ci0gICAgICAgICAgcCAgICAgICA9IHEgLSAyICsgbnVtX3NlZ3MyOwotICAgICAgICAgIGRlbHRhICAgPSBUVF9QRUVLX1NIT1JUKCBwICk7Ci0gICAgICAgICAgcCAgICAgICs9IG51bV9zZWdzMjsKLSAgICAgICAgICBvZmZzZXQgID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKLQotICAgICAgICAgIC8qIHNvbWUgZm9udHMgaGF2ZSBhbiBpbmNvcnJlY3QgbGFzdCBzZWdtZW50OyAqLwotICAgICAgICAgIC8qIHdlIGhhdmUgdG8gY2F0Y2ggaXQgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIGlmICggaSA+PSBudW1fc2VncyAtIDEgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgc3RhcnQgPT0gMHhGRkZGVSAmJiBlbmQgPT0gMHhGRkZGVSApCi0gICAgICAgICAgewotICAgICAgICAgICAgVFRfRmFjZSAgIGZhY2UgID0gKFRUX0ZhY2UpY21hcC0+Y21hcC5jaGFybWFwLmZhY2U7Ci0gICAgICAgICAgICBGVF9CeXRlKiAgbGltaXQgPSBmYWNlLT5jbWFwX3RhYmxlICsgZmFjZS0+Y21hcF9zaXplOwotCi0KLSAgICAgICAgICAgIGlmICggb2Zmc2V0ICYmIHAgKyBvZmZzZXQgKyAyID4gbGltaXQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkZWx0YSAgPSAxOwotICAgICAgICAgICAgICBvZmZzZXQgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICggb2Zmc2V0ID09IDB4RkZGRlUgKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICBpZiAoIG9mZnNldCApCi0gICAgICAgICAgewotICAgICAgICAgICAgcCArPSBvZmZzZXQgKyAoIGNoYXJjb2RlIC0gc3RhcnQgKSAqIDI7Ci0gICAgICAgICAgICBnaW5kZXggPSBUVF9QRUVLX1VTSE9SVCggcCApOwotICAgICAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCi0gICAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludClnaW5kZXggKyBkZWx0YSApICYgMHhGRkZGVTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCAoRlRfSW50KWNoYXJjb2RlICsgZGVsdGEgKSAmIDB4RkZGRlU7Ci0KKyAgICAgICAgaWYgKCBuZXh0ICkKKyAgICAgICAgICBjaGFyY29kZSA9IHN0YXJ0OworICAgICAgICBlbHNlCiAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgIH0KIAotICAgICAgaWYgKCAhbmV4dCB8fCBnaW5kZXggKQorICAgIEFnYWluOgorICAgICAgaWYgKCBjaGFyY29kZSA8PSBlbmQgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgcjsKKworCisgICAgICAgIHIgICAgICAgPSBxIC0gMiArIG51bV9zZWdzMjsKKyAgICAgICAgZGVsdGEgICA9IFRUX1BFRUtfU0hPUlQoIHIgKTsKKyAgICAgICAgciAgICAgICs9IG51bV9zZWdzMjsKKyAgICAgICAgb2Zmc2V0ICA9IFRUX1BFRUtfVVNIT1JUKCByICk7CisKKyAgICAgICAgLyogc29tZSBmb250cyBoYXZlIGFuIGluY29ycmVjdCBsYXN0IHNlZ21lbnQ7ICovCisgICAgICAgIC8qIHdlIGhhdmUgdG8gY2F0Y2ggaXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGkgPj0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBzdGFydCA9PSAweEZGRkZVICYmIGVuZCA9PSAweEZGRkZVICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggb2Zmc2V0ICYmIHIgKyBvZmZzZXQgKyAyID4gbGltaXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlbHRhICA9IDE7CisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggb2Zmc2V0ID09IDB4RkZGRlUgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggb2Zmc2V0ICkKKyAgICAgICAgeworICAgICAgICAgIHIgKz0gb2Zmc2V0ICsgKCBjaGFyY29kZSAtIHN0YXJ0ICkgKiAyOworCisgICAgICAgICAgLyogaWYgciA+IGxpbWl0LCB0aGUgd2hvbGUgc2VnbWVudCBpcyBpbnZhbGlkICovCisgICAgICAgICAgaWYgKCBuZXh0ICYmIHIgPiBsaW1pdCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGdpbmRleCA9IFRUX1BFRUtfVVNIT1JUKCByICk7CisgICAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludClnaW5kZXggKyBkZWx0YSApICYgMHhGRkZGVTsKKyAgICAgICAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgICAgICAgICAgIGdpbmRleCA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludCljaGFyY29kZSArIGRlbHRhICkgJiAweEZGRkZVOworCisgICAgICAgICAgaWYgKCBuZXh0ICYmIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5yb290Lm51bV9nbHlwaHMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgYW4gaW52YWxpZCBnbHlwaCBpbmRleDsgaWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3csICovCisgICAgICAgICAgICAvKiB3ZSBjYW4gYWRqdXN0IGBjaGFyY29kZScsIG90aGVyd2lzZSB0aGUgd2hvbGUgc2VnbWVudCBpcyAqLworICAgICAgICAgICAgLyogaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdpbmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMCAmJgorICAgICAgICAgICAgICAgICAoRlRfSW50KWVuZCArIGRlbHRhID49IDAgICAgICkKKyAgICAgICAgICAgICAgY2hhcmNvZGUgPSAoRlRfVUludCkoIC1kZWx0YSApOworCisgICAgICAgICAgICBlbHNlIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMHgxMDAwMEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWVuZCArIGRlbHRhID49IDB4MTAwMDBMICAgICApCisgICAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX1VJbnQpKCAweDEwMDAwTCAtIGRlbHRhICk7CisKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBuZXh0ICYmICFnaW5kZXggKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBjaGFyY29kZSA+PSAweEZGRkZVICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2hhcmNvZGUrKzsKKyAgICAgICAgICBnb3RvIEFnYWluOworICAgICAgICB9CisKICAgICAgICAgYnJlYWs7CisgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCBuZXh0ICYmIGdpbmRleCApCisgICAgaWYgKCBuZXh0ICkKICAgICAgICpwY2hhcmNvZGUgPSBjaGFyY29kZTsKIAogICAgIHJldHVybiBnaW5kZXg7CkBAIC0xMTE1LDYgKzExOTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiogIHBjaGFyY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBuZXh0ICkKICAgeworICAgIFRUX0ZhY2UgICBmYWNlICA9IChUVF9GYWNlKWNtYXAtPmNtYXAuY2hhcm1hcC5mYWNlOworICAgIEZUX0J5dGUqICBsaW1pdCA9IGZhY2UtPmNtYXBfdGFibGUgKyBmYWNlLT5jbWFwX3NpemU7CisKICAgICBGVF9VSW50ICAgbnVtX3NlZ3MyLCBzdGFydCwgZW5kLCBvZmZzZXQ7CiAgICAgRlRfSW50ICAgIGRlbHRhOwogICAgIEZUX1VJbnQgICBtYXgsIG1pbiwgbWlkLCBudW1fc2VnczsKQEAgLTExNjYsMTAgKzEyNTEsNiBAQAogICAgICAgICBpZiAoIG1pZCA+PSBudW1fc2VncyAtIDEgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICBzdGFydCA9PSAweEZGRkZVICYmIGVuZCA9PSAweEZGRkZVICkKICAgICAgICAgewotICAgICAgICAgIFRUX0ZhY2UgICBmYWNlICA9IChUVF9GYWNlKWNtYXAtPmNtYXAuY2hhcm1hcC5mYWNlOwotICAgICAgICAgIEZUX0J5dGUqICBsaW1pdCA9IGZhY2UtPmNtYXBfdGFibGUgKyBmYWNlLT5jbWFwX3NpemU7Ci0KLQogICAgICAgICAgIGlmICggb2Zmc2V0ICYmIHAgKyBvZmZzZXQgKyAyID4gbGltaXQgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGRlbHRhICA9IDE7CkBAIC0xMTkwLDcgKzEyNzEsNyBAQAogICAgICAgICAgICAgbWlkID0gbWF4ICsgMTsKIAogICAgICAgICAgIC8qIHNlYXJjaCBpbiBzZWdtZW50cyBiZWZvcmUgdGhlIGN1cnJlbnQgc2VnbWVudCAqLwotICAgICAgICAgIGZvciAoIGkgPSBtYXggOyBpID4gMDsgaS0tICkKKyAgICAgICAgICBmb3IgKCBpID0gbWF4OyBpID4gMDsgaS0tICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBGVF9VSW50ICAgcHJldl9lbmQ7CiAgICAgICAgICAgICBGVF9CeXRlKiAgb2xkX3A7CkBAIC0xMjkyLDEzICsxMzczLDQwIEBACiAgICAgICAgIGlmICggb2Zmc2V0ICkKICAgICAgICAgewogICAgICAgICAgIHAgKz0gb2Zmc2V0ICsgKCBjaGFyY29kZSAtIHN0YXJ0ICkgKiAyOworCisgICAgICAgICAgLyogaWYgcCA+IGxpbWl0LCB0aGUgd2hvbGUgc2VnbWVudCBpcyBpbnZhbGlkICovCisgICAgICAgICAgaWYgKCBuZXh0ICYmIHAgPiBsaW1pdCApCisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgIGdpbmRleCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7Ci0gICAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCisgICAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgIHsKICAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludClnaW5kZXggKyBkZWx0YSApICYgMHhGRkZGVTsKKyAgICAgICAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgICAgICAgICAgIGdpbmRleCA9IDA7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKKyAgICAgICAgewogICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludCljaGFyY29kZSArIGRlbHRhICkgJiAweEZGRkZVOwogCisgICAgICAgICAgaWYgKCBuZXh0ICYmIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5yb290Lm51bV9nbHlwaHMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgYW4gaW52YWxpZCBnbHlwaCBpbmRleDsgaWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3csICovCisgICAgICAgICAgICAvKiB3ZSBjYW4gYWRqdXN0IGBjaGFyY29kZScsIG90aGVyd2lzZSB0aGUgd2hvbGUgc2VnbWVudCBpcyAqLworICAgICAgICAgICAgLyogaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdpbmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMCAmJgorICAgICAgICAgICAgICAgICAoRlRfSW50KWVuZCArIGRlbHRhID49IDAgICAgICkKKyAgICAgICAgICAgICAgY2hhcmNvZGUgPSAoRlRfVUludCkoIC1kZWx0YSApOworCisgICAgICAgICAgICBlbHNlIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMHgxMDAwMEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWVuZCArIGRlbHRhID49IDB4MTAwMDBMICAgICApCisgICAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX1VJbnQpKCAweDEwMDAwTCAtIGRlbHRhICk7CisgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtMTMxMCw3ICsxNDE4LDYgQEAKIAogICAgICAgLyogaWYgYGNoYXJjb2RlJyBpcyBub3QgaW4gYW55IHNlZ21lbnQsIHRoZW4gYG1pZCcgaXMgKi8KICAgICAgIC8qIHRoZSBzZWdtZW50IG5lYXJlc3QgdG8gYGNoYXJjb2RlJyAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgICAgICBpZiAoIGNoYXJjb2RlID4gZW5kICkKICAgICAgIHsKQEAgLTE0NDMsNyArMTU1MCw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgICAgICBUWVBFICAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9ybWF0ICAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgbXVzdCBiZSA0ICAgICAgICAgICAgICAqLworICAvKiAgIGZvcm1hdCAgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIG11c3QgYmUgNiAgICAgICAgICAgICAgKi8KICAgLyogICBsZW5ndGggICAgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICB0YWJsZSBsZW5ndGggaW4gYnl0ZXMgICovCiAgIC8qICAgbGFuZ3VhZ2UgICAgIDQgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgTWFjIGxhbmd1YWdlIGNvZGUgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE1MTEsNiArMTYxOCw3IEBACiAgICAgICBwICs9IDIgKiBpZHg7CiAgICAgICByZXN1bHQgPSBUVF9QRUVLX1VTSE9SVCggcCApOwogICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIApAQCAtMTUzMSw3ICsxNjM5LDcgQEAKIAogCiAgICAgaWYgKCBjaGFyX2NvZGUgPj0gMHgxMDAwMFVMICkKLSAgICAgIGdvdG8gRXhpdDsKKyAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCiAgICAgICBjaGFyX2NvZGUgPSBzdGFydDsKQEAgLTE1NDcsMTAgKzE2NTUsMTMgQEAKICAgICAgICAgcmVzdWx0ID0gY2hhcl9jb2RlOwogICAgICAgICBicmVhazsKICAgICAgIH0KKworICAgICAgaWYgKCBjaGFyX2NvZGUgPj0gMHhGRkZGVSApCisgICAgICAgIHJldHVybiAwOworCiAgICAgICBjaGFyX2NvZGUrKzsKICAgICB9CiAKLSAgRXhpdDoKICAgICAqcGNoYXJfY29kZSA9IHJlc3VsdDsKICAgICByZXR1cm4gZ2luZGV4OwogICB9CkBAIC0xNjAyLDcgKzE3MTMsNyBAQAogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZm9ybWF0IGlzIHRvIGVhc2lseSBtYXAgVVRGLTE2IHRleHQgdG8gICAgKioqKiovCiAgIC8qKioqKiBnbHlwaCBpbmRpY2VzLiAgQmFzaWNhbGx5LCB0aGUgYGNoYXJfY29kZScgbXVzdCBiZSBpbiBvbmUgb2YgICoqKioqLwotICAvKioqKiogdGhlIGZvbGxvd2luZyBmb3JtYXRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIHRoZSBmb2xsb3dpbmcgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAtIEEgMTYtYml0IHZhbHVlIHRoYXQgaXNuJ3QgcGFydCBvZiB0aGUgVW5pY29kZSBTdXJyb2dhdGVzICAqKioqKi8KICAgLyoqKioqICAgICBBcmVhIChpLmUuIFUrRDgwMC1VK0RGRkYpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCkBAIC0xNjE1LDcgKzE3MjYsNyBAQAogICAvKioqKiogVGhlIGBpczMyJyB0YWJsZSBlbWJlZGRlZCBpbiB0aGUgY2hhcm1hcCBpbmRpY2F0ZXMgd2hldGhlciBhICAqKioqKi8KICAgLyoqKioqIGdpdmVuIDE2LWJpdCB2YWx1ZSBpcyBpbiB0aGUgc3Vycm9nYXRlcyBhcmVhIG9yIG5vdC4gICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogU28sIGZvciBhbnkgZ2l2ZW4gYGNoYXJfY29kZScsIHdlIGNhbiBhc3NlcnQgdGhlIGZvbGxvd2luZzogICAqKioqKi8KKyAgLyoqKioqIFNvLCBmb3IgYW55IGdpdmVuIGBjaGFyX2NvZGUnLCB3ZSBjYW4gYXNzZXJ0IHRoZSBmb2xsb3dpbmcuICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICBJZiBgY2hhcl9oaSA9PSAwJyB0aGVuIHdlIG11c3QgaGF2ZSBgaXMzMltjaGFyX2xvXSA9PSAwJy4gICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCkBAIC0xNzcwLDcgKzE4ODEsMTAgQEAKIAogICAgICAgaWYgKCBjaGFyX2NvZGUgPD0gZW5kICkKICAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gKEZUX1VJbnQpKCBzdGFydF9pZCArIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisgICAgICAgIGlmICggc3RhcnRfaWQgPiAweEZGRkZGRkZGVUwgLSAoIGNoYXJfY29kZSAtIHN0YXJ0ICkgKQorICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJlc3VsdCA9IChGVF9VSW50KSggc3RhcnRfaWQgKyAoIGNoYXJfY29kZSAtIHN0YXJ0ICkgKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtMTc4Miw4ICsxODk2LDkgQEAKICAgdHRfY21hcDhfY2hhcl9uZXh0KCBUVF9DTWFwICAgICBjbWFwLAogICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKnBjaGFyX2NvZGUgKQogICB7CisgICAgRlRfRmFjZSAgICBmYWNlICAgICAgID0gY21hcC0+Y21hcC5jaGFybWFwLmZhY2U7CiAgICAgRlRfVUludDMyICByZXN1bHQgICAgID0gMDsKLSAgICBGVF9VSW50MzIgIGNoYXJfY29kZSAgPSAqcGNoYXJfY29kZSArIDE7CisgICAgRlRfVUludDMyICBjaGFyX2NvZGU7CiAgICAgRlRfVUludCAgICBnaW5kZXggICAgID0gMDsKICAgICBGVF9CeXRlKiAgIHRhYmxlICAgICAgPSBjbWFwLT5kYXRhOwogICAgIEZUX0J5dGUqICAgcCAgICAgICAgICA9IHRhYmxlICsgODIwNDsKQEAgLTE3OTEsNiArMTkwNiwxMSBAQAogICAgIEZUX1VJbnQzMiAgc3RhcnQsIGVuZCwgc3RhcnRfaWQ7CiAKIAorICAgIGlmICggKnBjaGFyX2NvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgIHJldHVybiAwOworCisgICAgY2hhcl9jb2RlID0gKnBjaGFyX2NvZGUgKyAxOworCiAgICAgcCA9IHRhYmxlICsgODIwODsKIAogICAgIGZvciAoIDsgbnVtX2dyb3VwcyA+IDA7IG51bV9ncm91cHMtLSApCkBAIC0xODAyLDE4ICsxOTIyLDM4IEBACiAgICAgICBpZiAoIGNoYXJfY29kZSA8IHN0YXJ0ICkKICAgICAgICAgY2hhcl9jb2RlID0gc3RhcnQ7CiAKKyAgICBBZ2FpbjoKICAgICAgIGlmICggY2hhcl9jb2RlIDw9IGVuZCApCiAgICAgICB7Ci0gICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggY2hhcl9jb2RlIC0gc3RhcnQgKyBzdGFydF9pZCApOwotICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKKyAgICAgICAgLyogaWdub3JlIGludmFsaWQgZ3JvdXAgKi8KKyAgICAgICAgaWYgKCBzdGFydF9pZCA+IDB4RkZGRkZGRkZVTCAtICggY2hhcl9jb2RlIC0gc3RhcnQgKSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCBzdGFydF9pZCArICggY2hhcl9jb2RlIC0gc3RhcnQgKSApOworCisgICAgICAgIC8qIGRvZXMgZmlyc3QgZWxlbWVudCBvZiBncm91cCBwb2ludCB0byBgLm5vdGRlZicgZ2x5cGg/ICovCisgICAgICAgIGlmICggZ2luZGV4ID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gY2hhcl9jb2RlOwotICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICBpZiAoIGNoYXJfY29kZSA+PSAweEZGRkZGRkZGVUwgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjaGFyX2NvZGUrKzsKKyAgICAgICAgICBnb3RvIEFnYWluOwogICAgICAgICB9CisKKyAgICAgICAgLyogaWYgYGdpbmRleCcgaXMgaW52YWxpZCwgdGhlIHJlbWFpbmluZyB2YWx1ZXMgKi8KKyAgICAgICAgLyogaW4gdGhpcyBncm91cCBhcmUgaW52YWxpZCwgdG9vICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCisgICAgICAgIHsKKyAgICAgICAgICBnaW5kZXggPSAwOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gY2hhcl9jb2RlOworICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CiAKLSAgRXhpdDoKICAgICAqcGNoYXJfY29kZSA9IHJlc3VsdDsKICAgICByZXR1cm4gZ2luZGV4OwogICB9CkBAIC0xOTMwLDE0ICsyMDcwLDIwIEBACiAgICAgRlRfQnl0ZSogICBwICAgICAgPSB0YWJsZSArIDEyOwogICAgIEZUX1VJbnQzMiAgc3RhcnQgID0gVFRfTkVYVF9VTE9ORyggcCApOwogICAgIEZUX1VJbnQzMiAgY291bnQgID0gVFRfTkVYVF9VTE9ORyggcCApOwotICAgIEZUX1VJbnQzMiAgaWR4ICAgID0gKEZUX1VMb25nKSggY2hhcl9jb2RlIC0gc3RhcnQgKTsKKyAgICBGVF9VSW50MzIgIGlkeDsKIAogCisgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlkeCA9IGNoYXJfY29kZSAtIHN0YXJ0OworCiAgICAgaWYgKCBpZHggPCBjb3VudCApCiAgICAgewogICAgICAgcCAgICAgKz0gMiAqIGlkeDsKICAgICAgIHJlc3VsdCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CiAgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCkBAIC0xOTQ3LDcgKzIwOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcl9jb2RlICkKICAgewogICAgIEZUX0J5dGUqICAgdGFibGUgICAgID0gY21hcC0+ZGF0YTsKLSAgICBGVF9VSW50MzIgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlICsgMTsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZTsKICAgICBGVF9VSW50ICAgIGdpbmRleCAgICA9IDA7CiAgICAgRlRfQnl0ZSogICBwICAgICAgICAgPSB0YWJsZSArIDEyOwogICAgIEZUX1VJbnQzMiAgc3RhcnQgICAgID0gVFRfTkVYVF9VTE9ORyggcCApOwpAQCAtMTk1NSwxMCArMjEwMSwxNSBAQAogICAgIEZUX1VJbnQzMiAgaWR4OwogCiAKKyAgICBpZiAoICpwY2hhcl9jb2RlID49IDB4RkZGRkZGRkZVTCApCisgICAgICByZXR1cm4gMDsKKworICAgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlICsgMTsKKwogICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQogICAgICAgY2hhcl9jb2RlID0gc3RhcnQ7CiAKLSAgICBpZHggPSAoRlRfVUludDMyKSggY2hhcl9jb2RlIC0gc3RhcnQgKTsKKyAgICBpZHggPSBjaGFyX2NvZGUgLSBzdGFydDsKICAgICBwICArPSAyICogaWR4OwogCiAgICAgZm9yICggOyBpZHggPCBjb3VudDsgaWR4KysgKQpAQCAtMTk2Niw2ICsyMTE3LDEwIEBACiAgICAgICBnaW5kZXggPSBUVF9ORVhUX1VTSE9SVCggcCApOwogICAgICAgaWYgKCBnaW5kZXggIT0gMCApCiAgICAgICAgIGJyZWFrOworCisgICAgICBpZiAoIGNoYXJfY29kZSA+PSAweEZGRkZGRkZGVUwgKQorICAgICAgICByZXR1cm4gMDsKKwogICAgICAgY2hhcl9jb2RlKys7CiAgICAgfQogCkBAIC0yMTM0LDYgKzIyODksNyBAQAogICBzdGF0aWMgdm9pZAogICB0dF9jbWFwMTJfbmV4dCggVFRfQ01hcDEyICBjbWFwICkKICAgeworICAgIEZUX0ZhY2UgICBmYWNlID0gY21hcC0+Y21hcC5jbWFwLmNoYXJtYXAuZmFjZTsKICAgICBGVF9CeXRlKiAgcDsKICAgICBGVF9VTG9uZyAgc3RhcnQsIGVuZCwgc3RhcnRfaWQsIGNoYXJfY29kZTsKICAgICBGVF9VTG9uZyAgbjsKQEAgLTIxNTUsMTggKzIzMTEsMzggQEAKICAgICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQogICAgICAgICBjaGFyX2NvZGUgPSBzdGFydDsKIAotICAgICAgZm9yICggOyBjaGFyX2NvZGUgPD0gZW5kOyBjaGFyX2NvZGUrKyApCisgICAgQWdhaW46CisgICAgICBpZiAoIGNoYXJfY29kZSA8PSBlbmQgKQogICAgICAgewotICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIHN0YXJ0X2lkICsgY2hhcl9jb2RlIC0gc3RhcnQgKTsKKyAgICAgICAgLyogaWdub3JlIGludmFsaWQgZ3JvdXAgKi8KKyAgICAgICAgaWYgKCBzdGFydF9pZCA+IDB4RkZGRkZGRkZVTCAtICggY2hhcl9jb2RlIC0gc3RhcnQgKSApCisgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIHN0YXJ0X2lkICsgKCBjaGFyX2NvZGUgLSBzdGFydCApICk7CisKKyAgICAgICAgLyogZG9lcyBmaXJzdCBlbGVtZW50IG9mIGdyb3VwIHBvaW50IHRvIGAubm90ZGVmJyBnbHlwaD8gKi8KKyAgICAgICAgaWYgKCBnaW5kZXggPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7OwotICAgICAgICAgIGNtYXAtPmN1cl9naW5kZXggICA9IGdpbmRleDsKLSAgICAgICAgICBjbWFwLT5jdXJfZ3JvdXAgICAgPSBuOworICAgICAgICAgIGlmICggY2hhcl9jb2RlID49IDB4RkZGRkZGRkZVTCApCisgICAgICAgICAgICBnb3RvIEZhaWw7CiAKLSAgICAgICAgICByZXR1cm47CisgICAgICAgICAgY2hhcl9jb2RlKys7CisgICAgICAgICAgZ290byBBZ2FpbjsKICAgICAgICAgfQorCisgICAgICAgIC8qIGlmIGBnaW5kZXgnIGlzIGludmFsaWQsIHRoZSByZW1haW5pbmcgdmFsdWVzICovCisgICAgICAgIC8qIGluIHRoaXMgZ3JvdXAgYXJlIGludmFsaWQsIHRvbyAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgICB7CisgICAgICAgICAgZ2luZGV4ID0gMDsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNtYXAtPmN1cl9jaGFyY29kZSA9IGNoYXJfY29kZTsKKyAgICAgICAgY21hcC0+Y3VyX2dpbmRleCAgID0gZ2luZGV4OworICAgICAgICBjbWFwLT5jdXJfZ3JvdXAgICAgPSBuOworCisgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICB9CiAKQEAgLTIxOTYsNyArMjM3MiwxMiBAQAogICAgIGVuZCA9IDB4RkZGRkZGRkZVTDsKIAogICAgIGlmICggbmV4dCApCisgICAgeworICAgICAgaWYgKCBjaGFyX2NvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAgIGNoYXJfY29kZSsrOworICAgIH0KIAogICAgIG1pbiA9IDA7CiAgICAgbWF4ID0gbnVtX2dyb3VwczsKQEAgLTIyMTcsMjAgKzIzOTgsMjQgQEAKICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgc3RhcnRfaWQgPSBUVF9QRUVLX1VMT05HKCBwICk7Ci0gICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggc3RhcnRfaWQgKyBjaGFyX2NvZGUgLSBzdGFydCApOwogCisgICAgICAgIC8qIHJlamVjdCBpbnZhbGlkIGdseXBoIGluZGV4ICovCisgICAgICAgIGlmICggc3RhcnRfaWQgPiAweEZGRkZGRkZGVUwgLSAoIGNoYXJfY29kZSAtIHN0YXJ0ICkgKQorICAgICAgICAgIGdpbmRleCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIHN0YXJ0X2lkICsgKCBjaGFyX2NvZGUgLSBzdGFydCApICk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KIAogICAgIGlmICggbmV4dCApCiAgICAgeworICAgICAgRlRfRmFjZSAgICBmYWNlICAgPSBjbWFwLT5jbWFwLmNoYXJtYXAuZmFjZTsKICAgICAgIFRUX0NNYXAxMiAgY21hcDEyID0gKFRUX0NNYXAxMiljbWFwOwogCiAKICAgICAgIC8qIGlmIGBjaGFyX2NvZGUnIGlzIG5vdCBpbiBhbnkgZ3JvdXAsIHRoZW4gYG1pZCcgaXMgKi8KICAgICAgIC8qIHRoZSBncm91cCBuZWFyZXN0IHRvIGBjaGFyX2NvZGUnICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgaWYgKCBjaGFyX2NvZGUgPiBlbmQgKQogICAgICAgewpAQCAtMjI0Myw2ICsyNDI4LDkgQEAKICAgICAgIGNtYXAxMi0+Y3VyX2NoYXJjb2RlID0gY2hhcl9jb2RlOwogICAgICAgY21hcDEyLT5jdXJfZ3JvdXAgICAgPSBtaWQ7CiAKKyAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgICBnaW5kZXggPSAwOworCiAgICAgICBpZiAoICFnaW5kZXggKQogICAgICAgewogICAgICAgICB0dF9jbWFwMTJfbmV4dCggY21hcDEyICk7CkBAIC0yMjUzLDggKzI0NDEsNyBAQAogICAgICAgZWxzZQogICAgICAgICBjbWFwMTItPmN1cl9naW5kZXggPSBnaW5kZXg7CiAKLSAgICAgIGlmICggZ2luZGV4ICkKLSAgICAgICAgKnBjaGFyX2NvZGUgPSBjbWFwMTItPmN1cl9jaGFyY29kZTsKKyAgICAgICpwY2hhcl9jb2RlID0gY21hcDEyLT5jdXJfY2hhcmNvZGU7CiAgICAgfQogCiAgICAgcmV0dXJuIGdpbmRleDsKQEAgLTIyNzQsMjMgKzI0NjEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAqcGNoYXJfY29kZSApCiAgIHsKICAgICBUVF9DTWFwMTIgIGNtYXAxMiA9IChUVF9DTWFwMTIpY21hcDsKLSAgICBGVF9VTG9uZyAgIGdpbmRleDsKKyAgICBGVF9VSW50ICAgIGdpbmRleDsKIAogCi0gICAgaWYgKCBjbWFwMTItPmN1cl9jaGFyY29kZSA+PSAweEZGRkZGRkZGVUwgKQotICAgICAgcmV0dXJuIDA7Ci0KICAgICAvKiBubyBuZWVkIHRvIHNlYXJjaCAqLwogICAgIGlmICggY21hcDEyLT52YWxpZCAmJiBjbWFwMTItPmN1cl9jaGFyY29kZSA9PSAqcGNoYXJfY29kZSApCiAgICAgewogICAgICAgdHRfY21hcDEyX25leHQoIGNtYXAxMiApOwogICAgICAgaWYgKCBjbWFwMTItPnZhbGlkICkKICAgICAgIHsKLSAgICAgICAgZ2luZGV4ID0gY21hcDEyLT5jdXJfZ2luZGV4OwotCi0gICAgICAgIC8qIFhYWDogY2hlY2sgY3VyX2NoYXJjb2RlIG92ZXJmbG93IGlzIGV4cGVjdGVkICovCi0gICAgICAgIGlmICggZ2luZGV4ICkKLSAgICAgICAgICAqcGNoYXJfY29kZSA9IChGVF9VSW50MzIpY21hcDEyLT5jdXJfY2hhcmNvZGU7CisgICAgICAgIGdpbmRleCAgICAgID0gY21hcDEyLT5jdXJfZ2luZGV4OworICAgICAgICAqcGNoYXJfY29kZSA9IChGVF9VSW50MzIpY21hcDEyLT5jdXJfY2hhcmNvZGU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIGdpbmRleCA9IDA7CkBAIC0yMjk4LDggKzI0NzksNyBAQAogICAgIGVsc2UKICAgICAgIGdpbmRleCA9IHR0X2NtYXAxMl9jaGFyX21hcF9iaW5hcnkoIGNtYXAsIHBjaGFyX2NvZGUsIDEgKTsKIAotICAgIC8qIFhYWDogY2hlY2sgZ2luZGV4IG92ZXJmbG93IGlzIGV4cGVjdGVkICovCi0gICAgcmV0dXJuIChGVF9VSW50MzIpZ2luZGV4OworICAgIHJldHVybiBnaW5kZXg7CiAgIH0KIAogCkBAIC0yNDU4LDYgKzI2MzgsNyBAQAogICBzdGF0aWMgdm9pZAogICB0dF9jbWFwMTNfbmV4dCggVFRfQ01hcDEzICBjbWFwICkKICAgeworICAgIEZUX0ZhY2UgICBmYWNlID0gY21hcC0+Y21hcC5jbWFwLmNoYXJtYXAuZmFjZTsKICAgICBGVF9CeXRlKiAgcDsKICAgICBGVF9VTG9uZyAgc3RhcnQsIGVuZCwgZ2x5cGhfaWQsIGNoYXJfY29kZTsKICAgICBGVF9VTG9uZyAgbjsKQEAgLTI0ODMsOSArMjY2NCw5IEBACiAgICAgICB7CiAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KWdseXBoX2lkOwogCi0gICAgICAgIGlmICggZ2luZGV4ICkKKyAgICAgICAgaWYgKCBnaW5kZXggJiYgZ2luZGV4IDwgKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCiAgICAgICAgIHsKLSAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7OworICAgICAgICAgIGNtYXAtPmN1cl9jaGFyY29kZSA9IGNoYXJfY29kZTsKICAgICAgICAgICBjbWFwLT5jdXJfZ2luZGV4ICAgPSBnaW5kZXg7CiAgICAgICAgICAgY21hcC0+Y3VyX2dyb3VwICAgID0gbjsKIApAQCAtMjUyMCw3ICsyNzAxLDEyIEBACiAgICAgZW5kID0gMHhGRkZGRkZGRlVMOwogCiAgICAgaWYgKCBuZXh0ICkKKyAgICB7CisgICAgICBpZiAoIGNoYXJfY29kZSA+PSAweEZGRkZGRkZGVUwgKQorICAgICAgICByZXR1cm4gMDsKKwogICAgICAgY2hhcl9jb2RlKys7CisgICAgfQogCiAgICAgbWluID0gMDsKICAgICBtYXggPSBudW1fZ3JvdXBzOwpAQCAtMjU0OCw2ICsyNzM0LDcgQEAKIAogICAgIGlmICggbmV4dCApCiAgICAgeworICAgICAgRlRfRmFjZSAgICBmYWNlICAgPSBjbWFwLT5jbWFwLmNoYXJtYXAuZmFjZTsKICAgICAgIFRUX0NNYXAxMyAgY21hcDEzID0gKFRUX0NNYXAxMyljbWFwOwogCiAKQEAgLTI1NjUsNiArMjc1Miw5IEBACiAgICAgICBjbWFwMTMtPmN1cl9jaGFyY29kZSA9IGNoYXJfY29kZTsKICAgICAgIGNtYXAxMy0+Y3VyX2dyb3VwICAgID0gbWlkOwogCisgICAgICBpZiAoIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzICkKKyAgICAgICAgZ2luZGV4ID0gMDsKKwogICAgICAgaWYgKCAhZ2luZGV4ICkKICAgICAgIHsKICAgICAgICAgdHRfY21hcDEzX25leHQoIGNtYXAxMyApOwpAQCAtMjU3NSw4ICsyNzY1LDcgQEAKICAgICAgIGVsc2UKICAgICAgICAgY21hcDEzLT5jdXJfZ2luZGV4ID0gZ2luZGV4OwogCi0gICAgICBpZiAoIGdpbmRleCApCi0gICAgICAgICpwY2hhcl9jb2RlID0gY21hcDEzLT5jdXJfY2hhcmNvZGU7CisgICAgICAqcGNoYXJfY29kZSA9IGNtYXAxMy0+Y3VyX2NoYXJjb2RlOwogICAgIH0KIAogICAgIHJldHVybiBnaW5kZXg7CkBAIC0yNTk5LDE4ICsyNzg4LDE0IEBACiAgICAgRlRfVUludCAgICBnaW5kZXg7CiAKIAotICAgIGlmICggY21hcDEzLT5jdXJfY2hhcmNvZGUgPj0gMHhGRkZGRkZGRlVMICkKLSAgICAgIHJldHVybiAwOwotCiAgICAgLyogbm8gbmVlZCB0byBzZWFyY2ggKi8KICAgICBpZiAoIGNtYXAxMy0+dmFsaWQgJiYgY21hcDEzLT5jdXJfY2hhcmNvZGUgPT0gKnBjaGFyX2NvZGUgKQogICAgIHsKICAgICAgIHR0X2NtYXAxM19uZXh0KCBjbWFwMTMgKTsKICAgICAgIGlmICggY21hcDEzLT52YWxpZCApCiAgICAgICB7Ci0gICAgICAgIGdpbmRleCA9IGNtYXAxMy0+Y3VyX2dpbmRleDsKLSAgICAgICAgaWYgKCBnaW5kZXggKQotICAgICAgICAgICpwY2hhcl9jb2RlID0gY21hcDEzLT5jdXJfY2hhcmNvZGU7CisgICAgICAgIGdpbmRleCAgICAgID0gY21hcDEzLT5jdXJfZ2luZGV4OworICAgICAgICAqcGNoYXJfY29kZSA9IGNtYXAxMy0+Y3VyX2NoYXJjb2RlOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgICBnaW5kZXggPSAwOwpAQCAtMjgzNiwxMiArMzAyMSwxNyBAQAogICAgICAgICAvKiB0aHJvdWdoIHRoZSBub3JtYWwgVW5pY29kZSBjbWFwLCBubyBHSURzLCBqdXN0IGNoZWNrIG9yZGVyKSAqLwogICAgICAgICBpZiAoIGRlZk9mZiAhPSAwICkKICAgICAgICAgewotICAgICAgICAgIEZUX0J5dGUqICBkZWZwICAgICAgPSB0YWJsZSArIGRlZk9mZjsKLSAgICAgICAgICBGVF9VTG9uZyAgbnVtUmFuZ2VzID0gVFRfTkVYVF9VTE9ORyggZGVmcCApOworICAgICAgICAgIEZUX0J5dGUqICBkZWZwICAgICA9IHRhYmxlICsgZGVmT2ZmOworICAgICAgICAgIEZUX1VMb25nICBudW1SYW5nZXM7CiAgICAgICAgICAgRlRfVUxvbmcgIGk7Ci0gICAgICAgICAgRlRfVUxvbmcgIGxhc3RCYXNlICA9IDA7CisgICAgICAgICAgRlRfVUxvbmcgIGxhc3RCYXNlID0gMDsKIAogCisgICAgICAgICAgaWYgKCBkZWZwICsgNCA+IHZhbGlkLT5saW1pdCApCisgICAgICAgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgICAgICAgIG51bVJhbmdlcyA9IFRUX05FWFRfVUxPTkcoIGRlZnAgKTsKKwogICAgICAgICAgIC8qIGRlZnAgKyBudW1SYW5nZXMgKiA0ID4gdmFsaWQtPmxpbWl0ID8gKi8KICAgICAgICAgICBpZiAoIG51bVJhbmdlcyA+IChGVF9VTG9uZykoIHZhbGlkLT5saW1pdCAtIGRlZnAgKSAvIDQgKQogICAgICAgICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CkBAIC0yODY1LDEzICszMDU1LDE4IEBACiAgICAgICAgIC8qIGFuZCB0aGUgbm9uLWRlZmF1bHQgdGFibGUgKHRoZXNlIGdseXBocyBhcmUgc3BlY2lmaWVkIGhlcmUpICovCiAgICAgICAgIGlmICggbm9uZGVmT2ZmICE9IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfQnl0ZSogIG5kcCAgICAgICAgID0gdGFibGUgKyBub25kZWZPZmY7Ci0gICAgICAgICAgRlRfVUxvbmcgIG51bU1hcHBpbmdzID0gVFRfTkVYVF9VTE9ORyggbmRwICk7Ci0gICAgICAgICAgRlRfVUxvbmcgIGksIGxhc3RVbmkgID0gMDsKKyAgICAgICAgICBGVF9CeXRlKiAgbmRwICAgICAgICA9IHRhYmxlICsgbm9uZGVmT2ZmOworICAgICAgICAgIEZUX1VMb25nICBudW1NYXBwaW5nczsKKyAgICAgICAgICBGVF9VTG9uZyAgaSwgbGFzdFVuaSA9IDA7CiAKIAotICAgICAgICAgIC8qIG51bU1hcHBpbmdzICogNCA+IChGVF9VTG9uZykoIHZhbGlkLT5saW1pdCAtIG5kcCApID8gKi8KLSAgICAgICAgICBpZiAoIG51bU1hcHBpbmdzID4gKCAoRlRfVUxvbmcpKCB2YWxpZC0+bGltaXQgLSBuZHAgKSApIC8gNCApCisgICAgICAgICAgaWYgKCBuZHAgKyA0ID4gdmFsaWQtPmxpbWl0ICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgICAgICAgbnVtTWFwcGluZ3MgPSBUVF9ORVhUX1VMT05HKCBuZHAgKTsKKworICAgICAgICAgIC8qIG51bU1hcHBpbmdzICogNSA+IChGVF9VTG9uZykoIHZhbGlkLT5saW1pdCAtIG5kcCApID8gKi8KKyAgICAgICAgICBpZiAoIG51bU1hcHBpbmdzID4gKCAoRlRfVUxvbmcpKCB2YWxpZC0+bGltaXQgLSBuZHAgKSApIC8gNSApCiAgICAgICAgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKIAogICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtTWFwcGluZ3M7ICsraSApCkBAIC0yOTYyLDcgKzMxNTcsNyBAQAogCiAgICAgICBpZiAoIGNoYXJfY29kZSA8IHN0YXJ0ICkKICAgICAgICAgbWF4ID0gbWlkOwotICAgICAgZWxzZSBpZiAoIGNoYXJfY29kZSA+IHN0YXJ0K2NudCApCisgICAgICBlbHNlIGlmICggY2hhcl9jb2RlID4gc3RhcnQgKyBjbnQgKQogICAgICAgICBtaW4gPSBtaWQgKyAxOwogICAgICAgZWxzZQogICAgICAgICByZXR1cm4gVFJVRTsKQEAgLTMzMTYsNyArMzUxMSw3IEBACiAgICAgICBuaSAgID0gMTsKICAgICAgIGkgICAgPSAwOwogCi0gICAgICBmb3IgKCA7OyApCisgICAgICBmb3IgKDs7KQogICAgICAgewogICAgICAgICBpZiAoIG51bmkgPiBkdW5pICsgZGNudCApCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcC5oIGIvc3JjL3NmbnQvdHRjbWFwLmgKaW5kZXggYjdlYThlZS4uMjI3M2NiZCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjbWFwLmgKKysrIGIvc3JjL3NmbnQvdHRjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUQ01BUF9IX18KLSNkZWZpbmUgX19UVENNQVBfSF9fCisjaWZuZGVmIFRUQ01BUF9IXworI2RlZmluZSBUVENNQVBfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE1Miw3ICsxNTIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUQ01BUF9IX18gKi8KKyNlbmRpZiAvKiBUVENNQVBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcGMuaCBiL3NyYy9zZm50L3R0Y21hcGMuaAppbmRleCA0YTQ4OTQwLi43YzczMmZiIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNtYXBjLmgKKysrIGIvc3JjL3NmbnQvdHRjbWFwYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRUIENNQVAgY2xhc3NlcyBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGtlcm4uYyBiL3NyYy9zZm50L3R0a2Vybi5jCmluZGV4IDRmY2NjNTMuLjZmOWZhNTIgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0a2Vybi5jCisrKyBiL3NyYy9zZm50L3R0a2Vybi5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUga2VybmluZyB0YWJsZS4gIFRoaXMgZG9lc24ndCBoYW5kbGUgICAgICAgICAgKi8KIC8qICAgIGtlcm5pbmcgZGF0YSB3aXRoaW4gdGhlIEdQT1MgdGFibGUgYXQgdGhlIG1vbWVudC4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGtlcm4uaCBiL3NyYy9zZm50L3R0a2Vybi5oCmluZGV4IDg5Y2IyNGYuLjg1ZGQ1YzMgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0a2Vybi5oCisrKyBiL3NyYy9zZm50L3R0a2Vybi5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUga2VybmluZyB0YWJsZS4gIFRoaXMgZG9lc24ndCBoYW5kbGUgICAgICAgICAgKi8KIC8qICAgIGtlcm5pbmcgZGF0YSB3aXRoaW4gdGhlIEdQT1MgdGFibGUgYXQgdGhlIG1vbWVudC4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVEtFUk5fSF9fCi0jZGVmaW5lIF9fVFRLRVJOX0hfXworI2lmbmRlZiBUVEtFUk5fSF8KKyNkZWZpbmUgVFRLRVJOX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00Niw3ICs0Niw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRLRVJOX0hfXyAqLworI2VuZGlmIC8qIFRUS0VSTl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRsb2FkLmMgYi9zcmMvc2ZudC90dGxvYWQuYwppbmRleCBhZDI5NzVkLi5hNjUzYTcxIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGxvYWQuYworKysgYi9zcmMvc2ZudC90dGxvYWQuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIHRhYmxlcywgaS5lLiwgdGFibGVzIHRoYXQgY2FuIGJlIGVpdGhlciBpbiAgICovCiAvKiAgICBUVEYgb3IgT1RGIGZvbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTUxLDcgKzE1MSw4IEBACiAKICAgLyogSGVyZSwgd2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gY2hlY2sgdGhhdCBgbnVtX3RhYmxlcycgaXMgdmFsaWQgKGFuZCBhZGp1c3QgaXQgaWYgbmVjZXNzYXJ5KSAgKi8KKyAgLyogLSBjaGVjayB0aGF0IGBudW1fdGFibGVzJyBpcyB2YWxpZCAoYW5kIGFkanVzdCBpdCBpZiBuZWNlc3NhcnkpOyAqLworICAvKiAgIGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2YgdmFsaWQgdGFibGUgZW50cmllcyAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogLSBsb29rIGZvciBhIGBoZWFkJyB0YWJsZSwgY2hlY2sgaXRzIHNpemUsIGFuZCBwYXJzZSBpdCB0byBjaGVjayAqLwogICAvKiAgIHdoZXRoZXIgaXRzIGBtYWdpYycgZmllbGQgaXMgY29ycmVjdGx5IHNldCAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNjcsNyArMTY4LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgY2hlY2tfdGFibGVfZGlyKCBTRk5UX0hlYWRlciAgc2ZudCwKLSAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc3RyZWFtICkKKyAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICB2YWxpZCApCiAgIHsKICAgICBGVF9FcnJvciAgIGVycm9yOwogICAgIEZUX1VTaG9ydCAgbm4sIHZhbGlkX2VudHJpZXMgPSAwOwpAQCAtMjA5LDcgKzIxMSwxMCBAQAogICAgICAgLyogd2UgaWdub3JlIGludmFsaWQgdGFibGVzICovCiAKICAgICAgIGlmICggdGFibGUuT2Zmc2V0ID4gc3RyZWFtLT5zaXplICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggImNoZWNrX3RhYmxlX2RpcjogdGFibGUgZW50cnkgJWQgaW52YWxpZFxuIiwgbm4gKSk7CiAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQogICAgICAgZWxzZSBpZiAoIHRhYmxlLkxlbmd0aCA+IHN0cmVhbS0+c2l6ZSAtIHRhYmxlLk9mZnNldCApCiAgICAgICB7CiAgICAgICAgIC8qIFNvbWUgdGFibGVzIGhhdmUgc3VjaCBhIHNpbXBsZSBzdHJ1Y3R1cmUgdGhhdCBjbGlwcGluZyBpdHMgICAgICovCkBAIC0yNzMsMTEgKzI3OCwxMSBAQAogICAgICAgICBoYXNfbWV0YSA9IDE7CiAgICAgfQogCi0gICAgc2ZudC0+bnVtX3RhYmxlcyA9IHZhbGlkX2VudHJpZXM7CisgICAgKnZhbGlkID0gdmFsaWRfZW50cmllczsKIAotICAgIGlmICggc2ZudC0+bnVtX3RhYmxlcyA9PSAwICkKKyAgICBpZiAoICF2YWxpZF9lbnRyaWVzICkKICAgICB7Ci0gICAgICBGVF9UUkFDRTIoKCAiY2hlY2tfdGFibGVfZGlyOiBubyB0YWJsZXMgZm91bmRcbiIgKSk7CisgICAgICBGVF9UUkFDRTIoKCAiY2hlY2tfdGFibGVfZGlyOiBubyB2YWxpZCB0YWJsZXMgZm91bmRcbiIgKSk7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQpAQCAtMzMzLDggKzMzOCw3IEBACiAgICAgU0ZOVF9IZWFkZXJSZWMgIHNmbnQ7CiAgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOwogICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKLSAgICBUVF9UYWJsZVJlYyogICAgZW50cnk7Ci0gICAgRlRfSW50ICAgICAgICAgIG5uOworICAgIEZUX1VTaG9ydCAgICAgICBubiwgdmFsaWRfZW50cmllczsKIAogICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgb2Zmc2V0X3RhYmxlX2ZpZWxkc1tdID0KICAgICB7CkBAIC0zNzUsODUgKzM3OSwxMTQgQEAKICAgICBpZiAoIHNmbnQuZm9ybWF0X3RhZyAhPSBUVEFHX09UVE8gKQogICAgIHsKICAgICAgIC8qIGNoZWNrIGZpcnN0ICovCi0gICAgICBlcnJvciA9IGNoZWNrX3RhYmxlX2RpciggJnNmbnQsIHN0cmVhbSApOworICAgICAgZXJyb3IgPSBjaGVja190YWJsZV9kaXIoICZzZm50LCBzdHJlYW0sICZ2YWxpZF9lbnRyaWVzICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfbG9hZF9mb250X2RpcjoiCiAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCB0YWJsZSBkaXJlY3RvcnkgZm9yIFRydWVUeXBlXG4iICkpOwotCiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgICAgdmFsaWRfZW50cmllcyA9IHNmbnQubnVtX3RhYmxlczsKIAotICAgIGZhY2UtPm51bV90YWJsZXMgPSBzZm50Lm51bV90YWJsZXM7CisgICAgZmFjZS0+bnVtX3RhYmxlcyA9IHZhbGlkX2VudHJpZXM7CiAgICAgZmFjZS0+Zm9ybWF0X3RhZyA9IHNmbnQuZm9ybWF0X3RhZzsKIAogICAgIGlmICggRlRfUU5FV19BUlJBWSggZmFjZS0+ZGlyX3RhYmxlcywgZmFjZS0+bnVtX3RhYmxlcyApICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHNmbnQub2Zmc2V0ICsgMTIgKSAgICAgICB8fAotICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGZhY2UtPm51bV90YWJsZXMgKiAxNkwgKSApCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc2ZudC5vZmZzZXQgKyAxMiApICAgICAgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBzZm50Lm51bV90YWJsZXMgKiAxNkwgKSApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICBlbnRyeSA9IGZhY2UtPmRpcl90YWJsZXM7Ci0KICAgICBGVF9UUkFDRTIoKCAiXG4iCiAgICAgICAgICAgICAgICAgIiAgdGFnICAgIG9mZnNldCAgICBsZW5ndGggICBjaGVja3N1bVxuIgogICAgICAgICAgICAgICAgICIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKSk7CiAKKyAgICB2YWxpZF9lbnRyaWVzID0gMDsKICAgICBmb3IgKCBubiA9IDA7IG5uIDwgc2ZudC5udW1fdGFibGVzOyBubisrICkKICAgICB7Ci0gICAgICBlbnRyeS0+VGFnICAgICAgPSBGVF9HRVRfVEFHNCgpOwotICAgICAgZW50cnktPkNoZWNrU3VtID0gRlRfR0VUX1VMT05HKCk7Ci0gICAgICBlbnRyeS0+T2Zmc2V0ICAgPSBGVF9HRVRfVUxPTkcoKTsKLSAgICAgIGVudHJ5LT5MZW5ndGggICA9IEZUX0dFVF9VTE9ORygpOworICAgICAgVFRfVGFibGVSZWMgIGVudHJ5OworICAgICAgRlRfVVNob3J0ICAgIGk7CisgICAgICBGVF9Cb29sICAgICAgZHVwbGljYXRlOworCisKKyAgICAgIGVudHJ5LlRhZyAgICAgID0gRlRfR0VUX1RBRzQoKTsKKyAgICAgIGVudHJ5LkNoZWNrU3VtID0gRlRfR0VUX1VMT05HKCk7CisgICAgICBlbnRyeS5PZmZzZXQgICA9IEZUX0dFVF9VTE9ORygpOworICAgICAgZW50cnkuTGVuZ3RoICAgPSBGVF9HRVRfVUxPTkcoKTsKIAogICAgICAgLyogaWdub3JlIGludmFsaWQgdGFibGVzIHRoYXQgY2FuJ3QgYmUgc2FuaXRpemVkICovCiAKLSAgICAgIGlmICggZW50cnktPk9mZnNldCA+IHN0cmVhbS0+c2l6ZSApCisgICAgICBpZiAoIGVudHJ5Lk9mZnNldCA+IHN0cmVhbS0+c2l6ZSApCiAgICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAoIGVudHJ5LT5MZW5ndGggPiBzdHJlYW0tPnNpemUgLSBlbnRyeS0+T2Zmc2V0ICkKKyAgICAgIGVsc2UgaWYgKCBlbnRyeS5MZW5ndGggPiBzdHJlYW0tPnNpemUgLSBlbnRyeS5PZmZzZXQgKQogICAgICAgewotICAgICAgICBpZiAoIGVudHJ5LT5UYWcgPT0gVFRBR19obXR4IHx8Ci0gICAgICAgICAgICAgZW50cnktPlRhZyA9PSBUVEFHX3ZtdHggKQorICAgICAgICBpZiAoIGVudHJ5LlRhZyA9PSBUVEFHX2htdHggfHwKKyAgICAgICAgICAgICBlbnRyeS5UYWcgPT0gVFRBR192bXR4ICkKICAgICAgICAgewogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgRlRfVUxvbmcgIG9sZF9sZW5ndGggPSBlbnRyeS0+TGVuZ3RoOworICAgICAgICAgIEZUX1VMb25nICBvbGRfbGVuZ3RoID0gZW50cnkuTGVuZ3RoOwogI2VuZGlmCiAKIAogICAgICAgICAgIC8qIG1ha2UgbWV0cmljcyB0YWJsZSBsZW5ndGggYSBtdWx0aXBsZSBvZiA0ICovCi0gICAgICAgICAgZW50cnktPkxlbmd0aCA9ICggc3RyZWFtLT5zaXplIC0gZW50cnktPk9mZnNldCApICYgfjNVOworICAgICAgICAgIGVudHJ5Lkxlbmd0aCA9ICggc3RyZWFtLT5zaXplIC0gZW50cnkuT2Zmc2V0ICkgJiB+M1U7CiAKICAgICAgICAgICBGVF9UUkFDRTIoKCAiICAlYyVjJWMlYyAgJTA4bHggICUwOGx4ICAlMDhseCIKLSAgICAgICAgICAgICAgICAgICAgICAiIChzYW5pdGl6ZWQ7IG9yaWdpbmFsIGxlbmd0aCAlMDhseClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnID4+IDI0ICksCi0gICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnID4+IDE2ICksCi0gICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnID4+IDggICksCi0gICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgICAgZW50cnktPk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5DaGVja1N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAiIChzYW5pdGl6ZWQ7IG9yaWdpbmFsIGxlbmd0aCAlMDhseCkiLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnkuVGFnID4+IDI0ICksCisgICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIGVudHJ5LlRhZyA+PiA4ICApLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnkuVGFnICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgZW50cnkuT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5DaGVja1N1bSwKICAgICAgICAgICAgICAgICAgICAgICBvbGRfbGVuZ3RoICkpOwotICAgICAgICAgIGVudHJ5Kys7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBlbHNlCisgICAgICAgIEZUX1RSQUNFMigoICIgICVjJWMlYyVjICAlMDhseCAgJTA4bHggICUwOGx4IiwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gMjQgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gOCAgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgZW50cnkuT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBlbnRyeS5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LkNoZWNrU3VtICkpOworI2VuZGlmCisKKyAgICAgIC8qIGlnbm9yZSBkdXBsaWNhdGUgdGFibGVzIOKAkyB0aGUgZmlyc3Qgb25lIHdpbnMgKi8KKyAgICAgIGR1cGxpY2F0ZSA9IDA7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IHZhbGlkX2VudHJpZXM7IGkrKyApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZS0+ZGlyX3RhYmxlc1tpXS5UYWcgPT0gZW50cnkuVGFnICkKKyAgICAgICAgeworICAgICAgICAgIGR1cGxpY2F0ZSA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmICggZHVwbGljYXRlICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggIiAgKGR1cGxpY2F0ZSwgaWdub3JlZClcbiIgKSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBGVF9UUkFDRTIoKCAiICAlYyVjJWMlYyAgJTA4bHggICUwOGx4ICAlMDhseFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnID4+IDI0ICksCi0gICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyA+PiAxNiApLAotICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIGVudHJ5LT5UYWcgPj4gOCAgKSwKLSAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5PZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5MZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5DaGVja1N1bSApKTsKLSAgICAgICAgZW50cnkrKzsKKyAgICAgICAgRlRfVFJBQ0UyKCggIlxuIiApKTsKKworICAgICAgICAvKiB3ZSBmaW5hbGx5IGhhdmUgYSB2YWxpZCBlbnRyeSAqLworICAgICAgICBmYWNlLT5kaXJfdGFibGVzW3ZhbGlkX2VudHJpZXMrK10gPSBlbnRyeTsKICAgICAgIH0KICAgICB9CiAKKyAgICAvKiBmaW5hbCBhZGp1c3RtZW50IHRvIG51bWJlciBvZiB0YWJsZXMgKi8KKyAgICBmYWNlLT5udW1fdGFibGVzID0gdmFsaWRfZW50cmllczsKKwogICAgIEZUX0ZSQU1FX0VYSVQoKTsKIAogICAgIEZUX1RSQUNFMigoICJ0YWJsZSBkaXJlY3RvcnkgbG9hZGVkXG5cbiIgKSk7CkBAIC03NDIsMTUgKzc3NSw2IEBACiAKICAgICAgICAgbWF4UHJvZmlsZS0+bWF4VHdpbGlnaHRQb2ludHMgPSAweEZGRkZVIC0gNDsKICAgICAgIH0KLQotICAgICAgLyogd2UgYXJiaXRyYXJpbHkgbGltaXQgcmVjdXJzaW9uIHRvIGF2b2lkIHN0YWNrIGV4aGF1c3Rpb24gKi8KLSAgICAgIGlmICggbWF4UHJvZmlsZS0+bWF4Q29tcG9uZW50RGVwdGggPiAxMDAgKQotICAgICAgewotICAgICAgICBGVF9UUkFDRTAoKCAidHRfZmFjZV9sb2FkX21heHA6IgotICAgICAgICAgICAgICAgICAgICAiIGFibm9ybWFsbHkgbGFyZ2UgY29tcG9uZW50IGRlcHRoICglZCkgc2V0IHRvIDEwMFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbWF4UHJvZmlsZS0+bWF4Q29tcG9uZW50RGVwdGggKSk7Ci0gICAgICAgIG1heFByb2ZpbGUtPm1heENvbXBvbmVudERlcHRoID0gMTAwOwotICAgICAgfQogICAgIH0KIAogICAgIEZUX1RSQUNFMygoICJudW1HbHlwaHM6ICV1XG4iLCBtYXhQcm9maWxlLT5udW1HbHlwaHMgKSk7CkBAIC0xMTYwLDggKzExODQsOCBAQAogI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFRUX1Bvc3RzY3JpcHQKIAogICAgICAgRlRfRlJBTUVfU1RBUlQoIDMyICksCi0gICAgICAgIEZUX0ZSQU1FX1VMT05HKCBGb3JtYXRUeXBlICksCi0gICAgICAgIEZUX0ZSQU1FX1VMT05HKCBpdGFsaWNBbmdsZSApLAorICAgICAgICBGVF9GUkFNRV9MT05HICggRm9ybWF0VHlwZSApLAorICAgICAgICBGVF9GUkFNRV9MT05HICggaXRhbGljQW5nbGUgKSwKICAgICAgICAgRlRfRlJBTUVfU0hPUlQoIHVuZGVybGluZVBvc2l0aW9uICksCiAgICAgICAgIEZUX0ZSQU1FX1NIT1JUKCB1bmRlcmxpbmVUaGlja25lc3MgKSwKICAgICAgICAgRlRfRlJBTUVfVUxPTkcoIGlzRml4ZWRQaXRjaCApLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRsb2FkLmggYi9zcmMvc2ZudC90dGxvYWQuaAppbmRleCBhNmQ5MWM1Li5iZWM0MmI5IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGxvYWQuaAorKysgYi9zcmMvc2ZudC90dGxvYWQuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIHRhYmxlcywgaS5lLiwgdGFibGVzIHRoYXQgY2FuIGJlIGVpdGhlciBpbiAgICovCiAvKiAgICBUVEYgb3IgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRMT0FEX0hfXwotI2RlZmluZSBfX1RUTE9BRF9IX18KKyNpZm5kZWYgVFRMT0FEX0hfCisjZGVmaW5lIFRUTE9BRF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRMT0FEX0hfXyAqLworI2VuZGlmIC8qIFRUTE9BRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRtdHguYyBiL3NyYy9zZm50L3R0bXR4LmMKaW5kZXggNTgzMDlhYS4uMTg2Zjg3MyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRtdHguYworKysgYi9zcmMvc2ZudC90dG10eC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIExvYWQgdGhlIG1ldHJpY3MgdGFibGVzIGNvbW1vbiB0byBUVEYgYW5kIE9URiBmb250cyAoYm9keSkuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dG10eC5oIGIvc3JjL3NmbnQvdHRtdHguaAppbmRleCAwOTZlZTA2Li43ODM5NWRlIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dG10eC5oCisrKyBiL3NyYy9zZm50L3R0bXR4LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTG9hZCB0aGUgbWV0cmljcyB0YWJsZXMgY29tbW9uIHRvIFRURiBhbmQgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUTVRYX0hfXwotI2RlZmluZSBfX1RUTVRYX0hfXworI2lmbmRlZiBUVE1UWF9IXworI2RlZmluZSBUVE1UWF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDksNyArNDksNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUTVRYX0hfXyAqLworI2VuZGlmIC8qIFRUTVRYX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHBvc3QuYyBiL3NyYy9zZm50L3R0cG9zdC5jCmluZGV4IDhkMjlkMWUuLjMyNzdmMWUgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0cG9zdC5jCisrKyBiL3NyYy9zZm50L3R0cG9zdC5jCkBAIC0yLDEwICsyLDEwIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHR0cG9zdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0Y3JpcHQgbmFtZSB0YWJsZSBwcm9jZXNzaW5nIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgKi8KIC8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHBvc3QuaCBiL3NyYy9zZm50L3R0cG9zdC5oCmluZGV4IGUzZWNhMDIuLmVkZTQ1ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0cG9zdC5oCisrKyBiL3NyYy9zZm50L3R0cG9zdC5oCkBAIC0yLDEwICsyLDEwIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHR0cG9zdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0Y3JpcHQgbmFtZSB0YWJsZSBwcm9jZXNzaW5nIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFBPU1RfSF9fCi0jZGVmaW5lIF9fVFRQT1NUX0hfXworI2lmbmRlZiBUVFBPU1RfSF8KKyNkZWZpbmUgVFRQT1NUX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MCw3ICs0MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRQT1NUX0hfXyAqLworI2VuZGlmIC8qIFRUUE9TVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRzYml0LmMgYi9zcmMvc2ZudC90dHNiaXQuYwppbmRleCAxNDNmMjc2Li4wYTkwMTExIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dHNiaXQuYworKysgYi9zcmMvc2ZudC90dHNiaXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgQ29weXJpZ2h0IDIwMTMgYnkgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA0LDcgKzEwNCw4IEBACiAgICAgICAgIHZlcnNpb24gICAgID0gRlRfTkVYVF9MT05HKCBwICk7CiAgICAgICAgIG51bV9zdHJpa2VzID0gRlRfTkVYVF9VTE9ORyggcCApOwogCi0gICAgICAgIGlmICggKCAoRlRfVUxvbmcpdmVyc2lvbiAmIDB4RkZGRjAwMDBVTCApICE9IDB4MDAwMjAwMDBVTCApCisgICAgICAgIGlmICggKCAoRlRfVUxvbmcpdmVyc2lvbiAmIDB4RkZGRjAwMDBVTCApICE9IDB4MDAwMjAwMDBVTCAmJgorICAgICAgICAgICAgICggKEZUX1VMb25nKXZlcnNpb24gJiAweEZGRkYwMDAwVUwgKSAhPSAweDAwMDMwMDAwVUwgKQogICAgICAgICB7CiAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwogICAgICAgICAgIGdvdG8gRXhpdDsKQEAgLTE5Niw2ICsxOTcsMjcgQEAKICAgICBpZiAoICFlcnJvciApCiAgICAgICBGVF9UUkFDRTMoKCAic2JpdF9udW1fc3RyaWtlczogJXVcbiIsIGZhY2UtPnNiaXRfbnVtX3N0cmlrZXMgKSk7CiAKKyAgICBmYWNlLT5lYmR0X3N0YXJ0ID0gMDsKKyAgICBmYWNlLT5lYmR0X3NpemUgID0gMDsKKworICAgIGlmICggZmFjZS0+c2JpdF90YWJsZV90eXBlICE9IFRUX1NCSVRfVEFCTEVfVFlQRV9OT05FICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgZWJkdF9zaXplOworCisKKyAgICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19DQkRULCBzdHJlYW0sICZlYmR0X3NpemUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfRUJEVCwgc3RyZWFtLCAmZWJkdF9zaXplICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2JkYXQsIHN0cmVhbSwgJmViZHRfc2l6ZSApOworCisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIGZhY2UtPmViZHRfc3RhcnQgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgICAgIGZhY2UtPmViZHRfc2l6ZSAgPSBlYmR0X3NpemU7CisgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKIAogICBFeGl0OgpAQCAtMjM4LDggKzI2MCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgIHN0cmlrZV9pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzICkKICAgewotICAgIGlmICggc3RyaWtlX2luZGV4ID49IChGVF9VTG9uZylmYWNlLT5zYml0X251bV9zdHJpa2VzICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIC8qIHdlIGhhdmUgdG8gdGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgc2JpdF9zdHJpa2VfbWFwJyAgICAqLworICAgIC8qIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGdldHMgYWxzbyB1c2VkIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyAqLworICAgIC8qIHRvIGNvbnN0cnVjdCBgc2JpdF9zdHJpa2VfbWFwJyBpdHNlbGYgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZmFjZS0+c2JpdF9zdHJpa2VfbWFwICkKKyAgICB7CisgICAgICBpZiAoIHN0cmlrZV9pbmRleCA+PSAoRlRfVUxvbmcpZmFjZS0+cm9vdC5udW1fZml4ZWRfc2l6ZXMgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICAgLyogbWFwIHRvIHJlYWwgaW5kZXggKi8KKyAgICAgIHN0cmlrZV9pbmRleCA9IGZhY2UtPnNiaXRfc3RyaWtlX21hcFtzdHJpa2VfaW5kZXhdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBzdHJpa2VfaW5kZXggPj0gKEZUX1VMb25nKWZhY2UtPnNiaXRfbnVtX3N0cmlrZXMgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICB9CiAKICAgICBzd2l0Y2ggKCAoRlRfVUludClmYWNlLT5zYml0X3RhYmxlX3R5cGUgKQogICAgIHsKQEAgLTI0Nyw2ICsyODMsOCBAQAogICAgIGNhc2UgVFRfU0JJVF9UQUJMRV9UWVBFX0NCTEM6CiAgICAgICB7CiAgICAgICAgIEZUX0J5dGUqICBzdHJpa2U7CisgICAgICAgIEZUX0NoYXIgICBtYXhfYmVmb3JlX2JsOworICAgICAgICBGVF9DaGFyICAgbWluX2FmdGVyX2JsOwogCiAKICAgICAgICAgc3RyaWtlID0gZmFjZS0+c2JpdF90YWJsZSArIDggKyBzdHJpa2VfaW5kZXggKiA0ODsKQEAgLTI1NCwyNiArMjkyLDk0IEBACiAgICAgICAgIG1ldHJpY3MtPnhfcHBlbSA9IChGVF9VU2hvcnQpc3RyaWtlWzQ0XTsKICAgICAgICAgbWV0cmljcy0+eV9wcGVtID0gKEZUX1VTaG9ydClzdHJpa2VbNDVdOwogCi0gICAgICAgIG1ldHJpY3MtPmFzY2VuZGVyICA9IChGVF9DaGFyKXN0cmlrZVsxNl0gPDwgNjsgIC8qIGhvcmkuYXNjZW5kZXIgICovCi0gICAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciA9IChGVF9DaGFyKXN0cmlrZVsxN10gPDwgNjsgIC8qIGhvcmkuZGVzY2VuZGVyICovCi0gICAgICAgIG1ldHJpY3MtPmhlaWdodCAgICA9IG1ldHJpY3MtPmFzY2VuZGVyIC0gbWV0cmljcy0+ZGVzY2VuZGVyOworICAgICAgICBtZXRyaWNzLT5hc2NlbmRlciAgPSAoRlRfQ2hhcilzdHJpa2VbMTZdICogNjQ7ICAvKiBob3JpLmFzY2VuZGVyICAqLworICAgICAgICBtZXRyaWNzLT5kZXNjZW5kZXIgPSAoRlRfQ2hhcilzdHJpa2VbMTddICogNjQ7ICAvKiBob3JpLmRlc2NlbmRlciAqLworCisgICAgICAgIC8qIER1ZSB0byBmdXp6eSB3b3JkaW5nIGluIHRoZSBFQkxDIGRvY3VtZW50YXRpb24sIHdlIGZpbmQgYm90aCAqLworICAgICAgICAvKiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGZvciBgZGVzY2VuZGVyJy4gIEFkZGl0aW9uYWxseSwgKi8KKyAgICAgICAgLyogbWFueSBmb250cyBoYXZlIGJvdGggYGFzY2VuZGVyJyBhbmQgYGRlc2NlbmRlcicgc2V0IHRvIHplcm8gICovCisgICAgICAgIC8qICh3aGljaCBpcyBkZWZpbml0ZWx5IHdyb25nKS4gIE1TIFdpbmRvd3Mgc2ltcGx5IGlnbm9yZXMgYWxsICAqLworICAgICAgICAvKiB0aG9zZSB2YWx1ZXMuLi4gIEZvciB0aGVzZSByZWFzb25zIHdlIGFwcGx5IHNvbWUgaGV1cmlzdGljcyAgKi8KKyAgICAgICAgLyogdG8gZ2V0IGEgcmVhc29uYWJsZSwgbm9uLXplcm8gdmFsdWUgZm9yIHRoZSBoZWlnaHQuICAgICAgICAgICovCisKKyAgICAgICAgbWF4X2JlZm9yZV9ibCA9IChGVF9DaGFyKXN0cmlrZVsyNF07CisgICAgICAgIG1pbl9hZnRlcl9ibCAgPSAoRlRfQ2hhcilzdHJpa2VbMjVdOworCisgICAgICAgIGlmICggbWV0cmljcy0+ZGVzY2VuZGVyID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBjb21wYXJlIHNpZ24gb2YgZGVzY2VuZGVyIHdpdGggYG1pbl9hZnRlcl9ibCcgKi8KKyAgICAgICAgICBpZiAoIG1pbl9hZnRlcl9ibCA8IDAgKQorICAgICAgICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyID0gLW1ldHJpY3MtPmRlc2NlbmRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKCBtZXRyaWNzLT5kZXNjZW5kZXIgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIG1ldHJpY3MtPmFzY2VuZGVyID09IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFMigoICJ0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgIiBzYW5pdGl6aW5nIGludmFsaWQgYXNjZW5kZXIgYW5kIGRlc2NlbmRlclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHZhbHVlcyBmb3Igc3RyaWtlICVkICglZHBwZW0sICVkcHBlbSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3BwZW0sIG1ldHJpY3MtPnlfcHBlbSApKTsKKworICAgICAgICAgICAgLyogc2FuaXRpemUgYnVnZ3kgYXNjZW5kZXIgYW5kIGRlc2NlbmRlciB2YWx1ZXMgKi8KKyAgICAgICAgICAgIGlmICggbWF4X2JlZm9yZV9ibCB8fCBtaW5fYWZ0ZXJfYmwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtZXRyaWNzLT5hc2NlbmRlciAgPSBtYXhfYmVmb3JlX2JsICogNjQ7CisgICAgICAgICAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciA9IG1pbl9hZnRlcl9ibCAqIDY0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtZXRyaWNzLT5hc2NlbmRlciAgPSBtZXRyaWNzLT55X3BwZW0gKiA2NDsKKyAgICAgICAgICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgZWxzZQorICAgICAgICAgIDsgLyogaWYgd2UgaGF2ZSBhIG5lZ2F0aXZlIGRlc2NlbmRlciwgc2ltcGx5IHVzZSBpdCAqLworI2VuZGlmCisKKyAgICAgICAgbWV0cmljcy0+aGVpZ2h0ID0gbWV0cmljcy0+YXNjZW5kZXIgLSBtZXRyaWNzLT5kZXNjZW5kZXI7CisgICAgICAgIGlmICggbWV0cmljcy0+aGVpZ2h0ID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAgICAgICAgIiBzYW5pdGl6aW5nIGludmFsaWQgaGVpZ2h0IHZhbHVlXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICAgIiBmb3Igc3RyaWtlICglZCwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfcHBlbSwgbWV0cmljcy0+eV9wcGVtICkpOworICAgICAgICAgIG1ldHJpY3MtPmhlaWdodCAgICA9IG1ldHJpY3MtPnlfcHBlbSAqIDY0OworICAgICAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciA9IG1ldHJpY3MtPmFzY2VuZGVyIC0gbWV0cmljcy0+aGVpZ2h0OworICAgICAgICB9CiAKICAgICAgICAgLyogSXMgdGhpcyBjb3JyZWN0PyAqLwogICAgICAgICBtZXRyaWNzLT5tYXhfYWR2YW5jZSA9ICggKEZUX0NoYXIpc3RyaWtlWzIyXSArIC8qIG1pbl9vcmlnaW5fU0IgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VbMThdICsgLyogbWF4X3dpZHRoICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKXN0cmlrZVsyM10gICAvKiBtaW5fYWR2YW5jZV9TQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKiA2NDsKKworICAgICAgICAvKiBzZXQgdGhlIHNjYWxlIHZhbHVlcyAoaW4gMTYuMTYgdW5pdHMpIHNvIGFkdmFuY2VzICovCisgICAgICAgIC8qIGZyb20gdGhlIGhtdHggYW5kIHZtdHggdGFibGUgYXJlIHNjYWxlZCBjb3JyZWN0bHkgKi8KKyAgICAgICAgbWV0cmljcy0+eF9zY2FsZSA9IEZUX011bERpdiggbWV0cmljcy0+eF9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDB4MTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU0gKTsKKyAgICAgICAgbWV0cmljcy0+eV9zY2FsZSA9IEZUX011bERpdiggbWV0cmljcy0+eV9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDB4MTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU0gKTsKKwogICAgICAgICByZXR1cm4gRlRfRXJyX09rOwogICAgICAgfQogCiAgICAgY2FzZSBUVF9TQklUX1RBQkxFX1RZUEVfU0JJWDoKICAgICAgIHsKICAgICAgICAgRlRfU3RyZWFtICAgICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOwotICAgICAgICBGVF9VSW50ICAgICAgICAgb2Zmc2V0LCB1cGVtOwotICAgICAgICBGVF9VU2hvcnQgICAgICAgcHBlbSwgcmVzb2x1dGlvbjsKKyAgICAgICAgRlRfVUludCAgICAgICAgIG9mZnNldDsKKyAgICAgICAgRlRfVVNob3J0ICAgICAgIHVwZW0sIHBwZW0sIHJlc29sdXRpb247CiAgICAgICAgIFRUX0hvcmlIZWFkZXIgICpob3JpOwogICAgICAgICBGVF9VTG9uZyAgICAgICAgdGFibGVfc2l6ZTsKLSAgICAgICAgRlRfUG9zICAgICAgICAgIHBwZW1fLCB1cGVtXzsgLyogdG8gcmVkdWNlIGNhc3RzICovCisgICAgICAgIEZUX1BvcyAgICAgICAgICBwcGVtXzsgLyogdG8gcmVkdWNlIGNhc3RzICovCiAKICAgICAgICAgRlRfRXJyb3IgIGVycm9yOwogICAgICAgICBGVF9CeXRlKiAgcDsKQEAgLTMwNywxNCArNDEzLDE2IEBACiAgICAgICAgIG1ldHJpY3MtPnlfcHBlbSA9IHBwZW07CiAKICAgICAgICAgcHBlbV8gPSAoRlRfUG9zKXBwZW07Ci0gICAgICAgIHVwZW1fID0gKEZUX1Bvcyl1cGVtOwogCi0gICAgICAgIG1ldHJpY3MtPmFzY2VuZGVyICAgID0gcHBlbV8gKiBob3JpLT5Bc2NlbmRlciAqIDY0IC8gdXBlbV87Ci0gICAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciAgID0gcHBlbV8gKiBob3JpLT5EZXNjZW5kZXIgKiA2NCAvIHVwZW1fOwotICAgICAgICBtZXRyaWNzLT5oZWlnaHQgICAgICA9IHBwZW1fICogKCBob3JpLT5Bc2NlbmRlciAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcmktPkRlc2NlbmRlciArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcmktPkxpbmVfR2FwICkgKiA2NCAvIHVwZW1fOwotICAgICAgICBtZXRyaWNzLT5tYXhfYWR2YW5jZSA9IHBwZW1fICogaG9yaS0+YWR2YW5jZV9XaWR0aF9NYXggKiA2NCAvIHVwZW1fOworICAgICAgICBtZXRyaWNzLT5hc2NlbmRlciA9CisgICAgICAgICAgRlRfTXVsRGl2KCBob3JpLT5Bc2NlbmRlciwgcHBlbV8gKiA2NCwgdXBlbSApOworICAgICAgICBtZXRyaWNzLT5kZXNjZW5kZXIgPQorICAgICAgICAgIEZUX011bERpdiggaG9yaS0+RGVzY2VuZGVyLCBwcGVtXyAqIDY0LCB1cGVtICk7CisgICAgICAgIG1ldHJpY3MtPmhlaWdodCA9CisgICAgICAgICAgRlRfTXVsRGl2KCBob3JpLT5Bc2NlbmRlciAtIGhvcmktPkRlc2NlbmRlciArIGhvcmktPkxpbmVfR2FwLAorICAgICAgICAgICAgICAgICAgICAgcHBlbV8gKiA2NCwgdXBlbSApOworICAgICAgICBtZXRyaWNzLT5tYXhfYWR2YW5jZSA9CisgICAgICAgICAgRlRfTXVsRGl2KCBob3JpLT5hZHZhbmNlX1dpZHRoX01heCwgcHBlbV8gKiA2NCwgdXBlbSApOwogCiAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgIH0KQEAgLTM1MiwxNyArNDYwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgICBzdHJpa2VfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3NSZWMqICBtZXRyaWNzICkKICAgewotICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FUlIoIFRhYmxlX01pc3NpbmcgKTsKICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOwotICAgIEZUX1VMb25nICAgZWJkdF9zaXplOwogCiAKLSAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfQ0JEVCwgc3RyZWFtLCAmZWJkdF9zaXplICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfRUJEVCwgc3RyZWFtLCAmZWJkdF9zaXplICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfYmRhdCwgc3RyZWFtLCAmZWJkdF9zaXplICk7Ci0gICAgaWYgKCBlcnJvciApCisgICAgc3RyaWtlX2luZGV4ID0gZmFjZS0+c2JpdF9zdHJpa2VfbWFwW3N0cmlrZV9pbmRleF07CisKKyAgICBpZiAoICFmYWNlLT5lYmR0X3NpemUgKQorICAgICAgZ290byBFeGl0OworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGZhY2UtPmViZHRfc3RhcnQgKSApCiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICBkZWNvZGVyLT5mYWNlICAgID0gZmFjZTsKQEAgLTM3Myw4ICs0NzksOCBAQAogICAgIGRlY29kZXItPm1ldHJpY3NfbG9hZGVkICAgPSAwOwogICAgIGRlY29kZXItPmJpdG1hcF9hbGxvY2F0ZWQgPSAwOwogCi0gICAgZGVjb2Rlci0+ZWJkdF9zdGFydCA9IEZUX1NUUkVBTV9QT1MoKTsKLSAgICBkZWNvZGVyLT5lYmR0X3NpemUgID0gZWJkdF9zaXplOworICAgIGRlY29kZXItPmViZHRfc3RhcnQgPSBmYWNlLT5lYmR0X3N0YXJ0OworICAgIGRlY29kZXItPmViZHRfc2l6ZSAgPSBmYWNlLT5lYmR0X3NpemU7CiAKICAgICBkZWNvZGVyLT5lYmxjX2Jhc2UgID0gZmFjZS0+c2JpdF90YWJsZTsKICAgICBkZWNvZGVyLT5lYmxjX2xpbWl0ID0gZmFjZS0+c2JpdF90YWJsZSArIGZhY2UtPnNiaXRfdGFibGVfc2l6ZTsKQEAgLTU0NywxMyArNjUzLDE2IEBACiAgIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBnbHlwaF9pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB4X3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIHJlY3Vyc2VfY291bnQgKTsKIAotICB0eXBlZGVmIEZUX0Vycm9yICAoKlRUX1NCaXREZWNvZGVyX0xvYWRGdW5jKSggVFRfU0JpdERlY29kZXIgIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBwbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MgKTsKKyAgdHlwZWRlZiBGVF9FcnJvciAgKCpUVF9TQml0RGVjb2Rlcl9Mb2FkRnVuYykoCisgICAgICAgICAgICAgICAgICAgICAgVFRfU0JpdERlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICByZWN1cnNlX2NvdW50ICk7CiAKIAogICBzdGF0aWMgRlRfRXJyb3IKQEAgLTU2MSw3ICs2NzAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBsaW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIHJlY3Vyc2VfY291bnQgKQogICB7CiAgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfQnl0ZSogICAgbGluZTsKQEAgLTU2OSw2ICs2NzksOCBAQAogICAgIEZUX1VJbnQgICAgIGJpdF9oZWlnaHQsIGJpdF93aWR0aDsKICAgICBGVF9CaXRtYXAqICBiaXRtYXA7CiAKKyAgICBGVF9VTlVTRUQoIHJlY3Vyc2VfY291bnQgKTsKKwogCiAgICAgLyogY2hlY2sgdGhhdCB3ZSBjYW4gd3JpdGUgdGhlIGdseXBoIGludG8gdGhlIGJpdG1hcCAqLwogICAgIGJpdG1hcCAgICAgPSBkZWNvZGVyLT5iaXRtYXA7CkBAIC03MDAsNyArODEyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGxpbWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHhfcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICByZWN1cnNlX2NvdW50ICkKICAgewogICAgIEZUX0Vycm9yICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX0J5dGUqICAgIGxpbmU7CkBAIC03MDksNiArODIyLDggQEAKICAgICBGVF9CaXRtYXAqICBiaXRtYXA7CiAgICAgRlRfVVNob3J0ICAgcnZhbDsKIAorICAgIEZUX1VOVVNFRCggcmVjdXJzZV9jb3VudCApOworCiAKICAgICAvKiBjaGVjayB0aGF0IHdlIGNhbiB3cml0ZSB0aGUgZ2x5cGggaW50byB0aGUgYml0bWFwICovCiAgICAgYml0bWFwICAgICA9IGRlY29kZXItPmJpdG1hcDsKQEAgLTczOCw2ICs4NTMsMTIgQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKKyAgICBpZiAoICFsaW5lX2JpdHMgfHwgIWhlaWdodCApCisgICAgeworICAgICAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgZ290byBFeGl0OworICAgIH0KKwogICAgIC8qIG5vdyBkbyB0aGUgYmxpdCAqLwogCiAgICAgLyogYWRqdXN0IGBsaW5lJyB0byBwb2ludCB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYml0bWFwICovCkBAIC03NzcsNyArODk4LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgICpwd3JpdGUrKyB8PSAoICggcnZhbCA+PiBuYml0cyApICYgMHhGRiApICYKLSAgICAgICAgICAgICAgICAgICAgICggfiggMHhGRiA8PCB3ICkgPDwgKCA4IC0gdyAtIHhfcG9zICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICggfiggMHhGRlUgPDwgdyApIDw8ICggOCAtIHcgLSB4X3BvcyApICk7CiAgICAgICAgIHJ2YWwgICAgIDw8PSA4OwogCiAgICAgICAgIHcgPSBsaW5lX2JpdHMgLSB3OwpAQCAtODI0LDcgKzk0NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBsaW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB4X3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgcmVjdXJzZV9jb3VudCApCiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfVUludCAgIG51bV9jb21wb25lbnRzLCBubjsKQEAgLTg1OCw4ICs5ODAsMTEgQEAKIAogCiAgICAgICAvKiBOQjogYSByZWN1cnNpdmUgY2FsbCAqLwotICAgICAgZXJyb3IgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSggZGVjb2RlciwgZ2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9wb3MgKyBkeCwgeV9wb3MgKyBkeSApOworICAgICAgZXJyb3IgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfcG9zICsgZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X3BvcyArIGR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzZV9jb3VudCArIDEgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBicmVhazsKICAgICB9CkBAIC04OTEsMTEgKzEwMTYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgbGltaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHhfcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICByZWN1cnNlX2NvdW50ICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBGVF9VTG9uZyAgcG5nX2xlbjsKIAorICAgIEZUX1VOVVNFRCggcmVjdXJzZV9jb3VudCApOworCiAKICAgICBpZiAoIGxpbWl0IC0gcCA8IDQgKQogICAgIHsKQEAgLTkzNyw3ICsxMDY1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgZ2x5cGhfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIGdseXBoX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHhfcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICByZWN1cnNlX2NvdW50ICkKICAgewogICAgIEZUX0Vycm9yICAgZXJyb3I7CiAgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBkZWNvZGVyLT5zdHJlYW07CkBAIC05NDcsNyArMTA3Niw4IEBACiAKIAogICAgIC8qIHNlZWsgaW50byB0aGUgRUJEVCB0YWJsZSBub3cgKi8KLSAgICBpZiAoIGdseXBoX3N0YXJ0ICsgZ2x5cGhfc2l6ZSA+IGRlY29kZXItPmViZHRfc2l6ZSApCisgICAgaWYgKCAhZ2x5cGhfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIGdseXBoX3N0YXJ0ICsgZ2x5cGhfc2l6ZSA+IGRlY29kZXItPmViZHRfc2l6ZSApCiAgICAgewogICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogICAgICAgZ290byBFeGl0OwpAQCAtMTA2Myw3ICsxMTkzLDcgQEAKICAgICAgICAgICBnb3RvIEZhaWw7CiAgICAgICB9CiAKLSAgICAgIGVycm9yID0gbG9hZGVyKCBkZWNvZGVyLCBwLCBwX2xpbWl0LCB4X3BvcywgeV9wb3MgKTsKKyAgICAgIGVycm9yID0gbG9hZGVyKCBkZWNvZGVyLCBwLCBwX2xpbWl0LCB4X3BvcywgeV9wb3MsIHJlY3Vyc2VfY291bnQgKTsKICAgICB9CiAKICAgRmFpbDoKQEAgLTEwNzgsMTMgKzEyMDgsOSBAQAogICB0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSggVFRfU0JpdERlY29kZXIgIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2x5cGhfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIHJlY3Vyc2VfY291bnQgKQogICB7Ci0gICAgLyoKLSAgICAgKiAgRmlyc3QsIHdlIGZpbmQgdGhlIGNvcnJlY3Qgc3RyaWtlIHJhbmdlIHRoYXQgYXBwbGllcyB0byB0aGlzCi0gICAgICogIGdseXBoIGluZGV4LgotICAgICAqLwotCiAgICAgRlRfQnl0ZSogIHAgICAgICAgICAgPSBkZWNvZGVyLT5lYmxjX2Jhc2UgKyBkZWNvZGVyLT5zdHJpa2VfaW5kZXhfYXJyYXk7CiAgICAgRlRfQnl0ZSogIHBfbGltaXQgICAgPSBkZWNvZGVyLT5lYmxjX2xpbWl0OwogICAgIEZUX1VMb25nICBudW1fcmFuZ2VzID0gZGVjb2Rlci0+c3RyaWtlX2luZGV4X2NvdW50OwpAQCAtMTA5Miw2ICsxMjE4LDE3IEBACiAgICAgRlRfVUxvbmcgIGltYWdlX3N0YXJ0ID0gMCwgaW1hZ2VfZW5kID0gMCwgaW1hZ2Vfb2Zmc2V0OwogCiAKKyAgICAvKiBhcmJpdHJhcnkgcmVjdXJzaW9uIGxpbWl0ICovCisgICAgaWYgKCByZWN1cnNlX2NvdW50ID4gMTAwICkKKyAgICB7CisgICAgICBGVF9UUkFDRTQoKCAidHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2U6IgorICAgICAgICAgICAgICAgICAgIiByZWN1cnNpb24gZGVwdGggZXhjZWVkZWRcbiIgKSk7CisgICAgICBnb3RvIEZhaWx1cmU7CisgICAgfQorCisKKyAgICAvKiBGaXJzdCwgd2UgZmluZCB0aGUgY29ycmVjdCBzdHJpa2UgcmFuZ2UgdGhhdCBhcHBsaWVzIHRvIHRoaXMgKi8KKyAgICAvKiBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBmb3IgKCA7IG51bV9yYW5nZXMgPiAwOyBudW1fcmFuZ2VzLS0gKQogICAgIHsKICAgICAgIHN0YXJ0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKQEAgLTEyNTYsNyArMTM5Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Vfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfcG9zICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzZV9jb3VudCApOwogCiAgIEZhaWx1cmU6CiAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CkBAIC0xMjg5LDYgKzE0MjcsOCBAQAogICAgIEZUX1VOVVNFRCggbWFwICk7CiAKIAorICAgIHN0cmlrZV9pbmRleCA9IGZhY2UtPnNiaXRfc3RyaWtlX21hcFtzdHJpa2VfaW5kZXhdOworCiAgICAgbWV0cmljcy0+d2lkdGggID0gMDsKICAgICBtZXRyaWNzLT5oZWlnaHQgPSAwOwogCkBAIC0xNDE5LDYgKzE1NTksNyBAQAogICAgICAgICAgIGVycm9yID0gdHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UoIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKTsKICAgICAgICAgICB0dF9zYml0X2RlY29kZXJfZG9uZSggZGVjb2RlciApOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHNiaXQuaCBiL3NyYy9zZm50L3R0c2JpdC5oCmluZGV4IGQ0ZTEzYWUuLmQ4YTgxNjcgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0c2JpdC5oCisrKyBiL3NyYy9zZm50L3R0c2JpdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFNCSVRfSF9fCi0jZGVmaW5lIF9fVFRTQklUX0hfXworI2lmbmRlZiBUVFNCSVRfSF8KKyNkZWZpbmUgVFRTQklUX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01Nyw3ICs1Nyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRTQklUX0hfXyAqLworI2VuZGlmIC8qIFRUU0JJVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdGdyYXlzLmMgYi9zcmMvc21vb3RoL2Z0Z3JheXMuYwppbmRleCA3N2I1OGYyLi4zMGZkNGUyIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0Z3JheXMuYworKysgYi9zcmMvc21vb3RoL2Z0Z3JheXMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBIG5ldyBgcGVyZmVjdCcgYW50aS1hbGlhc2luZyByZW5kZXJlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsMTggKzE4LDE4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogVGhpcyBmaWxlIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IHRoZSByZXN0IG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUsIGJ5ICovCi0gIC8qIGRlZmluaW5nIHRoZSBfU1RBTkRBTE9ORV8gbWFjcm8gd2hlbiBjb21waWxpbmcgaXQuICBZb3UgYWxzbyBuZWVkIHRvICAqLworICAvKiBkZWZpbmluZyB0aGUgU1RBTkRBTE9ORV8gbWFjcm8gd2hlbiBjb21waWxpbmcgaXQuICBZb3UgYWxzbyBuZWVkIHRvICAgKi8KICAgLyogcHV0IHRoZSBmaWxlcyBgZnRncmF5cy5oJyBhbmQgYGZ0aW1hZ2UuaCcgaW50byB0aGUgY3VycmVudCAgICAgICAgICAgICovCiAgIC8qIGNvbXBpbGF0aW9uIGRpcmVjdG9yeS4gIFR5cGljYWxseSwgeW91IGNvdWxkIGRvIHNvbWV0aGluZyBsaWtlICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogLSBjb3B5IGBzcmMvc21vb3RoL2Z0Z3JheXMuYycgKHRoaXMgZmlsZSkgdG8geW91ciBjdXJyZW50IGRpcmVjdG9yeSAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNvcHkgYGluY2x1ZGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9zbW9vdGgvZnRncmF5cy5oJyB0byB0aGUgc2FtZSAgICAgKi8KLSAgLyogICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gY29weSBgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgnIGFuZCBgc3JjL3Ntb290aC9mdGdyYXlzLmgnIHRvIHRoZSAqLworICAvKiAgIHNhbWUgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gY29tcGlsZSBgZnRncmF5cycgd2l0aCB0aGUgX1NUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluICAgICAgICAqLworICAvKiAtIGNvbXBpbGUgYGZ0Z3JheXMnIHdpdGggdGhlIFNUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjYyAtYyAtRF9TVEFOREFMT05FXyBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgY2MgLWMgLURTVEFOREFMT05FXyBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoZSByZW5kZXJlciBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBgZnRfZ3JheV9yYXN0ZXIucmFzdGVyX25ldyc7IGFuIGFudGktYWxpYXNlZCBiaXRtYXAgY2FuIGJlIGdlbmVyYXRlZCAgKi8KQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9zbW9vdGgKIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KIAogCiAgIC8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbCB1c2VkIGJ5IHRoZSBzY2FuLWxpbmUgY29udmVydGVyICAqLwpAQCAtMTA2LDYgKzEwNiw3IEBACiAjZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7CiAjZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCiAKKyNkZWZpbmUgRlRfTUlOKCBhLCBiICkgICggKGEpIDwgKGIpID8gKGEpIDogKGIpICkKICNkZWZpbmUgRlRfTUFYKCBhLCBiICkgICggKGEpID4gKGIpID8gKGEpIDogKGIpICkKICNkZWZpbmUgRlRfQUJTKCBhICkgICAgICggKGEpIDwgMCA/IC0oYSkgOiAoYSkgKQogCkBAIC0xMzUsOCArMTM2LDEwIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jZGVmaW5lIEZUX1VJTlRfTUFYICBVSU5UX01BWAotI2RlZmluZSBGVF9JTlRfTUFYICAgSU5UX01BWAorI2RlZmluZSBGVF9DSEFSX0JJVCAgIENIQVJfQklUCisjZGVmaW5lIEZUX1VJTlRfTUFYICAgVUlOVF9NQVgKKyNkZWZpbmUgRlRfSU5UX01BWCAgICBJTlRfTUFYCisjZGVmaW5lIEZUX1VMT05HX01BWCAgVUxPTkdfTUFYCiAKICNkZWZpbmUgZnRfbWVtc2V0ICAgbWVtc2V0CiAKQEAgLTI1NCw3ICsyNTcsNyBAQAogICAgICAgICAgfTsKIAogCi0jZWxzZSAvKiAhX1NUQU5EQUxPTkVfICovCisjZWxzZSAvKiAhU1RBTkRBTE9ORV8gKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI3Miw3ICsyNzUsNyBAQAogI2RlZmluZSBFcnJSYXN0ZXJfTWVtb3J5X092ZXJmbG93ICAgU21vb3RoX0Vycl9PdXRfT2ZfTWVtb3J5CiAKIAotI2VuZGlmIC8qICFfU1RBTkRBTE9ORV8gKi8KKyNlbmRpZiAvKiAhU1RBTkRBTE9ORV8gKi8KIAogCiAjaWZuZGVmIEZUX01FTV9TRVQKQEAgLTMwMCw3ICszMDMsNyBAQAogCiAjZWxzZSAvKiBGVF9TVEFUSUNfUkFTVEVSICovCiAKLSNkZWZpbmUgUkFTX0FSRyAgIC8qIGVtcHR5ICovCisjZGVmaW5lIFJBU19BUkcgICB2b2lkCiAjZGVmaW5lIFJBU19BUkdfICAvKiBlbXB0eSAqLwogI2RlZmluZSBSQVNfVkFSICAgLyogZW1wdHkgKi8KICNkZWZpbmUgUkFTX1ZBUl8gIC8qIGVtcHR5ICovCkBAIC0zMTYsMjAgKzMxOSwxOSBAQAogI3VuZGVmIFRSVU5DCiAjdW5kZWYgU0NBTEVECiAKLSNkZWZpbmUgT05FX1BJWEVMICAgICAgICggMUwgPDwgUElYRUxfQklUUyApCi0jZGVmaW5lIFBJWEVMX01BU0sgICAgICAoIC0xTCA8PCBQSVhFTF9CSVRTICkKKyNkZWZpbmUgT05FX1BJWEVMICAgICAgICggMSA8PCBQSVhFTF9CSVRTICkKICNkZWZpbmUgVFJVTkMoIHggKSAgICAgICggKFRDb29yZCkoICh4KSA+PiBQSVhFTF9CSVRTICkgKQotI2RlZmluZSBTVUJQSVhFTFMoIHggKSAgKCAoVFBvcykoeCkgPDwgUElYRUxfQklUUyApCisjZGVmaW5lIFNVQlBJWEVMUyggeCApICAoIChUUG9zKSh4KSAqIE9ORV9QSVhFTCApCiAjZGVmaW5lIEZMT09SKCB4ICkgICAgICAoICh4KSAmIC1PTkVfUElYRUwgKQogI2RlZmluZSBDRUlMSU5HKCB4ICkgICAgKCAoICh4KSArIE9ORV9QSVhFTCAtIDEgKSAmIC1PTkVfUElYRUwgKQogI2RlZmluZSBST1VORCggeCApICAgICAgKCAoICh4KSArIE9ORV9QSVhFTCAvIDIgKSAmIC1PTkVfUElYRUwgKQogCiAjaWYgUElYRUxfQklUUyA+PSA2Ci0jZGVmaW5lIFVQU0NBTEUoIHggKSAgICAoICh4KSA8PCAoIFBJWEVMX0JJVFMgLSA2ICkgKQorI2RlZmluZSBVUFNDQUxFKCB4ICkgICAgKCAoeCkgKiAoIE9ORV9QSVhFTCA+PiA2ICkgKQogI2RlZmluZSBET1dOU0NBTEUoIHggKSAgKCAoeCkgPj4gKCBQSVhFTF9CSVRTIC0gNiApICkKICNlbHNlCiAjZGVmaW5lIFVQU0NBTEUoIHggKSAgICAoICh4KSA+PiAoIDYgLSBQSVhFTF9CSVRTICkgKQotI2RlZmluZSBET1dOU0NBTEUoIHggKSAgKCAoeCkgPDwgKCA2IC0gUElYRUxfQklUUyApICkKKyNkZWZpbmUgRE9XTlNDQUxFKCB4ICkgICggKHgpICogKCA2NCA+PiBQSVhFTF9CSVRTICkgKQogI2VuZGlmCiAKIApAQCAtMzY3LDYgKzM2OSwxNSBAQAogI2VuZGlmIC8qIF9fYXJtX18gKi8KIAogCisgIC8qIFRoZXNlIG1hY3JvcyBzcGVlZCB1cCByZXBldGl0aXZlIGRpdmlzaW9ucyBieSByZXBsYWNpbmcgdGhlbSAqLworICAvKiB3aXRoIG11bHRpcGxpY2F0aW9ucyBhbmQgcmlnaHQgc2hpZnRzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfVURJVlBSRVAoIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbG9uZyAgYiAjIyBfciA9IChsb25nKSggRlRfVUxPTkdfTUFYID4+IFBJWEVMX0JJVFMgKSAvICggYiApCisjZGVmaW5lIEZUX1VESVYoIGEsIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICggKCAodW5zaWduZWQgbG9uZykoIGEgKSAqICh1bnNpZ25lZCBsb25nKSggYiAjIyBfciApICkgPj4gICBcCisgICAgKCBzaXplb2YoIGxvbmcgKSAqIEZUX0NIQVJfQklUIC0gUElYRUxfQklUUyApICkKKworCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBUWVBFIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNzYsNDQgKzM4NywzNiBAQAogICAvKiBuZWVkIHRvIGRlZmluZSB0aGVtIHRvICJmbG9hdCIgb3IgImRvdWJsZSIgd2hlbiBleHBlcmltZW50aW5nIHdpdGggICAqLwogICAvKiBuZXcgYWxnb3JpdGhtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHR5cGVkZWYgbG9uZyAgVENvb3JkOyAgIC8qIGludGVnZXIgc2NhbmxpbmUvcGl4ZWwgY29vcmRpbmF0ZSAqLwogICB0eXBlZGVmIGxvbmcgIFRQb3M7ICAgICAvKiBzdWItcGl4ZWwgY29vcmRpbmF0ZSAgICAgICAgICAgICAgKi8KLQotICAvKiBkZXRlcm1pbmUgdGhlIHR5cGUgdXNlZCB0byBzdG9yZSBjZWxsIGFyZWFzLiAgVGhpcyBub3JtYWxseSB0YWtlcyBhdCAqLwotICAvKiBsZWFzdCBQSVhFTF9CSVRTKjIgKyAxIGJpdHMuICBPbiAxNi1iaXQgc3lzdGVtcywgd2UgbmVlZCB0byB1c2UgICAgICAqLwotICAvKiBgbG9uZycgaW5zdGVhZCBvZiBgaW50Jywgb3RoZXJ3aXNlIGJhZCB0aGluZ3MgaGFwcGVuICAgICAgICAgICAgICAgICAqLwotCi0jaWYgUElYRUxfQklUUyA8PSA3Ci0KLSAgdHlwZWRlZiBpbnQgIFRBcmVhOwotCi0jZWxzZSAvKiBQSVhFTF9CSVRTID49IDggKi8KLQotICAvKiBhcHByb3hpbWF0ZWx5IGRldGVybWluZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyB1c2luZyBhbiBBTlNJLUMgaGVhZGVyICovCi0jaWYgRlRfVUlOVF9NQVggPT0gMHhGRkZGVQotICB0eXBlZGVmIGxvbmcgIFRBcmVhOwotI2Vsc2UKLSAgdHlwZWRlZiBpbnQgICBUQXJlYTsKLSNlbmRpZgotCi0jZW5kaWYgLyogUElYRUxfQklUUyA+PSA4ICovCi0KLQotICAvKiBtYXhpbXVtIG51bWJlciBvZiBncmF5IHNwYW5zIGluIGEgY2FsbCB0byB0aGUgc3BhbiBjYWxsYmFjayAqLwotI2RlZmluZSBGVF9NQVhfR1JBWV9TUEFOUyAgMzIKKyAgdHlwZWRlZiBpbnQgICBUQ29vcmQ7ICAgLyogaW50ZWdlciBzY2FubGluZS9waXhlbCBjb29yZGluYXRlICovCisgIHR5cGVkZWYgaW50ICAgVEFyZWE7ICAgIC8qIGNlbGwgYXJlYXMsIGNvb3JkaW5hdGUgcHJvZHVjdHMgICAqLwogCiAKICAgdHlwZWRlZiBzdHJ1Y3QgVENlbGxfKiAgUENlbGw7CiAKICAgdHlwZWRlZiBzdHJ1Y3QgIFRDZWxsXwogICB7Ci0gICAgVFBvcyAgICB4OyAgICAgLyogc2FtZSB3aXRoIGdyYXlfVFdvcmtlci5leCAgICAqLworICAgIFRDb29yZCAgeDsgICAgIC8qIHNhbWUgd2l0aCBncmF5X1RXb3JrZXIuZXggICAgKi8KICAgICBUQ29vcmQgIGNvdmVyOyAvKiBzYW1lIHdpdGggZ3JheV9UV29ya2VyLmNvdmVyICovCiAgICAgVEFyZWEgICBhcmVhOwogICAgIFBDZWxsICAgbmV4dDsKIAogICB9IFRDZWxsOwogCisgIHR5cGVkZWYgc3RydWN0IFRQaXhtYXBfCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyKiAgb3JpZ2luOyAgLyogcGl4bWFwIG9yaWdpbiBhdCB0aGUgYm90dG9tLWxlZnQgKi8KKyAgICBpbnQgICAgICAgICAgICAgcGl0Y2g7ICAgLyogcGl0Y2ggdG8gZ28gZG93biBvbmUgcm93ICovCisKKyAgfSBUUGl4bWFwOworCisgIC8qIG1heGltdW0gbnVtYmVyIG9mIGdyYXkgY2VsbHMgaW4gdGhlIGJ1ZmZlciAqLworI2lmIEZUX1JFTkRFUl9QT09MX1NJWkUgPiAyMDQ4CisjZGVmaW5lIEZUX01BWF9HUkFZX1BPT0wgICggRlRfUkVOREVSX1BPT0xfU0laRSAvIHNpemVvZiAoIFRDZWxsICkgKQorI2Vsc2UKKyNkZWZpbmUgRlRfTUFYX0dSQVlfUE9PTCAgKCAyMDQ4IC8gc2l6ZW9mICggVENlbGwgKSApCisjZW5kaWYKKwogCiAjaWYgZGVmaW5lZCggX01TQ19WRVIgKSAgICAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCiAgIC8qIFdlIGRpc2FibGUgdGhlIHdhcm5pbmcgYHN0cnVjdHVyZSB3YXMgcGFkZGVkIGR1ZSB0byAgICovCkBAIC00MjgsOSArNDMxLDggQEAKICAgICBmdF9qbXBfYnVmICBqdW1wX2J1ZmZlcjsKIAogICAgIFRDb29yZCAgZXgsIGV5OwotICAgIFRQb3MgICAgbWluX2V4LCBtYXhfZXg7Ci0gICAgVFBvcyAgICBtaW5fZXksIG1heF9leTsKLSAgICBUUG9zICAgIGNvdW50X2V4LCBjb3VudF9leTsKKyAgICBUQ29vcmQgIG1pbl9leCwgbWF4X2V4OworICAgIFRDb29yZCAgbWluX2V5LCBtYXhfZXk7CiAKICAgICBUQXJlYSAgIGFyZWE7CiAgICAgVENvb3JkICBjb3ZlcjsKQEAgLTQ0MCwzMyArNDQyLDE1IEBACiAgICAgRlRfUHRyRGlzdCAgbWF4X2NlbGxzOwogICAgIEZUX1B0ckRpc3QgIG51bV9jZWxsczsKIAotICAgIFRDb29yZCAgY3gsIGN5OwogICAgIFRQb3MgICAgeCwgIHk7CiAKLSAgICBUUG9zICAgIGxhc3RfZXk7Ci0KLSAgICBGVF9WZWN0b3IgICBiZXpfc3RhY2tbMzIgKiAzICsgMV07Ci0gICAgaW50ICAgICAgICAgbGV2X3N0YWNrWzMyXTsKLQogICAgIEZUX091dGxpbmUgIG91dGxpbmU7Ci0gICAgRlRfQml0bWFwICAgdGFyZ2V0OwotICAgIEZUX0JCb3ggICAgIGNsaXBfYm94OwotCi0gICAgRlRfU3BhbiAgICAgZ3JheV9zcGFuc1tGVF9NQVhfR1JBWV9TUEFOU107Ci0gICAgaW50ICAgICAgICAgbnVtX2dyYXlfc3BhbnM7CisgICAgVFBpeG1hcCAgICAgdGFyZ2V0OwogCiAgICAgRlRfUmFzdGVyX1NwYW5fRnVuYyAgcmVuZGVyX3NwYW47CiAgICAgdm9pZCogICAgICAgICAgICAgICAgcmVuZGVyX3NwYW5fZGF0YTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBzcGFuX3k7Ci0KLSAgICBpbnQgIGJhbmRfc2l6ZTsKLSAgICBpbnQgIGJhbmRfc2hvb3Q7Ci0KLSAgICB2b2lkKiAgICAgICBidWZmZXI7Ci0gICAgbG9uZyAgICAgICAgYnVmZmVyX3NpemU7CiAKICAgICBQQ2VsbCogICAgIHljZWxsczsKLSAgICBUUG9zICAgICAgIHljb3VudDsKIAogICB9IGdyYXlfVFdvcmtlciwgKmdyYXlfUFdvcmtlcjsKIApAQCAtNDg5LDcwICs0NzMsMzEgQEAKICAgfSBncmF5X1RSYXN0ZXIsICpncmF5X1BSYXN0ZXI7CiAKIAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJbml0aWFsaXplIHRoZSBjZWxscyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHRvIGJlIGNhbGxlZCB3aGlsZSBpbiB0aGUgZGVidWdnZXIgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgY29tcGlsZXIgd2FybmluZyBzaW5jZSBpdCBpcyB1bnVzZWQgb3RoZXJ3aXNlICovCiAgIHN0YXRpYyB2b2lkCi0gIGdyYXlfaW5pdF9jZWxscyggUkFTX0FSR18gdm9pZCogIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICAgYnl0ZV9zaXplICkKKyAgZ3JheV9kdW1wX2NlbGxzKCBSQVNfQVJHICkKICAgewotICAgIHJhcy5idWZmZXIgICAgICA9IGJ1ZmZlcjsKLSAgICByYXMuYnVmZmVyX3NpemUgPSBieXRlX3NpemU7CisgICAgaW50ICB5OwogCi0gICAgcmFzLnljZWxscyAgICAgID0gKFBDZWxsKikgYnVmZmVyOwotICAgIHJhcy5jZWxscyAgICAgICA9IE5VTEw7Ci0gICAgcmFzLm1heF9jZWxscyAgID0gMDsKLSAgICByYXMubnVtX2NlbGxzICAgPSAwOwotICAgIHJhcy5hcmVhICAgICAgICA9IDA7Ci0gICAgcmFzLmNvdmVyICAgICAgID0gMDsKLSAgICByYXMuaW52YWxpZCAgICAgPSAxOworCisgICAgZm9yICggeSA9IHJhcy5taW5fZXk7IHkgPCByYXMubWF4X2V5OyB5KysgKQorICAgIHsKKyAgICAgIFBDZWxsICBjZWxsID0gcmFzLnljZWxsc1t5IC0gcmFzLm1pbl9leV07CisKKworICAgICAgcHJpbnRmKCAiJTNkOiIsIHkgKTsKKworICAgICAgZm9yICggOyBjZWxsICE9IE5VTEw7IGNlbGwgPSBjZWxsLT5uZXh0ICkKKyAgICAgICAgcHJpbnRmKCAiICglM2QsIGM6JTRkLCBhOiU2ZCkiLAorICAgICAgICAgICAgICAgIGNlbGwtPngsIGNlbGwtPmNvdmVyLCBjZWxsLT5hcmVhICk7CisgICAgICBwcmludGYoICJcbiIgKTsKKyAgICB9CiAgIH0KIAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQ29tcHV0ZSB0aGUgb3V0bGluZSBib3VuZGluZyBib3guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBncmF5X2NvbXB1dGVfY2JveCggUkFTX0FSRyApCi0gIHsKLSAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9ICZyYXMub3V0bGluZTsKLSAgICBGVF9WZWN0b3IqICAgdmVjICAgICA9IG91dGxpbmUtPnBvaW50czsKLSAgICBGVF9WZWN0b3IqICAgbGltaXQgICA9IHZlYyArIG91dGxpbmUtPm5fcG9pbnRzOwotCi0KLSAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzIDw9IDAgKQotICAgIHsKLSAgICAgIHJhcy5taW5fZXggPSByYXMubWF4X2V4ID0gMDsKLSAgICAgIHJhcy5taW5fZXkgPSByYXMubWF4X2V5ID0gMDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByYXMubWluX2V4ID0gcmFzLm1heF9leCA9IHZlYy0+eDsKLSAgICByYXMubWluX2V5ID0gcmFzLm1heF9leSA9IHZlYy0+eTsKLQotICAgIHZlYysrOwotCi0gICAgZm9yICggOyB2ZWMgPCBsaW1pdDsgdmVjKysgKQotICAgIHsKLSAgICAgIFRQb3MgIHggPSB2ZWMtPng7Ci0gICAgICBUUG9zICB5ID0gdmVjLT55OwotCi0KLSAgICAgIGlmICggeCA8IHJhcy5taW5fZXggKSByYXMubWluX2V4ID0geDsKLSAgICAgIGlmICggeCA+IHJhcy5tYXhfZXggKSByYXMubWF4X2V4ID0geDsKLSAgICAgIGlmICggeSA8IHJhcy5taW5fZXkgKSByYXMubWluX2V5ID0geTsKLSAgICAgIGlmICggeSA+IHJhcy5tYXhfZXkgKSByYXMubWF4X2V5ID0geTsKLSAgICB9Ci0KLSAgICAvKiB0cnVuY2F0ZSB0aGUgYm91bmRpbmcgYm94IHRvIGludGVnZXIgcGl4ZWxzICovCi0gICAgcmFzLm1pbl9leCA9IHJhcy5taW5fZXggPj4gNjsKLSAgICByYXMubWluX2V5ID0gcmFzLm1pbl9leSA+PiA2OwotICAgIHJhcy5tYXhfZXggPSAoIHJhcy5tYXhfZXggKyA2MyApID4+IDY7Ci0gICAgcmFzLm1heF9leSA9ICggcmFzLm1heF9leSArIDYzICkgPj4gNjsKLSAgfQorI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU2MywxMyArNTA4LDEwIEBACiAgIGdyYXlfZmluZF9jZWxsKCBSQVNfQVJHICkKICAgewogICAgIFBDZWxsICAqcGNlbGwsIGNlbGw7Ci0gICAgVFBvcyAgICB4ID0gcmFzLmV4OworICAgIFRDb29yZCAgeCA9IHJhcy5leDsKIAogCi0gICAgaWYgKCB4ID4gcmFzLmNvdW50X2V4ICkKLSAgICAgIHggPSByYXMuY291bnRfZXg7Ci0KLSAgICBwY2VsbCA9ICZyYXMueWNlbGxzW3Jhcy5leV07CisgICAgcGNlbGwgPSAmcmFzLnljZWxsc1tyYXMuZXkgLSByYXMubWluX2V5XTsKICAgICBmb3IgKDs7KQogICAgIHsKICAgICAgIGNlbGwgPSAqcGNlbGw7CkBAIC02MzIsNTggKzU3NCwyNiBAQAogCiAgICAgLyogQWxsIGNlbGxzIHRoYXQgYXJlIG9uIHRoZSBsZWZ0IG9mIHRoZSBjbGlwcGluZyByZWdpb24gZ28gdG8gdGhlICovCiAgICAgLyogbWluX2V4IC0gMSBob3Jpem9udGFsIHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgZXkgLT0gcmFzLm1pbl9leTsKLQotICAgIGlmICggZXggPiByYXMubWF4X2V4ICkKLSAgICAgIGV4ID0gcmFzLm1heF9leDsKLQotICAgIGV4IC09IHJhcy5taW5fZXg7Ci0gICAgaWYgKCBleCA8IDAgKQotICAgICAgZXggPSAtMTsKLQotICAgIC8qIGFyZSB3ZSBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQgY2VsbCA/ICovCi0gICAgaWYgKCBleCAhPSByYXMuZXggfHwgZXkgIT0gcmFzLmV5ICkKLSAgICB7Ci0gICAgICAvKiByZWNvcmQgdGhlIGN1cnJlbnQgb25lIGlmIGl0IGlzIHZhbGlkICovCi0gICAgICBpZiAoICFyYXMuaW52YWxpZCApCi0gICAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKLQotICAgICAgcmFzLmFyZWEgID0gMDsKLSAgICAgIHJhcy5jb3ZlciA9IDA7Ci0gICAgICByYXMuZXggICAgPSBleDsKLSAgICAgIHJhcy5leSAgICA9IGV5OwotICAgIH0KLQotICAgIHJhcy5pbnZhbGlkID0gKCAodW5zaWduZWQgaW50KWV5ID49ICh1bnNpZ25lZCBpbnQpcmFzLmNvdW50X2V5IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXggPj0gcmFzLmNvdW50X2V4ICAgICAgICAgICAgICAgKTsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFydCBhIG5ldyBjb250b3VyIGF0IGEgZ2l2ZW4gY2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIGdyYXlfc3RhcnRfY2VsbCggUkFTX0FSR18gVENvb3JkICBleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ29vcmQgIGV5ICkKLSAgewotICAgIGlmICggZXggPiByYXMubWF4X2V4ICkKLSAgICAgIGV4ID0gKFRDb29yZCkoIHJhcy5tYXhfZXggKTsKIAogICAgIGlmICggZXggPCByYXMubWluX2V4ICkKLSAgICAgIGV4ID0gKFRDb29yZCkoIHJhcy5taW5fZXggLSAxICk7CisgICAgICBleCA9IHJhcy5taW5fZXggLSAxOwogCi0gICAgcmFzLmFyZWEgICAgPSAwOwotICAgIHJhcy5jb3ZlciAgID0gMDsKLSAgICByYXMuZXggICAgICA9IGV4IC0gcmFzLm1pbl9leDsKLSAgICByYXMuZXkgICAgICA9IGV5IC0gcmFzLm1pbl9leTsKLSAgICByYXMubGFzdF9leSA9IFNVQlBJWEVMUyggZXkgKTsKLSAgICByYXMuaW52YWxpZCA9IDA7CisgICAgLyogcmVjb3JkIHRoZSBjdXJyZW50IG9uZSBpZiBpdCBpcyB2YWxpZCAqLworICAgIGlmICggIXJhcy5pbnZhbGlkICkKKyAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKIAotICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4LCBleSApOworICAgIHJhcy5hcmVhICA9IDA7CisgICAgcmFzLmNvdmVyID0gMDsKKyAgICByYXMuZXggICAgPSBleDsKKyAgICByYXMuZXkgICAgPSBleTsKKworICAgIHJhcy5pbnZhbGlkID0gKCBleSA+PSByYXMubWF4X2V5IHx8IGV5IDwgcmFzLm1pbl9leSB8fAorICAgICAgICAgICAgICAgICAgICBleCA+PSByYXMubWF4X2V4ICk7CiAgIH0KIAogCisjaWZuZGVmIEZUX0xPTkc2NAorCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogUmVuZGVyIGEgc2NhbmxpbmUgYXMgb25lIG9yIG1vcmUgY2VsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02OTUsMTcgKzYwNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgICB4MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDb29yZCAgeTIgKQogICB7Ci0gICAgVENvb3JkICBleDEsIGV4MiwgZngxLCBmeDIsIGRlbHRhLCBtb2Q7Ci0gICAgbG9uZyAgICBwLCBmaXJzdCwgZHg7CisgICAgVENvb3JkICBleDEsIGV4MiwgZngxLCBmeDIsIGZpcnN0LCBkZWx0YSwgbW9kOworICAgIFRQb3MgICAgcCwgZHg7CiAgICAgaW50ICAgICBpbmNyOwogCiAKLSAgICBkeCA9IHgyIC0geDE7Ci0KICAgICBleDEgPSBUUlVOQyggeDEgKTsKICAgICBleDIgPSBUUlVOQyggeDIgKTsKLSAgICBmeDEgPSAoVENvb3JkKSggeDEgLSBTVUJQSVhFTFMoIGV4MSApICk7Ci0gICAgZngyID0gKFRDb29yZCkoIHgyIC0gU1VCUElYRUxTKCBleDIgKSApOwogCiAgICAgLyogdHJpdmlhbCBjYXNlLiAgSGFwcGVucyBvZnRlbiAqLwogICAgIGlmICggeTEgPT0geTIgKQpAQCAtNzE0LDExICs2MjAsMTQgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBmeDEgICA9IChUQ29vcmQpKCB4MSAtIFNVQlBJWEVMUyggZXgxICkgKTsKKyAgICBmeDIgICA9IChUQ29vcmQpKCB4MiAtIFNVQlBJWEVMUyggZXgyICkgKTsKKyAgICBkZWx0YSA9IHkyIC0geTE7CisKICAgICAvKiBldmVyeXRoaW5nIGlzIGxvY2F0ZWQgaW4gYSBzaW5nbGUgY2VsbC4gIFRoYXQgaXMgZWFzeSEgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoIGV4MSA9PSBleDIgKQogICAgIHsKLSAgICAgIGRlbHRhICAgICAgPSB5MiAtIHkxOwogICAgICAgcmFzLmFyZWEgICs9IChUQXJlYSkoKCBmeDEgKyBmeDIgKSAqIGRlbHRhKTsKICAgICAgIHJhcy5jb3ZlciArPSBkZWx0YTsKICAgICAgIHJldHVybjsKQEAgLTcyNywxMyArNjM2LDE3IEBACiAgICAgLyogb2ssIHdlJ2xsIGhhdmUgdG8gcmVuZGVyIGEgcnVuIG9mIGFkamFjZW50IGNlbGxzIG9uIHRoZSBzYW1lICovCiAgICAgLyogc2NhbmxpbmUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgcCAgICAgPSAoIE9ORV9QSVhFTCAtIGZ4MSApICogKCB5MiAtIHkxICk7Ci0gICAgZmlyc3QgPSBPTkVfUElYRUw7Ci0gICAgaW5jciAgPSAxOworICAgIGR4ID0geDIgLSB4MTsKIAotICAgIGlmICggZHggPCAwICkKKyAgICBpZiAoIGR4ID4gMCApCiAgICAgewotICAgICAgcCAgICAgPSBmeDEgKiAoIHkyIC0geTEgKTsKKyAgICAgIHAgICAgID0gKCBPTkVfUElYRUwgLSBmeDEgKSAqIGRlbHRhOworICAgICAgZmlyc3QgPSBPTkVfUElYRUw7CisgICAgICBpbmNyICA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwICAgICA9IGZ4MSAqIGRlbHRhOwogICAgICAgZmlyc3QgPSAwOwogICAgICAgaW5jciAgPSAtMTsKICAgICAgIGR4ICAgID0gLWR4OwpAQCAtNzU4LDcgKzY3MSw3IEBACiAKICAgICAgIG1vZCAtPSAoaW50KWR4OwogCi0gICAgICB3aGlsZSAoIGV4MSAhPSBleDIgKQorICAgICAgZG8KICAgICAgIHsKICAgICAgICAgZGVsdGEgPSBsaWZ0OwogICAgICAgICBtb2QgICs9IHJlbTsKQEAgLTc3Myw3ICs2ODYsNyBAQAogICAgICAgICB5MSAgICAgICAgKz0gZGVsdGE7CiAgICAgICAgIGV4MSAgICAgICArPSBpbmNyOwogICAgICAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleDEsIGV5ICk7Ci0gICAgICB9CisgICAgICB9IHdoaWxlICggZXgxICE9IGV4MiApOwogICAgIH0KIAogICAgIGRlbHRhICAgICAgPSB5MiAtIHkxOwpAQCAtNzkwLDM1ICs3MDMsMjEgQEAKICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX0FSR18gVFBvcyAgdG9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgdG9feSApCiAgIHsKLSAgICBUQ29vcmQgIGV5MSwgZXkyLCBmeTEsIGZ5MiwgbW9kOwotICAgIFRQb3MgICAgZHgsIGR5LCB4LCB4MjsKLSAgICBsb25nICAgIHAsIGZpcnN0OwotICAgIGludCAgICAgZGVsdGEsIHJlbSwgbGlmdCwgaW5jcjsKKyAgICBUQ29vcmQgIGV5MSwgZXkyLCBmeTEsIGZ5MiwgZmlyc3QsIGRlbHRhLCBtb2Q7CisgICAgVFBvcyAgICBwLCBkeCwgZHksIHgsIHgyOworICAgIGludCAgICAgaW5jcjsKIAogCi0gICAgZXkxID0gVFJVTkMoIHJhcy5sYXN0X2V5ICk7CisgICAgZXkxID0gVFJVTkMoIHJhcy55ICk7CiAgICAgZXkyID0gVFJVTkMoIHRvX3kgKTsgICAgIC8qIGlmIChleTIgPj0gcmFzLm1heF9leSkgZXkyID0gcmFzLm1heF9leS0xOyAqLwotICAgIGZ5MSA9IChUQ29vcmQpKCByYXMueSAtIHJhcy5sYXN0X2V5ICk7Ci0gICAgZnkyID0gKFRDb29yZCkoIHRvX3kgLSBTVUJQSVhFTFMoIGV5MiApICk7Ci0KLSAgICBkeCA9IHRvX3ggLSByYXMueDsKLSAgICBkeSA9IHRvX3kgLSByYXMueTsKIAogICAgIC8qIHBlcmZvcm0gdmVydGljYWwgY2xpcHBpbmcgKi8KLSAgICB7Ci0gICAgICBUQ29vcmQgIG1pbiwgbWF4OworICAgIGlmICggKCBleTEgPj0gcmFzLm1heF9leSAmJiBleTIgPj0gcmFzLm1heF9leSApIHx8CisgICAgICAgICAoIGV5MSA8ICByYXMubWluX2V5ICYmIGV5MiA8ICByYXMubWluX2V5ICkgKQorICAgICAgZ290byBFbmQ7CiAKLQotICAgICAgbWluID0gZXkxOwotICAgICAgbWF4ID0gZXkyOwotICAgICAgaWYgKCBleTEgPiBleTIgKQotICAgICAgewotICAgICAgICBtaW4gPSBleTI7Ci0gICAgICAgIG1heCA9IGV5MTsKLSAgICAgIH0KLSAgICAgIGlmICggbWluID49IHJhcy5tYXhfZXkgfHwgbWF4IDwgcmFzLm1pbl9leSApCi0gICAgICAgIGdvdG8gRW5kOwotICAgIH0KKyAgICBmeTEgPSAoVENvb3JkKSggcmFzLnkgLSBTVUJQSVhFTFMoIGV5MSApICk7CisgICAgZnkyID0gKFRDb29yZCkoIHRvX3kgLSBTVUJQSVhFTFMoIGV5MiApICk7CiAKICAgICAvKiBldmVyeXRoaW5nIGlzIG9uIGEgc2luZ2xlIHNjYW5saW5lICovCiAgICAgaWYgKCBleTEgPT0gZXkyICkKQEAgLTgyNyw5ICs3MjYsMTAgQEAKICAgICAgIGdvdG8gRW5kOwogICAgIH0KIAotICAgIC8qIHZlcnRpY2FsIGxpbmUgLSBhdm9pZCBjYWxsaW5nIGdyYXlfcmVuZGVyX3NjYW5saW5lICovCi0gICAgaW5jciA9IDE7CisgICAgZHggPSB0b194IC0gcmFzLng7CisgICAgZHkgPSB0b195IC0gcmFzLnk7CiAKKyAgICAvKiB2ZXJ0aWNhbCBsaW5lIC0gYXZvaWQgY2FsbGluZyBncmF5X3JlbmRlcl9zY2FubGluZSAqLwogICAgIGlmICggZHggPT0gMCApCiAgICAgewogICAgICAgVENvb3JkICBleCAgICAgPSBUUlVOQyggcmFzLnggKTsKQEAgLTgzNywyMSArNzM3LDI1IEBACiAgICAgICBUQXJlYSAgIGFyZWE7CiAKIAotICAgICAgZmlyc3QgPSBPTkVfUElYRUw7Ci0gICAgICBpZiAoIGR5IDwgMCApCisgICAgICBpZiAoIGR5ID4gMCkKKyAgICAgIHsKKyAgICAgICAgZmlyc3QgPSBPTkVfUElYRUw7CisgICAgICAgIGluY3IgID0gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgZmlyc3QgPSAwOwogICAgICAgICBpbmNyICA9IC0xOwogICAgICAgfQogCi0gICAgICBkZWx0YSAgICAgID0gKGludCkoIGZpcnN0IC0gZnkxICk7CisgICAgICBkZWx0YSAgICAgID0gZmlyc3QgLSBmeTE7CiAgICAgICByYXMuYXJlYSAgKz0gKFRBcmVhKXR3b19meCAqIGRlbHRhOwogICAgICAgcmFzLmNvdmVyICs9IGRlbHRhOwogICAgICAgZXkxICAgICAgICs9IGluY3I7CiAKICAgICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4LCBleTEgKTsKIAotICAgICAgZGVsdGEgPSAoaW50KSggZmlyc3QgKyBmaXJzdCAtIE9ORV9QSVhFTCApOworICAgICAgZGVsdGEgPSBmaXJzdCArIGZpcnN0IC0gT05FX1BJWEVMOwogICAgICAgYXJlYSAgPSAoVEFyZWEpdHdvX2Z4ICogZGVsdGE7CiAgICAgICB3aGlsZSAoIGV5MSAhPSBleTIgKQogICAgICAgewpAQCAtODYyLDcgKzc2Niw3IEBACiAgICAgICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4LCBleTEgKTsKICAgICAgIH0KIAotICAgICAgZGVsdGEgICAgICA9IChpbnQpKCBmeTIgLSBPTkVfUElYRUwgKyBmaXJzdCApOworICAgICAgZGVsdGEgICAgICA9IGZ5MiAtIE9ORV9QSVhFTCArIGZpcnN0OwogICAgICAgcmFzLmFyZWEgICs9IChUQXJlYSl0d29fZnggKiBkZWx0YTsKICAgICAgIHJhcy5jb3ZlciArPSBkZWx0YTsKIApAQCAtODcwLDExICs3NzQsMTMgQEAKICAgICB9CiAKICAgICAvKiBvaywgd2UgaGF2ZSB0byByZW5kZXIgc2V2ZXJhbCBzY2FubGluZXMgKi8KLSAgICBwICAgICA9ICggT05FX1BJWEVMIC0gZnkxICkgKiBkeDsKLSAgICBmaXJzdCA9IE9ORV9QSVhFTDsKLSAgICBpbmNyICA9IDE7Ci0KLSAgICBpZiAoIGR5IDwgMCApCisgICAgaWYgKCBkeSA+IDApCisgICAgeworICAgICAgcCAgICAgPSAoIE9ORV9QSVhFTCAtIGZ5MSApICogZHg7CisgICAgICBmaXJzdCA9IE9ORV9QSVhFTDsKKyAgICAgIGluY3IgID0gMTsKKyAgICB9CisgICAgZWxzZQogICAgIHsKICAgICAgIHAgICAgID0gZnkxICogZHg7CiAgICAgICBmaXJzdCA9IDA7CkBAIC04ODIsNTEgKzc4OCwxOTEgQEAKICAgICAgIGR5ICAgID0gLWR5OwogICAgIH0KIAotICAgIEZUX0RJVl9NT0QoIGludCwgcCwgZHksIGRlbHRhLCBtb2QgKTsKKyAgICBGVF9ESVZfTU9EKCBUQ29vcmQsIHAsIGR5LCBkZWx0YSwgbW9kICk7CiAKICAgICB4ID0gcmFzLnggKyBkZWx0YTsKLSAgICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX1ZBUl8gZXkxLCByYXMueCwgZnkxLCB4LCAoVENvb3JkKWZpcnN0ICk7CisgICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwgcmFzLngsIGZ5MSwgeCwgZmlyc3QgKTsKIAogICAgIGV5MSArPSBpbmNyOwogICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIFRSVU5DKCB4ICksIGV5MSApOwogCiAgICAgaWYgKCBleTEgIT0gZXkyICkKICAgICB7Ci0gICAgICBwICAgICA9IE9ORV9QSVhFTCAqIGR4OwotICAgICAgRlRfRElWX01PRCggaW50LCBwLCBkeSwgbGlmdCwgcmVtICk7Ci0gICAgICBtb2QgLT0gKGludClkeTsKKyAgICAgIFRDb29yZCAgbGlmdCwgcmVtOwogCi0gICAgICB3aGlsZSAoIGV5MSAhPSBleTIgKQorCisgICAgICBwICAgID0gT05FX1BJWEVMICogZHg7CisgICAgICBGVF9ESVZfTU9EKCBUQ29vcmQsIHAsIGR5LCBsaWZ0LCByZW0gKTsKKyAgICAgIG1vZCAtPSAoVENvb3JkKWR5OworCisgICAgICBkbwogICAgICAgewogICAgICAgICBkZWx0YSA9IGxpZnQ7CiAgICAgICAgIG1vZCAgKz0gcmVtOwogICAgICAgICBpZiAoIG1vZCA+PSAwICkKICAgICAgICAgewotICAgICAgICAgIG1vZCAtPSAoaW50KWR5OworICAgICAgICAgIG1vZCAtPSAoVENvb3JkKWR5OwogICAgICAgICAgIGRlbHRhKys7CiAgICAgICAgIH0KIAogICAgICAgICB4MiA9IHggKyBkZWx0YTsKLSAgICAgICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUQ29vcmQpKCBPTkVfUElYRUwgLSBmaXJzdCApLCB4MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUQ29vcmQpZmlyc3QgKTsKKyAgICAgICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE9ORV9QSVhFTCAtIGZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsIGZpcnN0ICk7CiAgICAgICAgIHggPSB4MjsKIAogICAgICAgICBleTEgKz0gaW5jcjsKICAgICAgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gVFJVTkMoIHggKSwgZXkxICk7Ci0gICAgICB9CisgICAgICB9IHdoaWxlICggZXkxICE9IGV5MiApOwogICAgIH0KIAotICAgIGdyYXlfcmVuZGVyX3NjYW5saW5lKCBSQVNfVkFSXyBleTEsIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUQ29vcmQpKCBPTkVfUElYRUwgLSBmaXJzdCApLCB0b194LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeTIgKTsKKyAgICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX1ZBUl8gZXkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBPTkVfUElYRUwgLSBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9feCwgZnkyICk7CiAKICAgRW5kOgogICAgIHJhcy54ICAgICAgID0gdG9feDsKICAgICByYXMueSAgICAgICA9IHRvX3k7Ci0gICAgcmFzLmxhc3RfZXkgPSBTVUJQSVhFTFMoIGV5MiApOwogICB9CiAKKyNlbHNlCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBSZW5kZXIgYSBzdHJhaWdodCBsaW5lIGFjcm9zcyBtdWx0aXBsZSBjZWxscyBpbiBhbnkgZGlyZWN0aW9uLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIGdyYXlfcmVuZGVyX2xpbmUoIFJBU19BUkdfIFRQb3MgIHRvX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQb3MgIHRvX3kgKQorICB7CisgICAgVFBvcyAgICBkeCwgZHksIGZ4MSwgZnkxLCBmeDIsIGZ5MjsKKyAgICBUQ29vcmQgIGV4MSwgZXgyLCBleTEsIGV5MjsKKworCisgICAgZXkxID0gVFJVTkMoIHJhcy55ICk7CisgICAgZXkyID0gVFJVTkMoIHRvX3kgKTsKKworICAgIC8qIHBlcmZvcm0gdmVydGljYWwgY2xpcHBpbmcgKi8KKyAgICBpZiAoICggZXkxID49IHJhcy5tYXhfZXkgJiYgZXkyID49IHJhcy5tYXhfZXkgKSB8fAorICAgICAgICAgKCBleTEgPCAgcmFzLm1pbl9leSAmJiBleTIgPCAgcmFzLm1pbl9leSApICkKKyAgICAgIGdvdG8gRW5kOworCisgICAgZXgxID0gVFJVTkMoIHJhcy54ICk7CisgICAgZXgyID0gVFJVTkMoIHRvX3ggKTsKKworICAgIGZ4MSA9IHJhcy54IC0gU1VCUElYRUxTKCBleDEgKTsKKyAgICBmeTEgPSByYXMueSAtIFNVQlBJWEVMUyggZXkxICk7CisKKyAgICBkeCA9IHRvX3ggLSByYXMueDsKKyAgICBkeSA9IHRvX3kgLSByYXMueTsKKworICAgIGlmICggZXgxID09IGV4MiAmJiBleTEgPT0gZXkyICkgICAgICAgLyogaW5zaWRlIG9uZSBjZWxsICovCisgICAgICA7CisgICAgZWxzZSBpZiAoIGR5ID09IDAgKSAvKiBleDEgIT0gZXgyICovICAvKiBhbnkgaG9yaXpvbnRhbCBsaW5lICovCisgICAgeworICAgICAgZXgxID0gZXgyOworICAgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gZXgxLCBleTEgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIGR4ID09IDAgKQorICAgIHsKKyAgICAgIGlmICggZHkgPiAwICkgICAgICAgICAgICAgICAgICAgICAgIC8qIHZlcnRpY2FsIGxpbmUgdXAgKi8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGZ5MiA9IE9ORV9QSVhFTDsKKyAgICAgICAgICByYXMuY292ZXIgKz0gKCBmeTIgLSBmeTEgKTsKKyAgICAgICAgICByYXMuYXJlYSAgKz0gKCBmeTIgLSBmeTEgKSAqIGZ4MSAqIDI7CisgICAgICAgICAgZnkxID0gMDsKKyAgICAgICAgICBleTErKzsKKyAgICAgICAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleDEsIGV5MSApOworICAgICAgICB9IHdoaWxlICggZXkxICE9IGV5MiApOworICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVydGljYWwgbGluZSBkb3duICovCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBmeTIgPSAwOworICAgICAgICAgIHJhcy5jb3ZlciArPSAoIGZ5MiAtIGZ5MSApOworICAgICAgICAgIHJhcy5hcmVhICArPSAoIGZ5MiAtIGZ5MSApICogZngxICogMjsKKyAgICAgICAgICBmeTEgPSBPTkVfUElYRUw7CisgICAgICAgICAgZXkxLS07CisgICAgICAgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gZXgxLCBleTEgKTsKKyAgICAgICAgfSB3aGlsZSAoIGV5MSAhPSBleTIgKTsKKyAgICB9CisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbnkgb3RoZXIgbGluZSAqLworICAgIHsKKyAgICAgIFRQb3MgIHByb2QgPSBkeCAqIGZ5MSAtIGR5ICogZngxOworICAgICAgRlRfVURJVlBSRVAoIGR4ICk7CisgICAgICBGVF9VRElWUFJFUCggZHkgKTsKKworCisgICAgICAvKiBUaGUgZnVuZGFtZW50YWwgdmFsdWUgYHByb2QnIGRldGVybWluZXMgd2hpY2ggc2lkZSBhbmQgdGhlICAqLworICAgICAgLyogZXhhY3QgY29vcmRpbmF0ZSB3aGVyZSB0aGUgbGluZSBleGl0cyBjdXJyZW50IGNlbGwuICBJdCBpcyAgKi8KKyAgICAgIC8qIGFsc28gZWFzaWx5IHVwZGF0ZWQgd2hlbiBtb3ZpbmcgZnJvbSBvbmUgY2VsbCB0byB0aGUgbmV4dC4gICovCisgICAgICBkbworICAgICAgeworICAgICAgICBpZiAgICAgICggcHJvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gMCAmJgorICAgICAgICAgICAgICAgICAgcHJvZCAtIGR4ICogT05FX1BJWEVMICAgICAgICAgICAgICAgICAgPiAgMCApIC8qIGxlZnQgKi8KKyAgICAgICAgeworICAgICAgICAgIGZ4MiA9IDA7CisgICAgICAgICAgZnkyID0gKFRQb3MpRlRfVURJViggLXByb2QsIC1keCApOworICAgICAgICAgIHByb2QgLT0gZHkgKiBPTkVfUElYRUw7CisgICAgICAgICAgcmFzLmNvdmVyICs9ICggZnkyIC0gZnkxICk7CisgICAgICAgICAgcmFzLmFyZWEgICs9ICggZnkyIC0gZnkxICkgKiAoIGZ4MSArIGZ4MiApOworICAgICAgICAgIGZ4MSA9IE9ORV9QSVhFTDsKKyAgICAgICAgICBmeTEgPSBmeTI7CisgICAgICAgICAgZXgxLS07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHByb2QgLSBkeCAqIE9ORV9QSVhFTCAgICAgICAgICAgICAgICAgIDw9IDAgJiYKKyAgICAgICAgICAgICAgICAgIHByb2QgLSBkeCAqIE9ORV9QSVhFTCArIGR5ICogT05FX1BJWEVMID4gIDAgKSAvKiB1cCAqLworICAgICAgICB7CisgICAgICAgICAgcHJvZCAtPSBkeCAqIE9ORV9QSVhFTDsKKyAgICAgICAgICBmeDIgPSAoVFBvcylGVF9VRElWKCAtcHJvZCwgZHkgKTsKKyAgICAgICAgICBmeTIgPSBPTkVfUElYRUw7CisgICAgICAgICAgcmFzLmNvdmVyICs9ICggZnkyIC0gZnkxICk7CisgICAgICAgICAgcmFzLmFyZWEgICs9ICggZnkyIC0gZnkxICkgKiAoIGZ4MSArIGZ4MiApOworICAgICAgICAgIGZ4MSA9IGZ4MjsKKyAgICAgICAgICBmeTEgPSAwOworICAgICAgICAgIGV5MSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBwcm9kIC0gZHggKiBPTkVfUElYRUwgKyBkeSAqIE9ORV9QSVhFTCA8PSAwICYmCisgICAgICAgICAgICAgICAgICBwcm9kICAgICAgICAgICAgICAgICAgKyBkeSAqIE9ORV9QSVhFTCA+PSAwICkgLyogcmlnaHQgKi8KKyAgICAgICAgeworICAgICAgICAgIHByb2QgKz0gZHkgKiBPTkVfUElYRUw7CisgICAgICAgICAgZngyID0gT05FX1BJWEVMOworICAgICAgICAgIGZ5MiA9IChUUG9zKUZUX1VESVYoIHByb2QsIGR4ICk7CisgICAgICAgICAgcmFzLmNvdmVyICs9ICggZnkyIC0gZnkxICk7CisgICAgICAgICAgcmFzLmFyZWEgICs9ICggZnkyIC0gZnkxICkgKiAoIGZ4MSArIGZ4MiApOworICAgICAgICAgIGZ4MSA9IDA7CisgICAgICAgICAgZnkxID0gZnkyOworICAgICAgICAgIGV4MSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogKCBwcm9kICAgICAgICAgICAgICAgICAgKyBkeSAqIE9ORV9QSVhFTCA8ICAwICYmCisgICAgICAgICAgICAgICAgICBwcm9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICAwICkgICAgZG93biAqLworICAgICAgICB7CisgICAgICAgICAgZngyID0gKFRQb3MpRlRfVURJViggcHJvZCwgLWR5ICk7CisgICAgICAgICAgZnkyID0gMDsKKyAgICAgICAgICBwcm9kICs9IGR4ICogT05FX1BJWEVMOworICAgICAgICAgIHJhcy5jb3ZlciArPSAoIGZ5MiAtIGZ5MSApOworICAgICAgICAgIHJhcy5hcmVhICArPSAoIGZ5MiAtIGZ5MSApICogKCBmeDEgKyBmeDIgKTsKKyAgICAgICAgICBmeDEgPSBmeDI7CisgICAgICAgICAgZnkxID0gT05FX1BJWEVMOworICAgICAgICAgIGV5MS0tOworICAgICAgICB9CisKKyAgICAgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gZXgxLCBleTEgKTsKKyAgICAgIH0gd2hpbGUgKCBleDEgIT0gZXgyIHx8IGV5MSAhPSBleTIgKTsKKyAgICB9CisKKyAgICBmeDIgPSB0b194IC0gU1VCUElYRUxTKCBleDIgKTsKKyAgICBmeTIgPSB0b195IC0gU1VCUElYRUxTKCBleTIgKTsKKworICAgIHJhcy5jb3ZlciArPSAoIGZ5MiAtIGZ5MSApOworICAgIHJhcy5hcmVhICArPSAoIGZ5MiAtIGZ5MSApICogKCBmeDEgKyBmeDIgKTsKKworICBFbmQ6CisgICAgcmFzLnggICAgICAgPSB0b194OworICAgIHJhcy55ICAgICAgID0gdG9feTsKKyAgfQorCisjZW5kaWYKIAogICBzdGF0aWMgdm9pZAogICBncmF5X3NwbGl0X2NvbmljKCBGVF9WZWN0b3IqICBiYXNlICkKQEAgLTk1Miw3MyArOTk4LDY0IEBACiAgIGdyYXlfcmVuZGVyX2NvbmljKCBSQVNfQVJHXyBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgdG8gKQogICB7CisgICAgRlRfVmVjdG9yICAgYmV6X3N0YWNrWzE2ICogMiArIDFdOyAgLyogZW5vdWdoIHRvIGFjY29tbW9kYXRlIGJpc2VjdGlvbnMgKi8KKyAgICBGVF9WZWN0b3IqICBhcmMgPSBiZXpfc3RhY2s7CiAgICAgVFBvcyAgICAgICAgZHgsIGR5OwotICAgIFRQb3MgICAgICAgIG1pbiwgbWF4LCB5OwotICAgIGludCAgICAgICAgIHRvcCwgbGV2ZWw7Ci0gICAgaW50KiAgICAgICAgbGV2ZWxzOwotICAgIEZUX1ZlY3RvciogIGFyYzsKKyAgICBpbnQgICAgICAgICBkcmF3LCBzcGxpdDsKIAogCi0gICAgbGV2ZWxzID0gcmFzLmxldl9zdGFjazsKLQotICAgIGFyYyAgICAgID0gcmFzLmJlel9zdGFjazsKICAgICBhcmNbMF0ueCA9IFVQU0NBTEUoIHRvLT54ICk7CiAgICAgYXJjWzBdLnkgPSBVUFNDQUxFKCB0by0+eSApOwogICAgIGFyY1sxXS54ID0gVVBTQ0FMRSggY29udHJvbC0+eCApOwogICAgIGFyY1sxXS55ID0gVVBTQ0FMRSggY29udHJvbC0+eSApOwogICAgIGFyY1syXS54ID0gcmFzLng7CiAgICAgYXJjWzJdLnkgPSByYXMueTsKLSAgICB0b3AgICAgICA9IDA7CisKKyAgICAvKiBzaG9ydC1jdXQgdGhlIGFyYyB0aGF0IGNyb3NzZXMgdGhlIGN1cnJlbnQgYmFuZCAqLworICAgIGlmICggKCBUUlVOQyggYXJjWzBdLnkgKSA+PSByYXMubWF4X2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbMV0ueSApID49IHJhcy5tYXhfZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1syXS55ICkgPj0gcmFzLm1heF9leSApIHx8CisgICAgICAgICAoIFRSVU5DKCBhcmNbMF0ueSApIDwgIHJhcy5taW5fZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1sxXS55ICkgPCAgcmFzLm1pbl9leSAmJgorICAgICAgICAgICBUUlVOQyggYXJjWzJdLnkgKSA8ICByYXMubWluX2V5ICkgKQorICAgIHsKKyAgICAgIHJhcy54ID0gYXJjWzBdLng7CisgICAgICByYXMueSA9IGFyY1swXS55OworICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGR4ID0gRlRfQUJTKCBhcmNbMl0ueCArIGFyY1swXS54IC0gMiAqIGFyY1sxXS54ICk7CiAgICAgZHkgPSBGVF9BQlMoIGFyY1syXS55ICsgYXJjWzBdLnkgLSAyICogYXJjWzFdLnkgKTsKICAgICBpZiAoIGR4IDwgZHkgKQogICAgICAgZHggPSBkeTsKIAotICAgIGlmICggZHggPCBPTkVfUElYRUwgLyA0ICkKLSAgICAgIGdvdG8gRHJhdzsKKyAgICAvKiBXZSBjYW4gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbmVjZXNzYXJ5IGJpc2VjdGlvbnMgYmVjYXVzZSAgKi8KKyAgICAvKiBlYWNoIGJpc2VjdGlvbiBwcmVkaWN0YWJseSByZWR1Y2VzIGRldmlhdGlvbiBleGFjdGx5IDQtZm9sZC4gKi8KKyAgICAvKiBFdmVuIDMyLWJpdCBkZXZpYXRpb24gd291bGQgdmFuaXNoIGFmdGVyIDE2IGJpc2VjdGlvbnMuICAgICAgKi8KKyAgICBkcmF3ID0gMTsKKyAgICB3aGlsZSAoIGR4ID4gT05FX1BJWEVMIC8gNCApCisgICAgeworICAgICAgZHggICA+Pj0gMjsKKyAgICAgIGRyYXcgPDw9IDE7CisgICAgfQogCi0gICAgLyogc2hvcnQtY3V0IHRoZSBhcmMgdGhhdCBjcm9zc2VzIHRoZSBjdXJyZW50IGJhbmQgKi8KLSAgICBtaW4gPSBtYXggPSBhcmNbMF0ueTsKLQotICAgIHkgPSBhcmNbMV0ueTsKLSAgICBpZiAoIHkgPCBtaW4gKSBtaW4gPSB5OwotICAgIGlmICggeSA+IG1heCApIG1heCA9IHk7Ci0KLSAgICB5ID0gYXJjWzJdLnk7Ci0gICAgaWYgKCB5IDwgbWluICkgbWluID0geTsKLSAgICBpZiAoIHkgPiBtYXggKSBtYXggPSB5OwotCi0gICAgaWYgKCBUUlVOQyggbWluICkgPj0gcmFzLm1heF9leSB8fCBUUlVOQyggbWF4ICkgPCByYXMubWluX2V5ICkKLSAgICAgIGdvdG8gRHJhdzsKLQotICAgIGxldmVsID0gMDsKKyAgICAvKiBXZSB1c2UgZGVjcmVtZW50IGNvdW50ZXIgdG8gY291bnQgdGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyAqLworICAgIC8qIHRvIGRyYXcgc3RhcnRpbmcgZnJvbSAyXmxldmVsLiBCZWZvcmUgZWFjaCBkcmF3IHdlIHNwbGl0IGFzICAgICovCisgICAgLyogbWFueSB0aW1lcyBhcyB0aGVyZSBhcmUgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvdW50ZXIuICAgICAgICAgKi8KICAgICBkbwogICAgIHsKLSAgICAgIGR4ID4+PSAyOwotICAgICAgbGV2ZWwrKzsKLSAgICB9IHdoaWxlICggZHggPiBPTkVfUElYRUwgLyA0ICk7Ci0KLSAgICBsZXZlbHNbMF0gPSBsZXZlbDsKLQotICAgIGRvCi0gICAgewotICAgICAgbGV2ZWwgPSBsZXZlbHNbdG9wXTsKLSAgICAgIGlmICggbGV2ZWwgPiAwICkKKyAgICAgIHNwbGl0ID0gMTsKKyAgICAgIHdoaWxlICggKCBkcmF3ICYgc3BsaXQgKSA9PSAwICkKICAgICAgIHsKICAgICAgICAgZ3JheV9zcGxpdF9jb25pYyggYXJjICk7CiAgICAgICAgIGFyYyArPSAyOwotICAgICAgICB0b3ArKzsKLSAgICAgICAgbGV2ZWxzW3RvcF0gPSBsZXZlbHNbdG9wIC0gMV0gPSBsZXZlbCAtIDE7Ci0gICAgICAgIGNvbnRpbnVlOworICAgICAgICBzcGxpdCA8PD0gMTsKICAgICAgIH0KIAotICAgIERyYXc6CiAgICAgICBncmF5X3JlbmRlcl9saW5lKCBSQVNfVkFSXyBhcmNbMF0ueCwgYXJjWzBdLnkgKTsKLSAgICAgIHRvcC0tOwogICAgICAgYXJjIC09IDI7CiAKLSAgICB9IHdoaWxlICggdG9wID49IDAgKTsKKyAgICB9IHdoaWxlICggLS1kcmF3ICk7CiAgIH0KIAogCkBAIC0xMDU1LDExICsxMDkyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIHRvICkKICAgewotICAgIEZUX1ZlY3RvciogIGFyYzsKLSAgICBUUG9zICAgICAgICBtaW4sIG1heCwgeTsKKyAgICBGVF9WZWN0b3IgICBiZXpfc3RhY2tbMTYgKiAzICsgMV07ICAvKiBlbm91Z2ggdG8gYWNjb21tb2RhdGUgYmlzZWN0aW9ucyAqLworICAgIEZUX1ZlY3RvciogIGFyYyA9IGJlel9zdGFjazsKKyAgICBUUG9zICAgICAgICBkeCwgZHksIGR4XywgZHlfOworICAgIFRQb3MgICAgICAgIGR4MSwgZHkxLCBkeDIsIGR5MjsKKyAgICBUUG9zICAgICAgICBMLCBzLCBzX2xpbWl0OwogCiAKLSAgICBhcmMgICAgICA9IHJhcy5iZXpfc3RhY2s7CiAgICAgYXJjWzBdLnggPSBVUFNDQUxFKCB0by0+eCApOwogICAgIGFyY1swXS55ID0gVVBTQ0FMRSggdG8tPnkgKTsKICAgICBhcmNbMV0ueCA9IFVQU0NBTEUoIGNvbnRyb2wyLT54ICk7CkBAIC0xMDY5LDI5ICsxMTA4LDIwIEBACiAgICAgYXJjWzNdLnggPSByYXMueDsKICAgICBhcmNbM10ueSA9IHJhcy55OwogCi0gICAgLyogU2hvcnQtY3V0IHRoZSBhcmMgdGhhdCBjcm9zc2VzIHRoZSBjdXJyZW50IGJhbmQuICovCi0gICAgbWluID0gbWF4ID0gYXJjWzBdLnk7Ci0KLSAgICB5ID0gYXJjWzFdLnk7Ci0gICAgaWYgKCB5IDwgbWluICkKLSAgICAgIG1pbiA9IHk7Ci0gICAgaWYgKCB5ID4gbWF4ICkKLSAgICAgIG1heCA9IHk7Ci0KLSAgICB5ID0gYXJjWzJdLnk7Ci0gICAgaWYgKCB5IDwgbWluICkKLSAgICAgIG1pbiA9IHk7Ci0gICAgaWYgKCB5ID4gbWF4ICkKLSAgICAgIG1heCA9IHk7Ci0KLSAgICB5ID0gYXJjWzNdLnk7Ci0gICAgaWYgKCB5IDwgbWluICkKLSAgICAgIG1pbiA9IHk7Ci0gICAgaWYgKCB5ID4gbWF4ICkKLSAgICAgIG1heCA9IHk7Ci0KLSAgICBpZiAoIFRSVU5DKCBtaW4gKSA+PSByYXMubWF4X2V5IHx8IFRSVU5DKCBtYXggKSA8IHJhcy5taW5fZXkgKQotICAgICAgZ290byBEcmF3OworICAgIC8qIHNob3J0LWN1dCB0aGUgYXJjIHRoYXQgY3Jvc3NlcyB0aGUgY3VycmVudCBiYW5kICovCisgICAgaWYgKCAoIFRSVU5DKCBhcmNbMF0ueSApID49IHJhcy5tYXhfZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1sxXS55ICkgPj0gcmFzLm1heF9leSAmJgorICAgICAgICAgICBUUlVOQyggYXJjWzJdLnkgKSA+PSByYXMubWF4X2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbM10ueSApID49IHJhcy5tYXhfZXkgKSB8fAorICAgICAgICAgKCBUUlVOQyggYXJjWzBdLnkgKSA8ICByYXMubWluX2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbMV0ueSApIDwgIHJhcy5taW5fZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1syXS55ICkgPCAgcmFzLm1pbl9leSAmJgorICAgICAgICAgICBUUlVOQyggYXJjWzNdLnkgKSA8ICByYXMubWluX2V5ICkgKQorICAgIHsKKyAgICAgIHJhcy54ID0gYXJjWzBdLng7CisgICAgICByYXMueSA9IGFyY1swXS55OworICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGZvciAoOzspCiAgICAgewpAQCAtMTEwMCw2NCArMTEzMCw1MyBAQAogICAgICAgLyogRi4gSGFpbiwgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgLyogaHR0cDovL3d3dy5jaXMuc291dGhhbGFiYW1hLmVkdS9+aGFpbi9nZW5lcmFsL1B1YmxpY2F0aW9ucy9CZXppZXIvQ2FtZXJhLXJlYWR5JTIwQ0lTU1QwMiUyMDIucGRmICovCiAKLSAgICAgIHsKLSAgICAgICAgVFBvcyAgZHgsIGR5LCBkeF8sIGR5XzsKLSAgICAgICAgVFBvcyAgZHgxLCBkeTEsIGR4MiwgZHkyOwotICAgICAgICBUUG9zICBMLCBzLCBzX2xpbWl0OworICAgICAgLyogZHggYW5kIGR5IGFyZSB4IGFuZCB5IGNvbXBvbmVudHMgb2YgdGhlIFAwLVAzIGNob3JkIHZlY3Rvci4gKi8KKyAgICAgIGR4ID0gZHhfID0gYXJjWzNdLnggLSBhcmNbMF0ueDsKKyAgICAgIGR5ID0gZHlfID0gYXJjWzNdLnkgLSBhcmNbMF0ueTsKIAorICAgICAgTCA9IEZUX0hZUE9UKCBkeF8sIGR5XyApOwogCi0gICAgICAgIC8qIGR4IGFuZCBkeSBhcmUgeCBhbmQgeSBjb21wb25lbnRzIG9mIHRoZSBQMC1QMyBjaG9yZCB2ZWN0b3IuICovCi0gICAgICAgIGR4ID0gZHhfID0gYXJjWzNdLnggLSBhcmNbMF0ueDsKLSAgICAgICAgZHkgPSBkeV8gPSBhcmNbM10ueSAtIGFyY1swXS55OworICAgICAgLyogQXZvaWQgcG9zc2libGUgYXJpdGhtZXRpYyBvdmVyZmxvdyBiZWxvdyBieSBzcGxpdHRpbmcuICovCisgICAgICBpZiAoIEwgPiAzMjc2NyApCisgICAgICAgIGdvdG8gU3BsaXQ7CiAKLSAgICAgICAgTCA9IEZUX0hZUE9UKCBkeF8sIGR5XyApOworICAgICAgLyogTWF4IGRldmlhdGlvbiBtYXkgYmUgYXMgbXVjaCBhcyAocy9MKSAqIDMvNCAoaWYgSGFpbidzIHYgPSAxKS4gKi8KKyAgICAgIHNfbGltaXQgPSBMICogKFRQb3MpKCBPTkVfUElYRUwgLyA2ICk7CiAKLSAgICAgICAgLyogQXZvaWQgcG9zc2libGUgYXJpdGhtZXRpYyBvdmVyZmxvdyBiZWxvdyBieSBzcGxpdHRpbmcuICovCi0gICAgICAgIGlmICggTCA+IDMyNzY3ICkKLSAgICAgICAgICBnb3RvIFNwbGl0OworICAgICAgLyogcyBpcyBMICogdGhlIHBlcnBlbmRpY3VsYXIgZGlzdGFuY2UgZnJvbSBQMSB0byB0aGUgbGluZSBQMC1QMy4gKi8KKyAgICAgIGR4MSA9IGFyY1sxXS54IC0gYXJjWzBdLng7CisgICAgICBkeTEgPSBhcmNbMV0ueSAtIGFyY1swXS55OworICAgICAgcyA9IEZUX0FCUyggZHkgKiBkeDEgLSBkeCAqIGR5MSApOwogCi0gICAgICAgIC8qIE1heCBkZXZpYXRpb24gbWF5IGJlIGFzIG11Y2ggYXMgKHMvTCkgKiAzLzQgKGlmIEhhaW4ncyB2ID0gMSkuICovCi0gICAgICAgIHNfbGltaXQgPSBMICogKFRQb3MpKCBPTkVfUElYRUwgLyA2ICk7CisgICAgICBpZiAoIHMgPiBzX2xpbWl0ICkKKyAgICAgICAgZ290byBTcGxpdDsKIAotICAgICAgICAvKiBzIGlzIEwgKiB0aGUgcGVycGVuZGljdWxhciBkaXN0YW5jZSBmcm9tIFAxIHRvIHRoZSBsaW5lIFAwLVAzLiAqLwotICAgICAgICBkeDEgPSBhcmNbMV0ueCAtIGFyY1swXS54OwotICAgICAgICBkeTEgPSBhcmNbMV0ueSAtIGFyY1swXS55OwotICAgICAgICBzID0gRlRfQUJTKCBkeSAqIGR4MSAtIGR4ICogZHkxICk7CisgICAgICAvKiBzIGlzIEwgKiB0aGUgcGVycGVuZGljdWxhciBkaXN0YW5jZSBmcm9tIFAyIHRvIHRoZSBsaW5lIFAwLVAzLiAqLworICAgICAgZHgyID0gYXJjWzJdLnggLSBhcmNbMF0ueDsKKyAgICAgIGR5MiA9IGFyY1syXS55IC0gYXJjWzBdLnk7CisgICAgICBzID0gRlRfQUJTKCBkeSAqIGR4MiAtIGR4ICogZHkyICk7CiAKLSAgICAgICAgaWYgKCBzID4gc19saW1pdCApCi0gICAgICAgICAgZ290byBTcGxpdDsKKyAgICAgIGlmICggcyA+IHNfbGltaXQgKQorICAgICAgICBnb3RvIFNwbGl0OwogCi0gICAgICAgIC8qIHMgaXMgTCAqIHRoZSBwZXJwZW5kaWN1bGFyIGRpc3RhbmNlIGZyb20gUDIgdG8gdGhlIGxpbmUgUDAtUDMuICovCi0gICAgICAgIGR4MiA9IGFyY1syXS54IC0gYXJjWzBdLng7Ci0gICAgICAgIGR5MiA9IGFyY1syXS55IC0gYXJjWzBdLnk7Ci0gICAgICAgIHMgPSBGVF9BQlMoIGR5ICogZHgyIC0gZHggKiBkeTIgKTsKKyAgICAgIC8qIFNwbGl0IHN1cGVyIGN1cnZ5IHNlZ21lbnRzIHdoZXJlIHRoZSBvZmYgcG9pbnRzIGFyZSBzbyBmYXIKKyAgICAgICAgIGZyb20gdGhlIGNob3JkIHRoYXQgdGhlIGFuZ2xlcyBQMC1QMS1QMyBvciBQMC1QMi1QMyBiZWNvbWUKKyAgICAgICAgIGFjdXRlIGFzIGRldGVjdGVkIGJ5IGFwcHJvcHJpYXRlIGRvdCBwcm9kdWN0cy4gKi8KKyAgICAgIGlmICggZHgxICogKCBkeDEgLSBkeCApICsgZHkxICogKCBkeTEgLSBkeSApID4gMCB8fAorICAgICAgICAgICBkeDIgKiAoIGR4MiAtIGR4ICkgKyBkeTIgKiAoIGR5MiAtIGR5ICkgPiAwICkKKyAgICAgICAgZ290byBTcGxpdDsKIAotICAgICAgICBpZiAoIHMgPiBzX2xpbWl0ICkKLSAgICAgICAgICBnb3RvIFNwbGl0OworICAgICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX1ZBUl8gYXJjWzBdLngsIGFyY1swXS55ICk7CiAKLSAgICAgICAgLyogU3BsaXQgc3VwZXIgY3Vydnkgc2VnbWVudHMgd2hlcmUgdGhlIG9mZiBwb2ludHMgYXJlIHNvIGZhcgotICAgICAgICAgICBmcm9tIHRoZSBjaG9yZCB0aGF0IHRoZSBhbmdsZXMgUDAtUDEtUDMgb3IgUDAtUDItUDMgYmVjb21lCi0gICAgICAgICAgIGFjdXRlIGFzIGRldGVjdGVkIGJ5IGFwcHJvcHJpYXRlIGRvdCBwcm9kdWN0cy4gKi8KLSAgICAgICAgaWYgKCBkeDEgKiAoIGR4MSAtIGR4ICkgKyBkeTEgKiAoIGR5MSAtIGR5ICkgPiAwIHx8Ci0gICAgICAgICAgICAgZHgyICogKCBkeDIgLSBkeCApICsgZHkyICogKCBkeTIgLSBkeSApID4gMCApCi0gICAgICAgICAgZ290byBTcGxpdDsKKyAgICAgIGlmICggYXJjID09IGJlel9zdGFjayApCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAvKiBObyByZWFzb24gdG8gc3BsaXQuICovCi0gICAgICAgIGdvdG8gRHJhdzsKLSAgICAgIH0KKyAgICAgIGFyYyAtPSAzOworICAgICAgY29udGludWU7CiAKICAgICBTcGxpdDoKICAgICAgIGdyYXlfc3BsaXRfY3ViaWMoIGFyYyApOwogICAgICAgYXJjICs9IDM7Ci0gICAgICBjb250aW51ZTsKLQotICAgIERyYXc6Ci0gICAgICBncmF5X3JlbmRlcl9saW5lKCBSQVNfVkFSXyBhcmNbMF0ueCwgYXJjWzBdLnkgKTsKLQotICAgICAgaWYgKCBhcmMgPT0gcmFzLmJlel9zdGFjayApCi0gICAgICAgIHJldHVybjsKLQotICAgICAgYXJjIC09IDM7CiAgICAgfQogICB9CiAKQEAgLTExNjksMTggKzExODgsMTQgQEAKICAgICBUUG9zICB4LCB5OwogCiAKLSAgICAvKiByZWNvcmQgY3VycmVudCBjZWxsLCBpZiBhbnkgKi8KLSAgICBpZiAoICFyYXMuaW52YWxpZCApCi0gICAgICBncmF5X3JlY29yZF9jZWxsKCBSQVNfVkFSICk7Ci0KICAgICAvKiBzdGFydCB0byBhIG5ldyBwb3NpdGlvbiAqLwogICAgIHggPSBVUFNDQUxFKCB0by0+eCApOwogICAgIHkgPSBVUFNDQUxFKCB0by0+eSApOwogCi0gICAgZ3JheV9zdGFydF9jZWxsKCBSQVNfVkFSXyBUUlVOQyggeCApLCBUUlVOQyggeSApICk7CisgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gVFJVTkMoIHggKSwgVFJVTkMoIHkgKSApOwogCi0gICAgd29ya2VyLT54ID0geDsKLSAgICB3b3JrZXItPnkgPSB5OworICAgIHJhcy54ID0geDsKKyAgICByYXMueSA9IHk7CiAgICAgcmV0dXJuIDA7CiAgIH0KIApAQCAtMTIxNiw2MyArMTIzMSwxMyBAQAogCiAKICAgc3RhdGljIHZvaWQKLSAgZ3JheV9yZW5kZXJfc3BhbiggaW50ICAgICAgICAgICAgIHksCi0gICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3BhbiogIHNwYW5zLAotICAgICAgICAgICAgICAgICAgICBncmF5X1BXb3JrZXIgICAgd29ya2VyICkKLSAgewotICAgIHVuc2lnbmVkIGNoYXIqICBwOwotICAgIEZUX0JpdG1hcCogICAgICBtYXAgPSAmd29ya2VyLT50YXJnZXQ7Ci0KLQotICAgIC8qIGZpcnN0IG9mIGFsbCwgY29tcHV0ZSB0aGUgc2NhbmxpbmUgb2Zmc2V0ICovCi0gICAgcCA9ICh1bnNpZ25lZCBjaGFyKiltYXAtPmJ1ZmZlciAtIHkgKiBtYXAtPnBpdGNoOwotICAgIGlmICggbWFwLT5waXRjaCA+PSAwICkKLSAgICAgIHAgKz0gKCBtYXAtPnJvd3MgLSAxICkgKiAodW5zaWduZWQgaW50KW1hcC0+cGl0Y2g7Ci0KLSAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgc3BhbnMrKyApCi0gICAgewotICAgICAgdW5zaWduZWQgY2hhciAgY292ZXJhZ2UgPSBzcGFucy0+Y292ZXJhZ2U7Ci0KLQotICAgICAgaWYgKCBjb3ZlcmFnZSApCi0gICAgICB7Ci0gICAgICAgIC8qIEZvciBzbWFsbC1zcGFucyBpdCBpcyBmYXN0ZXIgdG8gZG8gaXQgYnkgb3Vyc2VsdmVzIHRoYW4KLSAgICAgICAgICogY2FsbGluZyBgbWVtc2V0Jy4gIFRoaXMgaXMgbWFpbmx5IGR1ZSB0byB0aGUgY29zdCBvZiB0aGUKLSAgICAgICAgICogZnVuY3Rpb24gY2FsbC4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggc3BhbnMtPmxlbiA+PSA4ICkKLSAgICAgICAgICBGVF9NRU1fU0VUKCBwICsgc3BhbnMtPngsICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlLCBzcGFucy0+bGVuICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICBxID0gcCArIHNwYW5zLT54OwotCi0KLSAgICAgICAgICBzd2l0Y2ggKCBzcGFucy0+bGVuICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgY2FzZSA3OiAqcSsrID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgY2FzZSA2OiAqcSsrID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgY2FzZSA1OiAqcSsrID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgY2FzZSA0OiAqcSsrID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgY2FzZSAzOiAqcSsrID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgY2FzZSAyOiAqcSsrID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgY2FzZSAxOiAqcSAgID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHN0YXRpYyB2b2lkCiAgIGdyYXlfaGxpbmUoIFJBU19BUkdfIFRDb29yZCAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICB5LAotICAgICAgICAgICAgICAgICAgICAgICBUUG9zICAgIGFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgIFRBcmVhICAgYXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICBhY291bnQgKQogICB7Ci0gICAgaW50ICBjb3ZlcmFnZTsKKyAgICBpbnQgICAgICBjb3ZlcmFnZTsKKyAgICBGVF9TcGFuICBzcGFuOwogCiAKICAgICAvKiBjb21wdXRlIHRoZSBjb3ZlcmFnZSBsaW5lJ3MgY292ZXJhZ2UsIGRlcGVuZGluZyBvbiB0aGUgICAgKi8KQEAgLTEzMDEsMTc5ICsxMjY2LDkxIEBACiAgICAgICAgIGNvdmVyYWdlID0gMjU1OwogICAgIH0KIAotICAgIHkgKz0gKFRDb29yZClyYXMubWluX2V5OwotICAgIHggKz0gKFRDb29yZClyYXMubWluX2V4OwotCi0gICAgLyogRlRfU3Bhbi54IGlzIGEgMTYtYml0IHNob3J0LCBzbyBsaW1pdCBvdXIgY29vcmRpbmF0ZXMgYXBwcm9wcmlhdGVseSAqLwotICAgIGlmICggeCA+PSAzMjc2NyApCi0gICAgICB4ID0gMzI3Njc7Ci0KLSAgICAvKiBGVF9TcGFuLnkgaXMgYW4gaW50ZWdlciwgc28gbGltaXQgb3VyIGNvb3JkaW5hdGVzIGFwcHJvcHJpYXRlbHkgKi8KLSAgICBpZiAoIHkgPj0gRlRfSU5UX01BWCApCi0gICAgICB5ID0gRlRfSU5UX01BWDsKLQotICAgIGlmICggY292ZXJhZ2UgKQorICAgIGlmICggcmFzLnJlbmRlcl9zcGFuICkgIC8qIGZvciBGVF9SQVNURVJfRkxBR19ESVJFQ1Qgb25seSAqLwogICAgIHsKLSAgICAgIEZUX1NwYW4qICBzcGFuOwotICAgICAgaW50ICAgICAgIGNvdW50OworICAgICAgc3Bhbi54ICAgICAgICA9IChzaG9ydCl4OworICAgICAgc3Bhbi5sZW4gICAgICA9ICh1bnNpZ25lZCBzaG9ydClhY291bnQ7CisgICAgICBzcGFuLmNvdmVyYWdlID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7CisKKyAgICAgIHJhcy5yZW5kZXJfc3BhbiggeSwgMSwgJnNwYW4sIHJhcy5yZW5kZXJfc3Bhbl9kYXRhICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyKiAgcSA9IHJhcy50YXJnZXQub3JpZ2luIC0gcmFzLnRhcmdldC5waXRjaCAqIHkgKyB4OworICAgICAgdW5zaWduZWQgY2hhciAgIGMgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKIAogCi0gICAgICAvKiBzZWUgd2hldGhlciB3ZSBjYW4gYWRkIHRoaXMgc3BhbiB0byB0aGUgY3VycmVudCBsaXN0ICovCi0gICAgICBjb3VudCA9IHJhcy5udW1fZ3JheV9zcGFuczsKLSAgICAgIHNwYW4gID0gcmFzLmdyYXlfc3BhbnMgKyBjb3VudCAtIDE7Ci0gICAgICBpZiAoIGNvdW50ID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgcmFzLnNwYW5feSA9PSB5ICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAoaW50KXNwYW4tPnggKyBzcGFuLT5sZW4gPT0gKGludCl4ICYmCi0gICAgICAgICAgIHNwYW4tPmNvdmVyYWdlID09IGNvdmVyYWdlICAgICAgICAgKQorICAgICAgLyogRm9yIHNtYWxsLXNwYW5zIGl0IGlzIGZhc3RlciB0byBkbyBpdCBieSBvdXJzZWx2ZXMgdGhhbgorICAgICAgICogY2FsbGluZyBgbWVtc2V0Jy4gIFRoaXMgaXMgbWFpbmx5IGR1ZSB0byB0aGUgY29zdCBvZiB0aGUKKyAgICAgICAqIGZ1bmN0aW9uIGNhbGwuCisgICAgICAgKi8KKyAgICAgIHN3aXRjaCAoIGFjb3VudCApCiAgICAgICB7Ci0gICAgICAgIHNwYW4tPmxlbiA9ICh1bnNpZ25lZCBzaG9ydCkoIHNwYW4tPmxlbiArIGFjb3VudCApOwotICAgICAgICByZXR1cm47CisgICAgICBjYXNlIDc6ICpxKysgPSBjOworICAgICAgY2FzZSA2OiAqcSsrID0gYzsKKyAgICAgIGNhc2UgNTogKnErKyA9IGM7CisgICAgICBjYXNlIDQ6ICpxKysgPSBjOworICAgICAgY2FzZSAzOiAqcSsrID0gYzsKKyAgICAgIGNhc2UgMjogKnErKyA9IGM7CisgICAgICBjYXNlIDE6ICpxICAgPSBjOworICAgICAgY2FzZSAwOiBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEZUX01FTV9TRVQoIHEsIGMsIGFjb3VudCApOwogICAgICAgfQotCi0gICAgICBpZiAoIHJhcy5zcGFuX3kgIT0geSB8fCBjb3VudCA+PSBGVF9NQVhfR1JBWV9TUEFOUyApCi0gICAgICB7Ci0gICAgICAgIGlmICggcmFzLnJlbmRlcl9zcGFuICYmIGNvdW50ID4gMCApCi0gICAgICAgICAgcmFzLnJlbmRlcl9zcGFuKCByYXMuc3Bhbl95LCBjb3VudCwgcmFzLmdyYXlfc3BhbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByYXMucmVuZGVyX3NwYW5fZGF0YSApOwotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLQotICAgICAgICBpZiAoIGNvdW50ID4gMCApCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgIG47Ci0KLQotICAgICAgICAgIEZUX1RSQUNFNygoICJ5ID0gJTNkICIsIHJhcy5zcGFuX3kgKSk7Ci0gICAgICAgICAgc3BhbiA9IHJhcy5ncmF5X3NwYW5zOwotICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKywgc3BhbisrICkKLSAgICAgICAgICAgIEZUX1RSQUNFNygoICJbJWQuLiVkXTolMDJ4ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLT54LCBzcGFuLT54ICsgc3Bhbi0+bGVuIC0gMSwgc3Bhbi0+Y292ZXJhZ2UgKSk7Ci0gICAgICAgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKLSAgICAgICAgfQotCi0jZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KLQotICAgICAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOwotICAgICAgICByYXMuc3Bhbl95ICAgICAgICAgPSAoaW50KXk7Ci0KLSAgICAgICAgc3BhbiAgPSByYXMuZ3JheV9zcGFuczsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgc3BhbisrOwotCi0gICAgICAvKiBhZGQgYSBncmF5IHNwYW4gdG8gdGhlIGN1cnJlbnQgbGlzdCAqLwotICAgICAgc3Bhbi0+eCAgICAgICAgPSAoc2hvcnQpeDsKLSAgICAgIHNwYW4tPmxlbiAgICAgID0gKHVuc2lnbmVkIHNob3J0KWFjb3VudDsKLSAgICAgIHNwYW4tPmNvdmVyYWdlID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7Ci0KLSAgICAgIHJhcy5udW1fZ3JheV9zcGFucysrOwogICAgIH0KICAgfQogCiAKLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotCi0gIC8qIHRvIGJlIGNhbGxlZCB3aGlsZSBpbiB0aGUgZGVidWdnZXIgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIHRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgY29tcGlsZXIgd2FybmluZyBzaW5jZSBpdCBpcyB1bnVzZWQgb3RoZXJ3aXNlICovCiAgIHN0YXRpYyB2b2lkCi0gIGdyYXlfZHVtcF9jZWxscyggUkFTX0FSRyApCisgIGdyYXlfc3dlZXAoIFJBU19BUkcgKQogICB7Ci0gICAgaW50ICB5aW5kZXg7Ci0KLQotICAgIGZvciAoIHlpbmRleCA9IDA7IHlpbmRleCA8IHJhcy55Y291bnQ7IHlpbmRleCsrICkKLSAgICB7Ci0gICAgICBQQ2VsbCAgY2VsbDsKLQotCi0gICAgICBwcmludGYoICIlM2Q6IiwgeWluZGV4ICk7Ci0KLSAgICAgIGZvciAoIGNlbGwgPSByYXMueWNlbGxzW3lpbmRleF07IGNlbGwgIT0gTlVMTDsgY2VsbCA9IGNlbGwtPm5leHQgKQotICAgICAgICBwcmludGYoICIgKCUzbGQsIGM6JTRsZCwgYTolNmQpIiwgY2VsbC0+eCwgY2VsbC0+Y292ZXIsIGNlbGwtPmFyZWEgKTsKLSAgICAgIHByaW50ZiggIlxuIiApOwotICAgIH0KLSAgfQotCi0jZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KLQotCi0gIHN0YXRpYyB2b2lkCi0gIGdyYXlfc3dlZXAoIFJBU19BUkdfIGNvbnN0IEZUX0JpdG1hcCogIHRhcmdldCApCi0gIHsKLSAgICBpbnQgIHlpbmRleDsKLQotICAgIEZUX1VOVVNFRCggdGFyZ2V0ICk7CisgICAgaW50ICB5OwogCiAKICAgICBpZiAoIHJhcy5udW1fY2VsbHMgPT0gMCApCiAgICAgICByZXR1cm47CiAKLSAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOwotCiAgICAgRlRfVFJBQ0U3KCggImdyYXlfc3dlZXA6IHN0YXJ0XG4iICkpOwogCi0gICAgZm9yICggeWluZGV4ID0gMDsgeWluZGV4IDwgcmFzLnljb3VudDsgeWluZGV4KysgKQorICAgIGZvciAoIHkgPSByYXMubWluX2V5OyB5IDwgcmFzLm1heF9leTsgeSsrICkKICAgICB7Ci0gICAgICBQQ2VsbCAgIGNlbGwgID0gcmFzLnljZWxsc1t5aW5kZXhdOworICAgICAgUENlbGwgICBjZWxsICA9IHJhcy55Y2VsbHNbeSAtIHJhcy5taW5fZXldOwogICAgICAgVENvb3JkICBjb3ZlciA9IDA7Ci0gICAgICBUQ29vcmQgIHggICAgID0gMDsKKyAgICAgIFRDb29yZCAgeCAgICAgPSByYXMubWluX2V4OwogCiAKICAgICAgIGZvciAoIDsgY2VsbCAhPSBOVUxMOyBjZWxsID0gY2VsbC0+bmV4dCApCiAgICAgICB7Ci0gICAgICAgIFRQb3MgIGFyZWE7CisgICAgICAgIFRBcmVhICBhcmVhOwogCiAKLSAgICAgICAgaWYgKCBjZWxsLT54ID4geCAmJiBjb3ZlciAhPSAwICkKLSAgICAgICAgICBncmF5X2hsaW5lKCBSQVNfVkFSXyB4LCB5aW5kZXgsIGNvdmVyICogKCBPTkVfUElYRUwgKiAyICksCisgICAgICAgIGlmICggY292ZXIgIT0gMCAmJiBjZWxsLT54ID4geCApCisgICAgICAgICAgZ3JheV9obGluZSggUkFTX1ZBUl8geCwgeSwgKFRBcmVhKWNvdmVyICogKCBPTkVfUElYRUwgKiAyICksCiAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+eCAtIHggKTsKIAogICAgICAgICBjb3ZlciArPSBjZWxsLT5jb3ZlcjsKLSAgICAgICAgYXJlYSAgID0gY292ZXIgKiAoIE9ORV9QSVhFTCAqIDIgKSAtIGNlbGwtPmFyZWE7CisgICAgICAgIGFyZWEgICA9IChUQXJlYSljb3ZlciAqICggT05FX1BJWEVMICogMiApIC0gY2VsbC0+YXJlYTsKIAotICAgICAgICBpZiAoIGFyZWEgIT0gMCAmJiBjZWxsLT54ID49IDAgKQotICAgICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIGNlbGwtPngsIHlpbmRleCwgYXJlYSwgMSApOworICAgICAgICBpZiAoIGFyZWEgIT0gMCAmJiBjZWxsLT54ID49IHJhcy5taW5fZXggKQorICAgICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIGNlbGwtPngsIHksIGFyZWEsIDEgKTsKIAogICAgICAgICB4ID0gY2VsbC0+eCArIDE7CiAgICAgICB9CiAKICAgICAgIGlmICggY292ZXIgIT0gMCApCi0gICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIHgsIHlpbmRleCwgY292ZXIgKiAoIE9ORV9QSVhFTCAqIDIgKSwKLSAgICAgICAgICAgICAgICAgICAgcmFzLmNvdW50X2V4IC0geCApOwotICAgIH0KLQotICAgIGlmICggcmFzLnJlbmRlcl9zcGFuICYmIHJhcy5udW1fZ3JheV9zcGFucyA+IDAgKQotICAgICAgcmFzLnJlbmRlcl9zcGFuKCByYXMuc3Bhbl95LCByYXMubnVtX2dyYXlfc3BhbnMsCi0gICAgICAgICAgICAgICAgICAgICAgIHJhcy5ncmF5X3NwYW5zLCByYXMucmVuZGVyX3NwYW5fZGF0YSApOwotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLQotICAgIGlmICggcmFzLm51bV9ncmF5X3NwYW5zID4gMCApCi0gICAgewotICAgICAgRlRfU3BhbiogIHNwYW47Ci0gICAgICBpbnQgICAgICAgbjsKLQotCi0gICAgICBGVF9UUkFDRTcoKCAieSA9ICUzZCAiLCByYXMuc3Bhbl95ICkpOwotICAgICAgc3BhbiA9IHJhcy5ncmF5X3NwYW5zOwotICAgICAgZm9yICggbiA9IDA7IG4gPCByYXMubnVtX2dyYXlfc3BhbnM7IG4rKywgc3BhbisrICkKLSAgICAgICAgRlRfVFJBQ0U3KCggIlslZC4uJWRdOiUwMnggIiwKLSAgICAgICAgICAgICAgICAgICAgc3Bhbi0+eCwgc3Bhbi0+eCArIHNwYW4tPmxlbiAtIDEsIHNwYW4tPmNvdmVyYWdlICkpOwotICAgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKKyAgICAgICAgZ3JheV9obGluZSggUkFTX1ZBUl8geCwgeSwgKFRBcmVhKWNvdmVyICogKCBPTkVfUElYRUwgKiAyICksCisgICAgICAgICAgICAgICAgICAgIHJhcy5tYXhfZXggLSB4ICk7CiAgICAgfQogCiAgICAgRlRfVFJBQ0U3KCggImdyYXlfc3dlZXA6IGVuZFxuIiApKTsKLQotI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCi0KICAgfQogCiAKLSNpZmRlZiBfU1RBTkRBTE9ORV8KKyNpZmRlZiBTVEFOREFMT05FXwogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIG9ubHkgY29tcGlsZSBpbiBzdGFuZC1hbG9uZSBtb2RlLCAgICAgICovCisgIC8qICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzaG91bGQgb25seSBjb21waWxlIGluIHN0YW5kLWFsb25lIG1vZGUsICAgICAqLwogICAvKiAgaS5lLiwgd2hlbiBidWlsZGluZyB0aGlzIGNvbXBvbmVudCB3aXRob3V0IHRoZSByZXN0IG9mIEZyZWVUeXBlLiAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTc1MSwxNCArMTYyOCw4MiBAQAogICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CiAgIH0KIAotI2VuZGlmIC8qIF9TVEFOREFMT05FXyAqLwogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfR2V0X0NCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhbiBvdXRsaW5lJ3MgYGNvbnRyb2wgYm94Jy4gIFRoZSBjb250cm9sIGJveCBlbmNsb3NlcyBhbGwgICAqLworICAvKiAgICB0aGUgb3V0bGluZSdzIHBvaW50cywgaW5jbHVkaW5nIELDqXppZXIgY29udHJvbCBwb2ludHMuICBUaG91Z2ggaXQgICovCisgIC8qICAgIGNvaW5jaWRlcyB3aXRoIHRoZSBleGFjdCBib3VuZGluZyBib3ggZm9yIG1vc3QgZ2x5cGhzLCBpdCBjYW4gYmUgICAqLworICAvKiAgICBzbGlnaHRseSBsYXJnZXIgaW4gc29tZSBzaXR1YXRpb25zIChsaWtlIHdoZW4gcm90YXRpbmcgYW4gb3V0bGluZSAgKi8KKyAgLyogICAgdGhhdCBjb250YWlucyBCw6l6aWVyIG91dHNpZGUgYXJjcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nICovCisgIC8qICAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzICAqLworICAvKiAgICBhbmQgYXJjcyBpbiB0aGUgb3V0bGluZS4gIFRvIGdldCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgICAgICAgKi8KKyAgLyogICAgYGZ0YmJveCcgY29tcG9uZW50LCB3aGljaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgdGFzay4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWNib3ggICA6OiBUaGUgb3V0bGluZSdzIGNvbnRyb2wgYm94LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIEBGVF9HbHlwaF9HZXRfQ0JveCBmb3IgYSBkaXNjdXNzaW9uIG9mIHRyaWNreSBmb250cy4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHR5cGVkZWYgc3RydWN0ICBncmF5X1RCYW5kXworICBzdGF0aWMgdm9pZAorICBGVF9PdXRsaW5lX0dldF9DQm94KCBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgICAgICAgICAgKmFjYm94ICkKICAgewotICAgIFRQb3MgIG1pbiwgbWF4OworICAgIFRQb3MgIHhNaW4sIHlNaW4sIHhNYXgsIHlNYXg7CiAKLSAgfSBncmF5X1RCYW5kOworCisgICAgaWYgKCBvdXRsaW5lICYmIGFjYm94ICkKKyAgICB7CisgICAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID09IDAgKQorICAgICAgeworICAgICAgICB4TWluID0gMDsKKyAgICAgICAgeU1pbiA9IDA7CisgICAgICAgIHhNYXggPSAwOworICAgICAgICB5TWF4ID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfVmVjdG9yKiAgdmVjICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICAgIEZUX1ZlY3RvciogIGxpbWl0ID0gdmVjICsgb3V0bGluZS0+bl9wb2ludHM7CisKKworICAgICAgICB4TWluID0geE1heCA9IHZlYy0+eDsKKyAgICAgICAgeU1pbiA9IHlNYXggPSB2ZWMtPnk7CisgICAgICAgIHZlYysrOworCisgICAgICAgIGZvciAoIDsgdmVjIDwgbGltaXQ7IHZlYysrICkKKyAgICAgICAgeworICAgICAgICAgIFRQb3MgIHgsIHk7CisKKworICAgICAgICAgIHggPSB2ZWMtPng7CisgICAgICAgICAgaWYgKCB4IDwgeE1pbiApIHhNaW4gPSB4OworICAgICAgICAgIGlmICggeCA+IHhNYXggKSB4TWF4ID0geDsKKworICAgICAgICAgIHkgPSB2ZWMtPnk7CisgICAgICAgICAgaWYgKCB5IDwgeU1pbiApIHlNaW4gPSB5OworICAgICAgICAgIGlmICggeSA+IHlNYXggKSB5TWF4ID0geTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYWNib3gtPnhNaW4gPSB4TWluOworICAgICAgYWNib3gtPnhNYXggPSB4TWF4OworICAgICAgYWNib3gtPnlNaW4gPSB5TWluOworICAgICAgYWNib3gtPnlNYXggPSB5TWF4OworICAgIH0KKyAgfQorCisjZW5kaWYgLyogU1RBTkRBTE9ORV8gKi8KIAogCiAgIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKApAQCAtMTc4OCwxMCArMTczMywxOCBAQAogICAgICAgZXJyb3IgPSBGVF9PdXRsaW5lX0RlY29tcG9zZSggJnJhcy5vdXRsaW5lLCAmZnVuY19pbnRlcmZhY2UsICZyYXMgKTsKICAgICAgIGlmICggIXJhcy5pbnZhbGlkICkKICAgICAgICAgZ3JheV9yZWNvcmRfY2VsbCggUkFTX1ZBUiApOworCisgICAgICBGVF9UUkFDRTcoKCAiYmFuZCBbJWQuLiVkXTogJWQgY2VsbHNcbiIsCisgICAgICAgICAgICAgICAgICByYXMubWluX2V5LCByYXMubWF4X2V5LCByYXMubnVtX2NlbGxzICkpOwogICAgIH0KICAgICBlbHNlCisgICAgewogICAgICAgZXJyb3IgPSBGVF9USFJPVyggTWVtb3J5X092ZXJmbG93ICk7CiAKKyAgICAgIEZUX1RSQUNFNygoICJiYW5kIFslZC4uJWRdOiB0byBiZSBiaXNlY3RlZFxuIiwKKyAgICAgICAgICAgICAgICAgIHJhcy5taW5fZXksIHJhcy5tYXhfZXkgKSk7CisgICAgfQorCiAgICAgcmV0dXJuIGVycm9yOwogICB9CiAKQEAgLTE3OTksMTAwICsxNzUyLDcyIEBACiAgIHN0YXRpYyBpbnQKICAgZ3JheV9jb252ZXJ0X2dseXBoKCBSQVNfQVJHICkKICAgewotICAgIGdyYXlfVEJhbmQgICAgICAgICAgICBiYW5kc1s0MF07Ci0gICAgZ3JheV9UQmFuZCogdm9sYXRpbGUgIGJhbmQ7Ci0gICAgaW50IHZvbGF0aWxlICAgICAgICAgIG4sIG51bV9iYW5kczsKLSAgICBUUG9zIHZvbGF0aWxlICAgICAgICAgbWluLCBtYXgsIG1heF95OwotICAgIEZUX0JCb3gqICAgICAgICAgICAgICBjbGlwOworICAgIFRDZWxsICAgIGJ1ZmZlcltGVF9NQVhfR1JBWV9QT09MXTsKKyAgICBUQ29vcmQgICBiYW5kX3NpemUgPSBGVF9NQVhfR1JBWV9QT09MIC8gODsKKyAgICBUQ29vcmQgICBjb3VudCA9IHJhcy5tYXhfZXkgLSByYXMubWluX2V5OworICAgIGludCAgICAgIG51bV9iYW5kczsKKyAgICBUQ29vcmQgICBtaW4sIG1heCwgbWF4X3k7CisgICAgVENvb3JkICAgYmFuZHNbMzJdOyAgLyogZW5vdWdoIHRvIGFjY29tbW9kYXRlIGJpc2VjdGlvbnMgKi8KKyAgICBUQ29vcmQqICBiYW5kOwogCiAKLSAgICAvKiBTZXQgdXAgc3RhdGUgaW4gdGhlIHJhc3RlciBvYmplY3QgKi8KLSAgICBncmF5X2NvbXB1dGVfY2JveCggUkFTX1ZBUiApOwotCi0gICAgLyogY2xpcCB0byB0YXJnZXQgYml0bWFwLCBleGl0IGlmIG5vdGhpbmcgdG8gZG8gKi8KLSAgICBjbGlwID0gJnJhcy5jbGlwX2JveDsKLQotICAgIGlmICggcmFzLm1heF9leCA8PSBjbGlwLT54TWluIHx8IHJhcy5taW5fZXggPj0gY2xpcC0+eE1heCB8fAotICAgICAgICAgcmFzLm1heF9leSA8PSBjbGlwLT55TWluIHx8IHJhcy5taW5fZXkgPj0gY2xpcC0+eU1heCApCi0gICAgICByZXR1cm4gMDsKLQotICAgIGlmICggcmFzLm1pbl9leCA8IGNsaXAtPnhNaW4gKSByYXMubWluX2V4ID0gY2xpcC0+eE1pbjsKLSAgICBpZiAoIHJhcy5taW5fZXkgPCBjbGlwLT55TWluICkgcmFzLm1pbl9leSA9IGNsaXAtPnlNaW47Ci0KLSAgICBpZiAoIHJhcy5tYXhfZXggPiBjbGlwLT54TWF4ICkgcmFzLm1heF9leCA9IGNsaXAtPnhNYXg7Ci0gICAgaWYgKCByYXMubWF4X2V5ID4gY2xpcC0+eU1heCApIHJhcy5tYXhfZXkgPSBjbGlwLT55TWF4OwotCi0gICAgcmFzLmNvdW50X2V4ID0gcmFzLm1heF9leCAtIHJhcy5taW5fZXg7Ci0gICAgcmFzLmNvdW50X2V5ID0gcmFzLm1heF9leSAtIHJhcy5taW5fZXk7Ci0KICAgICAvKiBzZXQgdXAgdmVydGljYWwgYmFuZHMgKi8KLSAgICBudW1fYmFuZHMgPSAoaW50KSggKCByYXMubWF4X2V5IC0gcmFzLm1pbl9leSApIC8gcmFzLmJhbmRfc2l6ZSApOwotICAgIGlmICggbnVtX2JhbmRzID09IDAgKQotICAgICAgbnVtX2JhbmRzID0gMTsKLSAgICBpZiAoIG51bV9iYW5kcyA+PSAzOSApCi0gICAgICBudW1fYmFuZHMgPSAzOTsKLQotICAgIHJhcy5iYW5kX3Nob290ID0gMDsKKyAgICBpZiAoIGNvdW50ID4gYmFuZF9zaXplICkKKyAgICB7CisgICAgICAvKiB0d28gZGl2aXNpb25zIHJvdW5kZWQgdXAgKi8KKyAgICAgIG51bV9iYW5kcyA9IChpbnQpKCAoIGNvdW50ICsgYmFuZF9zaXplIC0gMSkgLyBiYW5kX3NpemUgKTsKKyAgICAgIGJhbmRfc2l6ZSA9ICggY291bnQgKyBudW1fYmFuZHMgLSAxICkgLyBudW1fYmFuZHM7CisgICAgfQogCiAgICAgbWluICAgPSByYXMubWluX2V5OwogICAgIG1heF95ID0gcmFzLm1heF9leTsKIAotICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX2JhbmRzOyBuKyssIG1pbiA9IG1heCApCisgICAgZm9yICggOyBtaW4gPCBtYXhfeTsgbWluID0gbWF4ICkKICAgICB7Ci0gICAgICBtYXggPSBtaW4gKyByYXMuYmFuZF9zaXplOwotICAgICAgaWYgKCBuID09IG51bV9iYW5kcyAtIDEgfHwgbWF4ID4gbWF4X3kgKQorICAgICAgbWF4ID0gbWluICsgYmFuZF9zaXplOworICAgICAgaWYgKCBtYXggPiBtYXhfeSApCiAgICAgICAgIG1heCA9IG1heF95OwogCi0gICAgICBiYW5kc1swXS5taW4gPSBtaW47Ci0gICAgICBiYW5kc1swXS5tYXggPSBtYXg7Ci0gICAgICBiYW5kICAgICAgICAgPSBiYW5kczsKKyAgICAgIGJhbmQgICAgPSBiYW5kczsKKyAgICAgIGJhbmRbMV0gPSBtaW47CisgICAgICBiYW5kWzBdID0gbWF4OwogCi0gICAgICB3aGlsZSAoIGJhbmQgPj0gYmFuZHMgKQorICAgICAgZG8KICAgICAgIHsKLSAgICAgICAgVFBvcyAgYm90dG9tLCB0b3AsIG1pZGRsZTsKLSAgICAgICAgaW50ICAgZXJyb3I7CisgICAgICAgIFRDb29yZCAgd2lkdGggPSBiYW5kWzBdIC0gYmFuZFsxXTsKKyAgICAgICAgaW50ICAgICBlcnJvcjsKIAorCisgICAgICAgIC8qIG1lbW9yeSBtYW5hZ2VtZW50ICovCiAgICAgICAgIHsKLSAgICAgICAgICBQQ2VsbCAgY2VsbHNfbWF4OwotICAgICAgICAgIGludCAgICB5aW5kZXg7Ci0gICAgICAgICAgbG9uZyAgIGNlbGxfc3RhcnQsIGNlbGxfZW5kLCBjZWxsX21vZDsKKyAgICAgICAgICBzaXplX3QgIHljb3VudCA9IChzaXplX3Qpd2lkdGg7CisgICAgICAgICAgc2l6ZV90ICBjZWxsX3N0YXJ0OwogCiAKLSAgICAgICAgICByYXMueWNlbGxzID0gKFBDZWxsKilyYXMuYnVmZmVyOwotICAgICAgICAgIHJhcy55Y291bnQgPSBiYW5kLT5tYXggLSBiYW5kLT5taW47CisgICAgICAgICAgY2VsbF9zdGFydCA9ICggeWNvdW50ICogc2l6ZW9mICggUENlbGwgKSArIHNpemVvZiAoIFRDZWxsICkgLSAxICkgLworICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBUQ2VsbCApOwogCi0gICAgICAgICAgY2VsbF9zdGFydCA9IChsb25nKXNpemVvZiAoIFBDZWxsICkgKiByYXMueWNvdW50OwotICAgICAgICAgIGNlbGxfbW9kICAgPSBjZWxsX3N0YXJ0ICUgKGxvbmcpc2l6ZW9mICggVENlbGwgKTsKLSAgICAgICAgICBpZiAoIGNlbGxfbW9kID4gMCApCi0gICAgICAgICAgICBjZWxsX3N0YXJ0ICs9IChsb25nKXNpemVvZiAoIFRDZWxsICkgLSBjZWxsX21vZDsKLQotICAgICAgICAgIGNlbGxfZW5kICA9IHJhcy5idWZmZXJfc2l6ZTsKLSAgICAgICAgICBjZWxsX2VuZCAtPSBjZWxsX2VuZCAlIChsb25nKXNpemVvZiAoIFRDZWxsICk7Ci0KLSAgICAgICAgICBjZWxsc19tYXggPSAoUENlbGwpKCAoY2hhciopcmFzLmJ1ZmZlciArIGNlbGxfZW5kICk7Ci0gICAgICAgICAgcmFzLmNlbGxzID0gKFBDZWxsKSggKGNoYXIqKXJhcy5idWZmZXIgKyBjZWxsX3N0YXJ0ICk7Ci0gICAgICAgICAgaWYgKCByYXMuY2VsbHMgPj0gY2VsbHNfbWF4ICkKKyAgICAgICAgICBpZiAoIEZUX01BWF9HUkFZX1BPT0wgLSBjZWxsX3N0YXJ0IDwgMiApCiAgICAgICAgICAgICBnb3RvIFJlZHVjZUJhbmRzOwogCi0gICAgICAgICAgcmFzLm1heF9jZWxscyA9IGNlbGxzX21heCAtIHJhcy5jZWxsczsKLSAgICAgICAgICBpZiAoIHJhcy5tYXhfY2VsbHMgPCAyICkKLSAgICAgICAgICAgIGdvdG8gUmVkdWNlQmFuZHM7CisgICAgICAgICAgcmFzLmNlbGxzICAgICA9IGJ1ZmZlciArIGNlbGxfc3RhcnQ7CisgICAgICAgICAgcmFzLm1heF9jZWxscyA9IChGVF9QdHJEaXN0KSggRlRfTUFYX0dSQVlfUE9PTCAtIGNlbGxfc3RhcnQgKTsKIAotICAgICAgICAgIGZvciAoIHlpbmRleCA9IDA7IHlpbmRleCA8IHJhcy55Y291bnQ7IHlpbmRleCsrICkKLSAgICAgICAgICAgIHJhcy55Y2VsbHNbeWluZGV4XSA9IE5VTEw7CisgICAgICAgICAgcmFzLnljZWxscyA9IChQQ2VsbCopYnVmZmVyOworICAgICAgICAgIHdoaWxlICggeWNvdW50ICkKKyAgICAgICAgICAgIHJhcy55Y2VsbHNbLS15Y291bnRdID0gTlVMTDsKICAgICAgICAgfQogCiAgICAgICAgIHJhcy5udW1fY2VsbHMgPSAwOwogICAgICAgICByYXMuaW52YWxpZCAgID0gMTsKLSAgICAgICAgcmFzLm1pbl9leSAgICA9IGJhbmQtPm1pbjsKLSAgICAgICAgcmFzLm1heF9leSAgICA9IGJhbmQtPm1heDsKLSAgICAgICAgcmFzLmNvdW50X2V5ICA9IGJhbmQtPm1heCAtIGJhbmQtPm1pbjsKKyAgICAgICAgcmFzLm1pbl9leSAgICA9IGJhbmRbMV07CisgICAgICAgIHJhcy5tYXhfZXkgICAgPSBiYW5kWzBdOwogCiAgICAgICAgIGVycm9yID0gZ3JheV9jb252ZXJ0X2dseXBoX2lubmVyKCBSQVNfVkFSICk7CiAKICAgICAgICAgaWYgKCAhZXJyb3IgKQogICAgICAgICB7Ci0gICAgICAgICAgZ3JheV9zd2VlcCggUkFTX1ZBUl8gJnJhcy50YXJnZXQgKTsKKyAgICAgICAgICBncmF5X3N3ZWVwKCBSQVNfVkFSICk7CiAgICAgICAgICAgYmFuZC0tOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xOTAxLDU2ICsxODI2LDQ2IEBACiAKICAgICAgIFJlZHVjZUJhbmRzOgogICAgICAgICAvKiByZW5kZXIgcG9vbCBvdmVyZmxvdzsgd2Ugd2lsbCByZWR1Y2UgdGhlIHJlbmRlciBiYW5kIGJ5IGhhbGYgKi8KLSAgICAgICAgYm90dG9tID0gYmFuZC0+bWluOwotICAgICAgICB0b3AgICAgPSBiYW5kLT5tYXg7Ci0gICAgICAgIG1pZGRsZSA9IGJvdHRvbSArICggKCB0b3AgLSBib3R0b20gKSA+PiAxICk7CisgICAgICAgIHdpZHRoID4+PSAxOwogCiAgICAgICAgIC8qIFRoaXMgaXMgdG9vIGNvbXBsZXggZm9yIGEgc2luZ2xlIHNjYW5saW5lOyB0aGVyZSBtdXN0ICovCiAgICAgICAgIC8qIGJlIHNvbWUgcHJvYmxlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmICggbWlkZGxlID09IGJvdHRvbSApCisgICAgICAgIGlmICggd2lkdGggPT0gMCApCiAgICAgICAgIHsKLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgICAgICAgIEZUX1RSQUNFNygoICJncmF5X2NvbnZlcnRfZ2x5cGg6IHJvdHRlbiBnbHlwaFxuIiApKTsKLSNlbmRpZgogICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBib3R0b20tdG9wID49IHJhcy5iYW5kX3NpemUgKQotICAgICAgICAgIHJhcy5iYW5kX3Nob290Kys7Ci0KLSAgICAgICAgYmFuZFsxXS5taW4gPSBib3R0b207Ci0gICAgICAgIGJhbmRbMV0ubWF4ID0gbWlkZGxlOwotICAgICAgICBiYW5kWzBdLm1pbiA9IG1pZGRsZTsKLSAgICAgICAgYmFuZFswXS5tYXggPSB0b3A7CiAgICAgICAgIGJhbmQrKzsKLSAgICAgIH0KKyAgICAgICAgYmFuZFsxXSAgPSBiYW5kWzBdOworICAgICAgICBiYW5kWzBdICs9IHdpZHRoOworICAgICAgfSB3aGlsZSAoIGJhbmQgPj0gYmFuZHMgKTsKICAgICB9CiAKLSAgICBpZiAoIHJhcy5iYW5kX3Nob290ID4gOCAmJiByYXMuYmFuZF9zaXplID4gMTYgKQotICAgICAgcmFzLmJhbmRfc2l6ZSA9IHJhcy5iYW5kX3NpemUgLyAyOwotCiAgICAgcmV0dXJuIDA7CiAgIH0KIAogCiAgIHN0YXRpYyBpbnQKLSAgZ3JheV9yYXN0ZXJfcmVuZGVyKCBncmF5X1BSYXN0ZXIgICAgICAgICAgICAgcmFzdGVyLAorICBncmF5X3Jhc3Rlcl9yZW5kZXIoIEZUX1Jhc3RlciAgICAgICAgICAgICAgICByYXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfUmFzdGVyX1BhcmFtcyogIHBhcmFtcyApCiAgIHsKICAgICBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSAgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7CiAgICAgY29uc3QgRlRfQml0bWFwKiAgIHRhcmdldF9tYXAgID0gcGFyYW1zLT50YXJnZXQ7CisgICAgRlRfQkJveCAgICAgICAgICAgIGNib3gsIGNsaXA7CiAKKyNpZm5kZWYgRlRfU1RBVElDX1JBU1RFUgogICAgIGdyYXlfVFdvcmtlciAgd29ya2VyWzFdOwotCi0gICAgVENlbGwgIGJ1ZmZlcltGVF9NQVgoIEZUX1JFTkRFUl9QT09MX1NJWkUsIDIwNDggKSAvIHNpemVvZiAoIFRDZWxsICldOwotICAgIGxvbmcgICBidWZmZXJfc2l6ZSA9IHNpemVvZiAoIGJ1ZmZlciApOwotICAgIGludCAgICBiYW5kX3NpemUgICA9IChpbnQpKCBidWZmZXJfc2l6ZSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSggc2l6ZW9mICggVENlbGwgKSAqIDggKSApOworI2VuZGlmCiAKIAogICAgIGlmICggIXJhc3RlciApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAorICAgIC8qIHRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IG1vbm9jaHJvbWUgcmVuZGVyaW5nICovCisgICAgaWYgKCAhKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQUEgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTW9kZSApOworCiAgICAgaWYgKCAhb3V0bGluZSApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOwogCkBAIC0xOTY1LDkgKzE4ODAsMTkgQEAKICAgICAgICAgICAgb3V0bGluZS0+Y29udG91cnNbb3V0bGluZS0+bl9jb250b3VycyAtIDFdICsgMSApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOwogCi0gICAgLyogaWYgZGlyZWN0IG1vZGUgaXMgbm90IHNldCwgd2UgbXVzdCBoYXZlIGEgdGFyZ2V0IGJpdG1hcCAqLwotICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKKyAgICByYXMub3V0bGluZSA9ICpvdXRsaW5lOworCisgICAgaWYgKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfRElSRUNUICkKICAgICB7CisgICAgICBpZiAoICFwYXJhbXMtPmdyYXlfc3BhbnMgKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgcmFzLnJlbmRlcl9zcGFuICAgICAgPSAoRlRfUmFzdGVyX1NwYW5fRnVuYylwYXJhbXMtPmdyYXlfc3BhbnM7CisgICAgICByYXMucmVuZGVyX3NwYW5fZGF0YSA9IHBhcmFtcy0+dXNlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGlmIGRpcmVjdCBtb2RlIGlzIG5vdCBzZXQsIHdlIG11c3QgaGF2ZSBhIHRhcmdldCBiaXRtYXAgKi8KICAgICAgIGlmICggIXRhcmdldF9tYXAgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIApAQCAtMTk3Nyw1MSArMTkwMiw1OSBAQAogCiAgICAgICBpZiAoICF0YXJnZXRfbWFwLT5idWZmZXIgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICAgaWYgKCB0YXJnZXRfbWFwLT5waXRjaCA8IDAgKQorICAgICAgICByYXMudGFyZ2V0Lm9yaWdpbiA9IHRhcmdldF9tYXAtPmJ1ZmZlcjsKKyAgICAgIGVsc2UKKyAgICAgICAgcmFzLnRhcmdldC5vcmlnaW4gPSB0YXJnZXRfbWFwLT5idWZmZXIKKyAgICAgICAgICAgICAgKyAoIHRhcmdldF9tYXAtPnJvd3MgLSAxICkgKiAodW5zaWduZWQgaW50KXRhcmdldF9tYXAtPnBpdGNoOworCisgICAgICByYXMudGFyZ2V0LnBpdGNoID0gdGFyZ2V0X21hcC0+cGl0Y2g7CisKKyAgICAgIHJhcy5yZW5kZXJfc3BhbiAgICAgID0gKEZUX1Jhc3Rlcl9TcGFuX0Z1bmMpTlVMTDsKKyAgICAgIHJhcy5yZW5kZXJfc3Bhbl9kYXRhID0gTlVMTDsKICAgICB9CiAKLSAgICAvKiB0aGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBtb25vY2hyb21lIHJlbmRlcmluZyAqLwotICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0FBICkgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX01vZGUgKTsKKyAgICBGVF9PdXRsaW5lX0dldF9DQm94KCBvdXRsaW5lLCAmY2JveCApOworCisgICAgLyogcmVqZWN0IHRvbyBsYXJnZSBvdXRsaW5lIGNvb3JkaW5hdGVzICovCisgICAgaWYgKCBjYm94LnhNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnhNYXggPiAweDEwMDAwMDBMIHx8CisgICAgICAgICBjYm94LnlNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnlNYXggPiAweDEwMDAwMDBMICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisKKyAgICAvKiB0cnVuY2F0ZSB0aGUgYm91bmRpbmcgYm94IHRvIGludGVnZXIgcGl4ZWxzICovCisgICAgY2JveC54TWluID0gY2JveC54TWluID4+IDY7CisgICAgY2JveC55TWluID0gY2JveC55TWluID4+IDY7CisgICAgY2JveC54TWF4ID0gKCBjYm94LnhNYXggKyA2MyApID4+IDY7CisgICAgY2JveC55TWF4ID0gKCBjYm94LnlNYXggKyA2MyApID4+IDY7CiAKICAgICAvKiBjb21wdXRlIGNsaXBwaW5nIGJveCAqLwogICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKICAgICB7CiAgICAgICAvKiBjb21wdXRlIGNsaXAgYm94IGZyb20gdGFyZ2V0IHBpeG1hcCAqLwotICAgICAgcmFzLmNsaXBfYm94LnhNaW4gPSAwOwotICAgICAgcmFzLmNsaXBfYm94LnlNaW4gPSAwOwotICAgICAgcmFzLmNsaXBfYm94LnhNYXggPSAoRlRfUG9zKXRhcmdldF9tYXAtPndpZHRoOwotICAgICAgcmFzLmNsaXBfYm94LnlNYXggPSAoRlRfUG9zKXRhcmdldF9tYXAtPnJvd3M7CisgICAgICBjbGlwLnhNaW4gPSAwOworICAgICAgY2xpcC55TWluID0gMDsKKyAgICAgIGNsaXAueE1heCA9IChGVF9Qb3MpdGFyZ2V0X21hcC0+d2lkdGg7CisgICAgICBjbGlwLnlNYXggPSAoRlRfUG9zKXRhcmdldF9tYXAtPnJvd3M7CiAgICAgfQogICAgIGVsc2UgaWYgKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQ0xJUCApCi0gICAgICByYXMuY2xpcF9ib3ggPSBwYXJhbXMtPmNsaXBfYm94OworICAgICAgY2xpcCA9IHBhcmFtcy0+Y2xpcF9ib3g7CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHJhcy5jbGlwX2JveC54TWluID0gLTMyNzY4TDsKLSAgICAgIHJhcy5jbGlwX2JveC55TWluID0gLTMyNzY4TDsKLSAgICAgIHJhcy5jbGlwX2JveC54TWF4ID0gIDMyNzY3TDsKLSAgICAgIHJhcy5jbGlwX2JveC55TWF4ID0gIDMyNzY3TDsKKyAgICAgIGNsaXAueE1pbiA9IC0zMjc2OEw7CisgICAgICBjbGlwLnlNaW4gPSAtMzI3NjhMOworICAgICAgY2xpcC54TWF4ID0gIDMyNzY3TDsKKyAgICAgIGNsaXAueU1heCA9ICAzMjc2N0w7CiAgICAgfQogCi0gICAgZ3JheV9pbml0X2NlbGxzKCBSQVNfVkFSXyBidWZmZXIsIGJ1ZmZlcl9zaXplICk7CisgICAgLyogY2xpcCB0byB0YXJnZXQgYml0bWFwLCBleGl0IGlmIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByYXMubWluX2V4ID0gRlRfTUFYKCBjYm94LnhNaW4sIGNsaXAueE1pbiApOworICAgIHJhcy5taW5fZXkgPSBGVF9NQVgoIGNib3gueU1pbiwgY2xpcC55TWluICk7CisgICAgcmFzLm1heF9leCA9IEZUX01JTiggY2JveC54TWF4LCBjbGlwLnhNYXggKTsKKyAgICByYXMubWF4X2V5ID0gRlRfTUlOKCBjYm94LnlNYXgsIGNsaXAueU1heCApOwogCi0gICAgcmFzLm91dGxpbmUgICAgICAgID0gKm91dGxpbmU7Ci0gICAgcmFzLm51bV9jZWxscyAgICAgID0gMDsKLSAgICByYXMuaW52YWxpZCAgICAgICAgPSAxOwotICAgIHJhcy5iYW5kX3NpemUgICAgICA9IGJhbmRfc2l6ZTsKLSAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOwotICAgIHJhcy5zcGFuX3kgICAgICAgICA9IDA7Ci0KLSAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgKQotICAgIHsKLSAgICAgIHJhcy5yZW5kZXJfc3BhbiAgICAgID0gKEZUX1Jhc3Rlcl9TcGFuX0Z1bmMpcGFyYW1zLT5ncmF5X3NwYW5zOwotICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgPSBwYXJhbXMtPnVzZXI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByYXMudGFyZ2V0ICAgICAgICAgICA9ICp0YXJnZXRfbWFwOwotICAgICAgcmFzLnJlbmRlcl9zcGFuICAgICAgPSAoRlRfUmFzdGVyX1NwYW5fRnVuYylncmF5X3JlbmRlcl9zcGFuOwotICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgPSAmcmFzOwotICAgIH0KKyAgICBpZiAoIHJhcy5tYXhfZXggPD0gcmFzLm1pbl9leCB8fCByYXMubWF4X2V5IDw9IHJhcy5taW5fZXkgKQorICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gZ3JheV9jb252ZXJ0X2dseXBoKCBSQVNfVkFSICk7CiAgIH0KQEAgLTIwMzAsNyArMTk2Myw3IEBACiAgIC8qKioqIFJBU1RFUiBPQkpFQ1QgQ1JFQVRJT046IEluIHN0YW5kLWFsb25lIG1vZGUsIHdlIHNpbXBseSB1c2UgKioqKiovCiAgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RhdGljIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKioqKiovCiAKLSNpZmRlZiBfU1RBTkRBTE9ORV8KKyNpZmRlZiBTVEFOREFMT05FXwogCiAgIHN0YXRpYyBpbnQKICAgZ3JheV9yYXN0ZXJfbmV3KCB2b2lkKiAgICAgICBtZW1vcnksCkBAIC0yMDU1LDcgKzE5ODgsNyBAQAogICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CiAgIH0KIAotI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworI2Vsc2UgLyogIVNUQU5EQUxPTkVfICovCiAKICAgc3RhdGljIGludAogICBncmF5X3Jhc3Rlcl9uZXcoIEZUX01lbW9yeSAgIG1lbW9yeSwKQEAgLTIwODUsMTMgKzIwMTgsMTMgQEAKICAgICBGVF9GUkVFKCByYXN0ZXIgKTsKICAgfQogCi0jZW5kaWYgLyogIV9TVEFOREFMT05FXyAqLworI2VuZGlmIC8qICFTVEFOREFMT05FXyAqLwogCiAKICAgc3RhdGljIHZvaWQKLSAgZ3JheV9yYXN0ZXJfcmVzZXQoIEZUX1Jhc3RlciAgcmFzdGVyLAotICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICBwb29sX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIHBvb2xfc2l6ZSApCisgIGdyYXlfcmFzdGVyX3Jlc2V0KCBGVF9SYXN0ZXIgICAgICAgcmFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIHBvb2xfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBwb29sX3NpemUgKQogICB7CiAgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKICAgICBGVF9VTlVTRUQoIHBvb2xfYmFzZSApOwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdGdyYXlzLmggYi9zcmMvc21vb3RoL2Z0Z3JheXMuaAppbmRleCAxYjU3NjAzLi4yMWMyYmFkIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0Z3JheXMuaAorKysgYi9zcmMvc21vb3RoL2Z0Z3JheXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzbW9vdGggcmVuZGVyZXIgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTUgKzE2LDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdSQVlTX0hfXwotI2RlZmluZSBfX0ZUR1JBWVNfSF9fCisjaWZuZGVmIEZUR1JBWVNfSF8KKyNkZWZpbmUgRlRHUkFZU19IXwogCiAjaWZkZWYgX19jcGx1c3BsdXMKICAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KICNpbmNsdWRlICJmdGltYWdlLmgiCiAjZWxzZQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01Miw3ICs1Miw3IEBACiAgIH0KICNlbmRpZgogCi0jZW5kaWYgLyogX19GVEdSQVlTX0hfXyAqLworI2VuZGlmIC8qIEZUR1JBWVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbWVycnMuaCBiL3NyYy9zbW9vdGgvZnRzbWVycnMuaAppbmRleCBjYzM4YWExLi5hNzU5YjkxIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21lcnJzLmgKKysrIGIvc3JjL3Ntb290aC9mdHNtZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIHNtb290aCByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMywxMiArMjMsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fRlRTTUVSUlNfSF9fCi0jZGVmaW5lIF9fRlRTTUVSUlNfSF9fCisjaWZuZGVmIEZUU01FUlJTX0hfCisjZGVmaW5lIEZUU01FUlJTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgU21vb3RoX0Vycl8KQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgRlRfRVJST1JTX0gKIAotI2VuZGlmIC8qIF9fRlRTTUVSUlNfSF9fICovCisjZW5kaWYgLyogRlRTTUVSUlNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbW9vdGguYyBiL3NyYy9zbW9vdGgvZnRzbW9vdGguYwppbmRleCAzNjIwNTUwLi43OTI3Njc2IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21vb3RoLmMKKysrIGIvc3JjL3Ntb290aC9mdHNtb290aC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFudGktYWxpYXNpbmcgcmVuZGVyZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL2Z0c21vb3RoLmggYi9zcmMvc21vb3RoL2Z0c21vb3RoLmgKaW5kZXggNzY1MDE4Yy4uYzdjMjhjMiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdHNtb290aC5oCisrKyBiL3NyYy9zbW9vdGgvZnRzbW9vdGguaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRTTU9PVEhfSF9fCi0jZGVmaW5lIF9fRlRTTU9PVEhfSF9fCisjaWZuZGVmIEZUU01PT1RIX0hfCisjZGVmaW5lIEZUU01PT1RIX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00Myw3ICs0Myw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRTTU9PVEhfSF9fICovCisjZW5kaWYgLyogRlRTTU9PVEhfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzcGljLmMgYi9zcmMvc21vb3RoL2Z0c3BpYy5jCmluZGV4IDhlNmVkNTcuLjZjMmIyMzIgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzcGljLmMKKysrIGIvc3JjL3Ntb290aC9mdHNwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNwaWMuaCBiL3NyYy9zbW9vdGgvZnRzcGljLmgKaW5kZXggOTliOWYwZS4uZmU3NjE1MiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdHNwaWMuaAorKysgYi9zcmMvc21vb3RoL2Z0c3BpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzbW9vdGggbW9kdWxlLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiwxNCArMTYsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU1BJQ19IX18KLSNkZWZpbmUgX19GVFNQSUNfSF9fCisjaWZuZGVmIEZUU1BJQ19IXworI2RlZmluZSBGVFNQSUNfSF8KKworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAogCiAKIEZUX0JFR0lOX0hFQURFUgogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAotCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICNkZWZpbmUgRlRfR1JBWVNfUkFTVEVSX0dFVCAgZnRfZ3JheXNfcmFzdGVyCkBAIC02OCw3ICs2OSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRTUElDX0hfXyAqLworI2VuZGlmIC8qIEZUU1BJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9zbW9vdGguYyBiL3NyYy9zbW9vdGgvc21vb3RoLmMKaW5kZXggNGNhNDM0NC4uOTdjYTNlNSAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9zbW9vdGguYworKysgYi9zcmMvc21vb3RoL3Ntb290aC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGFudGktYWxpYXNpbmcgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYyBiL3NyYy90cnVldHlwZS90cnVldHlwZS5jCmluZGV4IGY5Mjk0MzcuLjIzZTJlYTAgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90cnVldHlwZS5jCisrKyBiL3NyYy90cnVldHlwZS90cnVldHlwZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFRydWVUeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyBiL3NyYy90cnVldHlwZS90dGRyaXZlci5jCmluZGV4IDA4YjMwYzkuLmI5NmEyMjcgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGRyaXZlci5jCisrKyBiL3NyYy90cnVldHlwZS90dGRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGZvbnQgZHJpdmVyIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02MSwyMyArNjEsNTAgQEAKICAgc3RhdGljIEZUX0Vycm9yCiAgIHR0X3Byb3BlcnR5X3NldCggRlRfTW9kdWxlICAgIG1vZHVsZSwgICAgICAgICAvKiBUVF9Ecml2ZXIgKi8KICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgcHJvcGVydHlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUgKQorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgdmFsdWVfaXNfc3RyaW5nICkKICAgewogICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOwogICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlciltb2R1bGU7CiAKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgRlRfVU5VU0VEKCB2YWx1ZV9pc19zdHJpbmcgKTsKKyNlbmRpZgorCiAKICAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJpbnRlcnByZXRlci12ZXJzaW9uIiApICkKICAgICB7Ci0gICAgICBGVF9VSW50KiAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IChGVF9VSW50Kil2YWx1ZTsKKyAgICAgIEZUX1VJbnQgIGludGVycHJldGVyX3ZlcnNpb247CiAKIAotI2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICAgIGlmICggKmludGVycHJldGVyX3ZlcnNpb24gIT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSApCi0gICAgICAgIGVycm9yID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogIHMgPSAoY29uc3QgY2hhciopdmFsdWU7CisKKworICAgICAgICBpbnRlcnByZXRlcl92ZXJzaW9uID0gKEZUX1VJbnQpZnRfc3RydG9sKCBzLCBOVUxMLCAxMCApOworICAgICAgfQogICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9ICppbnRlcnByZXRlcl92ZXJzaW9uOworICAgICAgeworICAgICAgICBGVF9VSW50KiAgaXYgPSAoRlRfVUludCopdmFsdWU7CisKKworICAgICAgICBpbnRlcnByZXRlcl92ZXJzaW9uID0gKml2OworICAgICAgfQorCisgICAgICBpZiAoIGludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNQorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgICAgICAgIHx8IGludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOAorI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgICAgICAgfHwgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwCisjZW5kaWYKKyAgICAgICAgICkKKyAgICAgICAgZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID0gaW50ZXJwcmV0ZXJfdmVyc2lvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwogCiAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQpAQCAtMTE3LDggKzE0NCw4IEBACiAKICAgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQygKICAgICB0dF9zZXJ2aWNlX3Byb3BlcnRpZXMsCi0gICAgKEZUX1Byb3BlcnRpZXNfU2V0RnVuYyl0dF9wcm9wZXJ0eV9zZXQsCi0gICAgKEZUX1Byb3BlcnRpZXNfR2V0RnVuYyl0dF9wcm9wZXJ0eV9nZXQgKQorICAgIChGVF9Qcm9wZXJ0aWVzX1NldEZ1bmMpdHRfcHJvcGVydHlfc2V0LCAgICAgLyogc2V0X3Byb3BlcnR5ICovCisgICAgKEZUX1Byb3BlcnRpZXNfR2V0RnVuYyl0dF9wcm9wZXJ0eV9nZXQgKSAgICAvKiBnZXRfcHJvcGVydHkgKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTk0LDcgKzIyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICphZHZhbmNlcyApCiAgIHsKICAgICBGVF9VSW50ICBubjsKLSAgICBUVF9GYWNlICBmYWNlICA9IChUVF9GYWNlKSB0dGZhY2U7CisgICAgVFRfRmFjZSAgZmFjZSA9IChUVF9GYWNlKSB0dGZhY2U7CiAKIAogICAgIC8qIFhYWDogVE9ETzogY2hlY2sgZm9yIHNiaXRzICovCkBAIC0yMjgsNiArMjU1LDcgQEAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CiAKKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjYzLDcgKzI5MSw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBTRk5UX1NlcnZpY2UgICAgICBzZm50ICAgID0gKFNGTlRfU2VydmljZSkgdHRmYWNlLT5zZm50OworICAgICAgU0ZOVF9TZXJ2aWNlICAgICAgc2ZudCAgICA9IChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50OwogICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyA9ICZzaXplLT5tZXRyaWNzOwogCiAKQEAgLTI5MSw3ICszMTksNyBAQAogICAgIGlmICggRlRfSEFTX0ZJWEVEX1NJWkVTKCBzaXplLT5mYWNlICkgKQogICAgIHsKICAgICAgIFRUX0ZhY2UgICAgICAgdHRmYWNlID0gKFRUX0ZhY2Upc2l6ZS0+ZmFjZTsKLSAgICAgIFNGTlRfU2VydmljZSAgc2ZudCAgID0gKFNGTlRfU2VydmljZSkgdHRmYWNlLT5zZm50OworICAgICAgU0ZOVF9TZXJ2aWNlICBzZm50ICAgPSAoU0ZOVF9TZXJ2aWNlKXR0ZmFjZS0+c2ZudDsKICAgICAgIEZUX1VMb25nICAgICAgc3RyaWtlX2luZGV4OwogCiAKQEAgLTMxMSw2ICszMzksMjUgQEAKICAgICB7CiAgICAgICBlcnJvciA9IHR0X3NpemVfcmVzZXQoIHR0c2l6ZSApOwogICAgICAgdHRzaXplLT5yb290Lm1ldHJpY3MgPSB0dHNpemUtPm1ldHJpY3M7CisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyAgICAgIC8qIGZvciB0aGUgYE1QUycgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gd2UgbmVlZCB0aGUgcG9pbnQgc2l6ZSAqLworICAgICAgeworICAgICAgICBGVF9VSW50ICByZXNvbHV0aW9uID0gdHRzaXplLT5tZXRyaWNzLnhfcHBlbSA+IHR0c2l6ZS0+bWV0cmljcy55X3BwZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZXEtPmhvcmlSZXNvbHV0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVxLT52ZXJ0UmVzb2x1dGlvbjsKKworCisgICAgICAgIC8qIGlmIHdlIGRvbid0IGhhdmUgYSByZXNvbHV0aW9uIHZhbHVlLCBhc3N1bWUgNzJkcGkgKi8KKyAgICAgICAgaWYgKCByZXEtPnR5cGUgPT0gRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTIHx8CisgICAgICAgICAgICAgIXJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgcmVzb2x1dGlvbiA9IDcyOworCisgICAgICAgIHR0c2l6ZS0+cG9pbnRfc2l6ZSA9IEZUX011bERpdiggdHRzaXplLT50dG1ldHJpY3MucHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24gKTsKKyAgICAgIH0KKyNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBlcnJvcjsKQEAgLTQxNywyMiArNDY0LDE5IEBACiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogICBGVF9ERUZJTkVfU0VSVklDRV9NVUxUSU1BU1RFUlNSRUMoCiAgICAgdHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzLAotICAgIChGVF9HZXRfTU1fRnVuYykgICAgICAgIE5VTEwsCi0gICAgKEZUX1NldF9NTV9EZXNpZ25fRnVuYykgTlVMTCwKLSAgICAoRlRfU2V0X01NX0JsZW5kX0Z1bmMpICBUVF9TZXRfTU1fQmxlbmQsCi0gICAgKEZUX0dldF9NTV9WYXJfRnVuYykgICAgVFRfR2V0X01NX1ZhciwKLSAgICAoRlRfU2V0X1Zhcl9EZXNpZ25fRnVuYylUVF9TZXRfVmFyX0Rlc2lnbiApCisgICAgKEZUX0dldF9NTV9GdW5jKSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLyogZ2V0X21tICAgICAgICAgKi8KKyAgICAoRlRfU2V0X01NX0Rlc2lnbl9GdW5jKSBOVUxMLCAgICAgICAgICAgICAgICAgICAvKiBzZXRfbW1fZGVzaWduICAqLworICAgIChGVF9TZXRfTU1fQmxlbmRfRnVuYykgIFRUX1NldF9NTV9CbGVuZCwgICAgICAgIC8qIHNldF9tbV9ibGVuZCAgICovCisgICAgKEZUX0dldF9NTV9WYXJfRnVuYykgICAgVFRfR2V0X01NX1ZhciwgICAgICAgICAgLyogZ2V0X21tX3ZhciAgICAgKi8KKyAgICAoRlRfU2V0X1Zhcl9EZXNpZ25fRnVuYylUVF9TZXRfVmFyX0Rlc2lnbiApICAgICAvKiBzZXRfdmFyX2Rlc2lnbiAqLwogI2VuZGlmCiAKKwogICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9UcnVlVHlwZUVuZ2luZVJlYyAgdHRfc2VydmljZV90cnVldHlwZV9lbmdpbmUgPQogICB7CiAjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1VOUEFURU5URUQKLSNlbHNlCiAgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfUEFURU5URUQKLSNlbmRpZgogCiAjZWxzZSAvKiAhVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCiAKQEAgLTQ0MSw5ICs0ODUsMTEgQEAKICNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KICAgfTsKIAorCiAgIEZUX0RFRklORV9TRVJWSUNFX1RUR0xZRlJFQygKICAgICB0dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYsCi0gICAgKFRUX0dseWZfR2V0TG9jYXRpb25GdW5jKXR0X2ZhY2VfZ2V0X2xvY2F0aW9uICkKKyAgICAoVFRfR2x5Zl9HZXRMb2NhdGlvbkZ1bmMpdHRfZmFjZV9nZXRfbG9jYXRpb24gKSAgICAvKiBnZXRfbG9jYXRpb24gKi8KKwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM1KApAQCAtNTM0LDMxICs1ODAsMzEgQEAKICAgICAgIDB4MTAwMDBMLCAgICAgICAgLyogZHJpdmVyIHZlcnNpb24gPT0gMS4wICAgICAgICAgICAgICAgICAqLwogICAgICAgMHgyMDAwMEwsICAgICAgICAvKiBkcml2ZXIgcmVxdWlyZXMgRnJlZVR5cGUgMi4wIG9yIGFib3ZlICovCiAKLSAgICAgICh2b2lkKikwLCAgICAgICAgLyogZHJpdmVyIHNwZWNpZmljIGludGVyZmFjZSAqLworICAgICAgMCwgICAgLyogbW9kdWxlLXNwZWNpZmljIGludGVyZmFjZSAqLwogCi0gICAgICB0dF9kcml2ZXJfaW5pdCwKLSAgICAgIHR0X2RyaXZlcl9kb25lLAotICAgICAgdHRfZ2V0X2ludGVyZmFjZSwKKyAgICAgIHR0X2RyaXZlcl9pbml0LCAgICAgICAgICAgLyogRlRfTW9kdWxlX0NvbnN0cnVjdG9yICBtb2R1bGVfaW5pdCAgICovCisgICAgICB0dF9kcml2ZXJfZG9uZSwgICAgICAgICAgIC8qIEZUX01vZHVsZV9EZXN0cnVjdG9yICAgbW9kdWxlX2RvbmUgICAqLworICAgICAgdHRfZ2V0X2ludGVyZmFjZSwgICAgICAgICAvKiBGVF9Nb2R1bGVfUmVxdWVzdGVyICAgIGdldF9pbnRlcmZhY2UgKi8KIAogICAgIHNpemVvZiAoIFRUX0ZhY2VSZWMgKSwKICAgICBzaXplb2YgKCBUVF9TaXplUmVjICksCiAgICAgc2l6ZW9mICggRlRfR2x5cGhTbG90UmVjICksCiAKLSAgICB0dF9mYWNlX2luaXQsCi0gICAgdHRfZmFjZV9kb25lLAotICAgIHR0X3NpemVfaW5pdCwKLSAgICB0dF9zaXplX2RvbmUsCi0gICAgdHRfc2xvdF9pbml0LAotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9TbG90X0RvbmVGdW5jICovCisgICAgdHRfZmFjZV9pbml0LCAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfSW5pdEZ1bmMgIGluaXRfZmFjZSAqLworICAgIHR0X2ZhY2VfZG9uZSwgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0RvbmVGdW5jICBkb25lX2ZhY2UgKi8KKyAgICB0dF9zaXplX2luaXQsICAgICAgICAgICAgICAgLyogRlRfU2l6ZV9Jbml0RnVuYyAgaW5pdF9zaXplICovCisgICAgdHRfc2l6ZV9kb25lLCAgICAgICAgICAgICAgIC8qIEZUX1NpemVfRG9uZUZ1bmMgIGRvbmVfc2l6ZSAqLworICAgIHR0X3Nsb3RfaW5pdCwgICAgICAgICAgICAgICAvKiBGVF9TbG90X0luaXRGdW5jICBpbml0X3Nsb3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfU2xvdF9Eb25lRnVuYyAgZG9uZV9zbG90ICovCiAKLSAgICB0dF9nbHlwaF9sb2FkLAorICAgIHR0X2dseXBoX2xvYWQsICAgICAgICAgICAgICAvKiBGVF9TbG90X0xvYWRGdW5jICBsb2FkX2dseXBoICovCiAKLSAgICB0dF9nZXRfa2VybmluZywKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfRmFjZV9BdHRhY2hGdW5jICovCi0gICAgdHRfZ2V0X2FkdmFuY2VzLAorICAgIHR0X2dldF9rZXJuaW5nLCAgICAgICAgICAgICAvKiBGVF9GYWNlX0dldEtlcm5pbmdGdW5jICAgZ2V0X2tlcm5pbmcgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfQXR0YWNoRnVuYyAgICAgICBhdHRhY2hfZmlsZSAgKi8KKyAgICB0dF9nZXRfYWR2YW5jZXMsICAgICAgICAgICAgLyogRlRfRmFjZV9HZXRBZHZhbmNlc0Z1bmMgIGdldF9hZHZhbmNlcyAqLwogCi0gICAgdHRfc2l6ZV9yZXF1ZXN0LAotICAgIFRUX1NJWkVfU0VMRUNUCisgICAgdHRfc2l6ZV9yZXF1ZXN0LCAgICAgICAgICAgIC8qIEZUX1NpemVfUmVxdWVzdEZ1bmMgIHJlcXVlc3Rfc2l6ZSAqLworICAgIFRUX1NJWkVfU0VMRUNUICAgICAgICAgICAgICAvKiBGVF9TaXplX1NlbGVjdEZ1bmMgICBzZWxlY3Rfc2l6ZSAgKi8KICAgKQogCiAKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGRyaXZlci5oIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKaW5kZXggNmNhY2Q2MC4uNzQzOTJiYiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBUcnVlVHlwZSBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RURFJJVkVSX0hfXwotI2RlZmluZSBfX1RURFJJVkVSX0hfXworI2lmbmRlZiBUVERSSVZFUl9IXworI2RlZmluZSBUVERSSVZFUl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzIsNyArMzIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RURFJJVkVSX0hfXyAqLworI2VuZGlmIC8qIFRURFJJVkVSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCBiL3NyYy90cnVldHlwZS90dGVycm9ycy5oCmluZGV4IGJhMzJjZjcuLjg5NTk4OWYgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGVycm9ycy5oCisrKyBiL3NyYy90cnVldHlwZS90dGVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMywxMiArMjMsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fVFRFUlJPUlNfSF9fCi0jZGVmaW5lIF9fVFRFUlJPUlNfSF9fCisjaWZuZGVmIFRURVJST1JTX0hfCisjZGVmaW5lIFRURVJST1JTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgVFRfRXJyXwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19UVEVSUk9SU19IX18gKi8KKyNlbmRpZiAvKiBUVEVSUk9SU19IXyAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyBiL3NyYy90cnVldHlwZS90dGdsb2FkLmMKaW5kZXggZTFhY2Q2OS4uMmQwYjI5ZiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKICNpbmNsdWRlIEZUX09VVExJTkVfSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfRFJJVkVSX0gKKyNpbmNsdWRlIEZUX0xJU1RfSAogCiAjaW5jbHVkZSAidHRnbG9hZC5oIgogI2luY2x1ZGUgInR0cGxvYWQuaCIKQEAgLTEyMCw4ICsxMjEsOCBAQAogICB0dF9nZXRfbWV0cmljcyggVFRfTG9hZGVyICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4ICkKICAgewotICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gbG9hZGVyLT5mYWNlOworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAjZW5kaWYKIApAQCAtMTUyLDcgKzE1Myw3IEBACiAgICAgbG9hZGVyLT50b3BfYmVhcmluZyAgPSB0b3BfYmVhcmluZzsKICAgICBsb2FkZXItPnZhZHZhbmNlICAgICA9IGFkdmFuY2VfaGVpZ2h0OwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICYmCiAgICAgICAgICBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgewpAQCAtMTY0LDcgKzE2NSw3IEBACiAgICAgICAvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlIG9uIGFuZCBvZmYuICAgICAgICAgICAgICAgICAgICovCiAgICAgICBzcGhfc2V0X3R3ZWFrcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwogICAgIH0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgaWYgKCAhbG9hZGVyLT5saW5lYXJfZGVmICkKICAgICB7CkBAIC0xODIsNyArMTgzLDcgQEAKICAgdHRfZ2V0X21ldHJpY3NfaW5jcl9vdmVycmlkZXMoIFRUX0xvYWRlciAgbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCApCiAgIHsKLSAgICBUVF9GYWNlICBmYWNlID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOworICAgIFRUX0ZhY2UgIGZhY2UgPSBsb2FkZXItPmZhY2U7CiAKICAgICBGVF9TaG9ydCAgIGxlZnRfYmVhcmluZyA9IDAsIHRvcF9iZWFyaW5nID0gMDsKICAgICBGVF9VU2hvcnQgIGFkdmFuY2Vfd2lkdGggPSAwLCBhZHZhbmNlX2hlaWdodCA9IDA7CkBAIC0yNTAsMjkgKzI1MSw2IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUcmFuc2xhdGVzIGFuIGFycmF5IG9mIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIHRyYW5zbGF0ZV9hcnJheSggRlRfVUludCAgICAgbiwKLSAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBjb29yZHMsCi0gICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgZGVsdGFfeCwKLSAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICBkZWx0YV95ICkKLSAgewotICAgIEZUX1VJbnQgIGs7Ci0KLQotICAgIGlmICggZGVsdGFfeCApCi0gICAgICBmb3IgKCBrID0gMDsgayA8IG47IGsrKyApCi0gICAgICAgIGNvb3Jkc1trXS54ICs9IGRlbHRhX3g7Ci0KLSAgICBpZiAoIGRlbHRhX3kgKQotICAgICAgZm9yICggayA9IDA7IGsgPCBuOyBrKysgKQotICAgICAgICBjb29yZHNba10ueSArPSBkZWx0YV95OwotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IGRlZmF1bHQgd2l0aCBUcnVlVHlwZSBmb250cy4gICAgICAqLwogICAvKiBIb3dldmVyLCB0aGV5IGNhbiBiZSByZXBsYWNlZCBieSBhbHRlcm5hdGl2ZXMgaWYgd2UgbmVlZCB0byBzdXBwb3J0ICAgKi8KICAgLyogVHJ1ZVR5cGUtY29tcHJlc3NlZCBmb3JtYXRzIChsaWtlIE1pY3JvVHlwZSkgaW4gdGhlIGZ1dHVyZS4gICAgICAgICAgICovCkBAIC00NDksNyArNDI3LDggQEAKICAgICAgIGxvYWQtPmdseXBoLT5jb250cm9sX2xlbiAgPSBuX2luczsKICAgICAgIGxvYWQtPmdseXBoLT5jb250cm9sX2RhdGEgPSBsb2FkLT5leGVjLT5nbHlwaEluczsKIAotICAgICAgRlRfTUVNX0NPUFkoIGxvYWQtPmV4ZWMtPmdseXBoSW5zLCBwLCAoRlRfTG9uZyluX2lucyApOworICAgICAgaWYgKCBuX2lucyApCisgICAgICAgIEZUX01FTV9DT1BZKCBsb2FkLT5leGVjLT5nbHlwaElucywgcCwgKEZUX0xvbmcpbl9pbnMgKTsKICAgICB9CiAKICNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KQEAgLTY1NiwyMCArNjM1LDIwIEBACiAKICAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgV0VfSEFWRV9BX1NDQUxFICkKICAgICAgIHsKLSAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7CisgICAgICAgIHh4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CiAgICAgICAgIHl5ID0geHg7CiAgICAgICB9CiAgICAgICBlbHNlIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgV0VfSEFWRV9BTl9YWV9TQ0FMRSApCiAgICAgICB7Ci0gICAgICAgIHh4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSA8PCAyOwotICAgICAgICB5eSA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKKyAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApICogNDsKKyAgICAgICAgeXkgPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApICogNDsKICAgICAgIH0KICAgICAgIGVsc2UgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBXRV9IQVZFX0FfMlgyICkKICAgICAgIHsKLSAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7Ci0gICAgICAgIHl4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSA8PCAyOwotICAgICAgICB4eSA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKLSAgICAgICAgeXkgPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7CisgICAgICAgIHh4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CisgICAgICAgIHl4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CisgICAgICAgIHh5ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CisgICAgICAgIHl5ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CiAgICAgICB9CiAKICAgICAgIHN1YmdseXBoLT50cmFuc2Zvcm0ueHggPSB4eDsKQEAgLTY4Miw2ICs2NjEsNyBAQAogICAgIH0gd2hpbGUgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBNT1JFX0NPTVBPTkVOVFMgKTsKIAogICAgIGdsb2FkZXItPmN1cnJlbnQubnVtX3N1YmdseXBocyA9IG51bV9zdWJnbHlwaHM7CisgICAgRlRfVFJBQ0U1KCggIiAgJWQgY29tcG9uZW50c1xuIiwgbnVtX3N1YmdseXBocyApKTsKIAogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgogCkBAIC03NTMsOCArNzMzLDkgQEAKICAgVFRfSGludF9HbHlwaCggVFRfTG9hZGVyICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgaXNfY29tcG9zaXRlICkKICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOworI2lmIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgfHwgXAorICAgIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBUVF9GYWNlICAgIGZhY2UgICA9IGxvYWRlci0+ZmFjZTsKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKICNlbmRpZgogCkBAIC03ODEsNyArNzYyLDcgQEAKICAgICAgIEZUX0FSUkFZX0NPUFkoIHpvbmUtPm9yZywgem9uZS0+Y3VyLCB6b25lLT5uX3BvaW50cyApOwogCiAgICAgLyogUmVzZXQgZ3JhcGhpY3Mgc3RhdGUuICovCi0gICAgbG9hZGVyLT5leGVjLT5HUyA9ICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5HUzsKKyAgICBsb2FkZXItPmV4ZWMtPkdTID0gbG9hZGVyLT5zaXplLT5HUzsKIAogICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEISBIaW50aW5nIGluc3RydWN0aW9ucyBvZiBhIGNvbXBvc2l0ZSBnbHlwaCAqLwogICAgIC8qICAgICAgY29tcGxldGVseSByZWZlciB0byB0aGUgKGFscmVhZHkpIGhpbnRlZCBzdWJnbHlwaHMuICAgICAqLwpAQCAtNzk0LDEwICs3NzUsOCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnhfc2NhbGUgPQotICAgICAgICAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy54X3NjYWxlOwotICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnlfc2NhbGUgPQotICAgICAgICAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnhfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy55X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnlfc2NhbGU7CiAgICAgfQogI2VuZGlmCiAKQEAgLTgzOCwxMyArODE3LDIzIEBACiAKICNlbmRpZgogCi0gICAgLyogc2F2ZSBnbHlwaCBwaGFudG9tIHBvaW50cyAqLwotICAgIGxvYWRlci0+cHAxID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gNF07Ci0gICAgbG9hZGVyLT5wcDIgPSB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAzXTsKLSAgICBsb2FkZXItPnBwMyA9IHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDJdOwotICAgIGxvYWRlci0+cHA0ID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMV07CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAvKiBTYXZlIHBvc3NpYmx5IG1vZGlmaWVkIGdseXBoIHBoYW50b20gcG9pbnRzIHVubGVzcyBpbiB2NDAgYmFja3dhcmRzICovCisgICAgLyogY29tcGF0aWJpbGl0eSBtb2RlLCB3aGVyZSBubyBtb3ZlbWVudCBvbiB0aGUgeCBheGlzIG1lYW5zIG5vIHJlYXNvbiAqLworICAgIC8qIHRvIGNoYW5nZSBiZWFyaW5ncyBvciBhZHZhbmNlIHdpZHRocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoICEoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICYmCisgICAgICAgICAgICAhbG9hZGVyLT5leGVjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApICkKKyAgICB7CisjZW5kaWYKKyAgICAgIGxvYWRlci0+cHAxID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gNF07CisgICAgICBsb2FkZXItPnBwMiA9IHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDNdOworICAgICAgbG9hZGVyLT5wcDMgPSB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAyXTsKKyAgICAgIGxvYWRlci0+cHA0ID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMV07CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICB9CisjZW5kaWYKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgewogICAgICAgaWYgKCBsb2FkZXItPmV4ZWMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ERUVNQk9MREVOICkKQEAgLTg1Myw3ICs4NDIsNyBAQAogICAgICAgZWxzZSBpZiAoIGxvYWRlci0+ZXhlYy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0VNQk9MREVOICkKICAgICAgICAgRlRfT3V0bGluZV9FbWJvbGRlblhZKCAmbG9hZGVyLT5nbG9hZGVyLT5jdXJyZW50Lm91dGxpbmUsIDI0LCAwICk7CiAgICAgfQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC04OTcsMTMgKzg4NiwxMyBAQAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCi0gICAgaWYgKCAoKFRUX0ZhY2UpbG9hZGVyLT5mYWNlKS0+ZG9ibGVuZCApCisgICAgaWYgKCBsb2FkZXItPmZhY2UtPmRvYmxlbmQgKQogICAgIHsKICAgICAgIC8qIERlbHRhcyBhcHBseSB0byB0aGUgdW5zY2FsZWQgZGF0YS4gKi8KLSAgICAgIGVycm9yID0gVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMoIChUVF9GYWNlKShsb2FkZXItPmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+Z2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCluX3BvaW50cyApOworICAgICAgZXJyb3IgPSBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyggbG9hZGVyLT5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5nbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCluX3BvaW50cyApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CkBAIC05MTksOCArOTA4LDggQEAKICAgICB9CiAKICAgICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBUVF9GYWNlICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgVFRfRmFjZSAgICBmYWNlICAgPSBsb2FkZXItPmZhY2U7CiAgICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKIAogICAgICAgRlRfU3RyaW5nKiAgZmFtaWx5ICAgICAgICAgPSBmYWNlLT5yb290LmZhbWlseV9uYW1lOwpAQCAtOTM4LDcgKzkyNyw3IEBACiAgICAgICBGVF9Cb29sICBkb19zY2FsZSA9IEZBTFNFOwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogCiAgICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKICAgICAgIHsKQEAgLTk1Myw5ICs5NDIsOSBAQAogICAgICAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgfHwKICAgICAgICAgICAgICB4X3NjYWxlX2ZhY3RvciAhPSAxMDAwICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgewotICAgICAgICAgIHhfc2NhbGUgPSBGVF9NdWxEaXYoICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5tZXRyaWNzLnhfc2NhbGUsCisgICAgICAgICAgeF9zY2FsZSA9IEZUX011bERpdiggbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpeF9zY2FsZV9mYWN0b3IsIDEwMDAgKTsKLSAgICAgICAgICB5X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueV9zY2FsZTsKKyAgICAgICAgICB5X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnlfc2NhbGU7CiAKICAgICAgICAgICAvKiBjb21wZW5zYXRlIGZvciBhbnkgc2NhbGluZyBieSBkZS9lbWJvbGRlbmluZzsgKi8KICAgICAgICAgICAvKiB0aGUgYW1vdW50IHdhcyBkZXRlcm1pbmVkIHZpYSBleHBlcmltZW50YXRpb24gKi8KQEAgLTk2OSwxNCArOTU4LDE0IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICB7CiAgICAgICAgIC8qIHNjYWxlIHRoZSBnbHlwaCAqLwogICAgICAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgeF9zY2FsZSA9ICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5tZXRyaWNzLnhfc2NhbGU7Ci0gICAgICAgICAgeV9zY2FsZSA9ICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5tZXRyaWNzLnlfc2NhbGU7CisgICAgICAgICAgeF9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3NjYWxlOworICAgICAgICAgIHlfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueV9zY2FsZTsKIAogICAgICAgICAgIGRvX3NjYWxlID0gVFJVRTsKICAgICAgICAgfQpAQCAtMTAyMywzMCArMTAxMiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBzdGFydF9wb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtX2Jhc2VfcG9pbnRzICkKICAgewotICAgIEZUX0dseXBoTG9hZGVyICBnbG9hZGVyICAgID0gbG9hZGVyLT5nbG9hZGVyOwotICAgIEZUX1ZlY3RvciogICAgICBiYXNlX3ZlYyAgID0gZ2xvYWRlci0+YmFzZS5vdXRsaW5lLnBvaW50czsKLSAgICBGVF9VSW50ICAgICAgICAgbnVtX3BvaW50cyA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50czsKKyAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciA9IGxvYWRlci0+Z2xvYWRlcjsKKyAgICBGVF9PdXRsaW5lICAgICAgY3VycmVudDsKICAgICBGVF9Cb29sICAgICAgICAgaGF2ZV9zY2FsZTsKICAgICBGVF9Qb3MgICAgICAgICAgeCwgeTsKIAogCisgICAgY3VycmVudC5wb2ludHMgICA9IGdsb2FkZXItPmJhc2Uub3V0bGluZS5wb2ludHMgKworICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9iYXNlX3BvaW50czsKKyAgICBjdXJyZW50Lm5fcG9pbnRzID0gZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQpbnVtX2Jhc2VfcG9pbnRzOworCiAgICAgaGF2ZV9zY2FsZSA9IEZUX0JPT0woIHN1YmdseXBoLT5mbGFncyAmICggV0VfSEFWRV9BX1NDQUxFICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VfSEFWRV9BTl9YWV9TQ0FMRSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VfSEFWRV9BXzJYMiAgICAgICApICk7CiAKICAgICAvKiBwZXJmb3JtIHRoZSB0cmFuc2Zvcm0gcmVxdWlyZWQgZm9yIHRoaXMgc3ViZ2x5cGggKi8KICAgICBpZiAoIGhhdmVfc2NhbGUgKQotICAgIHsKLSAgICAgIEZUX1VJbnQgIGk7Ci0KLQotICAgICAgZm9yICggaSA9IG51bV9iYXNlX3BvaW50czsgaSA8IG51bV9wb2ludHM7IGkrKyApCi0gICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oIGJhc2VfdmVjICsgaSwgJnN1YmdseXBoLT50cmFuc2Zvcm0gKTsKLSAgICB9CisgICAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggJmN1cnJlbnQsICZzdWJnbHlwaC0+dHJhbnNmb3JtICk7CiAKICAgICAvKiBnZXQgb2Zmc2V0ICovCiAgICAgaWYgKCAhKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMgKSApCiAgICAgeworICAgICAgRlRfVUludCAgICAgbnVtX3BvaW50cyA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50czsKICAgICAgIEZUX1VJbnQgICAgIGsgPSAoRlRfVUludClzdWJnbHlwaC0+YXJnMTsKICAgICAgIEZUX1VJbnQgICAgIGwgPSAoRlRfVUludClzdWJnbHlwaC0+YXJnMjsKICAgICAgIEZUX1ZlY3RvciogIHAxOwpAQCAtMTEwMSw3ICsxMDg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtc3ViZ2x5cGgtPnRyYW5zZm9ybS55eDsKICAgICAgICAgaW50ICBjID0gc3ViZ2x5cGgtPnRyYW5zZm9ybS54eSA+IDAgPyAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1zdWJnbHlwaC0+dHJhbnNmb3JtLnh5OwotICAgICAgICBpbnQgIGQgPSBzdWJnbHlwaC0+dHJhbnNmb3JtLnl5ID4gMCA/IHN1YmdseXBoLT50cmFuc2Zvcm0ueXkKKyAgICAgICAgaW50ICBkID0gc3ViZ2x5cGgtPnRyYW5zZm9ybS55eSA+IDAgPyAgc3ViZ2x5cGgtPnRyYW5zZm9ybS55eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1zdWJnbHlwaC0+dHJhbnNmb3JtLnl5OwogICAgICAgICBpbnQgIG0gPSBhID4gYiA/IGEgOiBiOwogICAgICAgICBpbnQgIG4gPSBjID4gZCA/IGMgOiBkOwpAQCAtMTEzNSw4ICsxMTIzLDggQEAKIAogICAgICAgaWYgKCAhKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgKQogICAgICAgewotICAgICAgICBGVF9GaXhlZCAgeF9zY2FsZSA9ICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5tZXRyaWNzLnhfc2NhbGU7Ci0gICAgICAgIEZUX0ZpeGVkICB5X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueV9zY2FsZTsKKyAgICAgICAgRlRfRml4ZWQgIHhfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgICAgRlRfRml4ZWQgIHlfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueV9zY2FsZTsKIAogCiAgICAgICAgIHggPSBGVF9NdWxGaXgoIHgsIHhfc2NhbGUgKTsKQEAgLTExNTEsOSArMTEzOSw3IEBACiAgICAgfQogCiAgICAgaWYgKCB4IHx8IHkgKQotICAgICAgdHJhbnNsYXRlX2FycmF5KCBudW1fcG9pbnRzIC0gbnVtX2Jhc2VfcG9pbnRzLAotICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3ZlYyArIG51bV9iYXNlX3BvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgeCwgeSApOworICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoICZjdXJyZW50LCB4LCB5ICk7CiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC0xMjE1LDcgKzEyMDEsNyBAQAogICAgICAgRlRfVFJBQ0U1KCggIiAgSW5zdHJ1Y3Rpb25zIHNpemUgPSAlZFxuIiwgbl9pbnMgKSk7CiAKICAgICAgIC8qIGNoZWNrIGl0ICovCi0gICAgICBtYXhfaW5zID0gKChUVF9GYWNlKWxvYWRlci0+ZmFjZSktPm1heF9wcm9maWxlLm1heFNpemVPZkluc3RydWN0aW9uczsKKyAgICAgIG1heF9pbnMgPSBsb2FkZXItPmZhY2UtPm1heF9wcm9maWxlLm1heFNpemVPZkluc3RydWN0aW9uczsKICAgICAgIGlmICggbl9pbnMgPiBtYXhfaW5zICkKICAgICAgIHsKICAgICAgICAgLyogZG9uJ3QgdHJ1c3QgYG1heFNpemVPZkluc3RydWN0aW9ucyc7ICovCkBAIC0xMzQ5LDQ5ICsxMzM1LDcxIEBACiAgICAqICgzKSBmb3IgZXZlcnl0aGluZyBlbHNlLgogICAgKgogICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgdHRfbG9hZGVyX3NldF9wcCggVFRfTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfQm9vbCAgc3VicGl4ZWxfaGludGluZyA9IDA7CisgICAgRlRfQm9vbCAgZ3JheXNjYWxlICAgICAgICA9IDA7CisgICAgRlRfQm9vbCAgdXNlX2F3XzIgICAgICAgICA9IDA7CisKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBUVF9Ecml2ZXIgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggbG9hZGVyLT5mYWNlICk7CisjZW5kaWYKIAotI2RlZmluZSBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgc3VicGl4ZWxfaGludGluZ18gPSBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci0+ZXhlYy0+c3VicGl4ZWxfaGludGluZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgZ3JheXNjYWxlXyAgICAgICAgPSBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci0+ZXhlYy0+Z3JheXNjYWxlICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgdXNlX2F3XzJfICAgICAgICAgPSAoRlRfQm9vbCkoIHN1YnBpeGVsX2hpbnRpbmdfICYmICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmF5c2NhbGVfICAgICAgICApOyAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDEueCA9IChsb2FkZXIpLT5iYm94LnhNaW4gLSAobG9hZGVyKS0+bGVmdF9iZWFyaW5nOyBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHAxLnkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMi54ID0gKGxvYWRlciktPnBwMS54ICsgKGxvYWRlciktPmFkdmFuY2U7ICAgICAgICAgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDIueSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMy54ID0gdXNlX2F3XzJfID8gKGxvYWRlciktPmFkdmFuY2UgLyAyIDogMDsgICAgICAgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDMueSA9IChsb2FkZXIpLT5iYm94LnlNYXggKyAobG9hZGVyKS0+dG9wX2JlYXJpbmc7ICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHA0LnggPSB1c2VfYXdfMl8gPyAobG9hZGVyKS0+YWR2YW5jZSAvIDIgOiAwOyAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwNC55ID0gKGxvYWRlciktPnBwMy55IC0gKGxvYWRlciktPnZhZHZhbmNlOyAgICAgICAgIFwKLSAgICAgICAgICB9IHdoaWxlICggMCApCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKKyAgICB7CisgICAgICBzdWJwaXhlbF9oaW50aW5nID0gbG9hZGVyLT5leGVjID8gbG9hZGVyLT5leGVjLT5zdWJwaXhlbF9oaW50aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgIGdyYXlzY2FsZSAgICAgICAgPSBsb2FkZXItPmV4ZWMgPyBsb2FkZXItPmV4ZWMtPmdyYXlzY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgfQorI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICkKKyAgICB7CisgICAgICBzdWJwaXhlbF9oaW50aW5nID0gbG9hZGVyLT5leGVjID8gbG9hZGVyLT5leGVjLT5zdWJwaXhlbF9oaW50aW5nX2xlYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOworICAgICAgZ3JheXNjYWxlICAgICAgICA9IGxvYWRlci0+ZXhlYyA/IGxvYWRlci0+ZXhlYy0+Z3JheXNjYWxlX2NsZWFydHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgfQorI2VuZGlmCiAKLSNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyAgICB1c2VfYXdfMiA9IChGVF9Cb29sKSggc3VicGl4ZWxfaGludGluZyAmJiBncmF5c2NhbGUgKTsKIAotI2RlZmluZSBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMS54ID0gKGxvYWRlciktPmJib3gueE1pbiAtIChsb2FkZXIpLT5sZWZ0X2JlYXJpbmc7IFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDEueSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHAyLnggPSAobG9hZGVyKS0+cHAxLnggKyAobG9hZGVyKS0+YWR2YW5jZTsgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMi55ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHAzLnggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMy55ID0gKGxvYWRlciktPmJib3gueU1heCArIChsb2FkZXIpLT50b3BfYmVhcmluZzsgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDQueCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHA0LnkgPSAobG9hZGVyKS0+cHAzLnkgLSAobG9hZGVyKS0+dmFkdmFuY2U7ICAgICAgICAgXAotICAgICAgICAgIH0gd2hpbGUgKCAwICkKKyAgICBsb2FkZXItPnBwMS54ID0gbG9hZGVyLT5iYm94LnhNaW4gLSBsb2FkZXItPmxlZnRfYmVhcmluZzsKKyAgICBsb2FkZXItPnBwMS55ID0gMDsKKyAgICBsb2FkZXItPnBwMi54ID0gbG9hZGVyLT5wcDEueCArIGxvYWRlci0+YWR2YW5jZTsKKyAgICBsb2FkZXItPnBwMi55ID0gMDsKIAotI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyAgICBsb2FkZXItPnBwMy54ID0gdXNlX2F3XzIgPyBsb2FkZXItPmFkdmFuY2UgLyAyIDogMDsKKyAgICBsb2FkZXItPnBwMy55ID0gbG9hZGVyLT5iYm94LnlNYXggKyBsb2FkZXItPnRvcF9iZWFyaW5nOworICAgIGxvYWRlci0+cHA0LnggPSB1c2VfYXdfMiA/IGxvYWRlci0+YWR2YW5jZSAvIDIgOiAwOworICAgIGxvYWRlci0+cHA0LnkgPSBsb2FkZXItPnBwMy55IC0gbG9hZGVyLT52YWR2YW5jZTsKKyAgfQorCisKKyAgLyogYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIHJldHJpZXZlIGktdGggbm9kZSBmcm9tIGdpdmVuIEZUX0xpc3QgKi8KKyAgc3RhdGljIEZUX0xpc3ROb2RlCisgIGZ0X2xpc3RfZ2V0X25vZGVfYXQoIEZUX0xpc3QgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluZGV4ICkKKyAgeworICAgIEZUX0xpc3ROb2RlICBjdXI7CisKKworICAgIGlmICggIWxpc3QgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKCBjdXIgPSBsaXN0LT5oZWFkOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCApCisgICAgeworICAgICAgaWYgKCAhaW5kZXggKQorICAgICAgICByZXR1cm4gY3VyOworCisgICAgICBpbmRleC0tOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworICB9CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0MTIsNyArMTQyMCw3IEBACiAgICAgRlRfRXJyb3IgICAgICAgIGVycm9yICAgICAgICA9IEZUX0Vycl9PazsKICAgICBGVF9GaXhlZCAgICAgICAgeF9zY2FsZSwgeV9zY2FsZTsKICAgICBGVF9VTG9uZyAgICAgICAgb2Zmc2V0OwotICAgIFRUX0ZhY2UgICAgICAgICBmYWNlICAgICAgICAgPSAoVFRfRmFjZSlsb2FkZXItPmZhY2U7CisgICAgVFRfRmFjZSAgICAgICAgIGZhY2UgICAgICAgICA9IGxvYWRlci0+ZmFjZTsKICAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciAgICAgID0gbG9hZGVyLT5nbG9hZGVyOwogICAgIEZUX0Jvb2wgICAgICAgICBvcGVuZWRfZnJhbWUgPSAwOwogCkBAIC0xNDIzLDEzICsxNDMxLDE3IEBACiAjZW5kaWYKIAogCi0gICAgLyogc29tZSBmb250cyBoYXZlIGFuIGluY29ycmVjdCB2YWx1ZSBvZiBgbWF4Q29tcG9uZW50RGVwdGgnLCAqLwotICAgIC8qIHRodXMgd2UgYWxsb3cgZGVwdGggMSB0byBjYXRjaCB0aGUgbWFqb3JpdHkgb2YgdGhlbSAgICAgICAgKi8KLSAgICBpZiAoIHJlY3Vyc2VfY291bnQgPiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgcmVjdXJzZV9jb3VudCA+IGZhY2UtPm1heF9wcm9maWxlLm1heENvbXBvbmVudERlcHRoICkKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIGlmICggcmVjdXJzZV9jb3VudCApCisgICAgICBGVF9UUkFDRTUoKCAiICBuZXN0aW5nIGxldmVsOiAlZFxuIiwgcmVjdXJzZV9jb3VudCApKTsKKyNlbmRpZgorCisgICAgLyogc29tZSBmb250cyBoYXZlIGFuIGluY29ycmVjdCB2YWx1ZSBvZiBgbWF4Q29tcG9uZW50RGVwdGgnICovCisgICAgaWYgKCByZWN1cnNlX2NvdW50ID4gZmFjZS0+bWF4X3Byb2ZpbGUubWF4Q29tcG9uZW50RGVwdGggKQogICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQ29tcG9zaXRlICk7Ci0gICAgICBnb3RvIEV4aXQ7CisgICAgICBGVF9UUkFDRTEoKCAibG9hZF90cnVldHlwZV9nbHlwaDogbWF4Q29tcG9uZW50RGVwdGggc2V0IHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgcmVjdXJzZV9jb3VudCApKTsKKyAgICAgIGZhY2UtPm1heF9wcm9maWxlLm1heENvbXBvbmVudERlcHRoID0gKEZUX1VTaG9ydClyZWN1cnNlX2NvdW50OwogICAgIH0KIAogI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCkBAIC0xNDQ1LDggKzE0NTcsOCBAQAogCiAgICAgaWYgKCAoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICkKICAgICB7Ci0gICAgICB4X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZTsKLSAgICAgIHlfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworICAgICAgeF9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3NjYWxlOworICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTU0NCw3ICsxNTU2LDcgQEAKIAogICAgICAgLyogbXVzdCBpbml0aWFsaXplIHBvaW50cyBiZWZvcmUgKHBvc3NpYmx5KSBvdmVycmlkaW5nICovCiAgICAgICAvKiBnbHlwaCBtZXRyaWNzIGZyb20gdGhlIGluY3JlbWVudGFsIGludGVyZmFjZSAgICAgICAgKi8KLSAgICAgIFRUX0xPQURFUl9TRVRfUFAoIGxvYWRlciApOworICAgICAgdHRfbG9hZGVyX3NldF9wcCggbG9hZGVyICk7CiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAgICAgICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwpAQCAtMTU1Miw3ICsxNTY0LDcgQEAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKIAotICAgICAgaWYgKCAoKFRUX0ZhY2UpKGxvYWRlci0+ZmFjZSkpLT5kb2JsZW5kICkKKyAgICAgIGlmICggbG9hZGVyLT5mYWNlLT5kb2JsZW5kICkKICAgICAgIHsKICAgICAgICAgLyogYSBzbWFsbCBvdXRsaW5lIHN0cnVjdHVyZSB3aXRoIGZvdXIgZWxlbWVudHMgZm9yICovCiAgICAgICAgIC8qIGNvbW11bmljYXRpb24gd2l0aCBgVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMnICAqLwpAQCAtMTU3OSwxMCArMTU5MSwxMCBAQAogICAgICAgICBvdXRsaW5lLmNvbnRvdXJzICAgPSBjb250b3VyczsKIAogICAgICAgICAvKiB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgc2NhbGluZyAqLwotICAgICAgICBlcnJvciA9IFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKCAoVFRfRmFjZSkobG9hZGVyLT5mYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLm5fcG9pbnRzICk7CisgICAgICAgIGVycm9yID0gVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMoIGxvYWRlci0+ZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClvdXRsaW5lLm5fcG9pbnRzICk7CiAgICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICAgIGdvdG8gRXhpdDsKIApAQCAtMTYxOSw3ICsxNjMxLDcgQEAKIAogICAgIC8qIG11c3QgaW5pdGlhbGl6ZSBwaGFudG9tIHBvaW50cyBiZWZvcmUgKHBvc3NpYmx5KSBvdmVycmlkaW5nICovCiAgICAgLyogZ2x5cGggbWV0cmljcyBmcm9tIHRoZSBpbmNyZW1lbnRhbCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgKi8KLSAgICBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKTsKKyAgICB0dF9sb2FkZXJfc2V0X3BwKCBsb2FkZXIgKTsKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKICAgICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwpAQCAtMTY1NSwxMCArMTY2Nyw0OCBAQAogICAgIC8qIG90aGVyd2lzZSwgbG9hZCBhIGNvbXBvc2l0ZSEgKi8KICAgICBlbHNlIGlmICggbG9hZGVyLT5uX2NvbnRvdXJzID09IC0xICkKICAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworCiAgICAgICBGVF9VSW50ICAgc3RhcnRfcG9pbnQ7CiAgICAgICBGVF9VSW50ICAgc3RhcnRfY29udG91cjsKICAgICAgIEZUX1VMb25nICBpbnNfcG9zOyAgLyogcG9zaXRpb24gb2YgY29tcG9zaXRlIGluc3RydWN0aW9ucywgaWYgYW55ICovCiAKKyAgICAgIEZUX0xpc3ROb2RlICBub2RlLCBub2RlMjsKKworCisgICAgICAvKgorICAgICAgICogV2Ugc3RvcmUgdGhlIGdseXBoIGluZGV4IGRpcmVjdGx5IGluIHRoZSBgbm9kZS0+ZGF0YScgcG9pbnRlciwKKyAgICAgICAqIGZvbGxvd2luZyB0aGUgZ2xpYiBzb2x1dGlvbiAoY2YuIG1hY3JvIGBHVUlOVF9UT19QT0lOVEVSJykgd2l0aCBhCisgICAgICAgKiBkb3VibGUgY2FzdCB0byBtYWtlIHRoaXMgcG9ydGFibGUuICBOb3RlLCBob3dldmVyLCB0aGF0IHRoaXMgbmVlZHMKKyAgICAgICAqIHBvaW50ZXJzIHdpdGggYSB3aWR0aCBvZiBhdCBsZWFzdCAzMiBiaXRzLgorICAgICAgICovCisKKworICAgICAgLyogY2xlYXIgdGhlIG5vZGVzIGZpbGxlZCBieSBzaWJsaW5nIGNoYWlucyAqLworICAgICAgbm9kZSA9IGZ0X2xpc3RfZ2V0X25vZGVfYXQoICZsb2FkZXItPmNvbXBvc2l0ZXMsIHJlY3Vyc2VfY291bnQgKTsKKyAgICAgIGZvciAoIG5vZGUyID0gbm9kZTsgbm9kZTI7IG5vZGUyID0gbm9kZTItPm5leHQgKQorICAgICAgICBub2RlMi0+ZGF0YSA9ICh2b2lkKilVTE9OR19NQVg7CisKKyAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgYWxyZWFkeSBoYXZlIGEgY29tcG9zaXRlIGdseXBoIHdpdGggdGhpcyBpbmRleCAqLworICAgICAgaWYgKCBGVF9MaXN0X0ZpbmQoICZsb2FkZXItPmNvbXBvc2l0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKWdseXBoX2luZGV4ICkgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiVFRfTG9hZF9Db21wb3NpdGVfR2x5cGg6IgorICAgICAgICAgICAgICAgICAgICAiIGluZmluaXRlIHJlY3Vyc2lvbiBkZXRlY3RlZFxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Db21wb3NpdGUgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBlbHNlIGlmICggbm9kZSApCisgICAgICAgIG5vZGUtPmRhdGEgPSAodm9pZCopKHVuc2lnbmVkIGxvbmcpZ2x5cGhfaW5kZXg7CisKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9ORVcoIG5vZGUgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICBub2RlLT5kYXRhID0gKHZvaWQqKSh1bnNpZ25lZCBsb25nKWdseXBoX2luZGV4OworICAgICAgICBGVF9MaXN0X0FkZCggJmxvYWRlci0+Y29tcG9zaXRlcywgbm9kZSApOworICAgICAgfQogCiAgICAgICBzdGFydF9wb2ludCAgID0gKEZUX1VJbnQpZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzOwogICAgICAgc3RhcnRfY29udG91ciA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX2NvbnRvdXJzOwpAQCAtMTY3OSw3ICsxNzI5LDcgQEAKIAogICAgICAgaWYgKCBmYWNlLT5kb2JsZW5kICkKICAgICAgIHsKLSAgICAgICAgRlRfVUludCAgICAgIGksIGxpbWl0OworICAgICAgICBzaG9ydCAgICAgICAgaSwgbGltaXQ7CiAgICAgICAgIEZUX1N1YkdseXBoICBzdWJnbHlwaDsKIAogICAgICAgICBGVF9PdXRsaW5lICBvdXRsaW5lOwpAQCAtMTY4NywyMiArMTczNywyNCBAQAogICAgICAgICBjaGFyKiAgICAgICB0YWdzICAgICA9IE5VTEw7CiAgICAgICAgIHNob3J0KiAgICAgIGNvbnRvdXJzID0gTlVMTDsKIAotICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OwogCi0KLSAgICAgICAgbGltaXQgPSBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHM7CisgICAgICAgIGxpbWl0ID0gKHNob3J0KWdsb2FkZXItPmN1cnJlbnQubnVtX3N1YmdseXBoczsKIAogICAgICAgICAvKiBjb25zdHJ1Y3QgYW4gb3V0bGluZSBzdHJ1Y3R1cmUgZm9yICAgICAgICAgICAgICAqLwogICAgICAgICAvKiBjb21tdW5pY2F0aW9uIHdpdGggYFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzJyAqLwotICAgICAgICBvdXRsaW5lLm5fcG9pbnRzICAgPSBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHMgKyA0OworICAgICAgICBvdXRsaW5lLm5fcG9pbnRzICAgPSAoc2hvcnQpKCBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHMgKyA0ICk7CiAgICAgICAgIG91dGxpbmUubl9jb250b3VycyA9IG91dGxpbmUubl9wb2ludHM7CiAKKyAgICAgICAgb3V0bGluZS5wb2ludHMgICA9IE5VTEw7CisgICAgICAgIG91dGxpbmUudGFncyAgICAgPSBOVUxMOworICAgICAgICBvdXRsaW5lLmNvbnRvdXJzID0gTlVMTDsKKwogICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggcG9pbnRzLCBvdXRsaW5lLm5fcG9pbnRzICkgICB8fAogICAgICAgICAgICAgIEZUX05FV19BUlJBWSggdGFncywgb3V0bGluZS5uX3BvaW50cyApICAgICB8fAogICAgICAgICAgICAgIEZUX05FV19BUlJBWSggY29udG91cnMsIG91dGxpbmUubl9wb2ludHMgKSApCiAgICAgICAgICAgZ290byBFeGl0MTsKIAotICAgICAgICBzdWJnbHlwaCA9IGdsb2FkZXItPmN1cnJlbnQuc3ViZ2x5cGhzICsgZ2xvYWRlci0+YmFzZS5udW1fc3ViZ2x5cGhzOworICAgICAgICBzdWJnbHlwaCA9IGdsb2FkZXItPmN1cnJlbnQuc3ViZ2x5cGhzOwogCiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgc3ViZ2x5cGgrKyApCiAgICAgICAgIHsKQEAgLTE3NDgsMTggKzE4MDAsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUubl9wb2ludHMgKSApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KW91dGxpbmUubl9wb2ludHMgKSApICE9IDAgKQogICAgICAgICAgIGdvdG8gRXhpdDE7CiAKLSAgICAgICAgc3ViZ2x5cGggPSBnbG9hZGVyLT5jdXJyZW50LnN1YmdseXBocyArIGdsb2FkZXItPmJhc2UubnVtX3N1YmdseXBoczsKKyAgICAgICAgc3ViZ2x5cGggPSBnbG9hZGVyLT5jdXJyZW50LnN1YmdseXBoczsKIAogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxpbWl0OyBpKyssIHN1YmdseXBoKysgKQogICAgICAgICB7Ci0gICAgICAgICAgLyogWFhYOiBvdmVyZmxvdyBjaGVjayBmb3Igc3ViZ2x5cGgtPnthcmcxLGFyZzJ9LiAgICAgICAgICovCi0gICAgICAgICAgLyogICAgICBEZWx0YXMgbXVzdCBiZSB3aXRoaW4gc2lnbmVkIDE2LWJpdCwgICAgICAgICAgICAgICovCi0gICAgICAgICAgLyogICAgICBidXQgdGhlIHJlc3RyaWN0aW9uIG9mIHN1bW1lZCBkZWx0YXMgaXMgbm90IGNsZWFyICovCi0gICAgICAgICAgc3ViZ2x5cGgtPmFyZzEgPSAoRlRfSW50MTYpcG9pbnRzW2ldLng7Ci0gICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSAoRlRfSW50MTYpcG9pbnRzW2ldLnk7CisgICAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN1YmdseXBoLT5hcmcxID0gKEZUX0ludDE2KXBvaW50c1tpXS54OworICAgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSAoRlRfSW50MTYpcG9pbnRzW2ldLnk7CisgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbG9hZGVyLT5wcDEueCA9IHBvaW50c1tpICsgMF0ueDsKQEAgLTE5MzUsMTUgKzE5ODcsMTYgQEAKICAgY29tcHV0ZV9nbHlwaF9tZXRyaWNzKCBUVF9Mb2FkZXIgIGxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4ICkKICAgewotICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gbG9hZGVyLT5mYWNlOworI2lmIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgfHwgXAorICAgIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKICNlbmRpZgogCiAgICAgRlRfQkJveCAgICAgICBiYm94OwogICAgIEZUX0ZpeGVkICAgICAgeV9zY2FsZTsKICAgICBUVF9HbHlwaFNsb3QgIGdseXBoID0gbG9hZGVyLT5nbHlwaDsKLSAgICBUVF9TaXplICAgICAgIHNpemUgID0gKFRUX1NpemUpbG9hZGVyLT5zaXplOworICAgIFRUX1NpemUgICAgICAgc2l6ZSAgPSBsb2FkZXItPnNpemU7CiAKIAogICAgIHlfc2NhbGUgPSAweDEwMDAwTDsKQEAgLTE5NjMsOSArMjAxNiwxOCBAQAogICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWSA9IGJib3gueU1heDsKICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSAgPSBsb2FkZXItPnBwMi54IC0gbG9hZGVyLT5wcDEueDsKIAotICAgIC8qIGFkanVzdCBhZHZhbmNlIHdpZHRoIHRvIHRoZSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGhkbXggdGFibGUgKi8KLSAgICBpZiAoICFmYWNlLT5wb3N0c2NyaXB0LmlzRml4ZWRQaXRjaCAgJiYKLSAgICAgICAgIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgKQorICAgIC8qIEFkanVzdCBhZHZhbmNlIHdpZHRoIHRvIHRoZSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGhkbXggdGFibGUgICAgKi8KKyAgICAvKiB1bmxlc3MgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgaXMgc2V0IG9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisgICAgLyogbW9kZSBvZiB0aGUgdjQwIGludGVycHJldGVyIGlzIGFjdGl2ZS4gIFNlZSBgdHRpbnRlcnAuaCcgZm9yICAgICAqLworICAgIC8qIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgICAgICEoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICYmCisgICAgICAgICAgICAoIGxvYWRlci0+ZXhlYyAmJiBsb2FkZXItPmV4ZWMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICApICkgJiYKKyNlbmRpZgorICAgICAgICAgIWZhY2UtPnBvc3RzY3JpcHQuaXNGaXhlZFBpdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICEoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfQ09NUFVURV9NRVRSSUNTICkgICAgICAgICAgICAgICApCiAgICAgewogICAgICAgRlRfQnl0ZSogIHdpZHRocDsKIApAQCAtMTk3NCw3ICsyMDM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueF9wcGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4ICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogCiAgICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKICAgICAgIHsKQEAgLTE5ODgsMTUgKzIwNTAsMTUgQEAKICAgICAgICAgICAgICAoICggaWdub3JlX3hfbW9kZSAmJiBsb2FkZXItPmV4ZWMtPmNvbXBhdGlibGVfd2lkdGhzICkgfHwKICAgICAgICAgICAgICAgICAhaWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgICBTUEhfT1BUSU9OX0JJVE1BUF9XSURUSFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSApCi0gICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPSAqd2lkdGhwIDw8IDY7CisgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPSAqd2lkdGhwICogNjQ7CiAgICAgICB9CiAgICAgICBlbHNlCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICB7CiAgICAgICAgIGlmICggd2lkdGhwICkKLSAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9ICp3aWR0aHAgPDwgNjsKKyAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9ICp3aWR0aHAgKiA2NDsKICAgICAgIH0KICAgICB9CiAKQEAgLTIxMzYsMTYgKzIxOTgsMTYgQEAKICAgICAgIGdseXBoLT5vdXRsaW5lLm5fcG9pbnRzICAgPSAwOwogICAgICAgZ2x5cGgtPm91dGxpbmUubl9jb250b3VycyA9IDA7CiAKLSAgICAgIGdseXBoLT5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgPDwgNjsKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgPDwgNjsKKyAgICAgIGdseXBoLT5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgKiA2NDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgKiA2NDsKIAotICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWCA8PCA2OwotICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWSA8PCA2OwotICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLmhvcmlBZHZhbmNlICA8PCA2OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWCAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWSAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLmhvcmlBZHZhbmNlICAqIDY0OwogCi0gICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdYIDw8IDY7Ci0gICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdZIDw8IDY7Ci0gICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QWR2YW5jZSAgPSAoRlRfUG9zKW1ldHJpY3MudmVydEFkdmFuY2UgIDw8IDY7CisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdYICogNjQ7CisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdZICogNjQ7CisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QWR2YW5jZSAgPSAoRlRfUG9zKW1ldHJpY3MudmVydEFkdmFuY2UgICogNjQ7CiAKICAgICAgIGdseXBoLT5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOwogCkBAIC0yMTgxLDYgKzIyNDMsMTAgQEAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKICAgICBGVF9Cb29sICAgIHBlZGFudGljID0gRlRfQk9PTCggbG9hZF9mbGFncyAmIEZUX0xPQURfUEVEQU5USUMgKTsKICNlbmRpZgorI2lmIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgfHwgXAorICAgIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIChUVF9GYWNlKWdseXBoLT5mYWNlICk7CisjZW5kaWYKIAogCiAgICAgZmFjZSAgID0gKFRUX0ZhY2UpZ2x5cGgtPmZhY2U7CkBAIC0yMTk0LDExICsyMjYwLDEzIEBACiAgICAgaWYgKCBJU19ISU5URUQoIGxvYWRfZmxhZ3MgKSAmJiAhZ2x5Zl90YWJsZV9vbmx5ICkKICAgICB7CiAgICAgICBUVF9FeGVjQ29udGV4dCAgZXhlYzsKLSAgICAgIEZUX0Jvb2wgICAgICAgICBncmF5c2NhbGU7CisgICAgICBGVF9Cb29sICAgICAgICAgZ3JheXNjYWxlID0gVFJVRTsKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgRlRfQm9vbCAgICAgICAgIHN1YnBpeGVsX2hpbnRpbmdfbGVhbjsKKyAgICAgIEZUX0Jvb2wgICAgICAgICBncmF5c2NhbGVfY2xlYXJ0eXBlOworI2VuZGlmCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOwotCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIEZUX0Jvb2wgIHN1YnBpeGVsX2hpbnRpbmcgPSBGQUxTRTsKIAogI2lmIDAKQEAgLTIyMTAsNyArMjI3OCw3IEBACiAgICAgICBGVF9Cb29sICBzdWJwaXhlbF9wb3NpdGlvbmVkOwogICAgICAgRlRfQm9vbCAgZ3JheV9jbGVhcnR5cGU7CiAjZW5kaWYKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICBGVF9Cb29sICByZWV4ZWN1dGUgPSBGQUxTRTsKIApAQCAtMjIzMSw3ICsyMjk5LDI2IEBACiAgICAgICBpZiAoICFleGVjICkKICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDb3VsZF9Ob3RfRmluZF9Db250ZXh0ICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl80MCApCisgICAgICB7CisgICAgICAgIHN1YnBpeGVsX2hpbnRpbmdfbGVhbiAgID0gVFJVRTsKKyAgICAgICAgZ3JheXNjYWxlX2NsZWFydHlwZSAgICAgPSAhRlRfQk9PTCggbG9hZF9mbGFncyAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX0xDRF9WICAgKTsKKyAgICAgICAgZXhlYy0+dmVydGljYWxfbGNkX2xlYW4gPSBGVF9CT09MKCBsb2FkX2ZsYWdzICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgc3VicGl4ZWxfaGludGluZ19sZWFuICAgPSBGQUxTRTsKKyAgICAgICAgZ3JheXNjYWxlX2NsZWFydHlwZSAgICAgPSBGQUxTRTsKKyAgICAgICAgZXhlYy0+dmVydGljYWxfbGNkX2xlYW4gPSBGQUxTRTsKKyAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAogICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgICB7CkBAIC0yMjg4LDE4ICsyMzc1LDIzIEBACiAgICAgICB9CiAgICAgICBlbHNlCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCi0gICAgICB7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgKQorICAgICAgICBncmF5c2NhbGUgPSBGVF9CT09MKCAhc3VicGl4ZWxfaGludGluZ19sZWFuICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICAgICApOworICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAgIGdyYXlzY2FsZSA9IEZUX0JPT0woIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SRU5ERVJfTU9ERV9NT05PICk7Ci0gICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICApOwogCiAgICAgICBlcnJvciA9IFRUX0xvYWRfQ29udGV4dCggZXhlYywgZmFjZSwgc2l6ZSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIHJldHVybiBlcnJvcjsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKICAgICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggKQogICAgICAgewpAQCAtMjMyNyw5ICsyNDE5LDM3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICB7CisKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGEgY2hhbmdlIGZyb20gbW9ubyB0byBzdWJwaXhlbCByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLworICAgICAgICAgIC8qIHJlcXVpcmVzIGEgcmUtZXhlY3V0aW9uIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggc3VicGl4ZWxfaGludGluZ19sZWFuICE9IGV4ZWMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U0KCggInR0X2xvYWRlcl9pbml0OiBzdWJwaXhlbCBoaW50aW5nIGNoYW5nZSwiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHJlLWV4ZWN1dGluZyBgcHJlcCcgdGFibGVcbiIgKSk7CisKKyAgICAgICAgICAgIGV4ZWMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiA9IHN1YnBpeGVsX2hpbnRpbmdfbGVhbjsKKyAgICAgICAgICAgIHJlZXhlY3V0ZSAgICAgICAgICAgICAgICAgICA9IFRSVUU7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogYSBjaGFuZ2UgZnJvbSBjb2xvcmVkIHRvIGdyYXlzY2FsZSBzdWJwaXhlbCByZW5kZXJpbmcgKGFuZCAqLworICAgICAgICAgIC8qIHZpY2UgdmVyc2EpIHJlcXVpcmVzIGEgcmUtZXhlY3V0aW9uIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgKi8KKyAgICAgICAgICBpZiAoIGdyYXlzY2FsZV9jbGVhcnR5cGUgIT0gZXhlYy0+Z3JheXNjYWxlX2NsZWFydHlwZSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U0KCggInR0X2xvYWRlcl9pbml0OiBncmF5c2NhbGUgc3VicGl4ZWwgaGludGluZyBjaGFuZ2UsIgorICAgICAgICAgICAgICAgICAgICAgICAgIiByZS1leGVjdXRpbmcgYHByZXAnIHRhYmxlXG4iICkpOworCisgICAgICAgICAgICBleGVjLT5ncmF5c2NhbGVfY2xlYXJ0eXBlID0gZ3JheXNjYWxlX2NsZWFydHlwZTsKKyAgICAgICAgICAgIHJlZXhlY3V0ZSAgICAgICAgICAgICAgICAgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgLyogYSBjaGFuZ2UgZnJvbSBtb25vIHRvIGdyYXlzY2FsZSByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLwogICAgICAgICAvKiByZXF1aXJlcyBhIHJlLWV4ZWN1dGlvbiBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgICovCiAgICAgICAgIGlmICggZ3JheXNjYWxlICE9IGV4ZWMtPmdyYXlzY2FsZSApCkBAIC0yMzYyLDEwICsyNDgyLDExIEBACiAgICAgICBpZiAoIGV4ZWMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiAyICkKICAgICAgICAgZXhlYy0+R1MgPSB0dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIGZvbnQgaGludGVkIGZvciBDbGVhclR5cGUgLS0gICAgICAgICAgICovCiAgICAgICAvKiBub3RlIHRoYXQgdGhpcyBmbGFnIGNhbiBhbHNvIGJlIG1vZGlmaWVkIGluIGEgZ2x5cGgncyBieXRlY29kZSAqLwotICAgICAgaWYgKCBleGVjLT5HUy5pbnN0cnVjdF9jb250cm9sICYgNCApCisgICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICYmCisgICAgICAgICAgIGV4ZWMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgZXhlYy0+aWdub3JlX3hfbW9kZSA9IDA7CiAjZW5kaWYKIApAQCAtMjQxNCwxNSArMjUzNSwyOCBAQAogCiAgICAgbG9hZGVyLT5sb2FkX2ZsYWdzID0gKEZUX1VMb25nKWxvYWRfZmxhZ3M7CiAKLSAgICBsb2FkZXItPmZhY2UgICA9IChGVF9GYWNlKWZhY2U7Ci0gICAgbG9hZGVyLT5zaXplICAgPSAoRlRfU2l6ZSlzaXplOworICAgIGxvYWRlci0+ZmFjZSAgID0gZmFjZTsKKyAgICBsb2FkZXItPnNpemUgICA9IHNpemU7CiAgICAgbG9hZGVyLT5nbHlwaCAgPSAoRlRfR2x5cGhTbG90KWdseXBoOwogICAgIGxvYWRlci0+c3RyZWFtID0gc3RyZWFtOwogCisgICAgbG9hZGVyLT5jb21wb3NpdGVzLmhlYWQgPSBOVUxMOworICAgIGxvYWRlci0+Y29tcG9zaXRlcy50YWlsID0gTlVMTDsKKwogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KIAogCisgIHN0YXRpYyB2b2lkCisgIHR0X2xvYWRlcl9kb25lKCBUVF9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBGVF9MaXN0X0ZpbmFsaXplKCAmbG9hZGVyLT5jb21wb3NpdGVzLAorICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5mYWNlLT5yb290Lm1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7CisgIH0KKworCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNDc5LDYgKzI2MTMsNyBAQAogICAgICAgICAgIC8qIGZvciB0aGUgYmJveCB3ZSBuZWVkIHRoZSBoZWFkZXIgb25seSAqLwogICAgICAgICAgICh2b2lkKXR0X2xvYWRlcl9pbml0KCAmbG9hZGVyLCBzaXplLCBnbHlwaCwgbG9hZF9mbGFncywgVFJVRSApOwogICAgICAgICAgICh2b2lkKWxvYWRfdHJ1ZXR5cGVfZ2x5cGgoICZsb2FkZXIsIGdseXBoX2luZGV4LCAwLCBUUlVFICk7CisgICAgICAgICAgdHRfbG9hZGVyX2RvbmUoICZsb2FkZXIgKTsKICAgICAgICAgICBnbHlwaC0+bGluZWFySG9yaUFkdmFuY2UgPSBsb2FkZXIubGluZWFyOwogICAgICAgICAgIGdseXBoLT5saW5lYXJWZXJ0QWR2YW5jZSA9IGxvYWRlci52YWR2YW5jZTsKIApAQCAtMjU3NCw2ICsyNzA5LDggQEAKICAgICAgIGVycm9yID0gY29tcHV0ZV9nbHlwaF9tZXRyaWNzKCAmbG9hZGVyLCBnbHlwaF9pbmRleCApOwogICAgIH0KIAorICAgIHR0X2xvYWRlcl9kb25lKCAmbG9hZGVyICk7CisKICAgICAvKiBTZXQgdGhlIGBoaWdoIHByZWNpc2lvbicgYml0IGZsYWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiBUaGlzIGlzIF9jcml0aWNhbF8gdG8gZ2V0IGNvcnJlY3Qgb3V0cHV0IGZvciBtb25vY2hyb21lICAgICAgKi8KICAgICAvKiBUcnVlVHlwZSBnbHlwaHMgYXQgYWxsIHNpemVzIHVzaW5nIHRoZSBieXRlY29kZSBpbnRlcnByZXRlci4gKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGdsb2FkLmggYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCmluZGV4IDhlMzI1NWUuLmJmYTI5ZTQgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGdsb2FkLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRHTE9BRF9IX18KLSNkZWZpbmUgX19UVEdMT0FEX0hfXworI2lmbmRlZiBUVEdMT0FEX0hfCisjZGVmaW5lIFRUR0xPQURfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTU2LDcgKzU2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVEdMT0FEX0hfXyAqLworI2VuZGlmIC8qIFRUR0xPQURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGd4dmFyLmMgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jCmluZGV4IDJiMTI0ODMuLmMwZDAxM2MgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGd4dmFyLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBHWCBGb250IFZhcmlhdGlvbiBsb2FkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnLCBhbmQgR2VvcmdlIFdpbGxpYW1zLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTEyLDYgKzExMiw4IEBACiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBzdHJlYW0gICAgOjogVGhlIGRhdGEgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICAgICA6OiBUaGUgc2l6ZSBvZiB0aGUgdGFibGUgaG9sZGluZyB0aGUgZGF0YS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHBvaW50X2NudCA6OiBUaGUgbnVtYmVyIG9mIHBvaW50cyByZWFkLiAgQSB6ZXJvIHZhbHVlIG1lYW5zIHRoYXQgICAqLwogICAvKiAgICAgICAgICAgICAgICAgYWxsIHBvaW50cyBpbiB0aGUgZ2x5cGggd2lsbCBiZSBhZmZlY3RlZCwgd2l0aG91dCAgICAgKi8KQEAgLTEyMyw2ICsxMjUsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIEZUX1VTaG9ydCoKICAgZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICpwb2ludF9jbnQgKQogICB7CiAgICAgRlRfVVNob3J0ICpwb2ludHMgPSBOVUxMOwpAQCAtMTQ5LDQ4ICsxNTIsNTUgQEAKICAgICAgIG4gIHw9IEZUX0dFVF9CWVRFKCk7CiAgICAgfQogCi0gICAgaWYgKCBGVF9ORVdfQVJSQVkoIHBvaW50cywgbiApICkKKyAgICBpZiAoIG4gPiBzaXplICkKKyAgICB7CisgICAgICBGVF9UUkFDRTEoKCAiZnRfdmFyX3JlYWRwYWNrZWRwb2ludHM6IG51bWJlciBvZiBwb2ludHMgdG9vIGxhcmdlXG4iICkpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogaW4gdGhlIG5lc3RlZCBsb29wcyBiZWxvdyB3ZSBpbmNyZWFzZSBgaScgdHdpY2U7ICovCisgICAgLyogaXQgaXMgZmFzdGVyIHRvIHNpbXBseSBhbGxvY2F0ZSBvbmUgbW9yZSBzbG90ICAgICovCisgICAgLyogdGhhbiB0byBhZGQgYW5vdGhlciB0ZXN0IHdpdGhpbiB0aGUgbG9vcCAgICAgICAgICovCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHBvaW50cywgbiArIDEgKSApCiAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICpwb2ludF9jbnQgPSBuOwogCi0gICAgaSA9IDA7CisgICAgZmlyc3QgPSAwOworICAgIGkgICAgID0gMDsKICAgICB3aGlsZSAoIGkgPCBuICkKICAgICB7CiAgICAgICBydW5jbnQgPSBGVF9HRVRfQllURSgpOwogICAgICAgaWYgKCBydW5jbnQgJiBHWF9QVF9QT0lOVFNfQVJFX1dPUkRTICkKICAgICAgIHsKICAgICAgICAgcnVuY250ICAgICAmPSBHWF9QVF9QT0lOVF9SVU5fQ09VTlRfTUFTSzsKLSAgICAgICAgZmlyc3QgICAgICAgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICAgIGZpcnN0ICAgICAgKz0gRlRfR0VUX1VTSE9SVCgpOwogICAgICAgICBwb2ludHNbaSsrXSA9IGZpcnN0OwogCi0gICAgICAgIGlmICggcnVuY250IDwgMSB8fCBpICsgcnVuY250ID4gbiApCi0gICAgICAgICAgZ290byBFeGl0OwotCiAgICAgICAgIC8qIGZpcnN0IHBvaW50IG5vdCBpbmNsdWRlZCBpbiBydW4gY291bnQgKi8KICAgICAgICAgZm9yICggaiA9IDA7IGogPCBydW5jbnQ7IGorKyApCiAgICAgICAgIHsKICAgICAgICAgICBmaXJzdCAgICAgICs9IEZUX0dFVF9VU0hPUlQoKTsKICAgICAgICAgICBwb2ludHNbaSsrXSA9IGZpcnN0OworICAgICAgICAgIGlmICggaSA+PSBuICkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZpcnN0ICAgICAgID0gRlRfR0VUX0JZVEUoKTsKKyAgICAgICAgZmlyc3QgICAgICArPSBGVF9HRVRfQllURSgpOwogICAgICAgICBwb2ludHNbaSsrXSA9IGZpcnN0OwogCi0gICAgICAgIGlmICggcnVuY250IDwgMSB8fCBpICsgcnVuY250ID4gbiApCi0gICAgICAgICAgZ290byBFeGl0OwotCiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgcnVuY250OyBqKysgKQogICAgICAgICB7CiAgICAgICAgICAgZmlyc3QgICAgICArPSBGVF9HRVRfQllURSgpOwogICAgICAgICAgIHBvaW50c1tpKytdID0gZmlyc3Q7CisgICAgICAgICAgaWYgKCBpID49IG4gKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKLSAgRXhpdDoKICAgICByZXR1cm4gcG9pbnRzOwogICB9CiAKQEAgLTIxMiw2ICsyMjIsOCBAQAogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc3RyZWFtICAgIDo6IFRoZSBkYXRhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICAgOjogVGhlIHNpemUgb2YgdGhlIHRhYmxlIGhvbGRpbmcgdGhlIGRhdGEuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGRlbHRhX2NudCA6OiBUaGUgbnVtYmVyIG9mIGRlbHRhcyB0byBiZSByZWFkLiAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMjIsNiArMjM0LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9TaG9ydCoKICAgZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkZWx0YV9jbnQgKQogICB7CiAgICAgRlRfU2hvcnQgICpkZWx0YXMgPSBOVUxMOwpAQCAtMjMzLDYgKzI0NiwxMiBAQAogICAgIEZUX1VOVVNFRCggZXJyb3IgKTsKIAogCisgICAgaWYgKCBkZWx0YV9jbnQgPiBzaXplICkKKyAgICB7CisgICAgICBGVF9UUkFDRTEoKCAiZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXM6IG51bWJlciBvZiBwb2ludHMgdG9vIGxhcmdlXG4iICkpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGRlbHRhcywgZGVsdGFfY250ICkgKQogICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM0MSw3ICszNjAsOCBAQAogICAgICAgRlRfVFJBQ0U1KCggIiAgYXhpcyAlZDpcbiIsIGkgKSk7CiAKICAgICAgIHNlZ21lbnQtPnBhaXJDb3VudCA9IEZUX0dFVF9VU0hPUlQoKTsKLSAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBzZWdtZW50LT5jb3JyZXNwb25kZW5jZSwgc2VnbWVudC0+cGFpckNvdW50ICkgKQorICAgICAgaWYgKCAoRlRfVUxvbmcpc2VnbWVudC0+cGFpckNvdW50ICogNCA+IHRhYmxlX2xlbiAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9ORVdfQVJSQVkoIHNlZ21lbnQtPmNvcnJlc3BvbmRlbmNlLCBzZWdtZW50LT5wYWlyQ291bnQgKSApCiAgICAgICB7CiAgICAgICAgIC8qIEZhaWx1cmUuICBGcmVlIGV2ZXJ5dGhpbmcgd2UgaGF2ZSBkb25lIHNvIGZhci4gIFdlIG11c3QgZG8gKi8KICAgICAgICAgLyogaXQgcmlnaHQgbm93IHNpbmNlIGxvYWRpbmcgdGhlIGBhdmFyJyB0YWJsZSBpcyBvcHRpb25hbC4gICAqLwpAQCAtMzU3LDggKzM3Nyw4IEBACiAgICAgICBmb3IgKCBqID0gMDsgaiA8IHNlZ21lbnQtPnBhaXJDb3VudDsgaisrICkKICAgICAgIHsKICAgICAgICAgLyogY29udmVydCB0byBGaXhlZCAqLwotICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgPSBGVF9HRVRfU0hPUlQoKSA8PCAyOwotICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS50b0Nvb3JkICAgPSBGVF9HRVRfU0hPUlQoKSA8PCAyOworICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgPSBGVF9HRVRfU0hPUlQoKSAqIDQ7CisgICAgICAgIHNlZ21lbnQtPmNvcnJlc3BvbmRlbmNlW2pdLnRvQ29vcmQgICA9IEZUX0dFVF9TSE9SVCgpICogNDsKIAogICAgICAgICBGVF9UUkFDRTUoKCAiICAgIG1hcHBpbmcgJS40ZiB0byAlLjRmXG4iLAogICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgLyA2NTUzNi4wLApAQCAtNDQ3LDEwICs0NjcsNiBAQAogICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBndmFyX2ZpZWxkcywgJmd2YXJfaGVhZCApICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIGJsZW5kLT50dXBsZWNvdW50ICA9IGd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50OwotICAgIGJsZW5kLT5ndl9nbHlwaGNudCA9IGd2YXJfaGVhZC5nbHlwaENvdW50OwotICAgIG9mZnNldFRvRGF0YSAgICAgICA9IGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9EYXRhOwotCiAgICAgaWYgKCBndmFyX2hlYWQudmVyc2lvbiAhPSAweDAwMDEwMDAwTCApCiAgICAgewogICAgICAgRlRfVFJBQ0UxKCggImJhZCB0YWJsZSB2ZXJzaW9uXG4iICkpOwpAQCAtNDU4LDggKzQ3NCw2IEBACiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCi0gICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKLQogICAgIGlmICggZ3Zhcl9oZWFkLmF4aXNDb3VudCAhPSAoRlRfVVNob3J0KWJsZW5kLT5tbXZhci0+bnVtX2F4aXMgKQogICAgIHsKICAgICAgIEZUX1RSQUNFMSgoICJmdF92YXJfbG9hZF9ndmFyOiBudW1iZXIgb2YgYXhlcyBpbiBgZ3ZhcicgYW5kIGBjdmFyJ1xuIgpAQCAtNDY4LDYgKzQ4MiwzMyBAQAogICAgICAgZ290byBFeGl0OwogICAgIH0KIAorICAgIC8qIHJvdWdoIHNhbml0eSBjaGVjaywgaWdub3Jpbmcgb2Zmc2V0cyAqLworICAgIGlmICggKEZUX1VMb25nKWd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50ICogZ3Zhcl9oZWFkLmF4aXNDb3VudCA+CisgICAgICAgICAgIHRhYmxlX2xlbiAvIDIgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJmdF92YXJfbG9hZF9ndmFyOiIKKyAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBudW1iZXIgb2YgZ2xvYmFsIGNvb3JkaW5hdGVzXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIHJvdWdoIHNhbml0eSBjaGVjazogb2Zmc2V0cyBjYW4gYmUgZWl0aGVyIDIgb3IgNCBieXRlcywgKi8KKyAgICAvKiBhbmQgYSBzaW5nbGUgdmFyaWF0aW9uIG5lZWRzIGF0IGxlYXN0IDQgYnl0ZXMgcGVyIGdseXBoICovCisgICAgaWYgKCAoRlRfVUxvbmcpZ3Zhcl9oZWFkLmdseXBoQ291bnQgKgorICAgICAgICAgICAoICggZ3Zhcl9oZWFkLmZsYWdzICYgMSApID8gOCA6IDYgKSA+IHRhYmxlX2xlbiApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggImZ0X3Zhcl9sb2FkX2d2YXI6IGludmFsaWQgbnVtYmVyIG9mIGdseXBoc1xuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTIoKCAibG9hZGVkXG4iICkpOworCisgICAgYmxlbmQtPmd2YXJfc2l6ZSAgID0gdGFibGVfbGVuOworICAgIGJsZW5kLT50dXBsZWNvdW50ICA9IGd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50OworICAgIGJsZW5kLT5ndl9nbHlwaGNudCA9IGd2YXJfaGVhZC5nbHlwaENvdW50OworICAgIG9mZnNldFRvRGF0YSAgICAgICA9IGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9EYXRhOworCiAgICAgRlRfVFJBQ0U1KCggImd2YXI6IHRoZXJlIGFyZSAlZCBzaGFyZWQgY29vcmRpbmF0ZXM6XG4iLAogICAgICAgICAgICAgICAgIGJsZW5kLT50dXBsZWNvdW50ICkpOwogCkBAIC01MTEsMTAgKzU1MiwxMCBAQAogICAgICAgZm9yICggaSA9IDA7IGkgPCBibGVuZC0+dHVwbGVjb3VudDsgaSsrICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0U1KCggIiAgWyAiICkpOwotICAgICAgICBmb3IgKCBqID0gMCA7IGogPCAoRlRfVUludClndmFyX2hlYWQuYXhpc0NvdW50OyBqKysgKQorICAgICAgICBmb3IgKCBqID0gMDsgaiA8IChGVF9VSW50KWd2YXJfaGVhZC5heGlzQ291bnQ7IGorKyApCiAgICAgICAgIHsKICAgICAgICAgICBibGVuZC0+dHVwbGVjb29yZHNbaSAqIGd2YXJfaGVhZC5heGlzQ291bnQgKyBqXSA9Ci0gICAgICAgICAgICBGVF9HRVRfU0hPUlQoKSA8PCAyOyAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIEZUX0ZpeGVkICovCisgICAgICAgICAgICBGVF9HRVRfU0hPUlQoKSAqIDQ7ICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIEZUX0ZpeGVkICovCiAgICAgICAgICAgRlRfVFJBQ0U1KCggIiUuNGYgIiwKICAgICAgICAgICAgIGJsZW5kLT50dXBsZWNvb3Jkc1tpICogZ3Zhcl9oZWFkLmF4aXNDb3VudCArIGpdIC8gNjU1MzYuMCApKTsKICAgICAgICAgfQpAQCAtNTczLDYgKzYxNCwxMSBAQAogICAgIHsKICAgICAgIEZUX1RSQUNFNigoICIgICAgYXhpcyBjb29yZGluYXRlICVkICglLjRmKTpcbiIsCiAgICAgICAgICAgICAgICAgICBpLCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisgICAgICBpZiAoICEoIHR1cGxlSW5kZXggJiBHWF9USV9JTlRFUk1FRElBVEVfVFVQTEUgKSApCisgICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgY29vcmRpbmF0ZXMgJWQgKCUuNGYsICUuNGYpOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CiAKICAgICAgIC8qIEl0J3Mgbm90IGNsZWFyIHdoeSAoZm9yIGludGVybWVkaWF0ZSB0dXBsZXMpIHdlIGRvbid0IG5lZWQgICAgICovCiAgICAgICAvKiB0byBjaGVjayBhZ2FpbnN0IHN0YXJ0L2VuZCAtLSB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIGRvbid0LiAqLwpAQCAtNTg1LDYyICs2MzEsNzQgQEAKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKLSAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA9PSAwICkKKyAgICAgIGlmICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPT0gMCApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFNigoICIgICAgICBheGlzIGNvb3JkaW5hdGUgaXMgemVybywgc3RvcFxuIiApKTsKICAgICAgICAgYXBwbHkgPSAwOwogICAgICAgICBicmVhazsKICAgICAgIH0KIAotICAgICAgZWxzZSBpZiAoICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPCAwICYmIHR1cGxlX2Nvb3Jkc1tpXSA+IDAgKSB8fAotICAgICAgICAgICAgICAgICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPiAwICYmIHR1cGxlX2Nvb3Jkc1tpXSA8IDAgKSApCisgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID09IHR1cGxlX2Nvb3Jkc1tpXSApCiAgICAgICB7Ci0gICAgICAgIEZUX1RSQUNFNigoICIgICAgICB0dXBsZSBjb29yZGluYXRlIHZhbHVlICUuNGYgaXMgZXhjZWVkZWQsIHN0b3BcbiIsCisgICAgICAgIEZUX1RSQUNFNigoICIgICAgICB0dXBsZSBjb29yZGluYXRlIHZhbHVlICUuNGYgZml0cyBwZXJmZWN0bHlcbiIsCiAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7Ci0gICAgICAgIGFwcGx5ID0gMDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIGBhcHBseScgZG9lcyBub3QgY2hhbmdlICovCisgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBlbHNlIGlmICggISggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApICkKKyAgICAgIGlmICggISggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApICkKICAgICAgIHsKKyAgICAgICAgLyogbm90IGFuIGludGVybWVkaWF0ZSB0dXBsZSAqLworCisgICAgICAgIGlmICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPCBGVF9NSU4oIDAsIHR1cGxlX2Nvb3Jkc1tpXSApIHx8CisgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPiBGVF9NQVgoIDAsIHR1cGxlX2Nvb3Jkc1tpXSApICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNigoICIgICAgICB0dXBsZSBjb29yZGluYXRlIHZhbHVlICUuNGYgaXMgZXhjZWVkZWQsIHN0b3BcbiIsCisgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKKyAgICAgICAgICBhcHBseSA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSB2YWx1ZSAlLjRmIGZpdHNcbiIsCiAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7Ci0gICAgICAgIC8qIG5vdCBhbiBpbnRlcm1lZGlhdGUgdHVwbGUgKi8KLSAgICAgICAgYXBwbHkgPSBGVF9NdWxGaXgoIGFwcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gKTsKLSAgICAgIH0KLQotICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgaW1fc3RhcnRfY29vcmRzW2ldIHx8Ci0gICAgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPiBpbV9lbmRfY29vcmRzW2ldICAgKQotICAgICAgewotICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgaW50ZXJtZWRpYXRlIHR1cGxlIHJhbmdlIFslLjRmOyUuNGZdIGlzIGV4Y2VlZGVkLCIKLSAgICAgICAgICAgICAgICAgICAgIiBzdG9wXG4iLAotICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAotICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKLSAgICAgICAgYXBwbHkgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgdHVwbGVfY29vcmRzW2ldICkKLSAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBmaXRzXG4iLAotICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAotICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKICAgICAgICAgYXBwbHkgPSBGVF9NdWxEaXYoIGFwcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gLSBpbV9zdGFydF9jb29yZHNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLSBpbV9zdGFydF9jb29yZHNbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfY29vcmRzW2ldICk7CiAgICAgICB9Ci0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBmaXRzXG4iLAotICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAotICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKLSAgICAgICAgYXBwbHkgPSBGVF9NdWxEaXYoIGFwcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAtIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAtIHR1cGxlX2Nvb3Jkc1tpXSApOworICAgICAgICAvKiBpbnRlcm1lZGlhdGUgdHVwbGUgKi8KKworICAgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgaW1fc3RhcnRfY29vcmRzW2ldIHx8CisgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPiBpbV9lbmRfY29vcmRzW2ldICAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBpcyBleGNlZWRlZCwiCisgICAgICAgICAgICAgICAgICAgICAgIiBzdG9wXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tpXSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisgICAgICAgICAgYXBwbHkgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgdHVwbGVfY29vcmRzW2ldICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgdHVwbGUgcmFuZ2UgWyUuNGY7JS40Zl0gZml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgICAgIGFwcGx5ID0gRlRfTXVsRGl2KCBhcHBseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gLSBpbV9zdGFydF9jb29yZHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tpXSAtIGltX3N0YXJ0X2Nvb3Jkc1tpXSApOworICAgICAgICB9CisKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBmaXRzXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tpXSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisgICAgICAgICAgYXBwbHkgPSBGVF9NdWxEaXYoIGFwcGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC0gYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLSB0dXBsZV9jb29yZHNbaV0gKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApAQCAtNjk4LDcgKzc1Niw4IEBACiAgIC8qICAgICAgICAgICAgICBUVF9HZXRfTU1fVmFyIGluaXRpYWxpemVzIHRoZSBibGVuZCBzdHJ1Y3R1cmUuICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hc3RlciA6OiBUaGUgYGZ2YXInIGRhdGEgKG11c3QgYmUgZnJlZWQgYnkgY2FsbGVyKS4gICAgICAgICAgICAgICAqLworICAvKiAgICBtYXN0ZXIgOjogVGhlIGBmdmFyJyBkYXRhIChtdXN0IGJlIGZyZWVkIGJ5IGNhbGxlcikuICBDYW4gYmUgTlVMTCwgKi8KKyAgLyogICAgICAgICAgICAgIHdoaWNoIG1ha2VzIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGxvYWQgTU0gc3VwcG9ydC4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMzUyLDEzICsxNDExLDI1IEBACiAgICAgICBnb3RvIEZFeGl0OwogCiAgICAgdHVwbGVDb3VudCAgID0gRlRfR0VUX1VTSE9SVCgpOwotICAgIG9mZnNldFRvRGF0YSA9IHRhYmxlX3N0YXJ0ICsgRlRfR0VUX1VTSE9SVCgpOworICAgIG9mZnNldFRvRGF0YSA9IEZUX0dFVF9VU0hPUlQoKTsKIAotICAgIC8qIFRoZSBkb2N1bWVudGF0aW9uIGltcGxpZXMgdGhlcmUgYXJlIGZsYWdzIHBhY2tlZCBpbnRvIHRoZSAgICAgICAgKi8KLSAgICAvKiB0dXBsZWNvdW50LCBidXQgSm9obiBKZW5raW5zIHNheXMgdGhhdCBzaGFyZWQgcG9pbnRzIGRvbid0IGFwcGx5ICovCi0gICAgLyogdG8gYGN2YXInLCBhbmQgbm8gb3RoZXIgZmxhZ3MgYXJlIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIHJvdWdoIHNhbml0eSB0ZXN0ICovCisgICAgaWYgKCBvZmZzZXRUb0RhdGEgKyB0dXBsZUNvdW50ICogNCA+IHRhYmxlX2xlbiApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfdmFyeV9jdnQ6IgorICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIENWVCB2YXJpYXRpb24gYXJyYXkgaGVhZGVyXG4iICkpOwogCi0gICAgRlRfVFJBQ0U1KCggImN2YXI6IHRoZXJlIGFyZSAlZCB0dXBsZXM6XG4iLCB0dXBsZUNvdW50ICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBGRXhpdDsKKyAgICB9CisKKyAgICBvZmZzZXRUb0RhdGEgKz0gdGFibGVfc3RhcnQ7CisKKyAgICAvKiBUaGUgZG9jdW1lbnRhdGlvbiBpbXBsaWVzIHRoZXJlIGFyZSBmbGFncyBwYWNrZWQgaW50byAgICAgICAgICAgICAgKi8KKyAgICAvKiBgdHVwbGVDb3VudCcsIGJ1dCBKb2huIEplbmtpbnMgc2F5cyB0aGF0IHNoYXJlZCBwb2ludHMgZG9uJ3QgYXBwbHkgKi8KKyAgICAvKiB0byBgY3ZhcicsIGFuZCBubyBvdGhlciBmbGFncyBhcmUgZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIEZUX1RSQUNFNSgoICJjdmFyOiB0aGVyZSBhcmUgJWQgdHVwbGVzOlxuIiwgdHVwbGVDb3VudCAmIDB4RkZGICkpOwogCiAgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiAweEZGRiApOyBpKysgKQogICAgIHsKQEAgLTEzNzgsNyArMTQ0OSw3IEBACiAgICAgICBpZiAoIHR1cGxlSW5kZXggJiBHWF9USV9FTUJFRERFRF9UVVBMRV9DT09SRCApCiAgICAgICB7CiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQotICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7IC8qIGNvbnZlcnQgZnJvbSAgICAgICAgKi8KKyAgICAgICAgICB0dXBsZV9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSAqIDQ7ICAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvcnQgZnJhYyB0byBmaXhlZCAqLwogICAgICAgfQogICAgICAgZWxzZQpAQCAtMTM5Niw5ICsxNDY3LDkgQEAKICAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApCiAgICAgICB7CiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQotICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7CisgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgKiA0OwogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKLSAgICAgICAgICBpbV9lbmRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsKKyAgICAgICAgICBpbV9lbmRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgKiA0OwogICAgICAgfQogCiAgICAgICBhcHBseSA9IGZ0X3Zhcl9hcHBseV90dXBsZSggYmxlbmQsCkBAIC0xNDIwLDggKzE0OTEsMTEgQEAKIAogICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgb2Zmc2V0VG9EYXRhICk7CiAKLSAgICAgIGxvY2FscG9pbnRzID0gZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIHN0cmVhbSwgJnBvaW50X2NvdW50ICk7CisgICAgICBsb2NhbHBvaW50cyA9IGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9pbnRfY291bnQgKTsKICAgICAgIGRlbHRhcyAgICAgID0gZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50X2NvdW50ID09IDAgPyBmYWNlLT5jdnRfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBvaW50X2NvdW50ICk7CiAgICAgICBpZiAoIGxvY2FscG9pbnRzID09IE5VTEwgfHwgZGVsdGFzID09IE5VTEwgKQpAQCAtMTY0MywxOSArMTcxNywxOCBAQAogICAvKiBtb2RlbGVkIGFmdGVyIGBJbnNfSVVQICovCiAKICAgc3RhdGljIHZvaWQKLSAgdHRfaGFuZGxlX2RlbHRhcyggRlRfT3V0bGluZSogIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICBpbl9wb2ludHMsCi0gICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgICBoYXNfZGVsdGEgKQorICB0dF9pbnRlcnBvbGF0ZV9kZWx0YXMoIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICBvdXRfcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgIGhhc19kZWx0YSApCiAgIHsKLSAgICBGVF9WZWN0b3IqICBvdXRfcG9pbnRzOworICAgIEZUX0ludCAgZmlyc3RfcG9pbnQ7CisgICAgRlRfSW50ICBlbmRfcG9pbnQ7CiAKLSAgICBGVF9VSW50ICBmaXJzdF9wb2ludDsKLSAgICBGVF9VSW50ICBlbmRfcG9pbnQ7CisgICAgRlRfSW50ICBmaXJzdF9kZWx0YTsKKyAgICBGVF9JbnQgIGN1cl9kZWx0YTsKIAotICAgIEZUX1VJbnQgIGZpcnN0X2RlbHRhOwotICAgIEZUX1VJbnQgIGN1cl9kZWx0YTsKLQotICAgIEZUX1VJbnQgICBwb2ludDsKKyAgICBGVF9JbnQgICAgcG9pbnQ7CiAgICAgRlRfU2hvcnQgIGNvbnRvdXI7CiAKIApAQCAtMTY2Myw4ICsxNzM2LDYgQEAKICAgICBpZiAoICFvdXRsaW5lLT5uX2NvbnRvdXJzICkKICAgICAgIHJldHVybjsKIAotICAgIG91dF9wb2ludHMgPSBvdXRsaW5lLT5wb2ludHM7Ci0KICAgICBjb250b3VyID0gMDsKICAgICBwb2ludCAgID0gMDsKIApAQCAtMTc2OCw2ICsxODM5LDcgQEAKICAgICBHWF9CbGVuZCAgICBibGVuZCAgPSBmYWNlLT5ibGVuZDsKIAogICAgIEZUX1ZlY3RvciogIHBvaW50c19vcmcgPSBOVUxMOworICAgIEZUX1ZlY3RvciogIHBvaW50c19vdXQgPSBOVUxMOwogICAgIEZUX0Jvb2wqICAgIGhhc19kZWx0YSAgPSBOVUxMOwogCiAgICAgRlRfRXJyb3IgICAgZXJyb3I7CkBAIC0xNzk5LDYgKzE4NzEsNyBAQAogICAgIH0KIAogICAgIGlmICggRlRfTkVXX0FSUkFZKCBwb2ludHNfb3JnLCBuX3BvaW50cyApIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIHBvaW50c19vdXQsIG5fcG9pbnRzICkgfHwKICAgICAgICAgIEZUX05FV19BUlJBWSggaGFzX2RlbHRhLCBuX3BvaW50cyApICApCiAgICAgICBnb3RvIEZhaWwxOwogCkBAIC0xODE4LDcgKzE4OTEsMjAgQEAKICAgICAgIGdvdG8gRmFpbDI7CiAKICAgICB0dXBsZUNvdW50ICAgPSBGVF9HRVRfVVNIT1JUKCk7Ci0gICAgb2Zmc2V0VG9EYXRhID0gZ2x5cGhfc3RhcnQgKyBGVF9HRVRfVVNIT1JUKCk7CisgICAgb2Zmc2V0VG9EYXRhID0gRlRfR0VUX1VTSE9SVCgpOworCisgICAgLyogcm91Z2ggc2FuaXR5IHRlc3QgKi8KKyAgICBpZiAoIG9mZnNldFRvRGF0YSArICggdHVwbGVDb3VudCAmIEdYX1RDX1RVUExFX0NPVU5UX01BU0sgKSAqIDQgPgorICAgICAgICAgICBibGVuZC0+Z3Zhcl9zaXplICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXM6IgorICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGdseXBoIHZhcmlhdGlvbiBhcnJheSBoZWFkZXJcbiIgKSk7CisKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRmFpbDI7CisgICAgfQorCisgICAgb2Zmc2V0VG9EYXRhICs9IGdseXBoX3N0YXJ0OwogCiAgICAgaWYgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVTX1NIQVJFX1BPSU5UX05VTUJFUlMgKQogICAgIHsKQEAgLTE4MjYsMTMgKzE5MTIsMTkgQEAKIAogICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgb2Zmc2V0VG9EYXRhICk7CiAKLSAgICAgIHNoYXJlZHBvaW50cyA9IGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzKCBzdHJlYW0sICZzcG9pbnRfY291bnQgKTsKKyAgICAgIHNoYXJlZHBvaW50cyA9IGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPmd2YXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3BvaW50X2NvdW50ICk7CiAgICAgICBvZmZzZXRUb0RhdGEgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOwogCiAgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBoZXJlICk7CiAgICAgfQogCi0gICAgRlRfVFJBQ0U1KCggImd2YXI6IHRoZXJlIGFyZSAlZCB0dXBsZXM6XG4iLCB0dXBsZUNvdW50ICkpOworICAgIEZUX1RSQUNFNSgoICJndmFyOiB0aGVyZSBhcmUgJWQgdHVwbGVzOlxuIiwKKyAgICAgICAgICAgICAgICB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApKTsKKworICAgIGZvciAoIGogPSAwOyBqIDwgbl9wb2ludHM7IGorKyApCisgICAgICBwb2ludHNfb3JnW2pdID0gb3V0bGluZS0+cG9pbnRzW2pdOwogCiAgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiBHWF9UQ19UVVBMRV9DT1VOVF9NQVNLICk7IGkrKyApCiAgICAgewpAQCAtMTg0OSwxMSArMTk0MSwxNCBAQAogICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfRU1CRURERURfVFVQTEVfQ09PUkQgKQogICAgICAgewogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKLSAgICAgICAgICB0dXBsZV9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSA8PCAyOyAgLyogY29udmVydCBmcm9tICAgICAgICAqLworICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpICogNDsgICAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3J0IGZyYWMgdG8gZml4ZWQgKi8KICAgICAgIH0KICAgICAgIGVsc2UgaWYgKCAoIHR1cGxlSW5kZXggJiBHWF9USV9UVVBMRV9JTkRFWF9NQVNLICkgPj0gYmxlbmQtPnR1cGxlY291bnQgKQogICAgICAgeworICAgICAgICBGVF9UUkFDRTIoKCAiVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXM6IgorICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgdHVwbGUgaW5kZXhcbiIgKSk7CisKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgICAgICBnb3RvIEZhaWwyOwogICAgICAgfQpAQCAtMTg2Niw5ICsxOTYxLDkgQEAKICAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApCiAgICAgICB7CiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQotICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7CisgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgKiA0OwogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKLSAgICAgICAgICBpbV9lbmRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsKKyAgICAgICAgICBpbV9lbmRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgKiA0OwogICAgICAgfQogCiAgICAgICBhcHBseSA9IGZ0X3Zhcl9hcHBseV90dXBsZSggYmxlbmQsCkBAIC0xODg1LDExICsxOTgwLDEzIEBACiAKICAgICAgIGhlcmUgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOwogCisgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmZzZXRUb0RhdGEgKTsKKwogICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfUFJJVkFURV9QT0lOVF9OVU1CRVJTICkKICAgICAgIHsKLSAgICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgb2Zmc2V0VG9EYXRhICk7Ci0KLSAgICAgICAgbG9jYWxwb2ludHMgPSBmdF92YXJfcmVhZHBhY2tlZHBvaW50cyggc3RyZWFtLCAmcG9pbnRfY291bnQgKTsKKyAgICAgICAgbG9jYWxwb2ludHMgPSBmdF92YXJfcmVhZHBhY2tlZHBvaW50cyggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+Z3Zhcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9pbnRfY291bnQgKTsKICAgICAgICAgcG9pbnRzICAgICAgPSBsb2NhbHBvaW50czsKICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTE4OTksOSArMTk5NiwxMSBAQAogICAgICAgfQogCiAgICAgICBkZWx0YXNfeCA9IGZ0X3Zhcl9yZWFkcGFja2VkZGVsdGFzKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+Z3Zhcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfY291bnQgPT0gMCA/IG5fcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcG9pbnRfY291bnQgKTsKICAgICAgIGRlbHRhc195ID0gZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ndmFyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9jb3VudCA9PSAwID8gbl9wb2ludHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwb2ludF9jb3VudCApOwogCkBAIC0xOTIwLDIyICsyMDE5LDIwIEBACiAgICAgICAgIC8qIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgZGVsdGFzIGZvciBldmVyeSBwb2ludCBpbiB0aGUgZ2x5cGggKi8KICAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrICkKICAgICAgICAgewotI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgRlRfVmVjdG9yICBwb2ludF9vcmcgPSBvdXRsaW5lLT5wb2ludHNbal07Ci0jZW5kaWYKKyAgICAgICAgICBGVF9Qb3MgIGRlbHRhX3ggPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOworICAgICAgICAgIEZUX1BvcyAgZGVsdGFfeSA9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CiAKIAotICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54ICs9IEZUX011bEZpeCggZGVsdGFzX3hbal0sIGFwcGx5ICk7Ci0gICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKz0gRlRfTXVsRml4KCBkZWx0YXNfeVtqXSwgYXBwbHkgKTsKKyAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OworICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgICAgIGlmICggKCBwb2ludF9vcmcueCAhPSBvdXRsaW5lLT5wb2ludHNbal0ueCApIHx8Ci0gICAgICAgICAgICAgICAoIHBvaW50X29yZy55ICE9IG91dGxpbmUtPnBvaW50c1tqXS55ICkgKQorICAgICAgICAgIGlmICggZGVsdGFfeCB8fCBkZWx0YV95ICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgJWQ6ICglZCwgJWQpIC0+ICglZCwgJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50X29yZy54LAotICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfb3JnLnksCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCAtIGRlbHRhX3gsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSAtIGRlbHRhX3ksCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCwKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICkpOwogICAgICAgICAgICAgY291bnQrKzsKQEAgLTE5NjAsMTMgKzIwNTcsMTMgQEAKICAgICAgICAgLyogSVVQIGJ5dGVjb2RlIGluc3RydWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrICkKICAgICAgICAgewotICAgICAgICAgIHBvaW50c19vcmdbal0gPSBvdXRsaW5lLT5wb2ludHNbal07CiAgICAgICAgICAgaGFzX2RlbHRhW2pdICA9IEZBTFNFOworICAgICAgICAgIHBvaW50c19vdXRbal0gPSBwb2ludHNfb3JnW2pdOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICggaiA9IDA7IGogPCBwb2ludF9jb3VudDsgaisrICkKICAgICAgICAgewotICAgICAgICAgIEZUX1VTaG9ydCAgaWR4ID0gbG9jYWxwb2ludHNbal07CisgICAgICAgICAgRlRfVVNob3J0ICBpZHggPSBwb2ludHNbal07CiAKIAogICAgICAgICAgIGlmICggaWR4ID49IG5fcG9pbnRzICkKQEAgLTE5NzQsMzQgKzIwNzEsNDMgQEAKIAogICAgICAgICAgIGhhc19kZWx0YVtpZHhdID0gVFJVRTsKIAotICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tpZHhdLnggKz0gRlRfTXVsRml4KCBkZWx0YXNfeFtqXSwgYXBwbHkgKTsKLSAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbaWR4XS55ICs9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CisgICAgICAgICAgcG9pbnRzX291dFtpZHhdLnggKz0gRlRfTXVsRml4KCBkZWx0YXNfeFtqXSwgYXBwbHkgKTsKKyAgICAgICAgICBwb2ludHNfb3V0W2lkeF0ueSArPSBGVF9NdWxGaXgoIGRlbHRhc195W2pdLCBhcHBseSApOwogICAgICAgICB9CiAKICAgICAgICAgLyogbm8gbmVlZCB0byBoYW5kbGUgcGhhbnRvbSBwb2ludHMgaGVyZSwgICAgICAqLwogICAgICAgICAvKiBzaW5jZSBzb2xpdGFyeSBwb2ludHMgY2FuJ3QgYmUgaW50ZXJwb2xhdGVkICovCi0gICAgICAgIHR0X2hhbmRsZV9kZWx0YXMoIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c19vcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19kZWx0YSApOworICAgICAgICB0dF9pbnRlcnBvbGF0ZV9kZWx0YXMoIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3JnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19kZWx0YSApOwogCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICBwb2ludCBkZWx0YXM6XG4iICkpOwogCi0gICAgICAgIGZvciAoIGogPSAwOyBqIDwgbl9wb2ludHM7IGorKykKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrICkKICAgICAgICAgewotICAgICAgICAgIGlmICggKCBwb2ludHNfb3JnW2pdLnggIT0gb3V0bGluZS0+cG9pbnRzW2pdLnggKSB8fAotICAgICAgICAgICAgICAgKCBwb2ludHNfb3JnW2pdLnkgIT0gb3V0bGluZS0+cG9pbnRzW2pdLnkgKSApCisgICAgICAgICAgRlRfUG9zICBkZWx0YV94ID0gcG9pbnRzX291dFtqXS54IC0gcG9pbnRzX29yZ1tqXS54OworICAgICAgICAgIEZUX1BvcyAgZGVsdGFfeSA9IHBvaW50c19vdXRbal0ueSAtIHBvaW50c19vcmdbal0ueTsKKworCisgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKKyAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSArPSBkZWx0YV95OworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBpZiAoIGRlbHRhX3ggfHwgZGVsdGFfeSApCiAgICAgICAgICAgewogICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAoJWQsICVkKSAtPiAoJWQsICVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGosCi0gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3JnW2pdLngsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3JnW2pdLnksCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCAtIGRlbHRhX3gsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSAtIGRlbHRhX3ksCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCwKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICkpOwogICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgfQogCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKICAgICAgICAgaWYgKCAhY291bnQgKQogICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBub25lXG4iICkpOwogI2VuZGlmCkBAIC0yMDIwLDYgKzIxMjYsOCBAQAogICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CiAKICAgRmFpbDI6CisgICAgaWYgKCBzaGFyZWRwb2ludHMgIT0gQUxMX1BPSU5UUyApCisgICAgICBGVF9GUkVFKCBzaGFyZWRwb2ludHMgKTsKICAgICBGVF9GUkVFKCB0dXBsZV9jb29yZHMgKTsKICAgICBGVF9GUkVFKCBpbV9zdGFydF9jb29yZHMgKTsKICAgICBGVF9GUkVFKCBpbV9lbmRfY29vcmRzICk7CkBAIC0yMDI4LDYgKzIxMzYsNyBAQAogCiAgIEZhaWwxOgogICAgIEZUX0ZSRUUoIHBvaW50c19vcmcgKTsKKyAgICBGVF9GUkVFKCBwb2ludHNfb3V0ICk7CiAgICAgRlRfRlJFRSggaGFzX2RlbHRhICk7CiAKICAgICByZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oIGIvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaAppbmRleCAwNjBkNGQ2Li5hYThmNmVhIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCisrKyBiL3NyYy90cnVldHlwZS90dGd4dmFyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgR1ggRm9udCBWYXJpYXRpb24gbG9hZGVyIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZyBhbmQgR2VvcmdlIFdpbGxpYW1zLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUR1hWQVJfSF9fCi0jZGVmaW5lIF9fVFRHWFZBUl9IX18KKyNpZm5kZWYgVFRHWFZBUl9IXworI2RlZmluZSBUVEdYVkFSX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC05NSw2ICs5NSw4IEBACiAgICAgRlRfVUludCAgICAgICAgIGd2X2dseXBoY250OwogICAgIEZUX1VMb25nKiAgICAgICBnbHlwaG9mZnNldHM7CiAKKyAgICBGVF9VTG9uZyAgICAgICAgZ3Zhcl9zaXplOworCiAgIH0gR1hfQmxlbmRSZWM7CiAKIApAQCAtMTc2LDcgKzE3OCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fVFRHWFZBUl9IX18gKi8KKyNlbmRpZiAvKiBUVEdYVkFSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyBiL3NyYy90cnVldHlwZS90dGludGVycC5jCmluZGV4IDA4OWY2MDQuLjJkMTVlYTcgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGludGVycC5jCisrKyBiL3NyYy90cnVldHlwZS90dGludGVycC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNiwxMCArMjYsMTQgQEAKICNpbmNsdWRlIEZUX1RSSUdPTk9NRVRSWV9ICiAjaW5jbHVkZSBGVF9TWVNURU1fSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfRFJJVkVSX0gKKyNpbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSAogCiAjaW5jbHVkZSAidHRpbnRlcnAuaCIKICNpbmNsdWRlICJ0dGVycm9ycy5oIgogI2luY2x1ZGUgInR0c3VicGl4LmgiCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorI2luY2x1ZGUgInR0Z3h2YXIuaCIKKyNlbmRpZgogCiAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKQEAgLTQ1LDE5ICs0OSwyMSBAQAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0aW50ZXJwCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEluIG9yZGVyIHRvIGRldGVjdCBpbmZpbml0ZSBsb29wcyBpbiB0aGUgY29kZSwgd2Ugc2V0IHVwIGEgY291bnRlciAgICAqLwotICAvKiB3aXRoaW4gdGhlIHJ1biBsb29wLiAgQSBzaW5nbGUgc3Ryb2tlIG9mIGludGVycHJldGF0aW9uIGlzIG5vdyAgICAgICAgKi8KLSAgLyogbGltaXRlZCB0byBhIG1heGltdW0gbnVtYmVyIG9mIG9wY29kZXMgZGVmaW5lZCBiZWxvdy4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQVhfUlVOTkFCTEVfT1BDT0RFUyAgMTAwMDAwMEwKKyNkZWZpbmUgTk9fU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGV4Yy0+ZmFjZSApKS0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBcCisgICAgICAgICAgICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1ICkKIAotCi0jZGVmaW5lIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorI2RlZmluZSBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKCAoKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZXhjLT5mYWNlICkpLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFwKICAgICAgICAgICAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggKQorI2VuZGlmCiAKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorI2RlZmluZSBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZXhjLT5mYWNlICkpLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFwKKyAgICAgICAgICAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgKQorI2VuZGlmCiAKICNkZWZpbmUgUFJPSkVDVCggdjEsIHYyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QoIGV4YywgKHYxKS0+eCAtICh2MiktPngsICh2MSktPnkgLSAodjIpLT55ICkKQEAgLTc0LDQ3ICs4MCwxOCBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW5zdHJ1Y3Rpb24gZGlzcGF0Y2ggZnVuY3Rpb24sIGFzIHVzZWQgYnkgdGhlIGludGVycHJldGVyLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHZvaWQgICgqVEluc3RydWN0aW9uX0Z1bmN0aW9uKSggVFRfRXhlY0NvbnRleHQgIGV4YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICk7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFR3byBzaW1wbGUgYm91bmRzLWNoZWNraW5nIG1hY3Jvcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQk9VTkRTKCB4LCBuICkgICAoIChGVF9VSW50KSh4KSAgPj0gKEZUX1VJbnQpKG4pICApCiAjZGVmaW5lIEJPVU5EU0woIHgsIG4gKSAgKCAoRlRfVUxvbmcpKHgpID49IChGVF9VTG9uZykobikgKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIG1hY3JvIGNvbXB1dGVzIChhKjJeMTQpL2IgYW5kIGNvbXBsZW1lbnRzIFRUX011bEZpeDE0LiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRUX0RpdkZpeDE0KCBhLCBiICkgIEZUX0RpdkZpeCggYSwgKGIpIDw8IDIgKQotCi0KICN1bmRlZiAgU1VDQ0VTUwogI2RlZmluZSBTVUNDRVNTICAwCiAKICN1bmRlZiAgRkFJTFVSRQogI2RlZmluZSBGQUlMVVJFICAxCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotI2RlZmluZSBHVUVTU19WRUNUT1IoIFYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBleGMtPkdTLlYueCA9IChGVF9GMkRvdDE0KSggZXhjLT5HUy5ib3RoX3hfYXhpcyA/IDB4NDAwMCA6IDAgKTsgXAotICAgICAgZXhjLT5HUy5WLnkgPSAoRlRfRjJEb3QxNCkoIGV4Yy0+R1MuYm90aF94X2F4aXMgPyAwIDogMHg0MDAwICk7IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBHVUVTU19WRUNUT1IoIFYgKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMTYsOCArMjkzLDggQEAKICAgICBleGVjLT5zdGFja1NpemUgPSAwOwogICAgIGV4ZWMtPmdseXBoU2l6ZSA9IDA7CiAKLSAgICBleGVjLT5zdGFjayAgICAgPSBOVUxMOwotICAgIGV4ZWMtPmdseXBoSW5zICA9IE5VTEw7CisgICAgZXhlYy0+c3RhY2sgICAgPSBOVUxMOworICAgIGV4ZWMtPmdseXBoSW5zID0gTlVMTDsKIAogICAgIGV4ZWMtPmZhY2UgPSBOVUxMOwogICAgIGV4ZWMtPnNpemUgPSBOVUxMOwpAQCAtNDIzLDYgKzQwMCw3IEBACiAgICAgICBleGVjLT5tYXhJRGVmcyAgID0gc2l6ZS0+bWF4X2luc3RydWN0aW9uX2RlZnM7CiAgICAgICBleGVjLT5GRGVmcyAgICAgID0gc2l6ZS0+ZnVuY3Rpb25fZGVmczsKICAgICAgIGV4ZWMtPklEZWZzICAgICAgPSBzaXplLT5pbnN0cnVjdGlvbl9kZWZzOworICAgICAgZXhlYy0+cG9pbnRTaXplICA9IHNpemUtPnBvaW50X3NpemU7CiAgICAgICBleGVjLT50dF9tZXRyaWNzID0gc2l6ZS0+dHRtZXRyaWNzOwogICAgICAgZXhlYy0+bWV0cmljcyAgICA9IHNpemUtPm1ldHJpY3M7CiAKQEAgLTU2MywxMCArNTQxLDYgQEAKICAgICBleGVjLT5HUy5mcmVlVmVjdG9yID0gZXhlYy0+R1MucHJvalZlY3RvcjsKICAgICBleGVjLT5HUy5kdWFsVmVjdG9yID0gZXhlYy0+R1MucHJvalZlY3RvcjsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgZXhlYy0+R1MuYm90aF94X2F4aXMgPSBUUlVFOwotI2VuZGlmCi0KICAgICBleGVjLT5HUy5yb3VuZF9zdGF0ZSA9IDE7CiAgICAgZXhlYy0+R1MubG9vcCAgICAgICAgPSAxOwogCkBAIC01OTMsMTAgKzU2Nyw2IEBACiAgICAgeyAweDQwMDAsIDAgfSwKICAgICB7IDB4NDAwMCwgMCB9LAogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBUUlVFLAotI2VuZGlmCi0KICAgICAxLCA2NCwgMSwKICAgICBUUlVFLCA2OCwgMCwgMCwgOSwgMywKICAgICAwLCBGQUxTRSwgMCwgMSwgMSwgMQpAQCAtNzE2LDE3ICs2ODYsMTcgQEAKIAogICAgIC8qICBJVVBbMF0gICAgKi8gIFBBQ0soIDAsIDAgKSwKICAgICAvKiAgSVVQWzFdICAgICovICBQQUNLKCAwLCAwICksCi0gICAgLyogIFNIUFswXSAgICAqLyAgUEFDSyggMCwgMCApLAotICAgIC8qICBTSFBbMV0gICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgU0hQWzBdICAgICovICBQQUNLKCAwLCAwICksIC8qIGxvb3BzICovCisgICAgLyogIFNIUFsxXSAgICAqLyAgUEFDSyggMCwgMCApLCAvKiBsb29wcyAqLwogICAgIC8qICBTSENbMF0gICAgKi8gIFBBQ0soIDEsIDAgKSwKICAgICAvKiAgU0hDWzFdICAgICovICBQQUNLKCAxLCAwICksCiAgICAgLyogIFNIWlswXSAgICAqLyAgUEFDSyggMSwgMCApLAogICAgIC8qICBTSFpbMV0gICAgKi8gIFBBQ0soIDEsIDAgKSwKLSAgICAvKiAgU0hQSVggICAgICovICBQQUNLKCAxLCAwICksCi0gICAgLyogIElQICAgICAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBTSFBJWCAgICAgKi8gIFBBQ0soIDEsIDAgKSwgLyogbG9vcHMgKi8KKyAgICAvKiAgSVAgICAgICAgICovICBQQUNLKCAwLCAwICksIC8qIGxvb3BzICovCiAgICAgLyogIE1TSVJQWzBdICAqLyAgUEFDSyggMiwgMCApLAogICAgIC8qICBNU0lSUFsxXSAgKi8gIFBBQ0soIDIsIDAgKSwKLSAgICAvKiAgQWxpZ25SUCAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIEFsaWduUlAgICAqLyAgUEFDSyggMCwgMCApLCAvKiBsb29wcyAqLwogICAgIC8qICBSVERHICAgICAgKi8gIFBBQ0soIDAsIDAgKSwKICAgICAvKiAgTUlBUFswXSAgICovICBQQUNLKCAyLCAwICksCiAgICAgLyogIE1JQVBbMV0gICAqLyAgUEFDSyggMiwgMCApLApAQCAtNzk5LDcgKzc2OSw3IEBACiAgICAgLyogIFNBTkdXICAgICAqLyAgUEFDSyggMSwgMCApLAogICAgIC8qICBBQSAgICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKIAotICAgIC8qICBGbGlwUFQgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgRmxpcFBUICAgICovICBQQUNLKCAwLCAwICksIC8qIGxvb3BzICovCiAgICAgLyogIEZsaXBSZ09OICAqLyAgUEFDSyggMiwgMCApLAogICAgIC8qICBGbGlwUmdPRkYgKi8gIFBBQ0soIDIsIDAgKSwKICAgICAvKiAgSU5TXyQ4MyAgICovICBQQUNLKCAwLCAwICksCkBAIC04MTcsOCArNzg3LDggQEAKICAgICAvKiAgSU5TXyQ4RiAgICovICBQQUNLKCAwLCAwICksCiAKICAgICAvKiAgSU5TXyQ5MCAgKi8gICBQQUNLKCAwLCAwICksCi0gICAgLyogIElOU18kOTEgICovICAgUEFDSyggMCwgMCApLAotICAgIC8qICBJTlNfJDkyICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgR0VUVkFSICAgKi8gICBQQUNLKCAwLCAwICksIC8qIHdpbGwgYmUgaGFuZGxlZCBzcGVjaWFsbHkgKi8KKyAgICAvKiAgR0VUREFUQSAgKi8gICBQQUNLKCAwLCAxICksCiAgICAgLyogIElOU18kOTMgICovICAgUEFDSyggMCwgMCApLAogICAgIC8qICBJTlNfJDk0ICAqLyAgIFBBQ0soIDAsIDAgKSwKICAgICAvKiAgSU5TXyQ5NSAgKi8gICBQQUNLKCAwLCAwICksCkBAIC0xMTAwLDggKzEwNzAsMTMgQEAKICAgICAiNyBJTlNfJDhGIiwKIAogICAgICI3IElOU18kOTAiLAorI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgICAiNiBHRVRWQVIiLAorICAgICI3IEdFVERBVEEiLAorI2Vsc2UKICAgICAiNyBJTlNfJDkxIiwKICAgICAiNyBJTlNfJDkyIiwKKyNlbmRpZgogICAgICI3IElOU18kOTMiLAogICAgICI3IElOU18kOTQiLAogICAgICI3IElOU18kOTUiLApAQCAtMTQ4NiwzNCArMTQ2MSwyMiBAQAogICB7CiAgICAgaWYgKCAhZXhjLT50dF9tZXRyaWNzLnJhdGlvICkKICAgICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQotICAgICAgewotICAgICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQotICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IGV4Yy0+dHRfbWV0cmljcy54X3JhdGlvOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnlfcmF0aW87Ci0gICAgICB9CisgICAgICBpZiAoIGV4Yy0+R1MucHJvalZlY3Rvci55ID09IDAgKQorICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueF9yYXRpbzsKKworICAgICAgZWxzZSBpZiAoIGV4Yy0+R1MucHJvalZlY3Rvci54ID09IDAgKQorICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueV9yYXRpbzsKKwogICAgICAgZWxzZQotI2VuZGlmCiAgICAgICB7Ci0gICAgICAgIGlmICggZXhjLT5HUy5wcm9qVmVjdG9yLnkgPT0gMCApCi0gICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnhfcmF0aW87Ci0KLSAgICAgICAgZWxzZSBpZiAoIGV4Yy0+R1MucHJvalZlY3Rvci54ID09IDAgKQotICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IGV4Yy0+dHRfbWV0cmljcy55X3JhdGlvOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIEZUX0YyNkRvdDYgIHgsIHk7CisgICAgICAgIEZUX0YyNkRvdDYgIHgsIHk7CiAKIAotICAgICAgICAgIHggPSBUVF9NdWxGaXgxNCggZXhjLT50dF9tZXRyaWNzLnhfcmF0aW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueCApOwotICAgICAgICAgIHkgPSBUVF9NdWxGaXgxNCggZXhjLT50dF9tZXRyaWNzLnlfcmF0aW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueSApOwotICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IEZUX0h5cG90KCB4LCB5ICk7Ci0gICAgICAgIH0KKyAgICAgICAgeCA9IFRUX011bEZpeDE0KCBleGMtPnR0X21ldHJpY3MueF9yYXRpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueCApOworICAgICAgICB5ID0gVFRfTXVsRml4MTQoIGV4Yy0+dHRfbWV0cmljcy55X3JhdGlvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ICk7CisgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IEZUX0h5cG90KCB4LCB5ICk7CiAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBleGMtPnR0X21ldHJpY3MucmF0aW87CkBAIC0xNjExLDcgKzE1NzQsNyBAQAogICBzdGF0aWMgRlRfU2hvcnQKICAgR2V0U2hvcnRJbnMoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7Ci0gICAgLyogUmVhZGluZyBhIGJ5dGUgc3RyZWFtIHNvIHRoZXJlIGlzIG5vIGVuZGlhbmVzcyAoRGF2ZVApICovCisgICAgLyogUmVhZGluZyBhIGJ5dGUgc3RyZWFtIHNvIHRoZXJlIGlzIG5vIGVuZGlhbm5lc3MgKERhdmVQKSAqLwogICAgIGV4Yy0+SVAgKz0gMjsKICAgICByZXR1cm4gKEZUX1Nob3J0KSggKCBleGMtPmNvZGVbZXhjLT5JUCAtIDJdIDw8IDggKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5jb2RlW2V4Yy0+SVAgLSAxXSAgICAgICk7CkBAIC0xNjkyLDYgKzE2NTUsMTAgQEAKICAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHpvbmUgICAgIDo6IFRoZSBhZmZlY3RlZCBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gICAgICAqLworICAvKiAgICBgVG91Y2hlcycgdGhlIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCiAgIERpcmVjdF9Nb3ZlKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgVFRfR2x5cGhab25lICAgIHpvbmUsCkBAIC0xNzAxLDE5ICsxNjY4LDI4IEBACiAgICAgRlRfRjI2RG90NiAgdjsKIAogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBGVF9BU1NFUlQoICFleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApOwotI2VuZGlmCi0KICAgICB2ID0gZXhjLT5HUy5mcmVlVmVjdG9yLng7CiAKICAgICBpZiAoIHYgIT0gMCApCiAgICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgKCAhZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxMT1dfWF9ETU9WRSApICkgKQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworICAgICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CisgICAgICBlbHNlCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgICAvKiBFeGNlcHRpb24gdG8gdGhlIHBvc3QtSVVQIGN1cmZldzogQWxsb3cgdGhlIHggY29tcG9uZW50IG9mICovCisgICAgICAvKiBkaWFnb25hbCBtb3ZlcywgYnV0IG9ubHkgcG9zdC1JVVAuICBEZWphVnUgdHJpZXMgdG8gYWRqdXN0ICovCisgICAgICAvKiBkaWFnb25hbCBzdGVtcyBsaWtlIG9uIGBaJyBhbmQgYHonIHBvc3QtSVVQLiAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAmJiAhZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApCisgICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorCisgICAgICBpZiAoIE5PX1NVQlBJWEVMX0hJTlRJTkcgKQogICAgICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CiAKICAgICAgIHpvbmUtPnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOwpAQCAtMTcyMyw3ICsxNjk5LDEzIEBACiAKICAgICBpZiAoIHYgIT0gMCApCiAgICAgewotICAgICAgem9uZS0+Y3VyW3BvaW50XS55ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIGV4Yy0+Rl9kb3RfUCApOworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgICBpZiAoICEoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKKyAgICAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgIGV4Yy0+aXVweV9jYWxsZWQgICAgICAgICAgICAgKSApCisjZW5kaWYKKyAgICAgICAgem9uZS0+Y3VyW3BvaW50XS55ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIGV4Yy0+Rl9kb3RfUCApOwogCiAgICAgICB6b25lLT50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWTsKICAgICB9CkBAIC0xNzU2LDEwICsxNzM4LDYgQEAKICAgICBGVF9GMjZEb3Q2ICB2OwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX0FTU0VSVCggIWV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICk7Ci0jZW5kaWYKLQogICAgIHYgPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKIAogICAgIGlmICggdiAhPSAwICkKQEAgLTE3NzgsNiArMTc1Niw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIFRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgYXJlIHVzZWQgd2hlbmV2ZXIgYm90aCB2ZWN0b3JzIGFyZSBib3RoICAgICAgKi8KICAgLyogICBhbG9uZyBvbmUgb2YgdGhlIGNvb3JkaW5hdGUgdW5pdCB2ZWN0b3JzLCBpLmUuIGluIDkwJSBvZiB0aGUgY2FzZXMuICovCisgIC8qICAgU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE3ODgsMTIgKzE3NjcsMTkgQEAKICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgIHBvaW50LAogICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UgKQogICB7Ci0gICAgRlRfVU5VU0VEKCBleGMgKTsKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmICFleGMtPmlnbm9yZV94X21vZGUgKQorICAgICAgem9uZS0+Y3VyW3BvaW50XS54ICs9IGRpc3RhbmNlOworICAgIGVsc2UKKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgIHx8Ci0gICAgICAgICAhZXhjLT5pZ25vcmVfeF9tb2RlICkKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICYmICFleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBkaXN0YW5jZTsKKyAgICBlbHNlCisjZW5kaWYKKworICAgIGlmICggTk9fU1VCUElYRUxfSElOVElORyApCiAgICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gZGlzdGFuY2U7CiAKICAgICB6b25lLT50YWdzW3BvaW50XSAgfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CkBAIC0xODA4LDggKzE3OTQsMTQgQEAKICAgewogICAgIEZUX1VOVVNFRCggZXhjICk7CiAKLSAgICB6b25lLT5jdXJbcG9pbnRdLnkgKz0gZGlzdGFuY2U7Ci0gICAgem9uZS0+dGFnc1twb2ludF0gIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgaWYgKCAhKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgIGV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgICAgICAgICAmJgorICAgICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAmJiBleGMtPml1cHlfY2FsbGVkICkgKQorI2VuZGlmCisgICAgICB6b25lLT5jdXJbcG9pbnRdLnkgKz0gZGlzdGFuY2U7CisKKyAgICB6b25lLT50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWTsKICAgfQogCiAKQEAgLTIwODgsNyArMjA4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICkKICAgewotICAgIEZUX0YyNkRvdDYgdmFsOworICAgIEZUX0YyNkRvdDYgIHZhbDsKIAogICAgIEZUX1VOVVNFRCggZXhjICk7CiAKQEAgLTIxMjcsNyArMjExOSw3IEBACiAgIC8qICAgIFJvdW5kZWQgZGlzdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIHNheXMgdmVyeSBmZXcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCAgICAqLworICAvKiAgICBUaGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBzYXlzIHZlcnkgbGl0dGxlIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgKi8KICAgLyogICAgYmV0d2VlbiByb3VuZGluZyBhbmQgZW5naW5lIGNvbXBlbnNhdGlvbi4gIEhvd2V2ZXIsIGl0IHNlZW1zIGZyb20gICovCiAgIC8qICAgIHRoZSBkZXNjcmlwdGlvbiBvZiBzdXBlciByb3VuZCB0aGF0IHdlIHNob3VsZCBhZGQgdGhlIGNvbXBlbnNhdGlvbiAqLwogICAvKiAgICBiZWZvcmUgcm91bmRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIzNTIsMTAgKzIzNDQsNiBAQAogICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCiAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeSApCiAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX0FTU0VSVCggIWV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBUVF9Eb3RGaXgxNCggZHgsIGR5LAogICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLngsCiAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueSApOwpAQCAtMjQ1Nyw1MSArMjQ0NSw2IEBACiAgIHN0YXRpYyB2b2lkCiAgIENvbXB1dGVfRnVuY3MoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICAvKiBJZiBib3RoIHZlY3RvcnMgcG9pbnQgcmlnaHR3YXJkcyBhbG9uZyB0aGUgeCBheGlzLCBzZXQgICAgICAgICAgKi8KLSAgICAgIC8qIGBib3RoLXgtYXhpcycgdHJ1ZSwgb3RoZXJ3aXNlIHNldCBpdCBmYWxzZS4gIFRoZSB4IHZhbHVlcyBvbmx5ICAqLwotICAgICAgLyogbmVlZCBiZSB0ZXN0ZWQgYmVjYXVzZSB0aGUgdmVjdG9yIGhhcyBiZWVuIG5vcm1hbGlzZWQgdG8gYSB1bml0ICovCi0gICAgICAvKiB2ZWN0b3Igb2YgbGVuZ3RoIDB4NDAwMCA9IHVuaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIGV4Yy0+R1MuYm90aF94X2F4aXMgPSAoRlRfQm9vbCkoIGV4Yy0+R1MucHJvalZlY3Rvci54ID09IDB4NDAwMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICk7Ci0KLSAgICAgIC8qIFRocm93IGF3YXkgcHJvamVjdGlvbiBhbmQgZnJlZWRvbSB2ZWN0b3IgaW5mb3JtYXRpb24gKi8KLSAgICAgIC8qIGJlY2F1c2UgdGhlIHBhdGVudHMgZG9uJ3QgYWxsb3cgdGhlbSB0byBiZSBzdG9yZWQuICAgKi8KLSAgICAgIC8qIFRoZSByZWxldmFudCBVUyBQYXRlbnRzIGFyZSA1MTU1ODA1IGFuZCA1MzI1NDc5LiAgICAgKi8KLSAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci54ID0gMDsKLSAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ID0gMDsKLSAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID0gMDsKLSAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ID0gMDsKLQotICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKLSAgICAgIHsKLSAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QgICA9IFByb2plY3RfeDsKLSAgICAgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IERpcmVjdF9Nb3ZlX1g7Ci0gICAgICAgIGV4Yy0+ZnVuY19tb3ZlX29yaWcgPSBEaXJlY3RfTW92ZV9PcmlnX1g7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGV4Yy0+ZnVuY19wcm9qZWN0ICAgPSBQcm9qZWN0X3k7Ci0gICAgICAgIGV4Yy0+ZnVuY19tb3ZlICAgICAgPSBEaXJlY3RfTW92ZV9ZOwotICAgICAgICBleGMtPmZ1bmNfbW92ZV9vcmlnID0gRGlyZWN0X01vdmVfT3JpZ19ZOwotICAgICAgfQotCi0gICAgICBpZiAoIGV4Yy0+R1MuZHVhbFZlY3Rvci54ID09IDB4NDAwMCApCi0gICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IFByb2plY3RfeDsKLSAgICAgIGVsc2UgaWYgKCBleGMtPkdTLmR1YWxWZWN0b3IueSA9PSAweDQwMDAgKQotICAgICAgICBleGMtPmZ1bmNfZHVhbHByb2ogPSBQcm9qZWN0X3k7Ci0gICAgICBlbHNlCi0gICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IER1YWxfUHJvamVjdDsKLQotICAgICAgLyogRm9yY2UgcmVjYWxjdWxhdGlvbiBvZiBjYWNoZWQgYXNwZWN0IHJhdGlvICovCi0gICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSAwOwotCi0gICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HICovCi0KICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID09IDB4NDAwMCApCiAgICAgICBleGMtPkZfZG90X1AgPSBleGMtPkdTLnByb2pWZWN0b3IueDsKICAgICBlbHNlIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgPT0gMHg0MDAwICkKQEAgLTI1ODAsMjYgKzI1MjMsMjMgQEAKICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgVnksCiAgICAgICAgICAgICAgRlRfVW5pdFZlY3RvciogIFIgKQogICB7Ci0gICAgRlRfRjI2RG90NiAgVzsKKyAgICBGVF9WZWN0b3IgVjsKIAogCi0gICAgaWYgKCBGVF9BQlMoIFZ4ICkgPCAweDQwMDBMICYmIEZUX0FCUyggVnkgKSA8IDB4NDAwMEwgKQorICAgIGlmICggVnggPT0gMCAmJiBWeSA9PSAwICkKICAgICB7Ci0gICAgICBpZiAoIFZ4ID09IDAgJiYgVnkgPT0gMCApCi0gICAgICB7Ci0gICAgICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEISBJdCBzZWVtcyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHRyeSAgICovCi0gICAgICAgIC8qICAgICAgdG8gbm9ybWFsaXplIHRoZSB2ZWN0b3IgKDAsMCkuICBSZXR1cm4gaW1tZWRpYXRlbHkuICovCi0gICAgICAgIHJldHVybiBTVUNDRVNTOwotICAgICAgfQotCi0gICAgICBWeCAqPSAweDQwMDA7Ci0gICAgICBWeSAqPSAweDQwMDA7CisgICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgSXQgc2VlbXMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byB0cnkgICAqLworICAgICAgLyogICAgICB0byBub3JtYWxpemUgdGhlIHZlY3RvciAoMCwwKS4gIFJldHVybiBpbW1lZGlhdGVseS4gKi8KKyAgICAgIHJldHVybiBTVUNDRVNTOwogICAgIH0KIAotICAgIFcgPSBGVF9IeXBvdCggVngsIFZ5ICk7CisgICAgVi54ID0gVng7CisgICAgVi55ID0gVnk7CiAKLSAgICBSLT54ID0gKEZUX0YyRG90MTQpVFRfRGl2Rml4MTQoIFZ4LCBXICk7Ci0gICAgUi0+eSA9IChGVF9GMkRvdDE0KVRUX0RpdkZpeDE0KCBWeSwgVyApOworICAgIEZUX1ZlY3Rvcl9Ob3JtTGVuKCAmViApOworCisgICAgUi0+eCA9IChGVF9GMkRvdDE0KSggVi54IC8gNCApOworICAgIFItPnkgPSAoRlRfRjJEb3QxNCkoIFYueSAvIDQgKTsKIAogICAgIHJldHVybiBTVUNDRVNTOwogICB9CkBAIC0yNjQ0LDEzICsyNTg0LDIwIEBACiAgIEluc19NUFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotICAgIC8qIE5vdGU6IFRoZSBwb2ludCBzaXplIHNob3VsZCBiZSBpcnJlbGV2YW50IGluIGEgZ2l2ZW4gZm9udCBwcm9ncmFtOyAqLwotICAgIC8qICAgICAgIHdlIHRodXMgZGVjaWRlIHRvIHJldHVybiBvbmx5IHRoZSBQUEVNIHZhbHVlLiAgICAgICAgICAgICAgICAqLwotI2lmIDAKLSAgICBhcmdzWzBdID0gZXhjLT5tZXRyaWNzLnBvaW50U2l6ZTsKLSNlbHNlCi0gICAgYXJnc1swXSA9IGV4Yy0+ZnVuY19jdXJfcHBlbSggZXhjICk7Ci0jZW5kaWYKKyAgICBpZiAoIE5PX1NVQlBJWEVMX0hJTlRJTkcgKQorICAgIHsKKyAgICAgIC8qIE1pY3Jvc29mdCdzIEdESSBieXRlY29kZSBpbnRlcnByZXRlciBhbHdheXMgcmV0dXJucyB2YWx1ZSAxMjsgKi8KKyAgICAgIC8qIHdlIHJldHVybiB0aGUgY3VycmVudCBQUEVNIHZhbHVlIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGFyZ3NbMF0gPSBleGMtPmZ1bmNfY3VyX3BwZW0oIGV4YyApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogQSBwb3NzaWJsZSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2YgdGhlIE1QUyBpbnN0cnVjdGlvbiBpcyB0byAgICovCisgICAgICAvKiBpbXBsZW1lbnQgb3B0aWNhbCBzY2FsaW5nIGFuZCBzaW1pbGFyIGZlYXR1cmVzLCB3aGljaCBzaG91bGQgYmUgKi8KKyAgICAgIC8qIGJhc2VkIG9uIHBlcmNlcHR1YWwgYXR0cmlidXRlcywgdGh1cyBpbmRlcGVuZGVudCBvZiB0aGUgICAgICAgICAqLworICAgICAgLyogcmVzb2x1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBhcmdzWzBdID0gZXhjLT5wb2ludFNpemU7CisgICAgfQogICB9CiAKIApAQCAtMjk0Myw3ICsyODkwLDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE5FR1tdOiAgICAgICAgTkVHYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6IGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX05FRyggRlRfTG9uZyogIGFyZ3MgKQpAQCAtMjk4OCw4ICsyOTM1LDYgQEAKICAgSW5zX1JTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotCiAgICAgRlRfVUxvbmcgIEkgPSAoRlRfVUxvbmcpYXJnc1swXTsKIAogCkBAIC0zMDAyLDkgKzI5NDcsMTAgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgICAgLyogc3VicGl4ZWwgaGludGluZyAtIGF2b2lkIFR5cGVtYW4gRHN0cm9rZSBhbmQgKi8KICAgICAgIC8qIElTdHJva2UgYW5kIFZhY3Vmb3JtIHJvdW5kcyAgICAgICAgICAgICAgICAgICovCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICggKCBJID09IDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgKCBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzICYKQEAgLTMwMTksMjUgKzI5NjUsOSBAQAogICAgICAgICAgICAgICAgZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgKSApICkKICAgICAgICAgYXJnc1swXSA9IDA7CiAgICAgICBlbHNlCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KICAgICAgICAgYXJnc1swXSA9IGV4Yy0+c3RvcmFnZVtJXTsKICAgICB9Ci0KLSNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KLQotICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07Ci0KLQotICAgIGlmICggQk9VTkRTTCggSSwgZXhjLT5zdG9yZVNpemUgKSApCi0gICAgewotICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsKLSAgICAgIGVsc2UKLSAgICAgICAgYXJnc1swXSA9IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGFyZ3NbMF0gPSBleGMtPnN0b3JhZ2VbSV07Ci0KLSNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAgIH0KIAogCkBAIC0zMjAwLDcgKzMxMzAsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE1BWFtdOiAgICAgICAgTUFYaW11bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDhCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gaW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKQEAgLTMyMTQsNyArMzE0NCw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogTUlOW106ICAgICAgICBNSU5pbXVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg2OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4OEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZApAQCAtMzUxOSw3ICszNDQ5LDcgQEAKICAgICBUVF9EZWZSZWNvcmQqICByZWM7CiAgICAgVFRfRGVmUmVjb3JkKiAgbGltaXQ7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIGFyZ3VtZW50cyB0byBvcGNvZGVzIGFyZSBza2lwcGVkIGJ5IGBTS0lQX0NvZGUnICovCiAgICAgRlRfQnl0ZSAgICBvcGNvZGVfcGF0dGVybls5XVsxMl0gPSB7CiAgICAgICAgICAgICAgICAgIC8qICMwIGlubGluZSBkZWx0YSBmdW5jdGlvbiAxICovCkBAIC0zNjE3LDcgKzM1NDcsNyBAQAogICAgIEZUX1VTaG9ydCAgb3Bjb2RlX3BvaW50ZXJbOV0gPSB7ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CiAgICAgRlRfVVNob3J0ICBvcGNvZGVfc2l6ZVs5XSAgICA9IHsgMTIsIDgsIDgsIDYsIDcsIDQsIDUsIDQsIDIgfTsKICAgICBGVF9VU2hvcnQgIGk7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogCiAgICAgLyogc29tZSBmb250IHByb2dyYW1zIGFyZSBicm9rZW4gZW5vdWdoIHRvIHJlZGVmaW5lIGZ1bmN0aW9ucyEgKi8KQEAgLTM2NjIsNyArMzU5Miw3IEBACiAgICAgaWYgKCBuID4gZXhjLT5tYXhGdW5jICkKICAgICAgIGV4Yy0+bWF4RnVuYyA9IChGVF9VSW50MTYpbjsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgLyogV2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB0aGVzZSBhcmUgdHlwZW1hbiBmdW5jdGlvbnMsICovCiAgICAgLyogaG93ZXZlciB0aGV5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIFJTIDIyIGlzIGNhbGxlZCAgICovCiAgICAgaWYgKCBuID49IDY0ICYmIG4gPD0gNjYgKQpAQCAtMzY3NSw5ICszNjA1LDkgQEAKICAgICB3aGlsZSAoIFNraXBDb2RlKCBleGMgKSA9PSBTVUNDRVNTICkKICAgICB7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQogICAgICAgewogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG9wY29kZV9wYXR0ZXJuczsgaSsrICkKICAgICAgICAgewpAQCAtMzc4NCw3ICszNzE0LDcgQEAKICAgICAgICAgICAgICggZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8yICkgKTsKICAgICAgIH0KIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICAgIHN3aXRjaCAoIGV4Yy0+b3Bjb2RlICkKICAgICAgIHsKQEAgLTM4MTMsOSArMzc0Myw5IEBACiAgICAgVFRfQ2FsbFJlYyogIHBSZWM7CiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgZXhjLT5zcGhfaW5fZnVuY19mbGFncyA9IDB4MDAwMDsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgaWYgKCBleGMtPmNhbGxUb3AgPD0gMCApICAgICAvKiBXZSBlbmNvdW50ZXJlZCBhbiBFTkRGIHdpdGhvdXQgYSBjYWxsICovCiAgICAgewpAQCAtMzkwMSw4ICszODMxLDggQEAKICAgICBpZiAoICFkZWYtPmFjdGl2ZSApCiAgICAgICBnb3RvIEZhaWw7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgKCAoIGV4Yy0+aXVwX2NhbGxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fQ0FMTF9BRlRFUl9JVVAgKSApIHx8CkBAIC0zOTEwLDcgKzM4NDAsNyBAQAogICAgICAgZ290byBGYWlsOwogICAgIGVsc2UKICAgICAgIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgPSBkZWYtPnNwaF9mZGVmX2ZsYWdzOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICAvKiBjaGVjayB0aGUgY2FsbCBzdGFjayAqLwogICAgIGlmICggZXhjLT5jYWxsVG9wID49IGV4Yy0+Y2FsbFNpemUgKQpAQCAtMzk4OSwxNCArMzkxOSwxNCBAQAogICAgIGlmICggIWRlZi0+YWN0aXZlICkKICAgICAgIGdvdG8gRmFpbDsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAoIGRlZi0+c3BoX2ZkZWZfZmxhZ3MgJiBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICkgKQogICAgICAgZ290byBGYWlsOwogICAgIGVsc2UKICAgICAgIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgPSBkZWYtPnNwaF9mZGVmX2ZsYWdzOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICAvKiBjaGVjayBzdGFjayAqLwogICAgIGlmICggZXhjLT5jYWxsVG9wID49IGV4Yy0+Y2FsbFNpemUgKQpAQCAtNDA4OSw2ICs0MDE5LDcgQEAKICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBOZXN0ZWRfREVGUyApOwogICAgICAgICByZXR1cm47CiAgICAgICBjYXNlIDB4MkQ6ICAgLyogRU5ERiAqLworICAgICAgICBkZWYtPmVuZCA9IGV4Yy0+SVA7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICB9CkBAIC00MzA4LDE2ICs0MjM5LDEyIEBACiAgICAgICBleGMtPkdTLmR1YWxWZWN0b3IueCA9IEFBOwogICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yLnkgPSBCQjsKICAgICB9Ci0gICAgZWxzZQotICAgICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7CiAKICAgICBpZiAoICggb3Bjb2RlICYgMiApID09IDAgKQogICAgIHsKICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID0gQUE7CiAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSA9IEJCOwogICAgIH0KLSAgICBlbHNlCi0gICAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsKIAogICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOwogICB9CkBAIC00MzM5LDcgKzQyNjYsNiBAQAogICAgICAgICAgICAgICAgICAgICAmZXhjLT5HUy5wcm9qVmVjdG9yICkgPT0gU1VDQ0VTUyApCiAgICAgewogICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yID0gZXhjLT5HUy5wcm9qVmVjdG9yOwotICAgICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7CiAgICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKICAgICB9CiAgIH0KQEAgLTQzNjAsNyArNDI4Niw2IEBACiAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpYXJnc1swXSwKICAgICAgICAgICAgICAgICAgICAgJmV4Yy0+R1MuZnJlZVZlY3RvciApID09IFNVQ0NFU1MgKQogICAgIHsKLSAgICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOwogICAgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CiAgICAgfQogICB9CkBAIC00Mzc1LDcgKzQzMDAsNiBAQAogICBzdGF0aWMgdm9pZAogICBJbnNfU0ZWVFBWKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewotICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOwogICAgIGV4Yy0+R1MuZnJlZVZlY3RvciA9IGV4Yy0+R1MucHJvalZlY3RvcjsKICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKICAgfQpAQCAtNDQwNCw3ICs0MzI4LDYgQEAKICAgICBOb3JtYWxpemUoIFgsIFksICZleGMtPkdTLnByb2pWZWN0b3IgKTsKIAogICAgIGV4Yy0+R1MuZHVhbFZlY3RvciA9IGV4Yy0+R1MucHJvalZlY3RvcjsKLSAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsKICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKICAgfQogCkBAIC00NDMwLDcgKzQzNTMsNiBAQAogICAgIFggPSBTOwogCiAgICAgTm9ybWFsaXplKCBYLCBZLCAmZXhjLT5HUy5mcmVlVmVjdG9yICk7Ci0gICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7CiAgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CiAgIH0KIApAQCAtNDQ0NSwyMSArNDM2Nyw4IEBACiAgIEluc19HUFYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgewotICAgICAgYXJnc1swXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwOwotICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAwIDogMHg0MDAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYXJnc1swXSA9IGV4Yy0+R1MucHJvalZlY3Rvci54OwotICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MucHJvalZlY3Rvci55OwotICAgIH0KLSNlbHNlCiAgICAgYXJnc1swXSA9IGV4Yy0+R1MucHJvalZlY3Rvci54OwogICAgIGFyZ3NbMV0gPSBleGMtPkdTLnByb2pWZWN0b3IueTsKLSNlbmRpZgogICB9CiAKIApAQCAtNDQ3MywyMSArNDM4Miw4IEBACiAgIEluc19HRlYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgewotICAgICAgYXJnc1swXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwOwotICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAwIDogMHg0MDAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYXJnc1swXSA9IGV4Yy0+R1MuZnJlZVZlY3Rvci54OwotICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MuZnJlZVZlY3Rvci55OwotICAgIH0KLSNlbHNlCiAgICAgYXJnc1swXSA9IGV4Yy0+R1MuZnJlZVZlY3Rvci54OwogICAgIGFyZ3NbMV0gPSBleGMtPkdTLmZyZWVWZWN0b3IueTsKLSNlbmRpZgogICB9CiAKIApAQCAtNDYwNyw3ICs0NTAzLDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEZMSVBPRkZbXTogICAgU2V0IGF1dG8tRkxJUCB0byBPRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0ZMSVBPRkYoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQpAQCAtNDkyNiwxMyArNDgyMiwxMyBAQAogICAgICAgfQogICAgIH0KIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgLyogRGlzYWJsZSBUeXBlIDIgVmFjdWZvcm0gUm91bmRzIC0gZS5nLiBBcmlhbCBOYXJyb3cgKi8KLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgotICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICYmCi0gICAgICAgICBGVF9BQlMoIEQgKSA9PSA2NCAgKQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgJiYKKyAgICAgICAgIEZUX0FCUyggRCApID09IDY0ICAgICAgICAgICApCiAgICAgICBEICs9IDE7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIGFyZ3NbMF0gPSBEOwogICB9CkBAIC01MDE3LDcgKzQ5MTMsNiBAQAogICAgIH0KIAogICAgIE5vcm1hbGl6ZSggQSwgQiwgJmV4Yy0+R1MucHJvalZlY3RvciApOwotICAgIEdVRVNTX1ZFQ1RPUiggZnJlZVZlY3RvciApOwogICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOwogICB9CiAKQEAgLTUxNTcsMTEgKzUwNTIsMTEgQEAKICAgSW5zX0lOU1RDVFJMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotICAgIEZUX0xvbmcgIEssIEwsIEtmOworICAgIEZUX1VMb25nICBLLCBMLCBLZjsKIAogCi0gICAgSyA9IGFyZ3NbMV07Ci0gICAgTCA9IGFyZ3NbMF07CisgICAgSyA9IChGVF9VTG9uZylhcmdzWzFdOworICAgIEwgPSAoRlRfVUxvbmcpYXJnc1swXTsKIAogICAgIC8qIHNlbGVjdG9yIHZhbHVlcyBjYW5ub3QgYmUgYE9SJ2VkOyAgICAgICAgICAgICAgICAgKi8KICAgICAvKiB0aGV5IGFyZSBpbmRpY2VzIHN0YXJ0aW5nIHdpdGggaW5kZXggMSwgbm90IGZsYWdzICovCkBAIC01MTg5LDEyICs1MDg0LDIzIEBACiAgICAgZXhjLT5HUy5pbnN0cnVjdF9jb250cm9sICY9IH4oRlRfQnl0ZSlLZjsKICAgICBleGMtPkdTLmluc3RydWN0X2NvbnRyb2wgfD0gKEZUX0J5dGUpTDsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIC8qIElOU1RDVFJMIG1vZGlmeWluZyBmbGFnIDMgYWxzbyBoYXMgYW4gZWZmZWN0ICovCi0gICAgLyogb3V0c2lkZSBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoIEsgPT0gMyApCi0gICAgICBleGMtPmlnbm9yZV94X21vZGUgPSBGVF9CT09MKCBMID09IDQgKTsKKyAgICB7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIC8qIElOU1RDVFJMIG1vZGlmeWluZyBmbGFnIDMgYWxzbyBoYXMgYW4gZWZmZWN0ICovCisgICAgICAvKiBvdXRzaWRlIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQorICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgPSBGVF9CT09MKCBMID09IDQgKTsKICNlbmRpZgorCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIC8qIE5hdGl2ZSBDbGVhclR5cGUgZm9udHMgc2lnbiBhIHdhaXZlciB0aGF0IHR1cm5zIG9mZiBhbGwgYmFja3dhcmRzICovCisgICAgICAvKiBjb21wYXRpYmlsaXR5IGhhY2tzIGFuZCBsZXRzIHRoZW0gcHJvZ3JhbSBwb2ludHMgdG8gdGhlIGdyaWQgbGlrZSAqLworICAgICAgLyogaXQncyAxOTk2LiAgVGhleSBtaWdodCBzaWduIGEgd2FpdmVyIGZvciBqdXN0IG9uZSBnbHlwaCwgdGhvdWdoLiAgKi8KKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICkKKyAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSA9ICFGVF9CT09MKCBMID09IDQgKTsKKyNlbmRpZgorICAgIH0KICAgfQogCiAKQEAgLTUyNzksNiArNTE4NSwxNSBAQAogICAgIEZUX1VTaG9ydCAgcG9pbnQ7CiAKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApCisgICAgICBnb3RvIEZhaWw7CisjZW5kaWYKKwogICAgIGlmICggZXhjLT50b3AgPCBleGMtPkdTLmxvb3AgKQogICAgIHsKICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKQEAgLTUzMjUsNiArNTI0MCwxNSBAQAogICAgIEZUX1VTaG9ydCAgSSwgSywgTDsKIAogCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAvKiBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICovCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICYmCisgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICYmCisgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPml1cHlfY2FsbGVkICAgICAgICAgICAgICkKKyAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgSyA9IChGVF9VU2hvcnQpYXJnc1sxXTsKICAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCkBAIC01MzU0LDYgKzUyNzgsMTUgQEAKICAgICBGVF9VU2hvcnQgIEksIEssIEw7CiAKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApCisgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIEsgPSAoRlRfVVNob3J0KWFyZ3NbMV07CiAgICAgTCA9IChGVF9VU2hvcnQpYXJnc1swXTsKIApAQCAtNTQwNiwzMSArNTMzOSwxNCBAQAogCiAgICAgZCA9IFBST0pFQ1QoIHpwLmN1ciArIHAsIHpwLm9yZyArIHAgKTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgewotICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKLSAgICAgIHsKLSAgICAgICAgKnggPSBkOwotICAgICAgICAqeSA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgICp4ID0gMDsKLSAgICAgICAgKnkgPSBkOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAqeCA9IEZUX011bERpdiggZCwgKEZUX0xvbmcpZXhjLT5HUy5mcmVlVmVjdG9yLngsIGV4Yy0+Rl9kb3RfUCApOwotICAgICAgKnkgPSBGVF9NdWxEaXYoIGQsIChGVF9Mb25nKWV4Yy0+R1MuZnJlZVZlY3Rvci55LCBleGMtPkZfZG90X1AgKTsKLSAgICB9CisgICAgKnggPSBGVF9NdWxEaXYoIGQsIChGVF9Mb25nKWV4Yy0+R1MuZnJlZVZlY3Rvci54LCBleGMtPkZfZG90X1AgKTsKKyAgICAqeSA9IEZUX011bERpdiggZCwgKEZUX0xvbmcpZXhjLT5HUy5mcmVlVmVjdG9yLnksIGV4Yy0+Rl9kb3RfUCApOwogCiAgICAgcmV0dXJuIFNVQ0NFU1M7CiAgIH0KIAogCisgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KICAgc3RhdGljIHZvaWQKICAgTW92ZV9acDJfUG9pbnQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCkBAIC01NDM4LDM1ICs1MzU0LDI4IEBACiAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZHksCiAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgdG91Y2ggKQogICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQotICAgICAgewotICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7Ci0gICAgICAgIGlmICggdG91Y2ggKQotICAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgKz0gZHk7Ci0gICAgICAgIGlmICggdG91Y2ggKQotICAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKICAgICB7Ci0gICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggISggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkgKQorI2VuZGlmCisgICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCArPSBkeDsKKwogICAgICAgaWYgKCB0b3VjaCApCiAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOwogICAgIH0KIAogICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCiAgICAgewotICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ICs9IGR5OworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgICBpZiAoICEoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKKyAgICAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgIGV4Yy0+aXVweV9jYWxsZWQgICAgICAgICAgICAgKSApCisjZW5kaWYKKyAgICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ICs9IGR5OworCiAgICAgICBpZiAoIHRvdWNoICkKICAgICAgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CiAgICAgfQpAQCAtNTUxMywxMyArNTQyMiwxMiBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIGRvZXNuJ3QgZm9sbG93IENsZWFydHlwZSBzcGVjIGJ1dCBwcm9kdWNlcyBiZXR0ZXIgcmVzdWx0ICovCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgotICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgKQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYgZXhjLT5pZ25vcmVfeF9tb2RlICkKICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIDAsIGR5LCBUUlVFICk7CiAgICAgICBlbHNlCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogCiAgICAgICBleGMtPkdTLmxvb3AtLTsKQEAgLTU2NDcsOSArNTU1NSwxNSBAQAogICB7CiAgICAgRlRfRjI2RG90NiAgZHgsIGR5OwogICAgIEZUX1VTaG9ydCAgIHBvaW50OwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgRlRfSW50ICAgICAgQjEsIEIyOwogI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBGVF9Cb29sICAgICBpbl90d2lsaWdodCA9IGV4Yy0+R1MuZ2VwMCA9PSAwIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZ2VwMSA9PSAwIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZ2VwMiA9PSAwOworI2VuZGlmCisKIAogCiAgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCArIDEgKQpAQCAtNTY1OSwyNiArNTU3Myw4IEBACiAgICAgICBnb3RvIEZhaWw7CiAgICAgfQogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQotICAgICAgewotICAgICAgICBkeCA9IChGVF9VSW50MzIpYXJnc1swXTsKLSAgICAgICAgZHkgPSAwOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkeCA9IDA7Ci0gICAgICAgIGR5ID0gKEZUX1VJbnQzMilhcmdzWzBdOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICBkeCA9IFRUX011bEZpeDE0KCBhcmdzWzBdLCBleGMtPkdTLmZyZWVWZWN0b3IueCApOwotICAgICAgZHkgPSBUVF9NdWxGaXgxNCggYXJnc1swXSwgZXhjLT5HUy5mcmVlVmVjdG9yLnkgKTsKLSAgICB9CisgICAgZHggPSBUVF9NdWxGaXgxNCggYXJnc1swXSwgZXhjLT5HUy5mcmVlVmVjdG9yLnggKTsKKyAgICBkeSA9IFRUX011bEZpeDE0KCBhcmdzWzBdLCBleGMtPkdTLmZyZWVWZWN0b3IueSApOwogCiAgICAgd2hpbGUgKCBleGMtPkdTLmxvb3AgPiAwICkKICAgICB7CkBAIC01Njk1LDcgKzU1OTEsOCBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKICAgICAgIHsKICAgICAgICAgLyogIElmIG5vdCB1c2luZyBpZ25vcmVfeF9tb2RlIHJlbmRlcmluZywgYWxsb3cgWlAyIG1vdmUuICAgICAgICAqLwogICAgICAgICAvKiAgSWYgaW5saW5lIGRlbHRhcyBhcmVuJ3QgYWxsb3dlZCwgc2tpcCBaUDIgbW92ZS4gICAgICAgICAgICAgICovCkBAIC01NzA1LDggKzU2MDIsNyBAQAogICAgICAgICAvKiAgIC0gdGhlIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgU0hQSVggbW92ZXMgICAgICAgICovCiAgICAgICAgIC8qICAgLSB0aGUgbW92ZSBpcyBvbiBhIHByZXZpb3VzbHkgWS10b3VjaGVkIHBvaW50ICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgotICAgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICAgIGlmICggZXhjLT5pZ25vcmVfeF9tb2RlICkKICAgICAgICAgewogICAgICAgICAgIC8qIHNhdmUgcG9pbnQgZm9yIGxhdGVyIGNvbXBhcmlzb24gKi8KICAgICAgICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQpAQCAtNTc3MCwxNSArNTY2NiwzMCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICAgIHsKKyAgICAgICAgLyogU3BlY2lhbCBjYXNlOiBhbGxvdyBTSFBJWCB0byBtb3ZlIHBvaW50cyBpbiB0aGUgdHdpbGlnaHQgem9uZS4gICovCisgICAgICAgIC8qIE90aGVyd2lzZSwgdHJlYXQgU0hQSVggdGhlIHNhbWUgYXMgREVMVEFQLiAgVW5icmVha3MgdmFyaW91cyAgICAqLworICAgICAgICAvKiBmb250cyBzdWNoIGFzIG9sZGVyIHZlcnNpb25zIG9mIFJva2tpdHQgYW5kIERUTCBBcmdvIFQgTGlnaHQgICAgKi8KKyAgICAgICAgLyogdGhhdCB3b3VsZCBnbGl0Y2ggc2V2ZXJseSBhZnRlciBjYWxsaW5nIEFMSUdOUlAgYWZ0ZXIgYSBibG9ja2VkICovCisgICAgICAgIC8qIFNIUElYLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGluX3R3aWxpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAoICEoIGV4Yy0+aXVweF9jYWxsZWQgJiYgZXhjLT5pdXB5X2NhbGxlZCApICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgKCAoIGV4Yy0+aXNfY29tcG9zaXRlICYmIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKSB8fAorICAgICAgICAgICAgICAgICAoIGV4Yy0+enAyLnRhZ3NbcG9pbnRdICYgRlRfQ1VSVkVfVEFHX1RPVUNIX1kgKSAgICApICkgKQorICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAwLCBkeSwgVFJVRSApOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgU2tpcDoKLQotI2Vsc2UgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwotCi0gICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgZHgsIGR5LCBUUlVFICk7Ci0KLSNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCi0KKyNlbmRpZgogICAgICAgZXhjLT5HUy5sb29wLS07CiAgICAgfQogCkBAIC01Nzk4LDE0ICs1NzA5LDEzIEBACiAgIEluc19NU0lSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBGVF9VU2hvcnQgICBwb2ludDsKKyAgICBGVF9VU2hvcnQgICBwb2ludCA9IDA7CiAgICAgRlRfRjI2RG90NiAgZGlzdGFuY2U7Ci0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsgLyogcGFjaWZ5IGNvbXBpbGVyICovCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsKIAogCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCiAgICAgewogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKIApAQCAtNTgxNCw4ICs1NzI0LDcgQEAKICAgICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsKICAgICB9Ci0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKQEAgLTU4MzgsMTQgKzU3NDcsMTQgQEAKIAogICAgIGRpc3RhbmNlID0gUFJPSkVDVCggZXhjLT56cDEuY3VyICsgcG9pbnQsIGV4Yy0+enAwLmN1ciArIGV4Yy0+R1MucnAwICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBtYWtlIE1TSVJQIHJlc3BlY3QgQ1ZUIGN1dC1pbjsgKi8KLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgRlRfQUJTKCBkaXN0YW5jZSAtIGFyZ3NbMV0gKSA+PSBjb250cm9sX3ZhbHVlX2N1dGluICkKICAgICAgIGRpc3RhbmNlID0gYXJnc1sxXTsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAxLCBwb2ludCwgYXJnc1sxXSAtIGRpc3RhbmNlICk7CiAKQEAgLTU4ODQsMTAgKzU3OTMsMTAgQEAKICAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxICkgIT0gMCApCiAgICAgewogICAgICAgY3VyX2Rpc3QgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMC5jdXJbcG9pbnRdICk7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgJiYKLSAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAmJgotICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICApCiAgICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKICAgICAgICAgICAgICAgICAgICAgIGV4YywKICAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LApAQCAtNTkzMCwxNCArNTgzOSwxNCBAQAogICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpYXJnc1sxXTsKICAgICBwb2ludCAgICAgICAgICAgICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IDA7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIGlmICggQk9VTkRTKCBwb2ludCwgICAgIGV4Yy0+enAwLm5fcG9pbnRzICkgfHwKICAgICAgICAgIEJPVU5EU0woIGN2dEVudHJ5LCBleGMtPmN2dFNpemUgKSAgICAgICkKQEAgLTU5NzEsMjcgKzU4ODAsMjcgQEAKIAogICAgIGlmICggZXhjLT5HUy5nZXAwID09IDAgKSAgIC8qIElmIGluIHR3aWxpZ2h0IHpvbmUgKi8KICAgICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIE9ubHkgYWRqdXN0IGlmIG5vdCBpbiBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIG9yIGlnbm9yZV94X21vZGUuICovCiAgICAgICAvKiBEZXRlcm1pbmVkIHZpYSBleHBlcmltZW50YXRpb24gYW5kIG1heSBiZSBpbmNvcnJlY3QuLi4gICAgICAgICAqLwotICAgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICB8fAotICAgICAgICAgICAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAhZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICkgKQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworICAgICAgaWYgKCAhKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICYmCisgICAgICAgICAgICAgICggZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICkgKSApCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KICAgICAgICAgZXhjLT56cDAub3JnW3BvaW50XS54ID0gVFRfTXVsRml4MTQoIGRpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggKTsKICAgICAgIGV4Yy0+enAwLm9yZ1twb2ludF0ueSA9IFRUX011bEZpeDE0KCBkaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSApLAogICAgICAgZXhjLT56cDAuY3VyW3BvaW50XSAgID0gZXhjLT56cDAub3JnW3BvaW50XTsKICAgICB9Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTUlBUF9IQUNLICkgJiYKICAgICAgICAgIGRpc3RhbmNlID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgZGlzdGFuY2UgPSAwOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBvcmdfZGlzdCA9IEZBU1RfUFJPSkVDVCggJmV4Yy0+enAwLmN1cltwb2ludF0gKTsKIApAQCAtNjAwMCwxMCArNTkwOSwxMCBAQAogICAgICAgaWYgKCBGVF9BQlMoIGRpc3RhbmNlIC0gb3JnX2Rpc3QgKSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQogICAgICAgICBkaXN0YW5jZSA9IG9yZ19kaXN0OwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgJiYKLSAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAmJgotICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICApCiAgICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSggZXhjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zWzBdICk7CkBAIC02MDMyLDE5ICs1OTQxLDE5IEBACiAgIEluc19NRFJQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRlRfVVNob3J0ICAgcG9pbnQ7CisgICAgRlRfVVNob3J0ICAgcG9pbnQgPSAwOwogICAgIEZUX0YyNkRvdDYgIG9yZ19kaXN0LCBkaXN0YW5jZSwgbWluaW11bV9kaXN0YW5jZTsKIAogCiAgICAgbWluaW11bV9kaXN0YW5jZSA9IGV4Yy0+R1MubWluaW11bV9kaXN0YW5jZTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgbWluaW11bV9kaXN0YW5jZSA9IDA7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIHBvaW50ID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCkBAIC02MTA4LDEwICs2MDE3LDEwIEBACiAKICAgICBpZiAoICggZXhjLT5vcGNvZGUgJiA0ICkgIT0gMCApCiAgICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICYmCi0gICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgJiYKLSAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCApCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgKQogICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoCiAgICAgICAgICAgICAgICAgICAgICBleGMsCiAgICAgICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKQEAgLTYxNzksMTEgKzYwODgsMTEgQEAKICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKICAgICAgICAgICAgICAgICBjb250cm9sX3ZhbHVlX2N1dGluLAogICAgICAgICAgICAgICAgIG1pbmltdW1fZGlzdGFuY2U7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICBGVF9JbnQgICAgICBCMSAgICAgICAgICAgPSAwOyAvKiBwYWNpZnkgY29tcGlsZXIgKi8KICAgICBGVF9JbnQgICAgICBCMiAgICAgICAgICAgPSAwOwogICAgIEZUX0Jvb2wgICAgIHJldmVyc2VfbW92ZSA9IEZBTFNFOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKIAogICAgIG1pbmltdW1fZGlzdGFuY2UgICAgPSBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2U7CkBAIC02MTkxLDEzICs2MTAwLDEzIEBACiAgICAgcG9pbnQgICAgICAgICAgICAgICA9IChGVF9VU2hvcnQpYXJnc1swXTsKICAgICBjdnRFbnRyeSAgICAgICAgICAgID0gKEZUX1VMb25nKSggYXJnc1sxXSArIDEgKTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IG1pbmltdW1fZGlzdGFuY2UgPSAwOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgY3Z0Wy0xXSA9IDAgYWx3YXlzICovCiAKQEAgLTYyNTAsOCArNjE1OSw4IEBACiAgICAgICAgIGN2dF9kaXN0ID0gLWN2dF9kaXN0OwogICAgIH0KIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfVElNRVNfTkVXX1JPTUFOX0hBQ0sgKSApCkBAIC02MjYxLDcgKzYxNzAsNyBAQAogICAgICAgZWxzZSBpZiAoIGN1cl9kaXN0ID4gNjQgJiYgY3VyX2Rpc3QgPCA4NCApCiAgICAgICAgIGN2dF9kaXN0ICs9IDMyOwogICAgIH0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgLyogY29udHJvbCB2YWx1ZSBjdXQtaW4gYW5kIHJvdW5kICovCiAKQEAgLTYyOTYsMTYgKzYyMDUsMTYgQEAKICAgICBlbHNlCiAgICAgewogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIGRvIGN2dCBjdXQtaW4gYWx3YXlzIGluIE1JUlAgZm9yIHNwaCAqLwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICYmCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgJiYKICAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPkdTLmdlcDAgPT0gZXhjLT5HUy5nZXAxICkKICAgICAgIHsKICAgICAgICAgaWYgKCBGVF9BQlMoIGN2dF9kaXN0IC0gb3JnX2Rpc3QgKSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQogICAgICAgICAgIGN2dF9kaXN0ID0gb3JnX2Rpc3Q7CiAgICAgICB9Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKAogICAgICAgICAgICAgICAgICAgIGV4YywKQEAgLTYzMjksOCArNjIzOCw4IEBACiAgICAgICB9CiAgICAgfQogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKICAgICB7CiAgICAgICBCMSA9IGV4Yy0+enAxLmN1cltwb2ludF0ueTsKIApAQCAtNjM0NywxMiArNjI1NiwxMiBAQAogICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0NPVVJJRVJfTkVXXzJfSEFDSyApICkKICAgICAgICAgZGlzdGFuY2UgKz0gNjQ7CiAgICAgfQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBkaXN0YW5jZSAtIGN1cl9kaXN0ICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQogICAgIHsKICAgICAgIEIyID0gZXhjLT56cDEuY3VyW3BvaW50XS55OwogCkBAIC02Mzc2LDcgKzYyODUsNyBAQAogICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCAtKCBkaXN0YW5jZSAtIGN1cl9kaXN0ICkgKTsKICAgICB9CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgIEZhaWw6CiAgICAgZXhjLT5HUy5ycDEgPSBleGMtPkdTLnJwMDsKQEAgLTY0MDEsOCArNjMxMCw4IEBACiAgICAgRlRfRjI2RG90NiAgZGlzdGFuY2U7CiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fQUxJR05SUF9BRlRFUl9JVVAgKSApCkBAIC02NDEwLDcgKzYzMTksNyBAQAogICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICBCT1VORFMoIGV4Yy0+R1MucnAwLCBleGMtPnpwMC5uX3BvaW50cyApICkKQEAgLTY1MDUsOCArNjQxNCw2IEBACiAgICAgZHggPSBleGMtPnpwMC5jdXJbYjBdLnggLSBleGMtPnpwMS5jdXJbYTBdLng7CiAgICAgZHkgPSBleGMtPnpwMC5jdXJbYjBdLnkgLSBleGMtPnpwMS5jdXJbYTBdLnk7CiAKLSAgICBleGMtPnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfQk9USDsKLQogICAgIGRpc2NyaW1pbmFudCA9IEZUX011bERpdiggZGF4LCAtZGJ5LCAweDQwICkgKwogICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGF5LCBkYngsIDB4NDAgKTsKICAgICBkb3Rwcm9kdWN0ICAgPSBGVF9NdWxEaXYoIGRheCwgZGJ4LCAweDQwICkgKwpAQCAtNjUyNyw2ICs2NDM0LDcgQEAKICAgICAgIFIueCA9IEZUX011bERpdiggdmFsLCBkYXgsIGRpc2NyaW1pbmFudCApOwogICAgICAgUi55ID0gRlRfTXVsRGl2KCB2YWwsIGRheSwgZGlzY3JpbWluYW50ICk7CiAKKyAgICAgIC8qIFhYWDogQmxvY2sgaW4gYmFja3dhcmRzX2NvbXBhdGliaWxpdHkgYW5kL29yIHBvc3QtSVVQPyAqLwogICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ID0gZXhjLT56cDEuY3VyW2EwXS54ICsgUi54OwogICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ID0gZXhjLT56cDEuY3VyW2EwXS55ICsgUi55OwogICAgIH0KQEAgLTY1MzQsNiArNjQ0Miw3IEBACiAgICAgewogICAgICAgLyogZWxzZSwgdGFrZSB0aGUgbWlkZGxlIG9mIHRoZSBtaWRkbGVzIG9mIEEgYW5kIEIgKi8KIAorICAgICAgLyogWFhYOiBCbG9jayBpbiBiYWNrd2FyZHNfY29tcGF0aWJpbGl0eSBhbmQvb3IgcG9zdC1JVVA/ICovCiAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggPSAoIGV4Yy0+enAxLmN1clthMF0ueCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAxLmN1clthMV0ueCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1cltiMF0ueCArCkBAIC02NTQzLDYgKzY0NTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjBdLnkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjFdLnkgKSAvIDQ7CiAgICAgfQorCisgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX0JPVEg7CiAgIH0KIAogCkBAIC02OTIwLDYgKzY4MzEsMjMgQEAKICAgICBGVF9TaG9ydCAgY29udG91cjsgICAgICAgLyogY3VycmVudCBjb250b3VyICovCiAKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworICAgIC8qIEFsbG93IElVUCB1bnRpbCBpdCBoYXMgYmVlbiBjYWxsZWQgb24gYm90aCBheGVzLiAgSW1tZWRpYXRlbHkgKi8KKyAgICAvKiByZXR1cm4gb24gc3Vic2VxdWVudCBvbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICYmCisgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+aXVweF9jYWxsZWQgJiYgZXhjLT5pdXB5X2NhbGxlZCApCisgICAgICAgIHJldHVybjsKKworICAgICAgaWYgKCBleGMtPm9wY29kZSAmIDEgKQorICAgICAgICBleGMtPml1cHhfY2FsbGVkID0gVFJVRTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCA9IFRSVUU7CisgICAgfQorI2VuZGlmCisKICAgICAvKiBpZ25vcmUgZW1wdHkgb3V0bGluZXMgKi8KICAgICBpZiAoIGV4Yy0+cHRzLm5fY29udG91cnMgPT0gMCApCiAgICAgICByZXR1cm47CkBAIC02OTQzLDE1ICs2ODcxLDE1IEBACiAgICAgY29udG91ciA9IDA7CiAgICAgcG9pbnQgICA9IDA7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgotICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgKQogICAgIHsKICAgICAgIGV4Yy0+aXVwX2NhbGxlZCA9IFRSVUU7CiAgICAgICBpZiAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1NLSVBfSVVQICkKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgZG8KICAgICB7CkBAIC03MDIzLDM3ICs2OTUxLDE2IEBACiAgICAgRlRfVVNob3J0ICBBOwogICAgIEZUX1VMb25nICAgQywgUDsKICAgICBGVF9Mb25nICAgIEI7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICBGVF9VU2hvcnQgIEIxLCBCMjsKIAogCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT19ERUxUQVBfQUZURVJfSVVQICkgKQogICAgICAgZ290byBGYWlsOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwotCi0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIC8qIERlbHRhIGhpbnRpbmcgaXMgY292ZXJlZCBieSBVUyBQYXRlbnQgNTE1OTY2OC4gKi8KLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICBGVF9Mb25nICBuID0gYXJnc1swXSAqIDI7Ci0KLQotICAgICAgaWYgKCBleGMtPmFyZ3MgPCBuICkKLSAgICAgIHsKLSAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKLSAgICAgICAgbiA9IGV4Yy0+YXJnczsKLSAgICAgIH0KLQotICAgICAgZXhjLT5hcmdzIC09IG47Ci0gICAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7Ci0gICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIFAgICAgPSAoRlRfVUxvbmcpZXhjLT5mdW5jX2N1cl9wcGVtKCBleGMgKTsKICAgICBudW1wID0gKEZUX1VMb25nKWFyZ3NbMF07ICAgLyogc29tZSBwb2ludHMgdGhlb3JldGljYWxseSBtYXkgb2NjdXIgbW9yZQpAQCAtNzEwNyw5ICs3MDE0LDkgQEAKICAgICAgICAgICAgIEIrKzsKICAgICAgICAgICBCICo9IDFMIDw8ICggNiAtIGV4Yy0+R1MuZGVsdGFfc2hpZnQgKTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKLSAgICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorICAgICAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogIEFsbG93IGRlbHRhIG1vdmUgaWYKQEAgLTcxNjYsOSArNzA3MywyNSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAotICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCBCICk7CisgICAgICAgICAgeworCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgICAgICAgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKyAgICAgICAgICAgIC8qIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCAhKCBleGMtPml1cHhfY2FsbGVkICYmIGV4Yy0+aXVweV9jYWxsZWQgKSAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAoICggZXhjLT5pc19jb21wb3NpdGUgJiYgZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApIHx8CisgICAgICAgICAgICAgICAgICAgICAoIGV4Yy0+enAwLnRhZ3NbQV0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICAgICAgICApICkKKyAgICAgICAgICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDAsIEEsIEIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDAsIEEsIEIgKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTcxOTYsMjYgKzcxMTksNiBAQAogICAgIEZUX0xvbmcgICBCOwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIC8qIERlbHRhIGhpbnRpbmcgaXMgY292ZXJlZCBieSBVUyBQYXRlbnQgNTE1OTY2OC4gKi8KLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICBGVF9Mb25nICBuID0gYXJnc1swXSAqIDI7Ci0KLQotICAgICAgaWYgKCBleGMtPmFyZ3MgPCBuICkKLSAgICAgIHsKLSAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKLSAgICAgICAgbiA9IGV4Yy0+YXJnczsKLSAgICAgIH0KLQotICAgICAgZXhjLT5hcmdzIC09IG47Ci0gICAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7Ci0gICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KICAgICBQICAgID0gKEZUX1VMb25nKWV4Yy0+ZnVuY19jdXJfcHBlbSggZXhjICk7CiAgICAgbnVtcCA9IChGVF9VTG9uZylhcmdzWzBdOwogCkBAIC03MzA0LDIwICs3MjA3LDIxIEBACiAgIEluc19HRVRJTkZPKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRlRfTG9uZyAgSzsKKyAgICBGVF9Mb25nICAgIEs7CisgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBleGMtPmZhY2UgKTsKIAogCiAgICAgSyA9IDA7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAvKiBSQVNURVJJWkVSIFZFUlNJT04gICAgICAgICAgICovCiAgICAgLyogU2VsZWN0b3IgQml0OiAgMCAgICAgICAgICAgICAqLwogICAgIC8qIFJldHVybiBCaXQocyk6IDAtNyAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgJiYKLSAgICAgICAgICggYXJnc1swXSAmIDEgKSAhPSAwICAmJgotICAgICAgICAgZXhjLT5zdWJwaXhlbF9oaW50aW5nICkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAmJgorICAgICAgICAgKCBhcmdzWzBdICYgMSApICE9IDAgICAgICAgICYmCisgICAgICAgICBleGMtPnN1YnBpeGVsX2hpbnRpbmcgICAgICAgKQogICAgIHsKICAgICAgIGlmICggZXhjLT5pZ25vcmVfeF9tb2RlICkKICAgICAgIHsKQEAgLTczMzEsOSArNzIzNSw5IEBACiAgICAgICAgIEsgPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4OwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KICAgICAgIGlmICggKCBhcmdzWzBdICYgMSApICE9IDAgKQotICAgICAgICBLID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNTsKKyAgICAgICAgSyA9IGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbjsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAvKiBHTFlQSCBST1RBVEVEICAgICAgICAgICAgICAgICovCkBAIC03MzQxLDcgKzcyNDUsNyBAQAogICAgIC8qIFJldHVybiBCaXQocyk6IDggICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCAoIGFyZ3NbMF0gJiAyICkgIT0gMCAmJiBleGMtPnR0X21ldHJpY3Mucm90YXRlZCApCi0gICAgICBLIHw9IDB4ODA7CisgICAgICBLIHw9IDEgPDwgODsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAvKiBHTFlQSCBTVFJFVENIRUQgICAgICAgICAgICAgICovCkBAIC03MzQ5LDE5ICs3MjUzLDgzIEBACiAgICAgLyogUmV0dXJuIEJpdChzKTogOSAgICAgICAgICAgICAqLwogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoICggYXJnc1swXSAmIDQgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5zdHJldGNoZWQgKQotICAgICAgSyB8PSAxIDw8IDg7CisgICAgICBLIHw9IDEgPDwgOTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogVkFSSUFUSU9OIEdMWVBIICAgICAgICAgICAgICAqLworICAgIC8qIFNlbGVjdG9yIEJpdDogIDMgICAgICAgICAgICAgKi8KKyAgICAvKiBSZXR1cm4gQml0KHMpOiAxMCAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEISAgICAgICAgICAgKi8KKyAgICBpZiAoIChhcmdzWzBdICYgOCApICE9IDAgJiYgZXhjLT5mYWNlLT5ibGVuZCApCisgICAgICBLIHw9IDEgPDwgMTA7CisjZW5kaWYKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBISU5USU5HIEZPUiBHUkFZU0NBTEUgICAgICAgICovCisgICAgLyogQkktTEVWRUwgSElOVElORyBBTkQgICAgICAgICAqLworICAgIC8qIEdSQVlTQ0FMRSBSRU5ERVJJTkcgICAgICAgICAgKi8KICAgICAvKiBTZWxlY3RvciBCaXQ6ICA1ICAgICAgICAgICAgICovCiAgICAgLyogUmV0dXJuIEJpdChzKTogMTIgICAgICAgICAgICAqLwogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoICggYXJnc1swXSAmIDMyICkgIT0gMCAmJiBleGMtPmdyYXlzY2FsZSApCiAgICAgICBLIHw9IDEgPDwgMTI7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICkKKyAgICB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiBISU5USU5HIEZPUiBTVUJQSVhFTCAgICAgICAgICovCisgICAgICAvKiBTZWxlY3RvciBCaXQ6ICA2ICAgICAgICAgICAgICovCisgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxMyAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiB2NDAgZG9lcyBzdWJwaXhlbCBoaW50aW5nIGJ5IGRlZmF1bHQuICovCisgICAgICBpZiAoICggYXJnc1swXSAmIDY0ICkgIT0gMCApCisgICAgICAgIEsgfD0gMSA8PCAxMzsKIAotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogVkVSVElDQUwgTENEIFNVQlBJWEVMUz8gICAgICAqLworICAgICAgLyogU2VsZWN0b3IgQml0OiAgOCAgICAgICAgICAgICAqLworICAgICAgLyogUmV0dXJuIEJpdChzKTogMTUgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAyNTYgKSAhPSAwICYmIGV4Yy0+dmVydGljYWxfbGNkX2xlYW4gKQorICAgICAgICBLIHw9IDEgPDwgMTU7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qIFNVQlBJWEVMIFBPU0lUSU9ORUQ/ICAgICAgICAgKi8KKyAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDEwICAgICAgICAgICAgKi8KKyAgICAgIC8qIFJldHVybiBCaXQocyk6IDE3ICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIFhYWDogRnJlZVR5cGUgc3VwcG9ydHMgaXQsIGRlcGVuZGVudCBvbiB3aGF0IGNsaWVudCBkb2VzPyAqLworICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAxMDI0ICkgIT0gMCApCisgICAgICAgIEsgfD0gMSA8PCAxNzsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogU1lNTUVUUklDQUwgU01PT1RISU5HICAgICAgICAqLworICAgICAgLyogU2VsZWN0b3IgQml0OiAgMTEgICAgICAgICAgICAqLworICAgICAgLyogUmV0dXJuIEJpdChzKTogMTggICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogVGhlIG9ubHkgc21vb3RoaW5nIG1ldGhvZCBGcmVlVHlwZSBzdXBwb3J0cyB1bmxlc3Mgc29tZW9uZSBzZXRzICovCisgICAgICAvKiBGVF9MT0FEX1RBUkdFVF9NT05PLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggKCBhcmdzWzBdICYgMjA0OCApICE9IDAgKQorICAgICAgICBLIHw9IDEgPDwgMTg7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qIENMRUFSVFlQRSBISU5USU5HIEFORCAgICAgICAgKi8KKyAgICAgIC8qIEdSQVlTQ0FMRSBSRU5ERVJJTkcgICAgICAgICAgKi8KKyAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDEyICAgICAgICAgICAgKi8KKyAgICAgIC8qIFJldHVybiBCaXQocyk6IDE5ICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIEdyYXlzY2FsZSByZW5kZXJpbmcgaXMgd2hhdCBGcmVlVHlwZSBkb2VzIGFueXdheSB1bmxlc3Mgc29tZW9uZSAqLworICAgICAgLyogc2V0cyBGVF9MT0FEX1RBUkdFVF9NT05PIG9yIEZUX0xPQURfVEFSR0VUX0xDRChfVikgICAgICAgICAgICAgICovCisgICAgICBpZiAoICggYXJnc1swXSAmIDQwOTYgKSAhPSAwICYmIGV4Yy0+Z3JheXNjYWxlX2NsZWFydHlwZSApCisgICAgICAgIEsgfD0gMSA8PCAxOTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+cmFzdGVyaXplcl92ZXJzaW9uID49IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgKQogICAgIHsKIApAQCAtNzQzNCwxMiArNzQwMiw2MyBAQAogICAgICAgfQogICAgIH0KIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBhcmdzWzBdID0gSzsKICAgfQogCiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHRVRWQVJJQVRJT05bXTogZ2V0IG5vcm1hbGl6ZWQgdmFyaWF0aW9uIChibGVuZCkgY29vcmRpbmF0ZXMgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+IGYyLjE0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWFhYOiBVTkRPQ1VNRU5URUQhICBUaGVyZSBpcyBubyBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGZyb20gQXBwbGUgZm9yICovCisgIC8qICAgICAgdGhpcyBieXRlY29kZSBpbnN0cnVjdGlvbi4gIEFjdGl2ZSBvbmx5IGlmIGEgZm9udCBoYXMgR1ggICAgICAgICAqLworICAvKiAgICAgIHZhcmlhdGlvbiBheGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19HRVRWQVJJQVRJT04oIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VJbnQgICAgbnVtX2F4ZXMgPSBleGMtPmZhY2UtPmJsZW5kLT5udW1fYXhpczsKKyAgICBGVF9GaXhlZCogIGNvb3JkcyAgID0gZXhjLT5mYWNlLT5ibGVuZC0+bm9ybWFsaXplZGNvb3JkczsKKworICAgIEZUX1VJbnQgIGk7CisKKworICAgIGlmICggQk9VTkRTKCBudW1fYXhlcywgZXhjLT5zdGFja1NpemUgKyAxIC0gZXhjLT50b3AgKSApCisgICAgeworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2F4ZXM7IGkrKyApCisgICAgICBhcmdzW2ldID0gY29vcmRzW2ldID4+IDI7IC8qIGNvbnZlcnQgMTYuMTYgdG8gMi4xNCBmb3JtYXQgKi8KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHRVREQVRBW106ICAgIG5vIGlkZWEgd2hhdCB0aGlzIGlzIGdvb2QgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+IDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWFhYOiBVTkRPQ1VNRU5URUQhICBUaGVyZSBpcyBubyBkb2N1bWVudGF0aW9uIGZyb20gQXBwbGUgZm9yIHRoaXMgICAgICovCisgIC8qICAgICAgdmVyeSB3ZWlyZCBieXRlY29kZSBpbnN0cnVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0dFVERBVEEoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSAxNzsKKyAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCAqLworCisKICAgc3RhdGljIHZvaWQKICAgSW5zX1VOS05PV04oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CkBAIC03NTE2LDcgKzc1MzUsNyBAQAogICAgIEZUX0xvbmcgICAgaW5zX2NvdW50ZXIgPSAwOyAgLyogZXhlY3V0ZWQgaW5zdHJ1Y3Rpb25zIGNvdW50ZXIgKi8KICAgICBGVF9VU2hvcnQgIGk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIEZUX0J5dGUgICAgb3Bjb2RlX3BhdHRlcm5bMV1bMl0gPSB7CiAgICAgICAgICAgICAgICAgICAvKiAjOCBUeXBlTWFuIFRhbGsgQWxpZ24gKi8KICAgICAgICAgICAgICAgICAgIHsKQEAgLTc1MjcsMTIgKzc1NDYsMjcgQEAKICAgICBGVF9VU2hvcnQgIG9wY29kZV9wYXR0ZXJucyAgID0gMTsKICAgICBGVF9VU2hvcnQgIG9wY29kZV9wb2ludGVyWzFdID0geyAwIH07CiAgICAgRlRfVVNob3J0ICBvcGNvZGVfc2l6ZVsxXSAgICA9IHsgMSB9OwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgZXhjLT5pdXBfY2FsbGVkID0gRkFMU0U7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyogVG9nZ2xlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFjY29yZGluZyB0byB3aGF0IGZvbnQgc2F5cywgZXhjZXB0ICAqLworICAgIC8qIHdoZW4gaXQncyBhIGB0cmlja3knIGZvbnQgdGhhdCBoZWF2aWx5IHJlbGllcyBvbiB0aGUgaW50ZXJwcmV0ZXIgdG8gKi8KKyAgICAvKiByZW5kZXIgZ2x5cGhzIGNvcnJlY3RseSwgZS5nLiBERkthaS1TQi4gIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICAgICovCisgICAgLyogaGFja3MgbWF5IGJyZWFrIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAgICAgICYmCisgICAgICAgICAhRlRfSVNfVFJJQ0tZKCAmZXhjLT5mYWNlLT5yb290ICkgKQorICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSA9ICEoIGV4Yy0+R1MuaW5zdHJ1Y3RfY29udHJvbCAmIDQgKTsKKyAgICBlbHNlCisgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ID0gRkFMU0U7CisKKyAgICBleGMtPml1cHhfY2FsbGVkID0gRkFMU0U7CisgICAgZXhjLT5pdXB5X2NhbGxlZCA9IEZBTFNFOworI2VuZGlmCiAKICAgICAvKiBzZXQgUFBFTSBhbmQgQ1ZUIGZ1bmN0aW9ucyAqLwogICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IDA7CkBAIC03NTc1LDcgKzc2MDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEyIC0gKCAqb3Bjb2RlX25hbWVbZXhjLT5vcGNvZGVdIC0gJzAnICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyIgKSk7Ci0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgY250OyBuKysgKQorICAgICAgICBmb3IgKCBuID0gMTsgbiA8PSBjbnQ7IG4rKyApCiAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAlZCIsIGV4Yy0+c3RhY2tbZXhjLT50b3AgLSBuXSApKTsKICAgICAgICAgRlRfVFJBQ0U2KCggIlxuIiApKTsKICAgICAgIH0KQEAgLTc2MTEsNyArNzY0NSwyMSBAQAogICAgICAgICBleGMtPmFyZ3MgPSAwOwogICAgICAgfQogCi0gICAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3MgKyAoIFBvcF9QdXNoX0NvdW50W2V4Yy0+b3Bjb2RlXSAmIDE1ICk7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgICAgaWYgKCBleGMtPm9wY29kZSA9PSAweDkxICkKKyAgICAgIHsKKyAgICAgICAgLyogdGhpcyBpcyB2ZXJ5IHNwZWNpYWw6IEdFVFZBUklBVElPTiByZXR1cm5zICovCisgICAgICAgIC8qIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyAgICAgICAgICAgICAqLworCisgICAgICAgIC8qIGl0IGlzIHRoZSBqb2Igb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGBhY3RpdmF0ZScgR1ggaGFuZGxpbmcsICovCisgICAgICAgIC8qIHRoaXMgaXMsIGNhbGxpbmcgYW55IG9mIHRoZSBHWCBBUEkgZnVuY3Rpb25zIG9uIHRoZSBjdXJyZW50ICovCisgICAgICAgIC8qIGZvbnQgdG8gc2VsZWN0IGEgdmFyaWF0aW9uIGluc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggZXhjLT5mYWNlLT5ibGVuZCApCisgICAgICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzICsgZXhjLT5mYWNlLT5ibGVuZC0+bnVtX2F4aXM7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzICsgKCBQb3BfUHVzaF9Db3VudFtleGMtPm9wY29kZV0gJiAxNSApOwogCiAgICAgICAvKiBgbmV3X3RvcCcgaXMgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrLCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24ncyAqLwogICAgICAgLyogZXhlY3V0aW9uLiAgYHRvcCcgd2lsbCBiZSBzZXQgdG8gYG5ld190b3AnIGFmdGVyIHRoZSBgc3dpdGNoJyAgKi8KQEAgLTc2MjUsOSArNzY3Myw5IEBACiAgICAgICBleGMtPnN0ZXBfaW5zID0gVFJVRTsKICAgICAgIGV4Yy0+ZXJyb3IgICAgPSBGVF9FcnJfT2s7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQogICAgICAgewogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG9wY29kZV9wYXR0ZXJuczsgaSsrICkKICAgICAgICAgewpAQCAtNzY1Niw3ICs3NzA0LDcgQEAKICAgICAgICAgfQogICAgICAgfQogCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgICAgewogICAgICAgICBGVF9Mb25nKiAgYXJncyAgID0gZXhjLT5zdGFjayArIGV4Yy0+YXJnczsKQEAgLTc4MDQsNyArNzg1Miw3IEBACiAgICAgICAgICAgSW5zX0FMSUdOUFRTKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIDB4Mjg6ICAvKiA/Pz8/ICovCisgICAgICAgIGNhc2UgMHgyODogIC8qIFJBVyAqLwogICAgICAgICAgIEluc19VTktOT1dOKCBleGMgKTsKICAgICAgICAgICBicmVhazsKIApAQCAtODE1NiwxMCArODIwNCwzMyBAQAogICAgICAgICAgIEluc19JTlNUQ1RSTCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSAweDhGOgorICAgICAgICBjYXNlIDB4OEY6ICAvKiBBREpVU1QgKi8KKyAgICAgICAgY2FzZSAweDkwOiAgLyogQURKVVNUICovCiAgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgICAgICBjYXNlIDB4OTE6CisgICAgICAgICAgLyogaXQgaXMgdGhlIGpvYiBvZiB0aGUgYXBwbGljYXRpb24gdG8gYGFjdGl2YXRlJyBHWCBoYW5kbGluZywgKi8KKyAgICAgICAgICAvKiB0aGlzIGlzLCBjYWxsaW5nIGFueSBvZiB0aGUgR1ggQVBJIGZ1bmN0aW9ucyBvbiB0aGUgY3VycmVudCAqLworICAgICAgICAgIC8qIGZvbnQgdG8gc2VsZWN0IGEgdmFyaWF0aW9uIGluc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBleGMtPmZhY2UtPmJsZW5kICkKKyAgICAgICAgICAgIEluc19HRVRWQVJJQVRJT04oIGV4YywgYXJncyApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc19VTktOT1dOKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4OTI6CisgICAgICAgICAgLyogdGhlcmUgaXMgYXQgbGVhc3Qgb25lIE1TIGZvbnQgKExhb1VJLnR0ZiB2ZXJzaW9uIDUuMDEpIHRoYXQgKi8KKyAgICAgICAgICAvKiB1c2VzIElERUZzIGZvciAweDkxIGFuZCAweDkyOyBmb3IgdGhpcyByZWFzb24gd2UgYWN0aXZhdGUgICAqLworICAgICAgICAgIC8qIEdFVERBVEEgZm9yIEdYIGZvbnRzIG9ubHksIHNpbWlsYXIgdG8gR0VUVkFSSUFUSU9OICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBleGMtPmZhY2UtPmJsZW5kICkKKyAgICAgICAgICAgIEluc19HRVREQVRBKCBhcmdzICk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOworICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICBpZiAoIG9wY29kZSA+PSAweEUwICkKICAgICAgICAgICAgIEluc19NSVJQKCBleGMsIGFyZ3MgKTsKQEAgLTgyNDAsNyArODMxMSw3IEBACiAKICAgICAgIC8qIGluY3JlbWVudCBpbnN0cnVjdGlvbiBjb3VudGVyIGFuZCBjaGVjayBpZiB3ZSBkaWRuJ3QgKi8KICAgICAgIC8qIHJ1biB0aGlzIHByb2dyYW0gZm9yIHRvbyBsb25nIChlLmcuIGluZmluaXRlIGxvb3BzKS4gKi8KLSAgICAgIGlmICggKytpbnNfY291bnRlciA+IE1BWF9SVU5OQUJMRV9PUENPREVTICkKKyAgICAgIGlmICggKytpbnNfY291bnRlciA+IFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIEV4ZWN1dGlvbl9Ub29fTG9uZyApOwogCiAgICAgTFN1aXRlTGFiZWxfOgpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAppbmRleCAzMjcwNmQwLi41M2YwOTQ0IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRJTlRFUlBfSF9fCi0jZGVmaW5lIF9fVFRJTlRFUlBfSF9fCisjaWZuZGVmIFRUSU5URVJQX0hfCisjZGVmaW5lIFRUSU5URVJQX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0b2Jqcy5oIgpAQCAtOTksNyArOTksNyBAQAogICB9IFRUX0NhbGxSZWMsICpUVF9DYWxsU3RhY2s7CiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKICAgfSBTUEhfRm9udF9DbGFzczsKIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MCw2ICsxNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBwdHMsCiAgICAgICAgICAgICAgICAgICAgICAgIHR3aWxpZ2h0OwogCisgICAgRlRfTG9uZyAgICAgICAgICAgIHBvaW50U2l6ZTsgIC8qIGluIDI2LjYgZm9ybWF0ICovCiAgICAgRlRfU2l6ZV9NZXRyaWNzICAgIG1ldHJpY3M7CiAgICAgVFRfU2l6ZV9NZXRyaWNzICAgIHR0X21ldHJpY3M7IC8qIHNpemUgbWV0cmljcyAqLwogCkBAIC0yNDcsOSArMjQ4LDEzNSBAQAogICAgIFRUX1NldF9DVlRfRnVuYyAgICBmdW5jX3dyaXRlX2N2dDsgLyogd3JpdGUgYSBjdnQgZW50cnkgKGluIHBpeGVscykgKi8KICAgICBUVF9TZXRfQ1ZUX0Z1bmMgICAgZnVuY19tb3ZlX2N2dDsgIC8qIGluY3IgYSBjdnQgZW50cnkgKGluIHBpeGVscykgICovCiAKLSAgICBGVF9Cb29sICAgICAgICAgICAgZ3JheXNjYWxlOyAgICAgIC8qIGFyZSB3ZSBoaW50aW5nIGZvciBncmF5c2NhbGU/ICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIGdyYXlzY2FsZTsgICAgICAvKiBiaS1sZXZlbCBoaW50aW5nIGFuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JheXNjYWxlIHJlbmRlcmluZyAgKi8KIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyoKKyAgICAgKiBNb2Rlcm4gVHJ1ZVR5cGUgZm9udHMgYXJlIHVzdWFsbHkgcmVuZGVyZWQgdGhyb3VnaCBNaWNyb3NvZnQncworICAgICAqIGNvbGxlY3Rpb24gb2YgcmVuZGVyaW5nIHRlY2huaXF1ZXMgY2FsbGVkIENsZWFyVHlwZSAoZS5nLiwgc3VicGl4ZWwKKyAgICAgKiByZW5kZXJpbmcgYW5kIHN1YnBpeGVsIGhpbnRpbmcpLiAgV2hlbiBDbGVhclR5cGUgd2FzIGludHJvZHVjZWQsIG1vc3QKKyAgICAgKiBmb250cyB3ZXJlIG5vdCByZWFkeS4gIE1pY3Jvc29mdCBkZWNpZGVkIHRvIGltcGxlbWVudCBhIGJhY2t3YXJkcworICAgICAqIGNvbXBhdGliaWxpdHkgbW9kZSB0aGF0IGVtcGxveWVkIHNldmVyYWwgc2ltcGxlIHRvIGNvbXBsaWNhdGVkCisgICAgICogYXNzdW1wdGlvbnMgYW5kIHRyaWNrcyB0aGF0IG1vZGlmaWVkIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUKKyAgICAgKiBieXRlY29kZSBjb250YWluZWQgaW4gdGhlc2UgZm9udHMgdG8gbWFrZSB0aGVtIGxvb2sgQ2xlYXJUeXBlLXkKKyAgICAgKiBzb21laG93LiAgTW9zdCAod2ViKWZvbnRzIHRoYXQgd2VyZSByZWxlYXNlZCBzaW5jZSB0aGVuIGhhdmUgY29tZSB0bworICAgICAqIHJlbHkgb24gdGhlc2UgaGFja3MgdG8gcmVuZGVyIGNvcnJlY3RseSwgZXZlbiBzb21lIG9mIE1pY3Jvc29mdCdzCisgICAgICogZmxhZ3NoaXAgQ2xlYXJUeXBlIGZvbnRzIChDYWxpYnJpLCBDYW1icmlhLCBTZWdvZSBVSSkuCisgICAgICoKKyAgICAgKiBUaGUgbWluaW1hbCBzdWJwaXhlbCBoaW50aW5nIGNvZGUgKGludGVycHJldGVyIHZlcnNpb24gNDApIGVtcGxveXMgYQorICAgICAqIHNtYWxsIGxpc3Qgb2YgZm9udC1hZ25vc3RpYyBoYWNrcyB0byBibHVkZ2VvbiBub24tbmF0aXZlLUNsZWFyVHlwZQorICAgICAqIGZvbnRzIChleGNlcHQgdHJpY2t5IG9uZXNbMV0pIGludG8gc3VibWlzc2lvbi4gIEl0IHdpbGwgbm90IHRyeSB0bworICAgICAqIHRvZ2dsZSBoYWNrcyBmb3Igc3BlY2lmaWMgZm9udHMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb21wbGV4aXR5CisgICAgICogcmVhc29ucy4gIFRoZSBmb2N1cyBpcyBvbiBtb2Rlcm4gKHdlYilmb250cyByYXRoZXIgdGhhbiBsZWdhY3kgZm9udHMKKyAgICAgKiB0aGF0IHdlcmUgbWFkZSBmb3IgYmxhY2stYW5kLXdoaXRlIHJlbmRlcmluZy4KKyAgICAgKgorICAgICAqIE1ham9yIGhhY2tzCisgICAgICoKKyAgICAgKiAtIEFueSBwb2ludCBtb3ZlbWVudCBvbiB0aGUgeCBheGlzIGlzIGlnbm9yZWQgKGNmLiBgRGlyZWN0X01vdmUnIGFuZAorICAgICAqICAgYERpcmVjdF9Nb3ZlX1gnKS4gIFRoaXMgaGFzIHRoZSBzbWFsbGVzdCBjb2RlIGZvb3RwcmludCBhbmQgc2luZ2xlCisgICAgICogICBiaWdnZXN0IGVmZmVjdC4gIFRoZSBDbGVhclR5cGUgd2F5IHRvIGluY3JlYXNlIHJlc29sdXRpb24gaXMKKyAgICAgKiAgIHN1cGVyc2FtcGxpbmcgdGhlIHggYXhpcywgdGhlIEZyZWVUeXBlIHdheSBpcyBpZ25vcmluZyBpbnN0cnVjdGlvbnMKKyAgICAgKiAgIG9uIHRoZSB4IGF4aXMsIHdoaWNoIGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBpbiB0aGUgbWFqb3JpdHkgb2YKKyAgICAgKiAgIGNhc2VzLgorICAgICAqCisgICAgICogLSBQb2ludHMgYXJlIG5vdCBtb3ZlZCBwb3N0LUlVUCAobmVpdGhlciBvbiB0aGUgeCBub3Igb24gdGhlIHkgYXhpcyksCisgICAgICogICBleGNlcHQgdGhlIHggY29tcG9uZW50IG9mIGRpYWdvbmFsIG1vdmVzIHBvc3QtSVVQIChjZi4KKyAgICAgKiAgIGBEaXJlY3RfTW92ZScsIGBEaXJlY3RfTW92ZV9ZJywgYE1vdmVfWnAyX1BvaW50JykuICBQb3N0LUlVUAorICAgICAqICAgY2hhbmdlcyBhcmUgY29tbW9ubHkgdXNlZCB0byBgZml4JyBwaXhlbCBwYXR0ZXJucyB3aGljaCBoYXMgbGl0dGxlCisgICAgICogICB1c2Ugb3V0c2lkZSBtb25vY2hyb21lIHJlbmRlcmluZy4KKyAgICAgKgorICAgICAqIC0gU0hQSVggYW5kIERFTFRBUCBkb24ndCBleGVjdXRlIHVubGVzcyBtb3ZpbmcgYSBjb21wb3NpdGUgb24gdGhlCisgICAgICogICB5IGF4aXMgb3IgbW92aW5nIGEgcHJldmlvdXNseSB5IHRvdWNoZWQgcG9pbnQuICBTSFBJWCBhZGRpdGlvbmFsbHkKKyAgICAgKiAgIGRlbmllcyBtb3ZlbWVudCBvbiB0aGUgeCBheGlzIChjZi4gYEluc19TSFBJWCcgYW5kIGBJbnNfREVMVEFQJykuCisgICAgICogICBCb3RoIGluc3RydWN0aW9ucyBhcmUgY29tbW9ubHkgdXNlZCB0byBgZml4JyBwaXhlbCBwYXR0ZXJucyBmb3IKKyAgICAgKiAgIG1vbm9jaHJvbWUgb3IgV2luZG93cydzIEdESSByZW5kZXJpbmcgYnV0IG1ha2UgbGl0dGxlIHNlbnNlIGZvcgorICAgICAqICAgRnJlZVR5cGUgcmVuZGVyaW5nLiAgQm90aCBjYW4gZGlzdG9ydCB0aGUgb3V0bGluZS4gIFNlZSBbMl0gZm9yCisgICAgICogICBkZXRhaWxzLgorICAgICAqCisgICAgICogLSBUaGUgaGRteCB0YWJsZSBhbmQgbW9kaWZpY2F0aW9ucyB0byBwaGFudG9tIHBvaW50cyBhcmUgaWdub3JlZC4KKyAgICAgKiAgIEJlYXJpbmdzIGFuZCBhZHZhbmNlIHdpZHRocyByZW1haW4gdW5jaGFuZ2VkIChleGNlcHQgcm91bmRpbmcgdGhlbQorICAgICAqICAgb3V0c2lkZSB0aGUgaW50ZXJwcmV0ZXIhKSwgY2YuIGBjb21wdXRlX2dseXBoX21ldHJpY3MnIGFuZAorICAgICAqICAgYFRUX0hpbnRfR2x5cGgnLiAgTGV0dGluZyBub24tbmF0aXZlLUNsZWFyVHlwZSBmb250cyBtb2RpZnkgc3BhY2luZworICAgICAqICAgbWlnaHQgbWVzcyB1cCBzcGFjaW5nLgorICAgICAqCisgICAgICogTWlub3IgaGFja3MKKyAgICAgKgorICAgICAqIC0gRkxJUFJHT04sIEZMSVBSR09GRiwgYW5kIEZMSVBQVCBkb24ndCBleGVjdXRlIHBvc3QtSVVQLiAgVGhpcworICAgICAqICAgcHJldmVudHMgZGVudHMgaW4gZS5nLiBBcmlhbC1SZWd1bGFyJ3MgYEQnIGFuZCBgRycgZ2x5cGhzIGF0CisgICAgICogICB2YXJpb3VzIHNpemVzLgorICAgICAqCisgICAgICogKFBvc3QtSVVQIGlzIHRoZSBzdGF0ZSBhZnRlciBib3RoIElVUFt4XSBhbmQgSVVQW3ldIGhhdmUgYmVlbgorICAgICAqIGV4ZWN1dGVkLikKKyAgICAgKgorICAgICAqIFRoZSBiZXN0IHJlc3VsdHMgYXJlIGFjaGlldmVkIGZvciBmb250cyB0aGF0IHdlcmUgZnJvbSB0aGUgb3V0c2V0CisgICAgICogZGVzaWduZWQgd2l0aCBDbGVhclR5cGUgaW4gbWluZCwgbWVhbmluZyB0aGV5IGxlYXZlIHRoZSB4IGF4aXMgbW9zdGx5CisgICAgICogYWxvbmUgYW5kIGRvbid0IG1lc3Mgd2l0aCB0aGUgYGZpbmFsJyBvdXRsaW5lIHRvIHByb2R1Y2UgbW9yZQorICAgICAqIHBsZWFzaW5nIHBpeGVsIHBhdHRlcm5zLiAgVGhlIGhhcmRlciB0aGUgZGVzaWduZXIgdHJpZWQgdG8gcHJvZHVjZQorICAgICAqIHZlcnkgc3BlY2lmaWMgcGF0dGVybnMgKGBzdXBlcmhpbnRpbmcnKSBmb3IgcHJlLUNsZWFyVHlwZS1kaXNwbGF5cywKKyAgICAgKiB0aGUgd29yc2UgdGhlIHJlc3VsdHMuCisgICAgICoKKyAgICAgKiBNaWNyb3NvZnQgZGVmaW5lcyBhIHdheSB0byB0dXJuIG9mZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQKKyAgICAgKiBpbnRlcnByZXQgaW5zdHJ1Y3Rpb25zIGFzIGJlZm9yZSAoY2FsbGVkIGBuYXRpdmUgQ2xlYXJUeXBlJylbMl1bM10uCisgICAgICogVGhlIGZvbnQgZGVzaWduZXIgdGhlbiByZWdhaW5zIGZ1bGwgY29udHJvbCBhbmQgaXMgcmVzcG9uc2libGUgZm9yCisgICAgICogbWFraW5nIHRoZSBmb250IHdvcmsgY29ycmVjdGx5IHdpdGggQ2xlYXJUeXBlIHdpdGhvdXQgYW55CisgICAgICogaGFuZC1ob2xkaW5nIGJ5IHRoZSBpbnRlcnByZXRlciBvciByYXN0ZXJpemVyWzRdLiAgVGhlIHY0MAorICAgICAqIGludGVycHJldGVyIGFzc3VtZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYnkgZGVmYXVsdCwgd2hpY2ggY2FuIGJlCisgICAgICogdHVybmVkIG9mZiB0aGUgc2FtZSB3YXkgYnkgZXhlY3V0aW5nIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNvbnRyb2wKKyAgICAgKiBwcm9ncmFtIChjZi4gYEluc19JTlNUQ1RSTCcpLgorICAgICAqCisgICAgICogICAjUFVTSCA0LDMKKyAgICAgKiAgIElOU1RDVFJMW10KKyAgICAgKgorICAgICAqIFsxXSBUcmlja3kgZm9udHMgYXMgRnJlZVR5cGUgZGVmaW5lcyB0aGVtIHJlbHkgb24gdGhlIGJ5dGVjb2RlCisgICAgICogICAgIGludGVycHJldGVyIHRvIGRpc3BsYXkgY29ycmVjdGx5LiAgSGFja3MgY2FuIGludGVyZmVyZSB3aXRoIHRoZW0sCisgICAgICogICAgIHNvIHRoZXkgZ2V0IHRyZWF0ZWQgbGlrZSBuYXRpdmUgQ2xlYXJUeXBlIGZvbnRzICh2NDAgd2l0aAorICAgICAqICAgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0dXJuZWQgb2ZmKS4gIENmLiBgVFRfUnVuSW5zJy4KKyAgICAgKgorICAgICAqIFsyXSBQcm9wb3NlZCBieSBNaWNyb3NvZnQncyBHcmVnIEhpdGNoY29jayBpbgorICAgICAqICAgICBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgKKyAgICAgKgorICAgICAqIFszXSBCZWF0IFN0YW1tIGRlc2NyaWJlcyBpdCBpbiBtb3JlIGRldGFpbDoKKyAgICAgKiAgICAgaHR0cDovL3d3dy5iZWF0c3RhbW0uY29tL3R5cG9ncmFwaHkvUlRSQ2g0Lmh0bSNTZWMxMgorICAgICAqCisgICAgICogWzRdIFRoZSBsaXN0IG9mIGBuYXRpdmUgQ2xlYXJUeXBlJyBmb250cyBpcyBzbWFsbCBhdCB0aGUgdGltZSBvZiB0aGlzCisgICAgICogICAgIHdyaXRpbmc7IEkgZm91bmQgdGhlIGZvbGxvd2luZyBvbiBhIFdpbmRvd3MgMTAgVXBkYXRlIDE1MTEKKyAgICAgKiAgICAgaW5zdGFsbGF0aW9uOiBDb25zdGFudGlhLCBDb3JiZWwsIFNpdGthLCBNYWxndW4gR290aGljLCBNaWNyb3NvZnQKKyAgICAgKiAgICAgSmhlbmdIZWkgKEJvbGQgYW5kIFVJIEJvbGQpLCBNaWNyb3NvZnQgWWFIZWkgKEJvbGQgYW5kIFVJIEJvbGQpLAorICAgICAqICAgICBTaW1TdW4sIE5TaW1TdW4sIGFuZCBZdSBHb3RoaWMuCisgICAgICoKKyAgICAgKi8KKworICAgIC8qIFVzaW5nIHY0MCBpbXBsaWVzIHN1YnBpeGVsIGhpbnRpbmcuICBVc2VkIHRvIGRldGVjdCBpbnRlcnByZXRlciAqLworICAgIC8qIHZlcnNpb24gc3dpdGNoZXMuICBgX2xlYW4nIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUgSW5maW5hbGl0eSAqLworICAgIC8qIGBzdWJwaXhlbF9oaW50aW5nJywgd2hpY2ggaXMgbWFuYWdlZCBkaWZmZXJlbnRseS4gICAgICAgICAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nX2xlYW47CisKKyAgICAvKiBMb25nIHNpZGUgb2YgYSBMQ0Qgc3VicGl4ZWwgaXMgdmVydGljYWwgKGUuZy4sIHNjcmVlbiBpcyByb3RhdGVkKS4gKi8KKyAgICAvKiBgX2xlYW4nIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUgSW5maW5hbGl0eSBgdmVydGljYWxfbGNkJywgd2hpY2ggKi8KKyAgICAvKiBpcyBtYW5hZ2VkIGRpZmZlcmVudGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgdmVydGljYWxfbGNkX2xlYW47CisKKyAgICAvKiBEZWZhdWx0IHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUgaW4gdjQwIGludGVycHJldGVyLiAgSWYgICovCisgICAgLyogdGhpcyBpcyBmYWxzZSwgaXQgaW1wbGllcyB0aGUgaW50ZXJwcmV0ZXIgaXMgaW4gdjM1IG9yIGluIG5hdGl2ZSAqLworICAgIC8qIENsZWFyVHlwZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgYmFja3dhcmRzX2NvbXBhdGliaWxpdHk7CisKKyAgICAvKiBVc2VmdWwgZm9yIGRldGVjdGluZyBhbmQgZGVueWluZyBwb3N0LUlVUCB0cmlja2VyeSB0aGF0IGlzIHVzdWFsbHkgKi8KKyAgICAvKiB1c2VkIHRvIGZpeCBwaXhlbCBwYXR0ZXJucyAoYHN1cGVyaGludGluZycpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgaXVweF9jYWxsZWQ7CisgICAgRlRfQm9vbCAgICAgICAgICAgIGl1cHlfY2FsbGVkOworCisgICAgLyogQ2xlYXJUeXBlIGhpbnRpbmcgYW5kIGdyYXlzY2FsZSByZW5kZXJpbmcsIGFzIHVzZWQgYnkgVW5pdmVyc2FsICovCisgICAgLyogV2luZG93cyBQbGF0Zm9ybSBhcHBzIChXaW5kb3dzIDggYW5kIGFib3ZlKS4gIExpa2UgdGhlIHN0YW5kYXJkICovCisgICAgLyogY29sb3JmdWwgQ2xlYXJUeXBlIG1vZGUsIGl0IHV0aWxpemVzIGEgdmFzdGx5IGluY3JlYXNlZCB2aXJ0dWFsICovCisgICAgLyogcmVzb2x1dGlvbiBvbiB0aGUgeCBheGlzLiAgRGlmZmVyZW50IGZyb20gYmktbGV2ZWwgaGludGluZyBhbmQgICovCisgICAgLyogZ3JheXNjYWxlIHJlbmRlcmluZywgdGhlIG9sZCBtb2RlIGZyb20gV2luOXggZGF5cyB0aGF0IHJvdWdobHkgICovCisgICAgLyogYWRoZXJlcyB0byB0aGUgcGh5c2ljYWwgcGl4ZWwgZ3JpZCBvbiBib3RoIGF4ZXMuICAgICAgICAgICAgICAgICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIGdyYXlzY2FsZV9jbGVhcnR5cGU7CisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwgKi8KKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgVFRfUm91bmRfRnVuYyAgICAgIGZ1bmNfcm91bmRfc3BobjsgICAvKiBzdWJwaXhlbCByb3VuZGluZyBmdW5jdGlvbiAqLwogCiAgICAgRlRfQm9vbCAgICAgICAgICAgIHN1YnBpeGVsX2hpbnRpbmc7ICAvKiBVc2luZyBzdWJwaXhlbCBoaW50aW5nPyAgICAgICAqLwpAQCAtMjc5LDcgKzQwNiw3IEBACiAgICAgRlRfVUxvbmcgICAgICAgICAgIHNwaF9pbl9mdW5jX2ZsYWdzOyAgICAgLyogZmxhZ3MgdG8gaW5kaWNhdGUgaWYgaW4gICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgZnVuY3Rpb25zICAgICAgICAgKi8KIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgfSBUVF9FeGVjQ29udGV4dFJlYzsKIApAQCAtMzgyLDcgKzUwOSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRJTlRFUlBfSF9fICovCisjZW5kaWYgLyogVFRJTlRFUlBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dG9ianMuYyBiL3NyYy90cnVldHlwZS90dG9ianMuYwppbmRleCAyMDJhYTA0Li5lZDNiZTJkIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0b2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMiwxMCArMzIsNiBAQAogI2luY2x1ZGUgInR0aW50ZXJwLmgiCiAjZW5kaWYKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9VTlBBVEVOVEVEX0gKLSNlbmRpZgotCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogI2luY2x1ZGUgInR0Z3h2YXIuaCIKICNlbmRpZgpAQCAtMTkxLDcgKzE4Nyw3IEBACiAgIHsKICAgICBGVF9FcnJvciAgIGVycm9yOwogICAgIEZUX1VJbnQzMiAgY2hlY2tzdW0gPSAwOwotICAgIGludCAgICAgICAgaTsKKyAgICBGVF9VSW50ICAgIGk7CiAKIAogICAgIGlmICggRlRfRlJBTUVfRU5URVIoIGxlbmd0aCApICkKQEAgLTIwMCw4ICsxOTYsOCBAQAogICAgIGZvciAoIDsgbGVuZ3RoID4gMzsgbGVuZ3RoIC09IDQgKQogICAgICAgY2hlY2tzdW0gKz0gKEZUX1VJbnQzMilGVF9HRVRfVUxPTkcoKTsKIAotICAgIGZvciAoIGkgPSAzOyBsZW5ndGggPiAwOyBsZW5ndGggLS0sIGktLSApCi0gICAgICBjaGVja3N1bSArPSAoRlRfVUludDMyKSggRlRfR0VUX0JZVEUoKSA8PCAoIGkgKiA4ICkgKTsKKyAgICBmb3IgKCBpID0gMzsgbGVuZ3RoID4gMDsgbGVuZ3RoLS0sIGktLSApCisgICAgICBjaGVja3N1bSArPSAoRlRfVUludDMyKUZUX0dFVF9CWVRFKCkgPDwgKCBpICogOCApOwogCiAgICAgRlRfRlJBTUVfRVhJVCgpOwogCkBAIC0yNDYsNyArMjQyLDcgQEAKICAgdHRfY2hlY2tfdHJpY2t5bmVzc19zZm50X2lkcyggVFRfRmFjZSAgZmFjZSApCiAgIHsKICNkZWZpbmUgVFJJQ0tfU0ZOVF9JRFNfUEVSX0ZBQ0UgICAzCi0jZGVmaW5lIFRSSUNLX1NGTlRfSURTX05VTV9GQUNFUyAgMTcKKyNkZWZpbmUgVFJJQ0tfU0ZOVF9JRFNfTlVNX0ZBQ0VTICAxOAogCiAgICAgc3RhdGljIGNvbnN0IHR0X3NmbnRfaWRfcmVjIHNmbnRfaWRbVFJJQ0tfU0ZOVF9JRFNfTlVNX0ZBQ0VTXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RSSUNLX1NGTlRfSURTX1BFUl9GQUNFXSA9IHsKQEAgLTI3MCw2ICsyNjYsMTEgQEAKICAgICAgICAgeyAweDVBMzBDQTNCVUwsIDB4MDAwMDkwNjNVTCB9LCAvKiBmcGdtICovCiAgICAgICAgIHsgMHgxM0E0MjYwMlVMLCAweDAwMDAwMDdFVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKKyAgICAgIHsgLyogREZLYWlTaHUyICovCisgICAgICAgIHsgMHgxMUU1RUFENFVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4QTZFNzhDMDFVTCwgMHgwMDAwODk5OFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDEzQTQyNjAyVUwsIDB4MDAwMDAwN0VVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAogICAgICAgeyAvKiBIdWFUaWFuS2FpVGkgKi8KICAgICAgICAgeyAweEZGRkJGRkZDVUwsIDB4MDAwMDAwMDhVTCB9LCAvKiBjdnQgICovCiAgICAgICAgIHsgMHg5QzlFNDhCOFVMLCAweDAwMDBCRUEyVUwgfSwgLyogZnBnbSAqLwpAQCAtMzk3LDExICszOTgsMTEgQEAKICAgICBmb3IgKCBqID0gMDsgaiA8IFRSSUNLX1NGTlRfSURTX05VTV9GQUNFUzsgaisrICkKICAgICB7CiAgICAgICBpZiAoICFoYXNfY3Z0ICAmJiAhc2ZudF9pZFtqXVtUUklDS19TRk5UX0lEX2N2dF0uTGVuZ3RoICkKLSAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdICsrOworICAgICAgICBudW1fbWF0Y2hlZF9pZHNbal0rKzsKICAgICAgIGlmICggIWhhc19mcGdtICYmICFzZm50X2lkW2pdW1RSSUNLX1NGTlRfSURfZnBnbV0uTGVuZ3RoICkKLSAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdICsrOworICAgICAgICBudW1fbWF0Y2hlZF9pZHNbal0rKzsKICAgICAgIGlmICggIWhhc19wcmVwICYmICFzZm50X2lkW2pdW1RSSUNLX1NGTlRfSURfcHJlcF0uTGVuZ3RoICkKLSAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdICsrOworICAgICAgICBudW1fbWF0Y2hlZF9pZHNbal0rKzsKICAgICAgIGlmICggbnVtX21hdGNoZWRfaWRzW2pdID09IFRSSUNLX1NGTlRfSURTX1BFUl9GQUNFICkKICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQpAQCAtNDkwLDcgKzQ5MSwxMCBAQAogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgc291cmNlIGZvbnQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZm9udCBmYWNlIGluIHRoZSByZXNvdXJjZS4gICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIFRydWVUeXBlIGZvbnQsIGlmIHdlIGFyZSBvcGVuaW5nIGEgICovCisgIC8qICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbiwgaW4gYml0cyAwLTE1LiAgVGhlIG51bWJlcmVkIGluc3RhbmNlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGluZGV4fit+MSBvZiBhIEdYIChzdWIpZm9udCwgaWYgYXBwbGljYWJsZSwgaW4gYml0cyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAxNi0zMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBudW1fcGFyYW1zIDo6IE51bWJlciBvZiBhZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01OTksNyArNjAzLDcgQEAKICAgICAgICAgdHRmYWNlLT5mYWNlX2ZsYWdzICY9IH5GVF9GQUNFX0ZMQUdfU0NBTEFCTEU7CiAgICAgICB9CiAKLSNlbHNlCisjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLwogCiAgICAgICBpZiAoICFlcnJvciApCiAgICAgICAgIGVycm9yID0gdHRfZmFjZV9sb2FkX2xvY2EoIGZhY2UsIHN0cmVhbSApOwpAQCAtNjIzLDMyICs2MjcsNTUgQEAKICAgICAgICAgdHRmYWNlLT5mYWNlX2ZsYWdzICY9IH5GVF9GQUNFX0ZMQUdfU0NBTEFCTEU7CiAgICAgICB9CiAKLSNlbmRpZgorI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCiAKICAgICB9CiAKLSNpZiBkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyAgICApICYmIFwKLSAgICAhZGVmaW5lZCggVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiApCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCiAgICAgewotICAgICAgRlRfQm9vbCAgdW5wYXRlbnRlZF9oaW50aW5nOwotICAgICAgaW50ICAgICAgaTsKKyAgICAgIEZUX0ludCAgaW5zdGFuY2VfaW5kZXggPSBmYWNlX2luZGV4ID4+IDE2OwogCiAKLSAgICAgIC8qIERldGVybWluZSB3aGV0aGVyIHVucGF0ZW50ZWQgaGludGluZyBpcyB0byBiZSB1c2VkIGZvciB0aGlzIGZhY2UuICovCi0gICAgICB1bnBhdGVudGVkX2hpbnRpbmcgPSBGVF9CT09MCi0gICAgICAgICggbGlicmFyeS0+ZGVidWdfaG9va3NbRlRfREVCVUdfSE9PS19VTlBBVEVOVEVEX0hJTlRJTkddICE9IE5VTEwgKTsKKyAgICAgIGlmICggRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIHR0ZmFjZSApICYmCisgICAgICAgICAgIGluc3RhbmNlX2luZGV4ID4gMCAgICAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIGVycm9yID0gVFRfR2V0X01NX1ZhciggZmFjZSwgTlVMTCApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3BhcmFtcyAmJiAhZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nOyBpKysgKQotICAgICAgICBpZiAoIHBhcmFtc1tpXS50YWcgPT0gRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORyApCi0gICAgICAgICAgdW5wYXRlbnRlZF9oaW50aW5nID0gVFJVRTsKKyAgICAgICAgaWYgKCBmYWNlLT5ibGVuZC0+bW12YXItPm5hbWVkc3R5bGUgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSB0dGZhY2UtPm1lbW9yeTsKIAotICAgICAgaWYgKCAhdW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICAgICAgdHRmYWNlLT5pbnRlcm5hbC0+aWdub3JlX3VucGF0ZW50ZWRfaGludGVyID0gVFJVRTsKKyAgICAgICAgICBGVF9WYXJfTmFtZWRfU3R5bGUqICBuYW1lZF9zdHlsZTsKKyAgICAgICAgICBGVF9TdHJpbmcqICAgICAgICAgICBzdHlsZV9uYW1lOworCisKKyAgICAgICAgICAvKiBpbiBgZmFjZV9pbmRleCcsIHRoZSBpbnN0YW5jZSBpbmRleCBzdGFydHMgd2l0aCB2YWx1ZSAxICovCisgICAgICAgICAgbmFtZWRfc3R5bGUgPSBmYWNlLT5ibGVuZC0+bW12YXItPm5hbWVkc3R5bGUgKyBpbnN0YW5jZV9pbmRleCAtIDE7CisgICAgICAgICAgZXJyb3IgPSBzZm50LT5nZXRfbmFtZSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KW5hbWVkX3N0eWxlLT5zdHJpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVfbmFtZSApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgLyogc2V0IHN0eWxlIG5hbWU7IGlmIGFscmVhZHkgc2V0LCByZXBsYWNlIGl0ICovCisgICAgICAgICAgaWYgKCBmYWNlLT5yb290LnN0eWxlX25hbWUgKQorICAgICAgICAgICAgRlRfRlJFRSggZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7CisgICAgICAgICAgZmFjZS0+cm9vdC5zdHlsZV9uYW1lID0gc3R5bGVfbmFtZTsKKworICAgICAgICAgIC8qIGZpbmFsbHksIHNlbGVjdCB0aGUgbmFtZWQgaW5zdGFuY2UgKi8KKyAgICAgICAgICBlcnJvciA9IFRUX1NldF9WYXJfRGVzaWduKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmJsZW5kLT5tbXZhci0+bnVtX2F4aXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRfc3R5bGUtPmNvb3JkcyApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgICB9CiAgICAgfQogCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgJiYKLSAgICAgICAgICAhVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KIAogICAgIC8qIGluaXRpYWxpemUgc3RhbmRhcmQgZ2x5cGggbG9hZGluZyByb3V0aW5lcyAqLwogICAgIFRUX0luaXRfR2x5cGhfTG9hZGluZyggZmFjZSApOwpAQCAtMTAyOSw3ICsxMDU2LDE1IEBACiAgICAgfQogCiAgICAgLyogRmluZSwgbm93IHJ1biB0aGUgZm9udCBwcm9ncmFtISAqLworCisgICAgLyogSW4gY2FzZSBvZiBhbiBlcnJvciB3aGlsZSBleGVjdXRpbmcgYGZwZ20nLCB3ZSBpbnRlbnRpb25hbGx5IGRvbid0ICovCisgICAgLyogY2xlYW4gdXAgaW1tZWRpYXRlbHkg4oCTIGJ1Z3MgaW4gdGhlIGBmcGdtJyBhcmUgc28gZnVuZGFtZW50YWwgdGhhdCAgKi8KKyAgICAvKiBhbGwgZm9sbG93aW5nIGhpbnRpbmcgY2FsbHMgc2hvdWxkIGZhaWwuICBBZGRpdGlvbmFsbHksIGBmcGdtJyBpcyAgKi8KKyAgICAvKiB0byBiZSBleGVjdXRlZCBqdXN0IG9uY2U7IGNhbGxpbmcgaXQgYWdhaW4gaXMgY29tcGxldGVseSB1c2VsZXNzICAgKi8KKyAgICAvKiBhbmQgbWlnaHQgZXZlbiBsZWFkIHRvIGV4dHJlbWVseSBzbG93IGJlaGF2aW91ciBpZiBpdCBpcyBtYWxmb3JtZWQgKi8KKyAgICAvKiAoY29udGFpbmluZyBhbiBpbmZpbml0ZSBsb29wLCBmb3IgZXhhbXBsZSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBlcnJvciA9IHR0X3NpemVfcnVuX2ZwZ20oIHNpemUsIHBlZGFudGljICk7CisgICAgcmV0dXJuIGVycm9yOwogCiAgIEV4aXQ6CiAgICAgaWYgKCBlcnJvciApCkBAIC0xMjUyLDEwICsxMjg3LDEyIEBACiAKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpdHRkcml2ZXI7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4OwotI2Vsc2UKICAgICBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1OworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zODsKKyNlbmRpZgorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl80MDsKICNlbmRpZgogCiAjZWxzZSAvKiAhVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmggYi9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmgKaW5kZXggN2FjNDEyMy4uOThhZDM4MyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCisrKyBiL3NyYy90cnVldHlwZS90dG9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRPQkpTX0hfXwotI2RlZmluZSBfX1RUT0JKU19IX18KKyNpZm5kZWYgVFRPQkpTX0hfCisjZGVmaW5lIFRUT0JKU19IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDIsMTcgKzQyLDYgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfSW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBUcnVlVHlwZSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHN0cnVjdCBUVF9TaXplUmVjXyogIFRUX1NpemU7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODMsMTAgKzcyLDYgQEAKICAgICBGVF9Vbml0VmVjdG9yICBwcm9qVmVjdG9yOwogICAgIEZUX1VuaXRWZWN0b3IgIGZyZWVWZWN0b3I7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX0Jvb2wgICAgICAgIGJvdGhfeF9heGlzOwotI2VuZGlmCi0KICAgICBGVF9Mb25nICAgICAgICBsb29wOwogICAgIEZUX0YyNkRvdDYgICAgIG1pbmltdW1fZGlzdGFuY2U7CiAgICAgRlRfSW50ICAgICAgICAgcm91bmRfc3RhdGU7CkBAIC0zMDEsNiArMjg2LDggQEAKIAogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgogCisgICAgRlRfTG9uZyAgICAgICAgICAgIHBvaW50X3NpemU7ICAgIC8qIGZvciB0aGUgYE1QUycgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gKi8KKwogICAgIEZUX1VJbnQgICAgICAgICAgICBudW1fZnVuY3Rpb25fZGVmczsgLyogbnVtYmVyIG9mIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCiAgICAgRlRfVUludCAgICAgICAgICAgIG1heF9mdW5jdGlvbl9kZWZzOwogICAgIFRUX0RlZkFycmF5ICAgICAgICBmdW5jdGlvbl9kZWZzOyAgICAgLyogdGFibGUgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbnMgICovCkBAIC00MzAsNyArNDE3LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVE9CSlNfSF9fICovCisjZW5kaWYgLyogVFRPQkpTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRwaWMuYyBiL3NyYy90cnVldHlwZS90dHBpYy5jCmluZGV4IDI0MmE2YjcuLjU0YTViOGIgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dHBpYy5jCisrKyBiL3NyYy90cnVldHlwZS90dHBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRwaWMuaCBiL3NyYy90cnVldHlwZS90dHBpYy5oCmluZGV4IDQ4YmE0YWEuLmY3MjU4NjUgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dHBpYy5oCisrKyBiL3NyYy90cnVldHlwZS90dHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiwxMSArMTYsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUUElDX0hfXwotI2RlZmluZSBfX1RUUElDX0hfXworI2lmbmRlZiBUVFBJQ19IXworI2RlZmluZSBUVFBJQ19IXwogCiAKLUZUX0JFR0lOX0hFQURFUgorI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKKwogCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKQEAgLTM3LDYgKzM4LDggQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ICiAKIAorRlRfQkVHSU5fSEVBREVSCisKICAgdHlwZWRlZiBzdHJ1Y3QgIFRUTW9kdWxlUElDXwogICB7CiAgICAgRlRfU2VydmljZURlc2NSZWMqICAgICAgICAgIHR0X3NlcnZpY2VzOwpAQCAtNjgsMTQgKzcxLDEzIEBACiAgIEZUX0Vycm9yCiAgIHR0X2RyaXZlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCitGVF9FTkRfSEVBREVSCisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgLyogKi8KIAotCi1GVF9FTkRfSEVBREVSCi0KLSNlbmRpZiAvKiBfX1RUUElDX0hfXyAqLworI2VuZGlmIC8qIFRUUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jIGIvc3JjL3RydWV0eXBlL3R0cGxvYWQuYwppbmRleCBmYjMzOGJkLi5jYTE1OGFjIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jCisrKyBiL3NyYy90cnVldHlwZS90dHBsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUtc3BlY2lmaWMgdGFibGVzIGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEyNCw4ICsxMjQsOSBAQAogICAgICAgICBUVF9UYWJsZSAgZW50cnkgPSBmYWNlLT5kaXJfdGFibGVzOwogICAgICAgICBUVF9UYWJsZSAgbGltaXQgPSBlbnRyeSArIGZhY2UtPm51bV90YWJsZXM7CiAKLSAgICAgICAgRlRfTG9uZyAgIHBvcyAgPSAoRlRfTG9uZylGVF9TVFJFQU1fUE9TKCk7Ci0gICAgICAgIEZUX0xvbmcgICBkaXN0ID0gMHg3RkZGRkZGRkw7CisgICAgICAgIEZUX0xvbmcgIHBvcyAgID0gKEZUX0xvbmcpRlRfU1RSRUFNX1BPUygpOworICAgICAgICBGVF9Mb25nICBkaXN0ICA9IDB4N0ZGRkZGRkZMOworICAgICAgICBGVF9Cb29sICBmb3VuZCA9IDA7CiAKIAogICAgICAgICAvKiBjb21wdXRlIHRoZSBkaXN0YW5jZSB0byBuZXh0IHRhYmxlIGluIGZvbnQgZmlsZSAqLwpAQCAtMTM1LDEwICsxMzYsMTMgQEAKIAogCiAgICAgICAgICAgaWYgKCBkaWZmID4gMCAmJiBkaWZmIDwgZGlzdCApCi0gICAgICAgICAgICBkaXN0ID0gZGlmZjsKKyAgICAgICAgICB7CisgICAgICAgICAgICBkaXN0ICA9IGRpZmY7CisgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBlbnRyeSA9PSBsaW1pdCApCisgICAgICAgIGlmICggIWZvdW5kICkKICAgICAgICAgewogICAgICAgICAgIC8qIGBsb2NhJyBpcyB0aGUgbGFzdCB0YWJsZSAqLwogICAgICAgICAgIGRpc3QgPSAoRlRfTG9uZylzdHJlYW0tPnNpemUgLSBwb3M7CkBAIC0xNTIsNiArMTU2LDE0IEBACiAgICAgICAgICAgRlRfVFJBQ0UyKCggImFkanVzdGluZyBudW1fbG9jYXRpb25zIHRvICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgKSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZmFjZS0+cm9vdC5udW1fZ2x5cGhzID0gZmFjZS0+bnVtX2xvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoRlRfTG9uZylmYWNlLT5udW1fbG9jYXRpb25zIC0gMSA6IDA7CisKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiYWRqdXN0aW5nIG51bV9nbHlwaHMgdG8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCkBAIC0yMTQsNyArMjI2LDggQEAKICAgICBpZiAoIHBvczEgPiBmYWNlLT5nbHlmX2xlbiApCiAgICAgewogICAgICAgRlRfVFJBQ0UxKCggInR0X2ZhY2VfZ2V0X2xvY2F0aW9uOiIKLSAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG9mZnNldD0weCUwOGx4IGZvdW5kIGZvciBnaWQ9MHglMDRseCwiCisgICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSBvZmZzZXQ9MHglMDhseCBmb3VuZCBmb3IgZ2lkPTB4JTA0bHgsXG4iCisgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgIiBleGNlZWRpbmcgdGhlIGVuZCBvZiBnbHlmIHRhYmxlICgweCUwOGx4KVxuIiwKICAgICAgICAgICAgICAgICAgIHBvczEsIGdpbmRleCwgZmFjZS0+Z2x5Zl9sZW4gKSk7CiAgICAgICAqYXNpemUgPSAwOwpAQCAtMjI0LDcgKzIzNyw4IEBACiAgICAgaWYgKCBwb3MyID4gZmFjZS0+Z2x5Zl9sZW4gKQogICAgIHsKICAgICAgIEZUX1RSQUNFMSgoICJ0dF9mYWNlX2dldF9sb2NhdGlvbjoiCi0gICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSBvZmZzZXQ9MHglMDhseCBmb3VuZCBmb3IgZ2lkPTB4JTA0bHgsIgorICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2Ugb2Zmc2V0PTB4JTA4bHggZm91bmQgZm9yIGdpZD0weCUwNGx4LFxuIgorICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICIgdHJ1bmNhdGUgYXQgdGhlIGVuZCBvZiBnbHlmIHRhYmxlICgweCUwOGx4KVxuIiwKICAgICAgICAgICAgICAgICAgIHBvczIsIGdpbmRleCArIDEsIGZhY2UtPmdseWZfbGVuICkpOwogICAgICAgcG9zMiA9IGZhY2UtPmdseWZfbGVuOwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaCBiL3NyYy90cnVldHlwZS90dHBsb2FkLmgKaW5kZXggYmM5MjM2OS4uYWEyZTM4ZSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFBMT0FEX0hfXwotI2RlZmluZSBfX1RUUExPQURfSF9fCisjaWZuZGVmIFRUUExPQURfSF8KKyNkZWZpbmUgVFRQTE9BRF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNjksNyArNjksNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUUExPQURfSF9fICovCisjZW5kaWYgLyogVFRQTE9BRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMgYi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYwppbmRleCBkYmRhNGQ5Li4wMzk1MDk2IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBTdWJwaXhlbCBIaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgInR0c3VicGl4LmgiCiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtOTAzLDcgKzkwMyw3IEBACiAgIHNwaF9zZXRfdHdlYWtzKCBUVF9Mb2FkZXIgIGxvYWRlciwKICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2x5cGhfaW5kZXggKQogICB7Ci0gICAgVFRfRmFjZSAgICAgZmFjZSAgID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOworICAgIFRUX0ZhY2UgICAgIGZhY2UgICA9IGxvYWRlci0+ZmFjZTsKICAgICBGVF9TdHJpbmcqICBmYW1pbHkgPSBmYWNlLT5yb290LmZhbWlseV9uYW1lOwogICAgIEZUX1VJbnQgICAgIHBwZW0gICA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3BwZW07CiAgICAgRlRfU3RyaW5nKiAgc3R5bGUgID0gZmFjZS0+cm9vdC5zdHlsZV9uYW1lOwpAQCAtMTAwMCwxMiArMTAwMCwxMiBAQAogICAgIH0KICAgfQogCi0jZWxzZSAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZWxzZSAvKiAhVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLwogICB0eXBlZGVmIGludCAgX3R0X3N1YnBpeF9kdW1teTsKIAotI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiAhVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5oIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKaW5kZXggOTE1MWFhMy4uODY4NDRkYSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKKysrIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgU3VicGl4ZWwgSGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUU1VCUElYX0hfXwotI2RlZmluZSBfX1RUU1VCUElYX0hfXworI2lmbmRlZiBUVFNVQlBJWF9IXworI2RlZmluZSBUVFNVQlBJWF9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJ0dG9ianMuaCIKQEAgLTI3LDcgKzI3LDcgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwMCwxMSArMTAwLDEyIEBACiAjZGVmaW5lIFNQSF9PUFRJT05fU0VUX0NPTVBBVElCTEVfV0lEVEhTICAgRkFMU0UKICNkZWZpbmUgU1BIX09QVElPTl9TRVRfUkFTVEVSSVpFUl9WRVJTSU9OICAzOAogCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUU1VCUElYX0hfXyAqLworI2VuZGlmIC8qIFRUU1VCUElYX0hfICovCisKIAogLyogRU5EICovCg==