ZGlmZiAtLWdpdCBhL3N5cy9saXZpbmcvYXR0cmlidXRlcy5oIGIvc3lzL2xpdmluZy9hdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyODI5OQotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9saXZpbmcvYXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8vIE1vcmdlbkdyYXVlbiBNVURsaWIKKy8vCisvLyBsaXZpbmcvYXR0cmlidXRlcy5oIC0tIGxpdmluZyBhdHRyaWJ1dGVzCisvLworLy8gJElkOiBhdHRyaWJ1dGVzLmggNjI4MiAyMDA3LTA1LTA5IDIwOjU1OjE3WiBaZXNzdHJhICQKKyAKKyNpZm5kZWYgX19MSVZJTkdfQVRUUklCVVRFU19IX18KKyNkZWZpbmUgX19MSVZJTkdfQVRUUklCVVRFU19IX18KKworLy8gcHJvcGVydGllcworCisjZGVmaW5lIFBfQVRUUklCVVRFUyAgICAgICAgICAgICAgImF0dHJpYnV0ZXMiCisjZGVmaW5lIFBfQVRUUklCVVRFU19PRkZTRVRTICAgICAgImF0dHJpYnV0ZXNfb2Zmc2V0cyIKKyNkZWZpbmUgUF9BVFRSSUJVVEVTX01PRElGSUVSICAgICAiYXR0cmlidXRlc19tb2RpZmllciIKKyNkZWZpbmUgUF9YX0FUVFJfTU9EICAgICAgICAgICAgICAiZXh0ZXJuX2F0dHJpYnV0ZXNfbW9kaWZpZXIiCisjZGVmaW5lIFBfWF9IRUFMVEhfTU9EICAgICAgICAgICAgImV4dGVybl9oZWFsdGhfbW9kaWZpZXIiCisjZGVmaW5lIFBfTV9BVFRSX01PRCAgICAgICAgICAgICAgIm1hZ2ljX2F0dHJpYnV0ZXNfbW9kaWZpZXIiCisjZGVmaW5lIFBfTV9IRUFMVEhfTU9EICAgICAgICAgICAgIm1hZ2ljX2hlYWx0aF9tb2RpZmllciIKKyNkZWZpbmUgUF9BQklMSVRJRVMgICAgICAgICAgICAgICAiYWJpbGl0aWVzIgorI2RlZmluZSBQX1RJTUVEX0FUVFJfTU9ECQkgICJ0aW1lZF9hdHRyX21vZCIKKworLy8gc3BlY2lhbCBkZWZpbmVzCisKKy8qIHN0YW5kYXJkIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgQV9TVFIgInN0ciIKKyNkZWZpbmUgQV9JTlQgImludCIKKyNkZWZpbmUgQV9ERVggImRleCIKKyNkZWZpbmUgQV9DT04gImNvbiIKKworLyogZXJyb3Jjb2RlcyBmb3IgUF9USU1FRF9BVFRSX01PRCAqLworI2RlZmluZSBUQVRUUl9PSwkJCQkwCisjZGVmaW5lIFRBVFRSX05PX1NVQ0hfTU9ESUZJRVIJMQorI2RlZmluZSBUQVRUUl9JTlZBTElEX0FSR1MgIAkyCisKKy8qIGluZGljZXMgdXNlZCBmb3IgUF9USU1FRF9BVFRSX01PRCAqLworI2RlZmluZSBUQVRUUl9PVVREQVRFCQkwCisjZGVmaW5lIFRBVFRSX0RFUEVOREVOVFMJMQorI2RlZmluZSBUQVRUUl9FTlRSSUVTCQkyCQorI2RlZmluZSBUQVRUUl9NT0QgCQkwCisjZGVmaW5lIFRBVFRSX09VVERBVEVEIAkJMQorI2RlZmluZSBUQVRUUl9ERVBFTkRFTlQgCTIKKyNkZWZpbmUgVEFUVFJfTk9USUZZIAkJMworCisvKiBtYXhpbXVtIG9mIGN1bXVsYXRpdmUgYXR0cmlidXRlIG1vZGlmaWVycyAqLworI2RlZmluZSBDVU1VTEFUSVZFX0FUVFJfTElNSVQJNAorCisjZW5kaWYgLy8gX19MSVZJTkdfQVRUUklCVVRFU19IX18KKworI2lmZGVmIE5FRURfUFJPVE9UWVBFUworCisjaWZuZGVmIF9fTElWSU5HX0FUVFJJQlVURVNfSF9QUk9UT19fCisjZGVmaW5lIF9fTElWSU5HX0FUVFJJQlVURVNfSF9QUk9UT19fCisKKy8vIHByb3RvdHlwZXMKKworbm9tYXNrIHB1YmxpYyBpbnQgU2V0VGltZWRBdHRyTW9kaWZpZXIoc3RyaW5nIGtleSwgbWFwcGluZyBtb2RpZmllciwgaW50IG91dGRhdGVkLCBvYmplY3QgZGVwZW5kZW50LCBtaXhlZCBub3RpZnkpOyAgCitub21hc2sgcHVibGljIG1hcHBpbmcgUXVlcnlUaW1lZEF0dHJNb2RpZmllcihzdHJpbmcga2V5KTsKK25vbWFzayBwdWJsaWMgaW50IERlbGV0ZVRpbWVkQXR0ck1vZGlmaWVyKHN0cmluZyBrZXkpOworCitwdWJsaWMgaW50IFNldEF0dHIoc3RyaW5nIGF0dHIsIGludCB2YWwpOworbm9tYXNrIHB1YmxpYyB2b2lkIHJlZ2lzdGVyX21vZGlmaWVyKG9iamVjdCBtb2RpZmllcik7Citub21hc2sgcHVibGljIHZvaWQgZGVyZWdpc3Rlcl9tb2RpZmllcihvYmplY3QgbW9kaWZpZXIpOworCitwdWJsaWMgaW50IFNldEF0dHJpYnV0ZShzdHJpbmcgYXR0ciwgaW50IHZhbCk7CitwdWJsaWMgaW50IFNldFJlYWxBdHRyaWJ1dGUoc3RyaW5nIGF0dHIsIGludCB2YWwpOworcHVibGljIGludCBRdWVyeUF0dHJpYnV0ZShzdHJpbmcgYXR0cik7CitwdWJsaWMgaW50IFF1ZXJ5UmVhbEF0dHJpYnV0ZShzdHJpbmcgYXR0cik7CitwdWJsaWMgaW50IFF1ZXJ5QXR0cmlidXRlT2Zmc2V0KHN0cmluZyBhdHRyKTsKKworcHVibGljIHZvaWQgVXBkYXRlQXR0cmlidXRlcygpOworCitwdWJsaWMgc3RhdHVzIFRlc3RMaW1pdFZpb2xhdGlvbihtYXBwaW5nIGNoZWNrKTsKKworLy8gU2V0LSB1bmQgUXVlcnktTWV0aG9kZW4KK3N0YXRpYyBtYXBwaW5nIF9zZXRfYXR0cmlidXRlcyhtYXBwaW5nIGFycik7CitzdGF0aWMgbWFwcGluZyBfcXVlcnlfYXR0cmlidXRlcygpOworc3RhdGljIG1hcHBpbmcgX3NldF9hdHRyaWJ1dGVzX29mZnNldHMobWFwcGluZyBhcnIpOworc3RhdGljIG1hcHBpbmcgX3F1ZXJ5X2F0dHJpYnV0ZXNfb2Zmc2V0cygpOworc3RhdGljIG1peGVkICAgX3NldF9hdHRyaWJ1dGVzX21vZGlmaWVyKG1peGVkIGFycik7CitzdGF0aWMgbWFwcGluZyBfcXVlcnlfYXR0cmlidXRlc19tb2RpZmllcigpOworc3RhdGljIG1peGVkIF9xdWVyeV90aW1lZF9hdHRyX21vZCgpOworCisvLyBpbnRlcm5hbAorbm9tYXNrIHByb3RlY3RlZCB2b2lkIGF0dHJpYnV0ZV9oYigpOworcHJvdGVjdGVkIHZvaWQgYWRkX29mZnNldHMobWFwcGluZyBhcnIpOworcHJvdGVjdGVkIG5vbWFzayB2b2lkIGNhbGN1bGF0ZV92YWxpZF9tb2RpZmllcnMoKTsKK3Byb3RlY3RlZCBub21hc2sgdm9pZCBub3RpZnlJbnZhbGlkTW9kaWZpZXJzKCk7Citwcm90ZWN0ZWQgaW50IF9maWx0ZXJhdHRyX3N0cihpbnQgdmFsKTsKK3Byb3RlY3RlZCBpbnQgX2ZpbHRlcmF0dHJfZGV4KGludCB2YWwpOworcHJvdGVjdGVkIGludCBfZmlsdGVyYXR0cl9pbnQoaW50IHZhbCk7Citwcm90ZWN0ZWQgaW50IF9maWx0ZXJhdHRyX2NvbihpbnQgdmFsKTsKK25vbWFzayBwcm90ZWN0ZWQgdm9pZCBub3RpZnlFeHBpcmVkTW9kaWZpZXJzKG1hcHBpbmcgbm90cyk7CisKKyNlbmRpZiAvLyBfX0xJVklOR19BVFRSSUJVVEVTX0hfUFJPVE9fXworCisjZW5kaWYgLy8gTkVFRF9QUk9UT1lQRVMKZGlmZiAtLWdpdCBhL3N5cy9saXZpbmcvY2xvdGhpbmcuaCBiL3N5cy9saXZpbmcvY2xvdGhpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODc1YzYxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2xpdmluZy9jbG90aGluZy5oCkBAIC0wLDAgKzEsMTIgQEAKKy8vIE1vcmdlbkdyYXVlbiBNVURsaWIKKy8vCisvLyBsaXZpbmcvY2xvdGhpbmcuaCAtLSBLb25zdGFudGVuIHVuZCBQZmFkZSBydW5kIHVtIEJla2xlaWR1bmcgdm9uIExlYmV3ZXNlbgorLy8KKy8vICRJZDogbW9uZXloYW5kbGVyLmgsdiAzLjEgMTk5Ny8wMi8xMiAxMzoyOTowOSBXYXJnb24gRXhwICUKKworI2lmbmRlZiBfX0xJVklOR19DTE9USElOR19IX18KKyNkZWZpbmUgX19MSVZJTkdfQ0xPVEhJTkdfSF9fCisKKyNkZWZpbmUgUF9DTE9USElORyAgICAgICAgICAgICAgICAic3RkOmNsb3RoaW5nIgorCisjZW5kaWYgLy8gX19MSVZJTkdfQ0xPVEhJTkdfSF9fCmRpZmYgLS1naXQgYS9zeXMvbGl2aW5nL2NvbWJhdC5oIGIvc3lzL2xpdmluZy9jb21iYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhmNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2xpdmluZy9jb21iYXQuaApAQCAtMCwwICsxLDE2NiBAQAorLy8gTW9yZ2VuR3JhdWVuIE1VRGxpYgorLy8KKy8vIGxpdmluZy9jb21iYXQuaCAtLSBjb21iYXQgaGVhZGVyCisvLworLy8gJElkOiBjb21iYXQuaCA5MDA4IDIwMTUtMDEtMDYgMTc6MjA6MTdaIFplc3N0cmEgJAorCisjaWZuZGVmIF9fTElWSU5HX0NPTUJBVF9IX18KKyNkZWZpbmUgX19MSVZJTkdfQ09NQkFUX0hfXworCisvLyBwcm9wZXJ0aWVzCisjZGVmaW5lIFBfRElTQUJMRV9BVFRBQ0sgICAgICAgICAgImRpc2FibGVfYXR0YWNrIgorI2RlZmluZSBQX05FWFRfRElTQUJMRV9BVFRBQ0sgICAgICJuZXh0X2Rpc2FibGVfYXR0YWNrIgorCisjZGVmaW5lIFBfQ09SUFNFICAgICAgICAgICAgICAgICAgImNvcnBzZSIKKyNkZWZpbmUgUF9OT0NPUlBTRSAgICAgICAgICAgICAgICAibm9jb3Jwc2UiCisKKy8vIGJpdHRlIFBfQVJNT1VSUyBhdWNoIGluIC9zZWN1cmUvbWFzdGVyLmggYWVuZGVybiwgZmFsbHMgZGFzIG1hbCBnZWFlbmRlcnQKKy8vIHdpcmQuCisjZGVmaW5lIFBfQVJNT1VSUyAgICAgICAgICAgICAgICAgImFybW91cnMiCisjZGVmaW5lIFBfQk9EWSAgICAgICAgICAgICAgICAgICAgImJvZHkiCisKKyNkZWZpbmUgUF9SRVNJU1RBTkNFX1NUUkVOR1RIUyAgICAicmVzaXN0YW5jZV9zdHJlbmd0aHMiCisjZGVmaW5lIFBfUkVTSVNUQU5DRV9NT0RJRklFUiAgICAgInJzdHI6bW9kIgorI2RlZmluZSBQX1JFU0lTVEFOQ0UgICAgICAgICAgICAgICJyZXNpc3RhbmNlIgorI2RlZmluZSBQX1ZVTE5FUkFCSUxJVFkgICAgICAgICAgICJ2dWxuZXJhYmlsaXR5IgorI2RlZmluZSBQX1RPVEFMX0FDIAkgICAgICAgICAgInRvdGFsX2FjIgorI2RlZmluZSBQX1RPVEFMX1dDICAgICAgICAgICAgICAgICJ0b3RhbF93YyIKKworI2RlZmluZSBQX0hBTkRTICAgICAgICAgICAgICAgICAgICJoYW5kcyIKKyNkZWZpbmUgUF9NQVhfSEFORFMgICAgICAgICAgICAgICAibWF4X2hhbmRzIgorI2RlZmluZSBQX1VTRURfSEFORFMgICAgICAgICAgICAgICJ1c2VkX2hhbmRzIgorI2RlZmluZSBQX0ZSRUVfSEFORFMgICAgICAgICAgICAgICJmcmVlX2hhbmRzIgorI2RlZmluZSBQX0hBTkRTX1VTRURfQlkgICAgICAgICAgICJoYW5kc191c2VkX2J5IgorCisjZGVmaW5lIFBfQVRUQUNLX0JVU1kJICAgICAgICAgICJhdHRhY2tfYnVzeSIKKyNkZWZpbmUgUF9OT19BVFRBQ0sgICAgICAgICAgICAgICAibm9fYXR0YWNrIgorCisjZGVmaW5lIFBfUFJFRkVSRURfRU5FTVkgICAgICAgICAgInByZWZfZW5lbXkiCisjZGVmaW5lIFBfU0hPV19BVFRBQ0tfTVNHICAgICAgICAgInNob3dfYXR0YWNrX21zZyIKKworI2RlZmluZSBQX0xBU1RfREFNQUdFICAgICAgICAgICAgICJsYXN0X2RhbWFnZSIKKyNkZWZpbmUgUF9MQVNUX0RBTVRZUEVTICAgICAgICAgICAibGFzdF9kYW10eXBlcyIKKyNkZWZpbmUgUF9MQVNUX0RBTVRJTUUgICAgICAgICAgICAibGFzdF9kYW10aW1lIgorCisjZGVmaW5lIFBfREVBVEhfU1BPTlNPUkVEX0JZICAgICAgInJlc3BvbnNpYmxlX3dpemFyZF9mb3JfZGVhdGgiCisjZGVmaW5lIFBfS0lMTEVSICAgICAgICAgICAgICAgICAgImtpbGxlciIKKyNkZWZpbmUgUF9NVVJERVJfTVNHICAgICAgICAgICAgICAibXVyZGVyX21zZyIKKyNkZWZpbmUgUF9GT1JDRV9NVVJERVJfTVNHICAgICAgICAiZm9yY2VfbXVyZGVyX21zZyIKKyNkZWZpbmUgUF9FTkVNWV9ERUFUSF9TRVFVRU5DRSAgICAiZW5lbXlfZGVhdGhfc2VxdWVuY2UiCisjZGVmaW5lIFBfTkVYVF9ERUFUSF9TRVFVRU5DRSAgICAgInBfbGliX25leHRfZGVhdGhfc2VxdWVuY2UiCisjZGVmaW5lIFBfREVBVEhfTVNHICAgICAgICAgICAgICAgImRlYXRoX21zZyIKKworI2RlZmluZSBQX0hVTlRUSU1FICAgICAgICAgICAgICAgICJwX2xpYl9odW50dGltZSIKKworLy8gQmVmcmllZGU6IEdpbGRlbnphZWhsZXIKKyNkZWZpbmUgUF9QRUFDRV9ISVNUT1JZICAgICAgICAgICAiX3BlYWNlX2hpc3RvcnkiCisKKyNkZWZpbmUgRElTQUJMRV9UT09fRUFSTFkgCSAgLTEwMDExMQorCisjZGVmaW5lIEVORU1ZX0hVTlRUSU1FCQkwCisKKy8vIEhlbGZlci1OUEMKKy8vIGEpIE5QQzogd2VsY2hlbSBTcGllbGVyIGlzdCBkaWVzZXIgTlBDIHp1Z2VvcmRuZXQsIGQuaC4gZnVlciB3ZW4ga2FlbXBmdAorLy8gICAgICAgICBlcj8gQXJyYXk6ICh7IHNwaWVsZXJvYmplY3QsIGZsYWdzIH0pCisvLyBiKSBTcGllbGVyOiB3ZWxjaGUgTlBDIHNpbmQgZGllc2VtIFNwaWVsZXIgenVnZW9yZG5ldC4gTWFwcGluZyBtaXQgT2JqZWt0ZW4KKy8vICAgICAgICAgICAgIHVuZCBGbGFncy4KKyNkZWZpbmUgUF9IRUxQRVJfTlBDICAgICAgICAgICAgICAic3RkOmhlbHBlcl9ucGMiCisvLyBGbGFnczoKKy8vIDIgS2xhc3NlbiB2b24gSGVsZmVybiBtb21lbnRhbjogR2lsZGVuLU5QQyB1bmQgc29uc3RpZ2UuCisjZGVmaW5lIEdVSUxEX0hFTFBFUiAgICAgMHgxCisjZGVmaW5lIE1JU0NfSEVMUEVSICAgICAgMHgyCisvLyBXZW5uIGdlc2V0enQsIGlzdCBkZXIgSGVsZmVyIGV4a2x1c2l2IHVuZCBsYWVzc3Qga2VpbmVuIGFuZGVyZW4gaW4gZGVyCisvLyBkZXJzZWxiZW4gS2xhc3NlIHp1LgorI2RlZmluZSBFWENMVVNJVkVfSEVMUEVSIDB4NDAwMDAwMDAKKy8vIFdlbm4gZ2VzZXR6dCwgaXN0IGRlciBIZWxmZXIgJ2FrdGl2JywgZC5oLiBuaWNodCBudXIgU2NobGFnZmFlbmdlcgorI2RlZmluZSBBQ1RJVkVfSEVMUEVSICAgIDB4MjAwMDAwMDAKKworLy8gaW5kaXZpZHVlbGxlIFNjaGFkZW5zbWVsZHVuZ2VuIGVpbmVzIExlYmV3ZXNlbnMKKyNkZWZpbmUgUF9EQU1BR0VfTVNHICAgICAic3RkX3BfZGFtX21zZyIKKworI2VuZGlmIC8vIF9fTElWSU5HX0NPTUJBVF9IX18KKworI2lmZGVmIE5FRURfUFJPVE9UWVBFUworCisjaWZuZGVmIF9fTElWSU5HX0NPTUJBVF9IX1BST1RPX18KKyNkZWZpbmUgX19MSVZJTkdfQ09NQkFUX0hfUFJPVE9fXworCisvLyBwcm90b3R5cGVzCitwdWJsaWMgaW50IEtpbGwob2JqZWN0IG9iKTsKK3B1YmxpYyB2b2lkIEF0dGFjazIob2JqZWN0IGVuZW15KTsKK3B1YmxpYyB2b2lkIEF0dGFjayhvYmplY3QgZW5lbXkpOworcHVibGljIHZvaWQgQWRkRGVmZW5kZXIob2JqZWN0IGZyaWVuZCk7CitwdWJsaWMgdm9pZCBSZW1vdmVEZWZlbmRlcihvYmplY3QgZnJpZW5kKTsKK3B1YmxpYyB2b2lkIEluZm9ybURlZmVuZChvYmplY3QgZW5lbXkpOworcHVibGljIG1peGVkIERlZmVuZE90aGVyKGludCBkYW0sIHN0cmluZ3xzdHJpbmcqIGRhbV90eXBlLCBpbnR8bWFwcGluZyBzcGVsbCwgb2JqZWN0IGVuZW15KTsKK3B1YmxpYyBpbnQgRGVmZW5kKGludCBkYW0sIHN0cmluZ3xzdHJpbmcqIGRhbV90eXBlLCBpbnR8bWFwcGluZyBzcGVsbCwgb2JqZWN0IGVuZW15KTsKK3B1YmxpYyB2b2lkIENoZWNrV2ltcHlBbmRGbGVlKCk7CitwdWJsaWMgdmFyYXJncyB2b2lkIEZsZWUob2JqZWN0IG9sZGVudiwgaW50IGZvcmNlKTsKKworcHVibGljIHZhcmFyZ3MgaW50IFN0b3BIdW50Rm9yKG9iamVjdCBhcmcsIGludCBzaWxlbnQpOworcHVibGljIHZhcmFyZ3MgbWFwcGluZyBTdG9wSHVudGluZ01vZGUoaW50IHNpbGVudCk7CisKK3B1YmxpYyB2b2lkIFVwZGF0ZVJlc2lzdGFuY2VTdHJlbmd0aHMoKTsKK3B1YmxpYyB2YXJhcmdzIGludCBBZGRSZXNpc3RhbmNlTW9kaWZpZXIobWFwcGluZyBtb2QsIHN0cmluZyBhZGQpOworcHVibGljIHZhcmFyZ3Mgdm9pZCBSZW1vdmVSZXNpc3RhbmNlTW9kaWZpZXIoc3RyaW5nIGFkZCk7CitwdWJsaWMgZmxvYXQgQ2hlY2tSZXNpc3RhbmNlKHN0cmluZyogZGFtX3R5cGUpOworCitwdWJsaWMgaW50IEluc2VydFNpbmdsZUVuZW15KG9iamVjdCBvYik7CitwdWJsaWMgaW50IEluc2VydEVuZW15KG9iamVjdCBvYik7CitwdWJsaWMgaW50IElzRW5lbXkob2JqZWN0IHdlcik7CitwdWJsaWMgb2JqZWN0ICpQcmVzZW50RW5lbWllcygpOworcHVibGljIG9iamVjdCBRdWVyeVByZWZlcmVkRW5lbXkoKTsKK3B1YmxpYyB2YXJhcmdzIG9iamVjdCBTZWxlY3RFbmVteShvYmplY3QgKmhlcmUpOworcHVibGljIDxvYmplY3QqfGludCo+KiBRdWVyeUVuZW1pZXMoKTsKK3B1YmxpYyBtYXBwaW5nIEdldEVuZW1pZXMoKTsKKyNpZiBfX1ZFUlNJT05fTUFKT1JfXz49MyAmJiBfX1ZFUlNJT05fTUlOT1JfXz49NSAmJiAoX19WRVJTSU9OX01JQ1JPX18+MCB8fCAoX19WRVJTSU9OX01JQ1JPX189PTAgJiYgX19WRVJTSU9OX1BBVENIX18+PTIpKQorcHVibGljIG1hcHBpbmcgU2V0RW5lbWllcyg8b2JqZWN0KnxpbnQqPiogbXllbmVtaWVzKTsKKyNlbHNlCitwdWJsaWMgbWFwcGluZyBTZXRFbmVtaWVzKG1peGVkICpteWVuZW1pZXMpOworI2VuZGlmCitwdWJsaWMgbWl4ZWQgRW5lbXlQcmVzZW50KCk7CitwdWJsaWMgbWl4ZWQgSW5GaWdodCgpOworcHVibGljIGludCBDaGVja0VuZW15KG9iamVjdCBvYik7CisKK3B1YmxpYyBpbnQgU3BlbGxEZWZlbmQob2JqZWN0IGNhc3RlciwgbWFwcGluZyBzaW5mbyk7CisKK3B1YmxpYyBvYmplY3R8b2JqZWN0KiBRdWVyeUFybW91ckJ5VHlwZShzdHJpbmcgdHlwZSk7CisKK3B1YmxpYyB2YXJhcmdzIGludCBVc2VIYW5kcyhvYmplY3Qgb2IsIGludCBudW0pOworcHVibGljIHZhcmFyZ3MgaW50IEZyZWVIYW5kcyhvYmplY3Qgb2IpOworCitwdWJsaWMgdm9pZCBJbml0QXR0YWNrKCk7CitwdWJsaWMgdm9pZCBFeGl0QXR0YWNrKCk7CisKK3B1YmxpYyBpbnQgUGFjaWZ5KG9iamVjdCBjYXN0ZXIpOworCitwdWJsaWMgdmFyYXJncyBpbnQgU3RvcEh1bnRJRChzdHJpbmcgc3RyLCBpbnQgc2lsZW50KTsKK3B1YmxpYyB2b2lkIFN0b3BIdW50VGV4dChvYmplY3QgYXJnKTsKK3B1YmxpYyB2YXJhcmdzIHZvaWQgRXhlY3V0ZU1pc3NpbmdBdHRhY2tzKG9iamVjdCAqcmVtb3ZlX2F0dGFja2Vycyk7CisKKy8vIFF1ZXJ5LSB1bmQgU2V0LU1ldGhvZGVuCitzdGF0aWMgaW50ICAgICBfcXVlcnlfYXR0YWNrX2J1c3koKTsKK3N0YXRpYyBpbnQgICAgIF9xdWVyeV9mcmVlX2hhbmRzKCk7CitzdGF0aWMgbWl4ZWQgICBfcXVlcnlfaGFuZHMoKTsKK3N0YXRpYyBtaXhlZCAgKl9xdWVyeV9oYW5kc191c2VkX2J5KCk7CitzdGF0aWMgbWFwcGluZyBfcXVlcnlfcmVzaXN0YW5jZV9zdHJlbmd0aHMoKTsKK3N0YXRpYyBpbnQgICAgIF9xdWVyeV90b3RhbF9hYygpOworc3RhdGljIGludCAgICAgX3F1ZXJ5X3RvdGFsX3djKCk7CitzdGF0aWMgaW50ICAgICBfcXVlcnlfdXNlZF9oYW5kcygpOworc3RhdGljIGludCAgICAgX3NldF9hdHRhY2tfYnVzeShtaXhlZCB2YWwpOworc3RhdGljIGludCAgICAgX3NldF9kaXNhYmxlX2F0dGFjayhpbnQgdmFsKTsKK3N0YXRpYyBtaXhlZCAgIF9zZXRfaGFuZHMobWl4ZWQgaCk7CitzdGF0aWMgbWl4ZWQgICBfc2V0X3Jlc2lzdGFuY2UobWl4ZWQgYXJnKTsKK3N0YXRpYyBpbnQgICAgIF9zZXRfdXNlZF9oYW5kcyhpbnQgbmV3X251bSk7CitzdGF0aWMgbWl4ZWQgICBfc2V0X3Z1bG5lcmFiaWxpdHkobWl4ZWQgYXJnKTsKK3N0YXRpYyBpbnQgICAgIF9zZXRfd2ltcHkoaW50IGkpOworCisvLyBJbnRlcm5hbAorcHJvdGVjdGVkIHZvaWQgU2tpbGxSZXNUcmFuc2ZlcihtYXBwaW5nIGZyb21fTSwgbWFwcGluZyB0b19NKTsKK3Byb3RlY3RlZCB2b2lkIEludGVybmFsTW9kaWZ5QXR0YWNrKG1hcHBpbmcgYWluZm8pOworcHJvdGVjdGVkIHZvaWQgSW50ZXJuYWxNb2RpZnlEZWZlbmQoaW50IGRhbSwgc3RyaW5nKiBkdCwgbWFwcGluZyBzcGVsbCwgb2JqZWN0IGVuZW15KTsKK3Byb3RlY3RlZCBzdHJpbmcgbWVzcyhzdHJpbmcgbXNnLG9iamVjdCBtZSxvYmplY3QgZW5lbXkpOworIAorI2VuZGlmIC8vIF9fTElWSU5HX0NPTUJBVF9IX1BST1RPX18KKworI2VuZGlmCS8vIE5FRURfUFJPVE9ZUEVTCmRpZmYgLS1naXQgYS9zeXMvbGl2aW5nL2NvbW0uaCBiL3N5cy9saXZpbmcvY29tbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTA2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvbGl2aW5nL2NvbW0uaApAQCAtMCwwICsxLDEwMSBAQAorLy8gTW9yZ2VuR3JhdWVuIE1VRGxpYgorLy8KKy8vIGxpdmluZy9jb21tLmggLS0gY29tbXVuaWNhdGlvbiBtb2R1bGUgcHJvcGVydGllcyBmb3IgTGl2aW5ncworLy8KKy8vICRJZDogY29tbS5oLHYgMy4zIDIwMDAvMDIvMDkgMTU6NTY6MjUgUGFkcmVpYyBFeHAgJAorCisjaWZuZGVmIF9fTElWSU5HX0NPTU1fSF9fCisjZGVmaW5lIF9fTElWSU5HX0NPTU1fSF9fCisKKyNpbmNsdWRlIDxicmVha19zdHJpbmcuaD4KKworLy8gRmxhZ3MgZnVlciBSZWNlaXZlTXNnKCkuCisvLyBUaGUgQlMtRmxhZ3MgTVVTVCBhbHdheXMgYmUgZXF1YWwgdG8gdGhlIG9uZSBkZWZpbmVkIGZvciBicmVha19zdHJpbmchCisjZGVmaW5lIE1TR19CU19MRUFWRV9MRlMgICAgQlNfTEVBVkVfTVlfTEZTICAgIC8vMQorI2RlZmluZSBNU0dfQlNfU0lOR0xFX1NQQUNFIEJTX1NJTkdMRV9TUEFDRSAgICAvLzIKKyNkZWZpbmUgTVNHX0JTX0JMT0NLICAgICAgICBCU19CTE9DSyAgICAgICAgICAgLy80CisjZGVmaW5lIE1TR19CU19OT19QQVJJTkRFTlQgQlNfTk9fUEFSSU5ERU5UICAgIC8vOAorI2RlZmluZSBNU0dfQlNfSU5ERU5UX09OQ0UgIEJTX0lOREVOVF9PTkNFICAgICAvLzE2CisjZGVmaW5lIE1TR19CU19QUkVQX0lOREVOVCAgQlNfUFJFUEVORF9JTkRFTlQgIC8vMzIKKy8vIEZsYWdzIDwgMTAyNCAoMl4xMCkgcmVzZXJ2aWVydCBmdWVyIEJTCisjZGVmaW5lIE1TR19ET05UX0JVRkZFUiAgMTAyNAorI2RlZmluZSBNU0dfRE9OVF9TVE9SRSAgIDIwNDgKKyNkZWZpbmUgTVNHX0RPTlRfV1JBUCAgICA0MDk2CisjZGVmaW5lIE1TR19ET05UX0lHTk9SRSAgODE5MgorLy8gRmxhZ3MgPCAxMDQ4NTc2ICgyXjIwKSByZXNlcnZpZXJ0IGZ1ZXIgRmxhZ3MKKyNkZWZpbmUgTVNHX0FMTF9CU19GTEFHUyAoQlNfTEVBVkVfTVlfTEZTIHwgQlNfU0lOR0xFX1NQQUNFIHwgQlNfQkxPQ0tcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQlNfTk9fUEFSSU5ERU5UIHwgQlNfSU5ERU5UX09OQ0VcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHxCU19QUkVQRU5EX0lOREVOVCkKKyNkZWZpbmUgTVNHX0FMTF9GTEFHUyAoTVNHX0RPTlRfQlVGRkVSIHwgTVNHX0RPTlRfU1RPUkUgfCBNU0dfRE9OVF9XUkFQXAorICAgICAgICAgICAgICAgICAgICAgIHwgTVNHX0RPTlRfSUdOT1JFIHwgTVNHX0FMTF9CU19GTEFHUykKKworLy8gTmFjaHJpY2h0ZW50eXBlbiwgV2VydGUgYWIgMl4yMAorI2RlZmluZSBNVF9VTktOT1dOICAgIDAKKyNkZWZpbmUgTVRfTE9PSyAgICAgICAxMDQ4NTc2CisjZGVmaW5lIE1UX0xJU1RFTiAgICAgMjA5NzE1MgorI2RlZmluZSBNVF9GRUVMICAgICAgIDQxOTQzMDQKKyNkZWZpbmUgTVRfVEFTVEUgICAgICA4Mzg4NjA4CisjZGVmaW5lIE1UX1NNRUxMICAgICAgMTY3NzcyMTYKKyNkZWZpbmUgTVRfTUFHSUMgICAgICAzMzU1NDQzMgorI2RlZmluZSBNVF9OT1RJRklDQVRJT04gNjcxMDg4NjQKKyNkZWZpbmUgTVRfQ09NTSAgICAgICAxMzQyMTc3MjgKKyNkZWZpbmUgTVRfRkFSICAgICAgICAyNjg0MzU0NTYKKyNkZWZpbmUgTVRfREVCVUcgICAgICA1MzY4NzA5MTIKKyNkZWZpbmUgTVRfTkVXUyAgICAgICAxMDczNzQxODI0CisKKy8vIEFrdGlvbmVuCisvLyBCZWkgTUFfVU5LTk9XTiB3aXJkIGRpZSBBa3Rpb24gYXVzIHF1ZXJ5X3ZlcmIoKSBnZXJhdGVuLiBXZW5uIGRhcyBuaWNodAorLy8gZXhpc3RpZXJ0LCBibGVpYnQgZGllIEFrdGlvbiBNQV9VTktOT1dOLgorI2RlZmluZSBNQV9VTktOT1dOICAgIDAKKyNkZWZpbmUgTUFfUFVUICAgICAgICAid2lyZiIKKyNkZWZpbmUgTUFfVEFLRSAgICAgICAibmltbSIKKyNkZWZpbmUgTUFfTU9WRV9JTiAgICAibW92ZV9pbiIKKyNkZWZpbmUgTUFfTU9WRV9PVVQgICAibW92ZV9vdXQiCisjZGVmaW5lIE1BX01PVkUgICAgICAgIm1vdmUiCisjZGVmaW5lIE1BX0ZJR0hUICAgICAgInRvZXRlIgorI2RlZmluZSBNQV9XSUVMRCAgICAgICJ6dWVja2UiCisjZGVmaW5lIE1BX1VOV0lFTEQgICAgInN0ZWNrZSIKKyNkZWZpbmUgTUFfV0VBUiAgICAgICAidHJhZ2UiCisjZGVmaW5lIE1BX1VOV0VBUiAgICAgInppZWhlIgorI2RlZmluZSBNQV9FQVQgICAgICAgICJpc3MiCisjZGVmaW5lIE1BX0RSSU5LICAgICAgInRyaW5rZSIKKyNkZWZpbmUgTUFfU1BFTEwgICAgICAiemF1YmVyZSIKKyNkZWZpbmUgTUFfTE9PSyAgICAgICAidW50ZXJzdWNoZSIKKyNkZWZpbmUgTUFfTElTVEVOICAgICAibGF1c2NoZSIKKyNkZWZpbmUgTUFfRkVFTCAgICAgICAidGFzdGUiCisjZGVmaW5lIE1BX1NNRUxMICAgICAgInJpZWNoZSIKKyNkZWZpbmUgTUFfU0VOU0UgICAgICAiZXJzcHVlcmVuIgorI2RlZmluZSBNQV9SRUFEICAgICAgICJsaWVzIgorI2RlZmluZSBNQV9VU0UgICAgICAgICJiZW51dHplIgorI2RlZmluZSBNQV9TQVkgICAgICAgICJzYWdlIgorI2RlZmluZSBNQV9SRU1PVkUgICAgICJyZW1vdmUiCisjZGVmaW5lIE1BX0NIQU5ORUwgICAgImViZW5lbiIKKyNkZWZpbmUgTUFfRU1PVEUgICAgICAiZW1vdGUiCisjZGVmaW5lIE1BX1NIT1VUICAgICAgInJ1ZmUiCisjZGVmaW5lIE1BX1NIT1VUX1NFRlVOICJzaG91dCIKKyNkZWZpbmUgTUFfVEVMTCAgICAgICAidGVpbGVtaXQiCisKKy8vIFJ1ZWNrZ2FiZXdlcnRlIHZvbiBSZWNlaXZlTXNnKCkKKyNkZWZpbmUgTVNHX0RFTElWRVJFRCAgICAxCisjZGVmaW5lIE1TR19CVUZGRVJFRCAgICAgMgorI2RlZmluZSBNU0dfRkFJTEVEICAgICAgLTEKKyNkZWZpbmUgTVNHX0lHTk9SRUQgICAgIC0yCisjZGVmaW5lIE1TR19WRVJCX0lHTiAgICAtMworI2RlZmluZSBNU0dfTVVEX0lHTiAgICAgLTQKKyNkZWZpbmUgTVNHX1NFTlNFX0JMT0NLIC01CisjZGVmaW5lIE1TR19CVUZGRVJfRlVMTCAtNgorCisjZW5kaWYgLy8gX19MSVZJTkdfQ09NTV9IX18KKworI2lmZGVmIE5FRURfUFJPVE9UWVBFUworCisjaWZuZGVmIF9fTElWSU5HX0NPTU1fSF9QUk9UT19fCisjZGVmaW5lIF9fTElWSU5HX0NPTU1fSF9QUk9UT19fCisKK3B1YmxpYyB2YXJhcmdzIGludCBSZWNlaXZlTXNnKHN0cmluZyBtc2csIGludCBtc2dfdHlwZSwgc3RyaW5nIG1zZ19hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbXNnX3ByZWZpeCwgb2JqZWN0IG9yaWdpbik7CisKKyNlbmRpZiAvLyBfX0xJVklOR19DT01NX0hfUFJPVE9fXworCisjZW5kaWYgLy8gTkVFRF9QUk9UT1lQRVMKKwpkaWZmIC0tZ2l0IGEvc3lzL2xpdmluZy9kZXNjcmlwdGlvbi5oIGIvc3lzL2xpdmluZy9kZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMDdmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvbGl2aW5nL2Rlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfX0xJVklOR19ERVNDUklQVElPTl9IX18KKyNkZWZpbmUgX19MSVZJTkdfREVTQ1JJUFRJT05fSF9fCisKKy8vIHByb3BlcnRpZXMKKworI2RlZmluZSBQX0dVSUxEICAgICAgICAgICAgICAgICAgICJndWlsZCIKKyNkZWZpbmUgUF9WSVNJQkxFX0dVSUxEICAgICAgICAgICAidmlzaWJsZV9ndWlsZCIKKworI2RlZmluZSBQX0VYVFJBX0xPT0sgICAgICAgICAgICAgICJleHRyYWxvb2siCisjZGVmaW5lIFBfSU5URVJOQUxfRVhUUkFfTE9PSyAgICAgImludGVybmFsX2V4dHJhbG9vayIKKworI2RlZmluZSBQX1BMQVlFUl9MSUdIVCAgICAgICAgICAgICJwbGF5ZXJfbGlnaHQiCisjZGVmaW5lIFBfTElHSFRfTU9ESUZJRVIgICAgICAgICAgImxpZ2h0X21vZGlmaWVyIgorCisjZGVmaW5lIFBfTEVWRUwgICAgICAgICAgICAgICAgICAgImxldmVsIgorCisjZGVmaW5lIFBfUkFDRSAgICAgICAgICAgICAgICAgICAgInJhY2UiCisjZGVmaW5lIFBfUkVBTF9SQUNFICAgICAgICAgICAgICAgInJlYWxfcmFjZSIKKworLy8gYml0dGUgYXVjaCBpbiAvc2VjdXJlL21hc3Rlci5oIGFlbmRlcm4sIGZhbGxzIGRhcyBtYWwgZ2VhZW5kZXJ0IHdpcmQuCisjZGVmaW5lIFBfV0VBUE9OICAgICAgICAgICAgICAgICAgIndlYXBvbiIKKworI2RlZmluZSBQX1BBUkEgICAgICAgICAgICAgICAgICAgICJwYXJhIgorI2RlZmluZSBQX1NJWkUgICAgICAgICAgICAgICAgICAgICJzaXplIgorCisjZGVmaW5lIFBfRElFX01TRyAgICAgICAgICAgICAgICAgImRpZV9tc2ciCisKKyNkZWZpbmUgUF9XSU1QWSAgICAgICAgICAgICAgICAgICAid2ltcHkiCisjZGVmaW5lIFBfV0lNUFlfRElSRUNUSU9OICAgICAgICAgIndpbXB5X2RpciIKKworI2RlZmluZSBQX0FWQVRBUl9VUkkgICAgICAgICAgICAgICJwX2xpYl9hdmF0YXJ1cmkiCisKKyNlbmRpZiAvLyBfX0xJVklOR19ERVNDUklQVElPTl9IX18KKworCisjaWZkZWYgTkVFRF9QUk9UT1RZUEVTCisKKyNpZm5kZWYgX19MSVZJTkdfREVTQ1JJUFRJT05fSF9QUk9UT19fCisjZGVmaW5lIF9fTElWSU5HX0RFU0NSSVBUSU9OX0hfUFJPVE9fXworCit2YXJhcmdzIGludCAgICAgICAgIENhbm5vdFNlZShpbnQgc2lsZW50KTsKK3B1YmxpYyB2YXJhcmdzIGludCAgQWRkRXh0cmFMb29rKHN0cmluZyBsb29rLCBpbnQgZHVyYXRpb24sIHN0cmluZyBrZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGxvb2tlbmRlLCBvYmplY3Qgb2IpOworcHVibGljIGludCAgICAgICAgICBSZW1vdmVFeHRyYUxvb2soc3RyaW5nIGtleSk7CisKKyNlbmRpZiAvLyBfX0xJVklOR19ERVNDUklQVElPTl9IX1BST1RPX18KKworI2VuZGlmIC8vIE5FRURfUFJPVE9ZUEVTCmRpZmYgLS1naXQgYS9zeXMvbGl2aW5nL2hlbHBlcnMuaCBiL3N5cy9saXZpbmcvaGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMzc5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvbGl2aW5nL2hlbHBlcnMuaApAQCAtMCwwICsxLDQyIEBACisvLyBNb3JnZW5HcmF1ZW4gTVVEbGliCisvLworLy8gbGl2aW5nL2hlbHBlcnMuaCAtLSBLb25zdGFudGVuIHVuZCBNZXRob2RlbiBmdWVyIEhpbGZzb2JqZWt0ZQorLy8KKy8vICRJZDogbW9uZXloYW5kbGVyLmgsdiAzLjEgMTk5Ny8wMi8xMiAxMzoyOTowOSBXYXJnb24gRXhwICUKKworI2lmbmRlZiBfX0xJVklOR19IRUxQRVJTX0hfXworI2RlZmluZSBfX0xJVklOR19IRUxQRVJTX0hfXworCisvLyBQcm9wZXJ0aWVzCisKKyNkZWZpbmUgUF9IRUxQRVJfT0JKRUNUUyAgICAibGliX3BfaGVscGVyX29iamVjdHMiCisKKyNkZWZpbmUgUF9BUVVBVElDX0hFTFBFUlMgICAibGliX3BfYXF1YXRpY19oZWxwZXJzIgorI2RlZmluZSBQX0FFUklBTF9IRUxQRVJTICAgICJsaWJfcF9hZXJpYWxfaGVscGVycyIKKworLy8gRGVmaW5lcyBmdWVyIEhlbGZlcm9iamVrdC1UeXBlbiB1bmQgUnVlY2tnYWJld2VydGUKKworI2RlZmluZSBIRUxQRVJfVFlQRV9BUVVBVElDIDEKKyNkZWZpbmUgSEVMUEVSX1RZUEVfQUVSSUFMICAyCisKKyNkZWZpbmUgSEVMUEVSX05PX0NBTExCQUNLX09CSkVDVCAgICAtMQorI2RlZmluZSBIRUxQRVJfQUxSRUFEWV9MSVNURUQgICAgICAgIC0yCisjZGVmaW5lIEhFTFBFUl9OT1RISU5HX1RPX1VOUkVHSVNURVIgLTMKKyNkZWZpbmUgSEVMUEVSX1NVQ0NFU1MgICAgICAgICAgICAgICAgMQorCisjZW5kaWYgLy8gX19MSVZJTkdfSEVMUEVSU19IX18KKworLy8gUHJvdG90eXBlcworCisjaWZkZWYgTkVFRF9QUk9UT1RZUEVTCisKKyNpZm5kZWYgX19MSVZJTkdfSEVMUEVSU19IX1BST1RPX18KKyNkZWZpbmUgX19MSVZJTkdfSEVMUEVSU19IX1BST1RPX18KKworaW50IFJlZ2lzdGVySGVscGVyT2JqZWN0KG9iamVjdCBoZWxwZXIsIGludCB0eXBlLCBtaXhlZCBjYWxsYmFjayk7CitpbnQgVW5yZWdpc3RlckhlbHBlck9iamVjdChvYmplY3QgaGVscGVyLCBpbnQgdHlwZSk7CisKKyNlbmRpZiAvLyBfX0xJVklOR19IRUxQRVJTX0hfUFJPVE9fXworCisjZW5kaWYgLy8gTkVFRF9QUk9UT1lQRVMKKwpkaWZmIC0tZ2l0IGEvc3lzL2xpdmluZy9saWZlLmggYi9zeXMvbGl2aW5nL2xpZmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJhM2RkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2xpdmluZy9saWZlLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8vIE1vcmdlbkdyYXVlbiBNVURsaWIKKy8vCisvLyBsaXZpbmcvbGlmZS5oIC0tIGxpdmluZyBsaWZlIGhlYWRlcgorLy8KKy8vICRJZDogbGlmZS5oIDkwNDggMjAxNS0wMS0xMSAxODoyMTozMlogWmVzc3RyYSAkCisKKyNpZm5kZWYgX19MSVZJTkdfTElGRV9IX18KKyNkZWZpbmUgX19MSVZJTkdfTElGRV9IX18KKworLy8gcHJvcGVydGllcworCisjZGVmaW5lIFBfQUdFICAgICAgICAgICAgICAgICAgICAgImFnZSIKKyNkZWZpbmUgUF9BTElHTiAgICAgICAgICAgICAgICAgICAiYWxpZ24iCisKKyNkZWZpbmUgUF9ERUFEUyAgICAgICAgICAgICAgICAgICAiZGVhZHMiCisjZGVmaW5lIFBfR0hPU1QgICAgICAgICAgICAgICAgICAgImdob3N0IgorI2RlZmluZSBQX0ZST0cgICAgICAgICAgICAgICAgICAgICJmcm9nIgorCisjZGVmaW5lIFBfRk9PRCAgICAgICAgICAgICAgICAgICAgImZvb2QiCisjZGVmaW5lIFBfTUFYX0ZPT0QgICAgICAgICAgICAgICAgIm1heF9mb29kIgorI2RlZmluZSBQX0RSSU5LICAgICAgICAgICAgICAgICAgICJkcmluayIKKyNkZWZpbmUgUF9NQVhfRFJJTksgICAgICAgICAgICAgICAibWF4X2RyaW5rIgorI2RlZmluZSBQX0FMQ09IT0wgICAgICAgICAgICAgICAgICJhbGNvaG9sIgorI2RlZmluZSBQX01BWF9BTENPSE9MICAgICAgICAgICAgICJtYXhfYWxjb2hvbCIKKworI2RlZmluZSBQX0hQICAgICAgICAgICAgICAgICAgICAgICJocCIKKyNkZWZpbmUgUF9NQVhfSFAgICAgICAgICAgICAgICAgICAibWF4X2hwIgorI2RlZmluZSBQX1NQICAgICAgICAgICAgICAgICAgICAgICJzcCIKKyNkZWZpbmUgUF9NQVhfU1AgICAgICAgICAgICAgICAgICAibWF4X3NwIgorI2RlZmluZSBQX1hQICAgICAgICAgICAgICAgICAgICAgICJ4cCIKKyNkZWZpbmUgUF9OT19YUCAgICAgICAgICAgICAgICAgICAibm9feHAiCisjZGVmaW5lIFBfTEFTVF9YUCAgICAgICAgICAgICAgICAgImxhc3RfeHAiCisKKyNkZWZpbmUgUF9GT09EX0RFTEFZICAgICAgICAgICAgICAiZm9vZF9kZWxheSIKKyNkZWZpbmUgUF9EUklOS19ERUxBWSAgICAgICAgICAgICAiZHJpbmtfZGVsYXkiCisjZGVmaW5lIFBfQUxDT0hPTF9ERUxBWSAgICAgICAgICAgImFsY29ob2xfZGVsYXkiCisjZGVmaW5lIFBfSFBfREVMQVkgICAgICAgICAgICAgICAgImhwX2RlbGF5IgorI2RlZmluZSBQX1NQX0RFTEFZICAgICAgICAgICAgICAgICJzcF9kZWxheSIKKyNkZWZpbmUgUF9QT0lTT05fREVMQVkgICAgICAgICAgICAicG9pc29uX2RlbGF5IgorCisjZGVmaW5lIFBfUE9JU09OICAgICAgICAgICAgICAgICAgInBvaXNvbiIKKyNkZWZpbmUgUF9NQVhfUE9JU09OICAgICAgICAgICAgICAibWF4X3BvaXNvbiIKKworI2RlZmluZSBQX05PX1JFR0VORVJBVElPTiAgICAgICAgICJub19yZWdlbmVyYXRpb24iCisKKyNkZWZpbmUgUF9FTkVNWV9EQU1BR0UgICAgICAgICAgICAiZW5lbXlfZGFtYWdlIgorI2RlZmluZSBQX1RJTUlOR19NQVAgICAgICAgICAgICAgICJ0aW1pbmdfbWFwIgorI2RlZmluZSBQX0xBU1RfREVBVEhfVElNRSAgICAgICAgICJsYXN0X2RlYXRoX3RpbWUiCisjZGVmaW5lIFBfTEFTVF9ERUFUSF9QUk9QUyAgICAgICAgImxhc3RfZGVhdGhfcHJvcHMiCisjZGVmaW5lIFBfQ09SUFNFX0RFQ0FZX1RJTUUgICAgICAgImNvcnBzZV9kZWNheSIKKworLy8gLS0tLS0gRGVmaW5pdGlvbmVuIGZ1ZXIgQmVlaW5mbHVzc3VuZyBkZXIgR2VzdW5kaGVpdCBkdXJjaCBjb25zdW1lIC0tLS0tCisKKy8vIEhfRUZGRUNUUyAtIFp1IGFlbmRlcm5kZSBQcm9wZXJ0aWVzIGZ1ZXIgZGVuIEVmZmVrdAorI2RlZmluZSBIX0VGRkVDVFMgImVmZmVjdHMiCisvLyBIX0NPTkRJVElPTlMgLSBadSBwcnVlZmVuZGUgUHJvcGVydGllcyBm/HIgZGVuIEVmZmVrdCAoU2FldHRpZ3VuZywgLi4uKQorI2RlZmluZSBIX0NPTkRJVElPTlMgImNvbmRpdGlvbnMiCisvLyBIX0RJU1RSSUJVVElPTiAtIFdpZSBkaWUgQWVuZGVydW5nIGFuIEhQL1NQIGF1c3RlaWxlbiwgc29mb3J0LCB6ZWl0bGljaAorLy8gdmVyc2V0enQsIC4uLgorI2RlZmluZSBIX0RJU1RSSUJVVElPTiAiZGlzdHJpYnV0aW9uIgorLy8gSF9JTkdSRURJRU5UUyAtIEJlc3RhbmR0ZWlsZSwgZGllIGRpZSBBZW5kZXJ1bmcgdmVydXJzYWNoZW4KKyNkZWZpbmUgSF9JTkdSRURJRU5UUyAiaW5ncmVkaWVudHMiCisKKy8vIFZlcnRlaWx1bmdlbiwKKy8vIDAgICAgU29mb3J0d2lya3VuZworLy8gMS01MCBnbGVpY2h2ZXJ0ZWlsdGUgUHVmZmVydW5nIG1pdCBhbmdlZ2ViZW5lciBSYXRlIGZ1ZXIgU1AvSFAKKy8vID49IDUxIHNwZXppZWxsZSBWZXJ0ZWlsdW5nZW4gKFRPRE8pCisjZGVmaW5lIEhEX0lOU1RBTlQgICAgICAwCisjZGVmaW5lIEhEX1NUQU5EQVJEICAgICA1CisKKyNkZWZpbmUgSF9BTExPV0VEX0NPTkRJVElPTlMgKHtQX0ZPT0QsIFBfRFJJTkssIFBfQUxDT0hPTH0pCisjZGVmaW5lIEhfQUxMT1dFRF9FRkZFQ1RTICAgICh7UF9TUCwgUF9IUCwgUF9QT0lTT059KQorCisjZGVmaW5lIEhDX01BWF9GT09EX1JFQUNIRUQgICAgICAgIDEKKyNkZWZpbmUgSENfTUFYX0RSSU5LX1JFQUNIRUQgICAgICAgMgorI2RlZmluZSBIQ19NQVhfQUxDT0hPTF9SRUFDSEVEICAgICA0CisjZGVmaW5lIEhDX0hPT0tfQ0FOQ0VMTEFUSU9OICAgICAgIDgKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZW5kaWYgLy8gX19MSVZJTkdfTElGRV9IX18KKworI2lmZGVmIE5FRURfUFJPVE9UWVBFUworCisjaWZuZGVmIF9fTElWSU5HX0xJRkVfSF9QUk9UT19fCisjZGVmaW5lIF9fTElWSU5HX0xJRkVfSF9QUk9UT19fICAgICAgICAgCisKKy8vIHByb3RvdHlwZXMKKworLy8gLS0tLS0gemVudHJhbGUgRnVua3Rpb24sIHVtIGRpZSBHZXN1bmRoZWl0IGRlcyBMZWJld2VzZW5zIHp1IGJlZWluZmx1c3NlbiAtLS0tLQorcHVibGljIHZhcmFyZ3MgaW50IGNvbnN1bWUobWFwcGluZyBjaW5mbywgaW50IHRlc3Rvbmx5KTsKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcHVibGljIGludCBkb19kYW1hZ2UoaW50IGRhbSwgb2JqZWN0IGVuZW15KTsKK3B1YmxpYyBpbnQgcmVkdWNlX2hpdF9wb2ludHMoaW50IGRhbSk7CitwdWJsaWMgaW50IHJlc3RvcmVfaGl0X3BvaW50cyhpbnQgaGVhbCk7CisKK3B1YmxpYyBpbnQgcmVkdWNlX2hpdF9wb2ludChpbnQgZGFtKTsgIC8vTnVyIGFscyBVZWJlcmdhbnNsb2VzdW5nIChSaWt1cykKKworcHVibGljIHZvaWQgcmVzdG9yZV9zcGVsbF9wb2ludHMoaW50IGgpOworcHVibGljIHZvaWQgcmVkdWNlX3NwZWxsX3BvaW50cyhpbnQgaCk7CisKK3B1YmxpYyB2b2lkIGhlYWxfc2VsZihpbnQgaCk7CisKK3B1YmxpYyB2YXJhcmdzIHZvaWQgZGllKCBpbnQgcG9pc29uZGVhdGgsIGludCBleHRlcm4gKTsKKworcHVibGljIHZhcmFyZ3Mgdm9pZCB0cmFuc2Zlcl9hbGxfdG8oIHN0cmluZ3xvYmplY3QgZGVzdCwgaW50IGNoZWNrICk7CisKK3B1YmxpYyB2YXJhcmdzIGludCBkcmlua19hbGNvaG9sKGludCBzdHJlbmd0aCwgaW50IHRlc3Rvbmx5LCBzdHJpbmcgbXl0ZXh0KTsKK3B1YmxpYyB2YXJhcmdzIGludCBkcmlua19zb2Z0KGludCBzdHJlbmd0aCwgaW50IHRlc3Rvbmx5LCBzdHJpbmcgbXl0ZXh0KTsKK3B1YmxpYyB2YXJhcmdzIGludCBlYXRfZm9vZChpbnQgc3RyZW5ndGgsIGludCB0ZXN0b25seSwgc3RyaW5nIG15dGV4dCk7CisKK3B1YmxpYyBpbnQgYnVmZmVyX2hwKGludCB2YWwsaW50IHJhdGUpOworcHVibGljIGludCBidWZmZXJfc3AoaW50IHZhbCxpbnQgcmF0ZSk7CisKK3B1YmxpYyB2b2lkIHNob3dfYWdlKCk7CisKK3B1YmxpYyBpbnQgQWRkRXhwKGludCBlKTsKKworLy8gaW50ZXJuYWwKK3Byb3RlY3RlZCB2b2lkIFJlc2V0RW5lbXlEYW1hZ2UoKTsKKworI2VuZGlmIC8vIF9fTElWSU5HX0xJRkVfSF9QUk9UT19fCisKKyNlbmRpZiAvLyBORUVEX1BST1RPWVBFUwpkaWZmIC0tZ2l0IGEvc3lzL2xpdmluZy9tb3ZpbmcuaCBiL3N5cy9saXZpbmcvbW92aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxNDQ2NgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9saXZpbmcvbW92aW5nLmgKQEAgLTAsMCArMSw0MCBAQAorLy8gTW9yZ2VuR3JhdWVuIE1VRGxpYgorLy8KKy8vIGxpdmluZy9tb3ZpbmcuaCAtLSBQcm9wcy9Qcm90b3R5cGVuIGZ1ZXIgbGl2aW5nL21vdmluZy5jCisvLworLy8gJElkOiBtb3ZpbmcuaCA4ODkyIDIwMTQtMDgtMDQgMTk6NDg6MjhaIFplc3N0cmEgJAorCisjaWZuZGVmIF9fTElWSU5HX01PVklOR19IX18KKyNkZWZpbmUgX19MSVZJTkdfTU9WSU5HX0hfXworCisjZGVmaW5lIFBfUFVSU1VFUlMgICAgICAgInB1cnN1ZXJzIgorCisjZW5kaWYgLy8gX19MSVZJTkdfTU9WSU5HX0hfXworCisjaWZkZWYgTkVFRF9QUk9UT1RZUEVTCisKKyNpZm5kZWYgX19MSVZJTkdfTU9WSU5HX0hfUFJPVE9fXworI2RlZmluZSBfX0xJVklOR19NT1ZJTkdfSF9QUk9UT19fCisKK3B1YmxpYyB2b2lkIEFkZFB1cnN1ZXIob2JqZWN0IG9iKTsKK3B1YmxpYyB2b2lkIFJlbW92ZVB1cnN1ZXIob2JqZWN0IG9iKTsKKworcHVibGljIHZvaWQgVGFrZUZvbGxvd2VycygpOworCisjaWZkZWYgX19USElOR19NT1ZJTkdfSF9QUk9UT19fCisvLyBkYXMgZGFyZiBuaWNodCBwYXNzaWVyZW4sIHdlaWwgbW92ZSBpbiB0aGluZyBhbmRlcnMgaXN0IGFscyBoaWVyLiAqc2V1ZnoqCitpbmNvbnNpc3RlbnRfbW92ZV9wcm90b3lwX2Vycm9yCisjZW5kaWYKK3B1YmxpYyB2YXJhcmdzIGludCBtb3ZlKCBvYmplY3R8c3RyaW5nIGRlc3QsIGludCBtZXRob2RzLCBzdHJpbmcgZGlyZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyB0ZXh0b3V0LCBzdHJpbmcgdGV4dGluICk7CitwdWJsaWMgdmFyYXJncyBpbnQgcmVtb3ZlKGludCBzaWxlbnQpOworCisvLyBpbnRlcm5hbAorcHVibGljIHZvaWQgX1NldFB1cnN1ZWQob2JqZWN0IG9iKTsKK3B1YmxpYyB2b2lkIF9SZW1vdmVQdXJzdWVkKG9iamVjdCBvYik7CisKKworI2VuZGlmIC8vIF9fTElWSU5HX01PVklOR19IX1BST1RPX18KKworI2VuZGlmIC8vIE5FRURfUFJPVE9UWVBFUworCmRpZmYgLS1naXQgYS9zeXMvbGl2aW5nL3B1dF9hbmRfZ2V0LmggYi9zeXMvbGl2aW5nL3B1dF9hbmRfZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYWQyMwotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9saXZpbmcvcHV0X2FuZF9nZXQuaApAQCAtMCwwICsxLDM3IEBACisvLyBNb3JnZW5HcmF1ZW4gTVVEbGliCisvLworLy8gbGl2aW5nL3B1dF9hbmRfZ2V0LmggLS0gbGl2aW5nIHB1dCBhbmQgZ2V0IGhlYWRlcgorLy8KKy8vICRJZDogcHV0X2FuZF9nZXQuaCA2OTMwIDIwMDgtMDgtMDkgMDk6MjA6MTZaIFplc3N0cmEgJAorIAorI2lmbmRlZiBfX0xJVklOR19QVVRfQU5EX0dFVF9IX18KKyNkZWZpbmUgX19MSVZJTkdfUFVUX0FORF9HRVRfSF9fCisKKy8vIHByb3BlcnRpZXMKKyNkZWZpbmUgUF9EUk9QX01TRyAgICAgICAgImRyb3BfbWVzc2FnZSIgCisjZGVmaW5lIFBfUFVUX01TRyAgICAgICAgICJwdXRfbWVzc2FnZSIKKyNkZWZpbmUgUF9QSUNLX01TRyAgICAgICAgInBpY2tfbWVzc2FnZSIKKyNkZWZpbmUgUF9HSVZFX01TRyAgICAgICAgImdpdmVfbWVzc2FnZSIKKyNkZWZpbmUgUF9TSE9XX01TRyAgICAgICAgInNob3dfbWVzc2FnZSIKKworLy8gSWYgeW91IGRvbid0IHdhbnQgcHV0X2FuZF9nZXQgc2VuZCBhIG1lc3NhZ2UsIHNldCB0aGUgcHJvcGVydHkgdG8KKyNkZWZpbmUgTk9fUE5HX01TRyAgICAgICAtMQorCisvLyBGb3IgdXNlciBkZWZpbmVkIGRyb3AgbWVzc2FnZXMgbG9vayBmb3IgbWFuIFBfRFJPUF9NU0cKKworI2VuZGlmIC8vIF9fTElWSU5HX1BVVF9BTkRfR0VUX0hfXworCisvLyBwcm90b3R5cGVzCisjaWZkZWYgTkVFRF9QUk9UT1RZUEVTCisKKyNpZm5kZWYgX19MSVZJTkdfUFVUX0FORF9HRVRfSF9QUk9UT19fCisjZGVmaW5lIF9fTElWSU5HX1BVVF9BTkRfR0VUX0hfUFJPVE9fXworCitvYmplY3QgKmZpbmRfb2JzKHN0cmluZyBzdHIsIGludCBtZXRoKTsKKwordm9pZCBhZGRfcHV0X2FuZF9nZXRfY29tbWFuZHMoKTsKKworI2VuZGlmIC8vIF9fTElWSU5HX1BVVF9BTkRfR0VUX0hfUFJPVE9fXworCisjZW5kaWYJLy8gTkVFRF9QUk9UT1lQRVMKKwpkaWZmIC0tZ2l0IGEvc3lzL2xpdmluZy9za2lsbF9hdHRyaWJ1dGVzLmggYi9zeXMvbGl2aW5nL3NraWxsX2F0dHJpYnV0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzljYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2xpdmluZy9za2lsbF9hdHRyaWJ1dGVzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8vIE1vcmdlbkdyYXVlbiBNVURsaWIKKy8vCisvLyBGaWxlTmFtZS5jIC0tIEJlc2NocmVpYnVuZworLy8KKy8vICRJZCQKKworI2lmbmRlZiBfX1NLSUxMX0FUVFJJQlVURVNfSF9fCisjZGVmaW5lIF9fU0tJTExfQVRUUklCVVRFU19IX18KKworLy8gPT09PT0gUHJvcGVydGllcyBmdWVyIFNraWxsLUF0dHJpYnV0ZTogPT09PT0KKworI2RlZmluZSBQX1NLSUxMX0FUVFJJQlVURVMgICAgICAgICAgInNraWxsX2F0dHIiCisjZGVmaW5lIFBfU0tJTExfQVRUUklCVVRFX09GRlNFVFMgICAic2tpbGxfYXR0cl9vZmZzZXRzIgorCisvLyA9PT09PSBTa2lsbCBBdHRyaWJ1dGU6ID09PT09ICAKKy8vIEFsbGdlbWVpbmUgUXVhbGl0YWV0CisjZGVmaW5lIFNBX1FVQUxJVFkgICAgICAgICAgICAgICAgICAic2FfcXVhbCIKKyAgCisvLyBTY2hhZGVuCisjZGVmaW5lIFNBX0RBTUFHRSAgICAgICAgICAgICAgICAgICAic2FfZGFtIgorICAKKy8vIEdlc2Nod2luZGlna2VpdAorI2RlZmluZSBTQV9TUEVFRCAgICAgICAgICAgICAgICAgICAgInNhX3NwZWVkIgorCisvLyBEYXVlcgorI2RlZmluZSBTQV9EVVJBVElPTiAgICAgICAgICAgICAgICAgInNhX2R1ciIKKworLy8gQXVzZGVobnVuZworI2RlZmluZSBTQV9FWFRFTlNJT04gICAgICAgICAgICAgICAgInNhX2V4dCIKKworLy8gUmVpY2h3ZWl0ZQorI2RlZmluZSBTQV9SQU5HRSAgICAgICAgICAgICAgICAgICAgInNhX3JhbmdlIgorCisvLyBKZSBob2VoZXIsIGRlc3RvIGdyb2Vzc2VyIGRpZSBDaGFuY2UsIGRhc3MgbmVuIHZvbSBMZWJld2VzZW4gZ2VjYXN0ZXRlcgorLy8gU3BlbGwgZHVyY2ggZGFzIGdlZ25lcmlzY2hlIFBfTk9NQUdJQyBkdXJjaHNjaGxhZWd0LgorLy8gKFNBX0VORU1ZX1NBVkUgb2Jzb2xldCEpCisjZGVmaW5lIFNBX0VORU1ZX1NBVkUgICAgICAgICAgICAgICAic2Ffc2F2ZSIKKyNkZWZpbmUgU0FfU1BFTExfUEVORVRSQVRJT04gICAgICAgICJzYV9zYXZlIgorCisvLyB3ZWxjaGUgU2tpbGwtQXR0cmlidXRlIGdpYnQgZXM/CisjZGVmaW5lIFZBTElEX1NLSUxMX0FUVFJJQlVURVMgKHsgU0FfUVVBTElUWSwgU0FfREFNQUdFLCBTQV9TUEVFRCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfRFVSQVRJT04sIFNBX0VYVEVOU0lPTiwgU0FfUkFOR0UsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBX0VORU1ZX1NBVkUgfSkKKworLy8gSW5kaXplcyBmdWVyIGRpZSBWZXJ3YWx0dW5nIGRlciBTa2lsbC1BdHRyaWJ1dGUKKyNkZWZpbmUgU0FNX0NBQ0hFICAgICAgICAgICAgICAwCisjZGVmaW5lIFNBTV9TVEFUSUMgICAgICAgICAgICAgMQorI2RlZmluZSBTQU1fRFlOQU1JQyAgICAgICAgICAgIDIKKworI2RlZmluZSBTQU1fU1VNICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0FNX0NBQ0hFX1RJTUVPVVQgICAgICAxCisjZGVmaW5lIFNBTV9DT1VOVCAgICAgICAgICAgICAgMgorCisjZGVmaW5lIFNBTV9EVVJBVElPTiAgICAgICAgICAgMAorI2RlZmluZSBTQU1fVkFMVUUgICAgICAgICAgICAgIDEKKworCisvLyBlaW5pZ2UgS29uc3RhbnRlbgorI2RlZmluZSBTQU1fTUFYX01PRFMgICAgICAgICAgIDUKKyNkZWZpbmUgU0FNX01BWF9DQUNIRV9USU1FT1VUICA2MAorCisvLyBydWVja2dhYmV3ZXJ0ZSBkZXIgVmVyd2FsdHVuZ3NmdW5rdGlvbmVuOgorI2RlZmluZSBTQV9NT0RfT0sgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0FfTU9EX1JFTU9WRUQgICAgICAgICAxCisjZGVmaW5lIFNBX1RPT19NQU5ZX01PRFMgICAgICAgLTEKKyNkZWZpbmUgU0FfTU9EX1RPT19TTUFMTCAgICAgICAtMgorI2RlZmluZSBTQV9NT0RfVE9PX0JJRyAgICAgICAgIC0zCisjZGVmaW5lIFNBX01PRF9JTlZBTElEX0FUVFIgICAgLTQKKyNkZWZpbmUgU0FfTU9EX0lOVkFMSURfT0JKRUNUICAtNQorI2RlZmluZSBTQV9NT0RfTk9UX0ZPVU5EICAgICAgIC02CisjZGVmaW5lIFNBX01PRF9JTlZBTElEX1ZBTFVFICAgLTcKKworLy8gU3RhdGlzdGlrPworI2RlZmluZSBTQVNUQVREICIvcC9kYWVtb24vc2FzdGF0ZCIKKworI2VuZGlmIC8vIF9fU0tJTExfQVRUUklCVVRFU19IX18KKworCisjaWZkZWYgTkVFRF9QUk9UT1RZUEVTCisKKyNpZm5kZWYgX19TS0lMTF9BVFRSSUJVVEVTX0hfUFJPVE9fXworI2RlZmluZSBfX1NLSUxMX0FUVFJJQlVURVNfSF9QUk9UT19fCisKKy8vIHByb3RvdHlwZXMKKworcHVibGljIGludCAgICBNb2RpZnlTa2lsbEF0dHJpYnV0ZShzdHJpbmcgYXRybmFtZSwgbWl4ZWQgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVyYXRpb24pOworcHVibGljIGludCAgICBSZW1vdmVTa2lsbEF0dHJpYnV0ZU1vZGlmaWVyKG9iamVjdCBjYXN0ZXIsIHN0cmluZyBhdHRybmFtZSk7CitwdWJsaWMgaW50ICAgIFF1ZXJ5U2tpbGxBdHRyaWJ1dGUoc3RyaW5nIGF0dHIpOworcHVibGljIHZhcmFyZ3MgbWFwcGluZyBRdWVyeVNraWxsQXR0cmlidXRlTW9kaWZpZXIob2JqZWN0IGNhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAqYXR0cik7CisKKy8vIEtvbXBhdGliaWxpdGFldHNmdW5rdGlvbiBtaXQgYWx0ZW0gSW50ZXJmYWNlLgorcHVibGljIGludCAgICBNb2RpZnlTa2lsbEF0dHJpYnV0ZU9sZChvYmplY3QgY2FzdGVyLCBzdHJpbmcgYXRybmFtZSwgaW50IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVyYXRpb24sIG1peGVkIGZ1bik7CisKKyNlbmRpZiAvLyBfX1NLSUxMX0FUVFJJQlVURVNfSF9QUk9UT19fCisKKyNlbmRpZiAvLyBORUVEX1BST1RPWVBFUworCmRpZmYgLS1naXQgYS9zeXMvbGl2aW5nL3NraWxscy5oIGIvc3lzL2xpdmluZy9za2lsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI1NzJjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2xpdmluZy9za2lsbHMuaApAQCAtMCwwICsxLDMzIEBACisvLyBNb3JnZW5HcmF1ZW4gTVVEbGliCisvLworLy8gc2tpbGxzLmggLS0gRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgL3N0ZC9saXZpbmcvc2tpbGxzLmMKKy8vCisvLyAkSWQ6IHNraWxscy5oIDg2OTQgMjAxNC0wMi0yMCAyMzowNjo1MFogWmVzc3RyYSAkCisKKyNpZm5kZWYgX0xJVklOR19TS0lMTFNfSF8KKyNkZWZpbmUgX0xJVklOR19TS0lMTFNfSF8KKworI2VuZGlmIC8vIF9MSVZJTkdfU0tJTExTX0hfCisKKyNpZmRlZiBORUVEX1BST1RPVFlQRVMKKyNpZm5kZWYgX0xJVklOR19TS0lMTFNfSF9QUk9UT18KKyNkZWZpbmUgX0xJVklOR19TS0lMTFNfSF9QUk9UT18KK3B1YmxpYyAgICB2YXJhcmdzIGludCAgICAgVXNlU3BlbGwoc3RyaW5nIHN0ciwgc3RyaW5nIHNwZWxsKTsKKworcHVibGljICAgIHZhcmFyZ3MgbWFwcGluZyBRdWVyeVNraWxsKHN0cmluZyBzbmFtZSwgc3RyaW5nIGdpbGRlKTsKK3B1YmxpYyAgICB2YXJhcmdzIGludCAgICAgUXVlcnlTa2lsbEFiaWxpdHkobWl4ZWQgc25hbWUsIG1peGVkIGFyZ2wpOworCitwcm90ZWN0ZWQgdmFyYXJncyBtaXhlZCAgIExpbWl0QWJpbGl0eShtaXhlZCBzaW5mbywgaW50IGRpZmYpOworcHVibGljICAgIHZhcmFyZ3MgbWl4ZWQgICBVc2VTa2lsbChzdHJpbmcgc2tpbGwsIG1hcHBpbmcgYXJncyk7CisKK3B1YmxpYyAgICB2YXJhcmdzIHZvaWQgICAgTGVhcm5Ta2lsbChzdHJpbmcgc25hbWUsIGludCBhZGQsIGludCBkaWZmKTsKK3B1YmxpYyAgICB2YXJhcmdzIHZvaWQgICAgTW9kaWZ5U2tpbGwoc3RyaW5nIHNuYW1lLCBtaXhlZCB2YWwsIGludCBkaWZmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGdpbGRlKTsKK3B1YmxpYyAgICB2YXJhcmdzIGludCAgICAgU2V0U3BlbGxGYXRpZ3VlKGludCBkdXJhdGlvbiwgc3RyaW5nIGtleSk7CitwdWJsaWMgICAgdmFyYXJncyBpbnQgICAgIENoZWNrU3BlbGxGYXRpZ3VlKHN0cmluZyBrZXkpOworcHVibGljICAgICAgICAgICAgdm9pZCAgICBEZWxldGVTcGVsbEZhdGlndWUoc3RyaW5nIGtleSk7CisKKyNlbmRpZiAvLyBfTElWSU5HX1NLSUxMU19IX1BST1RPXworCisjZW5kaWYgLy8gTkVFRF9QUk9UT1RZUEVTCisKZGlmZiAtLWdpdCBhL3N5cy9saXZpbmcvdGVhbS5oIGIvc3lzL2xpdmluZy90ZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyZTBjMwotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9saXZpbmcvdGVhbS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vIE1vcmdlbkdyYXVlbiBNVURsaWIKKy8vCisvLyBsaXZpbmcvdGVhbS5oIC0tIHRlYW0gaGVhZGVyCisvLworLy8gJElkOiB0ZWFtLmggODQ0OSAyMDEzLTAzLTA0IDIxOjA2OjM4WiBaZXNzdHJhICQKKworI2lmbmRlZiBfX0xJVklOR19URUFNX0hfXworI2RlZmluZSBfX0xJVklOR19URUFNX0hfXworCisjZGVmaW5lIFBfVEVBTSAgICAgICAgICAgICAgICAgICAgInRlYW0iCisjZGVmaW5lIFBfVEVBTV9ORVdNRU1CRVIgICAgICAgICAgInBvdGVudGlhbF90ZWFtX21lbWJlciIKKyNkZWZpbmUgUF9URUFNX0FUVEFDS19DTUQgICAgICAgICAidGVhbV9hdHRhY2tfY21kIgorI2RlZmluZSBQX1RFQU1fQVVUT0ZPTExPVyAgICAgICAgICJ0ZWFtX2F1dG9mb2xsb3ciCisjZGVmaW5lIFBfVEVBTV9XQU5URURfUk9XICAgICAgICAgInRlYW1fd2FudGVkX3JvdyIKKyNkZWZpbmUgUF9URUFNX1dJTVBZX1JPVyAgICAgICAgICAidGVhbV93aW1weV9yb3ciCisjZGVmaW5lIFBfVEVBTV9MRUFERVIgICAgICAgICAgICAgInRlYW1fbGVhZGVyIgorI2RlZmluZSBQX1RFQU1fQVNTT0NfTUVNQkVSUyAgICAgICJ0ZWFtX2Fzc29jX21lbWJlcnMiCisjZGVmaW5lIFBfVEVBTV9DT0xPUlMgICAgICAgICAgICAgInRlYW1fY29sb3JzIgorCisjZGVmaW5lIFRFQU1fT0JKRUNUICIvb2JqL3RlYW0iCisjZGVmaW5lIFRFQU1fTUFTVEVSICIvcC9kYWVtb24vdGVhbW1hc3RlciIKKyNkZWZpbmUgRU1QVFlfVEVBTUFSUkFZICh7KHt9KSwoe30pLCh7fSksKHt9KSwoe30pfSkKKyNkZWZpbmUgTUFYX1RFQU1ST1dTIDUKKyNkZWZpbmUgTUFYX1RFQU1fUk9XTEVOIDYKKyNkZWZpbmUgTUFYX1RFQU1fTUVNQkVSUyAxMgorCisjZW5kaWYgLy8gX19MSVZJTkdfVEVBTV9IX18KKworI2lmZGVmIE5FRURfUFJPVE9UWVBFUworI2lmbmRlZiBfX0xJVklOR19URUFNX0hfUFJPVE9fXworI2RlZmluZSBfX0xJVklOR19URUFNX0hfUFJPVE9fXworCitzdHJpbmcgVGVhbVByZWZpeCgpOworb2JqZWN0IElzVGVhbUxlYWRlcigpOworb2JqZWN0IElzVGVhbU1vdmUoKTsKK29iamVjdCAqVGVhbU1lbWJlcnMoKTsKK3ZhcmFyZ3MgaW50IFByZXNlbnRQb3NpdGlvbihtaXhlZCBwbWFwKTsKK3ZhcmFyZ3MgbWFwcGluZyBQcmVzZW50VGVhbVBvc2l0aW9ucyhtaXhlZCBwcmVzX3Jvd3MpOworbWl4ZWQgKlByZXNlbnRUZWFtUm93cygpOwordmFyYXJncyBtaXhlZCAqUHJlc2VudEVuZW15Um93cyhvYmplY3QgKmhlcmUpOwordmFyYXJncyBvYmplY3QgU2VsZWN0TmVhckVuZW15KG9iamVjdCAqaGVyZSwgaW50IGZvcmNlZnJvbSk7Cit2YXJhcmdzIG9iamVjdCBTZWxlY3RGYXJFbmVteShvYmplY3QgKmhlcmUsIGludCBtaW4sIGludCBtYXgsIGludCBmb3JjZWZyb20pOwordmFyYXJncyB2b2lkIEluc2VydEVuZW15VGVhbShtaXhlZCBlbnMsIGludCByZWspOworaW50IEFzc29jTWVtYmVyKG9iamVjdCBucGMpOworaW50IERlQXNzb2NNZW1iZXIob2JqZWN0IG5wYyk7CitpbnQgVGVhbUZsZWUoKTsKK3ZhcmFyZ3Mgdm9pZCBJbmZvcm1Sb3dDaGFuZ2UoaW50IGZyb20sIGludCB0bywgb2JqZWN0IGNhc3Rlcik7CisgCisjZW5kaWYgLy8gX19MSVZJTkdfVEVBTV9IX1BST1RPX18KKyNlbmRpZiAvLyAvLyBORUVEX1BST1RPWVBFUwo=