Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1og4NF-0005Yg-Tw for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Oct 2022 13:23:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1og4NE-0001aC-GS for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Oct 2022 13:23:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1og4ND-0001a2-El for pgsql-hackers@lists.postgresql.org; Wed, 05 Oct 2022 13:23:44 +0000 Received: from mail-eopbgr00103.outbound.protection.outlook.com ([40.107.0.103] helo=EUR02-AM5-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1og4NA-0008BD-1N for pgsql-hackers@lists.postgresql.org; Wed, 05 Oct 2022 13:23:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l7fJYTlfNs27Fgmcdqy/rbioLCb9o29Y11VqQnA6y0h4QLZ3L1a3DXHds9jnSLfXSAZUXiIb71q8BpX388TlpDEQnrxZorP/fR3ib7rBGbfVNAGOzoEge1C7w9SGD5v3EUkBKh8tZwwLtJOkEccLEbQ1krwMKgOo1vsFa+7QQE1wGu70e9Usdz6EijCFCfrbc38pbUL2NTZscz+H39YJgnsQ9hx5Vlt0wo58K7B8fpeSdNMDfziIXp+DV/w0QUP7DolsQ2m1x8zxxKZ2A0xcqt55uXiTvkqaze52UQRmJ0oFNgaTYZYaiM7emXurFBUGAzZilg9RXkOrNW93Lx5ZIg== 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=0pLR1mjoQZIURIvGM4T6W623ZzEqZ6DVsr+9lDyW8r0=; b=Nr/UPeTQU1jVX5p/mJMjN5CetrhymnSMN7TwbbSQSP6LjxeEJxdxXD2UurwHNgPdfEHFzbU16O7LsU7viWcMCWbqFPSYFB812pMuPM9KUb3YiFe113aZQC/Z0k4vY+7vTSSzYT2x6hgY0DQ5HAxczfrn0imA8B37i/6QvAsI/PenTJ5GBQt2dvAavu3iX5wX5yBhTEZrTV3qjck4PmAM2qjvMnR1enEnAnpUnQITIssycUX2us1fD+w60wNRT2lwUc2DxeQ1pC3B109PBDmvvqioJ15V7gXczqUeQTXf627F36oiUT+sFyKOzNxjVXhHLEUr8cHCh2hKMU1xTCw09A== 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=0pLR1mjoQZIURIvGM4T6W623ZzEqZ6DVsr+9lDyW8r0=; b=XppeFOa/tM4y2rMIxNomRpVWHr52jDnoatWLoBuy9BNf7z3zzJ2q4WZZJA601nF/oJJqnOtsjAol0aPcJeM6cCWgz5ev1oKReRPvjnosv069++ScA/OZmZJvDnCIjHLLkiXcuregD+vWT4ZbFU8ZaQ4KyHoNb40wS5xYCmLF5uA= Received: from DBBPR83MB0507.EURPRD83.prod.outlook.com (2603:10a6:10:209::18) by PR3PR83MB0427.EURPRD83.prod.outlook.com (2603:10a6:102:73::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.9; Wed, 5 Oct 2022 13:23:34 +0000 Received: from DBBPR83MB0507.EURPRD83.prod.outlook.com ([fe80::227f:745d:706:ea89]) by DBBPR83MB0507.EURPRD83.prod.outlook.com ([fe80::227f:745d:706:ea89%6]) with mapi id 15.20.5709.008; Wed, 5 Oct 2022 13:23:34 +0000 From: Jelte Fennema To: Tom Lane CC: Andres Freund , Justin Pryzby , Robert Haas , "pgsql-hackers@lists.postgresql.org" Subject: Re: Add non-blocking version of PQcancel Thread-Topic: Add non-blocking version of PQcancel Thread-Index: AQHY2L2r7NPHzz0g5USohD8S0CdLcw== Date: Wed, 5 Oct 2022 13:23:34 +0000 Message-ID: References: <20220324224909.4tnubqv2owmfoyoc@alap3.anarazel.de> <3453535.1648234019@sss.pgh.pa.us> <3457746.1648236890@sss.pgh.pa.us> <20220331054704.GL28503@telsasoft.com> <20220625013617.e4qvy6qlaukgvfpo@alap3.anarazel.de> <2906785.1663192411@sss.pgh.pa.us> In-Reply-To: <2906785.1663192411@sss.pgh.pa.us> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes 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=2022-10-05T13:23:33.721Z;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-traffictypediagnostic: DBBPR83MB0507:EE_|PR3PR83MB0427:EE_ x-ms-office365-filtering-correlation-id: 7326e82b-744b-4734-5391-08daa6d4cdd9 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LiFoCzu+ARxjxLTAqCwEnsBXv69LpFS3ROiBLcS9BIXDj7P3tjKhoXounFciHaN/bDD7uoE2yfUbAj53An49AhZ17ea9qa8IDsfIBPNvNK+1s7VyC/5jE8yMCP026dY7w1DBxZVDkQrkPnb2YggX5l1hnjO4r4R5iVXKnalJ3FFipK74wmSMvyJ5PuJyvLpkWPq8bteuBfw+j9akAPmr/FxTEAriWwVQZcRxkaaUok6vr9bWlLQpocvs2/7i6FHJ+1ox47J109fdGy0Z/OwLcLJ9oC0Gk1B/PLMItO1ODWULGC2BCAAyvVdwYnTAp3hTomruDPNSg7kuXH9vKaRhBT2p55MZQ2sJO1x3H04JYDWCdHsIyk+0R7elbz9ZAJ7fAX1hQbM+7tcFeWnBzvOsAZ5MuEHEhFrmIEv4zjZDftS4oDn+Myo+ScZovpaN0FqbNByJvzmSnBqeF0Eq2TpW732M0Z66bdvkIPDjyEAGVNOntdRar+gnD8g4JgB5WZpYS9yQTlLkEzmlbwxI5LaM1McJhjASgsTyW8wAqOgoPPqJ8NLrOYdTphm6LkZog8H2MwVFRMFdUrIj+ISUUkZFtpli5YMtZ/r1Hcyrx3aLdHllAF0GI7fAW4qOtZFfSJFK9893OpnsZuy2eebIkVb6C9FlewizI8zmry7eoEfglCdhzYbXBAD+c5PxM5s7Mn8MiXGaxgdPgFkdmQNoQroQBeIcDnQSKJP4mupQfyFNCu0IyEcCBVr1OSg3TQn09lJG6sZIk3849OstgMt9jStcyQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR83MB0507.EURPRD83.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(346002)(366004)(396003)(39860400002)(376002)(451199015)(33656002)(54906003)(86362001)(38070700005)(5660300002)(122000001)(38100700002)(99936003)(6916009)(83380400001)(82960400001)(82950400001)(186003)(9686003)(6506007)(26005)(66476007)(7696005)(478600001)(64756008)(10290500003)(76116006)(91956017)(66556008)(71200400001)(66446008)(316002)(8936002)(66946007)(8676002)(4326008)(52536014)(2906002)(41300700001)(55016003)(8990500004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?bTP/I0XoCfuBSzvyNo0pMQyG7WpocWJj5bnPer9IAVN+fH+D5HaBHH1dXQ?= =?iso-8859-1?Q?SAa8R7Tdb9cpKH2p4JRmO4mc67FBSPOozEZ5VWYAPac3oPMf+KymdVseMv?= =?iso-8859-1?Q?JZ8fri60+OIWYzM7CxNkhg+73SR27RLq1oOd9STGh8TGfYkw/2PUuPQqjF?= =?iso-8859-1?Q?LEmXpx9eAIhZUBlTgwxgrA7FH6tVY+fYPQYFQh3yLJLvnRje+5HOli97ct?= =?iso-8859-1?Q?Uud3B5JgbvLcmZRo/2Iqsj54wcjEmJqGIcnX4N0X0aCJ9WEKdNMFGaHtXi?= =?iso-8859-1?Q?kbTPMl6rndooOhTjp0Wj6msn4KSaoTmr9nEf6GFFbQYfzZUau3wtaV9SUU?= =?iso-8859-1?Q?7ikBHFUqFCNSGKiDPElgEidAYrmv1UEmsQA8rSOtzPXW6Bx/mheJ8GAIbh?= =?iso-8859-1?Q?y1+2FZiOmvNptaMRnkN5jjBpoSf3t99wiJIzBrjFewV6cMF+Ehlju34YN7?= =?iso-8859-1?Q?Ypsb/yuREOnGmBPC9ntCd+L48P5vEGzqVRFrVB/3H9oaG1UplFgCF5YRsh?= =?iso-8859-1?Q?VBBrorX3xrebmRpTKRBxJZTe0gKT3jTD/6lmiv2wZT/0gDCpPWcLZmc2xy?= =?iso-8859-1?Q?2Shn6IN5s7QZHkHaJTfQpq9yfCmCHBtGZiaG3b9QY8xsFjA/SfEwXvtv2h?= =?iso-8859-1?Q?iZ1yoKfK6hKLFaU9LMeRRpg/Ko2Nf4rewbPR/bMQ9JH9Q9aUlCsKuzkXQM?= =?iso-8859-1?Q?qp13mRnMEQVKEdnW7SjdP0OFhvS7AUlJyzHpwFbNF/9jH3X7LvuvfncWUv?= =?iso-8859-1?Q?ZG4rzbYkIadJKOYbswyaJA19oM9d+ECdy1UjH7vyWCxdpF2ctNlENfAyIf?= =?iso-8859-1?Q?GnXkHgbOlaypQFHK9OuE638Y6r2+lmSde3s9bCbcQJEgbnoN8D0RZO2e3H?= =?iso-8859-1?Q?FxYyKCNqqH31o44A85GPUw/ah8CpNjYaXBTYNO7c2Iaka/mnCyUtUhIXdE?= =?iso-8859-1?Q?MYLgg2OFMXOjyNWT91LMChhLtl6KtnWM8aKjgdjGlsDBwu1R8fcyiI9Ki4?= =?iso-8859-1?Q?gR5tX1rTE+DjC/rt6Thf8ghDgfvGYaLOpd2dDVOC3eYepDUFeqSm/C4yGS?= =?iso-8859-1?Q?GrMCYZJjdklwbRRfM/9TyzFJklOX64bQu0T4AU+dGXYRm2IdA+wrzdNehW?= =?iso-8859-1?Q?PU6XL4Fk2OmCdJMuFtiPRnUVf9xKqLsjPkgZo8o0TxqB2NJFDlwVdQalFF?= =?iso-8859-1?Q?N3J7eez0j5ecYStpZtuoTD9vBTvkzsZPuUiwH4ZdVkcicoqi0rQOUaxbsR?= =?iso-8859-1?Q?pIFJENAQSG8m/fBzhfC4XeluA9iuSQZYutnimtnfU2HvNCTXZHqJqCwNn0?= =?iso-8859-1?Q?Bt6LfSX38+vt70TQq6hTlyH/wRDQmyDz5th+PgXDyHl4vMBniRZMiB03oX?= =?iso-8859-1?Q?Xhd4JG7q8EqHm9LfzbrX2JwAKPeSXCjbIZzGPo3G0x4N/l5O4QEbXhCB2X?= =?iso-8859-1?Q?azPUy652ZqHayUxpRpMG+eGSwskbR1SOYfffF71fpYXVdzHaLnjFiHYpdJ?= =?iso-8859-1?Q?ZCCs3IvytwiKU+2yz+WCMXEtMzd5erlw/h9V1g+YwR1G5UpyKv+F/gSBrJ?= =?iso-8859-1?Q?t/p+St6Ha1Cp2pKBIi8kODxnSvL+E818hZgl281gQlLAb0UQnlFL1nkU7V?= =?iso-8859-1?Q?AMkIIn/JRtvfpjKvmNfV01+vMAc4WeHTrQ?= Content-Type: multipart/mixed; boundary="_002_DBBPR83MB0507788F756288750A6327F8F7469DBBPR83MB0507EURP_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DBBPR83MB0507.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7326e82b-744b-4734-5391-08daa6d4cdd9 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2022 13:23:34.2884 (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: EX2nVToIoce0SMrHG6TYsMgEM8HW/kqCucVNqTEN5NesLD8mQOM9dzcrnJA+GT/VPvbhcJQHxdjbc/shOT6ynw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR83MB0427 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_DBBPR83MB0507788F756288750A6327F8F7469DBBPR83MB0507EURP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Thanks for all the feedback. I attached a new patch that I think=0A= addresses all of it. Below some additional info.=0A= =0A= > On the whole it feels like a mistake to have two separate kinds of=0A= > PGconn with fundamentally different behaviors and yet no distinction=0A= > in the API.=A0 I think I'd recommend having a separate struct type=0A= > (which might internally contain little more than a pointer to a=0A= > cloned PGconn), and provide only a limited set of operations on it.=0A= =0A= In my first version of this patch, this is exactly what I did. But then=0A= I got this feedback from Jacob, so I changed it to reusing PGconn:=0A= =0A= > > /* issue a cancel request */=0A= > > extern int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);= =0A= > > +extern PGcancelConn * PQcancelConnectStart(PGconn *conn);=0A= > > +extern PGcancelConn * PQcancelConnect(PGconn *conn);=0A= > > +extern PostgresPollingStatusType PQcancelConnectPoll(PGcancelConn * ca= ncelConn);=0A= > > +extern ConnStatusType PQcancelStatus(const PGcancelConn * cancelConn);= =0A= > > +extern int PQcancelSocket(const PGcancelConn * cancelConn);=0A= > > +extern char *PQcancelErrorMessage(const PGcancelConn * cancelConn);=0A= > > +extern void PQcancelFinish(PGcancelConn * cancelConn);=0A= >=0A= > That's a lot of new entry points, most of which don't do anything=0A= > except call their twin after a pointer cast. How painful would it be to= =0A= > just use the existing APIs as-is, and error out when calling=0A= > unsupported functions if conn->cancelRequest is true?=0A= =0A= I changed it back to use PGcancelConn as per your suggestion and I =0A= agree that the API got better because of it.=0A= =0A= > +=A0=A0=A0=A0=A0=A0 CONNECTION_CANCEL_FINISHED,=0A= >=A0=A0=A0=A0=A0=A0=A0 /* Non-blocking mode only below here */=0A= > =0A= > is an absolute non-starter: it breaks ABI for every libpq client,=0A= > even ones that aren't using this facility.=A0=0A= =0A= I removed this now. The main reason was so it was clear that no=0A= queries could be sent over the connection, like is normally the case=0A= when CONNECTION_OK happens. I don't think this is as useful anymore=0A= now that this patch has a dedicated PGcancelStatus function.=0A= NOTE: The CONNECTION_STARTING ConnStatusType is still necessary.=0A= But to keep ABI compatibility I moved it to the end of the enum.=0A= =0A= > Alternatively, we could teach libpq_pipeline=0A= > to do getenv("PG_TEST_TIMEOUT_DEFAULT") with a fallback to 180,=0A= > but that feels like it might be overly familiar with the innards=0A= > of Utils.pm.=0A= =0A= I went with this approach, because this environment variable was=0A= already used in 2 other places than Utils.pm: =0A= - contrib/test_decoding/sql/twophase.sql=0A= - src/test/isolation/isolationtester.c=0A= =0A= So, one more place seemed quite harmless.=0A= =0A= P.S. I noticed a logical conflict between this patch and my libpq load =0A= balancing patch. Because this patch depends on the connhost array =0A= is constructed the exact same on the second invocation of connectOptions2.= =0A= But the libpq loadbalancing patch breaks this assumption. I'm making=0A= a mental (and public) note that whichever of these patches gets merged last= =0A= should address this issue. = --_002_DBBPR83MB0507788F756288750A6327F8F7469DBBPR83MB0507EURP_ Content-Type: application/octet-stream; name="0001-Add-non-blocking-version-of-PQcancel.patch" Content-Description: 0001-Add-non-blocking-version-of-PQcancel.patch Content-Disposition: attachment; filename="0001-Add-non-blocking-version-of-PQcancel.patch"; size=53296; creation-date="Wed, 05 Oct 2022 13:23:21 GMT"; modification-date="Wed, 05 Oct 2022 13:23:21 GMT" Content-Transfer-Encoding: base64 RnJvbSA0MzdiMDk4YjJlYzYzMzRhZmZiMmQ4MThjZjkxNTRjN2YxNzBlMmRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxqZWx0ZS5mZW5uZW1hQG1pY3Jvc29m dC5jb20+CkRhdGU6IFdlZCwgMTIgSmFuIDIwMjIgMDk6NTI6MDUgKzAxMDAKU3ViamVjdDogW1BB VENIXSBBZGQgbm9uLWJsb2NraW5nIHZlcnNpb24gb2YgUFFjYW5jZWwKClRoaXMgcGF0Y2ggZG9l cyBmb3VyIHRoaW5nczoKMS4gQ2hhbmdlIHRoZSBQUXJlcXVlc3RDYW5jZWwgaW1wbGVtZW50YXRp b24gdG8gdXNlIHRoZSByZWd1bGFyCiAgICBjb25uZWN0aW9uIGVzdGFibGlzaGVtZW50IGNvZGUs IHRvIHN1cHBvcnQgYWxsIGNvbm5lY3Rpb24gb3B0aW9ucwogICAgaW5jbHVkaW5nIGVuY3J5cHRp b24uCjIuIEFkZCBQUXJlcXVlc3RDYW5jZWxTdGFydCB3aGljaCBpcyBhIHRocmVhZC1zYWZlIGFu ZCBub24tYmxvY2tpbmcKICAgIHZlcnNpb24gb2YgdGhpcyBuZXcgUFFyZXF1ZXN0Q2FuY2VsIGlt cGxlbWVudGF0aW9uLgozLiBBZGQgUFFjb25uZWN0Q29tcGxldGUsIHdoaWNoIGNvbXBsZXRlcyBh IGNvbm5lY3Rpb24gc3RhcnRlZCBieQogICAgUFFyZXF1ZXN0Q2FuY2VsU3RhcnQuIFRoaXMgaXMg dXNlZnVsIGlmIHlvdSB3YW50IGEgdGhyZWFkLXNhZmUgYnV0CiAgICBibG9ja2luZyBjYW5jZWwg KHdpdGhvdXQgaGF2aW5nIGEgbmVlZCBmb3Igc2lnbmFsLXNhZmV0eSkuCjQuIFVzZSB0aGlzIG5l dyBjYW5jZWxsYXRpb24gQVBJIGV2ZXJ5d2hlcmUgaW4gdGhlIGNvZGViYXNlIHdoZXJlCiAgICBz aWduYWwtc2FmZXR5IGlzIG5vdCBhIG5lY2Vzc2l0eS4KClRoaXMgY2hhbmdlIHVuLWRlcHJlY2F0 ZXMgUFFyZXF1ZXN0Q2FuY2VsLCBzaW5jZSBub3cgdGhlcmUncyBhY3R1YWxseSBhbgphZHZhbnRh Z2UgdG8gdXNpbmcgaXQgb3ZlciBQUWNhbmNlbC4gSXQgYWxzbyBpbmNsdWRlcyB1c2VyIGZhY2lu Zwpkb2N1bWVudGF0aW9uIGZvciBhbGwgdGhlIG5ld2x5IGFkZGVkIGZ1bmN0aW9ucy4KClRoZSBl eGlzdGluZyBQUWNhbmNlbCBBUEkgaXMgdXNpbmcgYmxvY2tpbmcgSU8uIFRoaXMgbWFrZXMgUFFj YW5jZWwKaW1wb3NzaWJsZSB0byB1c2UgaW4gYW4gZXZlbnQgbG9vcCBiYXNlZCBjb2RlYmFzZSwg d2l0aG91dCBibG9ja2luZyB0aGUKZXZlbnQgbG9vcCB1bnRpbCB0aGUgY2FsbCByZXR1cm5zLiBQ UXJlcXVlc3RDYW5jZWxTdGFydCBjYW4gbm93IGJlIHVzZWQKaW5zdGVhZCwgdG8gaGF2ZSBhIG5v bi1ibG9ja2luZyB3YXkgb2Ygc2VuZGluZyBjYW5jZWwgcmVxdWVzdHMuIFRoZQpwb3N0Z3Jlc19m ZHcgY2FuY2VsbGF0aW9uIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbWFrZSB1c2Ugb2YgdGhp cy4KClRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIHRlc3QgZm9yIGFsbCBvZiBsaWJwcSBjYW5j ZWxsYXRpb24gQVBJcy4gVGhlCnRlc3QgY2FuIGJlIGVhc2lseSBydW4gbGlrZSB0aGlzOgoKICAg IGNkIHNyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUKICAgIG1ha2UgJiYgLi9saWJwcV9w aXBlbGluZSBjYW5jZWwKLS0tCiBjb250cmliL2RibGluay9kYmxpbmsuYyAgICAgICAgICAgICAg ICAgICAgICAgfCAgMjggKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyAgICAg ICAgICAgICB8ICA5MyArKysrLQogLi4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19m ZHcub3V0ICAgIHwgIDE1ICsKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcu c3FsICAgICB8ICAgOCArCiBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbCAgICAgICAgICAgICAgICAg ICAgICAgfCAyMTIgKysrKysrKysrLS0KIHNyYy9mZV91dGlscy9jb25uZWN0X3V0aWxzLmMgICAg ICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQg ICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyAg ICAgICAgICAgICB8IDM0MSArKysrKysrKysrKysrKystLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLW1pc2MuYyAgICAgICAgICAgICAgICB8ICAxNSArLQogc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtc2VjdXJlLW9wZW5zc2wuYyAgICAgIHwgICAyICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1zZWN1cmUuYyAgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvbGli cHEtZmUuaCAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS1pbnQuaCAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlv bnRlc3Rlci5jICAgICAgICAgIHwgIDI4ICstCiAuLi4vbW9kdWxlcy9saWJwcV9waXBlbGluZS9s aWJwcV9waXBlbGluZS5jICAgfCAyNzQgKysrKysrKysrKysrKy0KIDE1IGZpbGVzIGNoYW5nZWQs IDg5NCBpbnNlcnRpb25zKCspLCAxNTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9kYmxpbmsvZGJsaW5rLmMgYi9jb250cmliL2RibGluay9kYmxpbmsuYwppbmRleCBhNTYxZDFk NjUyLi5iNTcyY2Y2ZDViIDEwMDY0NAotLS0gYS9jb250cmliL2RibGluay9kYmxpbmsuYworKysg Yi9jb250cmliL2RibGluay9kYmxpbmsuYwpAQCAtMTM3OSwyMiArMTM3OSwzMCBAQCBQR19GVU5D VElPTl9JTkZPX1YxKGRibGlua19jYW5jZWxfcXVlcnkpOwogRGF0dW0KIGRibGlua19jYW5jZWxf cXVlcnkoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlpbnQJCQlyZXM7CiAJUEdjb25uCSAgICpjb25u OwotCVBHY2FuY2VsICAgKmNhbmNlbDsKLQljaGFyCQllcnJidWZbMjU2XTsKKwlQR2Nvbm4JICAg KmNhbmNlbENvbm47CisJY2hhcgkgICAqbXNnOwogCiAJZGJsaW5rX2luaXQoKTsKIAljb25uID0g ZGJsaW5rX2dldF9uYW1lZF9jb25uKHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgw KSkpOwotCWNhbmNlbCA9IFBRZ2V0Q2FuY2VsKGNvbm4pOwotCi0JcmVzID0gUFFjYW5jZWwoY2Fu Y2VsLCBlcnJidWYsIDI1Nik7Ci0JUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisJY2FuY2VsQ29ubiA9 IFBRcmVxdWVzdENhbmNlbFN0YXJ0KGNvbm4pOworCWlmIChQUXN0YXR1cyhjYW5jZWxDb25uKSA9 PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCW1zZyA9IHBjaG9tcChQUWVycm9yTWVzc2FnZShjYW5j ZWxDb25uKSk7CisJCVBRZmluaXNoKGNhbmNlbENvbm4pOworCQlQR19SRVRVUk5fVEVYVF9QKGNz dHJpbmdfdG9fdGV4dChtc2cpKTsKKwl9CiAKLQlpZiAocmVzID09IDEpCi0JCVBHX1JFVFVSTl9U RVhUX1AoY3N0cmluZ190b190ZXh0KCJPSyIpKTsKKwlpZiAoUFFjb25uZWN0Q29tcGxldGUoY2Fu Y2VsQ29ubikpCisJeworCQltc2cgPSAiT0siOworCX0KIAllbHNlCi0JCVBHX1JFVFVSTl9URVhU X1AoY3N0cmluZ190b190ZXh0KGVycmJ1ZikpOworCXsKKwkJbXNnID0gcGNob21wKFBRZXJyb3JN ZXNzYWdlKGNhbmNlbENvbm4pKTsKKwl9CisJUFFmaW5pc2goY2FuY2VsQ29ubik7CisJUEdfUkVU VVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQobXNnKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29u bmVjdGlvbi5jCmluZGV4IDA2MWZmYWYzMjkuLmZhNDcyNzRkMTUgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9j b25uZWN0aW9uLmMKQEAgLTEyNjQsMzUgKzEyNjQsOTggQEAgcGdmZHdfcmVzZXRfeGFjdF9zdGF0 ZShDb25uQ2FjaGVFbnRyeSAqZW50cnksIGJvb2wgdG9wbGV2ZWwpCiBzdGF0aWMgYm9vbAogcGdm ZHdfY2FuY2VsX3F1ZXJ5KFBHY29ubiAqY29ubikKIHsKLQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0J Y2hhcgkJZXJyYnVmWzI1Nl07CiAJUEdyZXN1bHQgICAqcmVzdWx0ID0gTlVMTDsKLQlUaW1lc3Rh bXBUeiBlbmR0aW1lOwotCWJvb2wJCXRpbWVkX291dDsKIAogCS8qCiAJICogSWYgaXQgdGFrZXMg dG9vIGxvbmcgdG8gY2FuY2VsIHRoZSBxdWVyeSBhbmQgZGlzY2FyZCB0aGUgcmVzdWx0LCBhc3N1 bWUKIAkgKiB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLgogCSAqLwotCWVuZHRpbWUgPSBUaW1lc3Rh bXBUelBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLCAzMDAwMCk7CisJVGlt ZXN0YW1wVHogZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50 VGltZXN0YW1wKCksIDMwMDAwKTsKKwlib29sCQl0aW1lZF9vdXQgPSBmYWxzZTsKKwlib29sCQlm YWlsZWQgPSBmYWxzZTsKKwlQR2Nvbm4JICAgKmNhbmNlbF9jb25uID0gUFFyZXF1ZXN0Q2FuY2Vs U3RhcnQoY29ubik7CiAKLQkvKgotCSAqIElzc3VlIGNhbmNlbCByZXF1ZXN0LiAgVW5mb3J0dW5h dGVseSwgdGhlcmUncyBubyBnb29kIHdheSB0byBsaW1pdCB0aGUKLQkgKiBhbW91bnQgb2YgdGlt ZSB0aGF0IHdlIG1pZ2h0IGJsb2NrIGluc2lkZSBQUWdldENhbmNlbCgpLgotCSAqLwotCWlmICgo Y2FuY2VsID0gUFFnZXRDYW5jZWwoY29ubikpKQorCisJaWYgKFBRc3RhdHVzKGNhbmNlbF9jb25u KSA9PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJIGVycm1zZygiY291bGQgbm90IHNl bmQgY2FuY2VsIHJlcXVlc3Q6ICVzIiwKKwkJCQkJCXBjaG9tcChQUWVycm9yTWVzc2FnZShjYW5j ZWxfY29ubikpKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogSW4gd2hhdCBmb2xsb3dz LCBkbyBub3QgbGVhayBhbnkgUEdjb25uIG9uIGFuIGVycm9yLiAqLworCVBHX1RSWSgpOworCXsK KwkJd2hpbGUgKHRydWUpCisJCXsKKwkJCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1l c3RhbXAoKTsKKwkJCWxvbmcJCWN1cl90aW1lb3V0OworCQkJUG9zdGdyZXNQb2xsaW5nU3RhdHVz VHlwZSBwb2xscmVzID0gUFFjb25uZWN0UG9sbChjYW5jZWxfY29ubik7CisJCQlpbnQJCQl3YWl0 RXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7 CisKKwkJCWlmIChwb2xscmVzID09IFBHUkVTX1BPTExJTkdfT0spCisJCQl7CisJCQkJYnJlYWs7 CisJCQl9CisKKwkJCS8qIElmIHRpbWVvdXQgaGFzIGV4cGlyZWQsIGdpdmUgdXAsIGVsc2UgZ2V0 IHNsZWVwIHRpbWUuICovCisJCQljdXJfdGltZW91dCA9IFRpbWVzdGFtcERpZmZlcmVuY2VNaWxs aXNlY29uZHMobm93LCBlbmR0aW1lKTsKKwkJCWlmIChjdXJfdGltZW91dCA8PSAwKQorCQkJewor CQkJCXRpbWVkX291dCA9IHRydWU7CisJCQkJZmFpbGVkID0gdHJ1ZTsKKwkJCQlnb3RvIGV4aXQ7 CisJCQl9CisKKwkJCXN3aXRjaCAocG9sbHJlcykKKwkJCXsKKwkJCQljYXNlIFBHUkVTX1BPTExJ TkdfUkVBRElORzoKKwkJCQkJd2FpdEV2ZW50cyB8PSBXTF9TT0NLRVRfUkVBREFCTEU7CisJCQkJ CWJyZWFrOworCQkJCWNhc2UgUEdSRVNfUE9MTElOR19XUklUSU5HOgorCQkJCQl3YWl0RXZlbnRz IHw9IFdMX1NPQ0tFVF9XUklURUFCTEU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJ CWZhaWxlZCA9IHRydWU7CisJCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJLyogU2xlZXAgdW50 aWwgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KKwkJCVdhaXRMYXRjaE9yU29ja2V0KE15TGF0 Y2gsIHdhaXRFdmVudHMsIFBRc29ja2V0KGNhbmNlbF9jb25uKSwKKwkJCQkJCQkgIGN1cl90aW1l b3V0LCBQR19XQUlUX0VYVEVOU0lPTik7CisJCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CitleGl0Ogk7CisJfQorCVBHX0NBVENIKCk7CiAJ ewotCQlpZiAoIVBRY2FuY2VsKGNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSkpCisJCVBR ZmluaXNoKGNhbmNlbF9jb25uKTsKKwkJUEdfUkVfVEhST1coKTsKKwl9CisJUEdfRU5EX1RSWSgp OworCisJaWYgKGZhaWxlZCkKKwl7CisJCWlmICh0aW1lZF9vdXQpCisJCXsKKwkJCWVyZXBvcnQo V0FSTklORywKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGNhbmNlbCByZXF1ZXN0IGR1ZSB0byB0 aW1lb3V0IikpKTsKKwkJfQorCQllbHNlCiAJCXsKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJ KGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAogCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3Qgc2VuZCBjYW5jZWwgcmVxdWVzdDogJXMiLAotCQkJCQkJCWVycmJ1ZikpKTsKLQkJCVBR ZnJlZUNhbmNlbChjYW5jZWwpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCXBjaG9tcChQUWVy cm9yTWVzc2FnZShjYW5jZWxfY29ubikpKSkpOwogCQl9Ci0JCVBRZnJlZUNhbmNlbChjYW5jZWwp OworCQlQUWZpbmlzaChjYW5jZWxfY29ubik7CisJCXJldHVybiBmYWlsZWQ7CiAJfQorCVBRZmlu aXNoKGNhbmNlbF9jb25uKTsKIAogCS8qIEdldCBhbmQgZGlzY2FyZCB0aGUgcmVzdWx0IG9mIHRo ZSBxdWVyeS4gKi8KIAlpZiAocGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0KGNvbm4sIGVuZHRpbWUs ICZyZXN1bHQsICZ0aW1lZF9vdXQpKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv ZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVk L3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggNDQ0NTdmOTMwYy4uNmQxMDhiNTZlZiAxMDA2NDQKLS0t IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0yNTY3LDYg KzI1NjcsMjEgQEAgU0VMRUNUIHQxLmMxLCB0Mi5jMiBGUk9NIHY0IHQxIExFRlQgSk9JTiBmdDUg dDIgT04gKHQxLmMxID0gdDIuYzEpIE9SREVSIEJZIHQxLmMKICgxMCByb3dzKQogCiBBTFRFUiBW SUVXIHY0IE9XTkVSIFRPIHJlZ3Jlc3Nfdmlld19vd25lcjsKKy0tIE1ha2Ugc3VyZSB0aGlzIGJp ZyBDUk9TUyBKT0lOIHF1ZXJ5IGlzIHB1c2hlZCBkb3duCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIGZ0MSBDUk9TUyBKT0lOIGZ0MiBDUk9TUyBKT0lO IGZ0NCBDUk9TUyBKT0lOIGZ0NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgRm9yZWlnbiBTY2FuCisgICBPdXRwdXQ6IChjb3VudCgqKSkKKyAgIFJl bGF0aW9uczogQWdncmVnYXRlIG9uICgoKChwdWJsaWMuZnQxKSBJTk5FUiBKT0lOIChwdWJsaWMu ZnQyKSkgSU5ORVIgSk9JTiAocHVibGljLmZ0NCkpIElOTkVSIEpPSU4gKHB1YmxpYy5mdDUpKQor ICAgUmVtb3RlIFNRTDogU0VMRUNUIGNvdW50KCopIEZST00gKCgoIlMgMSIuIlQgMSIgcjEgSU5O RVIgSk9JTiAiUyAxIi4iVCAxIiByMiBPTiAoVFJVRSkpIElOTkVSIEpPSU4gIlMgMSIuIlQgMyIg cjQgT04gKFRSVUUpKSBJTk5FUiBKT0lOICJTIDEiLiJUIDQiIHI2IE9OIChUUlVFKSkKKyg0IHJv d3MpCisKKy0tIE1ha2Ugc3VyZSBxdWVyeSBjYW5jZWxsYXRpb24gd29ya3MKK1NFVCBzdGF0ZW1l bnRfdGltZW91dCA9ICcxMG1zJzsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGZ0MSBDUk9TUyBKT0lO IGZ0MiBDUk9TUyBKT0lOIGZ0NCBDUk9TUyBKT0lOIGZ0NTsgLS0gdGhpcyB0YWtlcyB2ZXJ5IGxv bmcKK0VSUk9SOiAgY2FuY2VsaW5nIHN0YXRlbWVudCBkdWUgdG8gc3RhdGVtZW50IHRpbWVvdXQK K1JFU0VUIHN0YXRlbWVudF90aW1lb3V0OwogLS0gY2xlYW51cAogRFJPUCBPV05FRCBCWSByZWdy ZXNzX3ZpZXdfb3duZXI7CiBEUk9QIFJPTEUgcmVncmVzc192aWV3X293bmVyOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCA5MmQxMjEyMDI3Li43ZTAyZWQ2 ODAzIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNx bAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMzI2 LDYgKzMyNiw3IEBAIERFTEVURSBGUk9NIGxvY3RfZW1wdHk7CiBBTkFMWVpFIGZ0X2VtcHR5Owog RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGZ0X2VtcHR5IE9SREVS IEJZIGMxOwogCisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIFdIRVJFIHdpdGggcmVtb3RlbHktZXhlY3V0 YWJsZSBjb25kaXRpb25zCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC02ODEsNiArNjgyLDEzIEBAIFNFTEVD VCB0MS5jMSwgdDIuYzIgRlJPTSB2NCB0MSBMRUZUIEpPSU4gZnQ1IHQyIE9OICh0MS5jMSA9IHQy LmMxKSBPUkRFUiBCWSB0MS5jCiBTRUxFQ1QgdDEuYzEsIHQyLmMyIEZST00gdjQgdDEgTEVGVCBK T0lOIGZ0NSB0MiBPTiAodDEuYzEgPSB0Mi5jMSkgT1JERVIgQlkgdDEuYzEsIHQyLmMxIE9GRlNF VCAxMCBMSU1JVCAxMDsKIEFMVEVSIFZJRVcgdjQgT1dORVIgVE8gcmVncmVzc192aWV3X293bmVy OwogCistLSBNYWtlIHN1cmUgdGhpcyBiaWcgQ1JPU1MgSk9JTiBxdWVyeSBpcyBwdXNoZWQgZG93 bgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgY291bnQoKikgRlJPTSBmdDEg Q1JPU1MgSk9JTiBmdDIgQ1JPU1MgSk9JTiBmdDQgQ1JPU1MgSk9JTiBmdDU7CistLSBNYWtlIHN1 cmUgcXVlcnkgY2FuY2VsbGF0aW9uIHdvcmtzCitTRVQgc3RhdGVtZW50X3RpbWVvdXQgPSAnMTBt cyc7CitzZWxlY3QgY291bnQoKikgZnJvbSBmdDEgQ1JPU1MgSk9JTiBmdDIgQ1JPU1MgSk9JTiBm dDQgQ1JPU1MgSk9JTiBmdDU7IC0tIHRoaXMgdGFrZXMgdmVyeSBsb25nCitSRVNFVCBzdGF0ZW1l bnRfdGltZW91dDsKKwogLS0gY2xlYW51cAogRFJPUCBPV05FRCBCWSByZWdyZXNzX3ZpZXdfb3du ZXI7CiBEUk9QIFJPTEUgcmVncmVzc192aWV3X293bmVyOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2xpYnBxLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAppbmRleCAzN2VjM2NiNGU1 Li44ZTAzM2JiOGYzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvbGlicHEuc2dtbApAQCAtMjY1LDcgKzI2NSw3IEBAIFBHY29ubiAqUFFzZXRk YihjaGFyICpwZ2hvc3QsCiAgICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFjb25uZWN0U3Rh cnRQYXJhbXMiPgogICAgICA8dGVybT48ZnVuY3Rpb24+UFFjb25uZWN0U3RhcnRQYXJhbXM8L2Z1 bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25uZWN0U3RhcnRQYXJhbXM8L3ByaW1hcnk+ PC9pbmRleHRlcm0+PC90ZXJtPgogICAgICA8dGVybT48ZnVuY3Rpb24+UFFjb25uZWN0U3RhcnQ8 L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25uZWN0U3RhcnQ8L3ByaW1hcnk+PC9p bmRleHRlcm0+PC90ZXJtPgotICAgICA8dGVybT48ZnVuY3Rpb24+UFFjb25uZWN0UG9sbDwvZnVu Y3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RQb2xsPC9wcmltYXJ5PjwvaW5kZXh0 ZXJtPjwvdGVybT4KKyAgICAgPHRlcm0gaWQ9ImxpYnBxLVBRY29ubmVjdFBvbGwiPjxmdW5jdGlv bj5QUWNvbm5lY3RQb2xsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY29ubmVjdFBv bGw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8 cGFyYT4KICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5Pm5vbmJsb2NraW5nIGNvbm5lY3Rpb248 L3ByaW1hcnk+PC9pbmRleHRlcm0+CkBAIC00OTksNiArNDk5LDMwIEBAIHN3aXRjaChQUXN0YXR1 cyhjb25uKSkKICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgIDx2 YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRY29ubmVjdENvbXBsZXRlIj4KKyAgICAgPHRlcm0+PGZ1 bmN0aW9uPlBRY29ubmVjdENvbXBsZXRlPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBR Y29ubmVjdENvbXBsZXRlPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKyAgICAgPGxpc3Rp dGVtPgorICAgICAgPHBhcmE+CisgICAgICAgQ29tcGxldGUgdGhlIGNvbm5lY3Rpb24gYXR0ZW1w dCBvbiBhIG5vbmJsb2NraW5nIGNvbm5lY3Rpb24gYW5kIGJsb2NrCisgICAgICAgdW50aWwgaXQg aXMgY29tcGxldGVkLgorCis8c3lub3BzaXM+CitpbnQgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNv bm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAg VGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mCisgICAgICAgPHhyZWYgbGlua2Vu ZD0ibGlicHEtUFFjb25uZWN0UG9sbCIvPgorICAgICAgIHRvIGNvbXBsZXRlIGEgY29ubmVjdGlv biB0aGF0IHdhcyBpbml0aWFsbHkgc3RhcnRlZCBpbiBhIG5vbiBibG9ja2luZworICAgICAgIG1h bm5lci4gSG93ZXZlciwgaW5zdGVhZCBvZiBjb250aW51aW5nIHRvIGNvbXBsZXRlIHRoZSBjb25u ZWN0aW9uIGluIGEKKyAgICAgICBub24gYmxvY2tpbmcgd2F5LCBjYWxsaW5nIHRoaXMgZnVuY3Rp b24gd2lsbCBibG9jayB1bnRpbCB0aGUgY29ubmVjdGlvbgorICAgICAgIGlzIGNvbXBsZXRlZC4g VGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB0byBjb21wbGV0ZSBjb25uZWN0aW9ucyB0aGF0IHdl cmUKKyAgICAgICBzdGFydGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNl bFN0YXJ0Ii8+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFjb25uZGVmYXVsdHMiPgog ICAgICA8dGVybT48ZnVuY3Rpb24+UFFjb25uZGVmYXVsdHM8L2Z1bmN0aW9uPjxpbmRleHRlcm0+ PHByaW1hcnk+UFFjb25uZGVmYXVsdHM8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgogICAg ICA8bGlzdGl0ZW0+CkBAIC02NjAsNyArNjg0LDcgQEAgdm9pZCBQUXJlc2V0KFBHY29ubiAqY29u bik7CiAKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUXJlc2V0U3RhcnQiPgogICAgICA8 dGVybT48ZnVuY3Rpb24+UFFyZXNldFN0YXJ0PC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5 PlBRcmVzZXRTdGFydDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+Ci0gICAgIDx0ZXJtPjxm dW5jdGlvbj5QUXJlc2V0UG9sbDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUXJlc2V0 UG9sbDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CisgICAgIDx0ZXJtIGlkPSJsaWJwcS1Q UXJlc2V0UG9sbCI+PGZ1bmN0aW9uPlBRcmVzZXRQb2xsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxw cmltYXJ5PlBRcmVzZXRQb2xsPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KICAgICAgPGxp c3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAgICAgUmVzZXQgdGhlIGNvbW11bmljYXRpb24gY2hh bm5lbCB0byB0aGUgc2VydmVyLCBpbiBhIG5vbmJsb2NraW5nIG1hbm5lci4KQEAgLTU2MTcsMTMg KzU2NDEsMTM3IEBAIGludCBQUXNldFNpbmdsZVJvd01vZGUoUEdjb25uICpjb25uKTsKICAgIHRo aXMgc2VjdGlvbi4KIAogICAgPHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5IGlkPSJs aWJwcS1QUXJlcXVlc3RDYW5jZWwiPgorICAgICA8dGVybT48ZnVuY3Rpb24+UFFyZXF1ZXN0Q2Fu Y2VsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVxdWVzdENhbmNlbDwvcHJpbWFy eT48L2luZGV4dGVybT48L3Rlcm0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Cisg ICAgICAgUmVxdWVzdHMgdGhhdCB0aGUgc2VydmVyIGFiYW5kb25zIHByb2Nlc3Npbmcgb2YgdGhl IGN1cnJlbnQgY29tbWFuZC4KKzxzeW5vcHNpcz4KK2ludCBQUXJlcXVlc3RDYW5jZWwoUEdjb25u ICpjb25uKTsKKzwvc3lub3BzaXM+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAg ICAgIFRoaXMgcmVxdWVzdCBpcyBtYWRlIG92ZXIgYSBjb25uZWN0aW9uIHRoYXQgdXNlcyB0aGUg c2FtZSBjb25uZWN0aW9uCisgICAgICAgb3B0aW9ucyBhcyB0aGUgdGhlIG9yaWdpbmFsIDxzdHJ1 Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4uIFNvIHdoZW4gdGhlCisgICAgICAgb3JpZ2luYWwg Y29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQgKHVzaW5nIFRMUyBvciBHU1MpLCB0aGUgY29ubmVjdGlv biBmb3IKKyAgICAgICB0aGUgY2FuY2VsIHJlcXVlc3QgY29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQg aW4gdGhlIHNhbWUuIEFueSBjb25uZWN0aW9uCisgICAgICAgb3B0aW9ucyB0aGF0IG9ubHkgbWFr ZSBzZW5zZSBmb3IgYXV0aGVudGljYXRpb24gb3IgYWZ0ZXIgYXV0aGVudGljYXRpb24KKyAgICAg ICBhcmUgaWdub3JlZCB0aG91Z2gsIGJlY2F1c2UgY2FuY2VsbGF0aW9uIHJlcXVlc3RzIGRvIG5v dCByZXF1aXJlCisgICAgICAgYXV0aGVudGljYXRpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAg IDxwYXJhPgorICAgICAgIFRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhlIDxz dHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4KKyAgICAgICBvYmplY3QsIGFuZCBpbiBjYXNl IG9mIGZhaWx1cmUgc3RvcmVzIHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZQorICAgICAgIDxzdHJ1 Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gb2JqZWN0ICh3aGVuY2UgaXQgY2FuIGJlIHJldHJp ZXZlZAorICAgICAgIGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRZXJyb3JNZXNzYWdlIi8+KS4g VGhpcyBiZWhhdmlvdXIgbWFrZXMgdGhpcworICAgICAgIGZ1bmN0aW9uIHVuc2FmZSB0byBjYWxs IGZyb20gd2l0aGluIG11bHRpLXRocmVhZGVkIHByb2dyYW1zIG9yCisgICAgICAgc2lnbmFsIGhh bmRsZXJzLCBzaW5jZSBpdCBpcyBwb3NzaWJsZSB0aGF0IG92ZXJ3cml0aW5nIHRoZQorICAgICAg IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4ncyBlcnJvciBtZXNzYWdlIHdpbGwKKyAg ICAgICBtZXNzIHVwIHRoZSBvcGVyYXRpb24gY3VycmVudGx5IGluIHByb2dyZXNzIG9uIHRoZSBj b25uZWN0aW9uIGluIGFub3RoZXIKKyAgICAgICB0aHJlYWQuCisgICAgICA8L3BhcmE+CisKKyAg ICAgIDxwYXJhPgorICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgMSBpZiB0aGUgY2FuY2VsIHJl cXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseQorICAgICAgIGRpc3BhdGNoZWQgYW5kIDAgaWYgbm90LiBT dWNjZXNzZnVsIGRpc3BhdGNoIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZQorICAgICAgIHJlcXVl c3Qgd2lsbCBoYXZlIGFueSBlZmZlY3QsIGhvd2V2ZXIuIElmIHRoZSBjYW5jZWxsYXRpb24gaXMg ZWZmZWN0aXZlLAorICAgICAgIHRoZSBjdXJyZW50IGNvbW1hbmQgd2lsbCB0ZXJtaW5hdGUgZWFy bHkgYW5kIHJldHVybiBhbiBlcnJvciByZXN1bHQuIElmCisgICAgICAgdGhlIGNhbmNlbGxhdGlv biBmYWlscyAoc2F5LCBiZWNhdXNlIHRoZSBzZXJ2ZXIgd2FzIGFscmVhZHkgZG9uZQorICAgICAg IHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQpLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gdmlzaWJsZSBy ZXN1bHQgYXQKKyAgICAgICBhbGwuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+Cisg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUXJlcXVl c3RDYW5jZWxTdGFydCI+CisgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUXJlcXVlc3RDYW5jZWxTdGFy dDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUXJlcXVlc3RDYW5jZWxTdGFydDwvcHJp bWFyeT48L2luZGV4dGVybT48L3Rlcm0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgQSB2ZXJzaW9uIG9mCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1 ZXN0Q2FuY2VsIi8+CisgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aHJlYWQtc2FmZSBhbmQv b3Igbm9uLWJsb2NraW5nIG1hbm5lci4KKzxzeW5vcHNpcz4KK1BHY29ubiAqUFFyZXF1ZXN0Q2Fu Y2VsU3RhcnQoUEdjb25uICpjb25uKTsKKzwvc3lub3BzaXM+CisgICAgICA8L3BhcmE+CisKKyAg ICAgIDxwYXJhPgorICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyA8c3RydWN0bmFt ZT5QR2Nvbm48L3N0cnVjdG5hbWU+LiBUaGlzCisgICAgICAgY29ubmVjdGlvbiBvYmplY3QgY2Fu IGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBxdWVyeSB0aGF0J3MgcnVubmluZyBvbiB0aGUKKyAgICAg ICBvcmlnaW5hbCBjb25uZWN0aW9uIGluIGEgdGhyZWFkLXNhZmUgd2F5LiBUbyBkbyBzbworICAg ICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPgorICAgICAgIG11c3Qg YmUgY2FsbGVkIHdoaWxlIG5vIG90aGVyIHRocmVhZCBpcyB1c2luZyB0aGUgb3JpZ2luYWwgUEdj b25uLiBUaGVuCisgICAgICAgdGhlIHJldHVybmVkIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0 bmFtZT4KKyAgICAgICBjYW4gYmUgdXNlZCBhdCBhIGxhdGVyIHBvaW50IGluIGFueSB0aHJlYWQg dG8gc2VuZCBhIGNhbmNlbCByZXF1ZXN0LgorICAgICAgIEEgY2FuY2VsIHJlcXVlc3QgY2FuIGJl IHNlbnQgdXNpbmcgdGhlIHJldHVybmVkIFBHY29ubiBpbiB0d28gd2F5cywKKyAgICAgICBub24t YmxvY2tpbmcgdXNpbmcgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0UG9sbCIvPgorICAg ICAgIG9yIGJsb2NraW5nIHVzaW5nICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RDb21w bGV0ZSIvPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgSW4gYWRkaXRp b24gdG8gYWxsIHRoZSBzdGF0dXNlcyB0aGF0IGEgcmVndWxhcgorICAgICAgIDxzdHJ1Y3RuYW1l PlBHY29ubjwvc3RydWN0bmFtZT4KKyAgICAgICBjYW4gaGF2ZSByZXR1cm5lZCBjb25uZWN0aW9u IGNhbiBoYXZlIHR3byBhZGRpdGlvbmFsIHN0YXR1c2VzOgorCisgICAgICAgPHZhcmlhYmxlbGlz dD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtY29ubmVjdGlvbi1zdGFydGluZyI+ CisgICAgICAgICA8dGVybT48c3ltYm9sPkNPTk5FQ1RJT05fU1RBUlRJTkc8L3N5bWJvbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIFdh aXRpbmcgZm9yIHRoZSBmaXJzdCBjYWxsIHRvIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY29ubmVj dFBvbGwiLz4sCisgICAgICAgICAgIHRvIGFjdHVhbGx5IG9wZW4gdGhlIHNvY2tldC4gVGhpcyBp cyB0aGUgY29ubmVjdGlvbiBzdGF0ZSByaWdodCBhZnRlcgorICAgICAgICAgICBjYWxsaW5nIDx4 cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPi4gTm8gY29ubmVjdGlvbiB0byB0 aGUKKyAgICAgICAgICAgc2VydmVyIGhhcyBiZWVuIGluaXRpYXRlZCB5ZXQgYXQgdGhpcyBwb2lu dC4gVG8gc3RhcnQgY2FuY2VsIHJlcXVlc3QKKyAgICAgICAgICAgaW5pdGlhdGlvbiB1c2UgPHhy ZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0UG9sbCIvPgorICAgICAgICAgICBmb3Igbm9uLWJs b2NraW5nIGJlaGF2aW91ciBhbmQgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0Q29tcGxl dGUiLz4KKyAgICAgICAgICAgZm9yIGJsb2NraW5nIGJlaGF2aW91ci4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1jb25uZWN0aW9uLWNhbmNlbC1maW5pc2hlZCI+ CisgICAgICAgICA8dGVybT48c3ltYm9sPkNPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVEPC9zeW1i b2w+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAg ICAgICBDYW5jZWwgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuIEl0J3Mgbm90IHBvc3Np YmxlIHRvIGNvbnRpbnVlCisgICAgICAgICAgIHVzaW5nIHRoZSBjYW5jZWxsYXRpb24gY29ubmVj dGlvbiBub3csIHNvIGl0IHNob3VsZCBiZSBmcmVlZCB1c2luZworICAgICAgICAgICA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUWZpbmlzaCIvPi4gSXQncyBhbHNvIHBvc3NpYmxlIHRvIHJlc2V0IHRo ZQorICAgICAgICAgICBjYW5jZWxsYXRpb24gY29ubmVjdGlvbiBpbnN0ZWFkIHVzaW5nCisgICAg ICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVzZXRTdGFydCIvPiwgdGhhdCB3YXkgaXQg Y2FuIGJlIHJldXNlZCB0bworICAgICAgICAgICBjYW5jZWwgYSBmdXR1cmUgcXVlcnkgb24gdGhl IHNhbWUgY29ubmVjdGlvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAg IDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgU2luY2UgdGhpcyBvYmplY3QgcmVwcmVz ZW50cyBhIGNvbm5lY3Rpb24gb25seSBtZWFudCBmb3IgY2FuY2VsbGF0aW9ucyBpdAorICAgICAg IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhIGxpbWl0ZWQgc3Vic2V0IG9mIHRoZSBmdW5jdGlvbnMg dGhhdCBjYW4gYmUgdXNlZAorICAgICAgIGZvciBhIHJlZ3VsYXIgPHN0cnVjdG5hbWU+UEdjb25u PC9zdHJ1Y3RuYW1lPiBvYmplY3QuIFRoZSBmdW5jdGlvbnMgdGhhdAorICAgICAgIHRoaXMgb2Jq ZWN0IGNhbiBiZSBwYXNzZWQgdG8gYXJlCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFz dGF0dXMiLz4sCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1lc3NhZ2UiLz4s CisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0Q29tcGxldGUiLz4sCisgICAg ICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0UG9sbCIvPiwKKyAgICAgICA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUXNvY2tldCIvPiwKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1Q UXJlc2V0U3RhcnQiLz4sIGFuZAorICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRZmluaXNo Ii8+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFnZXRDYW5jZWwiPgogICAgICA8dGVy bT48ZnVuY3Rpb24+UFFnZXRDYW5jZWw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFn ZXRDYW5jZWw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgogCiAgICAgIDxsaXN0aXRlbT4K ICAgICAgIDxwYXJhPgogICAgICAgIENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5n IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY2FuY2VsCi0gICAgICAgYSBjb21tYW5kIGlzc3Vl ZCB0aHJvdWdoIGEgcGFydGljdWxhciBkYXRhYmFzZSBjb25uZWN0aW9uLgorICAgICAgIGEgY29t bWFuZCB1c2luZyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPi4KIDxzeW5vcHNpcz4K IFBHY2FuY2VsICpQUWdldENhbmNlbChQR2Nvbm4gKmNvbm4pOwogPC9zeW5vcHNpcz4KQEAgLTU2 NjUsNyArNTgxMyw5IEBAIHZvaWQgUFFmcmVlQ2FuY2VsKFBHY2FuY2VsICpjYW5jZWwpOwogCiAg ICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIFJlcXVlc3RzIHRoYXQgdGhlIHNl cnZlciBhYmFuZG9uIHByb2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQgY29tbWFuZC4KKyAgICAgICBB IGxlc3Mgc2VjdXJlIHZlcnNpb24gb2YKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJl cXVlc3RDYW5jZWwiLz4KKyAgICAgICB0aGF0IGNhbiBiZSB1c2VkIHNhZmVseSBmcm9tIHdpdGhp biBhIHNpZ25hbCBoYW5kbGVyLgogPHN5bm9wc2lzPgogaW50IFBRY2FuY2VsKFBHY2FuY2VsICpj YW5jZWwsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZnNpemUpOwogPC9zeW5vcHNpcz4KQEAgLTU2 NzksMTUgKzU4MjksNiBAQCBpbnQgUFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCwgY2hhciAqZXJy YnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiAgICAgICAgcmVjb21tZW5kZWQgc2l6ZSBpcyAyNTYgYnl0 ZXMpLgogICAgICAgPC9wYXJhPgogCi0gICAgICA8cGFyYT4KLSAgICAgICBTdWNjZXNzZnVsIGRp c3BhdGNoIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1ZXN0IHdpbGwgaGF2ZQotICAgICAg IGFueSBlZmZlY3QsIGhvd2V2ZXIuICBJZiB0aGUgY2FuY2VsbGF0aW9uIGlzIGVmZmVjdGl2ZSwg dGhlIGN1cnJlbnQKLSAgICAgICBjb21tYW5kIHdpbGwgdGVybWluYXRlIGVhcmx5IGFuZCByZXR1 cm4gYW4gZXJyb3IgcmVzdWx0LiAgSWYgdGhlCi0gICAgICAgY2FuY2VsbGF0aW9uIGZhaWxzIChz YXksIGJlY2F1c2UgdGhlIHNlcnZlciB3YXMgYWxyZWFkeSBkb25lCi0gICAgICAgcHJvY2Vzc2lu ZyB0aGUgY29tbWFuZCksIHRoZW4gdGhlcmUgd2lsbCBiZSBubyB2aXNpYmxlIHJlc3VsdCBhdAot ICAgICAgIGFsbC4KLSAgICAgIDwvcGFyYT4KLQogICAgICAgPHBhcmE+CiAgICAgICAgPHhyZWYg bGlua2VuZD0ibGlicHEtUFFjYW5jZWwiLz4gY2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gYSBz aWduYWwKICAgICAgICBoYW5kbGVyLCBpZiB0aGUgPHBhcmFtZXRlcj5lcnJidWY8L3BhcmFtZXRl cj4gaXMgYSBsb2NhbCB2YXJpYWJsZSBpbiB0aGUKQEAgLTU2OTYsMzMgKzU4MzcsMjQgQEAgaW50 IFBRY2FuY2VsKFBHY2FuY2VsICpjYW5jZWwsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZnNpemUp OwogICAgICAgIGFsc28gYmUgaW52b2tlZCBmcm9tIGEgdGhyZWFkIHRoYXQgaXMgc2VwYXJhdGUg ZnJvbSB0aGUgb25lCiAgICAgICAgbWFuaXB1bGF0aW5nIHRoZSA8c3RydWN0bmFtZT5QR2Nvbm48 L3N0cnVjdG5hbWU+IG9iamVjdC4KICAgICAgIDwvcGFyYT4KLSAgICAgPC9saXN0aXRlbT4KLSAg ICA8L3Zhcmxpc3RlbnRyeT4KLSAgIDwvdmFyaWFibGVsaXN0PgotCi0gICA8dmFyaWFibGVsaXN0 PgotICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCI+Ci0gICAgIDx0 ZXJtPjxmdW5jdGlvbj5QUXJlcXVlc3RDYW5jZWw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1h cnk+UFFyZXF1ZXN0Q2FuY2VsPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KLQotICAgICA8 bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJl cXVlc3RDYW5jZWwiLz4gaXMgYSBkZXByZWNhdGVkIHZhcmlhbnQgb2YKLSAgICAgICA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPi4KLTxzeW5vcHNpcz4KLWludCBQUXJlcXVlc3RDYW5j ZWwoUEdjb25uICpjb25uKTsKLTwvc3lub3BzaXM+Ci0gICAgICA8L3BhcmE+CiAKICAgICAgIDxw YXJhPgotICAgICAgIFJlcXVlc3RzIHRoYXQgdGhlIHNlcnZlciBhYmFuZG9uIHByb2Nlc3Npbmcg b2YgdGhlIGN1cnJlbnQKLSAgICAgICBjb21tYW5kLiAgSXQgb3BlcmF0ZXMgZGlyZWN0bHkgb24g dGhlCi0gICAgICAgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmplY3QsIGFuZCBp biBjYXNlIG9mIGZhaWx1cmUgc3RvcmVzIHRoZQotICAgICAgIGVycm9yIG1lc3NhZ2UgaW4gdGhl IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gb2JqZWN0ICh3aGVuY2UgaXQgY2FuCi0g ICAgICAgYmUgcmV0cmlldmVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRZXJyb3JNZXNzYWdl Ii8+KS4gIEFsdGhvdWdoCi0gICAgICAgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHNhbWUsIHRo aXMgYXBwcm9hY2ggaXMgbm90IHNhZmUgd2l0aGluCi0gICAgICAgbXVsdGlwbGUtdGhyZWFkIHBy b2dyYW1zIG9yIHNpZ25hbCBoYW5kbGVycywgc2luY2UgaXQgaXMgcG9zc2libGUKLSAgICAgICB0 aGF0IG92ZXJ3cml0aW5nIHRoZSA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+J3MgZXJy b3IgbWVzc2FnZSB3aWxsCi0gICAgICAgbWVzcyB1cCB0aGUgb3BlcmF0aW9uIGN1cnJlbnRseSBp biBwcm9ncmVzcyBvbiB0aGUgY29ubmVjdGlvbi4KKyAgICAgICBUbyBhY2hpZXZlIHNpZ25hbC1z YWZldHksIHNvbWUgY29uY2Vzc2lvbnMgbmVlZGVkIHRvIGJlIG1hZGUgaW4gdGhlCisgICAgICAg aW1wbGVtZW50YXRpb24gb2YgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWwiLz4uIE5vdCBh bGwgY29ubmVjdGlvbgorICAgICAgIG9wdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24g YXJlIHVzZWQgd2hlbiBlc3RhYmxpc2hpbmcgYQorICAgICAgIGNvbm5lY3Rpb24gZm9yIHRoZSBj YW5jZWxsYXRpb24gcmVxdWVzdC4gV2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYQorICAgICAg IGNvbm5lY3Rpb24gaXMgbWFkZSB0byB0aGUgcG9zdGdyZXMgaG9zdCB1c2luZyB0aGUgc2FtZSBw b3J0LiBUaGUgb25seQorICAgICAgIGNvbm5lY3Rpb24gb3B0aW9ucyB0aGF0IGFyZSBob25vcmVk IGR1cmluZyB0aGlzIGNvbm5lY3Rpb24gYXJlCisgICAgICAgPHZhcm5hbWU+a2VlcGFsaXZlczwv dmFybmFtZT4sCisgICAgICAgPHZhcm5hbWU+a2VlcGFsaXZlc19pZGxlPC92YXJuYW1lPiwKKyAg ICAgICA8dmFybmFtZT5rZWVwYWxpdmVzX2ludGVydmFsPC92YXJuYW1lPiwKKyAgICAgICA8dmFy bmFtZT5rZWVwYWxpdmVzX2NvdW50PC92YXJuYW1lPiwgYW5kCisgICAgICAgPHZhcm5hbWU+dGNw X3VzZXJfdGltZW91dDwvdmFybmFtZT4uCisgICAgICAgU28sIGZvciBleGFtcGxlCisgICAgICAg PHZhcm5hbWU+Y29ubmVjdF90aW1lb3V0PC92YXJuYW1lPiwKKyAgICAgICA8dmFybmFtZT5nc3Nl bmNtb2RlPC92YXJuYW1lPiwgYW5kCisgICAgICAgPHZhcm5hbWU+c3NsbW9kZTwvdmFybmFtZT4g YXJlIGlnbm9yZWQuIFRoaXMgbWVhbnMgdGhlIGNvbm5lY3Rpb24KKyAgICAgICBpcyBuZXZlciBl bmNyeXB0ZWQgdXNpbmcgVExTIG9yIEdTUy4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRl bT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTg4NTYsMTAgKzg5ODgsMTAgQEAgaW50IFBRaXN0 aHJlYWRzYWZlKCk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBkZXByZWNhdGVkIGZ1 bmN0aW9ucyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWwiLz4gYW5kCisgICBU aGUgZnVuY3Rpb25zIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPiBhbmQK ICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRb2lkU3RhdHVzIi8+IGFyZSBub3QgdGhyZWFkLXNh ZmUgYW5kIHNob3VsZCBub3QgYmUKICAgIHVzZWQgaW4gbXVsdGl0aHJlYWQgcHJvZ3JhbXMuICA8 eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWwiLz4KLSAgIGNhbiBiZSByZXBsYWNl ZCBieSA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPi4KKyAgIGNhbiBiZSByZXBsYWNl ZCBieSA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWxTdGFydCIvPi4KICAgIDx4 cmVmIGxpbmtlbmQ9ImxpYnBxLVBRb2lkU3RhdHVzIi8+IGNhbiBiZSByZXBsYWNlZCBieQogICAg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFvaWRWYWx1ZSIvPi4KICAgPC9wYXJhPgpkaWZmIC0tZ2l0 IGEvc3JjL2ZlX3V0aWxzL2Nvbm5lY3RfdXRpbHMuYyBiL3NyYy9mZV91dGlscy9jb25uZWN0X3V0 aWxzLmMKaW5kZXggZjJlNTgzZjlmYS4uYjlmMGMwNTU4YyAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0 aWxzL2Nvbm5lY3RfdXRpbHMuYworKysgYi9zcmMvZmVfdXRpbHMvY29ubmVjdF91dGlscy5jCkBA IC0xNTgsMTkgKzE1OCwxMSBAQCBjb25uZWN0TWFpbnRlbmFuY2VEYXRhYmFzZShDb25uUGFyYW1z ICpjcGFyYW1zLAogdm9pZAogZGlzY29ubmVjdERhdGFiYXNlKFBHY29ubiAqY29ubikKIHsKLQlj aGFyCQllcnJidWZbMjU2XTsKLQogCUFzc2VydChjb25uICE9IE5VTEwpOwogCiAJaWYgKFBRdHJh bnNhY3Rpb25TdGF0dXMoY29ubikgPT0gUFFUUkFOU19BQ1RJVkUpCiAJewotCQlQR2NhbmNlbCAg ICpjYW5jZWw7Ci0KLQkJaWYgKChjYW5jZWwgPSBQUWdldENhbmNlbChjb25uKSkpCi0JCXsKLQkJ CSh2b2lkKSBQUWNhbmNlbChjYW5jZWwsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOwotCQkJUFFm cmVlQ2FuY2VsKGNhbmNlbCk7Ci0JCX0KKwkJKHZvaWQpIFBRcmVxdWVzdENhbmNlbChjb25uKTsK IAl9CiAKIAlQUWZpbmlzaChjb25uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2V4cG9ydHMudHh0IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKaW5kZXggZThi Y2M4ODM3MC4uZjc2MDlkMGM2NCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhw b3J0cy50eHQKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKQEAgLTE4Niwz ICsxODYsNSBAQCBQUXBpcGVsaW5lU3RhdHVzICAgICAgICAgIDE4MwogUFFzZXRUcmFjZUZsYWdz ICAgICAgICAgICAxODQKIFBRbWJsZW5Cb3VuZGVkICAgICAgICAgICAgMTg1CiBQUXNlbmRGbHVz aFJlcXVlc3QgICAgICAgIDE4NgorUFFyZXF1ZXN0Q2FuY2VsU3RhcnQgICAgICAxODcKK1BRY29u bmVjdENvbXBsZXRlICAgICAgICAgMTg4CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1jb25uZWN0LmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXgg NmU5MzZiYmZmMy4uNzM5MGZiZWM3YyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtY29ubmVjdC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwpAQCAt Mzc5LDYgKzM3OSw3IEBAIHN0YXRpYyBQR1BpbmcgaW50ZXJuYWxfcGluZyhQR2Nvbm4gKmNvbm4p Owogc3RhdGljIFBHY29ubiAqbWFrZUVtcHR5UEdjb25uKHZvaWQpOwogc3RhdGljIHZvaWQgcHFG cmVlQ29tbWFuZFF1ZXVlKFBHY21kUXVldWVFbnRyeSAqcXVldWUpOwogc3RhdGljIGJvb2wgZmls bFBHY29ubihQR2Nvbm4gKmNvbm4sIFBRY29ubmluZm9PcHRpb24gKmNvbm5PcHRpb25zKTsKK3N0 YXRpYyBib29sIGNvcHlQR2Nvbm4oUEdjb25uICpzcmNDb25uLCBQR2Nvbm4gKmRzdENvbm4pOwog c3RhdGljIHZvaWQgZnJlZVBHY29ubihQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgY2xvc2VQ R2Nvbm4oUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfY29ubl9hZGRyaW5mbyhQ R2Nvbm4gKmNvbm4pOwpAQCAtNjA1LDggKzYwNiwxNyBAQCBwcURyb3BTZXJ2ZXJEYXRhKFBHY29u biAqY29ubikKIAlpZiAoY29ubi0+d3JpdGVfZXJyX21zZykKIAkJZnJlZShjb25uLT53cml0ZV9l cnJfbXNnKTsKIAljb25uLT53cml0ZV9lcnJfbXNnID0gTlVMTDsKLQljb25uLT5iZV9waWQgPSAw OwotCWNvbm4tPmJlX2tleSA9IDA7CisKKwkvKgorCSAqIENhbmNlbCBjb25uZWN0aW9ucyBzaG91 bGQgc2F2ZSB0aGVpciBiZV9waWQgYW5kIGJlX2tleSBhY3Jvc3MKKwkgKiBQUXJlc2V0U3RhcnQg aW52b2NhdGlvbnMuIE90aGVyd2lzZSB0aGV5IGRvbid0IGtub3cgdGhlIHNlY3JldCB0b2tlbiBv ZgorCSAqIHRoZSBjb25uZWN0aW9uIHRoZXkgYXJlIHN1cHBvc2VkIHRvIGNhbmNlbCBhbnltb3Jl LgorCSAqLworCWlmICghY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwl7CisJCWNvbm4tPmJlX3BpZCA9 IDA7CisJCWNvbm4tPmJlX2tleSA9IDA7CisJfQogfQogCiAKQEAgLTczNyw2ICs3NDcsNjggQEAg UFFwaW5nKGNvbnN0IGNoYXIgKmNvbm5pbmZvKQogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKgkJ UFFjYW5jZWxDb25uZWN0U3RhcnQKKyAqCisgKiBBc3luY2hyb25vdXNseSBjYW5jZWwgYSByZXF1 ZXN0IG9uIHRoZSBnaXZlbiBjb25uZWN0aW9uLiBUaGlzIHJlcXVpcmVzCisgKiBwb2xsaW5nIHRo ZSByZXR1cm5lZCBQR2Nvbm4gdG8gYWN0dWFsbHkgY29tcGxldGUgdGhlIGNhbmNlbGxhdGlvbiBv ZiB0aGUKKyAqIHJlcXVlc3QuCisgKi8KK1BHY29ubiAqCitQUXJlcXVlc3RDYW5jZWxTdGFydChQ R2Nvbm4gKmNvbm4pCit7CisJUEdjb25uCSAgICpjYW5jZWxDb25uID0gbWFrZUVtcHR5UEdjb25u KCk7CisKKwlpZiAoY2FuY2VsQ29ubiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIENo ZWNrIHdlIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uICovCisJaWYgKCFjb25uKQorCXsKKwkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNhbmNlbENvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4 dCgicGFzc2VkIGNvbm5lY3Rpb24gd2FzIE5VTExcbiIpKTsKKwkJcmV0dXJuIGNhbmNlbENvbm47 CisJfQorCisJaWYgKGNvbm4tPnNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKKwl7CisJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjYW5jZWxDb25uLT5lcnJvck1lc3NhZ2UsIGxpYnBxX2dldHRleHQo InBhc3NlZCBjb25uZWN0aW9uIGlzIG5vdCBvcGVuXG4iKSk7CisJCXJldHVybiBjYW5jZWxDb25u OworCX0KKworCS8qCisJICogSW5kaWNhdGUgdGhhdCB0aGlzIGNvbm5lY3Rpb24gaXMgdXNlZCB0 byBzZW5kIGEgY2FuY2VsbGF0aW9uCisJICovCisJY2FuY2VsQ29ubi0+Y2FuY2VsUmVxdWVzdCA9 IHRydWU7CisKKwlpZiAoIWNvcHlQR2Nvbm4oY29ubiwgY2FuY2VsQ29ubikpCisJCXJldHVybiAo UEdjb25uICopIGNhbmNlbENvbm47CisKKwkvKgorCSAqIENvbXB1dGUgZGVyaXZlZCBvcHRpb25z CisJICovCisJaWYgKCFjb25uZWN0T3B0aW9uczIoY2FuY2VsQ29ubikpCisJCXJldHVybiBjYW5j ZWxDb25uOworCisJLyoKKwkgKiBDb3B5IGNhbmNlbGF0aW9uIHRva2VuIGRhdGEgZnJvbSB0aGUg b3JpZ2luYWwgY29ubm5lY3Rpb24KKwkgKi8KKwljYW5jZWxDb25uLT5iZV9waWQgPSBjb25uLT5i ZV9waWQ7CisJY2FuY2VsQ29ubi0+YmVfa2V5ID0gY29ubi0+YmVfa2V5OworCisJLyoKKwkgKiBD YW5jZWwgcmVxdWVzdHMgc2hvdWxkIG5vdCBpdGVyYXRlIG92ZXIgYWxsIHBvc3NpYmxlIGhvc3Rz LiBUaGUgcmVxdWVzdAorCSAqIG5lZWRzIHRvIGJlIHNlbnQgdG8gdGhlIGV4YWN0IGhvc3QgYW5k IGFkZHJlc3MgdGhhdCB0aGUgb3JpZ2luYWwKKwkgKiBjb25uZWN0aW9uIHVzZWQuCisJICovCisJ bWVtY3B5KCZjYW5jZWxDb25uLT5yYWRkciwgJmNvbm4tPnJhZGRyLCBzaXplb2YoU29ja0FkZHIp KTsKKwljYW5jZWxDb25uLT53aGljaGhvc3QgPSBjb25uLT53aGljaGhvc3Q7CisJY29ubi0+dHJ5 X25leHRfaG9zdCA9IGZhbHNlOworCWNvbm4tPnRyeV9uZXh0X2FkZHIgPSBmYWxzZTsKKworCWNh bmNlbENvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fU1RBUlRJTkc7CisJcmV0dXJuIGNhbmNlbENv bm47Cit9CisKIC8qCiAgKgkJUFFjb25uZWN0U3RhcnRQYXJhbXMKICAqCkBAIC05MTQsNiArOTg2 LDQ2IEBAIGZpbGxQR2Nvbm4oUEdjb25uICpjb25uLCBQUWNvbm5pbmZvT3B0aW9uICpjb25uT3B0 aW9ucykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIENvcHkgb3ZlciBvcHRpb24gdmFsdWVz IGZyb20gc3JjQ29ubiB0byBkc3RDb25uCisgKgorICogRG9uJ3QgcHV0IGFueXRoaW5nIGN1dGUg aGVyZSAtLS0gaW50ZWxsaWdlbmNlIHNob3VsZCBiZSBpbgorICogY29ubmVjdE9wdGlvbnMyIC4u LgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCByZXR1cm5zIGZh bHNlIGFuZCBzZXRzIGVycm9yIG1lc3NhZ2Ugb2YKKyAqIGRzdENvbm4uCisgKi8KK3N0YXRpYyBi b29sCitjb3B5UEdjb25uKFBHY29ubiAqc3JjQ29ubiwgUEdjb25uICpkc3RDb25uKQoreworCWNv bnN0IGludGVybmFsUFFjb25uaW5mb09wdGlvbiAqb3B0aW9uOworCisJLyogY29weSBvdmVyIGNv bm5lY3Rpb24gb3B0aW9ucyAqLworCWZvciAob3B0aW9uID0gUFFjb25uaW5mb09wdGlvbnM7IG9w dGlvbi0+a2V5d29yZDsgb3B0aW9uKyspCisJeworCQlpZiAob3B0aW9uLT5jb25ub2ZzID49IDAp CisJCXsKKwkJCWNvbnN0IGNoYXIgKip0bXAgPSAoY29uc3QgY2hhciAqKikgKChjaGFyICopIHNy Y0Nvbm4gKyBvcHRpb24tPmNvbm5vZnMpOworCisJCQlpZiAoKnRtcCkKKwkJCXsKKwkJCQljaGFy CSAgKipkc3RDb25ubWVtYmVyID0gKGNoYXIgKiopICgoY2hhciAqKSBkc3RDb25uICsgb3B0aW9u LT5jb25ub2ZzKTsKKworCQkJCWlmICgqZHN0Q29ubm1lbWJlcikKKwkJCQkJZnJlZSgqZHN0Q29u bm1lbWJlcik7CisJCQkJKmRzdENvbm5tZW1iZXIgPSBzdHJkdXAoKnRtcCk7CisJCQkJaWYgKCpk c3RDb25ubWVtYmVyID09IE5VTEwpCisJCQkJeworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm ZHN0Q29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJvdXQgb2Yg bWVtb3J5XG4iKSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJ cmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKgkJY29ubmVjdE9wdGlvbnMxCiAgKgpAQCAtMjA4Miwx MCArMjE5NCwxNyBAQCBjb25uZWN0REJTdGFydChQR2Nvbm4gKmNvbm4pCiAJICogU2V0IHVwIHRv IHRyeSB0byBjb25uZWN0IHRvIHRoZSBmaXJzdCBob3N0LiAgKFNldHRpbmcgd2hpY2hob3N0ID0g LTEgaXMKIAkgKiBhIGJpdCBvZiBhIGNoZWF0LCBidXQgUFFjb25uZWN0UG9sbCB3aWxsIGFkdmFu Y2UgaXQgdG8gMCBiZWZvcmUKIAkgKiBhbnl0aGluZyBlbHNlIGxvb2tzIGF0IGl0LikKKwkgKgor CSAqIENhbmNlbCByZXF1ZXN0cyBhcmUgc3BlY2lhbCB0aG91Z2gsIHRoZXkgc2hvdWxkIG9ubHkg dHJ5IG9uZSBob3N0LAorCSAqIHdoaWNoIGlzIGRldGVybWluZWQgaW4gUFFjYW5jZWxDb25uZWN0 U3RhcnQuIFNvIGxlYXZlIHRoZXNlIHNldHRpbmdzCisJICogYWxvbmUgZm9yIGNhbmNlbCByZXF1 ZXN0cy4KIAkgKi8KLQljb25uLT53aGljaGhvc3QgPSAtMTsKLQljb25uLT50cnlfbmV4dF9hZGRy ID0gZmFsc2U7Ci0JY29ubi0+dHJ5X25leHRfaG9zdCA9IHRydWU7CisJaWYgKCFjb25uLT5jYW5j ZWxSZXF1ZXN0KQorCXsKKwkJY29ubi0+d2hpY2hob3N0ID0gLTE7CisJCWNvbm4tPnRyeV9uZXh0 X2hvc3QgPSB0cnVlOworCQljb25uLT50cnlfbmV4dF9hZGRyID0gZmFsc2U7CisJfQogCWNvbm4t PnN0YXR1cyA9IENPTk5FQ1RJT05fTkVFREVEOwogCiAJLyogQWxzbyByZXNldCB0aGUgdGFyZ2V0 X3NlcnZlcl90eXBlIHN0YXRlIGlmIG5lZWRlZCAqLwpAQCAtMjEzNCw2ICsyMjUzLDE1IEBAIGNv bm5lY3REQkNvbXBsZXRlKFBHY29ubiAqY29ubikKIAlpZiAoY29ubiA9PSBOVUxMIHx8IGNvbm4t PnN0YXR1cyA9PSBDT05ORUNUSU9OX0JBRCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoY29ubi0+c3Rh dHVzID09IENPTk5FQ1RJT05fU1RBUlRJTkcpCisJeworCQlpZiAoIWNvbm5lY3REQlN0YXJ0KGNv bm4pKQorCQl7CisJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsKKwkJCXJldHVybiAw OworCQl9CisJfQorCiAJLyoKIAkgKiBTZXQgdXAgYSB0aW1lIGxpbWl0LCBpZiBjb25uZWN0X3Rp bWVvdXQgaXNuJ3QgemVyby4KIAkgKi8KQEAgLTIyNzQsMTMgKzI0MDIsMTUgQEAgUFFjb25uZWN0 UG9sbChQR2Nvbm4gKmNvbm4pCiAJc3dpdGNoIChjb25uLT5zdGF0dXMpCiAJewogCQkJLyoKLQkJ CSAqIFdlIHJlYWxseSBzaG91bGRuJ3QgaGF2ZSBiZWVuIHBvbGxlZCBpbiB0aGVzZSB0d28gY2Fz ZXMsIGJ1dCB3ZQotCQkJICogY2FuIGhhbmRsZSBpdC4KKwkJCSAqIFdlIHJlYWxseSBzaG91bGRu J3QgaGF2ZSBiZWVuIHBvbGxlZCBpbiB0aGVzZSB0aHJlZSBjYXNlcywgYnV0CisJCQkgKiB3ZSBj YW4gaGFuZGxlIGl0LgogCQkJICovCiAJCWNhc2UgQ09OTkVDVElPTl9CQUQ6CiAJCQlyZXR1cm4g UEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJCWNhc2UgQ09OTkVDVElPTl9PSzoKIAkJCXJldHVybiBQ R1JFU19QT0xMSU5HX09LOworCQljYXNlIENPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVEOgorCQkJ cmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7CiAKIAkJCS8qIFRoZXNlIGFyZSByZWFkaW5nIHN0YXRl cyAqLwogCQljYXNlIENPTk5FQ1RJT05fQVdBSVRJTkdfUkVTUE9OU0U6CkBAIC0yMjkyLDYgKzI0 MjIsMzQgQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQkJLyogTG9hZCB3YWl0aW5n IGRhdGEgKi8KIAkJCQlpbnQJCQluID0gcHFSZWFkRGF0YShjb25uKTsKIAorI2lmbmRlZiBXSU4z MgorCQkJCWlmIChuID09IC0yICYmIGNvbm4tPmNhbmNlbFJlcXVlc3QpCisjZWxzZQorCisJCQkJ LyoKKwkJCQkgKiBXaW5kb3dzIGlzIGEgYml0IHNwZWNpYWwgaW4gaXRzIEVPRiBiZWhhdmlvdXIg Zm9yIFRDUC4KKwkJCQkgKiBTb21ldGltZXMgaXQgd2lsbCBlcnJvciB3aXRoIGFuIEVDT05OUkVT RVQgd2hlbiB0aGVyZSBpcyBhCisJCQkJICogY2xlYW4gY29ubmVjdGlvbiBjbG9zdXJlLiBTZWUg dGhlc2UgdGhyZWFkcyBmb3IgZGV0YWlsczoKKwkJCQkgKiBodHRwczovL3d3dy5wb3N0Z3Jlc3Fs Lm9yZy9tZXNzYWdlLWlkL2ZsYXQvOTBiMzQwNTctNDE3Ni03YmIwLTBkYmItOTgyMmE1ZjY0MjVi JTQwZ3JlaXotcmVpbnNkb3JmLmRlCisJCQkJICoKKwkJCQkgKiBodHRwczovL3d3dy5wb3N0Z3Jl c3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0ElMkJoVUtHJTJCT2VvRVRaUSUzRFF3NVViNWgzdG13 UWhCbURBJTNEbnVOTzNLRyUzRHpXZlV5cEZBdyU0MG1haWwuZ21haWwuY29tCisJCQkJICoKKwkJ CQkgKiBQUWNhbmNlbCBpZ25vcmVzIHN1Y2ggZXJyb3JzIGFuZCByZXBvcnRzIHN1Y2Nlc3MgZm9y IHRoZQorCQkJCSAqIGNhbmNlbGxhdGlvbiBhbnl3YXksIHNvIGV2ZW4gaWYgdGhpcyBpcyBub3Qg YWx3YXlzIGNvcnJlY3QKKwkJCQkgKiB3ZSBkbyB0aGUgc2FtZSBoZXJlLgorCQkJCSAqLworCQkJ CWlmIChuIDwgMCAmJiBjb25uLT5jYW5jZWxSZXF1ZXN0KQorI2VuZGlmCisJCQkJeworCQkJCQkv KgorCQkJCQkgKiBUaGlzIGlzIHRoZSBleHBlY3RlZCBlbmQgc3RhdGUgZm9yIGNhbmNlbCBjb25u ZWN0aW9ucy4KKwkJCQkJICogVGhleSBhcmUgY2xvc2VkIG9uY2UgdGhlIGNhbmNlbCBpcyBwcm9j ZXNzZWQgYnkgdGhlCisJCQkJCSAqIHNlcnZlci4KKwkJCQkJICovCisJCQkJCWNvbm4tPnN0YXR1 cyA9IENPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVEOworCQkJCQlyZXNldFBRRXhwQnVmZmVyKCZj b25uLT5lcnJvck1lc3NhZ2UpOworCQkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKKwkJCQl9 CiAJCQkJaWYgKG4gPCAwKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQlpZiAobiA9PSAw KQpAQCAtMjMwMSw2ICsyNDU5LDcgQEAgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pCiAJCQl9 CiAKIAkJCS8qIFRoZXNlIGFyZSB3cml0aW5nIHN0YXRlcywgc28gd2UganVzdCBwcm9jZWVkLiAq LworCQljYXNlIENPTk5FQ1RJT05fU1RBUlRJTkc6CiAJCWNhc2UgQ09OTkVDVElPTl9TVEFSVEVE OgogCQljYXNlIENPTk5FQ1RJT05fTUFERToKIAkJCWJyZWFrOwpAQCAtMjMyNSw2ICsyNDg0LDE0 IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0 aGVyZSBpcwogCS8qIFRpbWUgdG8gYWR2YW5jZSB0byBuZXh0IGFkZHJlc3MsIG9yIG5leHQgaG9z dCBpZiBubyBtb3JlIGFkZHJlc3Nlcz8gKi8KIAlpZiAoY29ubi0+dHJ5X25leHRfYWRkcikKIAl7 CisJCS8qCisJCSAqIENhbmNlbCByZXF1ZXN0cyBuZXZlciBoYXZlIG1vcmUgYWRkcmVzc2VzIHRv IHRyeS4gVGhleSBzaG91bGQgb25seQorCQkgKiB0cnkgYSBzaW5nbGUgb25lLgorCQkgKi8KKwkJ aWYgKGNvbm4tPmNhbmNlbFJlcXVlc3QpCisJCXsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9 CiAJCWlmIChjb25uLT5hZGRyX2N1ciAmJiBjb25uLT5hZGRyX2N1ci0+YWlfbmV4dCkKIAkJewog CQkJY29ubi0+YWRkcl9jdXIgPSBjb25uLT5hZGRyX2N1ci0+YWlfbmV4dDsKQEAgLTIzNDQsNiAr MjUxMSwxNSBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUg dW50aWwgdGhlcmUgaXMKIAkJaW50CQkJcmV0OwogCQljaGFyCQlwb3J0c3RyW01BWFBHUEFUSF07 CiAKKwkJLyoKKwkJICogQ2FuY2VsIHJlcXVlc3RzIG5ldmVyIGhhdmUgbW9yZSBob3N0cyB0byB0 cnkuIFRoZXkgc2hvdWxkIG9ubHkgdHJ5CisJCSAqIGEgc2luZ2xlIG9uZS4KKwkJICovCisJCWlm IChjb25uLT5jYW5jZWxSZXF1ZXN0KQorCQl7CisJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJfQor CiAJCWlmIChjb25uLT53aGljaGhvc3QgKyAxIDwgY29ubi0+bmNvbm5ob3N0KQogCQkJY29ubi0+ d2hpY2hob3N0Kys7CiAJCWVsc2UKQEAgLTI1MjksMTkgKzI3MDUsMjcgQEAga2VlcF9nb2luZzoJ CQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCWNo YXIJCWhvc3RfYWRkcltOSV9NQVhIT1NUXTsKIAogCQkJCQkvKgotCQkJCQkgKiBBZHZhbmNlIHRv IG5leHQgcG9zc2libGUgaG9zdCwgaWYgd2UndmUgdHJpZWQgYWxsIG9mCi0JCQkJCSAqIHRoZSBh ZGRyZXNzZXMgZm9yIHRoZSBjdXJyZW50IGhvc3QuCisJCQkJCSAqIENhbmNlbCByZXF1ZXN0cyBk b24ndCB1c2UgYWRkcl9jdXIgYXQgYWxsLiBUaGV5IGhhdmUKKwkJCQkJICogdGhlaXIgcmFkZHIg ZmllbGQgYWxyZWFkeSBmaWxsZWQgaW4gZHVyaW5nCisJCQkJCSAqIGluaXRpYWxpemF0aW9uIGlu IFBRY2FuY2VsQ29ubmVjdFN0YXJ0LgogCQkJCQkgKi8KLQkJCQkJaWYgKGFkZHJfY3VyID09IE5V TEwpCisJCQkJCWlmICghY29ubi0+Y2FuY2VsUmVxdWVzdCkKIAkJCQkJewotCQkJCQkJY29ubi0+ dHJ5X25leHRfaG9zdCA9IHRydWU7Ci0JCQkJCQlnb3RvIGtlZXBfZ29pbmc7Ci0JCQkJCX0KKwkJ CQkJCS8qCisJCQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgcG9zc2libGUgaG9zdCwgaWYgd2UndmUg dHJpZWQgYWxsCisJCQkJCQkgKiBvZiB0aGUgYWRkcmVzc2VzIGZvciB0aGUgY3VycmVudCBob3N0 LgorCQkJCQkJICovCisJCQkJCQlpZiAoYWRkcl9jdXIgPT0gTlVMTCkKKwkJCQkJCXsKKwkJCQkJ CQljb25uLT50cnlfbmV4dF9ob3N0ID0gdHJ1ZTsKKwkJCQkJCQlnb3RvIGtlZXBfZ29pbmc7CisJ CQkJCQl9CiAKLQkJCQkJLyogUmVtZW1iZXIgY3VycmVudCBhZGRyZXNzIGZvciBwb3NzaWJsZSB1 c2UgbGF0ZXIgKi8KLQkJCQkJbWVtY3B5KCZjb25uLT5yYWRkci5hZGRyLCBhZGRyX2N1ci0+YWlf YWRkciwKLQkJCQkJCSAgIGFkZHJfY3VyLT5haV9hZGRybGVuKTsKLQkJCQkJY29ubi0+cmFkZHIu c2FsZW4gPSBhZGRyX2N1ci0+YWlfYWRkcmxlbjsKKwkJCQkJCS8qIFJlbWVtYmVyIGN1cnJlbnQg YWRkcmVzcyBmb3IgcG9zc2libGUgdXNlIGxhdGVyICovCisJCQkJCQltZW1jcHkoJmNvbm4tPnJh ZGRyLmFkZHIsIGFkZHJfY3VyLT5haV9hZGRyLAorCQkJCQkJCSAgIGFkZHJfY3VyLT5haV9hZGRy bGVuKTsKKwkJCQkJCWNvbm4tPnJhZGRyLnNhbGVuID0gYWRkcl9jdXItPmFpX2FkZHJsZW47CisJ CQkJCX0KIAogCQkJCQkvKgogCQkJCQkgKiBTZXQgY29ubmlwLCB0b28uICBOb3RlIHdlIHB1cnBv c2VseSBpZ25vcmUgc3RyZHVwCkBAIC0yNTU3LDcgKzI3NDEsNyBAQCBrZWVwX2dvaW5nOgkJCQkJ CS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQkJCWNvbm4t PmNvbm5pcCA9IHN0cmR1cChob3N0X2FkZHIpOwogCiAJCQkJCS8qIFRyeSB0byBjcmVhdGUgdGhl IHNvY2tldCAqLwotCQkJCQljb25uLT5zb2NrID0gc29ja2V0KGFkZHJfY3VyLT5haV9mYW1pbHks IFNPQ0tfU1RSRUFNLCAwKTsKKwkJCQkJY29ubi0+c29jayA9IHNvY2tldChjb25uLT5yYWRkci5h ZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOwogCQkJCQlpZiAoY29ubi0+c29jayA9PSBQ R0lOVkFMSURfU09DS0VUKQogCQkJCQl7CiAJCQkJCQlpbnQJCQllcnJvcm5vID0gU09DS19FUlJO TzsKQEAgLTI1NjcsMTIgKzI3NTEsMTggQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNv bWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCQkgKiBhZGRyZXNzZXMgdG8gdHJ5 OyB0aGlzIHJlZHVjZXMgdXNlbGVzcyBjaGF0dGVyIGluCiAJCQkJCQkgKiBjYXNlcyB3aGVyZSB0 aGUgYWRkcmVzcyBsaXN0IGluY2x1ZGVzIGJvdGggSVB2NCBhbmQKIAkJCQkJCSAqIElQdjYgYnV0 IGtlcm5lbCBvbmx5IGFjY2VwdHMgb25lIGZhbWlseS4KKwkJCQkJCSAqCisJCQkJCQkgKiBDYW5j ZWwgcmVxdWVzdHMgbmV2ZXIgaGF2ZSBtb3JlIGFkZHJlc3NlcyB0byB0cnkuCisJCQkJCQkgKiBU aGV5IHNob3VsZCBvbmx5IHRyeSBhIHNpbmdsZSBvbmUuCiAJCQkJCQkgKi8KLQkJCQkJCWlmIChh ZGRyX2N1ci0+YWlfbmV4dCAhPSBOVUxMIHx8Ci0JCQkJCQkJY29ubi0+d2hpY2hob3N0ICsgMSA8 IGNvbm4tPm5jb25uaG9zdCkKKwkJCQkJCWlmICghY29ubi0+Y2FuY2VsUmVxdWVzdCkKIAkJCQkJ CXsKLQkJCQkJCQljb25uLT50cnlfbmV4dF9hZGRyID0gdHJ1ZTsKLQkJCQkJCQlnb3RvIGtlZXBf Z29pbmc7CisJCQkJCQkJaWYgKGFkZHJfY3VyLT5haV9uZXh0ICE9IE5VTEwgfHwKKwkJCQkJCQkJ Y29ubi0+d2hpY2hob3N0ICsgMSA8IGNvbm4tPm5jb25uaG9zdCkKKwkJCQkJCQl7CisJCQkJCQkJ CWNvbm4tPnRyeV9uZXh0X2FkZHIgPSB0cnVlOworCQkJCQkJCQlnb3RvIGtlZXBfZ29pbmc7CisJ CQkJCQkJfQogCQkJCQkJfQogCQkJCQkJZW1pdEhvc3RJZGVudGl0eUluZm8oY29ubiwgaG9zdF9h ZGRyKTsKIAkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCkBAIC0y NTk1LDcgKzI3ODUsNyBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRv IGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQkJICogVENQIHNvY2tldHMsIG5vbmJsb2NrIG1vZGUs IGNsb3NlLW9uLWV4ZWMuICBUcnkgdGhlCiAJCQkJCSAqIG5leHQgYWRkcmVzcyBpZiBhbnkgb2Yg dGhpcyBmYWlscy4KIAkJCQkJICovCi0JCQkJCWlmIChhZGRyX2N1ci0+YWlfZmFtaWx5ICE9IEFG X1VOSVgpCisJCQkJCWlmIChjb25uLT5yYWRkci5hZGRyLnNzX2ZhbWlseSAhPSBBRl9VTklYKQog CQkJCQl7CiAJCQkJCQlpZiAoIWNvbm5lY3ROb0RlbGF5KGNvbm4pKQogCQkJCQkJewpAQCAtMjYy NCw3ICsyODE0LDcgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBo ZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCX0KICNlbmRpZgkJCQkJCQkvKiBGX1NFVEZEICovCiAK LQkJCQkJaWYgKGFkZHJfY3VyLT5haV9mYW1pbHkgIT0gQUZfVU5JWCkKKwkJCQkJaWYgKGNvbm4t PnJhZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgpCiAJCQkJCXsKICNpZm5kZWYgV0lOMzIK IAkJCQkJCWludAkJCW9uID0gMTsKQEAgLTI3MTgsOCArMjkwOCw5IEBAIGtlZXBfZ29pbmc6CQkJ CQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCQkgKiBT dGFydC9tYWtlIGNvbm5lY3Rpb24uICBUaGlzIHNob3VsZCBub3QgYmxvY2ssIHNpbmNlIHdlCiAJ CQkJCSAqIGFyZSBpbiBub25ibG9jayBtb2RlLiAgSWYgaXQgZG9lcywgd2VsbCwgdG9vIGJhZC4K IAkJCQkJICovCi0JCQkJCWlmIChjb25uZWN0KGNvbm4tPnNvY2ssIGFkZHJfY3VyLT5haV9hZGRy LAotCQkJCQkJCQlhZGRyX2N1ci0+YWlfYWRkcmxlbikgPCAwKQorCQkJCQlpZiAoY29ubmVjdChj b25uLT5zb2NrLAorCQkJCQkJCQkoc3RydWN0IHNvY2thZGRyICopICZjb25uLT5yYWRkci5hZGRy LAorCQkJCQkJCQljb25uLT5yYWRkci5zYWxlbikgPCAwKQogCQkJCQl7CiAJCQkJCQlpZiAoU09D S19FUlJOTyA9PSBFSU5QUk9HUkVTUyB8fAogI2lmZGVmIFdJTjMyCkBAIC0yNzU4LDYgKzI5NDks MTYgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGls IHRoZXJlIGlzCiAJCQkJfQogCQkJfQogCisJCWNhc2UgQ09OTkVDVElPTl9TVEFSVElORzoKKwkJ CXsKKwkJCQlpZiAoIWNvbm5lY3REQlN0YXJ0KGNvbm4pKQorCQkJCXsKKwkJCQkJZ290byBlcnJv cl9yZXR1cm47CisJCQkJfQorCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fU1RBUlRFRDsK KwkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19XUklUSU5HOworCQkJfQorCiAJCWNhc2UgQ09OTkVD VElPTl9TVEFSVEVEOgogCQkJewogCQkJCXNvY2tsZW5fdAlvcHRsZW4gPSBzaXplb2Yob3B0dmFs KTsKQEAgLTI5NjYsNiArMzE2NywyNSBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29t ZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQl9CiAjZW5kaWYJCQkJCQkJLyogVVNF X1NTTCAqLwogCisJCQkJaWYgKGNvbm4tPmNhbmNlbFJlcXVlc3QpCisJCQkJeworCQkJCQlDYW5j ZWxSZXF1ZXN0UGFja2V0IGNhbmNlbHBhY2tldDsKKworCQkJCQlwYWNrZXRsZW4gPSBzaXplb2Yo Y2FuY2VscGFja2V0KTsKKwkJCQkJY2FuY2VscGFja2V0LmNhbmNlbFJlcXVlc3RDb2RlID0gKE1z Z1R5cGUpIHBnX2h0b24zMihDQU5DRUxfUkVRVUVTVF9DT0RFKTsKKwkJCQkJY2FuY2VscGFja2V0 LmJhY2tlbmRQSUQgPSBwZ19odG9uMzIoY29ubi0+YmVfcGlkKTsKKwkJCQkJY2FuY2VscGFja2V0 LmNhbmNlbEF1dGhDb2RlID0gcGdfaHRvbjMyKGNvbm4tPmJlX2tleSk7CisJCQkJCWlmIChwcVBh Y2tldFNlbmQoY29ubiwgMCwgJmNhbmNlbHBhY2tldCwgcGFja2V0bGVuKSAhPSBTVEFUVVNfT0sp CisJCQkJCXsKKwkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJ CQkJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJjb3VsZCBub3Qgc2VuZCBjYW5jZWwgcGFja2V0OiAl c1xuIiksCisJCQkJCQkJCQkJICBTT0NLX1NUUkVSUk9SKFNPQ0tfRVJSTk8sIHNlYnVmLCBzaXpl b2Yoc2VidWYpKSk7CisJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCQkJfQorCQkJCQljb25u LT5zdGF0dXMgPSBDT05ORUNUSU9OX0FXQUlUSU5HX1JFU1BPTlNFOworCQkJCQlyZXR1cm4gUEdS RVNfUE9MTElOR19SRUFESU5HOworCQkJCX0KKwogCQkJCS8qCiAJCQkJICogQnVpbGQgdGhlIHN0 YXJ0dXAgcGFja2V0LgogCQkJCSAqLwpAQCAtNDE5NCw2ICs0NDE0LDExIEBAIHJlbGVhc2VfY29u bl9hZGRyaW5mbyhQR2Nvbm4gKmNvbm4pCiBzdGF0aWMgdm9pZAogc2VuZFRlcm1pbmF0ZUNvbm4o UEdjb25uICpjb25uKQogeworCWlmIChjb25uLT5jYW5jZWxSZXF1ZXN0KQorCXsKKwkJcmV0dXJu OworCX0KKwogCS8qCiAJICogTm90ZSB0aGF0IHRoZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IHVz IHRvIHNlbmQgVGVybWluYXRlIG1lc3NhZ2VzCiAJICogZHVyaW5nIHRoZSBzdGFydHVwIHBoYXNl LgpAQCAtNDMxMSw2ICs0NTM2LDEyIEBAIFBRcmVzZXRTdGFydChQR2Nvbm4gKmNvbm4pCiAJewog CQljbG9zZVBHY29ubihjb25uKTsKIAorCQlpZiAoY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwkJewor CQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9TVEFSVElORzsKKwkJCXJldHVybiAxOworCQl9 CisKIAkJcmV0dXJuIGNvbm5lY3REQlN0YXJ0KGNvbm4pOwogCX0KIApAQCAtNDY2Myw2ICs0ODk0 LDIyIEBAIGNhbmNlbF9lcnJSZXR1cm46CiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogUFFj b25uZWN0Q29tcGxldGU6IHRha2VzIGEgbm9uIGJsb2NraW5nIGNhbmNlbCBjb25uZWN0aW9uIGFu ZCBjb21wbGV0ZXMgaXQKKyAqIGluIGEgYmxvY2tpbmcgbWFubmVyLgorICoKKyAqIFJldHVybnMg MSBpZiBhYmxlIHRvIGNvbm5lY3Qgc3VjY2Vzc2Z1bGx5IGFuZCAwIGlmIG5vdC4KKyAqCisgKiBU aGlzIGNhbiB1c2VmdWwgaWYgeW91IG9ubHkgY2FyZSBhYm91dCB0aGUgdGhyZWFkIHNhZmV0eSBv ZgorICogUFFyZXF1ZXN0Q2FuY2VsU3RhcnQgYW5kIG5vdCBhYm91dCBpdHMgbm9uIGJsb2NraW5n IGZ1bmN0aW9uYWxpdHkuCisgKi8KK2ludAorUFFjb25uZWN0Q29tcGxldGUoUEdjb25uICpjYW5j ZWxDb25uKQoreworCWNvbm5lY3REQkNvbXBsZXRlKGNhbmNlbENvbm4pOworCXJldHVybiBjYW5j ZWxDb25uLT5zdGF0dXMgIT0gQ09OTkVDVElPTl9CQUQ7Cit9CisKIAogLyoKICAqIFBRcmVxdWVz dENhbmNlbDogb2xkLCBub3QgdGhyZWFkLXNhZmUgZnVuY3Rpb24gZm9yIHJlcXVlc3RpbmcgcXVl cnkgY2FuY2VsCkBAIC00Njc5LDQ1ICs0OTI2LDMxIEBAIGNhbmNlbF9lcnJSZXR1cm46CiBpbnQK IFBRcmVxdWVzdENhbmNlbChQR2Nvbm4gKmNvbm4pCiB7Ci0JaW50CQkJcjsKLQlQR2NhbmNlbCAg ICpjYW5jZWw7Ci0KLQkvKiBDaGVjayB3ZSBoYXZlIGFuIG9wZW4gY29ubmVjdGlvbiAqLwotCWlm ICghY29ubikKLQkJcmV0dXJuIGZhbHNlOworCVBHY29ubgkgICAqY2FuY2VsQ29ubiA9IE5VTEw7 CiAKLQlpZiAoY29ubi0+c29jayA9PSBQR0lOVkFMSURfU09DS0VUKQorCWNhbmNlbENvbm4gPSBQ UXJlcXVlc3RDYW5jZWxTdGFydChjb25uKTsKKwlpZiAoIWNhbmNlbENvbm4pCiAJewotCQlzdHJs Y3B5KGNvbm4tPmVycm9yTWVzc2FnZS5kYXRhLAotCQkJCSJQUXJlcXVlc3RDYW5jZWwoKSAtLSBj b25uZWN0aW9uIGlzIG5vdCBvcGVuXG4iLAotCQkJCWNvbm4tPmVycm9yTWVzc2FnZS5tYXhsZW4p OwotCQljb25uLT5lcnJvck1lc3NhZ2UubGVuID0gc3RybGVuKGNvbm4tPmVycm9yTWVzc2FnZS5k YXRhKTsKLQkJY29ubi0+ZXJyb3JSZXBvcnRlZCA9IDA7Ci0KKwkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9yeVxuIikp OwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JY2FuY2VsID0gUFFnZXRDYW5jZWwoY29ubik7Ci0J aWYgKGNhbmNlbCkKLQl7Ci0JCXIgPSBQUWNhbmNlbChjYW5jZWwsIGNvbm4tPmVycm9yTWVzc2Fn ZS5kYXRhLAotCQkJCQkgY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7Ci0JCVBRZnJlZUNhbmNl bChjYW5jZWwpOwotCX0KLQllbHNlCisJaWYgKGNhbmNlbENvbm4tPnN0YXR1cyA9PSBDT05ORUNU SU9OX0JBRCkKIAl7Ci0JCXN0cmxjcHkoY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEsICJvdXQgb2Yg bWVtb3J5IiwKLQkJCQljb25uLT5lcnJvck1lc3NhZ2UubWF4bGVuKTsKLQkJciA9IGZhbHNlOwor CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLCBQUWVycm9yTWVzc2Fn ZShjYW5jZWxDb25uKSk7CisJCWZyZWVQR2Nvbm4oY2FuY2VsQ29ubik7CisJCXJldHVybiBmYWxz ZTsKIAl9CiAKLQlpZiAoIXIpCisJaWYgKCFQUWNvbm5lY3RDb21wbGV0ZShjYW5jZWxDb25uKSkK IAl7Ci0JCWNvbm4tPmVycm9yTWVzc2FnZS5sZW4gPSBzdHJsZW4oY29ubi0+ZXJyb3JNZXNzYWdl LmRhdGEpOwotCQljb25uLT5lcnJvclJlcG9ydGVkID0gMDsKKwkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCQlm cmVlUEdjb25uKGNhbmNlbENvbm4pOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHI7 CisJZnJlZVBHY29ubihjYW5jZWxDb25uKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogCmRpZmYgLS1n aXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1taXNjLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1taXNjLmMKaW5kZXggZDc2YmIzOTU3YS4uYTk0NGNiMmMxMiAxMDA2NDQKLS0tIGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LW1pc2MuYwpAQCAtNTU4LDggKzU1OCwxMSBAQCBwcVB1dE1zZ0VuZChQR2Nvbm4gKmNvbm4pCiAg KiBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgogICoJIDE6IHN1Y2Nlc3NmdWxseSBsb2FkZWQgYXQg bGVhc3Qgb25lIG1vcmUgYnl0ZQogICoJIDA6IG5vIGRhdGEgaXMgcHJlc2VudGx5IGF2YWlsYWJs ZSwgYnV0IG5vIGVycm9yIGRldGVjdGVkCi0gKgktMTogZXJyb3IgZGV0ZWN0ZWQgKGluY2x1ZGlu ZyBFT0YgPSBjb25uZWN0aW9uIGNsb3N1cmUpOworICoJLTE6IGVycm9yIGRldGVjdGVkIChleGNs dWRpbmcgRU9GID0gY29ubmVjdGlvbiBjbG9zdXJlKTsKICAqCQljb25uLT5lcnJvck1lc3NhZ2Ug c2V0CisgKgktMjogRU9GIGRldGVjdGVkLCBjb25uZWN0aW9uIGlzIGNsb3NlZAorICoJCWNvbm4t PmVycm9yTWVzc2FnZSBzZXQKKyAqCiAgKiBOT1RFOiBjYWxsZXJzIG11c3Qgbm90IGFzc3VtZSB0 aGF0IHBvaW50ZXJzIG9yIGluZGV4ZXMgaW50byBjb25uLT5pbkJ1ZmZlcgogICogcmVtYWluIHZh bGlkIGFjcm9zcyB0aGlzIGNhbGwhCiAgKiAtLS0tLS0tLS0tCkBAIC02NDIsNyArNjQ1LDcgQEAg cmV0cnkzOgogCiAJCQlkZWZhdWx0OgogCQkJCS8qIHBxc2VjdXJlX3JlYWQgc2V0IHRoZSBlcnJv ciBtZXNzYWdlIGZvciB1cyAqLwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gbnJlYWQ7CiAJ CX0KIAl9CiAJaWYgKG5yZWFkID4gMCkKQEAgLTczNyw3ICs3NDAsNyBAQCByZXRyeTQ6CiAKIAkJ CWRlZmF1bHQ6CiAJCQkJLyogcHFzZWN1cmVfcmVhZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2UgZm9y IHVzICovCi0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiBucmVhZDsKIAkJfQogCX0KIAlpZiAo bnJlYWQgPiAwKQpAQCAtNzU1LDEzICs3NTgsMTcgQEAgZGVmaW5pdGVseUVPRjoKIAkJCQkJCSBs aWJwcV9nZXR0ZXh0KCJzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseVxu IgogCQkJCQkJCQkJICAgIlx0VGhpcyBwcm9iYWJseSBtZWFucyB0aGUgc2VydmVyIHRlcm1pbmF0 ZWQgYWJub3JtYWxseVxuIgogCQkJCQkJCQkJICAgIlx0YmVmb3JlIG9yIHdoaWxlIHByb2Nlc3Np bmcgdGhlIHJlcXVlc3QuXG4iKSk7CisJLyogRG8gKm5vdCogZHJvcCBhbnkgYWxyZWFkeS1yZWFk IGRhdGE7IGNhbGxlciBzdGlsbCB3YW50cyBpdCAqLworCXBxRHJvcENvbm5lY3Rpb24oY29ubiwg ZmFsc2UpOworCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwkvKiBObyBtb3JlIGNvbm5l Y3Rpb24gdG8gYmFja2VuZCAqLworCXJldHVybiAtMjsKIAogCS8qIENvbWUgaGVyZSBpZiBsb3dl ci1sZXZlbCBjb2RlIGFscmVhZHkgc2V0IGEgc3VpdGFibGUgZXJyb3JNZXNzYWdlICovCiBkZWZp bml0ZWx5RmFpbGVkOgogCS8qIERvICpub3QqIGRyb3AgYW55IGFscmVhZHktcmVhZCBkYXRhOyBj YWxsZXIgc3RpbGwgd2FudHMgaXQgKi8KIAlwcURyb3BDb25uZWN0aW9uKGNvbm4sIGZhbHNlKTsK IAljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsJLyogTm8gbW9yZSBjb25uZWN0aW9uIHRv IGJhY2tlbmQgKi8KLQlyZXR1cm4gLTE7CisJcmV0dXJuIG5yZWFkIDwgMCA/IG5yZWFkIDogLTE7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUtb3Bl bnNzbC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYwppbmRleCA4 MTE3Y2JkNDBmLi5jNTUzYTc0ODk4IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1zZWN1cmUtb3BlbnNzbC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1v cGVuc3NsLmMKQEAgLTI1NSw3ICsyNTUsNyBAQCBybG9vcDoKIAkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCiAJCQkJCQkJCSBsaWJwcV9nZXR0ZXh0KCJTU0wgY29u bmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQgdW5leHBlY3RlZGx5XG4iKSk7CiAJCQlyZXN1bHRfZXJy bm8gPSBFQ09OTlJFU0VUOwotCQkJbiA9IC0xOworCQkJbiA9IC0yOwogCQkJYnJlYWs7CiAJCWRl ZmF1bHQ6CiAJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLApkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1zZWN1cmUuYwppbmRleCBhMWRjN2I3OTZkLi45NzcxODA1ZGQzIDEwMDY0NAotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUuYworKysgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1zZWN1cmUuYwpAQCAtMjAxLDYgKzIwMSwxMiBAQCBwcXNlY3VyZV9jbG9zZShQR2Nv bm4gKmNvbm4pCiAgKiBPbiBmYWlsdXJlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZv ciBhcHBlbmRpbmcgYSBzdWl0YWJsZSBtZXNzYWdlCiAgKiB0byBjb25uLT5lcnJvck1lc3NhZ2Uu ICBUaGUgY2FsbGVyIG11c3Qgc3RpbGwgaW5zcGVjdCBlcnJubywgYnV0IG9ubHkKICAqIHRvIGRl dGVybWluZSB3aGV0aGVyIHRvIGNvbnRpbnVlL3JldHJ5IGFmdGVyIGVycm9yLgorICoKKyAqIFJl dHVybnMgLTEgaW4gY2FzZSBvZiBmYWlsdXJlcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIHdoZXJl IGEgZmFpbHVyZSBtZWFucworICogdGhhdCB0aGVyZSB3YXMgYSBjbGVhbiBjb25uZWN0aW9uIGNs b3N1cmUsIGluIHRob3NlIGNhc2VzIC0yIGlzIHJldHVybi4KKyAqIEN1cnJlbnRseSBvbmx5IHRo ZSBUTFMgaW1wbGVtZW50YXRpb24gb2YgcHFzZWN1cmVfcmVhZCBldmVyIHJldHVybnMgLTIuIEZv cgorICogdGhlIG90aGVyIGltcGxlbWVudGF0aW9ucyBhIGNsZWFuIGNvbm5lY3Rpb24gY2xvc3Vy ZSBpcyBkZXRlY3RlZCBpbgorICogcHFSZWFkRGF0YSBpbnN0ZWFkLgogICovCiBzc2l6ZV90CiBw cXNlY3VyZV9yZWFkKFBHY29ubiAqY29ubiwgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2xpYnBxLWZlLmgKaW5kZXggNzk4NjQ0NWYxYS4uMjQ2OTVhNjAyNiAxMDA2NDQKLS0tIGEv c3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9saWJwcS1mZS5oCkBAIC01OSwxMiArNTksMTUgQEAgdHlwZWRlZiBlbnVtCiB7CiAJQ09OTkVD VElPTl9PSywKIAlDT05ORUNUSU9OX0JBRCwKKwlDT05ORUNUSU9OX0NBTkNFTF9GSU5JU0hFRCwK IAkvKiBOb24tYmxvY2tpbmcgbW9kZSBvbmx5IGJlbG93IGhlcmUgKi8KIAogCS8qCiAJICogVGhl IGV4aXN0ZW5jZSBvZiB0aGVzZSBzaG91bGQgbmV2ZXIgYmUgcmVsaWVkIHVwb24gLSB0aGV5IHNo b3VsZCBvbmx5CiAJICogYmUgdXNlZCBmb3IgdXNlciBmZWVkYmFjayBvciBzaW1pbGFyIHB1cnBv c2VzLgogCSAqLworCUNPTk5FQ1RJT05fU1RBUlRJTkcsCQkvKiBXYWl0aW5nIGZvciBjb25uZWN0 aW9uIGF0dGVtcHQgdG8gYmUKKwkJCQkJCQkJICogc3RhcnRlZC4gICovCiAJQ09OTkVDVElPTl9T VEFSVEVELAkJCS8qIFdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gdG8gYmUgbWFkZS4gICovCiAJQ09O TkVDVElPTl9NQURFLAkJCS8qIENvbm5lY3Rpb24gT0s7IHdhaXRpbmcgdG8gc2VuZC4gICAgICov CiAJQ09OTkVDVElPTl9BV0FJVElOR19SRVNQT05TRSwJLyogV2FpdGluZyBmb3IgYSByZXNwb25z ZSBmcm9tIHRoZQpAQCAtMjgyLDYgKzI4NSw3IEBAIGV4dGVybiBQR2Nvbm4gKlBRY29ubmVjdFN0 YXJ0KGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKIGV4dGVybiBQR2Nvbm4gKlBRY29ubmVjdFN0YXJ0 UGFyYW1zKGNvbnN0IGNoYXIgKmNvbnN0ICprZXl3b3JkcywKIAkJCQkJCQkJCWNvbnN0IGNoYXIg KmNvbnN0ICp2YWx1ZXMsIGludCBleHBhbmRfZGJuYW1lKTsKIGV4dGVybiBQb3N0Z3Jlc1BvbGxp bmdTdGF0dXNUeXBlIFBRY29ubmVjdFBvbGwoUEdjb25uICpjb25uKTsKK2V4dGVybiBpbnQJUFFj b25uZWN0Q29tcGxldGUoUEdjb25uICpjb25uKTsKIAogLyogU3luY2hyb25vdXMgKGJsb2NraW5n KSAqLwogZXh0ZXJuIFBHY29ubiAqUFFjb25uZWN0ZGIoY29uc3QgY2hhciAqY29ubmluZm8pOwpA QCAtMzMwLDkgKzMzNCwxMiBAQCBleHRlcm4gdm9pZCBQUWZyZWVDYW5jZWwoUEdjYW5jZWwgKmNh bmNlbCk7CiAvKiBpc3N1ZSBhIGNhbmNlbCByZXF1ZXN0ICovCiBleHRlcm4gaW50CVBRY2FuY2Vs KFBHY2FuY2VsICpjYW5jZWwsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZnNpemUpOwogCi0vKiBi YWNrd2FyZHMgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIFBRY2FuY2VsOyBub3QgdGhyZWFkLXNhZmUg Ki8KKy8qIG1vcmUgc2VjdXJlIHZlcnNpb24gb2YgUFFjYW5jZWw7IG5vdCB0aHJlYWQtc2FmZSAq LwogZXh0ZXJuIGludAlQUXJlcXVlc3RDYW5jZWwoUEdjb25uICpjb25uKTsKIAorLyogbm9uLWJs b2NraW5nIGFuZCB0aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIFBRcmVxdWVzdENhbmNlbCAqLworZXh0 ZXJuIFBHY29ubiAqUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoUEdjb25uICpjb25uKTsKKwogLyogQWNj ZXNzb3IgZnVuY3Rpb25zIGZvciBQR2Nvbm4gb2JqZWN0cyAqLwogZXh0ZXJuIGNoYXIgKlBRZGIo Y29uc3QgUEdjb25uICpjb25uKTsKIGV4dGVybiBjaGFyICpQUXVzZXIoY29uc3QgUEdjb25uICpj b25uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKaW5kZXggM2RiNmExN2RiNC4uYjljZTFkNThj MSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKQEAgLTM5NCw2ICszOTQsMTAgQEAgc3RydWN0 IHBnX2Nvbm4KIAljaGFyCSAgICpzc2xfbWF4X3Byb3RvY29sX3ZlcnNpb247CS8qIG1heGltdW0g VExTIHByb3RvY29sIHZlcnNpb24gKi8KIAljaGFyCSAgICp0YXJnZXRfc2Vzc2lvbl9hdHRyczsJ LyogZGVzaXJlZCBzZXNzaW9uIHByb3BlcnRpZXMgKi8KIAorCWJvb2wJCWNhbmNlbFJlcXVlc3Q7 CS8qIHRydWUgaWYgdGhpcyBjb25uZWN0aW9uIGlzIHVzZWQgdG8gc2VuZCBhCisJCQkJCQkJCSAq IGNhbmNlbCByZXF1ZXN0LCBpbnN0ZWFkIG9mIGJlaW5nIGEgbm9ybWFsCisJCQkJCQkJCSAqIGNv bm5lY3Rpb24gdGhhdCdzIHVzZWQgZm9yIHF1ZXJpZXMgKi8KKwogCS8qIE9wdGlvbmFsIGZpbGUg dG8gd3JpdGUgdHJhY2UgaW5mbyB0byAqLwogCUZJTEUJICAgKlBmZGVidWc7CiAJaW50CQkJdHJh Y2VGbGFnczsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIu YyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYwppbmRleCAxMjE3OWYyNTE0 Li5iMDczMjM1MTk3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9udGVz dGVyLmMKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jCkBAIC05NDgs MjYgKzk0OCwxOCBAQCB0cnlfY29tcGxldGVfc3RlcChUZXN0U3BlYyAqdGVzdHNwZWMsIFBlcm11 dGF0aW9uU3RlcCAqcHN0ZXAsIGludCBmbGFncykKIAkJCSAqLwogCQkJaWYgKHRkID4gbWF4X3N0 ZXBfd2FpdCAmJiAhY2FuY2VsZWQpCiAJCQl7Ci0JCQkJUEdjYW5jZWwgICAqY2FuY2VsID0gUFFn ZXRDYW5jZWwoY29ubik7Ci0KLQkJCQlpZiAoY2FuY2VsICE9IE5VTEwpCisJCQkJaWYgKFBRcmVx dWVzdENhbmNlbChjb25uKSkKIAkJCQl7Ci0JCQkJCWNoYXIJCWJ1ZlsyNTZdOwotCi0JCQkJCWlm IChQUWNhbmNlbChjYW5jZWwsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotCQkJCQl7Ci0JCQkJCQkvKgot CQkJCQkJICogcHJpbnQgdG8gc3Rkb3V0IG5vdCBzdGRlcnIsIGFzIHRoaXMgc2hvdWxkIGFwcGVh cgotCQkJCQkJICogaW4gdGhlIHRlc3QgY2FzZSdzIHJlc3VsdHMKLQkJCQkJCSAqLwotCQkJCQkJ cHJpbnRmKCJpc29sYXRpb250ZXN0ZXI6IGNhbmNlbGluZyBzdGVwICVzIGFmdGVyICVkIHNlY29u ZHNcbiIsCi0JCQkJCQkJICAgc3RlcC0+bmFtZSwgKGludCkgKHRkIC8gVVNFQ1NfUEVSX1NFQykp OwotCQkJCQkJY2FuY2VsZWQgPSB0cnVlOwotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJCWZwcmlu dGYoc3RkZXJyLCAiUFFjYW5jZWwgZmFpbGVkOiAlc1xuIiwgYnVmKTsKLQkJCQkJUFFmcmVlQ2Fu Y2VsKGNhbmNlbCk7CisJCQkJCS8qCisJCQkJCSAqIHByaW50IHRvIHN0ZG91dCBub3Qgc3RkZXJy LCBhcyB0aGlzIHNob3VsZCBhcHBlYXIgaW4KKwkJCQkJICogdGhlIHRlc3QgY2FzZSdzIHJlc3Vs dHMKKwkJCQkJICovCisJCQkJCXByaW50ZigiaXNvbGF0aW9udGVzdGVyOiBjYW5jZWxpbmcgc3Rl cCAlcyBhZnRlciAlZCBzZWNvbmRzXG4iLAorCQkJCQkJICAgc3RlcC0+bmFtZSwgKGludCkgKHRk IC8gVVNFQ1NfUEVSX1NFQykpOworCQkJCQljYW5jZWxlZCA9IHRydWU7CiAJCQkJfQorCQkJCWVs c2UKKwkJCQkJZnByaW50ZihzdGRlcnIsICJQUWNhbmNlbCBmYWlsZWQ6ICVzXG4iLCBQUWVycm9y TWVzc2FnZShjb25uKSk7CiAJCQl9CiAKIAkJCS8qCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2xp YnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMKaW5kZXggMGZmNTYzZjU5YS4uNTI1MDM5MDdi ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBl bGluZS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxp bmUuYwpAQCAtODYsNiArODYsMjc1IEBAIHBnX2ZhdGFsX2ltcGwoaW50IGxpbmUsIGNvbnN0IGNo YXIgKmZtdCwuLi4pCiAJZXhpdCgxKTsKIH0KIAorLyoKKyAqIENoZWNrIHRoYXQgdGhlIHF1ZXJ5 IG9uIHRoZSBnaXZlbiBjb25uZWN0aW9uIGdvdCBjYW5jZWxsZWQuCisgKgorICogVGhpcyBpcyBh IGZ1bmN0aW9uIHdyYXBwZWQgaW4gYSBtYWNyY28gdG8gbWFrZSB0aGUgcmVwb3J0ZWQgbGluZSBu dW1iZXIKKyAqIGluIGFuIGVycm9yIG1hdGNoIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgaW52b2Nh dGlvbi4KKyAqLworI2RlZmluZSBjb25maXJtX3F1ZXJ5X2NhbmNlbGxlZChjb25uKSBjb25maXJt X3F1ZXJ5X2NhbmNlbGxlZF9pbXBsKF9fTElORV9fLCBjb25uKQorc3RhdGljIHZvaWQKK2NvbmZp cm1fcXVlcnlfY2FuY2VsbGVkX2ltcGwoaW50IGxpbmUsIFBHY29ubiAqY29ubikKK3sKKwlQR3Jl c3VsdCAgICpyZXMgPSBOVUxMOworCisJcmVzID0gUFFnZXRSZXN1bHQoY29ubik7CisJaWYgKHJl cyA9PSBOVUxMKQorCQlwZ19mYXRhbF9pbXBsKGxpbmUsICJQUWdldFJlc3VsdCByZXR1cm5lZCBu dWxsOiAlcyIsCisJCQkJCSAgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCWlmIChQUXJlc3VsdFN0 YXR1cyhyZXMpICE9IFBHUkVTX0ZBVEFMX0VSUk9SKQorCQlwZ19mYXRhbF9pbXBsKGxpbmUsICJx dWVyeSBkaWQgbm90IGZhaWwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQiKTsKKwlpZiAoc3RyY21wKFBR cmVzdWx0RXJyb3JGaWVsZChyZXMsIFBHX0RJQUdfU1FMU1RBVEUpLCAiNTcwMTQiKSAhPSAwKQor CQlwZ19mYXRhbF9pbXBsKGxpbmUsICJxdWVyeSBmYWlsZWQgd2l0aCBhIGRpZmZlcmVudCBlcnJv ciB0aGFuIGNhbmNlbGxhdGlvbjogJXMiLAorCQkJCQkgIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsK KwlQUWNsZWFyKHJlcyk7CisJd2hpbGUgKFBRaXNCdXN5KGNvbm4pKQorCXsKKwkJUFFjb25zdW1l SW5wdXQoY29ubik7CisJfQorfQorCisjZGVmaW5lIHNlbmRfY2FuY2VsbGFibGVfcXVlcnkoY29u biwgbW9uaXRvckNvbm4pIHNlbmRfY2FuY2VsbGFibGVfcXVlcnlfaW1wbChfX0xJTkVfXywgY29u biwgbW9uaXRvckNvbm4pCitzdGF0aWMgdm9pZAorc2VuZF9jYW5jZWxsYWJsZV9xdWVyeV9pbXBs KGludCBsaW5lLCBQR2Nvbm4gKmNvbm4sIFBHY29ubiAqbW9uaXRvckNvbm4pCit7CisJaWYgKFBR c2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdfc2xlZXAoMzApIikgIT0gMSkKKwkJcGdfZmF0YWxf aW1wbChsaW5lLCAiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29u bikpOworCisJLyoKKwkgKiBXYWl0IHVudGlsIHRoZSBxdWVyeSBpcyBhY3R1YWxseSBydW5uaW5n LiBPdGhlcndpc2Ugc2VuZGluZyBhCisJICogY2FuY2VsbGF0aW9uIHJlcXVlc3QgbWlnaHQgbm90 IGNhbmNlbCB0aGUgcXVlcnkgZHVlIHRvIHJhY2UgY29uZGl0aW9ucy4KKwkgKi8KKwl3aGlsZSAo dHJ1ZSkKKwl7CisJCWNoYXIJICAgKnZhbHVlID0gTlVMTDsKKwkJUEdyZXN1bHQgICAqcmVzID0g UFFleGVjKAorCQkJCQkJCQkgbW9uaXRvckNvbm4sCisJCQkJCQkJCSAiU0VMRUNUIGNvdW50KCop IEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSAiCisJCQkJCQkJCSAicXVlcnkgPSAnU0VMRUNU IHBnX3NsZWVwKDMwKScgIgorCQkJCQkJCQkgIkFORCBzdGF0ZSA9ICdhY3RpdmUnIik7CisKKwkJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQl7CisJCQlwZ19m YXRhbCgiQ29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2Uo bW9uaXRvckNvbm4pKTsKKwkJfQorCQlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSkKKwkJeworCQkJ cGdfZmF0YWwoInVuZXhwZWN0ZWQgbnVtYmVyIG9mIHJvd3MgcmVjZWl2ZWQ6ICVkIiwgUFFudHVw bGVzKHJlcykpOworCQl9CisJCWlmIChQUW5maWVsZHMocmVzKSAhPSAxKQorCQl7CisJCQlwZ19m YXRhbCgidW5leHBlY3RlZCBudW1iZXIgb2YgY29sdW1ucyByZWNlaXZlZDogJWQiLCBQUW5maWVs ZHMocmVzKSk7CisJCX0KKwkJdmFsdWUgPSBQUWdldHZhbHVlKHJlcywgMCwgMCk7CisJCWlmICgq dmFsdWUgIT0gJzAnKQorCQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlicmVhazsKKwkJfQorCQlQ UWNsZWFyKHJlcyk7CisKKwkJLyoKKwkJICogd2FpdCAxMG1zIGJlZm9yZSBwb2xsaW5nIGFnYWlu CisJCSAqLworCQlwZ191c2xlZXAoMTAwMDApOworCX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rf Y2FuY2VsKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY29ubmluZm8pCit7CisJUEdjYW5jZWwg ICAqY2FuY2VsID0gTlVMTDsKKwlQR2Nvbm4JICAgKmNhbmNlbENvbm4gPSBOVUxMOworCVBHY29u bgkgICAqbW9uaXRvckNvbm4gPSBOVUxMOworCWNoYXIJCWVycm9yYnVmWzI1Nl07CisKKwlmcHJp bnRmKHN0ZGVyciwgInRlc3QgY2FuY2VsbGF0aW9ucy4uLiAiKTsKKworCWlmIChQUXNldG5vbmJs b2NraW5nKGNvbm4sIDEpICE9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2V0IG5vbmJsb2Nr aW5nIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyoKKwkgKiBNYWtlIGEg Y29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UgdG8gbW9uaXRvciB0aGUgcXVlcnkgb24gdGhlIG1h aW4KKwkgKiBjb25uZWN0aW9uLgorCSAqLworCW1vbml0b3JDb25uID0gUFFjb25uZWN0ZGIoY29u bmluZm8pOworCWlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQorCXsKKwkJcGdf ZmF0YWwoIkNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgZmFpbGVkOiAlcyIsCisJCQkJIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKKwl9CisKKwkvKiB0ZXN0IFBRY2FuY2VsICovCisJc2VuZF9jYW5jZWxs YWJsZV9xdWVyeShjb25uLCBtb25pdG9yQ29ubik7CisJY2FuY2VsID0gUFFnZXRDYW5jZWwoY29u bik7CisJaWYgKCFQUWNhbmNlbChjYW5jZWwsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKSkK Kwl7CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gcnVuIFBRY2FuY2VsOiAlcyIsIGVycm9yYnVmKTsK Kwl9OworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCisJLyogUEdjYW5jZWwgb2Jq ZWN0IGNhbiBiZSByZXVzZWQgZm9yIHRoZSBuZXh0IHF1ZXJ5ICovCisJc2VuZF9jYW5jZWxsYWJs ZV9xdWVyeShjb25uLCBtb25pdG9yQ29ubik7CisJaWYgKCFQUWNhbmNlbChjYW5jZWwsIGVycm9y YnVmLCBzaXplb2YoZXJyb3JidWYpKSkKKwl7CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gcnVuIFBR Y2FuY2VsOiAlcyIsIGVycm9yYnVmKTsKKwl9OworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNv bm4pOworCisJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisKKwkvKiB0ZXN0IFBRcmVxdWVzdENhbmNl bCAqLworCXNlbmRfY2FuY2VsbGFibGVfcXVlcnkoY29ubiwgbW9uaXRvckNvbm4pOworCWlmICgh UFFyZXF1ZXN0Q2FuY2VsKGNvbm4pKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHJ1biBQUXJlcXVl c3RDYW5jZWw6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCWNvbmZpcm1fcXVlcnlfY2Fu Y2VsbGVkKGNvbm4pOworCisJLyogdGVzdCBQUXJlcXVlc3RDYW5jZWxTdGFydCBhbmQgdGhlbiBw b2xsaW5nIHdpdGggUFFjYW5jZWxDb25uZWN0UG9sbCAqLworCXNlbmRfY2FuY2VsbGFibGVfcXVl cnkoY29ubiwgbW9uaXRvckNvbm4pOworCWNhbmNlbENvbm4gPSBQUXJlcXVlc3RDYW5jZWxTdGFy dChjb25uKTsKKwlpZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJ CXBnX2ZhdGFsKCJiYWQgY2FuY2VsIGNvbm5lY3Rpb246ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2Fu Y2VsQ29ubikpOworCXdoaWxlICh0cnVlKQorCXsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCWZk X3NldAkJaW5wdXRfbWFzazsKKwkJZmRfc2V0CQlvdXRwdXRfbWFzazsKKwkJUG9zdGdyZXNQb2xs aW5nU3RhdHVzVHlwZSBwb2xscmVzID0gUFFjb25uZWN0UG9sbChjYW5jZWxDb25uKTsKKwkJaW50 CQkJc29jayA9IFBRc29ja2V0KGNhbmNlbENvbm4pOworCisJCWlmIChwb2xscmVzID09IFBHUkVT X1BPTExJTkdfT0spCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJRkRfWkVSTygmaW5wdXRfbWFz ayk7CisJCUZEX1pFUk8oJm91dHB1dF9tYXNrKTsKKwkJc3dpdGNoIChwb2xscmVzKQorCQl7CisJ CQljYXNlIFBHUkVTX1BPTExJTkdfUkVBRElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3Ig cmVhZHNcbiIpOworCQkJCUZEX1NFVChzb2NrLCAmaW5wdXRfbWFzayk7CisJCQkJYnJlYWs7CisJ CQljYXNlIFBHUkVTX1BPTExJTkdfV1JJVElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3Ig d3JpdGVzXG4iKTsKKwkJCQlGRF9TRVQoc29jaywgJm91dHB1dF9tYXNrKTsKKwkJCQlicmVhazsK KwkJCWRlZmF1bHQ6CisJCQkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQ UWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJCX0KKworCQlpZiAoc29jayA8IDApCisJCQlw Z19mYXRhbCgic29jayBkaWQgbm90IGV4aXN0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENv bm4pKTsKKworCQl0di50dl9zZWMgPSAzOworCQl0di50dl91c2VjID0gMDsKKworCQl3aGlsZSAo dHJ1ZSkKKwkJeworCQkJaWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21hc2ssICZvdXRwdXRf bWFzaywgTlVMTCwgJnR2KSA8IDApCisJCQl7CisJCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJ CQljb250aW51ZTsKKwkJCQlwZ19mYXRhbCgic2VsZWN0KCkgZmFpbGVkOiAlbSIpOworCQkJfQor CQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pICE9IENPTk5FQ1RJ T05fQ0FOQ0VMX0ZJTklTSEVEKQorCQlwZ19mYXRhbCgidW5leHBlY3RlZCBjYW5jZWwgY29ubmVj dGlvbiBzdGF0dXM6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWNvbmZpcm1f cXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCisJLyoKKwkgKiB0ZXN0IFBRcmVzZXRTdGFydCB3b3Jr cyBvbiB0aGUgY2FuY2VsIGNvbm5lY3Rpb24gYW5kIGl0IGNhbiBiZSByZXVzZWQKKwkgKiBhZnRl cgorCSAqLworCWlmICghUFFyZXNldFN0YXJ0KGNhbmNlbENvbm4pKQorCXsKKwkJcGdfZmF0YWwo ImNhbmNlbCBjb25uZWN0aW9uIHJlc2V0IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5j ZWxDb25uKSk7CisJfQorCisJc2VuZF9jYW5jZWxsYWJsZV9xdWVyeShjb25uLCBtb25pdG9yQ29u bik7CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQlwZ19m YXRhbCgiYmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENv bm4pKTsKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlmZF9zZXQJ CWlucHV0X21hc2s7CisJCWZkX3NldAkJb3V0cHV0X21hc2s7CisJCVBvc3RncmVzUG9sbGluZ1N0 YXR1c1R5cGUgcG9sbHJlcyA9IFBRcmVzZXRQb2xsKGNhbmNlbENvbm4pOworCQlpbnQJCQlzb2Nr ID0gUFFzb2NrZXQoY2FuY2VsQ29ubik7CisKKwkJaWYgKHBvbGxyZXMgPT0gUEdSRVNfUE9MTElO R19PSykKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQlGRF9aRVJPKCZpbnB1dF9tYXNrKTsKKwkJ RkRfWkVSTygmb3V0cHV0X21hc2spOworCQlzd2l0Y2ggKHBvbGxyZXMpCisJCXsKKwkJCWNhc2Ug UEdSRVNfUE9MTElOR19SRUFESU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciByZWFkc1xu Iik7CisJCQkJRkRfU0VUKHNvY2ssICZpbnB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug UEdSRVNfUE9MTElOR19XUklUSU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciB3cml0ZXNc biIpOworCQkJCUZEX1NFVChzb2NrLCAmb3V0cHV0X21hc2spOworCQkJCWJyZWFrOworCQkJZGVm YXVsdDoKKwkJCQlwZ19mYXRhbCgiYmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNhbmNlbENvbm4pKTsKKwkJfQorCisJCWlmIChzb2NrIDwgMCkKKwkJCXBnX2ZhdGFs KCJzb2NrIGRpZCBub3QgZXhpc3Q6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOwor CisJCXR2LnR2X3NlYyA9IDM7CisJCXR2LnR2X3VzZWMgPSAwOworCisJCXdoaWxlICh0cnVlKQor CQl7CisJCQlpZiAoc2VsZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywgJm91dHB1dF9tYXNrLCBO VUxMLCAmdHYpIDwgMCkKKwkJCXsKKwkJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJCWNvbnRp bnVlOworCQkJCXBnX2ZhdGFsKCJzZWxlY3QoKSBmYWlsZWQ6ICVtIik7CisJCQl9CisJCQlicmVh azsKKwkJfQorCX0KKwlpZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgIT0gQ09OTkVDVElPTl9DQU5D RUxfRklOSVNIRUQpCisJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNhbmNlbCBjb25uZWN0aW9uIHN0 YXR1czogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVyeV9j YW5jZWxsZWQoY29ubik7CisKKwlQUWZpbmlzaChjYW5jZWxDb25uKTsKKworCS8qIHRlc3QgUFFj b25uZWN0Q29tcGxldGUgKi8KKwlzZW5kX2NhbmNlbGxhYmxlX3F1ZXJ5KGNvbm4sIG1vbml0b3JD b25uKTsKKwljYW5jZWxDb25uID0gUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoY29ubik7CisJaWYgKFBR c3RhdHVzKGNhbmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQlwZ19mYXRhbCgiYmFkIGNh bmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwlpZiAo IVBRY29ubmVjdENvbXBsZXRlKGNhbmNlbENvbm4pKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNl bmQgY2FuY2VsOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwljb25maXJtX3F1 ZXJ5X2NhbmNlbGxlZChjb25uKTsKKworCS8qIHRlc3QgUFFjb25uZWN0Q29tcGxldGUgd2l0aCBy ZXNldCBjb25uZWN0aW9uICovCisJaWYgKCFQUXJlc2V0U3RhcnQoY2FuY2VsQ29ubikpCisJewor CQlwZ19mYXRhbCgiY2FuY2VsIGNvbm5lY3Rpb24gcmVzZXQgZmFpbGVkOiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNhbmNlbENvbm4pKTsKKwl9CisKKwlzZW5kX2NhbmNlbGxhYmxlX3F1ZXJ5KGNvbm4s IG1vbml0b3JDb25uKTsKKwlpZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgPT0gQ09OTkVDVElPTl9C QUQpCisJCXBnX2ZhdGFsKCJiYWQgY2FuY2VsIGNvbm5lY3Rpb246ICVzIiwgUFFlcnJvck1lc3Nh Z2UoY2FuY2VsQ29ubikpOworCWlmICghUFFjb25uZWN0Q29tcGxldGUoY2FuY2VsQ29ubikpCisJ CXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2VuZCBjYW5jZWw6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2Fu Y2VsQ29ubikpOworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCVBRZmluaXNoKGNh bmNlbENvbm4pOworCisJZnByaW50ZihzdGRlcnIsICJva1xuIik7Cit9CisKIHN0YXRpYyB2b2lk CiB0ZXN0X2Rpc2FsbG93ZWRfaW5fcGlwZWxpbmUoUEdjb25uICpjb25uKQogewpAQCAtMTU0NSw2 ICsxODE0LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiBzdGF0aWMgdm9pZAogcHJp bnRfdGVzdF9saXN0KHZvaWQpCiB7CisJcHJpbnRmKCJjYW5jZWxcbiIpOwogCXByaW50ZigiZGlz YWxsb3dlZF9pbl9waXBlbGluZVxuIik7CiAJcHJpbnRmKCJtdWx0aV9waXBlbGluZXNcbiIpOwog CXByaW50Zigibm9zeW5jXG4iKTsKQEAgLTE2NDIsNyArMTkxMiw5IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQkJCQkJUFFUUkFDRV9TVVBQUkVTU19USU1FU1RBTVBTIHwgUFFUUkFD RV9SRUdSRVNTX01PREUpOwogCX0KIAotCWlmIChzdHJjbXAodGVzdG5hbWUsICJkaXNhbGxvd2Vk X2luX3BpcGVsaW5lIikgPT0gMCkKKwlpZiAoc3RyY21wKHRlc3RuYW1lLCAiY2FuY2VsIikgPT0g MCkKKwkJdGVzdF9jYW5jZWwoY29ubiwgY29ubmluZm8pOworCWVsc2UgaWYgKHN0cmNtcCh0ZXN0 bmFtZSwgImRpc2FsbG93ZWRfaW5fcGlwZWxpbmUiKSA9PSAwKQogCQl0ZXN0X2Rpc2FsbG93ZWRf aW5fcGlwZWxpbmUoY29ubik7CiAJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAibXVsdGlfcGlw ZWxpbmVzIikgPT0gMCkKIAkJdGVzdF9tdWx0aV9waXBlbGluZXMoY29ubik7Ci0tIAoyLjM0LjEK Cg== --_002_DBBPR83MB0507788F756288750A6327F8F7469DBBPR83MB0507EURP_--