ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJscGEvbHBhX2VzOXBsdXMuYyBiL2FwL2xpYi9saWJscGEvbHBhX2VzOXBsdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzA4NDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYmxwYS9scGFfZXM5cGx1cy5jCkBAIC0wLDAgKzEsMTkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8vDQorLy+yzrz7IExQQb3Tv9rOxLW1VjAuMSBTR1AuMjIsILe1u9hKU09ODQorLy8gICANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPGN0eXBlLmg+DQorI2luY2x1ZGUgPHN5cy90aW1lLmg+DQorI2luY2x1ZGUgPHRlcm1pb3MuaD4NCisNCisjaW5jbHVkZSAibHBhX2lubmVyLmgiDQorDQorDQorI2RlZmluZSBMUEFfQVVUSF9EQVRBX0xFTiA1MTINCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8vDQorLy9ldWljY0NoYWxsZW5nZTq/qLe1u9i1xEFQRFUssru6rDkwMDANCisvL2V1aWNjSW5mbzE6IL+ot7W72LXEQVBEVSyyu7qsOTAwMA0KKy8vc21kcEFkZHJlc3M6vKS77sLr1tBzZG1wtdjWtw0KKy8vt7W72Gpzb24NCisvLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorY2hhciAqSW5pdGlhdGVBdXRoZW50aWNhdGlvbihjaGFyICpldWljY0NoYWxsZW5nZSwgY2hhciAqZXVpY2NJbmZvMSwgY2hhciAqc21kcEFkZHJlc3MpDQorew0KKwljaGFyICpqc19kYXRhID0gTlVMTDsNCisJdW5zaWduZWQgY2hhciBjbGdfYnl0ZVtBUERVX0JZVEVfTEVOXSA9IHswfTsNCisJdW5zaWduZWQgY2hhciBpbmZvMV9ieXRlW0FQRFVfQllURV9MRU5dID0gezB9Ow0KKwlpbnQgY2xnX2xlbiA9IDA7DQorCWludCBpbmZvMV9sZW4gPSAwOw0KKwljaGFyICpjbGdfYjY0ID0gTlVMTDsNCisJY2hhciAqaW5mbzFfYjY0ID0gTlVMTDsNCisNCisJY2xnX2xlbiA9IHN0cmluZzJieXRlcyhldWljY0NoYWxsZW5nZSwgY2xnX2J5dGUsIHN0cmxlbihldWljY0NoYWxsZW5nZSkpOw0KKwljbGdfYjY0ID0gbHBhX2Jhc2U2NF9lbmNvZGUoY2xnX2J5dGUsIGNsZ19sZW4pOw0KKwlpZiAoY2xnX2I2NCA9PSBOVUxMKQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCWluZm8xX2xlbiA9IHN0cmluZzJieXRlcyhldWljY0luZm8xLCBpbmZvMV9ieXRlLCBzdHJsZW4oZXVpY2NJbmZvMSkpOw0KKwlpbmZvMV9iNjQgPSBscGFfYmFzZTY0X2VuY29kZShpbmZvMV9ieXRlLCBpbmZvMV9sZW4pOw0KKwlpZiAoaW5mbzFfYjY0ID09IE5VTEwpIHsNCisJCWZyZWUoY2xnX2I2NCk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKwkNCisJanNfZGF0YSA9IG1hbGxvYyhMUEFfQVVUSF9EQVRBX0xFTik7DQorCWlmIChqc19kYXRhICE9IE5VTEwpIHsNCisJCW1lbXNldChqc19kYXRhLCAwLCBMUEFfQVVUSF9EQVRBX0xFTik7DQorCQlzbnByaW50Zihqc19kYXRhLCBMUEFfQVVUSF9EQVRBX0xFTiwgIntcImV1aWNjQ2hhbGxlbmdlXCI6XCIlc1wiLFwiZXVpY2NJbmZvMVwiOlwiJXNcIixcInNtZHBBZGRyZXNzXCI6XCIlc1wifSIsIA0KKyAgICAJCWNsZ19iNjQsIGluZm8xX2I2NCwgc21kcEFkZHJlc3MpOw0KKwkJLy9wcmludGYoImpzX2RhdGE6LSVzLVxuIiwganNfZGF0YSk7DQorCX0NCisNCisJZnJlZShjbGdfYjY0KTsNCisJZnJlZShpbmZvMV9iNjQpOw0KKwlyZXR1cm4ganNfZGF0YTsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvLw0KKy8vdHJhbnNhY3Rpb25JZDogc21kcCBJbml0aWF0ZUF1dGhlbnRpY2F0aW9uvdO/2re1u9gNCisvL2F1dGhTZXJSZXNwSGV4Or+ot7W72LXEQVBEVSyyu7qsOTAwMA0KKy8vDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitjaGFyICpBdXRoZW50aWNhdGVDbGllbnQoDQorY2hhciAqdHJhbnNhY3Rpb25JZCwNCitjaGFyICphdXRoU2VyUmVzcEhleCkNCit7DQorCWNoYXIgKmFjX2pzID0gTlVMTDsNCisJdW5zaWduZWQgY2hhciAqYXNfYnl0ZSA9IE5VTEw7DQorCWludCBhc19ieXRlX2xlbiA9IDA7DQorCWludCBhc2hleF9sZW4gPSBzdHJsZW4oYXV0aFNlclJlc3BIZXgpOw0KKwljaGFyICphc19iNjQgPSBOVUxMOw0KKwlpbnQgYXNfYjY0X2xlbiA9IDA7DQorDQorCWFzX2J5dGUgPSBtYWxsb2MoYXNoZXhfbGVuLzIgKyAxKTsNCisJaWYgKGFzX2J5dGUgPT0gTlVMTCkgew0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisJbWVtc2V0KGFzX2J5dGUsIDAsIGFzaGV4X2xlbi8yICsgMSk7DQorDQorCWFzX2J5dGVfbGVuID0gc3RyaW5nMmJ5dGVzKGF1dGhTZXJSZXNwSGV4LCBhc19ieXRlLCBhc2hleF9sZW4pOw0KKwlhc19iNjQgPSBscGFfYmFzZTY0X2VuY29kZShhc19ieXRlLCBhc19ieXRlX2xlbik7DQorCWlmIChhc19iNjQgPT0gTlVMTCkgew0KKwkJZnJlZShhc19ieXRlKTsNCisJCXJldHVybiBOVUxMOwkNCisJfQ0KKwlhc19iNjRfbGVuID0gc3RybGVuKGFzX2I2NCk7DQorCQ0KKwlhY19qcyA9IG1hbGxvYyhhc19iNjRfbGVuICsgMTAwKTsNCisJaWYgKGFjX2pzICE9IE5VTEwpIHsNCisJCW1lbXNldChhY19qcywgMCwgYXNfYjY0X2xlbiArIDEwMCk7DQorCQlzbnByaW50ZihhY19qcywgYXNfYjY0X2xlbiArIDEwMCwgIntcInRyYW5zYWN0aW9uSWRcIjpcIiVzXCIsXCJhdXRoZW50aWNhdGVTZXJ2ZXJSZXNwb25zZVwiOlwiJXNcIn0iLCANCisJCQl0cmFuc2FjdGlvbklkLCBhc19iNjQpOw0KKwkJLy9wcmludGYoImpzX2RhdGE6LSVzLVxuIiwgYWNfanMpOw0KKwl9DQorDQorCWZyZWUoYXNfYnl0ZSk7DQorCWZyZWUoYXNfYjY0KTsNCisJcmV0dXJuIGFjX2pzOw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8vDQorLy90cmFuc2FjdGlvbklkOiBzbWRwIEF1dGhlbnRpY2F0ZUNsaWVudL3Tv9q3tbvYDQorLy9wcmVkbFJlc3BIZXg6IHByZXBhcmVEb3dubG9hZFJlc3BvbnNlSGV4IL+ot7W72LXEQVBEVSyyu7qsOTAwMA0KKy8vDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitjaGFyICpHZXRCb3VuZFByb2ZpbGVQYWNrYWdlICgNCitjaGFyICp0cmFuc2FjdGlvbklkLA0KK2NoYXIgKnByZWRsUmVzcEhleCkNCit7DQorCWNoYXIgKmJwcF9qcyA9IE5VTEw7DQorCXVuc2lnbmVkIGNoYXIgKnBkbF9ieXRlID0gTlVMTDsNCisJaW50IHBkbF9ieXRlX2xlbiA9IDA7DQorCWludCBwZGxoZXhfbGVuID0gc3RybGVuKHByZWRsUmVzcEhleCk7DQorCWNoYXIgKnBkbF9iNjQgPSBOVUxMOw0KKwlpbnQgcGRsX2I2NF9sZW4gPSAwOw0KKw0KKwlwZGxfYnl0ZSA9IG1hbGxvYyhwZGxoZXhfbGVuLzIgKyAxKTsNCisJaWYgKHBkbF9ieXRlID09IE5VTEwpIHsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorCW1lbXNldChwZGxfYnl0ZSwgMCwgcGRsaGV4X2xlbi8yICsgMSk7DQorDQorCXBkbF9ieXRlX2xlbiA9IHN0cmluZzJieXRlcyhwcmVkbFJlc3BIZXgsIHBkbF9ieXRlLCBwZGxoZXhfbGVuKTsNCisJcGRsX2I2NCA9IGxwYV9iYXNlNjRfZW5jb2RlKHBkbF9ieXRlLCBwZGxfYnl0ZV9sZW4pOw0KKwlpZiAocGRsX2I2NCA9PSBOVUxMKSB7DQorCQlmcmVlKHBkbF9ieXRlKTsNCisJCXJldHVybiBOVUxMOwkNCisJfQ0KKwlwZGxfYjY0X2xlbiA9IHN0cmxlbihwZGxfYjY0KTsNCisJDQorCWJwcF9qcyA9IG1hbGxvYyhwZGxfYjY0X2xlbiArIDEwMCk7DQorCWlmIChicHBfanMgIT0gTlVMTCkgew0KKwkJbWVtc2V0KGJwcF9qcywgMCwgcGRsX2I2NF9sZW4gKyAxMDApOw0KKwkJc25wcmludGYoYnBwX2pzLCBwZGxfYjY0X2xlbiArIDEwMCwgIntcInRyYW5zYWN0aW9uSWRcIjpcIiVzXCIsXCJwcmVwYXJlRG93bmxvYWRSZXNwb25zZVwiOlwiJXNcIn0iLCANCisJCQl0cmFuc2FjdGlvbklkLCBwZGxfYjY0KTsNCisJCS8vcHJpbnRmKCJqc19kYXRhOi0lcy1cbiIsIGJwcF9qcyk7DQorCX0NCisNCisJZnJlZShwZGxfYnl0ZSk7DQorCWZyZWUocGRsX2I2NCk7DQorCXJldHVybiBicHBfanM7DQorfQ0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLy8NCisvL3BuZkhleDogcGVuZGluZ05vdGlmaWNhdGlvbiC/qLe1u9i1xEFQRFUssru6rDkwMDANCisvLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorY2hhciAqSGFuZGxlTm90aWZpY2F0aW9uKGNoYXIgKnBuZkhleCkNCit7DQorCWNoYXIgKmJwcF9qcyA9IE5VTEw7DQorCXVuc2lnbmVkIGNoYXIgKnBkbF9ieXRlID0gTlVMTDsNCisJaW50IHBkbF9ieXRlX2xlbiA9IDA7DQorCWludCBwZGxoZXhfbGVuID0gc3RybGVuKHBuZkhleCk7DQorCWNoYXIgKnBkbF9iNjQgPSBOVUxMOw0KKwlpbnQgcGRsX2I2NF9sZW4gPSAwOw0KKw0KKwlwZGxfYnl0ZSA9IG1hbGxvYyhwZGxoZXhfbGVuLzIgKyAxKTsNCisJaWYgKHBkbF9ieXRlID09IE5VTEwpIHsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorCW1lbXNldChwZGxfYnl0ZSwgMCwgcGRsaGV4X2xlbi8yICsgMSk7DQorDQorCXBkbF9ieXRlX2xlbiA9IHN0cmluZzJieXRlcyhwbmZIZXgsIHBkbF9ieXRlLCBwZGxoZXhfbGVuKTsNCisJcGRsX2I2NCA9IGxwYV9iYXNlNjRfZW5jb2RlKHBkbF9ieXRlLCBwZGxfYnl0ZV9sZW4pOw0KKwlpZiAocGRsX2I2NCA9PSBOVUxMKSB7DQorCQlmcmVlKHBkbF9ieXRlKTsNCisJCXJldHVybiBOVUxMOwkNCisJfQ0KKwlwZGxfYjY0X2xlbiA9IHN0cmxlbihwZGxfYjY0KTsNCisJDQorCWJwcF9qcyA9IG1hbGxvYyhwZGxfYjY0X2xlbiArIDEwMCk7DQorCWlmIChicHBfanMgIT0gTlVMTCkgew0KKwkJbWVtc2V0KGJwcF9qcywgMCwgcGRsX2I2NF9sZW4gKyAxMDApOw0KKwkJc25wcmludGYoYnBwX2pzLCBwZGxfYjY0X2xlbiArIDEwMCwgDQorCQkJIntcImhlYWRlclwiOntcImZ1bmN0aW9uRXhlY3V0aW9uU3RhdHVzXCI6e1wic3RhdHVzXCI6XCJFeGVjdXRlZC1TdWNjZXNzXCJ9fSxcInBlbmRpbmdOb3RpZmljYXRpb25cIjpcIiVzXCJ9IiwgcGRsX2I2NCk7DQorCQkvL3ByaW50ZigianNfZGF0YTotJXMtXG4iLCBicHBfanMpOw0KKwl9DQorDQorCWZyZWUocGRsX2J5dGUpOw0KKwlmcmVlKHBkbF9iNjQpOw0KKwlyZXR1cm4gYnBwX2pzOw0KK30NCisNCisNCg==