From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8FEAC433E0 for ; Wed, 20 May 2020 09:17:10 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 70F9E20671 for ; Wed, 20 May 2020 09:17:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="n8zrKAPP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 70F9E20671 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 037AD80007; Wed, 20 May 2020 05:17:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F2915900002; Wed, 20 May 2020 05:17:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E3FB980007; Wed, 20 May 2020 05:17:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0209.hostedemail.com [216.40.44.209]) by kanga.kvack.org (Postfix) with ESMTP id C743A900002 for ; Wed, 20 May 2020 05:17:09 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 909D6C5D8 for ; Wed, 20 May 2020 09:17:09 +0000 (UTC) X-FDA: 76836543378.16.match56_21355142f2c57 X-HE-Tag: match56_21355142f2c57 X-Filterd-Recvd-Size: 26449 Received: from mailgw01.mediatek.com (unknown [210.61.82.183]) by imf19.hostedemail.com (Postfix) with ESMTP for ; Wed, 20 May 2020 09:17:07 +0000 (UTC) X-UUID: 380035610f8745719597dfc818bc3bc0-20200520 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=GgFKY5TA54aiL2c8IIB1pKoJZCio1gYPWkrJIRlvhOo=; b=n8zrKAPPp2S82/vlyzOc1N4a7QwnTMgcdBEa48mrJoXw2q7PsFE+I6Dp3eOq++8ze/iXFL6FOXdW03UU4uIUcHsGQ4a0wDjAkP8fYdmBDlxbrWiJ43X6b0KeKJsiRnT3KzjB9oZFnVY4FD3Q4ePEJf1/iZdMAJwutMKqsdGYO3k=; X-UUID: 380035610f8745719597dfc818bc3bc0-20200520 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 646279205; Wed, 20 May 2020 17:17:03 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n1.mediatek.inc (172.21.101.68) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 20 May 2020 17:17:00 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 20 May 2020 17:16:59 +0800 Message-ID: <1589966220.14692.24.camel@mtksdccf07> Subject: Re: [PATCH v4 2/4] kasan: record and print the free track From: Walter Wu To: Dmitry Vyukov CC: Andrey Ryabinin , Alexander Potapenko , kasan-dev , Linux-MM , LKML , Linux ARM , wsd_upstream , Date: Wed, 20 May 2020 17:17:00 +0800 In-Reply-To: References: <20200519022517.24182-1-walter-zh.wu@mediatek.com> <1589947387.29577.35.camel@mtksdccf07> <1589951659.4440.4.camel@mtksdccf07> <1589955526.4440.22.camel@mtksdccf07> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: PiBPbiBXZWQsIE1heSAyMCwgMjAyMCBhdCA4OjE4IEFNIFdhbHRlciBXdSA8d2FsdGVyLXpoLnd1 QG1lZGlhdGVrLmNvbT4gd3JvdGU6DQo+ID4NCj4gPiBPbiBXZWQsIDIwMjAtMDUtMjAgYXQgMTM6 MTQgKzA4MDAsIFdhbHRlciBXdSB3cm90ZToNCj4gPiA+ID4gT24gV2VkLCBNYXkgMjAsIDIwMjAg YXQgNjowMyBBTSBXYWx0ZXIgV3UgPHdhbHRlci16aC53dUBtZWRpYXRlay5jb20+IHdyb3RlOg0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBPbiBUdWUsIE1heSAxOSwgMjAyMCBhdCA0OjI1IEFNIFdh bHRlciBXdSA8d2FsdGVyLXpoLnd1QG1lZGlhdGVrLmNvbT4gd3JvdGU6DQo+ID4gPiA+ID4gPiA+ DQo+ID4gPiA+ID4gPiA+IE1vdmUgZnJlZSB0cmFjayBmcm9tIHNsdWIgYWxsb2MgbWV0YS1kYXRh IHRvIHNsdWIgZnJlZSBtZXRhLWRhdGEgaW4NCj4gPiA+ID4gPiA+ID4gb3JkZXIgdG8gbWFrZSBz dHJ1Y3Qga2FzYW5fZnJlZV9tZXRhIHNpemUgaXMgMTYgYnl0ZXMuIEl0IGlzIGEgZ29vZA0KPiA+ ID4gPiA+ID4gPiBzaXplIGJlY2F1c2UgaXQgaXMgdGhlIG1pbmltYWwgcmVkem9uZSBzaXplIGFu ZCBhIGdvb2QgbnVtYmVyIG9mDQo+ID4gPiA+ID4gPiA+IGFsaWdubWVudC4NCj4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gRm9yIGZyZWUgdHJhY2sgaW4gZ2VuZXJpYyBLQVNBTiwgd2UgZG8g dGhlIG1vZGlmaWNhdGlvbiBpbiBzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4ga2FzYW5fYWxsb2NfbWV0 YSBhbmQga2FzYW5fZnJlZV9tZXRhOg0KPiA+ID4gPiA+ID4gPiAtIHJlbW92ZSBmcmVlIHRyYWNr IGZyb20ga2FzYW5fYWxsb2NfbWV0YS4NCj4gPiA+ID4gPiA+ID4gLSBhZGQgZnJlZSB0cmFjayBp bnRvIGthc2FuX2ZyZWVfbWV0YS4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gWzFdaHR0 cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg0MzcNCj4gPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogV2FsdGVyIFd1IDx3YWx0ZXItemgu d3VAbWVkaWF0ZWsuY29tPg0KPiA+ID4gPiA+ID4gPiBTdWdnZXN0ZWQtYnk6IERtaXRyeSBWeXVr b3YgPGR2eXVrb3ZAZ29vZ2xlLmNvbT4NCj4gPiA+ID4gPiA+ID4gQ2M6IEFuZHJleSBSeWFiaW5p biA8YXJ5YWJpbmluQHZpcnR1b3p6by5jb20+DQo+ID4gPiA+ID4gPiA+IENjOiBEbWl0cnkgVnl1 a292IDxkdnl1a292QGdvb2dsZS5jb20+DQo+ID4gPiA+ID4gPiA+IENjOiBBbGV4YW5kZXIgUG90 YXBlbmtvIDxnbGlkZXJAZ29vZ2xlLmNvbT4NCj4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4g PiA+ICBtbS9rYXNhbi9jb21tb24uYyAgfCAyMiArKy0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4g PiA+ID4gPiA+ICBtbS9rYXNhbi9nZW5lcmljLmMgfCAxOCArKysrKysrKysrKysrKysrKysNCj4g PiA+ID4gPiA+ID4gIG1tL2thc2FuL2thc2FuLmggICB8ICA3ICsrKysrKysNCj4gPiA+ID4gPiA+ ID4gIG1tL2thc2FuL3JlcG9ydC5jICB8IDIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiA+ ID4gPiA+ICBtbS9rYXNhbi90YWdzLmMgICAgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrDQo+ID4gPiA+ID4gPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDY0IGluc2VydGlv bnMoKyksIDQwIGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBkaWZm IC0tZ2l0IGEvbW0va2FzYW4vY29tbW9uLmMgYi9tbS9rYXNhbi9jb21tb24uYw0KPiA+ID4gPiA+ ID4gPiBpbmRleCA4YmM2MTgyODliYjEuLjQ3YjUzOTEyZjMyMiAxMDA2NDQNCj4gPiA+ID4gPiA+ ID4gLS0tIGEvbW0va2FzYW4vY29tbW9uLmMNCj4gPiA+ID4gPiA+ID4gKysrIGIvbW0va2FzYW4v Y29tbW9uLmMNCj4gPiA+ID4gPiA+ID4gQEAgLTUxLDcgKzUxLDcgQEAgZGVwb3Rfc3RhY2tfaGFu ZGxlX3Qga2FzYW5fc2F2ZV9zdGFjayhnZnBfdCBmbGFncykNCj4gPiA+ID4gPiA+ID4gICAgICAg ICByZXR1cm4gc3RhY2tfZGVwb3Rfc2F2ZShlbnRyaWVzLCBucl9lbnRyaWVzLCBmbGFncyk7DQo+ ID4gPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IC1zdGF0aWMgaW5s aW5lIHZvaWQgc2V0X3RyYWNrKHN0cnVjdCBrYXNhbl90cmFjayAqdHJhY2ssIGdmcF90IGZsYWdz KQ0KPiA+ID4gPiA+ID4gPiArdm9pZCBrYXNhbl9zZXRfdHJhY2soc3RydWN0IGthc2FuX3RyYWNr ICp0cmFjaywgZ2ZwX3QgZmxhZ3MpDQo+ID4gPiA+ID4gPiA+ICB7DQo+ID4gPiA+ID4gPiA+ICAg ICAgICAgdHJhY2stPnBpZCA9IGN1cnJlbnQtPnBpZDsNCj4gPiA+ID4gPiA+ID4gICAgICAgICB0 cmFjay0+c3RhY2sgPSBrYXNhbl9zYXZlX3N0YWNrKGZsYWdzKTsNCj4gPiA+ID4gPiA+ID4gQEAg LTI5OSwyNCArMjk5LDYgQEAgc3RydWN0IGthc2FuX2ZyZWVfbWV0YSAqZ2V0X2ZyZWVfaW5mbyhz dHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsDQo+ID4gPiA+ID4gPiA+ICAgICAgICAgcmV0dXJuICh2 b2lkICopb2JqZWN0ICsgY2FjaGUtPmthc2FuX2luZm8uZnJlZV9tZXRhX29mZnNldDsNCj4gPiA+ ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4g PiAtc3RhdGljIHZvaWQga2FzYW5fc2V0X2ZyZWVfaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2Fj aGUsDQo+ID4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICB2b2lkICpvYmplY3QsIHU4IHRhZykN Cj4gPiA+ID4gPiA+ID4gLXsNCj4gPiA+ID4gPiA+ID4gLSAgICAgICBzdHJ1Y3Qga2FzYW5fYWxs b2NfbWV0YSAqYWxsb2NfbWV0YTsNCj4gPiA+ID4gPiA+ID4gLSAgICAgICB1OCBpZHggPSAwOw0K PiA+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiA+IC0gICAgICAgYWxsb2NfbWV0YSA9IGdldF9h bGxvY19pbmZvKGNhY2hlLCBvYmplY3QpOw0KPiA+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiA+ IC0jaWZkZWYgQ09ORklHX0tBU0FOX1NXX1RBR1NfSURFTlRJRlkNCj4gPiA+ID4gPiA+ID4gLSAg ICAgICBpZHggPSBhbGxvY19tZXRhLT5mcmVlX3RyYWNrX2lkeDsNCj4gPiA+ID4gPiA+ID4gLSAg ICAgICBhbGxvY19tZXRhLT5mcmVlX3BvaW50ZXJfdGFnW2lkeF0gPSB0YWc7DQo+ID4gPiA+ID4g PiA+IC0gICAgICAgYWxsb2NfbWV0YS0+ZnJlZV90cmFja19pZHggPSAoaWR4ICsgMSkgJSBLQVNB Tl9OUl9GUkVFX1NUQUNLUzsNCj4gPiA+ID4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPiA+ID4gPiAt DQo+ID4gPiA+ID4gPiA+IC0gICAgICAgc2V0X3RyYWNrKCZhbGxvY19tZXRhLT5mcmVlX3RyYWNr W2lkeF0sIEdGUF9OT1dBSVQpOw0KPiA+ID4gPiA+ID4gPiAtfQ0KPiA+ID4gPiA+ID4gPiAtDQo+ ID4gPiA+ID4gPiA+ICB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBwYWdlICpwYWdlKQ0K PiA+ID4gPiA+ID4gPiAgew0KPiA+ID4gPiA+ID4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgaTsN Cj4gPiA+ID4gPiA+ID4gQEAgLTQ5Miw3ICs0NzQsNyBAQCBzdGF0aWMgdm9pZCAqX19rYXNhbl9r bWFsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgY29uc3Qgdm9pZCAqb2JqZWN0LA0KPiA+ ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgS0FTQU5fS01BTExPQ19SRURaT05FKTsNCj4gPiA+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gICAgICAgICBpZiAoY2FjaGUtPmZsYWdzICYgU0xBQl9L QVNBTikNCj4gPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgIHNldF90cmFjaygmZ2V0X2FsbG9j X2luZm8oY2FjaGUsIG9iamVjdCktPmFsbG9jX3RyYWNrLCBmbGFncyk7DQo+ID4gPiA+ID4gPiA+ ICsgICAgICAgICAgICAgICBrYXNhbl9zZXRfdHJhY2soJmdldF9hbGxvY19pbmZvKGNhY2hlLCBv YmplY3QpLT5hbGxvY190cmFjaywgZmxhZ3MpOw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g PiAgICAgICAgIHJldHVybiBzZXRfdGFnKG9iamVjdCwgdGFnKTsNCj4gPiA+ID4gPiA+ID4gIH0N Cj4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL21tL2thc2FuL2dlbmVyaWMuYyBiL21tL2thc2Fu L2dlbmVyaWMuYw0KPiA+ID4gPiA+ID4gPiBpbmRleCAzMzcyYmRjYWY5MmEuLjc2M2Q4YTEzZTBh YyAxMDA2NDQNCj4gPiA+ID4gPiA+ID4gLS0tIGEvbW0va2FzYW4vZ2VuZXJpYy5jDQo+ID4gPiA+ ID4gPiA+ICsrKyBiL21tL2thc2FuL2dlbmVyaWMuYw0KPiA+ID4gPiA+ID4gPiBAQCAtMzQ0LDMg KzM0NCwyMSBAQCB2b2lkIGthc2FuX3JlY29yZF9hdXhfc3RhY2sodm9pZCAqYWRkcikNCj4gPiA+ ID4gPiA+ID4gICAgICAgICBhbGxvY19pbmZvLT5hdXhfc3RhY2tbMV0gPSBhbGxvY19pbmZvLT5h dXhfc3RhY2tbMF07DQo+ID4gPiA+ID4gPiA+ICAgICAgICAgYWxsb2NfaW5mby0+YXV4X3N0YWNr WzBdID0ga2FzYW5fc2F2ZV9zdGFjayhHRlBfTk9XQUlUKTsNCj4gPiA+ID4gPiA+ID4gIH0NCj4g PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArdm9pZCBrYXNhbl9zZXRfZnJlZV9pbmZvKHN0 cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwNCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpvYmplY3QsIHU4IHRhZykNCj4gPiA+ID4gPiA+ID4gK3sNCj4g PiA+ID4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qga2FzYW5fZnJlZV9tZXRhICpmcmVlX21ldGE7DQo+ ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBmcmVlX21ldGEgPSBnZXRfZnJl ZV9pbmZvKGNhY2hlLCBvYmplY3QpOw0KPiA+ID4gPiA+ID4gPiArICAgICAgIGthc2FuX3NldF90 cmFjaygmZnJlZV9tZXRhLT5mcmVlX3RyYWNrLCBHRlBfTk9XQUlUKTsNCj4gPiA+ID4gPiA+ID4g K30NCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArc3RydWN0IGthc2FuX3RyYWNrICpr YXNhbl9nZXRfZnJlZV90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsDQo+ID4gPiA+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb2JqZWN0LCB1OCB0YWcp DQo+ID4gPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gPiA+ICsgICAgICAgc3RydWN0IGthc2FuX2Zy ZWVfbWV0YSAqZnJlZV9tZXRhOw0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsgICAg ICAgZnJlZV9tZXRhID0gZ2V0X2ZyZWVfaW5mbyhjYWNoZSwgb2JqZWN0KTsNCj4gPiA+ID4gPiA+ ID4gKyAgICAgICByZXR1cm4gJmZyZWVfbWV0YS0+ZnJlZV90cmFjazsNCj4gPiA+ID4gPiA+ID4g K30NCj4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmggYi9tbS9rYXNh bi9rYXNhbi5oDQo+ID4gPiA+ID4gPiA+IGluZGV4IGE3MzkxYmM4MzA3MC4uYWQ4OTdlYzM2NTQ1 IDEwMDY0NA0KPiA+ID4gPiA+ID4gPiAtLS0gYS9tbS9rYXNhbi9rYXNhbi5oDQo+ID4gPiA+ID4g PiA+ICsrKyBiL21tL2thc2FuL2thc2FuLmgNCj4gPiA+ID4gPiA+ID4gQEAgLTEyNyw2ICsxMjcs OSBAQCBzdHJ1Y3Qga2FzYW5fZnJlZV9tZXRhIHsNCj4gPiA+ID4gPiA+ID4gICAgICAgICAgKiBP dGhlcndpc2UgaXQgbWlnaHQgYmUgdXNlZCBmb3IgdGhlIGFsbG9jYXRvciBmcmVlbGlzdC4NCj4g PiA+ID4gPiA+ID4gICAgICAgICAgKi8NCj4gPiA+ID4gPiA+ID4gICAgICAgICBzdHJ1Y3QgcWxp c3Rfbm9kZSBxdWFyYW50aW5lX2xpbms7DQo+ID4gPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX0tB U0FOX0dFTkVSSUMNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qga2FzYW5fdHJhY2sgZnJl ZV90cmFjazsNCj4gPiA+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ID4gPiAgfTsNCj4gPiA+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gIHN0cnVjdCBrYXNhbl9hbGxvY19tZXRhICpnZXRfYWxs b2NfaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsDQo+ID4gPiA+ID4gPiA+IEBAIC0xNjgs NiArMTcxLDEwIEBAIHZvaWQga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSh2b2lkICpvYmplY3Qs IHVuc2lnbmVkIGxvbmcgaXApOw0KPiA+ID4gPiA+ID4gPiAgc3RydWN0IHBhZ2UgKmthc2FuX2Fk ZHJfdG9fcGFnZShjb25zdCB2b2lkICphZGRyKTsNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ ID4gIGRlcG90X3N0YWNrX2hhbmRsZV90IGthc2FuX3NhdmVfc3RhY2soZ2ZwX3QgZmxhZ3MpOw0K PiA+ID4gPiA+ID4gPiArdm9pZCBrYXNhbl9zZXRfdHJhY2soc3RydWN0IGthc2FuX3RyYWNrICp0 cmFjaywgZ2ZwX3QgZmxhZ3MpOw0KPiA+ID4gPiA+ID4gPiArdm9pZCBrYXNhbl9zZXRfZnJlZV9p bmZvKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0LCB1OCB0YWcpOw0KPiA+ ID4gPiA+ID4gPiArc3RydWN0IGthc2FuX3RyYWNrICprYXNhbl9nZXRfZnJlZV90cmFjayhzdHJ1 Y3Qga21lbV9jYWNoZSAqY2FjaGUsDQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqb2JqZWN0LCB1OCB0YWcpOw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPiAgI2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX0dFTkVSSUMpICYmIFwNCj4gPiA+ID4g PiA+ID4gICAgICAgICAoZGVmaW5lZChDT05GSUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfU0xV QikpDQo+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9tbS9rYXNhbi9yZXBvcnQuYyBiL21tL2th c2FuL3JlcG9ydC5jDQo+ID4gPiA+ID4gPiA+IGluZGV4IDZmOGYyYmY4ZjUzYi4uOTZkMjY1N2Zl NzBmIDEwMDY0NA0KPiA+ID4gPiA+ID4gPiAtLS0gYS9tbS9rYXNhbi9yZXBvcnQuYw0KPiA+ID4g PiA+ID4gPiArKysgYi9tbS9rYXNhbi9yZXBvcnQuYw0KPiA+ID4gPiA+ID4gPiBAQCAtMTU5LDI2 ICsxNTksNiBAQCBzdGF0aWMgdm9pZCBkZXNjcmliZV9vYmplY3RfYWRkcihzdHJ1Y3Qga21lbV9j YWNoZSAqY2FjaGUsIHZvaWQgKm9iamVjdCwNCj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAg ICh2b2lkICopKG9iamVjdF9hZGRyICsgY2FjaGUtPm9iamVjdF9zaXplKSk7DQo+ID4gPiA+ID4g PiA+ICB9DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IC1zdGF0aWMgc3RydWN0IGthc2Fu X3RyYWNrICprYXNhbl9nZXRfZnJlZV90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsDQo+ ID4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICB2b2lkICpvYmplY3QsIHU4IHRhZykNCj4gPiA+ ID4gPiA+ID4gLXsNCj4gPiA+ID4gPiA+ID4gLSAgICAgICBzdHJ1Y3Qga2FzYW5fYWxsb2NfbWV0 YSAqYWxsb2NfbWV0YTsNCj4gPiA+ID4gPiA+ID4gLSAgICAgICBpbnQgaSA9IDA7DQo+ID4gPiA+ ID4gPiA+IC0NCj4gPiA+ID4gPiA+ID4gLSAgICAgICBhbGxvY19tZXRhID0gZ2V0X2FsbG9jX2lu Zm8oY2FjaGUsIG9iamVjdCk7DQo+ID4gPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiA+ID4gLSNpZmRl ZiBDT05GSUdfS0FTQU5fU1dfVEFHU19JREVOVElGWQ0KPiA+ID4gPiA+ID4gPiAtICAgICAgIGZv ciAoaSA9IDA7IGkgPCBLQVNBTl9OUl9GUkVFX1NUQUNLUzsgaSsrKSB7DQo+ID4gPiA+ID4gPiA+ IC0gICAgICAgICAgICAgICBpZiAoYWxsb2NfbWV0YS0+ZnJlZV9wb2ludGVyX3RhZ1tpXSA9PSB0 YWcpDQo+ID4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4g PiA+ID4gPiAtICAgICAgIH0NCj4gPiA+ID4gPiA+ID4gLSAgICAgICBpZiAoaSA9PSBLQVNBTl9O Ul9GUkVFX1NUQUNLUykNCj4gPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgIGkgPSBhbGxvY19t ZXRhLT5mcmVlX3RyYWNrX2lkeDsNCj4gPiA+ID4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPiA+ID4g PiAtDQo+ID4gPiA+ID4gPiA+IC0gICAgICAgcmV0dXJuICZhbGxvY19tZXRhLT5mcmVlX3RyYWNr W2ldOw0KPiA+ID4gPiA+ID4gPiAtfQ0KPiA+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiA+ICAj aWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUMNCj4gPiA+ID4gPiA+ID4gIHN0YXRpYyB2b2lkIHBy aW50X3N0YWNrKGRlcG90X3N0YWNrX2hhbmRsZV90IHN0YWNrKQ0KPiA+ID4gPiA+ID4gPiAgew0K PiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbW0va2FzYW4vdGFncy5jIGIvbW0va2FzYW4vdGFn cy5jDQo+ID4gPiA+ID4gPiA+IGluZGV4IDI1Yjc3MzRlNzAxMy4uMjAxZGVlNWQ2YWUwIDEwMDY0 NA0KPiA+ID4gPiA+ID4gPiAtLS0gYS9tbS9rYXNhbi90YWdzLmMNCj4gPiA+ID4gPiA+ID4gKysr IGIvbW0va2FzYW4vdGFncy5jDQo+ID4gPiA+ID4gPiA+IEBAIC0xNjIsMyArMTYyLDQwIEBAIHZv aWQgX19od2FzYW5fdGFnX21lbW9yeSh1bnNpZ25lZCBsb25nIGFkZHIsIHU4IHRhZywgdW5zaWdu ZWQgbG9uZyBzaXplKQ0KPiA+ID4gPiA+ID4gPiAgICAgICAgIGthc2FuX3BvaXNvbl9zaGFkb3co KHZvaWQgKilhZGRyLCBzaXplLCB0YWcpOw0KPiA+ID4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ID4g PiAgRVhQT1JUX1NZTUJPTChfX2h3YXNhbl90YWdfbWVtb3J5KTsNCj4gPiA+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ID4gPiArdm9pZCBrYXNhbl9zZXRfZnJlZV9pbmZvKHN0cnVjdCBrbWVtX2NhY2hl ICpjYWNoZSwNCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpvYmplY3QsIHU4IHRhZykNCj4gPiA+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiA+ID4gKyAg ICAgICBzdHJ1Y3Qga2FzYW5fYWxsb2NfbWV0YSAqYWxsb2NfbWV0YTsNCj4gPiA+ID4gPiA+ID4g KyAgICAgICB1OCBpZHggPSAwOw0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsgICAg ICAgYWxsb2NfbWV0YSA9IGdldF9hbGxvY19pbmZvKGNhY2hlLCBvYmplY3QpOw0KPiA+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX0tBU0FOX1NXX1RBR1NfSURFTlRJ RlkNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBpZHggPSBhbGxvY19tZXRhLT5mcmVlX3RyYWNrX2lk eDsNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBhbGxvY19tZXRhLT5mcmVlX3BvaW50ZXJfdGFnW2lk eF0gPSB0YWc7DQo+ID4gPiA+ID4gPiA+ICsgICAgICAgYWxsb2NfbWV0YS0+ZnJlZV90cmFja19p ZHggPSAoaWR4ICsgMSkgJSBLQVNBTl9OUl9GUkVFX1NUQUNLUzsNCj4gPiA+ID4gPiA+ID4gKyNl bmRpZg0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsgICAgICAga2FzYW5fc2V0X3Ry YWNrKCZhbGxvY19tZXRhLT5mcmVlX3RyYWNrW2lkeF0sIEdGUF9OT1dBSVQpOw0KPiA+ID4gPiA+ ID4gPiArfQ0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICtzdHJ1Y3Qga2FzYW5fdHJh Y2sgKmthc2FuX2dldF9mcmVlX3RyYWNrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwNCj4gPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvYmplY3QsIHU4 IHRhZykNCj4gPiA+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qga2Fz YW5fYWxsb2NfbWV0YSAqYWxsb2NfbWV0YTsNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBpbnQgaSA9 IDA7DQo+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gKyAgICAgICBhbGxvY19tZXRhID0g Z2V0X2FsbG9jX2luZm8oY2FjaGUsIG9iamVjdCk7DQo+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiA+ID4gKyNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU19JREVOVElGWQ0KPiA+ID4gPiA+ID4g PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBLQVNBTl9OUl9GUkVFX1NUQUNLUzsgaSsrKSB7DQo+ ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAoYWxsb2NfbWV0YS0+ZnJlZV9wb2ludGVy X3RhZ1tpXSA9PSB0YWcpDQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ID4gPiA+ID4gPiArICAgICAgIH0NCj4gPiA+ID4gPiA+ID4gKyAgICAgICBpZiAo aSA9PSBLQVNBTl9OUl9GUkVFX1NUQUNLUykNCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAg IGkgPSBhbGxvY19tZXRhLT5mcmVlX3RyYWNrX2lkeDsNCj4gPiA+ID4gPiA+ID4gKyNlbmRpZg0K PiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsgICAgICAgcmV0dXJuICZhbGxvY19tZXRh LT5mcmVlX3RyYWNrW2ldOw0KPiA+ID4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+IEhpIFdhbHRlciwNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBGVFIgSSd2ZSB1cGxvYWRl ZCB0aGlzIGZvciByZXZpZXcgcHVycG9zZXMgaGVyZToNCj4gPiA+ID4gPiA+IGh0dHBzOi8vbGlu dXgtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vYy9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xp bnV4LysvMjQ1OA0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IERpZmYgZnJvbSB0aGUgcHJldmlv dXMgdmVyc2lvbiBpcyBhdmFpbGFibGUgYXM6DQo+ID4gPiA+ID4gPiBodHRwczovL2xpbnV4LXJl dmlldy5nb29nbGVzb3VyY2UuY29tL2MvbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC8r LzI0NTgvMS4uMg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEkndmUgdGVzdGVkIHRoaXMgbG9j YWxseSBhbmQgd2l0aCBzeXprYWxsZXIuIFRoaXMgaXMgOg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+IFsgICA4MC41ODMwMjFdWyAgICBDM10gRnJlZWQgYnkgdGFzayAwOg0KPiA+ID4gPiA+ID4g WyAgIDgwLjU4MzQ4MF1bICAgIEMzXSAga2FzYW5fc2F2ZV9zdGFjaysweDFiLzB4NDAgbW0va2Fz YW4vY29tbW9uLmM6NDkNCj4gPiA+ID4gPiA+IFsgICA4MC41ODQwNTZdWyAgICBDM10gIGthc2Fu X3NldF90cmFjaysweDFjLzB4MzAgbW0va2FzYW4vY29tbW9uLmM6NTcNCj4gPiA+ID4gPiA+IFsg ICA4MC41ODQ2MTddWyAgICBDM10gIGthc2FuX3NldF9mcmVlX2luZm8rMHgxYi8weDMwIG1tL2th c2FuL2dlbmVyaWMuYzozNTQNCj4gPiA+ID4gPiA+IFsgICA4MC41ODUyMjFdWyAgICBDM10gIF9f a2FzYW5fc2xhYl9mcmVlKzB4ZDgvMHgxMjAgbW0va2FzYW4vY29tbW9uLmM6NDM4DQo+ID4gPiA+ ID4gPiBbICAgODAuNTg1ODE0XVsgICAgQzNdICBfX2NhY2hlX2ZyZWUgbW0vc2xhYi5jOjM0MjYg W2lubGluZV0NCj4gPiA+ID4gPiA+IFsgICA4MC41ODU4MTRdWyAgICBDM10gIGtmcmVlKzB4MTBi LzB4MmIwIG1tL3NsYWIuYzozNzU3DQo+ID4gPiA+ID4gPiBbICAgODAuNTg2MjkxXVsgICAgQzNd ICBrYXNhbl9yY3VfcmVjbGFpbSsweDE2LzB4NDMgW3Rlc3Rfa2FzYW5dDQo+ID4gPiA+ID4gPiBb ICAgODAuNTg3MDA5XVsgICAgQzNdICByY3VfZG9fYmF0Y2gga2VybmVsL3JjdS90cmVlLmM6MjIw NyBbaW5saW5lXQ0KPiA+ID4gPiA+ID4gWyAgIDgwLjU4NzAwOV1bICAgIEMzXSAgcmN1X2NvcmUr MHg1OWYvMHgxMzcwIGtlcm5lbC9yY3UvdHJlZS5jOjI0MzQNCj4gPiA+ID4gPiA+IFsgICA4MC41 ODc1MzddWyAgICBDM10gIF9fZG9fc29mdGlycSsweDI2Yy8weDlmYSBrZXJuZWwvc29mdGlycS5j OjI5Mg0KPiA+ID4gPiA+ID4gWyAgIDgwLjU4ODA4NV1bICAgIEMzXQ0KPiA+ID4gPiA+ID4gWyAg IDgwLjU4ODM2N11bICAgIEMzXSBMYXN0IG9uZSBjYWxsX3JjdSgpIGNhbGwgc3RhY2s6DQo+ID4g PiA+ID4gPiBbICAgODAuNTg5MDUyXVsgICAgQzNdICBrYXNhbl9zYXZlX3N0YWNrKzB4MWIvMHg0 MCBtbS9rYXNhbi9jb21tb24uYzo0OQ0KPiA+ID4gPiA+ID4gWyAgIDgwLjU4OTYyMl1bICAgIEMz XSAga2FzYW5fcmVjb3JkX2F1eF9zdGFjaysweDgyLzB4YjAgbW0va2FzYW4vZ2VuZXJpYy5jOjM0 NQ0KPiA+ID4gPiA+ID4gWyAgIDgwLjU5MDI1NF1bICAgIEMzXSAgX19jYWxsX3JjdSBrZXJuZWwv cmN1L3RyZWUuYzoyNjcyIFtpbmxpbmVdDQo+ID4gPiA+ID4gPiBbICAgODAuNTkwMjU0XVsgICAg QzNdICBjYWxsX3JjdSsweDE0Zi8weDdmMCBrZXJuZWwvcmN1L3RyZWUuYzoyNzQ2DQo+ID4gPiA+ ID4gPiBbICAgODAuNTkwNzgyXVsgICAgQzNdICBrYXNhbl9yY3VfdWFmKzB4ZTQvMHhlYiBbdGVz dF9rYXNhbl0NCj4gPiA+ID4gPiA+IFsgICA4MC41OTE2OTddWyAgICBDM10gIGttYWxsb2NfdGVz dHNfaW5pdCsweGJjLzB4MTA5NyBbdGVzdF9rYXNhbl0NCj4gPiA+ID4gPiA+IFsgICA4MC41OTI5 MDBdWyAgICBDM10gIGRvX29uZV9pbml0Y2FsbCsweDEwYS8weDdkMCBpbml0L21haW4uYzoxMTk2 DQo+ID4gPiA+ID4gPiBbICAgODAuNTkzNDk0XVsgICAgQzNdICBkb19pbml0X21vZHVsZSsweDFl Ni8weDZkMCBrZXJuZWwvbW9kdWxlLmM6MzUzOQ0KPiA+ID4gPiA+ID4gWyAgIDgwLjU5NDA2Nl1b ICAgIEMzXSAgbG9hZF9tb2R1bGUrMHg3NDY0LzB4OTQ1MCBrZXJuZWwvbW9kdWxlLmM6Mzg5MA0K PiA+ID4gPiA+ID4gWyAgIDgwLjU5NDYyNl1bICAgIEMzXSAgX19kb19zeXNfaW5pdF9tb2R1bGUr MHgxZTMvMHgyMjAga2VybmVsL21vZHVsZS5jOjM5NTMNCj4gPiA+ID4gPiA+IFsgICA4MC41OTUy NjVdWyAgICBDM10gIGRvX3N5c2NhbGxfNjQrMHhmNi8weDdkMCBhcmNoL3g4Ni9lbnRyeS9jb21t b24uYzoyOTUNCj4gPiA+ID4gPiA+IFsgICA4MC41OTU4MjJdWyAgICBDM10gIGVudHJ5X1NZU0NB TExfNjRfYWZ0ZXJfaHdmcmFtZSsweDQ5LzB4YjMNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPg0K PiA+ID4gPiA+ID4gT3ZlcmFsbCB0aGlzIGxvb2tzIHZlcnkgZ29vZCB0byBtZS4NCj4gPiA+ID4g PiA+IEJ1dCB0aGVyZSBpcyBvbmUgYXNwZWN0IHRoYXQgYm90aGVycyBtZS4gSW4gdGhlIHByZXZp b3VzIHBhdGNoIHlvdSBoYWQNCj4gPiA+ID4gPiA+IGNvZGUgdGhhdCByZXR1cm5lZCBOVUxMIGZy b20ga2FzYW5fZ2V0X2ZyZWVfdHJhY2soKSBpZiB0aGUgb2JqZWN0IGlzDQo+ID4gPiA+ID4gPiBs aXZlICh3aGljaCBtZWFucyBmcmVlIG1ldGEgaXMgbm90IGF2YWlsYWJsZSwgaXQncyBvY2N1cGll ZCBieSBvYmplY3QNCj4gPiA+ID4gPiA+IGRhdGEpLiBOb3cgeW91IGRyb3BwZWQgdGhhdCBjb2Rl LCBidXQgSSB0aGluayB3ZSBzdGlsbCBuZWVkIGl0Lg0KPiA+ID4gPiA+ID4gT3RoZXJ3aXNlIHdl IGNhc3QgdXNlciBvYmplY3QgZGF0YSB0byBmcmVlIG1ldGEgYW5kIHByaW50IHRoZSBmcmVlDQo+ ID4gPiA+ID4gPiBzdGFjay9waWQgZnJvbSB3aGF0ZXZlciBnYXJiYWdlIGlzIHRoZXJlLiBUaGlz IG1heSBsZWFkIHRvIHZlcnkNCj4gPiA+ID4gPiA+IGNvbmZ1c2luZyBvdXRwdXQgYW5kIHBvdGVu dGlhbGx5IHRvIGNyYXNoZXMgaW4gc3RhY2tkZXBvdC4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiBZZXMsIEkgdG90YWxseSBhZ3JlZSB3aXRoIHlvdS4gSW4gdGhlIHByZXZpb3Vz IGVtYWlsIEkgdGhvdWdodCB0aGF0DQo+ID4gPiA+ID4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGgg ZnJlZSB0cmFjaywgYnV0IEkgZGlkIG5vdCBwb2ludCBpdCBvdXQuIFRoYW5rDQo+ID4gPiA+ID4g eW91IGZvciBwb2ludGluZyB0aGlzIHByb2JsZW0uIEFzIHlvdSBtZW50aW9uZWQsIHdlIHNob3Vs ZCBmaXggaXQuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IFdoYXQgZG8geW91IHRoaW5rIGFib3V0 IHRoaXMgcGF0Y2ggb24gdG9wIG9mIHlvdXIgcGF0Y2hlcz8NCj4gPiA+ID4gPiA+IGh0dHBzOi8v bGludXgtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vYy9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRz L2xpbnV4LysvMjQ3OA0KPiA+ID4gPiA+ID4gVGhpcyB3YXkgd2UgdmVyeSBwcmVjaXNlbHkgbWFy ayB0aGUgcGVyaW9kIG9mIHRpbWUgd2hlbiB0aGUgb2JqZWN0IGhhcw0KPiA+ID4gPiA+ID4gZnJl ZSB0cmFjayBsaXZlIGFuZCBzZXQuDQo+ID4gPiA+ID4gPiBJZiBpdCBsb29rcyBnb29kIHRvIHlv dSwgZmVlbCBmcmVlIHRvIGluY29ycG9yYXRlIGl0IGludG8geW91ciBzZXJpZXMuDQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gVGhhbmsgeW91IGZvciBwcm92aWRpbmcgZ29vZCBp ZGVhIHNvbHV0aW9uLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBzYXcgdGhpcyBwYXRjaCwgdGhh dCBpcyBhIGdyZWF0IHBhdGNoLiBJIHRoaW5rIGl0IGNhbiBmaXggdGhlIGlzc3VlDQo+ID4gPiA+ ID4gd2hpY2ggaGFzIGdhcmJhZ2Ugc3RhY2suIGl0IHNob3VsZCB3b3JrIGFzIGRlc2NyaWJlZCBi ZWxvdy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IDEpLiBXaGVuIG9iamVjdCBpcyBsaXZlLCB0aGVu IGRvbid0IHByaW50IGZyZWUgc3RhY2suDQo+ID4gPiA+ID4gMikuIFdoZW4gb2JqZWN0IGlzIE5P VCBhbGl2ZSwgYWZ0ZXIgZnJlZSBvYmplY3Q6DQo+ID4gPiA+ID4gMmEpLiB3aGVuIG9iamVjdCBp cyBpbiBxdWFyYW50aW5lLCB0aGVuIGl0IGNhbiBwcmludCBmcmVlIHN0YWNrDQo+ID4gPiA+ID4g MmIpLiB3aGVuIG9iamVjdCBpcyBOT1QgaW4gcXVhcmFudGluZSwgdGhlbiBpdCBjYW4gTk9UIHBy aW50IGZyZWUgc3RhY2suDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJIGhhdmUgYSBxdWVzdGlvbiBh Ym91dCAyKSwgd2h5IHdlIGRvbid0IGRpcmVjdGx5IHVzZQ0KPiA+ID4gPiA+IEtBU0FOX0tNQUxM T0NfRlJFRT8gaWYgd2UgZGlyZWN0bHkgdXNlIGl0LCB0aGVuIDJiKSBjYW4gcHJpbnQgZnJlZQ0K PiA+ID4gPiA+IHN0YWNrPyAyYikgbWF5IGhhcyB1c2UtYWZ0ZXItZnJlZT8gc28gdGhhdCBpdCBt YXkgbmVlZCBmcmVlIHN0YWNrLg0KPiA+ID4gPg0KPiA+DQo+ID4gQWJvdXQgMmIpLCBJIHNlZSBh bm90aGVyIHF1ZXN0aW9uLiBXaGVuIGRvIHFsaW5rX2ZyZWUoKSwgaXQgd2lsbCBiZQ0KPiA+IHdy aXR0ZW4gS0FTQU5fS01BTExPQ19GUkVFIGZyb20gS0FTQU5fS01BTExPQ19GUkVFVFJBQ0s/IGlm IHdlIGRvbid0DQo+ID4gd3JpdGUgc2hhZG93IG1lbW9yeSwgaXQgaXMgc3RpbGwgS0FTQU5fS01B TExPQ19GUkVFVFJBQ0ssIHRoZW4gMmIpIHdpbGwNCj4gPiBoYXZlIGZyZWUgc3RhY2s/IEJlY2F1 c2UgSSBzZWUgeW91IGFkZCBLQVNBTl9LTUFMTE9DX0ZSRUVUUkFDSyB0byBnZXQNCj4gPiB1c2Ut YWZ0ZXItZnJlZSBpbiBnZXRfc2hhZG93X2J1Z190eXBlKCkuIHNvIHNob3VsZCBpdCBub3Qgd3Jp dGUNCj4gPiBLQVNBTl9LTUFMTE9DX0ZSRUU/DQo+IA0KPiBJdCBtYXkgb3IgbWF5IG5vdCB3b3Jr Lg0KPiBUaGUgcG90ZW50aWFsIHByb2JsZW0gaXMgdGhhdCB3aGVuIHFsaW5rX2ZyZWUgY2FsbHMg X19fY2FjaGVfZnJlZSwNCj4gc2xhYi9zbHViIG1heSBzdGFydCB1c2luZyBvYmplY3QgbWVtb3J5 IGZvciBpdHMgb3duIHB1cnBvc2VzLCBlLmcuDQo+IHN0b3JlIHRoZSBuZXh0IGxpbmsuIFRoaXMg bmV4dCBsaW5rIG1heSBvdmVyd3JpdGUgcGFydCBvZiBmcmVlIG1ldGEuDQo+IEl0IGFjdHVhbGx5 IG1heSB3b3JrIGJlY2F1c2UgdGhlIHNsYWIvc2xpYiBuZXh0IGxpbmsgaXMgbGlrZWx5IHRvDQo+ IG92ZXJsYXAgd2l0aCBrYXNhbl9mcmVlX21ldGEucXVhcmFudGluZV9saW5rIG9ubHkuIEFuZCB3 ZSBtYXkgaGF2ZQ0KPiBrYXNhbl9mcmVlX21ldGEuZnJlZV90cmFjayBpbnRhY3Qgd2hpbGUgS0FT QU5fS01BTExPQ19GUkVFIGlzIHNldC4gQnV0DQo+IHRoaXMgbmVlZHMgY2FyZWZ1bCBjaGVja2lu ZyBmb3IgYm90aCBzbGFiIGFuZCBzbHViIGFuZCBpZiB0aGV5IG1heSB1c2UNCj4gbW9yZSB0aGFu IDEgd29yZCBpbiBzb21lIGNvbmZpZ3VyYXRpb25zLg0KPiANCg0KVGhpcyBwcm9ibGVtIGxvb2tz IGxpa2UgZXhpc3RpbmcsIGV2ZW4gd2l0aG91dCB0aGlzIGNoYW5nZT8gY3VycmVudGx5DQpLQVNB TiBtYXkgZ2V0IHdyb25nIGZyZWUgc3RhY2s/DQoNClJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUg c2hhZG93IG1lbW9yeSBjb250ZW50IGlzDQpLQVNBTl9LTUFMTE9DX0ZSRUVUUkFDSyBvciBLQVNB Tl9LTUFMTE9DX0ZSRUUsIGl0IG1heSBoYXZlIHRoaXMgcHJvYmxlbT8NCkJ1dCBiZWNhdXNlIG9m IGthc2FuX2dldF9mcmVlX3RyYWNrKCkgaGF2ZSBjb25kaXRpb25zIHRvIGdldCBmcmVlIHRyYWNr LA0Kc28gdGhhdCBpZiBzaGFkb3cgbWVtb3J5IGNvbnRlbnQgaXMgS0FTQU5fS01BTExPQ19GUkVF LCB0aGVuIGl0IHdpbGwNCmF2b2lkIHRoaXMgcHJvYmxlbSBhbmQgYWx3YXlzIHByaW50IHJpZ2h0 IGZyZWUgc3RhY2suDQoNCj4gDQo+ID4gPiA+IFdlIGNhbid0IHVzZSBLQVNBTl9LTUFMTE9DX0ZS RUUgYmVjYXVzZSBvZiB0aGlzIHBhcnQ6DQo+ID4gPiA+DQo+ID4gPiA+IHN0YXRpYyBib29sIF9f a2FzYW5fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0LA0K PiA+ID4gPiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlwLCBib29sIHF1YXJhbnRp bmUpDQo+ID4gPiA+IHsNCj4gPiA+ID4gLi4uDQo+ID4gPiA+ICAgICBrYXNhbl9wb2lzb25fc2hh ZG93KG9iamVjdCwgcm91bmRlZF91cF9zaXplLCBLQVNBTl9LTUFMTE9DX0ZSRUUpOw0KPiA+ID4g Pg0KPiA+ID4gPiAgICAgaWYgKChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9HRU5FUklDKSAmJiAh cXVhcmFudGluZSkgfHwNCj4gPiA+ID4gICAgICAgICAgICAgdW5saWtlbHkoIShjYWNoZS0+Zmxh Z3MgJiBTTEFCX0tBU0FOKSkpDQo+ID4gPiA+ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4g Pg0KPiA+ID4gPiAgICAga2FzYW5fc2V0X2ZyZWVfaW5mbyhjYWNoZSwgb2JqZWN0LCB0YWcpOw0K PiA+ID4gPiAuLi4NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBPaywgSSBzZWUuIFdoZW4gcmV0dXJu IGZhbHNlLCB0aGVuIHRoZSBzaGFkb3cgbWVtb3J5IGNvbnRlbnQgaGFzDQo+ID4gPiBLQVNBTl9L TUFMTE9DX0ZSRUUsIGJ1dCBpdCBkb2Vzbid0IHNldCBmcmVlIHN0YWNrLCBzbyB0aGF0IHdlIG5l ZWQgdG8NCj4gPiA+IGF2b2lkIHRoaXMgc2l0dWF0aW9uLiBUaGFuayBmb3IgeW91IHJlbWluZGVy Lg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gV2UgbWF5IHNldCBLQVNBTl9LTUFMTE9DX0ZSRUUs IGJ1dCBub3Qgc2V0IHRoZSB0cmFjayAob3IgZXZlbiBoYXZlDQo+ID4gPiA+IG1lbW9yeSBmb3Ig dGhlIHRyYWNrISkuDQo+ID4gPiA+IFRoZSBvYmplY3QgbWF5IG5vdCBoYXZlIGZyZWUgbWV0YSBh bGxvY2F0ZWQgYXQgYWxsLCBlLmcuIHZlcnkgbGFyZ2UNCj4gPiA+ID4gb2JqZWN0IHdpdGggY3Rv ciAobm8gcGxhY2UgdG8gc3RvcmUgbWV0YSksIG9yIGl0IG1heSBiZSBpbiBhIG1lbXBvb2w6DQo+ ID4gPiA+IGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y1LjctcmM2L3NvdXJjZS9t bS9tZW1wb29sLmMjTDEwOQ0KPiA+ID4gPiBhbmQgbWVtcG9vbCBtYXkgYmUgdXNpbmcgdGhlIG9i amVjdCBtZW1vcnkgaXRzZWxmIChmb3IgaXRzIG93biBuZXh0DQo+ID4gPiA+IGxpbmsgb3Igc29t ZXRoaW5nKS4NCj4gPiA+ID4NCj4gPiA+ID4gS0FTQU5fS01BTExPQ19GUkVFVFJBQ0sgdmVyeSBl eHBsaWNpdGx5IHRyYWNrcyB0aGUgZXhhY3QgY29uZGl0aW9uIHdlDQo+ID4gPiA+IHdhbnQ6IHdl IGhhdmUgbWV0YSBpbmZvIGxpdmUgbm93IGFuZCB3ZSBoYXZlIGZyZWUgdHJhY2sgc2V0Lg0KPiAN Cg0K