ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYTQ2MzdmZC4uYjY2N2M4ZSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE0LDI2MSArMTQsMjYwIEBACiAjIFBvd2VyUEMgU3lzdGVtczoJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIEdyZWcgQWxsZW4gPGdhbGxlbkBhcmx1dC51dGV4YXMuZWR1PgogCi0JVVRYODI0NQkJCU1QQzgyNDUKKwlVVFg4MjQ1CQlNUEM4MjQ1CiAKIFBhbnRlbGlzIEFudG9uaW91IDxwYW50b0BpbnRyYWNvbS5ncj4KIAotCU5FVFZJQQkJCU1QQzh4eAorCU5FVFZJQQkJTVBDOHh4CiAKIFJlaW5oYXJkIEFybHQgPHJlaW5oYXJkLmFybHRAZXNkLWVsZWN0cm9uaWNzLmNvbT4KIAotCWNwY2k1MjAwCQlNUEM1MjAwCi0JbWVjcDUyMDAJCU1QQzUyMDAKLQlwZjUyMDAJCQlNUEM1MjAwCisJY3BjaTUyMDAJTVBDNTIwMAorCW1lY3A1MjAwCU1QQzUyMDAKKwlwZjUyMDAJCU1QQzUyMDAKIAotCUNQQ0k3NTAJCQlQUEM3NTBGWC9HWAorCUNQQ0k3NTAJCVBQQzc1MEZYL0dYCiAKIFl1bGkgQmFyY29oZW4gPHl1bGlAYXJhYmVsbGFzdy5jb20+CiAKLQlBZGRlcgkJCU1QQzg3eC9NUEM4NTJUCi0JZXA4MjQ4CQkJTVBDODI0OAotCUlTUEFOCQkJTVBDODI2MAotCU1QQzgyNjBBRFMJCU1QQzgyNngvTVBDODI3eC9NUEM4MjgwCi0JUmF0dGxlcgkJCU1QQzgyNDgKLQlaUEMxOTAwCQkJTVBDODI2NQorCUFkZGVyCQlNUEM4N3gvTVBDODUyVAorCWVwODI0OAkJTVBDODI0OAorCUlTUEFOCQlNUEM4MjYwCisJTVBDODI2MEFEUwlNUEM4MjZ4L01QQzgyN3gvTVBDODI4MAorCVJhdHRsZXIJCU1QQzgyNDgKKwlaUEMxOTAwCQlNUEM4MjY1CiAKIE1pY2hhZWwgQmFya293c2tpIDxtaWNoYWVsLmJhcmtvd3NraUBmcmVlc2NhbGUuY29tPgogCi0JTVBDODMyM0VSREIJCU1QQzgzMjMKKwlNUEM4MzIzRVJEQglNUEM4MzIzCiAKIEplcnJ5IFZhbiBCYXJlbiA8Z2VyYWxkLnZhbmJhcmVuQHNtaXRocy1hZXJvc3BhY2UuY29tPgogCi0Jc2Fjc25nCQkJTVBDODI2MAorCXNhY3NuZwkJTVBDODI2MAogCiBPbGl2ZXIgQnJvd24gPG9icm93bkBhZHZlbnRuZXR3b3Jrcy5jb20+CiAKLQlndzgyNjAJCQlNUEM4MjYwCisJZ3c4MjYwCQlNUEM4MjYwCiAKIENvbm4gQ2xhcmsgPGNsYXJrQGVzdGVlbS5jb20+CiAKLQlFU1RFRU0xOTJFCQlNUEM4eHgKKwlFU1RFRU0xOTJFCU1QQzh4eAogCiBKb2UgRCdBYmJyYWNjaW8gPGxqZDAxNUBmcmVlc2NhbGUuY29tPgogCi0JTVBDODM3eEVSREIJCU1QQzgzN3gKKwlNUEM4Mzd4RVJEQglNUEM4Mzd4CiAKIEvhcmkgRGF27fBzc29uIDxrZEBmbGFnYS5pcz4KIAotCUZMQUdBRE0JCQlNUEM4MjMKKwlGTEFHQURNCQlNUEM4MjMKIAogVG9yc3RlbiBEZW1rZSA8dG9yc3Rlbi5kZW1rZUBmY2kuY29tPgogCi0JZVhhbGlvbgkJCU1QQzgyNHgKKwllWGFsaW9uCQlNUEM4MjR4CiAKIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiAKLQlJY2VDdWJlXzUxMDAJCU1HVDUxMDAKLQlJY2VDdWJlXzUyMDAJCU1QQzUyMDAKKwlJY2VDdWJlXzUxMDAJTUdUNTEwMAorCUljZUN1YmVfNTIwMAlNUEM1MjAwCiAKLQlBTVg4NjAJCQlNUEM4NjAKLQlFVFgwOTQJCQlNUEM4NTAKLQlGUFM4NTBMCQkJTVBDODUwCi0JRlBTODYwTAkJCU1QQzg2MAotCUlDVTg2MgkJCU1QQzg2MgotCUlQODYwCQkJTVBDODYwCi0JSVZNTDI0CQkJTVBDODYwCi0JSVZNTDI0XzEyOAkJTVBDODYwCi0JSVZNTDI0XzI1NgkJTVBDODYwCi0JSVZNUzgJCQlNUEM4NjAKLQlJVk1TOF8xMjgJCU1QQzg2MAotCUlWTVM4XzI1NgkJTVBDODYwCi0JTEFOVEVDCQkJTVBDODUwCi0JTFdNT04JCQlNUEM4MjMKLQlOQzY1MAkJCU1QQzg1MgotCVIzNjBNUEkJCQlNUEM4MjMKLQlSTVUJCQlNUEM4NTAKLQlSUnZpc2lvbgkJTVBDODIzCi0JU004NTAJCQlNUEM4NTAKLQlTUEQ4MjNUUwkJTVBDODIzCi0JVFFNODIzTAkJCU1QQzgyMwotCVRRTTgyM0xfTENECQlNUEM4MjMKLQlUUU04NTBMCQkJTVBDODUwCi0JVFFNODU1TAkJCU1QQzg1NQotCVRRTTg2MEwJCQlNUEM4NjAKLQlUUU04NjBMX0ZFQwkJTVBDODYwCi0JYzJtb24JCQlNUEM4NTUKLQloZXJtZXMJCQlNUEM4NjAKLQlsd21vbgkJCU1QQzgyMwotCXBjdV9lCQkJTVBDODU1CisJQU1YODYwCQlNUEM4NjAKKwlFVFgwOTQJCU1QQzg1MAorCUZQUzg1MEwJCU1QQzg1MAorCUZQUzg2MEwJCU1QQzg2MAorCUlDVTg2MgkJTVBDODYyCisJSVA4NjAJCU1QQzg2MAorCUlWTUwyNAkJTVBDODYwCisJSVZNTDI0XzEyOAlNUEM4NjAKKwlJVk1MMjRfMjU2CU1QQzg2MAorCUlWTVM4CQlNUEM4NjAKKwlJVk1TOF8xMjgJTVBDODYwCisJSVZNUzhfMjU2CU1QQzg2MAorCUxBTlRFQwkJTVBDODUwCisJTFdNT04JCU1QQzgyMworCU5DNjUwCQlNUEM4NTIKKwlSMzYwTVBJCQlNUEM4MjMKKwlSTVUJCU1QQzg1MAorCVJSdmlzaW9uCU1QQzgyMworCVNNODUwCQlNUEM4NTAKKwlTUEQ4MjNUUwlNUEM4MjMKKwlUUU04MjNMCQlNUEM4MjMKKwlUUU04MjNMX0xDRAlNUEM4MjMKKwlUUU04NTBMCQlNUEM4NTAKKwlUUU04NTVMCQlNUEM4NTUKKwlUUU04NjBMCQlNUEM4NjAKKwlUUU04NjBMX0ZFQwlNUEM4NjAKKwljMm1vbgkJTVBDODU1CisJaGVybWVzCQlNUEM4NjAKKwlsd21vbgkJTVBDODIzCisJcGN1X2UJCU1QQzg1NQogCi0JQ1U4MjQJCQlNUEM4MjQwCi0JU2FuZHBvaW50ODI0MAkJTVBDODI0MAotCVNMODI0NQkJCU1QQzgyNDUKKwlDVTgyNAkJTVBDODI0MAorCVNhbmRwb2ludDgyNDAJTVBDODI0MAorCVNMODI0NQkJTVBDODI0NQogCi0JQVRDCQkJTVBDODI1MAotCVBNODI1CQkJTVBDODI1MAorCUFUQwkJTVBDODI1MAorCVBNODI1CQlNUEM4MjUwCiAKLQlUUU04MjU1CQkJTVBDODI1NQorCVRRTTgyNTUJCU1QQzgyNTUKIAotCUNQVTg2CQkJTVBDODI2MAotCVBNODI2CQkJTVBDODI2MAotCVRRTTgyNjAJCQlNUEM4MjYwCisJQ1BVODYJCU1QQzgyNjAKKwlQTTgyNgkJTVBDODI2MAorCVRRTTgyNjAJCU1QQzgyNjAKIAotCVAzRzQJCQlNUEM3NDEwCisJUDNHNAkJTVBDNzQxMAogCi0JUENJUFBDMgkJCU1QQzc1MAotCVBDSVBQQzYJCQlNUEM3NTAKKwlQQ0lQUEMyCQlNUEM3NTAKKwlQQ0lQUEM2CQlNUEM3NTAKIAotCUVYQklUR0VOCQlQUEM0MDVHUAorCUVYQklUR0VOCVBQQzQwNUdQCiAKIEpvbiBEaWVrZW1hIDxqb24uZGlla2VtYUBzbWl0aHMtYWVyb3NwYWNlLmNvbT4KIAotCXNiYzgyNjAJCQlNUEM4MjYwCisJc2JjODI2MAkJTVBDODI2MAogCiBEYXZlIEVsbGlzIDxER0VAc2l4bmV0aW8uY29tPgogCi0JU1hOSTg1NVQJCU1QQzh4eAorCVNYTkk4NTVUCU1QQzh4eAogCiBUaG9tYXMgRnJpZWRlbiA8VGhvbWFzRkBoeXBlcmlvbi1lbnRlcnRhaW5tZW50LmNvbT4KIAotCUFtaWdhT25lRzNTRQkJTVBDN3h4CisJQW1pZ2FPbmVHM1NFCU1QQzd4eAogCiBNYXR0aGlhcyBGdWNocyA8bWF0dGhpYXMuZnVjaHNAZXNkLWVsZWN0cm9uaWNzLmNvbT4KIAotCUFEQ0lPUAkJCUlPUDQ4MCAoUFBDNDAxKQotCUFQQzQwNQkJCVBQQzQwNUdQCi0JQVI0MDUJCQlQUEM0MDVHUAotCUFTSDQwNQkJCVBQQzQwNUVQCi0JQ0FOQlQJCQlQUEM0MDVDUgotCUNQQ0kyRFAJCQlQUEM0MDVHUAotCUNQQ0k0MDUJCQlQUEM0MDVHUAotCUNQQ0k0MDUyCQlQUEM0MDVHUAotCUNQQ0k0MDVBQgkJUFBDNDA1R1AKLQlDUENJNDA1RFQJCVBQQzQwNUdQCi0JQ1BDSUlTRVI0CQlQUEM0MDVHUAotCURBU0FfU0lNCQlJT1A0ODAgKFBQQzQwMSkKLQlEUDQwNQkJCVBQQzQwNUVQCi0JRFU0MDUJCQlQUEM0MDVHUAotCURVNDQwCQkJUFBDNDQwRVB4Ci0JRzIwMDAJCQlQUEM0MDVFUAotCUhINDA1CQkJUFBDNDA1RVAKLQlIVUI0MDUJCQlQUEM0MDVFUAotCU9DUlRDCQkJUFBDNDA1R1AKLQlPUlNHCQkJUFBDNDA1R1AKLQlQQ0k0MDUJCQlQUEM0MDVHUAotCVBMVTQwNQkJCVBQQzQwNUVQCi0JUE1DNDA1CQkJUFBDNDA1R1AKLQlQTUM0NDAJCQlQUEM0NDBFUHgKLQlWT0g0MDUJCQlQUEM0MDVFUAotCVZPTTQwNQkJCVBQQzQwNUVQCi0JV1VINDA1CQkJUFBDNDA1RVAKLQlDTVM3MDAJCQlQUEM0MDVFUAorCUFEQ0lPUAkJSU9QNDgwIChQUEM0MDEpCisJQVBDNDA1CQlQUEM0MDVHUAorCUFSNDA1CQlQUEM0MDVHUAorCUFTSDQwNQkJUFBDNDA1RVAKKwlDQU5CVAkJUFBDNDA1Q1IKKwlDUENJMkRQCQlQUEM0MDVHUAorCUNQQ0k0MDUJCVBQQzQwNUdQCisJQ1BDSTQwNTIJUFBDNDA1R1AKKwlDUENJNDA1QUIJUFBDNDA1R1AKKwlDUENJNDA1RFQJUFBDNDA1R1AKKwlDUENJSVNFUjQJUFBDNDA1R1AKKwlEQVNBX1NJTQlJT1A0ODAgKFBQQzQwMSkKKwlEUDQwNQkJUFBDNDA1RVAKKwlEVTQwNQkJUFBDNDA1R1AKKwlEVTQ0MAkJUFBDNDQwRVB4CisJRzIwMDAJCVBQQzQwNUVQCisJSEg0MDUJCVBQQzQwNUVQCisJSFVCNDA1CQlQUEM0MDVFUAorCU9DUlRDCQlQUEM0MDVHUAorCU9SU0cJCVBQQzQwNUdQCisJUENJNDA1CQlQUEM0MDVHUAorCVBMVTQwNQkJUFBDNDA1RVAKKwlQTUM0MDUJCVBQQzQwNUdQCisJUE1DNDQwCQlQUEM0NDBFUHgKKwlWT0g0MDUJCVBQQzQwNUVQCisJVk9NNDA1CQlQUEM0MDVFUAorCVdVSDQwNQkJUFBDNDA1RVAKKwlDTVM3MDAJCVBQQzQwNUVQCiAKIE5pa2xhdXMgR2lnZXIgPG5pa2xhdXMuZ2lnZXJAbmV0c3RhbC5jb20+CiAKLQlIQ1U0CQkJUFBDNDA1R1ByCi0JTUNVMjUJCQlQUEM0MDVHUHIKLQlIQ1U1CQkJUFBDNDQwRVB4CisJSENVNAkJUFBDNDA1R1ByCisJTUNVMjUJCVBQQzQwNUdQcgorCUhDVTUJCVBQQzQ0MEVQeAogCiBGcmFuayBHb3R0c2NobGluZyA8ZmdvdHRzY2hsaW5nQGVsdGVjLmRlPgogCi0JTUhQQwkJCU1QQzh4eAorCU1IUEMJCU1QQzh4eAogCi0JQkFCN3h4CQkJTVBDNzQwL01QQzc1MAorCUJBQjd4eAkJTVBDNzQwL01QQzc1MAogCiBXb2xmZ2FuZyBHcmFuZGVnZ2VyIDx3Z0BkZW54LmRlPgogCi0JQ0NNCQkJTVBDODU1CisJQ0NNCQlNUEM4NTUKIAotCVBONjIJCQlNUEM4MjQwCi0KLQlJUEhBU0U0NTM5CQlNUEM4MjYwCi0JU0NNCQkJTVBDODI2MAorCVBONjIJCU1QQzgyNDAKKwlJUEhBU0U0NTM5CU1QQzgyNjAKKwlTQ00JCU1QQzgyNjAKIAogSG93YXJkIEdyYXkgPG12c2Vuc29yQG1hdHJpeC12aXNpb24uZGU+CiAKLQlNVlMxCQkJTVBDODIzCisJTVZTMQkJTVBDODIzCiAKIEpvZSBIYW1tYW4gPGpvZS5oYW1tYW5AZW1iZWRkZWRzcGVjaWFsdGllcy5jb20+CiAKLQlzYmM4NTQ4CQkJTVBDODU0OAotCXNiYzg2NDFkCQlNUEM4NjQxRAorCXNiYzg1NDgJCU1QQzg1NDgKKwlzYmM4NjQxZAlNUEM4NjQxRAogCiBLbGF1cyBIZXlkZWNrIDxoZXlkZWNrQGtpZWJhY2stcGV0ZXIuZGU+CiAKLQlLVVA0SwkJCU1QQzg1NQotCUtVUDRYCQkJTVBDODU5CisJS1VQNEsJCU1QQzg1NQorCUtVUDRYCQlNUEM4NTkKIAogR2FyeSBKZW5uZWpvaG4gPGdhcnlqQGRlbnguZGU+CiAKLQlxdWFkMTAwaGQJCVBQQzQwNUVQCisJcXVhZDEwMGhkCVBQQzQwNUVQCiAKIE11cnJheSBKZW5zZW4gPE11cnJheS5KZW5zZW5AY3Npcm8uYXU+CiAKLQljb2dlbnRfbXBjOHh4CQlNUEM4eHgKKwljb2dlbnRfbXBjOHh4CU1QQzh4eAogCi0JY29nZW50X21wYzgyNjAJCU1QQzgyNjAKLQloeW1vZAkJCU1QQzgyNjAKKwljb2dlbnRfbXBjODI2MAlNUEM4MjYwCisJaHltb2QJCU1QQzgyNjAKIAogTGFycnkgSm9obnNvbiA8bHJqQGFjbS5vcmc+CiAKLQlrb3JhdAkJCVBQQzQ0MEVQeAorCWtvcmF0CQlQUEM0NDBFUHgKIAogQnJhZCBLZW1wIDxCcmFkLktlbXBAc2VyYW5vYS5jb20+CiAKLQlwcG1jODI2MAkJTVBDODI2MAorCXBwbWM4MjYwCU1QQzgyNjAKIAogU2FuZ21vb24gS2ltIDxkb2dvaWxAZXRpbnN5cy5jb20+CiAKLQlkZWJyaXMJCQlNUEM4MjQ1Ci0JS1ZNRTA4MAkJCU1QQzgyNDUKKwlkZWJyaXMJCU1QQzgyNDUKKwlLVk1FMDgwCQlNUEM4MjQ1CiAKIFRob21hcyBMYW5nZSA8dGhvbWFzQGNvcmVsYXR1cy5zZT4KIAotCUdUSAkJCU1QQzg2MAorCUdUSAkJTVBDODYwCiAKIFJvYmVydCBMYXphcnNraSA8cm9iZXJ0bGF6YXJza2lAZ21haWwuY29tPgogCi0JQVRVTTg1NDgJCU1QQzg1NDgKKwlBVFVNODU0OAlNUEM4NTQ4CiAKIFRoZSBMRU9YIHRlYW0gPHRlYW1AbGVveC5vcmc+CiAKLQlFTFBUODYwCQkJTVBDODYwVAorCUVMUFQ4NjAJCU1QQzg2MFQKIAogRGF2ZSBMaXUgPGRhdmVsaXVAZnJlZXNjYWxlLmNvbT4KIAotCU1QQzgzMTVFUkRCCQlNUEM4MzE1Ci0JTVBDODMyWEVNRFMJCU1QQzgzMngKLQlNUEM4MzYwRU1EUwkJTVBDODM2MAotCU1QQzgzN1hFTURTCQlNUEM4Mzd4CisJTVBDODMxNUVSREIJTVBDODMxNQorCU1QQzgzMlhFTURTCU1QQzgzMngKKwlNUEM4MzYwRU1EUwlNUEM4MzYwCisJTVBDODM3WEVNRFMJTVBDODM3eAogCiBOeWUgTGl1IDxueWV0QHp1bWFuZXR3b3Jrcy5jb20+CiAKLQlaVU1BCQkJTVBDN3h4Xzc0eHgKKwlaVU1BCQlNUEM3eHhfNzR4eAogCiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0JTVBDODU0MEFEUwkJTVBDODU0MAotCU1QQzg1NjBBRFMJCU1QQzg1NjAKLQlNUEM4NTQxQ0RTCQlNUEM4NTQxCi0JTVBDODU1NUNEUwkJTVBDODU1NQorCU1QQzg1NDBBRFMJTVBDODU0MAorCU1QQzg1NjBBRFMJTVBDODU2MAorCU1QQzg1NDFDRFMJTVBDODU0MQorCU1QQzg1NTVDRFMJTVBDODU1NQogCi0JTVBDODY0MUhQQ04JCU1QQzg2NDFECisJTVBDODY0MUhQQ04JTVBDODY0MUQKIAogRGFuIE1hbGVrIDxkYW5AZW1iZWRkZWRhbGxleS5jb20+CiAKLQlzdHhncDMJCQlNUEM4NXh4Ci0Jc3R4c3NhCQkJTVBDODV4eAotCXN0eHh0YwkJCU1QQzh4eAorCXN0eGdwMwkJTVBDODV4eAorCXN0eHNzYQkJTVBDODV4eAorCXN0eHh0YwkJTVBDOHh4CiAKIEVyYW4gTWFuIDxlcmFuQG5iYXNlLmNvLmlsPgogCi0JRVZCNjQyNjBfNzUwQ1gJCU1QQzc1MENYCisJRVZCNjQyNjBfNzUwQ1gJTVBDNzUwQ1gKIAogQW5kcmVhICJsbGFuZHJlIiBNYXJzb24gPGFuZHJlYS5tYXJzb25AZGF2ZS10ZWNoLml0PgogCkBAIC0yNzYsNzUgKzI3NSw3NSBAQAogCiBSZWluaGFyZCBNZXllciA8ci5tZXllckBlbWstZWxla3Ryb25pay5kZT4KIAotCVRPUDg2MAkJCU1QQzg2MFQKLQlUT1A1MjAwCQkJTVBDNTIwMAorCVRPUDg2MAkJTVBDODYwVAorCVRPUDUyMDAJCU1QQzUyMDAKIAogVG9sdW5heSBPcmt1biA8dG9ya3VuQG5leHRpby5jb20+CiAKLQljc2IyNzIJCQlQUEM0MDVHUAotCWNzYjQ3MgkJCVBQQzQwNUdQCisJY3NiMjcyCQlQUEM0MDVHUAorCWNzYjQ3MgkJUFBDNDA1R1AKIAogSm9obiBPdGtlbiA8am90a2VuQHNvZnRhZHZhbmNlcy5jb20+CiAKLQlsdWFuCQkJUFBDNDQwU1AKLQl0YWlodQkJCVBQQzQwNUVQCisJbHVhbgkJUFBDNDQwU1AKKwl0YWlodQkJUFBDNDA1RVAKIAogS2VpdGggT3V0d2F0ZXIgPEtlaXRoX091dHdhdGVyQG12aXMuY29tPgogCi0JR0VOODYwVAkJCU1QQzg2MFQKLQlHRU44NjBUX1NDCQlNUEM4NjBUCisJR0VOODYwVAkJTVBDODYwVAorCUdFTjg2MFRfU0MJTVBDODYwVAogCiBGcmFuayBQYW5ubyA8ZnBhbm5vQGRlbHBoaW50ZWNoLmNvbT4KIAotCWVwODI2MAkJCU1QQzgyNjAKKwllcDgyNjAJCU1QQzgyNjAKIAogRGVuaXMgUGV0ZXIgPGQucGV0ZXJAbXBsLmNoPgogCi0JTUlQNDA1CQkJUFBDNHh4Ci0JUElQNDA1CQkJUFBDNHh4CisJTUlQNDA1CQlQUEM0eHgKKwlQSVA0MDUJCVBQQzR4eAogCiBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgogCi0JTVBDODM0OUVNRFMJCU1QQzgzNDkKKwlNUEM4MzQ5RU1EUwlNUEM4MzQ5CiAKIERhbmllbCBQb2lyb3QgPGRhbi5wb2lyb3RAd2luZHJpdmVyLmNvbT4KIAotCXNiYzgyNDAJCQlNUEM4MjQwCi0Jc2JjNDA1CQkJUFBDNDA1R1AKKwlzYmM4MjQwCQlNUEM4MjQwCisJc2JjNDA1CQlQUEM0MDVHUAogCiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAKLQlQM003NDQ4CQkJTVBDNzQ0OAorCVAzTTc0NDgJCU1QQzc0NDgKIAotCXVjMTAwCQkJTVBDODU3CisJdWMxMDAJCU1QQzg1NwogCi0JVFFNODV4eAkJCU1QQzg1NDAvODU0MS84NTU1Lzg1NjAKKwlUUU04NXh4CQlNUEM4NTQwLzg1NDEvODU1NS84NTYwCiAKLQlhY2FkaWEJCQlQUEM0MDVFWgotCWFscHIJCQlQUEM0NDBHWAotCWJhbWJvbwkJCVBQQzQ0MEVQCi0JYnVuYmluZ2EJCVBQQzQwNUVQCi0JY2FueW9ubGFuZHMJCVBQQzQ2MEVYCi0JZWJvbnkJCQlQUEM0NDBHUAotCWdsYWNpZXIJCQlQUEM0NjBHVAotCWhhbGVha2FsYQkJUFBDNDA1RVhyCi0Ja2F0bWFpCQkJUFBDNDQwU1BlCi0Ja2lsYXVlYQkJCVBQQzQwNUVYCi0JbHdtb241CQkJUFBDNDQwRVB4Ci0JbWFrYWx1CQkJUFBDNDA1RVgKLQlvY290ZWEJCQlQUEM0NDBHWAotCXAzcDQ0MAkJCVBQQzQ0MEdQCi0JcGNzNDQwZXAJCVBQQzQ0MEVQCi0JcmFpbmllcgkJCVBQQzQ0MEdSeAotCXNlcXVvaWEJCQlQUEM0NDBFUHgKLQlzeWNhbW9yZQkJUFBDNDA1R1ByCi0JdGFpc2hhbgkJCVBQQzQ0MEdYCi0Jd2FsbnV0CQkJUFBDNDA1R1AKLQl5ZWxsb3dzdG9uZQkJUFBDNDQwR1IKLQl5b3NlbWl0ZQkJUFBDNDQwRVAKLQl6ZXVzCQkJUFBDNDA1RVAKKwlhY2FkaWEJCVBQQzQwNUVaCisJYWxwcgkJUFBDNDQwR1gKKwliYW1ib28JCVBQQzQ0MEVQCisJYnVuYmluZ2EJUFBDNDA1RVAKKwljYW55b25sYW5kcwlQUEM0NjBFWAorCWVib255CQlQUEM0NDBHUAorCWdsYWNpZXIJCVBQQzQ2MEdUCisJaGFsZWFrYWxhCVBQQzQwNUVYcgorCWthdG1haQkJUFBDNDQwU1BlCisJa2lsYXVlYQkJUFBDNDA1RVgKKwlsd21vbjUJCVBQQzQ0MEVQeAorCW1ha2FsdQkJUFBDNDA1RVgKKwlvY290ZWEJCVBQQzQ0MEdYCisJcDNwNDQwCQlQUEM0NDBHUAorCXBjczQ0MGVwCVBQQzQ0MEVQCisJcmFpbmllcgkJUFBDNDQwR1J4CisJc2VxdW9pYQkJUFBDNDQwRVB4CisJc3ljYW1vcmUJUFBDNDA1R1ByCisJdGFpc2hhbgkJUFBDNDQwR1gKKwl3YWxudXQJCVBQQzQwNUdQCisJeWVsbG93c3RvbmUJUFBDNDQwR1IKKwl5b3NlbWl0ZQlQUEM0NDBFUAorCXpldXMJCVBQQzQwNUVQCiAKLQlQM003NTAJCQlQUEM3NTBGWC9HWC9HTAorCVAzTTc1MAkJUFBDNzUwRlgvR1gvR0wKIAogWXVzZGkgU2FudG9zbyA8eXVzZGlfc2FudG9zb0BhZGFwdGVjLmNvbT4KIApAQCAtMzUyLDczICszNTEsNzMgQEAKIAogVHJhdmlzIFNhd3llciAodHJhdmlzLnNhd3llckBzYW5kYnVyc3QuY29tPgogCi0JS0FSRUYJCQlQUEM0NDBHWAotCU1FVFJPQk9YCQlQUEM0NDBHWAotCVhQRURJVEUxSwkJUFBDNDQwR1gKKwlLQVJFRgkJUFBDNDQwR1gKKwlNRVRST0JPWAlQUEM0NDBHWAorCVhQRURJVEUxSwlQUEM0NDBHWAogCiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KIAotCWlkczgyNDcJCQlNUEM4MjQ3Ci0JanVwaXRlcgkJCU1QQzUyMDAKLQltZ2NvZ2UJCQlNUEM4MjQ3Ci0JbWdzdXZkCQkJTVBDODUyCi0JbXVuaWNzZQkJCU1QQzUyMDAKLQlzYzMJCQlQUEM0MDVHUAotCXVjMTAxCQkJTVBDNTIwMAorCWlkczgyNDcJCU1QQzgyNDcKKwlqdXBpdGVyCQlNUEM1MjAwCisJbWdjb2dlCQlNUEM4MjQ3CisJbWdzdXZkCQlNUEM4NTIKKwltdW5pY3NlCQlNUEM1MjAwCisJc2MzCQlQUEM0MDVHUAorCXVjMTAxCQlNUEM1MjAwCiAKIAogUGV0ZXIgRGUgU2NocmlqdmVyIDxwMkBtaW5kLmJlPgogCi0JTUwyCQkJUFBDNHh4CisJTUwyCQlQUEM0eHgKIAogQW5kcmUgU2Nod2FyeiA8YW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlPgogCi0JbXZibG03CQkJTVBDODM0MworCW12YmxtNwkJTVBDODM0MwogCiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgogCi0JTVBDODM0OUUtbUlUWAkJTVBDODM0OQotCU1QQzgzNDlFLW1JVFgtR1AJTVBDODM0OQorCU1QQzgzNDlFLW1JVFgJTVBDODM0OQorCU1QQzgzNDlFLW1JVFgtR1AgTVBDODM0OQogCiBFcmlrIFRoZWlzZW4gPGV0aGVpc2VuQG1pbmRzcHJpbmcuY29tPgogCi0JVzdPTE1DCQkJUFBDNHh4Ci0JVzdPTE1HCQkJUFBDNHh4CisJVzdPTE1DCQlQUEM0eHgKKwlXN09MTUcJCVBQQzR4eAogCiBKaW0gVGhvbXBzb24gPGppbUBtdXNlbmtpLmNvbT4KIAotCU1VU0VOS0kJCQlNUEM4MjQ1LzgyNDEKLQlTYW5kcG9pbnQ4MjQ1CQlNUEM4MjQ1CisJTVVTRU5LSQkJTVBDODI0NS84MjQxCisJU2FuZHBvaW50ODI0NQlNUEM4MjQ1CiAKIFJ1bmUgVG9yZ2Vyc2VuIDxydW5ldEBpbm5vdnN5cy5jb20+CiAKLQlNUEM4MjY2QURTCQlNUEM4MjY2CisJTVBDODI2NkFEUwlNUEM4MjY2CiAKIAogRGF2aWQgVXBkZWdyYWZmIDxkYXZlQGNyYXkuY29tPgogCi0JQ1JBWUwxCQkJUFBDNHh4CisJQ1JBWUwxCQlQUEM0eHgKIAogQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CiAKLQlNUEM4MzYwRVJESwkJTVBDODM2MAorCU1QQzgzNjBFUkRLCU1QQzgzNjAKIAogSm9zZWYgV2FnbmVyIDxXYWduZXJATWljcm9zeXMuZGU+CiAKLQlDUEM0NQkJCU1QQzgyNDUKLQlQTTUyMAkJCU1QQzUyMDAKKwlDUEM0NQkJTVBDODI0NQorCVBNNTIwCQlNUEM1MjAwCiAKIFN0ZXBoZW4gV2lsbGlhbXMgPHN0ZXZlQGljYXJ1cy5jb20+CiAKLQlKU0UJCQlQUEM0MDVHUHIKKwlKU0UJCVBQQzQwNUdQcgogCiBKb2huIFpoYW4gPHpoYW56QHNpbm92ZWUuY29tPgogCi0Jc3ZtX3NjOHh4CQlNUEM4eHgKKwlzdm1fc2M4eHgJTVBDOHh4CiAKIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgogCi0JbGlua3N0YXRpb24JCU1QQzgyNDEKKwlsaW5rc3RhdGlvbglNUEM4MjQxCiAKIEZlbmcgS2FuIDxma2FuQGFtY2MuY29tPgogCkBAIC00MjcsMzMyICs0MjYsMzMyIEBACiAKIFVua25vd24gLyBvcnBoYW5lZCBib2FyZHM6CiAKLQlBRFM4NjAJCQlNUEM4eHgKLQlGQURTODIzCQkJTVBDOHh4Ci0JRkFEUzg1MFNBUgkJTVBDOHh4Ci0JRkFEUzg2MFQJCU1QQzh4eAotCUdFTklFVFYJCQlNUEM4eHgKLQlJQUQyMTAJCQlNUEM4eHgKLQlNQlgJCQlNUEM4eHgKLQlNQlg4NjBUCQkJTVBDOHh4Ci0JTlg4MjMJCQlNUEM4eHgKLQlSUFhDbGFzc2ljCQlNUEM4eHgKLQlSUFhsaXRlCQkJTVBDOHh4CisJQURTODYwCQlNUEM4eHgKKwlGQURTODIzCQlNUEM4eHgKKwlGQURTODUwU0FSCU1QQzh4eAorCUZBRFM4NjBUCU1QQzh4eAorCUdFTklFVFYJCU1QQzh4eAorCUlBRDIxMAkJTVBDOHh4CisJTUJYCQlNUEM4eHgKKwlNQlg4NjBUCQlNUEM4eHgKKwlOWDgyMwkJTVBDOHh4CisJUlBYQ2xhc3NpYwlNUEM4eHgKKwlSUFhsaXRlCQlNUEM4eHgKIAotCUVSSUMJCQlQUEM0eHgKKwlFUklDCQlQUEM0eHgKIAotCU1PVVNTRQkJCU1QQzgyNHgKKwlNT1VTU0UJCU1QQzgyNHgKIAotCVJQWHN1cGVyCQlNUEM4MjYwCi0JcnNkcHJvdG8JCU1QQzgyNjAKKwlSUFhzdXBlcglNUEM4MjYwCisJcnNkcHJvdG8JTVBDODI2MAogCi0JRVZCNjQyNjAJCU1QQzd4eF83NHh4CisJRVZCNjQyNjAJTVBDN3h4Xzc0eHgKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEFSTSBTeXN0ZW1zOgkJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIFJvd2VsIEF0aWVuemEgPHJvd2VsQGRpd2FsYWJzLmNvbT4KIAotCWFybWFkaWxsbwkJQVJNNzIwVAorCWFybWFkaWxsbwlBUk03MjBUCiAKIFJpc2hpIEJoYXR0YWNoYXJ5YSA8cmlzaGlAdGkuY29tPgogCi0Jb21hcDU5MTJvc2sJCUFSTTkyNkVKUworCW9tYXA1OTEyb3NrCUFSTTkyNkVKUwogCiBDbGlmZiBCcmFrZSA8Y2xpZmYuYnJha2VAZ21haWwuY29tPgogCi0JcHhhMjU1X2lkcAkJeHNjYWxlCisJcHhhMjU1X2lkcAl4c2NhbGUKIAogUmljayBCcm9uc29uIDxyaWNrQGVmbi5vcmc+CiAKLQlBVDkxUk05MjAwREsJCWF0OTFybTkyMDAKKwlBVDkxUk05MjAwREsJYXQ5MXJtOTIwMAogCiBHZW9yZ2UgRy4gRGF2aXMgPGdkYXZpc0BtdmlzdGEuY29tPgogCi0JYXNzYWJldAkJCVNBMTEwMAotCWdjcGx1cwkJCVNBMTEwMAorCWFzc2FiZXQJCVNBMTEwMAorCWdjcGx1cwkJU0ExMTAwCiAKIFRob21hcyBFbHN0ZSA8aW5mb0BlbHN0ZS5vcmc+CiAKLQltb2RuZXQ1MAkJQVJNNzIwVCAoTkVUKzUwKQorCW1vZG5ldDUwCUFSTTcyMFQgKE5FVCs1MCkKIAogUGV0ZXIgRmlndWxpIDxwZXBvc2hAZXRjLnNrPgogCi0Jd2VwZXAyNTAJCXhzY2FsZQorCXdlcGVwMjUwCXhzY2FsZQogCiBNYXJpdXMgR3L2Z2VyIDxtYWdAc3lzZ28uZGU+CiAKLQlpbXBhNwkJCUFSTTcyMFQgKEVQNzIxMSkKLQllcDczMTIJCQlBUk03MjBUIChFUDczMTIpCisJaW1wYTcJCUFSTTcyMFQgKEVQNzIxMSkKKwllcDczMTIJCUFSTTcyMFQgKEVQNzMxMikKIAogS3NoaXRpaiBHdXB0YSA8a3NoaXRpakB0aS5jb20+CiAKLQlvbWFwMTUxMGlubgkJQVJNOTI1VAotCW9tYXAxNjEwaW5uCQlBUk05MjZFSlMKLQotS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+Ci0KLQlsdWJib2NrCQkJeHNjYWxlCi0JY3JhZGxlCQkJeHNjYWxlCi0JaXhkcDQyNQkJCXhzY2FsZQorCW9tYXAxNTEwaW5uCUFSTTkyNVQKKwlvbWFwMTYxMGlubglBUk05MjZFSlMKIAogR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CiAKLQlzbWRrMjQwMAkJQVJNOTIwVAotCXRyYWIJCQlBUk05MjBUCisJc21kazI0MDAJQVJNOTIwVAorCXRyYWIJCUFSTTkyMFQKIAogS29uc3RhbnRpbiBLbGV0c2Noa2UgPGtsZXRzY2hrZUBzeW5lcnRyb25peHguZGU+Ci0Jc2NiOTMyOAkJCUFSTTkyMFQKKwlzY2I5MzI4CQlBUk05MjBUCiAKIE5pc2hhbnQgS2FtYXQgPG5za2FtYXRAdGkuY29tPgogCi0Jb21hcDE2MTBoMgkJQVJNOTI2RUpTCisJb21hcDE2MTBoMglBUk05MjZFSlMKIAogU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+CiAKLQlEVi1FVk0JCQlBUk05MjZFSlMKLQlTT05BVEEJCQlBUk05MjZFSlMKLQlTQ0hNT09HSUUJCUFSTTkyNkVKUworCURWLUVWTQkJQVJNOTI2RUpTCisJU09OQVRBCQlBUk05MjZFSlMKKwlTQ0hNT09HSUUJQVJNOTI2RUpTCiAKIFByYWthc2ggS3VtYXIgPHByYWthc2hAZW1iZWR4LmNvbT4KIAotCWNlcmYyNTAJCQl4c2NhbGUKKwljZXJmMjUwCQl4c2NhbGUKIAogRGF2aWQgTfxsbGVyIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgogCi0Jc21kazI0MTAJCUFSTTkyMFQKLQlWQ01BOQkJCUFSTTkyMFQKKwlzbWRrMjQxMAlBUk05MjBUCisJVkNNQTkJCUFSTTkyMFQKIAogUm9sZiBPZmZlcm1hbm5zIDxyb2ZAc3lzZ28uZGU+CiAKLQlzaGFubm9uCQkJU0ExMTAwCisJc2hhbm5vbgkJU0ExMTAwCiAKIFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+Ci0JaW50ZWdyYXRvcmNwCQlBbGwgY3VycmVudCBBUk0gc3VwcGxpZWQgJgotCQkJCXN1cHBvcnRlZCBjb3JlIG1vZHVsZXMKLQkJCQktc2VlIGh0dHA6Ly93d3cuYXJtLmNvbQotCQkJCS9wcm9kdWN0cy9EZXZUb29scwotCQkJCS9IYXJkd2FyZV9QbGF0Zm9ybXMuaHRtbAotCXZlcnNhdGlsZQkJQVJNOTI2RUotUwotCXZlcnNhdGlsZQkJQVJNOTI2RUotUworCWludGVncmF0b3JjcAlBbGwgY3VycmVudCBBUk0gc3VwcGxpZWQgJiBzdXBwb3J0ZWQgY29yZSBtb2R1bGVzCisJCQktc2VlIGh0dHA6Ly93d3cuYXJtLmNvbS9wcm9kdWN0cy9EZXZUb29scy9IYXJkd2FyZV9QbGF0Zm9ybXMuaHRtbAorCXZlcnNhdGlsZQlBUk05MjZFSi1TCisJdmVyc2F0aWxlCUFSTTkyNkVKLVMKIAogRGF2ZSBQZXZlcmxleSA8ZHBldmVybGV5QG1wYy1kYXRhLmNvLnVrPgogCi0Jb21hcDczMHAyCQlBUk05MjZFSlMKKwlvbWFwNzMwcDIJQVJNOTI2RUpTCiAKIFN0ZWxpYW4gUG9wIDxzdGVsaWFuLnBvcEBsZWFkdGVjaGRlc2lnbi5jb20+CiAKLQlhdDkxY2FwOWFkawkJQVJNOTI2RUpTIChBVDkxQ0FQOSBTb0MpCi0JYXQ5MXNhbTkyNjBlawkJQVJNOTI2RUpTIChBVDkxU0FNOTI2MCBTb0MpCi0JYXQ5MXNhbTkyNjFlawkJQVJNOTI2RUpTIChBVDkxU0FNOTI2MSBTb0MpCi0JYXQ5MXNhbTkyNjNlawkJQVJNOTI2RUpTIChBVDkxU0FNOTI2MyBTb0MpCi0JYXQ5MXNhbTlybGVrCQlBUk05MjZFSlMgKEFUOTFTQU05UkwgU29DKQorCWF0OTFjYXA5YWRrCUFSTTkyNkVKUyAoQVQ5MUNBUDkgU29DKQorCWF0OTFzYW05MjYwZWsJQVJNOTI2RUpTIChBVDkxU0FNOTI2MCBTb0MpCisJYXQ5MXNhbTkyNjFlawlBUk05MjZFSlMgKEFUOTFTQU05MjYxIFNvQykKKwlhdDkxc2FtOTI2M2VrCUFSTTkyNkVKUyAoQVQ5MVNBTTkyNjMgU29DKQorCWF0OTFzYW05cmxlawlBUk05MjZFSlMgKEFUOTFTQU05UkwgU29DKQogCiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAKLQlpeGRwZzQyNQkJeHNjYWxlCi0JcGRuYjMJCQl4c2NhbGUKLQlzY3B1CQkJeHNjYWxlCisJaXhkcGc0MjUJeHNjYWxlCisJcGRuYjMJCXhzY2FsZQorCXNjcHUJCXhzY2FsZQogCiBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CiAKLQljc2IyMjYJCQl4c2NhbGUKLQlpbm5va29tCQkJeHNjYWxlCisJY3NiMjI2CQl4c2NhbGUKKwlpbm5va29tCQl4c2NhbGUKIAogQW5kcmVhIFNjaWFuIDxhbmRyZWEuc2NpYW5AZGF2ZS10ZWNoLml0PgogCi0JQjIJCQlBUk03VERNSSAoUzNDNDRCMFgpCisJQjIJCUFSTTdURE1JIChTM0M0NEIwWCkKIAogR3JlZyBVbmdlcmVyIDxncmVnLnVuZ2VyZXJAb3BlbmdlYXIuY29tPgogCi0JY200MDA4CQkJa3M4Njk1cAotCWNtNDExNgkJCWtzODY5NXAKLQljbTQxNDgJCQlrczg2OTVwCisJY200MDA4CQlrczg2OTVwCisJY200MTE2CQlrczg2OTVwCisJY200MTQ4CQlrczg2OTVwCiAKIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KIAotCW9tYXAyNDIwaDQJCUFSTTExMzZFSlMKKwlvbWFwMjQyMGg0CUFSTTExMzZFSlMKIAogS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KIAotCWFwb2xsb24JCQlBUk0xMTM2RUpTCisJYXBvbGxvbgkJQVJNMTEzNkVKUwogCiBBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAKLQlsYXJ0CQkJU0ExMTAwCi0JZG5wMTExMAkJCVNBMTExMAorCWxhcnQJCVNBMTEwMAorCWRucDExMTAJCVNBMTExMAogCiBNaWNoYWVsIFNjaHdpbmdlbiA8bWljaGFlbEBzY2h3aW5nZW4ub3JnPgogCi0JYWN0dXgxCQkJeHNjYWxlCi0JYWN0dXgyCQkJeHNjYWxlCi0JYWN0dXgzCQkJeHNjYWxlCi0JYWN0dXg0CQkJeHNjYWxlCisJYWN0dXgxCQl4c2NhbGUKKwlhY3R1eDIJCXhzY2FsZQorCWFjdHV4MwkJeHNjYWxlCisJYWN0dXg0CQl4c2NhbGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmtub3duIC8gb3JwaGFuZWQgYm9hcmRzOgorIAlCb2FyZAkJQ1BVCUxhc3Qga25vd24gbWFpbnRhaW5lciAvIENvbW1lbnQKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKwljcmFkbGUJCXhzY2FsZQlLeWxlIEhhcnJpcyA8a2hhcnJpc0BuZXh1cy10ZWNoLm5ldD4gLyBkZWFkIGFkZHJlc3MKKwlpeGRwNDI1CQl4c2NhbGUJS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+IC8gZGVhZCBhZGRyZXNzCisJbHViYm9jawkJeHNjYWxlCUt5bGUgSGFycmlzIDxraGFycmlzQG5leHVzLXRlY2gubmV0PiAvIGRlYWQgYWRkcmVzcwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHg4NiBTeXN0ZW1zOgkJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIERhbmllbCBFbmdzdHL2bSA8ZGFuaWVsQG9taWNyb24uc2U+CiAKLQlzYzUyMF9jZHAJCXg4NgorCXNjNTIwX2NkcAl4ODYKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBNSVBTIFN5c3RlbXM6CQkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIAotCWluY2FpcAkJCU1JUFMzMiA0S2MKLQlwdXJwbGUJCQlNSVBTNjQgNUtjCisJaW5jYWlwCQlNSVBTMzIgNEtjCisJcHVycGxlCQlNSVBTNjQgNUtjCiAKIFRob21hcyBMYW5nZSA8dGhvbWFzQGNvcmVsYXR1cy5zZT4KLQlkYmF1MXgwMAkJTUlQUzMyIEF1MTAwMAotCWd0aDIJCQlNSVBTMzIgQXUxMDAwCisJZGJhdTF4MDAJTUlQUzMyIEF1MTAwMAorCWd0aDIJCU1JUFMzMiBBdTEwMDAKIAogVmxhZCBMdW5ndSA8dmxhZC5sdW5ndUB3aW5kcml2ZXIuY29tPgotCXFlbXVfbWlwcwkJTUlQUzMyCisJcWVtdV9taXBzCU1JUFMzMgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIE5pb3MtMzIgU3lzdGVtczoJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIFN0ZXBoYW4gTGlueiA8bGluekBsaS1wcm8ubmV0PgogCi0JREsxUzEwCQkJTmlvcy0zMgotCUFETlBFU0MxCQlOaW9zLTMyCisJREsxUzEwCQlOaW9zLTMyCisJQUROUEVTQzEJTmlvcy0zMgogCiBTY290dCBNY051dHQgPHNtY251dHRAcHN5ZW50LmNvbT4KIAotCURLMUMyMAkJCU5pb3MtMzIKKwlESzFDMjAJCU5pb3MtMzIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBOaW9zLUlJIFN5c3RlbXM6CQkJCQkJCSMKICMJCQkJCQkJCQkjCiAjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIwotIwlCb2FyZAkJCUNQVQkJCQkJIworIwlCb2FyZAkJQ1BVCQkJCQkJIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBTY290dCBNY051dHQgPHNtY251dHRAcHN5ZW50LmNvbT4KIAotCVBDSTU0NDEJCQlOaW9zLUlJCi0JUEsxQzIwCQkJTmlvcy1JSQotCUVQMUMyMAkJCU5pb3MtSUkKLQlFUDFTMTAJCQlOaW9zLUlJCi0JRVAxUzQwCQkJTmlvcy1JSQorCVBDSTU0NDEJCU5pb3MtSUkKKwlQSzFDMjAJCU5pb3MtSUkKKwlFUDFDMjAJCU5pb3MtSUkKKwlFUDFTMTAJCU5pb3MtSUkKKwlFUDFTNDAJCU5pb3MtSUkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBNaWNyb0JsYXplIFN5c3RlbXM6CQkJCQkJCSMKICMJCQkJCQkJCQkjCiAjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIwotIwlCb2FyZAkJCUNQVQkJCQkJIworIwlCb2FyZAkJQ1BVCQkJCQkJIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBZYXN1c2hpIFNob2ppIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KIAotCVNVWkFLVQkJCU1pY3JvQmxhemUKKwlTVVpBS1UJCU1pY3JvQmxhemUKIAogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgogCi0JTUw0MDEJCQlNaWNyb0JsYXplCi0JWFVQVjJQCQkJTWljcm9CbGF6ZQorCU1MNDAxCQlNaWNyb0JsYXplCisJWFVQVjJQCQlNaWNyb0JsYXplCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ29sZGZpcmUgU3lzdGVtczoJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIE1hdHRoaWFzIEZ1Y2hzIDxtYXR0aGlhcy5mdWNoc0Blc2QtZWxlY3Ryb25pY3MuY29tPgogCi0JVEFTUkVHCQkJTUNGNTI0OQorCVRBU1JFRwkJTUNGNTI0OQogCiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgogCi0JTTUyMjc3RVZCCQltY2Y1MjI3eAotCU01MjM1RVZCCQltY2Y1MngyCi0JTTUzMjlFVkIJCW1jZjUzMngKLQlNNTM3M0VWQgkJbWNmNTMyeAotCU01NDQ1NUVWQgkJbWNmNTQ0NXgKLQlNNTQ3NUVWQgkJbWNmNTQ3eF84eAotCU01NDg1RVZCCQltY2Y1NDd4Xzh4CisJTTUyMjc3RVZCCW1jZjUyMjd4CisJTTUyMzVFVkIJbWNmNTJ4MgorCU01MzI5RVZCCW1jZjUzMngKKwlNNTM3M0VWQgltY2Y1MzJ4CisJTTU0NDU1RVZCCW1jZjU0NDV4CisJTTU0NzVFVkIJbWNmNTQ3eF84eAorCU01NDg1RVZCCW1jZjU0N3hfOHgKIAogSGF5ZGVuIEZyYXNlciA8SGF5ZGVuLkZyYXNlckBmcmVlc2NhbGUuY29tPgogCi0JTTUyNTNFVkJFCQltY2Y1MngyCisJTTUyNTNFVkJFCW1jZjUyeDIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBVlIzMiBTeXN0ZW1zOgkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CiAKLQlBVFNUSzEwMDAJCUFUMzJBUDd4eHgKLQlBVFNUSzEwMDIJCUFUMzJBUDcwMDAKLQlBVFNUSzEwMDMJCUFUMzJBUDcwMDEKLQlBVFNUSzEwMDQJCUFUMzJBUDcwMDIKLQlBVFNUSzEwMDYJCUFUMzJBUDcwMDAKLQlBVE5HVzEwMAkJQVQzMkFQNzAwMAorCUFUU1RLMTAwMAlBVDMyQVA3eHh4CisJQVRTVEsxMDAyCUFUMzJBUDcwMDAKKwlBVFNUSzEwMDMJQVQzMkFQNzAwMQorCUFUU1RLMTAwNAlBVDMyQVA3MDAyCisJQVRTVEsxMDA2CUFUMzJBUDcwMDAKKwlBVE5HVzEwMAlBVDMyQVA3MDAwCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU3VwZXJIIFN5c3RlbXM6CQkJCQkJCSMKICMJCQkJCQkJCQkjCiAjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIwotIwlCb2FyZAkJCUNQVQkJCQkJIworIwlCb2FyZAkJQ1BVCQkJCQkJIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CiAKLQlNUzc3NTBTRQkJU0g3NzUwCi0JTVM3NzIyU0UJCVNINzcyMgotCVI3NzgwTVAJCQlTSDc3ODAKLQlSMkRQbHVzCQkJU0g3NzUxUgotCVNINzc2M1JEUAkJU0g3NzYzCisJTVM3NzUwU0UJU0g3NzUwCisJTVM3NzIyU0UJU0g3NzIyCisJUjc3ODBNUAkJU0g3NzgwCisJUjJEUGx1cwkJU0g3NzUxUgorCVNINzc2M1JEUAlTSDc3NjMKIAogTWFyayBKb25hcyA8bWFyay5qb25hc0BkZS5ib3NjaC5jb20+CiAKLQltcHIyCQkJU0g3NzIwCisJbXByMgkJU0g3NzIwCiAKIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KIAotCU1TNzcyMFNFCQlTSDc3MjAKKwlNUzc3MjBTRQlTSDc3MjAKIAogWXVzdWtlIEdvZGEgPGdvZGEueXVzdWtlQHJlbmVzYXMuY29tPgogCi0JTUlHTy1SCQkJU0g3NzIyCisJTUlHTy1SCQlTSDc3MjIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBCbGFja2ZpbiBTeXN0ZW1zOgkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgogQmxhY2tmaW4gVGVhbSA8dS1ib290LWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnPgogCi0JQkY1MzMtRVpLSVQJCUJGNTMzCi0JQkY1MzMtU1RBTVAJCUJGNTMzCi0JQkY1MzctU1RBTVAJCUJGNTM3Ci0JQkY1NjEtRVpLSVQJCUJGNTYxCisJQkY1MzMtRVpLSVQJQkY1MzMKKwlCRjUzMy1TVEFNUAlCRjUzMworCUJGNTM3LVNUQU1QCUJGNTM3CisJQkY1NjEtRVpLSVQJQkY1NjEKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbmQgb2YgTUFJTlRBSU5FUlMgbGlzdAkJCQkJCSMKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDgwYjYwNjAuLmEyNTZlOWEgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNDYyLDEzICs0NjIsNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBMSVNUX0FSTTk9IgkJCVwKLQlhdDkxY2FwOWFkawkJXAotCWF0OTFybTkyMDBkawkJXAotCWF0OTFzYW05MjYwZWsJCVwKLQlhdDkxc2FtOTI2MWVrCQlcCi0JYXQ5MXNhbTkyNjNlawkJXAotCWF0OTFzYW05cmxlawkJXAotCWNtY19wdTIJCQlcCiAJYXA5MjB0CQkJXAogCWFwOTIyX1hBMTAJCVwKIAlhcDkyNmVqcwkJXApAQCAtNDc5LDExICs0NzIsNyBAQAogCWNwOTI2ZWpzCQlcCiAJY3A5NDZlcwkJCVwKIAljcDk2NgkJCVwKLQljc2I2MzcJCQlcCi0Ja2I5MjAyCQkJXAogCWxwZDdhNDAwCQlcCi0JbTUwMXNrCQkJXAotCW1wMnVzYgkJCVwKIAlteDFhZHMJCQlcCiAJbXgxZnMyCQkJXAogCW5ldHN0YXIJCQlcCkBAIC01ODgsNiArNTc3LDcgQEAKIAkke0xJU1RfQVJNOX0JXAogCSR7TElTVF9BUk0xMH0JXAogCSR7TElTVF9BUk0xMX0JXAorCSR7TElTVF9hdDkxfQlcCiAJJHtMSVNUX3B4YX0JXAogCSR7TElTVF9peHB9CVwKICIKQEAgLTcwMiw3ICs2OTIsNyBAQAogCU01MjI3N0VWQgkJXAogCU01MjM1RVZCCQlcCiAJTTUyNDlFVkIJCVwKLQlNNTI1M0VWQgkJXAorCU01MjUzRVZCRQkJXAogCU01MjcxRVZCCQlcCiAJTTUyNzJDMwkJCVwKIAlNNTI3NUVWQgkJXApkaWZmIC0tZ2l0IGEvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9taWkuYyBiL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvbWlpLmMKaW5kZXggM2VhMjBhNi4uOGFlMmVjNiAxMDA2NDQKLS0tIGEvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9taWkuYworKysgYi9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL21paS5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIH0KICNlbmRpZgkJCQkvKiBDRkdfRElTQ09WRVJfUEhZICovCiAKLWludCBtaWlfaW5pdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJfX21paV9pbml0IikpKTsKK3ZvaWQgbWlpX2luaXQodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygiX19taWlfaW5pdCIpKSk7CiAKIHZvaWQgX19taWlfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvYWRzNTEyMS9hZHM1MTIxLmMgYi9ib2FyZC9hZHM1MTIxL2FkczUxMjEuYwppbmRleCBkNWNlZTY0Li44NDUyMDU0IDEwMDY0NAotLS0gYS9ib2FyZC9hZHM1MTIxL2FkczUxMjEuYworKysgYi9ib2FyZC9hZHM1MTIxL2FkczUxMjEuYwpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bXBjNTEyeC5oPgorI2luY2x1ZGUgImlvcGluLmgiCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxmZHRfc3VwcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYm9hcmQvYWRzNTEyMS9hZHM1MTIxX2RpdS5jIGIvYm9hcmQvYWRzNTEyMS9hZHM1MTIxX2RpdS5jCmluZGV4IDg3Y2YwY2IuLjI2NjI4ZDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FkczUxMjEvYWRzNTEyMV9kaXUuYworKysgYi9ib2FyZC9hZHM1MTIxL2FkczUxMjFfZGl1LmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkvKiBNb2RpZnkgUFhDTEsgaW4gR1VUUyBDTEtEVkRSICovCiAJZGVidWcoIkRJVTogQ3VycmVudCB2YWx1ZSBvZiBDTEtEVkRSID0gMHglMDh4XG4iLCAqY2xrZHZkcik7CiAJdGVtcCA9ICpjbGtkdmRyICYgMHhGRkZGRkYwMDsKLQkqY2xrZHZkciA9IHRlbXAgfCAocGl4dmFsICYgMHgxRik7CisJKmNsa2R2ZHIgPSB0ZW1wIHwgKHBpeHZhbCAmIDB4RkYpOwogCWRlYnVnKCJESVU6IE1vZGlmaWVkIHZhbHVlIG9mIENMS0RWRFIgPSAweCUwOHhcbiIsICpjbGtkdmRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvYWRzNTEyMS9pb3Bpbi5jIGIvYm9hcmQvYWRzNTEyMS9pb3Bpbi5jCmluZGV4IDZhMzVjODEuLmE2NzkyYTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FkczUxMjEvaW9waW4uYworKysgYi9ib2FyZC9hZHM1MTIxL2lvcGluLmMKQEAgLTI1LDcxICsyNSw5MCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiaW9waW4uaCIKIAotLyoKLSAqIElPIFBBRCBUWVBFUwotICoJZm9yIGFsbCB0eXBlcyAgIGZtdXggaXMgdXNlZCB0byBzZWxlY3QgdGhlIGZ1bnRpb24KLSAqCQkJZHMgc2V0cyB0aGUgc2xldyByYXRlCi0gKglTVEQgcGlucyAgbm90aGluZyBleHRyYSAoY2FuIHNldCBkcyAmIGZtdXggb25seSkKLSAqCVNURF9QVQkgIHB1ZT0xIHRvIGVuYWJsZSBwdWxsICYgcHVkIHNldHMgd2hldGhlciB1cCBvciBkb3duIHJlc2lzdG9ycwotICoJU1REX1NUCSAgc3Qgc2V0cyB0aGUgU2NobWl0dCB0cmlnZ2VyCi0gKglTVERfUFVfU1QgcHVlICYgcHVkIHNldHMgcHVsbC11cC9kb3duIHJlc2lzdG9ycyBhcyBpbiBTVERfUFUKLSAqCQkgIHN0IHNldHMgdGhlIFNjaG1pdHQgdHJpZ2dlcgotICoJUENJCSAgaG9sZCBzZXRzIG91dHB1dCBkZWxheQotICoJUENJX1NUCSAgaG9sZCBzZXRzIG91dHB1dCBkZWxheSBhbmQgc3Qgc2V0cyB0aGUgU2NobWl0dCB0cmlnZ2VyCi0gKi8KKy8qIElPIHBpbiBmaWVsZHMgKi8KKyNkZWZpbmUgSU9fUElOX0ZNVVgodikJKCh2KSA8PCA3KQkvKiBwaW4gZnVuY3Rpb24gKi8KKyNkZWZpbmUgSU9fUElOX0hPTEQodikJKCh2KSA8PCA1KQkvKiBob2xkIHRpbWUsIHBjaSBvbmx5ICovCisjZGVmaW5lIElPX1BJTl9QVUQodikJKCh2KSA8PCA0KQkvKiBpZiBQVUUsIDA9cHVsbC1kb3duLCAxPXB1bGwtdXAgKi8KKyNkZWZpbmUgSU9fUElOX1BVRSh2KQkoKHYpIDw8IDMpCS8qIHB1bGwgdXAvZG93biBlbmFibGUgKi8KKyNkZWZpbmUgSU9fUElOX1NUKHYpCSgodikgPDwgMikJLyogc2NobWl0dCB0cmlnZ2VyICovCisjZGVmaW5lIElPX1BJTl9EUyh2KQkoKHYpKQkJLyogc2xldyByYXRlICovCiAKIHN0YXRpYyBzdHJ1Y3QgaW9waW5fdCB7Ci0JdV9zaG9ydCBwX29mZnNldDsgLyogb2Zmc2V0IGZyb20gSU9DVExfTUVNX09GRlNFVCAJCSovCi0JdV9zaG9ydCBwX25vOwkgIC8qIG51bWJlciBvZiBwaW5zIHRvIHNldCB0aGlzIHdheQkJKi8KLQl1X3Nob3J0IGJpdF9vcjo3OyAvKiBEbyBiaXR3aXNlIE9SIGluc3RlYWQgb2Ygc2V0dGluZwkJKi8KLQl1X3Nob3J0IGZtdXg6MjsJICAvKiBwYWQgZnVuY3Rpb24gc2VsZWN0IDAtMwkJCSovCi0JdV9zaG9ydCBob2xkOjI7ICAgLyogUENJIHBhZCB0eXBlcyBvbmx5OyAJCQkqLwotCXVfc2hvcnQgcHVkOjE7IAkgIC8qIHB1bGwgcmVzaXN0b3I7IFBVIHR5cGVzIG9ubHk7CQkqLwotCQkJICAvKiBpZiBwdWU9MSB0aGVuIDA9cHVsbC1kb3duLCAxPXB1bGwtdXAJKi8KLQl1X3Nob3J0CXB1ZToxOwkgIC8qIFB1bGwgcmVzaXN0b3IgZW5hYmxlOyBfUFUgdHlwZXMgb25seQkqLwotCXVfc2hvcnQgc3Q6MTsJICAvKiBTY2htaXR0IHRyaWdnZXIgZW5hYmxlOyBfU1QgdHlwZXMgb25seQkqLwotCXVfc2hvcnQJZHM6MjsJICAvKiBTbGV3IHJhdGUgY2xhc3MsIDA9Y2xhc3MxLCAuLi4sIDM9Y2xhc3M0CSovCisJaW50IHBfb2Zmc2V0OwkJLyogb2Zmc2V0IGZyb20gSU9DVExfTUVNX09GRlNFVCAqLworCWludCBucl9waW5zOwkJLyogbnVtYmVyIG9mIHBpbnMgdG8gc2V0IHRoaXMgd2F5ICovCisJaW50IGJpdF9vcjsJCS8qIG9yIGluIHRoZSB2YWx1ZSBpbnN0ZWFkIG9mIG92ZXJ3cml0ZSAqLworCXVfbG9uZyB2YWw7CQkvKiB2YWx1ZSB0byB3cml0ZSBvciBvciAqLwogfSBpb3JlZ3NfaW5pdFtdID0gewotLyogRlVOQzE9RkVDX1JYX0RWIFNldHMgTmV4dCAzIHRvIEZFQyBwYWRzIAkqLwotCXtJT0NUTF9TUERJRl9UWENMSywgCTMsICAwLCAxLCAwLCAwLCAwLCAwLCAzfSwKLS8qIFNldCBoaWdoZXN0IFNsZXcgb24gOSBQQVRBIHBpbnMJCSovCi0Je0lPQ1RMX1BBVEFfQ0UxLCAJOSwgIDEsIDAsIDAsIDAsIDAsIDAsIDN9LAotLyogRlVOQzE9RkVDX0NPTCBTZXRzIE5leHQgMTUgdG8gRkVDIHBhZHMgCSovCi0Je0lPQ1RMX1BTQzBfMCwgCQkxNSwgMCwgMSwgMCwgMCwgMCwgMCwgM30sCi0vKiBGVU5DMT1TUERJRl9UWENMSwkJCQkqLwotCXtJT0NUTF9MUENfQ1MxLCAJMSwgIDAsIDEsIDAsIDAsIDAsIDEsIDN9LAotLyogRlVOQzI9U1BESUZfVFggYW5kIHNldHMgTmV4dCBwaW4gdG8gU1BESUZfUlgJKi8KLQl7SU9DVExfSTJDMV9TQ0wsIAkyLCAgMCwgMiwgMCwgMCwgMCwgMSwgM30sCi0vKiBGVU5DMj1ESVUgQ0xLCQkJCSovCi0Je0lPQ1RMX1BTQzZfMCwgCQkxLCAgMCwgMiwgMCwgMCwgMCwgMSwgM30sCi0vKiBGVU5DMj1ESVVfSFNZTkMgCQkJCSovCi0Je0lPQ1RMX1BTQzZfMSwgCQkxLCAgMCwgMiwgMCwgMCwgMCwgMCwgM30sCi0vKiBGVU5DMj1ESVVWU1lOQyBTZXRzIE5leHQgMjYgdG8gRElVIFBhZHMJKi8KLQl7SU9DVExfUFNDNl80LCAJCTI2LCAwLCAyLCAwLCAwLCAwLCAwLCAzfQorCS8qIEZVTkMxPUZFQ19SWF9EViBTZXRzIE5leHQgMyB0byBGRUMgcGFkcyAqLworCXsKKwkJSU9DVExfU1BESUZfVFhDTEssIDMsIDAsCisJCUlPX1BJTl9GTVVYKDEpIHwgSU9fUElOX0hPTEQoMCkgfCBJT19QSU5fUFVEKDApIHwKKwkJSU9fUElOX1BVRSgwKSB8IElPX1BJTl9TVCgwKSB8IElPX1BJTl9EUygzKQorCX0sCisJLyogU2V0IGhpZ2hlc3QgU2xldyBvbiA5IFBBVEEgcGlucyAqLworCXsKKwkJSU9DVExfUEFUQV9DRTEsIDksIDEsCisJCUlPX1BJTl9GTVVYKDApIHwgSU9fUElOX0hPTEQoMCkgfCBJT19QSU5fUFVEKDApIHwKKwkJSU9fUElOX1BVRSgwKSB8IElPX1BJTl9TVCgwKSB8IElPX1BJTl9EUygzKQorCX0sCisJLyogRlVOQzE9RkVDX0NPTCBTZXRzIE5leHQgMTUgdG8gRkVDIHBhZHMgKi8KKwl7CisJCUlPQ1RMX1BTQzBfMCwgMTUsIDAsCisJCUlPX1BJTl9GTVVYKDEpIHwgSU9fUElOX0hPTEQoMCkgfCBJT19QSU5fUFVEKDApIHwKKwkJSU9fUElOX1BVRSgwKSB8IElPX1BJTl9TVCgwKSB8IElPX1BJTl9EUygzKQorCX0sCisJLyogRlVOQzE9U1BESUZfVFhDTEsgKi8KKwl7CisJCUlPQ1RMX0xQQ19DUzEsIDEsIDAsCisJCUlPX1BJTl9GTVVYKDEpIHwgSU9fUElOX0hPTEQoMCkgfCBJT19QSU5fUFVEKDApIHwKKwkJSU9fUElOX1BVRSgwKSB8IElPX1BJTl9TVCgxKSB8IElPX1BJTl9EUygzKQorCX0sCisJLyogRlVOQzI9U1BESUZfVFggYW5kIHNldHMgTmV4dCBwaW4gdG8gU1BESUZfUlggKi8KKwl7CisJCUlPQ1RMX0kyQzFfU0NMLCAyLCAwLAorCQlJT19QSU5fRk1VWCgyKSB8IElPX1BJTl9IT0xEKDApIHwgSU9fUElOX1BVRCgwKSB8CisJCUlPX1BJTl9QVUUoMCkgfCBJT19QSU5fU1QoMSkgfCBJT19QSU5fRFMoMykKKwl9LAorCS8qIEZVTkMyPURJVSBDTEsgKi8KKwl7CisJCUlPQ1RMX1BTQzZfMCwgMSwgMCwKKwkJSU9fUElOX0ZNVVgoMikgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDEpIHwgSU9fUElOX0RTKDMpCisJfSwKKwkvKiBGVU5DMj1ESVVfSFNZTkMgKi8KKwl7CisJCUlPQ1RMX1BTQzZfMSwgMSwgMCwKKwkJSU9fUElOX0ZNVVgoMikgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDApIHwgSU9fUElOX0RTKDMpCisJfSwKKwkvKiBGVU5DMj1ESVVWU1lOQyBTZXRzIE5leHQgMjYgdG8gRElVIFBhZHMgKi8KKwl7CisJCUlPQ1RMX1BTQzZfNCwgMjYsIDAsCisJCUlPX1BJTl9GTVVYKDIpIHwgSU9fUElOX0hPTEQoMCkgfCBJT19QSU5fUFVEKDApIHwKKwkJSU9fUElOX1BVRSgwKSB8IElPX1BJTl9TVCgwKSB8IElPX1BJTl9EUygzKQorCX0KIH07CiAKIHZvaWQgaW9waW5faW5pdGlhbGl6ZSh2b2lkKQogewogCXNob3J0IGksIGosIG4sIHA7CiAJdV9sb25nICpyZWc7CisJaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCisJcmVnID0gKHVfbG9uZyAqKSYoaW0tPmlvX2N0cmwucmVnc1swXSk7CiAKIAlpZiAoc2l6ZW9mKGlvcmVnc19pbml0KSA9PSAwKQogCQlyZXR1cm47CiAKLQlpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JcmVnID0gKHVfbG9uZyAqKSYoaW0tPmlvX2N0cmwucmVnc1swXSk7CiAJbiA9IHNpemVvZihpb3JlZ3NfaW5pdCkgLyBzaXplb2YoaW9yZWdzX2luaXRbMF0pOwogCiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlmb3IgKHAgPSAwLCBqID0gaW9yZWdzX2luaXRbaV0ucF9vZmZzZXQgLyBzaXplb2YodV9sb25nKTsKLQkJCXAgPCBpb3JlZ3NfaW5pdFtpXS5wX25vOyBwKyssIGorKykgewotCQkvKiBsb3dlc3QgOSBiaXRzIHNldHMgdGhlIHJlZ2lzdGVyICovCisJCQlwIDwgaW9yZWdzX2luaXRbaV0ubnJfcGluczsgcCsrLCBqKyspIHsKIAkJCWlmIChpb3JlZ3NfaW5pdFtpXS5iaXRfb3IpCi0JCQkJcmVnW2pdIHw9ICooKHVfbG9uZyAqKSAmaW9yZWdzX2luaXRbaV0ucF9ubykKLQkJCQkJCSYgMHgwMDAwMDFmZjsKKwkJCQlyZWdbal0gfD0gaW9yZWdzX2luaXRbaV0udmFsOwogCQkJZWxzZQotCQkJCXJlZ1tqXSA9ICooKHVfbG9uZyAqKSAmaW9yZWdzX2luaXRbaV0ucF9ubykKLQkJCQkJCSYgMHgwMDAwMDFmZjsKKwkJCQlyZWdbal0gPSBpb3JlZ3NfaW5pdFtpXS52YWw7CiAJCX0KIAl9CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy90YWlzaGFuL3Nob3dpbmZvLmMgYi9ib2FyZC9hbWNjL3RhaXNoYW4vc2hvd2luZm8uYwppbmRleCAwNDBiODAwLi41YjhiODhlIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3RhaXNoYW4vc2hvd2luZm8uYworKysgYi9ib2FyZC9hbWNjL3RhaXNoYW4vc2hvd2luZm8uYwpAQCAtMzQsNTkgKzM0LDU5IEBACiAJLyogcmVhZCBjbG9jayByZWdzaXRlciAqLwogCXByaW50ZigiPT09PT0gRGlzcGxheSByZXNldCBhbmQgaW5pdGlhbGl6ZSByZWdpc3RlciBTdGFydCA9PT09PT09PT1cbiIpOwogCW1mY3ByKGNsa19wbGxjLHJlZyk7Ci0JcHJpbnRmKCJjcHJfcGxsYyAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJjcHJfcGxsYyAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZjcHIoY2xrX3BsbGQscmVnKTsKLQlwcmludGYoImNwcl9wbGxkICAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoImNwcl9wbGxkICAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZmNwcihjbGtfcHJpbWFkLHJlZyk7Ci0JcHJpbnRmKCJjcHJfcHJpbWFkID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJjcHJfcHJpbWFkID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZjcHIoY2xrX3ByaW1iZCxyZWcpOwotCXByaW50ZigiY3ByX3ByaW1iZCA9ICUjMDEweFxuIixyZWcpOworCXByaW50ZigiY3ByX3ByaW1iZCA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mY3ByKGNsa19vcGJkLHJlZyk7Ci0JcHJpbnRmKCJjcHJfb3BiZCAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJjcHJfb3BiZCAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZjcHIoY2xrX3BlcmQscmVnKTsKLQlwcmludGYoImNwcl9wZXJkICAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoImNwcl9wZXJkICAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZmNwcihjbGtfbWFsZCxyZWcpOwotCXByaW50ZigiY3ByX21hbGQgICA9ICUjMDEweFxuIixyZWcpOworCXByaW50ZigiY3ByX21hbGQgICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCS8qIHJlYWQgc2RyIHJlZ2lzdGVyICovCiAJbWZzZHIoc2RyX2ViYyxyZWcpOwotCXByaW50Zigic2RyX2ViYyAgICA9ICUjMDEweFxuIixyZWcpOworCXByaW50Zigic2RyX2ViYyAgICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mc2RyKHNkcl9jcDQ0MCxyZWcpOwotCXByaW50Zigic2RyX2NwNDQwICA9ICUjMDEweFxuIixyZWcpOworCXByaW50Zigic2RyX2NwNDQwICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mc2RyKHNkcl94Y3IscmVnKTsKLQlwcmludGYoInNkcl94Y3IgICAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl94Y3IgICAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfeHBsbGMscmVnKTsKLQlwcmludGYoInNkcl94cGxsYyAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl94cGxsYyAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfeHBsbGQscmVnKTsKLQlwcmludGYoInNkcl94cGxsZCAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl94cGxsZCAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfcGZjMCxyZWcpOwotCXByaW50Zigic2RyX3BmYzAgICA9ICUjMDEweFxuIixyZWcpOworCXByaW50Zigic2RyX3BmYzAgICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mc2RyKHNkcl9wZmMxLHJlZyk7Ci0JcHJpbnRmKCJzZHJfcGZjMSAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfcGZjMSAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX2N1c3QwLHJlZyk7Ci0JcHJpbnRmKCJzZHJfY3VzdDAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfY3VzdDAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX2N1c3QxLHJlZyk7Ci0JcHJpbnRmKCJzZHJfY3VzdDEgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfY3VzdDEgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX3VhcnQwLHJlZyk7Ci0JcHJpbnRmKCJzZHJfdWFydDAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfdWFydDAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX3VhcnQxLHJlZyk7Ci0JcHJpbnRmKCJzZHJfdWFydDEgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfdWFydDEgID0gJSMwMTBseFxuIixyZWcpOwogCiAJcHJpbnRmKCI9PT09PSBEaXNwbGF5IHJlc2V0IGFuZCBpbml0aWFsaXplIHJlZ2lzdGVyIEVuZCAgID09PT09PT09PVxuIik7CiB9CkBAIC05NywxMyArOTcsMTMgQEAKIAogCXByaW50ZigiUENJLVggY2hpcCBjb250cm9sIHJlZ2lzdGVyc1xuIik7CiAJbWZzZHIoc2RyX3hjciwgcmVnKTsKLQlwcmludGYoInNkcl94Y3IgICAgPSAlIzAxMHhcbiIsIHJlZyk7CisJcHJpbnRmKCJzZHJfeGNyICAgID0gJSMwMTBseFxuIiwgcmVnKTsKIAogCW1mc2RyKHNkcl94cGxsYywgcmVnKTsKLQlwcmludGYoInNkcl94cGxsYyAgPSAlIzAxMHhcbiIsIHJlZyk7CisJcHJpbnRmKCJzZHJfeHBsbGMgID0gJSMwMTBseFxuIiwgcmVnKTsKIAogCW1mc2RyKHNkcl94cGxsZCwgcmVnKTsKLQlwcmludGYoInNkcl94cGxsZCAgPSAlIzAxMHhcbiIsIHJlZyk7CisJcHJpbnRmKCJzZHJfeHBsbGQgID0gJSMwMTBseFxuIiwgcmVnKTsKIAogCXByaW50ZigiUENJLVggQnJpZGdlIENvbmZpZ3VyZSByZWdpc3RlcnNcbiIpOwogCXByaW50ZigiUENJWDBfVkVORElEICAgICAgICAgICAgPSAlIzA2eFxuIiwgaW4xNnIoUENJWDBfVkVORElEKSk7CkBAIC0xMTYsNDkgKzExNiw0OSBAQAogCXByaW50ZigiUENJWDBfSERUWVBFICAgICAgICAgICAgPSAlIzA0eFxuIiwgaW44KFBDSVgwX0hEVFlQRSkpOwogCXByaW50ZigiUENJWDBfQklTVCAgICAgICAgICAgICAgPSAlIzA0eFxuIiwgaW44KFBDSVgwX0JJU1QpKTsKIAotCXByaW50ZigiUENJWDBfQkFSMCAgICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX0JBUjApKTsKLQlwcmludGYoIlBDSVgwX0JBUjEgICAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9CQVIxKSk7Ci0JcHJpbnRmKCJQQ0lYMF9CQVIyICAgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQkFSMikpOwotCXByaW50ZigiUENJWDBfQkFSMyAgICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX0JBUjMpKTsKLQlwcmludGYoIlBDSVgwX0JBUjQgICAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9CQVI0KSk7Ci0JcHJpbnRmKCJQQ0lYMF9CQVI1ICAgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQkFSNSkpOworCXByaW50ZigiUENJWDBfQkFSMCAgICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9CQVIwKSk7CisJcHJpbnRmKCJQQ0lYMF9CQVIxICAgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX0JBUjEpKTsKKwlwcmludGYoIlBDSVgwX0JBUjIgICAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQkFSMikpOworCXByaW50ZigiUENJWDBfQkFSMyAgICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9CQVIzKSk7CisJcHJpbnRmKCJQQ0lYMF9CQVI0ICAgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX0JBUjQpKTsKKwlwcmludGYoIlBDSVgwX0JBUjUgICAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQkFSNSkpOwogCi0JcHJpbnRmKCJQQ0lYMF9DSVNQVFIgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQ0lTUFRSKSk7CisJcHJpbnRmKCJQQ0lYMF9DSVNQVFIgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX0NJU1BUUikpOwogCXByaW50ZigiUENJWDBfU0JTU1lTVklEICAgICAgICAgPSAlIzAxMHhcbiIsIGluMTZyKFBDSVgwX1NCU1lTVklEKSk7CiAJcHJpbnRmKCJQQ0lYMF9TQlNTWVNJRCAgICAgICAgICA9ICUjMDEweFxuIiwgaW4xNnIoUENJWDBfU0JTWVNJRCkpOwotCXByaW50ZigiUENJWDBfRVJPTUJBICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX0VST01CQSkpOworCXByaW50ZigiUENJWDBfRVJPTUJBICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9FUk9NQkEpKTsKIAlwcmludGYoIlBDSVgwX0NBUCAgICAgICAgICAgICAgID0gJSMwNHhcbiIsIGluOChQQ0lYMF9DQVApKTsKIAlwcmludGYoIlBDSVgwX0lOVExOICAgICAgICAgICAgID0gJSMwNHhcbiIsIGluOChQQ0lYMF9JTlRMTikpOwogCXByaW50ZigiUENJWDBfSU5UUE4gICAgICAgICAgICAgPSAlIzA0eFxuIiwgaW44KFBDSVgwX0lOVFBOKSk7CiAJcHJpbnRmKCJQQ0lYMF9NSU5HTlQgICAgICAgICAgICA9ICUjMDR4XG4iLCBpbjgoUENJWDBfTUlOR05UKSk7CiAJcHJpbnRmKCJQQ0lYMF9NQVhMVE5DWSAgICAgICAgICA9ICUjMDR4XG4iLCBpbjgoUENJWDBfTUFYTFROQ1kpKTsKIAotCXByaW50ZigiUENJWDBfQlJER09QVDEgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX0JSREdPUFQxKSk7Ci0JcHJpbnRmKCJQQ0lYMF9CUkRHT1BUMiAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQlJER09QVDIpKTsKKwlwcmludGYoIlBDSVgwX0JSREdPUFQxICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQlJER09QVDEpKTsKKwlwcmludGYoIlBDSVgwX0JSREdPUFQyICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQlJER09QVDIpKTsKIAotCXByaW50ZigiUENJWDBfUE9NMExBTCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTBMQUwpKTsKLQlwcmludGYoIlBDSVgwX1BPTTBMQUggICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00wTEFIKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QT00wU0EgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUE9NMFNBKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QT00wUENJTEFMICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUE9NMFBDSUFMKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QT00wUENJTEFIICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUE9NMFBDSUFIKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QT00xTEFMICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUE9NMUxBTCkpOwotCXByaW50ZigiUENJWDBfUE9NMUxBSCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTFMQUgpKTsKLQlwcmludGYoIlBDSVgwX1BPTTFTQSAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00xU0EpKTsKLQlwcmludGYoIlBDSVgwX1BPTTFQQ0lMQUwgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00xUENJQUwpKTsKLQlwcmludGYoIlBDSVgwX1BPTTFQQ0lMQUggICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00xUENJQUgpKTsKLQlwcmludGYoIlBDSVgwX1BPTTJTQSAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00yU0EpKTsKKwlwcmludGYoIlBDSVgwX1BPTTBMQUwgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMExBTCkpOworCXByaW50ZigiUENJWDBfUE9NMExBSCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00wTEFIKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00wU0EgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTBTQSkpOworCXByaW50ZigiUENJWDBfUE9NMFBDSUxBTCAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00wUENJQUwpKTsKKwlwcmludGYoIlBDSVgwX1BPTTBQQ0lMQUggICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMFBDSUFIKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00xTEFMICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTFMQUwpKTsKKwlwcmludGYoIlBDSVgwX1BPTTFMQUggICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMUxBSCkpOworCXByaW50ZigiUENJWDBfUE9NMVNBICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00xU0EpKTsKKwlwcmludGYoIlBDSVgwX1BPTTFQQ0lMQUwgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMVBDSUFMKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00xUENJTEFIICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTFQQ0lBSCkpOworCXByaW50ZigiUENJWDBfUE9NMlNBICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00yU0EpKTsKIAotCXByaW50ZigiUENJWDBfUElNMFNBICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BJTTBTQSkpOwotCXByaW50ZigiUENJWDBfUElNMExBTCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BJTTBMQUwpKTsKLQlwcmludGYoIlBDSVgwX1BJTTBMQUggICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QSU0wTEFIKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QSU0xU0EgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUElNMVNBKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QSU0xTEFMICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUElNMUxBTCkpOwotCXByaW50ZigiUENJWDBfUElNMUxBSCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BJTTFMQUgpKTsKLQlwcmludGYoIlBDSVgwX1BJTTJTQSAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QSU0xU0EpKTsKLQlwcmludGYoIlBDSVgwX1BJTTJMQUwgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QSU0xTEFMKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QSU0yTEFIICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUElNMUxBSCkpOworCXByaW50ZigiUENJWDBfUElNMFNBICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QSU0wU0EpKTsKKwlwcmludGYoIlBDSVgwX1BJTTBMQUwgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUElNMExBTCkpOworCXByaW50ZigiUENJWDBfUElNMExBSCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QSU0wTEFIKSk7CisJcHJpbnRmKCJQQ0lYMF9QSU0xU0EgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BJTTFTQSkpOworCXByaW50ZigiUENJWDBfUElNMUxBTCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QSU0xTEFMKSk7CisJcHJpbnRmKCJQQ0lYMF9QSU0xTEFIICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BJTTFMQUgpKTsKKwlwcmludGYoIlBDSVgwX1BJTTJTQSAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUElNMVNBKSk7CisJcHJpbnRmKCJQQ0lYMF9QSU0yTEFMICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BJTTFMQUwpKTsKKwlwcmludGYoIlBDSVgwX1BJTTJMQUggICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUElNMUxBSCkpOwogCi0JcHJpbnRmKCJQQ0lYMF9YU1RTICAgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfU1RTKSk7CisJcHJpbnRmKCJQQ0lYMF9YU1RTICAgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1NUUykpOwogfQogCiBpbnQgZG9fc2hvd194YnJpZGdlX2luZm8oY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQpkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtYWRpbGxvL2ZsYXNoLmMgYi9ib2FyZC9hcm1hZGlsbG8vZmxhc2guYwppbmRleCAwMzdhNjQzLi44NTE4ODU2IDEwMDY0NAotLS0gYS9ib2FyZC9hcm1hZGlsbG8vZmxhc2guYworKysgYi9ib2FyZC9hcm1hZGlsbG8vZmxhc2guYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJaW50IGksIHJjOwogCiAJd3AgPSAoYWRkciAmIH4xKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0JcHJpbnRmICgiV3JpdGluZyAlZCBzaG9ydCBkYXRhIHRvIDB4JXAgZnJvbSAweCVwLlxuICIsIGNudCwgd3AsIHNyYyk7CisJcHJpbnRmICgiV3JpdGluZyAlbHUgc2hvcnQgZGF0YSB0byAweCVseCBmcm9tIDB4JXAuXG4gIiwgY250LCB3cCwgc3JjKTsKIAogCS8qCiAJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjBlay9hdDkxc2FtOTI2MGVrLmMgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MGVrL2F0OTFzYW05MjYwZWsuYwppbmRleCA4MzZhMGM0Li4wNmQ4NTEyIDEwMDY0NAotLS0gYS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MGVrL2F0OTFzYW05MjYwZWsuYworKysgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MGVrL2F0OTFzYW05MjYwZWsuYwpAQCAtMTg4LDggKzE4OCwxNyBAQAogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkvKiBFUlgyICovCiAJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNiwgMCk7CS8qIEVSWDMgKi8KIAlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVJYQ0sgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOTI2MEVLKQorCS8qCisJICogdXNlIFBBMTAsIFBBMTEgZm9yIEVUWDIsIEVUWDMuCisJICogUEEyMyBhbmQgUEEyNCBhcmUgZm9yIFRXSSBFRVBST00KKwkgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAwKTsJLyogRVRYMiAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOwkvKiBFVFgzICovCisjZWxzZQogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkvKiBFVFgyICovCiAJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMCk7CS8qIEVUWDMgKi8KKyNlbmRpZgogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjIsIDApOwkvKiBFVFhFUiAqLwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2NvYnJhNTI3Mi9taWkuYyBiL2JvYXJkL2NvYnJhNTI3Mi9taWkuYwppbmRleCBkMGE0YTM5Li5iMzBiYTgwIDEwMDY0NAotLS0gYS9ib2FyZC9jb2JyYTUyNzIvbWlpLmMKKysrIGIvYm9hcmQvY29icmE1MjcyL21paS5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIH0KICNlbmRpZgkJCQkvKiBDRkdfRElTQ09WRVJfUEhZICovCiAKLWludCBtaWlfaW5pdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJfX21paV9pbml0IikpKTsKK3ZvaWQgbWlpX2luaXQodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygiX19taWlfaW5pdCIpKSk7CiAKIHZvaWQgX19taWlfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvZGVsdGEvbmFuZC5jIGIvYm9hcmQvZGVsdGEvbmFuZC5jCmluZGV4IGE2MzVhNjUuLjUwMjQwNTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RlbHRhL25hbmQuYworKysgYi9ib2FyZC9kZWx0YS9uYW5kLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYoZ2V0X2RlbHRhKHN0YXJ0KSA+IHRpbWVvdXQpIHsKLQkJCURGQ19ERUJVRzEoImRmY193YWl0X2V2ZW50OiBUSU1FT1VUIHdhaXRpbmcgZm9yIGV2ZW50OiAweCV4LlxuIiwgZXZlbnQpOworCQkJREZDX0RFQlVHMSgiZGZjX3dhaXRfZXZlbnQ6IFRJTUVPVVQgd2FpdGluZyBmb3IgZXZlbnQ6IDB4JWx4LlxuIiwgZXZlbnQpOwogCQkJcmV0dXJuIDB4ZmYwMDAwMDA7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL201MjM1ZXZiL201MjM1ZXZiLmMgYi9ib2FyZC9mcmVlc2NhbGUvbTUyMzVldmIvbTUyMzVldmIuYwppbmRleCBjMmM4ZmU4Li5iZDhhNGU1IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbTUyMzVldmIvbTUyMzVldmIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbTUyMzVldmIvbTUyMzVldmIuYwpAQCAtNzUsOSArNzUsMTEgQEAKIAkJc2RyYW0tPmRhY3IwID0KIAkJICAgIFNEUkFNQ19EQVJDbl9CQShDRkdfU0RSQU1fQkFTRSkgfCBTRFJBTUNfREFSQ25fQ0FTTF9DMSB8CiAJCSAgICBTRFJBTUNfREFSQ25fQ0JNX0NNRDIwIHwgU0RSQU1DX0RBUkNuX1BTXzMyOworCQlhc20oIm5vcCIpOwogCiAJCS8qIEluaXRpYWxpemUgRE1SMCAqLwogCQlzZHJhbS0+ZG1yMCA9ICgoZHJhbXNpemUgLSAxKSAmIDB4RkZGQzAwMDApIHwgU0RSQU1DX0RNUm5fVjsKKwkJYXNtKCJub3AiKTsKIAogCQkvKiBTZXQgSVAgKGJpdCAzKSBpbiBEQUNSICovCiAJCXNkcmFtLT5kYWNyMCB8PSBTRFJBTUNfREFSQ25fSVA7CkBAIC0xMDAsNiArMTAyLDcgQEAKIAogCQkvKiBGaW5pc2ggdGhlIGNvbmZpZ3VyYXRpb24gYnkgaXNzdWluZyB0aGUgTVJTLiAqLwogCQlzZHJhbS0+ZGFjcjAgfD0gU0RSQU1DX0RBUkNuX0lNUlM7CisJCWFzbSgibm9wIik7CiAKIAkJLyogV3JpdGUgdG8gdGhlIFNEUkFNIE1vZGUgUmVnaXN0ZXIgKi8KIAkJKih1MzIgKikgKENGR19TRFJBTV9CQVNFICsgMHg0MDApID0gMHhBNUE1OTY5NjsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tNTI3NWV2Yi9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS9tNTI3NWV2Yi9NYWtlZmlsZQppbmRleCBlZjBiMTllLi5mMzM3YTc1IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbTUyNzVldmIvTWFrZWZpbGUKKysrIGIvYm9hcmQvZnJlZXNjYWxlL201Mjc1ZXZiL01ha2VmaWxlCkBAIC0zMSw3ICszMSw3IEBACiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKIFNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM3NDQ4aHBjMi90c2kxMDhfaW5pdC5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzc0NDhocGMyL3RzaTEwOF9pbml0LmMKaW5kZXggZWZhOTUyYy4uYWQ4MDY5NCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzc0NDhocGMyL3RzaTEwOF9pbml0LmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzc0NDhocGMyL3RzaTEwOF9pbml0LmMKQEAgLTE2NSw4ICsxNjUsOCBAQAogCQlwcmludGYgKCJJbnZhbGlkIEREUjIgY2xvY2sgc2V0dGluZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJpbnRmICgiQlVTOiAlZCBNSHpcbiIsIGdldF9ib2FyZF9idXNfY2xrKCkgLyAxMDAwMDAwKTsKLQlwcmludGYgKCJNRU06ICVkIE1IelxuIiwgZ2QtPm1lbV9jbGsgLyAxMDAwMDAwKTsKKwlwcmludGYgKCJCVVM6ICVsdSBNSHpcbiIsIGdldF9ib2FyZF9idXNfY2xrKCkgLyAxMDAwMDAwKTsKKwlwcmludGYgKCJNRU06ICVsdSBNSHpcbiIsIGdkLT5tZW1fY2xrIC8gMTAwMDAwMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyMiw4ICs2MjIsOCBAQAogI2lmZGVmIENGR19MMgogCWwyY2FjaGVfZW5hYmxlICgpOwogI2VuZGlmCi0JcHJpbnRmICgiQlVTOiAgICVkIE1IelxuIiwgZ2QtPmJ1c19jbGsgLyAxMDAwMDAwKTsKLQlwcmludGYgKCJNRU06ICAgJWQgTUh6XG4iLCBnZC0+bWVtX2NsayAvIDEwMDAwMDApOworCXByaW50ZiAoIkJVUzogICAlbHUgTUh6XG4iLCBnZC0+YnVzX2NsayAvIDEwMDAwMDApOworCXByaW50ZiAoIk1FTTogICAlbHUgTUh6XG4iLCBnZC0+bWVtX2NsayAvIDEwMDAwMDApOwogCiAJLyoKIAkgKiBBbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBwcmludCB0aGUgY2FjaGUgZGV0YWlscyBpcyBhdmFpYmxhYmxlCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yY3AvZmxhc2guYyBiL2JvYXJkL2ludGVncmF0b3JjcC9mbGFzaC5jCmluZGV4IGI2NTNjMDUuLjU5OTYxY2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ludGVncmF0b3JjcC9mbGFzaC5jCisrKyBiL2JvYXJkL2ludGVncmF0b3JjcC9mbGFzaC5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkJCQkJCSphZGRyID0gKEZQVykgMHgwMEQwMDBEMDsKIAkJCQkJfSBlbHNlIHsKICNpZmRlZiBERUJVRwotCQkJCQkJcHJpbnRmICgiVGltZW91dCwweCUwOHhcbiIsIHN0YXR1cyk7CisJCQkJCQlwcmludGYgKCJUaW1lb3V0LDB4JTA4bHhcbiIsIHN0YXR1cyk7CiAjZWxzZQogCQkJCQkJcHJpbnRmKCJUaW1lb3V0XG4iKTsKICNlbmRpZgpAQCAtNTE1LDcgKzUxNSw3IEBACiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgewotCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICgleClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOworCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICglbHgpXG4iLCAodWxvbmcpIGFkZHIsICphZGRyKTsKIAkJcmV0dXJuICgyKTsKIAl9CiAKQEAgLTU0Miw3ICs1NDIsNyBAQAogI2lmZGVmIERFQlVHCiAJCQkqYWRkciA9IChGUFcpIDB4MDA3MDAwNzA7CiAJCQlzdGF0dXMgPSAqYWRkcjsKLQkJCXByaW50ZigiIyMgc3RhdHVzPTB4JTA4eCwgYWRkcj0weCUwOHhcbiIsIHN0YXR1cywgYWRkcik7CisJCQlwcmludGYoIiMjIHN0YXR1cz0weCUwOGx4LCBhZGRyPTB4JXBcbiIsIHN0YXR1cywgYWRkcik7CiAjZW5kaWYKIAkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsgLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNtZCAqLwogCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOyAvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXAydXNiL2ZsYXNoLmMgYi9ib2FyZC9tcDJ1c2IvZmxhc2guYwppbmRleCA4OWNlZDE2Li5jMTlkNDQ1IDEwMDY0NAotLS0gYS9ib2FyZC9tcDJ1c2IvZmxhc2guYworKysgYi9ib2FyZC9tcDJ1c2IvZmxhc2guYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgewotCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICglbHgpXG4iLCAodWxvbmcpIGFkZHIsICphZGRyKTsKKwkJcHJpbnRmICgibm90IGVyYXNlZCBhdCAlMDhseCAoJWx4KVxuIiwgKHVsb25nKSBhZGRyLCAodWxvbmcpICphZGRyKTsKIAkJcmV0dXJuICgyKTsKIAl9CiAJLyoKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YWwvaGN1NS9zZHJhbS5jIGIvYm9hcmQvbmV0c3RhbC9oY3U1L3NkcmFtLmMKaW5kZXggODBlODRhZS4uNjZhOTU4YyAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0c3RhbC9oY3U1L3NkcmFtLmMKKysrIGIvYm9hcmQvbmV0c3RhbC9oY3U1L3NkcmFtLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAl9CiAKIAlnZXRfc3lzX2luZm8oJmJvYXJkX2NmZyk7Ci0JcHJpbnRmKCIsICVkIE1IeiIsIChib2FyZF9jZmcuZnJlcVBMQiAqIDIpIC8gMTAwMDAwMCk7CisJcHJpbnRmKCIsICVsdSBNSHoiLCAoYm9hcmRfY2ZnLmZyZXFQTEIgKiAyKSAvIDEwMDAwMDApOwogCiAJbWZzZHJhbShERFIwXzAzLCB2YWwpOwogCXZhbCA9IEREUjBfMDNfQ0FTTEFUX0RFQ09ERSh2YWwpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2FuZGJ1cnN0L21ldHJvYm94L21ldHJvYm94LmMgYi9ib2FyZC9zYW5kYnVyc3QvbWV0cm9ib3gvbWV0cm9ib3guYwppbmRleCA2M2M5MWRjLi5jMzg4NTBkIDEwMDY0NAotLS0gYS9ib2FyZC9zYW5kYnVyc3QvbWV0cm9ib3gvbWV0cm9ib3guYworKysgYi9ib2FyZC9zYW5kYnVyc3QvbWV0cm9ib3gvbWV0cm9ib3guYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJfQogCiAJcHJpbnRmICgiT3B0b0ZQR0EgSUQ6XHQweCUwMlhcdFJldjogIDB4JTAyWFxuIiwgb3B0b19pZCwgb3B0b19yZXYpOwotCXByaW50ZiAoIkJvYXJkIFJldjpcdDB4JTAyWFx0SUQ6ICAlc1xuIiwgYnJkX3JldiwgKGNoYXIgKilib2FyZF9pZF9hc1ticmRfaWRdKTsKKwlwcmludGYgKCJCb2FyZCBSZXY6XHQweCUwMlhcdElEOiAgJXNcbiIsIGJyZF9yZXYsIGJvYXJkX2lkX2FzW2JyZF9pZF0ubmFtZSk7CiAKIAkvKiBGaXggdGhlIGFjayBpbiB0aGUgYm1lIDMyICovCiAJdWRlbGF5KDUwMDApOwpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL2ZsYXNoLmMgYi9ib2FyZC92ZXJzYXRpbGUvZmxhc2guYwppbmRleCBjYTc3YzhhLi5iYmU1ZGY3IDEwMDY0NAotLS0gYS9ib2FyZC92ZXJzYXRpbGUvZmxhc2guYworKysgYi9ib2FyZC92ZXJzYXRpbGUvZmxhc2guYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgewotCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICgleClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOworCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICglbHgpXG4iLCAodWxvbmcpIGFkZHIsICh1bG9uZykgKmFkZHIpOwogCQlyZXR1cm4gKDIpOwogCX0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvenlsb25pdGUvbmFuZC5jIGIvYm9hcmQvenlsb25pdGUvbmFuZC5jCmluZGV4IGFhMzkzMmEuLmNhMTY1NzggMTAwNjQ0Ci0tLSBhL2JvYXJkL3p5bG9uaXRlL25hbmQuYworKysgYi9ib2FyZC96eWxvbml0ZS9uYW5kLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYoZ2V0X2RlbHRhKHN0YXJ0KSA+IHRpbWVvdXQpIHsKLQkJCURGQ19ERUJVRzEoImRmY193YWl0X2V2ZW50OiBUSU1FT1VUIHdhaXRpbmcgZm9yIGV2ZW50OiAweCV4LlxuIiwgZXZlbnQpOworCQkJREZDX0RFQlVHMSgiZGZjX3dhaXRfZXZlbnQ6IFRJTUVPVVQgd2FpdGluZyBmb3IgZXZlbnQ6IDB4JWx4LlxuIiwgZXZlbnQpOwogCQkJcmV0dXJuIDB4ZmYwMDAwMDA7CiAJCX0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9udmVkaXQuYyBiL2NvbW1vbi9jbWRfbnZlZGl0LmMKaW5kZXggODVhMGY5NC4uNzA4OTcwNiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9udmVkaXQuYworKysgYi9jb21tb24vY21kX252ZWRpdC5jCkBAIC05OSw3ICs5OSw4IEBACiAJCQl9CiAJCX0KIAotCQlwcmludGYoIlxuRW52aXJvbm1lbnQgc2l6ZTogJWQvJWQgYnl0ZXNcbiIsIGksIEVOVl9TSVpFKTsKKwkJcHJpbnRmKCJcbkVudmlyb25tZW50IHNpemU6ICVkLyVsZCBieXRlc1xuIiwKKwkJCWksICh1bG9uZylFTlZfU0laRSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9vbmVuYW5kLmMgYi9jb21tb24vY21kX29uZW5hbmQuYwppbmRleCBhZmYxMWQxLi5jZTk5YTM4IDEwMDY0NAotLS0gYS9jb21tb24vY21kX29uZW5hbmQuYworKysgYi9jb21tb24vY21kX29uZW5hbmQuYwpAQCAtNzAsMTQgKzcwLDE0IEBACiAJCQlpZiAoIWVuZCB8fCBlbmQgPCAwKQogCQkJCWVuZCA9IHN0YXJ0OwogCi0JCQlwcmludGYoIkVyYXNlIGJsb2NrIGZyb20gJWQgdG8gJWRcbiIsIHN0YXJ0LCBlbmQpOworCQkJcHJpbnRmKCJFcmFzZSBibG9jayBmcm9tICVsdSB0byAlbHVcbiIsIHN0YXJ0LCBlbmQpOwogCiAJCQlmb3IgKGJsb2NrID0gc3RhcnQ7IGJsb2NrIDw9IGVuZDsgYmxvY2srKykgewogCQkJCWluc3RyLmFkZHIgPSBibG9jayA8PCBvbmVuYW5kX2NoaXAuZXJhc2Vfc2hpZnQ7CiAJCQkJaW5zdHIubGVuID0gMSA8PCBvbmVuYW5kX2NoaXAuZXJhc2Vfc2hpZnQ7CiAJCQkJcmV0ID0gb25lbmFuZF9lcmFzZSgmb25lbmFuZF9tdGQsICZpbnN0cik7CiAJCQkJaWYgKHJldCkgewotCQkJCQlwcmludGYoImVyYXNlIGZhaWxlZCAlZFxuIiwgYmxvY2spOworCQkJCQlwcmludGYoImVyYXNlIGZhaWxlZCAlbHVcbiIsIGJsb2NrKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9vbmVuYW5kLmMgYi9jb21tb24vZW52X29uZW5hbmQuYwppbmRleCBhYzhhOGMxLi5hZDViMWQ3IDEwMDY0NAotLS0gYS9jb21tb24vZW52X29uZW5hbmQuYworKysgYi9jb21tb24vZW52X29uZW5hbmQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJaW5zdHIuYWRkciA9IGVudl9hZGRyOwogCWluc3RyLmFkZHIgLT0gKHVuc2lnbmVkIGxvbmcpb25lbmFuZF9jaGlwLmJhc2U7CiAJaWYgKG9uZW5hbmRfZXJhc2UoJm9uZW5hbmRfbXRkLCAmaW5zdHIpKSB7Ci0JCXByaW50ZigiT25lTkFORDogZXJhc2UgZmFpbGVkIGF0IDB4JTA4eFxuIiwgZW52X2FkZHIpOworCQlwcmludGYoIk9uZU5BTkQ6IGVyYXNlIGZhaWxlZCBhdCAweCUwOGx4XG4iLCBlbnZfYWRkcik7CiAJCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2ltYWdlLmMgYi9jb21tb24vaW1hZ2UuYwppbmRleCBkZGQ5ZThiLi41MzVjMzAyIDEwMDY0NAotLS0gYS9jb21tb24vaW1hZ2UuYworKysgYi9jb21tb24vaW1hZ2UuYwpAQCAtODI3LDEzICs4MjcsMTMgQEAKIAkJCWNmZ19ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X25vZGUgKGZpdF9oZHIsIGZpdF91bmFtZV9jb25maWcpOwogCQkJaWYgKGNmZ19ub2Zmc2V0IDwgMCkgewogCQkJCWRlYnVnICgiKiAgcmFtZGlzazogbm8gc3VjaCBjb25maWdcbiIpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOwogCQkJfQogCiAJCQlyZF9ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X3JhbWRpc2tfbm9kZSAoZml0X2hkciwgY2ZnX25vZmZzZXQpOwogCQkJaWYgKHJkX25vZmZzZXQgPCAwKSB7CiAJCQkJZGVidWcgKCIqICByYW1kaXNrOiBubyByYW1kaXNrIGluIGNvbmZpZ1xuIik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KICNlbmRpZgpAQCAtODcyLDcgKzg3Miw3IEBACiAJCQlpZiAoIWZpdF9jaGVja19mb3JtYXQgKGZpdF9oZHIpKSB7CiAJCQkJcHV0cyAoIkJhZCBGSVQgcmFtZGlzayBpbWFnZSBmb3JtYXQhXG4iKTsKIAkJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MgKC0xMjApOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOwogCQkJfQogCQkJc2hvd19ib290X3Byb2dyZXNzICgxMjEpOwogCkBAIC04ODcsNyArODg3LDcgQEAKIAkJCQlpZiAoY2ZnX25vZmZzZXQgPCAwKSB7CiAJCQkJCXB1dHMgKCJDb3VsZCBub3QgZmluZCBjb25maWd1cmF0aW9uIG5vZGVcbiIpOwogCQkJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MgKC0xMjIpOwotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIDE7CiAJCQkJfQogCQkJCWZpdF91bmFtZV9jb25maWcgPSBmZHRfZ2V0X25hbWUgKGZpdF9oZHIsIGNmZ19ub2Zmc2V0LCBOVUxMKTsKIAkJCQlwcmludGYgKCIgICBVc2luZyAnJXMnIGNvbmZpZ3VyYXRpb25cbiIsIGZpdF91bmFtZV9jb25maWcpOwpAQCAtOTAyLDIwICs5MDIsMjAgQEAKIAkJCWlmIChyZF9ub2Zmc2V0IDwgMCkgewogCQkJCXB1dHMgKCJDb3VsZCBub3QgZmluZCBzdWJpbWFnZSBub2RlXG4iKTsKIAkJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MgKC0xMjQpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOwogCQkJfQogCiAJCQlwcmludGYgKCIgICBUcnlpbmcgJyVzJyByYW1kaXNrIHN1YmltYWdlXG4iLCBmaXRfdW5hbWVfcmFtZGlzayk7CiAKIAkJCXNob3dfYm9vdF9wcm9ncmVzcyAoMTI1KTsKIAkJCWlmICghZml0X2NoZWNrX3JhbWRpc2sgKGZpdF9oZHIsIHJkX25vZmZzZXQsIGFyY2gsIGltYWdlcy0+dmVyaWZ5KSkKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAogCQkJLyogZ2V0IHJhbWRpc2sgaW1hZ2UgZGF0YSBhZGRyZXNzIGFuZCBsZW5ndGggKi8KIAkJCWlmIChmaXRfaW1hZ2VfZ2V0X2RhdGEgKGZpdF9oZHIsIHJkX25vZmZzZXQsICZkYXRhLCAmc2l6ZSkpIHsKIAkJCQlwdXRzICgiQ291bGQgbm90IGZpbmQgcmFtZGlzayBzdWJpbWFnZSBkYXRhIVxuIik7CiAJCQkJc2hvd19ib290X3Byb2dyZXNzICgtMTI3KTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCXNob3dfYm9vdF9wcm9ncmVzcyAoMTI4KTsKIApAQCAtOTI1LDcgKzkyNSw3IEBACiAJCQlpZiAoZml0X2ltYWdlX2dldF9sb2FkIChmaXRfaGRyLCByZF9ub2Zmc2V0LCAmcmRfbG9hZCkpIHsKIAkJCQlwdXRzICgiQ2FuJ3QgZ2V0IHJhbWRpc2sgc3ViaW1hZ2UgbG9hZCBhZGRyZXNzIVxuIik7CiAJCQkJc2hvd19ib290X3Byb2dyZXNzICgtMTI5KTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCXNob3dfYm9vdF9wcm9ncmVzcyAoMTI5KTsKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9jcHUuYyBiL2NwdS9hcm05MjZlanMvY3B1LmMKaW5kZXggNzIyNzMyZS4uNTZjNjI4OSAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy9jcHUuYworKysgYi9jcHUvYXJtOTI2ZWpzL2NwdS5jCkBAIC0xMzQsMjUgKzEzNCw1MiBAQAogCXJldHVybiAoMCk7CiB9CiAKLXZvaWQgaWNhY2hlX2VuYWJsZSAodm9pZCkKKy8qIGNhY2hlX2JpdCBtdXN0IGJlIGVpdGhlciBDMV9JQyBvciBDMV9EQyAqLworc3RhdGljIHZvaWQgY2FjaGVfZW5hYmxlKHVpbnQzMl90IGNhY2hlX2JpdCkKIHsKLQl1bG9uZyByZWc7CisJdWludDMyX3QgcmVnOwogCi0JcmVnID0gcmVhZF9wMTVfYzEgKCk7CQkvKiBnZXQgY29udHJvbCByZWcuICovCi0JY3BfZGVsYXkgKCk7Ci0Jd3JpdGVfcDE1X2MxIChyZWcgfCBDMV9JQyk7CisJcmVnID0gcmVhZF9wMTVfYzEoKTsJLyogZ2V0IGNvbnRyb2wgcmVnLiAqLworCWNwX2RlbGF5KCk7CisJd3JpdGVfcDE1X2MxKHJlZyB8IGNhY2hlX2JpdCk7CiB9CiAKLXZvaWQgaWNhY2hlX2Rpc2FibGUgKHZvaWQpCisvKiBjYWNoZV9iaXQgbXVzdCBiZSBlaXRoZXIgQzFfSUMgb3IgQzFfREMgKi8KK3N0YXRpYyB2b2lkIGNhY2hlX2Rpc2FibGUodWludDMyX3QgY2FjaGVfYml0KQogewotCXVsb25nIHJlZzsKKwl1aW50MzJfdCByZWc7CiAKLQlyZWcgPSByZWFkX3AxNV9jMSAoKTsKLQljcF9kZWxheSAoKTsKLQl3cml0ZV9wMTVfYzEgKHJlZyAmIH5DMV9JQyk7CisJcmVnID0gcmVhZF9wMTVfYzEoKTsKKwljcF9kZWxheSgpOworCXdyaXRlX3AxNV9jMShyZWcgJiB+Y2FjaGVfYml0KTsKIH0KIAotaW50IGljYWNoZV9zdGF0dXMgKHZvaWQpCit2b2lkIGljYWNoZV9lbmFibGUodm9pZCkKIHsKLQlyZXR1cm4gKHJlYWRfcDE1X2MxICgpICYgQzFfSUMpICE9IDA7CisJY2FjaGVfZW5hYmxlKEMxX0lDKTsKK30KKwordm9pZCBpY2FjaGVfZGlzYWJsZSh2b2lkKQoreworCWNhY2hlX2Rpc2FibGUoQzFfSUMpOworfQorCitpbnQgaWNhY2hlX3N0YXR1cyh2b2lkKQoreworCXJldHVybiAocmVhZF9wMTVfYzEoKSAmIEMxX0lDKSAhPSAwOworfQorCit2b2lkIGRjYWNoZV9lbmFibGUodm9pZCkKK3sKKwljYWNoZV9lbmFibGUoQzFfREMpOworfQorCit2b2lkIGRjYWNoZV9kaXNhYmxlKHZvaWQpCit7CisJY2FjaGVfZGlzYWJsZShDMV9EQyk7Cit9CisKK2ludCBkY2FjaGVfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIChyZWFkX3AxNV9jMSgpICYgQzFfREMpICE9IDA7CiB9CmRpZmYgLS1naXQgYS9jcHUvbWNmNTIyN3gvY3B1X2luaXQuYyBiL2NwdS9tY2Y1MjI3eC9jcHVfaW5pdC5jCmluZGV4IDcxYjA1M2QuLmNmMjk1NTkgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MjI3eC9jcHVfaW5pdC5jCisrKyBiL2NwdS9tY2Y1MjI3eC9jcHVfaW5pdC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqLwogaW50IGNwdV9pbml0X3Iodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTUNGVE1SCisjaWZkZWYgQ09ORklHX01DRlJUQwogCXZvbGF0aWxlIHJ0Y190ICpydGMgPSAodm9sYXRpbGUgcnRjX3QgKikoQ0ZHX01DRlJUQ19CQVNFKTsKIAl2b2xhdGlsZSBydGNleF90ICpydGNleCA9ICh2b2xhdGlsZSBydGNleF90ICopJnJ0Yy0+ZXh0ZW5kZWQ7CiAJdTMyIG9zY2lsbGF0b3IgPSBDRkdfUlRDX09TQ0lMTEFUT1I7CmRpZmYgLS1naXQgYS9jcHUvbWNmNTJ4Mi9jcHVfaW5pdC5jIGIvY3B1L21jZjUyeDIvY3B1X2luaXQuYwppbmRleCAyMDdhMzdlLi4zNDRiY2VlIDEwMDY0NAotLS0gYS9jcHUvbWNmNTJ4Mi9jcHVfaW5pdC5jCisrKyBiL2NwdS9tY2Y1MngyL2NwdV9pbml0LmMKQEAgLTQxOSw4ICs0MTksNyBAQAogCSAgIGVsc2UgaXMgZG9pbmcgaXQhICovCiAKICNpZiBkZWZpbmVkKENGR19DUzBfQkFTRSkgJiBkZWZpbmVkKENGR19DUzBfU0laRSkgJiBcCi0gICAgZGVmaW5lZChDRkdfQ1MwX1dJRFRIKSAmIGRlZmluZWQoQ0ZHX0NTMF9STykgJiBcCi0JZGVmaW5lZChDRkdfQ1MwX1dTKQorICAgIGRlZmluZWQoQ0ZHX0NTMF9XSURUSCkgJiBkZWZpbmVkKENGR19DUzBfV1MpCiAKIAlNQ0ZDU01fQ1NBUjAgPSAoQ0ZHX0NTMF9CQVNFID4+IDE2KSAmIDB4RkZGRjsKIApAQCAtNDQ3LDggKzQ0Niw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ0ZHX0NTMV9CQVNFKSAmIGRlZmluZWQoQ0ZHX0NTMV9TSVpFKSAmIFwKLSAgICBkZWZpbmVkKENGR19DUzFfV0lEVEgpICYgZGVmaW5lZChDRkdfQ1MxX1JPKSAmIFwKLQlkZWZpbmVkKENGR19DUzFfV1MpCisgICAgZGVmaW5lZChDRkdfQ1MxX1dJRFRIKSAmIGRlZmluZWQoQ0ZHX0NTMV9XUykKIAogCU1DRkNTTV9DU0FSMSA9IChDRkdfQ1MxX0JBU0UgPj4gMTYpICYgMHhGRkZGOwogCkBAIC00NzYsOCArNDc0LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDRkdfQ1MyX0JBU0UpICYgZGVmaW5lZChDRkdfQ1MyX1NJWkUpICYgXAotICAgIGRlZmluZWQoQ0ZHX0NTMl9XSURUSCkgJiBkZWZpbmVkKENGR19DUzJfUk8pICYgXAotCWRlZmluZWQoQ0ZHX0NTMl9XUykKKyAgICBkZWZpbmVkKENGR19DUzJfV0lEVEgpICYgZGVmaW5lZChDRkdfQ1MyX1dTKQogCiAJTUNGQ1NNX0NTQVIyID0gKENGR19DUzJfQkFTRSA+PiAxNikgJiAweEZGRkY7CiAKQEAgLTUwNSw4ICs1MDIsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENGR19DUzNfQkFTRSkgJiBkZWZpbmVkKENGR19DUzNfU0laRSkgJiBcCi0gICAgZGVmaW5lZChDRkdfQ1MzX1dJRFRIKSAmIGRlZmluZWQoQ0ZHX0NTM19STykgJiBcCi0JZGVmaW5lZChDRkdfQ1MzX1dTKQorICAgIGRlZmluZWQoQ0ZHX0NTM19XSURUSCkgJiBkZWZpbmVkKENGR19DUzNfV1MpCiAKIAlNQ0ZDU01fQ1NBUjMgPSAoQ0ZHX0NTM19CQVNFID4+IDE2KSAmIDB4RkZGRjsKIApkaWZmIC0tZ2l0IGEvY3B1L21jZjUyeDIvc3BlZWQuYyBiL2NwdS9tY2Y1MngyL3NwZWVkLmMKaW5kZXggNWZhZmNkOC4uZjZlZGQ1YiAxMDA2NDQKLS0tIGEvY3B1L21jZjUyeDIvc3BlZWQuYworKysgYi9jcHUvbWNmNTJ4Mi9zcGVlZC5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAkvKiBTZXR1cCBQTEwgKi8KIAlwbGwtPnN5bmNyID0gMHgwMTA4MDAwMDsKLQl3aGlsZSAoIShwbGwtPnN5bnNyICYgRk1QTExfU1lOU1JfTE9DSykKKwl3aGlsZSAoIShwbGwtPnN5bnNyICYgRk1QTExfU1lOU1JfTE9DSykpCiAJCTsKIAlwbGwtPnN5bmNyID0gMHgwMTAwMDAwMDsKIAl3aGlsZSAoIShwbGwtPnN5bnNyICYgRk1QTExfU1lOU1JfTE9DSykpCmRpZmYgLS1naXQgYS9jcHUvbWNmNTQ0NXgvY29uZmlnLm1rIGIvY3B1L21jZjU0NDV4L2NvbmZpZy5tawppbmRleCA4ODQzM2YyLi42N2VmYTA3IDEwMDY0NAotLS0gYS9jcHUvbWNmNTQ0NXgvY29uZmlnLm1rCisrKyBiL2NwdS9tY2Y1NDQ1eC9jb25maWcubWsKQEAgLTI5LDMgKzI5LDkgQEAKIGVsc2UKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1tNTQwNyAtZlBJQwogZW5kaWYKKworaWZuZXEgKCwkKGZpbmRzdHJpbmcgLWxpbnV4LSwkKHNoZWxsICQoQ0MpIC0tdmVyc2lvbikpKQoraWZuZXEgKCwkKGZpbmRzdHJpbmcgR09ULCQoc2hlbGwgJChMRCkgLS1oZWxwKSkpCitQTEFURk9STV9MREZMQUdTICs9IC0tZ290PXNpbmdsZQorZW5kaWYKK2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbWNmNTQ0NXgvY3B1X2luaXQuYyBiL2NwdS9tY2Y1NDQ1eC9jcHVfaW5pdC5jCmluZGV4IDU4NTIxNmQuLmUwNzc0OGIgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1NDQ1eC9jcHVfaW5pdC5jCisrKyBiL2NwdS9tY2Y1NDQ1eC9jcHVfaW5pdC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKICAqLwogaW50IGNwdV9pbml0X3Iodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTUNGVE1SCisjaWZkZWYgQ09ORklHX01DRlJUQwogCXZvbGF0aWxlIHJ0Y190ICpydGMgPSAodm9sYXRpbGUgcnRjX3QgKikoQ0ZHX01DRlJUQ19CQVNFKTsKIAl2b2xhdGlsZSBydGNleF90ICpydGNleCA9ICh2b2xhdGlsZSBydGNleF90ICopJnJ0Yy0+ZXh0ZW5kZWQ7CiAKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1NDQ1eC9zdGFydC5TIGIvY3B1L21jZjU0NDV4L3N0YXJ0LlMKaW5kZXggMzI0MWIyNy4uODllYzdiYyAxMDA2NDQKLS0tIGEvY3B1L21jZjU0NDV4L3N0YXJ0LlMKKysrIGIvY3B1L21jZjU0NDV4L3N0YXJ0LlMKQEAgLTI1Myw3ICsyNTMsNyBAQAogLyogZXhjZXB0aW9uIGNvZGUgKi8KIAkuZ2xvYmwgX2ZhdWx0CiBfZmF1bHQ6Ci0Jam1wIF9mYXVsdAorCWJyYSBfZmF1bHQKIAkuZ2xvYmwJX2V4Y19oYW5kbGVyCiAKIF9leGNfaGFuZGxlcjoKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1NDd4Xzh4L2NvbmZpZy5tayBiL2NwdS9tY2Y1NDd4Xzh4L2NvbmZpZy5tawppbmRleCBlNWY0Mzg1Li41NjdiMjgxIDEwMDY0NAotLS0gYS9jcHUvbWNmNTQ3eF84eC9jb25maWcubWsKKysrIGIvY3B1L21jZjU0N3hfOHgvY29uZmlnLm1rCkBAIC0yOSwzICsyOSw5IEBACiBlbHNlCiBQTEFURk9STV9DUFBGTEFHUyArPSAtbTU0MDcgLWZQSUMKIGVuZGlmCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIC1saW51eC0sJChzaGVsbCAkKENDKSAtLXZlcnNpb24pKSkKK2lmbmVxICgsJChmaW5kc3RyaW5nIEdPVCwkKHNoZWxsICQoTEQpIC0taGVscCkpKQorUExBVEZPUk1fTERGTEFHUyArPSAtLWdvdD1zaW5nbGUKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21jZjU0N3hfOHgvc3RhcnQuUyBiL2NwdS9tY2Y1NDd4Xzh4L3N0YXJ0LlMKaW5kZXggOGI4NzA4ZC4uODczNTVmOSAxMDA2NDQKLS0tIGEvY3B1L21jZjU0N3hfOHgvc3RhcnQuUworKysgYi9jcHUvbWNmNTQ3eF84eC9zdGFydC5TCkBAIC0yNTksNyArMjU5LDcgQEAKIC8qIGV4Y2VwdGlvbiBjb2RlICovCiAJLmdsb2JsIF9mYXVsdAogX2ZhdWx0OgotCWptcCBfZmF1bHQKKwlicmEgX2ZhdWx0CiAJLmdsb2JsCV9leGNfaGFuZGxlcgogCiBfZXhjX2hhbmRsZXI6CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4LzR4eF9wY2llLmMgYi9jcHUvcHBjNHh4LzR4eF9wY2llLmMKaW5kZXggZDUwYTUzOC4uOTgwM2ZjYyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80eHhfcGNpZS5jCisrKyBiL2NwdS9wcGM0eHgvNHh4X3BjaWUuYwpAQCAtMjUsMTEgKzI1LDExIEBACiAjZGVmaW5lIERFQlVHCiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20tcHBjL2lvLmg+Ci0jaW5jbHVkZSA8cHBjNHh4Lmg+CiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8cHBjNHh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS1wcGMvaW8uaD4KIAogI2lmIChkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IGRlZmluZWQoQ09ORklHXzQwNUVYKSB8fAlcCiAgICAgZGVmaW5lZChDT05GSUdfNDYwRVgpIHx8IGRlZmluZWQoQ09ORklHXzQ2MEdUKSkgJiYgXApkaWZmIC0tZ2l0IGEvY3B1L3B4YS9tbWMuYyBiL2NwdS9weGEvbW1jLmMKaW5kZXggNDQ5NWE4MC4uMmM4NmEwMSAxMDA2NDQKLS0tIGEvY3B1L3B4YS9tbWMuYworKysgYi9jcHUvcHhhL21tYy5jCkBAIC01MzUsOCArNTM1LDEwIEBACiAJbW1jX2Rldi5yZW1vdmFibGUgPSAwOwogCW1tY19kZXYuYmxvY2tfcmVhZCA9IG1tY19icmVhZDsKIAotCXByaW50ZigiRGV0ZWN0ZWQ6ICV1IGJsb2NrcyBvZiAldSBieXRlcyAoJXVNQikgIiwgbW1jX2Rldi5sYmEsCi0JICAgICAgIG1tY19kZXYuYmxrc3osIG1tY19kZXYubGJhICogbW1jX2Rldi5ibGtzeiAvICgxMDI0ICogMTAyNCkpOworCXByaW50ZigiRGV0ZWN0ZWQ6ICVsdSBibG9ja3Mgb2YgJWx1IGJ5dGVzICglbHVNQikgIiwKKwkJbW1jX2Rldi5sYmEsCisJCW1tY19kZXYuYmxrc3osCisJCW1tY19kZXYubGJhICogbW1jX2Rldi5ibGtzeiAvICgxMDI0ICogMTAyNCkpOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDA2NTQzM2EuLmYwOWYxNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMzAsMTMgKzMwLDEzIEBACiAKIExJQgk9ICQob2JqKWxpYmh3bW9uLmEKIAotQ09CSlMteSArPSBhZG0xMDIxLm8KLUNPQkpTLXkgKz0gZHMxNjIxLm8KLUNPQkpTLXkgKz0gZHMxNzIyLm8KLUNPQkpTLXkgKz0gZHMxNzc1Lm8KK0NPQkpTLSQoQ09ORklHX0RUVF9BRE0xMDIxKSArPSBhZG0xMDIxLm8KK0NPQkpTLSQoQ09ORklHX0RUVF9EUzE2MjEpICs9IGRzMTYyMS5vCitDT0JKUy0kKENPTkZJR19EVFRfRFMxNzIyKSArPSBkczE3MjIubworQ09CSlMtJChDT05GSUdfRFRUX0RTMTc3NSkgKz0gZHMxNzc1Lm8KIENPQkpTLSQoQ09ORklHX0RUVF9MTTczKSArPSBsbTczLm8KLUNPQkpTLXkgKz0gbG03NS5vCi1DT0JKUy15ICs9IGxtODEubworQ09CSlMtJChDT05GSUdfRFRUX0xNNzUpICs9IGxtNzUubworQ09CSlMtJChDT05GSUdfRFRUX0xNODEpICs9IGxtODEubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCmluZGV4IDlmNjVjZmIyNy4uYjc5MWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDIxLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDIxLmMKQEAgLTMzLDExICszMyw0MCBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfRFRUX0FETTEwMjEKLQogI2luY2x1ZGUgPGkyYy5oPgogI2luY2x1ZGUgPGR0dC5oPgogCisjZGVmaW5lIERUVF9SRUFEX0xPQ19WQUxVRQkweDAwCisjZGVmaW5lIERUVF9SRUFEX1JFTV9WQUxVRQkweDAxCisjZGVmaW5lIERUVF9SRUFEX1NUQVRVUwkJMHgwMgorI2RlZmluZSBEVFRfUkVBRF9DT05GSUcJCTB4MDMKKyNkZWZpbmUgRFRUX1JFQURfQ09OVlJBVEUJMHgwNAorI2RlZmluZSBEVFRfUkVBRF9MT0NfSElHSExJTQkweDA1CisjZGVmaW5lIERUVF9SRUFEX0xPQ19MT1dMSU0JMHgwNgorI2RlZmluZSBEVFRfUkVBRF9SRU1fSElHSExJTQkweDA3CisjZGVmaW5lIERUVF9SRUFEX1JFTV9MT1dMSU0JMHgwOAorI2RlZmluZSBEVFRfUkVBRF9ERVZJRAkJMHhmZQorCisjZGVmaW5lIERUVF9XUklURV9DT05GSUcJMHgwOQorI2RlZmluZSBEVFRfV1JJVEVfQ09OVlJBVEUJMHgwYQorI2RlZmluZSBEVFRfV1JJVEVfTE9DX0hJR0hMSU0JMHgwYgorI2RlZmluZSBEVFRfV1JJVEVfTE9DX0xPV0xJTQkweDBjCisjZGVmaW5lIERUVF9XUklURV9SRU1fSElHSExJTQkweDBkCisjZGVmaW5lIERUVF9XUklURV9SRU1fTE9XTElNCTB4MGUKKyNkZWZpbmUgRFRUX1dSSVRFX09ORVNIT1QJMHgwZgorCisjZGVmaW5lIERUVF9TVEFUVVNfQlVTWQkJMHg4MAkvKiAxPUFEQyBDb252ZXJ0aW5nICovCisjZGVmaW5lIERUVF9TVEFUVVNfTEhJR0gJMHg0MAkvKiAxPUxvY2FsIEhpZ2ggVGVtcCBMaW1pdCBUcmlwcGVkICovCisjZGVmaW5lIERUVF9TVEFUVVNfTExPVwkJMHgyMAkvKiAxPUxvY2FsIExvdyBUZW1wIExpbWl0IFRyaXBwZWQgKi8KKyNkZWZpbmUgRFRUX1NUQVRVU19SSElHSAkweDEwCS8qIDE9UmVtb3RlIEhpZ2ggVGVtcCBMaW1pdCBUcmlwcGVkICovCisjZGVmaW5lIERUVF9TVEFUVVNfUkxPVwkJMHgwOAkvKiAxPVJlbW90ZSBMb3cgVGVtcCBMaW1pdCBUcmlwcGVkICovCisjZGVmaW5lIERUVF9TVEFUVVNfT1BFTgkJMHgwNAkvKiAxPVJlbW90ZSBTZW5zb3IgT3Blbi1DaXJjdWl0ICovCisKKyNkZWZpbmUgRFRUX0NPTkZJR19BTEVSVF9NQVNLRUQJMHg4MAkvKiAwPUFMRVJUIEVuYWJsZWQsIDE9QUxFUlQgTWFza2VkICovCisjZGVmaW5lIERUVF9DT05GSUdfU1RBTkRCWQkweDQwCS8qIDA9UnVuLCAxPVN0YW5kYnkgKi8KKworI2RlZmluZSBEVFRfQURNMTAyMV9ERVZJRAkweDQxCisKIHR5cGVkZWYKIAlzdHJ1Y3QgewogCQl1aW50IGkyY19hZGRyOjc7CS8qIDdiaXQgaTJjIGNoaXAgYWRkcmVzcyAqLwpAQCAtMTcwLDUgKzE5OSwzIEBACiAKIAlyZXR1cm4gKGludCkgdmFsOwogfSAvKiBkdHRfZ2V0X3RlbXAoKSAqLwotCi0jZW5kaWYgLyogQ09ORklHX0RUVF9BRE0xMDIxICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwppbmRleCA0OTQ4MTgxLi43NDlhYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogCi0jaWZkZWYgQ09ORklHX0RUVF9EUzE2MjEKICNpZiAhZGVmaW5lZChDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFKSB8fCBcCiAJKENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDwgMSkKICMgZXJyb3IgIkNGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUgbXVzdCBiZSBkZWZpbmVkIGFuZCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIHRvIHVzZSBDT05GSUdfRFRUX0RTMTYyMSIKQEAgLTM5LDYgKzM4LDE0IEBACiAgKiBEZXZpY2UgY29kZQogICovCiAjZGVmaW5lIERUVF9JMkNfREVWX0NPREUgMHg0OAkJCS8qIERhbGxhcyBTZW1pJ3MgRFMxNjIxICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4QUEKKyNkZWZpbmUgRFRUX1JFQURfQ09VTlRFUgkweEE4CisjZGVmaW5lIERUVF9SRUFEX1NMT1BFCQkweEE5CisjZGVmaW5lIERUVF9XUklURV9TVEFSVF9DT05WCTB4RUUKKyNkZWZpbmUgRFRUX1dSSVRFX1NUT1BfQ09OVgkweDIyCisjZGVmaW5lIERUVF9URU1QX0hJR0gJCTB4QTEKKyNkZWZpbmUgRFRUX1RFTVBfTE9XCQkweEEyCisjZGVmaW5lIERUVF9DT05GSUcJCTB4QUMKIAogaW50IGR0dF9yZWFkKGludCBzZW5zb3IsIGludCByZWcpCiB7CkBAIC0xODUsNiArMTkyLDMgQEAKIAogICAgIHJldHVybiAoZHR0X3JlYWQoc2Vuc29yLCBEVFRfUkVBRF9URU1QKSAvIDI1Nik7CiB9IC8qIGR0dF9nZXRfdGVtcCgpICovCi0KLQotI2VuZGlmIC8qIENPTkZJR19EVFRfRFMxNjIxICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RzMTcyMi5jIGIvZHJpdmVycy9od21vbi9kczE3MjIuYwppbmRleCBjMTllZTAxLi43ZTJmMWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RzMTcyMi5jCisrKyBiL2RyaXZlcnMvaHdtb24vZHMxNzIyLmMKQEAgLTEsOCArMSw1IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KLQotI2lmZGVmIENPTkZJR19EUzE3MjIKLQogI2luY2x1ZGUgPHNzaS5oPgogCiBzdGF0aWMgdm9pZCBkczE3MjJfc2VsZWN0KGludCBkZXYpCkBAIC0xMzgsNSArMTM1LDMgQEAKIAlwcmludGYoIiVkLiVkIGRlZyBDXG5cbiIsIChjaGFyKSh0ZW1wID4+IDgpLCB0ZW1wICYgMHhmZik7CiAJcmV0dXJuIDA7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kczE3NzUuYyBiL2RyaXZlcnMvaHdtb24vZHMxNzc1LmMKaW5kZXggMGZiYjBiNC4uNmE0ZDhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kczE3NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2RzMTc3NS5jCkBAIC0yMSwxMSArMjEsMTQgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogCi0jaWZkZWYgQ09ORklHX0RUVF9EUzE3NzUKICNpbmNsdWRlIDxpMmMuaD4KICNpbmNsdWRlIDxkdHQuaD4KIAogI2RlZmluZSBEVFRfSTJDX0RFVl9DT0RFCUNGR19JMkNfRFRUX0FERFIgLyogRGFsbGFzIFNlbWkncyBEUzE3NzUgZGV2aWNlIGNvZGUgKi8KKyNkZWZpbmUgRFRUX1JFQURfVEVNUAkJMHgwCisjZGVmaW5lIERUVF9DT05GSUcJCTB4MQorI2RlZmluZSBEVFRfVEVNUF9IWVNUCQkweDIKKyNkZWZpbmUgRFRUX1RFTVBfT1MJCTB4MwogCiBpbnQgZHR0X3JlYWQoaW50IHNlbnNvciwgaW50IHJlZykKIHsKQEAgLTE1MSw2ICsxNTQsMyBAQAogewogCXJldHVybiAoZHR0X3JlYWQoc2Vuc29yLCBEVFRfUkVBRF9URU1QKSAvIDI1Nik7CiB9Ci0KLQotI2VuZGlmIC8qIENPTkZJR19EVFRfRFMxNzc1ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzMuYyBiL2RyaXZlcnMvaHdtb24vbG03My5jCmluZGV4IDk4ZThiZDIuLmRkMjQ2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03My5jCkBAIC0zOCw2ICszOCwxMiBAQAogICogRGV2aWNlIGNvZGUKICAqLwogI2RlZmluZSBEVFRfSTJDX0RFVl9DT0RFIDB4NDgJLyogTmF0aW9uYWwgU2VtaSdzIExNNzMgZGV2aWNlICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAorI2RlZmluZSBEVFRfQ09ORklHCQkweDEKKyNkZWZpbmUgRFRUX1RFTVBfSElHSAkJMHgyCisjZGVmaW5lIERUVF9URU1QX0xPVwkJMHgzCisjZGVmaW5lIERUVF9DT05UUk9MCQkweDQKKyNkZWZpbmUgRFRUX0lECQkJMHg3CiAKIGludCBkdHRfcmVhZChpbnQgY29uc3Qgc2Vuc29yLCBpbnQgY29uc3QgcmVnKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCBjMzQ4NTE3Li44MDUxY2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfRFRUX0xNNzUKICNpZiAhZGVmaW5lZChDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFKSB8fCBcCiAJKENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDwgMSkKICMgZXJyb3IgIkNGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUgbXVzdCBiZSBkZWZpbmVkIGFuZCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAgMSB0byB1c2UgQ09ORklHX0RUVF9MTTc1IgpAQCAtMzYsMTEgKzM1LDE0IEBACiAjaW5jbHVkZSA8aTJjLmg+CiAjaW5jbHVkZSA8ZHR0Lmg+CiAKLQogLyoKICAqIERldmljZSBjb2RlCiAgKi8KICNkZWZpbmUgRFRUX0kyQ19ERVZfQ09ERSAweDQ4CQkJLyogT04gU2VtaSdzIExNNzUgZGV2aWNlICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAorI2RlZmluZSBEVFRfQ09ORklHCQkweDEKKyNkZWZpbmUgRFRUX1RFTVBfSFlTVAkJMHgyCisjZGVmaW5lIERUVF9URU1QX1NFVAkJMHgzCiAKIGludCBkdHRfcmVhZChpbnQgc2Vuc29yLCBpbnQgcmVnKQogewpAQCAtMjAwLDUgKzIwMiwzIEBACiAgICAgfQogICAgIHJldHVybiAoaW50KSgoaW50MTZfdCkgcmV0IC8gMjU2KTsKIH0gLyogZHR0X2dldF90ZW1wKCkgKi8KLQotI2VuZGlmIC8qIENPTkZJR19EVFRfTE03NSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgxLmMgYi9kcml2ZXJzL2h3bW9uL2xtODEuYwppbmRleCAwM2JjNTNkLi45MzQ5ZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODEuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODEuYwpAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfRFRUX0xNODEKICNpZiAhZGVmaW5lZChDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFKSB8fCBcCiAJKENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDwgMSkKICMgZXJyb3IgIkNGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUgbXVzdCBiZSBkZWZpbmVkIGFuZCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAgMSB0byB1c2UgQ09ORklHX0RUVF9MTTgxIgpAQCAtNDUsNiArNDQsMTEgQEAKICAqIERldmljZSBjb2RlCiAgKi8KICNkZWZpbmUgRFRUX0kyQ19ERVZfQ09ERSAweDJjCQkJLyogT04gU2VtaSdzIExNODEgZGV2aWNlICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MjcKKyNkZWZpbmUgRFRUX0NPTkZJR19URU1QCQkweDRiCisjZGVmaW5lIERUVF9URU1QX01BWAkJMHgzOQorI2RlZmluZSBEVFRfVEVNUF9IWVNUCQkweDNhCisjZGVmaW5lIERUVF9DT05GSUcJCTB4NDAKIAogaW50IGR0dF9yZWFkKGludCBzZW5zb3IsIGludCByZWcpCiB7CkBAIC0xNDQsNSArMTQ4LDMgQEAKIAogCXJldHVybiAoVEVNUF9GUk9NX1JFRygodmFsIDw8IDEpICsgKCh0bXBjbmYgJiAweDgwKSA+PiA3KSkpIC8gMTA7CiB9IC8qIGR0dF9nZXRfdGVtcCgpICovCi0KLSNlbmRpZiAvKiBDT05GSUdfRFRUX0xNODEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RhdGFmbGFzaC5jIGIvZHJpdmVycy9tdGQvZGF0YWZsYXNoLmMKaW5kZXggODI0N2FhMC4uMGFkNDhjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGF0YWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvZGF0YWZsYXNoLmMKQEAgLTU0LDYgKzU0LDE3IEBACiAJCQkJJmRhdGFmbGFzaF9pbmZvW2ldLkRlc2MpOwogCiAJCXN3aXRjaCAoZGZjb2RlKSB7CisJCWNhc2UgQVQ0NURCMDIxOgorCQkJZGF0YWZsYXNoX2luZm9baV0uRGV2aWNlLnBhZ2VzX251bWJlciA9IDEwMjQ7CisJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UucGFnZXNfc2l6ZSA9IDI2MzsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5wYWdlX29mZnNldCA9IDk7CisJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UuYnl0ZV9tYXNrID0gMHgzMDA7CisJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UuY3MgPSBjc1tpXS5jczsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLkRlc2MuRGF0YUZsYXNoX3N0YXRlID0gSURMRTsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLmxvZ2ljYWxfYWRkcmVzcyA9IGNzW2ldLmFkZHI7CisJCQlkYXRhZmxhc2hfaW5mb1tpXS5pZCA9IGRmY29kZTsKKwkJCWZvdW5kW2ldICs9IGRmY29kZTs7CisJCQlicmVhazsKIAkJY2FzZSBBVDQ1REIxNjE6CiAJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UucGFnZXNfbnVtYmVyID0gNDA5NjsKIAkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5wYWdlc19zaXplID0gNTI4OwpAQCAtMTYyLDcgKzE3Myw3IEBACiAJCQlpZigoZW52ICYgRkxBR19TRVRFTlYpID09IEZMQUdfU0VURU5WKSB7CiAJCQkJc3RhcnQgPQogCQkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5hcmVhX2xpc3Rbal0uc3RhcnQ7Ci0JCQkJc3ByaW50ZigoY2hhciopIHMsIiVYIixzdGFydCk7CisJCQkJc3ByaW50ZigoY2hhciopIHMsIiVsWCIsc3RhcnQpOwogCQkJCXNldGVudigoY2hhciopIGFyZWFfbGlzdFtwYXJ0XS5sYWJlbCwoY2hhciopIHMpOwogCQkJfQogCQkJcGFydCsrOwpAQCAtMTc4LDYgKzE4OSw5IEBACiAJCWlmIChkYXRhZmxhc2hfaW5mb1tpXS5pZCAhPSAwKSB7CiAJCQlwcmludGYoIkRhdGFGbGFzaDoiKTsKIAkJCXN3aXRjaCAoZGF0YWZsYXNoX2luZm9baV0uaWQpIHsKKwkJCWNhc2UgQVQ0NURCMDIxOgorCQkJCXByaW50ZigiQVQ0NURCMDIxXG4iKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQVQ0NURCMTYxOgogCQkJCXByaW50ZigiQVQ0NURCMTYxXG4iKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwppbmRleCAxNDg0YjBiLi4wZmZmODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCkBAIC01OTcsNyArNTk3LDcgQEAKIAogCXZhbCA9IHJlZ19yZWFkKEJZVEVfVEVTVCk7CiAJaWYgKHZhbCAhPSAweDg3NjU0MzIxKSB7Ci0JCXByaW50ZihEUklWRVJOQU1FICI6IEludmFsaWQgY2hpcCBlbmRpYW4gMHglMDh4XG4iLCB2YWwpOworCQlwcmludGYoRFJJVkVSTkFNRSAiOiBJbnZhbGlkIGNoaXAgZW5kaWFuIDB4JTA4bHhcbiIsIHZhbCk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTYwNiw3ICs2MDYsNyBAQAogCQlpZiAoY2hpcF9pZHNbaV0uaWQgPT0gdmFsKSBicmVhazsKIAl9CiAJaWYgKCFjaGlwX2lkc1tpXS5pZCkgewotCQlwcmludGYoRFJJVkVSTkFNRSAiOiBVbmtub3duIGNoaXAgSUQgJTA0eFxuIiwgdmFsKTsKKwkJcHJpbnRmKERSSVZFUk5BTUUgIjogVW5rbm93biBjaGlwIElEICUwNGx4XG4iLCB2YWwpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggNTdjMGRjMy4uMjUzNDA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtODk5LDcgKzg5OSw3IEBACiAJc3RhdHVzID0gbGUzMl90b19jcHUodHhfZGVzY3ItPmNvbmZpZ19zdGF0dXMpOwogCWlmICgoc3RhdHVzICYgRE1BX0RFU0NSX1RYX09LKSA9PSAwKSB7CiAjaWZkZWYgVFhfUFJJTlRfRVJST1JTCi0JCXByaW50ZiAoIlRYIHBhY2tldCBlcnJvcjogMHglMDh4XG4gICAgJXMlcyVzJXNcbiIsIHN0YXR1cywKKwkJcHJpbnRmICgiVFggcGFja2V0IGVycm9yOiAweCUwOGx4XG4gICAgJXMlcyVzJXNcbiIsIHN0YXR1cywKIAkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9UWF9PSyA/ICJ0eCBlcnJvciwgIiA6ICIiLAogCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1RYX1JFVFJZX0xJTUlUID8KIAkJICAgICAgICJyZXRyeSBsaW1pdCByZWFjaGVkLCAiIDogIiIsCkBAIC05NTksNyArOTU5LDcgQEAKIAkJc3RhdHVzID0gbGUzMl90b19jcHUocnhfZGVzY3ItPmNvbmZpZ19zdGF0dXMpOwogCQlpZiAoc3RhdHVzICYgRE1BX0RFU0NSX1JYX0JBRF9GUkFNRSkgewogI2lmZGVmIFJYX1BSSU5UX0VSUk9SUwotCQkJcHJpbnRmICgiUlggcGFja2V0IGVycm9yOiAweCUwOHhcbiAgICAlcyVzJXMlcyVzJXNcbiIsCisJCQlwcmludGYgKCJSWCBwYWNrZXQgZXJyb3I6IDB4JTA4bHhcbiAgICAlcyVzJXMlcyVzJXNcbiIsCiAJCQkgICAgICAgc3RhdHVzLAogCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9GUkFNRV9JU19UWVBFID8gInRvbyBiaWcsICIKIAkJCSAgICAgICA6ICIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWNmdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbWNmdWFydC5jCmluZGV4IDg4ZjNlYjEuLjVlYjRmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZnVhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tY2Z1YXJ0LmMKQEAgLTYzLDggKzYzLDggQEAKIAl1YXJ0LT51bXIgPSBVQVJUX1VNUl9TQl9TVE9QX0JJVFNfMTsKIAogCS8qIFNldHRpbmcgdXAgQmF1ZFJhdGUgKi8KLQljb3VudGVyID0gKHUzMikgKGdkLT5idXNfY2xrIC8gKGdkLT5iYXVkcmF0ZSkpOwotCWNvdW50ZXIgPj49IDU7CisJY291bnRlciA9ICh1MzIpICgoZ2QtPmJ1c19jbGsgLyAzMikgKyAoZ2QtPmJhdWRyYXRlIC8gMikpOworCWNvdW50ZXIgPSBjb3VudGVyIC8gZ2QtPmJhdWRyYXRlOwogCiAJLyogd3JpdGUgdG8gQ1RVUjogZGl2aWRlIGNvdW50ZXIgdXBwZXIgYnl0ZSAqLwogCXVhcnQtPnViZzEgPSAodTgpICgoY291bnRlciAmIDB4ZmYwMCkgPj4gOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbC5jCmluZGV4IDE4MmNhMmQuLjRjY2FlZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbC5jCkBAIC0xMjQsNiArMTI0LDggQEAKIAogc3RhdGljIGludCBjYWxjX2Rpdmlzb3IgKE5TMTY1NTBfdCBwb3J0KQogeworCXVpbnQzMl90IGNsa19kaXZpc29yOworCiAjaWZkZWYgQ09ORklHX09NQVAxNTEwCiAJLyogSWYgY2FuJ3QgY2xlYW5seSBjbG9jayAxMTUyMDAgc2V0IGRpdiB0byAxICovCiAJaWYgKChDRkdfTlMxNjU1MF9DTEsgPT0gMTIwMDAwMDApICYmIChnZC0+YmF1ZHJhdGUgPT0gMTE1MjAwKSkgewpAQCAtMTQ3LDEwICsxNDksMTUgQEAKIAogCS8qIENvbXB1dGUgZGl2aXNvciB2YWx1ZS4gTm9ybWFsbHksIHdlIHNob3VsZCBzaW1wbHkgcmV0dXJuOgogCSAqICAgQ0ZHX05TMTY1NTBfQ0xLKSAvIE1PREVfWF9ESVYgLyBnZC0+YmF1ZHJhdGUKLQkgKiBidXQgd2UgbmVlZCB0byByb3VuZCB0aGF0IHZhbHVlIGJ5IGFkZGluZyAwLjUgb3IgOC8xNi4KKwkgKiBidXQgd2UgbmVlZCB0byByb3VuZCB0aGF0IHZhbHVlIGJ5IGFkZGluZyAwLjUgKDIvNCkuCiAJICogUm91bmRpbmcgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXQgaGlnaCBiYXVkIHJhdGVzLgogCSAqLwotCXJldHVybiAoKCgxNiAqIENGR19OUzE2NTUwX0NMSykgLyBNT0RFX1hfRElWIC8gZ2QtPmJhdWRyYXRlKSArIDgpIC8gMTY7CisJY2xrX2Rpdmlzb3IgPSAoKCg0ICogQ0ZHX05TMTY1NTBfQ0xLKSAvCisJCQkoTU9ERV9YX0RJViAqIGdkLT5iYXVkcmF0ZSkpICsgMikgLyA0OworCisJZGVidWcoIk5TMTY1NTAgY2xvY2sgZGl2aXNvciA9ICVkXG4iLCBjbGtfZGl2aXNvcik7CisKKwlyZXR1cm4gY2xrX2Rpdmlzb3I7CiB9CiAKICNpZiAhZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3h1YXJ0bGl0ZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3h1YXJ0bGl0ZS5jCmluZGV4IGQ2NzhhYjYuLjVjNDFhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF94dWFydGxpdGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfeHVhcnRsaXRlLmMKQEAgLTEsNiArMSw4IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDA0IEF0bWFyayBUZWNobm8sIEluYy4KKyAqIChDKSBDb3B5cmlnaHQgMjAwOCBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisgKiBDbGVhbiBkcml2ZXIgYW5kIGFkZCB4aWxpbnggY29uc3RhbnQgZnJvbSBoZWFkZXIgZmlsZQogICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBBdG1hcmsgVGVjaG5vLCBJbmMuCiAgKiBZYXN1c2hpIFNIT0pJIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMTMsNyArMTUsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjMsMTkgKzI1LDIxIEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaWZkZWYJQ09ORklHX1hJTElOWF9VQVJUTElURQogCi0jaW5jbHVkZSA8YXNtL3NlcmlhbF94dWFydGxpdGUuaD4KKyNkZWZpbmUgUlhfRklGT19PRkZTRVQJCTAgLyogcmVjZWl2ZSBGSUZPLCByZWFkIG9ubHkgKi8KKyNkZWZpbmUgVFhfRklGT19PRkZTRVQJCTQgLyogdHJhbnNtaXQgRklGTywgd3JpdGUgb25seSAqLworI2RlZmluZSBTVEFUVVNfUkVHX09GRlNFVAk4IC8qIHN0YXR1cyByZWdpc3RlciwgcmVhZCBvbmx5ICovCiAKLS8qIEZJWE1FOiB3ZSBzaG91bGQgY29udmVydCB0aGVzZSB0byBpbjMyIGFuZCBvdXQzMiAqLwotI2RlZmluZSBJT19XT1JEKG9mZnNldCkJICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKG9mZnNldCkpCi0jZGVmaW5lIElPX1NFUklBTChvZmZzZXQpICAgIElPX1dPUkQoQ09ORklHX1NFUklBTF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIFNSX1RYX0ZJRk9fRlVMTAkJMHgwOCAvKiB0cmFuc21pdCBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgU1JfUlhfRklGT19WQUxJRF9EQVRBCTB4MDEgLyogZGF0YSBpbiByZWNlaXZlIEZJRk8gKi8KKyNkZWZpbmUgU1JfUlhfRklGT19GVUxMCQkweDAyIC8qIHJlY2VpdmUgRklGTyBmdWxsICovCiAKLSNkZWZpbmUgSU9fU0VSSUFMX1JYX0ZJRk8gICBJT19TRVJJQUwoWFVMX1JYX0ZJRk9fT0ZGU0VUKQotI2RlZmluZSBJT19TRVJJQUxfVFhfRklGTyAgIElPX1NFUklBTChYVUxfVFhfRklGT19PRkZTRVQpCi0jZGVmaW5lIElPX1NFUklBTF9TVEFUVVMgICAgSU9fU0VSSUFMKFhVTF9TVEFUVVNfUkVHX09GRlNFVCkKLSNkZWZpbmUgSU9fU0VSSUFMX0NPTlRST0wgICBJT19TRVJJQUwoWFVMX0NPTlRST0xfUkVHX09GRlNFVCkKKyNkZWZpbmUgVUFSVExJVEVfU1RBVFVTCQkoQ09ORklHX1NFUklBTF9CQVNFICsgU1RBVFVTX1JFR19PRkZTRVQpCisjZGVmaW5lIFVBUlRMSVRFX1RYX0ZJRk8JKENPTkZJR19TRVJJQUxfQkFTRSArIFRYX0ZJRk9fT0ZGU0VUKQorI2RlZmluZSBVQVJUTElURV9SWF9GSUZPCShDT05GSUdfU0VSSUFMX0JBU0UgKyBSWF9GSUZPX09GRlNFVCkKIAogaW50IHNlcmlhbF9pbml0KHZvaWQpCiB7CkBAIC01MCw5ICs1NCwxMCBAQAogCiB2b2lkIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYykKIHsKLQlpZiAoYyA9PSAnXG4nKSBzZXJpYWxfcHV0YygnXHInKTsKLQl3aGlsZSAoSU9fU0VSSUFMX1NUQVRVUyAmIFhVTF9TUl9UWF9GSUZPX0ZVTEwpOwotCUlPX1NFUklBTF9UWF9GSUZPID0gKHVuc2lnbmVkIGNoYXIpIChjICYgMHhmZik7CisJaWYgKGMgPT0gJ1xuJykKKwkJc2VyaWFsX3B1dGMoJ1xyJyk7CisJd2hpbGUgKGluX2JlMzIoVUFSVExJVEVfU1RBVFVTKSAmIFNSX1RYX0ZJRk9fRlVMTCk7CisJb3V0X2JlMzIoVUFSVExJVEVfVFhfRklGTywgKHVuc2lnbmVkIGNoYXIpIChjICYgMHhmZikpOwogfQogCiB2b2lkIHNlcmlhbF9wdXRzKGNvbnN0IGNoYXIgKiBzKQpAQCAtNjQsMTMgKzY5LDEzIEBACiAKIGludCBzZXJpYWxfZ2V0Yyh2b2lkKQogewotCXdoaWxlICghKElPX1NFUklBTF9TVEFUVVMgJiBYVUxfU1JfUlhfRklGT19WQUxJRF9EQVRBKSk7Ci0JcmV0dXJuIElPX1NFUklBTF9SWF9GSUZPICYgMHhmZjsKKwl3aGlsZSAoIShpbl9iZTMyKFVBUlRMSVRFX1NUQVRVUykgJiBTUl9SWF9GSUZPX1ZBTElEX0RBVEEpKTsKKwlyZXR1cm4gaW5fYmUzMihVQVJUTElURV9SWF9GSUZPKSAmIDB4ZmY7CiB9CiAKIGludCBzZXJpYWxfdHN0Yyh2b2lkKQogewotCXJldHVybiAoSU9fU0VSSUFMX1NUQVRVUyAmIFhVTF9TUl9SWF9GSUZPX1ZBTElEX0RBVEEpOworCXJldHVybiAoaW5fYmUzMihVQVJUTElURV9TVEFUVVMpICYgU1JfUlhfRklGT19WQUxJRF9EQVRBKTsKIH0KIAogI2VuZGlmCS8qIENPTkZJR19NSUNST0JMWkUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmRjb3JlLmMgYi9kcml2ZXJzL3VzYi91c2JkY29yZS5jCmluZGV4IGE2MjFjZTcuLjgwOGRhOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYmRjb3JlLmMKKysrIGIvZHJpdmVycy91c2IvdXNiZGNvcmUuYwpAQCAtNTQ2LDIxICs1NDYsMjMgQEAKICAqCiAgKiBOT1RFOiBlbmRwb2ludF9hZGRyZXNzIE1VU1QgY29udGFpbiBhIGRpcmVjdGlvbiBmbGFnLgogICovCi1zdHJ1Y3QgdXJiICp1c2JkX2FsbG9jX3VyYiAoc3RydWN0IHVzYl9kZXZpY2VfaW5zdGFuY2UgKmRldmljZSwgc3RydWN0IHVzYl9lbmRwb2ludF9pbnN0YW5jZSAqZW5kcG9pbnQpCitzdHJ1Y3QgdXJiICp1c2JkX2FsbG9jX3VyYiAoc3RydWN0IHVzYl9kZXZpY2VfaW5zdGFuY2UgKmRldmljZSwKKwkJCSAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2luc3RhbmNlICplbmRwb2ludCkKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKLQlpZiggISh1cmIgPSAoc3RydWN0IHVyYiopbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXJiKSkpICkgewotCSAgdXNiZXJyKCIgRiBBIFQgQSBMOiAgbWFsbG9jKCV1KSBGQUlMRUQhISEhIiwgc2l6ZW9mKHN0cnVjdCB1cmIpKTsKLQkgIHJldHVybiBOVUxMOworCWlmICghKHVyYiA9IChzdHJ1Y3QgdXJiICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdXJiKSkpKSB7CisJCXVzYmVyciAoIiBGIEEgVCBBIEw6ICBtYWxsb2MoJXUpIEZBSUxFRCEhISEiLAorCQkJc2l6ZW9mIChzdHJ1Y3QgdXJiKSk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIEZpbGwgaW4ga25vd24gZmllbGRzICovCi0JbWVtc2V0KHVyYiwgMCwgc2l6ZW9mKHN0cnVjdCB1cmIpKTsKKwltZW1zZXQgKHVyYiwgMCwgc2l6ZW9mIChzdHJ1Y3QgdXJiKSk7CiAJdXJiLT5lbmRwb2ludCA9IGVuZHBvaW50OwogCXVyYi0+ZGV2aWNlID0gZGV2aWNlOwotCXVyYi0+YnVmZmVyID0gKHU4Kil1cmItPmJ1ZmZlcl9kYXRhOwotCXVyYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZih1cmItPmJ1ZmZlcl9kYXRhKTsKKwl1cmItPmJ1ZmZlciA9ICh1OCAqKSB1cmItPmJ1ZmZlcl9kYXRhOworCXVyYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZiAodXJiLT5idWZmZXJfZGF0YSk7CiAKIAl1cmJfbGlua19pbml0ICgmdXJiLT5saW5rKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYjg2Mnh4LmMgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHguYwppbmRleCA5Njg0Y2YzLi43MzNkOWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21iODYyeHguYworKysgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHguYwpAQCAtMTczLDYgKzE3Myw4IEBACiAJREVfV1JfRklGTyAoMHgwOTQxMDAwMCk7CiAJREVfV1JfRklGTyAoMHgwMDAwMDAwMCk7CiAJREVfV1JfRklGTyAocEdELT53aW5TaXplWTw8MTYgfCBwR0QtPndpblNpemVYKTsKKwkvKiBzeW5jIHdpdGggU1cgYWNjZXNzIHRvIGZyYW1lYnVmZmVyICovCisJZGVfd2FpdCAoKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NPUkFMUCkKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2pmZnMyXzFwYXNzLmMgYi9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jCmluZGV4IGQxNDIzYzEuLjVjMWQyNjUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2pmZnMyXzFwYXNzLmMKKysrIGIvZnMvamZmczIvamZmczJfMXBhc3MuYwpAQCAtMTIxMywxMiArMTIxMywxMiBAQAogCQkJfSBlbHNlIGlmIChub2RlLT5ub2RldHlwZSA9PSBKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUikgewogCQkJCWlmIChub2RlLT50b3RsZW4gIT0gc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKQogCQkJCQlwcmludGYoIk9PUFMgQ2xlYW5tYXJrZXIgaGFzIGJhZCBzaXplICIKLQkJCQkJCSIlZCAhPSAlZFxuIiwgbm9kZS0+dG90bGVuLAorCQkJCQkJIiVkICE9ICV1XG4iLCBub2RlLT50b3RsZW4sCiAJCQkJCQlzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpOwogCQkJfSBlbHNlIGlmIChub2RlLT5ub2RldHlwZSA9PSBKRkZTMl9OT0RFVFlQRV9QQURESU5HKSB7CiAJCQkJaWYgKG5vZGUtPnRvdGxlbiA8IHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkKIAkJCQkJcHJpbnRmKCJPT1BTIFBhZGRpbmcgaGFzIGJhZCBzaXplICIKLQkJCQkJCSIlZCA8ICVkXG4iLCBub2RlLT50b3RsZW4sCisJCQkJCQkiJWQgPCAldVxuIiwgbm9kZS0+dG90bGVuLAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRmKCJVbmtub3duIG5vZGUgdHlwZTogJXggbGVuICVkICIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGltZXIuaCBiL2luY2x1ZGUvYXNtLW02OGsvdGltZXIuaAppbmRleCAwMzA3MjBjLi4xYTVkZTA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aW1lci5oCkBAIC0zMyw3ICszMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERNQSBUaW1lciBtb2R1bGUgcmVnaXN0ZXJzICovCiB0eXBlZGVmIHN0cnVjdCBkdGltZXJfY3RybCB7Ci0jaWYgZGVmaW5lZChDT05GSUdfTTUyNDkpIHx8IGRlZmluZWQoQ09ORklHX001MjUzKQorI2lmIGRlZmluZWQoQ09ORklHX001MjQ5KSB8fCBkZWZpbmVkKENPTkZJR19NNTI1MykgfHwgZGVmaW5lZChDT05GSUdfTTUyNzIpCiAJdTE2IHRtcjsJCS8qIDB4MDAgTW9kZSByZWdpc3RlciAqLwogCXUxNiByZXMxOwkJLyogMHgwMiAqLwogCXUxNiB0cnI7CQkvKiAweDA0IFJlZmVyZW5jZSByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveGJhc2ljX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94YmFzaWNfdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwMTJlNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94YmFzaWNfdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qICAgICBBdXRob3I6IFhpbGlueCwgSW5jLgotKgotKgotKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSogICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKiAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotKiAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSoKLSoKLSogICAgIFhJTElOWCBJUyBQUk9WSURJTkcgVEhJUyBERVNJR04sIENPREUsIE9SIElORk9STUFUSU9OICJBUyBJUyIgQVMgQQotKiAgICAgQ09VUlRFU1kgVE8gWU9VLiBCWSBQUk9WSURJTkcgVEhJUyBERVNJR04sIENPREUsIE9SIElORk9STUFUSU9OIEFTCi0qICAgICBPTkUgUE9TU0lCTEUgSU1QTEVNRU5UQVRJT04gT0YgVEhJUyBGRUFUVVJFLCBBUFBMSUNBVElPTiBPUiBTVEFOREFSRCwKLSogICAgIFhJTElOWCBJUyBNQUtJTkcgTk8gUkVQUkVTRU5UQVRJT04gVEhBVCBUSElTIElNUExFTUVOVEFUSU9OIElTIEZSRUUKLSogICAgIEZST00gQU5ZIENMQUlNUyBPRiBJTkZSSU5HRU1FTlQsIEFORCBZT1UgQVJFIFJFU1BPTlNJQkxFIEZPUiBPQlRBSU5JTkcKLSogICAgIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMgWU9VIE1BWSBSRVFVSVJFIEZPUiBZT1VSIElNUExFTUVOVEFUSU9OLgotKiAgICAgWElMSU5YIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPCi0qICAgICBUSEUgQURFUVVBQ1kgT0YgVEhFIElNUExFTUVOVEFUSU9OLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWQotKiAgICAgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgVEhBVCBUSElTIElNUExFTUVOVEFUSU9OIElTIEZSRUUgRlJPTQotKiAgICAgQ0xBSU1TIE9GIElORlJJTkdFTUVOVCwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLSogICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKgotKgotKiAgICAgWGlsaW54IGhhcmR3YXJlIHByb2R1Y3RzIGFyZSBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiBsaWZlIHN1cHBvcnQKLSogICAgIGFwcGxpYW5jZXMsIGRldmljZXMsIG9yIHN5c3RlbXMuIFVzZSBpbiBzdWNoIGFwcGxpY2F0aW9ucyBpcwotKiAgICAgZXhwcmVzc2x5IHByb2hpYml0ZWQuCi0qCi0qCi0qICAgICAoYykgQ29weXJpZ2h0IDIwMDItMjAwMyBYaWxpbnggSW5jLgotKiAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSoKLSogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0qICAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotKiAgICAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogQGZpbGUgeGJhc2ljX3R5cGVzLmgKLSoKLSogVGhpcyBmaWxlIGNvbnRhaW5zIGJhc2ljIHR5cGVzIGZvciBYaWxpbnggc29mdHdhcmUgSVAuICBUaGVzZSB0eXBlcyBkbyBub3QKLSogZm9sbG93IHRoZSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiB3aXRoIHJlc3BlY3QgdG8gdXNpbmcgdGhlIGNvbXBvbmVudAotKiBuYW1lIGluIGZyb250IG9mIGVhY2ggbmFtZSBiZWNhdXNlIHRoZXkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcHJpbWl0aXZlcy4KLSoKLSogQG5vdGUKLSoKLSogVGhpcyBmaWxlIGNvbnRhaW5zIGl0ZW1zIHdoaWNoIGFyZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgotKgotKiA8cHJlPgotKiBNT0RJRklDQVRJT04gSElTVE9SWToKLSoKLSogVmVyCSBXaG8JRGF0ZQlDaGFuZ2VzCi0qIC0tLS0tIC0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogMS4wMGEgcm1tICAxMi8xNC8wMSBGaXJzdCByZWxlYXNlCi0qCXJtbSAgMDUvMDkvMDMgQWRkZWQgInhhc3NlcnQgYWx3YXlzIiBtYWNyb3MgdG8gcmlkIG91cnNlbHZlcyBvZiBkaWFiCi0qCQkgICAgICBjb21waWxlciB3YXJuaW5ncwotKiA8L3ByZT4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBYQkFTSUNfVFlQRVNfSAkJLyogcHJldmVudCBjaXJjdWxhciBpbmNsdXNpb25zICovCi0jZGVmaW5lIFhCQVNJQ19UWVBFU19ICQkvKiBieSB1c2luZyBwcm90ZWN0aW9uIG1hY3JvcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSW5jbHVkZSBGaWxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBDb25zdGFudCBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgMQotI2VuZGlmCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFIDAKLSNlbmRpZgotCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAwCi0jZW5kaWYKLS8qKiBOdWxsICovCi0KLSNkZWZpbmUgWENPTVBPTkVOVF9JU19SRUFEWQkweDExMTExMTExCS8qIGNvbXBvbmVudCBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotI2RlZmluZSBYQ09NUE9ORU5UX0lTX1NUQVJURUQJMHgyMjIyMjIyMgkvKiBjb21wb25lbnQgaGFzIGJlZW4gc3RhcnRlZCAqLwotCi0vKiB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgZGVjbGFyYXRpb25zIGFyZSBmb3IgdW5pdCB0ZXN0IHB1cnBvc2VzIGFuZCBhcmUKLSAqIGRlc2lnbmVkIHRvIGJlIHVzZWQgaW4gdGVzdCBhcHBsaWNhdGlvbnMuCi0gKi8KLSNkZWZpbmUgWFRFU1RfUEFTU0VECTAKLSNkZWZpbmUgWFRFU1RfRkFJTEVECTEKLQotI2RlZmluZSBYQVNTRVJUX05PTkUJIDAKLSNkZWZpbmUgWEFTU0VSVF9PQ0NVUlJFRCAxCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgWEFzc2VydFN0YXR1czsKLWV4dGVybiB2b2lkIFhBc3NlcnQoY2hhciAqLCBpbnQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUeXBlIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKiBAbmFtZSBQcmltaXRpdmUgdHlwZXMKLSAqIFRoZXNlIHByaW1pdGl2ZSB0eXBlcyBhcmUgY3JlYXRlZCBmb3IgdHJhbnNwb3J0YWJpbGl0eS4KLSAqIFRoZXkgYXJlIGRlcGVuZGVudCB1cG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotICogQHsKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1MzIgVXBwZXI7Ci0JdTMyIExvd2VyOwotfSBYdWludDY0OwotCi0vKiBYaWxpbngncyB1bnNpZ25lZCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmIHUzMiBYdWludDMyOwotdHlwZWRlZiB1MTYgWHVpbnQxNjsKLXR5cGVkZWYgdTggWHVpbnQ4OwotCi0vKiBhbmQgc2lnbmVkIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYgczMyIFhpbnQzMjsKLXR5cGVkZWYgczE2IFhpbnQxNjsKLXR5cGVkZWYgczggWGludDg7Ci0KLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMIDAKLSNlbmRpZgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgWGJvb2xlYW47Ci0jZGVmaW5lIFhOVUxMCU5VTEwKLQotI2RlZmluZSBYVFJVRQkxCi0jZGVmaW5lIFhGQUxTRQkwCi0KLS8qQH0qLwotCi0vKioKLSAqIFRoaXMgZGF0YSB0eXBlIGRlZmluZXMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgZGV2aWNlLgotICogVGhlIGFyZ3VtZW50IHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudAotICovCi10eXBlZGVmIHZvaWQgKCpYSW50ZXJydXB0SGFuZGxlcikgKHZvaWQgKkluc3RhbmNlUHRyKTsKLQotLyoqCi0gKiBUaGlzIGRhdGEgdHlwZSBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGFuCi0gKiBhc3NlcnQgb2NjdXJzLiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCBvbmx5IHdoZW4gYXNzZXJ0cyBhcmUgZW5hYmxlZAotICovCi10eXBlZGVmIHZvaWQgKCpYQXNzZXJ0Q2FsbGJhY2spIChjaGFyICpGaWxlbmFtZVB0ciwgaW50IExpbmVOdW1iZXIpOwotCi0vKioqKioqKioqKioqKioqKiogTWFjcm9zIChJbmxpbmUgRnVuY3Rpb25zKSBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKiBSZXR1cm4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgNjQgYml0IGRhdGEgdHlwZS4KLSoKLSogQHBhcmFtIHggaXMgdGhlIDY0IGJpdCB3b3JkLgotKgotKiBAcmV0dXJuCi0qCi0qIFRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSA2NCBiaXQgd29yZC4KLSoKLSogQG5vdGUKLSoKLSogTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVJTlQ2NF9NU1coeCkgKCh4KS5VcHBlcikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qIFJldHVybiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgNjQgYml0IGRhdGEgdHlwZS4KLSoKLSogQHBhcmFtIHggaXMgdGhlIDY0IGJpdCB3b3JkLgotKgotKiBAcmV0dXJuCi0qCi0qIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSA2NCBiaXQgd29yZC4KLSoKLSogQG5vdGUKLSoKLSogTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVJTlQ2NF9MU1coeCkgKCh4KS5Mb3dlcikKLQotI2lmbmRlZiBOREVCVUcKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qIFRoaXMgYXNzZXJ0IG1hY3JvIGlzIHRvIGJlIHVzZWQgZm9yIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCByZXR1cm4gYW55dGhpbmcKLSogKHZvaWQpLiBUaGlzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFhXYWl0SW5Bc3NlcnQgYm9vbGVhbiBjYW4gYmUgdXNlZCB0bwotKiBhY2NvbW9kYXRlIHRlc3RzIHNvIHRoYXQgYXNzZXJ0cyB3aGljaCBmYWlsIGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZS4KLSoKLSogQHBhcmFtIGV4cHJlc3Npb24gaXMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuIElmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwKLSoJIHRoZSBhc3NlcnQgb2NjdXJzLgotKgotKiBAcmV0dXJuCi0qCi0qIFJldHVybnMgdm9pZCB1bmxlc3MgdGhlIFhXYWl0SW5Bc3NlcnQgdmFyaWFibGUgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZQotKiBubyByZXR1cm4gaXMgbWFkZSBhbmQgYW4gaW5maW5pdGUgbG9vcCBpcyBlbnRlcmVkLgotKgotKiBAbm90ZQotKgotKiBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYQVNTRVJUX1ZPSUQoZXhwcmVzc2lvbikJCQlcCi17CQkJCQkJCVwKLQlpZiAoZXhwcmVzc2lvbikgewkJCQlcCi0JCVhBc3NlcnRTdGF0dXMgPSBYQVNTRVJUX05PTkU7CQlcCi0JfSBlbHNlIHsJCQkJCVwKLQkJWEFzc2VydChfX0ZJTEVfXywgX19MSU5FX18pOwkJXAotCQlYQXNzZXJ0U3RhdHVzID0gWEFTU0VSVF9PQ0NVUlJFRDsJXAotCQlyZXR1cm47CQkJCQlcCi0JfQkJCQkJCVwKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qIFRoaXMgYXNzZXJ0IG1hY3JvIGlzIHRvIGJlIHVzZWQgZm9yIGZ1bmN0aW9ucyB0aGF0IGRvIHJldHVybiBhIHZhbHVlLiBUaGlzIGluCi0qIGNvbmp1bmN0aW9uIHdpdGggdGhlIFhXYWl0SW5Bc3NlcnQgYm9vbGVhbiBjYW4gYmUgdXNlZCB0byBhY2NvbW9kYXRlIHRlc3RzIHNvCi0qIHRoYXQgYXNzZXJ0cyB3aGljaCBmYWlsIGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZS4KLSoKLSogQHBhcmFtIGV4cHJlc3Npb24gaXMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuIElmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwKLSoJIHRoZSBhc3NlcnQgb2NjdXJzLgotKgotKiBAcmV0dXJuCi0qCi0qIFJldHVybnMgMCB1bmxlc3MgdGhlIFhXYWl0SW5Bc3NlcnQgdmFyaWFibGUgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZQotKiBubyByZXR1cm4gaXMgbWFkZSBhbmQgYW4gaW5maW5pdGUgbG9vcCBpcyBlbnRlcmVkLgotKgotKiBAbm90ZQotKgotKiBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYQVNTRVJUX05PTlZPSUQoZXhwcmVzc2lvbikJCQlcCi17CQkJCQkJCVwKLQlpZiAoZXhwcmVzc2lvbikgewkJCQlcCi0JCVhBc3NlcnRTdGF0dXMgPSBYQVNTRVJUX05PTkU7CQlcCi0JfSBlbHNlIHsJCQkJCVwKLQkJWEFzc2VydChfX0ZJTEVfXywgX19MSU5FX18pOwkJXAotCQlYQXNzZXJ0U3RhdHVzID0gWEFTU0VSVF9PQ0NVUlJFRDsJXAotCQlyZXR1cm4gMDsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKiBBbHdheXMgYXNzZXJ0LiBUaGlzIGFzc2VydCBtYWNybyBpcyB0byBiZSB1c2VkIGZvciBmdW5jdGlvbnMgdGhhdCBkbyBub3QKLSogcmV0dXJuIGFueXRoaW5nICh2b2lkKS4gVXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgYW4gYXNzZXJ0IHNob3VsZCBhbHdheXMKLSogb2NjdXIuCi0qCi0qIEByZXR1cm4KLSoKLSogUmV0dXJucyB2b2lkIHVubGVzcyB0aGUgWFdhaXRJbkFzc2VydCB2YXJpYWJsZSBpcyB0cnVlLCBpbiB3aGljaCBjYXNlCi0qIG5vIHJldHVybiBpcyBtYWRlIGFuZCBhbiBpbmZpbml0ZSBsb29wIGlzIGVudGVyZWQuCi0qCi0qIEBub3RlCi0qCi0qIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhBU1NFUlRfVk9JRF9BTFdBWVMoKQkJCQlcCi17CQkJCQkJCVwKLQlYQXNzZXJ0KF9fRklMRV9fLCBfX0xJTkVfXyk7CQkJXAotCVhBc3NlcnRTdGF0dXMgPSBYQVNTRVJUX09DQ1VSUkVEOwkJXAotCXJldHVybjsJCQkJCQlcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKiBBbHdheXMgYXNzZXJ0LiBUaGlzIGFzc2VydCBtYWNybyBpcyB0byBiZSB1c2VkIGZvciBmdW5jdGlvbnMgdGhhdCBkbyByZXR1cm4KLSogYSB2YWx1ZS4gVXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgYW4gYXNzZXJ0IHNob3VsZCBhbHdheXMgb2NjdXIuCi0qCi0qIEByZXR1cm4KLSoKLSogUmV0dXJucyB2b2lkIHVubGVzcyB0aGUgWFdhaXRJbkFzc2VydCB2YXJpYWJsZSBpcyB0cnVlLCBpbiB3aGljaCBjYXNlCi0qIG5vIHJldHVybiBpcyBtYWRlIGFuZCBhbiBpbmZpbml0ZSBsb29wIGlzIGVudGVyZWQuCi0qCi0qIEBub3RlCi0qCi0qIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhBU1NFUlRfTk9OVk9JRF9BTFdBWVMoKQkJCVwKLXsJCQkJCQkJXAotCVhBc3NlcnQoX19GSUxFX18sIF9fTElORV9fKTsJCQlcCi0JWEFzc2VydFN0YXR1cyA9IFhBU1NFUlRfT0NDVVJSRUQ7CQlcCi0JcmV0dXJuIDA7CQkJCQlcCi19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgWEFTU0VSVF9WT0lEKGV4cHJlc3Npb24pCi0jZGVmaW5lIFhBU1NFUlRfVk9JRF9BTFdBWVMoKQotI2RlZmluZSBYQVNTRVJUX05PTlZPSUQoZXhwcmVzc2lvbikKLSNkZWZpbmUgWEFTU0VSVF9OT05WT0lEX0FMV0FZUygpCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqIEZ1bmN0aW9uIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIFhBc3NlcnRTZXRDYWxsYmFjayhYQXNzZXJ0Q2FsbGJhY2sgUm91dGluZSk7Ci0KLSNlbmRpZgkvKiBlbmQgb2YgcHJvdGVjdGlvbiBtYWNybyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveGlvLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlZDMyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94aW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiB4aW8uaAotICoKLSAqIERlZmluZXMgWElvIGZ1bmN0aW9ucyBmb3IgWGlsaW54IE9DUCBpbiB0ZXJtcyBvZiBMaW51eCBwcmltaXRpdmVzCi0gKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQKLSAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpZm5kZWYgWElPX0gKLSNkZWZpbmUgWElPX0gKLQotI2luY2x1ZGUgInhiYXNpY190eXBlcy5oIgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi10eXBlZGVmIHUzMiBYSW9fQWRkcmVzczsKLQotZXh0ZXJuIGlubGluZSB1OAotWElvX0luOChYSW9fQWRkcmVzcyBJbkFkZHJlc3MpCi17Ci0JcmV0dXJuICh1OCkgaW5fOCgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBJbkFkZHJlc3MpOwotfQotZXh0ZXJuIGlubGluZSB1MTYKLVhJb19JbjE2KFhJb19BZGRyZXNzIEluQWRkcmVzcykKLXsKLQlyZXR1cm4gKHUxNikgaW5fYmUxNigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgSW5BZGRyZXNzKTsKLX0KLWV4dGVybiBpbmxpbmUgdTMyCi1YSW9fSW4zMihYSW9fQWRkcmVzcyBJbkFkZHJlc3MpCi17Ci0JcmV0dXJuICh1MzIpIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopIEluQWRkcmVzcyk7Ci19Ci1leHRlcm4gaW5saW5lIHZvaWQKLVhJb19PdXQ4KFhJb19BZGRyZXNzIE91dEFkZHJlc3MsIHU4IFZhbHVlKQotewotCW91dF84KCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIE91dEFkZHJlc3MsIFZhbHVlKTsKLX0KLWV4dGVybiBpbmxpbmUgdm9pZAotWElvX091dDE2KFhJb19BZGRyZXNzIE91dEFkZHJlc3MsIHUxNiBWYWx1ZSkKLXsKLQlvdXRfYmUxNigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgT3V0QWRkcmVzcywgVmFsdWUpOwotfQotZXh0ZXJuIGlubGluZSB2b2lkCi1YSW9fT3V0MzIoWElvX0FkZHJlc3MgT3V0QWRkcmVzcywgdTMyIFZhbHVlKQotewotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKSBPdXRBZGRyZXNzLCBWYWx1ZSk7Ci19Ci0KLSNkZWZpbmUgWElvX1RvTGl0dGxlRW5kaWFuMTYocyxkKSAoKih1MTYqKShkKSA9IGNwdV90b19sZTE2KCh1MTYpKHMpKSkKLSNkZWZpbmUgWElvX1RvTGl0dGxlRW5kaWFuMzIocyxkKSAoKih1MzIqKShkKSA9IGNwdV90b19sZTMyKCh1MzIpKHMpKSkKLSNkZWZpbmUgWElvX1RvQmlnRW5kaWFuMTYocyxkKSAoKih1MTYqKShkKSA9IGNwdV90b19iZTE2KCh1MTYpKHMpKSkKLSNkZWZpbmUgWElvX1RvQmlnRW5kaWFuMzIocyxkKSAoKih1MzIqKShkKSA9IGNwdV90b19iZTMyKCh1MzIpKHMpKSkKLQotI2RlZmluZSBYSW9fRnJvbUxpdHRsZUVuZGlhbjE2KHMsZCkgKCoodTE2KikoZCkgPSBsZTE2X3RvX2NwdSgodTE2KShzKSkpCi0jZGVmaW5lIFhJb19Gcm9tTGl0dGxlRW5kaWFuMzIocyxkKSAoKih1MzIqKShkKSA9IGxlMzJfdG9fY3B1KCh1MzIpKHMpKSkKLSNkZWZpbmUgWElvX0Zyb21CaWdFbmRpYW4xNihzLGQpICgqKHUxNiopKGQpID0gYmUxNl90b19jcHUoKHUxNikocykpKQotI2RlZmluZSBYSW9fRnJvbUJpZ0VuZGlhbjMyKHMsZCkgKCoodTMyKikoZCkgPSBiZTMyX3RvX2NwdSgodTMyKShzKSkpCi0KLSNlbmRpZgkJCQkvKiBYSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveHVhcnRsaXRlX2wuaCBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvYXJjaC1taWNyb2JsYXplL3h1YXJ0bGl0ZV9sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzODFhMGQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveHVhcnRsaXRlX2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSoJWElMSU5YIElTIFBST1ZJRElORyBUSElTIERFU0lHTiwgQ09ERSwgT1IgSU5GT1JNQVRJT04gIkFTIElTIgotKglBUyBBIENPVVJURVNZIFRPIFlPVSwgU09MRUxZIEZPUiBVU0UgSU4gREVWRUxPUElORyBQUk9HUkFNUyBBTkQKLSoJU09MVVRJT05TIEZPUiBYSUxJTlggREVWSUNFUy4gIEJZIFBST1ZJRElORyBUSElTIERFU0lHTiwgQ09ERSwKLSoJT1IgSU5GT1JNQVRJT04gQVMgT05FIFBPU1NJQkxFIElNUExFTUVOVEFUSU9OIE9GIFRISVMgRkVBVFVSRSwKLSoJQVBQTElDQVRJT04gT1IgU1RBTkRBUkQsIFhJTElOWCBJUyBNQUtJTkcgTk8gUkVQUkVTRU5UQVRJT04KLSoJVEhBVCBUSElTIElNUExFTUVOVEFUSU9OIElTIEZSRUUgRlJPTSBBTlkgQ0xBSU1TIE9GIElORlJJTkdFTUVOVCwKLSoJQU5EIFlPVSBBUkUgUkVTUE9OU0lCTEUgRk9SIE9CVEFJTklORyBBTlkgUklHSFRTIFlPVSBNQVkgUkVRVUlSRQotKglGT1IgWU9VUiBJTVBMRU1FTlRBVElPTi4gIFhJTElOWCBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWQotKglXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUgQURFUVVBQ1kgT0YgVEhFCi0qCUlNUExFTUVOVEFUSU9OLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9SCi0qCVJFUFJFU0VOVEFUSU9OUyBUSEFUIFRISVMgSU1QTEVNRU5UQVRJT04gSVMgRlJFRSBGUk9NIENMQUlNUyBPRgotKglJTkZSSU5HRU1FTlQsIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSoJRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKgotKgkoYykgQ29weXJpZ2h0IDIwMDIgWGlsaW54IEluYy4KLSoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogQGZpbGUgeHVhcnRsaXRlX2wuaAotKgotKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGlkZW50aWZpZXJzIGFuZCBsb3ctbGV2ZWwgZHJpdmVyIGZ1bmN0aW9ucyAob3IKLSogbWFjcm9zKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgZGV2aWNlLiAgSGlnaC1sZXZlbCBkcml2ZXIgZnVuY3Rpb25zCi0qIGFyZSBkZWZpbmVkIGluIHh1YXJ0bGl0ZS5oLgotKgotKiA8cHJlPgotKiBNT0RJRklDQVRJT04gSElTVE9SWToKLSoKLSogVmVyCVdobyAgRGF0ZSAgICAgQ2hhbmdlcwotKiAtLS0tLSAtLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIDEuMDBiIHJwbSAgMDQvMjUvMDIgRmlyc3QgcmVsZWFzZQotKiA8L3ByZT4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIFhVQVJUTElURV9MX0ggLyogcHJldmVudCBjaXJjdWxhciBpbmNsdXNpb25zICovCi0jZGVmaW5lIFhVQVJUTElURV9MX0ggLyogYnkgdXNpbmcgcHJvdGVjdGlvbiBtYWNyb3MgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEluY2x1ZGUgRmlsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJ4YmFzaWNfdHlwZXMuaCIKLSNpbmNsdWRlICJ4aW8uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqIENvbnN0YW50IERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFVBUlQgTGl0ZSByZWdpc3RlciBvZmZzZXRzICovCi0KLSNkZWZpbmUgWFVMX1JYX0ZJRk9fT0ZGU0VUCQkwICAgLyogcmVjZWl2ZSBGSUZPLCByZWFkIG9ubHkgKi8KLSNkZWZpbmUgWFVMX1RYX0ZJRk9fT0ZGU0VUCQk0ICAgLyogdHJhbnNtaXQgRklGTywgd3JpdGUgb25seSAqLwotI2RlZmluZSBYVUxfU1RBVFVTX1JFR19PRkZTRVQJCTggICAvKiBzdGF0dXMgcmVnaXN0ZXIsIHJlYWQgb25seSAqLwotI2RlZmluZSBYVUxfQ09OVFJPTF9SRUdfT0ZGU0VUCQkxMiAgLyogY29udHJvbCByZWdpc3Rlciwgd3JpdGUgb25seSAqLwotCi0vKiBjb250cm9sIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKi8KLQotI2RlZmluZSBYVUxfQ1JfRU5BQkxFX0lOVFIJCTB4MTAJLyogZW5hYmxlIGludGVycnVwdCAqLwotI2RlZmluZSBYVUxfQ1JfRklGT19SWF9SRVNFVAkJMHgwMgkvKiByZXNldCByZWNlaXZlIEZJRk8gKi8KLSNkZWZpbmUgWFVMX0NSX0ZJRk9fVFhfUkVTRVQJCTB4MDEJLyogcmVzZXQgdHJhbnNtaXQgRklGTyAqLwotCi0vKiBzdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAqLwotCi0jZGVmaW5lIFhVTF9TUl9QQVJJVFlfRVJST1IJCTB4ODAKLSNkZWZpbmUgWFVMX1NSX0ZSQU1JTkdfRVJST1IJCTB4NDAKLSNkZWZpbmUgWFVMX1NSX09WRVJSVU5fRVJST1IJCTB4MjAKLSNkZWZpbmUgWFVMX1NSX0lOVFJfRU5BQkxFRAkJMHgxMAkvKiBpbnRlcnJ1cHQgZW5hYmxlZCAqLwotI2RlZmluZSBYVUxfU1JfVFhfRklGT19GVUxMCQkweDA4CS8qIHRyYW5zbWl0IEZJRk8gZnVsbCAqLwotI2RlZmluZSBYVUxfU1JfVFhfRklGT19FTVBUWQkJMHgwNAkvKiB0cmFuc21pdCBGSUZPIGVtcHR5ICovCi0jZGVmaW5lIFhVTF9TUl9SWF9GSUZPX0ZVTEwJCTB4MDIJLyogcmVjZWl2ZSBGSUZPIGZ1bGwgKi8KLSNkZWZpbmUgWFVMX1NSX1JYX0ZJRk9fVkFMSURfREFUQQkweDAxCS8qIGRhdGEgaW4gcmVjZWl2ZSBGSUZPICovCi0KLS8qIHRoZSBmb2xsb3dpbmcgY29uc3RhbnQgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBGSUZPcywgdGhlIHNpemUgb2YgdGhlCi0gKiBGSUZPcyBpbmNsdWRlcyB0aGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyIHN1Y2ggdGhhdCBpdCBpcyB0aGUgdG90YWwgbnVtYmVyCi0gKiBvZiBieXRlcyB0aGF0IHRoZSBVQVJUIGNhbiBidWZmZXIKLSAqLwotI2RlZmluZSBYVUxfRklGT19TSVpFCQkgICAgMTYKLQotLyogU3RvcCBiaXRzIGFyZSBmaXhlZCBhdCAxLiBCYXVkLCBwYXJpdHksIGFuZCBkYXRhIGJpdHMgYXJlIGZpeGVkIG9uIGEKLSAqIHBlciBpbnN0YW5jZSBiYXNpcwotICovCi0jZGVmaW5lIFhVTF9TVE9QX0JJVFMJCSAgICAxCi0KLS8qIFBhcml0eSBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFhVTF9QQVJJVFlfTk9ORQkJICAgIDAKLSNkZWZpbmUgWFVMX1BBUklUWV9PREQJCSAgICAxCi0jZGVmaW5lIFhVTF9QQVJJVFlfRVZFTgkJICAgIDIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogVHlwZSBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKiBNYWNyb3MgKElubGluZSBGdW5jdGlvbnMpIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogTG93LWxldmVsIGRyaXZlciBtYWNyb3MgYW5kIGZ1bmN0aW9ucy4gVGhlIGxpc3QgYmVsb3cgcHJvdmlkZXMgc2lnbmF0dXJlcwotKiB0byBoZWxwIHRoZSB1c2VyIHVzZSB0aGUgbWFjcm9zLgotKgotKiB2b2lkIFhVYXJ0TGl0ZV9tU2V0Q29udHJvbFJlZyh1MzIgQmFzZUFkZHJlc3MsIHUzMiBNYXNrKQotKiB1MzIgWFVhcnRMaXRlX21HZXRDb250cm9sUmVnKHUzMiBCYXNlQWRkcmVzcykKLSogdTMyIFhVYXJ0TGl0ZV9tR2V0U3RhdHVzUmVnKHUzMiBCYXNlQWRkcmVzcykKLSoKLSogWGJvb2xlYW4gWFVhcnRMaXRlX21Jc1JlY2VpdmVFbXB0eSh1MzIgQmFzZUFkZHJlc3MpCi0qIFhib29sZWFuIFhVYXJ0TGl0ZV9tSXNUcmFuc21pdEZ1bGwodTMyIEJhc2VBZGRyZXNzKQotKiBYYm9vbGVhbiBYVWFydExpdGVfbUlzSW50ckVuYWJsZWQodTMyIEJhc2VBZGRyZXNzKQotKgotKiB2b2lkIFhVYXJ0TGl0ZV9tRW5hYmxlSW50cih1MzIgQmFzZUFkZHJlc3MpCi0qIHZvaWQgWFVhcnRMaXRlX21EaXNhYmxlSW50cih1MzIgQmFzZUFkZHJlc3MpCi0qCi0qIHZvaWQgWFVhcnRMaXRlX1NlbmRCeXRlKHUzMiBCYXNlQWRkcmVzcywgdTggRGF0YSk7Ci0qIHU4IFhVYXJ0TGl0ZV9SZWN2Qnl0ZSh1MzIgQmFzZUFkZHJlc3MpOwotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qCi0qIFNldCB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuIFVzZSB0aGUgWFVMX0NSXyogY29uc3RhbnRzIGRlZmluZWQKLSogYWJvdmUgdG8gY3JlYXRlIHRoZSBiaXQtbWFzayB0byBiZSB3cml0dGVuIHRvIHRoZSByZWdpc3Rlci4KLSoKLSogQHBhcmFtICAgIEJhc2VBZGRyZXNzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotKiBAcGFyYW0gICAgTWFzayBpcyB0aGUgMzItYml0IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyCi0qCi0qIEByZXR1cm4gICBOb25lLgotKgotKiBAbm90ZQkgICAgTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYVWFydExpdGVfbVNldENvbnRyb2xSZWcoQmFzZUFkZHJlc3MsIE1hc2spIFwKLQkJICAgIFhJb19PdXQzMigoQmFzZUFkZHJlc3MpICsgWFVMX0NPTlRST0xfUkVHX09GRlNFVCwgKE1hc2spKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qCi0qIEdldCB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuIFVzZSB0aGUgWFVMX0NSXyogY29uc3RhbnRzIGRlZmluZWQKLSogYWJvdmUgdG8gaW50ZXJwcmV0IHRoZSBiaXQtbWFzayByZXR1cm5lZC4KLSoKLSogQHBhcmFtICAgIEJhc2VBZGRyZXNzIGlzIHRoZQliYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotKgotKiBAcmV0dXJuICAgQSAzMi1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCByZWdpc3Rlci4KLSoKLSogQG5vdGUJICAgIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVhcnRMaXRlX21HZXRDb250cm9sUmVnKEJhc2VBZGRyZXNzKSBcCi0JCSAgICBYSW9fSW4zMigoQmFzZUFkZHJlc3MpICsgWFVMX0NPTlRST0xfUkVHX09GRlNFVCkKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKgotKiBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIuIFVzZSB0aGUgWFVMX1NSXyogY29uc3RhbnRzIGRlZmluZWQKLSogYWJvdmUgdG8gaW50ZXJwcmV0IHRoZSBiaXQtbWFzayByZXR1cm5lZC4KLSoKLSogQHBhcmFtICAgIEJhc2VBZGRyZXNzIGlzIHRoZQliYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotKgotKiBAcmV0dXJuICAgQSAzMi1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdHVzIHJlZ2lzdGVyLgotKgotKiBAbm90ZQkgICAgTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYVWFydExpdGVfbUdldFN0YXR1c1JlZyhCYXNlQWRkcmVzcykgXAotCQkgICAgWElvX0luMzIoKEJhc2VBZGRyZXNzKSArIFhVTF9TVEFUVVNfUkVHX09GRlNFVCkKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKgotKiBDaGVjayB0byBzZWUgaWYgdGhlIHJlY2VpdmVyIGhhcyBkYXRhLgotKgotKiBAcGFyYW0gICAgQmFzZUFkZHJlc3MgaXMgdGhlCWJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0qCi0qIEByZXR1cm4gICBYVFJVRSBpZiB0aGUgcmVjZWl2ZXIgaXMgZW1wdHksIFhGQUxTRSBpZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQuCi0qCi0qIEBub3RlCSAgICBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhVYXJ0TGl0ZV9tSXNSZWNlaXZlRW1wdHkoQmFzZUFkZHJlc3MpIFwKLQkgICghKFhVYXJ0TGl0ZV9tR2V0U3RhdHVzUmVnKChCYXNlQWRkcmVzcykpICYgWFVMX1NSX1JYX0ZJRk9fVkFMSURfREFUQSkpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFuc21pdHRlciBpcyBmdWxsLgotKgotKiBAcGFyYW0gICAgQmFzZUFkZHJlc3MgaXMgdGhlCWJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0qCi0qIEByZXR1cm4gICBYVFJVRSBpZiB0aGUgdHJhbnNtaXR0ZXIgaXMgZnVsbCwgWEZBTFNFIG90aGVyd2lzZS4KLSoKLSogQG5vdGUJICAgIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVhcnRMaXRlX21Jc1RyYW5zbWl0RnVsbChCYXNlQWRkcmVzcykgXAotCQkoWFVhcnRMaXRlX21HZXRTdGF0dXNSZWcoKEJhc2VBZGRyZXNzKSkgJiBYVUxfU1JfVFhfRklGT19GVUxMKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qCi0qIENoZWNrIHRvIHNlZSBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuCi0qCi0qIEBwYXJhbSAgICBCYXNlQWRkcmVzcyBpcyB0aGUJYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKLSoKLSogQHJldHVybiAgIFhUUlVFIGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgWEZBTFNFIG90aGVyd2lzZS4KLSoKLSogQG5vdGUJICAgIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVhcnRMaXRlX21Jc0ludHJFbmFibGVkKEJhc2VBZGRyZXNzKSBcCi0JCShYVWFydExpdGVfbUdldFN0YXR1c1JlZygoQmFzZUFkZHJlc3MpKSAmIFhVTF9TUl9JTlRSX0VOQUJMRUQpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogRW5hYmxlIHRoZSBkZXZpY2UgaW50ZXJydXB0LiBQcmVzZXJ2ZSB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCi0qCi0qIEBwYXJhbSAgICBCYXNlQWRkcmVzcyBpcyB0aGUJYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKLSoKLSogQHJldHVybiAgIE5vbmUuCi0qCi0qIEBub3RlCSAgICBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhVYXJ0TGl0ZV9tRW5hYmxlSW50cihCYXNlQWRkcmVzcykgXAotCSAgICAgICBYVWFydExpdGVfbVNldENvbnRyb2xSZWcoKEJhc2VBZGRyZXNzKSwgXAotCQkgICBYVWFydExpdGVfbUdldENvbnRyb2xSZWcoKEJhc2VBZGRyZXNzKSkgfCBYVUxfQ1JfRU5BQkxFX0lOVFIpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogRGlzYWJsZSB0aGUgZGV2aWNlIGludGVycnVwdC4gUHJlc2VydmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyLgotKgotKiBAcGFyYW0gICAgQmFzZUFkZHJlc3MgaXMgdGhlCWJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0qCi0qIEByZXR1cm4gICBOb25lLgotKgotKiBAbm90ZQkgICAgTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYVWFydExpdGVfbURpc2FibGVJbnRyKEJhc2VBZGRyZXNzKSBcCi0JICAgICAgWFVhcnRMaXRlX21TZXRDb250cm9sUmVnKChCYXNlQWRkcmVzcyksIFwKLQkJICBYVWFydExpdGVfbUdldENvbnRyb2xSZWcoKEJhc2VBZGRyZXNzKSkgJiB+WFVMX0NSX0VOQUJMRV9JTlRSKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIFhVYXJ0TGl0ZV9TZW5kQnl0ZSh1MzIgQmFzZUFkZHJlc3MsIHU4IERhdGEpOwotdTggWFVhcnRMaXRlX1JlY3ZCeXRlKHUzMiBCYXNlQWRkcmVzcyk7Ci0KLQotI2VuZGlmCQkgIC8qIGVuZCBvZiBwcm90ZWN0aW9uIG1hY3JvICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2lvLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2lvLmgKaW5kZXggYWEzN2E2MC4uODgwNDcyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvaW8uaApAQCAtMTYsNiArMTYsOCBAQAogI2lmbmRlZiBfX01JQ1JPQkxBWkVfSU9fSF9fCiAjZGVmaW5lIF9fTUlDUk9CTEFaRV9JT19IX18KIAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4RkZGRkZGRkYKIAogI2RlZmluZSByZWFkYihhZGRyKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL3NlcmlhbF94dWFydGxpdGUuaCBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvc2VyaWFsX3h1YXJ0bGl0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2QxZTgzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvc2VyaWFsX3h1YXJ0bGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNCBBdG1hcmsgVGVjaG5vLCBJbmMuCi0gKgotICogWWFzdXNoaSBTSE9KSSA8eWFzaGlAYXRtYXJrLXRlY2huby5jb20+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9hcmNoL3h1YXJ0bGl0ZV9sLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRUIrTUNGLUVWMTIzLmggYi9pbmNsdWRlL2NvbmZpZ3MvRUIrTUNGLUVWMTIzLmgKaW5kZXggNDE3MDk5ZS4uMzI0ZWI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0VCK01DRi1FVjEyMy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9FQitNQ0YtRVYxMjMuaApAQCAtODQsNiArODQsOCBAQAogI2RlZmluZSBDT05GSUdfQ01EX01JSQogI2RlZmluZSBDT05GSUdfQ01EX05FVAogCisjZGVmaW5lIENPTkZJR19NQ0ZUTVIKKwogI2RlZmluZSBDT05GSUdfTUNGRkVDCiAjaWZkZWYgQ09ORklHX01DRkZFQwogIwlkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL001NDc1RVZCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTU0NzVFVkIuaAppbmRleCBhMTljMzQyLi5lODgwNGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTTU0NzVFVkIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTTU0NzVFVkIuaApAQCAtMzAzLDkgKzMwMyw5IEBACiAjZGVmaW5lIENGR19DUzBfQ1RSTAkJMHgwMDEwMTk4MAogCiAjaWZkZWYgQ0ZHX05PUjFTWgotI2RlZmluZSBDRkdfQ1MxX0JBU0UJCTB4RjgwMDAwMDAKKyNkZWZpbmUgQ0ZHX0NTMV9CQVNFCQkweEUwMDAwMDAwCiAjZGVmaW5lIENGR19DUzFfTUFTSwkJKCgoQ0ZHX05PUjFTWiA8PCAyMCkgLSAxKSAmIDB4RkZGRjAwMDEpCi0jZGVmaW5lIENGR19DUzFfQ1RSTAkJMHgwMDAwMEQ4MAorI2RlZmluZSBDRkdfQ1MxX0NUUkwJCTB4MDAxMDFEODAKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX001NDc1RVZCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NNTQ4NUVWQi5oIGIvaW5jbHVkZS9jb25maWdzL001NDg1RVZCLmgKaW5kZXggYjczZTJlMC4uMGY5NTdmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL001NDg1RVZCLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL001NDg1RVZCLmgKQEAgLTI4OSw5ICsyODksOSBAQAogI2RlZmluZSBDRkdfQ1MwX0NUUkwJCTB4MDAxMDE5ODAKIAogI2lmZGVmIENGR19OT1IxU1oKLSNkZWZpbmUgQ0ZHX0NTMV9CQVNFCQkweEY4MDAwMDAwCisjZGVmaW5lIENGR19DUzFfQkFTRQkJMHhFMDAwMDAwMAogI2RlZmluZSBDRkdfQ1MxX01BU0sJCSgoKENGR19OT1IxU1ogPDwgMjApIC0gMSkgJiAweEZGRkYwMDAxKQotI2RlZmluZSBDRkdfQ1MxX0NUUkwJCTB4MDAwMDBEODAKKyNkZWZpbmUgQ0ZHX0NTMV9DVFJMCQkweDAwMTAxRDgwCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9NNTQ4NUVWQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9zZmZzZHIuaCBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX3NmZnNkci5oCmluZGV4IDBlNDllNmMuLjdjODYwZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX3NmZnNkci5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX3NmZnNkci5oCkBAIC0xMzcsNiArMTM3LDcgQEAKICNkZWZpbmUgQ09ORklHX0NNRF9TQVZFUwogI2RlZmluZSBDT05GSUdfQ01EX05BTkQKICNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KKyNkZWZpbmUgQ09ORklHX0NNRF9FTEYJLyogTmVlZGVkIHRvIGxvYWQgSW50ZWdyaXR5IGtlcm5lbC4gKi8KICN1bmRlZiBDT05GSUdfQ01EX0JESQogI3VuZGVmIENPTkZJR19DTURfRlBHQQogI3VuZGVmIENPTkZJR19DTURfU0VUR0VURENSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvcHhhMjU1X2lkcC5oIGIvaW5jbHVkZS9jb25maWdzL3B4YTI1NV9pZHAuaAppbmRleCA0YTljYWRiLi5iN2VhMWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcHhhMjU1X2lkcC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9weGEyNTVfaWRwLmgKQEAgLTIwOCw2ICsyMDgsMTAgQEAKIC8qCQkJInByb3RlY3Qgb2ZmIgkqLwogCiAKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvKiAjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxICovCisKICNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKICNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTE1MjAwCQkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLwogI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2M1MjBfc3B1bmsuaCBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oCmluZGV4IDA1MWIyZTAuLjA3MjY3NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogI2RlZmluZSBDT05GSUdfU1BJX0VFUFJPTSAgICAgICAvKiBTUEkgRUVQUk9NcyBzdWNoIGFzIEFUMjUwMTAgb3IgQVQyNTY0MCAqLwogI2RlZmluZSBDT05GSUdfTVdfRUVQUk9NICAgICAgICAvKiBNaWNyb1dpcmUgRUVQUk9NUyBzdWNoIGFzIEFUOTNMQzQ2ICovCi0jZGVmaW5lIENPTkZJR19EUzE3MjIgICAgICAgICAgIC8qIERhbGxhcyBEUzE3MjIgU1BJIFRlbXBlcmF0dXJlIHByb2JlICovCisjZGVmaW5lIENPTkZJR19EVFRfRFMxNzIyICAgICAgIC8qIERhbGxhcyBEUzE3MjIgU1BJIFRlbXBlcmF0dXJlIHByb2JlICovCiAKIAogLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kYXRhZmxhc2guaCBiL2luY2x1ZGUvZGF0YWZsYXNoLmgKaW5kZXggZjIwYzczOC4uODBmMDYzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kYXRhZmxhc2guaAorKysgYi9pbmNsdWRlL2RhdGFmbGFzaC5oCkBAIC0xMzcsNiArMTM3LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgQVQ0NURCMTYxCTB4MmMKKyNkZWZpbmUgQVQ0NURCMDIxCTB4MTQKICNkZWZpbmUgQVQ0NURCMzIxCTB4MzQKICNkZWZpbmUgQVQ0NURCNjQyCTB4M2MKICNkZWZpbmUgQVQ0NURCMTI4CTB4MTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHR0LmggYi9pbmNsdWRlL2R0dC5oCmluZGV4IDRlOGFhYWQuLjM0MDUzZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHR0LmgKKysrIGIvaW5jbHVkZS9kdHQuaApAQCAtNDAsOSArNDAsMTEgQEAKICNkZWZpbmUgRFRUX0NPTU1FUkNJQUxfTUFYX1RFTVAJNzAJCS8qIDAgLSArNzAgQyAqLwogI2RlZmluZSBEVFRfSU5EVVNUUklBTF9NQVhfVEVNUAk4NQkJLyogLTQwIC0gKzg1IEMgKi8KICNkZWZpbmUgRFRUX0FVVE9NT1RJVkVfTUFYX1RFTVAJMTA1CQkvKiAtNDAgLSArMTA1IEMgKi8KKwogI2lmbmRlZiBDRkdfRFRUX01BWF9URU1QCiAjZGVmaW5lIENGR19EVFRfTUFYX1RFTVAgRFRUX0NPTU1FUkNJQUxfTUFYX1RFTVAKICNlbmRpZgorCiAjaWZuZGVmIENGR19EVFRfSFlTVEVSRVNJUwogI2RlZmluZSBDRkdfRFRUX0hZU1RFUkVTSVMJNQkJLyogNSBDICovCiAjZW5kaWYKQEAgLTU0LDc5ICs1Niw0IEBACiBleHRlcm4gaW50IGR0dF9nZXRfdGVtcChpbnQgc2Vuc29yKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRFRUX0xNNzUpCi0jZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAotI2RlZmluZSBEVFRfQ09ORklHCQkweDEKLSNkZWZpbmUgRFRUX1RFTVBfSFlTVAkJMHgyCi0jZGVmaW5lIERUVF9URU1QX1NFVAkJMHgzCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0RUVF9MTTgxKQotI2RlZmluZSBEVFRfUkVBRF9URU1QCQkweDI3Ci0jZGVmaW5lIERUVF9DT05GSUdfVEVNUAkJMHg0YgotI2RlZmluZSBEVFRfVEVNUF9NQVgJCTB4MzkKLSNkZWZpbmUgRFRUX1RFTVBfSFlTVAkJMHgzYQotI2RlZmluZSBEVFRfQ09ORklHCQkweDQwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0RUVF9EUzE2MjEpCi0jZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4QUEKLSNkZWZpbmUgRFRUX1JFQURfQ09VTlRFUgkweEE4Ci0jZGVmaW5lIERUVF9SRUFEX1NMT1BFCQkweEE5Ci0jZGVmaW5lIERUVF9XUklURV9TVEFSVF9DT05WCTB4RUUKLSNkZWZpbmUgRFRUX1dSSVRFX1NUT1BfQ09OVgkweDIyCi0jZGVmaW5lIERUVF9URU1QX0hJR0gJCTB4QTEKLSNkZWZpbmUgRFRUX1RFTVBfTE9XCQkweEEyCi0jZGVmaW5lIERUVF9DT05GSUcJCTB4QUMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRFRUX0RTMTc3NSkKLSNkZWZpbmUgRFRUX1JFQURfVEVNUAkJMHgwCi0jZGVmaW5lIERUVF9DT05GSUcJCTB4MQotI2RlZmluZSBEVFRfVEVNUF9IWVNUCQkweDIKLSNkZWZpbmUgRFRUX1RFTVBfT1MJCTB4MwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19EVFRfQURNMTAyMSkKLSNkZWZpbmUgRFRUX1JFQURfTE9DX1ZBTFVFCTB4MDAKLSNkZWZpbmUgRFRUX1JFQURfUkVNX1ZBTFVFCTB4MDEKLSNkZWZpbmUgRFRUX1JFQURfU1RBVFVTCQkweDAyCi0jZGVmaW5lIERUVF9SRUFEX0NPTkZJRwkJMHgwMwotI2RlZmluZSBEVFRfUkVBRF9DT05WUkFURQkweDA0Ci0jZGVmaW5lIERUVF9SRUFEX0xPQ19ISUdITElNCTB4MDUKLSNkZWZpbmUgRFRUX1JFQURfTE9DX0xPV0xJTQkweDA2Ci0jZGVmaW5lIERUVF9SRUFEX1JFTV9ISUdITElNCTB4MDcKLSNkZWZpbmUgRFRUX1JFQURfUkVNX0xPV0xJTQkweDA4Ci0jZGVmaW5lIERUVF9SRUFEX0RFVklECQkweGZlCi0KLSNkZWZpbmUgRFRUX1dSSVRFX0NPTkZJRwkweDA5Ci0jZGVmaW5lIERUVF9XUklURV9DT05WUkFURQkweDBhCi0jZGVmaW5lIERUVF9XUklURV9MT0NfSElHSExJTQkweDBiCi0jZGVmaW5lIERUVF9XUklURV9MT0NfTE9XTElNCTB4MGMKLSNkZWZpbmUgRFRUX1dSSVRFX1JFTV9ISUdITElNCTB4MGQKLSNkZWZpbmUgRFRUX1dSSVRFX1JFTV9MT1dMSU0JMHgwZQotI2RlZmluZSBEVFRfV1JJVEVfT05FU0hPVAkweDBmCi0KLSNkZWZpbmUgRFRUX1NUQVRVU19CVVNZCQkweDgwCS8qIDE9QURDIENvbnZlcnRpbmcgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19MSElHSAkweDQwCS8qIDE9TG9jYWwgSGlnaCBUZW1wIExpbWl0IFRyaXBwZWQgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19MTE9XCQkweDIwCS8qIDE9TG9jYWwgTG93IFRlbXAgTGltaXQgVHJpcHBlZCAqLwotI2RlZmluZSBEVFRfU1RBVFVTX1JISUdICTB4MTAJLyogMT1SZW1vdGUgSGlnaCBUZW1wIExpbWl0IFRyaXBwZWQgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19STE9XCQkweDA4CS8qIDE9UmVtb3RlIExvdyBUZW1wIExpbWl0IFRyaXBwZWQgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19PUEVOCQkweDA0CS8qIDE9UmVtb3RlIFNlbnNvciBPcGVuLUNpcmN1aXQgKi8KLQotI2RlZmluZSBEVFRfQ09ORklHX0FMRVJUX01BU0tFRAkweDgwCS8qIDA9QUxFUlQgRW5hYmxlZCwgMT1BTEVSVCBNYXNrZWQgKi8KLSNkZWZpbmUgRFRUX0NPTkZJR19TVEFOREJZCTB4NDAJLyogMD1SdW4sIDE9U3RhbmRieSAqLwotCi0jZGVmaW5lIERUVF9BRE0xMDIxX0RFVklECTB4NDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRFRUX0xNNzMpCi0jZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAotI2RlZmluZSBEVFRfQ09ORklHCQkweDEKLSNkZWZpbmUgRFRUX1RFTVBfSElHSAkJMHgyCi0jZGVmaW5lIERUVF9URU1QX0xPVwkJMHgzCi0jZGVmaW5lIERUVF9DT05UUk9MCQkweDQKLSNkZWZpbmUgRFRUX0lECQkJMHg3Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9EVFRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYl9tNjhrL2JvYXJkLmMgYi9saWJfbTY4ay9ib2FyZC5jCmluZGV4IGFlOTQyZTUuLmQyN2M4OWMgMTAwNjQ0Ci0tLSBhL2xpYl9tNjhrL2JvYXJkLmMKKysrIGIvbGliX202OGsvYm9hcmQuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIHN0YXRpYyBpbnQgaW5pdF9iYXVkcmF0ZSAodm9pZCkKIHsKLQl1Y2hhciB0bXBbNjRdOwkvKiBsb25nIGVub3VnaCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisJY2hhciB0bXBbNjRdOwkvKiBsb25nIGVub3VnaCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCiAJaW50IGkgPSBnZXRlbnZfciAoImJhdWRyYXRlIiwgdG1wLCBzaXplb2YgKHRtcCkpOwogCiAJZ2QtPmJhdWRyYXRlID0gKGkgPiAwKQpAQCAtMjY3LDcgKzI2Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BSQU0KIAlpbnQgaTsKIAl1bG9uZyByZWc7Ci0JdWNoYXIgdG1wWzY0XTsJCS8qIGxvbmcgZW5vdWdoIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKwljaGFyIHRtcFs2NF07CQkvKiBsb25nIGVub3VnaCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCiAjZW5kaWYKIAogCS8qIFBvaW50ZXIgaXMgd3JpdGFibGUgc2luY2Ugd2UgYWxsb2NhdGVkIGEgcmVnaXN0ZXIgZm9yIGl0ICovCkBAIC03NTIsNyArNzUyLDcgQEAKIAkgKi8KIAl7CiAJCXVsb25nIHByYW07Ci0JCXVjaGFyIG1lbXN6WzMyXTsKKwkJY2hhciBtZW1zelszMl07CiAjaWZkZWYgQ09ORklHX1BSQU0KIAkJY2hhciAqczsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldC5jIGIvbmV0L25ldC5jCmluZGV4IDJhMjZiYzAuLmM5NmY1NjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXQuYworKysgYi9uZXQvbmV0LmMKQEAgLTEzOTAsNyArMTM5MCw3IEBACiAJCXB1dHMgKCJHb3QgSVBcbiIpOwogI2VuZGlmCiAJCWlmIChsZW4gPCBJUF9IRFJfU0laRSkgewotCQkJZGVidWcgKCJsZW4gYmFkICVkIDwgJWRcbiIsIGxlbiwgSVBfSERSX1NJWkUpOworCQkJZGVidWcgKCJsZW4gYmFkICVkIDwgJWxkXG4iLCBsZW4sIElQX0hEUl9TSVpFKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAobGVuIDwgbnRvaHMoaXAtPmlwX2xlbikpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2dkYi9NYWtlZmlsZSBiL3Rvb2xzL2dkYi9NYWtlZmlsZQppbmRleCA2MzIxMDNkLi5jNDRjYzhhIDEwMDY0NAotLS0gYS90b29scy9nZGIvTWFrZWZpbGUKKysrIGIvdG9vbHMvZ2RiL01ha2VmaWxlCkBAIC00Nyw3ICs0Nyw3IEBACiBpZmVxICgkKEhPU1RPUyksY3lnd2luKQogCiBhbGw6Ci0uZGVwZW5kOgorJChvYmopLmRlcGVuZDoKIAogZWxzZQkjICEgQ1lHV0lOCiAK