From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?utf-8?B?bGl1anVubGlhbmdfbGps?=" Subject: =?utf-8?B?UmU6IFJlOiBbUEFUQ0gtU1I5NzAwXSBNZXJnZSBVU0IgMS4xIEV0aGVybmV0IEFkYXB0ZXIgU1I5NzAwIERldmljZURyaXZlciBpbnRvIHRoZSBMaW51eCBLZXJuZWw=?= Date: Wed, 21 Aug 2013 18:02:45 +0800 Message-ID: <201308211802427961789@163.com> References: <201308201850095789331@163.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "=?utf-8?B?Z3JlZ2to?=" , "=?utf-8?B?bGludXgtdXNi?=" , "=?utf-8?B?bmV0ZGV2?=" , "=?utf-8?B?bGludXgta2VybmVs?=" , "=?utf-8?B?c3VuaGVjaGVuZw==?=" To: "=?utf-8?B?QmVuIEh1dGNoaW5ncw==?=" Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org RGVhciBCZW4gOg0KDQoJCTEsICBwbGVhc2UgZ2l2ZSBtZSBlbWFpbCBhZGRyZXNzIG9mIERhdmlk IE1pbGxlciwgYW5kIFRoYW5rcyBhIGxvdC4NCg0KCQkyLCAgcGxlYXNlIGNoZWNrIHRoZSBuZXcg c3I5NzAwIGRldmljZSBkcml2ZXIgd2hpY2ggaXMgY2hlY2tlZCBieSB0aGUgc2NyaXB0IHRvb2xz DQoJCQkNCgkJCQlzY3JpcHRzL2NoZWNrcGF0Y2gucGwgDQoJCQlhbmQgdGhlIGF0dGFjaG1lbnQg ZmlsZSBpcyB0aGUgcmVzdWx0IG9mIHNjcmlwdHMvY2hlY2twYXRjaC5wbCBwYXRjaC1jb21taXQt MjAxMzA4MjENCg0KCQkJSSdtIHNvcnJ5IHRoYXQgSSdtIHN0aWxsIGZpbmRpbmcgdGhlIHdheSB0 byBzaWduZWQtb2ZmDQoNCgkJMywgVGhhbmtzIGFnYWluIGZvciB5b3VyIGNvcnJlY3Qgc3VnZ2Vz dGlvbiBhbmQgUGxlYXNlIGNoZWNrIHRoZSBuZXcgZGV2aWNlIGRyaXZlciBwYXRjaC4NCgkJDQpb UEFUQ0hdIDogIA0KICANCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZyBiL2Ry aXZlcnMvbmV0L3VzYi9LY29uZmlnDQppbmRleCAyODdjYzYyLi5hOTRiMTk2IDEwMDY0NA0KLS0t IGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcNCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9LY29uZmln DQpAQCAtMjcyLDYgKzI3MiwxNCBAQCBjb25maWcgVVNCX05FVF9ETTk2MDENCiAJICBUaGlzIG9w dGlvbiBhZGRzIHN1cHBvcnQgZm9yIERhdmljb20gRE05NjAxIGJhc2VkIFVTQiAxLjENCiAJICAx MC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuDQogDQorY29uZmlnIFVTQl9ORVRfU1I5NzAwDQorCXRy aXN0YXRlICJDb3JlQ2hpcC1zeiBTUjk3MDAgYmFzZWQgVVNCIDEuMSAxMC8xMDAgZXRoZXJuZXQg ZGV2aWNlcyINCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUDQorCXNlbGVjdCBDUkMzMg0KKwloZWxw DQorCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBDb3JlQ2hpcC1zeiBTUjk3MDAgYmFz ZWQgVVNCIDEuMQ0KKwkgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycy4NCisNCiBjb25maWcgVVNC X05FVF9TTVNDNzVYWA0KIAl0cmlzdGF0ZSAiU01TQyBMQU43NVhYIGJhc2VkIFVTQiAyLjAgZ2ln YWJpdCBldGhlcm5ldCBkZXZpY2VzIg0KIAlkZXBlbmRzIG9uIFVTQl9VU0JORVQNCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUN CmluZGV4IDlhYjVjOWQuLmJiYTg3YTIgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC91c2IvTWFr ZWZpbGUNCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZQ0KQEAgLTE0LDYgKzE0LDcgQEAg b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5v DQogb2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVIpCSs9IGNkY19ldGhlci5vDQogb2JqLSQo Q09ORklHX1VTQl9ORVRfQ0RDX0VFTSkJKz0gY2RjX2VlbS5vDQogb2JqLSQoQ09ORklHX1VTQl9O RVRfRE05NjAxKQkrPSBkbTk2MDEubw0KK29iai0kKENPTkZJR19VU0JfTkVUX1NSOTcwMCkJKz0g c3I5NzAwLm8NCiBvYmotJChDT05GSUdfVVNCX05FVF9TTVNDNzVYWCkJKz0gc21zYzc1eHgubw0K IG9iai0kKENPTkZJR19VU0JfTkVUX1NNU0M5NVhYKQkrPSBzbXNjOTV4eC5vDQogb2JqLSQoQ09O RklHX1VTQl9ORVRfR0w2MjBBKQkrPSBnbDYyMGEubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3VzYi9zcjk3MDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAuLjljOGYxNjcNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZl cnMvbmV0L3VzYi9zcjk3MDAuYw0KQEAgLTAsMCArMSw1MzYgQEANCisvKg0KKyAqIENvcmVDaGlw LXN6IFNSOTcwMCBvbmUgY2hpcCBVU0IgMS4xIEV0aGVybmV0IERldmljZXMNCisgKg0KKyAqIEF1 dGhvciA6IGxpdWpsIDxsaXVqdW5saWFuZ19samxAMTYzLmNvbT4NCisgKg0KKyAqIEJhc2VkIG9u IGRtOTYwMS5jDQorICoNCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIHZlcnNpb24gMi4gIFRoaXMg cHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQ0K KyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqLw0KKw0KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8 bGludXgvc3RkZGVmLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGlu dXgvbmV0ZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1 ZGUgPGxpbnV4L2V0aHRvb2wuaD4NCisjaW5jbHVkZSA8bGludXgvbWlpLmg+DQorI2luY2x1ZGUg PGxpbnV4L3VzYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPg0KKyNpbmNsdWRlIDxsaW51 eC91c2IvdXNibmV0Lmg+DQorDQorI2luY2x1ZGUgInNyOTcwMC5oIg0KKw0KK3N0YXRpYyBpbnQg c3JfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTE2IGxlbmd0aCwgdm9pZCAqZGF0 YSkNCit7DQorCWludCBlcnI7DQorDQorCWVyciA9IHVzYm5ldF9yZWFkX2NtZChkZXYsIFNSX1JE X1JFR1MsIFNSX1JFUV9SRF9SRUcsDQorCQkJCQkwLCByZWcsIGRhdGEsIGxlbmd0aCk7DQorCWlm ICgoZXJyICE9IGxlbmd0aCkgJiYgKGVyciA+PSAwKSkNCisJCWVyciA9IC1FSU5WQUw7DQorCXJl dHVybiBlcnI7DQorfQ0KKw0KK3N0YXRpYyBpbnQgc3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2 LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQgKmRhdGEpDQorew0KKwlpbnQgZXJyOw0KKw0KKwll cnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgU1JfV1JfUkVHUywgU1JfUkVRX1dSX1JFRywNCisJ CQkJCTAsIHJlZywgZGF0YSwgbGVuZ3RoKTsNCisJaWYgKChlcnIgPj0gMCkgJiYgKGVyciA8IGxl bmd0aCkpDQorCQllcnIgPSAtRUlOVkFMOw0KKwlyZXR1cm4gZXJyOw0KK30NCisNCitzdGF0aWMg aW50IHNyX3JlYWRfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCAqdmFsdWUpDQor ew0KKwlyZXR1cm4gc3JfcmVhZChkZXYsIHJlZywgMSwgdmFsdWUpOw0KK30NCisNCitzdGF0aWMg aW50IHNyX3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpDQor ew0KKwlyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFNSX1dSX1JFR1MsIFNSX1JFUV9XUl9S RUcsDQorCQkJCQl2YWx1ZSwgcmVnLCBOVUxMLCAwKTsNCit9DQorDQorc3RhdGljIHZvaWQgc3Jf d3JpdGVfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQg KmRhdGEpDQorew0KKwl1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgU1JfV1JfUkVHUywgU1Jf UkVRX1dSX1JFRywNCisJCQkJCTAsIHJlZywgZGF0YSwgbGVuZ3RoKTsNCit9DQorDQorc3RhdGlj IHZvaWQgc3Jfd3JpdGVfcmVnX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2 YWx1ZSkNCit7DQorCXVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBTUl9XUl9SRUdTLCBTUl9S RVFfV1JfUkVHLA0KKwkJCQkJdmFsdWUsIHJlZywgTlVMTCwgMCk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgc3Jfc2hhcmVfcmVhZF93b3JkKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeSwgdTggcmVn LCBfX2xlMTYgKnZhbHVlKQ0KK3sNCisJaW50IHJldCwgaTsNCisNCisJbXV0ZXhfbG9jaygmZGV2 LT5waHlfbXV0ZXgpOw0KKw0KKwlzcl93cml0ZV9yZWcoZGV2LCBFUEFSLCBwaHkgPyAocmVnIHwg MHg0MCkgOiByZWcpOw0KKwlzcl93cml0ZV9yZWcoZGV2LCBFUENSLCBwaHkgPyAweGMgOiAweDQp Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgU1JfU0hBUkVfVElNRU9VVDsgaSsrKSB7DQorCQl1OCB0 bXAgPSAwOw0KKw0KKwkJdWRlbGF5KDEpOw0KKwkJcmV0ID0gc3JfcmVhZF9yZWcoZGV2LCBFUENS LCAmdG1wKTsNCisJCWlmIChyZXQgPCAwKQ0KKwkJCWdvdG8gb3V0X3VubG9jazsNCisNCisJCS8q IHJlYWR5ICovDQorCQlpZiAoKHRtcCAmIEVQQ1JfRVJSRSkgPT0gMCkNCisJCQlicmVhazsNCisJ fQ0KKw0KKwlpZiAoaSA+PSBTUl9TSEFSRV9USU1FT1VUKSB7DQorCQluZXRkZXZfZXJyKGRldi0+ bmV0LCAiJXMgcmVhZCB0aW1lZCBvdXQhXG4iLCBwaHkgPyAicGh5IiA6ICJlZXByb20iKTsNCisJ CXJldCA9IC1FSU87DQorCQlnb3RvIG91dF91bmxvY2s7DQorCX0NCisNCisJc3Jfd3JpdGVfcmVn KGRldiwgRVBDUiwgMHgwKTsNCisJcmV0ID0gc3JfcmVhZChkZXYsIEVQRFIsIDIsIHZhbHVlKTsN CisNCisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlYWQgc2hhcmVkICVkIDB4JTAyeCByZXR1cm5l ZCAweCUwNHgsICVkXG4iLA0KKwkgICAgICAgcGh5LCByZWcsICp2YWx1ZSwgcmV0KTsNCisNCisg b3V0X3VubG9jazoNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBoeV9tdXRleCk7DQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgc3Jfc2hhcmVfd3JpdGVfd29yZChzdHJ1Y3QgdXNibmV0 ICpkZXYsIGludCBwaHksIHU4IHJlZywgX19sZTE2IHZhbHVlKQ0KK3sNCisJaW50IHJldCwgaTsN CisNCisJbXV0ZXhfbG9jaygmZGV2LT5waHlfbXV0ZXgpOw0KKw0KKwlyZXQgPSBzcl93cml0ZShk ZXYsIEVQRFIsIDIsICZ2YWx1ZSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byBvdXRfdW5sb2Nr Ow0KKw0KKwlzcl93cml0ZV9yZWcoZGV2LCBFUEFSLCBwaHkgPyAocmVnIHwgMHg0MCkgOiByZWcp Ow0KKwlzcl93cml0ZV9yZWcoZGV2LCBFUENSLCBwaHkgPyAweDFhIDogMHgxMik7DQorDQorCWZv ciAoaSA9IDA7IGkgPCBTUl9TSEFSRV9USU1FT1VUOyBpKyspIHsNCisJCXU4IHRtcCA9IDA7DQor DQorCQl1ZGVsYXkoMSk7DQorCQlyZXQgPSBzcl9yZWFkX3JlZyhkZXYsIEVQQ1IsICZ0bXApOw0K KwkJaWYgKHJldCA8IDApDQorCQkJZ290byBvdXRfdW5sb2NrOw0KKw0KKwkJLyogcmVhZHkgKi8N CisJCWlmICgodG1wICYgRVBDUl9FUlJFKSA9PSAwKQ0KKwkJCWJyZWFrOw0KKwl9DQorDQorCWlm IChpID49IFNSX1NIQVJFX1RJTUVPVVQpIHsNCisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICIlcyB3 cml0ZSB0aW1lZCBvdXQhXG4iLCBwaHkgPyAicGh5IiA6ICJlZXByb20iKTsNCisJCXJldCA9IC1F SU87DQorCQlnb3RvIG91dF91bmxvY2s7DQorCX0NCisNCisJc3Jfd3JpdGVfcmVnKGRldiwgRVBD UiwgMHgwKTsNCisNCitvdXRfdW5sb2NrOg0KKwltdXRleF91bmxvY2soJmRldi0+cGh5X211dGV4 KTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBzcl9yZWFkX2VlcHJvbV93b3Jk KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggb2Zmc2V0LCB2b2lkICp2YWx1ZSkNCit7DQorCXJldHVy biBzcl9zaGFyZV9yZWFkX3dvcmQoZGV2LCAwLCBvZmZzZXQsIHZhbHVlKTsNCit9DQorDQorc3Rh dGljIGludCBzcjk3MDBfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7 DQorCXJldHVybiBTUl9FRVBST01fTEVOOw0KK30NCisNCitzdGF0aWMgaW50IHNyOTcwMF9nZXRf ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVw cm9tLCB1OCAqZGF0YSkNCit7DQorCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5l dCk7DQorCV9fbGUxNiAqZWJ1ZiA9IChfX2xlMTYgKikgZGF0YTsNCisJaW50IHJldCA9IDA7DQor CWludCBpOw0KKw0KKwkvKiBhY2Nlc3MgaXMgMTZiaXQgKi8NCisJaWYgKChlZXByb20tPm9mZnNl dCAlIDIpIHx8IChlZXByb20tPmxlbiAlIDIpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWZv ciAoaSA9IDA7IGkgPCBlZXByb20tPmxlbiAvIDI7IGkrKykNCisJCQlyZXQgPSBzcl9yZWFkX2Vl cHJvbV93b3JkKGRldiwgZWVwcm9tLT5vZmZzZXQgLyAyICsgaSwgJmVidWZbaV0pOw0KKw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHNyX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2Rl dmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQ0KK3sNCisJc3RydWN0IHVzYm5ldCAq ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsNCisJX19sZTE2IHJlczsNCisJaW50IHJjID0gMDsN CisNCisJaWYgKHBoeV9pZCkgew0KKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIk9ubHkgaW50ZXJu YWwgcGh5IHN1cHBvcnRlZFxuIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwkvKiBBY2Nlc3Mg TlNSX0xJTktTVCBiaXQgZm9yIGxpbmsgc3RhdHVzIGluc3RlYWQgb2YgTUlJX0JNU1IgKi8NCisJ aWYgKGxvYyA9PSBNSUlfQk1TUikgew0KKwkJCXU4IHZhbHVlOw0KKw0KKwkJCXNyX3JlYWRfcmVn KGRldiwgTlNSLCAmdmFsdWUpOw0KKwkJCWlmICh2YWx1ZSAmIE5TUl9MSU5LU1QpDQorCQkJCQly YyA9IDE7DQorCX0NCisJc3Jfc2hhcmVfcmVhZF93b3JkKGRldiwgMSwgbG9jLCAmcmVzKTsNCisJ aWYgKHJjID09IDEpDQorCQkJcmV0dXJuIGxlMTZfdG9fY3B1KHJlcykgfCBCTVNSX0xTVEFUVVM7 DQorCWVsc2UNCisJCQlyZXR1cm4gbGUxNl90b19jcHUocmVzKSAmIH5CTVNSX0xTVEFUVVM7DQor DQorCW5ldGRldl9kYmcoZGV2LT5uZXQsDQorCSAgICAgICAic3JfbWRpb19yZWFkKCkgcGh5X2lk PTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcbiIsDQorCSAgICAgICBwaHlfaWQs IGxvYywgbGUxNl90b19jcHUocmVzKSk7DQorDQorCXJldHVybiBsZTE2X3RvX2NwdShyZXMpOw0K K30NCisNCitzdGF0aWMgdm9pZCBzcl9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRk ZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpDQorew0KKwlzdHJ1Y3QgdXNibmV0ICpk ZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KKwlfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFs KTsNCisNCisJaWYgKHBoeV9pZCkgew0KKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIk9ubHkgaW50 ZXJuYWwgcGh5IHN1cHBvcnRlZFxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJbmV0ZGV2X2Ri ZyhkZXYtPm5ldCwgInNyX21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2 YWw9MHglMDR4XG4iLA0KKwkgICAgICAgcGh5X2lkLCBsb2MsIHZhbCk7DQorDQorCXNyX3NoYXJl X3dyaXRlX3dvcmQoZGV2LCAxLCBsb2MsIHJlcyk7DQorfQ0KKw0KK3N0YXRpYyB1MzIgc3I5NzAw X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpDQorew0KKwlzdHJ1Y3QgdXNibmV0ICpk ZXYgPSBuZXRkZXZfcHJpdihuZXQpOw0KKwlpbnQgcmMgPSAwOw0KKwl1OCB2YWx1ZSA9IDA7DQor DQorCS8qIEdldCB0aGUgTGluayBTdGF0dXMgZGlyZWN0bHkgKi8NCisJc3JfcmVhZF9yZWcoZGV2 LCBOU1IsICZ2YWx1ZSk7DQorCWlmICh2YWx1ZSAmIE5TUl9MSU5LU1QpDQorCQlyYyA9IDE7DQor DQorCXJldHVybiByYzsNCit9DQorDQorc3RhdGljIGludCBzcjk3MDBfaW9jdGwoc3RydWN0IG5l dF9kZXZpY2UgKm5ldCwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkNCit7DQorCXN0cnVjdCB1 c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7DQorDQorCXJldHVybiBnZW5lcmljX21paV9p b2N0bCgmZGV2LT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7DQorfQ0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3I5NzAwX2V0aHRvb2xfb3BzID0gew0KKwkuZ2V0X2Ry dmluZm8JPSB1c2JuZXRfZ2V0X2RydmluZm8sDQorCS5nZXRfbGluawkJPSBzcjk3MDBfZ2V0X2xp bmssDQorCS5nZXRfbXNnbGV2ZWwJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLA0KKwkuc2V0X21zZ2xl dmVsCT0gdXNibmV0X3NldF9tc2dsZXZlbCwNCisJLmdldF9lZXByb21fbGVuCT0gc3I5NzAwX2dl dF9lZXByb21fbGVuLA0KKwkuZ2V0X2VlcHJvbQkJPSBzcjk3MDBfZ2V0X2VlcHJvbSwNCisJLmdl dF9zZXR0aW5ncwk9IHVzYm5ldF9nZXRfc2V0dGluZ3MsDQorCS5zZXRfc2V0dGluZ3MJPSB1c2Ju ZXRfc2V0X3NldHRpbmdzLA0KKwkubndheV9yZXNldAkJPSB1c2JuZXRfbndheV9yZXNldCwNCit9 Ow0KKw0KK3N0YXRpYyB2b2lkIHNyOTcwMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNl ICpuZXQpDQorew0KKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOw0KKwkv KiBXZSB1c2UgdGhlIDIwIGJ5dGUgZGV2LT5kYXRhIGZvciBvdXIgOCBieXRlIGZpbHRlciBidWZm ZXINCisJICogdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgdGhhdCBpcyB0cmlja3kgdG8gZnJl ZSBsYXRlcg0KKwkgKi8NCisJdTggKmhhc2hlcyA9ICh1OCAqKSAmZGV2LT5kYXRhOw0KKwkvKiBy eF9jdGwgc2V0dGluZyA6IGVuYWJsZSwgZGlzYWJsZV9sb25nLCBkaXNhYmxlX2NyYyAqLw0KKwl1 OCByeF9jdGwgPSBSQ1JfUlhFTiB8IFJDUl9ESVNfQ1JDIHwgUkNSX0RJU19MT05HOw0KKw0KKwlt ZW1zZXQoaGFzaGVzLCAweDAwLCBTUl9NQ0FTVF9TSVpFKTsNCisJaGFzaGVzW1NSX01DQVNUX1NJ WkUgLSAxXSB8PSBTUl9NQ0FTVF9BRERSX0ZMQUc7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovDQor DQorCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsNCisJCQlyeF9jdGwgfD0gUkNSX1BS TVNDOw0KKwl9IGVsc2UgaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwNCisJCQkJCW5l dGRldl9tY19jb3VudChuZXQpID4gU1JfTUNBU1RfTUFYKSB7DQorCQkJcnhfY3RsIHw9IFJDUl9S VU5UOw0KKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSkgew0KKwkJCXN0cnVjdCBu ZXRkZXZfaHdfYWRkciAqaGE7DQorCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIG5ldCkg ew0KKwkJCQkJdTMyIGNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgaGEtPmFkZHIpID4+IDI2Ow0K KwkJCQkJaGFzaGVzW2NyYyA+PiAzXSB8PSAxIDw8IChjcmMgJiAweDcpOw0KKwkJCX0NCisJfQ0K Kw0KKwlzcl93cml0ZV9hc3luYyhkZXYsIE1BUiwgU1JfTUNBU1RfU0laRSwgaGFzaGVzKTsNCisJ c3Jfd3JpdGVfcmVnX2FzeW5jKGRldiwgUkNSLCByeF9jdGwpOw0KK30NCisNCitzdGF0aWMgaW50 IHNyOTcwMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdm9pZCAqcCkN Cit7DQorCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7DQorCXN0cnVjdCB1c2JuZXQgKmRldiA9 IG5ldGRldl9wcml2KG5ldCk7DQorDQorCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5z YV9kYXRhKSkgew0KKwkJbmV0ZGV2X2VycihuZXQsICJub3Qgc2V0dGluZyBpbnZhbGlkIG1hYyBh ZGRyZXNzICVwTVxuIiwNCisJCQkJCQlhZGRyLT5zYV9kYXRhKTsNCisJCXJldHVybiAtRUlOVkFM Ow0KKwl9DQorDQorCW1lbWNweShuZXQtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXQtPmFk ZHJfbGVuKTsNCisJc3Jfd3JpdGVfYXN5bmMoZGV2LCBQQVIsIDYsIGRldi0+bmV0LT5kZXZfYWRk cik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZp Y2Vfb3BzIHNyOTcwMF9uZXRkZXZfb3BzID0gew0KKwkubmRvX29wZW4JCQk9IHVzYm5ldF9vcGVu LA0KKwkubmRvX3N0b3AJCQk9IHVzYm5ldF9zdG9wLA0KKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNi bmV0X3N0YXJ0X3htaXQsDQorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwN CisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LA0KKwkubmRvX3ZhbGlkYXRl X2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwNCisJLm5kb19kb19pb2N0bAkJPSBzcjk3MDBfaW9j dGwsDQorCS5uZG9fc2V0X3J4X21vZGUJPSBzcjk3MDBfc2V0X211bHRpY2FzdCwNCisJLm5kb19z ZXRfbWFjX2FkZHJlc3MJPSBzcjk3MDBfc2V0X21hY19hZGRyZXNzLA0KK307DQorDQorc3RhdGlj IGludCBzcjk3MDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNl ICppbnRmKQ0KK3sNCisJaW50IHJldDsNCisNCisJcmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMo ZGV2LCBpbnRmKTsNCisJaWYgKHJldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlkZXYtPm5ldC0+bmV0 ZGV2X29wcyA9ICZzcjk3MDBfbmV0ZGV2X29wczsNCisJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0g JnNyOTcwMF9ldGh0b29sX29wczsNCisJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBTUl9U WF9PVkVSSEVBRDsNCisJZGV2LT5oYXJkX210dSA9IGRldi0+bmV0LT5tdHUgKyBkZXYtPm5ldC0+ aGFyZF9oZWFkZXJfbGVuOw0KKwlkZXYtPnJ4X3VyYl9zaXplID0gMzA3MjsJLyogYnVsa2luIGJ1 ZmZlciBpcyBwcmVmZXJhYmx5IG5vdCBsZXNzIHRoYW4gM0sgKi8NCisNCisJZGV2LT5taWkuZGV2 ID0gZGV2LT5uZXQ7DQorCWRldi0+bWlpLm1kaW9fcmVhZCA9IHNyX21kaW9fcmVhZDsNCisJZGV2 LT5taWkubWRpb193cml0ZSA9IHNyX21kaW9fd3JpdGU7DQorCWRldi0+bWlpLnBoeV9pZF9tYXNr ID0gMHgxZjsNCisJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsNCisNCisJLyogcmVzZXQg dGhlIHNyOTcwMCAqLw0KKwlzcl93cml0ZV9yZWcoZGV2LCBOQ1IsIDEpOw0KKwl1ZGVsYXkoMjAp Ow0KKw0KKwkvKiByZWFkIE1BQw0KKwkgKiBBZnRlciBDaGlwIFBvd2VyIG9uLCB0aGUgQ2hpcCB3 aWxsIHJlbG9hZCB0aGUgTUFDIGZyb20gRUVQUk9NIGF1dG9tYXRpY2FsbHkgdG8gUEFSDQorCSAq IEluIGNhc2UgdGhlcmUgaXMgbm8gRUVQUk9NIGV4dGVybmFsbHksIGEgZGVmYXVsdCBNQUMgYWRk cmVzcyBpcyBzdG9yZWQgaW4gUEFSIGZvciBtYWtpbmcgY2hpcCB3b3JrIHByb3Blcmx5DQorCSAq Lw0KKwlpZiAoc3JfcmVhZChkZXYsIFBBUiwgRVRIX0FMRU4sIGRldi0+bmV0LT5kZXZfYWRkcikg PCAwKSB7DQorCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgcmVhZGluZyBNQUMgYWRkcmVz c1xuIik7DQorCQlyZXQgPSAtRU5PREVWOw0KKwkJZ290byBvdXQ7DQorCX0NCisNCisJLyogcG93 ZXIgdXAgYW5kIHJlc2V0IHBoeSAqLw0KKwlzcl93cml0ZV9yZWcoZGV2LCBQUlIsIDEpOw0KKwlt ZGVsYXkoMjApOwkJLyogYXQgbGVhc3QgMTBtcywgaGVyZSAyMG1zIGZvciBzYWZlICovDQorCXNy X3dyaXRlX3JlZyhkZXYsIFBSUiwgMCk7DQorCXVkZWxheSgyICogMTAwMCk7CS8qIGF0IGxlYXN0 IDFtcywgaGVyZSAybXMgZm9yIHJlYWRpbmcgcmlnaHQgcmVnaXN0ZXIgKi8NCisNCisJLyogcmVj ZWl2ZSBicm9hZGNhc3QgcGFja2V0cyAqLw0KKwlzcjk3MDBfc2V0X211bHRpY2FzdChkZXYtPm5l dCk7DQorDQorCXNyX21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JN Q1IsIEJNQ1JfUkVTRVQpOw0KKwlzcl9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlf aWQsIE1JSV9BRFZFUlRJU0UsIEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVS VElTRV9QQVVTRV9DQVApOw0KKwltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7DQorDQorb3V0 Og0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHNyOTcwMF9yeF9maXh1cChzdHJ1 Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlpbnQgbGVuOw0KKwlz dHJ1Y3Qgc2tfYnVmZiAqc3Jfc2tiOw0KKw0KKwkvKiBmb3JtYXQ6DQorCSAgIGIwOiByeCBzdGF0 dXMNCisJICAgYjE6IHBhY2tldCBsZW5ndGggKGluY2wgY3JjKSBsb3cNCisJICAgYjI6IHBhY2tl dCBsZW5ndGggKGluY2wgY3JjKSBoaWdoDQorCSAgIGIzLi5uLTQ6IHBhY2tldCBkYXRhDQorCSAg IGJuLTMuLmJuOiBldGhlcm5ldCBjcmMNCisJICovDQorDQorCWlmICh1bmxpa2VseShza2ItPmxl biA8IFNSX1JYX09WRVJIRUFEKSkgew0KKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgInVuZXhwZWN0 ZWQgdGlueSByeCBmcmFtZVxuIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwkvKiBFYWNoIHBh Y2tldCBjb250YWlucyBtdWx0aXBsZSBza2JzICovDQorCXdoaWxlIChza2ItPmxlbiA+IFNSX1JY X09WRVJIRUFEKSB7DQorCQlpZiAoc2tiLT5kYXRhWzBdICE9IDB4NDApDQorCQkJcmV0dXJuIDA7 DQorDQorCQkvKiBpZ25vcmUgdGhlIENSQyBsZW5ndGggKi8NCisJCWxlbiA9IChza2ItPmRhdGFb MV0gfCAoc2tiLT5kYXRhWzJdIDw8IDgpKSAtIDQ7DQorDQorCQlpZiAobGVuID4gRVRIX0ZSQU1F X0xFTikNCisJCQlyZXR1cm4gMDsNCisNCisJCS8qIHRoZSBsYXN0IHNrYiBvZiBjdXJyZW50IHBh Y2tldCAqLw0KKwkJaWYgKHNrYi0+bGVuID09IChsZW4gKyBTUl9SWF9PVkVSSEVBRCkpCXsNCisJ CQlza2JfcHVsbChza2IsIDMpOw0KKwkJCXNrYi0+bGVuID0gbGVuOw0KKwkJCXNrYi0+dGFpbCA9 IHNrYi0+ZGF0YSArIGxlbjsNCisJCQlza2ItPnRydWVzaXplID0gbGVuICsgc2l6ZW9mKHN0cnVj dCBza19idWZmKTsNCisJCQlyZXR1cm4gMjsNCisJCX0NCisNCisJCS8qIHNrYl9jbG9uZSBpcyB1 c2VkIGZvciBhZGRyZXNzIGFsaWduICovDQorCQlzcl9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBf QVRPTUlDKTsNCisJCWlmIChzcl9za2IpIHsNCisJCQlzcl9za2ItPmxlbiA9IGxlbjsNCisJCQlz cl9za2ItPmRhdGEgPSBza2ItPmRhdGEgKyAzOw0KKwkJCXNyX3NrYi0+dGFpbCA9IHNrYi0+ZGF0 YSArIGxlbjsNCisJCQlzcl9za2ItPnRydWVzaXplID0gbGVuICsgc2l6ZW9mKHN0cnVjdCBza19i dWZmKTsNCisJCQl1c2JuZXRfc2tiX3JldHVybihkZXYsIHNyX3NrYik7DQorCQl9IGVsc2Ugew0K KwkJCXJldHVybiAwOw0KKwkJfQ0KKw0KKwkJc2tiX3B1bGwoc2tiLCBsZW4gKyBTUl9SWF9PVkVS SEVBRCk7DQorCX07DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgc3RydWN0IHNrX2J1 ZmYgKnNyOTcwMF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpz a2IsIGdmcF90IGZsYWdzKQ0KK3sNCisJaW50IGxlbjsNCisNCisJLyogZm9ybWF0Og0KKwkgICBi MDogcGFja2V0IGxlbmd0aCBsb3cNCisJICAgYjE6IHBhY2tldCBsZW5ndGggaGlnaA0KKwkgICBi My4ubjogcGFja2V0IGRhdGENCisJKi8NCisNCisJbGVuID0gc2tiLT5sZW47DQorDQorCWlmIChz a2JfaGVhZHJvb20oc2tiKSA8IFNSX1RYX09WRVJIRUFEKSB7DQorCQlzdHJ1Y3Qgc2tfYnVmZiAq c2tiMjsNCisNCisJCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCBTUl9UWF9PVkVSSEVBRCwg MCwgZmxhZ3MpOw0KKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJCXNrYiA9IHNrYjI7DQor CQlpZiAoIXNrYikNCisJCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlfX3NrYl9wdXNoKHNrYiwg U1JfVFhfT1ZFUkhFQUQpOw0KKw0KKwkvKiB1c2JuZXQgYWRkcyBwYWRkaW5nIGlmIGxlbmd0aCBp cyBhIG11bHRpcGxlIG9mIHBhY2tldCBzaXplDQorCSAqIGlmIHNvLCBhZGp1c3QgbGVuZ3RoIHZh bHVlIGluIGhlYWRlcg0KKwkgKi8NCisJaWYgKChza2ItPmxlbiAlIGRldi0+bWF4cGFja2V0KSA9 PSAwKQ0KKwkJbGVuKys7DQorDQorCXNrYi0+ZGF0YVswXSA9IGxlbjsNCisJc2tiLT5kYXRhWzFd ID0gbGVuID4+IDg7DQorDQorCXJldHVybiBza2I7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHNyOTcw MF9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpDQorew0KKwlpbnQg bGluazsNCisJdTggKmJ1ZjsNCisNCisJLyogZm9ybWF0Og0KKwkgICBiMDogbmV0IHN0YXR1cw0K KwkgICBiMTogdHggc3RhdHVzIDENCisJICAgYjI6IHR4IHN0YXR1cyAyDQorCSAgIGIzOiByeCBz dGF0dXMNCisJICAgYjQ6IHJ4IG92ZXJmbG93DQorCSAgIGI1OiByeCBjb3VudA0KKwkgICBiNjog dHggY291bnQNCisJICAgYjc6IGdwcg0KKwkqLw0KKw0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3Ro IDwgOCkNCisJCXJldHVybjsNCisNCisJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7DQorDQor CWxpbmsgPSAhIShidWZbMF0gJiAweDQwKTsNCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LT5u ZXQpICE9IGxpbmspIHsNCisJCXVzYm5ldF9saW5rX2NoYW5nZShkZXYsIGxpbmssIDEpOw0KKwkJ bmV0ZGV2X2RiZyhkZXYtPm5ldCwgIkxpbmsgU3RhdHVzIGlzOiAlZFxuIiwgbGluayk7DQorCX0N Cit9DQorDQorc3RhdGljIGludCBzcjk3MDBfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYp DQorew0KKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsNCisNCisJbWlpX2NoZWNrX21lZGlhKCZk ZXYtPm1paSwgMSwgMSk7DQorCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7DQor DQorCW5ldGRldl9kYmcoZGV2LT5uZXQsICJsaW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDog JWRcbiIsDQorCSAgICAgICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCk7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIHNyOTcwMF9kcml2ZXJf aW5mbyA9IHsNCisJLmRlc2NyaXB0aW9uCT0gIkNvcmVDaGlwIFNSOTcwMCBVU0IgRXRoZXJuZXQi LA0KKwkuZmxhZ3MJCT0gRkxBR19FVEhFUiwNCisJLmJpbmQJCT0gc3I5NzAwX2JpbmQsDQorCS5y eF9maXh1cAk9IHNyOTcwMF9yeF9maXh1cCwNCisJLnR4X2ZpeHVwCT0gc3I5NzAwX3R4X2ZpeHVw LA0KKwkuc3RhdHVzCQk9IHNyOTcwMF9zdGF0dXMsDQorCS5saW5rX3Jlc2V0CT0gc3I5NzAwX2xp bmtfcmVzZXQsDQorCS5yZXNldAkJPSBzcjk3MDBfbGlua19yZXNldCwNCit9Ow0KKw0KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwcm9kdWN0c1tdID0gew0KKwl7DQorCSBVU0Jf REVWSUNFKDB4MGZlNiwgMHg5NzAwKSwJLyogU1I5NzAwIGRldmljZSAqLw0KKwkgLmRyaXZlcl9p bmZvID0gKHVuc2lnbmVkIGxvbmcpJnNyOTcwMF9kcml2ZXJfaW5mbywNCisJIH0sDQorCXt9LAkJ CS8qIEVORCAqLw0KK307DQorDQorTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHByb2R1Y3RzKTsN CisNCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3I5NzAwX3VzYl9kcml2ZXIgPSB7DQorCS5u YW1lID0gInNyOTcwMCIsDQorCS5pZF90YWJsZSA9IHByb2R1Y3RzLA0KKwkucHJvYmUgPSB1c2Ju ZXRfcHJvYmUsDQorCS5kaXNjb25uZWN0ID0gdXNibmV0X2Rpc2Nvbm5lY3QsDQorCS5zdXNwZW5k ID0gdXNibmV0X3N1c3BlbmQsDQorCS5yZXN1bWUgPSB1c2JuZXRfcmVzdW1lLA0KKwkuZGlzYWJs ZV9odWJfaW5pdGlhdGVkX2xwbSA9IDEsDQorfTsNCisNCittb2R1bGVfdXNiX2RyaXZlcihzcjk3 MDBfdXNiX2RyaXZlcik7DQorDQorTU9EVUxFX0FVVEhPUigibGl1amwgPGxpdWp1bmxpYW5nX2xq bEAxNjMuY29tPiIpOw0KK01PRFVMRV9ERVNDUklQVElPTigiU1I5NzAwIG9uZSBjaGlwIFVTQiAx LjEgVVNCIHRvIEV0aGVybmV0IGRldmljZSBmcm9tIGh0dHA6Ly93d3cuY29yZWNoaXAtc3ouY29t LyIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91 c2Ivc3I5NzAwLmggYi9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmgNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwLi5mMTk2OGFlDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L25ldC91c2Ivc3I5NzAwLmgNCkBAIC0wLDAgKzEsMTcyIEBADQorLyoNCisgKiBDb3JlQ2hpcC1z eiBTUjk3MDAgb25lIGNoaXAgVVNCIDEuMSBFdGhlcm5ldCBEZXZpY2VzDQorICoNCisgKiBBdXRo b3IgOiBsaXVqbCA8bGl1anVubGlhbmdfbGpsQDE2My5jb20+DQorICoNCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UNCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uDQorICovDQorDQorI2lmbmRlZiBfU1I5NzAwX0gNCisjZGVmaW5lCV9TUjk3MDBfSA0K Kw0KKy8qIHNyOTcwMCBzcGVjLiByZWdpc3RlciB0YWJsZSBvbiBMaW51eCBwbGF0Zm9ybSAqLw0K Kw0KKy8qIE5ldHdvcmsgQ29udHJvbCBSZWcgKi8NCisjZGVmaW5lCU5DUgkJCTB4MDANCisjZGVm aW5lCQlOQ1JfUlNUCQkJKDEgPDwgMCkNCisjZGVmaW5lCQlOQ1JfTEJLCQkJKDMgPDwgMSkNCisj ZGVmaW5lCQlOQ1JfRkRYCQkJKDEgPDwgMykNCisjZGVmaW5lCQlOQ1JfV0FLRUVOCQkoMSA8PCA2 KQ0KKy8qIE5ldHdvcmsgU3RhdHVzIFJlZyAqLw0KKyNkZWZpbmUJTlNSCQkJMHgwMQ0KKyNkZWZp bmUJCU5TUl9SWFJEWQkJKDEgPDwgMCkNCisjZGVmaW5lCQlOU1JfUlhPVgkJKDEgPDwgMSkNCisj ZGVmaW5lCQlOU1JfVFgxRU5ECQkoMSA8PCAyKQ0KKyNkZWZpbmUJCU5TUl9UWDJFTkQJCSgxIDw8 IDMpDQorI2RlZmluZQkJTlNSX1RYRlVMTAkJKDEgPDwgNCkNCisjZGVmaW5lCQlOU1JfV0FLRVNU CQkoMSA8PCA1KQ0KKyNkZWZpbmUJCU5TUl9MSU5LU1QJCSgxIDw8IDYpDQorI2RlZmluZQkJTlNS X1NQRUVECQkoMSA8PCA3KQ0KKy8qIFR4IENvbnRyb2wgUmVnICovDQorI2RlZmluZQlUQ1IJCQkw eDAyDQorI2RlZmluZQkJVENSX0NSQ19ESVMJCSgxIDw8IDEpDQorI2RlZmluZQkJVENSX1BBRF9E SVMJCSgxIDw8IDIpDQorI2RlZmluZQkJVENSX0xDX0NBUkUJCSgxIDw8IDMpDQorI2RlZmluZQkJ VENSX0NSU19DQVJFCSgxIDw8IDQpDQorI2RlZmluZQkJVENSX0VYQ0VDTQkJKDEgPDwgNSkNCisj ZGVmaW5lCQlUQ1JfTEZfRU4JCSgxIDw8IDYpDQorLyogVHggU3RhdHVzIFJlZyBmb3IgUGFja2V0 IEluZGV4IDEgKi8NCisjZGVmaW5lCVRTUjEJCTB4MDMNCisjZGVmaW5lCQlUU1IxX0VDCQkJKDEg PDwgMikNCisjZGVmaW5lCQlUU1IxX0NPTAkJKDEgPDwgMykNCisjZGVmaW5lCQlUU1IxX0xDCQkJ KDEgPDwgNCkNCisjZGVmaW5lCQlUU1IxX05DCQkJKDEgPDwgNSkNCisjZGVmaW5lCQlUU1IxX0xP QwkJKDEgPDwgNikNCisjZGVmaW5lCQlUU1IxX1RMRgkJKDEgPDwgNykNCisvKiBUeCBTdGF0dXMg UmVnIGZvciBQYWNrZXQgSW5kZXggMiAqLw0KKyNkZWZpbmUJVFNSMgkJMHgwNA0KKyNkZWZpbmUJ CVRTUjJfRUMJCQkoMSA8PCAyKQ0KKyNkZWZpbmUJCVRTUjJfQ09MCQkoMSA8PCAzKQ0KKyNkZWZp bmUJCVRTUjJfTEMJCQkoMSA8PCA0KQ0KKyNkZWZpbmUJCVRTUjJfTkMJCQkoMSA8PCA1KQ0KKyNk ZWZpbmUJCVRTUjJfTE9DCQkoMSA8PCA2KQ0KKyNkZWZpbmUJCVRTUjJfVExGCQkoMSA8PCA3KQ0K Ky8qIFJ4IENvbnRyb2wgUmVnKi8NCisjZGVmaW5lCVJDUgkJCTB4MDUNCisjZGVmaW5lCQlSQ1Jf UlhFTgkJKDEgPDwgMCkNCisjZGVmaW5lCQlSQ1JfUFJNU0MJCSgxIDw8IDEpDQorI2RlZmluZQkJ UkNSX1JVTlQJCSgxIDw8IDIpDQorI2RlZmluZQkJUkNSX0FMTAkJCSgxIDw8IDMpDQorI2RlZmlu ZQkJUkNSX0RJU19DUkMJCSgxIDw8IDQpDQorI2RlZmluZQkJUkNSX0RJU19MT05HCSgxIDw8IDUp DQorLyogUnggU3RhdHVzIFJlZyAqLw0KKyNkZWZpbmUJUlNSCQkJMHgwNg0KKyNkZWZpbmUJCVJT Ul9BRQkJCSgxIDw8IDIpDQorI2RlZmluZQkJUlNSX01GCQkJKDEgPDwgNikNCisjZGVmaW5lCQlS U1JfUkYJCQkoMSA8PCA3KQ0KKy8qIFJ4IE92ZXJmbG93IENvdW50ZXIgUmVnICovDQorI2RlZmlu ZQlST0NSCQkweDA3DQorI2RlZmluZQkJUk9DUl9ST0MJCSgweDdGIDw8IDApDQorI2RlZmluZQkJ Uk9DUl9SWEZVCQkoMSA8PCA3KQ0KKy8qIEJhY2sgUHJlc3N1cmUgVGhyZXNob2xkIFJlZyAqLw0K KyNkZWZpbmUJQlBUUgkJMHgwOA0KKyNkZWZpbmUJCUJQVFJfSlBUCQkoMHgwRiA8PCAwKQ0KKyNk ZWZpbmUJCUJQVFJfQlBIVwkJKDB4MEYgPDwgNCkNCisvKiBGbG93IENvbnRyb2wgVGhyZXNob2xk IFJlZyAqLw0KKyNkZWZpbmUJRkNUUgkJMHgwOQ0KKyNkZWZpbmUJCUZDVFJfTFdPVAkJKDB4MEYg PDwgMCkNCisjZGVmaW5lCQlGQ1RSX0hXT1QJCSgweDBGIDw8IDQpDQorLyogcngvdHggRmxvdyBD b250cm9sIFJlZyAqLw0KKyNkZWZpbmUJRkNSCQkJMHgwQQ0KKyNkZWZpbmUJCUZDUl9GTENFCQko MSA8PCAwKQ0KKyNkZWZpbmUJCUZDUl9CS1BBCQkoMSA8PCA0KQ0KKyNkZWZpbmUJCUZDUl9UWFBF TgkJKDEgPDwgNSkNCisjZGVmaW5lCQlGQ1JfVFhQRgkJKDEgPDwgNikNCisjZGVmaW5lCQlGQ1Jf VFhQMAkJKDEgPDwgNykNCisvKiBFZXByb20gJiBQaHkgQ29udHJvbCBSZWcgKi8NCisjZGVmaW5l CUVQQ1IJCTB4MEINCisjZGVmaW5lCQlFUENSX0VSUkUJCSgxIDw8IDApDQorI2RlZmluZQkJRVBD Ul9FUlBSVwkJKDEgPDwgMSkNCisjZGVmaW5lCQlFUENSX0VSUFJSCQkoMSA8PCAyKQ0KKyNkZWZp bmUJCUVQQ1JfRVBPUwkJKDEgPDwgMykNCisjZGVmaW5lCQlFUENSX1dFUAkJKDEgPDwgNCkNCisv KiBFZXByb20gJiBQaHkgQWRkcmVzcyBSZWcgKi8NCisjZGVmaW5lCUVQQVIJCTB4MEMNCisjZGVm aW5lCQlFUEFSX0VST0EJCSgweDNGIDw8IDApDQorI2RlZmluZQkJRVBBUl9QSFlfQURSCSgweDAz IDw8IDYpDQorLyogRWVwcm9tICYJUGh5IERhdGEgUmVnICovDQorI2RlZmluZQlFUERSCQkweDBE CS8qIDB4MEQgfiAweDBFIGZvciBEYXRhIFJlZyBMb3cgJiBIaWdoICovDQorLyogV2FrZXVwIENv bnRyb2wgUmVnICovDQorI2RlZmluZQlXQ1IJCQkweDBGDQorI2RlZmluZQkJV0NSX01BR0lDU1QJ CSgxIDw8IDApDQorI2RlZmluZQkJV0NSX0xJTktTVAkJKDEgPDwgMikNCisjZGVmaW5lCQlXQ1Jf TUFHSUNFTgkJKDEgPDwgMykNCisjZGVmaW5lCQlXQ1JfTElOS0VOCQkoMSA8PCA1KQ0KKy8qIFBo eXNpY2FsIEFkZHJlc3MgUmVnICovDQorI2RlZmluZQlQQVIJCQkweDEwCS8qIDB4MTAgfiAweDE1 IDYgYnl0ZXMgZm9yIFBBUiAqLw0KKy8qIE11bHRpY2FzdCBBZGRyZXNzIFJlZyAqLw0KKyNkZWZp bmUJTUFSCQkJMHgxNgkvKiAweDE2IH4gMHgxRCA4IGJ5dGVzIGZvciBNQVIgKi8NCisvKiAweDFl IHVudXNlZCAqLw0KKy8qIFBoeSBSZXNldCBSZWcgKi8NCisjZGVmaW5lCVBSUgkJCTB4MUYNCisj ZGVmaW5lCQlQUlJfUEhZX1JTVAkJKDEgPDwgMCkNCisvKiBUeCBzZHJhbSBXcml0ZSBQb2ludGVy IEFkZHJlc3MgTG93ICovDQorI2RlZmluZQlUV1BBTAkJMHgyMA0KKy8qIFR4IHNkcmFtIFdyaXRl IFBvaW50ZXIgQWRkcmVzcyBIaWdoICovDQorI2RlZmluZQlUV1BBSAkJMHgyMQ0KKy8qIFR4IHNk cmFtIFJlYWQgUG9pbnRlciBBZGRyZXNzIExvdyAqLw0KKyNkZWZpbmUJVFJQQUwJCTB4MjINCisv KiBUeCBzZHJhbSBSZWFkIFBvaW50ZXIgQWRkcmVzcyBIaWdoICovDQorI2RlZmluZQlUUlBBSAkJ MHgyMw0KKy8qIFJ4IHNkcmFtIFdyaXRlIFBvaW50ZXIgQWRkcmVzcyBMb3cgKi8NCisjZGVmaW5l CVJXUEFMCQkweDI0DQorLyogUnggc2RyYW0gV3JpdGUgUG9pbnRlciBBZGRyZXNzIEhpZ2ggKi8N CisjZGVmaW5lCVJXUEFICQkweDI1DQorLyogUnggc2RyYW0gUmVhZCBQb2ludGVyIEFkZHJlc3Mg TG93ICovDQorI2RlZmluZQlSUlBBTAkJMHgyNg0KKy8qIFJ4IHNkcmFtIFJlYWQgUG9pbnRlciBB ZGRyZXNzIEhpZ2ggKi8NCisjZGVmaW5lCVJSUEFICQkweDI3DQorLyogVmVuZG9yIElEIHJlZ2lz dGVyICovDQorI2RlZmluZQlWSUQJCQkweDI4CS8qIDB4MjggfiAweDI5IDIgYnl0ZXMgZm9yIFZJ RCAqLw0KKy8qIFByb2R1Y3QgSUQgcmVnaXN0ZXIgKi8NCisjZGVmaW5lCVBJRAkJCTB4MkEJLyog MHgyQSB+IDB4MkIgMiBieXRlcyBmb3IgUElEICovDQorLyogQ0hJUCBSZXZpc2lvbiByZWdpc3Rl ciAqLw0KKyNkZWZpbmUJQ0hJUFIJCTB4MkMNCisvKiAweDJEIC0tPiAweEVGIHVudXNlZCAqLw0K Ky8qIFVTQiBEZXZpY2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUJVVNCREEJCTB4RjANCisjZGVmaW5l CQlVU0JEQV9VU0JGQQkJKDB4N0YgPDwgMCkNCisvKiBSWCBwYWNrZXQgQ291bnRlciBSZWcgKi8N CisjZGVmaW5lCVJYQwkJCTB4RjENCisvKiBUeCBwYWNrZXQgQ291bnRlciAmIFVTQiBTdGF0dXMg UmVnICovDQorI2RlZmluZQlUWENfVVNCUwkweEYyDQorI2RlZmluZQkJVFhDX1VTQlNfVFhDMAkJ KDEgPDwgMCkNCisjZGVmaW5lCQlUWENfVVNCU19UWEMxCQkoMSA8PCAxKQ0KKyNkZWZpbmUJCVRY Q19VU0JTX1RYQzIJCSgxIDw8IDIpDQorI2RlZmluZQkJVFhDX1VTQlNfRVAxUkRZCQkoMSA8PCA1 KQ0KKyNkZWZpbmUJCVRYQ19VU0JTX1NVU0ZMQUcJKDEgPDwgNikNCisjZGVmaW5lCQlUWENfVVNC U19SWEZBVUxUCSgxIDw8IDcpDQorLyogVVNCIENvbnRyb2wgcmVnaXN0ZXIgKi8NCisjZGVmaW5l CVVTQkMJCTB4RjQNCisjZGVmaW5lCQlVU0JDX0VQM05BSwkJKDEgPDwgNCkNCisjZGVmaW5lCQlV U0JDX0VQM0FDSwkJKDEgPDwgNSkNCisNCisvKiBSZWdpc3RlciBhY2Nlc3MgY29tbWFuZHMgYW5k IGZsYWdzICovDQorI2RlZmluZQlTUl9SRF9SRUdTCQkweDAwDQorI2RlZmluZQlTUl9XUl9SRUdT CQkweDAxDQorI2RlZmluZQlTUl9XUl9SRUcJCTB4MDMNCisjZGVmaW5lCVNSX1JFUV9SRF9SRUcJ KFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFKQ0KKyNkZWZp bmUJU1JfUkVRX1dSX1JFRwkoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVD SVBfREVWSUNFKQ0KKw0KKy8qIHBhcmFtZXRlcnMgKi8NCisjZGVmaW5lCVNSX1NIQVJFX1RJTUVP VVQJMTAwMA0KKyNkZWZpbmUJU1JfRUVQUk9NX0xFTgkJMjU2DQorI2RlZmluZQlTUl9NQ0FTVF9T SVpFCQk4DQorI2RlZmluZQlTUl9NQ0FTVF9BRERSX0ZMQUcJMHg4MA0KKyNkZWZpbmUJU1JfTUNB U1RfTUFYCQk2NA0KKyNkZWZpbmUJU1JfVFhfT1ZFUkhFQUQJCTIJLyogMmJ5dGVzIGhlYWRlciAq Lw0KKyNkZWZpbmUJU1JfUlhfT1ZFUkhFQUQJCTcJLyogM2J5dGVzIGhlYWRlciArIDRjcmMgdGFp bCAqLw0KKw0KKyNlbmRpZgkvKiBfU1I5NzAwX0ggKi8NCg0KDQoNCg0KMjAxMy0wOC0yMSANCg0K DQoNCmxpdWp1bmxpYW5nX2xqbCANCg0KDQoNCuWPkeS7tuS6uu+8miBCZW4gSHV0Y2hpbmdzIA0K 5Y+R6YCB5pe26Ze077yaIDIwMTMtMDgtMjAgIDIxOjM2OjUwIA0K5pS25Lu25Lq677yaIGxpdWp1 bmxpYW5nX2xqbCANCuaKhOmAge+8miBncmVna2g7IGxpbnV4LXVzYjsgbmV0ZGV2OyBsaW51eC1r ZXJuZWw7IHN1bmhlY2hlbmcgDQrkuLvpopjvvJogUmU6IFtQQVRDSC1TUjk3MDBdIE1lcmdlIFVT QiAxLjEgRXRoZXJuZXQgQWRhcHRlciBTUjk3MDAgRGV2aWNlRHJpdmVyIGludG8gdGhlIExpbnV4 IEtlcm5lbCANCiANCk9uIFR1ZSwgMjAxMy0wOC0yMCBhdCAxODo1MCArMDgwMCwgbGl1anVubGlh bmdfbGpsIHdyb3RlOg0KPiBEZWFyIEdyZWdraCAmIGFsbCA6DQo+IA0KPiAgSSBhbSB0aGUgc29m dHdhcmUgZW5naW5lZXIgTGl1IEp1bmxpYW5nIGZyb20gU2hlblpoZW4gQ29yZUNoaXBzIGhpZ2gg dGVjaG5vbG9neSBjb21wYW55LCBvbiB0aGUgbWFya2V0IG9mIFNSOTcwMCBjaGlwIGlzIGRlc2ln bmVkIGFuZCBvd25lZCBieSB1cy4gDQo+ICAgICAgICAgU1I5NzAwIGlzIGEgdHlwZSBvZiBVU0Ig dG8gRXRoZXJuZXQgQ29udmVydGVyIGFuZCBpcyBjb21wYXRpYmxlIHdpdGggVVNCIDEuMSBwcm90 b2NvbCwgV2Ugd2FudCB0byBtZXJnZSBTUjk3MDAgZGV2aWNlIGRyaXZlciBpbnRvIHRoZSBMaW51 eCBLZXJuZWwuIFRoZSBmb2xsb3dpbmcgaXMgdGhlIExpbnV4IDMuMTAuNyB2ZXJzaW9uIHBhdGNo IGZvciBTUjk3MDAsIFBsZWFzZSBnaXZlIHVzIHRoZSBhc3Nlc3NtZW50IGFuZCBzdXBwb3J0Lg0K PiAgICAgICAgIFRoYW5rcyBhIGxvdC4NCkFzIHRoaXMgaXMgYSBuZXQgZHJpdmVyLCB0aGUgcmVs ZXZhbnQgbWFpbnRhaW5lciBpcyBEYXZpZCBNaWxsZXIgYW5kIG5vdA0KR3JlZy4NClRoZXJlIGFy ZSBzb21lIHN0eWxlIGVycm9ycyBoZXJlIHdoaWNoIGNhbiBiZSBmb3VuZCB1c2luZw0Kc2NyaXB0 cy9jaGVja3BhdGNoLnBsLiAgWW91J2xsIG5lZWQgdG8gZml4IHRob3NlIGFuZCByZS1zdWJtaXQu ICBJJ2xsDQpwb2ludCBvdXQgc29tZSBtb3JlIHByb2JsZW1zIGlubGluZS4NCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMNClsuLi5dDQo+ICtzdGF0aWMg aW50IHNyOTcwMF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0 b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqIGRhdGEpDQo+ICt7DQo+ICsgc3RydWN0IHVzYm5ldCAq ZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsNCj4gKyBfX2xlMTYgKmVidWYgPSAoX19sZTE2ICopIGRh dGE7DQo+ICsgaW50IGk7DQo+ICsNCj4gKyAvKiBhY2Nlc3MgaXMgMTZiaXQgKi8NCj4gKyBpZiAo KGVlcHJvbS0+b2Zmc2V0ICUgMikgfHwgKGVlcHJvbS0+bGVuICUgMikpDQo+ICsgcmV0dXJuIC1F SU5WQUw7DQpZb3UncmUgcmVhbGx5IHN1cHBvc2VkIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBieSBz aGlmdGluZyBhcyBuZWNlc3NhcnkuDQo+ICsgZm9yIChpID0gMDsgaSA8IGVlcHJvbS0+bGVuIC8g MjsgaSsrKSB7DQo+ICsgaWYgKHNyX3JlYWRfZWVwcm9tX3dvcmQoZGV2LCBlZXByb20tPm9mZnNl dCAvIDIgKyBpLCAmZWJ1ZltpXSkgPCAwKQ0KPiArIHJldHVybiAtRUlOVkFMOw0KWW91IHNob3Vs ZCBwYXNzIHVwIHRoZSBlcnJvciBjb2RlLCBub3Qgc3Vic3RpdHV0ZSAtRUlOVkFMLg0KWy4uLl0N Cj4gK3N0YXRpYyB2b2lkIHNyOTcwMF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQ0KPiArew0KPiArIC8qIEluaGVyaXQgc3Rh bmRhcmQgZGV2aWNlIGluZm8gKi8NCj4gKyB1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTsN Cj4gKyBpbmZvLT5lZWR1bXBfbGVuID0gU1JfRUVQUk9NX0xFTjsNCllvdSBkb24ndCBuZWVkIHRv IHNldCBlZWR1bXBfbGVuOyB0aGUgZXRodG9vbCBjb3JlIHdpbGwgc2V0IGl0IGFmdGVyDQpjYWxs aW5nIHNyOTcwMF9nZXRfZWVwcm9tX2xlbigpLiAgU28geW91IGRvbid0IG5lZWQgeW91ciBvd24N CmltcGxlbWVudGF0aW9uIG9mIGdldF9kcnZpbmZvIGF0IGFsbC4NClsuLi5dDQo+ICtzdGF0aWMg aW50IHNyOTcwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2Ug KmludGYpDQo+ICt7DQpbLi4uXQ0KPiArIC8qIHJlYWQgTUFDICovDQo+ICsgaWYgKHNyX3JlYWQo ZGV2LCBQQVIsIEVUSF9BTEVOLCBkZXYtPm5ldC0+ZGV2X2FkZHIpIDwgMCkgew0KPiArIHByaW50 ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyBNQUMgYWRkcmVzc1xuIik7DQo+ICsgcmV0ID0gLUVO T0RFVjsNCj4gKyBnb3RvIG91dDsNCj4gKyB9DQpbLi4uXQ0KSSB0aGluayB0aGlzIHNob3VsZCBy ZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTSBhbmQgY29weSBpdCB0byBib3RoDQpkZXZf YWRkciB0byBwZXJtX2FkZHIuICBNQUMgYWRkcmVzcyBjaGFuZ2VzIHNob3VsZCBub3QgcGVyc2lz dCBpZiB0aGUNCmRyaXZlciBpcyByZWxvYWRlZC4NCkJlbi4NCi0tIA0KQmVuIEh1dGNoaW5ncywg U3RhZmYgRW5naW5lZXIsIFNvbGFyZmxhcmUNCk5vdCBzcGVha2luZyBmb3IgbXkgZW1wbG95ZXI7 IHRoYXQncyB0aGUgbWFya2V0aW5nIGRlcGFydG1lbnQncyBqb2IuDQpUaGV5IGFza2VkIHVzIHRv IG5vdGUgdGhhdCBTb2xhcmZsYXJlIHByb2R1Y3QgbmFtZXMgYXJlIHRyYWRlbWFya2VkLg0K