ZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvLmhhc2hsaW1pdC10ZXN0NiBiL2V4dGVuc2lvbnMvLmhhc2hsaW1pdC10ZXN0NgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWEyYTQ2NS4uMDAwMDAwMAotLS0gYS9leHRlbnNpb25zLy5oYXNobGltaXQtdGVzdDYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jpbi9zaAotWyAtZiAkS0VSTkVMX0RJUi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaCBdICYmIGVjaG8gaGFzaGxpbWl0Ci0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvTWFrZWZpbGUgYi9leHRlbnNpb25zL01ha2VmaWxlCmluZGV4IGZmMzA5ZTcuLmU1NmE3ZDIgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvTWFrZWZpbGUKKysrIGIvZXh0ZW5zaW9ucy9NYWtlZmlsZQpAQCAtNSw5ICs1LDkgQEAKICMgaGVhZGVyIGZpbGVzIGFyZSBwcmVzZW50IGluIHRoZSBpbmNsdWRlL2xpbnV4IGRpcmVjdG9yeSBvZiB0aGlzIGlwdGFibGVzCiAjIHBhY2thZ2UgKEhXKQogIwotUEZfRVhUX1NMSUI6PWFoIGFkZHJ0eXBlIGNvbm5tYXJrIGNvbm50cmFjayBlY24gaGFzaGxpbWl0IGhlbHBlciBpY21wIGlwcmFuZ2Ugb3duZXIgcG9saWN5IHJlYWxtIHN0YXRlIHRvcyB0dGwgdW5jbGVhbiBDTEFTU0lGWSBETkFUIERTQ1AgRUNOIExPRyBNQVNRVUVSQURFIE1JUlJPUiBORVRNQVAgUkVESVJFQ1QgUkVKRUNUIFNBTUUgU05BVCBUT1MgVFRMIFRSQUNFIFVMT0cKK1BGX0VYVF9TTElCOj1haCBhZGRydHlwZSBjb25ubWFyayBjb25udHJhY2sgZWNuIGhlbHBlciBpY21wIGlwcmFuZ2Ugb3duZXIgcG9saWN5IHJlYWxtIHN0YXRlIHRvcyB0dGwgdW5jbGVhbiBDTEFTU0lGWSBETkFUIERTQ1AgRUNOIExPRyBNQVNRVUVSQURFIE1JUlJPUiBORVRNQVAgUkVESVJFQ1QgUkVKRUNUIFNBTUUgU05BVCBUT1MgVFRMIFRSQUNFIFVMT0cKIFBGNl9FWFRfU0xJQjo9Y29ubm1hcmsgZXVpNjQgaGwgaWNtcDYgb3duZXIgcG9saWN5IHN0YXRlIEhMIExPRyBUUkFDRQotUEZYX0VYVF9TTElCOj1jb21tZW50IGNvbm5saW1pdCBkc2NwIGVzcCBsZW5ndGggbGltaXQgbWFjIG1hcmsgbXVsdGlwb3J0IHBoeXNkZXYgcGt0dHlwZSBzY3RwIHN0YW5kYXJkIHRjcCB0Y3Btc3MgdWRwIENPTk5NQVJLIE1BUksgTkZRVUVVRSBOT1RSQUNLIFRDUE1TUworUEZYX0VYVF9TTElCOj1jb21tZW50IGNvbm5saW1pdCBkc2NwIGVzcCBoYXNobGltaXQgbGVuZ3RoIGxpbWl0IG1hYyBtYXJrIG11bHRpcG9ydCBwaHlzZGV2IHBrdHR5cGUgc2N0cCBzdGFuZGFyZCB0Y3AgdGNwbXNzIHVkcCBDT05OTUFSSyBNQVJLIE5GUVVFVUUgTk9UUkFDSyBUQ1BNU1MKIAogaWZlcSAoJChET19TRUxJTlVYKSwgMSkKIFBGX0VYVF9TRV9TTElCOj0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbGliaXB0X2hhc2hsaW1pdC5jIGIvZXh0ZW5zaW9ucy9saWJpcHRfaGFzaGxpbWl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxY2M3Y2IuLjAwMDAwMDAKLS0tIGEvZXh0ZW5zaW9ucy9saWJpcHRfaGFzaGxpbWl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjkgKzAsMCBAQAotLyogaXB0YWJsZXMgbWF0Y2ggZXh0ZW5zaW9uIGZvciBsaW1pdGluZyBwYWNrZXRzIHBlciBkZXN0aW5hdGlvbgotICoKLSAqIChDKSAyMDAzLTIwMDQgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBmdW5kZWQgYnkgQXN0YXJvIEFHLCBodHRwOi8vd3d3LmFzdGFyby5jb20vCi0gKgotICogQmFzZWQgb24gaXB0X2xpbWl0LmMgYnkKLSAqIErpcvRtZSBkZSBWaXZpZSAgIDxkZXZpdmllQGluZm8uZW5zZXJiLnUtYm9yZGVhdXguZnI+Ci0gKiBIZXJ26SBFeWNoZW5uZSAgICA8cnZAd2FsbGZpcmUub3JnPgotICogCi0gKiBFcnJvciBjb3JlY3Rpb25zIGJ5IG5tYWx5a2hAYmlsaW0uY29tICgyMi4wMS4yMDA1KQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdldG9wdC5oPgotI2luY2x1ZGUgPGlwdGFibGVzLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hhc2hsaW1pdC5oPgotCi0jZGVmaW5lIElQVF9IQVNITElNSVRfQlVSU1QJNQotCi0vKiBtaWxpc2Vjb25kcyAqLwotI2RlZmluZSBJUFRfSEFTSExJTUlUX0dDSU5URVJWQUwJMTAwMAotI2RlZmluZSBJUFRfSEFTSExJTUlUX0VYUElSRQkxMDAwMAotCi0vKiBGdW5jdGlvbiB3aGljaCBwcmludHMgb3V0IHVzYWdlIG1lc3NhZ2UuICovCi1zdGF0aWMgdm9pZAotaGVscCh2b2lkKQotewotCXByaW50ZigKLSJoYXNobGltaXQgdiVzIG9wdGlvbnM6XG4iCi0iLS1oYXNobGltaXQgPGF2Zz4JCW1heCBhdmVyYWdlIG1hdGNoIHJhdGVcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtQYWNrZXRzIHBlciBzZWNvbmQgdW5sZXNzIGZvbGxvd2VkIGJ5IFxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3NlYyAvbWludXRlIC9ob3VyIC9kYXkgcG9zdGZpeGVzXVxuIgotIi0taGFzaGxpbWl0LW1vZGUgPG1vZGU+CQltb2RlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbiIKLSIJCQkJCWRzdGlwLHNyY2lwLGRzdHBvcnQsc3JjcG9ydFxuIgotIi0taGFzaGxpbWl0LW5hbWUgPG5hbWU+CQluYW1lIGZvciAvcHJvYy9uZXQvaXB0X2hhc2hsaW1pdC9cbiIKLSJbLS1oYXNobGltaXQtYnVyc3QgPG51bT5dCW51bWJlciB0byBtYXRjaCBpbiBhIGJ1cnN0LCBkZWZhdWx0ICV1XG4iCi0iWy0taGFzaGxpbWl0LWh0YWJsZS1zaXplIDxudW0+XQludW1iZXIgb2YgaGFzaHRhYmxlIGJ1Y2tldHNcbiIKLSJbLS1oYXNobGltaXQtaHRhYmxlLW1heCA8bnVtPl0JbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzXG4iCi0iWy0taGFzaGxpbWl0LWh0YWJsZS1nY2ludGVydmFsXQlpbnRlcnZhbCBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbiBydW5zXG4iCi0iWy0taGFzaGxpbWl0LWh0YWJsZS1leHBpcmVdCWFmdGVyIHdoaWNoIHRpbWUgYXJlIGlkbGUgZW50cmllcyBleHBpcmVkP1xuIgotIlxuIiwgSVBUQUJMRVNfVkVSU0lPTiwgSVBUX0hBU0hMSU1JVF9CVVJTVCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKLQl7ICJoYXNobGltaXQiLCAxLCAwLCAnJScgfSwKLQl7ICJoYXNobGltaXQtYnVyc3QiLCAxLCAwLCAnJCcgfSwKLQl7ICJoYXNobGltaXQtaHRhYmxlLXNpemUiLCAxLCAwLCAnJicgfSwKLQl7ICJoYXNobGltaXQtaHRhYmxlLW1heCIsIDEsIDAsICcqJyB9LAotCXsgImhhc2hsaW1pdC1odGFibGUtZ2NpbnRlcnZhbCIsIDEsIDAsICcoJyB9LAotCXsgImhhc2hsaW1pdC1odGFibGUtZXhwaXJlIiwgMSwgMCwgJyknIH0sCi0JeyAiaGFzaGxpbWl0LW1vZGUiLCAxLCAwLCAnXycgfSwKLQl7ICJoYXNobGltaXQtbmFtZSIsIDEsIDAsICciJyB9LAotCXsgMCB9Ci19OwotCi1zdGF0aWMKLWludCBwYXJzZV9yYXRlKGNvbnN0IGNoYXIgKnJhdGUsIHVfaW50MzJfdCAqdmFsKQotewotCWNvbnN0IGNoYXIgKmRlbGltOwotCXVfaW50MzJfdCByOwotCXVfaW50MzJfdCBtdWx0ID0gMTsgIC8qIFNlY29uZHMgYnkgZGVmYXVsdC4gKi8KLQotCWRlbGltID0gc3RyY2hyKHJhdGUsICcvJyk7Ci0JaWYgKGRlbGltKSB7Ci0JCWlmIChzdHJsZW4oZGVsaW0rMSkgPT0gMCkKLQkJCXJldHVybiAwOwotCi0JCWlmIChzdHJuY2FzZWNtcChkZWxpbSsxLCAic2Vjb25kIiwgc3RybGVuKGRlbGltKzEpKSA9PSAwKQotCQkJbXVsdCA9IDE7Ci0JCWVsc2UgaWYgKHN0cm5jYXNlY21wKGRlbGltKzEsICJtaW51dGUiLCBzdHJsZW4oZGVsaW0rMSkpID09IDApCi0JCQltdWx0ID0gNjA7Ci0JCWVsc2UgaWYgKHN0cm5jYXNlY21wKGRlbGltKzEsICJob3VyIiwgc3RybGVuKGRlbGltKzEpKSA9PSAwKQotCQkJbXVsdCA9IDYwKjYwOwotCQllbHNlIGlmIChzdHJuY2FzZWNtcChkZWxpbSsxLCAiZGF5Iiwgc3RybGVuKGRlbGltKzEpKSA9PSAwKQotCQkJbXVsdCA9IDI0KjYwKjYwOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKLQl9Ci0JciA9IGF0b2kocmF0ZSk7Ci0JaWYgKCFyKQotCQlyZXR1cm4gMDsKLQotCS8qIFRoaXMgd291bGQgZ2V0IG1hcHBlZCB0byBpbmZpbml0ZSAoMS9kYXkgaXMgbWluaW11bSB0aGV5Ci0gICAgICAgICAgIGNhbiBzcGVjaWZ5LCBzbyB3ZSdyZSBvayBhdCB0aGF0IGVuZCkuICovCi0JaWYgKHIgLyBtdWx0ID4gSVBUX0hBU0hMSU1JVF9TQ0FMRSkKLQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwgIlJhdGUgdG9vIGZhc3QgYCVzJ1xuIiwgcmF0ZSk7Ci0KLQkqdmFsID0gSVBUX0hBU0hMSU1JVF9TQ0FMRSAqIG11bHQgLyByOwotCXJldHVybiAxOwotfQotCi0vKiBJbml0aWFsaXplIHRoZSBtYXRjaC4gKi8KLXN0YXRpYyB2b2lkCi1pbml0KHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbSwgdW5zaWduZWQgaW50ICpuZmNhY2hlKQotewotCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKnIgPSAoc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqKW0tPmRhdGE7Ci0KLQlyLT5jZmcuYnVyc3QgPSBJUFRfSEFTSExJTUlUX0JVUlNUOwotCXItPmNmZy5nY19pbnRlcnZhbCA9IElQVF9IQVNITElNSVRfR0NJTlRFUlZBTDsKLQlyLT5jZmcuZXhwaXJlID0gSVBUX0hBU0hMSU1JVF9FWFBJUkU7Ci0KLX0KLQotCi0vKiBQYXJzZSBhICdtb2RlJyBwYXJhbWV0ZXIgaW50byB0aGUgcmVxdWlyZWQgYml0bWFzayAqLwotc3RhdGljIGludCBwYXJzZV9tb2RlKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKnIsIGNoYXIgKm9wdGFyZykKLXsKLQljaGFyICp0b2s7Ci0JY2hhciAqYXJnID0gc3RyZHVwKG9wdGFyZyk7Ci0KLQlpZiAoIWFyZykKLQkJcmV0dXJuIC0xOwotCi0Jci0+Y2ZnLm1vZGUgPSAwOwotCi0JZm9yICh0b2sgPSBzdHJ0b2soYXJnLCAiLHwiKTsKLQkgICAgIHRvazsKLQkgICAgIHRvayA9IHN0cnRvayhOVUxMLCAiLHwiKSkgewotCQlpZiAoIXN0cmNtcCh0b2ssICJkc3RpcCIpKQotCQkJci0+Y2ZnLm1vZGUgfD0gSVBUX0hBU0hMSU1JVF9IQVNIX0RJUDsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICJzcmNpcCIpKQotCQkJci0+Y2ZnLm1vZGUgfD0gSVBUX0hBU0hMSU1JVF9IQVNIX1NJUDsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICJzcmNwb3J0IikpCi0JCQlyLT5jZmcubW9kZSB8PSBJUFRfSEFTSExJTUlUX0hBU0hfU1BUOwotCQllbHNlIGlmICghc3RyY21wKHRvaywgImRzdHBvcnQiKSkKLQkJCXItPmNmZy5tb2RlIHw9IElQVF9IQVNITElNSVRfSEFTSF9EUFQ7Ci0JCWVsc2UgewotCQkJZnJlZShhcmcpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCWZyZWUoYXJnKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBQQVJBTV9MSU1JVAkJMHgwMDAwMDAwMQotI2RlZmluZSBQQVJBTV9CVVJTVAkJMHgwMDAwMDAwMgotI2RlZmluZSBQQVJBTV9NT0RFCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFBBUkFNX05BTUUJCTB4MDAwMDAwMDgKLSNkZWZpbmUgUEFSQU1fU0laRQkJMHgwMDAwMDAxMAotI2RlZmluZSBQQVJBTV9NQVgJCTB4MDAwMDAwMjAKLSNkZWZpbmUgUEFSQU1fR0NJTlRFUlZBTAkweDAwMDAwMDQwCi0jZGVmaW5lIFBBUkFNX0VYUElSRQkJMHgwMDAwMDA4MAotCi0vKiBGdW5jdGlvbiB3aGljaCBwYXJzZXMgY29tbWFuZCBvcHRpb25zOyByZXR1cm5zIHRydWUgaWYgaXQKLSAgIGF0ZSBhbiBvcHRpb24gKi8KLXN0YXRpYyBpbnQKLXBhcnNlKGludCBjLCBjaGFyICoqYXJndiwgaW50IGludmVydCwgdW5zaWduZWQgaW50ICpmbGFncywKLSAgICAgIGNvbnN0IHZvaWQgKmVudHJ5LAotICAgICAgdW5zaWduZWQgaW50ICpuZmNhY2hlLAotICAgICAgc3RydWN0IHh0X2VudHJ5X21hdGNoICoqbWF0Y2gpCi17Ci0Jc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqciA9IAotCQkJKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKikoKm1hdGNoKS0+ZGF0YTsKLQl1bnNpZ25lZCBpbnQgbnVtOwotCi0Jc3dpdGNoKGMpIHsKLQljYXNlICclJzoKLQkJaWYgKGNoZWNrX2ludmVyc2UoYXJndltvcHRpbmQtMV0sICZpbnZlcnQsICZvcHRpbmQsIDApKSBicmVhazsKLQkJaWYgKCFwYXJzZV9yYXRlKG9wdGFyZywgJnItPmNmZy5hdmcpKQotCQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwKLQkJCQkgICAiYmFkIHJhdGUgYCVzJyIsIG9wdGFyZyk7Ci0JCSpmbGFncyB8PSBQQVJBTV9MSU1JVDsKLQkJYnJlYWs7Ci0KLQljYXNlICckJzoKLQkJaWYgKGNoZWNrX2ludmVyc2UoYXJndltvcHRpbmQtMV0sICZpbnZlcnQsICZvcHRpbmQsIDApKSBicmVhazsKLQkJaWYgKHN0cmluZ190b19udW1iZXIob3B0YXJnLCAwLCAxMDAwMCwgJm51bSkgPT0gLTEpCi0JCQlleGl0X2Vycm9yKFBBUkFNRVRFUl9QUk9CTEVNLAotCQkJCSAgICJiYWQgLS1oYXNobGltaXQtYnVyc3QgYCVzJyIsIG9wdGFyZyk7Ci0JCXItPmNmZy5idXJzdCA9IG51bTsKLQkJKmZsYWdzIHw9IFBBUkFNX0JVUlNUOwotCQlicmVhazsKLQljYXNlICcmJzoKLQkJaWYgKGNoZWNrX2ludmVyc2UoYXJndltvcHRpbmQtMV0sICZpbnZlcnQsICZvcHRpbmQsIDApKSBicmVhazsKLQkJaWYgKHN0cmluZ190b19udW1iZXIob3B0YXJnLCAwLCAweGZmZmZmZmZmLCAmbnVtKSA9PSAtMSkKLQkJCWV4aXRfZXJyb3IoUEFSQU1FVEVSX1BST0JMRU0sCi0JCQkJImJhZCAtLWhhc2hsaW1pdC1odGFibGUtc2l6ZTogYCVzJyIsIG9wdGFyZyk7Ci0JCXItPmNmZy5zaXplID0gbnVtOwotCQkqZmxhZ3MgfD0gUEFSQU1fU0laRTsKLQkJYnJlYWs7Ci0JY2FzZSAnKic6Ci0JCWlmIChjaGVja19pbnZlcnNlKGFyZ3Zbb3B0aW5kLTFdLCAmaW52ZXJ0LCAmb3B0aW5kLCAwKSkgYnJlYWs7Ci0JCWlmIChzdHJpbmdfdG9fbnVtYmVyKG9wdGFyZywgMCwgMHhmZmZmZmZmZiwgJm51bSkgPT0gLTEpCi0JCQlleGl0X2Vycm9yKFBBUkFNRVRFUl9QUk9CTEVNLAotCQkJCSJiYWQgLS1oYXNobGltaXQtaHRhYmxlLW1heDogYCVzJyIsIG9wdGFyZyk7Ci0JCXItPmNmZy5tYXggPSBudW07Ci0JCSpmbGFncyB8PSBQQVJBTV9NQVg7Ci0JCWJyZWFrOwotCWNhc2UgJygnOgotCQlpZiAoY2hlY2tfaW52ZXJzZShhcmd2W29wdGluZC0xXSwgJmludmVydCwgJm9wdGluZCwgMCkpIGJyZWFrOwotCQlpZiAoc3RyaW5nX3RvX251bWJlcihvcHRhcmcsIDAsIDB4ZmZmZmZmZmYsICZudW0pID09IC0xKQotCQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwKLQkJCQkiYmFkIC0taGFzaGxpbWl0LWh0YWJsZS1nY2ludGVydmFsOiBgJXMnIiwgCi0JCQkJb3B0YXJnKTsKLQkJLyogRklYTUU6IG5vdCBIWiBkZXBlbmRlbnQhISAqLwotCQlyLT5jZmcuZ2NfaW50ZXJ2YWwgPSBudW07Ci0JCSpmbGFncyB8PSBQQVJBTV9HQ0lOVEVSVkFMOwotCQlicmVhazsKLQljYXNlICcpJzoKLQkJaWYgKGNoZWNrX2ludmVyc2UoYXJndltvcHRpbmQtMV0sICZpbnZlcnQsICZvcHRpbmQsIDApKSBicmVhazsKLQkJaWYgKHN0cmluZ190b19udW1iZXIob3B0YXJnLCAwLCAweGZmZmZmZmZmLCAmbnVtKSA9PSAtMSkKLQkJCWV4aXRfZXJyb3IoUEFSQU1FVEVSX1BST0JMRU0sCi0JCQkJImJhZCAtLWhhc2hsaW1pdC1odGFibGUtZXhwaXJlOiBgJXMnIiwgb3B0YXJnKTsKLQkJLyogRklYTUU6IG5vdCBIWiBkZXBlbmRlbnQgKi8KLQkJci0+Y2ZnLmV4cGlyZSA9IG51bTsKLQkJKmZsYWdzIHw9IFBBUkFNX0VYUElSRTsKLQkJYnJlYWs7Ci0JY2FzZSAnXyc6Ci0JCWlmIChjaGVja19pbnZlcnNlKGFyZ3Zbb3B0aW5kLTFdLCAmaW52ZXJ0LCAmb3B0aW5kLCAwKSkgYnJlYWs7Ci0JCWlmIChwYXJzZV9tb2RlKHIsIG9wdGFyZykgPCAwKQotCQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwgCi0JCQkJICAgImJhZCAtLWhhc2hsaW1pdC1tb2RlOiBgJXMnXG4iLCBvcHRhcmcpOwotCQkqZmxhZ3MgfD0gUEFSQU1fTU9ERTsKLQkJYnJlYWs7Ci0JY2FzZSAnIic6Ci0JCWlmIChjaGVja19pbnZlcnNlKGFyZ3Zbb3B0aW5kLTFdLCAmaW52ZXJ0LCAmb3B0aW5kLCAwKSkgYnJlYWs7Ci0JCWlmIChzdHJsZW4ob3B0YXJnKSA9PSAwKQotCQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwgIlplcm8tbGVuZ3RoIG5hbWU/Iik7Ci0JCXN0cm5jcHkoci0+bmFtZSwgb3B0YXJnLCBzaXplb2Yoci0+bmFtZSkpOwotCQkqZmxhZ3MgfD0gUEFSQU1fTkFNRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGludmVydCkKLQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwKLQkJCSAgICJoYXNobGltaXQgZG9lcyBub3Qgc3VwcG9ydCBpbnZlcnQiKTsKLQotCXJldHVybiAxOwotfQotCi0vKiBGaW5hbCBjaGVjazsgbm90aGluZy4gKi8KLXN0YXRpYyB2b2lkIGZpbmFsX2NoZWNrKHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlpZiAoIShmbGFncyAmIFBBUkFNX0xJTUlUKSkKLQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwKLQkJCQkiWW91IGhhdmUgdG8gc3BlY2lmeSAtLWhhc2hsaW1pdCIpOwotCWlmICghKGZsYWdzICYgUEFSQU1fTU9ERSkpCi0JCWV4aXRfZXJyb3IoUEFSQU1FVEVSX1BST0JMRU0sCi0JCQkJIllvdSBoYXZlIHRvIHNwZWNpZnkgLS1oYXNobGltaXQtbW9kZSIpOwotCWlmICghKGZsYWdzICYgUEFSQU1fTkFNRSkpCi0JCWV4aXRfZXJyb3IoUEFSQU1FVEVSX1BST0JMRU0sCi0JCQkJIllvdSBoYXZlIHRvIHNwZWNpZnkgLS1oYXNobGltaXQtbmFtZSIpOwotfQotCi1zdGF0aWMgc3RydWN0IHJhdGVzCi17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1X2ludDMyX3QgbXVsdDsKLX0gcmF0ZXNbXSA9IHsgeyAiZGF5IiwgSVBUX0hBU0hMSU1JVF9TQ0FMRSoyNCo2MCo2MCB9LAotCSAgICAgIHsgImhvdXIiLCBJUFRfSEFTSExJTUlUX1NDQUxFKjYwKjYwIH0sCi0JICAgICAgeyAibWluIiwgSVBUX0hBU0hMSU1JVF9TQ0FMRSo2MCB9LAotCSAgICAgIHsgInNlYyIsIElQVF9IQVNITElNSVRfU0NBTEUgfSB9OwotCi1zdGF0aWMgdm9pZCBwcmludF9yYXRlKHVfaW50MzJfdCBwZXJpb2QpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgc2l6ZW9mKHJhdGVzKS9zaXplb2Yoc3RydWN0IHJhdGVzKTsgaSsrKSB7Ci0JCWlmIChwZXJpb2QgPiByYXRlc1tpXS5tdWx0Ci0gICAgICAgICAgICB8fCByYXRlc1tpXS5tdWx0L3BlcmlvZCA8IHJhdGVzW2ldLm11bHQlcGVyaW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRmKCIldS8lcyAiLCByYXRlc1tpLTFdLm11bHQgLyBwZXJpb2QsIHJhdGVzW2ktMV0ubmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X21vZGUoY29uc3Qgc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqciwgY2hhciBzZXBhcmF0b3IpCi17Ci0JaW50IHByZXZtb2RlID0gMDsKLQotCWlmIChyLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9TSVApIHsKLQkJaWYgKHByZXZtb2RlKQotCQkJcHV0Y2hhcihzZXBhcmF0b3IpOwotCQlmcHV0cygic3JjaXAiLCBzdGRvdXQpOwotCQlwcmV2bW9kZSA9IDE7Ci0JfQotCWlmIChyLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9TUFQpIHsKLQkJaWYgKHByZXZtb2RlKQotCQkJcHV0Y2hhcihzZXBhcmF0b3IpOwotCQlmcHV0cygic3JjcG9ydCIsIHN0ZG91dCk7Ci0JCXByZXZtb2RlID0gMTsKLQl9Ci0JaWYgKHItPmNmZy5tb2RlICYgSVBUX0hBU0hMSU1JVF9IQVNIX0RJUCkgewotCQlpZiAocHJldm1vZGUpCi0JCQlwdXRjaGFyKHNlcGFyYXRvcik7Ci0JCWZwdXRzKCJkc3RpcCIsIHN0ZG91dCk7Ci0JCXByZXZtb2RlID0gMTsKLQl9Ci0JaWYgKHItPmNmZy5tb2RlICYgSVBUX0hBU0hMSU1JVF9IQVNIX0RQVCkgewotCQlpZiAocHJldm1vZGUpCi0JCQlwdXRjaGFyKHNlcGFyYXRvcik7Ci0JCWZwdXRzKCJkc3Rwb3J0Iiwgc3Rkb3V0KTsKLQl9Ci0JcHV0Y2hhcignICcpOwotfQotCi0vKiBQcmludHMgb3V0IHRoZSBtYXRjaGluZm8uICovCi1zdGF0aWMgdm9pZAotcHJpbnQoY29uc3Qgdm9pZCAqaXAsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm1hdGNoLAotICAgICAgaW50IG51bWVyaWMpCi17Ci0Jc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqciA9IAotCQkoc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqKW1hdGNoLT5kYXRhOwotCWZwdXRzKCJsaW1pdDogYXZnICIsIHN0ZG91dCk7IHByaW50X3JhdGUoci0+Y2ZnLmF2Zyk7Ci0JcHJpbnRmKCJidXJzdCAldSAiLCByLT5jZmcuYnVyc3QpOwotCWZwdXRzKCJtb2RlICIsIHN0ZG91dCk7Ci0JcHJpbnRfbW9kZShyLCAnLScpOwotCWlmIChyLT5jZmcuc2l6ZSkKLQkJcHJpbnRmKCJodGFibGUtc2l6ZSAldSAiLCByLT5jZmcuc2l6ZSk7Ci0JaWYgKHItPmNmZy5tYXgpCi0JCXByaW50ZigiaHRhYmxlLW1heCAldSAiLCByLT5jZmcubWF4KTsKLQlpZiAoci0+Y2ZnLmdjX2ludGVydmFsICE9IElQVF9IQVNITElNSVRfR0NJTlRFUlZBTCkKLQkJcHJpbnRmKCJodGFibGUtZ2NpbnRlcnZhbCAldSAiLCByLT5jZmcuZ2NfaW50ZXJ2YWwpOwotCWlmIChyLT5jZmcuZXhwaXJlICE9IElQVF9IQVNITElNSVRfRVhQSVJFKQotCQlwcmludGYoImh0YWJsZS1leHBpcmUgJXUgIiwgci0+Y2ZnLmV4cGlyZSk7Ci19Ci0KLS8qIEZJWE1FOiBNYWtlIG1pbmltYWxpc3Q6IG9ubHkgcHJpbnQgcmF0ZSBpZiBub3QgZGVmYXVsdCAtLVJSICovCi1zdGF0aWMgdm9pZCBzYXZlKGNvbnN0IHZvaWQgKmlwLCBjb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm1hdGNoKQotewotCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKnIgPSAKLQkJKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKiltYXRjaC0+ZGF0YTsKLQotCWZwdXRzKCItLWhhc2hsaW1pdCAiLCBzdGRvdXQpOyBwcmludF9yYXRlKHItPmNmZy5hdmcpOwotCWlmIChyLT5jZmcuYnVyc3QgIT0gSVBUX0hBU0hMSU1JVF9CVVJTVCkKLQkJcHJpbnRmKCItLWhhc2hsaW1pdC1idXJzdCAldSAiLCByLT5jZmcuYnVyc3QpOwotCi0JZnB1dHMoIi0taGFzaGxpbWl0LW1vZGUgIiwgc3Rkb3V0KTsKLQlwcmludF9tb2RlKHIsICcsJyk7Ci0JCi0JcHJpbnRmKCItLWhhc2hsaW1pdC1uYW1lICVzICIsIHItPm5hbWUpOwotCi0JaWYgKHItPmNmZy5zaXplKQotCQlwcmludGYoIi0taGFzaGxpbWl0LWh0YWJsZS1zaXplICV1ICIsIHItPmNmZy5zaXplKTsKLQlpZiAoci0+Y2ZnLm1heCkKLQkJcHJpbnRmKCItLWhhc2hsaW1pdC1odGFibGUtbWF4ICV1ICIsIHItPmNmZy5tYXgpOwotCWlmIChyLT5jZmcuZ2NfaW50ZXJ2YWwgIT0gSVBUX0hBU0hMSU1JVF9HQ0lOVEVSVkFMKQotCQlwcmludGYoIi0taGFzaGxpbWl0LWh0YWJsZS1nY2ludGVydmFsICV1Iiwgci0+Y2ZnLmdjX2ludGVydmFsKTsKLQlpZiAoci0+Y2ZnLmV4cGlyZSAhPSBJUFRfSEFTSExJTUlUX0VYUElSRSkKLQkJcHJpbnRmKCItLWhhc2hsaW1pdC1odGFibGUtZXhwaXJlICV1ICIsIHItPmNmZy5leHBpcmUpOwotfQotCi1zdGF0aWMgc3RydWN0IGlwdGFibGVzX21hdGNoIGhhc2hsaW1pdCA9IHsgTlVMTCwKLQkubmFtZQkJPSAiaGFzaGxpbWl0IiwKLQkudmVyc2lvbgk9IElQVEFCTEVTX1ZFUlNJT04sCi0JLnNpemUJCT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvKSksCi0JLnVzZXJzcGFjZXNpemUJPSBvZmZzZXRvZihzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvLCBoaW5mbyksCi0JLmhlbHAJCT0gJmhlbHAsCi0JLmluaXQJCT0gJmluaXQsCi0JLnBhcnNlCQk9ICZwYXJzZSwKLQkuZmluYWxfY2hlY2sJPSAmZmluYWxfY2hlY2ssCi0JLnByaW50CQk9ICZwcmludCwKLQkuc2F2ZQkJPSAmc2F2ZSwKLQkuZXh0cmFfb3B0cwk9IG9wdHMKLX07Ci0KLXZvaWQgX2luaXQodm9pZCkKLXsKLQlyZWdpc3Rlcl9tYXRjaCgmaGFzaGxpbWl0KTsKLX0KZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMvbGliaXA2dF9oYXNobGltaXQuYyBiL2V4dGVuc2lvbnMvbGlieHRfaGFzaGxpbWl0LmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gZXh0ZW5zaW9ucy9saWJpcDZ0X2hhc2hsaW1pdC5jCnJlbmFtZSB0byBleHRlbnNpb25zL2xpYnh0X2hhc2hsaW1pdC5jCmluZGV4IDIyY2NhMGIuLmI0N2M0MzIgMTAwNjQ0Ci0tLSBhL2V4dGVuc2lvbnMvbGliaXA2dF9oYXNobGltaXQuYworKysgYi9leHRlbnNpb25zL2xpYnh0X2hhc2hsaW1pdC5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8aXA2dGFibGVzLmg+CisjaW5jbHVkZSA8eHRhYmxlcy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0Lmg+CiAKICNkZWZpbmUgWFRfSEFTSExJTUlUX0JVUlNUCTUKQEAgLTk2LDcgKzk2LDcgQEAKIAogLyogSW5pdGlhbGl6ZSB0aGUgbWF0Y2guICovCiBzdGF0aWMgdm9pZAotaW5pdChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgdW5zaWduZWQgaW50ICpuZmNhY2hlKQoraW5pdChzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0sIHVuc2lnbmVkIGludCAqbmZjYWNoZSkKIHsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKnIgPSAoc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICopbS0+ZGF0YTsKIApAQCAtMTUzLDcgKzE1Myw3IEBACiBwYXJzZShpbnQgYywgY2hhciAqKmFyZ3YsIGludCBpbnZlcnQsIHVuc2lnbmVkIGludCAqZmxhZ3MsCiAgICAgICBjb25zdCB2b2lkICplbnRyeSwKICAgICAgIHVuc2lnbmVkIGludCAqbmZjYWNoZSwKLSAgICAgIHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICoqbWF0Y2gpCisgICAgICBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKiptYXRjaCkKIHsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKnIgPSAKIAkJCShzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKikoKm1hdGNoKS0+ZGF0YTsKQEAgLTMwNSw3ICszMDUsNyBAQAogLyogUHJpbnRzIG91dCB0aGUgbWF0Y2hpbmZvLiAqLwogc3RhdGljIHZvaWQKIHByaW50KGNvbnN0IHZvaWQgKmlwLAotICAgICAgY29uc3Qgc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm1hdGNoLAorICAgICAgY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICptYXRjaCwKICAgICAgIGludCBudW1lcmljKQogewogCXN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9IApAQCAtMzI1LDcgKzMyNSw3IEBACiB9CiAKIC8qIEZJWE1FOiBNYWtlIG1pbmltYWxpc3Q6IG9ubHkgcHJpbnQgcmF0ZSBpZiBub3QgZGVmYXVsdCAtLVJSICovCi1zdGF0aWMgdm9pZCBzYXZlKGNvbnN0IHZvaWQgKmlwLCBjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbWF0Y2gpCitzdGF0aWMgdm9pZCBzYXZlKGNvbnN0IHZvaWQgKmlwLCBjb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm1hdGNoKQogewogCXN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9IAogCQkoc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICopbWF0Y2gtPmRhdGE7CkBAIC0zNDksMTAgKzM0OSwxMSBAQAogCQlwcmludGYoIi0taGFzaGxpbWl0LWh0YWJsZS1leHBpcmUgJXUgIiwgci0+Y2ZnLmV4cGlyZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXA2dGFibGVzX21hdGNoIGhhc2hsaW1pdCA9IHsgTlVMTCwKK3N0YXRpYyBzdHJ1Y3QgeHRhYmxlc19tYXRjaCBoYXNobGltaXQgPSB7CisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5uYW1lCQk9ICJoYXNobGltaXQiLAogCS52ZXJzaW9uCT0gSVBUQUJMRVNfVkVSU0lPTiwKLQkuc2l6ZQkJPSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8pKSwKKwkuc2l6ZQkJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvKSksCiAJLnVzZXJzcGFjZXNpemUJPSBvZmZzZXRvZihzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8sIGhpbmZvKSwKIAkuaGVscAkJPSAmaGVscCwKIAkuaW5pdAkJPSAmaW5pdCwKQEAgLTM2MCwxMCArMzYxLDI2IEBACiAJLmZpbmFsX2NoZWNrCT0gJmZpbmFsX2NoZWNrLAogCS5wcmludAkJPSAmcHJpbnQsCiAJLnNhdmUJCT0gJnNhdmUsCi0JLmV4dHJhX29wdHMJPSBvcHRzCisJLmV4dHJhX29wdHMJPSBvcHRzLAorfTsKKworc3RhdGljIHN0cnVjdCB4dGFibGVzX21hdGNoIGhhc2hsaW1pdDYgPSB7CisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkubmFtZQkJPSAiaGFzaGxpbWl0IiwKKwkudmVyc2lvbgk9IElQVEFCTEVTX1ZFUlNJT04sCisJLnNpemUJCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbykpLAorCS51c2Vyc3BhY2VzaXplCT0gb2Zmc2V0b2Yoc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvLCBoaW5mbyksCisJLmhlbHAJCT0gJmhlbHAsCisJLmluaXQJCT0gJmluaXQsCisJLnBhcnNlCQk9ICZwYXJzZSwKKwkuZmluYWxfY2hlY2sJPSAmZmluYWxfY2hlY2ssCisJLnByaW50CQk9ICZwcmludCwKKwkuc2F2ZQkJPSAmc2F2ZSwKKwkuZXh0cmFfb3B0cwk9IG9wdHMsCiB9OwogCiB2b2lkIF9pbml0KHZvaWQpCiB7Ci0JcmVnaXN0ZXJfbWF0Y2g2KCZoYXNobGltaXQpOworCXh0YWJsZXNfcmVnaXN0ZXJfbWF0Y2goJmhhc2hsaW1pdCk7CisJeHRhYmxlc19yZWdpc3Rlcl9tYXRjaCgmaGFzaGxpbWl0Nik7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hhc2hsaW1pdC5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaAppbmRleCBhYzJjYjY0Li5iNDU1NmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaApAQCAtMSwxOCArMSwxOCBAQAotI2lmbmRlZiBfSVBUX0hBU0hMSU1JVF9ICi0jZGVmaW5lIF9JUFRfSEFTSExJTUlUX0gKKyNpZm5kZWYgX1hUX0hBU0hMSU1JVF9ICisjZGVmaW5lIF9YVF9IQVNITElNSVRfSAogCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCi0jZGVmaW5lIElQVF9IQVNITElNSVRfU0NBTEUgMTAwMDAKKyNkZWZpbmUgWFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKICAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KIAogLyogZGV0YWlscyBvZiB0aGlzIHN0cnVjdHVyZSBoaWRkZW4gYnkgdGhlIGltcGxlbWVudGF0aW9uICovCi1zdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGU7CitzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZTsKIAotI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfRElQCTB4MDAwMQotI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfRFBUCTB4MDAwMgotI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfU0lQCTB4MDAwNAotI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfU1BUCTB4MDAwOAorI2RlZmluZSBYVF9IQVNITElNSVRfSEFTSF9ESVAJMHgwMDAxCisjZGVmaW5lIFhUX0hBU0hMSU1JVF9IQVNIX0RQVAkweDAwMDIKKyNkZWZpbmUgWFRfSEFTSExJTUlUX0hBU0hfU0lQCTB4MDAwNAorI2RlZmluZSBYVF9IQVNITElNSVRfSEFTSF9TUFQJMHgwMDA4CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnIHsKIAl1X2ludDMyX3QgbW9kZTsJICAvKiBiaXRtYXNrIG9mIElQVF9IQVNITElNSVRfSEFTSF8qICovCkBAIC0yNiwxNSArMjYsMTUgQEAKIAl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLwogfTsKIAotc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyB7CitzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gewogCWNoYXIgbmFtZSBbSUZOQU1TSVpdOwkJLyogbmFtZSAqLwogCXN0cnVjdCBoYXNobGltaXRfY2ZnIGNmZzsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOworCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbzsKIAogCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCiAJdW5pb24gewogCQl2b2lkICpwdHI7Ci0JCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKm1hc3RlcjsKKwkJc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICptYXN0ZXI7CiAJfSB1OwogfTsKLSNlbmRpZiAvKl9JUFRfSEFTSExJTUlUX0gqLworI2VuZGlmIC8qX1hUX0hBU0hMSU1JVF9IKi8K