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=-6.9 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 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 78C69C2D0C8 for ; Tue, 17 Dec 2019 07:48:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 26D1A206D3 for ; Tue, 17 Dec 2019 07:48:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="UB+zu023"; dkim=pass (1024-bit key) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="WMXg87Z5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726320AbfLQHsn (ORCPT ); Tue, 17 Dec 2019 02:48:43 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:54698 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725868AbfLQHsm (ORCPT ); Tue, 17 Dec 2019 02:48:42 -0500 Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xBH7eQo9025048; Mon, 16 Dec 2019 23:48:22 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=CGgrV7rcbwn8Vv8YcqRJGesZsNiU75d8iXYxsILJ/+w=; b=UB+zu023P0p4VT2JNyKryTIQYIACGSlVmxQGduClPFUznuuGtZsxtRNQ9Nntc3hqR4wV 7I9Bk/xqZ7Z0yrKPoMEg6QEi+edgV/LkdqkeIMr4PM2XlkDLiNyZBJli9oJABsCXHhnk 32n9xUfNeFsavlsurDT6XuL0K2Ljnkc3y4c= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com with ESMTP id 2wxcwy3kks-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 16 Dec 2019 23:48:22 -0800 Received: from ash-exhub201.TheFacebook.com (2620:10d:c0a8:83::7) by ash-exhub203.TheFacebook.com (2620:10d:c0a8:83::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 16 Dec 2019 23:48:20 -0800 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (100.104.31.183) by o365-in.thefacebook.com (100.104.36.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 16 Dec 2019 23:48:20 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TXYuaI4aKTYK6Bevanmut7jqJZaH7kxHfYnqw94uZLHhiiKIIe706jiFwv9oYgwVlw9jZAtqWPu6LWn2jQAjopcSkwHeaM3NrUhitaODBuotZrhhmd5DctLEVgp3Ex4WLxA6jxL+shJ2yLHCyoSrkSNMEg0Cx/B3bI9NHhnHpet8xdePYS8dYiJG4jgMhslTIEf/ABXz/fnzM67AhpW2COpp9n4z00KfeNKuoW0uLovg6nd5yvFPg/kPLpOLqMTs/4Xo4FdhUuBR8BxSjQXzRTfrpAnhab6naUQpUmocgNHWszsr+NrodWzb5n9k3dc+FV6Qrdz+nMEHSwPaxyPpug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CGgrV7rcbwn8Vv8YcqRJGesZsNiU75d8iXYxsILJ/+w=; b=N+lBUrg0Pt2lN6K414qaL8Ac/zX4A8aM0hELiusyqB6hSnv5KJ+Fpei6K+V9mqNeGo/bTyuogczj8o55DKddsHxN4xp7Cda/biWbD8Vsq5YchemCzyPgCxqO20iyfZInmZOhAstcrdFe6ErK8/bFNWD0zUoftjZhhyPPpM05zIjQYaT8fGMMt6yHq40k3Okhb9UxpjQu3uNMbla0XMLR8eD1lrDCEygTmEN/SxWPUMA6mYdZL9SOh0/84vdDQ9yiy1+VroaXQYZMcd5Softk9rtsiVlck0gYfIdjJeXI9XxXsVUDbsKFKuERBJYpUsQeCd1YmDkwqNShi/A9xPbRkQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fb.com; dmarc=pass action=none header.from=fb.com; dkim=pass header.d=fb.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector2-fb-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CGgrV7rcbwn8Vv8YcqRJGesZsNiU75d8iXYxsILJ/+w=; b=WMXg87Z5M4ZdjfylOpgnbwHBPq2BDZrg/paZlI8z7+w3FA83N49yUJVXUfequt9ERwDvt1AVXBOejT2DzRUiptfaoWhyeQfTNRBvYwaUvF9KehK2ha7GoUM6mQDUrAbmZ9NzMp/Jgyys4N1twJv+4ocU5X6+EX0+Ff3sAqx6jqs= Received: from DM5PR15MB1675.namprd15.prod.outlook.com (10.175.107.145) by DM5PR15MB1881.namprd15.prod.outlook.com (10.174.247.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.20; Tue, 17 Dec 2019 07:48:19 +0000 Received: from DM5PR15MB1675.namprd15.prod.outlook.com ([fe80::2844:b18d:c296:c23]) by DM5PR15MB1675.namprd15.prod.outlook.com ([fe80::2844:b18d:c296:c23%8]) with mapi id 15.20.2538.019; Tue, 17 Dec 2019 07:48:19 +0000 From: Yonghong Song To: Martin Lau , "bpf@vger.kernel.org" CC: Alexei Starovoitov , Daniel Borkmann , David Miller , Kernel Team , "netdev@vger.kernel.org" Subject: Re: [Potential Spoof] [PATCH bpf-next 06/13] bpf: Introduce BPF_MAP_TYPE_STRUCT_OPS Thread-Topic: [Potential Spoof] [PATCH bpf-next 06/13] bpf: Introduce BPF_MAP_TYPE_STRUCT_OPS Thread-Index: AQHVshgyNc/qp1Y+F0CQAUsOmS2KX6e9+HsA Date: Tue, 17 Dec 2019 07:48:18 +0000 Message-ID: <6ca4e58d-4bb3-bb4b-0fe2-e10a29a53d1f@fb.com> References: <20191214004737.1652076-1-kafai@fb.com> <20191214004751.1652774-1-kafai@fb.com> In-Reply-To: <20191214004751.1652774-1-kafai@fb.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MWHPR13CA0026.namprd13.prod.outlook.com (2603:10b6:300:95::12) To DM5PR15MB1675.namprd15.prod.outlook.com (2603:10b6:3:11f::17) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2620:10d:c090:180::8f07] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b5baad2c-e642-4095-1810-08d782c57b66 x-ms-traffictypediagnostic: DM5PR15MB1881: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-forefront-prvs: 02543CD7CD x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(366004)(136003)(396003)(39860400002)(346002)(376002)(43544003)(189003)(199004)(110136005)(8936002)(86362001)(6512007)(4326008)(5660300002)(186003)(54906003)(31696002)(2906002)(71200400001)(64756008)(66556008)(66946007)(36756003)(66446008)(81156014)(81166006)(66476007)(53546011)(316002)(31686004)(8676002)(478600001)(6506007)(30864003)(2616005)(6486002)(52116002)(579004);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR15MB1881;H:DM5PR15MB1675.namprd15.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: fb.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nQk8NwJw1nJF3SxQEaue9UmEnO9kWOARpp4yTPxFpwGpz3u+nxEMWgGNOJVsv8hk1v0ncVkgIn3aiaKRpL4O+C8gN7AP2/Y7vAssmFoSk3Vv2ncsRlhMS2b/oeWAJMTC/a7e2KjR7gQnYDtN4DY/WHOUFGIg2sd7HLtKbny0U4+LXDh9xRpajFRLODcKcEzMUYyGJN8ueKoHUh59oS3/oPD2y/tqjQTkKRegF/0t9OHKN6o1sP1mhEKy7vwKta7zAUNYBd7Nhp+3mKgLiD8V2QoMut+V9q+x+rygRC4cRDdD5FvTi2i6bKgGRSX5rEcYErSF0I7t9o/M64OV0r7vAjNMeHqKWlQHfOl7JG+I4hqozMq7V5MGtoMie49ggU9LDbSSbuX4w786bpkJyDJN4kGqgGPU2fRepeS+a3mVP9P5rdMRNLBFbG/oweAvFUYmU8Mg2iy9rjGmrDu6SpHYDb23wlUwkp4ZJuBt6+vBsBBAsHT/Me9V/nuKtT8VAZcP Content-Type: text/plain; charset="utf-8" Content-ID: <718E0BA3CCF1424BB14B9B2E4FE227C3@namprd15.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: b5baad2c-e642-4095-1810-08d782c57b66 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2019 07:48:18.9709 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: v+yuLi18XOPWul6GfH0WLZa1iAJcAP/+nPaWnbGQnjQBPzpM/NgzdP9y7h6/I9aI X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR15MB1881 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-12-17_01:2019-12-16,2019-12-16 signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 mlxscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 impostorscore=0 clxscore=1015 adultscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1910280000 definitions=main-1912170067 X-FB-Internal: deliver Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DQoNCk9uIDEyLzEzLzE5IDQ6NDcgUE0sIE1hcnRpbiBLYUZhaSBMYXUgd3JvdGU6DQo+IFRoZSBw YXRjaCBpbnRyb2R1Y2VzIEJQRl9NQVBfVFlQRV9TVFJVQ1RfT1BTLiAgVGhlIG1hcCB2YWx1ZQ0K PiBpcyBhIGtlcm5lbCBzdHJ1Y3Qgd2l0aCBpdHMgZnVuYyBwdHIgaW1wbGVtZW50ZWQgaW4gYnBm IHByb2cuDQo+IFRoaXMgbmV3IG1hcCBpcyB0aGUgaW50ZXJmYWNlIHRvIHJlZ2lzdGVyL3VucmVn aXN0ZXIvaW50cm9zcGVjdA0KPiBhIGJwZiBpbXBsZW1lbnRlZCBrZXJuZWwgc3RydWN0Lg0KPiAN Cj4gVGhlIGtlcm5lbCBzdHJ1Y3QgaXMgYWN0dWFsbHkgZW1iZWRkZWQgaW5zaWRlIGFub3RoZXIg bmV3IHN0cnVjdA0KPiAob3IgY2FsbGVkIHRoZSAidmFsdWUiIHN0cnVjdCBpbiB0aGUgY29kZSku ICBGb3IgZXhhbXBsZSwNCj4gInN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMiIGlzIGVtYmJlZGVk IGluOg0KPiBzdHJ1Y3QgX19icGZfdGNwX2Nvbmdlc3Rpb25fb3BzIHsNCj4gCXJlZmNvdW50X3Qg cmVmY250Ow0KPiAJZW51bSBicGZfc3RydWN0X29wc19zdGF0ZSBzdGF0ZTsNCj4gCXN0cnVjdCB0 Y3BfY29uZ2VzdGlvbl9vcHMgZGF0YTsgIC8qIDwtLSBrZXJuZWwgc3Vic3lzdGVtIHN0cnVjdCBo ZXJlICovDQo+IH0NCj4gVGhlIG1hcCB2YWx1ZSBpcyAic3RydWN0IF9fYnBmX3RjcF9jb25nZXN0 aW9uX29wcyIuICBUaGUgImJwZnRvb2wgbWFwIGR1bXAiDQo+IHdpbGwgdGhlbiBiZSBhYmxlIHRv IHNob3cgdGhlIHN0YXRlICgiaW51c2UiLyJ0b2JlZnJlZSIpIGFuZCB0aGUgbnVtYmVyIG9mDQo+ IHN1YnN5c3RlbSdzIHJlZmNudCAoZS5nLiBudW1iZXIgb2YgdGNwX3NvY2sgaW4gdGhlIHRjcF9j b25nZXN0aW9uX29wcyBjYXNlKS4NCj4gVGhpcyAidmFsdWUiIHN0cnVjdCBpcyBjcmVhdGVkIGF1 dG9tYXRpY2FsbHkgYnkgYSBtYWNyby4gIEhhdmluZyBhIHNlcGFyYXRlDQo+ICJ2YWx1ZSIgc3Ry dWN0IHdpbGwgYWxzbyBtYWtlIGV4dGVuZGluZyAic3RydWN0IF9fYnBmX1hZWiIgZWFzaWVyIChl LmcuIGFkZGluZw0KPiAidm9pZCAoKmluaXQpKHZvaWQpIiB0byAic3RydWN0IF9fYnBmX1hZWiIg dG8gZG8gc29tZSBpbml0aWFsaXphdGlvbg0KPiB3b3JrcyBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhl IHN0cnVjdF9vcHMgdG8gdGhlIGtlcm5lbCBzdWJzeXN0ZW0pLg0KPiBUaGUgbGliYnBmIHdpbGwg dGFrZSBjYXJlIG9mIGZpbmRpbmcgYW5kIHBvcHVsYXRpbmcgdGhlICJzdHJ1Y3QgX19icGZfWFla Ig0KPiBmcm9tICJzdHJ1Y3QgWFlaIi4NCj4gDQo+IFJlZ2lzdGVyIGEgc3RydWN0X29wcyB0byBh IGtlcm5lbCBzdWJzeXN0ZW06DQo+IDEuIExvYWQgYWxsIG5lZWRlZCBCUEZfUFJPR19UWVBFX1NU UlVDVF9PUFMgcHJvZyhzKQ0KPiAyLiBDcmVhdGUgYSBCUEZfTUFQX1RZUEVfU1RSVUNUX09QUyB3 aXRoIGF0dHItPmJ0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQNCj4gICAgIHNldCB0byB0aGUgYnRm IGlkICJzdHJ1Y3QgX19icGZfdGNwX2Nvbmdlc3Rpb25fb3BzIiBvZiB0aGUgcnVubmluZw0KPiAg ICAga2VybmVsLg0KPiAgICAgSW5zdGVhZCBvZiByZXVzaW5nIHRoZSBhdHRyLT5idGZfdmFsdWVf dHlwZV9pZCwgYnRmX3ZtbGludXhfdmFsdWVfdHlwZV9pZA0KPiAgICAgaXMgYWRkZWQgc3VjaCB0 aGF0IGF0dHItPmJ0Zl9mZCBjYW4gc3RpbGwgYmUgdXNlZCBhcyB0aGUgInVzZXIiIGJ0Zg0KPiAg ICAgd2hpY2ggY291bGQgc3RvcmUgb3RoZXIgdXNlZnVsIHN5c2FkbWluL2RlYnVnIGluZm8gdGhh dCBtYXkgYmUNCj4gICAgIGludHJvZHVjZWQgaW4gdGhlIGZ1cnR1cmUsDQo+ICAgICBlLmcuIGNy ZWF0aW9uLWRhdGUvY29tcGlsZXItZGV0YWlscy9tYXAtY3JlYXRvci4uLmV0Yy4NCj4gMy4gQ3Jl YXRlIGEgInN0cnVjdCBfX2JwZl90Y3BfY29uZ2VzdGlvbl9vcHMiIG9iamVjdCBhcyBkZXNjcmli ZWQgaW4NCj4gICAgIHRoZSBydW5uaW5nIGtlcm5lbCBidGYuICBQb3B1bGF0ZSB0aGUgdmFsdWUg b2YgdGhpcyBvYmplY3QuDQo+ICAgICBUaGUgZnVuY3Rpb24gcHRyIHNob3VsZCBiZSBwb3B1bGF0 ZWQgd2l0aCB0aGUgcHJvZyBmZHMuDQo+IDQuIENhbGwgQlBGX01BUF9VUERBVEUgd2l0aCB0aGUg b2JqZWN0IGNyZWF0ZWQgaW4gKDMpIGFzDQo+ICAgICB0aGUgbWFwIHZhbHVlLiAgVGhlIGtleSBp cyBhbHdheXMgIjAiLg0KDQpUaGlzIGlzIHJlYWxseSBhIHNwZWNpYWwgb25lIGVsZW1lbnQgbWFw LiBUaGUga2V5ICIwIiBzaG91bGQgd29yay4NCk5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIGdl bmVyYWxpemUgdGhpcyBhbmQgbWFwcyBmb3IgZ2xvYmFsIHZhcmlhYmxlcw0KdG8gYSBraW5kIG9m IGtleS1sZXNzIG1hcC4gSnVzdCBzb21lIHRob3VnaHQuDQoNCj4gDQo+IER1cmluZyBCUEZfTUFQ X1VQREFURSwgdGhlIGNvZGUgdGhhdCBzYXZlcyB0aGUga2VybmVsLWZ1bmMtcHRyJ3MNCj4gYXJn cyBhcyBhbiBhcnJheSBvZiB1NjQgaXMgZ2VuZXJhdGVkLiAgQlBGX01BUF9VUERBVEUgYWxzbyBh bGxvd3MNCj4gdGhlIHNwZWNpZmljIHN0cnVjdF9vcHMgdG8gZG8gc29tZSBmaW5hbCBjaGVja3Mg aW4gInN0X29wcy0+aW5pdF9tZW1iZXIoKSINCj4gKGUuZy4gZW5zdXJlIGFsbCBtYW5kYXRvcnkg ZnVuYyBwdHJzIGFyZSBpbXBsZW1lbnRlZCkuDQo+IElmIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZCwg aXQgd2lsbCByZWdpc3RlciB0aGlzIGtlcm5lbCBzdHJ1Y3QNCj4gdG8gdGhlIGtlcm5lbCBzdWJz eXN0ZW0uICBUaGUgbWFwIHdpbGwgbm90IGFsbG93IGZ1cnRoZXIgdXBkYXRlDQo+IGZyb20gdGhp cyBwb2ludC4NCj4gDQo+IFVucmVnaXN0ZXIgYSBzdHJ1Y3Rfb3BzIGZyb20gdGhlIGtlcm5lbCBz dWJzeXN0ZW06DQo+IEJQRl9NQVBfREVMRVRFIHdpdGgga2V5ICIwIi4NCj4gDQo+IEludHJvc3Bl Y3QgYSBzdHJ1Y3Rfb3BzOg0KPiBCUEZfTUFQX0xPT0tVUF9FTEVNIHdpdGgga2V5ICIwIi4gIFRo ZSBtYXAgdmFsdWUgcmV0dXJuZWQgd2lsbA0KPiBoYXZlIHRoZSBwcm9nIF9pZF8gcG9wdWxhdGVk IGFzIHRoZSBmdW5jIHB0ci4NCj4gDQo+IFRoZSBtYXAgdmFsdWUgc3RhdGUgKGVudW0gYnBmX3N0 cnVjdF9vcHNfc3RhdGUpIHdpbGwgdHJhbnNpdCBmcm9tOg0KPiBJTklUIChtYXAgY3JlYXRlZCkg PT4NCj4gSU5VU0UgKG1hcCB1cGRhdGVkLCBpLmUuIHJlZykgPT4NCj4gVE9CRUZSRUUgKG1hcCB2 YWx1ZSBkZWxldGVkLCBpLmUuIHVucmVnKQ0KPiANCj4gTm90ZSB0aGF0IHRoZSBhYm92ZSBzdGF0 ZSBpcyBub3QgZXhwb3NlZCB0byB0aGUgdWFwaS9icGYuaC4NCj4gSXQgd2lsbCBiZSBvYnRhaW5l ZCBmcm9tIHRoZSBidGYgb2YgdGhlIHJ1bm5pbmcga2VybmVsLg0KDQpJdCBpcyBub3QgcmVhbGx5 IGZyb20gYnRmLCByaWdodD8gSXQgaXMgZnJvbSBrZXJuZWwgaW50ZXJuYWwNCmRhdGEgc3RydWN0 dXJlIHdoaWNoIHdpbGwgYmUgY29waWVkIHRvIHVzZXIgc3BhY2UuDQoNClNpbmNlIHN1Y2ggaW5m b3JtYXRpb24gaXMgYXZhaWxhYmxlIHRvIGJwZnRvb2wgZHVtcCBhbmQgaXMgY29tbW9uDQp0byBh bGwgc3Rfb3BzIG1hcHMuIEkgYW0gd29uZGVyaW5nIHdoZXRoZXIgd2Ugc2hvdWxkIGV4cG9zZQ0K dGhpcyB0aHJvdWdoIHVhcGkuDQoNCj4gDQo+IFRoZSBrZXJuZWwgc3Vic3lzdGVtIG5lZWRzIHRv IGNhbGwgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgYW5kDQo+IGJwZl9zdHJ1Y3Rfb3BzX3B1dCgpIHRv IG1hbmFnZSB0aGUgInJlZmNudCIgaW4gdGhlICJzdHJ1Y3QgX19icGZfWFlaIi4NCj4gVGhpcyBw YXRjaCB1c2VzIGEgc2VwYXJhdGUgcmVmY250IGZvciB0aGUgcHVyb3NlIG9mIHRyYWNraW5nIHRo ZQ0KPiBzdWJzeXN0ZW0gdXNhZ2UuICBBbm90aGVyIGFwcHJvYWNoIGlzIHRvIHJldXNlIHRoZSBt YXAtPnJlZmNudA0KPiBhbmQgdGhlbiAic2hvdyIgKGkuZS4gZHVyaW5nIG1hcF9sb29rdXApIHRo ZSBzdWJzeXN0ZW0ncyB1c2FnZQ0KPiBieSBkb2luZyBtYXAtPnJlZmNudCAtIG1hcC0+dXNlcmNu dCB0byBmaWx0ZXIgb3V0IHRoZQ0KPiBtYXAtZmQvcGlubmVkLW1hcCB1c2FnZS4gIEhvd2V2ZXIs IHRoYXQgd2lsbCBhbHNvIHRpZSBkb3duIHRoZQ0KPiBmdXR1cmUgc2VtYW50aWNzIG9mIG1hcC0+ cmVmY250IGFuZCBtYXAtPnVzZXJjbnQuDQo+IA0KPiBUaGUgdmVyeSBmaXJzdCBzdWJzeXN0ZW0n cyByZWZjbnQgKGR1cmluZyByZWcoKSkgaG9sZHMgb25lDQo+IGNvdW50IHRvIG1hcC0+cmVmY250 LiAgV2hlbiB0aGUgdmVyeSBsYXN0IHN1YnN5c3RlbSdzIHJlZmNudA0KPiBpcyBnb25lLCBpdCB3 aWxsIGFsc28gcmVsZWFzZSB0aGUgbWFwLT5yZWZjbnQuICBBbGwgYnBmX3Byb2cgd2lsbCBiZQ0K PiBmcmVlZCB3aGVuIHRoZSBtYXAtPnJlZmNudCByZWFjaGVzIDAgKGkuZS4gZHVyaW5nIG1hcF9m cmVlKCkpLg0KPiANCj4gSGVyZSBpcyBob3cgdGhlIGJwZnRvb2wgbWFwIGNvbW1hbmQgd2lsbCBs b29rIGxpa2U6DQo+IFtyb290QGFyY2gtZmItdm0xIGJwZl0jIGJwZnRvb2wgbWFwIHNob3cNCj4g Njogc3RydWN0X29wcyAgbmFtZSBkY3RjcCAgZmxhZ3MgMHgwDQo+IAlrZXkgNEIgIHZhbHVlIDI1 NkIgIG1heF9lbnRyaWVzIDEgIG1lbWxvY2sgNDA5NkINCj4gCWJ0Zl9pZCA2DQo+IFtyb290QGFy Y2gtZmItdm0xIGJwZl0jIGJwZnRvb2wgbWFwIGR1bXAgaWQgNg0KPiBbew0KPiAgICAgICAgICAi dmFsdWUiOiB7DQo+ICAgICAgICAgICAgICAicmVmY250Ijogew0KPiAgICAgICAgICAgICAgICAg ICJyZWZzIjogew0KPiAgICAgICAgICAgICAgICAgICAgICAiY291bnRlciI6IDENCj4gICAgICAg ICAgICAgICAgICB9DQo+ICAgICAgICAgICAgICB9LA0KPiAgICAgICAgICAgICAgInN0YXRlIjog MSwNCj4gICAgICAgICAgICAgICJkYXRhIjogew0KPiAgICAgICAgICAgICAgICAgICJsaXN0Ijog ew0KPiAgICAgICAgICAgICAgICAgICAgICAibmV4dCI6IDAsDQo+ICAgICAgICAgICAgICAgICAg ICAgICJwcmV2IjogMA0KPiAgICAgICAgICAgICAgICAgIH0sDQo+ICAgICAgICAgICAgICAgICAg ImtleSI6IDAsDQo+ICAgICAgICAgICAgICAgICAgImZsYWdzIjogMiwNCj4gICAgICAgICAgICAg ICAgICAiaW5pdCI6IDI0LA0KPiAgICAgICAgICAgICAgICAgICJyZWxlYXNlIjogMCwNCj4gICAg ICAgICAgICAgICAgICAic3N0aHJlc2giOiAyNSwNCj4gICAgICAgICAgICAgICAgICAiY29uZ19h dm9pZCI6IDMwLA0KPiAgICAgICAgICAgICAgICAgICJzZXRfc3RhdGUiOiAyNywNCj4gICAgICAg ICAgICAgICAgICAiY3duZF9ldmVudCI6IDI4LA0KPiAgICAgICAgICAgICAgICAgICJpbl9hY2tf ZXZlbnQiOiAyNiwNCj4gICAgICAgICAgICAgICAgICAidW5kb19jd25kIjogMjksDQo+ICAgICAg ICAgICAgICAgICAgInBrdHNfYWNrZWQiOiAwLA0KPiAgICAgICAgICAgICAgICAgICJtaW5fdHNv X3NlZ3MiOiAwLA0KPiAgICAgICAgICAgICAgICAgICJzbmRidWZfZXhwYW5kIjogMCwNCj4gICAg ICAgICAgICAgICAgICAiY29uZ19jb250cm9sIjogMCwNCj4gICAgICAgICAgICAgICAgICAiZ2V0 X2luZm8iOiAwLA0KPiAgICAgICAgICAgICAgICAgICJuYW1lIjogWzk4LDExMiwxMDIsOTUsMTAw LDk5LDExNiw5OSwxMTIsMCwwLDAsMCwwLDAsMA0KDQpOb3QgcmVsYXRlZCB0byB0aGlzIHBhdGNo LiBJdCB3aWxsIGJlIGdvb2QgaWYgd2UgY2FuDQptYWtlICJuYW1lIiBwcmludGluZyBiZXR0ZXIu DQoNCj4gICAgICAgICAgICAgICAgICBdLA0KPiAgICAgICAgICAgICAgICAgICJvd25lciI6IDAN Cj4gICAgICAgICAgICAgIH0NCj4gICAgICAgICAgfQ0KPiAgICAgIH0NCj4gXQ0KPiANCj4gTWlz YyBOb3RlczoNCj4gKiBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKCkgaXMgYWRk ZWQgZm9yIHN5c2NhbGwgbG9va3VwLg0KPiAgICBJdCBkb2VzIGFuIGlucGxhY2UgdXBkYXRlIG9u ICIqdmFsdWUiIGluc3RlYWQgcmV0dXJuaW5nIGEgcG9pbnRlcg0KPiAgICB0byBzeXNjYWxsLmMu ICBPdGhlcndpc2UsIGl0IG5lZWRzIGEgc2VwYXJhdGUgY29weSBvZiAiemVybyIgdmFsdWUNCj4g ICAgZm9yIHRoZSBCUEZfU1RSVUNUX09QU19TVEFURV9JTklUIHRvIGF2b2lkIHJhY2VzLg0KPiAN Cj4gKiBUaGUgYnBmX3N0cnVjdF9vcHNfbWFwX2RlbGV0ZV9lbGVtKCkgaXMgYWxzbyBjYWxsZWQg d2l0aG91dA0KPiAgICBwcmVlbXB0X2Rpc2FibGUoKSBmcm9tIG1hcF9kZWxldGVfZWxlbSgpLiAg SXQgaXMgYmVjYXVzZQ0KPiAgICB0aGUgIi0+dW5yZWcoKSIgbWF5IHJlcXVpcmVzIHNsZWVwYWJs ZSBjb250ZXh0LCBlLmcuDQo+ICAgIHRoZSAidGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250 cm9sKCkiLg0KDQpUaGlzIHByb2JhYmx5IGZpbmUsIHdlIGRvIG5vdCBwZXIgY3B1IGRhdGEgc3Ry dWN0dXJlIGhlcmUgYW5kIGxvb2t1cA0Kd2lsbCBmYWlsIGFmdGVyIGluaXQgc3RhZ2UuIFNvbWUg Y29tbWVudHMgaW4gdGhlIGNvZGUgd2lsbCBiZSBnb29kLg0KDQo+IA0KPiAqICJjb25zdCIgaXMg YWRkZWQgdG8gc29tZSBvZiB0aGUgZXhpc3RpbmcgInN0cnVjdCBidGZfZnVuY19tb2RlbCAqIg0K PiAgICBmdW5jdGlvbiBhcmcgdG8gYXZvaWQgYSBjb21waWxlciB3YXJuaW5nIGNhdXNlZCBieSB0 aGlzIHBhdGNoLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogTWFydGluIEthRmFpIExhdSA8a2FmYWlA ZmIuY29tPg0KPiAtLS0NCj4gICBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgfCAgMTAgKy0N Cj4gICBpbmNsdWRlL2xpbnV4L2JwZi5oICAgICAgICAgfCAgNDkgKysrLQ0KPiAgIGluY2x1ZGUv bGludXgvYnBmX3R5cGVzLmggICB8ICAgMyArDQo+ICAgaW5jbHVkZS9saW51eC9idGYuaCAgICAg ICAgIHwgIDExICsNCj4gICBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmggICAgfCAgIDcgKy0NCj4g ICBrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgfCA0NjUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystDQo+ICAga2VybmVsL2JwZi9idGYuYyAgICAgICAgICAgIHwgIDIwICst DQo+ICAga2VybmVsL2JwZi9tYXBfaW5fbWFwLmMgICAgIHwgICAzICstDQo+ICAga2VybmVsL2Jw Zi9zeXNjYWxsLmMgICAgICAgIHwgIDQ3ICsrLS0NCj4gICBrZXJuZWwvYnBmL3RyYW1wb2xpbmUu YyAgICAgfCAgIDUgKy0NCj4gICBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgICAgICAgfCAgIDUgKw0K PiAgIDExIGZpbGVzIGNoYW5nZWQsIDU4NSBpbnNlcnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkN Cj4gDQpbLi4uXQ0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCBiL2lu Y2x1ZGUvbGludXgvYnBmX3R5cGVzLmgNCj4gaW5kZXggZmFkZDI0M2ZmYTJkLi45ZjMyNmU2ZWY4 ODUgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgNCj4gKysrIGIvaW5j bHVkZS9saW51eC9icGZfdHlwZXMuaA0KPiBAQCAtMTA5LDMgKzEwOSw2IEBAIEJQRl9NQVBfVFlQ RShCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWSwgcmV1c2Vwb3J0X2FycmF5X29wcykN Cj4gICAjZW5kaWYNCj4gICBCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1FVRVVFLCBxdWV1ZV9t YXBfb3BzKQ0KPiAgIEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0ssIHN0YWNrX21hcF9v cHMpDQo+ICsjaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVCkNCj4gK0JQRl9NQVBfVFlQRShCUEZf TUFQX1RZUEVfU1RSVUNUX09QUywgYnBmX3N0cnVjdF9vcHNfbWFwX29wcykNCj4gKyNlbmRpZg0K PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idGYuaCBiL2luY2x1ZGUvbGludXgvYnRmLmgN Cj4gaW5kZXggZjc0YTA5YTcxMjBiLi40OTA5NDU2NGYxZjEgMTAwNjQ0DQo+IC0tLSBhL2luY2x1 ZGUvbGludXgvYnRmLmgNCj4gKysrIGIvaW5jbHVkZS9saW51eC9idGYuaA0KPiBAQCAtNjAsNiAr NjAsMTAgQEAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpidGZfdHlwZV9yZXNvbHZlX3B0cihjb25z dCBzdHJ1Y3QgYnRmICpidGYsDQo+ICAgCQkJCQkgICAgdTMyIGlkLCB1MzIgKnJlc19pZCk7DQo+ ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpidGZfdHlwZV9yZXNvbHZlX2Z1bmNfcHRyKGNvbnN0 IHN0cnVjdCBidGYgKmJ0ZiwNCj4gICAJCQkJCQkgdTMyIGlkLCB1MzIgKnJlc19pZCk7DQo+ICtj b25zdCBzdHJ1Y3QgYnRmX3R5cGUgKg0KPiArYnRmX3Jlc29sdmVfc2l6ZShjb25zdCBzdHJ1Y3Qg YnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwNCj4gKwkJIHUzMiAqdHlwZV9z aXplLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKiplbGVtX3R5cGUsDQo+ICsJCSB1MzIgKnRvdGFs X25lbGVtcyk7DQo+ICAgDQo+ICAgI2RlZmluZSBmb3JfZWFjaF9tZW1iZXIoaSwgc3RydWN0X3R5 cGUsIG1lbWJlcikJCQlcDQo+ICAgCWZvciAoaSA9IDAsIG1lbWJlciA9IGJ0Zl90eXBlX21lbWJl cihzdHJ1Y3RfdHlwZSk7CVwNCj4gQEAgLTEwNiw2ICsxMTAsMTMgQEAgc3RhdGljIGlubGluZSBi b29sIGJ0Zl90eXBlX2tmbGFnKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkNCj4gICAJcmV0dXJu IEJURl9JTkZPX0tGTEFHKHQtPmluZm8pOw0KPiAgIH0NCj4gICANCj4gK3N0YXRpYyBpbmxpbmUg dTMyIGJ0Zl9tZW1iZXJfYml0X29mZnNldChjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN0cnVjdF90 eXBlLA0KPiArCQkJCQljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyKQ0KPiArew0KPiAr CXJldHVybiBidGZfdHlwZV9rZmxhZyhzdHJ1Y3RfdHlwZSkgPyBCVEZfTUVNQkVSX0JJVF9PRkZT RVQobWVtYmVyLT5vZmZzZXQpDQo+ICsJCQkJCSAgIDogbWVtYmVyLT5vZmZzZXQ7DQo+ICt9DQo+ ICsNCj4gICBzdGF0aWMgaW5saW5lIHUzMiBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoY29uc3Qg c3RydWN0IGJ0Zl90eXBlICpzdHJ1Y3RfdHlwZSwNCj4gICAJCQkJCSAgIGNvbnN0IHN0cnVjdCBi dGZfbWVtYmVyICptZW1iZXIpDQo+ICAgew0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xp bnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oDQo+IGluZGV4IDEyOTAwZGZhMTQ2 MS4uODgwOTIxMmQ5ZDZjIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgN Cj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oDQo+IEBAIC0xMzYsNiArMTM2LDcgQEAg ZW51bSBicGZfbWFwX3R5cGUgew0KPiAgIAlCUEZfTUFQX1RZUEVfU1RBQ0ssDQo+ICAgCUJQRl9N QVBfVFlQRV9TS19TVE9SQUdFLA0KPiAgIAlCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsDQo+ICsJ QlBGX01BUF9UWVBFX1NUUlVDVF9PUFMsDQo+ICAgfTsNCj4gICANCj4gICAvKiBOb3RlIHRoYXQg dHJhY2luZyByZWxhdGVkIHByb2dyYW1zIHN1Y2ggYXMNCj4gQEAgLTM5Miw2ICszOTMsMTAgQEAg dW5pb24gYnBmX2F0dHIgew0KPiAgIAkJX191MzIJYnRmX2ZkOwkJLyogZmQgcG9pbnRpbmcgdG8g YSBCVEYgdHlwZSBkYXRhICovDQo+ICAgCQlfX3UzMglidGZfa2V5X3R5cGVfaWQ7CS8qIEJURiB0 eXBlX2lkIG9mIHRoZSBrZXkgKi8NCj4gICAJCV9fdTMyCWJ0Zl92YWx1ZV90eXBlX2lkOwkvKiBC VEYgdHlwZV9pZCBvZiB0aGUgdmFsdWUgKi8NCj4gKwkJX191MzIJYnRmX3ZtbGludXhfdmFsdWVf dHlwZV9pZDsvKiBCVEYgdHlwZV9pZCBvZiBhIGtlcm5lbC0NCj4gKwkJCQkJCSAgICogc3RydWN0 IHN0b3JlZCBhcyB0aGUNCj4gKwkJCQkJCSAgICogbWFwIHZhbHVlDQo+ICsJCQkJCQkgICAqLw0K PiAgIAl9Ow0KPiAgIA0KPiAgIAlzdHJ1Y3QgeyAvKiBhbm9ueW1vdXMgc3RydWN0IHVzZWQgYnkg QlBGX01BUF8qX0VMRU0gY29tbWFuZHMgKi8NCj4gQEAgLTMzNDAsNyArMzM0NSw3IEBAIHN0cnVj dCBicGZfbWFwX2luZm8gew0KPiAgIAlfX3UzMiBtYXBfZmxhZ3M7DQo+ICAgCWNoYXIgIG5hbWVb QlBGX09CSl9OQU1FX0xFTl07DQo+ICAgCV9fdTMyIGlmaW5kZXg7DQo+IC0JX191MzIgOjMyOw0K PiArCV9fdTMyIGJ0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQ7DQo+ICAgCV9fdTY0IG5ldG5zX2Rl djsNCj4gICAJX191NjQgbmV0bnNfaW5vOw0KPiAgIAlfX3UzMiBidGZfaWQ7DQo+IGRpZmYgLS1n aXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rf b3BzLmMNCj4gaW5kZXggODE3ZDVhYWM0MmU1Li4wMGY0OWFjMTM0MmQgMTAwNjQ0DQo+IC0tLSBh L2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYw0KPiArKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1 Y3Rfb3BzLmMNCj4gQEAgLTEyLDggKzEyLDY4IEBADQo+ICAgI2luY2x1ZGUgPGxpbnV4L3NlcV9m aWxlLmg+DQo+ICAgI2luY2x1ZGUgPGxpbnV4L3JlZmNvdW50Lmg+DQo+ICAgDQo+ICtlbnVtIGJw Zl9zdHJ1Y3Rfb3BzX3N0YXRlIHsNCj4gKwlCUEZfU1RSVUNUX09QU19TVEFURV9JTklULA0KPiAr CUJQRl9TVFJVQ1RfT1BTX1NUQVRFX0lOVVNFLA0KPiArCUJQRl9TVFJVQ1RfT1BTX1NUQVRFX1RP QkVGUkVFLA0KPiArfTsNCj4gKw0KPiArI2RlZmluZSBCUEZfU1RSVUNUX09QU19DT01NT05fVkFM VUUJCQlcDQo+ICsJcmVmY291bnRfdCByZWZjbnQ7CQkJCVwNCj4gKwllbnVtIGJwZl9zdHJ1Y3Rf b3BzX3N0YXRlIHN0YXRlDQo+ICsNCj4gK3N0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSB7DQo+ ICsJQlBGX1NUUlVDVF9PUFNfQ09NTU9OX1ZBTFVFOw0KPiArCWNoYXIgZGF0YVswXSBfX19fY2Fj aGVsaW5lX2FsaWduZWRfaW5fc21wOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGJwZl9zdHJ1Y3Rf b3BzX21hcCB7DQo+ICsJc3RydWN0IGJwZl9tYXAgbWFwOw0KPiArCWNvbnN0IHN0cnVjdCBicGZf c3RydWN0X29wcyAqc3Rfb3BzOw0KPiArCS8qIHByb3RlY3QgbWFwX3VwZGF0ZSAqLw0KPiArCXNw aW5sb2NrX3QgbG9jazsNCj4gKwkvKiBwcm9ncyBoYXMgYWxsIHRoZSBicGZfcHJvZyB0aGF0IGlz IHBvcHVsYXRlZA0KPiArCSAqIHRvIHRoZSBmdW5jIHB0ciBvZiB0aGUga2VybmVsJ3Mgc3RydWN0 DQo+ICsJICogKGluIGt2YWx1ZS5kYXRhKS4NCj4gKwkgKi8NCj4gKwlzdHJ1Y3QgYnBmX3Byb2cg Kipwcm9nczsNCj4gKwkvKiBpbWFnZSBpcyBhIHBhZ2UgdGhhdCBoYXMgYWxsIHRoZSB0cmFtcG9s aW5lcw0KPiArCSAqIHRoYXQgc3RvcmVzIHRoZSBmdW5jIGFyZ3MgYmVmb3JlIGNhbGxpbmcgdGhl IGJwZl9wcm9nLg0KPiArCSAqIEEgUEFHRV9TSVpFICJpbWFnZSIgaXMgZW5vdWdoIHRvIHN0b3Jl IGFsbCB0cmFtcG9saW5lIGZvcg0KPiArCSAqICJwcm9nc1tdIi4NCj4gKwkgKi8NCj4gKwl2b2lk ICppbWFnZTsNCj4gKwkvKiB1dmFsdWUtPmRhdGEgc3RvcmVzIHRoZSBrZXJuZWwgc3RydWN0DQo+ ICsJICogKGUuZy4gdGNwX2Nvbmdlc3Rpb25fb3BzKSB0aGF0IGlzIG1vcmUgdXNlZnVsDQo+ICsJ ICogdG8gdXNlcnNwYWNlIHRoYW4gdGhlIGt2YWx1ZS4gIEZvciBleGFtcGxlLA0KPiArCSAqIHRo ZSBicGZfcHJvZydzIGlkIGlzIHN0b3JlZCBpbnN0ZWFkIG9mIHRoZSBrZXJuZWwNCj4gKwkgKiBh ZGRyZXNzIG9mIGEgZnVuYyBwdHIuDQo+ICsJICovDQo+ICsJc3RydWN0IGJwZl9zdHJ1Y3Rfb3Bz X3ZhbHVlICp1dmFsdWU7DQo+ICsJLyoga3ZhbHVlLmRhdGEgc3RvcmVzIHRoZSBhY3R1YWwga2Vy bmVsJ3Mgc3RydWN0DQo+ICsJICogKGUuZy4gdGNwX2Nvbmdlc3Rpb25fb3BzKSB0aGF0IHdpbGwg YmUNCj4gKwkgKiByZWdpc3RlcmVkIHRvIHRoZSBrZXJuZWwgc3Vic3lzdGVtLg0KPiArCSAqLw0K PiArCXN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSBrdmFsdWU7DQo+ICt9Ow0KPiArDQo+ICsj ZGVmaW5lIFZBTFVFX1BSRUZJWCAiX19icGZfIg0KPiArI2RlZmluZSBWQUxVRV9QUkVGSVhfTEVO IChzaXplb2YoVkFMVUVfUFJFRklYKSAtIDEpDQo+ICsNCj4gKy8qIF9fYnBmXyMjX25hbWUgKGUu Zy4gX19icGZfdGNwX2Nvbmdlc3Rpb25fb3BzKSBpcyB0aGUgbWFwJ3MgdmFsdWUNCj4gKyAqIGV4 cG9zZWQgdG8gdGhlIHVzZXJzcGFjZSBhbmQgaXRzIGJ0Zi10eXBlLWlkIGlzIHN0b3JlZA0KPiAr ICogYXQgdGhlIG1hcC0+YnRmX3ZtbGludXhfdmFsdWVfdHlwZV9pZC4NCj4gKyAqDQo+ICsgKiBU aGUgKl9uYW1lIyNfZHVtbXkgaXMgdG8gZW5zdXJlIHRoZSBCVEYgdHlwZSBpcyBlbWl0dGVkLg0K PiArICovDQo+ICsNCj4gICAjZGVmaW5lIEJQRl9TVFJVQ1RfT1BTX1RZUEUoX25hbWUpCQkJCVwN Cj4gLWV4dGVybiBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmXyMjX25hbWU7DQo+ICtleHRlcm4g c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl8jI19uYW1lOwkJCVwNCj4gKwkJCQkJCQkJXA0KPiAr c3RhdGljIHN0cnVjdCBfX2JwZl8jI19uYW1lIHsJCQkJCVwNCj4gKwlCUEZfU1RSVUNUX09QU19D T01NT05fVkFMVUU7CQkJCVwNCj4gKwlzdHJ1Y3QgX25hbWUgZGF0YSBfX19fY2FjaGVsaW5lX2Fs aWduZWRfaW5fc21wOwkJXA0KPiArfSAqX25hbWUjI19kdW1teTsNCg0KVGhlcmUgYXJlIG90aGVy IHdheXMgdG8gcmV0YWluIHR5cGVzIGluIGRlYnVnIGluZm8gd2l0aG91dA0KY3JlYXRpbmcgbmV3 IHZhcmlhYmxlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IGluIGEgY2FzdA0KbGlrZQ0K ICAgICAodm9pZCAqKShzdHJ1Y3QgX19icGZfIyNfbmFtZSAqKXYNCk5vdCBzdXJlIHdoZXRoZXIg d2UgY291bGQgZWFzaWx5IGZpbmQgYSBwbGFjZSBmb3Igc3VjaCBjYXN0aW5nIG9yIG5vdC4NCg0K PiAgICNpbmNsdWRlICJicGZfc3RydWN0X29wc190eXBlcy5oIg0KPiAgICN1bmRlZiBCUEZfU1RS VUNUX09QU19UWVBFDQo+ICAgDQo+IEBAIC0zNywxOSArOTcsNDYgQEAgY29uc3Qgc3RydWN0IGJw Zl92ZXJpZmllcl9vcHMgYnBmX3N0cnVjdF9vcHNfdmVyaWZpZXJfb3BzID0gew0KPiAgIGNvbnN0 IHN0cnVjdCBicGZfcHJvZ19vcHMgYnBmX3N0cnVjdF9vcHNfcHJvZ19vcHMgPSB7DQo+ICAgfTsN Cj4gICANCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1vZHVsZV90eXBlOw0KPiAr DQo+ICAgdm9pZCBicGZfc3RydWN0X29wc19pbml0KHN0cnVjdCBidGYgKl9idGZfdm1saW51eCkN Cj4gICB7DQo+ICsJY2hhciB2YWx1ZV9uYW1lWzEyOF0gPSBWQUxVRV9QUkVGSVg7DQo+ICsJczMy IHR5cGVfaWQsIHZhbHVlX2lkLCBtb2R1bGVfaWQ7DQo+ICAgCWNvbnN0IHN0cnVjdCBidGZfbWVt YmVyICptZW1iZXI7DQo+ICAgCXN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzOw0KPiAgIAlz dHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyBsb2cgPSB7fTsNCj4gICAJY29uc3Qgc3RydWN0IGJ0Zl90 eXBlICp0Ow0KPiAgIAljb25zdCBjaGFyICptbmFtZTsNCj4gLQlzMzIgdHlwZV9pZDsNCj4gICAJ dTMyIGksIGo7DQo+ICAgDQo+ICsJLyogQXZvaWQgdW51c2VkIHZhciBjb21waWxlciB3YXJuaW5n ICovDQo+ICsjZGVmaW5lIEJQRl9TVFJVQ1RfT1BTX1RZUEUoX25hbWUpICh2b2lkKShfbmFtZSMj X2R1bW15KTsNCj4gKyNpbmNsdWRlICJicGZfc3RydWN0X29wc190eXBlcy5oIg0KPiArI3VuZGVm IEJQRl9TVFJVQ1RfT1BTX1RZUEUNCj4gKw0KPiArCW1vZHVsZV9pZCA9IGJ0Zl9maW5kX2J5X25h bWVfa2luZChfYnRmX3ZtbGludXgsICJtb2R1bGUiLA0KPiArCQkJCQkgIEJURl9LSU5EX1NUUlVD VCk7DQo+ICsJaWYgKG1vZHVsZV9pZCA8IDApIHsNCj4gKwkJcHJfd2FybigiQ2Fubm90IGZpbmQg c3RydWN0IG1vZHVsZSBpbiBidGZfdm1saW51eFxuIik7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ ICsJbW9kdWxlX3R5cGUgPSBidGZfdHlwZV9ieV9pZChfYnRmX3ZtbGludXgsIG1vZHVsZV9pZCk7 DQo+ICsNCj4gICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnBmX3N0cnVjdF9vcHMpOyBp KyspIHsNCj4gICAJCXN0X29wcyA9IGJwZl9zdHJ1Y3Rfb3BzW2ldOw0KPiAgIA0KPiArCQl2YWx1 ZV9uYW1lW1ZBTFVFX1BSRUZJWF9MRU5dID0gJ1wwJzsNCj4gKwkJc3RybmNhdCh2YWx1ZV9uYW1l ICsgVkFMVUVfUFJFRklYX0xFTiwgc3Rfb3BzLT5uYW1lLA0KPiArCQkJc2l6ZW9mKHZhbHVlX25h bWUpIC0gVkFMVUVfUFJFRklYX0xFTiAtIDEpOw0KDQpEbyB3ZSBoYXZlIHJlc3RyaWN0aW9ucyBv biB0aGUgbGVuZ3RoIG9mIHN0X29wcy0+bmFtZT8NCldlIHByb2JhYmx5IGRvIG5vdCB3YW50IHRy dW5jYXRpb24sIHJpZ2h0Pw0KDQo+ICsJCXZhbHVlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5k KF9idGZfdm1saW51eCwgdmFsdWVfbmFtZSwNCj4gKwkJCQkJCSBCVEZfS0lORF9TVFJVQ1QpOw0K PiArCQlpZiAodmFsdWVfaWQgPCAwKSB7DQo+ICsJCQlwcl93YXJuKCJDYW5ub3QgZmluZCBzdHJ1 Y3QgJXMgaW4gYnRmX3ZtbGludXhcbiIsDQo+ICsJCQkJdmFsdWVfbmFtZSk7DQo+ICsJCQljb250 aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICAgCQl0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5k KF9idGZfdm1saW51eCwgc3Rfb3BzLT5uYW1lLA0KPiAgIAkJCQkJCUJURl9LSU5EX1NUUlVDVCk7 DQo+ICAgCQlpZiAodHlwZV9pZCA8IDApIHsNCj4gQEAgLTEwMSw2ICsxODgsOSBAQCB2b2lkIGJw Zl9zdHJ1Y3Rfb3BzX2luaXQoc3RydWN0IGJ0ZiAqX2J0Zl92bWxpbnV4KQ0KPiAgIAkJCX0gZWxz ZSB7DQo+ICAgCQkJCXN0X29wcy0+dHlwZV9pZCA9IHR5cGVfaWQ7DQo+ICAgCQkJCXN0X29wcy0+ dHlwZSA9IHQ7DQo+ICsJCQkJc3Rfb3BzLT52YWx1ZV9pZCA9IHZhbHVlX2lkOw0KPiArCQkJCXN0 X29wcy0+dmFsdWVfdHlwZSA9DQo+ICsJCQkJCWJ0Zl90eXBlX2J5X2lkKF9idGZfdm1saW51eCwg dmFsdWVfaWQpOw0KPiAgIAkJCX0NCj4gICAJCX0NCj4gICAJfQ0KPiBAQCAtMTA4LDYgKzE5OCwy MiBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2luaXQoc3RydWN0IGJ0ZiAqX2J0Zl92bWxpbnV4KQ0K PiAgIA0KPiAgIGV4dGVybiBzdHJ1Y3QgYnRmICpidGZfdm1saW51eDsNCj4gICANCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKg0KPiArYnBmX3N0cnVjdF9vcHNfZmluZF92 YWx1ZSh1MzIgdmFsdWVfaWQpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsNCj4gKwlp ZiAoIXZhbHVlX2lkIHx8ICFidGZfdm1saW51eCkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShicGZfc3RydWN0X29wcyk7IGkrKykgew0KPiAr CQlpZiAoYnBmX3N0cnVjdF9vcHNbaV0tPnZhbHVlX2lkID09IHZhbHVlX2lkKQ0KPiArCQkJcmV0 dXJuIGJwZl9zdHJ1Y3Rfb3BzW2ldOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBOVUxMOw0KPiAr fQ0KPiArDQo+ICAgY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpicGZfc3RydWN0X29wc19m aW5kKHUzMiB0eXBlX2lkKQ0KPiAgIHsNCj4gICAJdW5zaWduZWQgaW50IGk7DQo+IEBAIC0xMjIs MyArMjI4LDM1OCBAQCBjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKmJwZl9zdHJ1Y3Rfb3Bz X2ZpbmQodTMyIHR5cGVfaWQpDQo+ICAgDQo+ICAgCXJldHVybiBOVUxMOw0KPiAgIH0NCj4gKw0K PiArc3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZf bWFwICptYXAsIHZvaWQgKmtleSwNCj4gKwkJCQkJICAgdm9pZCAqbmV4dF9rZXkpDQo+ICt7DQo+ ICsJdTMyIGluZGV4ID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYOw0KPiArCXUzMiAqbmV4 dCA9ICh1MzIgKiluZXh0X2tleTsNCj4gKw0KPiArCWlmIChpbmRleCA+PSBtYXAtPm1heF9lbnRy aWVzKSB7DQo+ICsJCSpuZXh0ID0gMDsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KDQpXZSBrbm93 IHRoZSB0aGUgbWF4X2VudHJpZXMgbXVzdCBiZSAxLiBNYXliZSB3ZSBjYW4gc2ltcGxpZnkgdGhl IGNvZGUNCmFjY29yZGluZ2x5Lg0KDQo+ICsNCj4gKwlpZiAoaW5kZXggPT0gbWFwLT5tYXhfZW50 cmllcyAtIDEpDQo+ICsJCXJldHVybiAtRU5PRU5UOw0KPiArDQo+ICsJKm5leHQgPSBpbmRleCAr IDE7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCBicGZfc3RydWN0X29wc19tYXBf c3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwNCj4gKwkJCQkg ICAgICAgdm9pZCAqdmFsdWUpDQo+ICt7DQo+ICsJc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAq c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7DQo+ICsJc3RydWN0IGJw Zl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWUsICprdmFsdWU7DQo+ICsJZW51bSBicGZfc3RydWN0 X29wc19zdGF0ZSBzdGF0ZTsNCj4gKw0KPiArCWlmICh1bmxpa2VseSgqKHUzMiAqKWtleSAhPSAw KSkNCj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ICsNCj4gKwlrdmFsdWUgPSAmc3RfbWFwLT5rdmFs dWU7DQo+ICsJc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKCZrdmFsdWUtPnN0YXRlKTsNCg0KU29t ZSBvbmUtbGluZSBjb21tZW50IGhlcmU/IEFsc28gZm9yIGJlbG93IHNtcF9zdG9yZV9yZWxlYXNl KCk/DQpBIHNpbXBsZSBjb21tZW50IGZvciBpbXBvcnRhbnQgc3luY2hyb25pemF0aW9uL2JhcnJp ZXIgcG9pbnQgd2lsbCBoZWxwDQpjb2RlIHJldmlldyBhIGxvdC4NCg0KPiArCWlmIChzdGF0ZSA9 PSBCUEZfU1RSVUNUX09QU19TVEFURV9JTklUKSB7DQo+ICsJCW1lbXNldCh2YWx1ZSwgMCwgbWFw LT52YWx1ZV9zaXplKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJLyogTm8gbG9j ayBpcyBuZWVkZWQuICBzdGF0ZSBhbmQgcmVmY250IGRvIG5vdCBuZWVkDQo+ICsJICogdG8gYmUg dXBkYXRlZCB0b2dldGhlciB1bmRlciBhdG9taWMgY29udGV4dC4NCj4gKwkgKi8NCj4gKwl1dmFs dWUgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICopdmFsdWU7DQo+ICsJbWVtY3B5KHV2 YWx1ZSwgc3RfbWFwLT51dmFsdWUsIG1hcC0+dmFsdWVfc2l6ZSk7DQo+ICsJdXZhbHVlLT5zdGF0 ZSA9IHN0YXRlOw0KPiArCXJlZmNvdW50X3NldCgmdXZhbHVlLT5yZWZjbnQsIHJlZmNvdW50X3Jl YWQoJmt2YWx1ZS0+cmVmY250KSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21h cCAqbWFwLCB2b2lkICprZXkpDQo+ICt7DQo+ICsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9wdXRfcHJvZ3Moc3Ry dWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwKQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBi dGZfdHlwZSAqdCA9IHN0X21hcC0+c3Rfb3BzLT50eXBlOw0KPiArCXUzMiBpOw0KPiArDQo+ICsJ Zm9yIChpID0gMDsgaSA8IGJ0Zl90eXBlX3ZsZW4odCk7IGkrKykgew0KPiArCQlpZiAoc3RfbWFw LT5wcm9nc1tpXSkgew0KPiArCQkJYnBmX3Byb2dfcHV0KHN0X21hcC0+cHJvZ3NbaV0pOw0KPiAr CQkJc3RfbWFwLT5wcm9nc1tpXSA9IE5VTEw7DQo+ICsJCX0NCj4gKwl9DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFw ICptYXAsIHZvaWQgKmtleSwNCj4gKwkJCQkJICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKQ0KPiAr ew0KPiArCXN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0 cnVjdF9vcHNfbWFwICopbWFwOw0KPiArCWNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rf b3BzID0gc3RfbWFwLT5zdF9vcHM7DQo+ICsJc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1 dmFsdWUsICprdmFsdWU7DQo+ICsJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjsNCj4g Kwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQgPSBzdF9vcHMtPnR5cGU7DQo+ICsJdm9pZCAqdWRh dGEsICprZGF0YTsNCj4gKwlpbnQgcHJvZ19mZCwgZXJyID0gMDsNCj4gKwl2b2lkICppbWFnZTsN Cj4gKwl1MzIgaTsNCj4gKw0KPiArCWlmIChmbGFncykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsNCj4gKwlpZiAoKih1MzIgKilrZXkgIT0gMCkNCj4gKwkJcmV0dXJuIC1FMkJJRzsNCj4gKw0K PiArCXV2YWx1ZSA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKil2YWx1ZTsNCj4gKwlp ZiAodXZhbHVlLT5zdGF0ZSB8fCByZWZjb3VudF9yZWFkKCZ1dmFsdWUtPnJlZmNudCkpDQo+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJdXZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29w c192YWx1ZSAqKXN0X21hcC0+dXZhbHVlOw0KPiArCWt2YWx1ZSA9IChzdHJ1Y3QgYnBmX3N0cnVj dF9vcHNfdmFsdWUgKikmc3RfbWFwLT5rdmFsdWU7DQo+ICsNCj4gKwlzcGluX2xvY2soJnN0X21h cC0+bG9jayk7DQo+ICsNCj4gKwlpZiAoa3ZhbHVlLT5zdGF0ZSAhPSBCUEZfU1RSVUNUX09QU19T VEFURV9JTklUKSB7DQo+ICsJCWVyciA9IC1FQlVTWTsNCj4gKwkJZ290byB1bmxvY2s7DQo+ICsJ fQ0KPiArDQo+ICsJbWVtY3B5KHV2YWx1ZSwgdmFsdWUsIG1hcC0+dmFsdWVfc2l6ZSk7DQo+ICsN Cj4gKwl1ZGF0YSA9ICZ1dmFsdWUtPmRhdGE7DQo+ICsJa2RhdGEgPSAma3ZhbHVlLT5kYXRhOw0K PiArCWltYWdlID0gc3RfbWFwLT5pbWFnZTsNCj4gKw0KPiArCWZvcl9lYWNoX21lbWJlcihpLCB0 LCBtZW1iZXIpIHsNCj4gKwkJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptdHlwZSwgKnB0eXBlOw0K PiArCQlzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7DQo+ICsJCXUzMiBtb2ZmOw0KPiArDQo+ICsJCW1v ZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7DQo+ICsJCW10eXBlID0g YnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIG1lbWJlci0+dHlwZSk7DQo+ICsJCXB0eXBlID0g YnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmX3ZtbGludXgsIG1lbWJlci0+dHlwZSwgTlVMTCk7DQo+ ICsJCWlmIChwdHlwZSA9PSBtb2R1bGVfdHlwZSkgew0KPiArCQkJKih2b2lkICoqKShrZGF0YSAr IG1vZmYpID0gQlBGX01PRFVMRV9PV05FUjsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsN Cj4gKwkJZXJyID0gc3Rfb3BzLT5pbml0X21lbWJlcih0LCBtZW1iZXIsIGtkYXRhLCB1ZGF0YSk7 DQo+ICsJCWlmIChlcnIgPCAwKQ0KPiArCQkJZ290byByZXNldF91bmxvY2s7DQo+ICsNCj4gKwkJ LyogVGhlIC0+aW5pdF9tZW1iZXIoKSBoYXMgaGFuZGxlZCB0aGlzIG1lbWJlciAqLw0KPiArCQlp ZiAoZXJyID4gMCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCS8qIElmIHN0X29wcy0+aW5p dF9tZW1iZXIgZG9lcyBub3QgaGFuZGxlIGl0LA0KPiArCQkgKiB3ZSB3aWxsIG9ubHkgaGFuZGxl IGZ1bmMgcHRycyBhbmQgemVyby1lZCBtZW1iZXJzDQo+ICsJCSAqIGhlcmUuICBSZWplY3QgZXZl cnl0aGluZyBlbHNlLg0KPiArCQkgKi8NCj4gKw0KPiArCQkvKiBBbGwgbm9uIGZ1bmMgcHRyIG1l bWJlciBtdXN0IGJlIDAgKi8NCj4gKwkJaWYgKCFidGZfdHlwZV9yZXNvbHZlX2Z1bmNfcHRyKGJ0 Zl92bWxpbnV4LCBtZW1iZXItPnR5cGUsDQo+ICsJCQkJCSAgICAgICBOVUxMKSkgew0KPiArCQkJ dTMyIG1zaXplOw0KPiArDQo+ICsJCQltdHlwZSA9IGJ0Zl9yZXNvbHZlX3NpemUoYnRmX3ZtbGlu dXgsIG10eXBlLA0KPiArCQkJCQkJICZtc2l6ZSwgTlVMTCwgTlVMTCk7DQo+ICsJCQlpZiAoSVNf RVJSKG10eXBlKSkgew0KPiArCQkJCWVyciA9IFBUUl9FUlIobXR5cGUpOw0KPiArCQkJCWdvdG8g cmVzZXRfdW5sb2NrOw0KPiArCQkJfQ0KPiArDQo+ICsJCQlpZiAobWVtY2hyX2ludih1ZGF0YSAr IG1vZmYsIDAsIG1zaXplKSkgew0KPiArCQkJCWVyciA9IC1FSU5WQUw7DQo+ICsJCQkJZ290byBy ZXNldF91bmxvY2s7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsN Cj4gKwkJcHJvZ19mZCA9IChpbnQpKCoodW5zaWduZWQgbG9uZyAqKSh1ZGF0YSArIG1vZmYpKTsN Cj4gKwkJLyogU2ltaWxhciBjaGVjayBhcyB0aGUgYXR0ci0+YXR0YWNoX3Byb2dfZmQgKi8NCj4g KwkJaWYgKCFwcm9nX2ZkKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJcHJvZyA9IGJwZl9w cm9nX2dldChwcm9nX2ZkKTsNCj4gKwkJaWYgKElTX0VSUihwcm9nKSkgew0KPiArCQkJZXJyID0g UFRSX0VSUihwcm9nKTsNCj4gKwkJCWdvdG8gcmVzZXRfdW5sb2NrOw0KPiArCQl9DQo+ICsJCXN0 X21hcC0+cHJvZ3NbaV0gPSBwcm9nOw0KPiArDQo+ICsJCWlmIChwcm9nLT50eXBlICE9IEJQRl9Q Uk9HX1RZUEVfU1RSVUNUX09QUyB8fA0KPiArCQkgICAgcHJvZy0+YXV4LT5hdHRhY2hfYnRmX2lk ICE9IHN0X29wcy0+dHlwZV9pZCB8fA0KPiArCQkgICAgcHJvZy0+ZXhwZWN0ZWRfYXR0YWNoX3R5 cGUgIT0gaSkgew0KPiArCQkJZXJyID0gLUVJTlZBTDsNCj4gKwkJCWdvdG8gcmVzZXRfdW5sb2Nr Ow0KPiArCQl9DQo+ICsNCj4gKwkJZXJyID0gYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGlt YWdlLA0KPiArCQkJCQkJICAmc3Rfb3BzLT5mdW5jX21vZGVsc1tpXSwgMCwNCj4gKwkJCQkJCSAg JnByb2csIDEsIE5VTEwsIDAsIE5VTEwpOw0KPiArCQlpZiAoZXJyIDwgMCkNCj4gKwkJCWdvdG8g cmVzZXRfdW5sb2NrOw0KPiArDQo+ICsJCSoodm9pZCAqKikoa2RhdGEgKyBtb2ZmKSA9IGltYWdl Ow0KPiArCQlpbWFnZSArPSBlcnI7DQoNCkRvIHdlIHN0aWxsIHdhbnQgdG8gY2hlY2sgd2hldGhl ciBpbWFnZSBvdXQgb2YgcGFnZSBib3VuZGFyeSBvciBub3Q/DQoNCj4gKw0KPiArCQkvKiBwdXQg cHJvZ19pZCB0byB1ZGF0YSAqLw0KPiArCQkqKHVuc2lnbmVkIGxvbmcgKikodWRhdGEgKyBtb2Zm KSA9IHByb2ctPmF1eC0+aWQ7DQo+ICsJfQ0KPiArDQo+ICsJcmVmY291bnRfc2V0KCZrdmFsdWUt PnJlZmNudCwgMSk7DQo+ICsJYnBmX21hcF9pbmMobWFwKTsNCj4gKw0KPiArCWVyciA9IHN0X29w cy0+cmVnKGtkYXRhKTsNCj4gKwlpZiAoIWVycikgew0KPiArCQlzbXBfc3RvcmVfcmVsZWFzZSgm a3ZhbHVlLT5zdGF0ZSwgQlBGX1NUUlVDVF9PUFNfU1RBVEVfSU5VU0UpOw0KPiArCQlnb3RvIHVu bG9jazsNCj4gKwl9DQo+ICsNCj4gKwkvKiBFcnJvciBkdXJpbmcgc3Rfb3BzLT5yZWcoKSAqLw0K PiArCWJwZl9tYXBfcHV0KG1hcCk7DQo+ICsNCj4gK3Jlc2V0X3VubG9jazoNCj4gKwlicGZfc3Ry dWN0X29wc19tYXBfcHV0X3Byb2dzKHN0X21hcCk7DQo+ICsJbWVtc2V0KHV2YWx1ZSwgMCwgbWFw LT52YWx1ZV9zaXplKTsNCj4gKwltZW1zZXQoa3ZhbHVlLCAwLCBtYXAtPnZhbHVlX3NpemUpOw0K PiArDQo+ICt1bmxvY2s6DQo+ICsJc3Bpbl91bmxvY2soJnN0X21hcC0+bG9jayk7DQo+ICsJcmV0 dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfZGVs ZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQ0KPiArew0KPiArCWVudW0g YnBmX3N0cnVjdF9vcHNfc3RhdGUgcHJldl9zdGF0ZTsNCj4gKwlzdHJ1Y3QgYnBmX3N0cnVjdF9v cHNfbWFwICpzdF9tYXA7DQo+ICsNCj4gKwlzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3Bz X21hcCAqKW1hcDsNCj4gKwlwcmV2X3N0YXRlID0gY21weGNoZygmc3RfbWFwLT5rdmFsdWUuc3Rh dGUsDQo+ICsJCQkgICAgIEJQRl9TVFJVQ1RfT1BTX1NUQVRFX0lOVVNFLA0KPiArCQkJICAgICBC UEZfU1RSVUNUX09QU19TVEFURV9UT0JFRlJFRSk7DQo+ICsJaWYgKHByZXZfc3RhdGUgPT0gQlBG X1NUUlVDVF9PUFNfU1RBVEVfSU5VU0UpIHsNCj4gKwkJc3RfbWFwLT5zdF9vcHMtPnVucmVnKCZz dF9tYXAtPmt2YWx1ZS5kYXRhKTsNCj4gKwkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmc3Rf bWFwLT5rdmFsdWUucmVmY250KSkNCj4gKwkJCWJwZl9tYXBfcHV0KG1hcCk7DQo+ICsJfQ0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNClsuLi5dDQo=