From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Jonathan Haws Date: Mon, 16 Jan 2017 19:52:41 +0000 Message-ID: <1484596361.15751.2.camel@sdl.usu.edu> References: <1484596174-16341-1-git-send-email-jhaws@sdl.usu.edu> In-Reply-To: <1484596174-16341-1-git-send-email-jhaws@sdl.usu.edu> Reply-To: Jonathan Haws Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [B.A.T.M.A.N.] [PATCH] IPv4 multicast distribution support. List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "b.a.t.m.a.n@lists.open-mesh.org" SSByZWFsaXplIHRoYXQgdGhlIGNvZGUgaW4gdGhpcyBwYXRjaCBpcyBub3QgZm9ybWF0dGVkIHBy b3Blcmx5LCBidXQgSQ0Kd2FzIHVuYWJsZSB0byBnZXQgY2hlY2twYXRjaC5wbCB0byBzY2FuIHRo aXMgcmlnaHQgLSBpdCBuZWVkcyBhIGZ1bGwNCmtlcm5lbCB0cmVlLiDCoElzIHRoZXJlIGFub3Ro ZXIgZm9ybWF0dGluZyBzY3JpcHQgSSBjYW4gcnVuPw0KDQpJIHdhbnRlZCB0byBzdWJtaXQgdGhp cyBhbnl3YXkgKGV2ZW4gd2l0aCB0aGUgZm9ybWF0dGluZyBwcm9ibGVtcykgdG8NCmdldCBwZW9w bGUgbG9va2luZyBhdCBpdC4gwqBJIGhhZCBuZWVkIG9mIHRoaXMgYmVjYXVzZSBJJ20gcnVubmlu Zw0KYmF0bWFuLWFkdiBhbmQgYWxmcmVkIGluIGEgc2V0dGluZyB3aGVyZSBjZXJ0YWluIGRldmlj ZXMgZG8gbm90IChhbmQNCndpbGwgbm90KSBzdXBwb3J0IElQdjYuIMKgV2hhdCBJJ3ZlIGdvdCBo ZXJlIHNlZW1zIGxpa2UgYSBjbGVhbiBtZXRob2QNCm9mIHByb3ZpZGluZyBJUHY0IHN1cHBvcnQ7 IGhvd2V2ZXIgSVB2NiBhbmQgSVB2NCBjYW5ub3QgYmUgbWl4ZWQuDQoNCldoYXQgYXJlIGV2ZXJ5 b25lJ3MgdGhvdWdodHM/IMKgSXMgdGhpcyBhIGdvb2QgYXBwcm9hY2ggb3Igd291bGQgeW91DQpw cmVmZXIgaXQgY2hhbmdlZD8NCg0KVGhhbmtzIQ0KDQotLSANCkpvbmF0aGFuIFIuIEhhd3MNCkVt YmVkZGVkIEVuZ2luZWVyDQpTcGFjZSBEeW5hbWljcyBMYWJvcmF0b3J5DQpqaGF3c0BzZGwudXN1 LmVkdQ0KDQoNCg0KT24gTW9uLCAyMDE3LTAxLTE2IGF0IDEyOjQ5IC0wNzAwLCBKb25hdGhhbiBI YXdzIHdyb3RlOg0KPiBFbmFibGVkIHZpYSAtNCBleHBlcnQgb3B0aW9uIHdoZXJlIG11bHRpY2Fz dCBncm91cCBhZGRyZXNzIGlzDQo+IHNwZWNpZmllZC4NCj4gVGhpcyBvcHRpb24gd2lsbCBkaXNh YmxlIElQdjYgY29tbXVuaWNhdGlvbiBhbmQgaXMgaW50ZW5kZWQgZm9yIHVzZQ0KPiBpbiBuZXR3 b3Jrcw0KPiB3aGljaCBkbyBub3Qgc3VwcG9ydCBJUHY2IGFkZHJlc3NpbmcuDQo+IA0KPiBXaGVu IHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGFsbCBJUHY2IGNvbW11bmljYXRpb24gaXMgZGlzYWJs ZWQuDQo+IENvbWJpbmluZw0KPiBJUHY0IGFuZCBJUHY2IGFsZnJlZCBub2RlcyBpcyB1bnN1cHBv cnRlZC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIEhhd3MgPGpoYXdzQHNkbC51c3Uu ZWR1Pg0KPiAtLS0NCj4gwqBSRUFETUXCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgNCArLQ0KPiDC oGFsZnJlZC5owqDCoMKgwqDCoMKgwqB8wqDCoDIxICsrKysrLS0tDQo+IMKgYmF0YWR2X3F1ZXJ5 LmMgfMKgwqA1MyArKysrKysrKysrKystLS0tLS0tDQo+IMKgYmF0YWR2X3F1ZXJ5LmggfMKgwqDC oDUgKy0NCj4gwqBjbGllbnQuY8KgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKy0NCj4gwqBtYWluLmPC oMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEwICsrKy0NCj4gwqBtYW4vYWxmcmVkLjjCoMKgwqB8wqDC oMKgNSArKw0KPiDCoG5ldHNvY2suY8KgwqDCoMKgwqDCoHwgMTYwDQo+ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KPiDCoHJlY3YuY8Kg wqDCoMKgwqDCoMKgwqDCoHzCoMKgNjcgKysrKysrKysrKysrKysrKystLS0tLS0tDQo+IMKgc2Vu ZC5jwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA1MSArKysrKysrKysrKystLS0tLS0NCj4gwqBzZXJ2 ZXIuY8KgwqDCoMKgwqDCoMKgfMKgwqDCoDggKy0tDQo+IMKgdW5peF9zb2NrLmPCoMKgwqDCoHzC oMKgwqAyICstDQo+IMKgMTIgZmlsZXMgY2hhbmdlZCwgMzA4IGluc2VydGlvbnMoKyksIDgwIGRl bGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQ0KPiBpbmRleCBi YzFjM2JjLi4yOGYzZGM5IDEwMDY0NA0KPiAtLS0gYS9SRUFETUUNCj4gKysrIGIvUkVBRE1FDQo+ IEBAIC0yMCw3ICsyMCw5IEBAIHByb2dyYW1zIHRvIGNvbW11bmljYXRlIHdpdGggYWxmcmVkIChk b25lIHZpYSB1bml4DQo+IHNvY2tldHMpLiBhbGZyZWQgdGhlbiB0YWtlcw0KPiDCoGNhcmUgb2Yg ZGlzdHJpYnV0aW5nIHRoZSBsb2NhbCBpbmZvcm1hdGlvbiB0byBvdGhlciBhbGZyZWQgc2VydmVy cw0KPiBvbiBvdGhlcg0KPiDCoG5vZGVzLiBUaGlzIGlzIGRvbmUgdmlhIElQdjYgbGluay1sb2Nh bCBtdWx0aWNhc3QsIGFuZCBkb2VzIG5vdA0KPiByZXF1aXJlIGFueQ0KPiDCoGNvbmZpZ3VyYXRp b24uIEEgdXNlciBjYW4gcmVxdWVzdCBkYXRhIGZyb20gYWxmcmVkLCBhbmQgd2lsbCByZWNlaXZl DQo+IHRoZQ0KPiAtaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZyb20gYWxsIGFsZnJlZCBzZXJ2ZXJz IGluIHRoZSBuZXR3b3JrLg0KPiAraW5mb3JtYXRpb24gYXZhaWxhYmxlIGZyb20gYWxsIGFsZnJl ZCBzZXJ2ZXJzIGluIHRoZSBuZXR3b3JrLg0KPiBBbHRlcm5hdGl2ZWx5LA0KPiArYWxmcmVkIGNh biBiZSBjb25maWd1cmVkIHRvIGRpc3RyaWJ1dGUgdGhlIGxvY2FsIGluZm9ybWF0aW9uIHZpYQ0K PiBJUHY0IG11bHRpY2FzdC4NCj4gK1RoaXMgaXMgY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZSBJ UHY0IG11bHRpY2FzdCBncm91cCBhZGRyZXNzIGluDQo+IHRoZSAtNCBvcHRpb24uDQo+IMKgDQo+ IMKgQ29tcGlsYXRpb24NCj4gwqAtLS0tLS0tLS0tLQ0KPiBkaWZmIC0tZ2l0IGEvYWxmcmVkLmgg Yi9hbGZyZWQuaA0KPiBpbmRleCAyZThkYjFlLi41MjM3NTk0IDEwMDY0NA0KPiAtLS0gYS9hbGZy ZWQuaA0KPiArKysgYi9hbGZyZWQuaA0KPiBAQCAtNDgsNiArNDgsMTIgQEAgZW51bSBkYXRhX3Nv dXJjZSB7DQo+IMKgCVNPVVJDRV9TWU5DRUQgPSAyLA0KPiDCoH07DQo+IMKgDQo+ICt0eXBlZGVm IHVuaW9uDQo+ICt7DQo+ICvCoMKgc3RydWN0IGluX2FkZHIgaXB2NDsNCj4gK8KgwqBzdHJ1Y3Qg aW42X2FkZHIgaXB2NjsNCj4gK30gYWxmcmVkX2FkZHI7DQo+ICsNCj4gwqBzdHJ1Y3QgZGF0YXNl dCB7DQo+IMKgCXN0cnVjdCBhbGZyZWRfZGF0YSBkYXRhOw0KPiDCoAl1bnNpZ25lZCBjaGFyICpi dWY7DQo+IEBAIC04MCw3ICs4Niw3IEBAIHN0cnVjdCB0cmFuc2FjdGlvbl9oZWFkIHsNCj4gwqAN Cj4gwqBzdHJ1Y3Qgc2VydmVyIHsNCj4gwqAJc3RydWN0IGV0aGVyX2FkZHIgaHdhZGRyOw0KPiAt CXN0cnVjdCBpbjZfYWRkciBhZGRyZXNzOw0KPiArCWFsZnJlZF9hZGRyIGFkZHJlc3M7DQo+IMKg CXN0cnVjdCB0aW1lc3BlYyBsYXN0X3NlZW47DQo+IMKgCXVpbnQ4X3QgdHE7DQo+IMKgfTsNCj4g QEAgLTEwMCw3ICsxMDYsNyBAQCBlbnVtIGNsaWVudG1vZGUgew0KPiDCoA0KPiDCoHN0cnVjdCBp bnRlcmZhY2Ugew0KPiDCoAlzdHJ1Y3QgZXRoZXJfYWRkciBod2FkZHI7DQo+IC0Jc3RydWN0IGlu Nl9hZGRyIGFkZHJlc3M7DQo+ICsJYWxmcmVkX2FkZHIgYWRkcmVzczsNCj4gwqAJdWludDMyX3Qg c2NvcGVfaWQ7DQo+IMKgCWNoYXIgKmludGVyZmFjZTsNCj4gwqAJaW50IG5ldHNvY2s7DQo+IEBA IC0xMjIsNiArMTI4LDcgQEAgc3RydWN0IGdsb2JhbHMgew0KPiDCoAlpbnQgY2xpZW50bW9kZV9h cmc7DQo+IMKgCWludCBjbGllbnRtb2RlX3ZlcnNpb247DQo+IMKgCWludCB2ZXJib3NlOw0KPiAr CWludCBpcHY0bW9kZTsNCj4gwqANCj4gwqAJaW50IHVuaXhfc29jazsNCj4gwqAJY29uc3QgY2hh ciAqdW5peF9wYXRoOw0KPiBAQCAtMTQyLDcgKzE0OSw3IEBAIHN0cnVjdCBnbG9iYWxzIHsNCj4g wqANCj4gwqAjZGVmaW5lIE1BWF9QQVlMT0FEICgoMSA8PCAxNikgLSAxIC0gc2l6ZW9mKHN0cnVj dCB1ZHBoZHIpKQ0KPiDCoA0KPiAtZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRy X2xvY2FsbWNhc3Q7DQo+ICtleHRlcm4gYWxmcmVkX2FkZHIgYWxmcmVkX21jYXN0Ow0KPiDCoA0K PiDCoC8qIHNlcnZlci5jICovDQo+IMKgaW50IGFsZnJlZF9zZXJ2ZXIoc3RydWN0IGdsb2JhbHMg Kmdsb2JhbHMpOw0KPiBAQCAtMTY5LDEzICsxNzYsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHRy YW5zYWN0aW9uX2ZpbmlzaGVkKHN0cnVjdA0KPiB0cmFuc2FjdGlvbl9oZWFkICpoZWFkKQ0KPiDC oA0KPiDCoC8qIHNlbmQuYyAqLw0KPiDCoGludCBwdXNoX2RhdGEoc3RydWN0IGdsb2JhbHMgKmds b2JhbHMsIHN0cnVjdCBpbnRlcmZhY2UgKmludGVyZmFjZSwNCj4gLQnCoMKgwqDCoMKgwqBzdHJ1 Y3QgaW42X2FkZHIgKmRlc3RpbmF0aW9uLCBlbnVtIGRhdGFfc291cmNlDQo+IG1heF9zb3VyY2Vf bGV2ZWwsDQo+ICsJwqDCoMKgwqDCoMKgYWxmcmVkX2FkZHIgKmRlc3RpbmF0aW9uLCBlbnVtIGRh dGFfc291cmNlDQo+IG1heF9zb3VyY2VfbGV2ZWwsDQo+IMKgCcKgwqDCoMKgwqDCoGludCB0eXBl X2ZpbHRlciwgdWludDE2X3QgdHhfaWQpOw0KPiDCoGludCBhbm5vdW5jZV9tYXN0ZXIoc3RydWN0 IGdsb2JhbHMgKmdsb2JhbHMpOw0KPiDCoGludCBwdXNoX2xvY2FsX2RhdGEoc3RydWN0IGdsb2Jh bHMgKmdsb2JhbHMpOw0KPiDCoGludCBzeW5jX2RhdGEoc3RydWN0IGdsb2JhbHMgKmdsb2JhbHMp Ow0KPiAtc3NpemVfdCBzZW5kX2FsZnJlZF9wYWNrZXQoc3RydWN0IGludGVyZmFjZSAqaW50ZXJm YWNlLA0KPiAtCQkJwqDCoMKgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkZXN0LCB2b2lkICpidWYs DQo+IGludCBsZW5ndGgpOw0KPiArc3NpemVfdCBzZW5kX2FsZnJlZF9wYWNrZXQoc3RydWN0IGds b2JhbHMgKmdsb2JhbHMsIHN0cnVjdCBpbnRlcmZhY2UNCj4gKmludGVyZmFjZSwNCj4gKwkJCcKg wqDCoGNvbnN0IGFsZnJlZF9hZGRyICpkZXN0LCB2b2lkICpidWYsIGludA0KPiBsZW5ndGgpOw0K PiDCoC8qIHVuaXhfc29jay5jICovDQo+IMKgaW50IHVuaXhfc29ja19yZWFkKHN0cnVjdCBnbG9i YWxzICpnbG9iYWxzKTsNCj4gwqBpbnQgdW5peF9zb2NrX29wZW5fZGFlbW9uKHN0cnVjdCBnbG9i YWxzICpnbG9iYWxzKTsNCj4gQEAgLTE5NSw3ICsyMDIsNyBAQCBpbnQgbmV0c29ja19wcmVwYXJl X3NlbGVjdChzdHJ1Y3QgZ2xvYmFscw0KPiAqZ2xvYmFscywgZmRfc2V0ICpmZHMsIGludCBtYXhz b2NrKTsNCj4gwqB2b2lkIG5ldHNvY2tfY2hlY2tfZXJyb3Ioc3RydWN0IGdsb2JhbHMgKmdsb2Jh bHMsIGZkX3NldCAqZXJyZmRzKTsNCj4gwqBpbnQgbmV0c29ja19yZWNlaXZlX3BhY2tldChzdHJ1 Y3QgZ2xvYmFscyAqZ2xvYmFscywgZmRfc2V0ICpmZHMpOw0KPiDCoGludCBuZXRzb2NrX293bl9h ZGRyZXNzKGNvbnN0IHN0cnVjdCBnbG9iYWxzICpnbG9iYWxzLA0KPiAtCQkJY29uc3Qgc3RydWN0 IGluNl9hZGRyICphZGRyZXNzKTsNCj4gKwkJCWNvbnN0IGFsZnJlZF9hZGRyICphZGRyZXNzKTsN Cj4gwqAvKiB1dGlsLmMgKi8NCj4gwqBpbnQgdGltZV9kaWZmKHN0cnVjdCB0aW1lc3BlYyAqdHYx LCBzdHJ1Y3QgdGltZXNwZWMgKnR2MiwNCj4gwqAJwqDCoMKgwqDCoMKgc3RydWN0IHRpbWVzcGVj ICp0dmRpZmYpOw0KPiBkaWZmIC0tZ2l0IGEvYmF0YWR2X3F1ZXJ5LmMgYi9iYXRhZHZfcXVlcnku Yw0KPiBpbmRleCBhYzQ1YjliLi5hZTkxZDJlIDEwMDY0NA0KPiAtLS0gYS9iYXRhZHZfcXVlcnku Yw0KPiArKysgYi9iYXRhZHZfcXVlcnkuYw0KPiBAQCAtODAsMjIgKzgwLDIyIEBAIG91dDoNCj4g wqAJcmV0dXJuIHJldDsNCj4gwqB9DQo+IMKgDQo+IC1pbnQgbWFjX3RvX2lwdjYoY29uc3Qgc3Ry dWN0IGV0aGVyX2FkZHIgKm1hYywgc3RydWN0IGluNl9hZGRyICphZGRyKQ0KPiAraW50IG1hY190 b19pcHY2KGNvbnN0IHN0cnVjdCBldGhlcl9hZGRyICptYWMsIGFsZnJlZF9hZGRyICphZGRyKQ0K PiDCoHsNCj4gwqAJbWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpOw0KPiAtCWFkZHItPnM2 X2FkZHJbMF0gPSAweGZlOw0KPiAtCWFkZHItPnM2X2FkZHJbMV0gPSAweDgwOw0KPiArCWFkZHIt PmlwdjYuczZfYWRkclswXSA9IDB4ZmU7DQo+ICsJYWRkci0+aXB2Ni5zNl9hZGRyWzFdID0gMHg4 MDsNCj4gwqANCj4gLQlhZGRyLT5zNl9hZGRyWzhdID0gbWFjLT5ldGhlcl9hZGRyX29jdGV0WzBd IF4gMHgwMjsNCj4gLQlhZGRyLT5zNl9hZGRyWzldID0gbWFjLT5ldGhlcl9hZGRyX29jdGV0WzFd Ow0KPiAtCWFkZHItPnM2X2FkZHJbMTBdID0gbWFjLT5ldGhlcl9hZGRyX29jdGV0WzJdOw0KPiAr CWFkZHItPmlwdjYuczZfYWRkcls4XSA9IG1hYy0+ZXRoZXJfYWRkcl9vY3RldFswXSBeIDB4MDI7 DQo+ICsJYWRkci0+aXB2Ni5zNl9hZGRyWzldID0gbWFjLT5ldGhlcl9hZGRyX29jdGV0WzFdOw0K PiArCWFkZHItPmlwdjYuczZfYWRkclsxMF0gPSBtYWMtPmV0aGVyX2FkZHJfb2N0ZXRbMl07DQo+ IMKgDQo+IC0JYWRkci0+czZfYWRkclsxMV0gPSAweGZmOw0KPiAtCWFkZHItPnM2X2FkZHJbMTJd ID0gMHhmZTsNCj4gKwlhZGRyLT5pcHY2LnM2X2FkZHJbMTFdID0gMHhmZjsNCj4gKwlhZGRyLT5p cHY2LnM2X2FkZHJbMTJdID0gMHhmZTsNCj4gwqANCj4gLQlhZGRyLT5zNl9hZGRyWzEzXSA9IG1h Yy0+ZXRoZXJfYWRkcl9vY3RldFszXTsNCj4gLQlhZGRyLT5zNl9hZGRyWzE0XSA9IG1hYy0+ZXRo ZXJfYWRkcl9vY3RldFs0XTsNCj4gLQlhZGRyLT5zNl9hZGRyWzE1XSA9IG1hYy0+ZXRoZXJfYWRk cl9vY3RldFs1XTsNCj4gKwlhZGRyLT5pcHY2LnM2X2FkZHJbMTNdID0gbWFjLT5ldGhlcl9hZGRy X29jdGV0WzNdOw0KPiArCWFkZHItPmlwdjYuczZfYWRkclsxNF0gPSBtYWMtPmV0aGVyX2FkZHJf b2N0ZXRbNF07DQo+ICsJYWRkci0+aXB2Ni5zNl9hZGRyWzE1XSA9IG1hYy0+ZXRoZXJfYWRkcl9v Y3RldFs1XTsNCj4gwqANCj4gwqAJcmV0dXJuIDA7DQo+IMKgfQ0KPiBAQCAtMTE4LDE3ICsxMTgs MTcgQEAgaW50IGlzX2lwdjZfZXVpNjQoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQ0KPiDC oAlyZXR1cm4gMTsNCj4gwqB9DQo+IMKgDQo+IC1pbnQgaXB2Nl90b19tYWMoY29uc3Qgc3RydWN0 IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgZXRoZXJfYWRkciAqbWFjKQ0KPiAraW50IGlwdjZfdG9f bWFjKGNvbnN0IGFsZnJlZF9hZGRyICphZGRyLCBzdHJ1Y3QgZXRoZXJfYWRkciAqbWFjKQ0KPiDC oHsNCj4gLQlpZiAoIWlzX2lwdjZfZXVpNjQoYWRkcikpDQo+ICsJaWYgKCFpc19pcHY2X2V1aTY0 KCZhZGRyLT5pcHY2KSkNCj4gwqAJCXJldHVybiAtRUlOVkFMOw0KPiDCoA0KPiAtCW1hYy0+ZXRo ZXJfYWRkcl9vY3RldFswXSA9IGFkZHItPnM2X2FkZHJbOF0gXiAweDAyOw0KPiAtCW1hYy0+ZXRo ZXJfYWRkcl9vY3RldFsxXSA9IGFkZHItPnM2X2FkZHJbOV07DQo+IC0JbWFjLT5ldGhlcl9hZGRy X29jdGV0WzJdID0gYWRkci0+czZfYWRkclsxMF07DQo+IC0JbWFjLT5ldGhlcl9hZGRyX29jdGV0 WzNdID0gYWRkci0+czZfYWRkclsxM107DQo+IC0JbWFjLT5ldGhlcl9hZGRyX29jdGV0WzRdID0g YWRkci0+czZfYWRkclsxNF07DQo+IC0JbWFjLT5ldGhlcl9hZGRyX29jdGV0WzVdID0gYWRkci0+ czZfYWRkclsxNV07DQo+ICsJbWFjLT5ldGhlcl9hZGRyX29jdGV0WzBdID0gYWRkci0+aXB2Ni5z Nl9hZGRyWzhdIF4gMHgwMjsNCj4gKwltYWMtPmV0aGVyX2FkZHJfb2N0ZXRbMV0gPSBhZGRyLT5p cHY2LnM2X2FkZHJbOV07DQo+ICsJbWFjLT5ldGhlcl9hZGRyX29jdGV0WzJdID0gYWRkci0+aXB2 Ni5zNl9hZGRyWzEwXTsNCj4gKwltYWMtPmV0aGVyX2FkZHJfb2N0ZXRbM10gPSBhZGRyLT5pcHY2 LnM2X2FkZHJbMTNdOw0KPiArCW1hYy0+ZXRoZXJfYWRkcl9vY3RldFs0XSA9IGFkZHItPmlwdjYu czZfYWRkclsxNF07DQo+ICsJbWFjLT5ldGhlcl9hZGRyX29jdGV0WzVdID0gYWRkci0+aXB2Ni5z Nl9hZGRyWzE1XTsNCj4gwqANCj4gwqAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hYy0+ZXRo ZXJfYWRkcl9vY3RldCkpDQo+IMKgCQlyZXR1cm4gLUVJTlZBTDsNCj4gQEAgLTEzNiw2ICsxMzYs MjEgQEAgaW50IGlwdjZfdG9fbWFjKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwNCj4gc3Ry dWN0IGV0aGVyX2FkZHIgKm1hYykNCj4gwqAJcmV0dXJuIDA7DQo+IMKgfQ0KPiDCoA0KPiAraW50 IGlwdjRfdG9fbWFjKGNvbnN0IGFsZnJlZF9hZGRyICphZGRyLCBzdHJ1Y3QgZXRoZXJfYWRkciAq bWFjKQ0KPiArew0KPiArwqDCoG1hYy0+ZXRoZXJfYWRkcl9vY3RldFswXSA9IDA7DQo+ICvCoMKg bWFjLT5ldGhlcl9hZGRyX29jdGV0WzFdID0gMDsNCj4gK8KgwqBtYWMtPmV0aGVyX2FkZHJfb2N0 ZXRbMl0gPSAoYWRkci0+aXB2NC5zX2FkZHIgPj4gMjQpICYgMHhGRjsNCj4gK8KgwqBtYWMtPmV0 aGVyX2FkZHJfb2N0ZXRbM10gPSAoYWRkci0+aXB2NC5zX2FkZHIgPj4gMTYpICYgMHhGRjsNCj4g K8KgwqBtYWMtPmV0aGVyX2FkZHJfb2N0ZXRbNF0gPSAoYWRkci0+aXB2NC5zX2FkZHIgPj7CoMKg OCkgJiAweEZGOw0KPiArwqDCoG1hYy0+ZXRoZXJfYWRkcl9vY3RldFs1XSA9IChhZGRyLT5pcHY0 LnNfYWRkciA+PsKgwqAwKSAmIDB4RkY7DQo+ICsNCj4gK8KgwqBpZiAoIWlzX3ZhbGlkX2V0aGVy X2FkZHIobWFjLT5ldGhlcl9hZGRyX29jdGV0KSkNCj4gK8KgwqDCoMKgcmV0dXJuIC1FSU5WQUw7 DQo+ICsNCj4gK8KgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiDCoHN0YXRpYyBpbnQgYmF0YWR2 X2ludGVyZmFjZV9jaGVja19kZWJ1Z2ZzKGNvbnN0IGNoYXIgKm1lc2hfaWZhY2UpDQo+IMKgew0K PiDCoAljaGFyIGZ1bGxfcGF0aFtNQVhfUEFUSCArIDFdOw0KPiBkaWZmIC0tZ2l0IGEvYmF0YWR2 X3F1ZXJ5LmggYi9iYXRhZHZfcXVlcnkuaA0KPiBpbmRleCAwZGY4YTM1Li5lYzY5MjkwIDEwMDY0 NA0KPiAtLS0gYS9iYXRhZHZfcXVlcnkuaA0KPiArKysgYi9iYXRhZHZfcXVlcnkuaA0KPiBAQCAt MjgsOCArMjgsOSBAQCBzdHJ1Y3QgZXRoZXJfYWRkciAqdHJhbnNsYXRlX21hYyhjb25zdCBjaGFy DQo+ICptZXNoX2lmYWNlLA0KPiDCoAkJCQnCoGNvbnN0IHN0cnVjdCBldGhlcl9hZGRyICptYWMp Ow0KPiDCoHVpbnQ4X3QgZ2V0X3RxKGNvbnN0IGNoYXIgKm1lc2hfaWZhY2UsIHN0cnVjdCBldGhl cl9hZGRyICptYWMpOw0KPiDCoGludCBiYXRhZHZfaW50ZXJmYWNlX2NoZWNrKGNvbnN0IGNoYXIg Km1lc2hfaWZhY2UpOw0KPiAtaW50IG1hY190b19pcHY2KGNvbnN0IHN0cnVjdCBldGhlcl9hZGRy ICptYWMsIHN0cnVjdCBpbjZfYWRkcg0KPiAqYWRkcik7DQo+IC1pbnQgaXB2Nl90b19tYWMoY29u c3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgZXRoZXJfYWRkcg0KPiAqbWFjKTsNCj4g K2ludCBtYWNfdG9faXB2Nihjb25zdCBzdHJ1Y3QgZXRoZXJfYWRkciAqbWFjLCBhbGZyZWRfYWRk ciAqYWRkcik7DQo+ICtpbnQgaXB2Nl90b19tYWMoY29uc3QgYWxmcmVkX2FkZHIgKmFkZHIsIHN0 cnVjdCBldGhlcl9hZGRyICptYWMpOw0KPiAraW50IGlwdjRfdG9fbWFjKGNvbnN0IGFsZnJlZF9h ZGRyICphZGRyLCBzdHJ1Y3QgZXRoZXJfYWRkciAqbWFjKTsNCj4gwqBpbnQgaXNfaXB2Nl9ldWk2 NChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOw0KPiDCoA0KPiDCoCNlbmRpZg0KPiBkaWZm IC0tZ2l0IGEvY2xpZW50LmMgYi9jbGllbnQuYw0KPiBpbmRleCAzNTdmZGI5Li40MTAyMDQ2IDEw MDY0NA0KPiAtLS0gYS9jbGllbnQuYw0KPiArKysgYi9jbGllbnQuYw0KPiBAQCAtMjM5LDcgKzIz OSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKmlmYWNlKQ0KPiDC oAkJcmV0dXJuIC0xOw0KPiDCoAl9DQo+IMKgDQo+IC0Jc29jayA9IHNvY2tldChQRl9JTkVUNiwg U09DS19ER1JBTSwgMCk7DQo+ICsJc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCAw KTsNCj4gwqAJaWYgKHNvY2sgPCAwKSB7DQo+IMKgCQlwZXJyb3IoImNhbid0IG9wZW4gc29ja2V0 Iik7DQo+IMKgCQlyZXR1cm4gLTE7DQo+IGRpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMNCj4g aW5kZXggMGQzMGVhNC4uYzIyMmY5MSAxMDA2NDQNCj4gLS0tIGEvbWFpbi5jDQo+ICsrKyBiL21h aW4uYw0KPiBAQCAtMTksNiArMTksNyBAQA0KPiDCoCAqDQo+IMKgICovDQo+IMKgDQo+ICsjaW5j bHVkZSA8YXJwYS9pbmV0Lmg+DQo+IMKgI2luY2x1ZGUgPGdldG9wdC5oPg0KPiDCoCNpbmNsdWRl IDxzaWduYWwuaD4NCj4gwqAjaW5jbHVkZSA8c3RkaW8uaD4NCj4gQEAgLTYxLDYgKzYyLDcgQEAg c3RhdGljIHZvaWQgYWxmcmVkX3VzYWdlKHZvaWQpDQo+IMKgCXByaW50ZigiwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG90aGVyDQo+IG1hc3RlcnNcbiIpOw0KPiDCoAlwcmludGYoIsKgwqAtcCwgLS1zeW5j LXBlcmlvZCBbcGVyaW9kXcKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0DQo+IHN5bmNocm9uaXphdGlv biBwZXJpb2QsIGluIHNlY29uZHNcbiIpOw0KPiDCoAlwcmludGYoIsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmcmFjdGlvbmFsDQo+IHNlY29uZHMgYXJlIHN1cHBvcnRlZCAoaS5lLiAwLjIgPSA1IEh6KVxu Iik7DQo+ICsJcHJpbnRmKCLCoMKgLTTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNwZWNpZnkgSVB2NA0KPiBtdWx0aWNh c3QgYWRkcmVzcyBhbmQgb3BlcmF0ZSBpbiBJUHY0IG1vZGUiKTsNCj4gwqAJcHJpbnRmKCJcbiIp Ow0KPiDCoAlwcmludGYoIsKgwqAtdSwgLS11bml4LXBhdGggW3BhdGhdwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBhdGggdG8gdW5peA0KPiBzb2NrZXQgdXNlZCBmb3IgY2xpZW50LXNlcnZl clxuIik7DQo+IMKgCXByaW50ZigiwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbW11bmljYXRpb24NCj4g KGRlZmF1bHQ6IFwiIkFMRlJFRF9TT0NLX1BBVEhfREVGQVVMVCJcIilcbiIpOw0KPiBAQCAtMTk2 LDYgKzE5OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZ2xvYmFscyAqYWxmcmVkX2luaXQoaW50IGFyZ2Ms IGNoYXINCj4gKmFyZ3ZbXSkNCj4gwqAJZ2xvYmFscy0+bWVzaF9pZmFjZSA9ICJiYXQwIjsNCj4g wqAJZ2xvYmFscy0+dW5peF9wYXRoID0gQUxGUkVEX1NPQ0tfUEFUSF9ERUZBVUxUOw0KPiDCoAln bG9iYWxzLT52ZXJib3NlID0gMDsNCj4gK8KgwqBnbG9iYWxzLT5pcHY0bW9kZSA9IDA7DQo+IMKg CWdsb2JhbHMtPnVwZGF0ZV9jb21tYW5kID0gTlVMTDsNCj4gwqAJZ2xvYmFscy0+c3luY19wZXJp b2QudHZfc2VjID0gQUxGUkVEX0lOVEVSVkFMOw0KPiDCoAlnbG9iYWxzLT5zeW5jX3BlcmlvZC50 dl9uc2VjID0gMDsNCj4gQEAgLTIwNCw3ICsyMDcsNyBAQCBzdGF0aWMgc3RydWN0IGdsb2JhbHMg KmFsZnJlZF9pbml0KGludCBhcmdjLCBjaGFyDQo+ICphcmd2W10pDQo+IMKgDQo+IMKgCXRpbWVf cmFuZG9tX3NlZWQoKTsNCj4gwqANCj4gLQl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2Ms IGFyZ3YsDQo+ICJtczpyOmhpOmI6dlY6TTpJOnU6ZGM6cDoiLCBsb25nX29wdGlvbnMsDQo+ICsJ d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LA0KPiAibXM6cjpoaTpiOnZWOk06 STp1OmRjOnA6NDoiLCBsb25nX29wdGlvbnMsDQo+IMKgCQkJCcKgwqAmb3B0X2luZCkpICE9IC0x KSB7DQo+IMKgCQlzd2l0Y2ggKG9wdCkgew0KPiDCoAkJY2FzZSAncic6DQo+IEBAIC0yNzcsNiAr MjgwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZ2xvYmFscyAqYWxmcmVkX2luaXQoaW50IGFyZ2MsDQo+ IGNoYXIgKmFyZ3ZbXSkNCj4gwqAJCQlnbG9iYWxzLT5zeW5jX3BlcmlvZC50dl9uc2VjID0gKGRv dWJsZSkNCj4gKHN5bmNfcGVyaW9kIC0gKGludCkgc3luY19wZXJpb2QpICogMWU5Ow0KPiDCoAkJ CXByaW50ZigiICoqIFNldHRpbmcgc3luYyBpbnRlcnZhbCB0bzogJS45Zg0KPiBzZWNvbmRzICgl bGQuJTA5bGQpXG4iLCBzeW5jX3BlcmlvZCwgZ2xvYmFscy0+c3luY19wZXJpb2QudHZfc2VjLA0K PiBnbG9iYWxzLT5zeW5jX3BlcmlvZC50dl9uc2VjKTsNCj4gwqAJCQlicmVhazsNCj4gKwkJY2Fz ZSAnNCc6DQo+ICsJCcKgwqBnbG9iYWxzLT5pcHY0bW9kZSA9IDE7DQo+ICsJCcKgwqBpbmV0X3B0 b24oQUZfSU5FVCwgb3B0YXJnLCAmYWxmcmVkX21jYXN0LmlwdjQpOw0KPiArCQnCoMKgcHJpbnRm KCIgKiogSVB2NCBNdWx0aWNhc3QgTW9kZTogJXhcbiIsDQo+IGFsZnJlZF9tY2FzdC5pcHY0LnNf YWRkcik7DQo+ICsJCcKgwqBicmVhazsNCj4gwqAJCWNhc2UgJ2gnOg0KPiDCoAkJZGVmYXVsdDoN Cj4gwqAJCQlhbGZyZWRfdXNhZ2UoKTsNCj4gZGlmZiAtLWdpdCBhL21hbi9hbGZyZWQuOCBiL21h bi9hbGZyZWQuOA0KPiBpbmRleCA1OTM2ZTY0Li5jNGYwYjk2IDEwMDY0NA0KPiAtLS0gYS9tYW4v YWxmcmVkLjgNCj4gKysrIGIvbWFuL2FsZnJlZC44DQo+IEBAIC0xMjMsNiArMTIzLDExIEBAIGFz IGFyZ3VtZW50cy4NCj4gwqBTcGVjaWZ5IGFsZnJlZCBzeW5jaHJvbml6YXRpb24gcGVyaW9kLCBp biBzZWNvbmRzLiBJZiBub3Qgc3BlY2lmaWVkLA0KPiB0aGUgZGVmYXVsdA0KPiDCoEFMRlJFRF9J TlRFUlZBTCBzZXR0aW5nIG9mIDEwIHNlY29uZHMgd2lsbCBiZSB1c2VkLiBGcmFjdGlvbmFsDQo+ IHNlY29uZHMgYXJlDQo+IMKgc3VwcG9ydGVkLg0KPiArLlRQDQo+ICtcZkJcLTRcZlANCj4gK1Nw ZWNpZnkgdGhlIElQdjQgbXVsdGljYXN0IGdyb3VwIGFkZHJlc3MgYW5kIGVuYWJsZSBJUHY0IGRh dGEtDQo+IHNoYXJpbmcgKGRpc2FibGluZw0KPiArSVB2NiBjb21tdW5pY2F0aW9uKS4gVGhpcyBv cHRpb24gaXMgcmVxdWlyZWQgb24gc3lzdGVtcyB0aGF0IGRvIG5vdA0KPiBzdXBwb3J0IElQdjYN Cj4gK2FkZHJlc3NpbmcuDQo+IMKgLg0KPiDCoC5TSCBFWEFNUExFUw0KPiDCoFN0YXJ0IGFuIGFs ZnJlZCBzZXJ2ZXIgbGlzdGVuaW5nIG9uIGJyaWRnZSBicjAgKGFzc3VtaW5nIHRoYXQgdGhpcw0K PiBicmlkZ2UNCj4gZGlmZiAtLWdpdCBhL25ldHNvY2suYyBiL25ldHNvY2suYw0KPiBpbmRleCA4 NmRiOGE2Li4yZTJkMDQxIDEwMDY0NA0KPiAtLS0gYS9uZXRzb2NrLmMNCj4gKysrIGIvbmV0c29j ay5jDQo+IEBAIC00MywxMCArNDMsMTIgQEANCj4gwqAjaW5jbHVkZSAibGlzdC5oIg0KPiDCoCNp bmNsdWRlICJoYXNoLmgiDQo+IMKgDQo+IC1jb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9s b2NhbG1jYXN0ID0ge3t7IDB4ZmYsIDB4MDIsIDB4MDAsDQo+IDB4MDAsDQo+IC0JCQkJCcKgwqDC oMKgwqDCoMKgMHgwMCwgMHgwMCwgMHgwMCwNCj4gMHgwMCwNCj4gLQkJCQkJwqDCoMKgwqDCoMKg wqAweDAwLCAweDAwLCAweDAwLA0KPiAweDAwLA0KPiAtCQkJCQnCoMKgwqDCoMKgwqDCoDB4MDAs IDB4MDAsIDB4MDAsDQo+IDB4MDEgfSB9IH07DQo+ICthbGZyZWRfYWRkciBhbGZyZWRfbWNhc3Qg PSB7DQo+ICvCoMKgwqDCoC5pcHY2PXt7eyAweGZmLCAweDAyLCAweDAwLCAweDAwLA0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwLCAweDAwLCAweDAwLCAweDAxIH0gfSB9DQo+ICt9 Ow0KPiDCoA0KPiDCoHN0YXRpYyBpbnQgc2VydmVyX2NvbXBhcmUodm9pZCAqZDEsIHZvaWQgKmQy KQ0KPiDCoHsNCj4gQEAgLTI2Miw3ICsyNjQsNyBAQCBzdGF0aWMgaW50IG5ldHNvY2tfb3Blbihz dHJ1Y3QgaW50ZXJmYWNlDQo+ICppbnRlcmZhY2UpDQo+IMKgCW1lbXNldCgmc2luNl9tYywgMCwg c2l6ZW9mKHNpbjZfbWMpKTsNCj4gwqAJc2luNl9tYy5zaW42X3BvcnQgPSBodG9ucyhBTEZSRURf UE9SVCk7DQo+IMKgCXNpbjZfbWMuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsNCj4gLQltZW1jcHko JnNpbjZfbWMuc2luNl9hZGRyLCAmaW42YWRkcl9sb2NhbG1jYXN0LA0KPiArCW1lbWNweSgmc2lu Nl9tYy5zaW42X2FkZHIsICZhbGZyZWRfbWNhc3QsDQo+IMKgCcKgwqDCoMKgwqDCoMKgc2l6ZW9m KHNpbjZfbWMuc2luNl9hZGRyKSk7DQo+IMKgCXNpbjZfbWMuc2luNl9zY29wZV9pZCA9IGludGVy ZmFjZS0+c2NvcGVfaWQ7DQo+IMKgDQo+IEBAIC0yOTEsNyArMjkzLDcgQEAgc3RhdGljIGludCBu ZXRzb2NrX29wZW4oc3RydWN0IGludGVyZmFjZQ0KPiAqaW50ZXJmYWNlKQ0KPiDCoAkJZ290byBl cnI7DQo+IMKgCX0NCj4gwqANCj4gLQltZW1jcHkoJm1yZXEuaXB2Nm1yX211bHRpYWRkciwgJmlu NmFkZHJfbG9jYWxtY2FzdCwNCj4gKwltZW1jcHkoJm1yZXEuaXB2Nm1yX211bHRpYWRkciwgJmFs ZnJlZF9tY2FzdCwNCj4gwqAJwqDCoMKgwqDCoMKgwqBzaXplb2YobXJlcS5pcHY2bXJfbXVsdGlh ZGRyKSk7DQo+IMKgCW1yZXEuaXB2Nm1yX2ludGVyZmFjZSA9IGludGVyZmFjZS0+c2NvcGVfaWQ7 DQo+IMKgDQo+IEBAIC0zMzUsNiArMzM3LDEzNyBAQCBlcnI6DQo+IMKgCXJldHVybiAtMTsNCj4g wqB9DQo+IMKgDQo+ICtzdGF0aWMgaW50IG5ldHNvY2tfb3BlbjQoc3RydWN0IGludGVyZmFjZSAq aW50ZXJmYWNlKQ0KPiArew0KPiArwqDCoGludCBzb2NrOw0KPiArwqDCoGludCBzb2NrX21jOw0K PiArwqDCoHN0cnVjdCBzb2NrYWRkcl9pbiBzaW40LCBzaW5fbWM7DQo+ICvCoMKgc3RydWN0IGlw X21yZXEgbXJlcTsNCj4gK8KgwqBzdHJ1Y3QgaWZyZXEgaWZyOw0KPiArwqDCoGludCByZXQ7DQo+ ICsNCj4gK8KgwqBpbnRlcmZhY2UtPm5ldHNvY2sgPSAtMTsNCj4gK8KgwqBpbnRlcmZhY2UtPm5l dHNvY2tfbWNhc3QgPSAtMTsNCj4gKw0KPiArwqDCoHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09D S19ER1JBTSwgSVBQUk9UT19VRFApOw0KPiArwqDCoGlmIChzb2NrwqDCoDwgMCkgew0KPiArwqDC oMKgwqBwZXJyb3IoImlwdjQ6IGNhbid0IG9wZW4gc29ja2V0Iik7DQo+ICvCoMKgwqDCoHJldHVy biAtMTsNCj4gK8KgwqB9DQo+ICsNCj4gK8KgwqBzb2NrX21jID0gc29ja2V0KFBGX0lORVQsIFNP Q0tfREdSQU0sIElQUFJPVE9fVURQKTsNCj4gK8KgwqBpZiAoc29ja19tY8KgwqA8IDApIHsNCj4g K8KgwqDCoMKgcGVycm9yKCJpcHY0OiBjYW4ndCBvcGVuIG1jIHNvY2tldCIpOw0KPiArwqDCoMKg wqByZXR1cm4gLTE7DQo+ICvCoMKgfQ0KPiArDQo+ICvCoMKgbWVtc2V0KCZpZnIsIDAsIHNpemVv ZihpZnIpKTsNCj4gK8KgwqBzdHJuY3B5KGlmci5pZnJfbmFtZSwgaW50ZXJmYWNlLT5pbnRlcmZh Y2UsIElGTkFNU0laKTsNCj4gK8KgwqBpZnIuaWZyX25hbWVbSUZOQU1TSVogLSAxXSA9ICdcMCc7 DQo+ICvCoMKgaWYgKGlvY3RsKHNvY2tfbWMsIFNJT0NHSUZIV0FERFIsICZpZnIpID09IC0xKSB7 DQo+ICvCoMKgwqDCoHBlcnJvcigiaXB2NDogY2FuJ3QgZ2V0IE1BQyBhZGRyZXNzIik7DQo+ICvC oMKgwqDCoGdvdG8gZXJyOw0KPiArwqDCoH0NCj4gK8KgwqBtZW1jcHkoJmludGVyZmFjZS0+aHdh ZGRyLCAmaWZyLmlmcl9od2FkZHIuc2FfZGF0YSwgNik7DQo+ICsNCj4gK8KgwqBtZW1zZXQoJnNp bjQsIDAsIHNpemVvZihzaW40KSk7DQo+ICvCoMKgc2luNC5zaW5fcG9ydCA9IGh0b25zKEFMRlJF RF9QT1JUKTsNCj4gK8KgwqBzaW40LnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KPiArwqDCoHNpbjQu c2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsNCj4gKw0KPiArwqDCoG1lbXNldCgmc2luX21j LCAwLCBzaXplb2Yoc2luX21jKSk7DQo+ICvCoMKgc2luX21jLnNpbl9wb3J0ID0gaHRvbnMoQUxG UkVEX1BPUlQpOw0KPiArwqDCoHNpbl9tYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCj4gK8KgwqBt ZW1jcHkoJnNpbl9tYy5zaW5fYWRkciwgJmFsZnJlZF9tY2FzdCwgc2l6ZW9mKHNpbl9tYy5zaW5f YWRkcikpOw0KPiArDQo+ICvCoMKgZW5hYmxlX3Jhd19iaW5kX2NhcGFiaWxpdHkoMSk7DQo+ICvC oMKgaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLCBpbnRl cmZhY2UtDQo+ID5pbnRlcmZhY2UsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RybGVuKGlu dGVyZmFjZS0+aW50ZXJmYWNlKSArIDEpKSB7DQo+ICvCoMKgwqDCoHBlcnJvcigiaXB2NDogY2Fu J3QgYmluZCB0byBkZXZpY2UiKTsNCj4gK8KgwqDCoMKgZ290byBlcnI7DQo+ICvCoMKgfQ0KPiAr DQo+ICvCoMKgaWYgKHNldHNvY2tvcHQoc29ja19tYywgU09MX1NPQ0tFVCwgU09fQklORFRPREVW SUNFLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVyZmFjZS0+aW50ZXJmYWNlLA0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cmxlbihpbnRlcmZhY2UtPmludGVyZmFjZSkgKyAxKSkg ew0KPiArwqDCoMKgwqBwZXJyb3IoImlwdjQ6IGNhbid0IGJpbmQgdG8gZGV2aWNlIik7DQo+ICvC oMKgwqDCoGdvdG8gZXJyOw0KPiArwqDCoH0NCj4gK8KgwqBlbmFibGVfcmF3X2JpbmRfY2FwYWJp bGl0eSgwKTsNCj4gKw0KPiArwqDCoHJldCA9IDE7DQo+ICvCoMKgaWYgKHNldHNvY2tvcHQoc29j aywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmcmV0LCBzaXplb2YocmV0KSkNCj4gPCAwKQ0K PiArwqDCoHsNCj4gK8KgwqDCoMKgcGVycm9yKCJpcHY0OiBjYW4ndCBzZXQgcmV1c2UgZmxhZyIp Ow0KPiArwqDCoMKgwqBnb3RvIGVycjsNCj4gK8KgwqB9DQo+ICvCoMKgaWYgKHNldHNvY2tvcHQo c29ja19tYywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmcmV0LA0KPiBzaXplb2YocmV0KSkg PCAwKQ0KPiArwqDCoHsNCj4gK8KgwqDCoMKgcGVycm9yKCJpcHY0OiBjYW4ndCBzZXQgbWMgcmV1 c2UgZmxhZyIpOw0KPiArwqDCoMKgwqBnb3RvIGVycjsNCj4gK8KgwqB9DQo+ICsNCj4gK8KgwqBp ZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNpbjQsIHNpemVvZihzaW40KSkgPCAw KSB7DQo+ICvCoMKgwqDCoHBlcnJvcigiaXB2NDogY2FuJ3QgYmluZCIpOw0KPiArwqDCoMKgwqBn b3RvIGVycjsNCj4gK8KgwqB9DQo+ICsNCj4gK8KgwqBpZiAoYmluZChzb2NrX21jLCAoc3RydWN0 IHNvY2thZGRyICopJnNpbl9tYywgc2l6ZW9mKHNpbl9tYykpIDwgMCkNCj4gew0KPiArwqDCoMKg wqBwZXJyb3IoImlwdjQ6IGNhbid0IGJpbmQgbWMiKTsNCj4gK8KgwqDCoMKgZ290byBlcnI7DQo+ ICvCoMKgfQ0KPiArDQo+ICvCoMKgbWVtY3B5KCZtcmVxLmltcl9tdWx0aWFkZHIsICZhbGZyZWRf bWNhc3QuaXB2NCwNCj4gc2l6ZW9mKG1yZXEuaW1yX211bHRpYWRkcikpOw0KPiArDQo+ICvCoMKg aWYgKGlvY3RsKHNvY2tfbWMsIFNJT0NHSUZBRERSLCAmaWZyKSA8IDApDQo+ICvCoMKgew0KPiAr wqDCoMKgwqBwZXJyb3IoImlwdjQ6IGNhbid0IGdldCBJUCBhZGRyZXNzIik7DQo+ICvCoMKgwqDC oGdvdG8gZXJyOw0KPiArwqDCoH0NCj4gK8KgwqBtcmVxLmltcl9pbnRlcmZhY2UgPSAoKHN0cnVj dCBzb2NrYWRkcl9pbiAqKSAmaWZyLmlmcl9hZGRyKS0NCj4gPnNpbl9hZGRyOw0KPiArwqDCoG1l bWNweSgmaW50ZXJmYWNlLT5hZGRyZXNzLmlwdjQsDQo+ICvCoMKgwqDCoMKgwqAmKChzdHJ1Y3Qg c29ja2FkZHJfaW4gKikgJmlmci5pZnJfYWRkciktPnNpbl9hZGRyLA0KPiArwqDCoMKgwqDCoMKg c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7DQo+ICsNCj4gK8KgwqBpZiAoc2V0c29ja29wdChzb2Nr X21jLCBJUFBST1RPX0lQLCBJUF9BRERfTUVNQkVSU0hJUCwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAmbXJlcSwgc2l6ZW9mKG1yZXEpKSkgew0KPiArwqDCoMKgwqBwZXJyb3IoImlwdjQ6IGNh bid0IGFkZCBtdWx0aWNhc3QgbWVtYmVyc2hpcCIpOw0KPiArwqDCoMKgwqBnb3RvIGVycjsNCj4g K8KgwqB9DQo+ICsNCj4gK8KgwqByZXQgPSBmY250bChzb2NrLCBGX0dFVEZMLCAwKTsNCj4gK8Kg wqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKgwqBwZXJyb3IoImZhaWxlZCB0byBnZXQgZmlsZSBz dGF0dXMgZmxhZ3MiKTsNCj4gK8KgwqDCoMKgZ290byBlcnI7DQo+ICvCoMKgfQ0KPiArDQo+ICvC oMKgcmV0ID0gZmNudGwoc29jaywgRl9TRVRGTCwgcmV0IHwgT19OT05CTE9DSyk7DQo+ICvCoMKg aWYgKHJldCA8IDApIHsNCj4gK8KgwqDCoMKgcGVycm9yKCJmYWlsZWQgdG8gc2V0IGZpbGUgc3Rh dHVzIGZsYWdzIik7DQo+ICvCoMKgwqDCoGdvdG8gZXJyOw0KPiArwqDCoH0NCj4gKw0KPiArwqDC oHJldCA9IGZjbnRsKHNvY2tfbWMsIEZfR0VURkwsIDApOw0KPiArwqDCoGlmIChyZXQgPCAwKSB7 DQo+ICvCoMKgwqDCoHBlcnJvcigiaXB2NDogZmFpbGVkIHRvIGdldCBmaWxlIHN0YXR1cyBmbGFn cyIpOw0KPiArwqDCoMKgwqBnb3RvIGVycjsNCj4gK8KgwqB9DQo+ICsNCj4gK8KgwqByZXQgPSBm Y250bChzb2NrX21jLCBGX1NFVEZMLCByZXQgfCBPX05PTkJMT0NLKTsNCj4gK8KgwqBpZiAocmV0 IDwgMCkgew0KPiArwqDCoMKgwqBwZXJyb3IoImlwdjQ6IGZhaWxlZCB0byBzZXQgZmlsZSBzdGF0 dXMgZmxhZ3MiKTsNCj4gK8KgwqDCoMKgZ290byBlcnI7DQo+ICvCoMKgfQ0KPiArDQo+ICvCoMKg aW50ZXJmYWNlLT5uZXRzb2NrID0gc29jazsNCj4gK8KgwqBpbnRlcmZhY2UtPm5ldHNvY2tfbWNh c3QgPSBzb2NrX21jOw0KPiArDQo+ICvCoMKgcmV0dXJuIDA7DQo+ICtlcnI6DQo+ICvCoMKgY2xv c2Uoc29ja19tYyk7DQo+ICvCoMKgcmV0dXJuIC0xOw0KPiArfQ0KPiArDQo+IMKgaW50IG5ldHNv Y2tfb3Blbl9hbGwoc3RydWN0IGdsb2JhbHMgKmdsb2JhbHMpDQo+IMKgew0KPiDCoAlpbnQgbnVt X3NvY2tzID0gMDsNCj4gQEAgLTM0Miw3ICs0NzUsMTEgQEAgaW50IG5ldHNvY2tfb3Blbl9hbGwo c3RydWN0IGdsb2JhbHMgKmdsb2JhbHMpDQo+IMKgCXN0cnVjdCBpbnRlcmZhY2UgKmludGVyZmFj ZTsNCj4gwqANCj4gwqAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlcmZhY2UsICZnbG9iYWxzLT5p bnRlcmZhY2VzLCBsaXN0KSB7DQo+IC0JCXJldCA9IG5ldHNvY2tfb3BlbihpbnRlcmZhY2UpOw0K PiArCcKgwqBpZiAoZ2xvYmFscy0+aXB2NG1vZGUpDQo+ICsJwqDCoMKgwqByZXQgPSBuZXRzb2Nr X29wZW40KGludGVyZmFjZSk7DQo+ICsJwqDCoGVsc2UNCj4gKwnCoMKgwqDCoHJldCA9IG5ldHNv Y2tfb3BlbihpbnRlcmZhY2UpOw0KPiArDQo+IMKgCQlpZiAocmV0ID49IDApDQo+IMKgCQkJbnVt X3NvY2tzKys7DQo+IMKgCX0NCj4gQEAgLTM1Niw3ICs0OTMsMTIgQEAgdm9pZCBuZXRzb2NrX3Jl b3BlbihzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscykNCj4gwqANCj4gwqAJbGlzdF9mb3JfZWFjaF9l bnRyeShpbnRlcmZhY2UsICZnbG9iYWxzLT5pbnRlcmZhY2VzLCBsaXN0KSB7DQo+IMKgCQlpZiAo aW50ZXJmYWNlLT5uZXRzb2NrIDwgMCkNCj4gLQkJCW5ldHNvY2tfb3BlbihpbnRlcmZhY2UpOw0K PiArCQl7DQo+ICsJwqDCoMKgwqBpZiAoZ2xvYmFscy0+aXB2NG1vZGUpDQo+ICsJwqDCoMKgwqDC oMKgbmV0c29ja19vcGVuNChpbnRlcmZhY2UpOw0KPiArCcKgwqDCoMKgZWxzZQ0KPiArCcKgwqDC oMKgwqDCoG5ldHNvY2tfb3BlbihpbnRlcmZhY2UpOw0KPiArCQl9DQo+IMKgCX0NCj4gwqB9DQo+ IMKgDQo+IEBAIC00MzAsNyArNTcyLDcgQEAgaW50IG5ldHNvY2tfcmVjZWl2ZV9wYWNrZXQoc3Ry dWN0IGdsb2JhbHMNCj4gKmdsb2JhbHMsIGZkX3NldCAqZmRzKQ0KPiDCoH0NCj4gwqANCj4gwqBp bnQgbmV0c29ja19vd25fYWRkcmVzcyhjb25zdCBzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscywNCj4g LQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcmVzcykNCj4gKwkJCWNvbnN0IGFsZnJlZF9h ZGRyICphZGRyZXNzKQ0KPiDCoHsNCj4gwqAJc3RydWN0IGludGVyZmFjZSAqaW50ZXJmYWNlOw0K PiDCoA0KPiBkaWZmIC0tZ2l0IGEvcmVjdi5jIGIvcmVjdi5jDQo+IGluZGV4IGJiOGNjMDUuLmNj MWVmNWIgMTAwNjQ0DQo+IC0tLSBhL3JlY3YuYw0KPiArKysgYi9yZWN2LmMNCj4gQEAgLTE5MCw3 ICsxOTAsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9hbGZyZWRfdHJhbnNhY3Rpb24oc3RydWN0DQo+ IGdsb2JhbHMgKmdsb2JhbHMsDQo+IMKgfQ0KPiDCoA0KPiDCoHN0YXRpYyBpbnQgcHJvY2Vzc19h bGZyZWRfcHVzaF9kYXRhKHN0cnVjdCBnbG9iYWxzICpnbG9iYWxzLA0KPiAtCQkJCcKgwqDCoMKg c3RydWN0IGluNl9hZGRyICpzb3VyY2UsDQo+ICsJCQkJwqDCoMKgwqBhbGZyZWRfYWRkciAqc291 cmNlLA0KPiDCoAkJCQnCoMKgwqDCoHN0cnVjdCBhbGZyZWRfcHVzaF9kYXRhX3YwDQo+ICpwdXNo KQ0KPiDCoHsNCj4gwqAJaW50IGxlbjsNCj4gQEAgLTIwMCw3ICsyMDAsMTAgQEAgc3RhdGljIGlu dCBwcm9jZXNzX2FsZnJlZF9wdXNoX2RhdGEoc3RydWN0DQo+IGdsb2JhbHMgKmdsb2JhbHMsDQo+ IMKgCXN0cnVjdCB0cmFuc2FjdGlvbl9wYWNrZXQgKnRyYW5zYWN0aW9uX3BhY2tldDsNCj4gwqAJ aW50IGZvdW5kOw0KPiDCoA0KPiAtCXJldCA9IGlwdjZfdG9fbWFjKHNvdXJjZSwgJm1hYyk7DQo+ ICvCoMKgaWYgKGdsb2JhbHMtPmlwdjRtb2RlKQ0KPiArwqDCoMKgwqByZXQgPSBpcHY0X3RvX21h Yyhzb3VyY2UsICZtYWMpOw0KPiArwqDCoGVsc2UNCj4gK8KgwqDCoMKgcmV0ID0gaXB2Nl90b19t YWMoc291cmNlLCAmbWFjKTsNCj4gwqAJaWYgKHJldCA8IDApDQo+IMKgCQlnb3RvIGVycjsNCj4g wqANCj4gQEAgLTI2MCw3ICsyNjMsNyBAQCBlcnI6DQo+IMKgc3RhdGljIGludA0KPiDCoHByb2Nl c3NfYWxmcmVkX2Fubm91bmNlX21hc3RlcihzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscywNCj4gwqAJ CQnCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlcmZhY2UgKmludGVyZmFjZSwNCj4gLQkJCcKgwqDC oMKgwqDCoMKgc3RydWN0IGluNl9hZGRyICpzb3VyY2UsDQo+ICsJCQnCoMKgwqDCoMKgwqDCoGFs ZnJlZF9hZGRyICpzb3VyY2UsDQo+IMKgCQkJwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWxmcmVkX2Fu bm91bmNlX21hc3Rlcl92MA0KPiAqYW5ub3VuY2UpDQo+IMKgew0KPiDCoAlzdHJ1Y3Qgc2VydmVy ICpzZXJ2ZXI7DQo+IEBAIC0yNzEsNyArMjc0LDEwIEBAIHByb2Nlc3NfYWxmcmVkX2Fubm91bmNl X21hc3RlcihzdHJ1Y3QgZ2xvYmFscw0KPiAqZ2xvYmFscywNCj4gwqANCj4gwqAJbGVuID0gbnRv aHMoYW5ub3VuY2UtPmhlYWRlci5sZW5ndGgpOw0KPiDCoA0KPiAtCXJldCA9IGlwdjZfdG9fbWFj KHNvdXJjZSwgJm1hYyk7DQo+ICsJaWYgKGdsb2JhbHMtPmlwdjRtb2RlKQ0KPiArCcKgwqByZXQg PSBpcHY0X3RvX21hYyhzb3VyY2UsICZtYWMpOw0KPiArCWVsc2UNCj4gKwnCoMKgcmV0ID0gaXB2 Nl90b19tYWMoc291cmNlLCAmbWFjKTsNCj4gwqAJaWYgKHJldCA8IDApDQo+IMKgCQlyZXR1cm4g LTE7DQo+IMKgDQo+IEBAIC0zMTYsNyArMzIyLDcgQEAgcHJvY2Vzc19hbGZyZWRfYW5ub3VuY2Vf bWFzdGVyKHN0cnVjdCBnbG9iYWxzDQo+ICpnbG9iYWxzLA0KPiDCoA0KPiDCoHN0YXRpYyBpbnQg cHJvY2Vzc19hbGZyZWRfcmVxdWVzdChzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscywNCj4gwqAJCQkJ wqDCoHN0cnVjdCBpbnRlcmZhY2UgKmludGVyZmFjZSwNCj4gLQkJCQnCoMKgc3RydWN0IGluNl9h ZGRyICpzb3VyY2UsDQo+ICsJCQkJwqDCoGFsZnJlZF9hZGRyICpzb3VyY2UsDQo+IMKgCQkJCcKg wqBzdHJ1Y3QgYWxmcmVkX3JlcXVlc3RfdjAgKnJlcXVlc3QpDQo+IMKgew0KPiDCoAlpbnQgbGVu Ow0KPiBAQCAtMzM2LDcgKzM0Miw3IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19hbGZyZWRfcmVxdWVz dChzdHJ1Y3QgZ2xvYmFscw0KPiAqZ2xvYmFscywNCj4gwqB9DQo+IMKgDQo+IMKgc3RhdGljIGlu dCBwcm9jZXNzX2FsZnJlZF9zdGF0dXNfdHhlbmQoc3RydWN0IGdsb2JhbHMgKmdsb2JhbHMsDQo+ IC0JCQkJwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW42X2FkZHIgKnNvdXJjZSwNCj4gKwkJCQnCoMKg wqDCoMKgwqDCoGFsZnJlZF9hZGRyICpzb3VyY2UsDQo+IMKgCQkJCcKgwqDCoMKgwqDCoMKgc3Ry dWN0IGFsZnJlZF9zdGF0dXNfdjANCj4gKnJlcXVlc3QpDQo+IMKgew0KPiDCoAlzdHJ1Y3QgdHJh bnNhY3Rpb25faGVhZCBzZWFyY2gsICpoZWFkOw0KPiBAQCAtMzUxLDcgKzM1NywxMCBAQCBzdGF0 aWMgaW50IHByb2Nlc3NfYWxmcmVkX3N0YXR1c190eGVuZChzdHJ1Y3QNCj4gZ2xvYmFscyAqZ2xv YmFscywNCj4gwqAJaWYgKGxlbiAhPSAoc2l6ZW9mKCpyZXF1ZXN0KSAtIHNpemVvZihyZXF1ZXN0 LT5oZWFkZXIpKSkNCj4gwqAJCXJldHVybiAtMTsNCj4gwqANCj4gLQlyZXQgPSBpcHY2X3RvX21h Yyhzb3VyY2UsICZtYWMpOw0KPiArwqDCoGlmIChnbG9iYWxzLT5pcHY0bW9kZSkNCj4gK8KgwqDC oMKgcmV0ID0gaXB2NF90b19tYWMoc291cmNlLCAmbWFjKTsNCj4gK8KgwqBlbHNlDQo+ICvCoMKg wqDCoHJldCA9IGlwdjZfdG9fbWFjKHNvdXJjZSwgJm1hYyk7DQo+IMKgCWlmIChyZXQgPCAwKQ0K PiDCoAkJcmV0dXJuIC0xOw0KPiDCoA0KPiBAQCAtMzg5LDE1ICszOTgsMjggQEAgaW50IHJlY3Zf YWxmcmVkX3BhY2tldChzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscywNCj4gc3RydWN0IGludGVyZmFj ZSAqaW50ZXJmYWNlLA0KPiDCoAl1aW50OF90IGJ1ZltNQVhfUEFZTE9BRF07DQo+IMKgCXNzaXpl X3QgbGVuZ3RoOw0KPiDCoAlzdHJ1Y3QgYWxmcmVkX3RsdiAqcGFja2V0Ow0KPiAtCXN0cnVjdCBz b2NrYWRkcl9pbjYgc291cmNlOw0KPiArCXN0cnVjdCBzb2NrYWRkcl9pbiAqc291cmNlOw0KPiAr CXN0cnVjdCBzb2NrYWRkcl9pbiBzb3VyY2U0Ow0KPiArCXN0cnVjdCBzb2NrYWRkcl9pbjYgc291 cmNlNjsNCj4gwqAJc29ja2xlbl90IHNvdXJjZWxlbjsNCj4gKwlhbGZyZWRfYWRkciBhbGZyZWRf c291cmNlOw0KPiDCoA0KPiDCoAlpZiAoaW50ZXJmYWNlLT5uZXRzb2NrIDwgMCkNCj4gwqAJCXJl dHVybiAtMTsNCj4gwqANCj4gLQlzb3VyY2VsZW4gPSBzaXplb2Yoc291cmNlKTsNCj4gKwlpZiAo Z2xvYmFscy0+aXB2NG1vZGUpDQo+ICsJew0KPiArwqDCoMKgwqBzb3VyY2UgPSAoc3RydWN0IHNv Y2thZGRyX2luICopICZzb3VyY2U0Ow0KPiArwqDCoMKgwqBzb3VyY2VsZW4gPSBzaXplb2Yoc291 cmNlNCk7DQo+ICsJfQ0KPiArCWVsc2UNCj4gKwl7DQo+ICvCoMKgwqDCoHNvdXJjZSA9IChzdHJ1 Y3Qgc29ja2FkZHJfaW4gKikgJnNvdXJjZTY7DQo+ICvCoMKgwqDCoHNvdXJjZWxlbiA9IHNpemVv Zihzb3VyY2U2KTsNCj4gKwl9DQo+ICsNCj4gwqAJbGVuZ3RoID0gcmVjdmZyb20ocmVjdl9zb2Nr LCBidWYsIHNpemVvZihidWYpLCAwLA0KPiAtCQkJwqDCoChzdHJ1Y3Qgc29ja2FkZHIgKikmc291 cmNlLCAmc291cmNlbGVuKTsNCj4gKwkJCcKgwqAoc3RydWN0IHNvY2thZGRyICopIHNvdXJjZSwg JnNvdXJjZWxlbik7DQo+IMKgCWlmIChsZW5ndGggPD0gMCkgew0KPiDCoAkJcGVycm9yKCJyZWFk IGZyb20gbmV0d29yayBzb2NrZXQgZmFpbGVkIik7DQo+IMKgCQlyZXR1cm4gLTE7DQo+IEBAIC00 MDUsMTIgKzQyNywyMSBAQCBpbnQgcmVjdl9hbGZyZWRfcGFja2V0KHN0cnVjdCBnbG9iYWxzICpn bG9iYWxzLA0KPiBzdHJ1Y3QgaW50ZXJmYWNlICppbnRlcmZhY2UsDQo+IMKgDQo+IMKgCXBhY2tl dCA9IChzdHJ1Y3QgYWxmcmVkX3RsdiAqKWJ1ZjsNCj4gwqANCj4gLQkvKiBkcm9wIHBhY2tldHMg bm90IHNlbnQgb3ZlciBsaW5rLWxvY2FsIGlwdjYgKi8NCj4gLQlpZiAoIWlzX2lwdjZfZXVpNjQo JnNvdXJjZS5zaW42X2FkZHIpKQ0KPiAtCQlyZXR1cm4gLTE7DQo+ICvCoMKgaWYgKGdsb2JhbHMt PmlwdjRtb2RlKQ0KPiArwqDCoHsNCj4gK8KgwqDCoMKgbWVtY3B5KCZhbGZyZWRfc291cmNlLCAm c291cmNlNC5zaW5fYWRkciwNCj4gc2l6ZW9mKHNvdXJjZTQuc2luX2FkZHIpKTsNCj4gK8KgwqB9 DQo+ICvCoMKgZWxzZQ0KPiArwqDCoHsNCj4gK8KgwqDCoMKgbWVtY3B5KCZhbGZyZWRfc291cmNl LCAmc291cmNlNi5zaW42X2FkZHIsDQo+IHNpemVvZihzb3VyY2U2LnNpbjZfYWRkcikpOw0KPiAr DQo+ICvCoMKgwqDCoC8qIGRyb3AgcGFja2V0cyBub3Qgc2VudCBvdmVyIGxpbmstbG9jYWwgaXB2 NiAqLw0KPiArwqDCoMKgwqBpZiAoIWlzX2lwdjZfZXVpNjQoJmFsZnJlZF9zb3VyY2UuaXB2Nikp DQo+ICvCoMKgwqDCoMKgwqByZXR1cm4gLTE7DQo+ICvCoMKgfQ0KPiDCoA0KPiDCoAkvKiBkcm9w IHBhY2tldHMgZnJvbSBvdXJzZWx2ZXMgKi8NCj4gLQlpZiAobmV0c29ja19vd25fYWRkcmVzcyhn bG9iYWxzLCAmc291cmNlLnNpbjZfYWRkcikpDQo+ICsJaWYgKG5ldHNvY2tfb3duX2FkZHJlc3Mo Z2xvYmFscywgJmFsZnJlZF9zb3VyY2UpKQ0KPiDCoAkJcmV0dXJuIC0xOw0KPiDCoA0KPiDCoAkv KiBkcm9wIHRydW5jYXRlZCBwYWNrZXRzICovDQo+IEBAIC00MjQsMjAgKzQ1NSwyMCBAQCBpbnQg cmVjdl9hbGZyZWRfcGFja2V0KHN0cnVjdCBnbG9iYWxzICpnbG9iYWxzLA0KPiBzdHJ1Y3QgaW50 ZXJmYWNlICppbnRlcmZhY2UsDQo+IMKgDQo+IMKgCXN3aXRjaCAocGFja2V0LT50eXBlKSB7DQo+ IMKgCWNhc2UgQUxGUkVEX1BVU0hfREFUQToNCj4gLQkJcHJvY2Vzc19hbGZyZWRfcHVzaF9kYXRh KGdsb2JhbHMsICZzb3VyY2Uuc2luNl9hZGRyLA0KPiArCQlwcm9jZXNzX2FsZnJlZF9wdXNoX2Rh dGEoZ2xvYmFscywgJmFsZnJlZF9zb3VyY2UsDQo+IMKgCQkJCQnCoChzdHJ1Y3QgYWxmcmVkX3B1 c2hfZGF0YV92MA0KPiAqKXBhY2tldCk7DQo+IMKgCQlicmVhazsNCj4gwqAJY2FzZSBBTEZSRURf QU5OT1VOQ0VfTUFTVEVSOg0KPiDCoAkJcHJvY2Vzc19hbGZyZWRfYW5ub3VuY2VfbWFzdGVyKGds b2JhbHMsIGludGVyZmFjZSwNCj4gLQkJCQkJwqDCoMKgwqDCoMKgwqAmc291cmNlLnNpbjZfYWRk ciwNCj4gKwkJCQkJwqDCoMKgwqDCoMKgwqAmYWxmcmVkX3NvdXJjZSwNCj4gwqAJCQkJCcKgwqDC oMKgwqDCoMKgKHN0cnVjdA0KPiBhbGZyZWRfYW5ub3VuY2VfbWFzdGVyX3YwICopcGFja2V0KTsN Cj4gwqAJCWJyZWFrOw0KPiDCoAljYXNlIEFMRlJFRF9SRVFVRVNUOg0KPiAtCQlwcm9jZXNzX2Fs ZnJlZF9yZXF1ZXN0KGdsb2JhbHMsIGludGVyZmFjZSwNCj4gJnNvdXJjZS5zaW42X2FkZHIsDQo+ ICsJCXByb2Nlc3NfYWxmcmVkX3JlcXVlc3QoZ2xvYmFscywgaW50ZXJmYWNlLA0KPiAmYWxmcmVk X3NvdXJjZSwNCj4gwqAJCQkJwqDCoMKgwqDCoMKgwqAoc3RydWN0IGFsZnJlZF9yZXF1ZXN0X3Yw DQo+ICopcGFja2V0KTsNCj4gwqAJCWJyZWFrOw0KPiDCoAljYXNlIEFMRlJFRF9TVEFUVVNfVFhF TkQ6DQo+IC0JCXByb2Nlc3NfYWxmcmVkX3N0YXR1c190eGVuZChnbG9iYWxzLA0KPiAmc291cmNl LnNpbjZfYWRkciwNCj4gKwkJcHJvY2Vzc19hbGZyZWRfc3RhdHVzX3R4ZW5kKGdsb2JhbHMsICZh bGZyZWRfc291cmNlLA0KPiDCoAkJCQkJwqDCoMKgwqAoc3RydWN0IGFsZnJlZF9zdGF0dXNfdjAN Cj4gKilwYWNrZXQpOw0KPiDCoAkJYnJlYWs7DQo+IMKgCWRlZmF1bHQ6DQo+IGRpZmYgLS1naXQg YS9zZW5kLmMgYi9zZW5kLmMNCj4gaW5kZXggYzdhMmFmMi4uODFmZjA2MCAxMDA2NDQNCj4gLS0t IGEvc2VuZC5jDQo+ICsrKyBiL3NlbmQuYw0KPiBAQCAtNDIsNyArNDIsNyBAQCBpbnQgYW5ub3Vu Y2VfbWFzdGVyKHN0cnVjdCBnbG9iYWxzICpnbG9iYWxzKQ0KPiDCoAkJYW5ub3VuY2VtZW50Lmhl YWRlci52ZXJzaW9uID0gQUxGUkVEX1ZFUlNJT047DQo+IMKgCQlhbm5vdW5jZW1lbnQuaGVhZGVy Lmxlbmd0aCA9IGh0b25zKDApOw0KPiDCoA0KPiAtCQlzZW5kX2FsZnJlZF9wYWNrZXQoaW50ZXJm YWNlLCAmaW42YWRkcl9sb2NhbG1jYXN0LA0KPiArCQlzZW5kX2FsZnJlZF9wYWNrZXQoZ2xvYmFs cywgaW50ZXJmYWNlLA0KPiAmYWxmcmVkX21jYXN0LA0KPiDCoAkJCQnCoMKgwqAmYW5ub3VuY2Vt ZW50LA0KPiBzaXplb2YoYW5ub3VuY2VtZW50KSk7DQo+IMKgCX0NCj4gwqANCj4gQEAgLTUwLDcg KzUwLDcgQEAgaW50IGFubm91bmNlX21hc3RlcihzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscykNCj4g wqB9DQo+IMKgDQo+IMKgaW50IHB1c2hfZGF0YShzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscywgc3Ry dWN0IGludGVyZmFjZSAqaW50ZXJmYWNlLA0KPiAtCcKgwqDCoMKgwqDCoHN0cnVjdCBpbjZfYWRk ciAqZGVzdGluYXRpb24sIGVudW0gZGF0YV9zb3VyY2UNCj4gbWF4X3NvdXJjZV9sZXZlbCwNCj4g KwnCoMKgwqDCoMKgwqBhbGZyZWRfYWRkciAqZGVzdGluYXRpb24sIGVudW0gZGF0YV9zb3VyY2UN Cj4gbWF4X3NvdXJjZV9sZXZlbCwNCj4gwqAJwqDCoMKgwqDCoMKgaW50IHR5cGVfZmlsdGVyLCB1 aW50MTZfdCB0eF9pZCkNCj4gwqB7DQo+IMKgCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5V TEw7DQo+IEBAIC05MCw3ICs5MCw3IEBAIGludCBwdXNoX2RhdGEoc3RydWN0IGdsb2JhbHMgKmds b2JhbHMsIHN0cnVjdA0KPiBpbnRlcmZhY2UgKmludGVyZmFjZSwNCj4gwqAJCQl0bHZfbGVuZ3Ro ICs9IHNpemVvZigqcHVzaCkgLSBzaXplb2YocHVzaC0NCj4gPmhlYWRlcik7DQo+IMKgCQkJcHVz aC0+aGVhZGVyLmxlbmd0aCA9IGh0b25zKHRsdl9sZW5ndGgpOw0KPiDCoAkJCXB1c2gtPnR4LnNl cW5vID0gaHRvbnMoc2Vxbm8rKyk7DQo+IC0JCQlzZW5kX2FsZnJlZF9wYWNrZXQoaW50ZXJmYWNl LCBkZXN0aW5hdGlvbiwNCj4gcHVzaCwNCj4gKwkJCXNlbmRfYWxmcmVkX3BhY2tldChnbG9iYWxz LCBpbnRlcmZhY2UsDQo+IGRlc3RpbmF0aW9uLCBwdXNoLA0KPiDCoAkJCQkJwqDCoMKgc2l6ZW9m KCpwdXNoKSArDQo+IHRvdGFsX2xlbmd0aCk7DQo+IMKgCQkJdG90YWxfbGVuZ3RoID0gMDsNCj4g wqAJCX0NCj4gQEAgLTExNCw3ICsxMTQsNyBAQCBpbnQgcHVzaF9kYXRhKHN0cnVjdCBnbG9iYWxz ICpnbG9iYWxzLCBzdHJ1Y3QNCj4gaW50ZXJmYWNlICppbnRlcmZhY2UsDQo+IMKgCQl0bHZfbGVu Z3RoICs9IHNpemVvZigqcHVzaCkgLSBzaXplb2YocHVzaC0+aGVhZGVyKTsNCj4gwqAJCXB1c2gt PmhlYWRlci5sZW5ndGggPSBodG9ucyh0bHZfbGVuZ3RoKTsNCj4gwqAJCXB1c2gtPnR4LnNlcW5v ID0gaHRvbnMoc2Vxbm8rKyk7DQo+IC0JCXNlbmRfYWxmcmVkX3BhY2tldChpbnRlcmZhY2UsIGRl c3RpbmF0aW9uLCBwdXNoLA0KPiArCQlzZW5kX2FsZnJlZF9wYWNrZXQoZ2xvYmFscywgaW50ZXJm YWNlLCBkZXN0aW5hdGlvbiwNCj4gcHVzaCwNCj4gwqAJCQkJwqDCoMKgc2l6ZW9mKCpwdXNoKSAr IHRvdGFsX2xlbmd0aCk7DQo+IMKgCX0NCj4gwqANCj4gQEAgLTEyOCw3ICsxMjgsNyBAQCBpbnQg cHVzaF9kYXRhKHN0cnVjdCBnbG9iYWxzICpnbG9iYWxzLCBzdHJ1Y3QNCj4gaW50ZXJmYWNlICpp bnRlcmZhY2UsDQo+IMKgCQlzdGF0dXNfZW5kLnR4LmlkID0gdHhfaWQ7DQo+IMKgCQlzdGF0dXNf ZW5kLnR4LnNlcW5vID0gaHRvbnMoc2Vxbm8pOw0KPiDCoA0KPiAtCQlzZW5kX2FsZnJlZF9wYWNr ZXQoaW50ZXJmYWNlLCBkZXN0aW5hdGlvbiwNCj4gJnN0YXR1c19lbmQsDQo+ICsJCXNlbmRfYWxm cmVkX3BhY2tldChnbG9iYWxzLCBpbnRlcmZhY2UsIGRlc3RpbmF0aW9uLA0KPiAmc3RhdHVzX2Vu ZCwNCj4gwqAJCQkJwqDCoMKgc2l6ZW9mKHN0YXR1c19lbmQpKTsNCj4gwqAJfQ0KPiDCoA0KPiBA QCAtMTcwLDI0ICsxNzAsNDEgQEAgaW50IHB1c2hfbG9jYWxfZGF0YShzdHJ1Y3QgZ2xvYmFscyAq Z2xvYmFscykNCj4gwqAJcmV0dXJuIDA7DQo+IMKgfQ0KPiDCoA0KPiAtc3NpemVfdCBzZW5kX2Fs ZnJlZF9wYWNrZXQoc3RydWN0IGludGVyZmFjZSAqaW50ZXJmYWNlLA0KPiAtCQkJwqDCoMKgY29u c3Qgc3RydWN0IGluNl9hZGRyICpkZXN0LCB2b2lkICpidWYsDQo+IGludCBsZW5ndGgpDQo+ICtz c2l6ZV90IHNlbmRfYWxmcmVkX3BhY2tldChzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscywgc3RydWN0 IGludGVyZmFjZQ0KPiAqaW50ZXJmYWNlLA0KPiArCQkJwqDCoMKgY29uc3QgYWxmcmVkX2FkZHIg KmRlc3QsIHZvaWQgKmJ1ZiwgaW50DQo+IGxlbmd0aCkNCj4gwqB7DQo+IMKgCXNzaXplX3QgcmV0 Ow0KPiAtCXN0cnVjdCBzb2NrYWRkcl9pbjYgZGVzdF9hZGRyOw0KPiAtDQo+IC0JbWVtc2V0KCZk ZXN0X2FkZHIsIDAsIHNpemVvZihkZXN0X2FkZHIpKTsNCj4gLQlkZXN0X2FkZHIuc2luNl9mYW1p bHkgPSBBRl9JTkVUNjsNCj4gLQlkZXN0X2FkZHIuc2luNl9wb3J0ID0gaHRvbnMoQUxGUkVEX1BP UlQpOw0KPiAtCWRlc3RfYWRkci5zaW42X3Njb3BlX2lkID0gaW50ZXJmYWNlLT5zY29wZV9pZDsN Cj4gLQltZW1jcHkoJmRlc3RfYWRkci5zaW42X2FkZHIsIGRlc3QsIHNpemVvZigqZGVzdCkpOw0K PiArCXN0cnVjdCBzb2NrYWRkciAqZGVzdF9hZGRyOw0KPiArCXN0cnVjdCBzb2NrYWRkcl9pbjYg ZGVzdF9hZGRyNjsNCj4gKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gZGVzdF9hZGRyNDsNCj4gKwlzb2Nr bGVuX3Qgc2xlbjsNCj4gKw0KPiArCWlmIChnbG9iYWxzLT5pcHY0bW9kZSkNCj4gKwl7DQo+ICvC oMKgwqDCoG1lbXNldCgmZGVzdF9hZGRyNCwgMCwgc2l6ZW9mKGRlc3RfYWRkcjQpKTsNCj4gK8Kg wqDCoMKgZGVzdF9hZGRyNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCj4gK8KgwqDCoMKgZGVzdF9h ZGRyNC5zaW5fcG9ydCA9IGh0b25zKEFMRlJFRF9QT1JUKTsNCj4gK8KgwqDCoMKgbWVtY3B5KCZk ZXN0X2FkZHI0LnNpbl9hZGRyLCAmZGVzdC0+aXB2NCwgc2l6ZW9mKGRlc3QtPmlwdjQpKTsNCj4g Kw0KPiArwqDCoMKgwqBzbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7DQo+ICvCoMKg wqDCoGRlc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmRlc3RfYWRkcjQ7DQo+ICsJfQ0K PiArwqDCoGVsc2UNCj4gK8KgwqB7DQo+ICvCoMKgwqDCoG1lbXNldCgmZGVzdF9hZGRyNiwgMCwg c2l6ZW9mKGRlc3RfYWRkcjYpKTsNCj4gK8KgwqDCoMKgZGVzdF9hZGRyNi5zaW42X2ZhbWlseSA9 IEFGX0lORVQ2Ow0KPiArwqDCoMKgwqBkZXN0X2FkZHI2LnNpbjZfcG9ydCA9IGh0b25zKEFMRlJF RF9QT1JUKTsNCj4gK8KgwqDCoMKgZGVzdF9hZGRyNi5zaW42X3Njb3BlX2lkID0gaW50ZXJmYWNl LT5zY29wZV9pZDsNCj4gK8KgwqDCoMKgbWVtY3B5KCZkZXN0X2FkZHI2LnNpbjZfYWRkciwgJmRl c3QtPmlwdjYsIHNpemVvZihkZXN0LT5pcHY2KSk7DQo+ICsNCj4gK8KgwqDCoMKgc2xlbiA9IHNp emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsNCj4gK8KgwqDCoMKgZGVzdF9hZGRyID0gKHN0cnVj dCBzb2NrYWRkciAqKSAmZGVzdF9hZGRyNjsNCj4gK8KgwqB9DQo+IMKgDQo+IMKgCWlmIChpbnRl cmZhY2UtPm5ldHNvY2sgPCAwKQ0KPiDCoAkJcmV0dXJuIDA7DQo+IMKgDQo+IC0JcmV0ID0gc2Vu ZHRvKGludGVyZmFjZS0+bmV0c29jaywgYnVmLCBsZW5ndGgsIDAsDQo+IC0JCcKgwqDCoMKgwqAo c3RydWN0IHNvY2thZGRyICopJmRlc3RfYWRkciwNCj4gLQkJwqDCoMKgwqDCoHNpemVvZihzdHJ1 Y3Qgc29ja2FkZHJfaW42KSk7DQo+ICsJcmV0ID0gc2VuZHRvKGludGVyZmFjZS0+bmV0c29jaywg YnVmLCBsZW5ndGgsIDAsIGRlc3RfYWRkciwNCj4gc2xlbik7DQo+IMKgCWlmIChyZXQgPT0gLUVQ RVJNKSB7DQo+IMKgCQlwZXJyb3IoIkVycm9yIGR1cmluZyBzZW50Iik7DQo+IMKgCQljbG9zZShp bnRlcmZhY2UtPm5ldHNvY2spOw0KPiBkaWZmIC0tZ2l0IGEvc2VydmVyLmMgYi9zZXJ2ZXIuYw0K PiBpbmRleCBmNmUwYzhhLi4zMzc0MjNhIDEwMDY0NA0KPiAtLS0gYS9zZXJ2ZXIuYw0KPiArKysg Yi9zZXJ2ZXIuYw0KPiBAQCAtMjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBpbnQgcHVyZ2VfZGF0YShz dHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscykNCj4gwqAJcmV0dXJuIDA7DQo+IMKgfQ0KPiDCoA0KPiAt c3RhdGljIHZvaWQgY2hlY2tfaWZfc29ja2V0KHN0cnVjdCBpbnRlcmZhY2UgKmludGVyZmFjZSkN Cj4gK3N0YXRpYyB2b2lkIGNoZWNrX2lmX3NvY2tldChzdHJ1Y3QgaW50ZXJmYWNlICppbnRlcmZh Y2UsIHN0cnVjdA0KPiBnbG9iYWxzICpnbG9iYWxzKQ0KPiDCoHsNCj4gwqAJaW50IHNvY2s7DQo+ IMKgCXN0cnVjdCBpZnJlcSBpZnI7DQo+IEBAIC0yMjYsNyArMjI2LDcgQEAgc3RhdGljIHZvaWQg Y2hlY2tfaWZfc29ja2V0KHN0cnVjdCBpbnRlcmZhY2UNCj4gKmludGVyZmFjZSkNCj4gwqAJaWYg KGludGVyZmFjZS0+bmV0c29jayA8IDApDQo+IMKgCQlyZXR1cm47DQo+IMKgDQo+IC0Jc29jayA9 IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7DQo+ICsJc29jayA9IHNvY2tldChQRl9J TkVULCBTT0NLX0RHUkFNLCAwKTsNCj4gwqAJaWYgKHNvY2sgPCAwKSB7DQo+IMKgCQlwZXJyb3Io ImNhbid0IG9wZW4gc29ja2V0Iik7DQo+IMKgCQlyZXR1cm47DQo+IEBAIC0yNDAsNyArMjQwLDcg QEAgc3RhdGljIHZvaWQgY2hlY2tfaWZfc29ja2V0KHN0cnVjdCBpbnRlcmZhY2UNCj4gKmludGVy ZmFjZSkNCj4gwqAJCWdvdG8gY2xvc2U7DQo+IMKgCX0NCj4gwqANCj4gLQlpZiAoaW50ZXJmYWNl LT5zY29wZV9pZCAhPSAodWludDMyX3QpaWZyLmlmcl9pZmluZGV4KSB7DQo+ICsJaWYgKCgwID09 IGdsb2JhbHMtPmlwdjRtb2RlKSAmJiAoaW50ZXJmYWNlLT5zY29wZV9pZCAhPQ0KPiAodWludDMy X3QpaWZyLmlmcl9pZmluZGV4KSkgew0KPiDCoAkJZnByaW50ZihzdGRlcnIsDQo+IMKgCQkJImlm YWNlIGluZGV4IGNoYW5nZWQgZnJvbSAlIlBSSXUzMiIgdG8gJWQsDQo+IGNsb3NpbmcgbmV0c29j a1xuIiwNCj4gwqAJCQlpbnRlcmZhY2UtPnNjb3BlX2lkLCBpZnIuaWZyX2lmaW5kZXgpOw0KPiBA QCAtMjgyLDcgKzI4Miw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2lmX3NvY2tldHMoc3RydWN0IGds b2JhbHMNCj4gKmdsb2JhbHMpDQo+IMKgCWdsb2JhbHMtPmlmX2NoZWNrID0gbm93Ow0KPiDCoA0K PiDCoAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGVyZmFjZSwgJmdsb2JhbHMtPmludGVyZmFjZXMs IGxpc3QpDQo+IC0JCWNoZWNrX2lmX3NvY2tldChpbnRlcmZhY2UpOw0KPiArCQljaGVja19pZl9z b2NrZXQoaW50ZXJmYWNlLCBnbG9iYWxzKTsNCj4gwqB9DQo+IMKgDQo+IMKgc3RhdGljIHZvaWQg ZXhlY3V0ZV91cGRhdGVfY29tbWFuZChzdHJ1Y3QgZ2xvYmFscyAqZ2xvYmFscykNCj4gZGlmZiAt LWdpdCBhL3VuaXhfc29jay5jIGIvdW5peF9zb2NrLmMNCj4gaW5kZXggMGE4MTlhMi4uNGE4YzZl MCAxMDA2NDQNCj4gLS0tIGEvdW5peF9zb2NrLmMNCj4gKysrIGIvdW5peF9zb2NrLmMNCj4gQEAg LTI1OCw3ICsyNTgsNyBAQCBzdGF0aWMgaW50IHVuaXhfc29ja19yZXFfZGF0YShzdHJ1Y3QgZ2xv YmFscw0KPiAqZ2xvYmFscywNCj4gwqAJaGVhZC0+Y2xpZW50X3NvY2tldCA9IGNsaWVudF9zb2Nr Ow0KPiDCoAloZWFkLT5yZXF1ZXN0ZWRfdHlwZSA9IHJlcXVlc3QtPnJlcXVlc3RlZF90eXBlOw0K PiDCoA0KPiAtCXNlbmRfYWxmcmVkX3BhY2tldChpbnRlcmZhY2UsICZnbG9iYWxzLT5iZXN0X3Nl cnZlci0NCj4gPmFkZHJlc3MsDQo+ICsJc2VuZF9hbGZyZWRfcGFja2V0KGdsb2JhbHMsIGludGVy ZmFjZSwgJmdsb2JhbHMtDQo+ID5iZXN0X3NlcnZlci0+YWRkcmVzcywNCj4gwqAJCQnCoMKgwqBy ZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpKTsNCj4gwqANCj4gwqAJcmV0dXJuIDA7