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 1os22T-00074L-4l for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Nov 2022 13:19: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 1os22S-0005Z5-1w for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Nov 2022 13:19:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1os22R-0005Yw-A5 for pgsql-hackers@lists.postgresql.org; Mon, 07 Nov 2022 13:19:43 +0000 Received: from esa16.fujitsucc.c3s2.iphmx.com ([216.71.158.33]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1os22N-0004E5-2k for pgsql-hackers@lists.postgresql.org; Mon, 07 Nov 2022 13:19:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1667827179; x=1699363179; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=+GhVb51JfIY98/HYiJcLCLotc1nHtixN072MOBdT82w=; b=g0ZWIGI24c3gSSClTMUpxomhCdvq0FWScH9tLpUhSTP3tRsSdNwDqbf0 IPLxi9Z6CxPXZcJIXOw9WUl6Antwk5L1i1sHG2sowH+I2M2omJ//Kjqca C5Mdq1mlIMoZTfTIDLgTA2WX5HinSAQYH47Wygww6zQn/VPVAIErAr/Tp os/uHP+s3lQzYWEKqYe0HNK+VYKRXaa4boYvqdU+q31nIrk40irvs7cMT F7axLYf+bZov/39Xnb1R4uL/WRtXQNmsa/7CRFwBVHn42rfmX5YxoFw6j FuNkPU9i4lNci9sXvo5sLeBmDFxhH7bvwYeICx/R7H7ti3ltM8Q3hY+5Q w==; X-IronPort-AV: E=McAfee;i="6500,9779,10523"; a="69263276" X-IronPort-AV: E=Sophos;i="5.96,145,1665414000"; d="scan'208,223";a="69263276" Received: from mail-os0jpn01lp2113.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.113]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Nov 2022 22:19:35 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fI3GC3gKpXY8ALV1QEbEoLVmIsyQvZAlI5w62Em4is8JpkrEhNLKRD2MTXw7j7rak02MQq8yF5RaobwMuYjHvkSoXrnh616LTRx675usy6fEEdV+0pOKhAMofBe3vFdBR8elMIxyq1NLySIsrs0LKpXEzCN1IIEy43CBdTjWwz7zZl6UlcWVHtXIleyKp0WKZrLPP3vplNDHSLpUtzsS4cHAV0qLzF3xBJ6spNQSXBws5kInxCAz9zH1OQDX5afa4d1fExu8ST16yzn/uU+7gkBH1/0m70p3ieuhq7K8rNE6hcLWAZpTyJ0/I9LaoLsIOUHDkIic6nQPm8iQXOluVw== 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=ybLxa4oE/qHeKYI7u/AhqTzdxPgwYu9p9JKw98tJQo0=; b=QlEpXIVPZu6VttH237tD4Kk8QSjlJg4gGvJEg1Bb+7F/JCN9N4Yw1ZiAjxtt8sEye87mT3YFczy14xeT9ujwufE4H/ChOCDQQjqdaQR3yvYDoGfRjJnLvnciSHVUQS0a1GqpHvkSGGQxZ/GknBqb6z/FjSgWYNMJSQaNwHv/6TVAbVaqMRp8c46klZMkD/OX/rKsRUwKHFw+p2uRGyoQ1OykyTA/QIa6cIbb3Q4Bn6Okc3uJ3aL67SRJ/Tnaeqhmh5JfOfnOu4fbI/VYrj46n/rYg/E4UC7yI0jLvK8Hdh94bhR38iq3fK0Fjb5agGI0f20s8GK7bpH6y7TRhpFang== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by OS3PR01MB8195.jpnprd01.prod.outlook.com (2603:1096:604:175::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27; Mon, 7 Nov 2022 13:19:25 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd%7]) with mapi id 15.20.5791.022; Mon, 7 Nov 2022 13:19:25 +0000 From: "houzj.fnst@fujitsu.com" To: Amit Kapila CC: Masahiko Sawada , "wangw.fnst@fujitsu.com" , Peter Smith , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX5ZKpBKXxeUU2FhEhnmXQum6zlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKCAAUFhAIAAPN6AgATOZqA= Date: Mon, 7 Nov 2022 13:19:25 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9ZjI5MWRjNzgtNTA0ZC00YTg0LTkyNWEtZTllMWY4MDYy?= =?utf-8?B?ODc1O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0xMS0wN1QxMzowODoxOVo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS0PR01MB5716:EE_|OS3PR01MB8195:EE_ x-ms-office365-filtering-correlation-id: 8a914d31-8a51-4a68-077d-08dac0c2b10c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VZHwFmSUgP1yfQmXwPoZC0BJ2Okb3iMFK5wvdsbS3kNjyBEpoveeSn6fTgLirtxnbqVbCQM6KOqQK3vgjJWMUzl5q1Lf8DDnJYcN4ZdDlzVfGCxwRXvkgpILrMJ65/HGYkXmhXCABnE6Bmd+428tg1BOLXXuEaXtOyrd5ShTXEIQh77yAl5c79quqme3n0CKwvf4Cd3IqqIH52QpVoV8MtORrK518bvwqQBOsr4AmND45hb+HRJwOS2tdxhLAX78hs3dHmd9nTGw2o1nzpA8Hcn/DWo+Zhvj9ik4MuhiwtfcoKYjr35TBEZWnj6lcO3NFyV/0cJYYQGQ5605mltDB5WdYPYfVVlAze/shKVQJPKB1+1wN29UnDjaa8MygquqYNPQhDF0XOXbZis9M0MRXQtOLe8Aei9t2GZnY+QhJWtWLjx1xoNFMQZDpLGHdeYqi52N2l2T7SyEV0lOXmyfj0avLAd3ZmQTk5i+hSZfQbuCeED0DH2U7EEdAP32KIIXU3LDxTXxEFv5JoUiRgMaqNGE53QAJ+l938O7I0bEX/+YmpepsyZHCB1KriIhMcYRwvyJYski8xkpQ3BWScommoCwjuiEzkNGdyyQMMJdODpsBqsuyVyKktsdj0pO3ECLOIigiPhyahcz25sXSfbYf52ZDKJtY4kScEn8M919Boq7uzIDA3F8xCT30pmfaIpYYXpl6BTs+9AoQuVNSiOIyRNCOHoT+8XJb8EHu1NClxEqQsN/+Hf7WEYaw2SciyPs96uNYj0VIjRd4CCDMrBiO0fVHZgjg5PzWCOokrSr0Z4= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(346002)(366004)(376002)(136003)(39860400002)(396003)(451199015)(1590799012)(1580799009)(85182001)(82960400001)(186003)(38100700002)(122000001)(99936003)(66446008)(66556008)(83380400001)(8676002)(4326008)(41300700001)(86362001)(52536014)(8936002)(5660300002)(55016003)(2906002)(33656002)(64756008)(9686003)(26005)(478600001)(316002)(54906003)(6916009)(71200400001)(66476007)(7696005)(6506007)(38070700005)(53546011)(66946007)(76116006);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TlJQQmdiQW5PYjd5Q3NIS2IrUUlxQ3NFem5lUUVzbGtSenRkcWdZLy93TkxM?= =?utf-8?B?b3UydlFsaHUwNm43K1R4anhsM1hSSG5XQURFa3pTQTR6RHcxdkR6U1ZuUjIr?= =?utf-8?B?WS9STC9tUVQzQzhmVGlVdURteHhxai92WUhoazRiemZ4aDlhMVExZXhSNVph?= =?utf-8?B?cHJtNGNJTFI0RHdMMHo0dndMSkdkeXFmYlVhbW4rdTFyMzJIK1ZuQ3pzVkxl?= =?utf-8?B?WUJqL2I3OU1KVHd3N2dlaS9IZmZ2eE1EdjNuUDYzaFpyVFBEblluakY1STA3?= =?utf-8?B?OE5HYlZHYUlxZTdXSk1kdStURncvU3YrTWNqd01xYTJITzNGZUVLSjRDR1I4?= =?utf-8?B?QWxoSThwNElFbkwvcUE2TU1KUTdkSGZ3dlRzTm9xcUdRSlBuZkc5RXpqOUxC?= =?utf-8?B?cGxZQ3dsb2xGUklrOXVyNDlqYTNpdWptdGhHN2lNZWsxNHBucVpxb2hEb2lK?= =?utf-8?B?YjZ5YUpsOG5JZjlMU1IvL2VZazNyNE1MbzBwQU1DVGlXQkpRQ01WdmZVaU9C?= =?utf-8?B?VlJiSjZMYzY2bjJlaWVmbDNmdC9jWmVtYkQyQ3BJR1VMQ0o4bjFRcGF3Ykdq?= =?utf-8?B?Y2RDemF6ZHpVMjhZMEpyWkkzSkVzTXI3dkViM0xjd0E2LzBTWnU5RzN4TEs2?= =?utf-8?B?ekdWb3ozZTNFQTJZOVF0bUhxQWc5b0tOVWliMTlZRndBekU3NmNucGZKMDBi?= =?utf-8?B?eFJuMDRHTnc0K2RpVnBZZW9JR0FlTlA4Y0huMzJWZ2dRUlZpOEFoL1M0NFhj?= =?utf-8?B?WWJrOENwdWcrVEMyWUdKWWJoL1ZjUG1XaGNyKzN3VHpkZDhjNmZXSGoyUm52?= =?utf-8?B?SDhvT0FPNUNJaWxDSWxpOFZ5dTY0eVJzTU1ZMllweG9SSG9QUzZLSmM1bkx6?= =?utf-8?B?aks0N1YzSkN3VkRwQmdwMFRwOEtqTGJuQmtmM2F3TlRGSVVZRDhWMTdrOGRp?= =?utf-8?B?bnR2REpzREViY3Yyb2d0MDgvdVdEWGxySjNRT1orMi9XUi8zRXhqTTI5UEN4?= =?utf-8?B?ajJVUHN3N1l1OHl5bm5abDFQMGZST3A0TjFIaGU0Mm9UdDZIWnZBdDdSRStD?= =?utf-8?B?TDRNVmZUNjdkbyttUGNFREJEdVc3TjJaQ3ZPK2tibEVYaFBZajFYb0daT2lZ?= =?utf-8?B?MFFWYmlaNThPb0w2TDlLS3lnektsMGZ1TVdXeldjL3Y3dk5wVXJsU21vT01m?= =?utf-8?B?NnppVTNNUHJRZTU4bHNNYmxEbHplSEFEaHVxeGxXRGFxazRMbDluaHNaSXhy?= =?utf-8?B?ZzVlSExiLzhYUEZJazc0WkNjU3dUWmRPbEtDdVBIREN2UHBIRGJIcGl1eUJn?= =?utf-8?B?TmpHVURGMFJRK0wyTnNNMU1lR04xNmE3bDFoTDFGR1hIZXpzYmxGVkhUcmhz?= =?utf-8?B?amcrRHZkQ3lwTU0vdkpCZFRFNGQ1MTBBcWhBZHdTb1BVN3NzdEszN0Y1UnFD?= =?utf-8?B?OGdlTkN4T3owVmNlQjl4cWRLdEVCRWZBOUFRS2M0SXNZOGRUUE1oeGVEeEkz?= =?utf-8?B?R3lWMUFicHRyaDE5YmRHVlh2Zmw5YUY5U0pWQi94QXZlUmc5WXM2L0FLM1hT?= =?utf-8?B?azlnSi9MdEI0bFJrOHh6b0tWV2tSTnFrSlBCbW83Mit6Q3ZBTVlsZk0zM2ov?= =?utf-8?B?N0xJMkFZZUEwMVdPeGhyTkV6cUV1SVcrWDIyR2ZxdEFUR0wvTVBFTDVRQmpa?= =?utf-8?B?ZjVUbE9Fb2hITmtidFNNSkYwamRIcGpkT3FSMGpKbkxtKyt0NDdZZmlCRDAz?= =?utf-8?B?VHJrY1VSYlE4Y0xhajBtSDlkZW5xZFYyYzNGT0xTeDNENkoxZlhyRmNpVXAw?= =?utf-8?B?aUlIKzh4U3JraUZ5cFBnRUl0YThKSXVwblZja0l4aHF4RmZXZmtWRm0zaER5?= =?utf-8?B?Y3BqQVNXTFliTFphZTVQV0NBcW9hWmo3YmhzSlVueG9rc2Jzb1doQWVmNG4x?= =?utf-8?B?cXVxUU9PbkkzSFVlNENhTVNIQ3JGVVNFbFFrYUNJcmo2TTV1Vkx0Vkl4L1J5?= =?utf-8?B?dXhrbjlQSkt2NkJFMDFEa2R3dm5WTXE2YkJUWjI4MjdSVlRIYzlHUlRKUEw2?= =?utf-8?B?VWZiakRzbW14d3JuVmZJU2dxWURkcm1qbVZ6TDBDU1hlazdZYmlpVWpWY1RB?= =?utf-8?Q?ub9QC20kdTCoyde3LMxu+y5xO?= Content-Type: multipart/mixed; boundary="_003_OS0PR01MB5716E366874B253B58FC0A23943C9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a914d31-8a51-4a68-077d-08dac0c2b10c X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2022 13:19:25.2265 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: V7zaaEbTH30BVU8ZBEJpY1FF3NaZkZ0+e5qdtQLrtoW7LAE/W/BaXDCmBHWP7Nk+hoJ2TcgdsCzNG9343KG9zw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB8195 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_OS0PR01MB5716E366874B253B58FC0A23943C9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gRnJpZGF5LCBOb3ZlbWJlciA0LCAyMDIyIDc6NDUgUE0gQW1pdCBLYXBpbGEgPGFtaXQua2Fw aWxhMTZAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIEZyaSwgTm92IDQsIDIwMjIgYXQgMToz NiBQTSBBbWl0IEthcGlsYSA8YW1pdC5rYXBpbGExNkBnbWFpbC5jb20+IHdyb3RlOg0KPiA+DQo+ ID4gT24gVGh1LCBOb3YgMywgMjAyMiBhdCA2OjM2IFBNIGhvdXpqLmZuc3RAZnVqaXRzdS5jb20N Cj4gPiA8aG91emouZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6DQo+ID4gPg0KPiA+ID4gVGhhbmtz IGZvciB0aGUgYW5hbHlzaXMgYW5kIHN1bW1hcnkgIQ0KPiA+ID4NCj4gPiA+IEkgdHJpZWQgdG8g aW1wbGVtZW50IHRoZSBhYm92ZSBpZGVhIGFuZCBoZXJlIGlzIHRoZSBwYXRjaCBzZXQuDQo+ID4g Pg0KPiA+DQo+ID4gRmV3IGNvbW1lbnRzIG9uIHY0Mi0wMDAxDQo+ID4gPT09PT09PT09PT09PT09 PT09PT09PT09PT09DQo+ID4NCg0KVGhhbmtzIGZvciB0aGUgY29tbWVudHMuDQoNCj4gRmV3IG1v cmUgY29tbWVudHMgb24gdjQyLTAwMDENCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiAxLiBJbiBwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEoKSwgaXQgc2VlbXMgd2luZm8tPnNl cmlhbGl6ZV9jaGFuZ2VzDQo+IGFuZCBzd2l0Y2hpbmdfdG9fc2VyaWFsaXplIGFyZSBzZXQgdG8g aW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGNoYW5nZWQNCj4gcGFyYWxsZWwgdG8gc2VyaWFsaXplIG1v ZGUuIElzbid0IHVzaW5nIGp1c3QgdGhlDQo+IHN3aXRjaGluZ190b19zZXJpYWxpemUgc3VmZmlj aWVudD8gQWxzbywgaXQgd291bGQgYmUgYmV0dGVyIHRvIG5hbWUNCj4gc3dpdGNoaW5nX3RvX3Nl cmlhbGl6ZSBhcyBwYXJhbGxlbF90b19zZXJpYWxpemUgb3Igc29tZXRoaW5nIGxpa2UNCj4gdGhh dC4NCg0KSSBzbGlnaHRseSBjaGFuZ2UgdGhlIGxvZ2ljIHRvIGxldCBzZXJpYWxpemUgdGhlIG1l c3NhZ2UgZGlyZWN0bHkgd2hlbiB0aW1lb3V0DQppbnN0ZWFkIG9mIGludm9raW5nIGFwcGx5X2Rp c3BhdGNoIGFnYWluIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGUNCnN3aXRjaGluZ190b19zZXJp YWxpemUuDQoNCj4gDQo+IDIuIEluIHBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSgpLCB0aGUgcGF0 Y2ggaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQNCj4gdGhlIGZpbGVzZXQsIGFuZCB0aGVuIGFnYWlu IGluIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoKSwgaXQgd2lsbCBkbw0KPiB0aGUgc2FtZSBp ZiB3ZSBmYWlsIHdoaWxlIHNlbmRpbmcgc3RyZWFtX3N0YXJ0IG1lc3NhZ2UgdG8gdGhlIHBhcmFs bGVsDQo+IHdvcmtlci4gSXQgc2VlbXMgd2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIGZpbGVz ZXQgYWdhaW4gZm9yDQo+IFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSBzdGF0ZSBpbiBh cHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KCkNCj4gdW5sZXNzIEkgYW0gbWlzc2luZyBzb21ldGhp bmcuDQoNCkZpeGVkLg0KDQo+IDMuDQo+IGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5n SW5mbyBzKQ0KPiB7DQo+IC4uLg0KPiArIGlmICghZmlyc3Rfc2VnbWVudCkNCj4gKyB7DQo+ICsg LyoNCj4gKyAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwg YXBwbHkgd29ya2VyDQo+ICsgKiBjYW4gY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hh bmdlcy4NCj4gKyAqLw0KPiArIHBhcmFsbGVsX2FwcGx5X3VubG9jayh3aW5mby0+c2hhcmVkLT5z dHJlYW1fbG9ja19pZCk7DQo+IC4uLg0KPiB9DQo+IA0KPiBDYW4gd2UgaGF2ZSBhbiBhc3NlcnQg YmVmb3JlIHRoaXMgdW5sb2NrIGNhbGwgdGhhdCB0aGUgbG9jayBtdXN0IGJlDQo+IGhlbGQ/IFNp bWlsYXJseSwgaWYgdGhlcmUgYXJlIG90aGVyIHBsYWNlcyB0aGVuIHdlIGNhbiBoYXZlIGFzc2Vy dA0KPiB0aGVyZSBhcyB3ZWxsLg0KDQpJdCBzZWVtcyB3ZSBkb24ndCBoYXZlIGEgc3RhbmRhcmQg QVBJIGNhbiBiZSB1c2VkIHdpdGhvdXQgYSB0cmFuc2FjdGlvbi4NCk1heWJlIHdlIGNhbiB1c2Ug dGhlIGxpc3QgUGFyYWxsZWxBcHBseUxvY2tpZHMgdG8gY2hlY2sgdGhhdCA/DQoNCj4gNC4gSXQg aXMgbm90IHZlcnkgY2xlYXIgdG8gbWUgaG93IG1haW50YWluaW5nIFBhcmFsbGVsQXBwbHlMb2Nr aWRzDQo+IGxpc3QgaXMgaGVscGZ1bC4NCg0KSSB3aWxsIHRoaW5rIGFib3V0IHRoaXMgYW5kIHJl bW92ZSB0aGlzIGluIG5leHQgdmVyc2lvbiBsaXN0IGlmIHBvc3NpYmxlLg0KDQo+IA0KPiA1Lg0K PiAvKg0KPiArICogSGFuZGxlIFNUUkVBTSBTVEFSVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zYWN0 aW9uIHdhcyBzcGlsbGVkIHRvIGRpc2suDQo+ICsgKg0KPiArICogSW5pbnRpYWxpemUgZmlsZXNl dCBpZiBub3QgeWV0IGFuZCBvcGVuIHRoZSBmaWxlLg0KPiArICovDQo+ICt2b2lkDQo+ICtzZXJp YWxpemVfc3RyZWFtX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQp DQo+ICt7DQo+ICsgLyoNCj4gKyAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0 LA0KPiANCj4gVGhpcyBmdW5jdGlvbidzIG5hbWUgYW5kIGNvbW1lbnRzIHNlZW0gdG8gaW5kaWNh dGUgdGhhdCBpdCBpcyB0bw0KPiBoYW5kbGUgc3RyZWFtX3N0YXJ0IG1lc3NhZ2UuIElzIHRoYXQg cmVhbGx5IHRoZSBjYXNlPyBJdCBpcyBiZWluZw0KPiBjYWxsZWQgZnJvbSBwYXJhbGxlbF9hcHBs eV9zZW5kX2RhdGEoKSB3aGljaCBtYWRlIG1lIHRoaW5rIGl0IGNhbiBiZQ0KPiB1c2VkIGZyb20g b3RoZXIgcGxhY2VzIGFzIHdlbGwuDQoNCkFkanVzdGVkIHRoZSBjb21tZW50Lg0KDQpIZXJlIGlz IHRoZSBuZXcgdmVyc2lvbiBwYXRjaCBzZXQgd2hpY2ggYWRkcmVzc2VkIGNvbW1lbnRzIGFzIG9m IGxhc3QgRnJpZGF5Lg0KSSBhbHNvIGFkZGVkIHNvbWUgY29tbWVudHMgZm9yIHRoZSBuZXdseSBp bnRyb2R1Y2VkIGNvZGVzIGluIHRoaXMgdmVyc2lvbi4NCg0KQW5kIHRoYW5rcyBhIGxvdCBmb3Ig dGhlIGNvbW1lbnRzIHRoYXQgU2F3YWRhLXNhbiwgUGV0ZXIgYW5kIEt1cm9kYS1zYW4gcG9zdGVk IHRvZGF5Lg0KSSB3aWxsIGhhbmRsZSB0aGVtIGluIG5leHQgdmVyc2lvbiBzb29uLg0KDQpCZXN0 IHJlZ2FyZHMsDQpIb3UgemoNCg== --_003_OS0PR01MB5716E366874B253B58FC0A23943C9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v43-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Description: v43-0001-Perform-streaming-logical-transactions-by-parall.patch Content-Disposition: attachment; filename="v43-0001-Perform-streaming-logical-transactions-by-parall.patch"; size=171767; creation-date="Mon, 07 Nov 2022 13:18:29 GMT"; modification-date="Mon, 07 Nov 2022 13:19:22 GMT" Content-Transfer-Encoding: base64 RnJvbSAzZDg3ZTcxZDVlODJkY2JhN2U2NWMyM2NmZGY0NWQ4MzlkZWVjNWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY0MyAxLzJdIFBlcmZvcm0gc3RyZWFtaW5nIGxvZ2ljYWwgdHJhbnNhY3Rpb25zIGJ5IHBhcmFs bGVsCiB3b3JrZXJzCgpDdXJyZW50bHksIGZvciBsYXJnZSB0cmFuc2FjdGlvbnMsIHRoZSBwdWJs aXNoZXIgc2VuZHMgdGhlIGRhdGEgaW4gbXVsdGlwbGUKc3RyZWFtcyAoY2hhbmdlcyBkaXZpZGVk IGludG8gY2h1bmtzIGRlcGVuZGluZyB1cG9uIGxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0pLAph bmQgdGhlbiBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLCB0aGUgYXBwbHkgd29ya2VyIHdyaXRlcyB0 aGUgY2hhbmdlcyBpbnRvCnRlbXBvcmFyeSBmaWxlcyBhbmQgb25jZSBpdCByZWNlaXZlcyB0aGUg Y29tbWl0LCBpdCByZWFkcyBmcm9tIHRob3NlIGZpbGVzIGFuZAphcHBsaWVzIHRoZSBlbnRpcmUg dHJhbnNhY3Rpb24uIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHN1Y2gKdHJhbnNhY3Rp b25zLCB3ZSBjYW4gaW5zdGVhZCBhbGxvdyB0aGVtIHRvIGJlIGFwcGxpZWQgdmlhIHBhcmFsbGVs IHdvcmtlcnMuCgpJbiB0aGlzIGFwcHJvYWNoLCB3ZSBhc3NpZ24gYSBuZXcgcGFyYWxsZWwgYXBw bHkgd29ya2VyIChpZiBhdmFpbGFibGUpIGFzCnNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJl YW0gaXMgcmVjZWl2ZWQgYW5kIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwKc2VuZCBjaGFu Z2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlcgp3aWxsIGRpcmVjdGx5IGFwcGx5IHRoZSBjaGFuZ2UgaW5zdGVhZCBvZiB3cml0 aW5nIGl0IHRvIHRlbXBvcmFyeSBmaWxlcy4gV2UKa2VlcCB0aGlzIHdvcmtlciBhc3NpZ25lZCB0 aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVjZWl2ZWQgYW5kIGFsc28gd2FpdApmb3Ig dGhlIHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQgb3Jk ZXJpbmcgYW5kIGF2b2lkcwp3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZXMgaW4gbW9z dCBjYXNlcy4gV2Ugc3RpbGwgbmVlZCB0byBzcGlsbCBpZgp0aGVyZSBpcyBubyB3b3JrZXIgYXZh aWxhYmxlLgoKVGhpcyBwYXRjaCBhbHNvIGV4dGVuZHMgdGhlIFNVQlNDUklQVElPTiAnc3RyZWFt aW5nJyBwYXJhbWV0ZXIgc28gdGhhdCB0aGUgdXNlcgpjYW4gY29udHJvbCB3aGV0aGVyIHRvIGFw cGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gaW4gYSBwYXJhbGxlbCBhcHBseQp3b3JrZXIg b3Igc3BpbGwgdGhlIGNoYW5nZSB0byBkaXNrLiBUaGUgdXNlciBjYW4gc2V0IHRoZSBzdHJlYW1p bmcgcGFyYW1ldGVyIHRvCidvbi9vZmYnLCAncGFyYWxsZWwnLiBUaGUgcGFyYW1ldGVyIHZhbHVl ICdwYXJhbGxlbCcgbWVhbnMgdGhlIHN0cmVhbWluZyB3aWxsCmJlIGFwcGxpZWQgdmlhIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLCBpZiBhdmFpbGFibGUuIFRoZSBwYXJhbWV0ZXIgdmFsdWUKJ29u JyBtZWFucyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHdpbGwgYmUgc3BpbGxlZCB0byBkaXNr LiBUaGUgZGVmYXVsdCB2YWx1ZQppcyAnb2ZmJyAoc2FtZSBhcyBjdXJyZW50IGJlaGF2aW91ciku CgpJbiBhZGRpdGlvbiwgdGhlIHBhdGNoIGV4dGVuZHMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24g U1RSRUFNX0FCT1JUIG1lc3NhZ2Ugc28KdGhhdCBhYm9ydF90aW1lIGFuZCBhYm9ydF9sc24gY2Fu IGFsc28gYmUgc2VudCB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlCnJlcGxpY2F0aW9u IG9yaWdpbiBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2hlbiB0aGUgc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGlzCmFib3J0ZWQuIEJlY2F1c2UgdGhpcyBtZXNzYWdlIGV4dGVuc2lvbiBpcyBuZWVk ZWQgdG8gc3VwcG9ydCBwYXJhbGxlbApzdHJlYW1pbmcsIHBhcmFsbGVsIHN0cmVhbWluZyBpcyBu b3Qgc3VwcG9ydGVkIGZvciBwdWJsaWNhdGlvbnMgb24gc2VydmVycyA8ClBHMTYuCi0tLQogZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICst CiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MjggKy0KIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICAgICAg IHwgICAyMSArLQogZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDI5ICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dt bCAgICAgICAgICB8ICAgMjQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAg ICAgICAgICAgICAgICAgIHwgICAxMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZWZpbmUuYyAg ICAgICAgICAgICAgICAgICAgICB8ICAgNTggKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5jICAgICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9saWJwcS9wcW1x LmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vbGlicHF3YWxy ZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgICAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiAuLi4v cmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgICAgICB8IDEzNDIgKysr KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2Rl LmMgICAgICAgICAgIHwgICAxMCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s YXVuY2hlci5jICAgICAgICAgfCAgMjEwICsrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZCAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvb3JpZ2luLmMgICAgICAgICAgIHwgICAyMyArLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jICAgICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICB8ICAgMTAgKy0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICAgICAgIHwgICAyNCArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgICAgICAgfCAxMTc3ICsr KysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1 dC5jICAgICAgICB8ICAgMjMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwu YyAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv d2FpdF9ldmVudC5jICAgICAgICAgICAgfCAgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jICAgICAgICAgICAgICAgIHwgICAxMiArCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgICAgICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oICAgICAgICAgICAgICB8ICAgMjEgKy0KIHNyYy9p bmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCAgICAgICAgICB8ICAgIDEg Kwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICAgICAgICAgfCAg IDI4ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmggICAgICAgICAg ICB8ICAgIDggKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggICAgICAgICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oICAgICAg ICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaCAgICAgICAgICAgIHwgICAgNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuaCAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaCAgICAgICAgICB8ICAxOTIgKystCiBzcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NzaWduYWwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRp bHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dCAgICAgICAgIHwgICAxMiArLQogc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbCAgICAgICAgICAgICAgfCAgICA2ICstCiBz cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgICAgICB8ICAgIDUg KwogNDMgZmlsZXMgY2hhbmdlZCwgMzA4NCBpbnNlcnRpb25zKCspLCAzMTcgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBs eXBhcmFsbGVsd29ya2VyLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dt bCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDAwZjgzM2QuLmM1NzY5ZGEgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCkBAIC03ODkyLDExICs3ODkyLDE2IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxh Y2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxl PiZsCiAKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1 YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZp ZWxkPnN1YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3Bh cmE+CiAgICAgICA8cGFyYT4KLSAgICAgICBJZiB0cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwg YWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzCi0gICAgICAgdHJhbnNhY3Rpb25zCisgICAg ICAgQ29udHJvbHMgaG93IHRvIGhhbmRsZSB0aGUgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRy YW5zYWN0aW9uczoKKyAgICAgICA8bGl0ZXJhbD5mPC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVh bWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMsCisgICAgICAgPGxpdGVyYWw+dDwvbGl0 ZXJhbD4gPSBzcGlsbCB0aGUgY2hhbmdlcyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgdG8K KyAgICAgICBkaXNrIGFuZCBhcHBseSBhdCBvbmNlIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBj b21taXR0ZWQgb24gdGhlCisgICAgICAgcHVibGlzaGVyLAorICAgICAgIDxsaXRlcmFsPnA8L2xp dGVyYWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3RseSB1c2luZyBhIHBhcmFsbGVsIGFwcGx5Cisg ICAgICAgd29ya2VyIGlmIGF2YWlsYWJsZSAoc2FtZSBhcyAndCcgaWYgbm8gd29ya2VyIGlzIGF2 YWlsYWJsZSkKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIApkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmlu ZGV4IDU1OWViODkuLmE2YWExYWMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ5NDgsNyArNDk0OCw4IEBAIEFO WSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAo IDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAg ICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtlcnMuIFRoaXMgaW5jbHVkZXMKLSAgICAgICAgYm90aCBhcHBseSB3b3JrZXJzIGFuZCB0YWJs ZSBzeW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAgICAgICAgbGVhZGVyIGFwcGx5IHdvcmtlcnMs IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFuZCB0YWJsZSBzeW5jaHJvbml6YXRpb24KKyAgICAg ICAgd29ya2Vycy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIExvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUgcG9vbCBkZWZpbmVkIGJ5 CkBAIC00OTg4LDYgKzQ5ODksMzEgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwv bGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 Imd1Yy1tYXgtcGFyYWxsZWwtYXBwbHktd29ya2Vycy1wZXItc3Vic2NyaXB0aW9uIiB4cmVmbGFi ZWw9Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24iPgorICAgICAg PHRlcm0+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlv bjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAg ICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAg ICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAg IDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJz IHBlciBzdWJzY3JpcHRpb24uIFRoaXMKKyAgICAgICAgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBh bW91bnQgb2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZgorICAgICAgICBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVyCisgICAgICAgIDxsaXRl cmFsPnN0cmVhbWluZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFyZSB0YWtlbiBm cm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAgICAgPHZhcm5hbWU+bWF4X2xvZ2ljYWxfcmVw bGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLiBUaGlzIHBhcmFtZXRlciBjYW4gb25s eSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVu YW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAgICBsaW5lLgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAg IDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNh dGlvbi5zZ21sCmluZGV4IGY4NzU2MzguLmYzNjY3MTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVw bGljYXRpb24uc2dtbApAQCAtMTQ5Nyw2ICsxNDk3LDE2IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5n IHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklO U0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkgY29uc3RyYWludC4gIFRoaXMgY2FuIGVhc2ls eSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNvbnNpc3RlbnQuCiAgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlzIDxsaXRlcmFsPnBhcmFsbGVsPC9s aXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAgIGZhaWxlZCB0cmFuc2FjdGlvbnMgbWF5IG5v dCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworICAgY2hh bmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4gb3IgPGxpdGVy YWw+b2ZmPC9saXRlcmFsPiBhbmQKKyAgIGNhdXNlIHRoZSBzYW1lIGNvbmZsaWN0cyBhZ2FpbiBz byB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIHdpbGwKKyAgIGJlIHdy aXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0aGUgdXNhZ2Ugb2YgZmluaXNoIExTTiwgcGxl YXNlIHJlZmVyIHRvIDxsaW5rCisgICBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24iPjxj b21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4KKyAgIFNLSVA8L2NvbW1hbmQ+PC9saW5rPi4K KyAgPC9wYXJhPgogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24t cmVzdHJpY3Rpb25zIj4KQEAgLTE2NzgsNyArMTY4OCw4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5n IHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklO U0VSCiAgICBzdWJzY3JpcHRpb24uICBBIGRpc2FibGVkIHN1YnNjcmlwdGlvbiBvciBhIGNyYXNo ZWQgc3Vic2NyaXB0aW9uIHdpbGwgaGF2ZQogICAgemVybyByb3dzIGluIHRoaXMgdmlldy4gIElm IHRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0aW9uIG9mIGFueQogICAgdGFibGUgaXMgaW4g cHJvZ3Jlc3MsIHRoZXJlIHdpbGwgYmUgYWRkaXRpb25hbCB3b3JrZXJzIGZvciB0aGUgdGFibGVz Ci0gICBiZWluZyBzeW5jaHJvbml6ZWQuCisgICBiZWluZyBzeW5jaHJvbml6ZWQuIE1vcmVvdmVy LCBpZiB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGlzIGFwcGxpZWQgaW4KKyAgIHBhcmFsbGVs LCB0aGVyZSB3aWxsIGJlIGFkZGl0aW9uYWwgd29ya2Vycy4KICAgPC9wYXJhPgogIDwvc2VjdDE+ CiAKQEAgLTE3ODQsOCArMTc5NSwxMiBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0 YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgdG8g dGhlIHN1YnNjcmliZXIsIHBsdXMgc29tZSByZXNlcnZlIGZvciB0YWJsZSBzeW5jaHJvbml6YXRp b24uCiAgICA8dmFybmFtZT5tYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1l PiBtdXN0IGJlIHNldCB0byBhdCBsZWFzdAogICAgdGhlIG51bWJlciBvZiBzdWJzY3JpcHRpb25z LCBhZ2FpbiBwbHVzIHNvbWUgcmVzZXJ2ZSBmb3IgdGhlIHRhYmxlCi0gICBzeW5jaHJvbml6YXRp b24uICBBZGRpdGlvbmFsbHkgdGhlIDx2YXJuYW1lPm1heF93b3JrZXJfcHJvY2Vzc2VzPC92YXJu YW1lPgotICAgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8gYWNjb21tb2RhdGUgZm9yIHJlcGxp Y2F0aW9uIHdvcmtlcnMsIGF0IGxlYXN0CisgICBzeW5jaHJvbml6YXRpb24uIElmIHRoZSBzdWJz Y3JpcHRpb24gcGFyYW1ldGVyIDxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4KKyAgIGlzIHNl dCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJhbD4sCisgICA8bGl0ZXJhbD5tYXhfbG9naWNh bF9yZXBsaWNhdGlvbl93b3JrZXJzPC9saXRlcmFsPiBzaG91bGQgYmUgaW5jcmVhc2VkCisgICBh Y2NvcmRpbmcgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMu ICBBZGRpdGlvbmFsbHkgdGhlCisgICA8dmFybmFtZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFy bmFtZT4gbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8KKyAgIGFjY29tbW9kYXRlIGZvciByZXBs aWNhdGlvbiB3b3JrZXJzLCBhdCBsZWFzdAogICAgKDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxp Y2F0aW9uX3dvcmtlcnM8L3Zhcm5hbWU+CiAgICArIDxsaXRlcmFsPjE8L2xpdGVyYWw+KS4gIE5v dGUgdGhhdCBzb21lIGV4dGVuc2lvbnMgYW5kIHBhcmFsbGVsIHF1ZXJpZXMKICAgIGFsc28gdGFr ZSB3b3JrZXIgc2xvdHMgZnJvbSA8dmFybmFtZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFt ZT4uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dt bC9wcm90b2NvbC5zZ21sCmluZGV4IDVmZGQ0MjkuLmM2YTBlODAgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBA IC0zMTAyLDcgKzMxMDIsNyBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0 YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFy YT4KICAgICAgICBQcm90b2NvbCB2ZXJzaW9uLiBDdXJyZW50bHkgdmVyc2lvbnMgPGxpdGVyYWw+ MTwvbGl0ZXJhbD4sIDxsaXRlcmFsPjI8L2xpdGVyYWw+LAotICAgICAgIGFuZCA8bGl0ZXJhbD4z PC9saXRlcmFsPiBhcmUgc3VwcG9ydGVkLgorICAgICAgIDxsaXRlcmFsPjM8L2xpdGVyYWw+LCBh bmQgPGxpdGVyYWw+NDwvbGl0ZXJhbD4gYXJlIHN1cHBvcnRlZC4KICAgICAgIDwvcGFyYT4KICAg ICAgIDxwYXJhPgogICAgICAgIFZlcnNpb24gPGxpdGVyYWw+MjwvbGl0ZXJhbD4gaXMgc3VwcG9y dGVkIG9ubHkgZm9yIHNlcnZlciB2ZXJzaW9uIDE0CkBAIC0zMTEyLDYgKzMxMTIsMTEgQEAgcHNx bCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lT VEVNOyIKICAgICAgICBWZXJzaW9uIDxsaXRlcmFsPjM8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBv bmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNQogICAgICAgIGFuZCBhYm92ZSwgYW5kIGl0IGFsbG93 cyBzdHJlYW1pbmcgb2YgdHdvLXBoYXNlIGNvbW1pdHMuCiAgICAgICA8L3BhcmE+CisgICAgICA8 cGFyYT4KKyAgICAgICBWZXJzaW9uIDxsaXRlcmFsPjQ8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBv bmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNgorICAgICAgIGFuZCBhYm92ZSwgYW5kIGl0IGFsbG93 cyBzdHJlYW1zIG9mIGxhcmdlIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGJl IGFwcGxpZWQgaW4gcGFyYWxsZWwuCisgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTY4ODIsNiArNjg4NywyOCBAQCBwc3FsICJkYm5hbWU9 cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAg ICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDY0IChYTG9nUmVjUHRyKTwv dGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIExT TiBvZiB0aGUgYWJvcnQuIFRoaXMgZmllbGQgaXMgYXZhaWxhYmxlIHNpbmNlIHByb3RvY29sIHZl cnNpb24KKyAgICAgICAgIDQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgor ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRl cm0+SW50NjQgKFRpbWVzdGFtcFR6KTwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg IDxwYXJhPgorICAgICAgICAgQWJvcnQgdGltZXN0YW1wIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhl IHZhbHVlIGlzIGluIG51bWJlcgorICAgICAgICAgb2YgbWljcm9zZWNvbmRzIHNpbmNlIFBvc3Rn cmVTUUwgZXBvY2ggKDIwMDAtMDEtMDEpLiBUaGlzIGZpZWxkIGlzCisgICAgICAgICBhdmFpbGFi bGUgc2luY2UgcHJvdG9jb2wgdmVyc2lvbiA0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0Pgog ICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3Vic2NyaXB0aW9uLnNnbWwKaW5kZXggZjlhMTc3Ni4uZjE3M2EwOSAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKQEAgLTIyOCwxMyArMjI4LDI5IEBAIENS RUFURSBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlw dGlvbl9uYW1lPC9yZXBsYWNlYWJsCiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgICA8 dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ ICg8dHlwZT5ib29sZWFuPC90eXBlPik8L3Rlcm0+CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0 cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmVudW08L3R5cGU+KTwvdGVybT4KICAgICAgICAgPGxp c3RpdGVtPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgdG8g ZW5hYmxlIHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBm b3IgdGhpcyBzdWJzY3JpcHRpb24uICBCeSBkZWZhdWx0LCBhbGwgdHJhbnNhY3Rpb25zCi0gICAg ICAgICAgYXJlIGZ1bGx5IGRlY29kZWQgb24gdGhlIHB1Ymxpc2hlciBhbmQgb25seSB0aGVuIHNl bnQgdG8gdGhlCi0gICAgICAgICAgc3Vic2NyaWJlciBhcyBhIHdob2xlLgorICAgICAgICAgIGZv ciB0aGlzIHN1YnNjcmlwdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPm9mZjwv bGl0ZXJhbD4sCisgICAgICAgICAgbWVhbmluZyBhbGwgdHJhbnNhY3Rpb25zIGFyZSBmdWxseSBk ZWNvZGVkIG9uIHRoZSBwdWJsaXNoZXIgYW5kIG9ubHkKKyAgICAgICAgICB0aGVuIHNlbnQgdG8g dGhlIHN1YnNjcmliZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAg PHBhcmE+CisgICAgICAgICAgSWYgc2V0IHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgdGhlIGlu Y29taW5nIGNoYW5nZXMgYXJlIHdyaXR0ZW4gdG8KKyAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMg YW5kIHRoZW4gYXBwbGllZCBvbmx5IGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcworICAgICAgICAg IGNvbW1pdHRlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCByZWNlaXZlZCBieSB0aGUgc3Vic2NyaWJl ci4KKyAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgc2V0 IHRvIDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwgaW5jb21pbmcgY2hhbmdlcyBhcmUgZGly ZWN0bHkKKyAgICAgICAgICBhcHBsaWVkIHZpYSBvbmUgb2YgdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlcnMsIGlmIGF2YWlsYWJsZS4gSWYgbm8KKyAgICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgaXMgZnJlZSB0byBoYW5kbGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGVuCisgICAgICAg ICAgdGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBhcHBsaWVk IGFmdGVyIHRoZQorICAgICAgICAgIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4gTm90ZSB0aGF0 IGlmIGFuIGVycm9yIGhhcHBlbnMgaW4gYQorICAgICAgICAgIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciwgdGhlIGZpbmlzaCBMU04gb2YgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbgorICAgICAgICAgIG1p Z2h0IG5vdCBiZSByZXBvcnRlZCBpbiB0aGUgc2VydmVyIGxvZy4KICAgICAgICAgIDwvcGFyYT4K ICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hhY3QuYwppbmRleCA4ODNkNmMwLi5lNjM0NDk2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jCkBAIC0xNzEyLDYgKzE3MTIsNyBAQCBSZWNvcmRUcmFuc2FjdGlvbkFib3J0KGJv b2wgaXNTdWJYYWN0KQogCWludAkJCW5jaGlsZHJlbjsKIAlUcmFuc2FjdGlvbklkICpjaGlsZHJl bjsKIAlUaW1lc3RhbXBUeiB4YWN0X3RpbWU7CisJYm9vbAkJcmVwbG9yaWdpbjsKIAogCS8qCiAJ ICogSWYgd2UgaGF2ZW4ndCBiZWVuIGFzc2lnbmVkIGFuIFhJRCwgbm9ib2R5IHdpbGwgY2FyZSB3 aGV0aGVyIHdlIGFib3J0ZWQKQEAgLTE3NDIsNiArMTc0MywxMyBAQCBSZWNvcmRUcmFuc2FjdGlv bkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCQllbG9nKFBBTklDLCAiY2Fubm90IGFib3J0IHRyYW5z YWN0aW9uICV1LCBpdCB3YXMgYWxyZWFkeSBjb21taXR0ZWQiLAogCQkJIHhpZCk7CiAKKwkvKgor CSAqIEFyZSB3ZSB1c2luZyB0aGUgcmVwbGljYXRpb24gb3JpZ2lucyBmZWF0dXJlPyAgT3IsIGlu IG90aGVyIHdvcmRzLCBhcmUKKwkgKiB3ZSByZXBsYXlpbmcgcmVtb3RlIGFjdGlvbnM/CisJICov CisJcmVwbG9yaWdpbiA9IChyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IEludmFsaWRSZXBP cmlnaW5JZCAmJgorCQkJCSAgcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBEb05vdFJlcGxp Y2F0ZUlkKTsKKwogCS8qIEZldGNoIHRoZSBkYXRhIHdlIG5lZWQgZm9yIHRoZSBhYm9ydCByZWNv cmQgKi8KIAlucmVscyA9IHNtZ3JHZXRQZW5kaW5nRGVsZXRlcyhmYWxzZSwgJnJlbHMpOwogCW5j aGlsZHJlbiA9IHhhY3RHZXRDb21taXR0ZWRDaGlsZHJlbigmY2hpbGRyZW4pOwpAQCAtMTc2NSw2 ICsxNzczLDExIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJCQkJ CSAgIE15WGFjdEZsYWdzLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKIAkJCQkJICAgTlVMTCk7CiAK KwlpZiAocmVwbG9yaWdpbikKKwkJLyogTW92ZSBMU05zIGZvcndhcmQgZm9yIHRoaXMgcmVwbGlj YXRpb24gb3JpZ2luICovCisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKHJlcGxvcmlnaW5f c2Vzc2lvbl9vcmlnaW5fbHNuLAorCQkJCQkJCQkgICBYYWN0TGFzdFJlY0VuZCk7CisKIAkvKgog CSAqIFJlcG9ydCB0aGUgbGF0ZXN0IGFzeW5jIGFib3J0IExTTiwgc28gdGhhdCB0aGUgV0FMIHdy aXRlciBrbm93cyB0bwogCSAqIGZsdXNoIHRoaXMgYWJvcnQuIFRoZXJlJ3Mgbm90aGluZyB0byBi ZSBnYWluZWQgYnkgZGVsYXlpbmcgdGhpcywgc2luY2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RlZmluZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGVmaW5lLmMKaW5kZXgg MDkwZTVkMy4uM2RkYTE1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGVmaW5l LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGVmaW5lLmMKQEAgLTM2LDYgKzM2LDcgQEAK ICNpbmNsdWRlIDxtYXRoLmg+CiAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVm cmVtLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX3R5cGUuaCIKQEAgLTM3OSw2ICszODAsNjMgQEAgZGVmR2V0U3RyaW5nTGlzdChEZWZFbGVt ICpkZWYpCiB9CiAKIC8qCisgKiBFeHRyYWN0IHRoZSBzdHJlYW1pbmcgbW9kZSB2YWx1ZSBmcm9t IGEgRGVmRWxlbS4gIFRoaXMgaXMgbGlrZQorICogZGVmR2V0Qm9vbGVhbigpIGJ1dCBhbHNvIGFj Y2VwdHMgdGhlIHNwZWNpYWwgdmFsdWUgb2YgInBhcmFsbGVsIi4KKyAqLworY2hhcgorZGVmR2V0 U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpCit7CisJLyoKKwkgKiBJZiBubyBwYXJhbWV0ZXIg dmFsdWUgZ2l2ZW4sIGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQuCisJICovCisJaWYgKGRlZi0+YXJn ID09IE5VTEwpCisJCXJldHVybiBTVUJTVFJFQU1fT047CisKKwkvKgorCSAqIEFsbG93IDAsIDEs ICJmYWxzZSIsICJ0cnVlIiwgIm9mZiIsICJvbiIgb3IgInBhcmFsbGVsIi4KKwkgKi8KKwlzd2l0 Y2ggKG5vZGVUYWcoZGVmLT5hcmcpKQorCXsKKwkJY2FzZSBUX0ludGVnZXI6CisJCQlzd2l0Y2gg KGludFZhbChkZWYtPmFyZykpCisJCQl7CisJCQkJY2FzZSAwOgorCQkJCQlyZXR1cm4gU1VCU1RS RUFNX09GRjsKKwkJCQljYXNlIDE6CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJZGVm YXVsdDoKKwkJCQkJLyogb3RoZXJ3aXNlLCBlcnJvciBvdXQgYmVsb3cgKi8KKwkJCQkJYnJlYWs7 CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQljaGFyCSAgICpzdmFsID0g ZGVmR2V0U3RyaW5nKGRlZik7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBzZXQgb2Ygc3RyaW5ncyBh Y2NlcHRlZCBoZXJlIHNob3VsZCBtYXRjaCB1cCB3aXRoIHRoZQorCQkJCSAqIGdyYW1tYXIncyBv cHRfYm9vbGVhbl9vcl9zdHJpbmcgcHJvZHVjdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGdfc3Ry Y2FzZWNtcChzdmFsLCAiZmFsc2UiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3ZhbCwg Im9mZiIpID09IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fT0ZGOworCQkJCWlmIChwZ19zdHJj YXNlY21wKHN2YWwsICJ0cnVlIikgPT0gMCB8fAorCQkJCQlwZ19zdHJjYXNlY21wKHN2YWwsICJv biIpID09IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNhc2Vj bXAoc3ZhbCwgInBhcmFsbGVsIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9QQVJBTExF TDsKKwkJCX0KKwkJCWJyZWFrOworCX0KKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkgZXJybXNnKCIlcyByZXF1aXJlcyBhIEJvb2xlYW4g dmFsdWUgb3IgXCJwYXJhbGxlbFwiIiwKKwkJCQkJZGVmLT5kZWZuYW1lKSkpOworCXJldHVybiBT VUJTVFJFQU1fT0ZGOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQorCisvKgogICogUmFp c2UgYW4gZXJyb3IgYWJvdXQgYSBjb25mbGljdGluZyBEZWZFbGVtLgogICovCiB2b2lkCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggZjBjZWMyYS4uNWM1OGZlNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtODQsNyArODQsNyBA QCB0eXBlZGVmIHN0cnVjdCBTdWJPcHRzCiAJYm9vbAkJY29weV9kYXRhOwogCWJvb2wJCXJlZnJl c2g7CiAJYm9vbAkJYmluYXJ5OwotCWJvb2wJCXN0cmVhbWluZzsKKwljaGFyCQlzdHJlYW1pbmc7 CiAJYm9vbAkJdHdvcGhhc2U7CiAJYm9vbAkJZGlzYWJsZW9uZXJyOwogCWNoYXIJICAgKm9yaWdp bjsKQEAgLTEzOCw3ICsxMzgsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJzZVN0 YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAlpZiAoSXNTZXQoc3VwcG9ydGVkX29w dHMsIFNVQk9QVF9CSU5BUlkpKQogCQlvcHRzLT5iaW5hcnkgPSBmYWxzZTsKIAlpZiAoSXNTZXQo c3VwcG9ydGVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQotCQlvcHRzLT5zdHJlYW1pbmcgPSBm YWxzZTsKKwkJb3B0cy0+c3RyZWFtaW5nID0gU1VCU1RSRUFNX09GRjsKIAlpZiAoSXNTZXQoc3Vw cG9ydGVkX29wdHMsIFNVQk9QVF9UV09QSEFTRV9DT01NSVQpKQogCQlvcHRzLT50d29waGFzZSA9 IGZhbHNlOwogCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX0RJU0FCTEVfT05fRVJS KSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJzZVN0 YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAkJCQllcnJvckNvbmZsaWN0aW5nRGVm RWxlbShkZWZlbCwgcHN0YXRlKTsKIAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VCT1BU X1NUUkVBTUlORzsKLQkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOwor CQkJb3B0cy0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7CiAJCX0KIAkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkKIAkJewpA QCAtNjI5LDcgKzYyOSw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0 aW9uX3N1Ym93bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG93bmVyKTsKIAl2YWx1ZXNbQW51 bV9wZ19zdWJzY3JpcHRpb25fc3ViZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMuZW5h YmxlZCk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmJpbmFyeSAtIDFdID0gQm9v bEdldERhdHVtKG9wdHMuYmluYXJ5KTsKLQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vi c3RyZWFtIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCXZhbHVlc1tBbnVt X3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IENoYXJHZXREYXR1bShvcHRzLnN0cmVh bWluZyk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNlc3RhdGUgLSAx XSA9CiAJCUNoYXJHZXREYXR1bShvcHRzLnR3b3BoYXNlID8KIAkJCQkJIExPR0lDQUxSRVBfVFdP UEhBU0VfU1RBVEVfUEVORElORyA6CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBBbHRlclN1YnNjcmlw dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJ CQlpZiAoSXNTZXQob3B0cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCiAJCQkJ ewogCQkJCQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPQotCQkJ CQkJQm9vbEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwkJCQkJCUNoYXJHZXREYXR1bShvcHRz LnN0cmVhbWluZyk7CiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVh bSAtIDFdID0gdHJ1ZTsKIAkJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL3Bx bXEuYyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYwppbmRleCA0ZDA0MTVlLi42Mzk4NDVmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKKysrIGIvc3JjL2JhY2tlbmQvbGli cHEvcHFtcS5jCkBAIC0xMywxMSArMTMsMTMgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAK KyNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgog I2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFtcS5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIApAQCAtMTYyLDkgKzE2NCwxOSBAQCBtcV9wdXRtZXNz YWdlKGNoYXIgbXNndHlwZSwgY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKIAkJcmVzdWx0ID0g c2htX21xX3NlbmR2KHBxX21xX2hhbmRsZSwgaW92LCAyLCB0cnVlLCB0cnVlKTsKIAogCQlpZiAo cHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCAhPSAwKQotCQkJU2VuZFByb2NTaWduYWwocHFfbXFf cGFyYWxsZWxfbGVhZGVyX3BpZCwKLQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwK LQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJeworCQkJaWYg KElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIoKSkKKwkJCQlTZW5kUHJvY1NpZ25hbChwcV9t cV9wYXJhbGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQTFlf TUVTU0FHRSwKKwkJCQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJ CQllbHNlCisJCQl7CisJCQkJQXNzZXJ0KElzUGFyYWxsZWxXb3JrZXIoKSk7CisJCQkJU2VuZFBy b2NTaWduYWwocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCwKKwkJCQkJCQkgICBQUk9DU0lHX1BB UkFMTEVMX01FU1NBR0UsCisJCQkJCQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tlbmRf aWQpOworCQkJfQorCQl9CiAKIAkJaWYgKHJlc3VsdCAhPSBTSE1fTVFfV09VTERfQkxPQ0spCiAJ CQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCAwZDcyZGUyLi4yZGZhOWFi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0xMjgsNiArMTI4LDkgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdAogCX0sCiAJewogCQkiQXBwbHlXb3JrZXJNYWluIiwgQXBwbHlXb3JrZXJN YWluCisJfSwKKwl7CisJCSJQYXJhbGxlbEFwcGx5V29ya2VyTWFpbiIsIFBhcmFsbGVsQXBwbHlX b3JrZXJNYWluCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwppbmRleCA3ZjY5N2IwLi4y MjVkYTgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2Vp dmVyL2xpYnBxd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwpAQCAtNDQzLDkgKzQ0Myw5IEBAIGxpYnBx cmN2X3N0YXJ0c3RyZWFtaW5nKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJYXBwZW5kU3RyaW5n SW5mbygmY21kLCAicHJvdG9fdmVyc2lvbiAnJXUnIiwKIAkJCQkJCSBvcHRpb25zLT5wcm90by5s b2dpY2FsLnByb3RvX3ZlcnNpb24pOwogCi0JCWlmIChvcHRpb25zLT5wcm90by5sb2dpY2FsLnN0 cmVhbWluZyAmJgotCQkJUFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pID49IDE0MDAw MCkKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgc3RyZWFtaW5nICdvbiciKTsK KwkJaWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cikKKwkJCWFwcGVuZFN0 cmluZ0luZm8oJmNtZCwgIiwgc3RyZWFtaW5nICclcyciLAorCQkJCQkJCSBvcHRpb25zLT5wcm90 by5sb2dpY2FsLnN0cmVhbWluZ19zdHIpOwogCiAJCWlmIChvcHRpb25zLT5wcm90by5sb2dpY2Fs LnR3b3BoYXNlICYmCiAJCQlQUXNlcnZlclZlcnNpb24oY29ubi0+c3RyZWFtQ29ubikgPj0gMTUw MDAwKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZk ZS4uMmRjMjVlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBA IC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9i YWwKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMg PSBcCisJYXBwbHlwYXJhbGxlbHdvcmtlci5vIFwKIAlkZWNvZGUubyBcCiAJbGF1bmNoZXIubyBc CiAJbG9naWNhbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9hcHBseXBhcmFsbGVsd29ya2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uM2I2ZjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCkBAIC0wLDAgKzEsMTM0MiBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKiBhcHBseXBhcmFsbGVsd29ya2VyLmMKKyAqICAgICBTdXBwb3J0IHJvdXRp bmVzIGZvciBhcHBseWluZyB4YWN0IGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHJv dXRpbmVzIHRoYXQgYXJlIGludGVuZGVkIHRvIHN1cHBvcnQgc2V0dGluZyB1cCwgdXNpbmcsCisg KiBhbmQgdGVhcmluZyBkb3duIGEgUGFyYWxsZWxBcHBseVdvcmtlckluZm8uCisgKgorICogUmVm ZXIgdG8gdGhlIGNvbW1lbnRzIGluIHRoZSBmaWxlIGhlYWRlciBvZiBsb2dpY2FsL3dvcmtlci5j IHRvIHNlZSBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCBwYXJhbGxlbCBhcHBseSB3b3JrZXJz LgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKKyNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCisj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJw b3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVu Y2hlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUg InN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAi dXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0 aWxzL3Jlc293bmVyLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworI2RlZmluZSBQ R19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQyAweDc4N2NhMDY3CisKKy8qCisgKiBEU00ga2V5cyBm b3IgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAgVW5saWtlIG90aGVyIHBhcmFsbGVsIGV4ZWN1dGlv biBjb2RlLAorICogc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBEU00ga2V5cyBj b25mbGljdGluZyB3aXRoIHBsYW5fbm9kZV9pZCB3ZQorICogY2FuIHVzZSBzbWFsbCBpbnRlZ2Vy cy4KKyAqLworI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVECQkxCisjZGVmaW5lIFBB UkFMTEVMX0FQUExZX0tFWV9NUQkJCTIKKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9S X1FVRVVFCTMKKworLyogUXVldWUgc2l6ZSBvZiBEU00sIDE2IE1CIGZvciBub3cuICovCisjZGVm aW5lIERTTV9RVUVVRV9TSVpFCSgxNiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogRXJyb3IgcXVl dWUgc2l6ZSBvZiBEU00uIEl0IGlzIGRlc2lyYWJsZSB0byBtYWtlIGl0IGxhcmdlIGVub3VnaCB0 aGF0IGEKKyAqIHR5cGljYWwgRXJyb3JSZXNwb25zZSBjYW4gYmUgc2VudCB3aXRob3V0IGJsb2Nr aW5nLiAgVGhhdCB3YXksIGEgd29ya2VyIHRoYXQKKyAqIGVycm9ycyBvdXQgY2FuIHdyaXRlIHRo ZSB3aG9sZSBtZXNzYWdlIGludG8gdGhlIHF1ZXVlIGFuZCB0ZXJtaW5hdGUgd2l0aG91dAorICog d2FpdGluZyBmb3IgdGhlIHVzZXIgYmFja2VuZC4KKyAqLworI2RlZmluZSBEU01fRVJST1JfUVVF VUVfU0laRQkJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBUaGVyZSBhcmUgdGhyZWUgZmllbGRzIGlu IGVhY2ggbWVzc2FnZSByZWNlaXZlZCBieSB0aGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlcjog c3RhcnRfbHNuLCBlbmRfbHNuIGFuZCBzZW5kX3RpbWUuIEJlY2F1c2Ugd2UgaGF2ZSB1cGRhdGVk IHRoZXNlCisgKiBzdGF0aXN0aWNzIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLCB3ZSBjYW4g aWdub3JlIHRoZXNlIGZpZWxkcyBpbiB0aGUKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciAoc2Vl IGZ1bmN0aW9uIExvZ2ljYWxSZXBBcHBseUxvb3ApLgorICovCisjZGVmaW5lIFNJWkVfU1RBVFNf TUVTU0FHRSAoMiAqIHNpemVvZihYTG9nUmVjUHRyKSArIHNpemVvZihUaW1lc3RhbXBUeikpCisK Ky8qCisgKiBIYXNoIHRhYmxlIGVudHJ5IHRvIG1hcCB4aWQgdG8gdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBzdGF0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlckVu dHJ5Cit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CQkJLyogSGFzaCBrZXkgLS0gbXVzdCBiZSBmaXJz dCAqLworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKK30gUGFyYWxsZWxBcHBseVdv cmtlckVudHJ5OworCisvKiBQYXJhbGxlbCBhcHBseSB3b3JrZXJzIGhhc2ggdGFibGUgKGluaXRp YWxpemVkIG9uIGZpcnN0IHVzZSkuICovCitzdGF0aWMgSFRBQiAqUGFyYWxsZWxBcHBseVdvcmtl cnNIYXNoID0gTlVMTDsKKworLyoKKyAqIEEgbGlzdCB0byBtYWludGFpbiB0aGUgYWN0aXZlIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMuIFRoZSBpbmZvcm1hdGlvbiBmb3IKKyAqIHRoZSBuZXcgd29y a2VyIGlzIGFkZGVkIHRvIHRoZSBsaXN0IGFmdGVyIHN1Y2Nlc3NmdWxseSBsYXVuY2hpbmcgaXQu IFRoZQorICogbGlzdCBlbnRyeSBpcyByZW1vdmVkIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0 aW9uIGlmIHRoZXJlIGFyZSBhbHJlYWR5CisgKiBlbm91Z2ggd29ya2VycyBpbiB0aGUgd29ya2Vy IHBvb2wuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIKKyAqIHBvb2wsIHNl ZSBjb21tZW50cyBhdG9wIHdvcmtlci5jLiBXZSBhbHNvIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0 aGUgbGlzdCBpZgorICogdGhlIHdvcmtlciBpcyBleGl0ZWQgZHVlIHRvIHNvbWUgZXJyb3IuCisg Ki8KK3N0YXRpYyBMaXN0ICpQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QgPSBOSUw7CisKK3N0YXRp YyBMaXN0ICpQYXJhbGxlbEFwcGx5TG9ja2lkcyA9IE5JTDsKKworLyoKKyAqIEluZm9ybWF0aW9u IHNoYXJlZCBiZXR3ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKyAqLworUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJlZCA9 IE5VTEw7CisKKy8qCisgKiBJcyB0aGVyZSBhIG1lc3NhZ2Ugc2VudCBieSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgd2hpY2ggd2UgbmVlZCB0byByZWNlaXZlPworICovCit2b2xhdGlsZSBzaWdfYXRv bWljX3QgUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7CisKKy8qCisgKiBDYWNo ZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhcHBs eWluZyB0aGUKKyAqIGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBJdCBpcyB1c2VkIHRv IHNhdmUgdGhlIGNvc3Qgb2Ygc2VhcmNoaW5nIHRoZQorICogaGFzaCB0YWJsZSB3aGVuIGFwcGx5 aW5nIHRoZSBjaGFuZ2VzIGJldHdlZW4gU1RSRUFNX1NUQVJUIGFuZCBTVFJFQU1fU1RPUC4KKyAq LworUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOwor CisvKiBBIGxpc3QgdG8gbWFpbnRhaW4gc3VidHJhbnNhY3Rpb25zLCBpZiBhbnkuICovCitMaXN0 CSAgICpzdWJ4YWN0bGlzdCA9IE5JTDsKKworc3RhdGljIGJvb2wgcGFyYWxsZWxfYXBwbHlfY2Fu X3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkKTsKK3N0YXRpYyBib29sIHBhcmFsbGVsX2FwcGx5X3Nl dHVwX2RzbShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pOworc3RhdGljIFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvICpwYXJhbGxlbF9hcHBseV9zZXR1cF93b3JrZXIodm9pZCk7CitzdGF0 aWMgUGFyYWxsZWxUcmFuc1N0YXRlIHBhcmFsbGVsX2FwcGx5X2dldF94YWN0X3N0YXRlKFBhcmFs bGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpOworc3RhdGljIHZvaWQgcGFyYWxsZWxfYXBw bHlfZnJlZV93b3JrZXJfaW5mbyhQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pOworc3Rh dGljIHZvaWQgcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfaW5feGFjdChQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICp3c2hhcmVkLAorCQkJCQkJCQkJCQlQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9z dGF0ZSk7CisvKgorICogUmV0dXJucyB0cnVlIGlmIGl0IGlzIE9LIHRvIHN0YXJ0IGEgcGFyYWxs ZWwgYXBwbHkgd29ya2VyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sCitwYXJh bGxlbF9hcHBseV9jYW5fc3RhcnQoVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJaWYgKCFUcmFuc2Fj dGlvbklkSXNWYWxpZCh4aWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIERvbid0IHN0 YXJ0IGEgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpZiB0aGUgc3Vic2NyaXB0aW9uIGlzIG5v dCB1c2luZworCSAqIHBhcmFsbGVsIHN0cmVhbWluZyBtb2RlLCBvciBpZiB0aGUgcHVibGlzaGVy IGRvZXMgbm90IHN1cHBvcnQgcGFyYWxsZWwKKwkgKiBhcHBseS4KKwkgKi8KKwlpZiAoIU15TG9n aWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIE9u bHkgbGVhZGVyIGFwcGx5IHdvcmtlcnMgY2FuIHN0YXJ0IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMu ICovCisJaWYgKCFhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybiBmYWxzZTsKKwor CS8qCisJICogRG9uJ3Qgc3RhcnQgYSBuZXcgcGFyYWxsZWwgd29ya2VyIGlmIHVzZXIgaGFzIHNl dCBza2lwbHNuIGFzIGl0J3MKKwkgKiBwb3NzaWJsZSB0aGF0IHVzZXIgd2FudCB0byBza2lwIHRo ZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEZvcgorCSAqIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwg d2UgbmVlZCB0byBzcGlsbCB0aGUgdHJhbnNhY3Rpb24gdG8gZGlzayBzbyB0aGF0CisJICogd2Ug Y2FuIGdldCB0aGUgbGFzdCBMU04gb2YgdGhlIHRyYW5zYWN0aW9uIHRvIGp1ZGdlIHdoZXRoZXIg dG8gc2tpcAorCSAqIGJlZm9yZSBzdGFydGluZyB0byBhcHBseSB0aGUgY2hhbmdlLgorCSAqLwor CWlmICghWExvZ1JlY1B0cklzSW52YWxpZChNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbikpCisJCXJl dHVybiBmYWxzZTsKKworCS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhhdCBh cmUgYmVpbmcgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsCisJICogYXBwbHkgd29ya2VyLCB3ZSBj YW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYQorCSAqIHJlbGF0 aW9uIHRoYXQgaXMgbm90IGluIHRoZSBSRUFEWSBzdGF0ZSAoc2VlCisJICogc2hvdWxkX2FwcGx5 X2NoYW5nZXNfZm9yX3JlbCkgYXMgd2Ugd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNuIGJ5IHRo YXQKKwkgKiB0aW1lLiBTbywgd2UgZG9uJ3Qgc3RhcnQgdGhlIG5ldyBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghQWxsVGFibGVzeW5jc1JlYWR5KCkpCisJ CXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU3RhcnQgYSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgeGlk LgorICoKKyAqIElmIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZvdW5kIGJ1dCBub3QgaW4g dXNlIHRoZW4gcmUtdXNlIGl0LCBvdGhlcndpc2UKKyAqIHN0YXJ0IGEgZnJlc2ggb25lLiBDYWNo ZSB0aGUgd29ya2VyIGluZm9ybWF0aW9uIGluIFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaAorICog a2V5ZWQgYnkgdGhlIHNwZWNpZmllZCB4aWQuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3N0 YXJ0X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlib29sCQlmb3VuZDsKKwlMaXN0Q2Vs bCAgICpsYzsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSBOVUxMOworCVBhcmFs bGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisKKwlpZiAoIXBhcmFsbGVsX2FwcGx5X2Nhbl9z dGFydCh4aWQpKQorCQlyZXR1cm47CisKKwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxp emUgYXBwbHkgd29ya2VycyBoYXNodGFibGUuICovCisJaWYgKFBhcmFsbGVsQXBwbHlXb3JrZXJz SGFzaCA9PSBOVUxMKQorCXsKKwkJSEFTSENUTAkJY3RsOworCisJCU1lbVNldCgmY3RsLCAwLCBz aXplb2YoY3RsKSk7CisJCWN0bC5rZXlzaXplID0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworCQlj dGwuZW50cnlzaXplID0gc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSk7CisJCWN0bC5o Y3h0ID0gQXBwbHlDb250ZXh0OworCisJCVBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9IGhhc2hf Y3JlYXRlKCJsb2dpY2FsIGFwcGx5IHdvcmtlcnMgaGFzaCIsCisJCQkJCQkJCQkJCSAgIDE2LCAm Y3RsLAorCQkJCQkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9DT05URVhU KTsKKwl9CisKKwkvKiBUcnkgdG8gZ2V0IGEgZnJlZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICov CisJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0KQorCXsKKwkJUGFyYWxsZWxU cmFuc1N0YXRlIHhhY3Rfc3RhdGU7CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp0bXBfd2lu Zm87CisKKwkJdG1wX3dpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChs Yyk7CisKKwkJaWYgKCF0bXBfd2luZm8tPmluX3VzZSkKKwkJeworCQkJd2luZm8gPSB0bXBfd2lu Zm87CisJCQlicmVhazsKKwkJfQorCisJCS8qIENoZWNrIGlmIHRoZSB0cmFuc2FjdGlvbiBpbiB0 aGF0IHdvcmtlciBoYXMgYmVlbiBmaW5pc2hlZC4gKi8KKwkJeGFjdF9zdGF0ZSA9IHBhcmFsbGVs X2FwcGx5X2dldF94YWN0X3N0YXRlKHRtcF93aW5mby0+c2hhcmVkKTsKKwkJaWYgKHhhY3Rfc3Rh dGUgPT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpCisJCXsKKwkJCXBhcmFsbGVsX2FwcGx5X2Zy ZWVfd29ya2VyKHRtcF93aW5mbywgeGlkLCBmYWxzZSk7CisKKwkJCXRtcF93aW5mby0+aW5fdXNl ID0gZmFsc2U7CisJCQl3aW5mbyA9IHRtcF93aW5mbzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ aWYgKHdpbmZvID09IE5VTEwpCisJeworCQkvKiBUcnkgdG8gc3RhcnQgYSBuZXcgcGFyYWxsZWwg YXBwbHkgd29ya2VyLiAqLworCQl3aW5mbyA9IHBhcmFsbGVsX2FwcGx5X3NldHVwX3dvcmtlcigp OworCisJCWlmICh3aW5mbyA9PSBOVUxMKQorCQkJcmV0dXJuOworCX0KKworCS8qIENyZWF0ZSBl bnRyeSBmb3IgcmVxdWVzdGVkIHRyYW5zYWN0aW9uLiAqLworCWVudHJ5ID0gaGFzaF9zZWFyY2go UGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX0VOVEVSLCAmZm91bmQpOworCWlm IChmb3VuZCkKKwkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisKKwkvKiBJ bml0aWFsaXplIHNoYXJlZCBtZW1vcnkgYXJlYS4gKi8KKwlTcGluTG9ja0FjcXVpcmUoJndpbmZv LT5zaGFyZWQtPm11dGV4KTsKKwl3aW5mby0+c2hhcmVkLT54YWN0X3N0YXRlID0gUEFSQUxMRUxf VFJBTlNfVU5LTk9XTjsKKwl3aW5mby0+c2hhcmVkLT54aWQgPSB4aWQ7CisJd2luZm8tPnNoYXJl ZC0+ZmlsZXNldF92YWxpZCA9IGZhbHNlOworCXdpbmZvLT5zaGFyZWQtPnBhcnRpYWxfc2VudF9t ZXNzYWdlID0gZmFsc2U7CisJU3BpbkxvY2tSZWxlYXNlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7 CisKKwl3aW5mby0+aW5fdXNlID0gdHJ1ZTsKKwl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSBm YWxzZTsKKwllbnRyeS0+d2luZm8gPSB3aW5mbzsKKwllbnRyeS0+eGlkID0geGlkOworfQorCisv KgorICogRmluZCB0aGUgYXNzaWduZWQgd29ya2VyIGZvciB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24s IGlmIGFueS4KKyAqLworUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKgorcGFyYWxsZWxfYXBwbHlf ZmluZF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJYm9vbAkJZm91bmQ7CisJUGFyYWxs ZWxBcHBseVdvcmtlckVudHJ5ICplbnRyeTsKKworCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQo eGlkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoID09 IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogUmV0dXJuIHRoZSBjYWNoZWQgcGFyYWxsZWwg YXBwbHkgd29ya2VyIGlmIHZhbGlkLiAqLworCWlmIChzdHJlYW1fYXBwbHlfd29ya2VyICE9IE5V TEwpCisJCXJldHVybiBzdHJlYW1fYXBwbHlfd29ya2VyOworCisJLyoKKwkgKiBGaW5kIGVudHJ5 IGZvciByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24uCisJICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQ YXJhbGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4aWQsIEhBU0hfRklORCwgJmZvdW5kKTsKKwlpZiAo Zm91bmQpCisJeworCQlBc3NlcnQoZW50cnktPndpbmZvLT5pbl91c2UpOworCisJCXJldHVybiBl bnRyeS0+d2luZm87CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLiBTdG9wIHRo ZSB3b3JrZXIKKyAqIGlmIHN0b3Bfd29ya2VyIGlzIHRydWUgYW5kIHRoZXJlIGFyZSBlbm91Z2gg d29ya2VycyBpbiB0aGUgcG9vbC4gSWYKKyAqIHN0b3Bfd29ya2VyIGlzIGZhbHNlLCBzZW5kIGFs bCBwZW5kaW5nIG1lc3NhZ2VzIHRvIGNsZWFudXAgdGhlIG1lbW9yeSBxdWV1ZS4KKyAqCisgKiBG b3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29ya2VyIHBvb2wsIHNlZSBjb21tZW50cyBh dG9wIHdvcmtlci5jLgorICovCit2b2lkCitwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtlcihQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJICAg Ym9vbCBzdG9wX3dvcmtlcikKK3sKKwlpbnQJCQluYXBwbHl3b3JrZXJzOworCisJQXNzZXJ0KCFh bV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSk7CisKKwkvKgorCSAqIERvbid0IGZyZWUgdGhlIHdv cmtlciBpZiB0aGUgdHJhbnNhY3Rpb24gaW4gdGhlIHdvcmtlciBpcyBzdGlsbCBpbgorCSAqIHBy b2dyZXNzLiBUaGlzIGNvdWxkIGhhcHBlbiBhcyB3ZSBkb24ndCB3YWl0IGZvciB0cmFuc2FjdGlv biByb2xsYmFjayB0bworCSAqIGZpbmlzaC4KKwkgKi8KKwlpZiAocGFyYWxsZWxfYXBwbHlfZ2V0 X3hhY3Rfc3RhdGUod2luZm8tPnNoYXJlZCkgPCBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCkKKwkJ cmV0dXJuOworCisJaWYgKCFoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4 aWQsIEhBU0hfUkVNT1ZFLCBOVUxMKSkKKwkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVw dGVkIik7CisKKwlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQp OworCW5hcHBseXdvcmtlcnMgPSBsb2dpY2FscmVwX3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3Vu dChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKTsKKwlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBX b3JrZXJMb2NrKTsKKworCXdpbmZvLT5pbl91c2UgPSBmYWxzZTsKKwl3aW5mby0+c2VyaWFsaXpl X2NoYW5nZXMgPSBmYWxzZTsKKworCS8qIEFyZSB0aGVyZSBlbm91Z2ggd29ya2VycyBpbiB0aGUg cG9vbD8gKi8KKwlpZiAoc3RvcF93b3JrZXIgJiYKKwkJbmFwcGx5d29ya2VycyA+IChtYXhfcGFy YWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIC8gMikpCisJeworCQlpbnQJCXNs b3Rfbm87CisJCXVpbnQxNglnZW5lcmF0aW9uOworCisJCS8qCisJCSAqIERldGFjaCB0aGUgZXJy b3IgcXVldWUgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKwkJ ICogdG8gcHJldmVudCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBmcm9tIHJlY2VpdmluZyB0aGUg d29ya2VyCisJCSAqIHRlcm1pbmF0aW9uIG1lc3NhZ2Ugd2hpY2ggd2lsbCBjYXVzZSB0aGUgbGVh ZGVyIHRvIGV4aXQuCisJCSAqLworCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5lcnJvcl9tcV9oYW5k bGUpOworCQl3aW5mby0+ZXJyb3JfbXFfaGFuZGxlID0gTlVMTDsKKworCQlTcGluTG9ja0FjcXVp cmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJc2xvdF9ubyA9IHdpbmZvLT5zaGFyZWQtPmxv Z2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm87CisJCWdlbmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5s b2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOworCQlTcGluTG9ja1JlbGVhc2UoJndpbmZvLT5z aGFyZWQtPm11dGV4KTsKKworCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Nsb3Qoc2xvdF9u bywgZ2VuZXJhdGlvbik7CisKKwkJUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0ID0gbGlzdF9kZWxl dGVfcHRyKFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCwKKwkJCQkJCQkJCQkJCSAgIHdpbmZvKTsK KworCQlwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtlcl9pbmZvKHdpbmZvKTsKKwl9CisJZWxzZSBp ZiAod2luZm8tPnBlbmRpbmdfbXNnKQorCXsKKwkJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisKKwkJ d2luZm8tPnNoYXJlZC0+cGFydGlhbF9zZW50X21lc3NhZ2UgPSB0cnVlOworCisJCS8qCisJCSAq IFJlc2VuZCB0aGUgcGVuZGluZyBtZXNzYWdlIHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0byBj bGVhbnVwIHRoZQorCQkgKiBxdWV1ZS4gTm90ZSB0aGF0IHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3 aWxsIGp1c3QgaWdub3JlIHRoaXMgbWVzc2FnZQorCQkgKiBhcyBpdCBoYXMgYWxyZWFkeSBoYW5k bGVkIHRoaXMgbWVzc2FnZSB3aGlsZSBhcHBseWluZyBzcG9vbGVkCisJCSAqIG1lc3NhZ2VzLgor CQkgKi8KKwkJcmVzdWx0ID0gc2htX21xX3NlbmQod2luZm8tPm1xX2hhbmRsZSwgd2luZm8tPnBl bmRpbmdfbGVuZ3RoLAorCQkJCQkJCSB3aW5mby0+cGVuZGluZ19tc2csIGZhbHNlLCB0cnVlKTsK KworCQlpZiAocmVzdWx0ICE9IFNITV9NUV9TVUNDRVNTKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZW5kIGRhdGEgdG8gc2hhcmVkLW1lbW9yeSBxdWV1ZSIp KSk7CisKKwkJcGZyZWUod2luZm8tPnBlbmRpbmdfbXNnKTsKKwkJd2luZm8tPnBlbmRpbmdfbXNn ID0gTlVMTDsKKwkJd2luZm8tPnBlbmRpbmdfbGVuZ3RoID0gMDsKKwl9Cit9CisKKy8qIEZyZWUg dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpbmZvcm1hdGlvbi4gKi8KK3N0YXRpYyB2b2lkCitw YXJhbGxlbF9hcHBseV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3 aW5mbykKK3sKKwlBc3NlcnQod2luZm8pOworCisJaWYgKHdpbmZvLT5tcV9oYW5kbGUgIT0gTlVM TCkKKwkJc2htX21xX2RldGFjaCh3aW5mby0+bXFfaGFuZGxlKTsKKworCWlmICh3aW5mby0+ZXJy b3JfbXFfaGFuZGxlICE9IE5VTEwpCisJCXNobV9tcV9kZXRhY2god2luZm8tPmVycm9yX21xX2hh bmRsZSk7CisKKwlpZiAod2luZm8tPmRzbV9zZWcgIT0gTlVMTCkKKwkJZHNtX2RldGFjaCh3aW5m by0+ZHNtX3NlZyk7CisKKwlpZiAod2luZm8tPnBlbmRpbmdfbXNnKQorCXsKKwkJcGZyZWUod2lu Zm8tPnBlbmRpbmdfbXNnKTsKKwkJd2luZm8tPnBlbmRpbmdfbXNnID0gTlVMTDsKKwl9CisKKwlw ZnJlZSh3aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJhbGxlbF9hcHBseV9zcG9vbGVkX21l c3NhZ2VzKHZvaWQpCit7CisJYm9vbAkJZmlsZXNldF92YWxpZDsKKworCS8qCisJICogQ2hlY2sg aWYgY2hhbmdlcyBoYXMgYmVlbiBzZXJpYWxpemVkIHRvIGRpc2suIGlmIHNvLCByZWFkIGFuZAor CSAqIGFwcGx5IHRoZW0uCisJICovCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU2hhcmVk LT5tdXRleCk7CisJZmlsZXNldF92YWxpZCA9IE15UGFyYWxsZWxTaGFyZWQtPmZpbGVzZXRfdmFs aWQ7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisKKwlpZiAo ZmlsZXNldF92YWxpZCkKKwl7CisJCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CisK KwkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcygmTXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldCwKKwkJ CQkJCQkgICBNeVBhcmFsbGVsU2hhcmVkLT54aWQsCisJCQkJCQkJICAgSW52YWxpZFhMb2dSZWNQ dHIpOworCQlwYXJhbGxlbF9hcHBseV9zZXRfZmlsZXNldChNeVBhcmFsbGVsU2hhcmVkLCBmYWxz ZSk7CisJfQorfQorCisvKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgbWFpbiBsb29wLiAqLworc3Rh dGljIHZvaWQKK0xvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChzaG1fbXFfaGFuZGxlICptcWgpCit7 CisJc2htX21xX3Jlc3VsdCBzaG1xX3JlczsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxs YmFjazsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJ LyoKKwkgKiBJbml0IHRoZSBBcHBseU1lc3NhZ2VDb250ZXh0IHdoaWNoIHdlIGNsZWFuIHVwIGFm dGVyIGVhY2ggcmVwbGljYXRpb24KKwkgKiBwcm90b2NvbCBtZXNzYWdlLgorCSAqLworCUFwcGx5 TWVzc2FnZUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQXBwbHlDb250ZXh0LAorCQkJ CQkJCQkJCQkJIkFwcGx5TWVzc2FnZUNvbnRleHQiLAorCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisKKwkvKgorCSAqIFB1c2ggYXBwbHkgZXJyb3IgY29udGV4dCBjYWxsYmFj ay4gRmllbGRzIHdpbGwgYmUgZmlsbGVkIHdoaWxlIGFwcGx5aW5nCisJICogYSBjaGFuZ2UuCisJ ICovCisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9jYWxsYmFjazsKKwllcnJj YWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9z dGFjayA9ICZlcnJjYWxsYmFjazsKKworCWZvciAoOzspCisJeworCQl2b2lkCSAgICpkYXRhOwor CQlTaXplCQlsZW47CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBFbnN1cmUg d2UgYXJlIHJlYWRpbmcgdGhlIGRhdGEgaW50byBvdXIgbWVtb3J5IGNvbnRleHQuICovCisJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0KTsKKworCQlzaG1xX3JlcyA9 IHNobV9tcV9yZWNlaXZlKG1xaCwgJmxlbiwgJmRhdGEsIHRydWUpOworCisJCWlmIChzaG1xX3Jl cyA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgczsKKwkJCWludAkJ CWM7CisKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIElnbm9y ZSBwYXJ0aWFsbHkgc2VudCBtZXNzYWdlLCBpZiBhbnkuIE5vIG5lZWQgdG8gbG9jayBoZXJlIGFz CisJCQkgKiBvbmx5IHRoZSBsZWFkZXIgc2hvdWxkIHNldCB0aGlzIGZsYWcgYmVmb3JlIHNlbmRp bmcgYW55IG1lc3NhZ2UuCisJCQkgKi8KKwkJCWlmIChNeVBhcmFsbGVsU2hhcmVkLT5wYXJ0aWFs X3NlbnRfbWVzc2FnZSkKKwkJCQljb250aW51ZTsKKworCQkJcy5jdXJzb3IgPSAwOworCQkJcy5t YXhsZW4gPSAtMTsKKwkJCXMuZGF0YSA9IChjaGFyICopIGRhdGE7CisJCQlzLmxlbiA9IGxlbjsK KworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBieXRlIG9mIG1lc3NhZ2VzIHNlbnQgZnJvbSBsZWFk ZXIgYXBwbHkgd29ya2VyIHRvCisJCQkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGNhbiBvbmx5 IGJlICd3Jy4KKwkJCSAqLworCQkJYyA9IHBxX2dldG1zZ2J5dGUoJnMpOworCQkJaWYgKGMgIT0g J3cnKQorCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG1lc3NhZ2UgXCIlY1wiIiwgYyk7CisK KwkJCS8qCisJCQkgKiBJZ25vcmUgc3RhdGlzdGljcyBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gdXBk YXRlZCBieSB0aGUgbGVhZGVyCisJCQkgKiBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJCXMuY3Vy c29yICs9IFNJWkVfU1RBVFNfTUVTU0FHRTsKKworCQkJYXBwbHlfZGlzcGF0Y2goJnMpOworCisJ CQlNZW1vcnlDb250ZXh0UmVzZXQoQXBwbHlNZXNzYWdlQ29udGV4dCk7CisJCX0KKwkJZWxzZSBp ZiAoc2htcV9yZXMgPT0gU0hNX01RX1dPVUxEX0JMT0NLKQorCQl7CisJCQlpbnQJCQlyYzsKKwor CQkJcGFyYWxsZWxfYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcygpOworCisJCQlpZiAoIWluX3N0cmVh bWVkX3RyYW5zYWN0aW9uKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgd2UgZGlkbid0IGdldCBh bnkgdHJhbnNhY3Rpb25zIGZvciBhIHdoaWxlIHRoZXJlIG1pZ2h0IGJlCisJCQkJICogdW5jb25z dW1lZCBpbnZhbGlkYXRpb24gbWVzc2FnZXMgaW4gdGhlIHF1ZXVlLCBjb25zdW1lIHRoZW0KKwkJ CQkgKiBub3cuCisJCQkJICovCisJCQkJQWNjZXB0SW52YWxpZGF0aW9uTWVzc2FnZXMoKTsKKwkJ CQltYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKCk7CisJCQl9CisKKwkJCU1lbW9yeUNvbnRleHRS ZXNldChBcHBseU1lc3NhZ2VDb250ZXh0KTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworCisJCQkvKiBXYWl0IGZvciBtb3JlIHdvcmsuICovCisJCQlyYyA9IFdhaXRMYXRjaChN eUxhdGNoLAorCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05f UE1fREVBVEgsCisJCQkJCQkgICAxMDAwTCwKKwkJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9Q QVJBTExFTF9BUFBMWV9NQUlOKTsKKworCQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJewor CQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJ CX0KKworCQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJCQl7CisJCQkJQ29uZmlnUmVsb2Fk UGVuZGluZyA9IGZhbHNlOworCQkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCQkJ fQorCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KHNobXFfcmVzID09IFNITV9NUV9ERVRBQ0hF RCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05P VF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJsb3N0IGNvbm5lY3Rpb24g dG8gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIiKSkpOworCQl9CisJfQorCisJLyogUG9wIHRoZSBl cnJvciBjb250ZXh0IHN0YWNrLiAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFj ay5wcmV2aW91czsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgor ICogTWFrZSBzdXJlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRyaWVzIHRvIHJlYWQgZnJvbSBv dXIgZXJyb3IgcXVldWUgb25lIG1vcmUKKyAqIHRpbWUuIFRoaXMgZ3VhcmRzIGFnYWluc3QgdGhl IGNhc2Ugd2hlcmUgd2UgZXhpdCB1bmNsZWFubHkgd2l0aG91dCBzZW5kaW5nCisgKiBhbiBFcnJv clJlc3BvbnNlLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHNvbWUgY29kZSBjYWxscyBwcm9jX2V4aXQg ZGlyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkCitwYXJhbGxlbF9hcHBseV9zaHV0ZG93bihpbnQg Y29kZSwgRGF0dW0gYXJnKQoreworCVNlbmRQcm9jU2lnbmFsKE15TG9naWNhbFJlcFdvcmtlci0+ YXBwbHlfbGVhZGVyX3BpZCwKKwkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0Us CisJCQkJICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlkc21fZGV0YWNoKChkc21fc2VnbWVudCAq KSBEYXR1bUdldFBvaW50ZXIoYXJnKSk7Cit9CisKKy8qCisgKiBQYXJhbGxlbCBhcHBseSB3b3Jr ZXIgZW50cnkgcG9pbnQuCisgKi8KK3ZvaWQKK1BhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVt IG1haW5fYXJnKQoreworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKKwlkc21f aGFuZGxlCWhhbmRsZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlz aG1fbXEJICAgKm1xOworCXNobV9tcV9oYW5kbGUgKm1xaDsKKwlzaG1fbXFfaGFuZGxlICplcnJv cl9tcWg7CisJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CisJaW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1 bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKKwor CS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZy4gKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhh bmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dy b3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0aGUgZHlu YW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZm9yIHRoZSBwYXJhbGxlbCBhcHBseSwgYW5kCisJ ICogZmluZCBpdHMgdGFibGUgb2YgY29udGVudHMuCisJICoKKwkgKiBMaWtlIHBhcmFsbGVsIHF1 ZXJ5LCB3ZSBkb24ndCBuZWVkIHJlc291cmNlIG93bmVyIGJ5IHRoaXMgdGltZS4gU2VlCisJICog UGFyYWxsZWxXb3JrZXJNYWluLgorCSAqLworCW1lbWNweSgmaGFuZGxlLCBNeUJnd29ya2VyRW50 cnktPmJnd19leHRyYSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsKKwlzZWcgPSBkc21fYXR0YWNoKGhh bmRsZSk7CisJaWYgKHNlZyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co InVuYWJsZSB0byBtYXAgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCisJdG9j ID0gc2htX3RvY19hdHRhY2goUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRzbV9zZWdtZW50 X2FkZHJlc3Moc2VnKSk7CisJaWYgKHRvYyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CSBlcnJtc2coImJhZCBtYWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21l bnQiKSkpOworCisJYmVmb3JlX3NobWVtX2V4aXQocGFyYWxsZWxfYXBwbHlfc2h1dGRvd24sIFBv aW50ZXJHZXREYXR1bShzZWcpKTsKKworCS8qIExvb2sgdXAgdGhlIHNoYXJlZCBpbmZvcm1hdGlv bi4gKi8KKwlzaGFyZWQgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9T SEFSRUQsIGZhbHNlKTsKKwlNeVBhcmFsbGVsU2hhcmVkID0gc2hhcmVkOworCisJLyoKKwkgKiBB dHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICovCisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9NUSwgZmFsc2UpOworCXNobV9tcV9zZXRfcmVjZWl2ZXIo bXEsIE15UHJvYyk7CisJbXFoID0gc2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCS8q CisJICogUHJpbWFyeSBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4gTm93LCB3ZSBjYW4gYXR0 YWNoIHRvIG91ciBzbG90LgorCSAqIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGxlYWRlciBh cHBseSB3b3JrZXIgZG9lcyBub3Qgd3JpdGUgZGF0YSB0bworCSAqIHRoZSB1bmluaXRpYWxpemVk IG1lbW9yeSBxdWV1ZS4KKwkgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Ns b3QpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisJTXlQ YXJhbGxlbFNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfZ2VuZXJhdGlvbiA9IE15TG9naWNhbFJl cFdvcmtlci0+Z2VuZXJhdGlvbjsKKwlNeVBhcmFsbGVsU2hhcmVkLT5sb2dpY2FscmVwX3dvcmtl cl9zbG90X25vID0gd29ya2VyX3Nsb3Q7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU2hh cmVkLT5tdXRleCk7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0aGUgZXJyb3IgcXVldWUuCisJICov CisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVV RSwgZmFsc2UpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVByb2MpOworCWVycm9yX21xaCA9 IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwlwcV9yZWRpcmVjdF90b19zaG1fbXEo c2VnLCBlcnJvcl9tcWgpOworCXBxX3NldF9wYXJhbGxlbF9sZWFkZXIoTXlMb2dpY2FsUmVwV29y a2VyLT5hcHBseV9sZWFkZXJfcGlkLAorCQkJCQkJICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlN eUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0gTXlMb2dpY2FsUmVwV29ya2VyLT5s YXN0X3JlY3ZfdGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtlci0+cmVwbHlfdGltZSA9IDA7CisK KwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsKKworCS8qIFNldHVwIHJlcGxpY2F0aW9uIG9yaWdp biB0cmFja2luZy4gKi8KKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVJlcGxpY2F0aW9u T3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoTXlTdWJzY3JpcHRpb24tPm9pZCwgSW52YWxpZE9pZCwK KwkJCQkJCQkJCSAgIG9yaWdpbm5hbWUsIHNpemVvZihvcmlnaW5uYW1lKSk7CisJb3JpZ2luaWQg PSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1ZSk7CisJaWYgKCFPaWRJc1ZhbGlk KG9yaWdpbmlkKSkKKwkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2NyZWF0ZShvcmlnaW5uYW1lKTsK KworCS8qCisJICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkb2Vzbid0IG5lZWQgdG8gbW9u b3BvbGl6ZSB0aGlzIHJlcGxpY2F0aW9uCisJICogb3JpZ2luIHdoaWNoIHdhcyBhbHJlYWR5IGFj cXVpcmVkIGJ5IGl0cyBsZWFkZXIgcHJvY2Vzcy4KKwkgKi8KKwlyZXBsb3JpZ2luX3Nlc3Npb25f c2V0dXAob3JpZ2luaWQsIE15TG9naWNhbFJlcFdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCk7CisJ cmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOworCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJLyoKKwkgKiBTZXR1cCBjYWxsYmFjayBmb3Igc3lzY2FjaGUgc28gdGhh dCB3ZSBrbm93IHdoZW4gc29tZXRoaW5nIGNoYW5nZXMgaW4KKwkgKiB0aGUgc3Vic2NyaXB0aW9u IHJlbGF0aW9uIHN0YXRlLgorCSAqLworCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFNV QlNDUklQVElPTlJFTE1BUCwKKwkJCQkJCQkJICBpbnZhbGlkYXRlX3N5bmNpbmdfdGFibGVfc3Rh dGVzLAorCQkJCQkJCQkgIChEYXR1bSkgMCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBvcmln aW4gbmFtZSBpbiBhIGxvbmctbGl2ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4dAorCSAqIG1l c3NhZ2UuCisJICovCisJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLm9yaWdpbl9uYW1lID0gTWVt b3J5Q29udGV4dFN0cmR1cChBcHBseUNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgICBvcmlnaW5u YW1lKTsKKworCUxvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChtcWgpOworCisJcHJvY19leGl0KDAp OworfQorCisvKgorICogSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGluZGljYXRpbmcg YSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbWVzc2FnZS4KKyAqCisgKiBOb3RlOiB0aGlzIGlzIGNh bGxlZCB3aXRoaW4gYSBzaWduYWwgaGFuZGxlciEgIEFsbCB3ZSBjYW4gZG8gaXMgc2V0IGEgZmxh ZworICogdGhhdCB3aWxsIGNhdXNlIHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgdG8g aW52b2tlCisgKiBIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKS4KKyAqLwordm9pZAorSGFu ZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQodm9pZCkKK3sKKwlJbnRlcnJ1cHRQZW5k aW5nID0gdHJ1ZTsKKwlQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcgPSB0cnVlOworCVNldExh dGNoKE15TGF0Y2gpOworfQorCisvKgorICogSGFuZGxlIGEgc2luZ2xlIHByb3RvY29sIG1lc3Nh Z2UgcmVjZWl2ZWQgZnJvbSBhIHNpbmdsZSBwYXJhbGxlbCBhcHBseQorICogd29ya2VyLgorICov CitzdGF0aWMgdm9pZAorSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2UoUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKndpbmZvLCBTdHJpbmdJbmZvIG1zZykKK3sKKwljaGFyCQltc2d0eXBlOworCisJ bXNndHlwZSA9IHBxX2dldG1zZ2J5dGUobXNnKTsKKworCXN3aXRjaCAobXNndHlwZSkKKwl7CisJ CWNhc2UgJ0UnOgkJCQkvKiBFcnJvclJlc3BvbnNlICovCisJCQl7CisJCQkJRXJyb3JEYXRhCWVk YXRhOworCisJCQkJLyogUGFyc2UgRXJyb3JSZXNwb25zZS4gKi8KKwkJCQlwcV9wYXJzZV9lcnJv cm5vdGljZShtc2csICZlZGF0YSk7CisKKwkJCQkvKiBEZWF0aCBvZiBhIHdvcmtlciBpc24ndCBl bm91Z2gganVzdGlmaWNhdGlvbiBmb3Igc3VpY2lkZS4gKi8KKwkJCQllZGF0YS5lbGV2ZWwgPSBN aW4oZWRhdGEuZWxldmVsLCBFUlJPUik7CisKKwkJCQkvKgorCQkJCSAqIElmIGRlc2lyZWQsIGFk ZCBhIGNvbnRleHQgbGluZSB0byBzaG93IHRoYXQgdGhpcyBpcyBhCisJCQkJICogbWVzc2FnZSBw cm9wYWdhdGVkIGZyb20gYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIE90aGVyd2lzZSwKKwkJCQkg KiBpdCBjYW4gc29tZXRpbWVzIGJlIGNvbmZ1c2luZyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFs bHkKKwkJCQkgKiBoYXBwZW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAoZWRhdGEuY29udGV4dCkKKwkJ CQkJZWRhdGEuY29udGV4dCA9IHBzcHJpbnRmKCIlc1xuJXMiLCBlZGF0YS5jb250ZXh0LAorCQkJ CQkJCQkJCQkgXygicGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCQkJCWVsc2UKKwkJCQkJZWRh dGEuY29udGV4dCA9IHBzdHJkdXAoXygicGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCisJCQkJ LyoKKwkJCQkgKiBDb250ZXh0IGJleW9uZCB0aGF0IHNob3VsZCB1c2UgdGhlIGVycm9yIGNvbnRl eHQgY2FsbGJhY2tzCisJCQkJICogdGhhdCB3ZXJlIGluIGVmZmVjdCBpbiBMb2dpY2FsUmVwQXBw bHlMb29wKCkuCisJCQkJICovCisJCQkJZXJyb3JfY29udGV4dF9zdGFjayA9IGFwcGx5X2Vycm9y X2NvbnRleHRfc3RhY2s7CisKKwkJCQlUaHJvd0Vycm9yRGF0YSgmZWRhdGEpOworCisJCQkJLyog U2hvdWxkIG5vdCByZWFjaCBoZXJlIGFmdGVyIHJldGhyb3dpbmcgYW4gZXJyb3IuICovCisJCQkJ QXNzZXJ0KGZhbHNlKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIERvbid0IG5lZWQgdG8gZG8gYW55 dGhpbmcgYWJvdXQgTm90aWNlUmVzcG9uc2UgYW5kCisJCQkgKiBOb3RpZnlSZXNwb25zZSBhcyB0 aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZG9lc24ndCBuZWVkCisJCQkgKiB0byBzZW5k IG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuCisJCQkgKi8KKwkJY2FzZSAnTic6CisJCWNhc2UgJ0En OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBt ZXNzYWdlIHR5cGUgcmVjZWl2ZWQgZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXI6ICVjIChtZXNz YWdlIGxlbmd0aCAlZCBieXRlcykiLAorCQkJCQkgbXNndHlwZSwgbXNnLT5sZW4pOworCX0KK30K KworLyoKKyAqIEhhbmRsZSBhbnkgcXVldWVkIHByb3RvY29sIG1lc3NhZ2VzIHJlY2VpdmVkIGZy b20gcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqLwordm9pZAorSGFuZGxlUGFyYWxsZWxBcHBs eU1lc3NhZ2VzKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCisJc3RhdGljIE1lbW9yeUNvbnRleHQgaHBhbV9jb250ZXh0ID0gTlVMTDsKKwor CS8qCisJICogVGhpcyBpcyBpbnZva2VkIGZyb20gUHJvY2Vzc0ludGVycnVwdHMoKSwgYW5kIHNp bmNlIHNvbWUgb2YgdGhlCisJICogZnVuY3Rpb25zIGl0IGNhbGxzIGNvbnRhaW4gQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKSwgdGhlcmUgaXMgYSBwb3RlbnRpYWwKKwkgKiBmb3IgcmVjdXJzaXZlIGNh bGxzIGlmIG1vcmUgc2lnbmFscyBhcmUgcmVjZWl2ZWQgd2hpbGUgdGhpcyBydW5zLiAgSXQncwor CSAqIHVuY2xlYXIgdGhhdCByZWN1cnNpdmUgZW50cnkgd291bGQgYmUgc2FmZSwgYW5kIGl0IGRv ZXNuJ3Qgc2VlbSB1c2VmdWwKKwkgKiBldmVuIGlmIGl0IGlzIHNhZmUsIHNvIGxldCdzIGJsb2Nr IGludGVycnVwdHMgdW50aWwgZG9uZS4KKwkgKi8KKwlIT0xEX0lOVEVSUlVQVFMoKTsKKworCS8q CisJICogTW9yZW92ZXIsIEN1cnJlbnRNZW1vcnlDb250ZXh0IG1pZ2h0IGJlIHBvaW50aW5nIGFs bW9zdCBhbnl3aGVyZS4gIFdlCisJICogZG9uJ3Qgd2FudCB0byByaXNrIGxlYWtpbmcgZGF0YSBp bnRvIGxvbmctbGl2ZWQgY29udGV4dHMsIHNvIGxldCdzIGRvCisJICogb3VyIHdvcmsgaGVyZSBp biBhIHByaXZhdGUgY29udGV4dCB0aGF0IHdlIGNhbiByZXNldCBvbiBlYWNoIHVzZS4KKwkgKi8K KwlpZiAoaHBhbV9jb250ZXh0ID09IE5VTEwpCS8qIGZpcnN0IHRpbWUgdGhyb3VnaD8gKi8KKwkJ aHBhbV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkJCSJIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMiLAorCQkJCQkJCQkJCQlBTExP Q1NFVF9ERUZBVUxUX1NJWkVTKTsKKwllbHNlCisJCU1lbW9yeUNvbnRleHRSZXNldChocGFtX2Nv bnRleHQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhocGFtX2NvbnRl eHQpOworCisJUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7CisKKwlmb3JlYWNo KGxjLCBQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QpCisJeworCQlzaG1fbXFfcmVzdWx0IHJlczsK KwkJU2l6ZQkJbmJ5dGVzOworCQl2b2lkCSAgICpkYXRhOworCQlQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbyAqd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKwor CQlpZiAod2luZm8tPmVycm9yX21xX2hhbmRsZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJ cmVzID0gc2htX21xX3JlY2VpdmUod2luZm8tPmVycm9yX21xX2hhbmRsZSwgJm5ieXRlcywgJmRh dGEsIHRydWUpOworCisJCWlmIChyZXMgPT0gU0hNX01RX1dPVUxEX0JMT0NLKQorCQkJY29udGlu dWU7CisJCWVsc2UgaWYgKHJlcyA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJeworCQkJU3RyaW5nSW5m b0RhdGEgbXNnOworCisJCQlpbml0U3RyaW5nSW5mbygmbXNnKTsKKwkJCWFwcGVuZEJpbmFyeVN0 cmluZ0luZm8oJm1zZywgZGF0YSwgbmJ5dGVzKTsKKwkJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNz YWdlKHdpbmZvLCAmbXNnKTsKKwkJCXBmcmVlKG1zZy5kYXRhKTsKKwkJfQorCQllbHNlCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVR VUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygibG9zdCBjb25uZWN0aW9uIHRvIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIiKSkpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj b250ZXh0KTsKKworCS8qIE1pZ2h0IGFzIHdlbGwgY2xlYXIgdGhlIGNvbnRleHQgb24gb3VyIHdh eSBvdXQgKi8KKwlNZW1vcnlDb250ZXh0UmVzZXQoaHBhbV9jb250ZXh0KTsKKworCVJFU1VNRV9J TlRFUlJVUFRTKCk7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBkeW5hbWljIHNoYXJlZCBtZW1vcnkg c2VnbWVudC4KKyAqCisgKiBXZSBzZXQgdXAgYSBjb250cm9sIHJlZ2lvbiB0aGF0IGNvbnRhaW5z IGEgZml4ZWQtc2l6ZSB3b3JrZXIgaW5mbworICogKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQp LCBhIG1lc3NhZ2UgcXVldWUsIGFuZCBhbiBlcnJvciBxdWV1ZS4KKyAqCisgKiBSZXR1cm5zIHRy dWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGJvb2wKK3BhcmFs bGVsX2FwcGx5X3NldHVwX2RzbShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pCit7CisJ c2htX3RvY19lc3RpbWF0b3IgZTsKKwlTaXplCQlzZWdzaXplOworCWRzbV9zZWdtZW50ICpzZWc7 CisJc2htX3RvYyAgICAqdG9jOworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsK KwlzaG1fbXEJICAgKm1xOworCVNpemUJCXF1ZXVlX3NpemUgPSBEU01fUVVFVUVfU0laRTsKKwlT aXplCQllcnJvcl9xdWV1ZV9zaXplID0gRFNNX0VSUk9SX1FVRVVFX1NJWkU7CisKKwkvKgorCSAq IEVzdGltYXRlIGhvdyBtdWNoIHNoYXJlZCBtZW1vcnkgd2UgbmVlZC4KKwkgKgorCSAqIEJlY2F1 c2UgdGhlIFRPQyBtYWNoaW5lcnkgbWF5IGNob29zZSB0byBpbnNlcnQgcGFkZGluZyBvZiBvZGRs eS1zaXplZAorCSAqIHJlcXVlc3RzLCB3ZSBtdXN0IGVzdGltYXRlIGVhY2ggY2h1bmsgc2VwYXJh dGVseS4KKwkgKgorCSAqIFdlIG5lZWQgb25lIGtleSB0byByZWdpc3RlciB0aGUgbG9jYXRpb24g b2YgdGhlIGhlYWRlciwgYW5kIHR3byBvdGhlcgorCSAqIGtleXMgdG8gdHJhY2sgdGhlIGxvY2F0 aW9ucyBvZiB0aGUgbWVzc2FnZSBxdWV1ZSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UKKwkgKiBxdWV1 ZS4KKwkgKi8KKwlzaG1fdG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2Vz dGltYXRlX2NodW5rKCZlLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCkpOworCXNo bV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIHF1ZXVlX3NpemUpOworCXNobV90b2NfZXN0aW1hdGVf Y2h1bmsoJmUsIGVycm9yX3F1ZXVlX3NpemUpOworCisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZl LCAzKTsKKwlzZWdzaXplID0gc2htX3RvY19lc3RpbWF0ZSgmZSk7CisKKwkvKiBDcmVhdGUgdGhl IHNoYXJlZCBtZW1vcnkgc2VnbWVudCBhbmQgZXN0YWJsaXNoIGEgdGFibGUgb2YgY29udGVudHMu ICovCisJc2VnID0gZHNtX2NyZWF0ZShzaG1fdG9jX2VzdGltYXRlKCZlKSwgMCk7CisJaWYgKHNl ZyA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0b2MgPSBzaG1fdG9jX2NyZWF0ZShQR19M T0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLAorCQkJCQkJ IHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9uLiAqLworCXNoYXJlZCA9 IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCkp OworCVNwaW5Mb2NrSW5pdCgmc2hhcmVkLT5tdXRleCk7CisKKwlzaGFyZWQtPnhhY3Rfc3RhdGUg PSBQQVJBTExFTF9UUkFOU19VTktOT1dOOworCXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJlZC0+ bGVmdF9tZXNzYWdlKSwgMCk7CisKKwlzaG1fdG9jX2luc2VydCh0b2MsIFBBUkFMTEVMX0FQUExZ X0tFWV9TSEFSRUQsIHNoYXJlZCk7CisKKwkvKiBTZXQgdXAgbWVzc2FnZSBxdWV1ZSBmb3IgdGhl IHdvcmtlci4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2MsIHF1 ZXVlX3NpemUpLCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0b2MsIFBBUkFMTEVMX0FQ UExZX0tFWV9NUSwgbXEpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVByb2MpOworCisJLyog QXR0YWNoIHRoZSBxdWV1ZS4gKi8KKwl3aW5mby0+bXFfaGFuZGxlID0gc2htX21xX2F0dGFjaCht cSwgc2VnLCBOVUxMKTsKKworCS8qIFNldCB1cCBlcnJvciBxdWV1ZSBmb3IgdGhlIHdvcmtlci4g Ki8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2MsIGVycm9yX3F1ZXVl X3NpemUpLAorCQkJCQkgICBlcnJvcl9xdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0b2Ms IFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgbXEpOworCXNobV9tcV9zZXRfcmVjZWl2 ZXIobXEsIE15UHJvYyk7CisKKwkvKiBBdHRhY2ggdGhlIHF1ZXVlLiAqLworCXdpbmZvLT5lcnJv cl9tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyogUmV0dXJu IHJlc3VsdHMgdG8gY2FsbGVyLiAqLworCXdpbmZvLT5kc21fc2VnID0gc2VnOworCXdpbmZvLT5z aGFyZWQgPSBzaGFyZWQ7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFJldHVybnMgdGhl IHVuaXF1ZSBpZCBhbW9uZyBhbGwgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBpbiB0aGUgc3Vic2Ny aWJlci4KKyAqLworc3RhdGljIHVpbnQxNgorcGFyYWxsZWxfYXBwbHlfZ2V0X3VuaXF1ZV9pZCgp Cit7CisJTGlzdENlbGwgKmxjOworCisJc3RhdGljIHVpbnQxNiBpZCA9IDA7CisKKwlmb3IoOzsp CisJeworCQlib29sCXVuaXF1ZSA9IHRydWU7CisKKwkJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBs eVdvcmtlcnNMaXN0KQorCQl7CisJCQlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSAo UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKGlkID09IHdp bmZvLT5zaGFyZWQtPnN0cmVhbV9sb2NrX2lkIHx8CisJCQkJaWQgPT0gd2luZm8tPnNoYXJlZC0+ dHJhbnNhY3Rpb25fbG9ja19pZCkKKwkJCXsKKwkJCQl1bmlxdWUgPSBmYWxzZTsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCisJCWlmICh1bmlxdWUpCisJCQlicmVhazsKKworCQlpZCArPSAxOwor CX0KKworCXJldHVybiBpZDsKK30KKworLyoKKyAqIFN0YXJ0IHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBwcm9jZXNzIGFuZCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZvciBpdC4KKyAqLworc3RhdGlj IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoKK3BhcmFsbGVsX2FwcGx5X3NldHVwX3dvcmtlcih2 b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29sCQlsYXVuY2hlZDsKKwlQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwl3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqKSBwYWxsb2MwKHNpemVvZihQYXJhbGxlbEFwcGx5V29ya2VySW5mbykpOworCisJ LyogU2V0dXAgc2hhcmVkIG1lbW9yeS4gKi8KKwlpZiAoIXBhcmFsbGVsX2FwcGx5X3NldHVwX2Rz bSh3aW5mbykpCisJeworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCXBm cmVlKHdpbmZvKTsKKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsYXVuY2hlZCA9IGxvZ2ljYWxy ZXBfd29ya2VyX2xhdW5jaChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJTXlT dWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJ CQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKKwkJCQkJCQkJCQlJbnZhbGlkT2lkLAor CQkJCQkJCQkJCWRzbV9zZWdtZW50X2hhbmRsZSh3aW5mby0+ZHNtX3NlZykpOworCisJaWYgKGxh dW5jaGVkKQorCXsKKwkJUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0ID0gbGFwcGVuZChQYXJhbGxl bEFwcGx5V29ya2Vyc0xpc3QsIHdpbmZvKTsKKwkJd2luZm8tPnNoYXJlZC0+c3RyZWFtX2xvY2tf aWQgPSBwYXJhbGxlbF9hcHBseV9nZXRfdW5pcXVlX2lkKCk7CisJCXdpbmZvLT5zaGFyZWQtPnRy YW5zYWN0aW9uX2xvY2tfaWQgPSBwYXJhbGxlbF9hcHBseV9nZXRfdW5pcXVlX2lkKCk7CisJfQor CWVsc2UKKwl7CisJCXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyX2luZm8od2luZm8pOworCisJ CXdpbmZvID0gTlVMTDsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwlyZXR1cm4gd2luZm87Cit9CisKKy8qCisgKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzcGVj aWZpZWQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHZpYSBzaGFyZWQtbWVtb3J5IHF1ZXVlLgorICov Cit2b2lkCitwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCSBjb25zdCB2b2lkICpkYXRhKQoreworCWludAly ZXRyeSA9IDA7CisJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisJVGltZXN0YW1wVHogc3RhcnRUaW1l ID0gMDsKKworCUFzc2VydCghd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKTsKKwlBc3NlcnQoIUlz VHJhbnNhY3Rpb25TdGF0ZSgpKTsKKworI2RlZmluZSBDSEFOR0VTX1RIUkVTSE9MRAkxMDAwCisj ZGVmaW5lIFNITV9TRU5EX1RJTUVPVVRfTVMJMTAwMDAKKworCWZvciAoOzspCisJeworCQlyZXN1 bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFfaGFuZGxlLCBuYnl0ZXMsIGRhdGEsIHRydWUsIHRy dWUpOworCisJCWlmIChyZXN1bHQgPT0gU0hNX01RX1NVQ0NFU1MpCisJCQlicmVhazsKKwkJZWxz ZSBpZiAocmVzdWx0ID09IFNITV9NUV9ERVRBQ0hFRCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBkYXRhIHRvIHNoYXJlZC1tZW1vcnkgcXVldWUiKSkp OworCisJCUFzc2VydChyZXN1bHQgPT0gU0hNX01RX1dPVUxEX0JMT0NLKTsKKworCQlpZiAoKyty ZXRyeSA+PSBDSEFOR0VTX1RIUkVTSE9MRCkKKwkJeworCQkJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCQkJU3RyaW5nSW5mb0RhdGEgbXNnOworCQkJTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9u OworCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJCQlpZiAo c3RhcnRUaW1lID09IDApCisJCQkJc3RhcnRUaW1lID0gbm93OworCisJCQlpZiAoIVRpbWVzdGFt cERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0VGltZSwgbm93LCBTSE1fU0VORF9USU1FT1VUX01TKSkK KwkJCQljb250aW51ZTsKKworCQkJLyogU2F2ZSB0aGUgbWVzc2FnZSB0aGF0IHdhcyBvbmx5IHBh cnRpYWxseSBzZW50LiAqLworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhB cHBseUNvbnRleHQpOworCQkJd2luZm8tPnBlbmRpbmdfbXNnID0gcGFsbG9jKG5ieXRlcyk7CisJ CQltZW1jcHkod2luZm8tPnBlbmRpbmdfbXNnLCBkYXRhLCBuYnl0ZXMpOworCQkJd2luZm8tPnBl bmRpbmdfbGVuZ3RoID0gbmJ5dGVzOworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisKKwkJCS8qCisJCQkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG1pZ2h0IGJl IHN0dWNrIGZvciBzb21lIHJlYXNvbiwgc28KKwkJCSAqIHN0b3Agc2VuZGluZyBkYXRhIHRvIHBh cmFsbGVsIHdvcmtlciBhbmQgc3RhcnQgdG8gc2VyaWFsaXplIGRhdGEKKwkJCSAqIHRvIGZpbGVz LgorCQkJICovCisJCQl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSB0cnVlOworCisJCQlpbml0 U3RyaW5nSW5mbygmbXNnKTsKKwkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJm1zZywgZGF0YSwg bmJ5dGVzKTsKKworCQkJLyogU2tpcCBmaXJzdCBieXRlIGFuZCBzdGF0aXN0aWNzIGZpZWxkcy4g Ki8KKwkJCW1zZy5jdXJzb3IgKz0gU0laRV9TVEFUU19NRVNTQUdFICsgMTsKKworCQkJLyogSW5p dGlhbGl6ZSB0aGUgc3RyZWFtIGZpbGVzZXQuICovCisJCQlzZXJpYWxpemVfc3RyZWFtX3N0YXJ0 KHdpbmZvLT5zaGFyZWQtPnhpZCwgdHJ1ZSk7CisKKwkJCS8qIFdyaXRlIHRoaXMgbWVzc2FnZSB0 byBmaWxlLiAqLworCQkJYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZSgmbXNnKTsKKwkJCXN0cmVhbV93 cml0ZV9jaGFuZ2UoYWN0aW9uLCAmbXNnKTsKKworCQkJLyoKKwkJCSAqIENsb3NlIHRoZSBzdHJl YW0gZmlsZSBpZiBub3QgaW4gYSBzdHJlYW1pbmcgYmxvY2sgb3IgdGhlIG1lc3NhZ2UKKwkJCSAq IGJlaW5nIHByb2Nlc3NlZCBpcyB0aGUgbGFzdCBtZXNzYWdlIG9mIGEgc3RyZWFtaW5nIGJsb2Nr LgorCQkJICovCisJCQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uIHx8CisJCQkJYWN0aW9u ID09IExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RPUCkKKwkJCQlzZXJpYWxpemVfc3RyZWFtX3N0 b3Aod2luZm8tPnNoYXJlZC0+eGlkKTsKKworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisg KiBXYWl0IHVudGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIncyB0cmFuc2FjdGlvbiBmaW5p c2hlcy4KKyAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9maW5pc2goUGFy YWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCkKK3sKKwkvKgorCSAqIFdhaXQgdW50aWwg dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYW5kbGVzIHRoZSBmaXJzdCBtZXNzYWdlIGFuZAor CSAqIHNldCB0aGUgZmxhZyB0byB0cnVlLgorCSAqLworCXBhcmFsbGVsX2FwcGx5X3dhaXRfZm9y X2luX3hhY3Qod3NoYXJlZCwgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7CisKKwkvKiBXYWl0IGZv ciB0aGUgdHJhbnNhY3Rpb24gbG9jayB0byBiZSByZWxlYXNlZC4gKi8KKwlwYXJhbGxlbF9hcHBs eV9sb2NrKHdzaGFyZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OworCisJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKHdzaGFyZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQs IEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBXYWl0IHVudGlsIHRoZSBmbGFnIGJl Y29tZXMgZmFsc2UgaW4gY2FzZSB0aGUgbG9jayB3YXMgcmVsZWFzZWQgYmVjYXVzZQorCSAqIG9m IGZhaWx1cmUgd2hpbGUgYXBwbHlpbmcuCisJICovCisJcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3Jf aW5feGFjdCh3c2hhcmVkLCBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCk7Cit9CisKKy8qCisgKiBX YWl0IHVudGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIncyB4YWN0X3N0YXRlIGZsYWcgcmVh Y2ggb3IgZXhjZWVkIHRoZQorICogZ2l2ZW4geGFjdF9zdGF0ZS4KKyAqLworc3RhdGljIHZvaWQK K3BhcmFsbGVsX2FwcGx5X3dhaXRfZm9yX2luX3hhY3QoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCwKKwkJCQkJCQkJUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpCit7CisJ Zm9yICg7OykKKwl7CisJCS8qIFN0b3AgaWYgdGhlIGZsYWcgcmVhY2ggb3IgZXhjZWVkIHRoZSB4 YWN0X3N0YXRlLiAqLworCQlpZiAocGFyYWxsZWxfYXBwbHlfZ2V0X3hhY3Rfc3RhdGUod3NoYXJl ZCkgPj0geGFjdF9zdGF0ZSkKKwkJCWJyZWFrOworCisJCS8qIFdhaXQgdG8gYmUgc2lnbmFsbGVk LiAqLworCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkgV0xfTEFUQ0hfU0VUIHwg V0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgMTBMLAorCQkJCQkJIFdB SVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9TVEFURV9DSEFOR0UpOworCisJCS8qIFJl c2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLworCQlSZXNldExhdGNoKE15TGF0Y2gp OworCisJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdh aXRpbmcuICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJfQorfQorCisvKgorICogU2V0 IHRoZSB4YWN0X3N0YXRlIGZsYWcgZm9yIHRoZSBnaXZlbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3NldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCQkJICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9z dGF0ZSkKK3sKKwlTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4KTsKKwl3c2hhcmVkLT54 YWN0X3N0YXRlID0geGFjdF9zdGF0ZTsKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4 KTsKK30KKworLyoKKyAqIEdldCB0aGUgeGFjdF9zdGF0ZSBmbGFnIGZvciB0aGUgZ2l2ZW4gcGFy YWxsZWwgYXBwbHkgd29ya2VyLgorICovCitzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlCitwYXJh bGxlbF9hcHBseV9nZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hh cmVkKQoreworCVBhcmFsbGVsVHJhbnNTdGF0ZQkJeGFjdF9zdGF0ZTsKKworCVNwaW5Mb2NrQWNx dWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXhhY3Rfc3RhdGUgPSB3c2hhcmVkLT54YWN0X3N0YXRl OworCVNwaW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworCisJcmV0dXJuIHhhY3Rfc3Rh dGU7Cit9CisKKy8qCisgKiBGb3JtIHRoZSBzYXZlcG9pbnQgbmFtZSBmb3IgdGhlIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBSZXR1cm4gdGhlIG5hbWUgaW4gdGhlIHN1cHBsaWVkIGJ1 ZmZlci4KKyAqLworc3RhdGljIHZvaWQKK3BhcmFsbGVsX2FwcGx5X3NhdmVwb2ludF9uYW1lKE9p ZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSAgY2hhciAqc3BuYW1lLCBTaXpl IHN6c3ApCit7CisJc25wcmludGYoc3BuYW1lLCBzenNwLCAicGdfc3BfJXVfJXUiLCBzdWJvaWQs IHhpZCk7Cit9CisKKy8qCisgKiBEZWZpbmUgYSBzYXZlcG9pbnQgZm9yIGEgc3VieGFjdCBpbiBw YXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgbmVlZGVkLgorICoKKyAqIFRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgY2FuIGZpZ3VyZSBvdXQgaWYgYSBuZXcgc3VidHJhbnNhY3Rpb24gd2FzCisgKiBz dGFydGVkIGJ5IGNoZWNraW5nIGlmIHRoZSBuZXcgY2hhbmdlIGFycml2ZWQgd2l0aCBhIGRpZmZl cmVudCB4aWQuIEluIHRoYXQKKyAqIGNhc2UgZGVmaW5lIGEgbmFtZWQgc2F2ZXBvaW50LCBzbyB0 aGF0IHdlIGFyZSBhYmxlIHRvIHJvbGxiYWNrIHRvIGl0CisgKiBpZiByZXF1aXJlZC4KKyAqLwor dm9pZAorcGFyYWxsZWxfYXBwbHlfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50 X3hpZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKQoreworCWlmIChjdXJyZW50X3hpZCAhPSB0b3Bf eGlkICYmCisJCSFsaXN0X21lbWJlcl94aWQoc3VieGFjdGxpc3QsIGN1cnJlbnRfeGlkKSkKKwl7 CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQljaGFyCQlzcG5hbWVbTkFNRURBVEFMRU5dOwor CisJCXBhcmFsbGVsX2FwcGx5X3NhdmVwb2ludF9uYW1lKE15U3Vic2NyaXB0aW9uLT5vaWQsIGN1 cnJlbnRfeGlkLAorCQkJCQkJCQkJICBzcG5hbWUsIHNpemVvZihzcG5hbWUpKTsKKworCQllbG9n KERFQlVHMSwgImRlZmluaW5nIHNhdmVwb2ludCAlcyBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIi LCBzcG5hbWUpOworCisJCS8qIFdlIG11c3QgYmUgaW4gdHJhbnNhY3Rpb24gYmxvY2sgdG8gZGVm aW5lIHRoZSBTQVZFUE9JTlQuICovCisJCWlmICghSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCXsK KwkJCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCisJCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKKworCQkJQmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKKwkJfQorCisJCURlZmluZVNhdmVwb2ludChzcG5hbWUpOworCisJCS8qCisJ CSAqIENvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCBpcyBuZWVkZWQgdG8gc3RhcnQgYSBzdWJ0cmFu c2FjdGlvbiBhZnRlcgorCQkgKiBpc3N1aW5nIGEgU0FWRVBPSU5UIGluc2lkZSBhIHRyYW5zYWN0 aW9uIGJsb2NrIChzZWUKKwkJICogU3RhcnRTdWJUcmFuc2FjdGlvbigpKS4KKwkJICovCisJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseUNvbnRleHQpOworCQlzdWJ4YWN0bGlzdCA9IGxhcHBlbmRfeGlkKHN1YnhhY3Rs aXN0LCBjdXJyZW50X3hpZCk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCX0K K30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2Fj dGlvbiB3YXMgYXBwbGllZCBpbiBhIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXIuCisgKi8KK3Zv aWQKK3BhcmFsbGVsX2FwcGx5X3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRh ICphYm9ydF9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQgeGlkID0gYWJvcnRfZGF0YS0+eGlkOwor CVRyYW5zYWN0aW9uSWQgc3VieGlkID0gYWJvcnRfZGF0YS0+c3VieGlkOworCisJLyoKKwkgKiBV cGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVhbWluZyBmcm9tIGNvcnJl Y3QgcG9zaXRpb24KKwkgKiBpbiBjYXNlIG9mIGNyYXNoLgorCSAqLworCXJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW5fbHNuID0gYWJvcnRfZGF0YS0+YWJvcnRfbHNuOworCXJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW5fdGltZXN0YW1wID0gYWJvcnRfZGF0YS0+YWJvcnRfdGltZTsKKworCS8qCisJ ICogSWYgdGhlIHR3byBYSURzIGFyZSB0aGUgc2FtZSwgaXQncyBpbiBmYWN0IGFib3J0IG9mIHRv cGxldmVsIHhhY3QsIHNvCisJICoganVzdCBmcmVlIHRoZSBzdWJ4YWN0bGlzdC4KKwkgKi8KKwlp ZiAoc3VieGlkID09IHhpZCkKKwl7CisJCUFib3J0Q3VycmVudFRyYW5zYWN0aW9uKCk7CisKKwkJ aWYgKElzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7CisJCQlFbmRUcmFuc2FjdGlvbkJsb2NrKGZh bHNlKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQl9CisKKwkJcGdzdGF0X3Jl cG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKworCQlsaXN0X2ZyZWUoc3VieGFjdGxp c3QpOworCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQlwYXJhbGxlbF9hcHBseV91bmxvY2soTXlQ YXJhbGxlbFNoYXJlZC0+dHJhbnNhY3Rpb25fbG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ cGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxf VFJBTlNfRklOSVNIRUQpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBPSywgc28gaXQncyBh IHN1YnhhY3QuIFJvbGxiYWNrIHRvIHRoZSBzYXZlcG9pbnQuCisJCSAqCisJCSAqIFdlIGFsc28g bmVlZCB0byByZWFkIHRoZSBzdWJ4YWN0bGlzdCwgZGV0ZXJtaW5lIHRoZSBvZmZzZXQgdHJhY2tl ZAorCQkgKiBmb3IgdGhlIHN1YnhhY3QsIGFuZCB0cnVuY2F0ZSB0aGUgbGlzdC4KKwkJICovCisJ CWludAkJCWk7CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisJCWNoYXIJCXNwbmFtZVtOQU1FREFU QUxFTl07CisKKwkJcGFyYWxsZWxfYXBwbHlfc2F2ZXBvaW50X25hbWUoTXlTdWJzY3JpcHRpb24t Pm9pZCwgc3VieGlkLCBzcG5hbWUsCisJCQkJCQkJCQkgIHNpemVvZihzcG5hbWUpKTsKKworCQll bG9nKERFQlVHMSwgInJvbGxpbmcgYmFjayB0byBzYXZlcG9pbnQgJXMgaW4gcGFyYWxsZWwgYXBw bHkgd29ya2VyIiwgc3BuYW1lKTsKKworCQlmb3IgKGkgPSBsaXN0X2xlbmd0aChzdWJ4YWN0bGlz dCkgLSAxOyBpID49IDA7IGktLSkKKwkJeworCQkJVHJhbnNhY3Rpb25JZCB4aWRfdG1wID0gbGZp cnN0X3hpZChsaXN0X250aF9jZWxsKHN1YnhhY3RsaXN0LCBpKSk7CisKKwkJCWlmICh4aWRfdG1w ID09IHN1YnhpZCkKKwkJCXsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJ CX0KKworCQlpZiAoZm91bmQpCisJCXsKKwkJCVJvbGxiYWNrVG9TYXZlcG9pbnQoc3BuYW1lKTsK KwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkJc3VieGFjdGxpc3QgPSBsaXN0X3Ry dW5jYXRlKHN1YnhhY3RsaXN0LCBpICsgMSk7CisJCX0KKworCQlwZ3N0YXRfcmVwb3J0X2FjdGl2 aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLCBOVUxMKTsKKwl9Cit9CisKKy8qCisgKiBTZXQg dGhlIGZpbGVzZXRfdmFsaWQgZmxhZyBhbmQgZmlsZXNldCBmb3IgdGhlIGdpdmVuIHBhcmFsbGVs IGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXQoUGFy YWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwgYm9vbCBmaWxlc2V0X3ZhbGlkKQorewor CVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXdzaGFyZWQtPmZpbGVzZXRfdmFs aWQgPSBmaWxlc2V0X3ZhbGlkOworCisJaWYgKGZpbGVzZXRfdmFsaWQpCisJeworCQlBc3NlcnQo TXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisJCXdzaGFyZWQtPmZpbGVzZXQg PSAqTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldDsKKwl9CisJZWxzZQorCQltZW1z ZXQoJndzaGFyZWQtPmZpbGVzZXQsIDAsIHNpemVvZih3c2hhcmVkLT5maWxlc2V0KSk7CisKKwlT cGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9u IHRvIHRha2UgYSBsb2NrIHdpdGggbG9ja2lkLiAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfbG9j ayh1aW50MTYgbG9ja2lkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisKKwlpZiAobGlzdF9tZW1iZXJfaW50KFBhcmFsbGVsQXBwbHlMb2NraWRzLCBs b2NraWQpKQorCQlyZXR1cm47CisKKwlMb2NrU2hhcmVkT2JqZWN0Rm9yU2Vzc2lvbihTdWJzY3Jp cHRpb25SZWxhdGlvbklkLCBNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJCQkJCSAgIGxvY2tpZCwg bG9ja21vZGUpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNv bnRleHQpOworCVBhcmFsbGVsQXBwbHlMb2NraWRzID0gbGFwcGVuZF9pbnQoUGFyYWxsZWxBcHBs eUxvY2tpZHMsIGxvY2tpZCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwor fQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVsZWFzZSBhIGxvY2sgd2l0aCBsb2NraWQuICov Cit2b2lkCitwYXJhbGxlbF9hcHBseV91bmxvY2sodWludDE2IGxvY2tpZCwgTE9DS01PREUgbG9j a21vZGUpCit7CisJaWYgKCFsaXN0X21lbWJlcl9pbnQoUGFyYWxsZWxBcHBseUxvY2tpZHMsIGxv Y2tpZCkpCisJCXJldHVybjsKKworCVVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oU3Vic2Ny aXB0aW9uUmVsYXRpb25JZCwgTXlTdWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJIGxvY2tpZCwg YW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpID8KKwkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2s6 CisJCQkJCQkJCSBBY2Nlc3NTaGFyZUxvY2spOworCisJUGFyYWxsZWxBcHBseUxvY2tpZHMgPSBs aXN0X2RlbGV0ZV9pbnQoUGFyYWxsZWxBcHBseUxvY2tpZHMsIGxvY2tpZCk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5Li4zMDM1NTdkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTY1Miw5ICs2NTIs MTAgQEAgRGVjb2RlQ29tbWl0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29y ZEJ1ZmZlciAqYnVmLAogCXsKIAkJZm9yIChpID0gMDsgaSA8IHBhcnNlZC0+bnN1YnhhY3RzOyBp KyspCiAJCXsKLQkJCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9yZGVyLCBwYXJzZWQtPnN1 YnhhY3RzW2ldLCBidWYtPm9yaWdwdHIpOworCQkJUmVvcmRlckJ1ZmZlckZvcmdldChjdHgtPnJl b3JkZXIsIHBhcnNlZC0+c3VieGFjdHNbaV0sIGJ1Zi0+b3JpZ3B0ciwKKwkJCQkJCQkJY29tbWl0 X3RpbWUpOwogCQl9Ci0JCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1 Zi0+b3JpZ3B0cik7CisJCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1 Zi0+b3JpZ3B0ciwgY29tbWl0X3RpbWUpOwogCiAJCXJldHVybjsKIAl9CkBAIC04MjIsMTAgKzgy MywxMSBAQCBEZWNvZGVBYm9ydChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNv cmRCdWZmZXIgKmJ1ZiwKIAkJZm9yIChpID0gMDsgaSA8IHBhcnNlZC0+bnN1YnhhY3RzOyBpKysp CiAJCXsKIAkJCVJlb3JkZXJCdWZmZXJBYm9ydChjdHgtPnJlb3JkZXIsIHBhcnNlZC0+c3VieGFj dHNbaV0sCi0JCQkJCQkJICAgYnVmLT5yZWNvcmQtPkVuZFJlY1B0cik7CisJCQkJCQkJICAgYnVm LT5yZWNvcmQtPkVuZFJlY1B0ciwgYWJvcnRfdGltZSk7CiAJCX0KIAotCQlSZW9yZGVyQnVmZmVy QWJvcnQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIpOworCQlSZW9y ZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIs CisJCQkJCQkgICBhYm9ydF90aW1lKTsKIAl9CiAKIAkvKiB1cGRhdGUgdGhlIGRlY29kaW5nIHN0 YXRzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5j aGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKaW5kZXgg NzM1OTRjNi4uZjQzMjM1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1 bmNoZXIuYwpAQCAtNTUsNiArNTUsNyBAQAogLyogR1VDIHZhcmlhYmxlcyAqLwogaW50CQkJbWF4 X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDQ7CiBpbnQJCQltYXhfc3luY193b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24gPSAyOworaW50CQkJbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNf cGVyX3N1YnNjcmlwdGlvbiA9IDI7CiAKIExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdv cmtlciA9IE5VTEw7CiAKQEAgLTE1Miw4ICsxNTMsMTAgQEAgZ2V0X3N1YnNjcmlwdGlvbl9saXN0 KHZvaWQpCiAgKgogICogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgY2xlYW5pbmcgdXAgdGhlIHNo YXJlZCBtZW1vcnkgaW4gY2FzZSB0aGUgd29ya2VyCiAgKiBmYWlscyB0byBhdHRhY2guCisgKgor ICogUmV0dXJuIHdoZXRoZXIgdGhlIGF0dGFjaCB3YXMgc3VjY2Vzc2Z1bC4KICAqLwotc3RhdGlj IHZvaWQKK3N0YXRpYyBib29sCiBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNh bFJlcFdvcmtlciAqd29ya2VyLAogCQkJCQkJCSAgIHVpbnQxNiBnZW5lcmF0aW9uLAogCQkJCQkJ CSAgIEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSkKQEAgLTE2OSwxMSArMTcyLDExIEBA IFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIs CiAKIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIAot CQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0YXJ0ZWQ7IG5vIG5lZWQgdG8gZG8gYW55 dGhpbmcuICovCisJCS8qIFdvcmtlciBlaXRoZXIgZGllZCBvciBoYXMgc3RhcnRlZC4gUmV0dXJu IGZhbHNlIGlmIGRpZWQuICovCiAJCWlmICghd29ya2VyLT5pbl91c2UgfHwgd29ya2VyLT5wcm9j KQogCQl7CiAJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQkJCXJldHVy bjsKKwkJCXJldHVybiB3b3JrZXItPmluX3VzZTsKIAkJfQogCiAJCUxXTG9ja1JlbGVhc2UoTG9n aWNhbFJlcFdvcmtlckxvY2spOwpAQCAtMTg4LDcgKzE5MSw3IEBAIFdhaXRGb3JSZXBsaWNhdGlv bldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsCiAJCQlpZiAoZ2VuZXJhdGlv biA9PSB3b3JrZXItPmdlbmVyYXRpb24pCiAJCQkJbG9naWNhbHJlcF93b3JrZXJfY2xlYW51cCh3 b3JrZXIpOwogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCQlyZXR1 cm47CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQkvKgpAQCAtMjEwLDYgKzIxMyw4IEBAIFdh aXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsCiAv KgogICogV2Fsa3MgdGhlIHdvcmtlcnMgYXJyYXkgYW5kIHNlYXJjaGVzIGZvciBvbmUgdGhhdCBt YXRjaGVzIGdpdmVuCiAgKiBzdWJzY3JpcHRpb24gaWQgYW5kIHJlbGlkLgorICoKKyAqIFdlIGFy ZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgb3IgdGFibGUgc3lu YyB3b3JrZXIuCiAgKi8KIExvZ2ljYWxSZXBXb3JrZXIgKgogbG9naWNhbHJlcF93b3JrZXJfZmlu ZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCkBAIC0yMjQsNiArMjI5 LDEwIEBAIGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsIGJvb2wg b25seV9ydW5uaW5nKQogCXsKIAkJTG9naWNhbFJlcFdvcmtlciAqdyA9ICZMb2dpY2FsUmVwQ3R4 LT53b3JrZXJzW2ldOwogCisJCS8qIFNraXAgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gKi8KKwkJ aWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICh3LT5p bl91c2UgJiYgdy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0gcmVsaWQgJiYKIAkJCSgh b25seV9ydW5uaW5nIHx8IHctPnByb2MpKQogCQl7CkBAIC0yNjAsMTEgKzI2OSwxMyBAQCBsb2dp Y2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nKQogfQogCiAv KgotICogU3RhcnQgbmV3IGFwcGx5IGJhY2tncm91bmQgd29ya2VyLCBpZiBwb3NzaWJsZS4KKyAq IFN0YXJ0IG5ldyBiYWNrZ3JvdW5kIHdvcmtlciwgaWYgcG9zc2libGUuCisgKgorICogUmV0dXJu cyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAgKi8KLXZvaWQKK2Jvb2wKIGxv Z2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpz dWJuYW1lLCBPaWQgdXNlcmlkLAotCQkJCQkJIE9pZCByZWxpZCkKKwkJCQkJCSBPaWQgcmVsaWQs IGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSkKIHsKIAlCYWNrZ3JvdW5kV29ya2VyIGJndzsKIAlC YWNrZ3JvdW5kV29ya2VySGFuZGxlICpiZ3dfaGFuZGxlOwpAQCAtMjczLDcgKzI4NCwxMiBAQCBs b2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAq c3VibmFtZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQlzbG90ID0gMDsKIAlMb2dpY2FsUmVwV29ya2Vy ICp3b3JrZXIgPSBOVUxMOwogCWludAkJCW5zeW5jd29ya2VyczsKKwlpbnQJCQlucGFyYWxsZWxh cHBseXdvcmtlcnM7CiAJVGltZXN0YW1wVHogbm93OworCWJvb2wJCWlzX3BhcmFsbGVsX2FwcGx5 X3dvcmtlciA9IChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVfSU5WQUxJRCk7CisKKwkvKiBT YW5pdHkgY2hlY2sgLSB0YWJsZXN5bmMgd29ya2VyIGNhbm5vdCBiZSBhIHN1YndvcmtlciAqLwor CUFzc2VydCghKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciAmJiBPaWRJc1ZhbGlkKHJlbGlkKSkp OwogCiAJZXJlcG9ydChERUJVRzEsCiAJCQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dp Y2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiIsCkBAIC0zNTEs NyArMzY3LDI2IEBAIHJldHJ5OgogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSAmJiBuc3luY3dvcmtl cnMgPj0gbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKQogCXsKIAkJTFdMb2NrUmVs ZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCW5wYXJhbGxlbGFwcGx5d29ya2VycyA9IGxvZ2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlf d29ya2VyX2NvdW50KHN1YmlkKTsKKworCS8qCisJICogUmV0dXJuIGZhbHNlIGlmIHRoZSBudW1i ZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyByZWFjaGVkIHRoZSBsaW1pdAorCSAqIHBlciBz dWJzY3JpcHRpb24uCisJICovCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciAmJgorCQlu cGFyYWxsZWxhcHBseXdvcmtlcnMgPj0gbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1 YnNjcmlwdGlvbikKKwl7CisJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwor CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1J VF9FWENFRURFRCksCisJCQkJIGVycm1zZygib3V0IG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMi KSwKKwkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgbWF4X3BhcmFsbGVs X2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbi4iKSkpOworCisJCXJldHVybiBmYWxzZTsK IAl9CiAKIAkvKgpAQCAtMzY1LDcgKzQwMCw3IEBAIHJldHJ5OgogCQkJCShlcnJjb2RlKEVSUkNP REVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJIGVycm1zZygib3V0IG9mIGxv Z2ljYWwgcmVwbGljYXRpb24gd29ya2VyIHNsb3RzIiksCiAJCQkJIGVycmhpbnQoIllvdSBtaWdo dCBuZWVkIHRvIGluY3JlYXNlIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMuIikpKTsK LQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogUHJlcGFyZSB0aGUgd29ya2Vy IHNsb3QuICovCkBAIC0zODAsNiArNDE1LDggQEAgcmV0cnk6CiAJd29ya2VyLT5yZWxzdGF0ZSA9 IFNVQlJFTF9TVEFURV9VTktOT1dOOwogCXdvcmtlci0+cmVsc3RhdGVfbHNuID0gSW52YWxpZFhM b2dSZWNQdHI7CiAJd29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IE5VTEw7CisJd29ya2VyLT5hcHBs eV9sZWFkZXJfcGlkID0gaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyID8gTXlQcm9jUGlkIDogSW52 YWxpZFBpZDsKKwl3b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gaXNfcGFyYWxsZWxfYXBwbHlfd29y a2VyOwogCXdvcmtlci0+bGFzdF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlUSU1FU1RBTVBf Tk9CRUdJTih3b3JrZXItPmxhc3Rfc2VuZF90aW1lKTsKIAlUSU1FU1RBTVBfTk9CRUdJTih3b3Jr ZXItPmxhc3RfcmVjdl90aW1lKTsKQEAgLTM5NywxOSArNDM0LDM0IEBAIHJldHJ5OgogCQlCR1dP UktFUl9CQUNLRU5EX0RBVEFCQVNFX0NPTk5FQ1RJT047CiAJYmd3LmJnd19zdGFydF90aW1lID0g QmdXb3JrZXJTdGFydF9SZWNvdmVyeUZpbmlzaGVkOwogCXNucHJpbnRmKGJndy5iZ3dfbGlicmFy eV9uYW1lLCBCR1dfTUFYTEVOLCAicG9zdGdyZXMiKTsKLQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0 aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsKKworCWlmIChpc19wYXJh bGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdX X01BWExFTiwgIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIik7CisJZWxzZQorCQlzbnByaW50Zihi Z3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsKKwog CWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJc25wcmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFY TEVOLAogCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAl dSBzeW5jICV1Iiwgc3ViaWQsIHJlbGlkKTsKKwllbHNlIGlmIChpc19wYXJhbGxlbF9hcHBseV93 b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKKwkJCQkgImxvZ2lj YWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUi LCBzdWJpZCk7CiAJZWxzZQogCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCi0J CQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3Vi aWQpOwotCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGlj YXRpb24gd29ya2VyIik7CisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBm b3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOworCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dv cmtlcikKKwkJc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVOLCAibG9naWNhbCByZXBs aWNhdGlvbiBwYXJhbGxlbCB3b3JrZXIiKTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfdHlw ZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIik7CiAKIAliZ3cuYmd3 X3Jlc3RhcnRfdGltZSA9IEJHV19ORVZFUl9SRVNUQVJUOwogCWJndy5iZ3dfbm90aWZ5X3BpZCA9 IE15UHJvY1BpZDsKIAliZ3cuYmd3X21haW5fYXJnID0gSW50MzJHZXREYXR1bShzbG90KTsKIAor CWlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCisJCW1lbWNweShiZ3cuYmd3X2V4dHJhLCAm c3Vid29ya2VyX2RzbSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsKKwogCWlmICghUmVnaXN0ZXJEeW5h bWljQmFja2dyb3VuZFdvcmtlcigmYmd3LCAmYmd3X2hhbmRsZSkpCiAJewogCQkvKiBGYWlsZWQg dG8gc3RhcnQgd29ya2VyLCBzbyBjbGVhbiB1cCB0aGUgd29ya2VyIHNsb3QuICovCkBAIC00MjIs MzMgKzQ3NCwyMiBAQCByZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05f TElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2coIm91dCBvZiBiYWNrZ3JvdW5kIHdvcmtlciBz bG90cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfd29y a2VyX3Byb2Nlc3Nlcy4iKSkpOwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkv KiBOb3cgd2FpdCB1bnRpbCBpdCBhdHRhY2hlcy4gKi8KLQlXYWl0Rm9yUmVwbGljYXRpb25Xb3Jr ZXJBdHRhY2god29ya2VyLCBnZW5lcmF0aW9uLCBiZ3dfaGFuZGxlKTsKKwlyZXR1cm4gV2FpdEZv clJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJhdGlvbiwgYmd3X2hhbmRsZSk7 CiB9CiAKIC8qCi0gKiBTdG9wIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vi aWQvcmVsaWQsIGlmIGFueSwgYW5kIHdhaXQgdW50aWwKLSAqIGl0IGRldGFjaGVzIGZyb20gdGhl IHNsb3QuCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzdG9wIHRoZSB3b3JrZXIgYW5kIHdhaXQg Zm9yIGl0IHRvIGRpZS4KICAqLwotdm9pZAotbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3Vi aWQsIE9pZCByZWxpZCkKK3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVy bmFsKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIHsKLQlMb2dpY2FsUmVwV29ya2VyICp3b3Jr ZXI7CiAJdWludDE2CQlnZW5lcmF0aW9uOwogCi0JTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29y a2VyTG9jaywgTFdfU0hBUkVEKTsKLQotCXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQo c3ViaWQsIHJlbGlkLCBmYWxzZSk7Ci0KLQkvKiBObyB3b3JrZXIsIG5vdGhpbmcgdG8gZG8uICov Ci0JaWYgKCF3b3JrZXIpCi0JewotCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr KTsKLQkJcmV0dXJuOwotCX0KKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoTG9naWNhbFJl cFdvcmtlckxvY2ssIExXX1NIQVJFRCkpOwogCiAJLyoKIAkgKiBSZW1lbWJlciB3aGljaCBnZW5l cmF0aW9uIHdhcyBvdXIgd29ya2VyIHNvIHdlIGNhbiBjaGVjayBpZiB3aGF0IHdlIHNlZQpAQCAt NDg2LDEwICs1MjcsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJl bGlkKQogCQkgKiBkaWZmZXJlbnQsIG1lYW5pbmcgdGhhdCBhIGRpZmZlcmVudCB3b3JrZXIgaGFz IHRha2VuIHRoZSBzbG90LgogCQkgKi8KIAkJaWYgKCF3b3JrZXItPmluX3VzZSB8fCB3b3JrZXIt PmdlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikKLQkJewotCQkJTFdMb2NrUmVsZWFzZShMb2dpY2Fs UmVwV29ya2VyTG9jayk7CiAJCQlyZXR1cm47Ci0JCX0KIAogCQkvKiBXb3JrZXIgaGFzIGFzc2ln bmVkIHByb2MsIHNvIGl0IGhhcyBzdGFydGVkLiAqLwogCQlpZiAod29ya2VyLT5wcm9jKQpAQCAt NTIzLDYgKzU2MSw1MCBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJl bGlkKQogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7 CiAJfQorfQorCisvKgorICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9y IHN1YmlkL3JlbGlkLCBpZiBhbnksIGFuZCB3YWl0IHVudGlsCisgKiBpdCBkZXRhY2hlcyBmcm9t IHRoZSBzbG90LgorICovCit2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwg T2lkIHJlbGlkKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKKworCUxXTG9ja0FjcXVp cmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIgPSBsb2dpY2Fs cmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOworCisJaWYgKHdvcmtlcikKKwl7 CisJCUFzc2VydCghaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikpOworCQlsb2dpY2FscmVw X3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlcik7CisJfQorCisJTFdMb2NrUmVsZWFzZShMb2dp Y2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCBzbG90IG51bWJlciwKKyAqIGFu ZCB3YWl0IHVudGlsIGl0IGRldGFjaGVzIGZyb20gdGhlIHNsb3QuCisgKi8KK3ZvaWQKK2xvZ2lj YWxyZXBfd29ya2VyX3N0b3BfYnlfc2xvdChpbnQgc2xvdF9ubywgdWludDE2IGdlbmVyYXRpb24p Cit7CisJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOworCisJQXNzZXJ0KHNsb3Rfbm8gPj0wICYm IHNsb3Rfbm8gPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzKTsKKworCUxXTG9ja0Fj cXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIgPSAmTG9n aWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90X25vXTsKKworCS8qCisJICogT25seSBzdG9wIHRoZSB3 b3JrZXIgaWYgdGhlIGdlbmVyYXRpb24gbWF0Y2hlcyBhbmQgdGhlIHdvcmtlciBpcyBhbGl2ZS4K KwkgKi8KKwlpZiAod29ya2VyLT5nZW5lcmF0aW9uID09IGdlbmVyYXRpb24gJiYgd29ya2VyLT5w cm9jKQorCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlcik7CiAKIAlMV0xv Y2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIH0KQEAgLTU5NSwxMSArNjc3LDMyIEBA IGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIH0KIAogLyoKLSAqIERldGFjaCB0 aGUgd29ya2VyIChjbGVhbnMgdXAgdGhlIHdvcmtlciBpbmZvKS4KKyAqIFN0b3AgdGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMgaWYgYW55LCBhbmQgZGV0YWNoIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyCisgKiAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCiAgKi8KIHN0YXRpYyB2b2lkCiBs b2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKiBTdG9wIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXJzLiAqLworCWlmIChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJeworCQlM aXN0CSAgICp3b3JrZXJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlMV0xvY2tBY3F1aXJlKExv Z2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCisJCXdvcmtlcnMgPSBsb2dpY2FscmVw X3dvcmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFj aChsYywgd29ya2VycykKKwkJeworCQkJTG9naWNhbFJlcFdvcmtlciAqdyA9IChMb2dpY2FsUmVw V29ya2VyICopIGxmaXJzdChsYyk7CisKKwkJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykp CisJCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3KTsKKwkJfQorCisJCUxXTG9j a1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworCX0KKwogCS8qIEJsb2NrIGNvbmN1cnJl bnQgYWNjZXNzLiAqLwogCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX0VY Q0xVU0lWRSk7CiAKQEAgLTYyMiw2ICs3MjUsOCBAQCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVw KExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIAl3b3JrZXItPnVzZXJpZCA9IEludmFsaWRPaWQ7 CiAJd29ya2VyLT5zdWJpZCA9IEludmFsaWRPaWQ7CiAJd29ya2VyLT5yZWxpZCA9IEludmFsaWRP aWQ7CisJd29ya2VyLT5hcHBseV9sZWFkZXJfcGlkID0gSW52YWxpZFBpZDsKKwl3b3JrZXItPnBh cmFsbGVsX2FwcGx5ID0gZmFsc2U7CiB9CiAKIC8qCkBAIC02NTMsNiArNzU4LDEyIEBAIGxvZ2lj YWxyZXBfd29ya2VyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogCWlmIChNeUxvZ2ljYWxS ZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ICE9IE5VTEwpCiAJCUZpbGVTZXREZWxldGVBbGwoTXlM b2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CiAKKwkvKgorCSAqIFJlbGVhc2UgYWxs IHRoZSBzZXNzaW9uIGxldmVsIGxvY2sgdGhhdCBjb3VsZCBiZSBoZWxkIGluIHBhcmFsbGVsIGFw cGx5CisJICogbW9kZS4KKwkgKi8KKwlMb2NrUmVsZWFzZUFsbChERUZBVUxUX0xPQ0tNRVRIT0Qs IHRydWUpOworCiAJQXBwbHlMYXVuY2hlcldha2V1cCgpOwogfQogCkBAIC02ODEsNiArNzkyLDMz IEBAIGxvZ2ljYWxyZXBfc3luY193b3JrZXJfY291bnQoT2lkIHN1YmlkKQogfQogCiAvKgorICog Q291bnQgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIChidXQgbm90IG5lY2Vzc2FyaWx5IHJ1bm5p bmcpIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXJzIGZvciBhIHN1YnNjcmlwdGlvbi4KKyAqLwor aW50Citsb2dpY2FscmVwX3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChPaWQgc3ViaWQpCit7 CisJaW50CQkJaTsKKwlpbnQJCQlyZXMgPSAwOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKExv Z2ljYWxSZXBXb3JrZXJMb2NrKSk7CisKKwkvKgorCSAqIFNjYW4gYWxsIGF0dGFjaGVkIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMsIG9ubHkgY291bnRpbmcgdGhvc2Ugd2hpY2gKKwkgKiBoYXZlIHRo ZSBnaXZlbiBzdWJzY3JpcHRpb24gaWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heF9sb2dp Y2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7IGkrKykKKwl7CisJCUxvZ2ljYWxSZXBXb3JrZXIgKncg PSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKKworCQlpZiAody0+c3ViaWQgPT0gc3ViaWQg JiYgaXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJcmVzKys7CisJfQorCisJcmV0dXJuIHJl czsKK30KKworLyoKICAqIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUKICAqCQlDb21wdXRlIHNwYWNl IG5lZWRlZCBmb3IgcmVwbGljYXRpb24gbGF1bmNoZXIgc2hhcmVkIG1lbW9yeQogICovCkBAIC04 NjksNyArMTAwNyw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkJCQl3 YWl0X3RpbWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJbG9naWNhbHJl cF93b3JrZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJ CQkJIHN1Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52 YWxpZE9pZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTk1Miw2ICsx MDkwLDEwIEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQlp ZiAoT2lkSXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9IHN1YmlkKQogCQkJY29udGlu dWU7CiAKKwkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyICovCisJ CWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCisJCQljb250aW51ZTsKKwogCQl3 b3JrZXJfcGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1ZXNbMF0gPSBPYmplY3RJZEdl dERhdHVtKHdvcmtlci5zdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9t ZXNvbi5idWlsZAppbmRleCA3NzM1ODNhLi4yNmJmYzBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNCArMSw1IEBACiBiYWNrZW5kX3NvdXJj ZXMgKz0gZmlsZXMoCisgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGVjb2RlLmMnLAog ICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvb3JpZ2luLmMKaW5kZXggZjEzNGU0NC4uZWNhMjdiNiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDc1LDEyICsxMDc1LDIxIEBAIFJlcGxpY2F0 aW9uT3JpZ2luRXhpdENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKICAqIGFycmF5IGRvZXNu J3QgaGF2ZSB0byBiZSBzZWFyY2hlZCB3aGVuIGNhbGxpbmcKICAqIHJlcGxvcmlnaW5fc2Vzc2lv bl9hZHZhbmNlKCkuCiAgKgotICogT2J2aW91c2x5IG9ubHkgb25lIHN1Y2ggY2FjaGVkIG9yaWdp biBjYW4gZXhpc3QgcGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50CisgKiBOb3JtYWxseSBvbmx5 IG9uZSBzdWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIGFuZCB0aGUgY3Vy cmVudAogICogY2FjaGVkIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2FpbiBhZnRlciB0aGUgcHJl dmlvdXMgdmFsdWUgaXMgdG9ybiBkb3duCiAgKiB3aXRoIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNl dCgpLgorICoKKyAqIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgJ2FjcXVpcmVk X2J5JyBpcyBub3QgMCwgd2UgYWxsb3cgdGhlCisgKiBwcm9jZXNzIHRvIHVzZSB0aGUgc2FtZSBz bG90IGFscmVhZHkgYWNxdWlyZWQgYnkgYW5vdGhlciBwcm9jZXNzLiBJdCdzIHNhZmUKKyAqIGJl Y2F1c2UgMSkgVGhlIG9ubHkgY2FsbGVyIChwYXJhbGxlbCBhcHBseSB3b3JrZXJzKSB3aWxsIG1h aW50YWluIHRoZQorICogY29tbWl0IG9yZGVyIGJ5IGFsbG93aW5nIG9ubHkgb25lIHByb2Nlc3Mg dG8gY29tbWl0IGF0IGEgdGltZSwgc28gbm8gdHdvCisgKiB3b3JrZXJzIHdpbGwgYmUgb3BlcmF0 aW5nIG9uIHRoZSBzYW1lIG9yaWdpbiBhdCB0aGUgc2FtZSB0aW1lIChzZWUgY29tbWVudHMKKyAq IGluIGxvZ2ljYWwvd29ya2VyLmMpLiAyKSBFdmVuIHRob3VnaCB3ZSB0cnkgdG8gYWR2YW5jZSB0 aGUgc2Vzc2lvbidzIG9yaWdpbgorICogY29uY3VycmVudGx5LCBpdCdzIHNhZmUgdG8gZG8gc28g YXMgd2UgY2hhbmdlL2FkdmFuY2UgdGhlIHNlc3Npb25fb3JpZ2luCisgKiBMU05zIHVuZGVyIHJl cGxpY2F0ZV9zdGF0ZSBMV0xvY2suCiAgKi8KIHZvaWQKLXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1 cChSZXBPcmlnaW5JZCBub2RlKQorcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklk IG5vZGUsIGludCBhY3F1aXJlZF9ieSkKIHsKIAlzdGF0aWMgYm9vbCByZWdpc3RlcmVkX2NsZWFu dXA7CiAJaW50CQkJaTsKQEAgLTExMjIsNyArMTEzMSw3IEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9z ZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCQlpZiAoY3Vyc3RhdGUtPnJvaWRlbnQgIT0gbm9kZSkK IAkJCWNvbnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwKQor CQllbHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCAmJiBhY3F1aXJlZF9ieSA9PSAw KQogCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9J Tl9VU0UpLApAQCAtMTE1Myw3ICsxMTYyLDExIEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChS ZXBPcmlnaW5JZCBub2RlKQogCiAJQXNzZXJ0KHNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPnJv aWRlbnQgIT0gSW52YWxpZFJlcE9yaWdpbklkKTsKIAotCXNlc3Npb25fcmVwbGljYXRpb25fc3Rh dGUtPmFjcXVpcmVkX2J5ID0gTXlQcm9jUGlkOworCWlmIChhY3F1aXJlZF9ieSA9PSAwKQorCQlz ZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSA9IE15UHJvY1BpZDsKKwllbHNl IGlmIChzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSAhPSBhY3F1aXJlZF9i eSkKKwkJIGVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCByZXBsaWNhdGlvbiBzdGF0ZSBzbG90 IGZvciByZXBsaWNhdGlvbiIKKwkJCSAgIm9yaWdpbiB3aXRoIE9JRCAldSB3aGljaCB3YXMgYWNx dWlyZWQgYnkgJWQiLCBub2RlLCBhY3F1aXJlZF9ieSk7CiAKIAlMV0xvY2tSZWxlYXNlKFJlcGxp Y2F0aW9uT3JpZ2luTG9jayk7CiAKQEAgLTEzMzcsNyArMTM1MCw3IEBAIHBnX3JlcGxpY2F0aW9u X29yaWdpbl9zZXNzaW9uX3NldHVwKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAluYW1lID0gdGV4dF90 b19jc3RyaW5nKCh0ZXh0ICopIERhdHVtR2V0UG9pbnRlcihQR19HRVRBUkdfREFUVU0oMCkpKTsK IAlvcmlnaW4gPSByZXBsb3JpZ2luX2J5X25hbWUobmFtZSwgZmFsc2UpOwotCXJlcGxvcmlnaW5f c2Vzc2lvbl9zZXR1cChvcmlnaW4pOworCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW4s IDApOwogCiAJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbjsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGZmODUxM2UuLmQ2MTYwZTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTExNjMsMTAgKzExNjMsMTQg QEAgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJl cENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogLyoKICAqIFdyaXRlIFNUUkVBTSBBQk9SVCB0byB0 aGUgb3V0cHV0IHN0cmVhbS4gTm90ZSB0aGF0IHhpZCBhbmQgc3VieGlkIHdpbGwgYmUKICAqIHNh bWUgZm9yIHRoZSB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gYWJvcnQuCisgKgorICogSWYgd3JpdGVf YWJvcnRfaW5mbyBpcyB0cnVlLCBzZW5kIHRoZSBhYm9ydF9sc24gYW5kIGFib3J0X3RpbWUgZmll bGRzLAorICogb3RoZXJ3aXNlIGRvbid0LgogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX3N0 cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQkJICBU cmFuc2FjdGlvbklkIHN1YnhpZCkKKwkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkLCBYTG9n UmVjUHRyIGFib3J0X2xzbiwKKwkJCQkJCQkgIFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsIGJvb2wg d3JpdGVfYWJvcnRfaW5mbykKIHsKIAlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19T VFJFQU1fQUJPUlQpOwogCkBAIC0xMTc1LDE5ICsxMTc5LDQwIEBAIGxvZ2ljYWxyZXBfd3JpdGVf c3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkvKiB0cmFu c2FjdGlvbiBJRCAqLwogCXBxX3NlbmRpbnQzMihvdXQsIHhpZCk7CiAJcHFfc2VuZGludDMyKG91 dCwgc3VieGlkKTsKKworCWlmICh3cml0ZV9hYm9ydF9pbmZvKQorCXsKKwkJcHFfc2VuZGludDY0 KG91dCwgYWJvcnRfbHNuKTsKKwkJcHFfc2VuZGludDY0KG91dCwgYWJvcnRfdGltZSk7CisJfQog fQogCiAvKgogICogUmVhZCBTVFJFQU0gQUJPUlQgZnJvbSB0aGUgb3V0cHV0IHN0cmVhbS4KKyAq CisgKiBJZiByZWFkX2Fib3J0X2luZm8gaXMgdHJ1ZSwgcmVhZCB0aGUgYWJvcnRfbHNuIGFuZCBh Ym9ydF90aW1lIGZpZWxkcywKKyAqIG90aGVyd2lzZSBkb24ndC4KICAqLwogdm9pZAotbG9naWNh bHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFuc2FjdGlvbklkICp4aWQs Ci0JCQkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZCkKK2xvZ2ljYWxyZXBfcmVhZF9zdHJlYW1f YWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAq YWJvcnRfZGF0YSwKKwkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2luZm8pCiB7Ci0JQXNzZXJ0KHhp ZCAmJiBzdWJ4aWQpOworCUFzc2VydChhYm9ydF9kYXRhKTsKKworCWFib3J0X2RhdGEtPnhpZCA9 IHBxX2dldG1zZ2ludChpbiwgNCk7CisJYWJvcnRfZGF0YS0+c3VieGlkID0gcHFfZ2V0bXNnaW50 KGluLCA0KTsKIAotCSp4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOwotCSpzdWJ4aWQgPSBwcV9n ZXRtc2dpbnQoaW4sIDQpOworCWlmIChyZWFkX2Fib3J0X2luZm8pCisJeworCQlhYm9ydF9kYXRh LT5hYm9ydF9sc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJCWFib3J0X2RhdGEtPmFib3J0X3Rp bWUgPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJfQorCWVsc2UKKwl7CisJCWFib3J0X2RhdGEtPmFi b3J0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlhYm9ydF9kYXRhLT5hYm9ydF90aW1lID0g MDsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCmluZGV4IDIyYTE1YTQuLmE3MWMxMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC0yODQ2LDcgKzI4NDYsOCBA QCBSZW9yZGVyQnVmZmVyRmluaXNoUHJlcGFyZWQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0 aW9uSWQgeGlkLAogICogZGlzay4KICAqLwogdm9pZAotUmVvcmRlckJ1ZmZlckFib3J0KFJlb3Jk ZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCitSZW9yZGVy QnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGxzbiwKKwkJCQkgICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lKQogewogCVJlb3JkZXJCdWZm ZXJUWE4gKnR4bjsKIApAQCAtMjg1Nyw2ICsyODU4LDggQEAgUmVvcmRlckJ1ZmZlckFib3J0KFJl b3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJaWYg KHR4biA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwl0eG4tPnhhY3RfdGltZS5hYm9ydF90aW1lID0g YWJvcnRfdGltZTsKKwogCS8qIEZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgbm90aWZ5IHRoZSBy ZW1vdGUgbm9kZSBhYm91dCB0aGUgYWJvcnQuICovCiAJaWYgKHJidHhuX2lzX3N0cmVhbWVkKHR4 bikpCiAJewpAQCAtMjkzMSw3ICsyOTM0LDggQEAgUmVvcmRlckJ1ZmZlckFib3J0T2xkKFJlb3Jk ZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIG9sZGVzdFJ1bm5pbmdYaWQpCiAgKiB0byB0aGlz IHhpZCBtaWdodCByZS1jcmVhdGUgdGhlIHRyYW5zYWN0aW9uIGluY29tcGxldGVseS4KICAqLwog dm9pZAotUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQorUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQlUaW1lc3RhbXBU eiBhYm9ydF90aW1lKQogewogCVJlb3JkZXJCdWZmZXJUWE4gKnR4bjsKIApAQCAtMjk0Miw2ICsy OTQ2LDggQEAgUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rp b25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCWlmICh0eG4gPT0gTlVMTCkKIAkJcmV0dXJuOwog CisJdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSA9IGFib3J0X3RpbWU7CisKIAkvKiBGb3Igc3Ry ZWFtZWQgdHJhbnNhY3Rpb25zIG5vdGlmeSB0aGUgcmVtb3RlIG5vZGUgYWJvdXQgdGhlIGFib3J0 LiAqLwogCWlmIChyYnR4bl9pc19zdHJlYW1lZCh0eG4pKQogCQlyYi0+c3RyZWFtX2Fib3J0KHJi LCB0eG4sIGxzbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMu YwppbmRleCA5NGU4MTNhLi43MDg0MzUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqCSAgVGhlIGluaXRpYWwgZGF0 YSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSBzZXBhcmF0ZWx5IGZvciBlYWNoIHRhYmxlLAogICoJ ICBpbiBhIHNlcGFyYXRlIGFwcGx5IHdvcmtlciB0aGF0IG9ubHkgZmV0Y2hlcyB0aGUgaW5pdGlh bCBzbmFwc2hvdCBkYXRhCiAgKgkgIGZyb20gdGhlIHB1Ymxpc2hlciBhbmQgdGhlbiBzeW5jaHJv bml6ZXMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0gd2l0aAotICoJICB0aGUgbWFpbiBhcHBs eSB3b3JrZXIuCisgKgkgIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLgogICoKICAqCSAgVGhlcmUg YXJlIHNldmVyYWwgcmVhc29ucyBmb3IgZG9pbmcgdGhlIHN5bmNocm9uaXphdGlvbiB0aGlzIHdh eToKICAqCSAgIC0gSXQgYWxsb3dzIHVzIHRvIHBhcmFsbGVsaXplIHRoZSBpbml0aWFsIGRhdGEg c3luY2hyb25pemF0aW9uCkBAIC0xNTMsNyArMTUzLDcgQEAgZmluaXNoX3N5bmNfd29ya2VyKHZv aWQpCiAJCQkJCWdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKIAlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIEZpbmQgdGhlIG1haW4gYXBwbHkgd29y a2VyIGFuZCBzaWduYWwgaXQuICovCisJLyogRmluZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBh bmQgc2lnbmFsIGl0LiAqLwogCWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChNeUxvZ2ljYWxSZXBX b3JrZXItPnN1YmlkLCBJbnZhbGlkT2lkKTsKIAogCS8qIFN0b3AgZ3JhY2VmdWxseSAqLwpAQCAt NjA5LDcgKzYwOSw4IEBAIHByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQ dHIgY3VycmVudF9sc24pCiAJCQkJCQkJCQkJCQkgTXlTdWJzY3JpcHRpb24tPm9pZCwKIAkJCQkJ CQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwKIAkJCQkJCQkJCQkJCSBNeUxvZ2ljYWxSZXBX b3JrZXItPnVzZXJpZCwKLQkJCQkJCQkJCQkJCSByc3RhdGUtPnJlbGlkKTsKKwkJCQkJCQkJCQkJ CSByc3RhdGUtPnJlbGlkLAorCQkJCQkJCQkJCQkJIERTTV9IQU5ETEVfSU5WQUxJRCk7CiAJCQkJ CQloZW50cnktPmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKIAkJCQkJfQogCQkJCX0KQEAgLTYzMCw2 ICs2MzEsMTMgQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBj dXJyZW50X2xzbikKIHZvaWQKIHByb2Nlc3Nfc3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBjdXJy ZW50X2xzbikKIHsKKwkvKgorCSAqIFNraXAgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuIFNl ZSBwYXJhbGxlbF9hcHBseV9jYW5fc3RhcnQoKSBmb3IKKwkgKiBkZXRhaWxzLgorCSAqLworCWlm IChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOworCiAJaWYgKGFtX3RhYmxl c3luY193b3JrZXIoKSkKIAkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3Jfc3luYyhjdXJyZW50 X2xzbik7CiAJZWxzZQpAQCAtMTI0Nyw3ICsxMjU1LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0 YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAogCS8qCiAJICogSGVyZSB3ZSB1c2Ug dGhlIHNsb3QgbmFtZSBpbnN0ZWFkIG9mIHRoZSBzdWJzY3JpcHRpb24gbmFtZSBhcyB0aGUKLQkg KiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBtYWlu IGFwcGx5IHdvcmtlciwKKwkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZl cmVudCBmcm9tIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLAogCSAqIHNvIHRoYXQgc3luY2hyb25v dXMgcmVwbGljYXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCiAJICovCiAJTG9nUmVwV29ya2Vy V2FsUmN2Q29ubiA9CkBAIC0xMjk1LDcgKzEzMDMsNyBAQCBMb2dpY2FsUmVwU3luY1RhYmxlU3Rh cnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkgKiB0aW1lIHRoaXMgdGFibGVzeW5j IHdhcyBsYXVuY2hlZC4KIAkJICovCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9y aWdpbm5hbWUsIGZhbHNlKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsK KwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9z ZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQkqb3JpZ2luX3N0YXJ0cG9zID0gcmVwbG9yaWdp bl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAKQEAgLTE0MDYsNyArMTQxNCw3IEBAIExv Z2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCQkJ CQkgICB0cnVlIC8qIGdvIGJhY2t3YXJkICovICwgdHJ1ZSAvKiBXQUwgbG9nICovICk7CiAJCVVu bG9ja1JlbGF0aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CiAKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsKKwkJcmVwbG9y aWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbiA9IG9yaWdpbmlkOwogCX0KIAllbHNlCkBAIC0xNDYxLDggKzE0NjksOCBAQCBjb3B5X3Rh YmxlX2RvbmU6CiAJU3BpbkxvY2tSZWxlYXNlKCZNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbG11dGV4 KTsKIAogCS8qCi0JICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbWFpbiBhcHBseSB3b3JrZXIg dGVsbHMgdXMgdG8gY2F0Y2ggdXAgYW5kIHRoZW4KLQkgKiByZXR1cm4gdG8gbGV0IExvZ2ljYWxS ZXBBcHBseUxvb3AgZG8gaXQuCisJICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbGVhZGVyIGFw cGx5IHdvcmtlciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQKKwkgKiB0aGVuIHJldHVybiB0byBs ZXQgTG9naWNhbFJlcEFwcGx5TG9vcCBkbyBpdC4KIAkgKi8KIAl3YWl0X2Zvcl93b3JrZXJfc3Rh dGVfY2hhbmdlKFNVQlJFTF9TVEFURV9DQVRDSFVQKTsKIAlyZXR1cm4gc2xvdG5hbWU7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCBlNDhhM2Y1Li5iMjA4NWEx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTIyLDggKzIy LDU0IEBACiAgKiBTVFJFQU1FRCBUUkFOU0FDVElPTlMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICogU3RyZWFtZWQgdHJhbnNhY3Rpb25zIChsYXJnZSB0cmFuc2FjdGlvbnMgZXhjZWVkaW5n IGEgbWVtb3J5IGxpbWl0IG9uIHRoZQotICogdXBzdHJlYW0pIGFyZSBub3QgYXBwbGllZCBpbW1l ZGlhdGVseSwgYnV0IGluc3RlYWQsIHRoZSBkYXRhIGlzIHdyaXR0ZW4KLSAqIHRvIHRlbXBvcmFy eSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwgY29tbWl0IGFy cml2ZXMuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdXNpbmcgb25lIG9mIHR3byBhcHByb2Fj aGVzOgorICoKKyAqIDEpIFBhcmFsbGVsIGFwcGx5IHdvcmtlcnMKKyAqCisgKiBJZiBzdHJlYW1p bmcgPSBwYXJhbGxlbCwgd2UgYXNzaWduIGEgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtlciAoaWYK KyAqIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUgeGFjdCdzIGZpcnN0IHN0cmVhbSBpcyByZWNl aXZlZC4gVGhlIGxlYWRlciBhcHBseQorICogd29ya2VyIHdpbGwgc2VuZCBjaGFuZ2VzIHRvIHRo aXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0aGlzCisgKiB3b3JrZXIg YXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHJlY2VpdmVkIGFuZCBhbHNv IHdhaXQgZm9yCisgKiB0aGUgd29ya2VyIHRvIGZpbmlzaCBhdCBjb21taXQuIFRoaXMgcHJlc2Vy dmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWRzCisgKiBmaWxlIEkvTyBpbiBtb3N0IGNhc2Vz LCBhbHRob3VnaCB3ZSBzdGlsbCBuZWVkIHRvIHNwaWxsIHRvIGEgZmlsZSBpZiB0aGVyZQorICog aXMgbm8gd29ya2VyIGF2YWlsYWJsZS4gSXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIGNvbW1p dCBvcmRlciB0byBhdm9pZAorICogZmFpbHVyZXMgZHVlIHRvIChhKSB0cmFuc2FjdGlvbiBkZXBl bmRlbmNpZXMsIHNheSBpZiB3ZSBpbnNlcnQgYSByb3cgaW4gdGhlCisgKiBmaXJzdCB0cmFuc2Fj dGlvbiBhbmQgdXBkYXRlIGl0IGluIHRoZSBzZWNvbmQgdHJhbnNhY3Rpb24gdGhlbiBhbGxvd2lu ZyB0bworICogYXBwbHkgYm90aCBpbiBwYXJhbGxlbCBjYW4gbGVhZCB0byBmYWlsdXJlIGluIHRo ZSB1cGRhdGUuIChiKSBkZWFkbG9ja3MsCisgKiBhbGxvd2luZyB0cmFuc2FjdGlvbnMgdGhhdCB1 cGRhdGUgdGhlIHNhbWUgc2V0IG9mIHJvd3MvdGFibGVzIGluIG9wcG9zaXRlCisgKiBvcmRlciB0 byBiZSBhcHBsaWVkIGluIHBhcmFsbGVsIGNhbiBsZWFkIHRvIGRlYWRsb2Nrcy4KKyAqCisgKiBX ZSBtYWludGFpbiBhIHdvcmtlciBwb29sIHRvIGF2b2lkIHJlc3RhcnRpbmcgd29ya2VycyBmb3Ig ZWFjaCBzdHJlYW1pbmcKKyAqIHRyYW5zYWN0aW9uLiBXZSBtYWludGFpbiBlYWNoIHdvcmtlcidz IGluZm9ybWF0aW9uIGluIHRoZQorICogUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0LiBBZnRlciBz dWNjZXNzZnVsbHkgbGF1bmNoaW5nIGEgbmV3IHdvcmtlciwgaXRzCisgKiBpbmZvcm1hdGlvbiBp cyBhZGRlZCB0byB0aGUgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0LiBPbmNlIHRoZSB3b3JrZXIK KyAqIGZpbmlzaGVzIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbiwgd2UgbWFyayBpdCBhdmFpbGFi bGUgZm9yIHJlLXVzZS4gTm93LAorICogYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHdvcmtlciB0byBh cHBseSB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBjaGVjaworICogdGhlIGxpc3QgZm9y IGFueSBhdmFpbGFibGUgd29ya2VyLiBOb3RlIHRoYXQgd2UgbWFpbnRhaW4gYSBtYXhpbXVtIG9m IGhhbGYKKyAqIHRoZSBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9u IHdvcmtlcnMgaW4gdGhlIHBvb2wgYW5kCisgKiBhZnRlciB0aGF0LCB3ZSBzaW1wbHkgZXhpdCB0 aGUgd29ya2VyIGFmdGVyIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBYWFggVGhp cyB3b3JrZXIgcG9vbCB0aHJlc2hvbGQgaXMgYSBiaXQgYXJiaXRyYXJ5IGFuZCB3ZSBjYW4gcHJv dmlkZSBhIEdVQworICogdmFyaWFibGUgZm9yIHRoaXMgaW4gdGhlIGZ1dHVyZSBpZiByZXF1aXJl ZC4KKyAqCisgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIGNyZWF0ZSBzZXBhcmF0ZSBk eW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudAorICogd2hlbiBlYWNoIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBzdGFydHMuIFRoZSByZWFzb24gZm9yIHRoaXMgZGVzaWduIGlzIHRoYXQKKyAqIHdl IGNhbm5vdCBjb3VudCBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgc3RhcnRlZC4gSXQgbWF5IGJl IHBvc3NpYmxlIHRvCisgKiBhbGxvY2F0ZSBlbm91Z2ggc2hhcmVkIG1lbW9yeSBpbiBvbmUgc2Vn bWVudCBiYXNlZCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAqIHBhcmFsbGVsIGFwcGx5IHdv cmtlcnMgKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pLCBidXQg dGhpcworICogd291bGQgd2FzdGUgbWVtb3J5IGlmIG5vIHByb2Nlc3MgaXMgYWN0dWFsbHkgc3Rh cnRlZC4KKyAqCisgKiBUaGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgd2lsbCBjb250 YWluIChhKSBhIHNobV9tcSB0aGF0IGlzIHVzZWQgdG8KKyAqIHNlbmQgY2hhbmdlcyBpbiB0aGUg dHJhbnNhY3Rpb24gZnJvbSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIHBhcmFsbGVsIGFwcGx5Cisg KiB3b3JrZXIgKGIpIGFub3RoZXIgc2htX21xIHRoYXQgaXMgdXNlZCB0byBzZW5kIGVycm9ycyAo YW5kIG90aGVyIG1lc3NhZ2VzCisgKiByZXBvcnRlZCB2aWEgZWxvZy9lcmVwb3J0KSBmcm9tIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyIGFwcGx5CisgKiB3b3JrZXIgKGMpIG5l Y2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBiZSBzaGFyZWQgYW1vbmcgcGFyYWxsZWwgYXBwbHkgd29y a2VycworICogYW5kIGxlYWRlciBhcHBseSB3b3JrZXIgKGkuZS4gbWVtYmVycyBpbiBQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkKS4KKyAqCisgKiBJZiBubyBwYXJhbGxlbCBhcHBseSB3b3JrZXIg aXMgYXZhaWxhYmxlIHRvIGhhbmRsZSB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24KKyAqIHdlIGZv bGxvdyBhcHByb2FjaCAyLgorICoKKyAqIDIpIFdyaXRlIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQg YXBwbHkgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMKICAqCiAgKiBVbmxpa2UgdGhlIHJl Z3VsYXIgKG5vbi1zdHJlYW1lZCkgY2FzZSwgaGFuZGxpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb25z IGhhcwogICogdG8gaGFuZGxlIGFib3J0cyBvZiBib3RoIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlv biBhbmQgc3VidHJhbnNhY3Rpb25zLiBUaGlzCkBAIC0yMTksMjAgKzI2NSw1MyBAQCB0eXBlZGVm IHN0cnVjdCBBcHBseUV4ZWN1dGlvbkRhdGEKIAlQYXJ0aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0 ZTsJLyogcGFydGl0aW9uIHJvdXRpbmcgaW5mbyAqLwogfSBBcHBseUV4ZWN1dGlvbkRhdGE7CiAK LS8qIFN0cnVjdCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYXBwbHkgZXJyY29udGV4dCBpbmZv cm1hdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJvckNhbGxiYWNrQXJnCisvKgorICog V2hhdCBhY3Rpb24gdG8gdGFrZSBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICoKKyAqIFRSQU5TX0xF QURFUl9BUFBMWToKKyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRl ciBhcHBseSB3b3JrZXIgYW5kIGNoYW5nZXMgb2YgdGhlCisgKiB0cmFuc2FjdGlvbiBhcmUgYXBw bGllZCBkaXJlY3RseSBpbiB0aGUgd29ya2VyLgorICoKKyAqIFRSQU5TX0xFQURFUl9TRVJJQUxJ WkU6CisgKiBJdCBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBv ciB0YWJsZSBzeW5jIHdvcmtlci4KKyAqIENoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5 IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgd2hlbiB0aGUgZmluYWwKKyAqIGNvbW1pdCBhcnJpdmVz LgorICoKKyAqIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKyAqIFRoZSBhY3Rpb24g bWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGhhdmUgc2Vu dCBzb21lCisgKiBjaGFuZ2VzIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIGJ1dCB0aGUg cmVtYWluaW5nIGNoYW5nZXMgbmVlZCB0byBiZQorICogc2VyaWFsaXplZCB0byBkaXNrIGR1ZSB0 byB0aW1lb3V0IHdoaWxlIHNlbmRpbmcgZGF0YSwgYW5kIHRoZSBwYXJhbGxlbCBhcHBseQorICog d29ya2VyIHdpbGwgYXBwbHkgdGhlc2UgY2hhbmdlcyB3aGVuIHRoZSBmaW5hbCBjb21taXQgYXJy aXZlcy4KKyAqCisgKiBPbmUgbWlnaHQgdGhpbmsgd2UgY2FuIHVzZSBMRUFERVJfU0VSSUFMSVpF IGRpcmVjdGx5LiBCdXQgaW4gcGFydGlhbAorICogc2VyaWFsaXplIG1vZGUsIGluIGFkZGl0aW9u IHRvIHNlcmlhbGl6aW5nIGNoYW5nZXMgdG8gZmlsZSwgdGhlIGxlYWRlcgorICogd29ya2VyIG5l ZWQgdG8gd3JpdGUgdGhlIFNUUkVBTV9YWFggbWVzc2FnZSB0byBkaXNrLCBhbmQgbmVlZCB0byB3 YWl0IGZvcgorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIGZpbmlzaCB0aGUgdHJhbnNhY3Rp b24gd2hlbiBwcm9jZXNzaW5nIHRoZQorICogdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQuIFNv IGEgbmV3IGFjdGlvbiB3YXMgaW50cm9kdWNlZCB0byBtYWtlIHRoZSBsb2dpYworICogY2xlYXJl ci4KKyAqCisgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKyAqIFRoZSBhY3Rpb24g bWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIG5lZWQgdG8g c2VuZCB0aGUKKyAqIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqCisg KiBUUkFOU19QQVJBTExFTF9BUFBMWToKKyAqIFRoZSBhY3Rpb24gdGhhdCB3ZSBhcmUgaW4gdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBhbmQgY2hhbmdlcyBvZiB0aGUKKyAqIHRyYW5zYWN0aW9u IGFyZSBhcHBsaWVkIGRpcmVjdGx5IGluIHRoZSB3b3JrZXIuCisgKi8KK3R5cGVkZWYgZW51bQog ewotCUxvZ2ljYWxSZXBNc2dUeXBlIGNvbW1hbmQ7CS8qIDAgaWYgaW52YWxpZCAqLwotCUxvZ2lj YWxSZXBSZWxNYXBFbnRyeSAqcmVsOwotCi0JLyogUmVtb3RlIG5vZGUgaW5mb3JtYXRpb24gKi8K LQlpbnQJCQlyZW1vdGVfYXR0bnVtOwkvKiAtMSBpZiBpbnZhbGlkICovCi0JVHJhbnNhY3Rpb25J ZCByZW1vdGVfeGlkOwotCVhMb2dSZWNQdHIJZmluaXNoX2xzbjsKLQljaGFyCSAgICpvcmlnaW5f bmFtZTsKLX0gQXBwbHlFcnJvckNhbGxiYWNrQXJnOwotCi1zdGF0aWMgQXBwbHlFcnJvckNhbGxi YWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CisJLyogVGhlIGFjdGlvbiBmb3Igbm9u LXN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVSX0FQUExZLAorCisJLyog QWN0aW9ucyBmb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4gKi8KKwlUUkFOU19MRUFERVJfU0VS SUFMSVpFLAorCVRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSwKKwlUUkFOU19MRUFERVJf U0VORF9UT19QQVJBTExFTCwKKwlUUkFOU19QQVJBTExFTF9BUFBMWQorfSBUcmFuc0FwcGx5QWN0 aW9uOworCisvKiBlcnJjb250ZXh0IHRyYWNrZXIgKi8KK0FwcGx5RXJyb3JDYWxsYmFja0FyZyBh cHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQogewogCS5jb21tYW5kID0gMCwKIAkucmVsID0gTlVM TCwKQEAgLTI0Miw3ICszMjEsOSBAQCBzdGF0aWMgQXBwbHlFcnJvckNhbGxiYWNrQXJnIGFwcGx5 X2Vycm9yX2NhbGxiYWNrX2FyZyA9CiAJLm9yaWdpbl9uYW1lID0gTlVMTCwKIH07CiAKLXN0YXRp YyBNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxMOworRXJyb3JDb250ZXh0 Q2FsbGJhY2sgKmFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2sgPSBOVUxMOworCitNZW1vcnlDb250 ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxMOwogTWVtb3J5Q29udGV4dCBBcHBseUNvbnRl eHQgPSBOVUxMOwogCiAvKiBwZXIgc3RyZWFtIGNvbnRleHQgZm9yIHN0cmVhbWluZyB0cmFuc2Fj dGlvbnMgKi8KQEAgLTI1MSwyNyArMzMyLDM2IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IExvZ2lj YWxTdHJlYW1pbmdDb250ZXh0ID0gTlVMTDsKIFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2Vy V2FsUmN2Q29ubiA9IE5VTEw7CiAKIFN1YnNjcmlwdGlvbiAqTXlTdWJzY3JpcHRpb24gPSBOVUxM Owotc3RhdGljIGJvb2wgTXlTdWJzY3JpcHRpb25WYWxpZCA9IGZhbHNlOworYm9vbAkJTXlTdWJz Y3JpcHRpb25WYWxpZCA9IGZhbHNlOwogCiBib29sCQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBm YWxzZTsKIHN0YXRpYyBYTG9nUmVjUHRyIHJlbW90ZV9maW5hbF9sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKIAogLyogZmllbGRzIHZhbGlkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHN0cmVhbWVkIHRy YW5zYWN0aW9uICovCi1zdGF0aWMgYm9vbCBpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNl OworYm9vbCBpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwogCi1zdGF0aWMgVHJhbnNh Y3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CitUcmFuc2FjdGlvbklk IHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKworLyoKKyAqIFRoZSBudW1iZXIg b2YgY2hhbmdlcyBzZW50IHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgZHVyaW5nIG9uZSBzdHJl YW1pbmcKKyAqIGJsb2NrLgorICovCitzdGF0aWMgdWludDMyIHBhcmFsbGVsX3N0cmVhbV9uY2hh bmdlcyA9IDA7CiAKIC8qCiAgKiBXZSBlbmFibGUgc2tpcHBpbmcgYWxsIGRhdGEgbW9kaWZpY2F0 aW9uIGNoYW5nZXMgKElOU0VSVCwgVVBEQVRFLCBldGMuKSBmb3IKICAqIHRoZSBzdWJzY3JpcHRp b24gaWYgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbidzIGZpbmlzaCBMU04gbWF0Y2hlcyB0aGUgc3Vi c2tpcGxzbi4KICAqIE9uY2Ugd2Ugc3RhcnQgc2tpcHBpbmcgY2hhbmdlcywgd2UgZG9uJ3Qgc3Rv cCBpdCB1bnRpbCB3ZSBza2lwIGFsbCBjaGFuZ2VzIG9mCiAgKiB0aGUgdHJhbnNhY3Rpb24gZXZl biBpZiBwZ19zdWJzY3JpcHRpb24gaXMgdXBkYXRlZCBhbmQgTXlTdWJzY3JpcHRpb24tPnNraXBs c24KLSAqIGdldHMgY2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFt aW5nIHRyYW5zYWN0aW9uIGNhc2VzLCB3ZQotICogZG9uJ3Qgc2tpcCByZWNlaXZpbmcgYW5kIHNw b29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lkZSB3aGV0aGVyIG9yIG5vdAorICogZ2V0 cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0LiBBbHNvLCBpbiBzdHJlYW1pbmcgdHJhbnNh Y3Rpb24gY2FzZXMgKHN0cmVhbWluZyA9IG9uKSwKKyAqIHdlIGRvbid0IHNraXAgcmVjZWl2aW5n IGFuZCBzcG9vbGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QK ICAqIHRvIHNraXAgYXBwbHlpbmcgdGhlIGNoYW5nZXMgd2hlbiBzdGFydGluZyB0byBhcHBseSBj aGFuZ2VzLiBUaGUgc3Vic2tpcGxzbiBpcwogICogY2xlYXJlZCBhZnRlciBzdWNjZXNzZnVsbHkg c2tpcHBpbmcgdGhlIHRyYW5zYWN0aW9uIG9yIGFwcGx5aW5nIG5vbi1lbXB0eQogICogdHJhbnNh Y3Rpb24uIFRoZSBsYXR0ZXIgcHJldmVudHMgdGhlIG1pc3Rha2VubHkgc3BlY2lmaWVkIHN1YnNr aXBsc24gZnJvbQotICogYmVpbmcgbGVmdC4KKyAqIGJlaW5nIGxlZnQuIE5vdGUgdGhhdCB3ZSBj YW5ub3Qgc2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB3aGVuIHVzaW5nCisgKiBwYXJh bGxlbCBhcHBseSB3b3JrZXJzIGJlY2F1c2Ugd2UgY2Fubm90IGdldCB0aGUgZmluaXNoIExTTiBi ZWZvcmUgYXBwbHlpbmcKKyAqIHRoZSBjaGFuZ2VzLiBTbywgd2UgZG9uJ3Qgc3RhcnQgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIHdoZW4gZmluaXNoIExTTiBpcyBzZXQKKyAqIGJ5IHRoZSB1c2VyLgog ICovCiBzdGF0aWMgWExvZ1JlY1B0ciBza2lwX3hhY3RfZmluaXNoX2xzbiA9IEludmFsaWRYTG9n UmVjUHRyOwogI2RlZmluZSBpc19za2lwcGluZ19jaGFuZ2VzKCkgKHVubGlrZWx5KCFYTG9nUmVj UHRySXNJbnZhbGlkKHNraXBfeGFjdF9maW5pc2hfbHNuKSkpCkBAIC0zMTQsMjAgKzQwNCwxNiBA QCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW51cF9zdWJ4YWN0X2luZm8odm9pZCk7CiBzdGF0aWMg dm9pZCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKTsK IHN0YXRpYyB2b2lkIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJCQkJCQkgYm9vbCBmaXJzdF9zZWdtZW50KTsKLXN0YXRpYyB2b2lkIHN0cmVhbV93cml0 ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7CitzdGF0aWMgdm9pZCBzdHJlYW1f d3JpdGVfbWVzc2FnZShUcmFuc2FjdGlvbklkIHhpZCwgY2hhciBhY3Rpb24sIFN0cmluZ0luZm8g cywKKwkJCQkJCQkJIGJvb2wgY3JlYXRlX2ZpbGUpOwogc3RhdGljIHZvaWQgc3RyZWFtX2Nsb3Nl X2ZpbGUodm9pZCk7CiAKIHN0YXRpYyB2b2lkIHNlbmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2 cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSk7CiAKIHN0YXRpYyB2b2lkIHN0b3Jl X2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbik7CiAKLXN0YXRpYyB2b2lkIG1h eWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7Ci0KIHN0YXRpYyB2b2lkIERpc2FibGVTdWJz Y3JpcHRpb25BbmRFeGl0KHZvaWQpOwogCi0vKiBwcm90b3R5cGUgbmVlZGVkIGJlY2F1c2Ugb2Yg c3RyZWFtX2NvbW1pdCAqLwotc3RhdGljIHZvaWQgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBz KTsKLQogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbChMb2dpY2FsUmVw Q29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOwogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2luc2Vy dF9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJCQkJCQkJCSBSZXN1bHRS ZWxJbmZvICpyZWxpbmZvLApAQCAtMzUxLDE5ICs0MzcsMjAgQEAgc3RhdGljIHZvaWQgYXBwbHlf aGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIC8qIENvbXB1 dGUgR0lEIGZvciB0d29fcGhhc2UgdHJhbnNhY3Rpb25zICovCiBzdGF0aWMgdm9pZCBUd29QaGFz ZVRyYW5zYWN0aW9uR2lkKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKmdpZCwg aW50IHN6Z2lkKTsKIAotLyogQ29tbW9uIHN0cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwg dGhlIHNwb29sZWQgbWVzc2FnZXMgKi8KLXN0YXRpYyB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2Fn ZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKLQogLyogRnVuY3Rpb25zIGZv ciBza2lwcGluZyBjaGFuZ2VzICovCiBzdGF0aWMgdm9pZCBtYXliZV9zdGFydF9za2lwcGluZ19j aGFuZ2VzKFhMb2dSZWNQdHIgZmluaXNoX2xzbik7CiBzdGF0aWMgdm9pZCBzdG9wX3NraXBwaW5n X2NoYW5nZXModm9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24o WExvZ1JlY1B0ciBmaW5pc2hfbHNuKTsKIAogLyogRnVuY3Rpb25zIGZvciBhcHBseSBlcnJvciBj YWxsYmFjayAqLwotc3RhdGljIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsK IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KFRyYW5zYWN0 aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBw bHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpOwogCitzdGF0aWMgVHJhbnNBcHBseUFjdGlvbiBn ZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJ CQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKKworc3RhdGljIGNvbnN0IGNo YXIgKmdldF93b3JrZXJfbmFtZSh2b2lkKTsKKwogLyoKICAqIEZvcm0gdGhlIG9yaWdpbiBuYW1l IGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoKQEAgLTM5MywxOSArNDgwLDQzIEBAIFJlcGxpY2F0 aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoT2lkIHN1Ym9pZCwgT2lkIHJlbGlkLAogICoKICAq IFRoaXMgaXMgbWFpbmx5IG5lZWRlZCBmb3IgaW5pdGlhbCByZWxhdGlvbiBkYXRhIHN5bmMgYXMg dGhhdCBydW5zIGluCiAgKiBzZXBhcmF0ZSB3b3JrZXIgcHJvY2VzcyBydW5uaW5nIGluIHBhcmFs bGVsIGFuZCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHNraXAKLSAqIGNoYW5nZXMgY29taW5nIHRvIHRo ZSBtYWluIGFwcGx5IHdvcmtlciBkdXJpbmcgdGhlIHN5bmMgb2YgYSB0YWJsZS4KKyAqIGNoYW5n ZXMgY29taW5nIHRvIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGR1cmluZyB0aGUgc3luYyBvZiBh IHRhYmxlLgogICoKICAqIE5vdGUgd2UgbmVlZCB0byBkbyBzbWFsbGVyIG9yIGVxdWFscyBjb21w YXJpc29uIGZvciBTWU5DRE9ORSBzdGF0ZSBiZWNhdXNlCiAgKiBpdCBtaWdodCBob2xkIHBvc2l0 aW9uIG9mIGVuZCBvZiBpbml0aWFsIHNsb3QgY29uc2lzdGVudCBwb2ludCBXQUwKICAqIHJlY29y ZCArIDEgKGllIHN0YXJ0IG9mIG5leHQgcmVjb3JkKSBhbmQgbmV4dCByZWNvcmQgY2FuIGJlIENP TU1JVCBvZgogICogdHJhbnNhY3Rpb24gd2UgYXJlIG5vdyBwcm9jZXNzaW5nICh3aGljaCBpcyB3 aGF0IHdlIHNldCByZW1vdGVfZmluYWxfbHNuCiAgKiB0byBpbiBhcHBseV9oYW5kbGVfYmVnaW4p LgorICoKKyAqIE5vdGUgdGhhdCBmb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBi ZWluZyBhcHBsaWVkIGluIHRoZSBwYXJhbGxlbAorICogYXBwbHkgd29ya2VyLCB3ZSBkaXNhbGxv dyBhcHBseWluZyBjaGFuZ2VzIG9uIGEgdGFibGUgdGhhdCBpcyBub3QgaW4KKyAqIHRoZSBSRUFE WSBzdGF0ZSwgYmVjYXVzZSB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNo YW5nZSBhcyB3ZQorICogd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNuIGJ5IHRoYXQgdGltZS4K KyAqCisgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBpbiBwYXJhbGxlbF9hcHBseV9jYW5fc3Rh cnQoKSBiZWZvcmUgYXNzaWduaW5nIHRoZQorICogc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIHRo ZSBwYXJhbGxlbCB3b3JrZXIsIGJ1dCBpdCBhbHNvIG5lZWRzIHRvIGJlCisgKiBjaGVja2VkIGhl cmUgYmVjYXVzZSBpZiB0aGUgdXNlciBleGVjdXRlcyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJF RlJFU0gKKyAqIFBVQkxJQ0FUSU9OIGluIHBhcmFsbGVsLCB0aGUgbmV3IHRhYmxlIGNhbiBiZSBh ZGRlZCB0byBwZ19zdWJzY3JpcHRpb25fcmVsCisgKiB3aGlsZSBhcHBseWluZyB0aGlzIHRyYW5z YWN0aW9uLgogICovCiBzdGF0aWMgYm9vbAogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbChM b2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCkKIHsKIAlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigp KQogCQlyZXR1cm4gTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCA9PSByZWwtPmxvY2FscmVsb2lk OworCWVsc2UgaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJaWYgKHJlbC0+ c3RhdGUgIT0gU1VCUkVMX1NUQVRFX1JFQURZKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkvKiB0 cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtlciAqLworCQkJCQkgZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0 b3AiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSksCisJ CQkJCSBlcnJkZXRhaWwoIkNhbm5vdCBoYW5kbGUgc3RyZWFtZWQgcmVwbGljYXRpb24gdHJhbnNh Y3Rpb25zIHVzaW5nIHBhcmFsbGVsICIKKwkJCQkJCQkgICAiYXBwbHkgd29ya2VycyB1bnRpbCBh bGwgdGFibGVzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQuIikpKTsKKworCQlyZXR1cm4gdHJ1ZTsK Kwl9CiAJZWxzZQogCQlyZXR1cm4gKHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1JFQURZIHx8 CiAJCQkJKHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1NZTkNET05FICYmCkBAIC00NTEsNDMg KzU2Miw5MSBAQCBlbmRfcmVwbGljYXRpb25fc3RlcCh2b2lkKQogfQogCiAvKgotICogSGFuZGxl IHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KKyAqIEhhbmRsZSBzdHJlYW1lZCB0cmFuc2FjdGlvbnMg Zm9yIGJvdGggdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSBwYXJhbGxlbAorICogYXBw bHkgd29ya2Vycy4KICAqCi0gKiBJZiBpbiBzdHJlYW1pbmcgbW9kZSAocmVjZWl2aW5nIGEgYmxv Y2sgb2Ygc3RyZWFtZWQgdHJhbnNhY3Rpb24pLCB3ZQotICogc2ltcGx5IHJlZGlyZWN0IGl0IHRv IGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KKyAqIEluIHN0cmVh bWluZyBjYXNlIChyZWNlaXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIGZv cgorICogU1VCU1RSRUFNX09OIG1vZGUsIHNpbXBseSByZWRpcmVjdCBpdCB0byBhIGZpbGUgZm9y IHRoZSBwcm9wZXIgdG9wbGV2ZWwKKyAqIHRyYW5zYWN0aW9uLCBhbmQgZm9yIFNVQlNUUkVBTV9Q QVJBTExFTCBtb2RlLCBzZW5kIHRoZSBjaGFuZ2VzIHRvIHBhcmFsbGVsCisgKiBhcHBseSB3b3Jr ZXJzIChMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gb3IgTE9HSUNBTF9SRVBfTVNHX1RZUEUgY2hh bmdlcworICogd2lsbCBiZSBhcHBsaWVkIGJ5IGJvdGggbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQg cGFyYWxsZWwgYXBwbHkgd29ya2VycykuCiAgKgotICogUmV0dXJucyB0cnVlIGZvciBzdHJlYW1l ZCB0cmFuc2FjdGlvbnMsIGZhbHNlIG90aGVyd2lzZSAocmVndWxhciBtb2RlKS4KKyAqIEZvciBu b24tc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIGZhbHNlLgorICogRm9yIHN0cmVhbWVk IHRyYW5zYWN0aW9ucywgcmV0dXJucyB0cnVlIGlmIGluIGxlYWRlciBhcHBseSB3b3JrZXIsIGZh bHNlCisgKiBvdGhlcndpc2UuCisgKgorICogRXhjZXB0aW9uOiBJZiB0aGUgbWVzc2FnZSBiZWlu ZyBwcm9jZXNzZWQgaXMgTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OCisgKiBvciBMT0dJQ0FMX1JF UF9NU0dfVFlQRSwgcmV0dXJuIGZhbHNlIGV2ZW4gaWYgdGhlIG1lc3NhZ2UgbmVlZHMgdG8gYmUg c2VudAorICogdG8gYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCiAgKi8KIHN0YXRpYyBib29sCiBo YW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJp bmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50 X3hpZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlv biBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0RhdGEJb3JpZ2luYWxfbXNnOworCisJYXBwbHlf YWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8p OwogCiAJLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFpbl9zdHJlYW1lZF90cmFu c2FjdGlvbikKKwlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURFUl9BUFBMWSkKIAkJcmV0 dXJuIGZhbHNlOwogCi0JQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAlBc3NlcnQoVHJhbnNh Y3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkpOwogCisJb3JpZ2luYWxfbXNnID0gKnM7CisKIAkv KgogCSAqIFdlIHNob3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUg Zmlyc3QgcGFydCBvZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhp ZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0 KTsKIAotCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKGN1cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShF UlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxp ZCB0cmFuc2FjdGlvbiBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7 CiAKLQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkg dGhlcmUpLiAqLwotCXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlv bikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKKwkJY2FzZSBUUkFOU19MRUFE RVJfUEFSVElBTF9TRVJJQUxJWkU6CisJCQlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCi0J Lyogd3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBmaWxlICovCi0Jc3RyZWFtX3dyaXRl X2NoYW5nZShhY3Rpb24sIHMpOworCQkJLyogQWRkIHRoZSBuZXcgc3VieGFjdCB0byB0aGUgYXJy YXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KKwkJCXN1YnhhY3RfaW5mb19hZGQoY3VycmVu dF94aWQpOworCisJCQkvKiBXcml0ZSB0aGUgY2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8K KwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLAorCQkJCQkJCQlhcHBseV9hY3Rpb24gPT0g VFJBTlNfTEVBREVSX1NFUklBTElaRSA/CisJCQkJCQkJCXMgOiAmb3JpZ2luYWxfbXNnKTsKKwkJ CXJldHVybiB0cnVlOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJ CQlBc3NlcnQod2luZm8pOwogCi0JcmV0dXJuIHRydWU7CisJCQlwYXJhbGxlbF9hcHBseV9zZW5k X2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQlwYXJhbGxlbF9zdHJlYW1fbmNoYW5n ZXMgKz0gMTsKKworCQkJLyoKKwkJCSAqIFhYWCBUaGUgcHVibGlzaGVyIHNpZGUgZG9lc24ndCBh bHdheXMgc2VuZCByZWxhdGlvbi90eXBlIHVwZGF0ZQorCQkJICogbWVzc2FnZXMgYWZ0ZXIgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgc28gYWxzbyB1cGRhdGUgdGhlCisJCQkgKiByZWxhdGlv bi90eXBlIGluIGxlYWRlciBhcHBseSB3b3JrZXIuIFNlZSBmdW5jdGlvbgorCQkJICogY2xlYW51 cF9yZWxfc3luY19jYWNoZS4KKwkJCSAqLworCQkJcmV0dXJuIChhY3Rpb24gIT0gTE9HSUNBTF9S RVBfTVNHX1JFTEFUSU9OICYmCisJCQkJCWFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0dfVFlQRSk7 CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCS8qIERlZmluZSBhIHNhdmVwb2lu dCBmb3IgYSBzdWJ4YWN0IGlmIG5lZWRlZC4gKi8KKwkJCXBhcmFsbGVsX2FwcGx5X3N0YXJ0X3N1 YnRyYW5zKGN1cnJlbnRfeGlkLCBzdHJlYW1feGlkKTsKKwkJCXJldHVybiBmYWxzZTsKKworCQlk ZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCXJldHVybiBmYWxzZTsJCS8qIHNpbGVuY2Ug Y29tcGlsZXIgd2FybmluZyAqLworCX0KIH0KIAogLyoKQEAgLTkyMyw4ICsxMDgyLDExIEBAIGFw cGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgKnBy ZXBhcmVfZGF0YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMgbmVjZXNzYXJ5IHRvIGJh bGFuY2UgdGhlIEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQgd2l0aGluIHRoZSBQcmVw YXJlVHJhbnNhY3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRyYW5zYWN0aW9uQmxvY2so KTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsgLyogQ29tcGxldGVzIHRoZSBwcmVjZWRp bmcgQmVnaW4gY29tbWFuZC4gKi8KKwlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCXsKKwkJ QmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAv KiBDb21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCX0KIAogCS8qCiAJ ICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBj b3JyZWN0IHBvc2l0aW9uCkBAIC05OTMsNiArMTE1NSwxMiBAQCBhcHBseV9oYW5kbGVfcHJlcGFy ZShTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQgUFJFUEFSRUQgb2YgYSBw cmV2aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkb24n dCBuZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIGluIGEK KyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIGFscmVhZHkg d2FpdGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGluIGFwcGx5X2hhbmRsZV9zdHJl YW1fcHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJhdGlvbnMgaW4g dGhhdCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJzY3JpYmVyLCBzbyBubwor ICogY29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2sgb3IgdHJhbnNhY3Rp b24gZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfY29t bWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMzYsNiArMTIwNCwxMiBAQCBhcHBseV9o YW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRsZSBhIFJP TExCQUNLIFBSRVBBUkVEIG9mIGEgcHJldmlvdXNseSBQUkVQQVJFRCBUUkFOU0FDVElPTi4KKyAq CisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGhlcmUgaWYgdGhlIHRyYW5zYWN0 aW9uIHdhcyBwcmVwYXJlZCBpbiBhCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIEluIHRoYXQg Y2FzZSwgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCBmb3IgdGhlIHByZXBhcmUKKyAqIHRvIGZpbmlz aCBpbiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoKSB3aGljaCB3aWxsIGVuc3VyZSBhbGwg dGhlCisgKiBvcGVyYXRpb25zIGluIHRoYXQgdHJhbnNhY3Rpb24gaGF2ZSBoYXBwZW5lZCBpbiB0 aGUgc3Vic2NyaWJlciwgc28gbm8KKyAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gY2FuIGNhdXNl IGRlYWRsb2NrIG9yIHRyYW5zYWN0aW9uIGRlcGVuZGVuY3kgaXNzdWVzLgogICovCiBzdGF0aWMg dm9pZAogYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEw ODksMTUgKzEyNjMsMTQgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0lu Zm8gcykKIAogLyoKICAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KLSAqCi0gKiBMb2dpYyBpcyBp biB0d28gcGFydHM6Ci0gKiAxLiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMKLSAq IDIuIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkCiAgKi8KIHN0YXRpYyB2b2lkCiBh cHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBQ cmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3 aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YQlv cmlnaW5hbF9tc2cgPSAqczsKIAogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJl cG9ydChFUlJPUiwKQEAgLTExMTMsMjQgKzEyODYsOTggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9w cmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX3ByZXBhcmUocywg JnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChwcmVwYXJlX2Rh dGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0JZWxvZyhERUJVRzEsICJyZWNl aXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHByZXBhcmVfZGF0YS54 aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24ocHJlcGFy ZV9kYXRhLnhpZCwgJndpbmZvKTsKIAotCS8qIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0 aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0YS54aWQsIHByZXBh cmVfZGF0YS5wcmVwYXJlX2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNl IFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBw cmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRh KTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFsaXplZCB0byBm aWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVyYXRpb25zLgorCQkJICov CisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQsCisJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJl X2xzbik7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCS8qIE1hcmsgdGhlIHRy YW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJu YWwoJnByZXBhcmVfZGF0YSk7CiAKLQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCQkJQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJl X2RhdGEuZW5kX2xzbik7CisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5k X2xzbik7CiAKLQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKwkJCWluX3JlbW90ZV90 cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFs aXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxl cyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEueGlkKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCWNhc2UgVFJBTlNf TEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoKKwkJ CSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwgYXBwbHkg d29ya2VyCisJCQkgKiBjYW4gY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hhbmdlcy4K KwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKHdpbmZvLT5zaGFyZWQtPnN0cmVhbV9s b2NrX2lkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQkJLyogU2VuZCBTVFJFQU0gUFJFUEFS RSBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCisJCQlpZiAoYXBwbHlf YWN0aW9uID09IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXBhcmFsbGVsX2Fw cGx5X3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWVsc2UKKwkJCXsKKwkJ CQlzdHJlYW1fd3JpdGVfbWVzc2FnZShwcmVwYXJlX2RhdGEueGlkLAorCQkJCQkJCQkJIExPR0lD QUxfUkVQX01TR19TVFJFQU1fUFJFUEFSRSwKKwkJCQkJCQkJCSAmb3JpZ2luYWxfbXNnLCBmYWxz ZSk7CisJCQkJcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXQod2luZm8tPnNoYXJlZCwgdHJ1ZSk7 CisJCQl9CisKKwkJCS8qCisJCQkgKiBBZnRlciBzZW5kaW5nIHRoZSBkYXRhIHRvIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgb3IKKwkJCSAqIHNlcmlhbGl6aW5nIGRhdGEgdG8gZmlsZSwgd2Fp dCBmb3IgdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzCisJCQkgKiBpcyBuZWNlc3NhcnkgdG8g bWFpbnRhaW4gY29tbWl0IG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUKKwkJCSAqIHRv IHRyYW5zYWN0aW9uIGRlcGVuZGVuY2llcyBhbmQgZGVhZGxvY2tzLgorCQkJICovCisJCQlwYXJh bGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hhcmVkKTsKKwkJCXBhcmFs bGVsX2FwcGx5X2ZyZWVfd29ya2VyKHdpbmZvLCBwcmVwYXJlX2RhdGEueGlkLCB0cnVlKTsKKwor CQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0 aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfUEFS QUxMRUxfQVBQTFk6CisJCQkvKiBVbmxvY2sgdGhlIHNoYXJlZCBvYmplY3QgbG9jayBhdCB0cmFu c2FjdGlvbiBlbmQuICovCisJCQlwYXJhbGxlbF9hcHBseV91bmxvY2soTXlQYXJhbGxlbFNoYXJl ZC0+c3RyZWFtX2xvY2tfaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChzdHJlYW1fZmQp CisJCQkJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7CisKKwkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKKworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlh cHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKworCQkJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJ CWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCQlzdWJ4YWN0bGlzdCA9IE5JTDsKIAotCS8qIHVu bGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4g Ki8KLQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVw YXJlX2RhdGEueGlkKTsKKwkJCXBhcmFsbGVsX2FwcGx5X3NldF94YWN0X3N0YXRlKE15UGFyYWxs ZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKwkJCXBhcmFsbGVsX2FwcGx5X3Vu bG9jayhNeVBhcmFsbGVsU2hhcmVkLT50cmFuc2FjdGlvbl9sb2NrX2lkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0 aW9uIGZpbmlzaCBjb21tYW5kIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0 KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAK IAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBh cmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24p OwpAQCAtMTE2OCwyNyArMTQxNSw3NyBAQCBhcHBseV9oYW5kbGVfb3JpZ2luKFN0cmluZ0luZm8g cykKIH0KIAogLyoKKyAqIEluaXRpYWxpemUgZmlsZXNldCBpZiBub3QgeWV0IGFuZCBvcGVuIHRo ZSBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgd2hlbiBwcm9j ZXNzaW5nIFNUUkVBTV9TVEFSVCwgYnV0IGNhbiBhbHNvCisgKiBiZSBjYWxsZWQgaWYgeW91IG5l ZWQgdG8gc2VyaWFsaXplIGNoYW5nZXMgdGhhdCBub3QgaW4gYSBzdHJlYW1pbmcgYmxvY2sgdG8K KyAqIGRpc2suCisgKi8KK3ZvaWQKK3NlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoVHJhbnNhY3Rpb25J ZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKK3sKKwkvKgorCSAqIFN0YXJ0IGEgdHJhbnNhY3Rp b24gb24gc3RyZWFtIHN0YXJ0LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUKKwkgKiBjb21taXR0 ZWQgb24gdGhlIHN0cmVhbSBzdG9wIHVubGVzcyBpdCBpcyBhIHRhYmxlc3luYyB3b3JrZXIgaW4K KwkgKiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxs IHRoZQorCSAqIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0cmFuc2FjdGlvbiBmb3IgaGFuZGxpbmcg dGhlIGJ1ZmZpbGUsCisJICogdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIHN0cmVhbWluZyBkYXRh IGFuZCBzdWJ4YWN0IGluZm8uCisJICovCisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJ LyoKKwkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZl bid0IHlldC4gVGhpcworCSAqIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBv ZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdAorCSAqIGluIGEgcGVybWFuZW50IGNvbnRleHQuIFdl IGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0CisJICogc3RyZWFtaW5nIG1lc3NhZ2UgZnJv bSBhbnkgdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0aGlzCisJICogYW5kIG90aGVy IHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuIE5vdywgd2UgY291bGQgY3JlYXRlIGEKKwkgKiBmaWxl c2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0IHRoZW4gd2Ugd29uJ3Qg YmUKKwkgKiBzdXJlIHRoYXQgaXQgd2lsbCBldmVyIGJlIHVzZWQuCisJICovCisJaWYgKE15TG9n aWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwl7CisJCU1lbW9yeUNvbnRl eHQgb2xkY3R4OworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRl eHQpOworCisJCU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBwYWxsb2Moc2l6 ZW9mKEZpbGVTZXQpKTsKKwkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1f ZmlsZXNldCk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJfQorCisJLyog T3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KKwlzdHJlYW1fb3Bl bl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwgZmlyc3Rfc2VnbWVudCk7CisK KwkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4 YWN0IGZpbGUuICovCisJaWYgKCFmaXJzdF9zZWdtZW50KQorCQlzdWJ4YWN0X2luZm9fcmVhZChN eUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAo KTsKK30KKworLyoKICAqIEhhbmRsZSBTVFJFQU0gU1RBUlQgbWVzc2FnZS4KKyAqCisgKiBYWFgg V2UgY2FuIGF2b2lkIHNlbmRpbmcgcGFpcnMgb2YgdGhlIFNUQVJUL1NUT1AgbWVzc2FnZXMgdG8g dGhlIHBhcmFsbGVsCisgKiB3b3JrZXIgYmVjYXVzZSB1bmxpa2UgYXBwbHkgd29ya2VyIGl0IHdp bGwgcHJvY2VzcyBvbmx5IG9uZSB0cmFuc2FjdGlvbiBhdCBhCisgKiB0aW1lLiBIb3dldmVyLCBp dCBpcyBub3QgY2xlYXIgd2hldGhlciBhbnkgb3B0aW1pemF0aW9uIGlzIHdvcnRod2hpbGUKKyAq IGJlY2F1c2UgdGhlc2UgbWVzc2FnZXMgYXJlIHNlbnQgb25seSB3aGVuIHRoZSBsb2dpY2FsX2Rl Y29kaW5nX3dvcmtfbWVtCisgKiB0aHJlc2hvbGQgaXMgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyB2 b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIHsKIAlib29sCQlm aXJzdF9zZWdtZW50OworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0Fw cGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAq czsKIAogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRl cm5hbCgiZHVwbGljYXRlIFNUUkVBTSBTVEFSVCBtZXNzYWdlIikpKTsKIAotCS8qCi0JICogU3Rh cnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBi ZSBjb21taXR0ZWQKLQkgKiBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVz eW5jIHdvcmtlciBpbiB3aGljaCBjYXNlIGl0Ci0JICogd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIg cHJvY2Vzc2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZQotCSAqIHRyYW5zYWN0aW9u IGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlCi0JICog c3RyZWFtaW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5mby4KLQkgKi8KLQliZWdpbl9yZXBsaWNhdGlv bl9zdGVwKCk7Ci0KIAkvKiBub3RpZnkgaGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vzc2luZyBh IHJlbW90ZSB0cmFuc2FjdGlvbiAqLwogCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsK IApAQCAtMTIwMyw1MyArMTUwMCw4NyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmlu Z0luZm8gcykKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQsIEludmFs aWRYTG9nUmVjUHRyKTsKIAogCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFt X2ZpbGVzZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQgZm9yIHRo ZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5l bnQKLQkgKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1p bmcgbWVzc2FnZSBmcm9tIGFueQotCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3Ig dGhpcyBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdlIGNvdWxk IGNyZWF0ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQK LQkgKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkg KiBGb3IgdGhlIGZpcnN0IHN0cmVhbSBzdGFydCwgY2hlY2sgaWYgdGhlcmUgaXMgYW55IGZyZWUg cGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd2UgY2FuIHVzZSB0byBwcm9jZXNzIHRoaXMgdHJh bnNhY3Rpb24sIG90aGVyd2lzZSB0cnkgdG8gc3RhcnQgYQorCSAqIG5ldyBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCiAJICovCi0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQg PT0gTlVMTCkKKwlpZiAoZmlyc3Rfc2VnbWVudCkKKwkJcGFyYWxsZWxfYXBwbHlfc3RhcnRfd29y a2VyKHN0cmVhbV94aWQpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5 X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24pCiAJ ewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpF OgorCQkJc2VyaWFsaXplX3N0cmVhbV9zdGFydChzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsK KwkJCWJyZWFrOwogCi0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRl eHQpOworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKIAotCQlNeUxvZ2lj YWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7Ci0J CUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCQkJLyoK KwkJCSAqIFRoZSBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGVudGVyaW5nCisJ CQkgKiBQQVJUSUFMX1NFUklBTElaRSBtb2RlIHNvIG5vIG5lZWQgdG8gY3JlYXRlIGl0IGFnYWlu LgorCQkJICovCisJCQlzZXJpYWxpemVfc3RyZWFtX3N0YXJ0KHN0cmVhbV94aWQsIGZhbHNlKTsK KwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVCwgJm9y aWdpbmFsX21zZyk7CiAKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7Ci0JfQorCQkJ YnJlYWs7CiAKLQkvKiBvcGVuIHRoZSBzcG9vbCBmaWxlIGZvciB0aGlzIHRyYW5zYWN0aW9uICov Ci0Jc3RyZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlk LCBmaXJzdF9zZWdtZW50KTsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoK KwkJCUFzc2VydCh3aW5mbyk7CiAKLQkvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVu dCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUgKi8KLQlpZiAoIWZpcnN0X3NlZ21lbnQpCi0J CXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQp OworCQkJLyoKKwkJCSAqIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2Ugd2FpdGluZyB0 byBiZSBwcm9jZXNzZWQgYnkKKwkJCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkJCSAqLwor CQkJcGdfYXRvbWljX2FkZF9mZXRjaF91MzIoJih3aW5mby0+c2hhcmVkLT5sZWZ0X21lc3NhZ2Up LCAxKTsKIAotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywgTlVMTCk7CisJ CQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CiAKLQll bmRfcmVwbGljYXRpb25fc3RlcCgpOworCQkJcGFyYWxsZWxfc3RyZWFtX25jaGFuZ2VzID0gMDsK KworCQkJLyogQ2FjaGUgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3IgdGhpcyB0cmFuc2Fj dGlvbi4gKi8KKwkJCXN0cmVhbV9hcHBseV93b3JrZXIgPSB3aW5mbzsKKwkJCWJyZWFrOworCisJ CWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlpZiAoZmlyc3Rfc2VnbWVudCkKKwkJCXsK KwkJCQkvKiBIb2xkIHRoZSBsb2NrIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiAq LworCQkJCXBhcmFsbGVsX2FwcGx5X2xvY2soTXlQYXJhbGxlbFNoYXJlZC0+dHJhbnNhY3Rpb25f bG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlwYXJhbGxlbF9hcHBseV9zZXRfeGFjdF9z dGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExFTF9UUkFOU19TVEFSVEVEKTsKKwkJCX0KKwor CQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgdGhlIGxl YWRlciBhcHBseSB3b3JrZXIKKwkJCSAqIGNhbiBjb250aW51ZSB0byBzZW5kIGNoYW5nZXMuCisJ CQkgKi8KKwkJCXBhcmFsbGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVsU2hhcmVkLT5zdHJlYW1f bG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJ CUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5 KFNUQVRFX1JVTk5JTkcsIE5VTEwpOwogfQogCiAvKgotICogSGFuZGxlIFNUUkVBTSBTVE9QIG1l c3NhZ2UuCisgKiBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHN1YnhhY3RzIGFuZCBjbG9z ZSB0aGUgZmlsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0 aGUgc2VyaWFsaXplX3N0cmVhbV9zdGFydCBmdW5jdGlvbiBoYXMKKyAqIGJlZW4gY2FsbGVkLgog ICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0luZm8gcykK K3ZvaWQKK3NlcmlhbGl6ZV9zdHJlYW1fc3RvcChUcmFuc2FjdGlvbklkIHhpZCkKIHsKLQlpZiAo IWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2Rl KEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJF QU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikpKTsKLQogCS8qCi0JICogQ2xv c2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBzZXJpYWxpemUgaW5mb3Jt YXRpb24gYWJvdXQKLQkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLgor CSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXpl CisJICogaW5mb3JtYXRpb24gYWJvdXQgc3VieGFjdHMgZm9yIHRoZSB0b3BsZXZlbCB0cmFuc2Fj dGlvbi4KIAkgKi8KLQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgc3RyZWFtX3hpZCk7CisJc3VieGFjdF9pbmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHhpZCk7CiAJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKIAogCS8qIFdlIG11c3QgYmUgaW4g YSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0ZSAqLwpAQCAtMTI1OCw0MCArMTU4OSw5OCBAQCBhcHBs eV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogCS8qIENvbW1pdCB0aGUgcGVyLXN0 cmVhbSB0cmFuc2FjdGlvbiAqLwogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JaW5f c3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKLQogCS8qIFJlc2V0IHBlci1zdHJlYW0gY29u dGV4dCAqLwogCU1lbW9yeUNvbnRleHRSZXNldChMb2dpY2FsU3RyZWFtaW5nQ29udGV4dCk7CiAK IAlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOwotCXJlc2V0X2FwcGx5 X2Vycm9yX2NvbnRleHRfaW5mbygpOwogfQogCiAvKgotICogSGFuZGxlIFNUUkVBTSBhYm9ydCBt ZXNzYWdlLgorICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyB2b2lk Ci1hcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKK2FwcGx5X2hhbmRsZV9z dHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7Ci0JVHJhbnNh Y3Rpb25JZCBzdWJ4aWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5z QXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwogCi0JaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJtc2dfaW50ZXJu YWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkpOworCQkJCSBl cnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RBUlQi KSkpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJl YW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRS QU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aoc3RyZWFtX3hp ZCk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToK KwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3RvcChzdHJlYW1feGlkKTsKKwkJCXN0cmVhbV93cml0ZV9j aGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVE9QLCBzKTsKKwkJCXN0cmVhbV9hcHBseV93 b3JrZXIgPSBOVUxMOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19Q QVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CiAKLQlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fi b3J0KHMsICZ4aWQsICZzdWJ4aWQpOworCQkJLyoKKwkJCSAqIExvY2sgYmVmb3JlIHNlbmRpbmcg dGhlIFNUUkVBTV9TVE9QIG1lc3NhZ2Ugc28gdGhhdCB0aGUgbGVhZGVyCisJCQkgKiBjYW4gaG9s ZCB0aGUgbG9jayBmaXJzdCBhbmQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIHdhaXQK KwkJCSAqIGZvciBsZWFkZXIgdG8gcmVsZWFzZSB0aGUgbG9jay4KKwkJCSAqLworCQkJcGFyYWxs ZWxfYXBwbHlfbG9jayh3aW5mby0+c2hhcmVkLT5zdHJlYW1fbG9ja19pZCwgQWNjZXNzRXhjbHVz aXZlTG9jayk7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBz LT5kYXRhKTsKKworCQkJZWxvZyhERUJVRzEsICJhcHBsaWVkICV1IGNoYW5nZXMgaW4gdGhlIHN0 cmVhbWluZyBjaHVuayIsCisJCQkJIHBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyk7CisKKwkJCXN0 cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisJCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNU QVRFX0lETEUsIE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBM WToKKworCQkJLyoKKwkJCSAqIFRoZSBsZWFkZXIgbWF5IGhhdmUgc2VudCBtdWx0aXBsZSBzdHJl YW1pbmcgYmxvY2tzIGluIHRoZSBxdWV1ZQorCQkJICogV2hlbiB0aGUgY2hpbGQgaXMgcHJvY2Vz c2luZyBhIHN0cmVhbWluZyBibG9jay4gU28gb25seSB0cnkgdG8KKwkJCSAqIGxvY2sgaWYgdGhl cmUgaXMgbm8gbWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKHBnX2F0 b21pY19zdWJfZmV0Y2hfdTMyKCYoTXlQYXJhbGxlbFNoYXJlZC0+bGVmdF9tZXNzYWdlKSwgMSkg PT0gMCkKKwkJCXsKKwkJCQlwYXJhbGxlbF9hcHBseV9sb2NrKE15UGFyYWxsZWxTaGFyZWQtPnN0 cmVhbV9sb2NrX2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXBhcmFsbGVsX2FwcGx5X3VubG9j ayhNeVBhcmFsbGVsU2hhcmVkLT5zdHJlYW1fbG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ CX0KKworCQkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFSU5UUkFOU0FDVElPTiwg TlVMTCk7CisJCQlicmVhazsKIAorCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJy ZWFrOworCX0KKworCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwlyZXNldF9h cHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJP UlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0byBkaXNrLgorICov CitzdGF0aWMgdm9pZAorc2VyaWFsaXplX3N0cmVhbV9hYm9ydChUcmFuc2FjdGlvbklkIHhpZCwg VHJhbnNhY3Rpb25JZCBzdWJ4aWQpCit7CiAJLyoKIAkgKiBJZiB0aGUgdHdvIFhJRHMgYXJlIHRo ZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28KIAkgKiBqdXN0 IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCiAJICovCiAJaWYgKHhpZCA9 PSBzdWJ4aWQpCi0JewotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHhpZCwgSW52YWxp ZFhMb2dSZWNQdHIpOwogCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCB4aWQpOwotCX0KIAllbHNlCiAJewogCQkvKgpAQCAtMTMxNSw4ICsxNzA0LDYgQEAg YXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJCWJvb2wJCWZvdW5kID0g ZmFsc2U7CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAotCQlzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF94YWN0KHN1YnhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwotCiAJCXN1YmlkeCA9IC0xOwog CQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNh bFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CkBAIC0xMzQxLDcgKzE3MjgsNiBAQCBhcHBseV9oYW5k bGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJCWNsZWFudXBfc3VieGFjdF9pbmZvKCk7 CiAJCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7Ci0JCQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIAkJCXJldHVybjsKIAkJ fQogCkBAIC0xMzY0LDE1ICsxNzUwLDEyOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0 cmluZ0luZm8gcykKIAkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAJfQorfQorCisvKgorICogSGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdl LgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZv IHMpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJTG9n aWNhbFJlcFN0cmVhbUFib3J0RGF0YSBhYm9ydF9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZv RGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKKwlib29sCQlhYm9ydF90b3BsZXZlbF94YWN0OworCisJ aWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJT VFJFQU0gQUJPUlQgbWVzc2FnZSB3aXRob3V0IFNUUkVBTSBTVE9QIikpKTsKKworCS8qIFdlIHJl Y2VpdmUgYWJvcnQgaW5mb3JtYXRpb24gb25seSB3aGVuIHdlIGNhbiBhcHBseSBpbiBwYXJhbGxl bC4gKi8KKwlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMsICZhYm9ydF9kYXRhLAorCQkJ CQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSk7CisKKwl4aWQgPSBhYm9y dF9kYXRhLnhpZDsKKwlzdWJ4aWQgPSBhYm9ydF9kYXRhLnN1YnhpZDsKKwlhYm9ydF90b3BsZXZl bF94YWN0ID0gKHhpZCA9PSBzdWJ4aWQpOworCisJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFj dChzdWJ4aWQsIGFib3J0X2RhdGEuYWJvcnRfbHNuKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90 cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oeGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9h Y3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisKKwkJCS8qCisJCQkg KiBXZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBo YXMgYmVlbgorCQkJICogc2VyaWFsaXplZCB0byBmaWxlLgorCQkJICovCisJCQlzZXJpYWxpemVf c3RyZWFtX2Fib3J0KHhpZCwgc3VieGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVB REVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFM SVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyogU2VuZCBTVFJFQU0gQUJPUlQgbWVzc2Fn ZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCQkJaWYgKGFwcGx5X2FjdGlvbiA9 PSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCkKKwkJCQlwYXJhbGxlbF9hcHBseV9zZW5k X2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGFi b3J0X3RvcGxldmVsX3hhY3QpCisJCQkJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHhpZCk7CisKKwkJCQkvKgorCQkJCSAqIFBhcmFsbGVsIGFwcGx5IHdv cmtlciBtaWdodCBoYXZlIGFwcGxpZWQgc29tZSBjaGFuZ2VzLCBzbworCQkJCSAqIHdyaXRlIHRo ZSBTVFJFQU1fQUJPUlQgbWVzc2FnZSBzbyB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCQkJCSAq IHdvcmtlciBjYW4gcm9sbGJhY2sgdGhlIHN1YnRyYW5zYWN0aW9uIGlmIG5lZWRlZC4KKwkJCQkg KgorCQkJCSAqIFRoZSBmaWxlIHdhcyBkZWxldGVkIGlmIGFib3J0ZWQgdGhlIHRvcGxldmVsIHRy YW5zYWN0aW9uLCBzbworCQkJCSAqIGNyZWF0ZSBpdCBhZ2FpbiBpbiB0aGlzIGNhc2UuCisJCQkJ ICovCisJCQkJc3RyZWFtX3dyaXRlX21lc3NhZ2UoeGlkLCBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFN X0FCT1JULAorCQkJCQkJCQkJICZvcmlnaW5hbF9tc2csIGFib3J0X3RvcGxldmVsX3hhY3QpOwor CQkJfQorCisJCQlpZiAoYWJvcnRfdG9wbGV2ZWxfeGFjdCkKKwkJCXsKKwkJCQlpZiAoYXBwbHlf YWN0aW9uID09IFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSkKKwkJCQkJcGFyYWxsZWxf YXBwbHlfc2V0X2ZpbGVzZXQod2luZm8tPnNoYXJlZCwgdHJ1ZSk7CisKKwkJCQkvKgorCQkJCSAq IFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIGF0IHRyYW5zYWN0aW9uIGVuZC4KKwkJCQkg Ki8KKwkJCQlwYXJhbGxlbF9hcHBseV91bmxvY2sod2luZm8tPnNoYXJlZC0+c3RyZWFtX2xvY2tf aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCQkJcGFyYWxsZWxfYXBwbHlfZnJlZV93b3Jr ZXIod2luZm8sIHhpZCwgdHJ1ZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkg KiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBtZXNzYWdlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2Vk IGJ5CisJCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCQkJCSAqLworCQkJCXBnX2F0b21p Y19hZGRfZmV0Y2hfdTMyKCYod2luZm8tPnNoYXJlZC0+bGVmdF9tZXNzYWdlKSwgMSk7CisJCQl9 CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCQkJcGFyYWxsZWxf YXBwbHlfc3RyZWFtX2Fib3J0KCZhYm9ydF9kYXRhKTsKKworCQkJLyoKKwkJCSAqIFRoZSBsZWFk ZXIgbWF5IGhhdmUgc2VudCBtdWx0aXBsZSBzdHJlYW1pbmcgYmxvY2tzIGluIHRoZSBxdWV1ZQor CQkJICogV2hlbiB0aGUgY2hpbGQgaXMgcHJvY2Vzc2luZyBhIHN0cmVhbWluZyBibG9jay4gU28g b25seSB0cnkgdG8KKwkJCSAqIGxvY2sgaWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBsZWZ0IGluIHRo ZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKHhpZCAhPSBzdWJ4aWQgJiYKKwkJCQlwZ19hdG9taWNf c3ViX2ZldGNoX3UzMigmKE15UGFyYWxsZWxTaGFyZWQtPmxlZnRfbWVzc2FnZSksIDEpID09IDAp CisJCQl7CisJCQkJcGFyYWxsZWxfYXBwbHlfbG9jayhNeVBhcmFsbGVsU2hhcmVkLT5zdHJlYW1f bG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlwYXJhbGxlbF9hcHBseV91bmxvY2soTXlQ YXJhbGxlbFNoYXJlZC0+c3RyZWFtX2xvY2tfaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisK KwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmlu aXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2Up OworCQkJYnJlYWs7CisJfQogCiAJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9 CiAKKwogLyoKICAqIENvbW1vbiBzcG9vbGZpbGUgcHJvY2Vzc2luZy4KICAqLwotc3RhdGljIHZv aWQKLWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIg bHNuKQordm9pZAorYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmlsZXNl dCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCSAgIFhMb2dSZWNQdHIgbHNuKQogewogCVN0cmlu Z0luZm9EYXRhIHMyOwogCWludAkJCW5jaGFuZ2VzOwpAQCAtMTM5Nyw4ICsxODk3LDEwIEBAIGFw cGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQog CWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsK IAllbG9nKERFQlVHMSwgInJlcGxheWluZyBjaGFuZ2VzIGZyb20gZmlsZSBcIiVzXCIiLCBwYXRo KTsKIAotCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFt X2ZpbGVzZXQsIHBhdGgsIE9fUkRPTkxZLAorCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KHN0cmVh bV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwKIAkJCQkJCQlmYWxzZSk7CisJc3RyZWFtX2ZkID0g ZmQ7CisJc3RyZWFtX3hpZCA9IHhpZDsKIAogCWJ1ZmZlciA9IHBhbGxvYyhCTENLU1opOwogCWlu aXRTdHJpbmdJbmZvKCZzMik7CkBAIC0xNDY5LDYgKzE5NzEsMTYgQEAgYXBwbHlfc3Bvb2xlZF9t ZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAKIAkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAKKwkJLyoKKwkJICogQnJlYWsgdGhlIGxvb3AgaWYgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGhhdmUgZmluaXNoZWQgYXBwbHlpbmcgdGhlCisJCSAqIHRyYW5z YWN0aW9uLiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHNob3VsZCBoYXZlIGNsb3NlIHRoZSBm aWxlCisJCSAqIGJlZm9yZSBjb21taXR0aW5nLgorCQkgKi8KKwkJaWYgKGFtX3BhcmFsbGVsX2Fw cGx5X3dvcmtlcigpICYmCisJCQkoTXlQYXJhbGxlbFNoYXJlZC0+eGFjdF9zdGF0ZSA9PSBQQVJB TExFTF9UUkFOU19GSU5JU0hFRCB8fAorCQkJTXlQYXJhbGxlbFNoYXJlZC0+eGFjdF9zdGF0ZSA9 PSBQQVJBTExFTF9UUkFOU19VTktOT1dOKSkKKwkJCWdvdG8gZG9uZTsKKwogCQluY2hhbmdlcysr OwogCiAJCWlmIChuY2hhbmdlcyAlIDEwMDAgPT0gMCkKQEAgLTE0NzcsMTAgKzE5ODksMTMgQEAg YXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24p CiAJfQogCiAJQnVmRmlsZUNsb3NlKGZkKTsKLQogCXBmcmVlKGJ1ZmZlcik7CiAJcGZyZWUoczIu ZGF0YSk7CiAKK2RvbmU6CisJc3RyZWFtX2ZkID0gTlVMTDsKKwlzdHJlYW1feGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CisKIAllbG9nKERFQlVHMSwgInJlcGxheWVkICVkIChhbGwpIGNoYW5n ZXMgZnJvbSBmaWxlIFwiJXNcIiIsCiAJCSBuY2hhbmdlcywgcGF0aCk7CiAKQEAgLTE0OTUsNiAr MjAxMCw5IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIHsKIAlU cmFuc2FjdGlvbklkIHhpZDsKIAlMb2dpY2FsUmVwQ29tbWl0RGF0YSBjb21taXRfZGF0YTsKKwlQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9h Y3Rpb247CisJU3RyaW5nSW5mb0RhdGEJb3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3Ry ZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTA0LDE0ICsyMDIyLDkz IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAl4aWQgPSBsb2dp Y2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChzLCAmY29tbWl0X2RhdGEpOwogCXNldF9hcHBseV9l cnJvcl9jb250ZXh0X3hhY3QoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKIAotCWVsb2co REVCVUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhp ZCk7CisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbih4aWQsICZ3 aW5mbyk7CiAKLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0 X2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9T RVJJQUxJWkU6CiAKLQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7 CisJCQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmls ZSwgc28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNwb29sZWQgb3BlcmF0aW9ucy4KKwkJCSAqLwor CQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxl c2V0LCB4aWQsCisJCQkJCQkJCSAgIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCisJCQlhcHBs eV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJCS8qIFVubGluayB0 aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJ CXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJ CQlicmVhazsKIAotCS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMg YW5kIHN1YnhhY3QgaW5mbyAqLwotCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsIHhpZCk7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6 CisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZv KTsKKworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQg cGFyYWxsZWwgYXBwbHkgd29ya2VyCisJCQkgKiBjYW4gY29udGludWUgdG8gcmVjZWl2ZSBhbmQg YXBwbHkgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKHdpbmZvLT5z aGFyZWQtPnN0cmVhbV9sb2NrX2lkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQkJLyogU2Vu ZCBTVFJFQU0gQ09NTUlUIG1lc3NhZ2UgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gKi8K KwkJCWlmIChhcHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwpCisJ CQkJcGFyYWxsZWxfYXBwbHlfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOworCQkJ ZWxzZQorCQkJeworCQkJCXN0cmVhbV93cml0ZV9tZXNzYWdlKHhpZCwgTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9DT01NSVQsCisJCQkJCQkJCQkgJm9yaWdpbmFsX21zZywgZmFsc2UpOworCQkJCXBh cmFsbGVsX2FwcGx5X3NldF9maWxlc2V0KHdpbmZvLT5zaGFyZWQsIHRydWUpOworCQkJfQorCisJ CQkvKgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIG9yCisJCQkgKiBzZXJpYWxpemluZyBkYXRhIHRvIGZpbGUsIHdhaXQgZm9yIHRoYXQg d29ya2VyIHRvIGZpbmlzaC4gVGhpcworCQkJICogaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGNv bW1pdCBvcmRlciB3aGljaCBhdm9pZHMgZmFpbHVyZXMgZHVlCisJCQkgKiB0byB0cmFuc2FjdGlv biBkZXBlbmRlbmNpZXMgYW5kIGRlYWRsb2Nrcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlf d2FpdF9mb3JfeGFjdF9maW5pc2god2luZm8tPnNoYXJlZCk7CisKKwkJCXBnc3RhdF9yZXBvcnRf c3RhdChmYWxzZSk7CisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihjb21taXRfZGF0YS5lbmRfbHNu KTsKKwkJCXN0b3Bfc2tpcHBpbmdfY2hhbmdlcygpOworCisJCQlwYXJhbGxlbF9hcHBseV9mcmVl X3dvcmtlcih3aW5mbywgeGlkLCB0cnVlKTsKKworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlv biBpcyBlaXRoZXIgbm9uLWVtcHR5IG9yIHNraXBwZWQsIHNvIHdlIGNsZWFyIHRoZQorCQkJICog c3Vic2tpcGxzbi4KKwkJCSAqLworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKGNvbW1p dF9kYXRhLmNvbW1pdF9sc24pOworCisJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURF Ul9QQVJUSUFMX1NFUklBTElaRSkKKwkJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFM TEVMX0FQUExZOgorCisJCQkvKiBVbmxvY2sgYWxsIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sgYXQg dHJhbnNhY3Rpb24gZW5kLiAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKE15UGFyYWxsZWxT aGFyZWQtPnN0cmVhbV9sb2NrX2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlpZiAoc3RyZWFt X2ZkKQorCQkJCUJ1ZkZpbGVDbG9zZShzdHJlYW1fZmQpOworCisJCQlhcHBseV9oYW5kbGVfY29t bWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7 CisJCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKE15UGFy YWxsZWxTaGFyZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlw YXJhbGxlbF9hcHBseV9zZXRfeGFjdF9zdGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExFTF9U UkFOU19GSU5JU0hFRCk7CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0 aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6 CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQogCiAJLyogUHJvY2VzcyBhbnkgdGFi bGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNz X3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24pOwpAQCAtMTU1NSw2ICsyMTUyLDEz IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNv bW1pdF9kYXRhKQogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1p dF9kYXRhLT5jb21taXR0aW1lOwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJ CWlmIChJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNhY3Rpb25CbG9jayhm YWxzZSk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCiAJCXBnc3RhdF9y ZXBvcnRfc3RhdChmYWxzZSk7CiAKIAkJc3RvcmVfZmx1c2hfcG9zaXRpb24oY29tbWl0X2RhdGEt PmVuZF9sc24pOwpAQCAtMjUwNiw3ICszMTEwLDcgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0 cmluZ0luZm8gcykKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2Ug ZGlzcGF0Y2hlci4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGFwcGx5X2Rpc3BhdGNoKFN0cmlu Z0luZm8gcykKIHsKIAlMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24gPSBwcV9nZXRtc2dieXRlKHMp OwpAQCAtMjY3NSw2ICszMjc5LDEwIEBAIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIg cmVtb3RlX2xzbikKIHsKIAlGbHVzaFBvc2l0aW9uICpmbHVzaHBvczsKIAorCS8qIFNraXAgZm9y IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtl cigpKQorCQlyZXR1cm47CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMgaW4gcGVybWFuZW50IGNvbnRl eHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIApAQCAtMjczOSw2 ICszMzQ3LDcgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQp CiAJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9jYWxsYmFjazsKIAllcnJjYWxs YmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAJZXJyb3JfY29udGV4dF9zdGFj ayA9ICZlcnJjYWxsYmFjazsKKwlhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29u dGV4dF9zdGFjazsKIAogCS8qIFRoaXMgb3V0ZXIgbG9vcCBpdGVyYXRlcyBvbmNlIHBlciB3YWl0 LiAqLwogCWZvciAoOzspCkBAIC0yOTUzLDYgKzM1NjIsNyBAQCBMb2dpY2FsUmVwQXBwbHlMb29w KFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAogCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBz dGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKKwlh cHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFjazsKIAogCS8qIEFs bCBkb25lICovCiAJd2FscmN2X2VuZHN0cmVhbWluZyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCAm dGxpKTsKQEAgLTMwNTMsNyArMzY2Myw3IEBAIHNlbmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2 cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSkKIC8qCiAgKiBSZXJlYWQgc3Vic2Ny aXB0aW9uIGluZm8gaWYgbmVlZGVkLiBNb3N0IGNoYW5nZXMgd2lsbCBiZSBleGl0LgogICovCi1z dGF0aWMgdm9pZAordm9pZAogbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogewogCU1l bW9yeUNvbnRleHQgb2xkY3R4OwpAQCAtMzA4Myw4ICszNjkzLDkgQEAgbWF5YmVfcmVyZWFkX3N1 YnNjcmlwdGlvbih2b2lkKQogCWlmICghbmV3c3ViKQogCXsKIAkJZXJlcG9ydChMT0csCi0JCQkJ KGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlv biBcIiVzXCIgd2lsbCAiCi0JCQkJCQkic3RvcCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2Fz IHJlbW92ZWQiLAorCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dp Y2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNlIHRoZSAiCisJCQkJCQkic3Vic2NyaXB0aW9uIHdh cyByZW1vdmVkIiwgZ2V0X3dvcmtlcl9uYW1lKCksCiAJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFt ZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CkBAIC0zMDk0LDggKzM3MDUsOSBAQCBtYXliZV9yZXJl YWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAJaWYgKCFuZXdzdWItPmVuYWJsZWQpCiAJewogCQllcmVw b3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBm b3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsICIKLQkJCQkJCSJzdG9wIGJlY2F1c2UgdGhlIHN1 YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQiLAorCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0 aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVz IGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNlIHRoZSAiCisJCQkJCQki c3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCIsIGdldF93b3JrZXJfbmFtZSgpLAogCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKIAkJcHJvY19leGl0KDApOwpAQCAtMzEwOSw3ICszNzIx LDkgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCiAJLyoKIAkgKiBFeGl0IGlm IGFueSBwYXJhbWV0ZXIgdGhhdCBhZmZlY3RzIHRoZSByZW1vdGUgY29ubmVjdGlvbiB3YXMgY2hh bmdlZC4KLQkgKiBUaGUgbGF1bmNoZXIgd2lsbCBzdGFydCBhIG5ldyB3b3JrZXIuCisJICogVGhl IGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyLCBidXQgbm90ZSB0aGF0IHRoZSBwYXJh bGxlbCBhcHBseQorCSAqIHdvcmtlciBtYXkgb3IgbWF5IG5vdCByZXN0YXJ0IGRlcGVuZGluZyBv biB0aGUgdmFsdWUgb2YgdGhlIHN0cmVhbWluZworCSAqIG9wdGlvbiBhbmQgd2hldGhlciB0aGVy ZSB3aWxsIGJlIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgogCSAqLwogCWlmIChzdHJjbXAobmV3 c3ViLT5jb25uaW5mbywgTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvKSAhPSAwIHx8CiAJCXN0cmNt cChuZXdzdWItPm5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSAhPSAwIHx8CkBAIC0zMTIwLDkg KzM3MzQsMTYgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCQluZXdzdWItPm93 bmVyICE9IE15U3Vic2NyaXB0aW9uLT5vd25lciB8fAogCQkhZXF1YWwobmV3c3ViLT5wdWJsaWNh dGlvbnMsIE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnMpKQogCXsKLQkJZXJlcG9ydChMT0cs Ci0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNj cmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0IGJlY2F1c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdl IiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQlpZiAoYW1fcGFyYWxsZWxfYXBw bHlfd29ya2VyKCkpCisJCQllcmVwb3J0KExPRywKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVz IGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJCShlcnJt c2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNlIG9mIGEgcGFy YW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9u LT5uYW1lKSkpOworCQllbHNlCisJCQllcmVwb3J0KExPRywKKwkJCS8qIHRyYW5zbGF0b3I6IGZp cnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJ CShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNl IG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vi c2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJCXByb2NfZXhpdCgwKTsKIAl9CkBAIC0zMzk5LDkgKzQw MjAsNiBAQCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlk KQogICogYnkgc3RyZWFtX3hpZCAoZ2xvYmFsIHZhcmlhYmxlKS4gSWYgaXQncyB0aGUgZmlyc3Qg Y2h1bmsgb2Ygc3RyZWFtZWQKICAqIGNoYW5nZXMgZm9yIHRoaXMgdHJhbnNhY3Rpb24sIGNyZWF0 ZSB0aGUgYnVmZmlsZSwgb3RoZXJ3aXNlIG9wZW4gdGhlCiAgKiBwcmV2aW91c2x5IGNyZWF0ZWQg ZmlsZS4KLSAqCi0gKiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9m IGEgInN0cmVhbWluZyIgYmxvY2ssIGkuZS4KLSAqIGJldHdlZW4gc3RyZWFtX3N0YXJ0L3N0cmVh bV9zdG9wIG1lc3NhZ2VzIGZyb20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAogc3Ry ZWFtX29wZW5fZmlsZShPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3Nl Z21lbnQpCkBAIC0zNDA5LDcgKzQwMjcsNiBAQCBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwg VHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKIAljaGFyCQlwYXRoW01BWFBH UEFUSF07CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJh bnNhY3Rpb24pOwogCUFzc2VydChPaWRJc1ZhbGlkKHN1YmlkKSk7CiAJQXNzZXJ0KFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHhpZCkpOwogCUFzc2VydChzdHJlYW1fZmQgPT0gTlVMTCk7CkBAIC0zNDQ4 LDE1ICs0MDY1LDEwIEBAIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklk IHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQogLyoKICAqIHN0cmVhbV9jbG9zZV9maWxlCiAgKgkg IENsb3NlIHRoZSBjdXJyZW50bHkgb3BlbiBmaWxlIHdpdGggc3RyZWFtZWQgY2hhbmdlcy4KLSAq Ci0gKiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3RyZWFtaW5nIGJs b2NrLCBpLmUuIGF0IHN0cmVhbV9zdG9wCi0gKiBtZXNzYWdlIGZyb20gdGhlIHVwc3RyZWFtLgog ICovCiBzdGF0aWMgdm9pZAogc3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCkKIHsKLQlBc3NlcnQoaW5f c3RyZWFtZWRfdHJhbnNhY3Rpb24pOwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJl YW1feGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAogCUJ1ZkZpbGVDbG9zZShz dHJlYW1fZmQpOwpAQCAtMzQ3MywxMyArNDA4NSwxMSBAQCBzdHJlYW1fY2xvc2VfZmlsZSh2b2lk KQogICogdGhlIGxlbmd0aCksIGFjdGlvbiBjb2RlIChpZGVudGlmeWluZyB0aGUgbWVzc2FnZSB0 eXBlKSBhbmQgbWVzc2FnZQogICogY29udGVudHMgKHdpdGhvdXQgdGhlIHN1YnhhY3QgVHJhbnNh Y3Rpb25JZCB2YWx1ZSkuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzdHJlYW1fd3JpdGVfY2hh bmdlKGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7CiAJaW50CQkJbGVuOwogCi0JQXNzZXJ0 KGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKTsKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQo c3RyZWFtX3hpZCkpOwogCUFzc2VydChzdHJlYW1fZmQgIT0gTlVMTCk7CiAKIAkvKiB0b3RhbCBv bi1kaXNrIHNpemUsIGluY2x1ZGluZyB0aGUgYWN0aW9uIHR5cGUgY2hhcmFjdGVyICovCkBAIC0z NDk4LDYgKzQxMDgsMjEgQEAgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3RyaW5n SW5mbyBzKQogfQogCiAvKgorICogc3RyZWFtX3dyaXRlX21lc3NhZ2UKKyAqCSAgU2VyaWFsaXpl IHRoZSBtZXNzYWdlIHRoYXQgYXJlIG5vdCBpbiBhIHN0cmVhbWluZyBibG9jayB0byBhIGZpbGUu CisgKi8KK3N0YXRpYyB2b2lkCitzdHJlYW1fd3JpdGVfbWVzc2FnZShUcmFuc2FjdGlvbklkIHhp ZCwgY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcywKKwkJCQkJIGJvb2wgY3JlYXRlX2ZpbGUpCit7 CisJQXNzZXJ0KCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7CisKKwlzZXJpYWxpemVfc3RyZWFt X3N0YXJ0KHhpZCwgY3JlYXRlX2ZpbGUpOworCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCBz KTsKKwlzZXJpYWxpemVfc3RyZWFtX3N0b3AoeGlkKTsKK30KKworLyoKICAqIENsZWFudXAgdGhl IG1lbW9yeSBmb3Igc3VieGFjdHMgYW5kIHJlc2V0IHRoZSByZWxhdGVkIHZhcmlhYmxlcy4KICAq Lwogc3RhdGljIGlubGluZSB2b2lkCkBAIC0zNjA4LDM3ICs0MjMzLDE2IEBAIHN0YXJ0X2FwcGx5 KFhMb2dSZWNQdHIgb3JpZ2luX3N0YXJ0cG9zKQogCVBHX0VORF9UUlkoKTsKIH0KIAotLyogTG9n aWNhbCBSZXBsaWNhdGlvbiBBcHBseSB3b3JrZXIgZW50cnkgcG9pbnQgKi8KKy8qCisgKiBDb21t b24gaW5pdGlhbGl6YXRpb24gZm9yIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4KKyAqCisgKiBJbml0aWFsaXplIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uLCBp bi1tZW1vcnkgc3Vic2NyaXB0aW9uIGFuZCBuZWNlc3NhcnkKKyAqIGNvbmZpZyBvcHRpb25zLgor ICovCiB2b2lkCi1BcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCitJbml0aWFsaXplQXBw bHlXb3JrZXIodm9pZCkKIHsKLQlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFp bl9hcmcpOwogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwotCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURB VEFMRU5dOwotCVhMb2dSZWNQdHIJb3JpZ2luX3N0YXJ0cG9zID0gSW52YWxpZFhMb2dSZWNQdHI7 Ci0JY2hhcgkgICAqbXlzbG90bmFtZSA9IE5VTEw7Ci0JV2FsUmN2U3RyZWFtT3B0aW9ucyBvcHRp b25zOwotCWludAkJCXNlcnZlcl92ZXJzaW9uOwotCi0JLyogQXR0YWNoIHRvIHNsb3QgKi8KLQls b2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOwotCi0JLyogU2V0dXAgc2lnbmFs IGhhbmRsaW5nICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVs b2FkKTsKLQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwotCUJhY2tncm91bmRXb3JrZXJVbmJsb2Nr U2lnbmFscygpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBjdXJyZW50bHkgbmVlZCBhbnkgUmVzb3Vy Y2VPd25lciBpbiBhIHdhbHJlY2VpdmVyIHByb2Nlc3MsIGJ1dAotCSAqIGlmIHdlIGRpZCwgd2Ug Y291bGQgY2FsbCBDcmVhdGVBdXhQcm9jZXNzUmVzb3VyY2VPd25lciBoZXJlLgotCSAqLwotCi0J LyogSW5pdGlhbGlzZSBzdGF0cyB0byBhIHNhbmlzaCB2YWx1ZSAqLwotCU15TG9naWNhbFJlcFdv cmtlci0+bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1l ID0KLQkJTXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFt cCgpOwotCi0JLyogTG9hZCB0aGUgbGlicHEtc3BlY2lmaWMgZnVuY3Rpb25zICovCi0JbG9hZF9m aWxlKCJsaWJwcXdhbHJlY2VpdmVyIiwgZmFsc2UpOwogCiAJLyogUnVuIGFzIHJlcGxpY2Egc2Vz c2lvbiByZXBsaWNhdGlvbiByb2xlLiAqLwogCVNldENvbmZpZ09wdGlvbigic2Vzc2lvbl9yZXBs aWNhdGlvbl9yb2xlIiwgInJlcGxpY2EiLApAQCAtMzY2Niw5ICs0MjcwLDExIEBAIEFwcGx5V29y a2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAlpZiAoIU15U3Vic2NyaXB0aW9uKQogCXsKIAkJZXJl cG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiAldSB3aWxsIG5vdCAiCi0JCQkJCQkic3RhcnQgYmVjYXVzZSB0aGUg c3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15TG9naWNh bFJlcFdvcmtlci0+c3ViaWQpKSk7CisJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9m IGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNj cmlwdGlvbiAldSB3aWxsIG5vdCBzdGFydCBiZWNhdXNlIHRoZSAiCisJCQkJCQkic3Vic2NyaXB0 aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgp LCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCiAJCXByb2NfZXhpdCgwKTsKIAl9CiAK QEAgLTM2NzgsOSArNDI4NCwxMCBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJ aWYgKCFNeVN1YnNjcmlwdGlvbi0+ZW5hYmxlZCkKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShl cnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24g XCIlc1wiIHdpbGwgbm90ICIKLQkJCQkJCSJzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24g d2FzIGRpc2FibGVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOworCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIl c1wiIHdpbGwgbm90IHN0YXJ0IGJlY2F1c2UgIgorCQkJCQkJInRoZSBzdWJzY3JpcHRpb24gd2Fz IGRpc2FibGVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1 YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzY5NiwxNCAr NDMwMyw1MSBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAlpZiAoYW1fdGFi bGVzeW5jX3dvcmtlcigpKQogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJl cGxpY2F0aW9uIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBc IiVzXCIsIHRhYmxlIFwiJXNcIiBoYXMgc3RhcnRlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+ bmFtZSwgZ2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpKSkpOworCQkvKiB0 cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiLCB0YWJsZSBc IiVzXCIgaGFzIHN0YXJ0ZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0 aW9uLT5uYW1lLAorCQkJCQkJZ2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQp KSkpOwogCWVsc2UKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNh dGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAot CQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVz IGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1z ZygiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAorCQkJCQkJZ2V0X3dv cmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7Cit9CisKKy8qIExvZ2ljYWwgUmVwbGljYXRpb24gQXBwbHkgd29ya2VyIGVu dHJ5IHBvaW50ICovCit2b2lkCitBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJ aW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmln aW5uYW1lW05BTUVEQVRBTEVOXTsKKwlYTG9nUmVjUHRyCW9yaWdpbl9zdGFydHBvcyA9IEludmFs aWRYTG9nUmVjUHRyOworCWNoYXIJICAgKm15c2xvdG5hbWUgPSBOVUxMOworCVdhbFJjdlN0cmVh bU9wdGlvbnMgb3B0aW9uczsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKKworCS8qIEF0dGFjaCB0 byBzbG90ICovCisJbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKHdvcmtlcl9zbG90KTsKKworCS8q IFNldHVwIHNpZ25hbCBoYW5kbGluZyAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxl ckZvckNvbmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlCYWNrZ3JvdW5k V29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogV2UgZG9uJ3QgY3VycmVudGx5IG5l ZWQgYW55IFJlc291cmNlT3duZXIgaW4gYSB3YWxyZWNlaXZlciBwcm9jZXNzLCBidXQKKwkgKiBp ZiB3ZSBkaWQsIHdlIGNvdWxkIGNhbGwgQ3JlYXRlQXV4UHJvY2Vzc1Jlc291cmNlT3duZXIgaGVy ZS4KKwkgKi8KKworCS8qIEluaXRpYWxpc2Ugc3RhdHMgdG8gYSBzYW5pc2ggdmFsdWUgKi8KKwlN eUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0gTXlMb2dpY2FsUmVwV29ya2VyLT5s YXN0X3JlY3ZfdGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtlci0+cmVwbHlfdGltZSA9IEdldEN1 cnJlbnRUaW1lc3RhbXAoKTsKKworCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9u cyAqLworCWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKKworCUluaXRpYWxp emVBcHBseVdvcmtlcigpOwogCiAJLyogQ29ubmVjdCB0byB0aGUgb3JpZ2luIGFuZCBzdGFydCB0 aGUgcmVwbGljYXRpb24uICovCiAJZWxvZyhERUJVRzEsICJjb25uZWN0aW5nIHRvIHB1Ymxpc2hl ciB1c2luZyBjb25uZWN0aW9uIHN0cmluZyBcIiVzXCIiLApAQCAtMzcyNiw3ICs0MzcwLDcgQEAg QXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCX0KIAllbHNlCiAJewotCQkvKiBUaGlz IGlzIG1haW4gYXBwbHkgd29ya2VyICovCisJCS8qIFRoaXMgaXMgbGVhZGVyIGFwcGx5IHdvcmtl ciAqLwogCQlSZXBPcmlnaW5JZCBvcmlnaW5pZDsKIAkJVGltZUxpbmVJRAlzdGFydHBvaW50VExJ OwogCQljaGFyCSAgICplcnI7CkBAIC0zNzUwLDcgKzQzOTQsNyBAQCBBcHBseVdvcmtlck1haW4o RGF0dW0gbWFpbl9hcmcpCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9yaWdpbm5h bWUsIHRydWUpOwogCQlpZiAoIU9pZElzVmFsaWQob3JpZ2luaWQpKQogCQkJb3JpZ2luaWQgPSBy ZXBsb3JpZ2luX2NyZWF0ZShvcmlnaW5uYW1lKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVw KG9yaWdpbmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJ cmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQlvcmlnaW5fc3RhcnRwb3Mg PSByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsKIAkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CkBAIC0zNzkxLDEzICs0NDM1LDM2IEBAIEFwcGx5V29ya2VyTWFpbihE YXR1bSBtYWluX2FyZykKIAogCXNlcnZlcl92ZXJzaW9uID0gd2FscmN2X3NlcnZlcl92ZXJzaW9u KExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wcm90b192 ZXJzaW9uID0KKwkJc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19T VFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNTAwMDAg PyBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDoKIAkJc2VydmVyX3ZlcnNp b24gPj0gMTQwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0gOgogCQlM T0dJQ0FMUkVQX1BST1RPX1ZFUlNJT05fTlVNOwogCiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnB1 YmxpY2F0aW9uX25hbWVzID0gTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9uczsKIAlvcHRpb25z LnByb3RvLmxvZ2ljYWwuYmluYXJ5ID0gTXlTdWJzY3JpcHRpb24tPmJpbmFyeTsKLQlvcHRpb25z LnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nID0gTXlTdWJzY3JpcHRpb24tPnN0cmVhbTsKKworCS8q CisJICogQXNzaWduIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gdmFsdWUgZm9yIHN0cmVhbWluZyBv cHRpb24gYWNjb3JkaW5nIHRvCisJICogdGhlICdzdHJlYW1pbmcnIG1vZGUgYW5kIHRoZSBwdWJs aXNoZXIncyBhYmlsaXR5IHRvIHN1cHBvcnQgdGhhdCBtb2RlLgorCSAqLworCWlmIChzZXJ2ZXJf dmVyc2lvbiA+PSAxNjAwMDAgJiYKKwkJTXlTdWJzY3JpcHRpb24tPnN0cmVhbSA9PSBTVUJTVFJF QU1fUEFSQUxMRUwpCisJeworCQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9 IHBzdHJkdXAoInBhcmFsbGVsIik7CisJCU15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBw bHkgPSB0cnVlOworCX0KKwllbHNlIGlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxNDAwMDAgJiYKKwkJ CSBNeVN1YnNjcmlwdGlvbi0+c3RyZWFtICE9IFNVQlNUUkVBTV9PRkYpCisJeworCQlvcHRpb25z LnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IHBzdHJkdXAoIm9uIik7CisJCU15TG9naWNh bFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJb3B0 aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSBOVUxMOworCQlNeUxvZ2ljYWxSZXBX b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7CisJfQorCiAJb3B0aW9ucy5wcm90by5sb2dp Y2FsLnR3b3BoYXNlID0gZmFsc2U7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLm9yaWdpbiA9IHBz dHJkdXAoTXlTdWJzY3JpcHRpb24tPm9yaWdpbik7CiAKQEAgLTM4MzAsNyArNDQ5Nyw4IEBAIEFw cGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAkJfQogCiAJCWVyZXBvcnQoREVCVUcxLAot CQkJCShlcnJtc2dfaW50ZXJuYWwoImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZv ciBzdWJzY3JpcHRpb24gXCIlc1wiIHR3b19waGFzZSBpcyAlcyIsCisJCQkJKGVycm1zZ19pbnRl cm5hbCgiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgdHdvX3BoYXNlIGlzICVzIiwKKwkJCQkJ CWdldF93b3JrZXJfbmFtZSgpLAogCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsCiAJCQkJCQlN eVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRF X0RJU0FCTEVEID8gIkRJU0FCTEVEIiA6CiAJCQkJCQlNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2Vz dGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX1BFTkRJTkcgPyAiUEVORElORyIgOgpA QCAtMzg5NSw2ICs0NTYzLDE1IEBAIElzTG9naWNhbFdvcmtlcih2b2lkKQogfQogCiAvKgorICog SXMgY3VycmVudCBwcm9jZXNzIGEgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3 b3JrZXI/CisgKi8KK2Jvb2wKK0lzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCkKK3sK KwlyZXR1cm4gSXNMb2dpY2FsV29ya2VyKCkgJiYgYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCk7 Cit9CisKKy8qCiAgKiBTdGFydCBza2lwcGluZyBjaGFuZ2VzIG9mIHRoZSB0cmFuc2FjdGlvbiBp ZiB0aGUgZ2l2ZW4gTFNOIG1hdGNoZXMgdGhlCiAgKiBMU04gc3BlY2lmaWVkIGJ5IHN1YnNjcmlw dGlvbidzIHNraXBsc24uCiAgKi8KQEAgLTM5NTYsNyArNDYzMyw3IEBAIGNsZWFyX3N1YnNjcmlw dGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pCiAJWExvZ1JlY1B0cglteXNraXBs c24gPSBNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbjsKIAlib29sCQlzdGFydGVkX3R4ID0gZmFsc2U7 CiAKLQlpZiAobGlrZWx5KFhMb2dSZWNQdHJJc0ludmFsaWQobXlza2lwbHNuKSkpCisJaWYgKGxp a2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpIHx8IGFtX3BhcmFsbGVsX2FwcGx5 X3dvcmtlcigpKQogCQlyZXR1cm47CiAKIAlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQpAQCAt NDAyOCw3ICs0NzA1LDcgQEAgY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIg ZmluaXNoX2xzbikKIH0KIAogLyogRXJyb3IgY2FsbGJhY2sgdG8gZ2l2ZSBtb3JlIGNvbnRleHQg aW5mbyBhYm91dCB0aGUgY2hhbmdlIGJlaW5nIGFwcGxpZWQgKi8KLXN0YXRpYyB2b2lkCit2b2lk CiBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiB7CiAJQXBwbHlFcnJvckNhbGxiYWNr QXJnICplcnJhcmcgPSAmYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnOwpAQCAtNDA1NiwyMyArNDcz Myw0NyBAQCBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiAJCQkJCSAgIGVycmFyZy0+ cmVtb3RlX3hpZCwKIAkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikp OwogCX0KLQllbHNlIGlmIChlcnJhcmctPnJlbW90ZV9hdHRudW0gPCAwKQotCQllcnJjb250ZXh0 KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1 cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24g XCIlcy4lc1wiIGluIHRyYW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCi0JCQkJICAg ZXJyYXJnLT5vcmlnaW5fbmFtZSwKLQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJh cmctPmNvbW1hbmQpLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKLQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZW1v dGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAll bHNlCi0JCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9u IG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9u IHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAl dSwgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCi0JCQkJ ICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKLQkJCQkgICBlcnJh cmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJl bC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJn LT5yZW1vdGVfYXR0bnVtXSwKLQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCi0JCQkJICAgTFNO X0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOworCXsKKwkJaWYgKGVycmFyZy0+cmVt b3RlX2F0dG51bSA8IDApCisJCXsKKwkJCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKGVycmFyZy0+ ZmluaXNoX2xzbikpCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3Ig cmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3Ig cmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIs CisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNz YWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVy ZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJ CQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7CisJCQllbHNlCisJCQkJZXJyY29udGV4dCgicHJv Y2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcg bWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMu JXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJy YXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFy Zy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJ CQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmct PnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNu KSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmct PmZpbmlzaF9sc24pKQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9y IHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9y IHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0 cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAg bG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFy Zy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVy ZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJy YXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7CisJCQll bHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRp b24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRp b24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBjb2x1bW4gXCIlc1wiIGluIHRyYW5zYWN0aW9u ICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAor CQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJ CSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVs LT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0 bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hp ZCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKKwkJfQor CX0KIH0KIAogLyogU2V0IHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uIG9mIGFwcGx5IGVycm9yIGNh bGxiYWNrICovCkBAIC00MDkyLDMgKzQ3OTMsNTcgQEAgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4 dF9pbmZvKHZvaWQpCiAJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLnJlbW90ZV9hdHRudW0gPSAt MTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KEludmFsaWRUcmFuc2FjdGlvbklkLCBJ bnZhbGlkWExvZ1JlY1B0cik7CiB9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFjdGlvbiB0byB0YWtl IGZvciB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24uICp3aW5mbyBpcyBhc3NpZ25lZCB0bworICogdGhl IGRlc3RpbmF0aW9uIHBhcmFsbGVsIHdvcmtlciBpbmZvIChpZiB0aGUgYWN0aW9uIGlzCisgKiBU UkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCBvciBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJ QUxJWkUpLCBvdGhlcndpc2UKKyAqICp3aW5mbyBpcyBhc3NpZ25lZCBOVUxMLgorICovCitzdGF0 aWMgVHJhbnNBcHBseUFjdGlvbgorZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihUcmFuc2Fj dGlvbklkIHhpZCwgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKip3aW5mbykKK3sKKwkqd2luZm8g PSBOVUxMOworCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJcmV0dXJu IFRSQU5TX1BBUkFMTEVMX0FQUExZOworCX0KKwllbHNlIGlmIChpbl9yZW1vdGVfdHJhbnNhY3Rp b24pCisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX0FQUExZOworCX0KKworCS8qCisJICogQ2hl Y2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhpcyB0cmFuc2FjdGlvbiB1c2luZyBhIHBhcmFsbGVs IGFwcGx5CisJICogd29ya2VyLgorCSAqLworCSp3aW5mbyA9IHBhcmFsbGVsX2FwcGx5X2ZpbmRf d29ya2VyKHhpZCk7CisKKwlpZiAoKndpbmZvID09IE5VTEwpCisJeworCQlyZXR1cm4gVFJBTlNf TEVBREVSX1NFUklBTElaRTsKKwl9CisJZWxzZSBpZiAoKCp3aW5mbyktPnNlcmlhbGl6ZV9jaGFu Z2VzKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRTsKKwl9CisJ ZWxzZQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOworCX0KK30K KworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr ZXIuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF93b3JrZXJfbmFtZSh2b2lkKQorewor CWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCisJCXJldHVybiBfKCJsb2dpY2FsIHJlcGxpY2F0 aW9uIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXIiKTsKKwllbHNlIGlmIChhbV9wYXJhbGxl bF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuIF8oImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxs ZWwgYXBwbHkgd29ya2VyIik7CisJZWxzZQorCQlyZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlv biBhcHBseSB3b3JrZXIiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9w Z291dHB1dC5jCmluZGV4IDJlY2FhNWIuLjAzY2RlN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMjkwLDcgKzI5MCw3IEBAIHBhcnNlX291dHB1 dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkKIAlib29sCQlv cmlnaW5fb3B0aW9uX2dpdmVuID0gZmFsc2U7CiAKIAlkYXRhLT5iaW5hcnkgPSBmYWxzZTsKLQlk YXRhLT5zdHJlYW1pbmcgPSBmYWxzZTsKKwlkYXRhLT5zdHJlYW1pbmcgPSBTVUJTVFJFQU1fT0ZG OwogCWRhdGEtPm1lc3NhZ2VzID0gZmFsc2U7CiAJZGF0YS0+dHdvX3BoYXNlID0gZmFsc2U7CiAK QEAgLTM2OSw3ICszNjksNyBAQCBwYXJzZV9vdXRwdXRfcGFyYW1ldGVycyhMaXN0ICpvcHRpb25z LCBQR091dHB1dERhdGEgKmRhdGEpCiAJCQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1 bmRhbnQgb3B0aW9ucyIpKSk7CiAJCQlzdHJlYW1pbmdfZ2l2ZW4gPSB0cnVlOwogCi0JCQlkYXRh LT5zdHJlYW1pbmcgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKKwkJCWRhdGEtPnN0cmVhbWluZyA9 IGRlZkdldFN0cmVhbWluZ01vZGUoZGVmZWwpOwogCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDApCiAJCXsKQEAgLTQ2MSwxMyArNDYxLDIwIEBA IHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVn aW5PcHRpb25zICpvcHQsCiAJCSAqIHdlIG9ubHkgYWxsb3cgaXQgd2l0aCBzdWZmaWNpZW50IHZl cnNpb24gb2YgdGhlIHByb3RvY29sLCBhbmQgd2hlbgogCQkgKiB0aGUgb3V0cHV0IHBsdWdpbiBz dXBwb3J0cyBpdC4KIAkJICovCi0JCWlmICghZGF0YS0+c3RyZWFtaW5nKQorCQlpZiAoZGF0YS0+ c3RyZWFtaW5nID09IFNVQlNUUkVBTV9PRkYpCiAJCQljdHgtPnN0cmVhbWluZyA9IGZhbHNlOwot CQllbHNlIGlmIChkYXRhLT5wcm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJF QU1fVkVSU0lPTl9OVU0pCisJCWVsc2UgaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJTVFJFQU1f T04gJiYKKwkJCQkgZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RS RUFNX1ZFUlNJT05fTlVNKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCSBlcnJtc2coInJlcXVlc3RlZCBwcm90 b192ZXJzaW9uPSVkIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nLCBuZWVkICVkIG9yIGhpZ2hl ciIsCiAJCQkJCQkJZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiwgTE9HSUNBTFJFUF9QUk9UT19TVFJF QU1fVkVSU0lPTl9OVU0pKSk7CisJCWVsc2UgaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJTVFJF QU1fUEFSQUxMRUwgJiYKKwkJCQkgZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBf UFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJt c2coInJlcXVlc3RlZCBwcm90b192ZXJzaW9uPSVkIGRvZXMgbm90IHN1cHBvcnQgcGFyYWxsZWwg c3RyZWFtaW5nLCBuZWVkICVkIG9yIGhpZ2hlciIsCisJCQkJCQkJZGF0YS0+cHJvdG9jb2xfdmVy c2lvbiwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0pKSk7CiAJ CWVsc2UgaWYgKCFjdHgtPnN0cmVhbWluZykKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLApAQCAtNTEzLDcgKzUyMCw3IEBA IHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVn aW5PcHRpb25zICpvcHQsCiAJCSAqIERpc2FibGUgdGhlIHN0cmVhbWluZyBhbmQgcHJlcGFyZWQg dHJhbnNhY3Rpb25zIGR1cmluZyB0aGUgc2xvdAogCQkgKiBpbml0aWFsaXphdGlvbiBtb2RlLgog CQkgKi8KLQkJY3R4LT5zdHJlYW1pbmcgPSBmYWxzZTsKKwkJY3R4LT5zdHJlYW1pbmcgPSBTVUJT VFJFQU1fT0ZGOwogCQljdHgtPnR3b3BoYXNlID0gZmFsc2U7CiAJfQogfQpAQCAtMTgzOSw2ICsx ODQ2LDggQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCiAJCQkJCSAgWExvZ1JlY1B0ciBhYm9ydF9sc24pCiB7CiAJUmVvcmRlckJ1ZmZl clRYTiAqdG9wdHhuOworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4 LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJYm9vbAkJd3JpdGVfYWJvcnRfaW5mbyA9IChkYXRh LT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFNX1BBUkFMTEVMKTsKIAogCS8qCiAJICogVGhlIGFib3J0 IHNob3VsZCBoYXBwZW4gb3V0c2lkZSBzdHJlYW1pbmcgYmxvY2ssIGV2ZW4gZm9yIHN0cmVhbWVk CkBAIC0xODUyLDcgKzE4NjEsOSBAQCBwZ291dHB1dF9zdHJlYW1fYWJvcnQoc3RydWN0IExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAlBc3NlcnQocmJ0eG5faXNfc3RyZWFtZWQodG9wdHhu KSk7CiAKIAlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQlsb2dpY2FscmVw X3dyaXRlX3N0cmVhbV9hYm9ydChjdHgtPm91dCwgdG9wdHhuLT54aWQsIHR4bi0+eGlkKTsKKwls b2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChjdHgtPm91dCwgdG9wdHhuLT54aWQsIHR4bi0+ eGlkLCBhYm9ydF9sc24sCisJCQkJCQkJCSAgdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSwgd3Jp dGVfYWJvcnRfaW5mbyk7CisKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogCiAJY2xl YW51cF9yZWxfc3luY19jYWNoZSh0b3B0eG4tPnhpZCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCmluZGV4IDc3Njc2NTcuLjdjMDA5ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jc2lnbmFsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9h c3luYy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCkBAIC02NTcsNiArNjU4LDkgQEAgcHJvY3NpZ25hbF9z aWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lH X0xPR19NRU1PUllfQ09OVEVYVCkpCiAJCUhhbmRsZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQo KTsKIAorCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdF KSkKKwkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVj a1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSkpCiAJCVJlY292 ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYwppbmRleCAzMDgyMDkzLi5mNTJlNWJhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CkBAIC0zMzc5LDYgKzMzNzksOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCiAJaWYgKExv Z01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVw dCgpOworCisJaWYgKFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZykKKwkJSGFuZGxlUGFyYWxs ZWxBcHBseU1lc3NhZ2VzKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50LmMKaW5kZXggOTJmMjRhNi4uZGNmZjU5OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3dhaXRfZXZlbnQuYwpAQCAtMjMwLDYgKzIzMCw5IEBAIHBnc3RhdF9nZXRfd2FpdF9hY3Rp dml0eShXYWl0RXZlbnRBY3Rpdml0eSB3KQogCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9MQVVO Q0hFUl9NQUlOOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsTGF1bmNoZXJNYWluIjsKIAkJCWJy ZWFrOworCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOOgorCQkJ ZXZlbnRfbmFtZSA9ICJMb2dpY2FsUGFyYWxsZWxBcHBseU1haW4iOworCQkJYnJlYWs7CiAJCWNh c2UgV0FJVF9FVkVOVF9SRUNPVkVSWV9XQUxfU1RSRUFNOgogCQkJZXZlbnRfbmFtZSA9ICJSZWNv dmVyeVdhbFN0cmVhbSI7CiAJCQlicmVhazsKQEAgLTM4OCw2ICszOTEsOSBAQCBwZ3N0YXRfZ2V0 X3dhaXRfaXBjKFdhaXRFdmVudElQQyB3KQogCQljYXNlIFdBSVRfRVZFTlRfSEFTSF9HUk9XX0JV Q0tFVFNfUkVJTlNFUlQ6CiAJCQlldmVudF9uYW1lID0gIkhhc2hHcm93QnVja2V0c1JlaW5zZXJ0 IjsKIAkJCWJyZWFrOworCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9T VEFURV9DSEFOR0U6CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxQYXJhbGxlbEFwcGx5U3RhdGVD aGFuZ2UiOworCQkJYnJlYWs7CiAJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1NZTkNfREFUQToK IAkJCWV2ZW50X25hbWUgPSAiTG9naWNhbFN5bmNEYXRhIjsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA4MzZiNDk0Li42NzRiYThmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMjk2Miw2ICsyOTYyLDE4IEBAIHN0cnVjdCBjb25maWdf aW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCX0sCiAKIAl7CisJCXsibWF4X3BhcmFsbGVsX2Fw cGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiIsCisJCQlQR0NfU0lHSFVQLAorCQkJUkVQTElD QVRJT05fU1VCU0NSSUJFUlMsCisJCQlnZXR0ZXh0X25vb3AoIk1heGltdW0gbnVtYmVyIG9mIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMgcGVyIHN1YnNjcmlwdGlvbi4iKSwKKwkJCU5VTEwsCisJCX0s CisJCSZtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLAorCQkyLCAw LCBNQVhfQkFDS0VORFMsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJewogCQl7ImxvZ19y b3RhdGlvbl9hZ2UiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dIRVJFLAogCQkJZ2V0dGV4dF9ub29w KCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaW5nICIKIAkJCQkJ CSAibG9nIGZpbGUgcm90YXRpb24uIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKaW5kZXggODY4ZDIxYy4uNGQwMWNhOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzYwLDYgKzM2MCw3IEBA CiAjbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDQJIyB0YWtlbiBmcm9tIG1heF93 b3JrZXJfcHJvY2Vzc2VzCiAJCQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI21heF9z eW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDIJIyB0YWtlbiBmcm9tIG1heF9sb2dpY2Fs X3JlcGxpY2F0aW9uX3dvcmtlcnMKKyNtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uID0gMgkjIHRha2VuIGZyb20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vy cwogCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGRhNDI3ZjQuLjUx NDFhNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNDQ4MSw3ICs0NDgxLDcgQEAgZ2V0U3Vic2NyaXB0aW9u cyhBcmNoaXZlICpmb3V0KQogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE0MDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgcy5zdWJzdHJlYW0sXG4iKTsKIAllbHNlCi0J CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIGZhbHNlIEFTIHN1YnN0cmVhbSxcbiIpOwor CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiAnZicgQVMgc3Vic3RyZWFtLFxuIik7CiAK IAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LApAQCAtNDYxOCw4ICs0NjE4LDEwIEBAIGR1bXBTdWJzY3JpcHRpb24oQXJjaGl2 ZSAqZm91dCwgY29uc3QgU3Vic2NyaXB0aW9uSW5mbyAqc3ViaW5mbykKIAlpZiAoc3RyY21wKHN1 YmluZm8tPnN1YmJpbmFyeSwgInQiKSA9PSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwgIiwgYmluYXJ5ID0gdHJ1ZSIpOwogCi0JaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJzdHJlYW0s ICJmIikgIT0gMCkKKwlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgInQiKSA9PSAwKQog CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3RyZWFtaW5nID0gb24iKTsKKwllbHNl IGlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAicCIpID09IDApCisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiLCBzdHJlYW1pbmcgPSBwYXJhbGxlbCIpOwogCiAJaWYgKHN0cmNt cChzdWJpbmZvLT5zdWJ0d29waGFzZXN0YXRlLCB0d29fcGhhc2VfZGlzYWJsZWQpICE9IDApCiAJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCB0d29fcGhhc2UgPSBvbiIpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKaW5kZXggN2I5ODcxNC4uMDE2YWZiYyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCkBAIC04MCw3ICs4MCw4IEBAIENBVEFMT0co cGdfc3Vic2NyaXB0aW9uLDYxMDAsU3Vic2NyaXB0aW9uUmVsYXRpb25JZCkgQktJX1NIQVJFRF9S RUxBVElPTiBCS0lfUk9XCiAJYm9vbAkJc3ViYmluYXJ5OwkJLyogVHJ1ZSBpZiB0aGUgc3Vic2Ny aXB0aW9uIHdhbnRzIHRoZQogCQkJCQkJCQkgKiBwdWJsaXNoZXIgdG8gc2VuZCBkYXRhIGluIGJp bmFyeSAqLwogCi0JYm9vbAkJc3Vic3RyZWFtOwkJLyogU3RyZWFtIGluLXByb2dyZXNzIHRyYW5z YWN0aW9ucy4gKi8KKwljaGFyCQlzdWJzdHJlYW07CQkvKiBTdHJlYW0gaW4tcHJvZ3Jlc3MgdHJh bnNhY3Rpb25zLiBTZWUKKwkJCQkJCQkJICogU1VCU1RSRUFNX3h4eCBjb25zdGFudHMuICovCiAK IAljaGFyCQlzdWJ0d29waGFzZXN0YXRlOwkvKiBTdHJlYW0gdHdvLXBoYXNlIHRyYW5zYWN0aW9u cyAqLwogCkBAIC0xMjQsNyArMTI1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJ Ym9vbAkJZW5hYmxlZDsJCS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIGlzIGVuYWJs ZWQgKi8KIAlib29sCQliaW5hcnk7CQkJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24g d2FudHMgZGF0YSBpbgogCQkJCQkJCQkgKiBiaW5hcnkgZm9ybWF0ICovCi0JYm9vbAkJc3RyZWFt OwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hh cgkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMu CisJCQkJCQkJCSAqIFNlZSBTVUJTVFJFQU1feHh4IGNvbnN0YW50cy4gKi8KIAljaGFyCQl0d29w aGFzZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1pbmcgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyAqLwog CWJvb2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gc2hv dWxkIGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgYSB3b3JrZXIgZXJy b3IKQEAgLTEzNyw2ICsxMzksMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJCQkJ CQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8KIH0gU3Vic2NyaXB0aW9uOwogCisvKiBEaXNhbGxv dyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworI2RlZmluZSBTVUJTVFJF QU1fT0ZGICdmJworCisvKgorICogU3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyBh cmUgd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZAorICogYXBwbGllZCBvbmx5IGFmdGVy IHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gdXBzdHJlYW0uCisgKi8KKyNkZWZpbmUg U1VCU1RSRUFNX09OICd0JworCisvKgorICogU3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0 aW9ucyBhcmUgYXBwbGllZCBpbW1lZGlhdGVseSB2aWEgYSBwYXJhbGxlbAorICogYXBwbHkgd29y a2VyLgorICovCisjZGVmaW5lIFNVQlNUUkVBTV9QQVJBTExFTCAncCcKKwogZXh0ZXJuIFN1YnNj cmlwdGlvbiAqR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4 dGVybiB2b2lkIEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZv aWQgRGlzYWJsZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZGVmcmVtLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaAppbmRl eCAxZDNjZTI0Li4wNTNlZGQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZy ZW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaApAQCAtMTU1LDYgKzE1NSw3 IEBAIGV4dGVybiBMaXN0ICpkZWZHZXRRdWFsaWZpZWROYW1lKERlZkVsZW0gKmRlZik7CiBleHRl cm4gVHlwZU5hbWUgKmRlZkdldFR5cGVOYW1lKERlZkVsZW0gKmRlZik7CiBleHRlcm4gaW50CWRl ZkdldFR5cGVMZW5ndGgoRGVmRWxlbSAqZGVmKTsKIGV4dGVybiBMaXN0ICpkZWZHZXRTdHJpbmdM aXN0KERlZkVsZW0gKmRlZik7CitleHRlcm4gY2hhciBkZWZHZXRTdHJlYW1pbmdNb2RlKERlZkVs ZW0gKmRlZik7CiBleHRlcm4gdm9pZCBlcnJvckNvbmZsaWN0aW5nRGVmRWxlbShEZWZFbGVtICpk ZWZlbCwgUGFyc2VTdGF0ZSAqcHN0YXRlKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIERFRlJFTV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FsbGF1bmNoZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxs YXVuY2hlci5oCmluZGV4IGYxZTI4MjEuLmQ1MTNlZjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxsYXVuY2hlci5oCkBAIC0xNCw2ICsxNCw3IEBACiAKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOworZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOwog CiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBB cHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oCmluZGV4IDdlYWE0YzkuLjFkYTdiMDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oCkBAIC0zMiwxMiArMzIsMTcgQEAKICAqCiAgKiBMT0dJQ0FMUkVQ X1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIGlzIHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNp b24gd2l0aAogICogc3VwcG9ydCBmb3IgdHdvLXBoYXNlIGNvbW1pdCBkZWNvZGluZyAoYXQgcHJl cGFyZSB0aW1lKS4gSW50cm9kdWNlZCBpbiBQRzE1LgorICoKKyAqIExPR0lDQUxSRVBfUFJPVE9f U1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIGlzIHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNp b24KKyAqIHdoZXJlIHdlIHN1cHBvcnQgYXBwbHlpbmcgbGFyZ2Ugc3RyZWFtaW5nIHRyYW5zYWN0 aW9ucyBpbiBwYXJhbGxlbC4KKyAqIEludHJvZHVjZWQgaW4gUEcxNi4KICAqLwogI2RlZmluZSBM T0dJQ0FMUkVQX1BST1RPX01JTl9WRVJTSU9OX05VTSAxCiAjZGVmaW5lIExPR0lDQUxSRVBfUFJP VE9fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9O X05VTSAyCiAjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0gMwot I2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX01BWF9WRVJTSU9OX05VTSBMT0dJQ0FMUkVQX1BST1RP X1RXT1BIQVNFX1ZFUlNJT05fTlVNCisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BB UkFMTEVMX1ZFUlNJT05fTlVNIDQKKyNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19NQVhfVkVSU0lP Tl9OVU0gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0KIAogLyoK ICAqIExvZ2ljYWwgbWVzc2FnZSB0eXBlcwpAQCAtMTc1LDYgKzE4MCwxNyBAQCB0eXBlZGVmIHN0 cnVjdCBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEKIAljaGFyCQlnaWRbR0lEU0la RV07CiB9IExvZ2ljYWxSZXBSb2xsYmFja1ByZXBhcmVkVHhuRGF0YTsKIAorLyoKKyAqIFRyYW5z YWN0aW9uIHByb3RvY29sIGluZm9ybWF0aW9uIGZvciBzdHJlYW0gYWJvcnQuCisgKi8KK3R5cGVk ZWYgc3RydWN0IExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEKK3sKKwlUcmFuc2FjdGlvbklkIHhp ZDsKKwlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKwlYTG9nUmVjUHRyCWFib3J0X2xzbjsKKwlUaW1l c3RhbXBUeiBhYm9ydF90aW1lOworfSBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhOworCiBleHRl cm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2JlZ2luKFN0cmluZ0luZm8gb3V0LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWFkX2JlZ2luKFN0cmluZ0lu Zm8gaW4sCiAJCQkJCQkJCSAgTG9naWNhbFJlcEJlZ2luRGF0YSAqYmVnaW5fZGF0YSk7CkBAIC0y NDYsOSArMjYyLDEzIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2NvbW1p dChTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBleHRlcm4gVHJhbnNhY3Rp b25JZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIGluLAogCQkJCQkJ CQkJCQkJICAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlv bklkIHhpZCwKLQkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkKTsKLWV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNhY3Rpb25J ZCAqeGlkLAotCQkJCQkJCQkJCSBUcmFuc2FjdGlvbklkICpzdWJ4aWQpOworCQkJCQkJCQkJCSAg VHJhbnNhY3Rpb25JZCBzdWJ4aWQsCisJCQkJCQkJCQkJICBYTG9nUmVjUHRyIGFib3J0X2xzbiwK KwkJCQkJCQkJCQkgIFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCisJCQkJCQkJCQkJICBib29sIHdy aXRlX2Fib3J0X2luZm8pOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9y dChTdHJpbmdJbmZvIGluLAorCQkJCQkJCQkJCSBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICph Ym9ydF9kYXRhLAorCQkJCQkJCQkJCSBib29sIHJlYWRfYWJvcnRfaW5mbyk7CiBleHRlcm4gY2hh ciAqbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKTsKIAog I2VuZGlmCQkJCQkJCS8qIExPR0lDQUxfUFJPVE9fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHdvcmtlci5oCmluZGV4IGNkMWI2ZTguLmRjNjhjZDggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAgLTEyLDggKzEyLDE2IEBACiAjaWZuZGVmIExPR0lD QUxXT1JLRVJfSAogI2RlZmluZSBMT0dJQ0FMV09SS0VSX0gKIAorI2luY2x1ZGUgPHNpZ25hbC5o PgorCitleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFBhcmFsbGVsQXBw bHlNZXNzYWdlUGVuZGluZzsKKwogZXh0ZXJuIHZvaWQgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1h aW5fYXJnKTsKK2V4dGVybiB2b2lkIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5f YXJnKTsKIAogZXh0ZXJuIGJvb2wgSXNMb2dpY2FsV29ya2VyKHZvaWQpOworZXh0ZXJuIGJvb2wg SXNMb2dpY2FsUGFyYWxsZWxBcHBseVdvcmtlcih2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRsZVBh cmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgSGFuZGxlUGFy YWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogTE9HSUNBTFdPUktF Ul9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCmluZGV4IDJhNTBkMTAuLmM3YjFhZGYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCkBAIC01Myw3ICs1Myw3IEBAIGV4dGVybiBYTG9nUmVj UHRyIHJlcGxvcmlnaW5fZ2V0X3Byb2dyZXNzKFJlcE9yaWdpbklkIG5vZGUsIGJvb2wgZmx1c2gp OwogCiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fYWR2YW5jZShYTG9nUmVjUHRyIHJl bW90ZV9jb21taXQsCiAJCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxvY2FsX2NvbW1pdCk7Ci1leHRl cm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSk7CitleHRl cm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSwgaW50IGFj cXVpcmVkX2J5KTsKIGV4dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCh2b2lkKTsK IGV4dGVybiBYTG9nUmVjUHRyIHJlcGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoYm9vbCBm bHVzaCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0Lmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUuLjNjMzBk YTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjYsNyArMjYsNyBAQCB0eXBl ZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlM aXN0CSAgICpwdWJsaWNhdGlvbnM7CiAJYm9vbAkJYmluYXJ5OwotCWJvb2wJCXN0cmVhbWluZzsK KwljaGFyCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CiAJYm9vbAkJdHdvX3BoYXNlOwog CWNoYXIJICAgKm9yaWdpbjsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApp bmRleCBiMjNkOGNjLi5iMmE3MDI5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1 ZmZlci5oCkBAIC0zMDEsNiArMzAxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclRY TgogCXsKIAkJVGltZXN0YW1wVHogY29tbWl0X3RpbWU7CiAJCVRpbWVzdGFtcFR6IHByZXBhcmVf dGltZTsKKwkJVGltZXN0YW1wVHogYWJvcnRfdGltZTsKIAl9CQkJeGFjdF90aW1lOwogCiAJLyoK QEAgLTY2Myw5ICs2NjQsMTEgQEAgZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFzc2lnbkNoaWxk KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiB2b2lkIFJlb3Jk ZXJCdWZmZXJDb21taXRDaGlsZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQs CiAJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsIFhMb2dSZWNQdHIgY29tbWl0X2xzbiwK IAkJCQkJCQkJCSBYTG9nUmVjUHRyIGVuZF9sc24pOwotZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZl ckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24pOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJICAgVGltZXN0YW1wVHog YWJvcnRfdGltZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQWJvcnRPbGQoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVubmluZ1hpZCk7Ci1leHRlcm4gdm9pZCBS ZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24pOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVy QnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQlU aW1lc3RhbXBUeiBhYm9ydF90aW1lKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJJbnZhbGlk YXRlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24p OwogCiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyU2V0QmFzZVNuYXBzaG90KFJlb3JkZXJCdWZm ZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5oCmluZGV4IDkzMzlmMjkuLjBjOGJiZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuaApAQCAtMTgyLDcgKzE4Miw3IEBAIHR5cGVkZWYgc3RydWN0CiAJCQl1aW50MzIJCXBy b3RvX3ZlcnNpb247CS8qIExvZ2ljYWwgcHJvdG9jb2wgdmVyc2lvbiAqLwogCQkJTGlzdAkgICAq cHVibGljYXRpb25fbmFtZXM7CS8qIFN0cmluZyBsaXN0IG9mIHB1YmxpY2F0aW9ucyAqLwogCQkJ Ym9vbAkJYmluYXJ5OyAvKiBBc2sgcHVibGlzaGVyIHRvIHVzZSBiaW5hcnkgKi8KLQkJCWJvb2wJ CXN0cmVhbWluZzsJLyogU3RyZWFtaW5nIG9mIGxhcmdlIHRyYW5zYWN0aW9ucyAqLworCQkJY2hh cgkgICAqc3RyZWFtaW5nX3N0cjsJLyogU3RyZWFtaW5nIG9mIGxhcmdlIHRyYW5zYWN0aW9ucyAq LwogCQkJYm9vbAkJdHdvcGhhc2U7CS8qIFN0cmVhbWluZyBvZiB0d28tcGhhc2UgdHJhbnNhY3Rp b25zIGF0CiAJCQkJCQkJCQkgKiBwcmVwYXJlIHRpbWUgKi8KIAkJCWNoYXIJICAgKm9yaWdpbjsg LyogT25seSBwdWJsaXNoIGRhdGEgb3JpZ2luYXRpbmcgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggMmI3MTE0Zi4uYjY2N2RiNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTE3LDggKzE3LDEyIEBA CiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb24uaCIKICNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNp bmNsdWRlICJzdG9yYWdlL2ZpbGVzZXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKKyNp bmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgog I2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogCiAKQEAgLTYwLDYgKzY0LDE1IEBAIHR5cGVkZWYg c3RydWN0IExvZ2ljYWxSZXBXb3JrZXIKIAkgKi8KIAlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNl dDsKIAorCS8qCisJICogUElEIG9mIGxlYWRlciBhcHBseSB3b3JrZXIgaWYgdGhpcyBzbG90IGlz IHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIsIEludmFsaWRQaWQgb3RoZXJ3 aXNlLgorCSAqLworCXBpZF90CQlhcHBseV9sZWFkZXJfcGlkOworCisJLyogSW5kaWNhdGVzIHdo ZXRoZXIgYXBwbHkgY2FuIGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4gKi8KKwlib29sCQlwYXJh bGxlbF9hcHBseTsKKwogCS8qIFN0YXRzLiAqLwogCVhMb2dSZWNQdHIJbGFzdF9sc247CiAJVGlt ZXN0YW1wVHogbGFzdF9zZW5kX3RpbWU7CkBAIC02OCw5ICs4MSwxMjcgQEAgdHlwZWRlZiBzdHJ1 Y3QgTG9naWNhbFJlcFdvcmtlcgogCVRpbWVzdGFtcFR6IHJlcGx5X3RpbWU7CiB9IExvZ2ljYWxS ZXBXb3JrZXI7CiAKKy8qIFN0cnVjdCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYXBwbHkgZXJy Y29udGV4dCBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJvckNhbGxiYWNr QXJnCit7CisJTG9naWNhbFJlcE1zZ1R5cGUgY29tbWFuZDsJLyogMCBpZiBpbnZhbGlkICovCisJ TG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisKKwkvKiBSZW1vdGUgbm9kZSBpbmZvcm1hdGlv biAqLworCWludAkJCXJlbW90ZV9hdHRudW07CS8qIC0xIGlmIGludmFsaWQgKi8KKwlUcmFuc2Fj dGlvbklkIHJlbW90ZV94aWQ7CisJWExvZ1JlY1B0cglmaW5pc2hfbHNuOworCWNoYXIJICAgKm9y aWdpbl9uYW1lOworfSBBcHBseUVycm9yQ2FsbGJhY2tBcmc7CisKKy8qIFN0YXRlIG9mIHRoZSB0 cmFuc2FjdGlvbiBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKi8KK3R5cGVkZWYgZW51bSBQYXJh bGxlbFRyYW5zU3RhdGUKK3sKKwlQQVJBTExFTF9UUkFOU19VTktOT1dOLAorCVBBUkFMTEVMX1RS QU5TX1NUQVJURUQsCisJUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQKK30gUGFyYWxsZWxUcmFuc1N0 YXRlOworCisvKgorICogU3RydWN0IGZvciBzaGFyaW5nIGluZm9ybWF0aW9uIGJldHdlZW4gbGVh ZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlcnMuCisgKi8KK3R5 cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQKK3sKKwlzbG9ja190CQltdXRl eDsKKworCVRyYW5zYWN0aW9uSWQJeGlkOworCisJLyoKKwkgKiBGbGFnIHVzZWQgdG8gZW5zdXJl IGNvbW1pdCBvcmRlcmluZy4KKwkgKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2ls bCBzZXQgaXQgdG8gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYWZ0ZXIKKwkgKiBoYW5kbGluZyB0 aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBhcHBseSBsZWFkZXIgd2ls bAorCSAqIHdhaXQgZm9yIGl0IHRvIGJlY29tZSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBiZWZv cmUgcHJvY2VlZGluZyBpbgorCSAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kcyAoZS5nLiBT VFJFQU1fQ09NTUlUL1NUUkVBTV9QUkVQQVJFKS4KKwkgKi8KKwlQYXJhbGxlbFRyYW5zU3RhdGUJ CXhhY3Rfc3RhdGU7CisKKwkvKiBVbmlxdWUgaWRlbnRpZmllcnMgaW4gdGhlIGN1cnJlbnQgc3Vi c2NyaXB0aW9uIHRoYXQgdXNlZCB0byBsb2NrLiAqLworCXVpbnQxNgkJc3RyZWFtX2xvY2tfaWQ7 CisJdWludDE2CQl0cmFuc2FjdGlvbl9sb2NrX2lkOworCisJLyogSW5mb3JtYXRpb24gZnJvbSB0 aGUgY29ycmVzcG9uZGluZyBMb2dpY2FsUmVwV29ya2VyIHNsb3QuICovCisJdWludDE2CQlsb2dp Y2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOworCisJaW50CQkJbG9naWNhbHJlcF93b3JrZXJfc2xv dF9ubzsKKworCS8qCisJICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgYXJlIHBlbmRpbmcgbWVz c2FnZXMgaW4gdGhlIHF1ZXVlLiBUaGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIgd2lsbCBj aGVjayBpdCBiZWZvcmUgc3RhcnRpbmcgdG8gd2FpdC4KKwkgKi8KKwlwZ19hdG9taWNfdWludDMy CWxlZnRfbWVzc2FnZTsKKworCS8qIFdoZXRoZXIgdGhlcmUgaXMgcGFydGlhbGx5IHNlbnQgbWVz c2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4gKi8KKwlib29sCQlwYXJ0aWFsX3NlbnRfbWVzc2FnZTsK KworCS8qCisJICogVGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZXJpYWxpemUgY2hhbmdl cyB0byB0aGUgZmlsZSBhbmQgc2hhcmUgdGhlCisJICogZmlsZSB3aXRoIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgd2hlbiBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbgorCSAqIGZpbmlzaCBj b21tYW5kLiBBbmQgdGhlbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgYXBwbHkgYWxs IHRoZQorCSAqIHNwb29sZWQgbWVzc2FnZXMuCisJICoKKwkgKiBEb24ndCB1c2UgU2hhcmVkRmls ZVNldCBoZXJlIGFzIHdlIG5lZWQgdGhlIGZpbGVzZXQgdG8gc3Vydml2ZSBhZnRlcgorCSAqIHJl bGVhc2luZyB0aGUgc2hhcmVkIG1lbW9yeSBzbyB0aGF0IHRoZSBsZWFkZXIgY2FuIHJlLXVzZSB0 aGUgZmlsZXNldAorCSAqIGZvciBuZXh0IHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkgKi8KKwli b29sCQlmaWxlc2V0X3ZhbGlkOworCUZpbGVTZXQJCWZpbGVzZXQ7Cit9IFBhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQ7CisKKy8qCisgKiBJbmZvcm1hdGlvbiB3aGljaCBpcyB1c2VkIHRvIG1hbmFn ZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxl bEFwcGx5V29ya2VySW5mbworeworCXNobV9tcV9oYW5kbGUgKm1xX2hhbmRsZTsKKworCS8qCisJ ICogVGhlIHF1ZXVlIHVzZWQgdG8gdHJhbnNmZXIgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyCisJICogdG8gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuIE5VTEwg aWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBleGl0ZWQKKwkgKiBjbGVhbmx5LgorCSAqLwor CXNobV9tcV9oYW5kbGUgKmVycm9yX21xX2hhbmRsZTsKKworCWRzbV9zZWdtZW50ICpkc21fc2Vn OworCisJYm9vbAkJc2VyaWFsaXplX2NoYW5nZXM7CisKKwkvKgorCSAqIFVzZWQgdG8gc2F2ZSB0 aGUgbWVzc2FnZSB0aGF0IHdhcyBvbmx5IHBhcnRpYWxseSBzZW50IHRvIHBhcmFsbGVsIGFwcGx5 CisJICogd29ya2VyLgorCSAqLworCXZvaWQJICAgKnBlbmRpbmdfbXNnOworCVNpemUJCXBlbmRp bmdfbGVuZ3RoOworCisJLyoKKwkgKiBUcnVlIGlmIHRoZSB3b3JrZXIgaXMgYmVpbmcgdXNlZCB0 byBwcm9jZXNzIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB0cmFuc2FjdGlvbi4gRmFsc2UgaW5kaWNh dGVzIHRoaXMgd29ya2VyIGlzIGF2YWlsYWJsZSBmb3IgcmUtdXNlLgorCSAqLworCWJvb2wJCWlu X3VzZTsKKworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKK30gUGFyYWxsZWxB cHBseVdvcmtlckluZm87CisKIC8qIE1haW4gbWVtb3J5IGNvbnRleHQgZm9yIGFwcGx5IHdvcmtl ci4gUGVybWFuZW50IGR1cmluZyB3b3JrZXIgbGlmZXRpbWUuICovCiBleHRlcm4gUEdETExJTVBP UlQgTWVtb3J5Q29udGV4dCBBcHBseUNvbnRleHQ7CiAKK2V4dGVybiBQR0RMTElNUE9SVCBNZW1v cnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQ7CisKK2V4dGVybiBQR0RMTElNUE9SVCBFcnJv ckNvbnRleHRDYWxsYmFjayAqYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjazsKK2V4dGVybiBQR0RM TElNUE9SVCBBcHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnOwor CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBNeVN1YnNjcmlwdGlvblZhbGlkOworCitleHRlcm4g UEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJlZDsK KworZXh0ZXJuIFBHRExMSU1QT1JUIExpc3QgKnN1YnhhY3RsaXN0OworCiAvKiBsaWJwcXJlY2Vp dmVyIGNvbm5lY3Rpb24gKi8KIGV4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgV2FsUmVjZWl2ZXJD b25uICpMb2dSZXBXb3JrZXJXYWxSY3ZDb25uOwogCkBAIC03OSwxOCArMjEwLDI0IEBAIGV4dGVy biBQR0RMTElNUE9SVCBTdWJzY3JpcHRpb24gKk15U3Vic2NyaXB0aW9uOwogZXh0ZXJuIFBHRExM SU1QT1JUIExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5zYWN0aW9uOworZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb247CitleHRlcm4gUEdETExJTVBPUlQgUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93b3JrZXI7CitleHRlcm4gUEdETExJTVBP UlQgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkOwogCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dv cmtlcl9hdHRhY2goaW50IHNsb3QpOwogZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxy ZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9u bHlfcnVubmluZyk7CiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1 YmlkLCBib29sIG9ubHlfcnVubmluZyk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9s YXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKLQkJCQkJCQkJ CSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIGJvb2wgbG9naWNhbHJlcF93b3JrZXJf bGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCQkJCQkJ CQkgT2lkIHVzZXJpZCwgT2lkIHJlbGlkLAorCQkJCQkJCQkJIGRzbV9oYW5kbGUgc3Vid29ya2Vy X2RzbSk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lk IHJlbGlkKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfYnlfc2xvdChpbnQg c2xvdF9ubywgdWludDE2IGdlbmVyYXRpb24pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3Jr ZXJfd2FrZXVwKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d29ya2VyX3dha2V1cF9wdHIoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKTsKIAogZXh0ZXJuIGlu dAlsb2dpY2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9pZCBzdWJpZCk7CitleHRlcm4gaW50CWxv Z2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlfd29ya2VyX2NvdW50KE9pZCBzdWJpZCk7CiAKIGV4dGVy biB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoT2lkIHN1Ym9pZCwgT2lk IHJlbGlkLAogCQkJCQkJCQkJCQkgICBjaGFyICpvcmlnaW5uYW1lLCBTaXplIHN6b3JpZ2lubmFt ZSk7CkBAIC0xMDMsMTAgKzI0MCw2MSBAQCBleHRlcm4gdm9pZCBwcm9jZXNzX3N5bmNpbmdfdGFi bGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24pOwogZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9zeW5j aW5nX3RhYmxlX3N0YXRlcyhEYXR1bSBhcmcsIGludCBjYWNoZWlkLAogCQkJCQkJCQkJCQl1aW50 MzIgaGFzaHZhbHVlKTsKIAorZXh0ZXJuIHZvaWQgc2VyaWFsaXplX3N0cmVhbV9zdGFydChUcmFu c2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KTsKK2V4dGVybiB2b2lkIHNlcmlhbGl6 ZV9zdHJlYW1fc3RvcChUcmFuc2FjdGlvbklkIHhpZCk7CisKKy8qIENvbW1vbiBzdHJlYW1pbmcg ZnVuY3Rpb24gdG8gYXBwbHkgYWxsIHRoZSBzcG9vbGVkIG1lc3NhZ2VzICovCitleHRlcm4gdm9p ZCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKEZpbGVTZXQgKnN0cmVhbV9maWxlc2V0LCBUcmFuc2Fj dGlvbklkIHhpZCwKKwkJCQkJCQkJICAgWExvZ1JlY1B0ciBsc24pOworCitleHRlcm4gdm9pZCBh cHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpOworCitleHRlcm4gdm9pZCBtYXliZV9yZXJlYWRf c3Vic2NyaXB0aW9uKHZvaWQpOworCitleHRlcm4gdm9pZCBJbml0aWFsaXplQXBwbHlXb3JrZXIo dm9pZCk7CisKK2V4dGVybiB2b2lkIHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0 cmluZ0luZm8gcyk7CisKKy8qIEZ1bmN0aW9uIGZvciBhcHBseSBlcnJvciBjYWxsYmFjayAqLwor ZXh0ZXJuIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKKworLyogUGFyYWxs ZWwgYXBwbHkgd29ya2VyIHNldHVwIGFuZCBpbnRlcmFjdGlvbnMgKi8KK2V4dGVybiB2b2lkIHBh cmFsbGVsX2FwcGx5X3N0YXJ0X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitleHRlcm4gUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKnBhcmFsbGVsX2FwcGx5X2ZpbmRfd29ya2VyKFRyYW5zYWN0 aW9uSWQgeGlkKTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3NldF94YWN0X3N0YXRlKFBh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCQkJCQkJICBQYXJhbGxlbFRy YW5zU3RhdGUgaW5feGFjdCk7CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtl cihQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJCQkJCQkJCQkgICBUcmFuc2FjdGlv bklkIHhpZCwgYm9vbCBzdG9wX3dvcmtlcik7CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV93 YWl0X2Zvcl94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKTsK K2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YShQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLAorCQkJCQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpOwor CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9zdGFydF9zdWJ0cmFucyhUcmFuc2FjdGlvbklk IGN1cnJlbnRfeGlkLCBUcmFuc2FjdGlvbklkIHRvcF94aWQpOworZXh0ZXJuIHZvaWQgcGFyYWxs ZWxfYXBwbHlfc3RyZWFtX2Fib3J0KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2Rh dGEpOworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXQoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkJCSAgIGJvb2wgZmlsZXNldF92YWxpZCk7 CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9sb2NrKHVpbnQxNiBsb2NraWQsIExPQ0tNT0RF IGxvY2ttb2RlKTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3VubG9jayh1aW50MTYgbG9j a2lkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CisKKyNkZWZpbmUgaXNQYXJhbGxlbEFwcGx5V29ya2Vy KHdvcmtlcikgKCh3b3JrZXIpLT5hcHBseV9sZWFkZXJfcGlkICE9IEludmFsaWRQaWQpCisKIHN0 YXRpYyBpbmxpbmUgYm9vbAogYW1fdGFibGVzeW5jX3dvcmtlcih2b2lkKQogewogCXJldHVybiBP aWRJc1ZhbGlkKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpOwogfQogCitzdGF0aWMgaW5saW5l IGJvb2wKK2FtX2xlYWRlcl9hcHBseV93b3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gKCFPaWRJc1Zh bGlkKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpICYmCisJCQkhaXNQYXJhbGxlbEFwcGx5V29y a2VyKE15TG9naWNhbFJlcFdvcmtlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2FtX3Bh cmFsbGVsX2FwcGx5X3dvcmtlcih2b2lkKQoreworCXJldHVybiBpc1BhcmFsbGVsQXBwbHlXb3Jr ZXIoTXlMb2dpY2FsUmVwV29ya2VyKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdPUktFUl9JTlRF Uk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGVlNjM2OTAuLjkzYTUxZjQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51 bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHBy ZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFy cmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBi YWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19QQVJBTExFTF9B UFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwog CiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50 LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggNmYyZDU2MS4uYzY1MWFk MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsNiArNDIsNyBAQCB0eXBlZGVmIGVudW0K IAlXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBM WV9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOLAorCVdBSVRfRVZFTlRf TE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfUkVDT1ZFUllfV0FMX1NU UkVBTSwKIAlXQUlUX0VWRU5UX1NZU0xPR0dFUl9NQUlOLAogCVdBSVRfRVZFTlRfV0FMX1JFQ0VJ VkVSX01BSU4sCkBAIC0xMDUsNiArMTA2LDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9I QVNIX0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRT X0VMRUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfUkVJTlNFUlQsCisJV0FJVF9F VkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX0xP R0lDQUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NIQU5HRSwK IAlXQUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJz Y3JpcHRpb24ub3V0CmluZGV4IGMxM2QyMTguLjBmNjVjYzcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKQEAgLTI1NSw5ICsyNTUsOSBAQCBBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAoMSByb3cp CiAKIERST1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjsKLS0tIGZhaWwgLSBzdHJlYW1p bmcgbXVzdCBiZSBib29sZWFuCistLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbiBv ciAncGFyYWxsZWwnCiBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNU SU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lU SCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSBmb28pOwotRVJST1I6ICBzdHJlYW1pbmcg cmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlCitFUlJPUjogIHN0cmVhbWluZyByZXF1aXJlcyBhIEJv b2xlYW4gdmFsdWUgb3IgInBhcmFsbGVsIgogLS0gbm93IGl0IHdvcmtzCiBDUkVBVEUgU1VCU0NS SVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1p bmcgPSB0cnVlKTsKIFdBUk5JTkc6ICBzdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQsIGJ1dCBpcyBu b3QgY29ubmVjdGVkCkBAIC0yNjksNiArMjY5LDE0IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBs aWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBl CiAgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHQgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKK0FMVEVSIFNVQlNDUklQVElPTiBy ZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBwYXJhbGxlbCk7CitcZFJzKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5h bWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0 aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24g ZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgcCAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKygxIHJvdykKKwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNlKTsKIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIFxkUnMrCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvc3Vic2NyaXB0aW9uLnNxbAppbmRleCBlYWVhZGU4Li43OTkxYWJmIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKQEAgLTE2Nyw3ICsxNjcsNyBAQCBBTFRFUiBTVUJTQ1JJ UFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAKIERST1AgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjsKIAotLS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJl IGJvb2xlYW4KKy0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBib29sZWFuIG9yICdwYXJhbGxl bCcKIENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFt ZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCTElDQVRJT04gdGVzdHB1YiBXSVRIIChjb25uZWN0 ID0gZmFsc2UsIHN0cmVhbWluZyA9IGZvbyk7CiAKIC0tIG5vdyBpdCB3b3JrcwpAQCAtMTc1LDYg KzE3NSwxMCBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9O ICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQgogCiBcZFJzKwogCitBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gcGFyYWxsZWwpOworCitc ZFJzKworCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5n ID0gZmFsc2UpOwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3Rf bmFtZSA9IE5PTkUpOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDk2ODNiMGEuLjg4 OGQ5ZjcgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNDcyLDYgKzE0NzIsNyBAQCBM b2dpY2FsUmVwUmVsSWQKIExvZ2ljYWxSZXBSZWxNYXBFbnRyeQogTG9naWNhbFJlcFJlbGF0aW9u CiBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEKK0xvZ2ljYWxSZXBTdHJlYW1BYm9y dERhdGEKIExvZ2ljYWxSZXBUdXBsZURhdGEKIExvZ2ljYWxSZXBUeXAKIExvZ2ljYWxSZXBXb3Jr ZXIKQEAgLTE2NjMsNiArMTY2NCw5IEBAIE92ZXJyaWRlU3RhY2tFbnRyeQogT3ZlcnJpZGluZ0tp bmQKIFBBQ0VfSEVBREVSCiBQQUNMCitQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkKK1BhcmFsbGVs QXBwbHlXb3JrZXJJbmZvCitQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkCiBQQVRICiBQQk9PTAog UEN0eHRIYW5kbGUKQEAgLTI3ODQsNiArMjc4OCw3IEBAIFRyYW5zYWN0aW9uU3RtdEtpbmQKIFRy YW5zZm9ybUluZm8KIFRyYW5zZm9ybUpzb25TdHJpbmdWYWx1ZXNTdGF0ZQogVHJhbnNpdGlvbkNh cHR1cmVTdGF0ZQorVHJhbnNBcHBseUFjdGlvbgogVHJnbUFyYwogVHJnbUFyY0luZm8KIFRyZ21C b3VuZAotLSAKMi43LjIud2luZG93cy4xCgo= --_003_OS0PR01MB5716E366874B253B58FC0A23943C9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v43-0002-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v43-0002-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v43-0002-Test-streaming-parallel-option-in-tap-test.patch"; size=81289; creation-date="Mon, 07 Nov 2022 13:18:29 GMT"; modification-date="Mon, 07 Nov 2022 13:19:23 GMT" Content-Transfer-Encoding: base64 RnJvbSAwMzAxN2JmZmQyYmYwNDUwZDc1N2E4OTBmY2E3NjNkZGM4YjgzMzhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NDMg Mi8yXSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgICAgICAgfCAy MzIgKysrKysrLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3Qu cGwgICAgICB8IDE0MyArKysrLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1f ZGRsLnBsICAgICAgICAgIHwgMjIxICsrKysrKy0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgfCAyMzMgKysrKysrLS0tCiAuLi4vc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCB8IDEzNCArKystLQogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgICAgfCAzOTQgKysrKysr KysrLS0tLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBs ICAgICB8IDU0MCArKysrKysrKysrKystLS0tLS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMzJf c3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsIHwgMTM0ICsrKysrCiA5IGZpbGVzIGNoYW5nZWQs IDEzODcgaW5zZXJ0aW9ucygrKSwgNjQ1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxfYXBwbHkucGwK CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKaW5kZXggODVkMWRkOS4uMDI1MjE4ZCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi9tZXNvbi5idWlsZApAQCAtMzYsNiArMzYsNyBAQCB0ZXN0cyArPSB7CiAgICAg ICAndC8wMjlfb25fZXJyb3IucGwnLAogICAgICAgJ3QvMDMwX29yaWdpbi5wbCcsCiAgICAgICAn dC8wMzFfY29sdW1uX2xpc3QucGwnLAorICAgICAgJ3QvMDMyX3N0cmVhbWluZ19wYXJhbGxlbF9h cHBseS5wbCcsCiAgICAgICAndC8xMDBfYnVncy5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCmluZGV4IGNiYWEzMjcuLjY1ZjQzZjAgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApAQCAtOCw2ICs4LDE0OSBAQCB1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBU ZXN0OjpNb3JlOwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rp b24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBw bHkgd29ya2VyLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3Jp YmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2Ug PQorCSAgJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5k JzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zv cl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBz dWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3Ry ZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9y IHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0 ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIEludGVybGVhdmUgYSBwYWlyIG9m IHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCisJbXkgJGluICA9 ICcnOworCW15ICRvdXQgPSAnJzsKKworCW15ICRvZmZzZXQgPSAwOworCisJbXkgJHRpbWVyID0g SVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1 bHQpOworCisJbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdy ZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCQlvbl9lcnJvcl9zdG9wID0+IDApOworCisJIyBJ ZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5l ZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNp bmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBE RUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVy Ym9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcx Iik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJz Y3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+ bG9nZmlsZTsKKworCSRpbiAuPSBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsK KwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwl9OworCSRoLT5wdW1wX25i OworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVH SU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg1MDAxLCA5OTk5KSBzKGkpOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIGEgPiA1MDAwOworCUNPTU1JVDsKKwl9KTsKKworCSRpbiAuPSBxeworCUNPTU1JVDsKKwlc cQorCX07CisJJGgtPmZpbmlzaDsgICAgIyBlcnJvcnMgbWFrZSB0aGUgbmV4dCB0ZXN0IGZhaWws IHNvIGlnbm9yZSB0aGVtIGhlcmUKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9m ZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0 fDMzMzQpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7 CisKKwkjIFRlc3QgdGhlIHN0cmVhbWluZyBpbiBiaW5hcnkgbW9kZQorCSRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIg U0VUIChiaW5hcnkgPSBvbikiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20g bm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBJ bnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBs aW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQg YiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgbW9kKGEsMykgPSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vi c2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEo NjY2N3w2NjY3fDY2NjcpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRl ZmF1bHRzJyk7CisKKwkjIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1 bW5zIG9uIHRoZSBzdWJzY3JpYmVyLAorCSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRo YXQgc3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAorCSMgdmFsdWVzLiBUaGlzIGlzIHRv IGVuc3VyZSB0aGF0IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQorCSMgcHJvcGVy bHkgYWZ0ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCisJJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBvY2gnOjp0 aW1lc3RhbXB0eiArIDk4NzY1NDMyMSAqIGludGVydmFsICcxcyciCisJKTsKKworCSMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJz Y3JpYmVyLT5sb2dmaWxlOworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShhOjp0ZXh0KSIpOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVs X2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3VudChk ID0gOTk5KSBGUk9NIHRlc3RfdGFiIgorCSk7CisJaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2 NjcpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRh Jyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7 CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVz ZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1 YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVz c2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisK ICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzE4MCwxMCBAQCAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04g dGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFt aW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRh cF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFw cG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAg LTQ5LDgyICsxOTYsMjUgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8Mnwy KSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBJ bnRlcmxlYXZlIGEgcGFpciBvZiB0cmFuc2FjdGlvbnMsIGVhY2ggZXhjZWVkaW5nIHRoZSA2NGtC IGxpbWl0LgotbXkgJGluICA9ICcnOwotbXkgJG91dCA9ICcnOwotCi1teSAkdGltZXIgPSBJUEM6 OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7 Ci0KLW15ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywg XCRpbiwgXCRvdXQsICR0aW1lciwKLQlvbl9lcnJvcl9zdG9wID0+IDApOwotCi0kaW4gLj0gcXsK LUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0g bWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLX07Ci0kaC0+cHVtcF9uYjsKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLCA5OTk5KSBzKGkpOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDUwMDA7Ci1DT01NSVQ7Ci19KTsKLQotJGlu IC49IHF7Ci1DT01NSVQ7Ci1ccQotfTsKLSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhl IG5leHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJlCi0KLSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0 fDMzMzQpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7Cit0 ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAwKTsKIAotIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKLSRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1 YiBTRVQgKGJpbmFyeSA9IG9uKSIpOwotCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5v dWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhp KTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1E RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1DT01NSVQ7Ci19KTsKLQot JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9 Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCispOwogCi0jIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5z IG9uIHRoZSBzdWJzY3JpYmVyLAotIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sgdGhhdCBz dWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCi0jIHZhbHVlcy4gVGhpcyBpcyB0byBlbnN1 cmUgdGhhdCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKLSMgcHJvcGVybHkgYWZ0 ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vwb2NoJzo6dGltZXN0YW1w dHogKyA5ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgotKTsKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShhOjp0ZXh0 KSIpOworCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxs ZWwsIGJpbmFyeSA9IG9mZikiKTsKIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byBy ZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CiAKLSRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIgotKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKLQknY2hlY2sg ZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRhJyk7Cit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKIAog JG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbCBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbAppbmRleCBiYzBhOWNkLi4w MjBhZDk2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1 YnhhY3QucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0 LnBsCkBAIC04LDYgKzgsOTQgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUg bG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1 bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJh bGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVs KSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5n IHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdl LywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qg c3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRo ZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBz dHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5v ZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9 IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBp cyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJl YW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQg dGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxl bCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgor CSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBJbnNlcnQsIHVw ZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCA2NGtCIGxpbWl0LgorCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMywgNTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBt b2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwor CVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAx NTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwy KSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQ T0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsIDIwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHM0OworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkg cyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlDT01NSVQ7CisJ fSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJ Y2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxl bCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDE2Njd8MTY2N3wxNjY3KSwKKwkJJ2NoZWNr IGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRy YSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUg dGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4K KwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJ JG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5v ZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn cHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAn bG9naWNhbCcpOwpAQCAtMzcsNiArMTI1LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0 X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFw X3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNDksNDEgKzE0MSwyNiBAQCBteSAk cmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRh IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxl dGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKCAgICAzLCAgNTAwKSBz KGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsK LURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMTsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAxLCAgMTAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShi KSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsICAxNTAwKSBzKGkpOwotVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUw MSwgIDIwMDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FW RVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygyMDAxLCAyNTAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDE2Njd8MTY2N3wxNjY3 KSwKLQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1v ZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKK3Rlc3Rfc3RyZWFt aW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0 YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9N IHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScg QU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdo aWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBU SU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgMSk7CisKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNo ZXItPnN0b3A7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJl YW1fZGRsLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwKaW5k ZXggODY2ZjE1MS4uZDJjYzQ2ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDE3X3N0cmVhbV9kZGwucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVh bV9kZGwucGwKQEAgLTgsNiArOCwxMzggQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVj ayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3Vj Y2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVj a19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3Bh cmFsbGVsKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9j ZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFs bGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9t ZXNzYWdlLywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9u IHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVy IHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFu ZAorIyBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlt eSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFs bGVsKSA9IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1l ZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoMywgbWQ1KDM6OnRleHQpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1O IGMgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQs IG1kNSg0Ojp0ZXh0KSwgLTQpOworCUNPTU1JVDsKKwl9KTsKKworCSMgSWYgInN0cmVhbWluZyIg cGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJ IyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNz YWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAo JGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9z dWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJv bSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkj IGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDUsIDEwMDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBkIElO VDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAyMDAwKSBzKGkpOwor CUNPTU1JVDsKKwl9KTsKKworCSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3 aXRoIERETCBhbmQgRE1MCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgyMDAxLCBtZDUo MjAwMTo6dGV4dCksIC0yMDAxLCAyKjIwMDEpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBD T0xVTU4gZSBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMjAwMiwgbWQ1KDIwMDI6OnRleHQpLCAtMjAwMiwgMioyMDAyLCAtMyoyMDAyKTsKKwlDT01N SVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNv dW50KGUpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgyMDAyfDE5OTl8MTAwMnwx KSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBt b2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMg Q2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBBIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rp b24gd2l0aCBEREwgYW5kIERNTC4gT25lIG9mIHRoZSBEREwgaXMgcGVyZm9ybWVkCisJIyBhZnRl ciBETUwgdG8gZW5zdXJlIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgc2NoZW1hIHNlbnQgZm9yIHRl c3RfdGFiIHNvIHRoYXQKKwkjIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyB0byBzZW5kIHRoZSBz Y2hlbWEgYWdhaW4uCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jlcycs IHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAzLDUwMDApIHMoaSk7CisJ QUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBmIElOVDsKKwlDT01NSVQ7CisJfSk7CisK KwkjIEEgc21hbGwgdHJhbnNhY3Rpb24gdGhhdCB3b24ndCBnZXQgc3RyZWFtZWQuIFRoaXMgaXMg anVzdCB0byBlbnN1cmUgdGhhdCB3ZQorCSMgc2VuZCB0aGUgc2NoZW1hIGFnYWluIHRvIHJlZmxl Y3QgdGhlIGxhc3QgY29sdW1uIGFkZGVkIGluIHRoZSBwcmV2aW91cyB0ZXN0LgorCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmksIDQqaSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDUwMDUpIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJ JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VM RUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNvdW50KGUpLCBjb3VudChmKSBGUk9N IHRlc3RfdGFiIgorCSk7CisJaXMoJHJlc3VsdCwgcXEoNTAwNXw1MDAyfDQwMDV8MzAwNHw1KSwK KwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWlu ZyBhbmQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUg dGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7 CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3RhYiBEUk9QIENPTFVNTiBjLCBEUk9QIENPTFVNTiBkLCBEUk9QIENPTFVNTiBlLCBEUk9QIENP TFVNTiBmOworCX0pOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJ eworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJ CSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxv YWQ7CisJfQorfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsx NjksMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRF IFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1l ID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0 IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNV QlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNh dGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9 IG9uKSIKICk7CkBAIC00OSw3NyArMTg1LDI2IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVz dWx0LCBxcSgyfDB8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3Jp YmVyJyk7CiAKLSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBh bmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVH SU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7Ci1BTFRF UiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJU IElOVE8gdGVzdF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCksIC00KTsKLUNPTU1JVDsKLX0p OwotCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNSwgMTAwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJ TlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsIDIwMDApIHMoaSk7Ci1D T01NSVQ7Ci19KTsKLQotIyBhIHNtYWxsIChub24tc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGgg RERMIGFuZCBETUwKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7 Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMjAwMSwgbWQ1KDIwMDE6OnRl eHQpLCAtMjAwMSwgMioyMDAxKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZSBJ TlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDIsIG1k NSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIqMjAwMiwgLTMqMjAwMik7Ci1DT01NSVQ7Ci19KTsKLQot JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9 Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQoZSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMo JHJlc3VsdCwgcXEoMjAwMnwxOTk5fDEwMDJ8MSksCi0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0 byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4g bG9jYWwgZGVmYXVsdHMnCi0pOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9k ZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CiAKLSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRyYW5z YWN0aW9uIHdpdGggRERMIGFuZCBETUwuIE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAotIyBh ZnRlciBETUwgdG8gZW5zdXJlIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgc2NoZW1hIHNlbnQgZm9y IHRlc3RfdGFiIHNvIHRoYXQKLSMgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIHRvIHNlbmQgdGhl IHNjaGVtYSBhZ2Fpbi4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jlcycs IHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCks IC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOwotQUxU RVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBmIElOVDsKLUNPTU1JVDsKLX0pOwotCi0jIEEg c21hbGwgdHJhbnNhY3Rpb24gdGhhdCB3b24ndCBnZXQgc3RyZWFtZWQuIFRoaXMgaXMganVzdCB0 byBlbnN1cmUgdGhhdCB3ZQotIyBzZW5kIHRoZSBzY2hlbWEgYWdhaW4gdG8gcmVmbGVjdCB0aGUg bGFzdCBjb2x1bW4gYWRkZWQgaW4gdGhlIHByZXZpb3VzIHRlc3QuCi0kbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0KmkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAwMSw1MDA1KSBzKGkpOwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCksIGNvdW50KGUpLCBjb3VudChmKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSg1MDA1fDUwMDJ8NDAwNXwzMDA0fDUpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQg dG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJlYW1pbmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJhbnNh Y3Rpb25zJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1 c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFw cGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7 CiAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJT Q1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRv bGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAn JGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRp bWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5n IFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVf c3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOworCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5v ZGVfcHVibGlzaGVyLT5zdG9wOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwKaW5kZXggNTUxZjE2ZC4uNzUyZTc5YSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBs CisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5w bApAQCAtOCw2ICs4LDE0NSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoZSBs b2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVs bHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3ViIGNoZWNrX3BhcmFs bGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwp ID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVkIHByb2Nlc3Npbmcg dGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJ eworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2Uv LCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBz dGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhl IHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0 cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9k ZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0g QF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgSWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlz IHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVh bWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2Vy LgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0 aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVs KQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics CisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5y ZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJ JG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGxhcmdlIChzdHJl YW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCisJJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LDUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKKwlT QVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMzOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMTUwMSwyMDAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMyOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAw MSwyNTAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUwMSwzMDAwKSBzKGkp OworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMwMDEsMzUwMCkgcyhpKTsKKwlTQVZFUE9JTlQg czU7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3NlcmllcygzNTAxLDQwMDApIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVs X2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJbXkgJHJl c3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDIwMDB8MCksCisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBv biBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQg PSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRy YW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCisJIyBzdWJ0 cmFuc2FjdGlvbiBST0xMQkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDQwMDEsNDUwMCkgcyhpKTsKKwlTQVZFUE9J TlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3Nlcmllcyg1MDAxLDU1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNjAwMSw2NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkg cyhpKTsKKwlSRUxFQVNFIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODAwMSw4NTAwKSBzKGkpOworCVJPTExCQUNL IFRPIHMxOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZS T00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgyNTAwfDApLAorCQknY2hlY2sgcm9sbGJh Y2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDaGVj ayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0 aCBzdWJzY3JpYmVyIHJlY2VpdmluZyByb2xsYmFjaworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODUwMSw5MDAwKSBzKGkp OworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDkwMDEsOTUwMCkgcyhpKTsKKwlTQVZFUE9JTlQg czI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg5NTAxLDEwMDAwKSBzKGkpOworCVJPTExCQUNLOworCX0pOworCisJJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFs bGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJl c3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDI1MDB8MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsK KworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBSZXNldCB0 aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2Ny aWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdl cyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KK30KKwogIyBD cmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxs b3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzYsNiArMTc1LDEwIEBAICRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBf cHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcg bW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1 YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFt ZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNDgs ODEgKzE5MSwyNSBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRh IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNh Y3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOwotU0FW RVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMTAwMSwxNTAwKSBzKGkpOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMo aSk7Ci1ST0xMQkFDSyBUTyBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwyNTAwKSBzKGkpOwotUk9MTEJBQ0sg VE8gczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDI1MDEsMzAwMCkgcyhpKTsKLVNBVkVQT0lOVCBzNDsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MzAwMSwzNTAwKSBzKGkpOwotU0FWRVBPSU5UIHM1OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzNTAxLDQwMDApIHMoaSk7 Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRy ZXN1bHQsIHFxKDIwMDB8MCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVm bGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZh dWx0cycKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwg JGFwcG5hbWUsIDApOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgogKTsKIAotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJl ciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCi0jIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcwotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg0MDAxLDQ1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTUwMCkgcyhp KTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNjAwMSw2NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMz OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg3MDAxLDc1MDApIHMoaSk7Ci1SRUxFQVNFIHMyOwotSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4MDAxLDg1 MDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBzMTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwKLQknY2hlY2sgcm9s bGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIGxh cmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyByb2xs YmFjawotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lO OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg4NTAxLDkwMDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0 ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDkwMDEs OTUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBp LCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOTUwMSwxMDAwMCkgcyhpKTsKLVJP TExCQUNLOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgyNTAwfDApLCAnY2hlY2sgcm9sbGJhY2sgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3Jp YmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIg U1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9k ZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAh PSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1l ID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisg ICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFu Z2luZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRu b2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKIAogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsK ICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCmluZGV4IDRkN2RhODIuLjlkNjc4 YjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFj dF9kZGxfYWJvcnQucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9z dWJ4YWN0X2RkbF9hYm9ydC5wbApAQCAtOSw2ICs5LDkxIEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7 CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29t cGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZz ZXQsICRpc19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmlu aXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYg KCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8k cGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwg dGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisj IHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVh bWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs ICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBJZiAic3RyZWFt aW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hl Y2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNpbmcgYSBwYXJh bGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9n IG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5Lgor CWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRu b2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxv ZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsK KworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFuZCBST0xM QkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBD T0xVTU4gYyBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkp OworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJTlQ7CisJU0FWRVBPSU5UIHMy OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3Rf dGFiIEFERCBDT0xVTU4gZSBJTlQ7CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMTUwMSwyMDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09MVU1O IGM7CisJUk9MTEJBQ0sgVE8gczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKKwlDT01N SVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFi Iik7CisJaXMoJHJlc3VsdCwgcXEoMTAwMHw1MDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2 ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBjb250 YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCURFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIChhID4gMik7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT0xV TU4gYzsKKwl9KTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsK KwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQki bG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2Fk OworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJs aXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiArMTIy LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQ VUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9 ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1 c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJT Q1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRp b25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBv bikiCiApOwpAQCAtNDksMzUgKzEzOCwyNiBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAnY2hl Y2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIGxhcmdlIChz dHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs NTAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKLVNBVkVQ T0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1p IEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90 YWIgQUREIENPTFVNTiBkIElOVDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAw MSwxNTAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKLVNB VkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCks IC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwyMDAwKSBzKGkpOwotQUxU RVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT0xVTU4gYzsKLVJPTExCQUNLIFRPIHMxOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcyg1MDEsMTAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJP TSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMTAwMHw1MDApLAotCSdjaGVjayByb2xsYmFj ayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1 bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNo ZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxs ZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFt aW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0 aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJl YW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBh cHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3Ry ZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwor CiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwogCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCmluZGV4IDdh Nzk3ZjMuLjQyNjVkM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90 d29waGFzZV9jYXNjYWRlLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29w aGFzZV9jYXNjYWRlLnBsCkBAIC0xMSw2ICsxMSwyMzkgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsK IAorIyBDaGVjayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21w bGV0ZWQgc3VjY2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4K K3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNl dCwgJHN0cmVhbWluZ19tb2RlKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdm aW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlp ZiAoJHN0cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisK KyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRl ZCB0byAic3RyZWFtaW5nIiBwYXJhbWV0ZXIKKyMgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVu IGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1wYXJhbGxlbAorIyBjYXNl cy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9D LCAkYXBwbmFtZV9CLCAkYXBwbmFtZV9DLCAkc3RyZWFtaW5nX21vZGUpID0KKwkgIEBfOworCisJ bXkgJG9mZnNldF9CID0gMDsKKwlteSAkb2Zmc2V0X0MgPSAwOworCisJbXkgJG9sZHBpZF9CID0g JG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVDVCBwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVf QicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7CisJbXkgJG9sZHBpZF9DID0gJG5vZGVfQi0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3Jl cGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5EIHN0 YXRlID0gJ3N0cmVhbWluZyc7Iik7CisKKwkjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24gc3Ry ZWFtaW5nIG1vZGUKKworCSRub2RlX0ItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlB TFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9CCisJCVNFVCAoc3RyZWFtaW5nID0gJHN0cmVhbWlu Z19tb2RlKTsiKTsKKwkkbm9kZV9DLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQworCQlTRVQgKHN0cmVhbWluZyA9ICRzdHJlYW1pbmdf bW9kZSkiKTsKKworCSMgV2FpdCBmb3Igc3Vic2NyaWJlcnMgdG8gZmluaXNoIGluaXRpYWxpemF0 aW9uCisKKwkkbm9kZV9BLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCAiCisJCVNF TEVDVCBwaWQgIT0gJG9sZHBpZF9CIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBh cHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KwkpIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQi OworCSRub2RlX0ItPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsICIKKwkJU0VMRUNU IHBpZCAhPSAkb2xkcGlkX0MgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxp Y2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorCSkg b3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7CisK KwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8g Q09NTUlUIFBSRVBBUkVELgorCSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2Fj dGlvbi4KKwkjIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBhbGwg ZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIocykgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFt ZXRlciBpcyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhh dCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgcHJlcGFyZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2Vz IGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkc3Ry ZWFtaW5nX21vZGUgZXEgJ3BhcmFsbGVsJykKKwl7CisJCSRub2RlX0ItPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9C LT5yZWxvYWQ7CisKKwkJJG5vZGVfQy0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJs b2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX0MtPnJlbG9hZDsKKwl9CisKKwkj IENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0X0IgPSAtcyAk bm9kZV9CLT5sb2dmaWxlOworCSRvZmZzZXRfQyA9IC1zICRub2RlX0MtPmxvZ2ZpbGU7CisKKwkj IEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtC IGxpbWl0LgorCSMgVGhlbiAyUEMgUFJFUEFSRQorCSRub2RlX0EtPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0 ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwljaGVj a19wYXJhbGxlbF9sb2coJG5vZGVfQiwgJG9mZnNldF9CLCAkc3RyZWFtaW5nX21vZGUpOworCWNo ZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9DLCAkb2Zmc2V0X0MsICRzdHJlYW1pbmdfbW9kZSk7CisK KwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVy KHMpCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQs IHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJl c3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIDJQQyBDT01NSVQK Kwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9w cmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9C KTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBjaGVjayB0 aGF0IHRyYW5zYWN0aW9uIHdhcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQg PSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgz MzM0fDMzMzR8MzMzNCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBv biBzdWJzY3JpYmVyIEIsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCisJ KTsKKwkkcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qg Y291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMo JHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2 ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2Fs IGRlZmF1bHRzJworCSk7CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRl ZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwor CWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmli ZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKwor CSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgd2l0 aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQuCisJIyAwLiBDbGVhbnVwIGZyb20gcHJl dmlvdXMgdGVzdCBsZWF2aW5nIG9ubHkgMiByb3dzLgorCSMgMS4gSW5zZXJ0IG9uZSBtb3JlIHJv dy4KKwkjIDIuIFJlY29yZCBhIFNBVkVQT0lOVC4KKwkjIDMuIERhdGEgaXMgc3RyZWFtZWQgdXNp bmcgMlBDLgorCSMgNC4gRG8gcm9sbGJhY2sgdG8gU0FWRVBPSU5UIHByaW9yIHRvIHRoZSBzdHJl YW1lZCBpbnNlcnRzLgorCSMgNS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCisJIworCSMgRXhwZWN0 IGRhdGEgYWZ0ZXIgdGhlIFNBVkVQT0lOVCBpcyBhYm9ydGVkIGxlYXZpbmcgb25seSAzIHJvd3Mg KD0gMiBvcmlnaW5hbCArIDEgZnJvbSBzdGVwIDEpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo ZGVsZXRlIHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0aGUg c3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldF9CID0gLXMgJG5vZGVfQi0+bG9n ZmlsZTsKKwkkb2Zmc2V0X0MgPSAtcyAkbm9kZV9DLT5sb2dmaWxlOworCisJIyAyUEMgUFJFUEFS RSB3aXRoIGEgbmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQT0lOVAorCSRub2RlX0EtPnNhZmVfcHNx bCgKKwkJJ3Bvc3RncmVzJywgIgorCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFM VUVTICg5OTk5LCAnZm9vYmFyJyk7CisJCVNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn b3V0ZXInOworCQkiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7 CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCWNoZWNrX3BhcmFs bGVsX2xvZygkbm9kZV9CLCAkb2Zmc2V0X0IsICRzdHJlYW1pbmdfbW9kZSk7CisJY2hlY2tfcGFy YWxsZWxfbG9nKCRub2RlX0MsICRvZmZzZXRfQywgJHN0cmVhbWluZ19tb2RlKTsKKworCSMgY2hl Y2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVz dWx0ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRu b2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMgMlBDIENPTU1JVAorCSRub2RlX0EtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICdvdXRlcic7Iik7CisKKwkkbm9k ZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQyk7CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBl bmRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwor CWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBC Jyk7CisJJHJlc3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFx KDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIGNoZWNr IGluc2VydHMgYXJlIHZpc2libGUgYXQgc3Vic2NyaWJlcihzKS4KKwkjIEFsbCB0aGUgc3RyZWFt ZWQgZGF0YSAocHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hvdWxkIGJlIHJvbGxlZCBiYWNrLgor CSMgKDk5OTksICdmb29iYXInKSBzaG91bGQgYmUgY29tbWl0dGVkLgorCSRyZXN1bHQgPSAkbm9k ZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29t bWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5v ZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3Rh YjsiKTsKKwlpcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9u IHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsi KTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1 YnNjcmliZXIgQycpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsKKwlpcygkcmVzdWx0LCBxcSgz KSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQycpOworCisJIyBD bGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCSRub2RlX0EtPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9D KTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRzdHJlYW1pbmdfbW9kZSBl cSAncGFyYWxsZWwnKQorCXsKKwkJJG5vZGVfQi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9CLT5yZWxvYWQ7CisK KwkJJG5vZGVfQy0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWluX21lc3Nh Z2VzID0gd2FybmluZyIpOworCQkkbm9kZV9DLT5yZWxvYWQ7CisJfQorfQorCiAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNldHVwIGEgY2FzY2FkZSBvZiBwdWIvc3ViIG5vZGVz LgogIyBub2RlX0EgLT4gbm9kZV9CIC0+IG5vZGVfQwpAQCAtMjYwLDE2MCArNDkzLDE1IEBAIGlz KCRyZXN1bHQsIHFxKDIxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmli ZXIgQycpOwogIyAyUEMgKyBTVFJFQU1JTkcgVEVTVFMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAKLW15ICRvbGRwaWRfQiA9ICRub2RlX0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0J U0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOwotbXkgJG9sZHBp ZF9DID0gJG5vZGVfQi0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWVfQycgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7Ci0KLSMgU2V0dXAgbG9naWNhbCByZXBs aWNhdGlvbiAoc3RyZWFtaW5nID0gb24pCi0KLSRub2RlX0ItPnNhZmVfcHNxbCgKLQkncG9zdGdy ZXMnLCAiCi0JQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQgotCVNFVCAoc3RyZWFtaW5nID0g b24pOyIpOwotJG5vZGVfQy0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlBTFRFUiBTVUJT Q1JJUFRJT04gdGFwX3N1Yl9DCi0JU0VUIChzdHJlYW1pbmcgPSBvbikiKTsKLQotIyBXYWl0IGZv ciBzdWJzY3JpYmVycyB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24KLQotJG5vZGVfQS0+cG9sbF9x dWVyeV91bnRpbCgKLQkncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0IgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFt ZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCi0pIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxl IHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQiOwotJG5vZGVfQi0+cG9sbF9xdWVyeV91bnRp bCgKLQkncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0MgRlJPTSBwZ19zdGF0 X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQg c3RhdGUgPSAnc3RyZWFtaW5nJzsiCi0pIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIGFwcGx5IHRvIHJlc3RhcnQiOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0jIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCi0jIDEuIERhdGEgaXMgc3Ry ZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVk LgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyKHMpIGFm dGVyIHRoZSBjb21taXQuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgSW5z ZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGlt aXQuCi0jIFRoZW4gMlBDIFBSRVBBUkUKLSRub2RlX0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMn LCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIg U0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVk X3RhYic7fSk7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0kbm9k ZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9zdHJlYW1pbmcoJG5vZGVfQSwgJG5vZGVfQiwg JG5vZGVfQywgJGFwcG5hbWVfQiwgJGFwcG5hbWVfQywgJ29uJyk7CiAKLSMgY2hlY2sgdGhlIHRy YW5zYWN0aW9uIHN0YXRlIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQot ICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIp OwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3Jp YmVyIEMnKTsKLQotIyAyUEMgQ09NTUlUCi0kbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9BLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOwotJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZV9DKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIHdhcyBjb21taXR0ZWQgb24gc3Vi c2NyaWJlcihzKQotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7 Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBD IGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQiwgYW5kIGV4dHJhIGNvbHVtbnMgaGF2ZSBs b2NhbCBkZWZhdWx0cycKLSk7Ci0kcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVz dF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRl ZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDLCBhbmQgZXh0cmEgY29sdW1u cyBoYXZlIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3Rh dGUgaXMgZW5kZWQgb24gc3Vic2NyaWJlcihzKQotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7 Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJz Y3JpYmVyIEInKTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwg cXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSB3aXRoIGEg bmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQT0lOVC4KLSMgMC4gQ2xlYW51cCBmcm9tIHByZXZpb3Vz IHRlc3QgbGVhdmluZyBvbmx5IDIgcm93cy4KLSMgMS4gSW5zZXJ0IG9uZSBtb3JlIHJvdy4KLSMg Mi4gUmVjb3JkIGEgU0FWRVBPSU5ULgotIyAzLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4K LSMgNC4gRG8gcm9sbGJhY2sgdG8gU0FWRVBPSU5UIHByaW9yIHRvIHRoZSBzdHJlYW1lZCBpbnNl cnRzLgotIyA1LiBUaGVuIENPTU1JVCBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IGRhdGEgYWZ0ZXIg dGhlIFNBVkVQT0lOVCBpcyBhYm9ydGVkIGxlYXZpbmcgb25seSAzIHJvd3MgKD0gMiBvcmlnaW5h bCArIDEgZnJvbSBzdGVwIDEpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0j IEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKGRlbGV0ZSB3aWxsIGJl IHJlcGxpY2F0ZWQpCi0kbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQg Uk9MTEJBQ0sgVE8gU0FWRVBPSU5UCi0kbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywg IgotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OSwgJ2Zvb2Jhcicp OwotCVNBVkVQT0lOVCBzcF9pbm5lcjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNw X2lubmVyOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ291dGVyJzsKLQkiKTsKLQotJG5vZGVfQS0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHByZXBhcmVkIG9u IHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQotICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3Vs dCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKLSRy ZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2Fj dGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyAyUEMgQ09NTUlUCi0kbm9k ZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAnb3V0ZXInOyIpOwot Ci0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOwotJG5vZGVfQi0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKLQotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUg aXMgZW5kZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1p cygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIgQicp OwotJHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3Ry YW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0jIGNoZWNrIGluc2VydHMg YXJlIHZpc2libGUgYXQgc3Vic2NyaWJlcihzKS4KLSMgQWxsIHRoZSBzdHJlYW1lZCBkYXRhIChw cmlvciB0byB0aGUgU0FWRVBPSU5UKSBzaG91bGQgYmUgcm9sbGVkIGJhY2suCi0jICg5OTk5LCAn Zm9vYmFyJykgc2hvdWxkIGJlIGNvbW1pdHRlZC4KLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9 ICdmb29iYXInOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJl c2VudCBvbiBzdWJzY3JpYmVyIEInKTsKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiOyIpOwotaXMoJHJlc3VsdCwg cXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEInKTsKLSRy ZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF90YWIgd2hlcmUgYiA9ICdmb29iYXInOyIpOwotaXMoJHJlc3VsdCwgcXEoMSks ICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEMnKTsKLSRyZXN1bHQg PSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRl c3RfdGFiOyIpOwotaXMoJHJlc3VsdCwgcXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2Vu dCBvbiBzdWJzY3JpYmVyIEMnKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX0EsICRub2Rl X0IsICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICdwYXJhbGxlbCcpOwogCiAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51cApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwKaW5kZXggOWI0 NTQxMC4uODJiNWU2YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3 b3BoYXNlX3N0cmVhbS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhh c2Vfc3RyZWFtLnBsCkBAIC04LDYgKzgsMzA4IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMg Q2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVk IHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIg Y2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRp c19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQg cHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19w YXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxs ZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNv bW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFt ZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1v biBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7 CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19w YXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KKwkj IDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCisJIyAyLiBUaGVuIGRv IGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBv biBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQg YXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJlYW1lZCB0cmFuc2Fj dGlvbiB3YXMgcHJlcGFyZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBo YXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1 bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkk bm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2df bWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9 CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0g LXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyBy ZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5v dWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBz KGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVf c3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFu c2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJbXkgJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIDJQQyB0cmFuc2FjdGlv biBnZXRzIGNvbW1pdHRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMz NHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24g c3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkp OworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQs IHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xM QkFDSyBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hp Y2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQg dXNpbmcgMlBDLgorCSMgMy4gRG8gcm9sbGJhY2sgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGRh dGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cy4KKwkjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhj ZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7 Iik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0 ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgVGhlbiBpbnNlcnQsIHVwZGF0 ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdI RVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFy YWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkj IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQs IHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAy UEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7 CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVz dWx0LCBxcSgyfDJ8MiksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ss IGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzJworCSk7CisKKwkkcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0 aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCSMgQ2hlY2sgdGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQg cHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KKwkjIDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxl dGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSMgMi4gVGhlbiBzZXJ2 ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCisJIyAz LiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5k IHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zm c2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAw KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikg PSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBB UkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3N1YnNjcmli ZXItPnN0b3AoJ2ltbWVkaWF0ZScpOworCSRub2RlX3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRpYXRl Jyk7CisKKwkkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCSRub2RlX3N1YnNjcmliZXItPnN0YXJ0 OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwkjIGNvbW1pdCBwb3N0IHRoZSByZXN0YXJ0CisJJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJl ZF90YWInOyIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwkjIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNHwz MzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vi c2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOwor CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5TRVJUIGFmdGVyIHRo ZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBk ZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIu CisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJ TlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8g YSBST0xMQkFDSyBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgdGhlIDJQQyBkYXRhIHJvbGxzIGJh Y2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgorCSMgKHRoZSBvcmlnaW5h bCAyICsgaW5zZXJ0ZWQgMSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJ IyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxp Y2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJl ciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2Zp bGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBl eGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAk b2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGlu IHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVw YXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBh cmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93 IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCisJIyBOb3RlOiB0aGUgMlBD IHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBpbnNl cnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwg J2Zvb2JhcicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rl c3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBz dWJzY3JpYmVyLAorCSMgYnV0IHRoZSBleHRyYSBJTlNFUlQgb3V0c2lkZSBvZiB0aGUgMlBDIHN0 aWxsIHdhcyByZXBsaWNhdGVkCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5 OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDN8M3wzKSwKKwkJJ2NoZWNrIHRo ZSBvdXRzaWRlIGluc2VydCB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKKworCSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisJIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9y ZSBDT01NSVQgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dz IHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVh bWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBp cyBhZnRlciB0aGUgUFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8gYSBDT01NSVQgUFJFUEFSRUQuCisJ IworCSMgRXhwZWN0IDJQQyBkYXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmli ZXIKKwkjICh0aGUgMzMzNCArIGluc2VydGVkIDEgPSAzMzM1KS4KKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAy IHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisKKwkj IENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywg NTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQ UkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9n KCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkjIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAn dHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBk aWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlv bikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNv IG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmltYXJ5IGtleQorCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdl dHMgY29tbWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM1fDMz MzV8MzMzNSksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2VsbCBhcyBvdXRzaWRlIGlu c2VydCkgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgYSA+IDI7Iik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkK Kwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAor CQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJl bG9hZDsKKwl9Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU2V0dXAK ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTQ4LDYgKzM1MCwxMCBAQCAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04g dGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFt aW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCAiCiAJQ1JFQVRFIFNVQlNDUklQVElP TiB0YXBfc3ViCkBAIC02NCwyMzYgKzM3MCwzMCBAQCBteSAkdHdvcGhhc2VfcXVlcnkgPQogJG5v ZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAkdHdvcGhhc2VfcXVl cnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8g ZW5hYmxlIHR3b3BoYXNlIjsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBD aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyCi0jIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiBteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5 OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRp YWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgotIyAx LiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgotIyAyLiBUaGVuIGRvIGNv bW1pdCBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vi c2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAwKTsKIAotIyBjaGVjayB0aGF0IDJQQyBnZXRzIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlcgotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2Vl ZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jl cycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3Rh YiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFy ZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1 YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQot IyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIp OwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNo ZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3Vs dCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1 bHRzJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2lu ZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxp Y2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7Ci0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVD VCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCks ICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQ QVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVw bGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4K LSMgMy4gRG8gcm9sbGJhY2sgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sg bGVhdmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo d2lsbCBiZSByZXBsaWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0 LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQu Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwot CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikg V0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMp ID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CiAKLSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhh dCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRyYW5zYWN0aW9u IGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki Uk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0 aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3Vu dChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyfDJ8MiksCi0JJ1Jv d3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVhdmluZyBvbmx5IHRoZSBvcmln aW5hbCAyIHJvd3MnKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK LWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVy Jyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ2hlY2sgdGhhdCAyUEMg Q09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KLSMg MS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0 a0IgbGltaXQuCi0jIDIuIFRoZW4gc2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkLgotIyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhl IHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEg aXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMgTm90 ZTogYm90aCBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KLSMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlh dGUnKTsKLSRub2RlX3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRpYXRlJyk7Ci0KLSRub2RlX3B1Ymxp c2hlci0+c3RhcnQ7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKLQotIyBjb21taXQgcG9zdCB0 aGUgcmVzdGFydAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09N TUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUK LSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VM RUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwot aXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBo YXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJwotKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBE byBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBST0xMQkFDSyBQUkVQQVJFRC4K LSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRl ZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4g QSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgot IyA0LiBUaGVuIGRvIGEgUk9MTEJBQ0sgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCB0aGUgMlBDIGRh dGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dzIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0 aGUgb3JpZ2luYWwgMiArIGluc2VydGVkIDEpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwg YmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBk YXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7 Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rp b24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZlcmVudCBy ZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3Rl OiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUg dGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAo OTk5OTksICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlJPTExCQUNLIFBSRVBBUkVE ICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9u IHN1YnNjcmliZXIsCi0jIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBz dGlsbCB3YXMgcmVwbGljYXRlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzfDN8MyksICdjaGVjayB0aGUgb3V0 c2lkZSBpbnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7Ci0KLSRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9u IGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1JVCBQ UkVQQVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUg cmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQ Qy4KLSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQ UkVQQVJFLgotIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgotIwotIyBFeHBlY3QgMlBD IGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgotIyAodGhlIDMzMzQg KyBpbnNlcnRlZCAxID0gMzMzNSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0K LSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBs aWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5k IGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywg NTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQ QVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlv biBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAo bm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCi0jIE5vdGU6IHRoZSAy UEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGlu c2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmltYXJ5IGtleQotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwg J2Zvb2JhcicpIik7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3Rf cHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRF UiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CiAKLSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgzMzM1fDMzMzV8MzMzNSksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIChhcyB3ZWxs IGFzIG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0 cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQ VElPTiI7CiAKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7Cit0 ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAxKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhl IGNsZWFudXAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1p bmdfcGFyYWxsZWxfYXBwbHkucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFt aW5nX3BhcmFsbGVsX2FwcGx5LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmIyMWU5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJf c3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsCkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdo dCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0 IGZvciBkZWFkbG9jayBpbiBzdHJlYW1pbmcgbW9kZSAicGFyYWxsZWwiIGluIGxvZ2ljYWwgcmVw bGljYXRpb24uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpN b3JlOworCitteSAkb2Zmc2V0ID0gMDsKKworIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKK215ICRu b2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVy Jyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcp OworJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwknbG9n aWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0a0InKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKKyMgQ3JlYXRlIHN1YnNjcmliZXIgbm9kZQorbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJl ci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisjIFNldHVwIHN0cnVjdHVyZSBv biBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdGVzdF90YWIgKGEgaW50KSIpOworCisjIFNldHVwIHN0cnVjdHVyZSBvbiBzdWJz Y3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0ZXN0X3RhYiAoYSBpbnQpIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiKGEpIik7 CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0g JG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9w dWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CisKK215ICRhcHBuYW1lID0gJ3RhcF9zdWInOworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsICIKKwlDUkVBVEUgU1VCU0NS SVBUSU9OIHRhcF9zdWIKKwlDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRp b25fbmFtZT0kYXBwbmFtZScKKwlQVUJMSUNBVElPTiB0YXBfcHViCisJV0lUSCAoc3RyZWFtaW5n ID0gcGFyYWxsZWwsIGNvcHlfZGF0YSA9IGZhbHNlKSIpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIEludGVybGVhdmUgYSBwYWlyIG9mIHRyYW5z YWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCitteSAkaW4gID0gJyc7Citt eSAkb3V0ID0gJyc7CisKK215ICR0aW1lciA9IElQQzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKKworbXkgJGggPSAkbm9kZV9wdWJsaXNo ZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCW9u X2Vycm9yX3N0b3AgPT4gMCk7CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb25maXJtIGlm IGEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgdGhlIHBhcmFs bGVsIGFwcGx5CisjIHdvcmtlciBjYW4gYmUgZGV0ZWN0ZWQuCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKworJGluIC49IHF7CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7Cit9OworJGgtPnB1bXBfbmI7CisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3Rh YiB2YWx1ZXMoMSkiKTsKKworJGluIC49IHF7CitDT01NSVQ7CitccQorfTsKKyRoLT5maW5pc2g7 CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9FUlJPUjogKCBbQS1aMC05 XSs6KT8gZGVhZGxvY2sgZGV0ZWN0ZWQvLAorCSRvZmZzZXQpOworCisjIERyb3AgdGhlIHVuaXF1 ZSBpbmRleCBvbiB0aGUgc3Vic2NyaWJlciwgbm93IGl0IHdvcmtzLgorJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0 IGZvciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBs eSB3b3JrZXIuCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwor CitteSAkcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMSks ICdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOwor CisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBUQUJMRSB0ZXN0X3RhYiIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVU5JUVVFIElOREVYIGlkeF90 YWIgb24gdGVzdF90YWIoYSkiKTsKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENvbmZpcm0g aWYgYSBkZWFkbG9jayBiZXR3ZWVuIHR3byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGNhbiBiZSBk ZXRlY3RlZC4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIENoZWNrIHRoZSBzdWJzY3JpYmVy IGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxl OworCiskaW4gLj0gcXsKK0JFR0lOOworSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgcyhpKTsKK307CiskaC0+cHVtcF9uYjsKKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSkiKTsKKworJGluIC49 IHF7CitDT01NSVQ7CitccQorfTsKKyRoLT5maW5pc2g7CisKKyRub2RlX3N1YnNjcmliZXItPndh aXRfZm9yX2xvZygKKwlxci9FUlJPUjogKCBbQS1aMC05XSs6KT8gZGVhZGxvY2sgZGV0ZWN0ZWQv LAorCSRvZmZzZXQpOworCisjIERyb3AgdGhlIHVuaXF1ZSBpbmRleCBvbiB0aGUgc3Vic2NyaWJl ciwgbm93IGl0IHdvcmtzLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0IGZvciB0aGlzIHN0cmVhbWluZyB0cmFu c2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSB3b3JrZXIuCiskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoMTAwMDApLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNj cmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsK KyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjcuMi53aW5k b3dzLjEKCg== --_003_OS0PR01MB5716E366874B253B58FC0A23943C9OS0PR01MB5716jpnp_--