From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 8C6DA385840D for ; Fri, 10 Feb 2023 16:46:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C6DA385840D Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ibm.com Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31AGiGtF014424; Fri, 10 Feb 2023 16:46:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pp1; bh=V2ScMz3RY8NAKOCOPAVrkP25jUT1CdRZzOqasGeCviY=; b=RC5o2/IDVt2/7YYovhGj4Qx2PpP/ElDmgMGaQ9eXPbX0MYfO9CgATGX39O+kUHDZSHk8 deG0dn3tZlEXvH4v9k56iVlT1HCyvesUgnavu4FsKhNIsysIdGVw1L6EQSaf58Co62Hw 7fId/KEMfrP47xzCxcSnyIZeY8H753yAqwfDGGg7pyZf51bUEHrDhRq0F8fz5UWfwFeL AwsuYk5mSAZZncBam5fh2wyxW0BC4rFXBTRukDcgEx5yHkrv/iVxT4trrmowx4uabYLv JIhHTZDel7T5Vn/YXb5ViVeJ94mG4LQYBfFTHrCTM68mMhcEZAv8n5jbOwOC156xkj1d xA== Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2103.outbound.protection.outlook.com [104.47.58.103]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nnspyg1tn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Feb 2023 16:46:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QbMfdGmpldknxi+LSRi7e/6fM2lFdZDIQ65Yu6uaTMvdTbQD/Sx9egEn9Z+Kv6gBD/lAiu+TcFUDsc9S6wlXEJhuc+ube+MHZ+OVkSfGUkJ2HlJzUxzKReSGGX1/CS5BLlbNggFJUp1JrbhY85Ef2c69ouziB7JKDuN5VptYtLTrMrHyZbft/o/8JYBo/rLYonqVuQ4EEZ6qjEQgXVhEVozI8kHY9Qypn+kg3rnSU0uf6nUskENWBYbVxFu1NLUm4brcby2h6v6GlGF9o+J23+CUdvzQ7IXdQoH2PhJ/3XpH3ScVCbxeVMBE3Eolmsy/+TYuH0iW794mpgbAwSFh5A== 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=V2ScMz3RY8NAKOCOPAVrkP25jUT1CdRZzOqasGeCviY=; b=ChiaJ9ESroNrxnzpUUp6StB2CXO1K7mgi/h2axFKgcL0mjWoUWP6szO5rD53VGkgT+1eukH0qTkQBs3rYGXG/74knSquTZ2cjXkOG/1X9deCkCnD2FULHlwHhI88eNax1FK8aDZN5zwWDGym9izWxk40eeKoMHSJhGenWnMlqXLIUa0bHY2vBJAUt2qR/RNTG5JsDoRNhofnqtu5bNwrbMvmnW+F3Y0YjJIjW8aVRk1Ro7Tq2pa0/wfwaQVTlu60qzXzr9zPhQxsPCksJhGCrwZW7gaPYQYItxIESUMNgVfYa8Pp3T/0q5xLeDfS+/irnMuYjMsZW9f0MJnBCUZMYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from DM6PR15MB3545.namprd15.prod.outlook.com (2603:10b6:5:1f6::27) by BLAPR15MB3746.namprd15.prod.outlook.com (2603:10b6:208:27e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.21; Fri, 10 Feb 2023 16:46:13 +0000 Received: from DM6PR15MB3545.namprd15.prod.outlook.com ([fe80::c5e6:712b:9f50:b51d]) by DM6PR15MB3545.namprd15.prod.outlook.com ([fe80::c5e6:712b:9f50:b51d%3]) with mapi id 15.20.6086.021; Fri, 10 Feb 2023 16:46:13 +0000 From: Aditya Kamath1 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" CC: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Topic: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Index: AQHY6DximDPpCqTL9kGyFvcEZokFBq4jlIiAgBFljYeAAA2HgIAIORaygAMrdQCACMPAdYADi8KAgAAbf+aAABUYgIAADhDtgAjHItiAAgYnAIACq/WKgAVsGwCABC6K8oAAZcYAgAq8WQ+AADoMgIAFnB/fgAUxEICABkBkK4AWHiQAgAFvY+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1IACBimAgAL6kLSAAAcDtw== Date: Fri, 10 Feb 2023 16:46:13 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR15MB3545:EE_|BLAPR15MB3746:EE_ x-ms-office365-filtering-correlation-id: e85e765c-fca6-42f0-52c1-08db0b865225 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UeQ2ucva5i12WCNNeFrJ02B9axMzvaHn2FALKNqVux860JB3nQQOVHukBfo3vK8tKFAxo6FczeEMA9UueroWumlNPs4GONVc4YP5HMdC7jOiI3u0Z89DBdLB5/PTrP6MTWaIHPsXL04LbBn2hK7hFmGmIZQBarANrsLkAcTPi76YN049U3bdwC2ovG1Vm2nqNkCRGU4+xOwtR7/bdjBX5+/VP0xus7VtFy1A1CvvJkMlB29bka0rnia/BrBtv5rxSK6JYYmQ8GzIbe1kVaREeTq/3uMvAZlK7Nn8IQTCkmzjHWSXqn0LgjCPg8Y4AVBGyvv/FgBnzOy9mu0ccbhGo877XnMqcDC7C9qQFNSUdNaMKpRGq2VH0p+Pj+6c2crpx2aUuO68bXhkFkbVo3MoSKnh1vz7EOyBXKt10kLF6vvSFct6arWdb+Jc4MbtoVk7jgZQpNWPnknjKKGruvZTVD9MRKYOcxuXXhKkyaazfR9zh/etFKhxXBE/h6jsfEFF2QKO4LJLqLLCWt0OkieXqsV9Ry3z4iOKL+v1gkgC+cqd+Aa1g2DPwxZ9pXXPxGc4ev05Kov3peV6uL1VmBax3acRlQChThU7yqColjXDpXcLQ4p3/PflfdhUr2iuUhR/XbhGpN7it2prVkvPNwSY8ChMlUHjD2aBNzS3yd2H2ZKzEgmdx2bJZF2Le9Z+lN61/WJKwdw7mqrzZjXoipaayA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR15MB3545.namprd15.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(136003)(39860400002)(396003)(346002)(366004)(376002)(451199018)(86362001)(33656002)(38070700005)(99936003)(122000001)(38100700002)(52536014)(66556008)(64756008)(66476007)(66946007)(66446008)(41300700001)(8936002)(316002)(110136005)(8676002)(4326008)(76116006)(91956017)(5660300002)(55016003)(30864003)(83380400001)(2906002)(478600001)(71200400001)(7696005)(186003)(2940100002)(53546011)(6506007)(9686003)(19627405001)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?LFfUS1AvEPgSFqNfnrjnQEc6kn3VzmI/AtcFNM8iuxkLJBYGWSDuPVHEbr63?= =?us-ascii?Q?Prami4a/b4MDTomhddw4OpQ6zZ1F2WryGp+wT6px2pET9RztloEbG3gh/r6F?= =?us-ascii?Q?CKCuCoi6do7ZWnRqOewlpTtLwHRBQg2llVBAnQYA0VQkJCJWpuMMSfiSgF1p?= =?us-ascii?Q?IioiUwWOFwq1kEMYWteGMHfQgf+T9LeEYlp1HEqMpKQqIxAfoSsPdD3q/v19?= =?us-ascii?Q?CaaMdlN8f6CT8ivBEclVGS7Fw/BO11E+0l5vPqyoQq6Gs9FS5njW/a0+GoVC?= =?us-ascii?Q?6qiQfYH/Q3MMvGxfu+SEsSUWCLX6deg61Ar0i8Lpn8TBbYV4Y0ccqJYRaz5a?= =?us-ascii?Q?hMshXM922Od/NhfJE2GVR3BnW743IBzym9psfUsnBDDVFa1sXuimol+Jmm8U?= =?us-ascii?Q?F29m1RkT3tLES3ZKa3MW/DDqPQiG3alERf8K35gjUsDwm3SnL9PYTRq7kxiZ?= =?us-ascii?Q?nowoLBEsYyfEFtw7SHWBIfnVEdwoaze5pVqoeJFg4Fk6bNflSyQCk8luuATj?= =?us-ascii?Q?MS/Xd2JZXyGVl1rfI49PTQ7/nF7CIoTPWeVUzfJ/zjNS/WbqEUBKnX+ICscf?= =?us-ascii?Q?6FVMyQ7CO52R5ylzKCKc+RdFiy6RxvjdI3b3rrdRRnLnTNQTnBV+U5hRgdtQ?= =?us-ascii?Q?9AXHRs5VF7jYBsLxzT36WQVCqMW/Dt8HlS7+2V4+M80LJM96s4YVYcw5d1Zr?= =?us-ascii?Q?rIY4RoaQaIx1LZdNuobNsHlHG5bJBUXeG4iOQSkQAuywYdLqnxrsiBntU0HQ?= =?us-ascii?Q?VEMRoVguGNMt7UBgAjNZvF4ZHd1Zq0ThmywfhC9vkao/yUG0bkLZmD9r8OyH?= =?us-ascii?Q?lXARVEU2xiT8v9ctJZuZ9vfc+s2hHxOrOtdjGF+f2vtyfDHB1db2Py+5kjEC?= =?us-ascii?Q?N2WUU+pMljIApuEsYpRgZpo02LsSUslkmiCey9lw7NeXqc7u46XM5YMFPYPp?= =?us-ascii?Q?DWHUKuISI/FtG+iYOuPJBBQD2XhDFVB7+oplzp8Ih5ggKedVU/GV0cnDmIZL?= =?us-ascii?Q?xvpKaoI1yTcGjoltFsvRagcR2d+fUmAKAv6KHlJUaiIKERJlAFNetAxjn6wK?= =?us-ascii?Q?eblSVF8nYMpoKhld5HZZHqo6DobBRS2tUxzNqA+GBPIr3iZC5Fn7ZXFhdZfs?= =?us-ascii?Q?3LitWBE3fFpyTVo/JaYFW6EWJUXrdY3FBUiDsrTBJYa+K2EDSzs0EBD8n+8b?= =?us-ascii?Q?J5vD5Q5uefxofhM0O1l2Ky7mLte6Kz/ILNgsRblaG2DQzCuk9ORGdH7ouk0m?= =?us-ascii?Q?ncWd8FN0PcSs2G//Cmk0cxYyOtcjUkO+gc7+HTbEiKeqpdeuh83zTwlB7qIB?= =?us-ascii?Q?rMLWq6ttcmymtzoennbC9yn1zFUfLtlYKbSMZgzFBEX2lKd7TnDh6x4VNHwc?= =?us-ascii?Q?UbRUqCw3lrKYjqQeriqKg03KHvZpZVwyeLs+qVHcfgFXsQYcYfztuFE5wuAx?= =?us-ascii?Q?5/myikCYAJd+uJ01zCMl60qwS406FgMA20D1cT0vC6H7jLfynvjl/mw1EeCL?= =?us-ascii?Q?c8WqMPLeFlPlfr7KqApgEB4b5QfE0EhPTlbGdkBbmb8n96X2LjwhE2dQTp0Z?= =?us-ascii?Q?39Q1qglnCKTgWGTNyysNfvrYQpnr/H7oHp5uSDLpBAEElfbuw0z4tKRdWc/y?= =?us-ascii?Q?PIm9vrB1sIGyRgUpKJEtdOUK+M9iyDiiTo9A7/nyJiup?= Content-Type: multipart/mixed; boundary="_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_" MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR15MB3545.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e85e765c-fca6-42f0-52c1-08db0b865225 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Feb 2023 16:46:13.4289 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KEPYvvTcEh75L14fWTn2vRVJMInv/L7t4jyMijIpopjdOsHug7+MsZsThX0N5VZMLx5htOab3juhhnB/jy5kiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR15MB3746 X-Proofpoint-GUID: gnhWf7VZsWLCMcj7fLCN5vwTPIaYIo5_ X-Proofpoint-ORIG-GUID: gnhWf7VZsWLCMcj7fLCN5vwTPIaYIo5_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-10_11,2023-02-09_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 mlxlogscore=999 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 mlxscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302100138 X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,MANY_SPAN_IN_TEXT,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_KAM_HTML_FONT_INVALID autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_ Content-Type: multipart/alternative; boundary="_000_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_" --_000_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community, Please find attached the patch. {See: 0001-Fix-multi-thread-debug-bug-in-AI= X.patch} The previous email could not get to the community mailing list as it had a = size constraint. So, the bug is fixed, and outputs are the same as pasted below in this emai= l. In the patch commit message I have provided specific and detailed explainat= ion of every change as much as possible. So honestly there was a bug left to fix in the previous email of the patch = while we followed the child in particular. I figured it out as I was testin= g more deeply. Kindly see section "Solution Part 1: - " in the patch commit= message where I have explained the same. Kindly suggest me for changes if needed. Otherwise kindly let me know if th= is is ready for commit. >Now if the application is >theraded and we only pass ptid_t (user_current_pid) to switch_to_thread () >it will crash as main thread looks different or is ptid_t (pid, 0, tid). > This part I don't quite understand yet - how/why does it crash? Kindly check the section "Solution Part 2: - " of the patch, where I have e= xplained this. >Similarly, I agree that everything may currently "work" without >adding the equivalent change to pdc_write_memory, but most likely >this is simply because that callback may just not be used very much. Yes, I agree. We have the changed user_current_pid variable to thread so t= hat we always switch in the right context. Kindly let me know if it is alri= ght and any changes are necessary here. >Can you come up with a >message that maybe starts out with the high-level change >and goes from there into the specific >details.... Thanks! Sure, so this patch has it. Kindly suggest me if we can do this better. Have a nice day ahead. Thanks and regards, Aditya. ---------------------------------------------------------------------------= ----- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------------------------------- Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15335754)] [New inferior 3 (process 8061404)] I am parent I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary =46rom To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 30671243, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 34406781, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 36307315, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15335754 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 8061404 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 15335754] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15335754)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ----------------------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? =46rom To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Aditya Kamath1 Sent: 10 February 2023 22:03 To: Ulrich Weigand ; simark@simark.ca ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Hi Ulrich, Tom and community, Please find attached the patch. {See: 0001-Fix-multi-thread-debug-bug-in-AI= X.patch} Also find attached a document that I have proposed as a commit message. {Se= e: Fix Multi Thread debug fix for AIX.pdf}.. This same document is used in = the commit message of this patch. So the bug is fixed and test cases run alright. Kindly check the sample out= put of the same pasted below this email. In the document I have provided specific and detailed explaination of every= change as much as possible. So honestly there was a bug left to fix in the previous email of the patch = while we followed the child in particular. I figured it out as I was testin= g more deeply. Kindly see section "Solution Part 1: - " where I have explai= ned the same. Kindly suggest me for changes if needed. Otherwise kindly let me know if th= is is ready for commit. >Previously we used switch_to_thread ().. Now if the application is >theraded and we only pass ptid_t (user_current_pid) to switch_to_thread () >it will crash as main thread looks different or is ptid_t (pid, 0, tid). > This part I don't quite understand yet - how/why does it crash? Kindly check "Solution Part 2: - " of the document, where I have explained = this. >Similarly, I agree that everything may currently "work" without >adding the equivalent change to pdc_write_memory, but most likely >this is simply because that callback may just not be used very much. Yes, I agree. We have the changed user_current_pid variable to thread so t= hat we always switch in the right context. Kindly let me know if it is alri= ght and any changes are necessary here. >Can you come up with a >message that maybe starts out with the high-level change >(along the lines of "update aix-thread.c to handle threads in >multiple inferiors"), and goes from there into the specific >details (aix_thread_variables structure, handling only a >single inferior per sync_threadlists invocation, solib fixes >for multiple inferiors, ...)? Thanks! Sure, so the pdf attached in this email has it. Kindly suggest me if we can= do this better. Have a nice day ahead. Thanks and regards, Aditya. ---------------------------------------------------------------------------= ----- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------------------------------- Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15335754)] [New inferior 3 (process 8061404)] I am parent I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary =46rom To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 30671243, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 34406781, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 36307315, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15335754 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 8061404 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 15335754] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15335754)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ----------------------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? =46rom To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Ulrich Weigand Sent: 09 February 2023 00:14 To: simark@simark.ca ; Aditya Kamath1 ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Aditya Kamath1 wrote: >>This seems unrelated to the rest of the changes at first glance. >>Why is this necessary? > >So, when we need to be in the right context when we read memory. Before >coming into the target wait, we switch_to_no_thread () due to which our >inferior_ptid is set to null. Our target_memory needs the correct >inferior_ptid. Also, in case we don't have a ptid_t (pid) and the >application is threaded we need the inferior_ptid to be set correctly >like shown in the patch. Understood. >Previously we used switch_to_thread ().. Now if the application is >theraded and we only pass ptid_t (user_current_pid) to switch_to_thread () >it will crash as main thread looks different or is ptid_t (pid, 0, tid). This part I don't quite understand yet - how/why does it crash? >>By comparison, the Linux version of this in proc-service.c also >>switches the current inferior and address space: > > scoped_restore_current_inferior restore_inferior; > > set_current_inferior (ph->thread->inf); > > scoped_restore_current_program_space restore_current_progspace; > > set_current_program_space (ph->thread->inf->pspace); > > scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_pt= id); > > inferior_ptid =3D ph->thread->ptid; >> so we should probably do the same for consistency. >So, kindly allow me to disagree with you on this. What is happening is in >inferior.c in do_target_wait1 () we call switch_to_inferior_no_thread ().. [snip] >Here we already set the correct current inferior and program space to >the same thing as that if we set in pdc_read_memory like linux. >So, it does not make any difference to add the changes like linux does Well, it does look like if you entered the callback in this particular context, the inferior may have already been set up correctly. However, in theory the callback could also be called in different contexts, and just as a precaution it would be preferable to have it always work correctly. The semantics of the callback is to read memory of a particular process as identified via the pthdb_user_t argument, and we should write the routine so that it always does what's needed to implement that semantics correctly. >Secondly, things work if we do not do the same for pdc_write_memory. >I have not seen anything not work. So, I don't think it is good to >add it there. What say?? Similarly, I agree that everything may currently "work" without adding the equivalent change to pdc_write_memory, but most likely this is simply because that callback may just not be used very much. But as a precaution, and to accommodate potential future changes e.g. in the libpthdebug.a library, if would be preferable to implement the semantics correctly. (Also, it just looks surprising to see the read and write implementation differ when there is no apparent reason why that should be the case.) >>This looks unnecessarily complicated. Isn't this just > > *g++ =3D tp; > >This I have changed. The code now looks like: >+ for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) >+ { >+ *g =3D tp; >+ *g++; >+ } Which is weird, as *g++ dereferences g for no reason. This should simply be: for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) *g++ =3D tp; >As far as the check gptid.is_pid () is concerned, I will suggest we >keep it there. If cmp_result is > 0 and we have a main process swap >to create a thread. Rest is same in the loop. The reason being handling >pi and gi variables becomes complex otherwise. When this swap happens, >we need to increment both pi and gi.. Because we have taken care of the >main threads in both pthread library and GDB. And this for loop is >executed only once. So, the first event is main process being >pthreaded. Once the swap happens pi and gi become one and since >gcount =3D pcount =3D 1 we exit the for loop. Thread addition events comes >after this. Hmm, handling the initial switch of a single PID-only thread to the PID/TID-style ptid_t separately before still seems a bit clearer to me. But in the end your proposed code looks correct now so I'd be fine with it as is, if you prefer. Except for the few things mentioned above, this now looks ready to be committed to me. However, I'm not sure the commit message fully describes the latest version of the patch, after we've gone through all those iterations ... Can you come up with a message that maybe starts out with the high-level change (along the lines of "update aix-thread.c to handle threads in multiple inferiors"), and goes from there into the specific details (aix_thread_variables structure, handling only a single inferior per sync_threadlists invocation, solib fixes for multiple inferiors, ...)? Thanks! Bye, Ulrich --_000_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_-- --_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_ Content-Type: application/octet-stream; name="0001-Fix-multi-thread-debug-bug-in-AIX.patch" Content-Description: 0001-Fix-multi-thread-debug-bug-in-AIX.patch Content-Disposition: attachment; filename="0001-Fix-multi-thread-debug-bug-in-AIX.patch"; size=44777; creation-date="Fri, 10 Feb 2023 16:42:50 GMT"; modification-date="Fri, 10 Feb 2023 16:43:48 GMT" Content-Transfer-Encoding: base64 RnJvbSBhZTJmNDgxMmQ1Y2Y1NjFhYzI0YmJkNTFjZmRhYTUzMmM3M2VhOTAw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFk aGFyIEthbWF0aCA8QWRpdHlhLkthbWF0aDFAaWJtLmNvbT4KRGF0ZTogRnJp LCAxMCBGZWIgMjAyMyAwOTozNjoxMSAtMDYwMApTdWJqZWN0OiBbUEFUQ0hd IEZpeCBNdWx0aSBUaHJlYWQgZGVidWcgZml4IGZvciBBSVgKTUlNRS1WZXJz aW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVU Ri04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBidWc6 LSBJbiB0aGUgcmVjZW50IGNvbW1pdCA5OGVkMjRmYjM1ZDg5ZWIyMDE3OWVk ZjZjMTJmNTk5YzdhOWUyMjhlIHRoZXJlIGlzIGEgY2hhbmdlIGluIGFpeC10 aHJlYWQuYyBmaWxlIHRoYXQgY2hhbmdlcyDigKjigKgKCnN0YXRpY19jYXN0 PGFpeF90aHJlYWRfaW5mbyAqPiBpbiBnZGIgdG8gZ2RiOjpjaGVja2VkX3N0 YXRpY19jYXN0PGFpeF90aHJlYWRfaW5mbyAqPuKAqOKAqAoKQUlYIGZvbGtz IHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiB0aHVzIHdpbGwgbm90IGJlIGFi bGUgdG8gZGVidWcgbXVsdGkgdGhyZWFkIHByb2dyYW1zIGFzIGEgcmVzdWx0 IG9mIGl0LiDigKjigKhUaGUgZXJyb3IgaW4gQUlYIGlzIGFzIGZvbGxvd3M6 IC0g4oCo4oCoaW50ZXJuYWwgZXJyb3I6IGNoZWNrZWRfc3RhdGljX2Nhc3Q6 IEFzc2VydGlvbiBgcmVzdWx0ISA9IG51bGxwdHInIGZhaWxlZC4KClRoZSBy b290IGNhdXNlIG9mIHRoZSBpc3N1ZTotICBUaGUgcHJpdmF0ZSBkYXRhIHdh cyBub3Qgc2V0IGZvciB0aGUgZmlyc3QgdGhyZWFkIG9yIHRoZSBtYWluIHRo cmVhZCBvZiBhIHByb2Nlc3MuIEluIEFJWCB3aGVuIHdlIHJ1biBhbiDigJxp bmZvIHRocmVhZHPigJ0gY29tbWFuZCwgd2Ugc2hvd2VkIG1haW4gcHJvY2Vz cyBhcyDigJxwcm9jZXNzIDxwaWQ+4oCdIHdpdGhvdXQgcHJpdmF0ZSBkYXRh IHNldCBhbmQgYWRkZWQgYSBuZXcgdGhyZWFkIFRocmVhZDxUaWQ+IHJlcHJl c2VudGluZyB0aGUgc2FtZSB3aXRoIHByaXZhdGUgc2V0LiBXaGVuIHdlIGl0 ZXJhdGVfb3Zlcl90aHJlYWRzICgpIHdlIGNhbGwgZ2V0X2FpeF90aHJlYWRf aW5mbyAoKS4gVGhpcyBsZWFkcyB0byB0aGUgY3Jhc2ggYXMgd2UgaGFkIHRo ZSBtYWluIHByb2Nlc3MgdGhyZWFkIOKAnHByb2Nlc3MgPHBpZD7igJ0gd2l0 aCBubyBwcml2YXRlIGRhdGEuIEhlbmNlIHRoZSBjaGVja2VkIHN0YXRpYyBj YXN0IHdpbGwgbm90IGFsbG93IHVzIHRvIGRlYnVnIGFueSBmdXJ0aGVyIHdo aWNoIGlzIHJpZ2h0bHkgc28gYXMgd2UgaGFkIGEgdGhyZWFkIHdpdGggbm8g cHJpdmF0ZSBkYXRhLgoKV2hhdCBzaG91bGQgYmUgdGhlIGZpeDogLSBSZW1v dmluZyB0aGUgbWFpbiBwcm9jZXNzIHRocmVhZCBpLmUuIOKAnHByb2Nlc3Mg PHBpZD4g4oCcd2FzIHRoZSBmaXJzdCBwcm9wb3NlZCBzb2x1dGlvbiBhcyB0 aGUg4oCcVGhyZWFkIDx0aWQ+4oCdIHJlcHJlc2VudGluZyB0aGUgc2FtZSBh bHJlYWR5IGV4aXN0cyB3aXRoIHByaXZhdGUgZGF0YSBzZXQuIFRoaXMgd2Fz IGhhcHBlbmluZyBpbiB0aGUgc3luY190aHJlYWRsaXN0cyAoKSBjb2RlIG9m IEFJWC4KClNvbHV0aW9uIFBhcnQgMTogLQoKV2h5IHRoZSBjaGFuZ2U/CgpU aGUgZGVsZXRlX3RocmVhZCAoKSB3aXRoIHRoZSBjbXBfcmVzdWx0ID4gMCBi bG9jayBvZiB0aGUgZm9yIGxvb3AgaW4gdGhlIHN5bmNfdGhyZWFkbGlzdHMg KCkgZnVuY3Rpb24gd2hpY2ggYXBwbGllcyB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRoZSBwdGhyZWFkIGFuZCBHREIgdGhyZWFkbGlzdCwgd2lsbCBmYWls IHRvIGRlbGV0ZSB0aGUgbWFpbiBwcm9jZXNzIHRocmVhZC4gVGhlIHJlYXNv biBpcyB0aGF0IGl0IOKAnHByb2Nlc3MgPHBpZD7igJ0gaXMgdGhlIGN1cnJl bnQgcHJvY2VzcyBhbmQgdGh1cyBHREIgY29yZSB3aWxsIG5vdCBkZWxldGUg aXQgZGVzcGl0ZSB3ZSBhcmUgY2FsbGluZyBpdC4gSGVuY2UgZXZlbiBpZiB3 ZSBhZGQgdGhlIOKAnHRocmVhZCA8dGlkPuKAnSByZXByZXNlbnRpbmcgdGhl IHNhbWUg4oCccHJvY2VzcyA8cGlkPuKAnSBpbiB0aGUgbmV4dCBpdGVyYXRp b24gb2YgdGhlIGZvciBsb29wIHdlIHdpbGwgbm90IGJlIHN1Y2Nlc3NmdWwu CgpIZW5jZSB0aGlzIGZvcmNlcyB1cyB0byBjaGFuZ2UgdGhlIG1haW4gcHJv Y2VzcyB0aHJlYWQg4oCccHJvY2VzcyA8cGlkPuKAnSB0byDigJx0aHJlYWQg PHRpZD7igJ0gdmlhIHRoZSB0aHJlYWRfY2hhbmdlX3B0aWQgKCkgYW5kIHRo ZSBwcml2YXRlIGRhdGEgc2V0LiBUaGVzZSBjaGFuZ2VzIGNhbiBiZSBzZWVu IGluIHRoZSBzeW5jX3RocmVhZGxpc3RzICgpIHBhcnQuCgpIb3dldmVyLCB3 ZSBhbHNvIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYmVmb3JlIHdlIHRo aW5rIHRoaXMgd2lsbCB3b3JrLCBvdXIgbGlicHRocmVhZCBsaWJyYXJ5IGlz IG9ubHkgcmVhZHkgd2hlbiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBpbiB0 aGUgd2FpdCAoKSBvZiBhaXgtdGhyZWFkLmMgaXMgc2F0aXNmaWVkLgoKLyog Q2hlY2sgd2hldGhlciBsaWJwdGhkZWJ1ZyBtaWdodCBiZSByZWFkeSB0byBi ZSBpbml0aWFsaXplZC4gICovCiAgaWYgKCFkYXRhLT5wZF9hY3RpdmUgJiYg c3RhdHVzLT5raW5kICgpID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECiAg ICAgICYmIHN0YXR1cy0+c2lnICgpID09IEdEQl9TSUdOQUxfVFJBUCkKClVu dGlsIHRoZW4gY2hhbmdpbmcgdGhlIOKAnHByb2Nlc3MgPHBpZD7igJ0gdG8g 4oCcdGhyZWFkIDx0aWQ+4oCdIGlzIGluY29ycmVjdC4gRXZlbiB0aG91Z2gg dGhlIHNlc3Npb24gaXMgcmVhZHkgYW5kIGluaXRhbGlzZWQgdmlhIHBkX2Vu YWJsZSAoKSBhbmQgcGRfYWN0aXZhdGUgKCkgZnVuY3Rpb25zIHJlc3BlY3Rp dmVseS4gVGhlcmZvcmUgdGhpcyBtYWRlIHVzIHRvIGtlZXAgYSB2YXJpYWJs ZSBwdGhkZWJ1Z3JlYWR5IGluIGFsbCBmdW5jdGlvbnMgdGhhdCBsZWFkIHRv IHN5bmNfdGhyZWFkbGlzdHMgKCkgc28gdGhhdCB3ZSBjaGFuZ2UgdGhlIHBy b2Nlc3MgdGhyZWFkIHRvIGEgdGhyZWFkIHdpdGggcHJpdmF0ZSBkYXRhIG9u bHkgd2hlbiBsaWJwdGhkZWJ1ZyBpcyBpbml0aWFsaXNlZCBmb3IgYSBwYXJ0 aWN1bGFyIHByb2Nlc3MuCgpUaGUgZmlyc3QgaWYgY29uZGl0aW9uIGJlbG93 IHRoaXMgcGFyYWdyYXBoIGNoYW5nZSBpbiB0aGUgc3luY190aHJlYWRsaXN0 cyAoKSBhcyBzaG93biBiZWxvdyBtZWFucyB0aGUgcHRocmVhZCBkZWJ1ZyBs aWJyYXJ5IGlzIG5vdCBpbnRpYWxpc2VkLiBUaGlzIGlzIGp1c3QgdG8gc2V0 IHByaXYgdG8gbWFpbiBwcm9jZXNzIHRocmVhZC4KCmlmIChnYnVmWzBdLT5w dGlkLmlzX3BpZCAoKSAmJiAhcHRoZGVidWdyZWFkeSkKICAgIHsKICAgICAg YWl4X3RocmVhZF9pbmZvICpwcml2ID0gbmV3IGFpeF90aHJlYWRfaW5mbzsK ICAgICAgdHAtPnByaXYucmVzZXQgKHByaXYpOwogICAgfQoKVGhlIHNlY29u ZCBpZiBjb25kaXRpb24gYmVsb3cgdGhpcyBwYXJhZ3JhcGggY2hhbmdlIGlz IGZvciBjaGFuZ2luZyDigJxwcm9jZXNzIDxwaWQ+4oCdIHRvIOKAnHRocmVh ZCA8dGlkPuKAnSBhcyB0aGUgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIGlu dGlhbGlzZWQuCgppZiAoZ3B0aWQuaXNfcGlkICgpICYmIHB0aGRlYnVncmVh ZHkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRocmVh ZF9jaGFuZ2VfcHRpZCAocHJvY190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CiAg ICAgICAgICAgICAgICAgIGFpeF90aHJlYWRfaW5mbyAqcHJpdiA9IG5ldyBh aXhfdGhyZWFkX2luZm87CiAgICAgICAgICAgICAgICAgIHByaXYtPnBkdGlk ID0gcGJ1ZltwaV0ucGR0aWQ7CiAgICAgICAgICAgICAgICAgIHByaXYtPnRp ZCA9IHBidWZbcGldLnRpZDsKICAgICAgICAgICAgICAgICAgdHAtPnByaXYu cmVzZXQgKHByaXYpOwogICAgICAgICAgICAgICAgICBnaSsrOwogICAgICAg ICAgICAgICAgICBwaSsrOwogICAgICAgICAgICAgICAgfQoKRmFpbGluZyB0 byBkbyBzbyBsZWFkcyB1cyB0byB0d28gcHJvYmxlbXMuIE9uZSB3aGlsZSB3 ZSBmZXRjaF9yZWdpc3RlcnMgKCkgb3VyIHJlZ2NhY2hlLT4gcHRpZCB0aG91 Z2ggY2hhbmdlZCB0byBwdGlkX3QgKHBpZCwgMCwgdGlkKSB3aWxsIG5vdCBi ZSBhYmxlIHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhIGluIGEgY2FzZSB3aGVy ZSB3ZSBzd2l0Y2ggdG8gYSBjaGlsZCBwcm9jZXNzIGZyb20gdGhlIHBhcmVu dCBwcm9jZXNzIHZpYSDigJxpbmZlcmlvciAy4oCdIGNvbW1hbmQgbGVhZGlu ZyB0byB0aGUgY3Jhc2ggdGhhdCBwcml2YXRlIGRhdGEgd2FzIG5vdCBzZXQg Zm9yIGEgdGhyZWFkLiBCZWNhdXNlIHdlIGluY29ycmVjdGx5IGNoYW5nZWQg dGhlIOKAnHByb2Nlc3MgPHBpZD7igJ0gdG8g4oCcdGhyZWFkIDx0aWQ+4oCd IGJlZm9yZSB0aGUgcHJvY2VzcyBpdHNlbGYgY291bGQgcmFpc2UgYSB0cmFw IGFuZCB0ZWxsIHRoZSBkZWJ1Z2dlciB3ZSBhcmUgbm93IHJlYWR5IHRvIGRl YnVnIHRocmVhZHMuCgpFeGFtcGxlIG9mIHRoZSBjcmFzaDotCihnZGIpIHNl dCBkZXRhY2gtb24tZm9yayBvZmYKKGdkYikgcgpTdGFydGluZyBwcm9ncmFt OgpbTmV3IFRocmVhZCAyNThdCltOZXcgVGhyZWFkIDUxNV0KW05ldyBpbmZl cmlvciAyIChwcm9jZXNzIDIxNjI3Mzg2KV0KSSBhbSBwYXJlbnQKW05ldyBp bmZlcmlvciAzIChwcm9jZXNzIDkzNzIwNjQpXQpJIGFtIHBhcmVudApeQwpU aHJlYWQgMS4xIHJlY2VpdmVkIHNpZ25hbCBTSUdJTlQsIEludGVycnVwdC4K W1N3aXRjaGluZyB0byBUaHJlYWQgMV0KMHhkMDU5NWZiMCBpbiBfcF9uc2xl ZXAgKCkgZnJvbSAvdXNyL2xpYi9saWJwdGhyZWFkLmEoc2hyX3hwZzUubykK KGdkYikgaW5mZXJpb3IgMgpbU3dpdGNoaW5nIHRvIGluZmVyaW9yIDIgW3By b2Nlc3MgMjE2MjczODZdICgvaG9tZSAvZ2RiX3Rlc3RzL3VsdGltYXRlLW11 bHRpLXRocmVhZC1mb3JrKV0KW1N3aXRjaGluZyB0byB0aHJlYWQgMi4xIChU aHJlYWQgNTE1KV0KKGdkYikgYwpDb250aW51aW5nLgouLy4uL2dkYnN1cHBv cnQvZ2RiLWNoZWNrZWQtc3RhdGljLWNhc3QuaDo1ODogaW50ZXJuYWwtZXJy b3I6IGNoZWNrZWRfc3RhdGljX2Nhc3Q6IEFzc2VydGlvbiBgcmVzdWx0ICE9 IG51bGxwdHInIGZhaWxlZC4KClRoZSBwcm9jZXNzIHN0YWNrIG9mIHRoZSBj cmFzaCBkdWUgdG8gdGhlIGlzIGFzIGJlbG93OiAtCgoweDAwMDAwMDAxMDA1 OWVmNjAgIGFpeF90aHJlYWRfaW5mbyogZ2RiOjpjaGVja2VkX3N0YXRpY19j YXN0PGFpeF90aHJlYWRfaW5mbyosIHByaXZhdGVfdGhyZWFkX2luZm8+KHBy aXZhdGVfdGhyZWFkX2luZm8qKSgweDApICsgMHg3YwoweDAwMDAwMDAxMDA1 OTZlYTAgIGdldF9haXhfdGhyZWFkX2luZm8odGhyZWFkX2luZm8qKSgweDAp ICsgMHgzNAoweDAwMDAwMDAxMDA1OWI3NzggIGFpeF90aHJlYWRfdGFyZ2V0 OjpmZXRjaF9yZWdpc3RlcnMocmVnY2FjaGUqLCBpbnQpKDB4MTEwMDFmM2Y4 LCAweDExMDdjNTAzMCwgMHg0MDAwMDAwMDAwKSArIDB4ZjgKMHgwMDAwMDAw MTAwMzY3NWYwICB0YXJnZXRfZmV0Y2hfcmVnaXN0ZXJzKHJlZ2NhY2hlKiwg aW50KSgweDExMDdjNTAzMCwgMHg0MGUwZGRmMDBkKSArIDB4NmMKMHgwMDAw MDAwMTAwNTgxN2MwICByZWdjYWNoZTo6cmF3X3VwZGF0ZShpbnQpKDB4MTEw N2M1MDMwLCAweDQwMTAwMWYzZjgpICsgMHg5NAoweDAwMDAwMDAxMDA1ODE5 MDQgIHJlYWRhYmxlX3JlZ2NhY2hlOjpyYXdfcmVhZChpbnQsIHVuc2lnbmVk IGNoYXIqKSgweDExMDdjNTAzMCwgMHg0MDAwMDAwMjAzLCAweGZmZmZmZmZm ZmZmZWJjMCkgKyAweDhjCjB4MDAwMDAwMDEwMDU4MWY1NCAgcmVhZGFibGVf cmVnY2FjaGU6OmNvb2tlZF9yZWFkKGludCwgdW5zaWduZWQgY2hhciopKDB4 MTEwN2M1MDMwLCAweDQwZmZmZmViOTAsIDB4ZmZmZmZmZmZmZmZlYmMwKSAr IDB4ZWMKMHgwMDAwMDAwMTAwZGFiYTEwICByZWdpc3Rlcl9zdGF0dXMgcmVh ZGFibGVfcmVnY2FjaGU6OmNvb2tlZF9yZWFkPHVuc2lnbmVkIGxvbmcsIHZv aWQ+KGludCwgdW5zaWduZWQgbG9uZyopKDB4MTEwN2M1MDMwLCAweDQwZmZm ZmVjNTAsIDB4ZmZmZmZmZmZmZmZlZDEwKSArIDB4ZDQKMHgwMDAwMDAwMTAw NTgyNmEwICByZWdjYWNoZV9jb29rZWRfcmVhZF91bnNpZ25lZChyZWdjYWNo ZSosIGludCwgdW5zaWduZWQgbG9uZyopKDB4MTEwN2M1MDMwLCAweDQwZmZm ZmVjZDAsIDB4ZmZmZmZmZmZmZmZlZDEwKSArIDB4NzAKMHgwMDAwMDAwMTAw NTg0ZTJjICByZWdjYWNoZV9yZWFkX3BjKHJlZ2NhY2hlKikoMHgxMTA3YzUw MzApICsgMHhhNAoweDAwMDAwMDAxMDAzODc2MTQgIGhhbmRsZV9zaWduYWxf c3RvcChleGVjdXRpb25fY29udHJvbF9zdGF0ZSopKDB4ZmZmZmZmZmZmZmZm M2E4KSArIDB4MTU4CjB4MDAwMDAwMDEwMDM4NjRlNAoKU2Vjb25kbHkgaW4g YSBjYXNlIHdoZXJlLCBpZiB3ZSBmb2xsb3cgdGhlIGNoaWxkIGluc3RlYWQg b2YgdGhlIHBhcmVudCBhbmQgd2UgZW5kIHVwIGNoYW5naW5nIG91ciDigJxw cm9jZXNzIDxwaWQ+4oCdIHRvIOKAnHRocmVhZCA8dGlkPuKAnSBiZWZvcmUg dGhlIHByb2Nlc3MgaXRzZWxmIHJhaXNlcyBhIHRyYXAgYW5kIHRlbGxzIHRo ZSBkZWJ1Z2dlciDigJxJIGFtIHJlYWR5IGZvciB0aHJlYWRz4oCdLCB0aGVu IHdoZW4gd2Ugc3dpdGNoX3RvX3RocmVhZCBpbiB0aGUgZm9sbG93X2Zvcmsg KCkgd2UgZW5kIHVwIG5vdCBmaW5kaW5nIHRoZSDigJxwcm9jZXNzIDxwaWQ+ 4oCdIGFuZCB0aHVzIGxlYWRpbmcgdG8gYW4gYXNzZXJ0aW9uIGZhaWx1cmUg YXMgc2hvd24gYmVsb3cgYW5kIHJpZ2h0bHkgc28sIGJlY2F1c2Ugd2UgY2hh bmdlZCB0aHJlYWRzIHdpdGhvdXQgdGhlIGxpYnJhcnkgYmVpbmcgaW5pdGlh bGlzZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBmb2xsb3dfZm9yayAoKSBp cyBjYWxsZWQsIGFuZCB3ZSBzd2l0Y2ggdG8gdGhlIGNoaWxkIHRocmVhZCB0 aGVyZS4KCihnZGIpIHNldCBkZXRhY2gtb24tZm9yayBvZmYKKGdkYikgc2V0 IGZvbGxvdy1mb3JrLW1vZGUgY2hpbGQKKGdkYikgcgpTdGFydGluZyBwcm9n cmFtOgpbTmV3IFRocmVhZCAyNThdCltOZXcgVGhyZWFkIDUxNV0KW0F0dGFj aGluZyBhZnRlciBUaHJlYWQgNTE1IGZvcmsgdG8gY2hpbGQgcHJvY2VzcyAx ODgwOTA5OF0KW05ldyBpbmZlcmlvciAyIChwcm9jZXNzIDE4ODA5MDk4KV0K dGhyZWFkLmM6MTMzNzogaW50ZXJuYWwtZXJyb3I6IHN3aXRjaF90b190aHJl YWQ6IEFzc2VydGlvbiBgdGhyICE9IE5VTEwnIGZhaWxlZC4KClRoZSBwcm9j ZXNzIHN0YWNrIGlzIGFzIGZvbGxvd3M6LQoweDAwMDAwMDAxMDAwMzY1OTAg IGludGVybmFsX2Vycm9yX2xvYyhjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNv bnN0KiwgLi4uKSgweDEwMTkyYmE3MCwgMHg1MzkwMDAwMDAwMCwgMHgxMDE5 MmI5NzApICsgMHg1OAoweDAwMDAwMDAxMDA2MTk5MTggIHN3aXRjaF90b190 aHJlYWQodGhyZWFkX2luZm8qKSgweDApICsgMHg0OAoweDAwMDAwMDAxMDAz NzYzNWMgIGZvbGxvd19mb3JrKCkoKSArIDB4NGM4CjB4MDAwMDAwMDEwMDM4 NWFmOCAgaGFuZGxlX2luZmVyaW9yX2V2ZW50KGV4ZWN1dGlvbl9jb250cm9s X3N0YXRlKikoMHhmZmZmZmZmZmZmZmYzYTgpICsgMHhkYTgKMHgwMDAwMDAw MTAwMzgwOWQwICBmZXRjaF9pbmZlcmlvcl9ldmVudCgpKCkgKyAweDJmOAow eDAwMDAwMDAxMDA3MTlhMGMgIGluZmVyaW9yX2V2ZW50X2hhbmRsZXIoaW5m ZXJpb3JfZXZlbnRfdHlwZSkoMHgxMDIwN2E1MCkgKyAweDM4CjB4MDAwMDAw MDEwMDM5MjI4YyAgaW5mcnVuX2FzeW5jX2luZmVyaW9yX2V2ZW50X2hhbmRs ZXIodm9pZCopKDB4MCkgKyAweDMwCjB4MDAwMDAwMDEwMDY3MWQxOCAgY2hl Y2tfYXN5bmNfZXZlbnRfaGFuZGxlcnMoKSgpICsgMHg5NAoweDAwMDAwMDAx MDA2NmUzMmMgIGdkYl9kb19vbmVfZXZlbnQoaW50KSgweGZmZmZmZmZmZmZm ZmY4NDApICsgMHhiNAoweDAwMDAwMDAxMDAwMDFkY2MgIHN0YXJ0X2V2ZW50 X2xvb3AoKSgpICsgMHgyOAoweDAwMDAwMDAxMDAwMDFmZDQgIGNhcHR1cmVk X2NvbW1hbmRfbG9vcCgpKCkgKyAweDU4CjB4MDAwMDAwMDEwMDAwNDE0YyAg Y2FwdHVyZWRfbWFpbih2b2lkKikoMHhmZmZmZmZmZmZmZmZhNjApICsgMHgy YwoweDAwMDAwMDAxMDAwMDQyMjAgIGdkYl9tYWluKGNhcHR1cmVkX21haW5f YXJncyopKDB4ZmZmZmZmZmZmZmZmYTYwKSArIDB4MjAKClNvLCB0aGUgY2hh bmdlcyBpbiB0aGUgc3luY190aHJlYWRsaXN0cyAoKSB3aXRoIHBhcmFtZXRl ciBhbmQgdGhlIGZvciBsb29wIGp1c3RpZmllcyB0aGUgc2FtZS4KCkFsc28s IHdlIG5vdyBkbyBub3QgdXNlIGl0ZXJhdGVfb3Zlcl90aHJlYWRzIHRvIGNv dW50IG91ciBHREIgdGhyZWFkcy4gV2UgaW5zdGVhZCBkbyBpdCB2aWEgZm9y ICh0aHJlYWRfaW5mbyAqdHAgOiBhbGxfdGhyZWFkcyAocHJvY190YXJnZXQs IHB0aWRfdCAocGlkKSkpIGlubGluZS4KClNvbHV0aW9uIFBhcnQgMjogLQoK U2luY2Ugd2Ugc3dpdGNoX3RvX25vX3RocmVhZCBiZWZvcmUgYSB3YWl0ICgp LCBvbiBhbiBldmVudCBvZiBhIHRocmVhZCBkZXRlY3Rpb24gb3IgYW55IG90 aGVyIGV2ZW50IHdoaWNoIG1ha2VzIHVzIHVzZSB0aGUgdGhyZWFkIGNhbGwt YmFja3MsIHdlIG5lZWQgdG8gYmUgaW4gdGhlIHJpZ2h0IGNvbnRleHQgd2hp bGUgd2UgcmVhZCBhbmQgd3JpdGUgZGF0YSBmb3IgdGhyZWFkcy4gVGhhdCBp cyB3aHkgd2Ugc3dpdGNoIG91ciBpbmZlcmlvcl9wdGlkLCBjdXJyZW50X2lu ZmVyaW9yIGFuZCBwcm9ncmFtIHNwYWNlIGluIHBkY19yZWFkX2RhdGEgKCkg YW5kIHBkY193cml0ZV9kYXRhIGFuZCBub3cgcGRjX3dyaXRlX2RhdGEuCgpT byB3aHkgZGlkIHdlIG1ha2UgdGhpcyBjaGFuZ2UKLSAgICBpZiAodXNlcl9j dXJyZW50X3BpZCAhPSAwKQotICAgICAgc3dpdGNoX3RvX3RocmVhZCAoY3Vy cmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCi0gICAgICAg ICAgICAgICAgICAgICAgIHB0aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOwog aW4gcGRjX3JlYWRfZGF0YSBhbmQgY2hhbmdlIG91ciB1c2VyIHZhcmlhYmxl IHdoaWNoIHdhcyB0aGUgcHJvY2VzcyBJRCB0byBhIHRocmVhZD8gV2FzbuKA mXQgaXQgYWxyZWFkeSBkb2luZyB0aGUgam9iPwoKQ29uc2lkZXIgYW4gZXZl bnQgd2hlcmUgdGhlIHBhcmVudCBwcm9jZXNzIGlzIHRocmVhZGVkLCBhbmQg d2UgaGF2ZSBhIGZvcmsgKCkuIFdoZW4gd2UgZG8gYSBwZF91cGRhdGUgKCkg YWZ0ZXIgdGhlIGJlbmVhdGgtPndhaXQgKCkgaW4gdGhyZWFkIHdhaXQgKCkg d2UgY2FsbCBzeW5jX3RocmVhZGxpc3RzICgpIGFzIHdlbGwuIE92ZXIgdGhl cmUgd2UgY2FsbCBwdGhkYl9wdGhyZWFkIChkYXRhLT5wZF9zZXNzaW9uLCAm cGR0aWQsIGNtZCk7CgpUaGlzIG5vdyB3aWxsIHVzZSB0aGUgcHRpZF90ICh1 c2VyX2N1cnJlbnRfcGlkKSB0byBzd2l0Y2ggdGhlIHRocmVhZCAoKS4gSG93 ZXZlciwgb3VyIHBhcmVudCBwcm9jZXNzIG9yIG1haW4gdGhyZWFkIG9mIGl0 LCBpcyB0aHJlYWRlZCBpLmUgaXMgcHRpZF90ICh1c2VyX2N1cnJlbnRfcGlk LCAwLCB0aWQpLiBIZW5jZSwgd2Ugd2lsbCBjcmFzaCB3aXRoIGFuIGFzc2Vy dGlvbiBmYWlsdXJlIHRoYXQgdGhyZWFkIHB0aWRfdCAodXNlcl9jdXJyZW50 X3BpZAopIGhhcyBub3QgYmVlbiBmb3VuZC4KCkluIG9yZGVyIHRvIGF2b2lk IHRoZSBzYW1lLCB3ZSBub3cgcGFzcyB0aGUgdGhyZWFkIGRpcmVjdGx5LiBT bywgb24gYW55IGV2ZW50IGFmdGVyIHRoZSBtYWluIHByb2Nlc3MgbG9va3Mg bGlrZSBhIG1haW4gdGhyZWFkLCB0aGVyZSB3aWxsIGJlIG5vIGNvbmZ1c2lv biBvbiB3aGljaCB0aHJlYWQgc3BhY2Ugb3IgaW5mZXJpb3JfcHRpZCBvciBw cm9ncmFtIHNwYWNlIHRvIHN3aXRjaCwgZXNwZWNpYWxseSB3aGVuIGEgcHJv Y2VzcyBpcyBtdWx0aS10aHJlYWRlZC4KClNvbHV0aW9uIFBhcnQgMzogLSBJ biBBSVggd2UgdXNlIGEgbG90IG9mIHZhcmlhYmxlcyBmb3IgZGlmZmVyZW50 IHB1cnBvc2VzIGxpa2UgcGRfYWN0aXZlLCBwZF9hYmxlLCBhcmNoNjQsIHBk X2Jya19hZGRyIGFuZCBwZF9zZXNzaW9uLiBUaGVzZSB2YXJpYWJsZXMgYXJl IHVuaXF1ZSBwZXIgaW5mZXJpb3IuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAg dGhlbSBpbiBhIG1hcCA8aW5mZXJpb3IsIHN0cnVjdHVyZT4gd2hlcmUgc3Ry dWN0dXJlIGNhbiBob2xkIGFsbCB0aGVzZSB2YXJpYWJsZXMgcGVyIGluZmVy aW9yLiBUaGlzIGlzIHdoZXJlIHdlIHVzZSB0aGUgaW5idWlsdCBHREIgcmVn aXN0cnkgZm9yIGV2ZXJ5IGluZmVyaW9yLiBUaGlzIGNoYW5nZSBleGlzdHMg aW4gdGhpcyBwYXRjaC4KClNvbHV0aW9uIFBhcnQgNDogLQoKV2UgZmlndXJl ZCBvdXQgdGhhdCB0aGUgdG9wIHRhcmdldCBmb3IgYSBuZXcgaW5mZXJpb3Ig Ym9ybiBhZnRlciB0aGUgbWFpbiBpbmZlcmlvciB3YXMgaW5jb3JyZWN0IHBv c3QgdGhlIHByb2Nlc3MgYmVpbmcgdGhyZWFkZWQuCgpUaGUgcm9vdCBjYXVz ZSB3YXMgdGhhdCB0aGUgc2hhcmVkIGxpYnJhcnkgd2FzIG5vdCBiZWluZyBs b2FkZWQgZm9yIG5ldyBwcm9jZXNzLiBUaGUgcmVhc29uIGJlaW5nIHdlIGNo YW5nZSBvdXIgc2hhcmVkIGxpYnJhcnkgZmlsZSBuYW1lIGluIHRoZSBCRkQg cmVnaXN0cnkgZnJvbSBtZW1iZXIgbmFtZSB0byBwYXRoKG1lbWJlcl9uYW1l KS4KCkhlbmNlIHRoZSBjaGFuZ2VzIGluIHNvbGliLWFpeCB0YWtlcyBjYXJl IG9mIHRoZSBuZXcgcGF0dGVybiBzbyB0aGF0IHRoZSBzaGFyZWQgbGlicmFy eSBjYW4gYmUgbG9hZGVkIGNvcnJlY3RseSBmb3IgZXZlcnkgbmV3IGluZmVy aW9yIGJvcm4gYXMgd2VsbCB2aWEgcGF0dGVybiBtYXRjaGluZyB0aGUg4oCY KOKAmGNoYXJhY3RlciBhbmQgY2hlY2tpbmcgaWYgdGhlIG1lbWJlcl9uYW1l IGV4aXN0cyBhZnRlciB0aGF0IGluIHRoZSBuZXcgcGF0dGVybiByZWdpc3Rl cmVkIGluIHRoZSBCRkQgcmVnaXN0cnkgYXMgc2hvd24gaW4gc29saWItYWl4 LmMgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLgoKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KClRoZXNlIDQgc29sdXRpb24gcGFydHMgdG9nZXRoZXIgZml4ZXMg dGhlIGJ1Zy4KLS0tCiBnZGIvYWl4LXRocmVhZC5jIHwgNDMxICsrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBnZGIv c29saWItYWl4LmMgIHwgIDE0ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDI3MSBp bnNlcnRpb25zKCspLCAxNzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv Z2RiL2FpeC10aHJlYWQuYyBiL2dkYi9haXgtdGhyZWFkLmMKaW5kZXggZTU1 NmMxNTM1NzYuLmY4NmQ5NDI5ZjcxIDEwMDY0NAotLS0gYS9nZGIvYWl4LXRo cmVhZC5jCisrKyBiL2dkYi9haXgtdGhyZWFkLmMKQEAgLTY4LDEwICs2OCw2 IEBAIHN0YXRpYyBib29sIGRlYnVnX2FpeF90aHJlYWQ7CiAjZGVmaW5lIHB0 aGRiX3RpZF90CXRpZF90CiAjZW5kaWYKIAotLyogUmV0dXJuIHdoZXRoZXIg dG8gdHJlYXQgUElEIGFzIGEgZGVidWdnYWJsZSB0aHJlYWQgaWQuICAqLwot Ci0jZGVmaW5lIFBEX1RJRChwdGlkKQkocGRfYWN0aXZlICYmIHB0aWQudGlk ICgpICE9IDApCi0KIC8qIFN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWVzIHJl dHVybmVkIGJ5IHB0aGRiIGNhbGxiYWNrcy4gICovCiAKICNkZWZpbmUgUERD X1NVQ0NFU1MJUFRIREJfU1VDQ0VTUwpAQCAtMTQ0LDM4ICsxNDAsMjAgQEAg Y2xhc3MgYWl4X3RocmVhZF90YXJnZXQgZmluYWwgOiBwdWJsaWMgdGFyZ2V0 X29wcwogCiBzdGF0aWMgYWl4X3RocmVhZF90YXJnZXQgYWl4X3RocmVhZF9v cHM7CiAKLS8qIEFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgbGlicHRo cmVhZCB3aWxsIGNhbGwgd2hlbiBsaWJwdGhkZWJ1ZwotICAgaXMgcmVhZHkg dG8gYmUgaW5pdGlhbGl6ZWQuICAqLwotCi1zdGF0aWMgQ09SRV9BRERSIHBk X2Jya19hZGRyOwotCi0vKiBXaGV0aGVyIHRoZSBjdXJyZW50IGFwcGxpY2F0 aW9uIGlzIGRlYnVnZ2FibGUgYnkgcHRoZGIuICAqLwotCi1zdGF0aWMgaW50 IHBkX2FibGUgPSAwOwotCi0vKiBXaGV0aGVyIGEgdGhyZWFkZWQgYXBwbGlj YXRpb24gaXMgYmVpbmcgZGVidWdnZWQuICAqLwotCi1zdGF0aWMgaW50IHBk X2FjdGl2ZSA9IDA7Ci0KLS8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXJjaGl0 ZWN0dXJlIGlzIDY0LWJpdC4gIAotICAgT25seSB2YWxpZCB3aGVuIHBkX2Fi bGUgaXMgdHJ1ZS4gICovCi0KLXN0YXRpYyBpbnQgYXJjaDY0OwotCiAvKiBG b3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcHRoZGIgY2FsbGJhY2tzLiAgKi8K IAotc3RhdGljIGludCBwZGNfc3ltYm9sX2FkZHJzIChwdGhkYl91c2VyX3Qs IHB0aGRiX3N5bWJvbF90ICosIGludCk7Ci1zdGF0aWMgaW50IHBkY19yZWFk X2RhdGEgKHB0aGRiX3VzZXJfdCwgdm9pZCAqLCBwdGhkYl9hZGRyX3QsIHNp emVfdCk7Ci1zdGF0aWMgaW50IHBkY193cml0ZV9kYXRhIChwdGhkYl91c2Vy X3QsIHZvaWQgKiwgcHRoZGJfYWRkcl90LCBzaXplX3QpOwotc3RhdGljIGlu dCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNlciwgcHRoZGJfdGlk X3QgdGlkLAorc3RhdGljIGludCBwZGNfc3ltYm9sX2FkZHJzICh0aHJlYWRf aW5mbyosIHB0aGRiX3N5bWJvbF90ICosIGludCk7CitzdGF0aWMgaW50IHBk Y19yZWFkX2RhdGEgKHRocmVhZF9pbmZvKiwgdm9pZCAqLCBwdGhkYl9hZGRy X3QsIHNpemVfdCk7CitzdGF0aWMgaW50IHBkY193cml0ZV9kYXRhICh0aHJl YWRfaW5mbyosIHZvaWQgKiwgcHRoZGJfYWRkcl90LCBzaXplX3QpOworc3Rh dGljIGludCBwZGNfcmVhZF9yZWdzICh0aHJlYWRfaW5mbyogdXNlciwgcHRo ZGJfdGlkX3QgdGlkLAogCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgZmxhZ3Ms IAogCQkJICBwdGhkYl9jb250ZXh0X3QgKmNvbnRleHQpOwotc3RhdGljIGlu dCBwZGNfd3JpdGVfcmVncyAocHRoZGJfdXNlcl90IHVzZXIsIHB0aGRiX3Rp ZF90IHRpZCwKK3N0YXRpYyBpbnQgcGRjX3dyaXRlX3JlZ3MgKHRocmVhZF9p bmZvKiB1c2VyLCBwdGhkYl90aWRfdCB0aWQsCiAJCQkgICB1bnNpZ25lZCBs b25nIGxvbmcgZmxhZ3MsIAogCQkJICAgcHRoZGJfY29udGV4dF90ICpjb250 ZXh0KTsKLXN0YXRpYyBpbnQgcGRjX2FsbG9jIChwdGhkYl91c2VyX3QsIHNp emVfdCwgdm9pZCAqKik7Ci1zdGF0aWMgaW50IHBkY19yZWFsbG9jIChwdGhk Yl91c2VyX3QsIHZvaWQgKiwgc2l6ZV90LCB2b2lkICoqKTsKLXN0YXRpYyBp bnQgcGRjX2RlYWxsb2MgKHB0aGRiX3VzZXJfdCwgdm9pZCAqKTsKK3N0YXRp YyBpbnQgcGRjX2FsbG9jICh0aHJlYWRfaW5mbyosIHNpemVfdCwgdm9pZCAq Kik7CitzdGF0aWMgaW50IHBkY19yZWFsbG9jICh0aHJlYWRfaW5mbyosIHZv aWQgKiwgc2l6ZV90LCB2b2lkICoqKTsKK3N0YXRpYyBpbnQgcGRjX2RlYWxs b2MgKHRocmVhZF9pbmZvKiwgdm9pZCAqKTsKIAogLyogcHRoZGIgY2FsbGJh Y2tzLiAgKi8KIApAQCAtMTkxLDkgKzE2OSw2NiBAQCBzdGF0aWMgcHRoZGJf Y2FsbGJhY2tzX3QgcGRfY2FsbGJhY2tzID0gewogICBOVUxMCiB9OwogCi0v KiBDdXJyZW50IHB0aGRiIHNlc3Npb24uICAqLworLyogQWl4IHZhcmlhYmxl IHN0cnVjdHVyZS4gICovCitzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMg Cit7CisgIC8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gaXMg ZGVidWdnYWJsZSBieSBwdGhkYi4gICovCisgIGludCBwZF9hYmxlOworCisg IC8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBk ZWJ1Z2dlZC4gICovCisgIGludCBwZF9hY3RpdmU7CisKKyAgLyogQ3VycmVu dCBwdGhkYiBzZXNzaW9uLiAgKi8KKyAgcHRoZGJfc2Vzc2lvbl90IHBkX3Nl c3Npb247CisKKyAgLyogQWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBs aWJwdGhyZWFkIHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVnCisgICBpcyBy ZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCisgIENPUkVfQUREUiBwZF9i cmtfYWRkcjsKKworICAvKiBXaGV0aGVyIHRoZSBjdXJyZW50IGFyY2hpdGVj dHVyZSBpcyA2NC1iaXQuCisgICBPbmx5IHZhbGlkIHdoZW4gcGRfYWJsZSBp cyB0cnVlLiAgKi8KKyAgaW50IGFyY2g2NDsKK307CisKKy8qIEtleSB0byBv dXIgcGVyLWluZmVyaW9yIGRhdGEuICAqLworc3RhdGljIGNvbnN0IHJlZ2lz dHJ5PGluZmVyaW9yPjo6a2V5PGFpeF90aHJlYWRfdmFyaWFibGVzPgorICBh aXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGU7CisKKy8qIEZ1bmN0aW9uIHRv IEdldCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyBkYXRhLiAgKi8KK3N0YXRpYyBz dHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMqCitnZXRfYWl4X3RocmVhZF92 YXJpYWJsZXNfZGF0YSAoc3RydWN0IGluZmVyaW9yICppbmYpCit7CisgIGlm IChpbmYgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBzdHJ1Y3Qg YWl4X3RocmVhZF92YXJpYWJsZXMqIGRhdGE7CisKKyAgZGF0YSA9IGFpeF90 aHJlYWRfdmFyaWFibGVzX2hhbmRsZS5nZXQgKGluZik7CisgIGlmIChkYXRh ID09IE5VTEwpCisgICAgZGF0YSA9IGFpeF90aHJlYWRfdmFyaWFibGVzX2hh bmRsZS5lbXBsYWNlIChpbmYpOworCisgIHJldHVybiBkYXRhOworfQorCisv KiBIZWxwZXIgdG8gZ2V0IGRhdGEgZm9yIHB0aWQgaW4gYSBmdW5jdGlvbi4g ICovCiAKLXN0YXRpYyBwdGhkYl9zZXNzaW9uX3QgcGRfc2Vzc2lvbjsKK3N0 YXRpYyBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMqCitnZXRfdGhyZWFk X2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkX3QgcHRpZCkKK3sKKyAgaW5m ZXJpb3IgKmluZiA9IGZpbmRfaW5mZXJpb3JfcHRpZCAoY3VycmVudF9pbmZl cmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCisJCQkJCXB0aWQpOworICBy ZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKGluZik7Cit9 CisKKy8qIEhlbHBlciB0byBnZXQgZGF0YSBmb3IgcGlkIGluIGEgZnVuY3Rp b24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz KgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkIChwaWRfdCBwaWQp Cit7CisgIGluZmVyaW9yICppbmYgPSBmaW5kX2luZmVyaW9yX3BpZCAoY3Vy cmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkKTsKKyAgcmV0 dXJuIGdldF9haXhfdGhyZWFkX3ZhcmlhYmxlc19kYXRhIChpbmYpOworfQog CiAvKiBSZXR1cm4gYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgcHRo ZGVidWcgZnVuY3Rpb24gcmV0dXJuCiAgICBTVEFUVVMuICAqLwpAQCAtMzE4 LDcgKzM1Myw3IEBAIHBpZF90b19wcmMgKHB0aWRfdCAqcHRpZHApCiAgIHB0 aWRfdCBwdGlkOwogCiAgIHB0aWQgPSAqcHRpZHA7Ci0gIGlmIChQRF9USUQg KHB0aWQpKQorICBpZiAocHRpZC50aWQgKCkgIT0gMCkKICAgICAqcHRpZHAg PSBwdGlkX3QgKHB0aWQucGlkICgpKTsKIH0KIApAQCAtMzI2LDcgKzM2MSw3 IEBAIHBpZF90b19wcmMgKHB0aWRfdCAqcHRpZHApCiAgICB0aGUgYWRkcmVz cyBvZiBTWU1CT0xTWzxpPl0ubmFtZS4gICovCiAKIHN0YXRpYyBpbnQKLXBk Y19zeW1ib2xfYWRkcnMgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlk LCBwdGhkYl9zeW1ib2xfdCAqc3ltYm9scywgaW50IGNvdW50KQorcGRjX3N5 bWJvbF9hZGRycyAodGhyZWFkX2luZm8gKnVzZXJfY3VycmVudF90aHJlYWQs IHB0aGRiX3N5bWJvbF90ICpzeW1ib2xzLCBpbnQgY291bnQpCiB7CiAgIHN0 cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBtczsKICAgaW50IGk7CkBAIC0z MzQsOCArMzY5LDggQEAgcGRjX3N5bWJvbF9hZGRycyAocHRoZGJfdXNlcl90 IHVzZXJfY3VycmVudF9waWQsIHB0aGRiX3N5bWJvbF90ICpzeW1ib2xzLCBp bnQgY28KIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLAotCQkicGRjX3N5bWJvbF9hZGRycyAodXNlcl9j dXJyZW50X3BpZCA9ICVsZCwgc3ltYm9scyA9IDB4JWx4LCBjb3VudCA9ICVk KVxuIiwKLQkJdXNlcl9jdXJyZW50X3BpZCwgKGxvbmcpIHN5bWJvbHMsIGNv dW50KTsKKwkJInBkY19zeW1ib2xfYWRkcnMgKHVzZXJfY3VycmVudF9waWQg PSAlZCwgc3ltYm9scyA9IDB4JWx4LCBjb3VudCA9ICVkKVxuIiwKKwkJdXNl cl9jdXJyZW50X3RocmVhZC0+cHRpZC5waWQgKCksIChsb25nKSBzeW1ib2xz LCBjb3VudCk7CiAKICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAg ICAgewpAQCAtMzczLDcgKzQwOCw3IEBAIHBkY19zeW1ib2xfYWRkcnMgKHB0 aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCBwdGhkYl9zeW1ib2xfdCAq c3ltYm9scywgaW50IGNvCiAgICBJZiBzdWNjZXNzZnVsIHJldHVybiAwLCBl bHNlIG5vbi16ZXJvIGlzIHJldHVybmVkLiAgKi8KIAogc3RhdGljIGludAot cGRjX3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQs CitwZGNfcmVhZF9yZWdzICh0aHJlYWRfaW5mbyAqdXNlcl9jdXJyZW50X3Ro cmVhZCwKIAkgICAgICAgcHRoZGJfdGlkX3QgdGlkLAogCSAgICAgICB1bnNp Z25lZCBsb25nIGxvbmcgZmxhZ3MsCiAJICAgICAgIHB0aGRiX2NvbnRleHRf dCAqY29udGV4dCkKQEAgLTM4OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9yZWdz IChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwKICAgZG91YmxlIGZw cnNbcHBjX251bV9mcHJzXTsKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0Owog ICBzdHJ1Y3QgcHRzcHJzIHNwcnMzMjsKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0 YV9oZWxwZXJfZm9yX3BpZCAodXNlcl9jdXJyZW50X3RocmVhZC0+cHRpZC5w aWQgKCkpOwogICAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2Ri X3ByaW50ZiAoZ2RiX3N0ZGxvZywgInBkY19yZWFkX3JlZ3MgdGlkPSVkIGZs YWdzPSVzXG4iLApAQCAtMzk3LDcgKzQzNSw3IEBAIHBkY19yZWFkX3JlZ3Mg KHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAvKiBHZW5lcmFs LXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJf RkxBR19HUFJTKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBp ZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlmICghcHRyYWNlNjRhaXggKFBU VF9SRUFEX0dQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGdw cnM2NCwgMCwgTlVMTCkpCkBAIC00MjMsNyArNDYxLDcgQEAgcGRjX3JlYWRf cmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIFNw ZWNpYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQ VEhEQl9GTEFHX1NQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAg ICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgaWYgKCFwdHJhY2U2NGFp eCAoUFRUX1JFQURfU1BSUywgdGlkLCAKIAkJCSAgICAodW5zaWduZWQgbG9u ZykgJnNwcnM2NCwgMCwgTlVMTCkpCkBAIC00NDUsNyArNDgzLDcgQEAgcGRj X3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAg ICBJZiBzdWNjZXNzZnVsIHJldHVybiAwLCBlbHNlIG5vbi16ZXJvIGlzIHJl dHVybmVkLiAgKi8KIAogc3RhdGljIGludAotcGRjX3dyaXRlX3JlZ3MgKHB0 aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAorcGRjX3dyaXRlX3JlZ3Mg KHRocmVhZF9pbmZvICp1c2VyX2N1cnJlbnRfdGhyZWFkLAogCQlwdGhkYl90 aWRfdCB0aWQsCiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBmbGFncywKIAkJcHRo ZGJfY29udGV4dF90ICpjb250ZXh0KQpAQCAtNDU2LDYgKzQ5NCwxMCBAQCBw ZGNfd3JpdGVfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQs CiAgICAgIHRoaXMgaXMgbmVlZGVkLCBJIGhhdmUgaW1wbGVtZW50ZWQgd2hh dCBJIHRoaW5rIGl0IHNob3VsZCBkbywKICAgICAgaG93ZXZlciB0aGlzIGNv ZGUgaXMgdW50ZXN0ZWQuICAqLwogCisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zh cmlhYmxlcyAqZGF0YTsKKyAgCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFf aGVscGVyX2Zvcl9waWQgKHVzZXJfY3VycmVudF90aHJlYWQtPnB0aWQucGlk ICgpKTsKKwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLCAicGRjX3dyaXRlX3JlZ3MgdGlkPSVkIGZsYWdz PSVzXG4iLAogCQkoaW50KSB0aWQsIGhleF9zdHJpbmcgKGZsYWdzKSk7CkBA IC00NjMsNyArNTA1LDcgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJf dCB1c2VyX2N1cnJlbnRfcGlkLAogICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVn aXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxBR19HUFJTKQog ICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJj aDY0KQogCXB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BSUywgdGlkLCAKIAkJ ICAgICAodW5zaWduZWQgbG9uZykgY29udGV4dC0+Z3ByLCAwLCBOVUxMKTsK ICAgICAgIGVsc2UKQEAgLTQ3OSw3ICs1MjEsNyBAQCBwZGNfd3JpdGVfcmVn cyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIFNwZWNp YWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhE Ql9GTEFHX1NQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAg IGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgcHRyYWNlNjRhaXggKFBUVF9X UklURV9TUFJTLCB0aWQsIAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICZj b250ZXh0LT5tc3IsIDAsIE5VTEwpOwpAQCAtNDk1LDI3ICs1MzcsMzAgQEAg cGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlk LAogLyogcHRoZGIgY2FsbGJhY2s6IHJlYWQgTEVOIGJ5dGVzIGZyb20gcHJv Y2VzcyBBRERSIGludG8gQlVGLiAgKi8KIAogc3RhdGljIGludAotcGRjX3Jl YWRfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQg KmJ1ZiwKK3BkY19yZWFkX2RhdGEgKHRocmVhZF9pbmZvICp1c2VyX2N1cnJl bnRfdGhyZWFkLCB2b2lkICpidWYsCiAJICAgICAgIHB0aGRiX2FkZHJfdCBh ZGRyLCBzaXplX3QgbGVuKQogewogICBpbnQgc3RhdHVzLCByZXQ7CiAKICAg aWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0 ZGxvZywKLQkJInBkY19yZWFkX2RhdGEgKHVzZXJfY3VycmVudF9waWQgPSAl bGQsIGJ1ZiA9IDB4JWx4LCBhZGRyID0gJXMsIGxlbiA9ICVsZClcbiIsCi0J CXVzZXJfY3VycmVudF9waWQsIChsb25nKSBidWYsIGhleF9zdHJpbmcgKGFk ZHIpLCBsZW4pOworCQkicGRjX3JlYWRfZGF0YSAodXNlcl9jdXJyZW50X3Bp ZCA9ICVkLCBidWYgPSAweCVseCwgYWRkciA9ICVzLCBsZW4gPSAlbGQpXG4i LAorCQl1c2VyX2N1cnJlbnRfdGhyZWFkLT5wdGlkLnBpZCAoKSwgKGxvbmcp IGJ1ZiwgaGV4X3N0cmluZyAoYWRkciksIGxlbik7CiAKICAgLyogVGhpcyBp cyBuZWVkZWQgdG8gZWxpbWluYXRlIHRoZSBkZXBlbmRlbmN5IG9mIGN1cnJl bnQgdGhyZWFkCiAgICAgIHdoaWNoIGlzIG51bGwgc28gdGhhdCB0aHJlYWQg cmVhZHMgdGhlIGNvcnJlY3QgdGFyZ2V0IG1lbW9yeS4gICovCiAgIHsKLSAg ICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X3RocmVhZCByZXN0b3JlX2N1cnJl bnRfdGhyZWFkOworICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3Jf cHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsK ICAgICAvKiBCZWZvcmUgdGhlIGZpcnN0IGluZmVyaW9yIGlzIGFkZGVkLCB3 ZSBwYXNzIGluZmVyaW9yX3B0aWQucGlkICgpCiAgICAgICAgZnJvbSBwZF9l bmFibGUgKCkgd2hpY2ggaXMgMC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3dp dGNoIHRocmVhZHMKICAgICAgICBkdXJpbmcgZmlyc3QgaW5pdGlhbGlzYXRp b24uICBJbiB0aGUgcmVzdCBvZiB0aGUgY2FsbGJhY2tzIHRoZQogICAgICAg IGN1cnJlbnQgdGhyZWFkIG5lZWRzIHRvIGJlIGNvcnJlY3QuICAqLwotICAg IGlmICh1c2VyX2N1cnJlbnRfcGlkICE9IDApCi0gICAgICBzd2l0Y2hfdG9f dGhyZWFkIChjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAo KSwKLQkJCXB0aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOworICAgIGluZmVy aW9yX3B0aWQgPSB1c2VyX2N1cnJlbnRfdGhyZWFkLT5wdGlkOworICAgIHNj b3BlZF9yZXN0b3JlX2N1cnJlbnRfaW5mZXJpb3IgcmVzdG9yZV9pbmZlcmlv cjsKKyAgICBzZXRfY3VycmVudF9pbmZlcmlvciAodXNlcl9jdXJyZW50X3Ro cmVhZC0+aW5mKTsKKworICAgIHNjb3BlZF9yZXN0b3JlX2N1cnJlbnRfcHJv Z3JhbV9zcGFjZSByZXN0b3JlX2N1cnJlbnRfcHJvZ3NwYWNlOworICAgIHNl dF9jdXJyZW50X3Byb2dyYW1fc3BhY2UgKHVzZXJfY3VycmVudF90aHJlYWQt PmluZi0+cHNwYWNlKTsKICAgICBzdGF0dXMgPSB0YXJnZXRfcmVhZF9tZW1v cnkgKGFkZHIsIChnZGJfYnl0ZSAqKSBidWYsIGxlbik7CiAgIH0KICAgcmV0 ID0gc3RhdHVzID09IDAgPyBQRENfU1VDQ0VTUyA6IFBEQ19GQUlMVVJFOwpA QCAtNTI5LDE3ICs1NzQsMjcgQEAgcGRjX3JlYWRfZGF0YSAocHRoZGJfdXNl cl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKIC8qIHB0aGRiIGNh bGxiYWNrOiB3cml0ZSBMRU4gYnl0ZXMgZnJvbSBCVUYgdG8gcHJvY2VzcyBB RERSLiAgKi8KIAogc3RhdGljIGludAotcGRjX3dyaXRlX2RhdGEgKHB0aGRi X3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCB2b2lkICpidWYsCitwZGNfd3Jp dGVfZGF0YSAodGhyZWFkX2luZm8gKnVzZXJfY3VycmVudF90aHJlYWQsIHZv aWQgKmJ1ZiwKIAkJcHRoZGJfYWRkcl90IGFkZHIsIHNpemVfdCBsZW4pCiB7 CiAgIGludCBzdGF0dXMsIHJldDsKIAogICBpZiAoZGVidWdfYWl4X3RocmVh ZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotCQkicGRjX3dyaXRl X2RhdGEgKHVzZXJfY3VycmVudF9waWQgPSAlbGQsIGJ1ZiA9IDB4JWx4LCBh ZGRyID0gJXMsIGxlbiA9ICVsZClcbiIsCi0JCXVzZXJfY3VycmVudF9waWQs IChsb25nKSBidWYsIGhleF9zdHJpbmcgKGFkZHIpLCBsZW4pOworCQkicGRj X3dyaXRlX2RhdGEgKHVzZXJfY3VycmVudF9waWQgPSAlZCwgYnVmID0gMHgl bHgsIGFkZHIgPSAlcywgbGVuID0gJWxkKVxuIiwKKwkJdXNlcl9jdXJyZW50 X3RocmVhZC0+cHRpZC5waWQgKCksIChsb25nKSBidWYsIGhleF9zdHJpbmcg KGFkZHIpLCBsZW4pOworCisgIHsKKyAgICBzY29wZWRfcmVzdG9yZSBzYXZl X2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5mZXJp b3JfcHRpZCk7CisgICAgaW5mZXJpb3JfcHRpZCA9IHVzZXJfY3VycmVudF90 aHJlYWQtPnB0aWQ7CisgICAgc2NvcGVkX3Jlc3RvcmVfY3VycmVudF9pbmZl cmlvciByZXN0b3JlX2luZmVyaW9yOworICAgIHNldF9jdXJyZW50X2luZmVy aW9yICh1c2VyX2N1cnJlbnRfdGhyZWFkLT5pbmYpOworCisgICAgc2NvcGVk X3Jlc3RvcmVfY3VycmVudF9wcm9ncmFtX3NwYWNlIHJlc3RvcmVfY3VycmVu dF9wcm9nc3BhY2U7CisgICAgc2V0X2N1cnJlbnRfcHJvZ3JhbV9zcGFjZSAo dXNlcl9jdXJyZW50X3RocmVhZC0+aW5mLT5wc3BhY2UpOworICAgIHN0YXR1 cyA9IHRhcmdldF93cml0ZV9tZW1vcnkgKGFkZHIsIChnZGJfYnl0ZSAqKSBi dWYsIGxlbik7CisgIH0KIAotICBzdGF0dXMgPSB0YXJnZXRfd3JpdGVfbWVt b3J5IChhZGRyLCAoZ2RiX2J5dGUgKikgYnVmLCBsZW4pOwogICByZXQgPSBz dGF0dXMgPT0gMCA/IFBEQ19TVUNDRVNTIDogUERDX0ZBSUxVUkU7CiAKICAg aWYgKGRlYnVnX2FpeF90aHJlYWQpCkBAIC01NTIsMTIgKzYwNywxMiBAQCBw ZGNfd3JpdGVfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQs IHZvaWQgKmJ1ZiwKICAgIGluIEJVRlAuICAqLwogCiBzdGF0aWMgaW50Ci1w ZGNfYWxsb2MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCBzaXpl X3QgbGVuLCB2b2lkICoqYnVmcCkKK3BkY19hbGxvYyAodGhyZWFkX2luZm8g KnVzZXJfY3VycmVudF90aHJlYWQsIHNpemVfdCBsZW4sIHZvaWQgKipidWZw KQogewogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRm IChnZGJfc3RkbG9nLAotCQkicGRjX2FsbG9jICh1c2VyX2N1cnJlbnRfcGlk ID0gJWxkLCBsZW4gPSAlbGQsIGJ1ZnAgPSAweCVseClcbiIsCi0JCXVzZXJf Y3VycmVudF9waWQsIGxlbiwgKGxvbmcpIGJ1ZnApOworCQkicGRjX2FsbG9j ICh1c2VyX2N1cnJlbnRfcGlkID0gJWQsIGxlbiA9ICVsZCwgYnVmcCA9IDB4 JWx4KVxuIiwKKwkJdXNlcl9jdXJyZW50X3RocmVhZC0+cHRpZC5waWQgKCks IGxlbiwgKGxvbmcpIGJ1ZnApOwogICAqYnVmcCA9IHhtYWxsb2MgKGxlbik7 CiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdk Yl9zdGRsb2csIApAQCAtNTc0LDEyICs2MjksMTIgQEAgcGRjX2FsbG9jIChw dGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwgc2l6ZV90IGxlbiwgdm9p ZCAqKmJ1ZnApCiAgICBwb2ludGVyIHRvIHRoZSByZXN1bHQgaW4gQlVGUC4g ICovCiAKIHN0YXRpYyBpbnQKLXBkY19yZWFsbG9jIChwdGhkYl91c2VyX3Qg dXNlcl9jdXJyZW50X3BpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCB2b2lk ICoqYnVmcCkKK3BkY19yZWFsbG9jICh0aHJlYWRfaW5mbyAqdXNlcl9jdXJy ZW50X3RocmVhZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCB2b2lkICoqYnVm cCkKIHsKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50 ZiAoZ2RiX3N0ZGxvZywKLQkJInBkY19yZWFsbG9jICh1c2VyX2N1cnJlbnRf cGlkID0gJWxkLCBidWYgPSAweCVseCwgbGVuID0gJWxkLCBidWZwID0gMHgl bHgpXG4iLAotCQl1c2VyX2N1cnJlbnRfcGlkLCAobG9uZykgYnVmLCBsZW4s IChsb25nKSBidWZwKTsKKwkJInBkY19yZWFsbG9jICh1c2VyX2N1cnJlbnRf cGlkID0gJWQsIGJ1ZiA9IDB4JWx4LCBsZW4gPSAlbGQsIGJ1ZnAgPSAweCVs eClcbiIsCisJCXVzZXJfY3VycmVudF90aHJlYWQtPnB0aWQucGlkICgpLCAo bG9uZykgYnVmLCBsZW4sIChsb25nKSBidWZwKTsKICAgKmJ1ZnAgPSB4cmVh bGxvYyAoYnVmLCBsZW4pOwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAKQEAgLTU5MSwxMSArNjQ2LDEx IEBAIHBkY19yZWFsbG9jIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3Bp ZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCB2b2lkICoqYnVmcCkKICAgIHJl YWxsb2MgY2FsbGJhY2suICAqLwogCiBzdGF0aWMgaW50Ci1wZGNfZGVhbGxv YyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZikK K3BkY19kZWFsbG9jICh0aHJlYWRfaW5mbyAqdXNlcl9jdXJyZW50X3RocmVh ZCwgdm9pZCAqYnVmKQogewogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAKLQkJInBkY19mcmVlICh1c2Vy X2N1cnJlbnRfcGlkID0gJWxkLCBidWYgPSAweCVseClcbiIsIHVzZXJfY3Vy cmVudF9waWQsCisJCSJwZGNfZnJlZSAodXNlcl9jdXJyZW50X3BpZCA9ICVk LCBidWYgPSAweCVseClcbiIsIHVzZXJfY3VycmVudF90aHJlYWQtPnB0aWQu cGlkICgpLAogCQkobG9uZykgYnVmKTsKICAgeGZyZWUgKGJ1Zik7CiAgIHJl dHVybiBQRENfU1VDQ0VTUzsKQEAgLTYzOSwzOSArNjk0LDYgQEAgcGNtcCAo Y29uc3Qgdm9pZCAqcDF2LCBjb25zdCB2b2lkICpwMnYpCiAgIHJldHVybiBw MS0+cHRoaWQgPCBwMi0+cHRoaWQgPyAtMSA6IHAxLT5wdGhpZCA+IHAyLT5w dGhpZDsKIH0KIAotLyogaXRlcmF0ZV9vdmVyX3RocmVhZHMoKSBjYWxsYmFj ayBmb3IgY291bnRpbmcgR0RCIHRocmVhZHMuCi0KLSAgIERvIG5vdCBjb3Vu dCB0aGUgbWFpbiB0aHJlYWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMg bWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhyZWFkcyBwcm92aWRlZCBieSB0 aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2VzIG5vdCBp bmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxv d3MgdXMKLSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCi0KLXN0 YXRpYyBpbnQKLWdpdGVyX2NvdW50IChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRo cmVhZCwgdm9pZCAqY291bnRwKQotewotICBpZiAoUERfVElEICh0aHJlYWQt PnB0aWQpKQotICAgICgqKGludCAqKSBjb3VudHApKys7Ci0gIHJldHVybiAw OwotfQotCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZv ciBhY2N1bXVsYXRpbmcgR0RCIHRocmVhZCBwaWRzLgotCi0gICBEbyBub3Qg aW5jbHVkZSB0aGUgbWFpbiB0aHJlYWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4g IFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhyZWFkcyBwcm92aWRl ZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2Vz IG5vdCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1 cyBhbGxvd3MgdXMKLSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICov Ci0KLXN0YXRpYyBpbnQKLWdpdGVyX2FjY3VtIChzdHJ1Y3QgdGhyZWFkX2lu Zm8gKnRocmVhZCwgdm9pZCAqYnVmcCkKLXsKLSAgaWYgKFBEX1RJRCAodGhy ZWFkLT5wdGlkKSkKLSAgICB7Ci0gICAgICAqKihzdHJ1Y3QgdGhyZWFkX2lu Zm8gKioqKSBidWZwID0gdGhyZWFkOwotICAgICAgKCooc3RydWN0IHRocmVh ZF9pbmZvICoqKikgYnVmcCkrKzsKLSAgICB9Ci0gIHJldHVybiAwOwotfQot CiAvKiBwdGlkIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KIAogc3RhdGljIGlu dApAQCAtNzE5LDcgKzc0MSwxMCBAQCBnZXRfc2lnbmFsZWRfdGhyZWFkIChp bnQgcGlkKQogCQkgICAgc2l6ZW9mICh0aHJpbmYpLCAma3RpZCwgMSkgIT0g MSkKIAlicmVhazsKIAotICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcgPT0g U0lHVFJBUCkKKyAgICAgIC8qIFdlIGFsc28gbmVlZCB0byBrZWVwIGluIG1p bmQgVHJhcCBhbmQgaW50ZXJydXB0IG9yIGFueQorICAgICAgICAgc2lnbmFs IHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBwZF91cGRhdGUgKCkuICAq LworCisgICAgICBpZiAodGhyaW5mLnRpX2N1cnNpZykKIAlyZXR1cm4gdGhy aW5mLnRpX3RpZDsKICAgICB9CiAKQEAgLTc0MSw3ICs3NjYsNyBAQCBnZXRf c2lnbmFsZWRfdGhyZWFkIChpbnQgcGlkKQogICAgICAgIGhhdmUgZGlmZmlj dWx0eSB3aXRoIGNlcnRhaW4gY2FsbCBwYXR0ZXJucyAqLwogCiBzdGF0aWMg dm9pZAotc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKK3N5bmNfdGhyZWFk bGlzdHMgKHBpZF90IHBpZCwgaW50IHB0aGRlYnVncmVhZHkpCiB7CiAgIGlu dCBjbWQsIHN0YXR1czsKICAgaW50IHBjb3VudCwgcHNpemUsIHBpLCBnY291 bnQsIGdpOwpAQCAtNzUwLDYgKzc3NSwxMSBAQCBzeW5jX3RocmVhZGxpc3Rz IChpbnQgcGlkKQogICBwdGhkYl9wdGhyZWFkX3QgcGR0aWQ7CiAgIHB0aHJl YWRfdCBwdGhpZDsKICAgcHRoZGJfdGlkX3QgdGlkOworICBwcm9jZXNzX3N0 cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgICAgICAgICAgPSBjdXJy ZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKTsKKyAgdGhyZWFk X2luZm8gICp0cDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpk YXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlk IChwaWQpOwogCiAgIC8qIEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgbGlicHRo ZGVidWcgdGhyZWFkcyBzb3J0ZWQgYnkgcHRocmVhZCBpZC4gICovCiAKQEAg LTc1OSwxMSArNzg5LDExIEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQp CiAKICAgZm9yIChjbWQgPSBQVEhEQl9MSVNUX0ZJUlNUOzsgY21kID0gUFRI REJfTElTVF9ORVhUKQogICAgIHsKLSAgICAgIHN0YXR1cyA9IHB0aGRiX3B0 aHJlYWQgKHBkX3Nlc3Npb24sICZwZHRpZCwgY21kKTsKKyAgICAgIHN0YXR1 cyA9IHB0aGRiX3B0aHJlYWQgKGRhdGEtPnBkX3Nlc3Npb24sICZwZHRpZCwg Y21kKTsKICAgICAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUyB8fCBw ZHRpZCA9PSBQVEhEQl9JTlZBTElEX1BUSFJFQUQpCiAJYnJlYWs7CiAKLSAg ICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfcHRpZCAocGRfc2Vzc2lvbiwg cGR0aWQsICZwdGhpZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFk X3B0aWQgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAmcHRoaWQpOwogICAg ICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTIHx8IHB0aGlkID09IFBU SERCX0lOVkFMSURfUFRJRCkKIAljb250aW51ZTsKIApAQCAtNzgwLDcgKzgx MCw3IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAKICAgZm9yIChw aSA9IDA7IHBpIDwgcGNvdW50OyBwaSsrKQogICAgIHsKLSAgICAgIHN0YXR1 cyA9IHB0aGRiX3B0aHJlYWRfdGlkIChwZF9zZXNzaW9uLCBwYnVmW3BpXS5w ZHRpZCwgJnRpZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3Rp ZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGJ1ZltwaV0ucGR0aWQsICZ0aWQpOwog ICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogCXRpZCA9IFBU SERCX0lOVkFMSURfVElEOwogICAgICAgcGJ1ZltwaV0udGlkID0gdGlkOwpA QCAtNzkwLDEzICs4MjAsMzIgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBp ZCkKIAogICAvKiBBY2N1bXVsYXRlIGFuIGFycmF5IG9mIEdEQiB0aHJlYWRz IHNvcnRlZCBieSBwaWQuICAqLwogCisgIC8qIGdjb3VudCBpcyBHREIgdGhy ZWFkIGNvdW50IGFuZCBwY291bnQgaXMgcHRocmVhZGxpYiB0aHJlYWQgY291 bnQuICAqLworCiAgIGdjb3VudCA9IDA7Ci0gIGl0ZXJhdGVfb3Zlcl90aHJl YWRzIChnaXRlcl9jb3VudCwgJmdjb3VudCk7CisgIGZvciAodGhyZWFkX2lu Zm8gKnRwIDogYWxsX3RocmVhZHMgKHByb2NfdGFyZ2V0LCBwdGlkX3QgKHBp ZCkpKQorICAgIGdjb3VudCsrOwogICBnID0gZ2J1ZiA9IFhORVdWRUMgKHN0 cnVjdCB0aHJlYWRfaW5mbyAqLCBnY291bnQpOwotICBpdGVyYXRlX292ZXJf dGhyZWFkcyAoZ2l0ZXJfYWNjdW0sICZnKTsKKyAgZm9yICh0aHJlYWRfaW5m byAqdHAgOiBhbGxfdGhyZWFkcyAocHJvY190YXJnZXQsIHB0aWRfdCAocGlk KSkpCisgICAgKmcrKyA9IHRwOwogICBxc29ydCAoZ2J1ZiwgZ2NvdW50LCBz aXplb2YgKmdidWYsIGdjbXApOwogCisgIHRwID0gZmluZF90aHJlYWRfcHRp ZCAocHJvY190YXJnZXQsIHB0aWRfdCAocGlkKSk7CisKKyAgLyogSWYgdGhl IHB0aHJlYWRsaWJyYXJ5IGlzIG5vdCByZWFkeSB0byBkZWJ1ZyAKKyAgICAg dGhlbiB0aGlzIGlzIGp1c3QgYSBtYWluIHByb2Nlc3Mgd2hpY2ggbmVlZHMg CisgICAgIGEgcHJpdiB0byBiZSBzZXQuICBUaGUgaWYgY29uZGl0aW9uIGJl bG93IGRvZXMgCisgICAgIHRoZSBzYW1lLiAgT3RoZXJ3aXNlIHdlIGdvIHRv IHRoZSBmb3IgbG9vcCB0byAKKyAgICAgc3luYyB0aGUgcHRocmVhZCBhbmQg R0RCIHRocmVhZCBsaXN0cy4gICovCisKKyAgaWYgKGdidWZbMF0tPnB0aWQu aXNfcGlkICgpICYmICFwdGhkZWJ1Z3JlYWR5KQorICAgIHsKKyAgICAgIGFp eF90aHJlYWRfaW5mbyAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87Cisg ICAgICB0cC0+cHJpdi5yZXNldCAocHJpdik7CisgICAgfQorCiAgIC8qIEFw cGx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3byBhcnJheXMgdG8gR0RC J3MgdGhyZWFkIGxpc3QuICAqLworICBlbHNlICAKICAgZm9yIChwaSA9IGdp ID0gMDsgcGkgPCBwY291bnQgfHwgZ2kgPCBnY291bnQ7KQogICAgIHsKICAg ICAgIGlmIChwaSA9PSBwY291bnQpCkBAIC04MTAsOCArODU5LDYgQEAgc3lu Y190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAkgIHByaXYtPnBkdGlkID0gcGJ1 ZltwaV0ucGR0aWQ7CiAJICBwcml2LT50aWQgPSBwYnVmW3BpXS50aWQ7CiAK LQkgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2NfdGFyZ2V0Ci0JICAg ID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CiAJ ICB0aHJlYWQgPSBhZGRfdGhyZWFkX3dpdGhfaW5mbyAocHJvY190YXJnZXQs CiAJCQkJCSBwdGlkX3QgKHBpZCwgMCwgcGJ1ZltwaV0ucHRoaWQpLAogCQkJ CQkgcHJpdik7CkBAIC04NDEsMTMgKzg4OCwyNyBAQCBzeW5jX3RocmVhZGxp c3RzIChpbnQgcGlkKQogCSAgICB9CiAJICBlbHNlIGlmIChjbXBfcmVzdWx0 ID4gMCkKIAkgICAgewotCSAgICAgIGRlbGV0ZV90aHJlYWQgKGdidWZbZ2ld KTsKLQkgICAgICBnaSsrOworCSAgICAgIC8qIFRoaXMgaXMgdG8gbWFrZSB0 aGUgbWFpbiBwcm9jZXNzIHRocmVhZCBub3cgbG9vaworICAgICAgICAgICAg ICAgICBsaWtlIGEgdGhyZWFkLiAgKi8KKworCSAgICAgIGlmIChncHRpZC5p c19waWQgKCkgJiYgcHRoZGVidWdyZWFkeSkKKwkJeworCQkgIHRocmVhZF9j aGFuZ2VfcHRpZCAocHJvY190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJCSAg YWl4X3RocmVhZF9pbmZvICpwcml2ID0gbmV3IGFpeF90aHJlYWRfaW5mbzsK KyAgICAgICAgICAgICAgICAgIHByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0 aWQ7CisgICAgICAgICAgICAgICAgICBwcml2LT50aWQgPSBwYnVmW3BpXS50 aWQ7CisJCSAgdHAtPnByaXYucmVzZXQgKHByaXYpOworCQkgIGdpKys7CisJ CSAgcGkrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGRlbGV0ZV90 aHJlYWQgKGdidWZbZ2ldKTsKKwkJICBnaSsrOworCQl9CiAJICAgIH0KIAkg IGVsc2UKIAkgICAgewotCSAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQg KnByb2NfdGFyZ2V0Ci0JCT0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vz c190YXJnZXQgKCk7CiAJICAgICAgdGhyZWFkID0gYWRkX3RocmVhZCAocHJv Y190YXJnZXQsIHBwdGlkKTsKIAogCSAgICAgIGFpeF90aHJlYWRfaW5mbyAq cHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CkBAIC04ODEsMjEgKzk0Miwy NCBAQCBpdGVyX3RpZCAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZv aWQgKnRpZHApCiAgICByZXR1cm4gYSBwaWQtb25seSBwdGlkIHdpdGggUElE LiAgKi8KIAogc3RhdGljIHB0aWRfdAotcGRfdXBkYXRlIChpbnQgcGlkKQor cGRfdXBkYXRlIChwaWRfdCBwaWQsIGludCBwdGhkZWJ1Z3JlYWR5KQogewog ICBpbnQgc3RhdHVzOwogICBwdGlkX3QgcHRpZDsKICAgcHRoZGJfdGlkX3Qg dGlkOwogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IE5VTEw7Cisg IHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKIAotICBpZiAo IXBkX2FjdGl2ZSkKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJf Zm9yX3BpZCAocGlkKTsKKworICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSkKICAg ICByZXR1cm4gcHRpZF90IChwaWQpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3Nl c3Npb25fdXBkYXRlIChwZF9zZXNzaW9uKTsKKyAgc3RhdHVzID0gcHRoZGJf c2Vzc2lvbl91cGRhdGUgKGRhdGEtPnBkX3Nlc3Npb24pOwogICBpZiAoc3Rh dHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgcmV0dXJuIHB0aWRfdCAocGlk KTsKIAotICBzeW5jX3RocmVhZGxpc3RzIChwaWQpOworICBzeW5jX3RocmVh ZGxpc3RzIChwaWQsIHB0aGRlYnVncmVhZHkpOwogCiAgIC8qIERlZmluZSAi Y3VycmVudCB0aHJlYWQiIGFzIG9uZSB0aGF0IGp1c3QgcmVjZWl2ZWQgYSB0 cmFwIHNpZ25hbC4gICovCiAKQEAgLTkxNSwzMiArOTc5LDIyIEBAIHBkX3Vw ZGF0ZSAoaW50IHBpZCkKICAgIGZvciB0aGF0IHRocmVhZC4gIE90aGVyd2lz ZSwgcmV0dXJuIGEgcHRpZC1vbmx5IHB0aWQgdXNpbmcgUElELiAgKi8KIAog c3RhdGljIHB0aWRfdAotcGRfYWN0aXZhdGUgKGludCBwaWQpCitwZF9hY3Rp dmF0ZSAocGlkX3QgcGlkLCBpbnQgcHRoZGVidWdyZWFkeSkKIHsKICAgaW50 IHN0YXR1czsKLQkJCi0gIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25faW5pdCAo cGlkLCBhcmNoNjQgPyBQRU1fNjRCSVQgOiBQRU1fMzJCSVQsCisgIHN0cnVj dCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90 aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAocGlkKTsKKyAgdGhyZWFkX2lu Zm8gKnRocmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQgKGN1cnJlbnRfaW5mZXJp b3IgKCksIHB0aWRfdCAocGlkKSk7CisgIAorICBzdGF0dXMgPSBwdGhkYl9z ZXNzaW9uX2luaXQgKHRocmVhZCwgZGF0YS0+YXJjaDY0ID8gUEVNXzY0QklU IDogUEVNXzMyQklULAogCQkJICAgICAgIFBUSERCX0ZMQUdfUkVHUywgJnBk X2NhbGxiYWNrcywgCi0JCQkgICAgICAgJnBkX3Nlc3Npb24pOworCQkJICAg ICAgICZkYXRhLT5wZF9zZXNzaW9uKTsKICAgaWYgKHN0YXR1cyAhPSBQVEhE Ql9TVUNDRVNTKQogICAgIHsKICAgICAgIHJldHVybiBwdGlkX3QgKHBpZCk7 CiAgICAgfQotICBwZF9hY3RpdmUgPSAxOwotICByZXR1cm4gcGRfdXBkYXRl IChwaWQpOwotfQotCi0vKiBVbmRvIHRoZSBlZmZlY3RzIG9mIHBkX2FjdGl2 YXRlKCkuICAqLwotCi1zdGF0aWMgdm9pZAotcGRfZGVhY3RpdmF0ZSAodm9p ZCkKLXsKLSAgaWYgKCFwZF9hY3RpdmUpCi0gICAgcmV0dXJuOwotICBwdGhk Yl9zZXNzaW9uX2Rlc3Ryb3kgKHBkX3Nlc3Npb24pOwotICAKLSAgcGlkX3Rv X3ByYyAoJmluZmVyaW9yX3B0aWQpOwotICBwZF9hY3RpdmUgPSAwOworICBk YXRhLT5wZF9hY3RpdmUgPSAxOworICByZXR1cm4gcGRfdXBkYXRlIChwaWQs IHB0aGRlYnVncmVhZHkpOwogfQogCiAvKiBBbiBvYmplY3QgZmlsZSBoYXMg anVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQK QEAgLTk1MiwxNyArMTAwNiwyNCBAQCBwZF9lbmFibGUgKHZvaWQpCiAgIGlu dCBzdGF0dXM7CiAgIGNoYXIgKnN0dWJfbmFtZTsKICAgc3RydWN0IGJvdW5k X21pbmltYWxfc3ltYm9sIG1zOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJp YWJsZXMgKmRhdGE7CisKKyAgaWYgKCFpbmZlcmlvcl9wdGlkLnBpZCAoKSkK KyAgICByZXR1cm47CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hl bHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgLyogRG9uJ3Qg aW5pdGlhbGl6ZSB0d2ljZS4gICovCi0gIGlmIChwZF9hYmxlKQorICBpZiAo ZGF0YS0+cGRfYWJsZSkKICAgICByZXR1cm47CiAKICAgLyogQ2hlY2sgYXBw bGljYXRpb24gd29yZCBzaXplLiAgKi8KLSAgYXJjaDY0ID0gcmVnaXN0ZXJf c2l6ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDApID09IDg7CisgIGRhdGEtPmFy Y2g2NCA9IHJlZ2lzdGVyX3NpemUgKHRhcmdldF9nZGJhcmNoICgpLCAwKSA9 PSA4OwogCiAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlz IHB0aHJlYWRlZC4gICovCiAgIHN0dWJfbmFtZSA9IE5VTEw7Ci0gIHN0YXR1 cyA9IHB0aGRiX3Nlc3Npb25fcHRocmVhZGVkIChpbmZlcmlvcl9wdGlkLnBp ZCAoKSwgUFRIREJfRkxBR19SRUdTLAorICB0aHJlYWRfaW5mbyAqdGhyZWFk ID0gZmluZF90aHJlYWRfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKSwgaW5m ZXJpb3JfcHRpZCk7CisgIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25fcHRocmVh ZGVkICh0aHJlYWQsIFBUSERCX0ZMQUdfUkVHUywKIAkJCQkgICAgJnBkX2Nh bGxiYWNrcywgJnN0dWJfbmFtZSk7CiAgIGlmICgoc3RhdHVzICE9IFBUSERC X1NVQ0NFU1MKICAgICAgICAmJiBzdGF0dXMgIT0gUFRIREJfTk9UX1BUSFJF QURFRCkgfHwgIXN0dWJfbmFtZSkKQEAgLTk3MiwxOCArMTAzMywxOCBAQCBw ZF9lbmFibGUgKHZvaWQpCiAgIG1zID0gbG9va3VwX21pbmltYWxfc3ltYm9s IChzdHViX25hbWUsIE5VTEwsIE5VTEwpOwogICBpZiAobXMubWluc3ltID09 IE5VTEwpCiAgICAgcmV0dXJuOwotICBwZF9icmtfYWRkciA9IG1zLnZhbHVl X2FkZHJlc3MgKCk7Ci0gIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVh a3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgcGRfYnJrX2FkZHIpKQorICBk YXRhLT5wZF9icmtfYWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7CisgIGlm ICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2Ri YXJjaCAoKSwgZGF0YS0+cGRfYnJrX2FkZHIpKQogICAgIHJldHVybjsKIAog ICAvKiBQcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KICAgY3Vy cmVudF9pbmZlcmlvciAoKS0+cHVzaF90YXJnZXQgKCZhaXhfdGhyZWFkX29w cyk7Ci0gIHBkX2FibGUgPSAxOworICBkYXRhLT5wZF9hYmxlID0gMTsgCiAK ICAgLyogSWYgd2UncmUgZGVidWdnaW5nIGEgY29yZSBmaWxlIG9yIGFuIGF0 dGFjaGVkIGluZmVyaW9yLCB0aGUKICAgICAgcHRocmVhZCBsaWJyYXJ5IG1h eSBhbHJlYWR5IGhhdmUgYmVlbiBpbml0aWFsaXplZCwgc28gdHJ5IHRvCiAg ICAgIGFjdGl2YXRlIHRocmVhZCBkZWJ1Z2dpbmcuICAqLwotICBwZF9hY3Rp dmF0ZSAoaW5mZXJpb3JfcHRpZC5waWQgKCkpOworICBwZF9hY3RpdmF0ZSAo aW5mZXJpb3JfcHRpZC5waWQgKCksIDApOwogfQogCiAvKiBVbmRvIHRoZSBl ZmZlY3RzIG9mIHBkX2VuYWJsZSgpLiAgKi8KQEAgLTk5MSwyOCArMTA1Miwz MSBAQCBwZF9lbmFibGUgKHZvaWQpCiBzdGF0aWMgdm9pZAogcGRfZGlzYWJs ZSAodm9pZCkKIHsKLSAgaWYgKCFwZF9hYmxlKQorICBzdHJ1Y3QgYWl4X3Ro cmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2Rh dGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKKworICBpZiAo IWRhdGEtPnBkX2FibGUpCisgICAgcmV0dXJuOworICBpZiAoIWRhdGEtPnBk X2FjdGl2ZSkKICAgICByZXR1cm47Ci0gIGlmIChwZF9hY3RpdmUpCi0gICAg cGRfZGVhY3RpdmF0ZSAoKTsKLSAgcGRfYWJsZSA9IDA7CisgIHB0aGRiX3Nl c3Npb25fZGVzdHJveSAoZGF0YS0+cGRfc2Vzc2lvbik7CisgCisgIHBpZF90 b19wcmMgKCZpbmZlcmlvcl9wdGlkKTsKKyAgZGF0YS0+cGRfYWN0aXZlID0g MDsKKyAgZGF0YS0+cGRfYWJsZSA9IDA7CiAgIGN1cnJlbnRfaW5mZXJpb3Ig KCktPnVucHVzaF90YXJnZXQgKCZhaXhfdGhyZWFkX29wcyk7CiB9CiAKIC8q IG5ld19vYmpmaWxlIG9ic2VydmVyIGNhbGxiYWNrLgogCiAgICBJZiBPQkpG SUxFIGlzIG5vbi1udWxsLCBjaGVjayB3aGV0aGVyIGEgdGhyZWFkZWQgYXBw bGljYXRpb24gaXMKLSAgIGJlaW5nIGRlYnVnZ2VkLCBhbmQgaWYgc28sIHBy ZXBhcmUgZm9yIHRocmVhZCBkZWJ1Z2dpbmcuCi0KLSAgIElmIE9CSkZJTEUg aXMgbnVsbCwgc3RvcCBkZWJ1Z2dpbmcgdGhyZWFkcy4gICovCisgICBiZWlu ZyBkZWJ1Z2dlZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVi dWdnaW5nLiAgKi8KIAogc3RhdGljIHZvaWQKIG5ld19vYmpmaWxlIChzdHJ1 Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKIHsKICAgaWYgKG9iamZpbGUpCiAgICAg cGRfZW5hYmxlICgpOwotICBlbHNlCi0gICAgcGRfZGlzYWJsZSAoKTsKIH0K IAogLyogQXR0YWNoIHRvIHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IEFSR1MuICAq LwpAQCAtMTA0Miw4ICsxMTA2LDExIEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojpy ZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSBnZGJfc2lnbmFs IHNpZykKIHsKICAgc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQ7CiAgIHB0 aGRiX3RpZF90IHRpZFsyXTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxw ZXJfZm9yX3B0aWQgKHB0aWQpOwogCi0gIGlmICghUERfVElEIChwdGlkKSkK KyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgewogICAgICAgc2NvcGVk X3Jlc3RvcmUgc2F2ZV9pbmZlcmlvcl9wdGlkID0gbWFrZV9zY29wZWRfcmVz dG9yZSAoJmluZmVyaW9yX3B0aWQpOwogICAgICAgCkBAIC0xMDY1LDcgKzEx MzIsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChwdGlkX3QgcHRp ZCwgaW50IHN0ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiAJICAgICAgIHB0 aWQubHdwICgpKTsKICAgICAgIHRpZFsxXSA9IDA7CiAKLSAgICAgIGlmIChh cmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXB0cmFjZTY0YWl4 IChQVFRfQ09OVElOVUUsIHRpZFswXSwgKGxvbmcgbG9uZykgMSwKIAkJICAg ICBnZGJfc2lnbmFsX3RvX2hvc3QgKHNpZyksIChQVFJBQ0VfVFlQRV9BUkc1 KSB0aWQpOwogICAgICAgZWxzZQpAQCAtMTA4Miw2ICsxMTQ5LDcgQEAgcHRp ZF90CiBhaXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0 cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzLAogCQkJIHRhcmdldF93 YWl0X2ZsYWdzIG9wdGlvbnMpCiB7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3Zh cmlhYmxlcyAqZGF0YTsKICAgewogICAgIHBpZF90b19wcmMgKCZwdGlkKTsK IApAQCAtMTA5NSw4ICsxMTYzLDEwIEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojp3 YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpz dGF0dXMsCiAgICAgIHBpZC1vbmx5IHB0aWRzLiAgKi8KICAgZ2RiX2Fzc2Vy dCAocHRpZC5pc19waWQgKCkpOwogCisgIGRhdGEgPSBnZXRfdGhyZWFkX2Rh dGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKKwogICAvKiBDaGVjayB3aGV0 aGVyIGxpYnB0aGRlYnVnIG1pZ2h0IGJlIHJlYWR5IHRvIGJlIGluaXRpYWxp emVkLiAgKi8KLSAgaWYgKCFwZF9hY3RpdmUgJiYgc3RhdHVzLT5raW5kICgp ID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisgIGlmICghZGF0YS0+cGRf YWN0aXZlICYmIHN0YXR1cy0+a2luZCAoKSA9PSBUQVJHRVRfV0FJVEtJTkRf U1RPUFBFRAogICAgICAgJiYgc3RhdHVzLT5zaWcgKCkgPT0gR0RCX1NJR05B TF9UUkFQKQogICAgIHsKICAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQg KnByb2NfdGFyZ2V0CkBAIC0xMTA1LDExICsxMTc1LDExIEBAIGFpeF90aHJl YWRfdGFyZ2V0Ojp3YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0IHRhcmdldF93 YWl0c3RhdHVzICpzdGF0dXMsCiAgICAgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOwogCiAgICAgICBpZiAocmVnY2Fj aGVfcmVhZF9wYyAocmVnY2FjaGUpCi0JICAtIGdkYmFyY2hfZGVjcl9wY19h ZnRlcl9icmVhayAoZ2RiYXJjaCkgPT0gcGRfYnJrX2FkZHIpCi0JcmV0dXJu IHBkX2FjdGl2YXRlIChwdGlkLnBpZCAoKSk7CisJICAtIGdkYmFyY2hfZGVj cl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCkgPT0gZGF0YS0+cGRfYnJrX2Fk ZHIpCisJcmV0dXJuIHBkX2FjdGl2YXRlIChwdGlkLnBpZCAoKSwgMSk7CiAg ICAgfQogCi0gIHJldHVybiBwZF91cGRhdGUgKHB0aWQucGlkICgpKTsKKyAg cmV0dXJuIHBkX3VwZGF0ZSAocHRpZC5waWQgKCksIDApOwogfQogCiAvKiBS ZWNvcmQgdGhhdCB0aGUgNjQtYml0IGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl cnMgY29udGFpbiBWQUxTLiAgKi8KQEAgLTEyMjksMTggKzEyOTksMjAgQEAg ZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNfZ2RiYXJjaF90 ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChn ZGJhcmNoKTsKICAgaW50IHN0YXR1cywgaTsKICAgcHRoZGJfY29udGV4dF90 IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOwor ICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5m ZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAg Z2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCiAJCSJmZXRjaF9yZWdzX3VzZXJf dGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlkKTsKLSAgc3RhdHVzID0gcHRo ZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7 CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAoZGF0YS0+cGRf c2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERC X1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IGZldGNoX3Jl Z2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJldHVybmVkICVzIiks CiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CiAKICAgLyogR2VuZXJh bC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAKLSAgaWYgKGFyY2g2NCkKKyAg aWYgKGRhdGEtPmFyY2g2NCkKICAgICBzdXBwbHlfZ3ByczY0IChyZWdjYWNo ZSwgY3R4Lmdwcik7CiAgIGVsc2UKICAgICBmb3IgKGkgPSAwOyBpIDwgcHBj X251bV9ncHJzOyBpKyspCkBAIC0xMjUzLDcgKzEzMjUsNyBAQCBmZXRjaF9y ZWdzX3VzZXJfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBw dGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogU3BlY2lhbCByZWdpc3Rl cnMuICAqLwogCi0gIGlmIChhcmNoNjQpCisgIGlmIChkYXRhLT5hcmNoNjQp CiAgICAgc3VwcGx5X3NwcnM2NCAocmVnY2FjaGUsIGN0eC5pYXIsIGN0eC5t c3IsIGN0eC5jciwgY3R4LmxyLCBjdHguY3RyLAogCQkJICAgICBjdHgueGVy LCBjdHguZnBzY3IpOwogICBlbHNlCkBAIC0xMjg4LDE4ICsxMzYwLDIxIEBA IGZldGNoX3JlZ3Nfa2VybmVsX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgaW50IHJlZ25vLAogICBzdHJ1Y3QgcHR4c3BycyBzcHJzNjQ7 CiAgIHN0cnVjdCBwdHNwcnMgc3ByczMyOwogICBpbnQgaTsKKyAgc3RydWN0 IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdl dF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHJlZ2NhY2hlLT5wdGlk ICgpKTsKIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLAogCQkiZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFk IHRpZD0lbHggcmVnbm89JWQgYXJjaDY0PSVkXG4iLAotCQkobG9uZykgdGlk LCByZWdubywgYXJjaDY0KTsKKwkJKGxvbmcpIHRpZCwgcmVnbm8sIGRhdGEt PmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4g ICovCiAgIGlmIChyZWdubyA9PSAtMQogICAgICAgfHwgKHRkZXAtPnBwY19n cDBfcmVnbnVtIDw9IHJlZ25vCiAJICAmJiByZWdubyA8IHRkZXAtPnBwY19n cDBfcmVnbnVtICsgcHBjX251bV9ncHJzKSkKICAgICB7Ci0gICAgICBpZiAo YXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7CiAJICBpZiAo IXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsIAogCQkJICAgICh1 bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5VTEwpKQpAQCAtMTMzMSw3ICsx NDA2LDcgQEAgZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIChzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09 IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQog ICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJj aDY0KQogCXsKIAkgIGlmICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMs IHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcpICZzcHJzNjQsIDAsIE5V TEwpKQpAQCAtMTM2Myw3ICsxNDM4LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6 OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwg aW50IHJlZ25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAg cHRoZGJfdGlkX3QgdGlkOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+ cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQgKCkgPT0g MCkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMgKHJlZ2NhY2hl LCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNTExLDYgKzE1ODYsOCBA QCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAgIHB0aGRi X2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwogICB1aW50NjRf dCBpbnQ2NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRh OworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAo aW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAg ICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4LDcgKzE1OTUs NyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAg LyogUmV0cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29udGV4dCBmb3Ig aXRzIG5vbi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAqLwotICBzdGF0dXMg PSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24sIHBkdGlkLCAm Y3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChkYXRh LT5wZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0g UFRIREJfU1VDQ0VTUykKICAgICBlcnJvciAoXygiYWl4LXRocmVhZDogc3Rv cmVfcmVnaXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQgcmV0dXJuZWQg JXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMpKTsKQEAgLTE1Mjgs NyArMTYwNSw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNvbnN0IHN0 cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRp ZCkKICAgZm9yIChpID0gMDsgaSA8IHBwY19udW1fZ3ByczsgaSsrKQogICAg IGlmIChSRUdfVkFMSUQgPT0gcmVnY2FjaGUtPmdldF9yZWdpc3Rlcl9zdGF0 dXMgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSkpCiAgICAgICB7Ci0JaWYg KGFyY2g2NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQogCSAgewogCSAgICByZWdj YWNoZS0+cmF3X2NvbGxlY3QgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSwg KHZvaWQgKikgJmludDY0KTsKIAkgICAgY3R4LmdwcltpXSA9IGludDY0OwpA QCAtMTU0NSw3ICsxNjIyLDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAo Y29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVh ZF90IHBkdGlkKQogICAgIGZpbGxfZnBycyAocmVnY2FjaGUsIGN0eC5mcHIp OwogCiAgIC8qIFNwZWNpYWwgcmVnaXN0ZXJzIChhbHdheXMga2VwdCBpbiBj dHggYXMgNjQgYml0cykuICAqLwotICBpZiAoYXJjaDY0KQorICBpZiAoZGF0 YS0+YXJjaDY0KQogICAgIHsKICAgICAgIGZpbGxfc3ByczY0IChyZWdjYWNo ZSwgJmN0eC5pYXIsICZjdHgubXNyLCAmY3R4LmNyLCAmY3R4LmxyLCAmY3R4 LmN0ciwKIAkJCSAgICAgJmN0eC54ZXIsICZjdHguZnBzY3IpOwpAQCAtMTU3 Niw3ICsxNjUzLDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qg c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBk dGlkKQogCWN0eC5mcHNjciA9IHRtcF9mcHNjcjsKICAgICB9CiAKLSAgc3Rh dHVzID0gcHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChwZF9zZXNzaW9uLCBw ZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29u dGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAo c3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10 aHJlYWQ6IHN0b3JlX3JlZ2lzdGVyczogIgogCSAgICAgInB0aGRiX3B0aHJl YWRfc2V0Y29udGV4dCByZXR1cm5lZCAlcyIpLApAQCAtMTYwMiw2ICsxNjc5 LDkgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAgIGRvdWJsZSBmcHJz W3BwY19udW1fZnByc107CiAgIHN0cnVjdCBwdHhzcHJzIHNwcnM2NDsKICAg c3RydWN0IHB0c3BycyAgc3ByczMyOworICBzdHJ1Y3QgYWl4X3RocmVhZF92 YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRh X2hlbHBlcl9mb3JfcHRpZCAocmVnY2FjaGUtPnB0aWQgKCkpOwogCiAgIGlm IChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRs b2csIApAQCAtMTYxMyw3ICsxNjkzLDcgQEAgc3RvcmVfcmVnc19rZXJuZWxf dGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQg cmVnbm8sCiAgICAgICB8fCAodGRlcC0+cHBjX2dwMF9yZWdudW0gPD0gcmVn bm8KIAkgICYmIHJlZ25vIDwgdGRlcC0+cHBjX2dwMF9yZWdudW0gKyBwcGNf bnVtX2ZwcnMpKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBp ZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRjaDogc29tZSBy ZWdzIG1heSBub3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0 YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsICh1bnNpZ25lZCBsb25nKSBncHJz NjQsIDAsIE5VTEwpOwpAQCAtMTY0Niw3ICsxNzI2LDcgQEAgc3RvcmVfcmVn c19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09IC0xIHx8IHNwZWNp YWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAg IGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkg IC8qIFByZS1mZXRjaDogc29tZSByZWdpc3RlcnMgd29uJ3QgYmUgaW4gdGhl IGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0 aWQsIApAQCAtMTcwMyw3ICsxNzgzLDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6 OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwg aW50IHJlZ25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAg cHRoZGJfdGlkX3QgdGlkOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+ cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQgKCkgPT0g MCkKICAgICBiZW5lYXRoICgpLT5zdG9yZV9yZWdpc3RlcnMgKHJlZ2NhY2hl LCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNzQxLDcgKzE4MjEsNyBA QCBhaXhfdGhyZWFkX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkKIHsKICAg dGFyZ2V0X29wcyAqYmVuZWF0aCA9IHRoaXMtPmJlbmVhdGggKCk7CiAKLSAg cGRfZGVhY3RpdmF0ZSAoKTsKKyAgcGRfZGlzYWJsZSAoKTsKICAgYmVuZWF0 aC0+bW91cm5faW5mZXJpb3IgKCk7CiB9CiAKQEAgLTE3NTAsNyArMTgzMCw3 IEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAoKQogYm9v bAogYWl4X3RocmVhZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0 aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlk ICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnRocmVhZF9hbGl2 ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJlYWQgbGlzdCBl dmVyeSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2LDcg KzE4NDYsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChw dGlkX3QgcHRpZCkKIHN0ZDo6c3RyaW5nCiBhaXhfdGhyZWFkX3RhcmdldDo6 cGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChw dGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJl bmVhdGggKCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJldHVybiBzdHJp bmdfcHJpbnRmIChfKCJUaHJlYWQgJXMiKSwgcHVsb25nZXN0IChwdGlkLnRp ZCAoKSkpOwpAQCAtMTc4Niw4ICsxODY2LDExIEBAIGFpeF90aHJlYWRfdGFy Z2V0OjpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICp0 aHJlYWQpCiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNoc3RhdGU7CiAg IGludCBjYW5jZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0ID0gTlVMTDsK KyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworCisgIGRh dGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkICh0aHJlYWQt PnB0aWQpOwogCi0gIGlmICghUERfVElEICh0aHJlYWQtPnB0aWQpKQorICBp ZiAodGhyZWFkLT5wdGlkLnRpZCAoKSA9PSAwKQogICAgIHJldHVybiBOVUxM OwogCiAgIHN0cmluZ19maWxlIGJ1ZjsKQEAgLTE4MDAsMjQgKzE4ODMsMjQg QEAgYWl4X3RocmVhZF90YXJnZXQ6OmV4dHJhX3RocmVhZF9pbmZvIChzdHJ1 Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgICAvKiBpMThuOiBMaWtlICJ0 aHJlYWQtaWRlbnRpZmllciAlZCwgW3N0YXRlXSBydW5uaW5nLCBzdXNwZW5k ZWQiICovCiAgICAgYnVmLnByaW50ZiAoXygidGlkICVkIiksIChpbnQpdGlk KTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3N0YXRlIChwZF9zZXNz aW9uLCBwZHRpZCwgJnN0YXRlKTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVh ZF9zdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZzdGF0ZSk7CiAg IGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBzdGF0ZSA9IFBT VF9OT1RTVVA7CiAgIGJ1Zi5wcmludGYgKCIsICVzIiwgc3RhdGUyc3RyIChz dGF0ZSkpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0 YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0 aHJlYWRfc3VzcGVuZHN0YXRlIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwg CiAJCQkJICAgICAgICZzdXNwZW5kc3RhdGUpOwogICBpZiAoc3RhdHVzID09 IFBUSERCX1NVQ0NFU1MgJiYgc3VzcGVuZHN0YXRlID09IFBTU19TVVNQRU5E RUQpCiAgICAgLyogaTE4bjogTGlrZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVd IHJ1bm5pbmcsIHN1c3BlbmRlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIs IHN1c3BlbmRlZCIpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2Rl dGFjaHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0 aGRiX3B0aHJlYWRfZGV0YWNoc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24sIHBk dGlkLCAKIAkJCQkgICAgICAmZGV0YWNoc3RhdGUpOwogICBpZiAoc3RhdHVz ID09IFBUSERCX1NVQ0NFU1MgJiYgZGV0YWNoc3RhdGUgPT0gUERTX0RFVEFD SEVEKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAlZCwgW3N0YXRl XSBydW5uaW5nLCBkZXRhY2hlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIs IGRldGFjaGVkIikpOwogCi0gIHB0aGRiX3B0aHJlYWRfY2FuY2VscGVuZCAo cGRfc2Vzc2lvbiwgcGR0aWQsICZjYW5jZWxwZW5kKTsKKyAgcHRoZGJfcHRo cmVhZF9jYW5jZWxwZW5kIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmNh bmNlbHBlbmQpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYg Y2FuY2VscGVuZCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQs IFtzdGF0ZV0gcnVubmluZywgY2FuY2VsIHBlbmRpbmciICovCiAgICAgYnVm LnByaW50ZiAoXygiLCBjYW5jZWwgcGVuZGluZyIpKTsKZGlmZiAtLWdpdCBh L2dkYi9zb2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwppbmRleCBmNDgz ZjU0ZGUxMy4uNmJlODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dkYi9zb2xpYi1h aXguYworKysgYi9nZGIvc29saWItYWl4LmMKQEAgLTYxOCw2ICs2MTgsMjAg QEAgc29saWJfYWl4X2JmZF9vcGVuIChjb25zdCBjaGFyICpwYXRobmFtZSkK ICAgICAgIGlmIChtZW1iZXJfbmFtZSA9PSBiZmRfZ2V0X2ZpbGVuYW1lIChv YmplY3RfYmZkLmdldCAoKSkpCiAJYnJlYWs7CiAKKyAgICAgIHN0ZDo6c3Ry aW5nIHMgPSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSk7 CisKKyAgICAgIC8qIEZvciBldmVyeSBpbmZlcmlvciBhZnRlciBmaXJzdCBp bnQgYmZkIHN5c3RlbSB3ZSAKKwkgd2lsbCBoYXZlIHRoZSBwYXRobmFtZSBp bnN0ZWFkIG9mIHRoZSBtZW1iZXIgbmFtZQorCSByZWdpc3RlcmVkLiBIZW5j ZSB0aGUgYmVsb3cgY29uZGl0aW9uIGV4aXN0cy4gICovCisKKyAgICAgIGlm IChzLmZpbmQgKCcoJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisJeworCSAg aW50IHBvcyA9IHMuZmluZCAoJygnKTsKKwkgIGludCBsZW4gPSBzLmZpbmQg KCcpJykgLSBzLmZpbmQgKCcoJyk7CisJICBpZiAocy5zdWJzdHIgKHBvcysx LCBsZW4tMSkgPT0gbWVtYmVyX25hbWUpIAorCSAgICByZXR1cm4gb2JqZWN0 X2JmZDsKKwl9CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJfYmZkX29wZW5y X25leHRfYXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJ CQkJICAgICBvYmplY3RfYmZkLmdldCAoKSk7CiAgICAgfQotLSAKMi4zMS4x Cgo= --_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_--