Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp448720pxb; Fri, 29 Oct 2021 13:00:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxQwKQsEPT6JeF9TGvvoOWQF1aBq04A8aUmiVVLI0Hi6p6oR8cg9/TB0KnLBS2ObGz7J86O X-Received: by 2002:a17:906:70c5:: with SMTP id g5mr16540452ejk.63.1635537626378; Fri, 29 Oct 2021 13:00:26 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1635537626; cv=pass; d=google.com; s=arc-20160816; b=kgIc5+sGR21wg9SXF1fVzW7GfYdVtKinsVr7QP8pRy/YVatlYzuMjCLmqilukhe9qx 9qy/S4DljPTkenmMrEYun6nxa3YV8+GyLBjDB83/d+2xq+X9qBKxhlYccTUWTtQjZbcc PUMaf9Aap4IZb2cGNb9BLKWjHOwu6MUlUxMNT5yo1BFjW+D3+IPhO9PBxyGaNv0U8PP4 fZWaLIolRU5AxlWgAMvGIm5cQZr5QZioxQAYYgD7XftTgwvOM6rzvFpyTAisQp3FTpMv xaPmKTtorncmZMUTvZtogt0voTc2l9p12sS/7Rp42D8Rucpnd7q1CaRAYy13o9InW+jT X0NQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :msip_labels:content-language:accept-language:message-id:date :thread-index:thread-topic:subject:to:from:dkim-signature; bh=dTETwGHfC8Ru035kJkKFkEfQ7lGJhd0JG2UPiKLHlPc=; b=VcJqhmMGTgjX+wkN8PqAcxy9C0nIn0FSVvNoLD1m9nkwT/uwjkzaHiFyc2bBWZe+r8 /WtdtJZ7zEC2GY8JMLw4O1NeQhkcC+NkiCto4PWm6vkahO5F5GP0TU+mO1Qy6vJEeGmH SbRyjge5Xq7qY8GRKd4aUjygFPO64+K8wznevPNUs82YgXZ/HkHenccHI/p2WUfScHJB dTNXy/07DX546sUUrl9d5GrqpbNIXC1xYSYsPOp48tzdBCE/T0k0JEYn0jfkIHR7cM3l CiejCSTyR8j3OMUp9e8gMB9Cai6LMhcojGgFzZpIjiopIjzW02ZHR0DnDJdv4ovZAjQv pKyQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=Avakh2FE; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ck13si6750112edb.463.2021.10.29.12.59.51; Fri, 29 Oct 2021 13:00:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=Avakh2FE; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229474AbhJ2UCS (ORCPT + 99 others); Fri, 29 Oct 2021 16:02:18 -0400 Received: from mail-cusazon11021018.outbound.protection.outlook.com ([52.101.62.18]:43452 "EHLO na01-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S229458AbhJ2UCR (ORCPT ); Fri, 29 Oct 2021 16:02:17 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ey2k4xIc4Ja/rtf47kO37OpNDEEFBNs8R/LrJ4z1Bvg1ClJYb4O9iwJ/pm8yp4bwAbTQBPdpwJZmCbdh1srqVrmSeXo5o6U7m590UQ0qLoLdqXDcMSwQoasvMQUCDp1zbZGYqXZB3epakdD++di2SAmEuVhewcxphGJDj1ULB2j1JqxFwWgvwq9PgM0MBsb7PB+8TzcLV86pl2pBNHAvFcnS/acvFjpvZMNwlqrBngg3wq+8KgCSvCDIIwKhDiYwq2vQemILKpypwiWSRbYuqosJ8FRSV6L9B3C+JeHXkLvHokki8BAav0GS2fLcRb5AM0CWdNUIl7wdciTty7IwnA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dTETwGHfC8Ru035kJkKFkEfQ7lGJhd0JG2UPiKLHlPc=; b=CYAi4R1/26iCilBzPWcw+HGGXuq+I5lQ3l17tgBPTsHNR7I/S+THmT1iOyxyj2nbNHVMFgi1f4jwHBXx+oF8O4jonifnPlsfO2beFSTuP8lb3YDa7K5pzpKKdKXnLbK9WUJ4fz9LvRNlx0rJKJ46FzKiPoF62GDeYOACAt3pxxyrEGIM4KRDQS/mi4CY7ZY+Yp+hnyVAndckWxjn2pDgvM78S3qYeHbScV7vP0a36yXdhPslg2mMTdikV8WAYaQA6CM16tywKc0iWkrfhm/MUrvLY2aefvUae2G9B5pXWhHEHt6Jt4kBW75mjBIXHnJoy811QXZm2d1Q5MfsP18uig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dTETwGHfC8Ru035kJkKFkEfQ7lGJhd0JG2UPiKLHlPc=; b=Avakh2FEsEtiXGobxCFBCfz8f7sBbez8+p2glY5BOWH2dRt47n+5cUJb/C7GMWyboTO0W3kslZk8YU0bC6CUXCc5XQzOG+nOQjOoURBqwTX+nuT8uCMmLMUXsPYZU/p93pgkf/zSalNHT4KxNHPYSvgQJ4krrOowshVJKg0pn9I= Received: from BL0PR2101MB0932.namprd21.prod.outlook.com (2603:10b6:207:30::20) by BL0PR2101MB0929.namprd21.prod.outlook.com (2603:10b6:207:30::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.2; Fri, 29 Oct 2021 19:59:44 +0000 Received: from BL0PR2101MB0932.namprd21.prod.outlook.com ([fe80::9ced:e74b:abb2:de]) by BL0PR2101MB0932.namprd21.prod.outlook.com ([fe80::9ced:e74b:abb2:de%7]) with mapi id 15.20.4669.003; Fri, 29 Oct 2021 19:59:44 +0000 From: Dan Clash To: "linux-nfs@vger.kernel.org" Subject: NFSv3 client returns EIO for valid read responses with post op attributes when first NFSv3 read response for the mount does not have post op attributes Thread-Topic: NFSv3 client returns EIO for valid read responses with post op attributes when first NFSv3 read response for the mount does not have post op attributes Thread-Index: AQHXzP7yfnlJ+3O33kq813G60ogoqQ== Date: Fri, 29 Oct 2021 19:59:44 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2021-10-29T19:59:44.395Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 32397f45-e461-45ef-bd9f-08d99b16a73c x-ms-traffictypediagnostic: BL0PR2101MB0929: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1388; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +mquZMVmFIiqhPlIowz1NFDoiESwzrZ2MY+WmLg1gqyb/rCgNYJCstyoXZaDlcqeHj6/TUtGDN1pERv+0Dzw/kznk4wYD6/2XqFSeA/s2NNohEWKa4EzyoZlU4Id2e77T0NPaizo0rNVpHbKgrYWOzEaRTSGVgU0yln0J7ldGKvDp+p7C81gpgxBZWi3OLKOPKptlM7/LEYFGNcr1dADXDOcUc5HWzUUTtHYZiRrJyBVst0bClzRKl74Vm0o7WSVZNSAxMtgf3nXYqgfQxGP8cieuBAHhAuJul43k1SL7Iku4b1sIikB/uJF/jjiLFUN1WXlFOOi033f/eQe6GeZEi80czI+AfdigwBJgf/FQXAX6KwLAe7/CbgHOFyuaKfsBw1jjNcSxPjNdq4x5n4/btxu8v8Ya+2mjJDcirmlQmMC1lED+dI+tT+DZEIBIMcdQpZ03nnViGIWdKJSVaRhLozRjAE9bzivohHVqGnGjV6LDVnuDaly5AAM+gHTODVl5WE8SKM0vlFSeRUxoG4/HiHshEbzqSgSCr0DmBha82MkC8R6ZqvKN/hb4FCfsyM+liNueYdEgmvvBPbl3H+bVCd6kAvtGZRJVGoZWNjZi55iYBCRoYt70Ldfaxp5Beub42x9jo9+d/oGmaqXnla5W6IGRfFwAz1e+/pItkSvjh1TYgPeSpEmNOOi5gtPSZ0XNs8Pab7Gufgqx0WBtwJ/YQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB0932.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(55016002)(71200400001)(6916009)(8676002)(5660300002)(33656002)(86362001)(38100700002)(7696005)(186003)(64756008)(122000001)(10290500003)(82950400001)(508600001)(82960400001)(9686003)(52536014)(66476007)(30864003)(66556008)(83380400001)(8990500004)(38070700005)(26005)(2906002)(76116006)(66946007)(316002)(66446008)(8936002)(6506007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?K1NwaTMyVnE3UGIxOTdsN29nVVpyVWZiamtxZlcweFZJQTVjMElsTHVHSnhO?= =?utf-8?B?bkNMUGpJNlVUU0kwZUkwbUJxR2JoMFUwTkE2U1NiVTFKYVEweTFwTWQzOUQ0?= =?utf-8?B?eUdnaDByWFYzaHhvdXZGWDZnWExoMk5aOGdOOGUxalhsRElyVElXeStESnBY?= =?utf-8?B?dkNNTnZYWDBQNkNTWE1tNFF4Y1BUR0VLaUtqUDF3UVZmK1h5Q2dNQncxY1pJ?= =?utf-8?B?WDNQWGNxa2ZTUlRXSkhnaWtGMFZOWk5OM25RMWl6RGhiRlg5cTJUTS9JQWZ5?= =?utf-8?B?MGtrOU5aUVlGS3ZaT2ROeHRJdkY3dXdmaUt6VFlHbDhrVy9nYk80WTl3Y0NF?= =?utf-8?B?NnE0ME9kdE9wRlhTMW1WV1VzQVBtdUhHVzIyQjNkdlE4YXZkc0lzNEt5NTU5?= =?utf-8?B?bFRQbXMxaXJGTGJoUlhCcDhxWCtsZ3A4QU9yNGZXb3Z4elZWdkMxZDdObjE4?= =?utf-8?B?cTQzTER0d29tbWVTNlFlSkhmTzNnWDEvQ0NVWlRDU0xsOFozbjYxWnFNTlE0?= =?utf-8?B?cy9ndkFMNm1La0RJalhacHVLVnhTY2MrTGcya3pjNkFCU0FENWdMZGU2cTZF?= =?utf-8?B?anFwcmtnREVwNXhLZTlrYjcwTmNFbUlkRjhENERXTU1obmkxek45TUFDVEhV?= =?utf-8?B?V3NsZG1hM2F4eFc2dk5aYkMxUG9WUS9WbzdYclFUVHZqNnVlS1B1K3A0Q2JV?= =?utf-8?B?ZnZVVDVnUVZwRm1BbTFLVmdmdVlHWGdwWDNFMStLTW5wOVZUanBzSzN4Qm5D?= =?utf-8?B?N0pBa1JzUHJRWDA4NDl3MXhvVTUyY3drNlZhOUNpNkhFcE1IcHRxalRLZGMr?= =?utf-8?B?aHFHMnBuT3JBbXVvcDlodDZHY3hKc2k4MWg3M3Nuajl3QzZVRDNadndockkw?= =?utf-8?B?dEZwYmlDNVdUUWVUL25sdDljRGszVHl4eXBnR2NNUkJqZFBqL2IwRU83WSt1?= =?utf-8?B?OHFPSk1RaUFaeXljU00wYnpVU1FmanFWY1VJREhSL2crdzNVUnhVaCs1aC9H?= =?utf-8?B?Szh5Z0o2ekN3YUYwWVNSajgwZ1Q0Y3p5WmJXdk9YOGhnajlaUXYydm0vMGxq?= =?utf-8?B?VUdGWExzOFpNRDFlY0VQZFJVMmZ4T2NrYk5SRGJqTUhHV0E0b1Rna1Q5VjV4?= =?utf-8?B?OXdtb0Q3OUZKS1ZMc2VoS2F0QXM1MkF0RVhHT0dBQkprc09IN3VmRk9YbU42?= =?utf-8?B?Vy9SVHZMOTJieWR4NTh6NGZic2t0MUNpdEpldXgrV3ZCdjhOa2J6ditnM3Iw?= =?utf-8?B?MWU1YTNQSk12cXBmZGtjcllOZUF3Q2RxN2tadkFyWjFvNXZRWlo5dERXcnF6?= =?utf-8?B?WXE0QW9nZTJHK1Y4aDJLRkoveEJRVXVxcFBVblNtN2xqTGFxeHgxUi80WWdv?= =?utf-8?B?RVU4ZVdKbG5ERktTRmV1VnlYQ0VTa3U5Z3U1dmtkTFM5dXZkRVNkVmpsTnJm?= =?utf-8?B?TkQyZ1JqVTVPVGVuSEZlQUYvZkNLT3F3dG50QjdMdE5Na09RMy9kYVFPaUZJ?= =?utf-8?B?ZjJyWDhXaU5rMFJWS2JWZHZWb0dObXRUaFJ4MTBMVjRMSmhUQmFGaG54bS81?= =?utf-8?B?YThBcDR2MVFXcXo2cjZRZ05hMEhJMWd6NEF0aFoyME5wTHkyR29IZlhoK1hB?= =?utf-8?B?RlN1WFJ3MEx0YU1kSHk4OW9JYWZkblZJQ1NEclZuckNHSG9TUzBTbHNGTkVH?= =?utf-8?B?U3VMWVVxUk1meGpxUUlabDRVL3gxbTVOeU9FVzAwbkdMTGJCY1pNdzd5MTJy?= =?utf-8?B?Wm1OeCtrOWFKc3FZVmYxZ0pKdVg0K1dMTm9BZ3VFd0dGMEZMNjI3b1VOcHBx?= =?utf-8?B?dUJrd2kyMjN2SDgvVnh3aEQ2Wjd0MFgwQ0F0WG5Sc1I2L01tZEtFWXNndUtj?= =?utf-8?B?bUhrTDdZU29ONEc3RDJvUDBxV2pCa1ZkMkNnajNlQUpkSWU1TXpxaEZnNE1D?= =?utf-8?B?VzNVUlJaYlprbEZnZlRyMCt6ZFZnaFhkSnBJQWpsU1h2SktrOWQxL2YyYWZl?= =?utf-8?B?aExXKzZLRzNsdmF6TE96MnBKR0pyYWRKZ3hoWTM4Y3V4NHUvYTZvMTJ4Z1FQ?= =?utf-8?B?RDBJUzRmd2ZTTHE5Y09Ebkc3NlI2SmRZa3YzVTJaNXBjZ3VNV3F3MDgrVjBW?= =?utf-8?B?eStzaUd4WGxIVG5nbXdEZmNyMTQ5U1BGOHhBV0N6VnlNdHV2bVc5TTBYQTZR?= =?utf-8?B?V3c9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB0932.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32397f45-e461-45ef-bd9f-08d99b16a73c X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2021 19:59:44.6377 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: HespXtLDdNij0eBYKTubYkmVojIUMN4LWE7JRv/YvmC9N+g2p/WiqA7r8n3xrOgo3Vkg4oQgVrdHV4AnbTTf+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR2101MB0929 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org V2UgaGF2ZSBiZWVuIGV4YW1pbmluZyBORlN2MyByZWFkIElPIGVycm9ycyB0aGF0IGV4aXN0IGlu IFVidW50dSBBenVyZSAxOC4wNCwgMjAuMDQsIDIxLjA0IHJlbGVhc2VzIGFzIHdlbGwgYXMgUkhF TCA4LjIuCgpUaGUgc2ltcGxlc3QgcmVwcm9kdWN0aW9uIGludm9sdmVzIHJlYWRzIG9mIHR3byBm aWxlcyBpbW1lZGlhdGVseSBhZnRlciBhIG1vdW50LgpUaGUgc2VydmVyIGlzIHNldCB0byAqKm5v dCoqIHJldHVybiBwb3N0IG9wIGF0dHJpYnV0ZXMgZm9yIGZpbGUxLmRhdC4KVGhlIHNlcnZlciBp cyBzZXQgdG8gcmV0dXJuIHBvc3Qgb3AgYXR0cmlidXRlcyBmb3IgZmlsZTIuZGF0LgoKYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGAKW3Jvb3RAY2xpZW50LWxpbnV4LTEgfl0jIGRhdGUgOyBzdWRvIG1v dW50IC1vIHZlcnM9Myxwcm90bz10Y3AsbW91bnRwcm90bz10Y3AgJHtTRVJWRVJfSVB9Oi8xXzFf MV8wIC90bXAvbW50CkZyaSBPY3QgMjkgMTc6NDE6MzYgVVRDIDIwMjEKCltyb290QGNsaWVudC1s aW51eC0xIH5dIyBtZDVzdW0gL3RtcC9tbnQvZmlsZTEuZGF0CjA4MjlmNzE3NDBhYWIxYWI5OGIz M2VhZTIxZGVlMTIyIMKgL3RtcC9tbnQvZmlsZTEuZGF0Cgpbcm9vdEBjbGllbnQtbGludXgtMSB+ XSMgZGF0ZSA7IG1kNXN1bSAvdG1wL21udC9maWxlMi5kYXQKRnJpIE9jdCAyOSAxNzo0MjoxMiBV VEMgMjAyMQptZDVzdW06IC90bXAvbW50L2ZpbGUyLmRhdDogSW5wdXQvb3V0cHV0IGVycm9yCmBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgCgpUaGlzIHBhdGggc2VlbXMgdG8gc2V0IGEgcGVyIG1vdW50 IGJ1ZmZlciBvZmZzZXQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGZpcnN0IHJlYWQgcmVzcG9u c2UgYWZ0ZXIgbW91bnQuClRoZSBvZmZzZXQgYmFzZWQgb24gYSByZWFkIHdpdGggbm8gcG9zdCBv cCBhdHRyaWJ1dGVzIGRvZXMgbm90IHBlcm1pdCBzdWJzZXF1ZW50IHJlYWQgcmVwbGllcyB3aXRo IHBvc3Qgb3AgYXR0cmlidXRlcyB0byBiZSBkZWNvZGVkLgoKYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGAKZnMvbmZzL25mczNwcm9jLmMKCnN0YXRpYyBpbnQgbmZzM19yZWFkX2RvbmUoc3RydWN0IHJw Y190YXNrICp0YXNrLCBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIpCnsKwqAgwqAgwqAgwqAg c3RydWN0IGlub2RlICppbm9kZSA9IGhkci0+aW5vZGU7CsKgIMKgIMKgIMKgIHN0cnVjdCBuZnNf c2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKCsKgIMKgIMKgIMKgIGlmIChoZHIt PnBnaW9fZG9uZV9jYiAhPSBOVUxMKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gaGRy LT5wZ2lvX2RvbmVfY2IodGFzaywgaGRyKTsKCsKgIMKgIMKgIMKgIGlmIChuZnMzX2FzeW5jX2hh bmRsZV9qdWtlYm94KHRhc2ssIGlub2RlKSkKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJu IC1FQUdBSU47CgrCoCDCoCDCoCDCoCBpZiAodGFzay0+dGtfc3RhdHVzID49IDAgJiYgIXNlcnZl ci0+cmVhZF9oZHJzaXplKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbXB4Y2hnKCZzZXJ2ZXIt PnJlYWRfaGRyc2l6ZSwgMCwgaGRyLT5yZXMucmVwbGVuKTsgwqAgPC0tLQoKwqAgwqAgwqAgwqAg bmZzX2ludmFsaWRhdGVfYXRpbWUoaW5vZGUpOwrCoCDCoCDCoCDCoCBuZnNfcmVmcmVzaF9pbm9k ZShpbm9kZSwgJmhkci0+ZmF0dHIpOwrCoCDCoCDCoCDCoCByZXR1cm4gMDsKfQpgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYAoKSXMgdGhpcyBhIGtub3duIGlzc3VlPwoKRGV0YWlsZWQgcmVwcm9kdWN0 aW9uOgoKQXp1cmUgVWJ1bnV0dSAyMS4wNCAvIExpbnV4IDUuMTEuMCBjbGllbnQuCgpgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYApbcm9vdEBjbGllbnQtbGludXgtMSB+XSMgdW5hbWUgLWEKTGludXgg Y2xpZW50LWxpbnV4LTEgNS4xMS4wLTEwMjAtYXp1cmUgIzIxLVVidW50dSBTTVAgTW9uIE9jdCAx MSAxODowNTo0NiBVVEMgMjAyMSB4ODZfNjQgeDg2XzY0IHg4Nl82NCBHTlUvTGludXgKYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGAKCkZvcmNlIE5GU3YzIHJlYWQgcmVzcG9uc2VzIHRvIG5vdCByZXR1 cm4gcG9zdCBvcCBhdHRyaWJ1dGVzLgoKU3RhcnQgTGludXggTkZTIGNsaWVudCB0cmFjZS4KCmBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgCltyb290QGNsaWVudC1saW51eC0xIH5dIyBkYXRlIDsgdHJh Y2UtY21kIHJlY29yZCAtZSBuZnMgLWUgc3VucnBjCkZyaSBPY3QgMjkgMTc6NDA6NDcgVVRDIDIw MjEKSGl0IEN0cmxeQyB0byBzdG9wIHJlY29yZGluZwpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoK U3RhcnQgcGFja2V0IGNhcHR1cmUKCmBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCltyb290QGNsaWVu dC1saW51eC0xIH5dIyBkYXRlIDsgdHNoYXJrIC1uIC13IC90bXAvcmVhZF9laW8ucGNhcCAtZiAi aG9zdCAke1NFUlZFUl9JUH0gYW5kIHRjcCBwb3J0IDIwNDkiCkZyaSBPY3QgMjkgMTc6NDE6MjAg VVRDIDIwMjEKQ2FwdHVyaW5nIG9uICdldGgwJwpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKTW91 bnQgTkZTdjMgc2VydmVyCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYApbcm9vdEBjbGllbnQtbGlu dXgtMSB+XSMgZGF0ZSA7IHN1ZG8gbW91bnQgLW8gdmVycz0zLHByb3RvPXRjcCxtb3VudHByb3Rv PXRjcCAke1NFUlZFUl9JUH06LzFfMV8xXzAgL3RtcC9tbnQKRnJpIE9jdCAyOSAxNzo0MTozNiBV VEMgMjAyMQpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKVHJpZ2dlciB0aGUgZmlyc3QgTkZTdjMg cmVhZCBmb3IgdGhlIG1vdW50IHBvaW50LgoKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKW3Jvb3RA Y2xpZW50LWxpbnV4LTEgfl0jIG1kNXN1bSAvdG1wL21udC9maWxlMS5kYXQKMDgyOWY3MTc0MGFh YjFhYjk4YjMzZWFlMjFkZWUxMjIgwqAvdG1wL21udC9maWxlMS5kYXQKYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGAKCkFsbG93IE5GU3YzIHJlYWQgcmVzcG9uc2VzIHRvIHJldHVybiBwb3N0IG9wIGF0 dHJpYnV0ZXMuCgpSZWFkIHNlY29uZCBmaWxlLgoKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKW3Jv b3RAY2xpZW50LWxpbnV4LTEgfl0jIGRhdGUgOyBtZDVzdW0gL3RtcC9tbnQvZmlsZTIuZGF0CkZy aSBPY3QgMjkgMTc6NDI6MTIgVVRDIDIwMjEKbWQ1c3VtOiAvdG1wL21udC9maWxlMi5kYXQ6IElu cHV0L291dHB1dCBlcnJvcgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKU3RvcCBMaW51eCBORlMg Y2xpZW50IHRyYWNlCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYApbcm9vdEBjbGllbnQtbGludXgt MSB+XSMgZGF0ZSA7IHRyYWNlLWNtZCByZWNvcmQgLWUgbmZzIC1lIHN1bnJwYwpGcmkgT2N0IDI5 IDE3OjQwOjQ3IFVUQyAyMDIxCkhpdCBDdHJsXkMgdG8gc3RvcCByZWNvcmRpbmcKXkNDUFUwIGRh dGEgcmVjb3JkZWQgYXQgb2Zmc2V0PTB4ODY2MDAwCsKgIMKgIDI0NTc2IGJ5dGVzIGluIHNpemUK Q1BVMSBkYXRhIHJlY29yZGVkIGF0IG9mZnNldD0weDg2YzAwMArCoCDCoCA0MDk2MCBieXRlcyBp biBzaXplCmBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCgpTdG9wIHBhY2tldCBjYXB0dXJlCgpgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYApbcm9vdEBjbGllbnQtbGludXgtMSB+XSMgZGF0ZSA7IHRzaGFy ayAtbiAtdyAvdG1wL3JlYWRfZWlvLnBjYXAgLWYgImhvc3QgJHtTRVJWRVJfSVB9IGFuZCB0Y3Ag cG9ydCAyMDQ5IgpGcmkgT2N0IDI5IDE3OjQxOjIwIFVUQyAyMDIxCkNhcHR1cmluZyBvbiAnZXRo MCcKNTUgXkMKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKClRoZSByZWFkIHJlc3BvbnNlIGZvciB0 aGUgcmVhZCBvZiBmaWxlMS5kYXQgaXMgZnJhbWUgNDIuClRoZSByZWFkIHJlc3BvbnNlIGZvciB0 aGUgcmVhZCBvZiBmaWxlMi5kYXQgaXMgZnJhbWVzIDUxIGFuZCA1NC4KCmBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgCltyb290QGNsaWVudC1saW51eC0xIH5dIyB0c2hhcmsgLW4gLXIgL3RtcC9yZWFk X2Vpby5wY2FwIC1ZICduZnMgYW5kIChycGMucHJvY2VkdXJlPT0zIG9yIHJwYy5wcm9jZWR1cmU9 PTYpJyB8IHNlZCAtRWUgInMvJHtDTElFTlRfSVB9L0NMSUVOVC9nIiB8IHNlZCAtRWUgInMvJHtT RVJWRVJfSVB9L1NFUlZFUi9nIgrCoCDCoDM0IDEzLjUzNjI2MzkzNSBDTElFTlQg4oaSIFNFUlZF UiBORlMgMjAyIFYzIExPT0tVUCBDYWxsLCBESDogMHgxODRlMTVmMC9maWxlMS5kYXQKwqAgwqAz NiAxMy41MzY4NjQyNDEgU0VSVkVSIOKGkiBDTElFTlQgTkZTIDMxMCBWMyBMT09LVVAgUmVwbHkg KENhbGwgSW4gMzQpLCBGSDogMHg3YjUwZjcwMwrCoCDCoDQxIDEzLjUzNzMwMDg0NCBDTElFTlQg 4oaSIFNFUlZFUiBORlMgMjA2IFYzIFJFQUQgQ2FsbCwgRkg6IDB4N2I1MGY3MDMgT2Zmc2V0OiAw IExlbjogODE5MgrCoCDCoDQyIDEzLjUzNzkxMzg1MCBTRVJWRVIg4oaSIENMSUVOVCBORlMgODMw NiBWMyBSRUFEIFJlcGx5IChDYWxsIEluIDQxKSBMZW46IDgxOTIKwqAgwqA0NCAzNS43MzU4ODIw NDggQ0xJRU5UIOKGkiBTRVJWRVIgTkZTIDIwMiBWMyBMT09LVVAgQ2FsbCwgREg6IDB4MTg0ZTE1 ZjAvZmlsZTIuZGF0CsKgIMKgNDUgMzUuNzM2OTgwNjU3IFNFUlZFUiDihpIgQ0xJRU5UIE5GUyAz MTAgVjMgTE9PS1VQIFJlcGx5IChDYWxsIEluIDQ0KSwgRkg6IDB4ZWE3NWFhNTYKwqAgwqA1MCAz NS43Mzc1NTAwNjIgQ0xJRU5UIOKGkiBTRVJWRVIgTkZTIDIwNiBWMyBSRUFEIENhbGwsIEZIOiAw eGVhNzVhYTU2IE9mZnNldDogMCBMZW46IDgxOTIKwqAgwqA1MSAzNS43Mzc3OTYzNjQgU0VSVkVS IOKGkiBDTElFTlQgTkZTIDgzOTAgVjMgUkVBRCBSZXBseSAoQ2FsbCBJbiA1MCkgTGVuOiA4MTky CsKgIMKgNTMgMzUuNzM3OTg2NTY2IENMSUVOVCDihpIgU0VSVkVSIE5GUyAyMDYgVjMgUkVBRCBD YWxsLCBGSDogMHhlYTc1YWE1NiBPZmZzZXQ6IDAgTGVuOiA0MDk2CsKgIMKgNTQgMzUuNzM4Mjgw NjY4IFNFUlZFUiDihpIgQ0xJRU5UIE5GUyA0Mjk0IFYzIFJFQUQgUmVwbHkgKENhbGwgSW4gNTMp IExlbjogNDA5NgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKVGhlIGZpcnN0IE5GU3YzIHJlYWQg cmVzcG9uc2UgYWZ0ZXIgdGhlIG1vdW50IGZvciBmaWxlMS5kYXQgZG9lcyBub3QgY29udGFpbiBw b3N0IG9wIGF0dHJpYnV0ZXMuClRoZSBzdWJzZXF1ZW50IE5GU3YzIHJlYWQgcmVzcG9uc2VzIGZv ciBmaWxlMi5kYXQgZG8gY29udGFpbiBwb3N0IG9wIGF0dHJpYnV0ZXMsIGhvd2V2ZXIsIHRoZSBO RlMgY2xpZW50IHJldHVybnMgRUlPIHRvIHRoZSBhcHBsaWNhdGlvbi4KCmBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgCltyb290QGNsaWVudC1saW51eC0xIH5dIyB0c2hhcmsgLW4gLXIgL3RtcC9yZWFk X2Vpby5wY2FwIC1ZICdycGMucHJvY2VkdXJlPT02IGFuZCBycGMubXNndHlwPT0xJyAtVCBmaWVs ZHMgLWUgZnJhbWUubnVtYmVyIC1lIG5mcy5hdHRyaWJ1dGVzX2ZvbGxvdwo0MiDCoCDCoCDCoDAK NTEgwqAgwqAgwqAxCjU0IMKgIMKgIMKgMQoKW3Jvb3RAY2xpZW50LWxpbnV4LTEgfl0jIHRzaGFy ayAtbiAtciAvdG1wL3JlYWRfZWlvLnBjYXAgLVkgJ3JwYy5wcm9jZWR1cmU9PTYgYW5kIHJwYy5t c2d0eXA9PTEnIC1WIC1PIG5mcyB8IGdyZXAgYXR0cmlidXRlc19mb2xsb3cKwqAgwqAgwqAgwqAg YXR0cmlidXRlc19mb2xsb3c6IG5vIHZhbHVlICgwKQrCoCDCoCDCoCDCoCBhdHRyaWJ1dGVzX2Zv bGxvdzogdmFsdWUgZm9sbG93cyAoMSkKwqAgwqAgwqAgwqAgYXR0cmlidXRlc19mb2xsb3c6IHZh bHVlIGZvbGxvd3MgKDEpCmBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCgpEZXRlcm1pbmUgdGhlIFhJ RCB2YWx1ZXMgZm9yIHRoZSBORlN2MyByZWFkIG9wZXJhdGlvbnMuCgpgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYApbcm9vdEBjbGllbnQtbGludXgtMSB+XSMgdHNoYXJrIC1uIC1yIC90bXAvcmVhZF9l aW8ucGNhcCAtWSAncnBjLnByb2NlZHVyZT09NiBhbmQgcnBjLm1zZ3R5cD09MScgLVQgZmllbGRz IC1lIGZyYW1lLm51bWJlciAtZSBycGMueGlkCjQyIMKgIMKgIMKgMHg2Y2JhNTYwNwo1MSDCoCDC oCDCoDB4NmZiYTU2MDcKNTQgwqAgwqAgwqAweDcwYmE1NjA3CmBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgCgpUaGUgY2xpZW50IHRyYWNlIGZvciB0aGUgcmVhZCBvZiBmaWxlMS5kYXQgaW5kaWNhdGVz IGEgdG90YWwgc2l6ZSBvZiB0aGUgZGF0YSBzaXplIHBsdXMgNDQgYnl0ZXMuClRoZSBjbGllbnQg dHJhY2UgZm9yIHRoZSByZWFkIG9mIGZpbGUyLmRhdCBpbmRpY2F0ZXMgYSB0b3RhbCBzaXplIG9m IHRoZSBkYXRhIHNpemUgcGx1cyAxMjggYnl0ZXMuCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYApb cm9vdEBjbGllbnQtbGludXgtMSB+XSMgWElEUz0kKHRzaGFyayAtbiAtciAvdG1wL3JlYWRfZWlv LnBjYXAgLVkgJ3JwYy5wcm9jZWR1cmU9PTYgYW5kIHJwYy5tc2d0eXA9PTEnIC1UIGZpZWxkcyAt ZSBycGMueGlkKQoKW3Jvb3RAY2xpZW50LWxpbnV4LTEgfl0jIGZvciBYSUQgaW4gJHtYSURTfSA7 IGRvIHRyYWNlLWNtZCByZXBvcnQgfCBncmVwIHhzX3N0cmVhbV9yZWFkX3JlcXVlc3QgfCBncmVw IC1FZSAke1hJRH0gOyBkb25lIHwgwqBzZWQgLUVlICJzLyR7Q0xJRU5UX0lQfS9DTElFTlQvZyIg fCBzZWQgLUVlICJzLyR7U0VSVkVSX0lQfS9TRVJWRVIvZyIKwqAgwqAga3dvcmtlci91NTowLTMw MjkzNyBbMDAxXSAyNTYyMDcuMDU2NjQ2OiB4c19zdHJlYW1fcmVhZF9yZXF1ZXN0OiBwZWVyPVtT RVJWRVJdOjIwNDkgeGlkPTB4NmNiYTU2MDcgY29waWVkPTgyMzYgcmVjbGVuPTgyMzYgb2Zmc2V0 PTgyMzYKwqAgwqAga3dvcmtlci91NTowLTMwMjkzNyBbMDAxXSAyNTYyMjkuMjU2NjEyOiB4c19z dHJlYW1fcmVhZF9yZXF1ZXN0OiBwZWVyPVtTRVJWRVJdOjIwNDkgeGlkPTB4NmZiYTU2MDcgY29w aWVkPTgzMjAgcmVjbGVuPTgzMjAgb2Zmc2V0PTgzMjAKwqAgwqAga3dvcmtlci91NTowLTMwMjkz NyBbMDAxXSAyNTYyMjkuMjU3MDI0OiB4c19zdHJlYW1fcmVhZF9yZXF1ZXN0OiBwZWVyPVtTRVJW RVJdOjIwNDkgeGlkPTB4NzBiYTU2MDcgY29waWVkPTQyMjQgcmVjbGVuPTQyMjQgb2Zmc2V0PTQy MjQKCltyb290QGNsaWVudC1saW51eC0xIH5dIyBweXRob24zIC1jICJwcmludCg4MjM2IC0gODE5 MikiCjQ0Cgpbcm9vdEBjbGllbnQtbGludXgtMSB+XSMgcHl0aG9uMyAtYyAicHJpbnQoODMyMCAt IDgxOTIpIgoxMjgKCltyb290QGNsaWVudC1saW51eC0xIH5dIyBweXRob24zIC1jICJwcmludCg0 MjI0IC0gNDA5NikiCjEyOApgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKVGhlIG51bWJlciBvZiBi eXRlcyBwcmlvciB0byB0aGUgZGF0YSBpcyAxMjggd2hlbiBwb3N0IG9wIGF0dHJpYnV0ZXMgYXJl IHByZXNlbnQuCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYArCoCAxIHJwYy54aWQKwqAgMiBycGMu bXNndHlwCsKgIDMgcnBjLnJlcGx5c3RhdArCoCA0IHJwYy5hdXRoLmZsYXZvcgrCoCA1IHJwYy5h dXRoLmxlbmd0aArCoCA2IHJwYy5zdGF0ZV9hY2NlcHQKwqAgNyBuZnMuc3RhdHVzCsKgIDggbmZz LmF0dHJpYnV0ZXNfZm9sbG93CsKgIDkgbmZzLmZhdHRyMy50eXBlCsKgMTAgbmZzLm1vZGUzCsKg MTEgbmZzLmZhdHRyMy5ubGluawrCoDEyIG5mcy5mYXR0cjMudWlkCsKgMTMgbmZzLmZhdHRyMy5n aWQKwqAxNCBuZnMuZmF0dHIzLnNpemUKwqAxNSBuZnMuZmF0dHIzLnNpemUKwqAxNiBuZnMuZmF0 dHIzLnVzZWQKwqAxNyBuZnMuZmF0dHIzLnVzZWQKwqAxOCBuZnMuc3BlY2RhdGExCsKgMTkgbmZz LnNwZWNkYXRhMgrCoDIwIG5mcy5mYXR0cjMuZnNpZArCoDIxIG5mcy5mYXR0cjMuZnNpZArCoDIy IG5mcy5mYXR0cjMuZmlsZWlkCsKgMjMgbmZzLmZhdHRyMy5maWxlaWQKwqAyNCBuZnMuYXRpbWUu c2VjCsKgMjUgbmZzLmF0aW1lLm5zZWMKwqAyNiBuZnMubXRpbWUuc2VjCsKgMjcgbmZzLm10aW1l Lm5zZWMKwqAyOCBuZnMuY3RpbWUuc2VjCsKgMjkgbmZzLmN0aW1lLm5zZWMKwqAzMCBuZnMuY291 bnQzCsKgMzEgbmZzLnJlYWQuZW9mCsKgMzIgY291bnQKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAK ClRoZSBudW1iZXIgb2YgYnl0ZXMgcHJpb3IgdG8gdGhlIGRhdGEgaXMgNDQgd2hlbiBwb3N0IG9w IGF0dHJpYnV0ZXMgYXJlIG5vdCBwcmVzZW50LgoKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKwqAg MSBycGMueGlkCsKgIDIgcnBjLm1zZ3R5cArCoCAzIHJwYy5yZXBseXN0YXQKwqAgNCBycGMuYXV0 aC5mbGF2b3IKwqAgNSBycGMuYXV0aC5sZW5ndGgKwqAgNiBycGMuc3RhdGVfYWNjZXB0CsKgIDcg bmZzLnN0YXR1cwrCoCA4IG5mcy5hdHRyaWJ1dGVzX2ZvbGxvdwrCoCA5IG5mcy5jb3VudDMKwqAx MCBuZnMucmVhZC5lb2YKwqAxMSBjb3VudApgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKVGhlIHJw Y194ZHJfb3ZlcmZsb3cgdHJhY2UgbGluZXMgb2NjdXIgZm9yIHRoZSB0d28gcmVhZCByZXNwb25z ZXMgdGhhdCBjb250YWluIHBvc3Qgb3AgYXR0cmlidXRlcy4KCmBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgCltyb290QGNsaWVudC1saW51eC0xIH5dIyB0cmFjZS1jbWQgcmVwb3J0IHwgZ3JlcCAtRWUg JyhycGNfeGRyX292ZXJmbG93fHhzX3N0cmVhbV9yZWFkX3JlcXVlc3QpJyB8IGdyZXAgLUIgMSAt RWUgJ3JwY194ZHJfb3ZlcmZsb3cnIHwgc2VkIC1FZSAicy8ke0NMSUVOVF9JUH0vQ0xJRU5UL2ci IHwgc2VkIC1FZSAicy8ke1NFUlZFUl9JUH0vU0VSVkVSL2ciCsKgIMKgIGt3b3JrZXIvdTU6MC0z MDI5MzcgWzAwMV0gMjU2MjI5LjI1NjYxMjogeHNfc3RyZWFtX3JlYWRfcmVxdWVzdDogcGVlcj1b U0VSVkVSXToyMDQ5IHhpZD0weDZmYmE1NjA3IGNvcGllZD04MzIwIHJlY2xlbj04MzIwIG9mZnNl dD04MzIwCsKgIMKgIGt3b3JrZXIvdTQ6MS0zMDQwNjcgWzAwMV0gMjU2MjI5LjI1NjYyMDogcnBj X3hkcl9vdmVyZmxvdzogwqAgwqAgdGFzazoxMzMxNEA4IG5mc3YzIFJFQUQgcmVxdWVzdGVkPTg0 IHA9MHhmZmZmOGZjMDQ5MjMzOWI4IGVuZD0weGZmZmY4ZmMwNDkyMzM5YzQgeGRyPVsweGZmZmY4 ZmMwNDkyMzM5OTgsNDRdLzgxOTIvWzB4ZmZmZjhmYzA0OTIzMzljNCw4OF0vODMyMArCoCDCoCBr d29ya2VyL3U1OjAtMzAyOTM3IFswMDFdIDI1NjIyOS4yNTcwMjQ6IHhzX3N0cmVhbV9yZWFkX3Jl cXVlc3Q6IHBlZXI9W1NFUlZFUl06MjA0OSB4aWQ9MHg3MGJhNTYwNyBjb3BpZWQ9NDIyNCByZWNs ZW49NDIyNCBvZmZzZXQ9NDIyNArCoCDCoCBrd29ya2VyL3U0OjEtMzA0MDY3IFswMDFdIDI1NjIy OS4yNTcwMzE6IHJwY194ZHJfb3ZlcmZsb3c6IMKgIMKgIHRhc2s6MTMzMTVAOCBuZnN2MyBSRUFE IHJlcXVlc3RlZD04NCBwPTB4ZmZmZjhmYzA0OTIzMzliOCBlbmQ9MHhmZmZmOGZjMDQ5MjMzOWM0 IHhkcj1bMHhmZmZmOGZjMDQ5MjMzOTk4LDQ0XS80MDk2L1sweGZmZmY4ZmMwNDkyMzM5YzQsODhd LzQyMjQKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKClRoZSBidWZmZXIgb2Zmc2V0IGlzIGluaXRp YWxpemVkIHRvIDQ0IGluc3RlYWQgb2YgMTI4IGZvciBhbGwgcmVhZHMgYWZ0ZXIgdGhlIGZpcnN0 IHJlYWQuCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYApbcm9vdEBjbGllbnQtbGludXgtMSB+XSMg dHJhY2UtY21kIHJlcG9ydCB8IGdyZXAgLUVlICdycGNfeGRyX3JlcGx5X3BhZ2VzJwrCoCDCoCBr d29ya2VyL3U0OjMtMzA1NDAyIFswMDFdIDI1NjIwNy4wNTU5ODk6IHJwY194ZHJfcmVwbHlfcGFn ZXM6IMKgdGFzazoxMzMwOUA4IGhlYWQ9WzB4ZmZmZjhmYzA0OTIzNjE5OCwxMjhdIHBhZ2U9ODE5 MiB0YWlsPVsweGZmZmY4ZmMwNDkyMzYyMTgsNF0gbGVuPTAKwqAgwqAga3dvcmtlci91NDoxLTMw NDA2NyBbMDAxXSAyNTYyMjkuMjU2MjMzOiBycGNfeGRyX3JlcGx5X3BhZ2VzOiDCoHRhc2s6MTMz MTRAOCBoZWFkPVsweGZmZmY4ZmMwNDkyMzM5OTgsNDRdIHBhZ2U9ODE5MiB0YWlsPVsweGZmZmY4 ZmMwNDkyMzM5YzQsODhdIGxlbj0wCsKgIMKgIGt3b3JrZXIvdTQ6MS0zMDQwNjcgWzAwMV0gMjU2 MjI5LjI1NjY3MzogcnBjX3hkcl9yZXBseV9wYWdlczogwqB0YXNrOjEzMzE1QDggaGVhZD1bMHhm ZmZmOGZjMDQ5MjMzOTk4LDQ0XSBwYWdlPTQwOTYgdGFpbD1bMHhmZmZmOGZjMDQ5MjMzOWM0LDg4 XSBsZW49MAoKW3Jvb3RAY2xpZW50LWxpbnV4LTEgfl0jIHB5dGhvbjMgLWMgInByaW50KDEyOCs0 KSIKMTMyCgpbcm9vdEBjbGllbnQtbGludXgtMSB+XSMgcHl0aG9uMyAtYyAicHJpbnQoNDQrODgp IgoxMzIKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKClRoZSBycGNfeGRyX292ZXJmbG93IHRyYWNl IGxpbmVzIGluZGljYXRlIGEgc2l6ZSBvZiA4NCB3aGljaCBpcyB0aGUgc2l6ZSBvZiBhbiBmYXR0 cjMgc3RydWN0dXJlLgoKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKW3Jvb3RAY2xpZW50LWxpbnV4 LTEgfl0jIHRyYWNlLWNtZCByZXBvcnQgfCBncmVwIC1FZSBycGNfeGRyX292ZXJmbG93CsKgIMKg IGt3b3JrZXIvdTQ6MS0zMDQwNjcgWzAwMV0gMjU2MjI5LjI1NjYyMDogcnBjX3hkcl9vdmVyZmxv dzogwqAgwqAgdGFzazoxMzMxNEA4IG5mc3YzIFJFQUQgcmVxdWVzdGVkPTg0IHA9MHhmZmZmOGZj MDQ5MjMzOWI4IGVuZD0weGZmZmY4ZmMwNDkyMzM5YzQgeGRyPVsweGZmZmY4ZmMwNDkyMzM5OTgs NDRdLzgxOTIvWzB4ZmZmZjhmYzA0OTIzMzljNCw4OF0vODMyMArCoCDCoCBrd29ya2VyL3U0OjEt MzA0MDY3IFswMDFdIDI1NjIyOS4yNTcwMzE6IHJwY194ZHJfb3ZlcmZsb3c6IMKgIMKgIHRhc2s6 MTMzMTVAOCBuZnN2MyBSRUFEIHJlcXVlc3RlZD04NCBwPTB4ZmZmZjhmYzA0OTIzMzliOCBlbmQ9 MHhmZmZmOGZjMDQ5MjMzOWM0IHhkcj1bMHhmZmZmOGZjMDQ5MjMzOTk4LDQ0XS80MDk2L1sweGZm ZmY4ZmMwNDkyMzM5YzQsODhdLzQyMjQKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKClRoZSBoZWFk IGFuZCB0YWlsIGJ1ZmZlcnMgYXJlIGNvbnRpZ3VvdXMgYW5kIHAgaXMgMTIgYnl0ZXMgZnJvbSB0 aGUgZW5kIG9mIGhlYWQsIHNvIHRoZSBlbnRpcmUgZmF0dHIzIGlzIG5vdCBwcmVzZW50IGluIGhl YWQuCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAo+Pj4gZW5kPTB4ZmZmZjhmYzA0OTIzMzljNAo+ Pj4gcD0weGZmZmY4ZmMwNDkyMzM5YjgKPj4+IGhlYWRfaW92X2Jhc2U9MHhmZmZmOGZjMDQ5MjMz OTk4Cj4+PiBoZWFkX2lvdl9sZW49NDQKPj4+IHRhaWxfaW92X2Jhc2U9MHhmZmZmOGZjMDQ5MjMz OWM0Cgo+Pj4gZW5kIC0gcAoxMgoKPj4+IGVuZCA9PSBoZWFkX2lvdl9iYXNlICsgaGVhZF9pb3Zf bGVuClRydWUKCj4+PiBlbmQgPT0gdGFpbF9pb3ZfYmFzZQpUcnVlCgo+Pj4gaGVhZF9pb3ZfYmFz ZSArIGhlYWRfaW92X2xlbiA9PSB0YWlsX2lvdl9iYXNlClRydWUKCj4+PiBwIC0gaGVhZF9pb3Zf YmFzZQozMgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYAoKVGhlIGhlYWQgb2Zmc2V0IG9mIDQ0IGNh dXNlcyB4ZHJfY29weV90b19zY3JhdGNoIGNhbGwgcnBjX3hkcl9vdmVyZmxvdy4KCmBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgCm5ldC9zdW5ycGMveGRyLmMKCl9fYmUzMiAqIHhkcl9pbmxpbmVfZGVj b2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpCnsKwqAgwqAgwqAgwqAg X19iZTMyICpwOwoKwqAgwqAgwqAgwqAgaWYgKHVubGlrZWx5KG5ieXRlcyA9PSAwKSkKwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIHhkci0+cDsKwqAgwqAgwqAgwqAgaWYgKHhkci0+cCA9 PSB4ZHItPmVuZCAmJiAheGRyX3NldF9uZXh0X2J1ZmZlcih4ZHIpKSDCoCDCoCDCoCA8LS0tIGlu IHRoaXMgY2FzZSB4ZHItPnAgIT0geGRyLT5lbmQKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290 byBvdXRfb3ZlcmZsb3c7CsKgIMKgIMKgIMKgIHAgPSBfX3hkcl9pbmxpbmVfZGVjb2RlKHhkciwg bmJ5dGVzKTsKwqAgwqAgwqAgwqAgaWYgKHAgIT0gTlVMTCkKwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgcmV0dXJuIHA7CsKgIMKgIMKgIMKgIHJldHVybiB4ZHJfY29weV90b19zY3JhdGNoKHhkciwg bmJ5dGVzKTsKb3V0X292ZXJmbG93OgrCoCDCoCDCoCDCoCB0cmFjZV9ycGNfeGRyX292ZXJmbG93 KHhkciwgbmJ5dGVzKTsKwqAgwqAgwqAgwqAgcmV0dXJuIE5VTEw7Cn0KCm5ldC9zdW5ycGMveGRy LmMKCnN0YXRpYyBfX2JlMzIgKiBfX3hkcl9pbmxpbmVfZGVjb2RlKHN0cnVjdCB4ZHJfc3RyZWFt ICp4ZHIsIHNpemVfdCBuYnl0ZXMpCnsKwqAgwqAgwqAgwqAgdW5zaWduZWQgaW50IG53b3JkcyA9 IFhEUl9RVUFETEVOKG5ieXRlcyk7CsKgIMKgIMKgIMKgIF9fYmUzMiAqcCA9IHhkci0+cDsKwqAg wqAgwqAgwqAgX19iZTMyICpxID0gcCArIG53b3JkczsKCsKgIMKgIMKgIMKgIGlmICh1bmxpa2Vs eShud29yZHMgPiB4ZHItPm53b3JkcyB8fCBxID4geGRyLT5lbmQgfHwgcSA8IHApKSDCoCDCoCA8 LS0tIG53b3Jkcz09MjEgYW5kIHhkci0+cCBpcyAzIHdvcmRzIGxlc3MgdGhhbiB4ZHItPmVuZCBz byAicSA+IHhkci0+ZW5kIiBpcyBmYWxzZQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4g TlVMTDsKwqAgwqAgwqAgwqAgeGRyLT5wID0gcTsKwqAgwqAgwqAgwqAgeGRyLT5ud29yZHMgLT0g bndvcmRzOwrCoCDCoCDCoCDCoCByZXR1cm4gcDsKfQoKbmV0L3N1bnJwYy94ZHIuYwoKc3RhdGlj IF9fYmUzMiAqeGRyX2NvcHlfdG9fc2NyYXRjaChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzaXpl X3QgbmJ5dGVzKQp7CsKgIMKgIMKgIMKgIF9fYmUzMiAqcDsKwqAgwqAgwqAgwqAgY2hhciAqY3Bk ZXN0ID0geGRyLT5zY3JhdGNoLmlvdl9iYXNlOwrCoCDCoCDCoCDCoCBzaXplX3QgY3BsZW4gPSAo Y2hhciAqKXhkci0+ZW5kIC0gKGNoYXIgKil4ZHItPnA7CgrCoCDCoCDCoCDCoCBpZiAobmJ5dGVz ID4geGRyLT5zY3JhdGNoLmlvdl9sZW4pIMKgIMKgIDwtLS0gbmJ5dGVzIGlzIDEyIGFuZCBzY3Jh dGNoLmlvdl9sZW4gaXMgMCBmb3IgZGVjb2RlCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8g b3V0X292ZXJmbG93OyDCoCDCoCDCoCDCoCDCoCDCoCA8LS0tIHRoaXMgcGF0aCBpcyB0YWtlbgrC oCDCoCDCoCDCoCAuLi4KwqAgwqAgwqAgwqAgcmV0dXJuIHhkci0+c2NyYXRjaC5pb3ZfYmFzZTsK b3V0X292ZXJmbG93OgrCoCDCoCDCoCDCoCB0cmFjZV9ycGNfeGRyX292ZXJmbG93KHhkciwgbmJ5 dGVzKTsKwqAgwqAgwqAgwqAgcmV0dXJuIE5VTEw7Cn0KYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAK Cm5mczNfeGRyX2VuY19yZWFkM2FyZ3MgdXNlcyBgTkZTM19yZWFkcmVzX3N6IC0gTkZTM19wYWdl cGFkX3N6YCBmb3IgdGhlIGJ1ZmZlciBvZmZzZXQgd2hpY2ggaXMgc3VmZmljaWVudGx5IGxhcmdl IGZvciBhbiBBVVRIX1NZUyByZWFkIHJlc3BvbnNlIHdpdGggcG9zdCBvcCBhdHRyaWJ1dGVzLgoK YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKZnMvbmZzL25mczN4ZHIuYwoKc3RhdGljIHZvaWQgbmZz M194ZHJfZW5jX3JlYWQzYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3QgeGRyX3N0cmVhbSAq eGRyLArCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGNvbnN0IHZvaWQgKmRhdGEpCnsKwqAgwqAgwqAgwqAgY29uc3Qgc3RydWN0IG5mc19wZ2lvX2Fy Z3MgKmFyZ3MgPSBkYXRhOwrCoCDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgcmVwbGVuID0gYXJncy0+ cmVwbGVuID8gYXJncy0+cmVwbGVuIDogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg PC0tLSB1c2VkIGZvciByZWFkcyBhZnRlciBmaXJzdCByZWFkCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgTkZTM19yZWFk cmVzX3N6IC0gTkZTM19wYWdlcGFkX3N6OyDCoCA8LS0tIHVzZWQgZm9yIGZpcnN0IHJlYWQKCsKg IMKgIMKgIMKgIGVuY29kZV9yZWFkM2FyZ3MoeGRyLCBhcmdzKTsKwqAgwqAgwqAgwqAgcnBjX3By ZXBhcmVfcmVwbHlfcGFnZXMocmVxLCBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLArCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhcmdzLT5jb3VudCwgcmVw bGVuKTsKwqAgwqAgwqAgwqAgcmVxLT5ycV9yY3ZfYnVmLmZsYWdzIHw9IFhEUkJVRl9SRUFEOwp9 CgoKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAKClRoZSByZXBsZW4gbWVtYmVyIGlzIHNldCBpbiBu ZnMzX3Byb2NfcmVhZF9zZXR1cCgpIGJhc2VkIG9uIGEgcGVyIG1vdW50IHBvaW50IHN0cnVjdHVy ZS4KCmBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCmZzL25mcy9uZnMzcHJvYy5jCgpzdGF0aWMgdm9p ZCBuZnMzX3Byb2NfcmVhZF9zZXR1cChzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIsCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IHJwY19t ZXNzYWdlICptc2cpCnsKwqAgwqAgwqAgwqAgbXNnLT5ycGNfcHJvYyA9ICZuZnMzX3Byb2NlZHVy ZXNbTkZTM1BST0NfUkVBRF07CsKgIMKgIMKgIMKgIGhkci0+YXJncy5yZXBsZW4gPSBORlNfU0VS VkVSKGhkci0+aW5vZGUpLT5yZWFkX2hkcnNpemU7Cn0KYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAK ClRoZSByZWFkX2hkcnNpemUgZm9yIHRoZSBtb3VudCBwb2ludCBpcyBzZXQgYnkgdGhlIGZpcnN0 IHJlYWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSB0aGUgTkZTdjMgc2VydmVyLgpJZiB0aGUgZmly c3QgcmVhZCByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHBvc3Qgb3AgYXR0cmlidXRlcyB0aGVu IHRoaXMgdmFsdWUgaXMgNDQuCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYApmcy9uZnMvbmZzM3By b2MuYwoKc3RhdGljIGludCBuZnMzX3JlYWRfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0 cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcikKewrCoCDCoCDCoCDCoCBzdHJ1Y3QgaW5vZGUgKmlu b2RlID0gaGRyLT5pbm9kZTsKwqAgwqAgwqAgwqAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9 IE5GU19TRVJWRVIoaW5vZGUpOwoKwqAgwqAgwqAgwqAgaWYgKGhkci0+cGdpb19kb25lX2NiICE9 IE5VTEwpCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBoZHItPnBnaW9fZG9uZV9jYih0 YXNrLCBoZHIpOwoKwqAgwqAgwqAgwqAgaWYgKG5mczNfYXN5bmNfaGFuZGxlX2p1a2Vib3godGFz aywgaW5vZGUpKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVBR0FJTjsKCsKgIMKg IMKgIMKgIGlmICh0YXNrLT50a19zdGF0dXMgPj0gMCAmJiAhc2VydmVyLT5yZWFkX2hkcnNpemUp CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNtcHhjaGcoJnNlcnZlci0+cmVhZF9oZHJzaXplLCAw LCBoZHItPnJlcy5yZXBsZW4pOyDCoCA8LS0tCgrCoCDCoCDCoCDCoCBuZnNfaW52YWxpZGF0ZV9h dGltZShpbm9kZSk7CsKgIMKgIMKgIMKgIG5mc19yZWZyZXNoX2lub2RlKGlub2RlLCAmaGRyLT5m YXR0cik7CsKgIMKgIMKgIMKgIHJldHVybiAwOwp9CmBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgCgpG b3JjaW5nIHRoZSByZWFkIHJlc3BvbnNlcyB0byBub3QgaGF2ZSBwb3N0IG9wIGF0dHJpYnV0ZXMg YWxsb3dzIHRoZSByZWFkIHRvIHN1Y2NlZWQuCgpgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYApbcm9v dEBjbGllbnQtbGludXgtMSB+XSMgZGF0ZSA7IG1kNXN1bSAvdG1wL21udC9maWxlMi5kYXQKRnJp IE9jdCAyOSAxODo1NTo0MSBVVEMgMjAyMQptZDVzdW06IC90bXAvbW50L2ZpbGUyLmRhdDogSW5w dXQvb3V0cHV0IGVycm9yCgojIGNoYW5nZSBzZXJ2ZXIgY29uZmlndXJhdGlvbgoKW3Jvb3RAY2xp ZW50LWxpbnV4LTEgfl0jIGRhdGUgOyBtZDVzdW0gL3RtcC9tbnQvZmlsZTIuZGF0CkZyaSBPY3Qg MjkgMTg6NTY6MDYgVVRDIDIwMjEKMDgyOWY3MTc0MGFhYjFhYjk4YjMzZWFlMjFkZWUxMjIgwqAv dG1wL21udC9maWxlMi5kYXQKYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAK