From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4C24F486A7 for ; Mon, 15 Apr 2024 07:29:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3ED0B68D3A5; Mon, 15 Apr 2024 10:29:44 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6E5A768D223 for ; Mon, 15 Apr 2024 10:29:36 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713166182; x=1744702182; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=MsMZT6AmNYietCJ1rEUYgGrFrrhcTEitOd3TIA6xrC8=; b=QISBSXoppokBbXxEriO3NFzAoRwPAAU7QWWPzYjDtJscE6F4JfJD1TNl ql3Aqd9NrkSuQRF+YesQwOgpWgvJZQwILk0IEhvFwL/bQ+4UqHL84jPUl vwT3gDchU22vB8ZE/U+EDXa4D1H7oBwsza7+D709xGBpW95Y32G/HevbS fAGVOdEUCtXkpVTSCW0ytW7mqpFqsGVdfaXZWKh76cb9AUYnjmMfkRMVK zecvEjP8UduGy/8lj+OQ5FjUC8CyTT1zZPZFqe1zWkOF+OgOinvw54iAf rovvLSlc79p0ccgPPrjZo4MA5SpWLqvxqVTVuuxX+4sdLMB0GuSxT4OU9 Q==; X-CSE-ConnectionGUID: VhnS05nbS6e9sfwmUzZ4+A== X-CSE-MsgGUID: +QD5OAl8QmOUZsk/CpyicA== X-IronPort-AV: E=McAfee;i="6600,9927,11044"; a="33927239" X-IronPort-AV: E=Sophos;i="6.07,202,1708416000"; d="scan'208";a="33927239" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2024 00:29:33 -0700 X-CSE-ConnectionGUID: DIvAiipwSyiGAef2MVLlkA== X-CSE-MsgGUID: 6oVHyLkiRW6EmNhuGG8tjA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,202,1708416000"; d="scan'208";a="21899666" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmviesa009.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 15 Apr 2024 00:29:33 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 15 Apr 2024 00:29:32 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Mon, 15 Apr 2024 00:29:32 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.169) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Mon, 15 Apr 2024 00:29:31 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KpxhVFkJJ20/8wpf75NbFzMCevoCQlbl/kQKuQLTvpPCoyMHDFKUCCT8trlL6TA/Wt95GnjaEwX9Bc3SJMx8SHPPQZjqapLW+3tLNAOf8oQ5mIReozK7L7Pw24lC1JeW/37ndm5aU7po6Xl1RsqnjLj+gRHRTBdWbYmRU/eLLLS62bMkScZC9Z5CyMtjy7O1d10AlX/JaUhfDYgZllB03rcyXwQVdhYPSpNic1YNKUJf3ogLZ8xv/OZk5ygzOSeNUggDfSfGsmnQa/AfctSdOBkxkIKa5d+NZ+fd+AdODQvhJK3C6dWEJ0y4rmaxeTV28lX3lhfWkj36Rumu049bhQ== 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=MsMZT6AmNYietCJ1rEUYgGrFrrhcTEitOd3TIA6xrC8=; b=BdHjRpsdALHebM3NX3lykQ4w7kURk7KUCyaj2rv6RurbCIXdxlCBE13lqzyWpTJSLz+nKvMqwT+540txQZ0t38gJweV11GBCfiNvxSre3oSoXO8xvjN6FBx72XhbAYicloyMFzzxmxCRe3ictvg0PHRFwV2S/OKtY9CLOKhXr224NJdcyhjWWSEr4QYWPnNEc0+jtdUcqWkEebKrvwp2FvHNw848vJN9Iam3Z6DEGdNjIwamQHGtdQXKE1JwOJXw3MHpztPdXxGtEpFmtkjLtdhNnDaYw0ECd1lMcrnRr2tCM92tc1qOOeyQO8FMdwQICH//e/ig+XzUz4C7/nQOWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM3PR11MB8757.namprd11.prod.outlook.com (2603:10b6:8:1af::7) by MW5PR11MB5787.namprd11.prod.outlook.com (2603:10b6:303:192::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.27; Mon, 15 Apr 2024 07:29:26 +0000 Received: from DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::103a:9795:6ae2:7c96]) by DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::103a:9795:6ae2:7c96%4]) with mapi id 15.20.7430.045; Mon, 15 Apr 2024 07:29:26 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v7 02/12] avcodec/vaapi_encode: introduce a base layer for vaapi encode Thread-Index: AQHadef2hMzBL3I/1ECEVp1HSJzkobFpIXcA Date: Mon, 15 Apr 2024 07:29:26 +0000 Message-ID: References: <20240314081456.379-1-tong1.wu@intel.com> <20240314081456.379-2-tong1.wu@intel.com> In-Reply-To: <20240314081456.379-2-tong1.wu@intel.com> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM3PR11MB8757:EE_|MW5PR11MB5787:EE_ x-ms-office365-filtering-correlation-id: ca56ed1f-88d5-424b-37be-08dc5d1dc78d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rgGaJXlUxhdQpzXxM7Xj37ziTjmmJnu2/eyMnGhpMBnsL/h06v2jVFR1wgdXF1cLeL2j2swlaA6Zc5N6oRHLPIRtIzMc0dBX1f+/0GY1jzsqWurXO11XJx0GU8WuvGzmKxVdYnM7JzIOaHISIbpPUUVMQ+5/K3g5cdnnuwwYQlh/pugZ6ZbB6PkVKWlyoiszzYlEGYwlhIuzgSWYXB/EV9ZP2QnGcybHRlYOLlaDzghPKgvS86GyJjCXok7nL0vE1yvKW8ng4Qx114mBt+bODVbK4DE39xqBRZiWW/USX38xObRKdGZR+91HDLzhWnEUzj2ALiEnHdubVIm8CA/0hV3bD3lTA/XiIesH2umk6FZ1GaWJwoiG7+5JTmsa/PEU5R24CDYT9TH/6yWzcK15gC6d5Gl7nrIIRoHFo6yuhY8/di8JeHdf8C6lrGHtRUULM12SEUF2t0jHtkxraA6B8/wb9ezGnRHIpBQqkLniKC02/GIPLES22g1zxNFjuWaGWBGd2kCnw4Mz2RCtMORx59LvBsN+GdOHDsjTKhB0YUXiJVyB3rMNMweAgUai+7lu+l5eDc47uV7NvzmB1JDkWJ9EGHHjVjnt6ZUZtrSjceX29zBliIaxff5pzu/qjWV6VsrIvyTpEXg+/rF/IUfDrtnIZiAsHuFjW5AOcfE18yzIqD3kzxycIFCstmlLE3jkf2ZFyD/q8R4mq+Ck91p+lw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM3PR11MB8757.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(366007)(1800799015)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?b2YvVmRVT3ZIT2EwQVFVY2lPczQ5Zjl3eVFIQVNkY0FxakFGYWxsMjlpMHFH?= =?utf-8?B?bzYwSDRvT2IrUytJZ0JseWY4Y0NjNUdYZjJXTkpSQ2VLY2ZsSlh1aHo0WXUv?= =?utf-8?B?UVpGa3VTYXl4eDkzVHlpdmdpb0hGTFVJd1pVWVI4eFBYRGdzNlc1TGJUU25v?= =?utf-8?B?eUJnTWRwWE0yQSt5b0ppN01XY2VFOCt5VzZLNDVuL2JZc2lFN2p6ZHVyeDJB?= =?utf-8?B?NmwrUStxalhmVTE2ZlMxSHFKK29UVjF2dmljQlVBMi8vSExIWVdrREpQN2NB?= =?utf-8?B?S3ZTckpoeElGendOZ2JTTzUvbFRXc0pxMVlCeUhRTFFLZEF2NnlQV0dJM0ZS?= =?utf-8?B?YXIvNjFiTnNyU0hWWDU3aHJINURpcjNwMS9mL1BGSDFtZkJmQXdDZytvc1Bm?= =?utf-8?B?Ti9zUmNKRko4cVFRNU82cXRldTRnVVNPY2RCWnJwUWk3NkNzcFZucnJvalJu?= =?utf-8?B?OSsrK0czbjRaUk5sc2lDdW9JZWxmelVTVXMvS0xrdGl0S3FaOENxM0NENzNC?= =?utf-8?B?bjdZSmMvRlppcnEzREdXWi9WUzh2SHhKSHdpY2pac1dJK0U0bkZ2S05hcDNH?= =?utf-8?B?V24zekhRMjhlcVNKZmZDaU9ERk5FdDEvRDgvVHZlbGp6SzhJOUN2Mmw2S2po?= =?utf-8?B?TjBqYjI1RStBNlNSZXhJU0ZxUDhPMW0waEdUTmtpdFVzY2Z0UncyTWJnOVQr?= =?utf-8?B?TDEza3Y4Y0ZwRTk2eThIejFSUTBVS0VobmxZL2JxWEdlT3JXSytPV2hpU21m?= =?utf-8?B?SVc0YTJCSThRWnBLdk1HRDJ2S2xRbzB5TmpXUC9rSitqUDg5a1ZLeUNiYktp?= =?utf-8?B?M2d6Y3FTTkU3TS9KVlA2YjlqZkxYUjVENHdDaGVncjF3OFRFRFRaalJOd015?= =?utf-8?B?VGJiNW82WnFLcHhpOVZQbXFvekMweG5LWCt6dFRhclVqVHp6eGZYUXc2c2pC?= =?utf-8?B?ajBMQWI2TitzLzc1UHppQXRjYnlqRCsraTNFbUdxUTk5dnl0Uk0xUDk5dE5N?= =?utf-8?B?c3BMVzJuUWNHNnM1WnpxaCtxOFVEZVZJWmRsNGNTSnRIRTZiOS85ME9ZUWw2?= =?utf-8?B?TlE5OWN6Tmo2M0I2TkorWnhOSEVDTDl0Y0ozd1FURC9wd1d6T1BKN1NBVS9R?= =?utf-8?B?Uy9RUXZrYzB5NEpPMkY2aW80b2U4YXpBVVFNd0hycEMySmlsRDBjWDlxRThE?= =?utf-8?B?ZUNlKzUzZ01DRk1IalBxdHZZbmhHek5ZcnpNbU12UDJiTUNKdGpqUEF4alpm?= =?utf-8?B?SGpYTE0vSjJnT2VQZFhycGpERUJRd3A2M3l6TS92RWYxODYwYkxJRldSWDVD?= =?utf-8?B?a3c1UFZScERKRG02MVBpZWNKSkgveHR4emhWRTJUek1JcHlnYlBzSkFxZmEx?= =?utf-8?B?aklTNk1DbWtHbnUwaWtSMFBScU4yS3lKdVJnN2NYeWRCakh5MkRuNExqUDB5?= =?utf-8?B?MEZPTENKZHhxN2ZVYi9pY3kwNTllelFJMzlCZXcvcm9WZ1FSV05qR0JmYkJn?= =?utf-8?B?UVd5c1dKNjU0RkVTcmRYU1VYVFV3cUZnTUN4MTJrTHMxRTkwb20rNC8zZkpk?= =?utf-8?B?WFVJK1NjemN6aG9laFhlODdMLzByak1Jd2dWcHdvdmpoOHc1VGtiR0hDZGJR?= =?utf-8?B?MUVkWjgzelFneEtVVW5BbXA2K2VhWTRDRjNVZ09sc0JUdXlJcGJkSmpORTAv?= =?utf-8?B?NGEyeVJJbHl3U0lUbUdzT3dxUFV5b3ZsRWNYNitmeEVxcHU4bXFqWmhwRUxz?= =?utf-8?B?ZnBudkFSamc3MCtNYjlkSmViQ0JJWWR4eEFDdW1nSlBkNit1SWpkRUJrb0ZU?= =?utf-8?B?QXpsYU1wMm5GTHY3WlIxU0FuRW9uUTJkMGhndEE1bzlTR2txeWtrVWVFeURJ?= =?utf-8?B?RHBESmNlZWJLaXNPYlIrZ1FpWnpDYnk5V3dUV0JLUElwZnBwN3RpOGt4YWov?= =?utf-8?B?SkRnNVBQcG9sdmRxaWhDVTlLZVNCZUtMWjZ2UnI5TTZCb0JMWkdXdlpnY1RI?= =?utf-8?B?T1pPUGVPSFliWkNBbUVMZU1PR0tLY1ByUEZ5YnhHQXlFNVQvOURpU28zYnFr?= =?utf-8?B?bDZTNVZYd2lpTitYekR1VmQ0L0ZOUlI5Y2l6dWZNd2dpN1J6K3o4aVpkS0pQ?= =?utf-8?B?NENET0pJOEhJLzJKK3RqRlB4UlpEVjR4OW55NFk0alRiODdDbU5DRWo1NC8x?= =?utf-8?B?ZHc9PQ==?= Content-ID: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM3PR11MB8757.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca56ed1f-88d5-424b-37be-08dc5d1dc78d X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2024 07:29:26.2775 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: YoP2mEfHlDTwjtriWWwkMRCq0qQQioFBo3cLQVbhhfeG0wieU8rycA3XCkMiHTFT6ev3iGnu5ddKaN8fHmMHIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5787 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v7 02/12] avcodec/vaapi_encode: introduce a base layer for vaapi encode X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "Wu, Tong1" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gRG8sIDIwMjQtMDMtMTQgYXQgMTY6MTQgKzA4MDAsIHRvbmcxLnd1LWF0LWludGVsLmNvbUBm Zm1wZWcub3JnIHdyb3RlOgo+IEZyb206IFRvbmcgV3UgPHRvbmcxLnd1QGludGVsLmNvbT4KPiAK PiBTaW5jZSBWQUFQSSBhbmQgZnV0dXJlIEQzRDEyVkEgaW1wbGVtZW50YXRpb24gbWF5IHNoYXJl IHNvbWUgY29tbW9uCj4gcGFyYW1ldGVycywKPiBhIGJhc2UgbGF5ZXIgZW5jb2RlIGNvbnRleHQg aXMgaW50cm9kdWNlZCBhcyB2YWFwaSBjb250ZXh0J3MgYmFzZS4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBUb25nIFd1IDx0b25nMS53dUBpbnRlbC5jb20+Cj4gLS0tCj4gwqBsaWJhdmNvZGVjL2h3X2Jh c2VfZW5jb2RlLmjCoMKgwqDCoCB8IDI0MSArKysrKysrKysrKysrKysrKysrKwo+IMKgbGliYXZj b2RlYy92YWFwaV9lbmNvZGUuY8KgwqDCoMKgwqDCoCB8IDM5MiArKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLQo+IMKgbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaMKgwqDCoMKgwqDCoCB8 IDE5OCArLS0tLS0tLS0tLS0tLS0tCj4gwqBsaWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuY8Kg wqAgfMKgIDY5ICsrKy0tLQo+IMKgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfaDI2NC5jwqAgfCAx OTcgKysrKysrKystLS0tLS0tLQo+IMKgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfaDI2NS5jwqAg fCAxNTkgKysrKysrLS0tLS0tLQo+IMKgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfbWpwZWcuYyB8 wqAgMjAgKy0KPiDCoGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX21wZWcyLmMgfMKgIDQ5ICsrLS0K PiDCoGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX3ZwOC5jwqDCoCB8wqAgMjQgKy0KPiDCoGxpYmF2 Y29kZWMvdmFhcGlfZW5jb2RlX3ZwOS5jwqDCoCB8wqAgNjYgKysrLS0tCj4gwqAxMCBmaWxlcyBj aGFuZ2VkLCA3NjQgaW5zZXJ0aW9ucygrKSwgNjUxIGRlbGV0aW9ucygtKQo+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Y29kZWMvaHdfYmFzZV9lbmNvZGUuaAo+IAo+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2h3X2Jhc2VfZW5jb2RlLmggYi9saWJhdmNvZGVjL2h3X2Jhc2VfZW5jb2RlLmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjQxYjY4YWEwNzMKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9od19iYXNlX2VuY29kZS5oCj4gQEAgLTAs MCArMSwyNDEgQEAKPiArLyoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsg Kgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEKPiBVU0EKPiArICovCj4gKwo+ICsjaWZuZGVmIEFWQ09ERUNfSFdf QkFTRV9FTkNPREVfSAo+ICsjZGVmaW5lIEFWQ09ERUNfSFdfQkFTRV9FTkNPREVfSAo+ICsKPiAr I2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9m aWZvLmgiCj4gKwo+ICsjaW5jbHVkZSAiYXZjb2RlYy5oIgo+ICsKPiArI2RlZmluZSBNQVhfRFBC X1NJWkUgMTYKPiArI2RlZmluZSBNQVhfUElDVFVSRV9SRUZFUkVOQ0VTIDIKPiArI2RlZmluZSBN QVhfUkVPUkRFUl9ERUxBWSAxNgo+ICsjZGVmaW5lIE1BWF9BU1lOQ19ERVBUSCA2NAo+ICsjZGVm aW5lIE1BWF9SRUZFUkVOQ0VfTElTVF9OVU0gMgo+ICsKPiArc3RhdGljIGlubGluZSBjb25zdCBj aGFyICpmZl9od19iYXNlX2VuY29kZV9nZXRfcGljdHlwZV9uYW1lKGNvbnN0IGludCB0eXBlKQo+ IHsKPiArwqDCoMKgIGNvbnN0IGNoYXIgKiBjb25zdCBwaWN0dXJlX3R5cGVfbmFtZVtdID0geyAi SURSIiwgIkkiLCAiUCIsICJCIiB9Owo+ICvCoMKgwqAgcmV0dXJuIHBpY3R1cmVfdHlwZV9uYW1l W3R5cGVdOwo+ICt9Cj4gKwo+ICtlbnVtIHsKPiArwqDCoMKgIFBJQ1RVUkVfVFlQRV9JRFIgPSAw LAo+ICvCoMKgwqAgUElDVFVSRV9UWVBFX0nCoMKgID0gMSwKPiArwqDCoMKgIFBJQ1RVUkVfVFlQ RV9QwqDCoCA9IDIsCj4gK8KgwqDCoCBQSUNUVVJFX1RZUEVfQsKgwqAgPSAzLAo+ICt9Owo+ICsK PiArZW51bSB7Cj4gK8KgwqDCoCAvLyBDb2RlYyBzdXBwb3J0cyBjb250cm9sbGluZyB0aGUgc3Vi ZGl2aXNpb24gb2YgcGljdHVyZXMgaW50byBzbGljZXMuCj4gK8KgwqDCoCBGTEFHX1NMSUNFX0NP TlRST0zCoMKgwqDCoMKgwqDCoMKgID0gMSA8PCAwLAo+ICvCoMKgwqAgLy8gQ29kZWMgb25seSBz dXBwb3J0cyBjb25zdGFudCBxdWFsaXR5IChubyByYXRlIGNvbnRyb2wpLgo+ICvCoMKgwqAgRkxB R19DT05TVEFOVF9RVUFMSVRZX09OTFkgPSAxIDw8IDEsCj4gK8KgwqDCoCAvLyBDb2RlYyBpcyBp bnRyYS1vbmx5Lgo+ICvCoMKgwqAgRkxBR19JTlRSQV9PTkxZwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IDEgPDwgMiwKPiArwqDCoMKgIC8vIENvZGVjIHN1cHBvcnRzIEItcGljdHVyZXMuCj4gK8Kg wqDCoCBGTEFHX0JfUElDVFVSRVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMSA8PCAzLAo+ICvC oMKgwqAgLy8gQ29kZWMgc3VwcG9ydHMgcmVmZXJlbmNpbmcgQi1waWN0dXJlcy4KPiArwqDCoMKg IEZMQUdfQl9QSUNUVVJFX1JFRkVSRU5DRVPCoCA9IDEgPDwgNCwKPiArwqDCoMKgIC8vIENvZGVj IHN1cHBvcnRzIG5vbi1JRFIga2V5IHBpY3R1cmVzICh0aGF0IGlzLCBrZXkgcGljdHVyZXMgZG8K PiArwqDCoMKgIC8vIG5vdCBuZWNlc3NhcmlseSBlbXB0eSB0aGUgRFBCKS4KPiArwqDCoMKgIEZM QUdfTk9OX0lEUl9LRVlfUElDVFVSRVPCoCA9IDEgPDwgNSwKPiArfTsKPiArCj4gK3R5cGVkZWYg c3RydWN0IEhXQmFzZUVuY29kZVBpY3R1cmUgewo+ICvCoMKgwqAgc3RydWN0IEhXQmFzZUVuY29k ZVBpY3R1cmUgKm5leHQ7Cj4gKwo+ICvCoMKgwqAgaW50NjRfdMKgwqDCoMKgwqDCoMKgwqAgZGlz cGxheV9vcmRlcjsKPiArwqDCoMKgIGludDY0X3TCoMKgwqDCoMKgwqDCoMKgIGVuY29kZV9vcmRl cjsKPiArwqDCoMKgIGludDY0X3TCoMKgwqDCoMKgwqDCoMKgIHB0czsKPiArwqDCoMKgIGludDY0 X3TCoMKgwqDCoMKgwqDCoMKgIGR1cmF0aW9uOwo+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZvcmNlX2lkcjsKPiArCj4gK8KgwqDCoCB2b2lkwqDCoMKgwqDCoMKgwqDCoMKg wqAgKm9wYXF1ZTsKPiArwqDCoMKgIEFWQnVmZmVyUmVmwqDCoMKgICpvcGFxdWVfcmVmOwo+ICsK PiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlOwo+ICvCoMKgwqAgaW50 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJfZGVwdGg7Cj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZW5jb2RlX2lzc3VlZDsKPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbmNvZGVfY29tcGxldGU7Cj4gKwo+ICvCoMKgwqAgQVZGcmFtZcKgwqDCoMKg wqDCoMKgICppbnB1dF9pbWFnZTsKPiArwqDCoMKgIEFWRnJhbWXCoMKgwqDCoMKgwqDCoCAqcmVj b25faW1hZ2U7Cj4gKwo+ICvCoMKgwqAgdm9pZMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcml2X2Rh dGE7Cj4gKwo+ICvCoMKgwqAgLy8gV2hldGhlciB0aGlzIHBpY3R1cmUgaXMgYSByZWZlcmVuY2Ug cGljdHVyZS4KPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpc19yZWZlcmVu Y2U7Cj4gKwo+ICvCoMKgwqAgLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBEUEIgYWZ0ZXIgdGhpcyBw aWN0dXJlIGhhcyBiZWVuIGRlY29kZWQuCj4gK8KgwqDCoCAvLyBUaGlzIHdpbGwgY29udGFpbiB0 aGUgcGljdHVyZSBpdHNlbGYgaWYgaXQgaXMgYSByZWZlcmVuY2UgcGljdHVyZSwKPiArwqDCoMKg IC8vIGJ1dCBub3QgaWYgaXQgaXNuJ3QuCj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5iX2RwYl9waWNzOwo+ICvCoMKgwqAgc3RydWN0IEhXQmFz ZUVuY29kZVBpY3R1cmUgKmRwYltNQVhfRFBCX1NJWkVdOwo+ICvCoMKgwqAgLy8gVGhlIHJlZmVy ZW5jZSBwaWN0dXJlcyB1c2VkIGluIGRlY29kaW5nIHRoaXMgcGljdHVyZS4gSWYgdGhleSBhcmUK PiArwqDCoMKgIC8vIHVzZWQgYnkgbGF0ZXIgcGljdHVyZXMgdGhleSB3aWxsIGFsc28gYXBwZWFy IGluIHRoZSBEUEIuIHJlZlswXVtdIGZvcgo+ICvCoMKgwqAgLy8gcHJldmlvdXMgcmVmZXJlbmNl IGZyYW1lcy4gcmVmWzFdW10gZm9yIGZ1dHVyZSByZWZlcmVuY2UgZnJhbWVzLgo+ICvCoMKgwqAg aW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9yZWZzW01BWF9S RUZFUkVOQ0VfTElTVF9OVU1dOwo+ICvCoMKgwqAgc3RydWN0IEhXQmFzZUVuY29kZVBpY3R1cmUK PiAqcmVmc1tNQVhfUkVGRVJFTkNFX0xJU1RfTlVNXVtNQVhfUElDVFVSRV9SRUZFUkVOQ0VTXTsK PiArwqDCoMKgIC8vIFRoZSBwcmV2aW91cyByZWZlcmVuY2UgcGljdHVyZSBpbiBlbmNvZGUgb3Jk ZXIuwqAgTXVzdCBiZSBpbiBhdCBsZWFzdAo+ICvCoMKgwqAgLy8gb25lIG9mIHRoZSByZWZlcmVu Y2UgbGlzdCBhbmQgRFBCIGxpc3QuCj4gK8KgwqDCoCBzdHJ1Y3QgSFdCYXNlRW5jb2RlUGljdHVy ZSAqcHJldjsKPiArwqDCoMKgIC8vIFJlZmVyZW5jZSBjb3VudCBmb3Igb3RoZXIgcGljdHVyZXMg cmVmZXJyaW5nIHRvIHRoaXMgb25lIHRocm91Z2gKPiArwqDCoMKgIC8vIHRoZSBhYm92ZSBwb2lu dGVycywgZGlyZWN0bHkgZnJvbSBpbmNvbXBsZXRlIHBpY3R1cmVzIGFuZCBpbmRpcmVjdGx5Cj4g K8KgwqDCoCAvLyB0aHJvdWdoIGNvbXBsZXRlZCBwaWN0dXJlcy4KPiArwqDCoMKgIGludMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZWZfY291bnRbMl07Cj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmVmX3JlbW92ZWRbMl07Cj4gK30gSFdCYXNlRW5jb2RlUGljdHVyZTsK PiArCj4gK3R5cGVkZWYgc3RydWN0IEhXRW5jb2RlUGljdHVyZU9wZXJhdGlvbiB7Cj4gK8KgwqDC oCAvLyBBbGxvYyBtZW1vcnkgZm9yIHRoZSBwaWN0dXJlIHN0cnVjdHVyZS4KPiArwqDCoMKgIEhX QmFzZUVuY29kZVBpY3R1cmUgKiAoKmFsbG9jKShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0 IEFWRnJhbWUKPiAqZnJhbWUpOwo+ICvCoMKgwqAgLy8gSXNzdWUgdGhlIHBpY3R1cmUgc3RydWN0 dXJlLCB3aGljaCB3aWxsIHNlbmQgdGhlIGZyYW1lIHN1cmZhY2UgdG8gSFcKPiBFbmNvZGUgQVBJ Lgo+ICvCoMKgwqAgaW50ICgqaXNzdWUpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3QgSFdC YXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMpOwo+ICvCoMKgwqAgLy8gR2V0IHRoZSBvdXRwdXQg QVZQYWNrZXQuCj4gK8KgwqDCoCBpbnQgKCpvdXRwdXQpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwg Y29uc3QgSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMsCj4gQVZQYWNrZXQgKnBrdCk7Cj4g K8KgwqDCoCAvLyBGcmVlIHRoZSBwaWN0dXJlIHN0cnVjdHVyZS4KPiArwqDCoMKgIGludCAoKmZy ZWUpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMp Owo+ICt9wqAgSFdFbmNvZGVQaWN0dXJlT3BlcmF0aW9uOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3Qg SFdCYXNlRW5jb2RlQ29udGV4dCB7Cj4gK8KgwqDCoCBjb25zdCBBVkNsYXNzICpjbGFzczsKPiAr Cj4gK8KgwqDCoCAvLyBIYXJkd2FyZS1zcGVjaWZpYyBob29rcy4KPiArwqDCoMKgIGNvbnN0IHN0 cnVjdCBIV0VuY29kZVBpY3R1cmVPcGVyYXRpb24gKm9wOwo+ICsKPiArwqDCoMKgIC8vIEdsb2Jh bCBvcHRpb25zLgo+ICsKPiArwqDCoMKgIC8vIE51bWJlciBvZiBJIGZyYW1lcyBiZXR3ZWVuIElE UiBmcmFtZXMuCj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWRyX2ludGVy dmFsOwo+ICsKPiArwqDCoMKgIC8vIERlc2lyZWQgQiBmcmFtZSByZWZlcmVuY2UgZGVwdGguCj4g K8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzaXJlZF9iX2RlcHRoOwo+ICsK PiArwqDCoMKgIC8vIEV4cGxpY2l0bHkgc2V0IFJDIG1vZGUgKG90aGVyd2lzZSBhdHRlbXB0IHRv IHBpY2sgZnJvbQo+ICvCoMKgwqAgLy8gYXZhaWxhYmxlIG1vZGVzKS4KPiArwqDCoMKgIGludMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleHBsaWNpdF9yY19tb2RlOwo+ICsKPiArwqDCoMKgIC8v IEV4cGxpY2l0bHktc2V0IFFQLCBmb3IgdXNlIHdpdGggdGhlICJxcCIgb3B0aW9ucy4KPiArwqDC oMKgIC8vIChGb3JjZXMgQ1FQIG1vZGUgd2hlbiBzZXQsIG92ZXJyaWRpbmcgZXZlcnl0aGluZyBl bHNlLikKPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleHBsaWNpdF9xcDsK PiArCj4gK8KgwqDCoCAvLyBUaGUgcmVxdWlyZWQgc2l6ZSBvZiBzdXJmYWNlcy7CoCBUaGlzIGlz IHByb2JhYmx5IHRoZSBpbnB1dAo+ICvCoMKgwqAgLy8gc2l6ZSAoQVZDb2RlY0NvbnRleHQud2lk dGh8aGVpZ2h0KSBhbGlnbmVkIHVwIHRvIHdoYXRldmVyCj4gK8KgwqDCoCAvLyBibG9jayBzaXpl IGlzIHJlcXVpcmVkIGJ5IHRoZSBjb2RlYy4KPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdXJmYWNlX3dpZHRoOwo+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN1cmZhY2VfaGVpZ2h0Owo+ICsKPiArwqDCoMKgIC8vIFRoZSBibG9jayBzaXplIGZvciBz bGljZSBjYWxjdWxhdGlvbnMuCj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c2xpY2VfYmxvY2tfd2lkdGg7Cj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c2xpY2VfYmxvY2tfaGVpZ2h0Owo+ICsKPiArwqDCoMKgIC8vIFJDIHF1YWxpdHkgbGV2ZWwgLSBt ZWFuaW5nIGRlcGVuZHMgb24gY29kZWMgYW5kIFJDIG1vZGUuCj4gK8KgwqDCoCAvLyBJbiBDUVAg bW9kZSB0aGlzIHNldHMgdGhlIGZpeGVkIHF1YW50aXNlciB2YWx1ZS4KPiArwqDCoMKgIGludMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByY19xdWFsaXR5Owo+ICsKPiArwqDCoMKgIEFWQnVmZmVy UmVmwqDCoMKgICpkZXZpY2VfcmVmOwo+ICvCoMKgwqAgQVZIV0RldmljZUNvbnRleHQgKmRldmlj ZTsKPiArCj4gK8KgwqDCoCAvLyBUaGUgaGFyZHdhcmUgZnJhbWUgY29udGV4dCBjb250YWluaW5n IHRoZSBpbnB1dCBmcmFtZXMuCj4gK8KgwqDCoCBBVkJ1ZmZlclJlZsKgwqDCoCAqaW5wdXRfZnJh bWVzX3JlZjsKPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0ICppbnB1dF9mcmFtZXM7Cj4gKwo+ ICvCoMKgwqAgLy8gVGhlIGhhcmR3YXJlIGZyYW1lIGNvbnRleHQgY29udGFpbmluZyB0aGUgcmVj b25zdHJ1Y3RlZCBmcmFtZXMuCj4gK8KgwqDCoCBBVkJ1ZmZlclJlZsKgwqDCoCAqcmVjb25fZnJh bWVzX3JlZjsKPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0ICpyZWNvbl9mcmFtZXM7Cj4gKwo+ ICvCoMKgwqAgLy8gQ3VycmVudCBlbmNvZGluZyB3aW5kb3csIGluIGRpc3BsYXkgKGlucHV0KSBv cmRlci4KPiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKnBpY19zdGFydCwgKnBpY19lbmQ7 Cj4gK8KgwqDCoCAvLyBUaGUgbmV4dCBwaWN0dXJlIHRvIHVzZSBhcyB0aGUgcHJldmlvdXMgcmVm ZXJlbmNlIHBpY3R1cmUgaW4KPiArwqDCoMKgIC8vIGVuY29kaW5nIG9yZGVyLiBPcmRlciBmcm9t IHNtYWxsIHRvIGxhcmdlIGluIGVuY29kaW5nIG9yZGVyLgo+ICvCoMKgwqAgSFdCYXNlRW5jb2Rl UGljdHVyZSAqbmV4dF9wcmV2W01BWF9QSUNUVVJFX1JFRkVSRU5DRVNdOwo+ICvCoMKgwqAgaW50 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9uZXh0X3ByZXY7Cj4gKwo+ICvC oMKgwqAgLy8gTmV4dCBpbnB1dCBvcmRlciBpbmRleCAoZGlzcGxheSBvcmRlcikuCj4gK8KgwqDC oCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBpbnB1dF9vcmRlcjsKPiArwqDCoMKgIC8vIE51bWJl ciBvZiBmcmFtZXMgdGhhdCBvdXRwdXQgaXMgYmVoaW5kIGlucHV0Lgo+ICvCoMKgwqAgaW50NjRf dMKgwqDCoMKgwqDCoMKgwqAgb3V0cHV0X2RlbGF5Owo+ICvCoMKgwqAgLy8gTmV4dCBlbmNvZGUg b3JkZXIgaW5kZXguCj4gK8KgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBlbmNvZGVfb3Jk ZXI7Cj4gK8KgwqDCoCAvLyBOdW1iZXIgb2YgZnJhbWVzIGRlY29kZSBvdXRwdXQgd2lsbCBuZWVk IHRvIGJlIGRlbGF5ZWQuCj4gK8KgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBkZWNvZGVf ZGVsYXk7Cj4gK8KgwqDCoCAvLyBOZXh0IG91dHB1dCBvcmRlciBpbmRleCAoaW4gZW5jb2RlIG9y ZGVyKS4KPiArwqDCoMKgIGludDY0X3TCoMKgwqDCoMKgwqDCoMKgIG91dHB1dF9vcmRlcjsKPiAr Cj4gK8KgwqDCoCAvLyBUaW1lc3RhbXAgaGFuZGxpbmcuCj4gK8KgwqDCoCBpbnQ2NF90wqDCoMKg wqDCoMKgwqDCoCBmaXJzdF9wdHM7Cj4gK8KgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBk dHNfcHRzX2RpZmY7Cj4gK8KgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCB0c19yaW5nW01B WF9SRU9SREVSX0RFTEFZICogMyArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBNQVhfQVNZTkNfREVQVEhdOwo+ICsKPiArwqDCoMKgIC8v IEZyYW1lIHR5cGUgZGVjaXNpb24uCj4gK8KgwqDCoCBpbnQgZ29wX3NpemU7Cj4gK8KgwqDCoCBp bnQgY2xvc2VkX2dvcDsKPiArwqDCoMKgIGludCBnb3BfcGVyX2lkcjsKPiArwqDCoMKgIGludCBw X3Blcl9pOwo+ICvCoMKgwqAgaW50IG1heF9iX2RlcHRoOwo+ICvCoMKgwqAgaW50IGJfcGVyX3A7 Cj4gK8KgwqDCoCBpbnQgZm9yY2VfaWRyOwo+ICvCoMKgwqAgaW50IGlkcl9jb3VudGVyOwo+ICvC oMKgwqAgaW50IGdvcF9jb3VudGVyOwo+ICvCoMKgwqAgaW50IGVuZF9vZl9zdHJlYW07Cj4gK8Kg wqDCoCBpbnQgcF90b19ncGI7Cj4gKwo+ICvCoMKgwqAgLy8gV2hldGhlciB0aGUgZHJpdmVyIHN1 cHBvcnRzIFJPSSBhdCBhbGwuCj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cm9pX2FsbG93ZWQ7Cj4gKwo+ICvCoMKgwqAgLy8gVGhlIGVuY29kZXIgZG9lcyBub3Qgc3VwcG9y dCBjcm9wcGluZyBpbmZvcm1hdGlvbiwgc28gd2FybiBhYm91dAo+ICvCoMKgwqAgLy8gaXQgdGhl IGZpcnN0IHRpbWUgd2UgZW5jb3VudGVyIGFueSBub256ZXJvIGNyb3AgZmllbGRzLgo+ICvCoMKg wqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNyb3Bfd2FybmVkOwo+ICvCoMKgwqAgLy8g SWYgdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IFJPSSB0aGVuIHdhcm4gdGhlIGZpcnN0IHRp bWUgd2UKPiArwqDCoMKgIC8vIGVuY291bnRlciBhIGZyYW1lIHdpdGggUk9JIHNpZGUgZGF0YS4K PiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByb2lfd2FybmVkOwo+ICsKPiAr wqDCoMKgIEFWRnJhbWXCoMKgwqDCoMKgwqDCoMKgICpmcmFtZTsKCkNvdWxkIHlvdSBhZGQgbW9y ZSBjb21tZW50cyBmb3IgbWVtYmVycyBpbiBiYXNlIHN0cnVjdHVyZXMgPyAKClRoYW5rcwpIYWlo YW8KCj4gKwo+ICvCoMKgwqAgLy8gV2hldGhlciB0aGUgSFcgc3VwcG9ydHMgc3luYyBidWZmZXIg ZnVuY3Rpb24uCj4gK8KgwqDCoCAvLyBJZiBzdXBwb3J0ZWQsIGVuY29kZV9maWZvL2FzeW5jX2Rl cHRoIHdpbGwgYmUgdXNlZCB0b2dldGhlci4KPiArwqDCoMKgIC8vIFVzZWQgZm9yIG91dHB1dCBi dWZmZXIgc3luY2hyb25pemF0aW9uLgo+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGFzeW5jX2VuY29kZTsKPiArCj4gK8KgwqDCoCAvLyBTdG9yZSBidWZmZXJlZCBwaWMKPiAr wqDCoMKgIEFWRmlmb8KgwqDCoMKgwqDCoMKgwqDCoCAqZW5jb2RlX2ZpZm87Cj4gK8KgwqDCoCAv LyBNYXggbnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcmVkIGluIGVuY29kZXIuCj4gK8KgwqDCoCBpbnTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN5bmNfZGVwdGg7Cj4gKwo+ICvCoMKgwqAgLyoqIFRh aWwgZGF0YSBvZiBhIHBpYywgbm93IG9ubHkgdXNlZCBmb3IgYXYxIHJlcGVhdCBmcmFtZSBoZWFk ZXIuICovCj4gK8KgwqDCoCBBVlBhY2tldMKgwqDCoMKgwqDCoMKgICp0YWlsX3BrdDsKPiArfSBI V0Jhc2VFbmNvZGVDb250ZXh0Owo+ICsKPiArI2RlZmluZSBIV19CQVNFX0VOQ09ERV9DT01NT05f T1BUSU9OUyBcCj4gK8KgwqDCoCB7ICJpZHJfaW50ZXJ2YWwiLCBcCj4gK8KgwqDCoMKgwqAgIkRp c3RhbmNlIChpbiBJLWZyYW1lcykgYmV0d2VlbiBrZXkgZnJhbWVzIiwgXAo+ICvCoMKgwqDCoMKg IE9GRlNFVChjb21tb24uYmFzZS5pZHJfaW50ZXJ2YWwpLCBBVl9PUFRfVFlQRV9JTlQsIFwKPiAr wqDCoMKgwqDCoCB7IC5pNjQgPSAwIH0sIDAsIElOVF9NQVgsIEZMQUdTIH0sIFwKPiArwqDCoMKg IHsgImJfZGVwdGgiLCBcCj4gK8KgwqDCoMKgwqAgIk1heGltdW0gQi1mcmFtZSByZWZlcmVuY2Ug ZGVwdGgiLCBcCj4gK8KgwqDCoMKgwqAgT0ZGU0VUKGNvbW1vbi5iYXNlLmRlc2lyZWRfYl9kZXB0 aCksIEFWX09QVF9UWVBFX0lOVCwgXAo+ICvCoMKgwqDCoMKgIHsgLmk2NCA9IDEgfSwgMSwgSU5U X01BWCwgRkxBR1MgfSwgXAo+ICvCoMKgwqAgeyAiYXN5bmNfZGVwdGgiLCAiTWF4aW11bSBwcm9j ZXNzaW5nIHBhcmFsbGVsaXNtLiAiIFwKPiArwqDCoMKgwqDCoCAiSW5jcmVhc2UgdGhpcyB0byBp bXByb3ZlIHNpbmdsZSBjaGFubmVsIHBlcmZvcm1hbmNlLiIsIFwKPiArwqDCoMKgwqDCoCBPRkZT RVQoY29tbW9uLmJhc2UuYXN5bmNfZGVwdGgpLCBBVl9PUFRfVFlQRV9JTlQsIFwKPiArwqDCoMKg wqDCoCB7IC5pNjQgPSAyIH0sIDEsIE1BWF9BU1lOQ19ERVBUSCwgRkxBR1MgfQo+ICsKPiArI2Vu ZGlmIC8qIEFWQ09ERUNfSFdfQkFTRV9FTkNPREVfSCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL3ZhYXBpX2VuY29kZS5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYwo+IGluZGV4IGJk MjlkYmYwYjQuLjQzNTA5NjAyNDggMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy92YWFwaV9lbmNv ZGUuYwo+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMKPiBAQCAtMzcsOCArMzcsNiBA QCBjb25zdCBBVkNvZGVjSFdDb25maWdJbnRlcm5hbCAqY29uc3QKPiBmZl92YWFwaV9lbmNvZGVf aHdfY29uZmlnc1tdID0gewo+IMKgwqDCoMKgIE5VTEwsCj4gwqB9Owo+IMKgCj4gLXN0YXRpYyBj b25zdCBjaGFyICogY29uc3QgcGljdHVyZV90eXBlX25hbWVbXSA9IHsgIklEUiIsICJJIiwgIlAi LCAiQiIgfTsKPiAtCj4gwqBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9tYWtlX3BhY2tlZF9oZWFk ZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFZBQVBJRW5jb2RlUGljdHVyZSAqcGljLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGludCB0eXBlLCBjaGFyICpkYXRhLCBzaXplX3QKPiBiaXRfbGVuKQo+IEBAIC0xMzksMjIgKzEz NywyNCBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX21ha2VfbWlzY19wYXJhbV9idWZmZXIo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfd2FpdChB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYykKPiDCoHsK PiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYyA9IChIV0Jhc2VFbmNvZGVQ aWN0dXJlKilwaWM7Cj4gwqDCoMKgwqAgVkFTdGF0dXMgdmFzOwo+IMKgCj4gLcKgwqDCoCBhdl9h c3NlcnQwKHBpYy0+ZW5jb2RlX2lzc3VlZCk7Cj4gK8KgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGlj LT5lbmNvZGVfaXNzdWVkKTsKPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+ZW5jb2RlX2NvbXBsZXRl KSB7Cj4gK8KgwqDCoCBpZiAoYmFzZV9waWMtPmVuY29kZV9jb21wbGV0ZSkgewo+IMKgwqDCoMKg wqDCoMKgwqAgLy8gQWxyZWFkeSB3YWl0ZWQgZm9yIHRoaXMgcGljdHVyZS4KPiDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiAwOwo+IMKgwqDCoMKgIH0KPiDCoAo+IMKgwqDCoMKgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0RFQlVHLCAiU3luYyB0byBwaWMgJSJQUklkNjQiLyUiUFJJZDY0IiAiCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgICIoaW5wdXQgc3VyZmFjZSAlI3gpLlxuIiwgcGljLT5kaXNwbGF5 X29yZGVyLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPmVuY29kZV9vcmRlciwgcGljLT5p bnB1dF9zdXJmYWNlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgIihpbnB1dCBzdXJmYWNlICUj eCkuXG4iLCBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg YmFzZV9waWMtPmVuY29kZV9vcmRlciwgcGljLT5pbnB1dF9zdXJmYWNlKTsKPiDCoAo+IMKgI2lm IFZBX0NIRUNLX1ZFUlNJT04oMSwgOSwgMCkKPiAtwqDCoMKgIGlmIChjdHgtPmhhc19zeW5jX2J1 ZmZlcl9mdW5jKSB7Cj4gK8KgwqDCoCBpZiAoYmFzZV9jdHgtPmFzeW5jX2VuY29kZSkgewo+IMKg wqDCoMKgwqDCoMKgwqAgdmFzID0gdmFTeW5jQnVmZmVyKGN0eC0+aHdjdHgtPmRpc3BsYXksCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBp Yy0+b3V0cHV0X2J1ZmZlciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgVkFfVElNRU9VVF9JTkZJTklURSk7Cj4gQEAgLTE3NSw5ICsxNzUs OSBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV93YWl0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwK PiDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoCAvLyBJbnB1dCBpcyBkZWZpbml0ZWx5IGZpbmlz aGVkIHdpdGggbm93Lgo+IC3CoMKgwqAgYXZfZnJhbWVfZnJlZSgmcGljLT5pbnB1dF9pbWFnZSk7 Cj4gK8KgwqDCoCBhdl9mcmFtZV9mcmVlKCZiYXNlX3BpYy0+aW5wdXRfaW1hZ2UpOwo+IMKgCj4g LcKgwqDCoCBwaWMtPmVuY29kZV9jb21wbGV0ZSA9IDE7Cj4gK8KgwqDCoCBiYXNlX3BpYy0+ZW5j b2RlX2NvbXBsZXRlID0gMTsKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoH0KPiDCoAo+IEBAIC0y NjQsOSArMjY0LDExIEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX21ha2VfdGlsZV9zbGljZShB VkNvZGVjQ29udGV4dAo+ICphdmN0eCwKPiDCoH0KPiDCoAo+IMKgc3RhdGljIGludCB2YWFwaV9l bmNvZGVfaXNzdWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVy ZSAqcGljKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljKQo+IMKgewo+IC3CoMKg wqAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAg SFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKg wqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRh Owo+ICvCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMgPSAoVkFBUElFbmNvZGVQaWN0dXJl KiliYXNlX3BpYzsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZVNsaWNlICpzbGljZTsKPiDCoMKgwqDC oCBWQVN0YXR1cyB2YXM7Cj4gwqDCoMKgwqAgaW50IGVyciwgaTsKPiBAQCAtMjc1LDUyICsyNzcs NTIgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfaXNzdWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+IMKgwqDCoMKgIGF2X3VudXNlZCBBVkZyYW1lU2lkZURhdGEgKnNkOwo+IMKgCj4gwqDCoMKg wqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJJc3N1aW5nIGVuY29kZSBmb3IgcGljICUi UFJJZDY0Ii8lIlBSSWQ2NCIgIgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCAiYXMgdHlwZSAlcy5c biIsIHBpYy0+ZGlzcGxheV9vcmRlciwgcGljLT5lbmNvZGVfb3JkZXIsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgIHBpY3R1cmVfdHlwZV9uYW1lW3BpYy0+dHlwZV0pOwo+IC3CoMKgwqAgaWYgKHBp Yy0+bmJfcmVmc1swXSA9PSAwICYmIHBpYy0+bmJfcmVmc1sxXSA9PSAwKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgICJhcyB0eXBlICVzLlxuIiwgYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIsIGJh c2VfcGljLT5lbmNvZGVfb3JkZXIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGZmX2h3X2Jhc2Vf ZW5jb2RlX2dldF9waWN0eXBlX25hbWUoYmFzZV9waWMtPnR5cGUpKTsKPiArwqDCoMKgIGlmIChi YXNlX3BpYy0+bmJfcmVmc1swXSA9PSAwICYmIGJhc2VfcGljLT5uYl9yZWZzWzFdID09IDApIHsK PiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTm8gcmVmZXJl bmNlIHBpY3R1cmVzLlxuIik7Cj4gwqDCoMKgwqAgfSBlbHNlIHsKPiDCoMKgwqDCoMKgwqDCoMKg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTDAgcmVmZXJzIHRvIik7Cj4gLcKgwqDCoMKg wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMF07IGkrKykgewo+ICvCoMKgwqDC oMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMF07IGkrKykgewo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIiAlIlBS SWQ2NCIvJSJQUklkNjQsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw aWMtPnJlZnNbMF1baV0tPmRpc3BsYXlfb3JkZXIsIHBpYy0+cmVmc1swXVtpXS0KPiA+ZW5jb2Rl X29yZGVyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2VfcGlj LT5yZWZzWzBdW2ldLT5kaXNwbGF5X29yZGVyLCBiYXNlX3BpYy0+cmVmc1swXVtpXS0KPiA+ZW5j b2RlX29yZGVyKTsKPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiLlxuIik7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAgaWYg KHBpYy0+bmJfcmVmc1sxXSkgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYmFzZV9waWMtPm5iX3Jl ZnNbMV0pIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df REVCVUcsICJMMSByZWZlcnMgdG8iKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkg PSAwOyBpIDwgcGljLT5uYl9yZWZzWzFdOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGkrKykgewo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiICUi UFJJZDY0Ii8lIlBSSWQ2NCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGljLT5yZWZzWzFdW2ldLT5kaXNwbGF5X29yZGVyLCBwaWMtPnJlZnNbMV1baV0t Cj4gPmVuY29kZV9vcmRlcik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJhc2VfcGljLT5yZWZzWzFdW2ldLT5kaXNwbGF5X29yZGVyLCBiYXNlX3BpYy0K PiA+cmVmc1sxXVtpXS0+ZW5jb2RlX29yZGVyKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg Ii5cbiIpOwo+IMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAg YXZfYXNzZXJ0MCghcGljLT5lbmNvZGVfaXNzdWVkKTsKPiAtwqDCoMKgIGZvciAoaSA9IDA7IGkg PCBwaWMtPm5iX3JlZnNbMF07IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBp Yy0+cmVmc1swXVtpXSk7Cj4gLcKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAocGljLT5yZWZzWzBd W2ldLT5lbmNvZGVfaXNzdWVkKTsKPiArwqDCoMKgIGF2X2Fzc2VydDAoIWJhc2VfcGljLT5lbmNv ZGVfaXNzdWVkKTsKPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVmc1sw XTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoYmFzZV9waWMtPnJlZnNbMF1b aV0pOwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT5yZWZzWzBdW2ldLT5l bmNvZGVfaXNzdWVkKTsKPiDCoMKgwqDCoCB9Cj4gLcKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgcGlj LT5uYl9yZWZzWzFdOyBpKyspIHsKPiAtwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChwaWMtPnJl ZnNbMV1baV0pOwo+IC3CoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+cmVmc1sxXVtpXS0+ ZW5jb2RlX2lzc3VlZCk7Cj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3Jl ZnNbMV07IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT5yZWZz WzFdW2ldKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+cmVmc1sxXVtp XS0+ZW5jb2RlX2lzc3VlZCk7Cj4gwqDCoMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICJJbnB1dCBzdXJmYWNlIGlzICUjeC5cbiIsIHBpYy0KPiA+aW5w dXRfc3VyZmFjZSk7Cj4gwqAKPiAtwqDCoMKgIHBpYy0+cmVjb25faW1hZ2UgPSBhdl9mcmFtZV9h bGxvYygpOwo+IC3CoMKgwqAgaWYgKCFwaWMtPnJlY29uX2ltYWdlKSB7Cj4gK8KgwqDCoCBiYXNl X3BpYy0+cmVjb25faW1hZ2UgPSBhdl9mcmFtZV9hbGxvYygpOwo+ICvCoMKgwqAgaWYgKCFiYXNl X3BpYy0+cmVjb25faW1hZ2UpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRU5P TUVNKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiDCoMKgwqDCoCB9Cj4gwqAKPiAt wqDCoMKgIGVyciA9IGF2X2h3ZnJhbWVfZ2V0X2J1ZmZlcihjdHgtPnJlY29uX2ZyYW1lc19yZWYs IHBpYy0+cmVjb25faW1hZ2UsIDApOwo+ICvCoMKgwqAgZXJyID0gYXZfaHdmcmFtZV9nZXRfYnVm ZmVyKGJhc2VfY3R4LT5yZWNvbl9mcmFtZXNfcmVmLCBiYXNlX3BpYy0KPiA+cmVjb25faW1hZ2Us IDApOwo+IMKgwqDCoMKgIGlmIChlcnIgPCAwKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBB VkVSUk9SKEVOT01FTSk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gwqDCoMKgwqAg fQo+IC3CoMKgwqAgcGljLT5yZWNvbl9zdXJmYWNlID0gKFZBU3VyZmFjZUlEKSh1aW50cHRyX3Qp cGljLT5yZWNvbl9pbWFnZS0+ZGF0YVszXTsKPiArwqDCoMKgIHBpYy0+cmVjb25fc3VyZmFjZSA9 IChWQVN1cmZhY2VJRCkodWludHB0cl90KWJhc2VfcGljLT5yZWNvbl9pbWFnZS0KPiA+ZGF0YVsz XTsKPiDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlJlY29uIHN1cmZhY2Ug aXMgJSN4LlxuIiwgcGljLQo+ID5yZWNvbl9zdXJmYWNlKTsKPiDCoAo+IMKgwqDCoMKgIHBpYy0+ b3V0cHV0X2J1ZmZlcl9yZWYgPSBmZl9yZWZzdHJ1Y3RfcG9vbF9nZXQoY3R4LT5vdXRwdXRfYnVm ZmVyX3Bvb2wpOwo+IEBAIC0zNDQsNyArMzQ2LDcgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVf aXNzdWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgCj4gwqDCoMKgwqAgcGljLT5uYl9wYXJh bV9idWZmZXJzID0gMDsKPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZ UEVfSURSICYmIGN0eC0+Y29kZWMtPmluaXRfc2VxdWVuY2VfcGFyYW1zKSB7Cj4gK8KgwqDCoCBp ZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUiAmJiBjdHgtPmNvZGVjLQo+ID5p bml0X3NlcXVlbmNlX3BhcmFtcykgewo+IMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gdmFhcGlfZW5j b2RlX21ha2VfcGFyYW1fYnVmZmVyKGF2Y3R4LCBwaWMsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgCj4gVkFFbmNTZXF1ZW5jZVBhcmFtZXRlckJ1ZmZlclR5cGUsCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+Y29kZWNfc2VxdWVuY2VfcGFyYW1zLAo+ IEBAIC0zNTMsNyArMzU1LDcgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfaXNzdWUoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4g wqDCoMKgwqAgfQo+IMKgCj4gLcKgwqDCoCBpZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9J RFIpIHsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKSB7 Cj4gwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgY3R4LT5uYl9nbG9iYWxfcGFyYW1z OyBpKyspIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gdmFhcGlfZW5jb2RlX21h a2VfbWlzY19wYXJhbV9idWZmZXIoYXZjdHgsIHBpYywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LQo+ID5nbG9iYWxfcGFyYW1zX3R5cGVb aV0sCj4gQEAgLTM5MCw3ICszOTIsNyBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9pc3N1ZShB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqAgfQo+IMKgI2VuZGlmCj4gwqAKPiAtwqDC oMKgIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUikgewo+ICvCoMKgwqAgaWYgKGJh c2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGlm IChjdHgtPnZhX3BhY2tlZF9oZWFkZXJzICYgVkFfRU5DX1BBQ0tFRF9IRUFERVJfU0VRVUVOQ0Ug JiYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5jb2RlYy0+d3JpdGVfc2VxdWVuY2Vf aGVhZGVyKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJpdF9sZW4gPSA4ICogc2l6ZW9m KGRhdGEpOwo+IEBAIC01MzAsOSArNTMyLDkgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfaXNz dWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgIH0KPiDCoAo+IMKgI2lmIFZBX0NI RUNLX1ZFUlNJT04oMSwgMCwgMCkKPiAtwqDCoMKgIHNkID0gYXZfZnJhbWVfZ2V0X3NpZGVfZGF0 YShwaWMtPmlucHV0X2ltYWdlLAo+ICvCoMKgwqAgc2QgPSBhdl9mcmFtZV9nZXRfc2lkZV9kYXRh KGJhc2VfcGljLT5pbnB1dF9pbWFnZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX0ZSQU1FX0RBVEFfUkVHSU9OU19P Rl9JTlRFUkVTVCk7Cj4gLcKgwqDCoCBpZiAoc2QgJiYgY3R4LT5yb2lfYWxsb3dlZCkgewo+ICvC oMKgwqAgaWYgKHNkICYmIGJhc2VfY3R4LT5yb2lfYWxsb3dlZCkgewo+IMKgwqDCoMKgwqDCoMKg wqAgY29uc3QgQVZSZWdpb25PZkludGVyZXN0ICpyb2k7Cj4gwqDCoMKgwqDCoMKgwqDCoCB1aW50 MzJfdCByb2lfc2l6ZTsKPiDCoMKgwqDCoMKgwqDCoMKgIFZBRW5jTWlzY1BhcmFtZXRlckJ1ZmZl clJPSSBwYXJhbV9yb2k7Cj4gQEAgLTU0MywxMSArNTQ1LDExIEBAIHN0YXRpYyBpbnQgdmFhcGlf ZW5jb2RlX2lzc3VlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgIGF2 X2Fzc2VydDAocm9pX3NpemUgJiYgc2QtPnNpemUgJSByb2lfc2l6ZSA9PSAwKTsKPiDCoMKgwqDC oMKgwqDCoMKgIG5iX3JvaSA9IHNkLT5zaXplIC8gcm9pX3NpemU7Cj4gwqDCoMKgwqDCoMKgwqDC oCBpZiAobmJfcm9pID4gY3R4LT5yb2lfbWF4X3JlZ2lvbnMpIHsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoIWN0eC0+cm9pX3dhcm5lZCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmICghYmFzZV9jdHgtPnJvaV93YXJuZWQpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiTW9yZSBST0lzIHNldCB0aGFu ICIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJzdXBw b3J0ZWQgYnkgZHJpdmVyICglZCA+ICVkKS5cbiIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9yb2ksIGN0eC0+cm9pX21heF9yZWdpb25zKTsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cm9pX3dhcm5lZCA9IDE7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+cm9pX3dhcm5lZCA9IDE7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmJf cm9pID0gY3R4LT5yb2lfbWF4X3JlZ2lvbnM7Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gQEAgLTY0 MCw3ICs2NDIsNyBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9pc3N1ZShBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgfQo+IMKgCj4gLcKgwqDC oCBwaWMtPmVuY29kZV9pc3N1ZWQgPSAxOwo+ICvCoMKgwqAgYmFzZV9waWMtPmVuY29kZV9pc3N1 ZWQgPSAxOwo+IMKgCj4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gwqAKPiBAQCAtNjU4LDE3ICs2NjAs MTggQEAgZmFpbF9hdF9lbmQ6Cj4gwqDCoMKgwqAgYXZfZnJlZXAoJnBpYy0+cGFyYW1fYnVmZmVy cyk7Cj4gwqDCoMKgwqAgYXZfZnJlZXAoJnBpYy0+c2xpY2VzKTsKPiDCoMKgwqDCoCBhdl9mcmVl cCgmcGljLT5yb2kpOwo+IC3CoMKgwqAgYXZfZnJhbWVfZnJlZSgmcGljLT5yZWNvbl9pbWFnZSk7 Cj4gK8KgwqDCoCBhdl9mcmFtZV9mcmVlKCZiYXNlX3BpYy0+cmVjb25faW1hZ2UpOwo+IMKgwqDC oMKgIGZmX3JlZnN0cnVjdF91bnJlZigmcGljLT5vdXRwdXRfYnVmZmVyX3JlZik7Cj4gwqDCoMKg wqAgcGljLT5vdXRwdXRfYnVmZmVyID0gVkFfSU5WQUxJRF9JRDsKPiDCoMKgwqDCoCByZXR1cm4g ZXJyOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3By b3BlcnR5KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEFWUGFja2V0ICpwa3QpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRl eHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0 ICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNvbnRl eHTCoMKgwqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqAKPiDCoMKgwqDCoCBp ZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpCj4gwqDCoMKgwqDCoMKgwqDCoCBwa3Qt PmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsKPiBAQCAtNjg5LDE2ICs2OTIsMTYgQEAgc3RhdGlj IGludAo+IHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3Byb3BlcnR5KEFWQ29kZWNDb250ZXh0ICph dmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3C oMKgwqAgaWYgKGN0eC0+b3V0cHV0X2RlbGF5ID09IDApIHsKPiArwqDCoMKgIGlmIChiYXNlX2N0 eC0+b3V0cHV0X2RlbGF5ID09IDApIHsKPiDCoMKgwqDCoMKgwqDCoMKgIHBrdC0+ZHRzID0gcGt0 LT5wdHM7Cj4gLcKgwqDCoCB9IGVsc2UgaWYgKHBpYy0+ZW5jb2RlX29yZGVyIDwgY3R4LT5kZWNv ZGVfZGVsYXkpIHsKPiAtwqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+dHNfcmluZ1twaWMtPmVuY29k ZV9vcmRlcl0gPCBJTlQ2NF9NSU4gKyBjdHgtPmR0c19wdHNfZGlmZikKPiArwqDCoMKgIH0gZWxz ZSBpZiAocGljLT5lbmNvZGVfb3JkZXIgPCBiYXNlX2N0eC0+ZGVjb2RlX2RlbGF5KSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIGlmIChiYXNlX2N0eC0+dHNfcmluZ1twaWMtPmVuY29kZV9vcmRlcl0gPCBJ TlQ2NF9NSU4gKyBiYXNlX2N0eC0KPiA+ZHRzX3B0c19kaWZmKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwa3QtPmR0cyA9IElOVDY0X01JTjsKPiDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwa3QtPmR0cyA9IGN0eC0+dHNfcmluZ1twaWMtPmVuY29k ZV9vcmRlcl0gLSBjdHgtPmR0c19wdHNfZGlmZjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw a3QtPmR0cyA9IGJhc2VfY3R4LT50c19yaW5nW3BpYy0+ZW5jb2RlX29yZGVyXSAtIGJhc2VfY3R4 LQo+ID5kdHNfcHRzX2RpZmY7Cj4gwqDCoMKgwqAgfSBlbHNlIHsKPiAtwqDCoMKgwqDCoMKgwqAg cGt0LT5kdHMgPSBjdHgtPnRzX3JpbmdbKHBpYy0+ZW5jb2RlX29yZGVyIC0gY3R4LT5kZWNvZGVf ZGVsYXkpICUKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKDMgKiBjdHgtPm91dHB1dF9kZWxheSArIGN0eC0+YXN5bmNfZGVw dGgpXTsKPiArwqDCoMKgwqDCoMKgwqAgcGt0LT5kdHMgPSBiYXNlX2N0eC0+dHNfcmluZ1socGlj LT5lbmNvZGVfb3JkZXIgLSBiYXNlX2N0eC0KPiA+ZGVjb2RlX2RlbGF5KSAlCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoMyAqIGJhc2VfY3R4LT5vdXRwdXRfZGVsYXkgKyBiYXNlX2N0eC0KPiA+YXN5bmNf ZGVwdGgpXTsKPiDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiBAQCAtODE3 LDkgKzgyMCwxMSBAQCBlbmQ6Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQgdmFhcGlfZW5jb2Rl X291dHB1dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUg KnBpYywgQVZQYWNrZXQgKnBrdCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGlj LCBBVlBhY2tldCAqcGt0KQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHgg PSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9j dHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKg wqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVQaWN0 dXJlwqDCoMKgwqDCoMKgICpwaWMgPSAoVkFBUElFbmNvZGVQaWN0dXJlKiliYXNlX3BpYzsKPiDC oMKgwqDCoCBBVlBhY2tldCAqcGt0X3B0ciA9IHBrdDsKPiDCoMKgwqDCoCBpbnQgZXJyOwo+IMKg Cj4gQEAgLTgzMiwxNyArODM3LDE3IEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoCBjdHgtPmNvZGVkX2J1ZmZl cl9yZWYgPSBmZl9yZWZzdHJ1Y3RfcmVmKHBpYy0+b3V0cHV0X2J1ZmZlcl9yZWYpOwo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoCBpZiAocGljLT50YWlsX3NpemUpIHsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoY3R4LT50YWlsX3BrdC0+c2l6ZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChiYXNlX2N0eC0+dGFpbF9wa3QtPnNpemUpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBlcnIgPSBBVkVSUk9SX0JVRzsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGVuZDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgs IGN0eC0+dGFpbF9wa3QsIHBpYy0+dGFpbF9zaXplLAo+IDApOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBiYXNlX2N0eC0+dGFpbF9w a3QsIHBpYy0KPiA+dGFpbF9zaXplLCAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KGVyciA8IDApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlbmQ7Cj4g wqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1jcHkoY3R4LT50YWlsX3BrdC0+ZGF0YSwg cGljLT50YWlsX2RhdGEsIHBpYy0+dGFpbF9zaXplKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwa3RfcHRyID0gY3R4LT50YWlsX3BrdDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1j cHkoYmFzZV9jdHgtPnRhaWxfcGt0LT5kYXRhLCBwaWMtPnRhaWxfZGF0YSwgcGljLT50YWlsX3Np emUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBrdF9wdHIgPSBiYXNlX2N0eC0+dGFpbF9w a3Q7Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgfSBlbHNlIHsKPiDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IHZhYXBpX2VuY29kZV9nZXRfY29kZWRfZGF0YShhdmN0eCwgcGljLCBwa3Qp Owo+IEBAIC04NTEsOSArODU2LDkgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFW Q29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoCBhdl9sb2co YXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCByZWFkIGZvciBwaWMgJSJQUklkNjQiLyUiUFJJ ZDY0Ii5cbiIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgIHBpYy0+ZGlzcGxheV9vcmRlciwgcGlj LT5lbmNvZGVfb3JkZXIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX3BpYy0+ZGlzcGxh eV9vcmRlciwgYmFzZV9waWMtPmVuY29kZV9vcmRlcik7Cj4gwqAKPiAtwqDCoMKgIHZhYXBpX2Vu Y29kZV9zZXRfb3V0cHV0X3Byb3BlcnR5KGF2Y3R4LCBwaWMsIHBrdF9wdHIpOwo+ICvCoMKgwqAg dmFhcGlfZW5jb2RlX3NldF9vdXRwdXRfcHJvcGVydHkoYXZjdHgsIGJhc2VfcGljLCBwa3RfcHRy KTsKPiDCoAo+IMKgZW5kOgo+IMKgwqDCoMKgIGZmX3JlZnN0cnVjdF91bnJlZigmcGljLT5vdXRw dXRfYnVmZmVyX3JlZik7Cj4gQEAgLTg2NCwxMiArODY5LDEzIEBAIGVuZDoKPiDCoHN0YXRpYyBp bnQgdmFhcGlfZW5jb2RlX2Rpc2NhcmQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg VkFBUElFbmNvZGVQaWN0dXJlICpwaWMpCj4gwqB7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0 dXJlICpiYXNlX3BpYyA9IChIV0Jhc2VFbmNvZGVQaWN0dXJlKilwaWM7Cj4gwqDCoMKgwqAgdmFh cGlfZW5jb2RlX3dhaXQoYXZjdHgsIHBpYyk7Cj4gwqAKPiDCoMKgwqDCoCBpZiAocGljLT5vdXRw dXRfYnVmZmVyX3JlZikgewo+IMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df REVCVUcsICJEaXNjYXJkIG91dHB1dCBmb3IgcGljICIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIiUiUFJJZDY0Ii8lIlBSSWQ2NCIuXG4iLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBpYy0+ZGlzcGxheV9vcmRlciwgcGljLT5lbmNvZGVfb3JkZXIpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2VfcGljLT5kaXNwbGF5X29yZGVyLCBiYXNlX3Bp Yy0+ZW5jb2RlX29yZGVyKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgZmZfcmVmc3RydWN0X3Vu cmVmKCZwaWMtPm91dHB1dF9idWZmZXJfcmVmKTsKPiDCoMKgwqDCoMKgwqDCoMKgIHBpYy0+b3V0 cHV0X2J1ZmZlciA9IFZBX0lOVkFMSURfSUQ7Cj4gQEAgLTg3OCw4ICs4ODQsOCBAQCBzdGF0aWMg aW50IHZhYXBpX2VuY29kZV9kaXNjYXJkKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDC oCByZXR1cm4gMDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgVkFBUElFbmNvZGVQaWN0dXJlICp2YWFw aV9lbmNvZGVfYWxsb2MoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgQVZGcmFtZSAqZnJhbWUpCj4gK3N0YXRpYyBIV0Jhc2VF bmNvZGVQaWN0dXJlICp2YWFwaV9lbmNvZGVfYWxsb2MoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBBVkZyYW1lICpmcmFt ZSkKPiDCoHsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWM7Cj4gQEAgLTg4OSw4ICs4 OTUsOCBAQCBzdGF0aWMgVkFBUElFbmNvZGVQaWN0dXJlCj4gKnZhYXBpX2VuY29kZV9hbGxvYyhB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPiDC oAo+IMKgwqDCoMKgIGlmIChjdHgtPmNvZGVjLT5waWN0dXJlX3ByaXZfZGF0YV9zaXplID4gMCkg ewo+IC3CoMKgwqDCoMKgwqDCoCBwaWMtPnByaXZfZGF0YSA9IGF2X21hbGxvY3ooY3R4LT5jb2Rl Yy0+cGljdHVyZV9wcml2X2RhdGFfc2l6ZSk7Cj4gLcKgwqDCoMKgwqDCoMKgIGlmICghcGljLT5w cml2X2RhdGEpIHsKPiArwqDCoMKgwqDCoMKgwqAgcGljLT5iYXNlLnByaXZfZGF0YSA9IGF2X21h bGxvY3ooY3R4LT5jb2RlYy0+cGljdHVyZV9wcml2X2RhdGFfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDC oMKgIGlmICghcGljLT5iYXNlLnByaXZfZGF0YSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdl9mcmVlcCgmcGljKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gQEAgLTkwMCwxNSArOTA2LDE2IEBAIHN0YXRpYyBWQUFQ SUVuY29kZVBpY3R1cmUKPiAqdmFhcGlfZW5jb2RlX2FsbG9jKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwKPiDCoMKgwqDCoCBwaWMtPnJlY29uX3N1cmZhY2UgPSBWQV9JTlZBTElEX0lEOwo+IMKgwqDC oMKgIHBpYy0+b3V0cHV0X2J1ZmZlciA9IFZBX0lOVkFMSURfSUQ7Cj4gwqAKPiAtwqDCoMKgIHJl dHVybiBwaWM7Cj4gK8KgwqDCoCByZXR1cm4gKEhXQmFzZUVuY29kZVBpY3R1cmUqKXBpYzsKPiDC oH0KPiDCoAo+IMKgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfZnJlZShBVkNvZGVjQ29udGV4dCAq YXZjdHgsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJl ICpiYXNlX3BpYykKPiDCoHsKPiArwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljID0gKFZB QVBJRW5jb2RlUGljdHVyZSopYmFzZV9waWM7Cj4gwqDCoMKgwqAgaW50IGk7Cj4gwqAKPiAtwqDC oMKgIGlmIChwaWMtPmVuY29kZV9pc3N1ZWQpCj4gK8KgwqDCoCBpZiAoYmFzZV9waWMtPmVuY29k ZV9pc3N1ZWQpCj4gwqDCoMKgwqDCoMKgwqDCoCB2YWFwaV9lbmNvZGVfZGlzY2FyZChhdmN0eCwg cGljKTsKPiDCoAo+IMKgwqDCoMKgIGlmIChwaWMtPnNsaWNlcykgewo+IEBAIC05MTYsMTcgKzky MywxNyBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9mcmVlKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfZnJlZXAoJnBpYy0+c2xpY2VzW2ldLmNv ZGVjX3NsaWNlX3BhcmFtcyk7Cj4gwqDCoMKgwqAgfQo+IMKgCj4gLcKgwqDCoCBhdl9mcmFtZV9m cmVlKCZwaWMtPmlucHV0X2ltYWdlKTsKPiAtwqDCoMKgIGF2X2ZyYW1lX2ZyZWUoJnBpYy0+cmVj b25faW1hZ2UpOwo+ICvCoMKgwqAgYXZfZnJhbWVfZnJlZSgmYmFzZV9waWMtPmlucHV0X2ltYWdl KTsKPiArwqDCoMKgIGF2X2ZyYW1lX2ZyZWUoJmJhc2VfcGljLT5yZWNvbl9pbWFnZSk7Cj4gwqAK PiAtwqDCoMKgIGF2X2J1ZmZlcl91bnJlZigmcGljLT5vcGFxdWVfcmVmKTsKPiArwqDCoMKgIGF2 X2J1ZmZlcl91bnJlZigmYmFzZV9waWMtPm9wYXF1ZV9yZWYpOwo+IMKgCj4gwqDCoMKgwqAgYXZf ZnJlZXAoJnBpYy0+cGFyYW1fYnVmZmVycyk7Cj4gwqDCoMKgwqAgYXZfZnJlZXAoJnBpYy0+c2xp Y2VzKTsKPiDCoMKgwqDCoCAvLyBPdXRwdXQgYnVmZmVyIHNob3VsZCBhbHJlYWR5IGJlIGRlc3Ry b3llZC4KPiDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+b3V0cHV0X2J1ZmZlciA9PSBWQV9JTlZB TElEX0lEKTsKPiDCoAo+IC3CoMKgwqAgYXZfZnJlZXAoJnBpYy0+cHJpdl9kYXRhKTsKPiArwqDC oMKgIGF2X2ZyZWVwKCZiYXNlX3BpYy0+cHJpdl9kYXRhKTsKPiDCoMKgwqDCoCBhdl9mcmVlcCgm cGljLT5jb2RlY19waWN0dXJlX3BhcmFtcyk7Cj4gwqDCoMKgwqAgYXZfZnJlZXAoJnBpYy0+cm9p KTsKPiDCoAo+IEBAIC05MzYsOCArOTQzLDggQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfZnJl ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkIHZhYXBp X2VuY29kZV9hZGRfcmVmKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVu Y29kZVBpY3R1cmUgKnBpYywKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnRhcmdldCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5j b2RlUGljdHVyZSAqdGFyZ2V0LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgaXNfcmVmLCBpbnQgaW5fZHBiLCBp bnQgcHJldikKPiDCoHsKPiDCoMKgwqDCoCBpbnQgcmVmcyA9IDA7Cj4gQEAgLTk3MCw3ICs5Nzcs NyBAQCBzdGF0aWMgdm9pZCB2YWFwaV9lbmNvZGVfYWRkX3JlZihBVkNvZGVjQ29udGV4dCAqYXZj dHgsCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkIHZhYXBpX2VuY29kZV9yZW1vdmVfcmVmcyhB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1 cmUgKnBpYywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYywKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgbGV2ZWwpCj4gwqB7Cj4gwqDCoMKgwqAgaW50IGk7Cj4gQEAg LTEwMDYsMTQgKzEwMTMsMTQgQEAgc3RhdGljIHZvaWQgdmFhcGlfZW5jb2RlX3JlbW92ZV9yZWZz KEFWQ29kZWNDb250ZXh0Cj4gKmF2Y3R4LAo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgdm9pZCB2YWFw aV9lbmNvZGVfc2V0X2JfcGljdHVyZXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpzdGFydCwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqZW5kLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgVkFBUElFbmNvZGVQaWN0dXJlICpwcmV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdC YXNlRW5jb2RlUGljdHVyZSAqc3RhcnQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV0Jhc2VF bmNvZGVQaWN0dXJlICplbmQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV0Jhc2VFbmNvZGVQ aWN0dXJlICpwcmV2LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBjdXJyZW50X2RlcHRo LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICoqbGFzdCkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKipsYXN0KQo+IMKgewo+ IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IC3C oMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMsICpuZXh0LCAqcmVmOwo+ICvCoMKgwqAgSFdC YXNlRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFz ZUVuY29kZVBpY3R1cmUgKnBpYywgKm5leHQsICpyZWY7Cj4gwqDCoMKgwqAgaW50IGksIGxlbjsK PiDCoAo+IMKgwqDCoMKgIGF2X2Fzc2VydDAoc3RhcnQgJiYgZW5kICYmIHN0YXJ0ICE9IGVuZCAm JiBzdGFydC0+bmV4dCAhPSBlbmQpOwo+IEBAIC0xMDcwLDkgKzEwNzcsOSBAQCBzdGF0aWMgdm9p ZCB2YWFwaV9lbmNvZGVfc2V0X2JfcGljdHVyZXMoQVZDb2RlY0NvbnRleHQKPiAqYXZjdHgsCj4g wqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkIHZhYXBpX2VuY29kZV9hZGRfbmV4dF9wcmV2KEFWQ29k ZWNDb250ZXh0ICphdmN0eCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1 cmUgKnBpYykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMp Cj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2Rh dGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRh Owo+IMKgwqDCoMKgIGludCBpOwo+IMKgCj4gwqDCoMKgwqAgaWYgKCFwaWMpCj4gQEAgLTExMDMs MTAgKzExMTAsMTAgQEAgc3RhdGljIHZvaWQgdmFhcGlfZW5jb2RlX2FkZF9uZXh0X3ByZXYoQVZD b2RlY0NvbnRleHQKPiAqYXZjdHgsCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQgdmFhcGlfZW5j b2RlX3BpY2tfbmV4dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVu Y29kZVBpY3R1cmUgKipwaWNfb3V0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZSAq KnBpY19vdXQpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYyA9IE5VTEwsICpw cmV2ID0gTlVMTCwgKm5leHQsICpzdGFydDsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHQg KmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpw aWMgPSBOVUxMLCAqcHJldiA9IE5VTEwsICpuZXh0LCAqc3RhcnQ7Cj4gwqDCoMKgwqAgaW50IGks IGJfY291bnRlciwgY2xvc2VkX2dvcF9lbmQ7Cj4gwqAKPiDCoMKgwqDCoCAvLyBJZiB0aGVyZSBh cmUgYW55IEItZnJhbWVzIGFscmVhZHkgcXVldWVkLCB0aGUgbmV4dCBvbmUgdG8gZW5jb2RlCj4g QEAgLTEyNTYsOCArMTI2Myw4IEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX3BpY2tfbmV4dChB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqAKPiDCoHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2Ns ZWFyX29sZChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29k ZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZVBp Y3R1cmUgKnBpYywgKnByZXYsICpuZXh0Owo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAq Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKnBp YywgKnByZXYsICpuZXh0Owo+IMKgCj4gwqDCoMKgwqAgYXZfYXNzZXJ0MChjdHgtPnBpY19zdGFy dCk7Cj4gwqAKPiBAQCAtMTI5NSw3ICsxMzAyLDcgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVf Y2xlYXJfb2xkKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoHN0YXRpYyBpbnQgdmFhcGlfZW5j b2RlX2NoZWNrX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uc3QgQVZGcmFtZSAqZnJhbWUpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQg KmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpj dHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgCj4gwqDCoMKgwqAgaWYgKChmcmFtZS0+Y3JvcF90 b3DCoCB8fCBmcmFtZS0+Y3JvcF9ib3R0b20gfHwKPiDCoMKgwqDCoMKgwqDCoMKgwqAgZnJhbWUt PmNyb3BfbGVmdCB8fCBmcmFtZS0+Y3JvcF9yaWdodCkgJiYgIWN0eC0+Y3JvcF93YXJuZWQpIHsK PiBAQCAtMTMyMCw4ICsxMzI3LDggQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfY2hlY2tfZnJh bWUoQVZDb2RlY0NvbnRleHQKPiAqYXZjdHgsCj4gwqAKPiDCoHN0YXRpYyBpbnQgdmFhcGlfZW5j b2RlX3NlbmRfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSkKPiDC oHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK PiAtwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2Rl Q29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZVBp Y3R1cmUgKnBpYzsKPiDCoMKgwqDCoCBpbnQgZXJyOwo+IMKgCj4gwqDCoMKgwqAgaWYgKGZyYW1l KSB7Cj4gQEAgLTEzOTUsMTUgKzE0MDIsMTUgQEAgZmFpbDoKPiDCoAo+IMKgaW50IGZmX3ZhYXBp X2VuY29kZV9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICpw a3QpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYyA9IE5VTEw7Cj4gK8KgwqDC oCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAg SFdCYXNlRW5jb2RlUGljdHVyZSAqcGljID0gTlVMTDsKPiDCoMKgwqDCoCBBVkZyYW1lICpmcmFt ZSA9IGN0eC0+ZnJhbWU7Cj4gwqDCoMKgwqAgaW50IGVycjsKPiDCoAo+IMKgc3RhcnQ6Cj4gwqDC oMKgwqAgLyoqIGlmIG5vIEIgZnJhbWUgYmVmb3JlIHJlcGVhdCBQIGZyYW1lLCBzZW50IHJlcGVh dCBQIGZyYW1lIG91dC4gKi8KPiDCoMKgwqDCoCBpZiAoY3R4LT50YWlsX3BrdC0+c2l6ZSkgewo+ IC3CoMKgwqDCoMKgwqDCoCBmb3IgKFZBQVBJRW5jb2RlUGljdHVyZSAqdG1wID0gY3R4LT5waWNf c3RhcnQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQo+IHsKPiArwqDCoMKgwqDCoMKgwqAgZm9yIChI V0Jhc2VFbmNvZGVQaWN0dXJlICp0bXAgPSBjdHgtPnBpY19zdGFydDsgdG1wOyB0bXAgPSB0bXAt Pm5leHQpCj4gewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodG1wLT50eXBlID09IFBJ Q1RVUkVfVFlQRV9CICYmIHRtcC0+cHRzIDwgY3R4LT50YWlsX3BrdC0+cHRzKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlbHNlIGlmICghdG1wLT5uZXh0KSB7Cj4gQEAgLTE0MzEsNyArMTQzOCw3IEBAIHN0YXJ0Ogo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFQUdBSU4pOwo+IMKgwqDC oMKgIH0KPiDCoAo+IC3CoMKgwqAgaWYgKGN0eC0+aGFzX3N5bmNfYnVmZmVyX2Z1bmMpIHsKPiAr wqDCoMKgIGlmIChjdHgtPmFzeW5jX2VuY29kZSkgewo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgKGF2 X2ZpZm9fY2FuX3dyaXRlKGN0eC0+ZW5jb2RlX2ZpZm8pKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IHZhYXBpX2VuY29kZV9waWNrX25leHQoYXZjdHgsICZwaWMpOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWVycikgewo+IEBAIC0xNTUxLDkgKzE1NTgsMTAgQEAg c3RhdGljIGNvbnN0IFZBRW50cnlwb2ludAo+IHZhYXBpX2VuY29kZV9lbnRyeXBvaW50c19sb3df cG93ZXJbXSA9IHsKPiDCoAo+IMKgc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9wcm9m aWxlX2VudHJ5cG9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+IC3CoMKgwqAgVkFB UElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiAtwqDC oMKgIFZBUHJvZmlsZcKgwqDCoCAqdmFfcHJvZmlsZXPCoMKgwqAgPSBOVUxMOwo+IC3CoMKgwqAg VkFFbnRyeXBvaW50ICp2YV9lbnRyeXBvaW50cyA9IE5VTEw7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNv ZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVu Y29kZUNvbnRleHTCoMKgwqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDC oCBWQVByb2ZpbGXCoMKgwqDCoCAqdmFfcHJvZmlsZXPCoMKgwqAgPSBOVUxMOwo+ICvCoMKgwqAg VkFFbnRyeXBvaW50wqAgKnZhX2VudHJ5cG9pbnRzID0gTlVMTDsKPiDCoMKgwqDCoCBWQVN0YXR1 cyB2YXM7Cj4gwqDCoMKgwqAgY29uc3QgVkFFbnRyeXBvaW50ICp1c2FibGVfZW50cnlwb2ludHM7 Cj4gwqDCoMKgwqAgY29uc3QgVkFBUElFbmNvZGVQcm9maWxlICpwcm9maWxlOwo+IEBAIC0xNTc2 LDEwICsxNTg0LDEwIEBAIHN0YXRpYyBhdl9jb2xkIGludAo+IHZhYXBpX2VuY29kZV9wcm9maWxl X2VudHJ5cG9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgwqDCoMKgwqDCoMKgwqAgdXNh YmxlX2VudHJ5cG9pbnRzID0gdmFhcGlfZW5jb2RlX2VudHJ5cG9pbnRzX25vcm1hbDsKPiDCoMKg wqDCoCB9Cj4gwqAKPiAtwqDCoMKgIGRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KGN0eC0+aW5w dXRfZnJhbWVzLT5zd19mb3JtYXQpOwo+ICvCoMKgwqAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19n ZXQoYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsKPiDCoMKgwqDCoCBpZiAoIWRl c2MpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCBpbnB1dCBwaXhmbXQgKCVkKS5cbiIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY3R4LT5pbnB1dF9mcmFtZXMtPnN3X2Zvcm1hdCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsKPiDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gwqDCoMKgwqAgfQo+IMKgwqDCoMKgIGRl cHRoID0gZGVzYy0+Y29tcFswXS5kZXB0aDsKPiBAQCAtMTc3Miw3ICsxNzgwLDggQEAgc3RhdGlj IGNvbnN0IFZBQVBJRW5jb2RlUkNNb2RlIHZhYXBpX2VuY29kZV9yY19tb2Rlc1tdID0KPiB7Cj4g wqAKPiDCoHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfaW5pdF9yYXRlX2NvbnRyb2wo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0 ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAq YmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0 wqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIHVpbnQzMl90 IHN1cHBvcnRlZF92YV9yY19tb2RlczsKPiDCoMKgwqDCoCBjb25zdCBWQUFQSUVuY29kZVJDTW9k ZSAqcmNfbW9kZTsKPiDCoMKgwqDCoCBpbnQ2NF90IHJjX2JpdHNfcGVyX3NlY29uZDsKPiBAQCAt MTg1NSwxMCArMTg2NCwxMCBAQCBzdGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaW5p dF9yYXRlX2NvbnRyb2woQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgwqDCoMKgwqDCoMKgwqAg fSBcCj4gwqDCoMKgwqAgfSB3aGlsZSAoMCkKPiDCoAo+IC3CoMKgwqAgaWYgKGN0eC0+ZXhwbGlj aXRfcmNfbW9kZSkKPiAtwqDCoMKgwqDCoMKgwqAgVFJZX1JDX01PREUoY3R4LT5leHBsaWNpdF9y Y19tb2RlLCAxKTsKPiArwqDCoMKgIGlmIChiYXNlX2N0eC0+ZXhwbGljaXRfcmNfbW9kZSkKPiAr wqDCoMKgwqDCoMKgwqAgVFJZX1JDX01PREUoYmFzZV9jdHgtPmV4cGxpY2l0X3JjX21vZGUsIDEp Owo+IMKgCj4gLcKgwqDCoCBpZiAoY3R4LT5leHBsaWNpdF9xcCkKPiArwqDCoMKgIGlmIChiYXNl X2N0eC0+ZXhwbGljaXRfcXApCj4gwqDCoMKgwqDCoMKgwqDCoCBUUllfUkNfTU9ERShSQ19NT0RF X0NRUCwgMSk7Cj4gwqAKPiDCoMKgwqDCoCBpZiAoY3R4LT5jb2RlYy0+ZmxhZ3MgJiBGTEFHX0NP TlNUQU5UX1FVQUxJVFlfT05MWSkKPiBAQCAtMTk1Myw4ICsxOTYyLDggQEAgcmNfbW9kZV9mb3Vu ZDoKPiDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoCBpZiAocmNfbW9kZS0+cXVhbGl0eSkgewo+ IC3CoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5leHBsaWNpdF9xcCkgewo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJjX3F1YWxpdHkgPSBjdHgtPmV4cGxpY2l0X3FwOwo+ICvCoMKgwqDCoMKgwqDC oCBpZiAoYmFzZV9jdHgtPmV4cGxpY2l0X3FwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmNfcXVhbGl0eSA9IGJhc2VfY3R4LT5leHBsaWNpdF9xcDsKPiDCoMKgwqDCoMKgwqDCoMKgIH0g ZWxzZSBpZiAoYXZjdHgtPmdsb2JhbF9xdWFsaXR5ID4gMCkgewo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByY19xdWFsaXR5ID0gYXZjdHgtPmdsb2JhbF9xdWFsaXR5Owo+IMKgwqDCoMKgwqDC oMKgwqAgfSBlbHNlIHsKPiBAQCAtMjAxMCwxMCArMjAxOSwxMCBAQCByY19tb2RlX2ZvdW5kOgo+ IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiDCoMKgwqDCoCB9Cj4g wqAKPiAtwqDCoMKgIGN0eC0+cmNfbW9kZcKgwqDCoMKgID0gcmNfbW9kZTsKPiAtwqDCoMKgIGN0 eC0+cmNfcXVhbGl0ecKgID0gcmNfcXVhbGl0eTsKPiAtwqDCoMKgIGN0eC0+dmFfcmNfbW9kZcKg ID0gcmNfbW9kZS0+dmFfbW9kZTsKPiAtwqDCoMKgIGN0eC0+dmFfYml0X3JhdGUgPSByY19iaXRz X3Blcl9zZWNvbmQ7Cj4gK8KgwqDCoCBjdHgtPnJjX21vZGXCoMKgwqDCoMKgwqDCoMKgwqAgPSBy Y19tb2RlOwo+ICvCoMKgwqAgYmFzZV9jdHgtPnJjX3F1YWxpdHnCoCA9IHJjX3F1YWxpdHk7Cj4g K8KgwqDCoCBjdHgtPnZhX3JjX21vZGXCoMKgwqDCoMKgwqAgPSByY19tb2RlLT52YV9tb2RlOwo+ ICvCoMKgwqAgY3R4LT52YV9iaXRfcmF0ZcKgwqDCoMKgwqAgPSByY19iaXRzX3Blcl9zZWNvbmQ7 Cj4gwqAKPiDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiUkMgbW9kZTog JXMuXG4iLCByY19tb2RlLT5uYW1lKTsKPiDCoMKgwqDCoCBpZiAocmNfYXR0ci52YWx1ZSA9PSBW QV9BVFRSSUJfTk9UX1NVUFBPUlRFRCkgewo+IEBAIC0yMTU5LDcgKzIxNjgsOCBAQCBzdGF0aWMg YXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaW5pdF9tYXhfZnJhbWVfc2l6ZShBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCj4gwqAKPiDCoHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfaW5p dF9nb3Bfc3RydWN0dXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiAtwqDCoMKgIFZB QVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFz ZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZB QVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDC oMKgwqDCoCBWQVN0YXR1cyB2YXM7Cj4gwqDCoMKgwqAgVkFDb25maWdBdHRyaWIgYXR0ciA9IHsg VkFDb25maWdBdHRyaWJFbmNNYXhSZWZGcmFtZXMgfTsKPiDCoMKgwqDCoCB1aW50MzJfdCByZWZf bDAsIHJlZl9sMTsKPiBAQCAtMjE4Miw3ICsyMTkyLDcgQEAgc3RhdGljIGF2X2NvbGQgaW50Cj4g dmFhcGlfZW5jb2RlX2luaXRfZ29wX3N0cnVjdHVyZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4g wqDCoMKgwqDCoMKgwqDCoCByZWZfbDEgPSBhdHRyLnZhbHVlID4+IDE2ICYgMHhmZmZmOwo+IMKg wqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgY3R4LT5wX3RvX2dwYiA9IDA7Cj4gK8KgwqDCoCBiYXNl X2N0eC0+cF90b19ncGIgPSAwOwo+IMKgwqDCoMKgIHByZWRpY3Rpb25fcHJlX29ubHkgPSAwOwo+ IMKgCj4gwqAjaWYgVkFfQ0hFQ0tfVkVSU0lPTigxLCA5LCAwKQo+IEBAIC0yMjE4LDcgKzIyMjgs NyBAQCBzdGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaW5pdF9nb3Bfc3RydWN0dXJl KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoYXR0ci52YWx1ZSAmIFZBX1BSRURJQ1RJT05fRElSRUNUSU9OX0JJX05PVF9FTVBUWSkgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZWZfbDAgPiAwICYmIHJlZl9s MSA+IDApIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5w X3RvX2dwYiA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJh c2VfY3R4LT5wX3RvX2dwYiA9IDE7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiRHJpdmVyIGRvZXMgbm90IHN1 cHBvcnQgUC0KPiBmcmFtZXMsICIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgInJlcGxhY2luZyB0aGVtIHdpdGggQi1mcmFtZXMuXG4iKTsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gQEAgLTIyMzAsNyArMjI0MCw3 IEBAIHN0YXRpYyBhdl9jb2xkIGludAo+IHZhYXBpX2VuY29kZV9pbml0X2dvcF9zdHJ1Y3R1cmUo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgwqDCoMKgIGlmIChjdHgtPmNvZGVjLT5mbGFncyAm IEZMQUdfSU5UUkFfT05MWSB8fAo+IMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmdvcF9zaXplIDw9 IDEpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJV c2luZyBpbnRyYSBmcmFtZXMgb25seS5cbiIpOwo+IC3CoMKgwqDCoMKgwqDCoCBjdHgtPmdvcF9z aXplID0gMTsKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPmdvcF9zaXplID0gMTsKPiDCoMKg wqDCoCB9IGVsc2UgaWYgKHJlZl9sMCA8IDEpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiRHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgYW55ICIKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInJlZmVyZW5jZSBmcmFtZXMuXG4iKTsKPiBAQCAt MjIzOCw0MSArMjI0OCw0MSBAQCBzdGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaW5p dF9nb3Bfc3RydWN0dXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCB9IGVsc2Ug aWYgKCEoY3R4LT5jb2RlYy0+ZmxhZ3MgJiBGTEFHX0JfUElDVFVSRVMpIHx8Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZl9sMSA8IDEgfHwgYXZjdHgtPm1heF9iX2ZyYW1lcyA8 IDEgfHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJlZGljdGlvbl9wcmVfb25s eSkgewo+IC3CoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5wX3RvX2dwYikKPiArwqDCoMKgwqDCoMKg wqAgaWYgKGJhc2VfY3R4LT5wX3RvX2dwYikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBpbnRyYSBhbmQgQi1mcmFtZXMgIgo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiKHN1cHBvcnRlZCByZWZlcmVuY2Vz OiAlZCAvICVkKS5cbiIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl Zl9sMCwgcmVmX2wxKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGludHJhIGFuZCBQ LWZyYW1lcyAiCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIihzdXBw b3J0ZWQgcmVmZXJlbmNlczogJWQgLyAlZCkuXG4iLCByZWZfbDAsIHJlZl9sMSk7Cj4gLcKgwqDC oMKgwqDCoMKgIGN0eC0+Z29wX3NpemUgPSBhdmN0eC0+Z29wX3NpemU7Cj4gLcKgwqDCoMKgwqDC oMKgIGN0eC0+cF9wZXJfacKgID0gSU5UX01BWDsKPiAtwqDCoMKgwqDCoMKgwqAgY3R4LT5iX3Bl cl9wwqAgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+Z29wX3NpemUgPSBhdmN0eC0+ Z29wX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgIGJhc2VfY3R4LT5wX3Blcl9pwqAgPSBJTlRfTUFY Owo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+Yl9wZXJfcMKgID0gMDsKPiDCoMKgwqDCoCB9 IGVsc2Ugewo+IC3CoMKgwqDCoMKgwqAgaWYgKGN0eC0+cF90b19ncGIpCj4gK8KgwqDCoMKgwqDC oCBpZiAoYmFzZV9jdHgtPnBfdG9fZ3BiKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGludHJhIGFuZCBCLWZyYW1lcyAiCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIoc3VwcG9ydGVkIHJlZmVyZW5jZXM6 ICVkIC8gJWQpLlxuIiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVm X2wwLCByZWZfbDEpOwo+IMKgwqDCoMKgwqDCoMKgIGVsc2UKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBpbnRyYSwgUC0gYW5kIEIt ZnJhbWVzICIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIihzdXBwb3J0 ZWQgcmVmZXJlbmNlczogJWQgLyAlZCkuXG4iLCByZWZfbDAsIHJlZl9sMSk7Cj4gLcKgwqDCoMKg wqDCoMKgIGN0eC0+Z29wX3NpemUgPSBhdmN0eC0+Z29wX3NpemU7Cj4gLcKgwqDCoMKgwqDCoMKg IGN0eC0+cF9wZXJfacKgID0gSU5UX01BWDsKPiAtwqDCoMKgwqDCoMKgwqAgY3R4LT5iX3Blcl9w wqAgPSBhdmN0eC0+bWF4X2JfZnJhbWVzOwo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+Z29w X3NpemUgPSBhdmN0eC0+Z29wX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgIGJhc2VfY3R4LT5wX3Bl cl9pwqAgPSBJTlRfTUFYOwo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+Yl9wZXJfcMKgID0g YXZjdHgtPm1heF9iX2ZyYW1lczsKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIChjdHgtPmNvZGVjLT5m bGFncyAmIEZMQUdfQl9QSUNUVVJFX1JFRkVSRU5DRVMpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjdHgtPm1heF9iX2RlcHRoID0gRkZNSU4oY3R4LT5kZXNpcmVkX2JfZGVwdGgsCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhdl9sb2cyKGN0eC0+Yl9wZXJfcCkgKyAxKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBiYXNlX2N0eC0+bWF4X2JfZGVwdGggPSBGRk1JTihiYXNlX2N0eC0+ZGVzaXJl ZF9iX2RlcHRoLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZzIoYmFzZV9jdHgt PmJfcGVyX3ApICsgMSk7Cj4gwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGN0eC0+bWF4X2JfZGVwdGggPSAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJhc2VfY3R4LT5tYXhfYl9kZXB0aCA9IDE7Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDC oMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgaWYgKGN0eC0+Y29kZWMtPmZsYWdzICYgRkxBR19OT05f SURSX0tFWV9QSUNUVVJFUykgewo+IC3CoMKgwqDCoMKgwqDCoCBjdHgtPmNsb3NlZF9nb3DCoCA9 ICEhKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfQ0xPU0VEX0dPUCk7Cj4gLcKgwqDCoMKg wqDCoMKgIGN0eC0+Z29wX3Blcl9pZHIgPSBjdHgtPmlkcl9pbnRlcnZhbCArIDE7Cj4gK8KgwqDC oMKgwqDCoMKgIGJhc2VfY3R4LT5jbG9zZWRfZ29wwqAgPSAhIShhdmN0eC0+ZmxhZ3MgJiBBVl9D T0RFQ19GTEFHX0NMT1NFRF9HT1ApOwo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+Z29wX3Bl cl9pZHIgPSBiYXNlX2N0eC0+aWRyX2ludGVydmFsICsgMTsKPiDCoMKgwqDCoCB9IGVsc2Ugewo+ IC3CoMKgwqDCoMKgwqDCoCBjdHgtPmNsb3NlZF9nb3DCoCA9IDE7Cj4gLcKgwqDCoMKgwqDCoMKg IGN0eC0+Z29wX3Blcl9pZHIgPSAxOwo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+Y2xvc2Vk X2dvcMKgID0gMTsKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPmdvcF9wZXJfaWRyID0gMTsK PiDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiBAQCAtMjM4Niw2ICsyMzk2 LDcgQEAgc3RhdGljIGF2X2NvbGQgaW50Cj4gdmFhcGlfZW5jb2RlX2luaXRfdGlsZV9zbGljZV9z dHJ1Y3R1cmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgCj4gwqBzdGF0aWMgYXZfY29sZCBp bnQgdmFhcGlfZW5jb2RlX2luaXRfc2xpY2Vfc3RydWN0dXJlKEFWQ29kZWNDb250ZXh0ICphdmN0 eCkKPiDCoHsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgt PnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5w cml2X2RhdGE7Cj4gwqDCoMKgwqAgVkFDb25maWdBdHRyaWIgYXR0clszXSA9IHsgeyBWQUNvbmZp Z0F0dHJpYkVuY01heFNsaWNlcyB9LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgVkFDb25maWdBdHRyaWJFbmNTbGljZVN0 cnVjdHVyZSB9LAo+IEBAIC0yNDA1LDEyICsyNDE2LDEyIEBAIHN0YXRpYyBhdl9jb2xkIGludAo+ IHZhYXBpX2VuY29kZV9pbml0X3NsaWNlX3N0cnVjdHVyZShBVkNvZGVjQ29udGV4dCAqYXZjdHgp Cj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKg IGF2X2Fzc2VydDAoY3R4LT5zbGljZV9ibG9ja19oZWlnaHQgPiAwICYmIGN0eC0+c2xpY2VfYmxv Y2tfd2lkdGggPiAwKTsKPiArwqDCoMKgIGF2X2Fzc2VydDAoYmFzZV9jdHgtPnNsaWNlX2Jsb2Nr X2hlaWdodCA+IDAgJiYgYmFzZV9jdHgtCj4gPnNsaWNlX2Jsb2NrX3dpZHRoID4gMCk7Cj4gwqAK PiAtwqDCoMKgIGN0eC0+c2xpY2VfYmxvY2tfcm93cyA9IChhdmN0eC0+aGVpZ2h0ICsgY3R4LT5z bGljZV9ibG9ja19oZWlnaHQgLSAxKSAvCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+c2xpY2VfYmxvY2tfaGVpZ2h0Owo+IC3C oMKgwqAgY3R4LT5zbGljZV9ibG9ja19jb2xzID0gKGF2Y3R4LT53aWR0aMKgICsgY3R4LT5zbGlj ZV9ibG9ja193aWR0aMKgIC0gMSkgLwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnNsaWNlX2Jsb2NrX3dpZHRoOwo+ICvCoMKg wqAgY3R4LT5zbGljZV9ibG9ja19yb3dzID0gKGF2Y3R4LT5oZWlnaHQgKyBiYXNlX2N0eC0+c2xp Y2VfYmxvY2tfaGVpZ2h0IC0KPiAxKSAvCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2VfY3R4LT5zbGljZV9ibG9ja19oZWlnaHQ7 Cj4gK8KgwqDCoCBjdHgtPnNsaWNlX2Jsb2NrX2NvbHMgPSAoYXZjdHgtPndpZHRowqAgKyBiYXNl X2N0eC0+c2xpY2VfYmxvY2tfd2lkdGjCoCAtCj4gMSkgLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+c2xpY2VfYmxv Y2tfd2lkdGg7Cj4gwqAKPiDCoMKgwqDCoCBpZiAoYXZjdHgtPnNsaWNlcyA8PSAxICYmICFjdHgt PnRpbGVfcm93cyAmJiAhY3R4LT50aWxlX2NvbHMpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+ bmJfc2xpY2VzwqAgPSAxOwo+IEBAIC0yNTg1LDcgKzI1OTYsOCBAQCBzdGF0aWMgYXZfY29sZCBp bnQKPiB2YWFwaV9lbmNvZGVfaW5pdF9xdWFsaXR5KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDC oHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfaW5pdF9yb2koQVZDb2RlY0NvbnRleHQg KmF2Y3R4KQo+IMKgewo+IMKgI2lmIFZBX0NIRUNLX1ZFUlNJT04oMSwgMCwgMCkKPiAtwqDCoMKg IFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhX QmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKg IFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK PiDCoMKgwqDCoCBWQVN0YXR1cyB2YXM7Cj4gwqDCoMKgwqAgVkFDb25maWdBdHRyaWIgYXR0ciA9 IHsgVkFDb25maWdBdHRyaWJFbmNST0kgfTsKPiDCoAo+IEBAIC0yNjAwLDE0ICsyNjEyLDE0IEBA IHN0YXRpYyBhdl9jb2xkIGludAo+IHZhYXBpX2VuY29kZV9pbml0X3JvaShBVkNvZGVjQ29udGV4 dCAqYXZjdHgpCj4gwqDCoMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgaWYgKGF0dHIudmFsdWUgPT0g VkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiAtwqDCoMKgwqDCoMKgwqAgY3R4LT5yb2lfYWxs b3dlZCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgIGJhc2VfY3R4LT5yb2lfYWxsb3dlZCA9IDA7Cj4g wqDCoMKgwqAgfSBlbHNlIHsKPiDCoMKgwqDCoMKgwqDCoMKgIFZBQ29uZmlnQXR0cmliVmFsRW5j Uk9JIHJvaSA9IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnZhbHVlID0gYXR0ci52YWx1 ZSwKPiDCoMKgwqDCoMKgwqDCoMKgIH07Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cm9p X21heF9yZWdpb25zID0gcm9pLmJpdHMubnVtX3JvaV9yZWdpb25zOwo+IC3CoMKgwqDCoMKgwqDC oCBjdHgtPnJvaV9hbGxvd2VkID0gY3R4LT5yb2lfbWF4X3JlZ2lvbnMgPiAwICYmCj4gK8KgwqDC oMKgwqDCoMKgIGJhc2VfY3R4LT5yb2lfYWxsb3dlZCA9IGN0eC0+cm9pX21heF9yZWdpb25zID4g MCAmJgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoY3R4LT52YV9yY19tb2RlID09IFZBX1JD X0NRUCB8fAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJvaS5iaXRzLnJvaV9yY19xcF9k ZWx0YV9zdXBwb3J0KTsKPiDCoMKgwqDCoCB9Cj4gQEAgLTI2MzEsNyArMjY0Myw4IEBAIHN0YXRp YyB2b2lkCj4gdmFhcGlfZW5jb2RlX2ZyZWVfb3V0cHV0X2J1ZmZlcihGRlJlZlN0cnVjdE9wYXF1 ZSBvcGFxdWUsCj4gwqBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hbGxvY19vdXRwdXRfYnVmZmVy KEZGUmVmU3RydWN0T3BhcXVlIG9wYXF1ZSwgdm9pZAo+ICpvYmopCj4gwqB7Cj4gwqDCoMKgwqAg QVZDb2RlY0NvbnRleHTCoMKgICphdmN0eCA9IG9wYXF1ZS5uYzsKPiAtwqDCoMKgIFZBQVBJRW5j b2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29k ZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5j b2RlQ29udGV4dMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDC oCBWQUJ1ZmZlcklEICpidWZmZXJfaWQgPSBvYmo7Cj4gwqDCoMKgwqAgVkFTdGF0dXMgdmFzOwo+ IMKgCj4gQEAgLTI2NDEsNyArMjY1NCw3IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfYWxs b2Nfb3V0cHV0X2J1ZmZlcihGRlJlZlN0cnVjdE9wYXF1ZSBvcGFxdWUsIHZvaWQgKm9iaikKPiDC oMKgwqDCoCAvLyBib3VuZCBvbiB0aGF0Lgo+IMKgwqDCoMKgIHZhcyA9IHZhQ3JlYXRlQnVmZmVy KGN0eC0+aHdjdHgtPmRpc3BsYXksIGN0eC0+dmFfY29udGV4dCwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUVuY0NvZGVkQnVmZmVyVHlwZSwK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDMgKiBj dHgtPnN1cmZhY2Vfd2lkdGggKiBjdHgtPnN1cmZhY2VfaGVpZ2h0ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDMgKiBiYXNlX2N0eC0+c3VyZmFj ZV93aWR0aCAqIGJhc2VfY3R4LQo+ID5zdXJmYWNlX2hlaWdodCArCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDEgPDwgMTYpLCAxLCAwLCBidWZm ZXJfaWQpOwo+IMKgwqDCoMKgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsKPiDCoMKg wqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0 ZSBiaXRzdHJlYW0gIgo+IEBAIC0yNjU2LDIwICsyNjY5LDIxIEBAIHN0YXRpYyBpbnQKPiB2YWFw aV9lbmNvZGVfYWxsb2Nfb3V0cHV0X2J1ZmZlcihGRlJlZlN0cnVjdE9wYXF1ZSBvcGFxdWUsIHZv aWQgKm9iaikKPiDCoAo+IMKgc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9jcmVhdGVf cmVjb25fZnJhbWVzKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiAtwqDCoMKgIFZBQVBJ RW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVu Y29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJ RW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKg wqDCoCBBVlZBQVBJSFdDb25maWcgKmh3Y29uZmlnID0gTlVMTDsKPiDCoMKgwqDCoCBBVkhXRnJh bWVzQ29uc3RyYWludHMgKmNvbnN0cmFpbnRzID0gTlVMTDsKPiDCoMKgwqDCoCBlbnVtIEFWUGl4 ZWxGb3JtYXQgcmVjb25fZm9ybWF0Owo+IMKgwqDCoMKgIGludCBlcnIsIGk7Cj4gwqAKPiAtwqDC oMKgIGh3Y29uZmlnID0gYXZfaHdkZXZpY2VfaHdjb25maWdfYWxsb2MoY3R4LT5kZXZpY2VfcmVm KTsKPiArwqDCoMKgIGh3Y29uZmlnID0gYXZfaHdkZXZpY2VfaHdjb25maWdfYWxsb2MoYmFzZV9j dHgtPmRldmljZV9yZWYpOwo+IMKgwqDCoMKgIGlmICghaHdjb25maWcpIHsKPiDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFp bDsKPiDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgaHdjb25maWctPmNvbmZpZ19pZCA9IGN0eC0+dmFf Y29uZmlnOwo+IMKgCj4gLcKgwqDCoCBjb25zdHJhaW50cyA9IGF2X2h3ZGV2aWNlX2dldF9od2Zy YW1lX2NvbnN0cmFpbnRzKGN0eC0+ZGV2aWNlX3JlZiwKPiArwqDCoMKgIGNvbnN0cmFpbnRzID0g YXZfaHdkZXZpY2VfZ2V0X2h3ZnJhbWVfY29uc3RyYWludHMoYmFzZV9jdHgtPmRldmljZV9yZWYs Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3 Y29uZmlnKTsKPiDCoMKgwqDCoCBpZiAoIWNvbnN0cmFpbnRzKSB7Cj4gwqDCoMKgwqDCoMKgwqDC oCBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Cj4gQEAgLTI2ODIsOSArMjY5Niw5IEBAIHN0YXRpYyBh dl9jb2xkIGludAo+IHZhYXBpX2VuY29kZV9jcmVhdGVfcmVjb25fZnJhbWVzKEFWQ29kZWNDb250 ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCByZWNvbl9mb3JtYXQgPSBBVl9QSVhfRk1UX05PTkU7Cj4g wqDCoMKgwqAgaWYgKGNvbnN0cmFpbnRzLT52YWxpZF9zd19mb3JtYXRzKSB7Cj4gwqDCoMKgwqDC oMKgwqDCoCBmb3IgKGkgPSAwOyBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tpXSAhPSBB Vl9QSVhfRk1UX05PTkU7IGkrKykKPiB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGN0 eC0+aW5wdXRfZnJhbWVzLT5zd19mb3JtYXQgPT0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0ID09Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHNbaV0pIHsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlY29uX2Zvcm1hdCA9IGN0eC0+aW5wdXRf ZnJhbWVzLT5zd19mb3JtYXQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWNv bl9mb3JtYXQgPSBiYXNlX2N0eC0+aW5wdXRfZnJhbWVzLT5zd19mb3JtYXQ7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiBAQCAtMjY5NSwxOCArMjcwOSwxOCBAQCBzdGF0aWMg YXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfY3JlYXRlX3JlY29uX2ZyYW1lcyhBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgfSBlbHNlIHsKPiDC oMKgwqDCoMKgwqDCoMKgIC8vIE5vIGlkZWEgd2hhdCB0byB1c2U7IGNvcHkgaW5wdXQgZm9ybWF0 Lgo+IC3CoMKgwqDCoMKgwqDCoCByZWNvbl9mb3JtYXQgPSBjdHgtPmlucHV0X2ZyYW1lcy0+c3df Zm9ybWF0Owo+ICvCoMKgwqDCoMKgwqDCoCByZWNvbl9mb3JtYXQgPSBiYXNlX2N0eC0+aW5wdXRf ZnJhbWVzLT5zd19mb3JtYXQ7Cj4gwqDCoMKgwqAgfQo+IMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0RFQlVHLCAiVXNpbmcgJXMgYXMgZm9ybWF0IG9mICIKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICJyZWNvbnN0cnVjdGVkIGZyYW1lcy5cbiIsIGF2X2dldF9waXhfZm10X25hbWUocmVj b25fZm9ybWF0KSk7Cj4gwqAKPiAtwqDCoMKgIGlmIChjdHgtPnN1cmZhY2Vfd2lkdGjCoCA8IGNv bnN0cmFpbnRzLT5taW5fd2lkdGjCoCB8fAo+IC3CoMKgwqDCoMKgwqDCoCBjdHgtPnN1cmZhY2Vf aGVpZ2h0IDwgY29uc3RyYWludHMtPm1pbl9oZWlnaHQgfHwKPiAtwqDCoMKgwqDCoMKgwqAgY3R4 LT5zdXJmYWNlX3dpZHRowqAgPiBjb25zdHJhaW50cy0+bWF4X3dpZHRoIHx8Cj4gLcKgwqDCoMKg wqDCoMKgIGN0eC0+c3VyZmFjZV9oZWlnaHQgPiBjb25zdHJhaW50cy0+bWF4X2hlaWdodCkgewo+ ICvCoMKgwqAgaWYgKGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRowqAgPCBjb25zdHJhaW50cy0+bWlu X3dpZHRowqAgfHwKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0IDwg Y29uc3RyYWludHMtPm1pbl9oZWlnaHQgfHwKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPnN1 cmZhY2Vfd2lkdGjCoCA+IGNvbnN0cmFpbnRzLT5tYXhfd2lkdGggfHwKPiArwqDCoMKgwqDCoMKg wqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0ID4gY29uc3RyYWludHMtPm1heF9oZWlnaHQpIHsK PiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSGFyZHdhcmUg ZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyBhdCAiCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICJzaXplICVkeCVkIChjb25zdHJhaW50czogd2lkdGggJWQtJWQgaGVpZ2h0ICVkLSVk KS5cbiIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5zdXJmYWNlX3dpZHRo LCBjdHgtPnN1cmZhY2VfaGVpZ2h0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJh c2VfY3R4LT5zdXJmYWNlX3dpZHRoLCBiYXNlX2N0eC0+c3VyZmFjZV9oZWlnaHQsCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0cmFpbnRzLT5taW5fd2lkdGgswqAgY29uc3Ry YWludHMtPm1heF93aWR0aCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Ry YWludHMtPm1pbl9oZWlnaHQsIGNvbnN0cmFpbnRzLT5tYXhfaGVpZ2h0KTsKPiDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IEFWRVJST1IoRUlOVkFMKTsKPiBAQCAtMjcxNiwxOSArMjczMCwxOSBAQCBz dGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfY3JlYXRlX3JlY29uX2ZyYW1lcyhBVkNv ZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqAgYXZfZnJlZXAoJmh3Y29uZmlnKTsKPiDCoMKg wqDCoCBhdl9od2ZyYW1lX2NvbnN0cmFpbnRzX2ZyZWUoJmNvbnN0cmFpbnRzKTsKPiDCoAo+IC3C oMKgwqAgY3R4LT5yZWNvbl9mcmFtZXNfcmVmID0gYXZfaHdmcmFtZV9jdHhfYWxsb2MoY3R4LT5k ZXZpY2VfcmVmKTsKPiAtwqDCoMKgIGlmICghY3R4LT5yZWNvbl9mcmFtZXNfcmVmKSB7Cj4gK8Kg wqDCoCBiYXNlX2N0eC0+cmVjb25fZnJhbWVzX3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKGJh c2VfY3R4LT5kZXZpY2VfcmVmKTsKPiArwqDCoMKgIGlmICghYmFzZV9jdHgtPnJlY29uX2ZyYW1l c19yZWYpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKPiDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiDCoMKgwqDCoCB9Cj4gLcKgwqDCoCBjdHgtPnJlY29u X2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCopY3R4LT5yZWNvbl9mcmFtZXNfcmVmLT5kYXRh Owo+ICvCoMKgwqAgYmFzZV9jdHgtPnJlY29uX2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCop YmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYtCj4gPmRhdGE7Cj4gwqAKPiAtwqDCoMKgIGN0eC0+ cmVjb25fZnJhbWVzLT5mb3JtYXTCoMKgwqAgPSBBVl9QSVhfRk1UX1ZBQVBJOwo+IC3CoMKgwqAg Y3R4LT5yZWNvbl9mcmFtZXMtPnN3X2Zvcm1hdCA9IHJlY29uX2Zvcm1hdDsKPiAtwqDCoMKgIGN0 eC0+cmVjb25fZnJhbWVzLT53aWR0aMKgwqDCoMKgID0gY3R4LT5zdXJmYWNlX3dpZHRoOwo+IC3C oMKgwqAgY3R4LT5yZWNvbl9mcmFtZXMtPmhlaWdodMKgwqDCoCA9IGN0eC0+c3VyZmFjZV9oZWln aHQ7Cj4gK8KgwqDCoCBiYXNlX2N0eC0+cmVjb25fZnJhbWVzLT5mb3JtYXTCoMKgwqAgPSBBVl9Q SVhfRk1UX1ZBQVBJOwo+ICvCoMKgwqAgYmFzZV9jdHgtPnJlY29uX2ZyYW1lcy0+c3dfZm9ybWF0 ID0gcmVjb25fZm9ybWF0Owo+ICvCoMKgwqAgYmFzZV9jdHgtPnJlY29uX2ZyYW1lcy0+d2lkdGjC oMKgwqDCoCA9IGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoOwo+ICvCoMKgwqAgYmFzZV9jdHgtPnJl Y29uX2ZyYW1lcy0+aGVpZ2h0wqDCoMKgID0gYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0Owo+IMKg Cj4gLcKgwqDCoCBlcnIgPSBhdl9od2ZyYW1lX2N0eF9pbml0KGN0eC0+cmVjb25fZnJhbWVzX3Jl Zik7Cj4gK8KgwqDCoCBlcnIgPSBhdl9od2ZyYW1lX2N0eF9pbml0KGJhc2VfY3R4LT5yZWNvbl9m cmFtZXNfcmVmKTsKPiDCoMKgwqDCoCBpZiAoZXJyIDwgMCkgewo+IMKgwqDCoMKgwqDCoMKgwqAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSByZWNvbnN0 cnVjdGVkICIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImZyYW1lIGNvbnRleHQ6 ICVkLlxuIiwgZXJyKTsKPiBAQCAtMjc0NCw3ICsyNzU4LDggQEAgc3RhdGljIGF2X2NvbGQgaW50 Cj4gdmFhcGlfZW5jb2RlX2NyZWF0ZV9yZWNvbl9mcmFtZXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQo+IMKgCj4gwqBhdl9jb2xkIGludCBmZl92YWFwaV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4 dCAqYXZjdHgpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2 Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqAg KmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqDCoMKgwqAgQVZWQUFQSUZyYW1lc0NvbnRleHQg KnJlY29uX2h3Y3R4ID0gTlVMTDsKPiDCoMKgwqDCoCBWQVN0YXR1cyB2YXM7Cj4gwqDCoMKgwqAg aW50IGVycjsKPiBAQCAtMjc1NCw4ICsyNzY5LDggQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlfZW5j b2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgCj4gwqDCoMKgwqAgLyogSWYgeW91 IGFkZCBzb21ldGhpbmcgdGhhdCBjYW4gZmFpbCBhYm92ZSB0aGlzIGF2X2ZyYW1lX2FsbG9jKCks Cj4gwqDCoMKgwqDCoCAqIG1vZGlmeSBmZl92YWFwaV9lbmNvZGVfY2xvc2UoKSBhY2NvcmRpbmds eS4gKi8KPiAtwqDCoMKgIGN0eC0+ZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpOwo+IC3CoMKgwqAg aWYgKCFjdHgtPmZyYW1lKSB7Cj4gK8KgwqDCoCBiYXNlX2N0eC0+ZnJhbWUgPSBhdl9mcmFtZV9h bGxvYygpOwo+ICvCoMKgwqAgaWYgKCFiYXNlX2N0eC0+ZnJhbWUpIHsKPiDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gwqDCoMKgwqAgfQo+IMKgCj4gQEAgLTI3NjUs MjMgKzI3ODAsMjMgQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlfZW5jb2RlX2luaXQoQVZDb2RlY0Nv bnRleHQKPiAqYXZjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwp Owo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgY3R4LT5pbnB1dF9mcmFtZXNfcmVmID0gYXZf YnVmZmVyX3JlZihhdmN0eC0+aHdfZnJhbWVzX2N0eCk7Cj4gLcKgwqDCoCBpZiAoIWN0eC0+aW5w dXRfZnJhbWVzX3JlZikgewo+ICvCoMKgwqAgYmFzZV9jdHgtPmlucHV0X2ZyYW1lc19yZWYgPSBh dl9idWZmZXJfcmVmKGF2Y3R4LT5od19mcmFtZXNfY3R4KTsKPiArwqDCoMKgIGlmICghYmFzZV9j dHgtPmlucHV0X2ZyYW1lc19yZWYpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1Io RU5PTUVNKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiDCoMKgwqDCoCB9Cj4gLcKg wqDCoCBjdHgtPmlucHV0X2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCopY3R4LT5pbnB1dF9m cmFtZXNfcmVmLT5kYXRhOwo+ICvCoMKgwqAgYmFzZV9jdHgtPmlucHV0X2ZyYW1lcyA9IChBVkhX RnJhbWVzQ29udGV4dCopYmFzZV9jdHgtPmlucHV0X2ZyYW1lc19yZWYtCj4gPmRhdGE7Cj4gwqAK PiAtwqDCoMKgIGN0eC0+ZGV2aWNlX3JlZiA9IGF2X2J1ZmZlcl9yZWYoY3R4LT5pbnB1dF9mcmFt ZXMtPmRldmljZV9yZWYpOwo+IC3CoMKgwqAgaWYgKCFjdHgtPmRldmljZV9yZWYpIHsKPiArwqDC oMKgIGJhc2VfY3R4LT5kZXZpY2VfcmVmID0gYXZfYnVmZmVyX3JlZihiYXNlX2N0eC0+aW5wdXRf ZnJhbWVzLT5kZXZpY2VfcmVmKTsKPiArwqDCoMKgIGlmICghYmFzZV9jdHgtPmRldmljZV9yZWYp IHsKPiDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKPiDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gZmFpbDsKPiDCoMKgwqDCoCB9Cj4gLcKgwqDCoCBjdHgtPmRldmljZSA9IChB VkhXRGV2aWNlQ29udGV4dCopY3R4LT5kZXZpY2VfcmVmLT5kYXRhOwo+IC3CoMKgwqAgY3R4LT5o d2N0eCA9IGN0eC0+ZGV2aWNlLT5od2N0eDsKPiArwqDCoMKgIGJhc2VfY3R4LT5kZXZpY2UgPSAo QVZIV0RldmljZUNvbnRleHQqKWJhc2VfY3R4LT5kZXZpY2VfcmVmLT5kYXRhOwo+ICvCoMKgwqAg Y3R4LT5od2N0eCA9IGJhc2VfY3R4LT5kZXZpY2UtPmh3Y3R4Owo+IMKgCj4gLcKgwqDCoCBjdHgt PnRhaWxfcGt0ID0gYXZfcGFja2V0X2FsbG9jKCk7Cj4gLcKgwqDCoCBpZiAoIWN0eC0+dGFpbF9w a3QpIHsKPiArwqDCoMKgIGJhc2VfY3R4LT50YWlsX3BrdCA9IGF2X3BhY2tldF9hbGxvYygpOwo+ ICvCoMKgwqAgaWYgKCFiYXNlX2N0eC0+dGFpbF9wa3QpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGVy ciA9IEFWRVJST1IoRU5PTUVNKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiDCoMKg wqDCoCB9Cj4gQEAgLTI3OTYsMTEgKzI4MTEsMTEgQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlfZW5j b2RlX2luaXQoQVZDb2RlY0NvbnRleHQKPiAqYXZjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gZmFpbDsKPiDCoMKgwqDCoCB9IGVsc2Ugewo+IMKgwqDCoMKgwqDCoMKgwqAgLy8g QXNzdW1lIDE2eDE2IGJsb2Nrcy4KPiAtwqDCoMKgwqDCoMKgwqAgY3R4LT5zdXJmYWNlX3dpZHRo wqAgPSBGRkFMSUdOKGF2Y3R4LT53aWR0aCzCoCAxNik7Cj4gLcKgwqDCoMKgwqDCoMKgIGN0eC0+ c3VyZmFjZV9oZWlnaHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIDE2KTsKPiArwqDCoMKgwqDC oMKgwqAgYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGjCoCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLMKg IDE2KTsKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElH TihhdmN0eC0+aGVpZ2h0LCAxNik7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5jb2RlYy0+ ZmxhZ3MgJiBGTEFHX1NMSUNFX0NPTlRST0wpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj dHgtPnNsaWNlX2Jsb2NrX3dpZHRowqAgPSAxNjsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj dHgtPnNsaWNlX2Jsb2NrX2hlaWdodCA9IDE2Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJh c2VfY3R4LT5zbGljZV9ibG9ja193aWR0aMKgID0gMTY7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYmFzZV9jdHgtPnNsaWNlX2Jsb2NrX2hlaWdodCA9IDE2Owo+IMKgwqDCoMKgwqDCoMKgwqAg fQo+IMKgwqDCoMKgIH0KPiDCoAo+IEBAIC0yODUxLDkgKzI4NjYsOSBAQCBhdl9jb2xkIGludCBm Zl92YWFwaV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqAgaWYg KGVyciA8IDApCj4gwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gwqAKPiAtwqDCoMKgIHJl Y29uX2h3Y3R4ID0gY3R4LT5yZWNvbl9mcmFtZXMtPmh3Y3R4Owo+ICvCoMKgwqAgcmVjb25faHdj dHggPSBiYXNlX2N0eC0+cmVjb25fZnJhbWVzLT5od2N0eDsKPiDCoMKgwqDCoCB2YXMgPSB2YUNy ZWF0ZUNvbnRleHQoY3R4LT5od2N0eC0+ZGlzcGxheSwgY3R4LT52YV9jb25maWcsCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+c3VyZmFj ZV93aWR0aCwgY3R4LT5zdXJmYWNlX2hlaWdodCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGgsIGJhc2Vf Y3R4LT5zdXJmYWNlX2hlaWdodCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFZBX1BST0dSRVNTSVZFLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVjb25faHdjdHgtPnN1cmZhY2VfaWRz LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmVjb25faHdjdHgtPm5iX3N1cmZhY2VzLAo+IEBAIC0yODgwLDggKzI4OTUsOCBAQCBhdl9jb2xk IGludCBmZl92YWFwaV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiDCoMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKg IGN0eC0+b3V0cHV0X2RlbGF5ID0gY3R4LT5iX3Blcl9wOwo+IC3CoMKgwqAgY3R4LT5kZWNvZGVf ZGVsYXkgPSBjdHgtPm1heF9iX2RlcHRoOwo+ICvCoMKgwqAgYmFzZV9jdHgtPm91dHB1dF9kZWxh eSA9IGJhc2VfY3R4LT5iX3Blcl9wOwo+ICvCoMKgwqAgYmFzZV9jdHgtPmRlY29kZV9kZWxheSA9 IGJhc2VfY3R4LT5tYXhfYl9kZXB0aDsKPiDCoAo+IMKgwqDCoMKgIGlmIChjdHgtPmNvZGVjLT5z ZXF1ZW5jZV9wYXJhbXNfc2l6ZSA+IDApIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+Y29kZWNf c2VxdWVuY2VfcGFyYW1zID0KPiBAQCAtMjkzNiwxMSArMjk1MSwxMSBAQCBhdl9jb2xkIGludCBm Zl92YWFwaV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dAo+ICphdmN0eCkKPiDCoMKgwqDCoCAv LyBjaGVjayB2YVN5bmNCdWZmZXIgZnVuY3Rpb24KPiDCoMKgwqDCoCB2YXMgPSB2YVN5bmNCdWZm ZXIoY3R4LT5od2N0eC0+ZGlzcGxheSwgVkFfSU5WQUxJRF9JRCwgMCk7Cj4gwqDCoMKgwqAgaWYg KHZhcyAhPSBWQV9TVEFUVVNfRVJST1JfVU5JTVBMRU1FTlRFRCkgewo+IC3CoMKgwqDCoMKgwqDC oCBjdHgtPmhhc19zeW5jX2J1ZmZlcl9mdW5jID0gMTsKPiAtwqDCoMKgwqDCoMKgwqAgY3R4LT5l bmNvZGVfZmlmbyA9IGF2X2ZpZm9fYWxsb2MyKGN0eC0+YXN5bmNfZGVwdGgsCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKFZBQVBJRW5jb2RlUGljdHVyZSAqKSwKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAwKTsKPiAtwqDCoMKgwqDCoMKgwqAgaWYgKCFjdHgtPmVuY29k ZV9maWZvKQo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+YXN5bmNfZW5jb2RlID0gMTsKPiAr wqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPmVuY29kZV9maWZvID0gYXZfZmlmb19hbGxvYzIoYmFz ZV9jdHgtPmFzeW5jX2RlcHRoLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplb2YoVkFBUElFbmNvZGVQaWN0dXJlKiksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDApOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWJhc2VfY3R4LT5lbmNvZGVf ZmlmbykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK PiDCoMKgwqDCoCB9Cj4gwqAjZW5kaWYKPiBAQCAtMjk1MywxNSArMjk2OCwxNiBAQCBmYWlsOgo+ IMKgCj4gwqBhdl9jb2xkIGludCBmZl92YWFwaV9lbmNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQg KmF2Y3R4KQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+IC3CoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMsICpuZXh0Owo+ICvC oMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZSAqcGljLCAqbmV4dDsKPiDCoAo+ IMKgwqDCoMKgIC8qIFdlIGNoZWNrIGN0eC0+ZnJhbWUgdG8ga25vdyB3aGV0aGVyIGZmX3ZhYXBp X2VuY29kZV9pbml0KCkKPiDCoMKgwqDCoMKgICogaGFzIGJlZW4gY2FsbGVkIGFuZCB2YV9jb25m aWcvdmFfY29udGV4dCBpbml0aWFsaXplZC4gKi8KPiAtwqDCoMKgIGlmICghY3R4LT5mcmFtZSkK PiArwqDCoMKgIGlmICghYmFzZV9jdHgtPmZyYW1lKQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IDA7Cj4gwqAKPiAtwqDCoMKgIGZvciAocGljID0gY3R4LT5waWNfc3RhcnQ7IHBpYzsgcGljID0g bmV4dCkgewo+ICvCoMKgwqAgZm9yIChwaWMgPSBiYXNlX2N0eC0+cGljX3N0YXJ0OyBwaWM7IHBp YyA9IG5leHQpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIG5leHQgPSBwaWMtPm5leHQ7Cj4gwqDCoMKg wqDCoMKgwqDCoCB2YWFwaV9lbmNvZGVfZnJlZShhdmN0eCwgcGljKTsKPiDCoMKgwqDCoCB9Cj4g QEAgLTI5NzgsMTYgKzI5OTQsMTYgQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlfZW5jb2RlX2Nsb3Nl KEFWQ29kZWNDb250ZXh0Cj4gKmF2Y3R4KQo+IMKgwqDCoMKgwqDCoMKgwqAgY3R4LT52YV9jb25m aWcgPSBWQV9JTlZBTElEX0lEOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgYXZfZnJhbWVf ZnJlZSgmY3R4LT5mcmFtZSk7Cj4gLcKgwqDCoCBhdl9wYWNrZXRfZnJlZSgmY3R4LT50YWlsX3Br dCk7Cj4gK8KgwqDCoCBhdl9mcmFtZV9mcmVlKCZiYXNlX2N0eC0+ZnJhbWUpOwo+ICvCoMKgwqAg YXZfcGFja2V0X2ZyZWUoJmJhc2VfY3R4LT50YWlsX3BrdCk7Cj4gwqAKPiDCoMKgwqDCoCBhdl9m cmVlcCgmY3R4LT5jb2RlY19zZXF1ZW5jZV9wYXJhbXMpOwo+IMKgwqDCoMKgIGF2X2ZyZWVwKCZj dHgtPmNvZGVjX3BpY3R1cmVfcGFyYW1zKTsKPiAtwqDCoMKgIGF2X2ZpZm9fZnJlZXAyKCZjdHgt PmVuY29kZV9maWZvKTsKPiArwqDCoMKgIGF2X2ZpZm9fZnJlZXAyKCZiYXNlX2N0eC0+ZW5jb2Rl X2ZpZm8pOwo+IMKgCj4gLcKgwqDCoCBhdl9idWZmZXJfdW5yZWYoJmN0eC0+cmVjb25fZnJhbWVz X3JlZik7Cj4gLcKgwqDCoCBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aW5wdXRfZnJhbWVzX3JlZik7 Cj4gLcKgwqDCoCBhdl9idWZmZXJfdW5yZWYoJmN0eC0+ZGV2aWNlX3JlZik7Cj4gK8KgwqDCoCBh dl9idWZmZXJfdW5yZWYoJmJhc2VfY3R4LT5yZWNvbl9mcmFtZXNfcmVmKTsKPiArwqDCoMKgIGF2 X2J1ZmZlcl91bnJlZigmYmFzZV9jdHgtPmlucHV0X2ZyYW1lc19yZWYpOwo+ICvCoMKgwqAgYXZf YnVmZmVyX3VucmVmKCZiYXNlX2N0eC0+ZGV2aWNlX3JlZik7Cj4gwqAKPiDCoMKgwqDCoCByZXR1 cm4gMDsKPiDCoH0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaCBiL2xp YmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgKPiBpbmRleCA2OTY0MDU1YjkzLi44ZWVlNDU1ODgxIDEw MDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgKPiArKysgYi9saWJhdmNvZGVj L3ZhYXBpX2VuY29kZS5oCj4gQEAgLTI5LDM4ICsyOSwzMCBAQAo+IMKgCj4gwqAjaW5jbHVkZSAi bGliYXZ1dGlsL2h3Y29udGV4dC5oIgo+IMKgI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRf dmFhcGkuaCIKPiAtI2luY2x1ZGUgImxpYmF2dXRpbC9maWZvLmgiCj4gwqAKPiDCoCNpbmNsdWRl ICJhdmNvZGVjLmgiCj4gwqAjaW5jbHVkZSAiaHdjb25maWcuaCIKPiArI2luY2x1ZGUgImh3X2Jh c2VfZW5jb2RlLmgiCj4gwqAKPiDCoHN0cnVjdCBWQUFQSUVuY29kZVR5cGU7Cj4gwqBzdHJ1Y3Qg VkFBUElFbmNvZGVQaWN0dXJlOwo+IMKgCj4gKy8vIENvZGVjIG91dHB1dCBwYWNrZXQgd2l0aG91 dCB0aW1lc3RhbXAgZGVsYXksIHdoaWNoIG1lYW5zIHRoZQo+ICsvLyBvdXRwdXQgcGFja2V0IGhh cyBzYW1lIFBUUyBhbmQgRFRTLgo+ICsjZGVmaW5lIEZMQUdfVElNRVNUQU1QX05PX0RFTEFZIDEg PDwgNgo+ICsKPiDCoGVudW0gewo+IMKgwqDCoMKgIE1BWF9DT05GSUdfQVRUUklCVVRFU8KgID0g NCwKPiDCoMKgwqDCoCBNQVhfR0xPQkFMX1BBUkFNU8KgwqDCoMKgwqAgPSA0LAo+IC3CoMKgwqAg TUFYX0RQQl9TSVpFwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAxNiwKPiAtwqDCoMKgIE1BWF9QSUNU VVJFX1JFRkVSRU5DRVMgPSAyLAo+IC3CoMKgwqAgTUFYX1JFT1JERVJfREVMQVnCoMKgwqDCoMKg ID0gMTYsCj4gwqDCoMKgwqAgTUFYX1BBUkFNX0JVRkZFUl9TSVpFwqAgPSAxMDI0LAo+IMKgwqDC oMKgIC8vIEEuNC4xOiB0YWJsZSBBLjYgYWxsb3dzIGF0IG1vc3QgMjIgdGlsZSByb3dzIGZvciBh bnkgbGV2ZWwuCj4gwqDCoMKgwqAgTUFYX1RJTEVfUk9XU8KgwqDCoMKgwqDCoMKgwqDCoCA9IDIy LAo+IMKgwqDCoMKgIC8vIEEuNC4xOiB0YWJsZSBBLjYgYWxsb3dzIGF0IG1vc3QgMjAgdGlsZSBj b2x1bW5zIGZvciBhbnkgbGV2ZWwuCj4gwqDCoMKgwqAgTUFYX1RJTEVfQ09MU8KgwqDCoMKgwqDC oMKgwqDCoCA9IDIwLAo+IC3CoMKgwqAgTUFYX0FTWU5DX0RFUFRIwqDCoMKgwqDCoMKgwqAgPSA2 NCwKPiAtwqDCoMKgIE1BWF9SRUZFUkVOQ0VfTElTVF9OVU0gPSAyLAo+IMKgfTsKPiDCoAo+IMKg ZXh0ZXJuIGNvbnN0IEFWQ29kZWNIV0NvbmZpZ0ludGVybmFsICpjb25zdCBmZl92YWFwaV9lbmNv ZGVfaHdfY29uZmlnc1tdOwo+IMKgCj4gLWVudW0gewo+IC3CoMKgwqAgUElDVFVSRV9UWVBFX0lE UiA9IDAsCj4gLcKgwqDCoCBQSUNUVVJFX1RZUEVfScKgwqAgPSAxLAo+IC3CoMKgwqAgUElDVFVS RV9UWVBFX1DCoMKgID0gMiwKPiAtwqDCoMKgIFBJQ1RVUkVfVFlQRV9CwqDCoCA9IDMsCj4gLX07 Cj4gLQo+IMKgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVTbGljZSB7Cj4gwqDCoMKgwqAgaW50 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluZGV4Owo+IMKgwqDCoMKgIGludMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByb3dfc3RhcnQ7Cj4gQEAgLTcxLDE2ICs2Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IFZBQVBJRW5jb2RlU2xpY2Ugewo+IMKgfSBWQUFQSUVuY29kZVNsaWNlOwo+IMKgCj4gwqB0 eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZVBpY3R1cmUgewo+IC3CoMKgwqAgc3RydWN0IFZBQVBJ RW5jb2RlUGljdHVyZSAqbmV4dDsKPiAtCj4gLcKgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDC oCBkaXNwbGF5X29yZGVyOwo+IC3CoMKgwqAgaW50NjRfdMKgwqDCoMKgwqDCoMKgwqAgZW5jb2Rl X29yZGVyOwo+IC3CoMKgwqAgaW50NjRfdMKgwqDCoMKgwqDCoMKgwqAgcHRzOwo+IC3CoMKgwqAg aW50NjRfdMKgwqDCoMKgwqDCoMKgwqAgZHVyYXRpb247Cj4gLcKgwqDCoCBpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZm9yY2VfaWRyOwo+IC0KPiAtwqDCoMKgIHZvaWTCoMKgwqDCoMKgwqDC oMKgwqDCoCAqb3BhcXVlOwo+IC3CoMKgwqAgQVZCdWZmZXJSZWbCoMKgwqAgKm9wYXF1ZV9yZWY7 Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlIGJhc2U7Cj4gwqAKPiDCoCNpZiBWQV9DSEVD S19WRVJTSU9OKDEsIDAsIDApCj4gwqDCoMKgwqAgLy8gUk9JIHJlZ2lvbnMuCj4gQEAgLTg5LDE1 ICs3Miw3IEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUGljdHVyZSB7Cj4gwqDCoMKgwqAg dm9pZMKgwqDCoMKgwqDCoMKgwqDCoMKgICpyb2k7Cj4gwqAjZW5kaWYKPiDCoAo+IC3CoMKgwqAg aW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR5cGU7Cj4gLcKgwqDCoCBpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYl9kZXB0aDsKPiAtwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBlbmNvZGVfaXNzdWVkOwo+IC3CoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGVuY29kZV9jb21wbGV0ZTsKPiAtCj4gLcKgwqDCoCBBVkZyYW1lwqDCoMKgwqDCoMKgwqAgKmlu cHV0X2ltYWdlOwo+IMKgwqDCoMKgIFZBU3VyZmFjZUlEwqDCoMKgwqAgaW5wdXRfc3VyZmFjZTsK PiAtCj4gLcKgwqDCoCBBVkZyYW1lwqDCoMKgwqDCoMKgwqAgKnJlY29uX2ltYWdlOwo+IMKgwqDC oMKgIFZBU3VyZmFjZUlEwqDCoMKgwqAgcmVjb25fc3VyZmFjZTsKPiDCoAo+IMKgwqDCoMKgIGlu dMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9wYXJhbV9idWZmZXJzOwo+IEBAIC0xMDcsMzQgKzgyLDEw IEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUGljdHVyZSB7Cj4gwqDCoMKgwqAgVkFCdWZm ZXJJRMKgwqDCoMKgICpvdXRwdXRfYnVmZmVyX3JlZjsKPiDCoMKgwqDCoCBWQUJ1ZmZlcklEwqDC oMKgwqDCoCBvdXRwdXRfYnVmZmVyOwo+IMKgCj4gLcKgwqDCoCB2b2lkwqDCoMKgwqDCoMKgwqDC oMKgwqAgKnByaXZfZGF0YTsKPiDCoMKgwqDCoCB2b2lkwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNv ZGVjX3BpY3R1cmVfcGFyYW1zOwo+IMKgCj4gLcKgwqDCoCAvLyBXaGV0aGVyIHRoaXMgcGljdHVy ZSBpcyBhIHJlZmVyZW5jZSBwaWN0dXJlLgo+IC3CoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlzX3JlZmVyZW5jZTsKPiAtCj4gLcKgwqDCoCAvLyBUaGUgY29udGVudHMgb2YgdGhl IERQQiBhZnRlciB0aGlzIHBpY3R1cmUgaGFzIGJlZW4gZGVjb2RlZC4KPiAtwqDCoMKgIC8vIFRo aXMgd2lsbCBjb250YWluIHRoZSBwaWN0dXJlIGl0c2VsZiBpZiBpdCBpcyBhIHJlZmVyZW5jZSBw aWN0dXJlLAo+IC3CoMKgwqAgLy8gYnV0IG5vdCBpZiBpdCBpc24ndC4KPiAtwqDCoMKgIGludMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmJfZHBiX3BpY3M7Cj4gLcKg wqDCoCBzdHJ1Y3QgVkFBUElFbmNvZGVQaWN0dXJlICpkcGJbTUFYX0RQQl9TSVpFXTsKPiAtwqDC oMKgIC8vIFRoZSByZWZlcmVuY2UgcGljdHVyZXMgdXNlZCBpbiBkZWNvZGluZyB0aGlzIHBpY3R1 cmUuIElmIHRoZXkgYXJlCj4gLcKgwqDCoCAvLyB1c2VkIGJ5IGxhdGVyIHBpY3R1cmVzIHRoZXkg d2lsbCBhbHNvIGFwcGVhciBpbiB0aGUgRFBCLiByZWZbMF1bXSBmb3IKPiAtwqDCoMKgIC8vIHBy ZXZpb3VzIHJlZmVyZW5jZSBmcmFtZXMuIHJlZlsxXVtdIGZvciBmdXR1cmUgcmVmZXJlbmNlIGZy YW1lcy4KPiAtwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmJfcmVmc1tNQVhfUkVGRVJFTkNFX0xJU1RfTlVNXTsKPiAtwqDCoMKgIHN0cnVjdCBWQUFQ SUVuY29kZVBpY3R1cmUKPiAqcmVmc1tNQVhfUkVGRVJFTkNFX0xJU1RfTlVNXVtNQVhfUElDVFVS RV9SRUZFUkVOQ0VTXTsKPiAtwqDCoMKgIC8vIFRoZSBwcmV2aW91cyByZWZlcmVuY2UgcGljdHVy ZSBpbiBlbmNvZGUgb3JkZXIuwqAgTXVzdCBiZSBpbiBhdCBsZWFzdAo+IC3CoMKgwqAgLy8gb25l IG9mIHRoZSByZWZlcmVuY2UgbGlzdCBhbmQgRFBCIGxpc3QuCj4gLcKgwqDCoCBzdHJ1Y3QgVkFB UElFbmNvZGVQaWN0dXJlICpwcmV2Owo+IC3CoMKgwqAgLy8gUmVmZXJlbmNlIGNvdW50IGZvciBv dGhlciBwaWN0dXJlcyByZWZlcnJpbmcgdG8gdGhpcyBvbmUgdGhyb3VnaAo+IC3CoMKgwqAgLy8g dGhlIGFib3ZlIHBvaW50ZXJzLCBkaXJlY3RseSBmcm9tIGluY29tcGxldGUgcGljdHVyZXMgYW5k IGluZGlyZWN0bHkKPiAtwqDCoMKgIC8vIHRocm91Z2ggY29tcGxldGVkIHBpY3R1cmVzLgo+IC3C oMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZl9jb3VudFsyXTsKPiAtwqDCoMKg IGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWZfcmVtb3ZlZFsyXTsKPiAtCj4gwqDCoMKg wqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgIG5iX3NsaWNlczsKPiDCoMKgwqDCoCBWQUFQSUVuY29k ZVNsaWNlICpzbGljZXM7Cj4gLQo+IMKgwqDCoMKgIC8qKgo+IMKgwqDCoMKgwqAgKiBpbmRpY2F0 ZSBpZiBjdXJyZW50IGZyYW1lIGlzIGFuIGluZGVwZW5kZW50IGZyYW1lIHRoYXQgdGhlIGNvZGVk IGRhdGEKPiDCoMKgwqDCoMKgICogY2FuIGJlIHB1c2hlZCB0byBkb3duc3RyZWFtIGRpcmVjdGx5 LiBDb2RlZCBvZiBub24taW5kZXBlbmRlbnQgZnJhbWUKPiBAQCAtMTkzLDU3ICsxNDQsMjYgQEAg dHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVSQ01vZGUgewo+IMKgfSBWQUFQSUVuY29kZVJDTW9k ZTsKPiDCoAo+IMKgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVDb250ZXh0IHsKPiAtwqDCoMKg IGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+ICvCoMKgwqAgLy8gQmFzZS4KPiArwqDCoMKgIEhXQmFz ZUVuY29kZUNvbnRleHQgYmFzZTsKPiDCoAo+IMKgwqDCoMKgIC8vIENvZGVjLXNwZWNpZmljIGhv b2tzLgo+IMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBWQUFQSUVuY29kZVR5cGUgKmNvZGVjOwo+IMKg Cj4gLcKgwqDCoCAvLyBHbG9iYWwgb3B0aW9ucy4KPiAtCj4gwqDCoMKgwqAgLy8gVXNlIGxvdyBw b3dlciBlbmNvZGluZyBtb2RlLgo+IMKgwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsb3dfcG93ZXI7Cj4gwqAKPiAtwqDCoMKgIC8vIE51bWJlciBvZiBJIGZyYW1lcyBiZXR3ZWVu IElEUiBmcmFtZXMuCj4gLcKgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWRyX2lu dGVydmFsOwo+IC0KPiAtwqDCoMKgIC8vIERlc2lyZWQgQiBmcmFtZSByZWZlcmVuY2UgZGVwdGgu Cj4gLcKgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzaXJlZF9iX2RlcHRoOwo+ IC0KPiDCoMKgwqDCoCAvLyBNYXggRnJhbWUgU2l6ZQo+IMKgwqDCoMKgIGludMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBtYXhfZnJhbWVfc2l6ZTsKPiDCoAo+IC3CoMKgwqAgLy8gRXhwbGljaXRs eSBzZXQgUkMgbW9kZSAob3RoZXJ3aXNlIGF0dGVtcHQgdG8gcGljayBmcm9tCj4gLcKgwqDCoCAv LyBhdmFpbGFibGUgbW9kZXMpLgo+IC3CoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGV4cGxpY2l0X3JjX21vZGU7Cj4gLQo+IC3CoMKgwqAgLy8gRXhwbGljaXRseS1zZXQgUVAsIGZv ciB1c2Ugd2l0aCB0aGUgInFwIiBvcHRpb25zLgo+IC3CoMKgwqAgLy8gKEZvcmNlcyBDUVAgbW9k ZSB3aGVuIHNldCwgb3ZlcnJpZGluZyBldmVyeXRoaW5nIGVsc2UuKQo+IC3CoMKgwqAgaW50wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV4cGxpY2l0X3FwOwo+IC0KPiDCoMKgwqDCoCAvLyBEZXNp cmVkIHBhY2tlZCBoZWFkZXJzLgo+IMKgwqDCoMKgIHVuc2lnbmVkIGludMKgwqDCoCBkZXNpcmVk X3BhY2tlZF9oZWFkZXJzOwo+IMKgCj4gLcKgwqDCoCAvLyBUaGUgcmVxdWlyZWQgc2l6ZSBvZiBz dXJmYWNlcy7CoCBUaGlzIGlzIHByb2JhYmx5IHRoZSBpbnB1dAo+IC3CoMKgwqAgLy8gc2l6ZSAo QVZDb2RlY0NvbnRleHQud2lkdGh8aGVpZ2h0KSBhbGlnbmVkIHVwIHRvIHdoYXRldmVyCj4gLcKg wqDCoCAvLyBibG9jayBzaXplIGlzIHJlcXVpcmVkIGJ5IHRoZSBjb2RlYy4KPiAtwqDCoMKgIGlu dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdXJmYWNlX3dpZHRoOwo+IC3CoMKgwqAgaW50wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN1cmZhY2VfaGVpZ2h0Owo+IC0KPiAtwqDCoMKgIC8vIFRo ZSBibG9jayBzaXplIGZvciBzbGljZSBjYWxjdWxhdGlvbnMuCj4gLcKgwqDCoCBpbnTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2xpY2VfYmxvY2tfd2lkdGg7Cj4gLcKgwqDCoCBpbnTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2xpY2VfYmxvY2tfaGVpZ2h0Owo+IC0KPiAtwqDCoMKgIC8vIEV2 ZXJ5dGhpbmcgYWJvdmUgdGhpcyBwb2ludCBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZwo+IC3C oMKgwqAgLy8gZmZfdmFhcGlfZW5jb2RlX2luaXQoKS4KPiAtCj4gwqDCoMKgwqAgLy8gQ2hvc2Vu IGVuY29kaW5nIHByb2ZpbGUgZGV0YWlscy4KPiDCoMKgwqDCoCBjb25zdCBWQUFQSUVuY29kZVBy b2ZpbGUgKnByb2ZpbGU7Cj4gwqAKPiDCoMKgwqDCoCAvLyBDaG9zZW4gcmF0ZSBjb250cm9sIG1v ZGUgZGV0YWlscy4KPiDCoMKgwqDCoCBjb25zdCBWQUFQSUVuY29kZVJDTW9kZSAqcmNfbW9kZTsK PiAtwqDCoMKgIC8vIFJDIHF1YWxpdHkgbGV2ZWwgLSBtZWFuaW5nIGRlcGVuZHMgb24gY29kZWMg YW5kIFJDIG1vZGUuCj4gLcKgwqDCoCAvLyBJbiBDUVAgbW9kZSB0aGlzIHNldHMgdGhlIGZpeGVk IHF1YW50aXNlciB2YWx1ZS4KPiAtwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy Y19xdWFsaXR5Owo+IMKgCj4gwqDCoMKgwqAgLy8gRW5jb2RpbmcgcHJvZmlsZSAoVkFQcm9maWxl KikuCj4gwqDCoMKgwqAgVkFQcm9maWxlwqDCoMKgwqDCoMKgIHZhX3Byb2ZpbGU7Cj4gQEAgLTI2 MywxOCArMTgzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVDb250ZXh0IHsKPiDCoMKg wqDCoCBWQUNvbmZpZ0lEwqDCoMKgwqDCoCB2YV9jb25maWc7Cj4gwqDCoMKgwqAgVkFDb250ZXh0 SUTCoMKgwqDCoCB2YV9jb250ZXh0Owo+IMKgCj4gLcKgwqDCoCBBVkJ1ZmZlclJlZsKgwqDCoCAq ZGV2aWNlX3JlZjsKPiAtwqDCoMKgIEFWSFdEZXZpY2VDb250ZXh0ICpkZXZpY2U7Cj4gwqDCoMKg wqAgQVZWQUFQSURldmljZUNvbnRleHQgKmh3Y3R4Owo+IMKgCj4gLcKgwqDCoCAvLyBUaGUgaGFy ZHdhcmUgZnJhbWUgY29udGV4dCBjb250YWluaW5nIHRoZSBpbnB1dCBmcmFtZXMuCj4gLcKgwqDC oCBBVkJ1ZmZlclJlZsKgwqDCoCAqaW5wdXRfZnJhbWVzX3JlZjsKPiAtwqDCoMKgIEFWSFdGcmFt ZXNDb250ZXh0ICppbnB1dF9mcmFtZXM7Cj4gLQo+IC3CoMKgwqAgLy8gVGhlIGhhcmR3YXJlIGZy YW1lIGNvbnRleHQgY29udGFpbmluZyB0aGUgcmVjb25zdHJ1Y3RlZCBmcmFtZXMuCj4gLcKgwqDC oCBBVkJ1ZmZlclJlZsKgwqDCoCAqcmVjb25fZnJhbWVzX3JlZjsKPiAtwqDCoMKgIEFWSFdGcmFt ZXNDb250ZXh0ICpyZWNvbl9mcmFtZXM7Cj4gLQo+IMKgwqDCoMKgIC8vIFBvb2wgb2YgKHJldXNh YmxlKSBiaXRzdHJlYW0gb3V0cHV0IGJ1ZmZlcnMuCj4gwqDCoMKgwqAgc3RydWN0IEZGUmVmU3Ry dWN0UG9vbCAqb3V0cHV0X2J1ZmZlcl9wb29sOwo+IMKgCj4gQEAgLTMwMSwzMCArMjExLDYgQEAg dHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVDb250ZXh0IHsKPiDCoMKgwqDCoCAvLyBzdHJ1Y3R1 cmUgKFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlciopLgo+IMKgwqDCoMKgIHZvaWTCoMKgwqDC oMKgwqDCoMKgwqDCoCAqY29kZWNfcGljdHVyZV9wYXJhbXM7Cj4gwqAKPiAtwqDCoMKgIC8vIEN1 cnJlbnQgZW5jb2Rpbmcgd2luZG93LCBpbiBkaXNwbGF5IChpbnB1dCkgb3JkZXIuCj4gLcKgwqDC oCBWQUFQSUVuY29kZVBpY3R1cmUgKnBpY19zdGFydCwgKnBpY19lbmQ7Cj4gLcKgwqDCoCAvLyBU aGUgbmV4dCBwaWN0dXJlIHRvIHVzZSBhcyB0aGUgcHJldmlvdXMgcmVmZXJlbmNlIHBpY3R1cmUg aW4KPiAtwqDCoMKgIC8vIGVuY29kaW5nIG9yZGVyLiBPcmRlciBmcm9tIHNtYWxsIHRvIGxhcmdl IGluIGVuY29kaW5nIG9yZGVyLgo+IC3CoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpuZXh0X3By ZXZbTUFYX1BJQ1RVUkVfUkVGRVJFTkNFU107Cj4gLcKgwqDCoCBpbnTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBuYl9uZXh0X3ByZXY7Cj4gLQo+IC3CoMKgwqAgLy8gTmV4dCBpbnB1 dCBvcmRlciBpbmRleCAoZGlzcGxheSBvcmRlcikuCj4gLcKgwqDCoCBpbnQ2NF90wqDCoMKgwqDC oMKgwqDCoCBpbnB1dF9vcmRlcjsKPiAtwqDCoMKgIC8vIE51bWJlciBvZiBmcmFtZXMgdGhhdCBv dXRwdXQgaXMgYmVoaW5kIGlucHV0Lgo+IC3CoMKgwqAgaW50NjRfdMKgwqDCoMKgwqDCoMKgwqAg b3V0cHV0X2RlbGF5Owo+IC3CoMKgwqAgLy8gTmV4dCBlbmNvZGUgb3JkZXIgaW5kZXguCj4gLcKg wqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBlbmNvZGVfb3JkZXI7Cj4gLcKgwqDCoCAvLyBO dW1iZXIgb2YgZnJhbWVzIGRlY29kZSBvdXRwdXQgd2lsbCBuZWVkIHRvIGJlIGRlbGF5ZWQuCj4g LcKgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBkZWNvZGVfZGVsYXk7Cj4gLcKgwqDCoCAv LyBOZXh0IG91dHB1dCBvcmRlciBpbmRleCAoaW4gZW5jb2RlIG9yZGVyKS4KPiAtwqDCoMKgIGlu dDY0X3TCoMKgwqDCoMKgwqDCoMKgIG91dHB1dF9vcmRlcjsKPiAtCj4gLcKgwqDCoCAvLyBUaW1l c3RhbXAgaGFuZGxpbmcuCj4gLcKgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBmaXJzdF9w dHM7Cj4gLcKgwqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCBkdHNfcHRzX2RpZmY7Cj4gLcKg wqDCoCBpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoCB0c19yaW5nW01BWF9SRU9SREVSX0RFTEFZICog MyArCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBNQVhfQVNZTkNfREVQVEhdOwo+IC0KPiDCoMKgwqDCoCAvLyBTbGljZSBzdHJ1Y3R1cmUu Cj4gwqDCoMKgwqAgaW50IHNsaWNlX2Jsb2NrX3Jvd3M7Cj4gwqDCoMKgwqAgaW50IHNsaWNlX2Js b2NrX2NvbHM7Cj4gQEAgLTM0Myw0MyArMjI5LDEyIEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5j b2RlQ29udGV4dCB7Cj4gwqDCoMKgwqAgLy8gTG9jYXRpb24gb2YgdGhlIGktdGggdGlsZSByb3cg Ym91bmRhcnkuCj4gwqDCoMKgwqAgaW50IHJvd19iZFtNQVhfVElMRV9ST1dTICsgMV07Cj4gwqAK PiAtwqDCoMKgIC8vIEZyYW1lIHR5cGUgZGVjaXNpb24uCj4gLcKgwqDCoCBpbnQgZ29wX3NpemU7 Cj4gLcKgwqDCoCBpbnQgY2xvc2VkX2dvcDsKPiAtwqDCoMKgIGludCBnb3BfcGVyX2lkcjsKPiAt wqDCoMKgIGludCBwX3Blcl9pOwo+IC3CoMKgwqAgaW50IG1heF9iX2RlcHRoOwo+IC3CoMKgwqAg aW50IGJfcGVyX3A7Cj4gLcKgwqDCoCBpbnQgZm9yY2VfaWRyOwo+IC3CoMKgwqAgaW50IGlkcl9j b3VudGVyOwo+IC3CoMKgwqAgaW50IGdvcF9jb3VudGVyOwo+IC3CoMKgwqAgaW50IGVuZF9vZl9z dHJlYW07Cj4gLcKgwqDCoCBpbnQgcF90b19ncGI7Cj4gLQo+IC3CoMKgwqAgLy8gV2hldGhlciB0 aGUgZHJpdmVyIHN1cHBvcnRzIFJPSSBhdCBhbGwuCj4gLcKgwqDCoCBpbnTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcm9pX2FsbG93ZWQ7Cj4gwqDCoMKgwqAgLy8gTWF4aW11bSBudW1iZXIgb2Yg cmVnaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KPiDCoMKgwqDCoCBpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcm9pX21heF9yZWdpb25zOwo+IMKgwqDCoMKgIC8vIFF1YW50aXNhdGlv biByYW5nZSBmb3Igb2Zmc2V0IGNhbGN1bGF0aW9ucy7CoCBTZXQgYnkgY29kZWMtc3BlY2lmaWMK PiDCoMKgwqDCoCAvLyBjb2RlLCBhcyBpdCBtYXkgY2hhbmdlIGJhc2VkIG9uIHBhcmFtZXRlcnMu Cj4gwqDCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJvaV9xdWFudF9yYW5nZTsK PiDCoAo+IC3CoMKgwqAgLy8gVGhlIGVuY29kZXIgZG9lcyBub3Qgc3VwcG9ydCBjcm9wcGluZyBp bmZvcm1hdGlvbiwgc28gd2FybiBhYm91dAo+IC3CoMKgwqAgLy8gaXQgdGhlIGZpcnN0IHRpbWUg d2UgZW5jb3VudGVyIGFueSBub256ZXJvIGNyb3AgZmllbGRzLgo+IC3CoMKgwqAgaW50wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNyb3Bfd2FybmVkOwo+IC3CoMKgwqAgLy8gSWYgdGhlIGRyaXZl ciBkb2VzIG5vdCBzdXBwb3J0IFJPSSB0aGVuIHdhcm4gdGhlIGZpcnN0IHRpbWUgd2UKPiAtwqDC oMKgIC8vIGVuY291bnRlciBhIGZyYW1lIHdpdGggUk9JIHNpZGUgZGF0YS4KPiAtwqDCoMKgIGlu dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByb2lfd2FybmVkOwo+IC0KPiAtwqDCoMKgIEFWRnJh bWXCoMKgwqDCoMKgwqDCoMKgICpmcmFtZTsKPiAtCj4gLcKgwqDCoCAvLyBXaGV0aGVyIHRoZSBk cml2ZXIgc3VwcG9ydCB2YVN5bmNCdWZmZXIKPiAtwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBoYXNfc3luY19idWZmZXJfZnVuYzsKPiAtwqDCoMKgIC8vIFN0b3JlIGJ1ZmZlcmVk IHBpYwo+IC3CoMKgwqAgQVZGaWZvwqDCoMKgwqDCoMKgwqDCoMKgICplbmNvZGVfZmlmbzsKPiAt wqDCoMKgIC8vIE1heCBudW1iZXIgb2YgZnJhbWUgYnVmZmVyZWQgaW4gZW5jb2Rlci4KPiAtwqDC oMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3luY19kZXB0aDsKPiAtCj4gwqDCoMKg wqAgLyoqIEhlYWQgZGF0YSBmb3IgY3VycmVudCBvdXRwdXQgcGt0LCB1c2VkIG9ubHkgZm9yIEFW MS4gKi8KPiDCoMKgwqDCoCAvL3ZvaWTCoCAqaGVhZGVyX2RhdGE7Cj4gwqDCoMKgwqAgLy9zaXpl X3QgaGVhZGVyX2RhdGFfc2l6ZTsKPiBAQCAtMzg5LDMwICsyNDQsOCBAQCB0eXBlZGVmIHN0cnVj dCBWQUFQSUVuY29kZUNvbnRleHQgewo+IMKgwqDCoMKgwqAgKiBUaGlzIGlzIGEgUmVmU3RydWN0 IHJlZmVyZW5jZS4KPiDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqAgVkFCdWZmZXJJRMKgwqDCoMKg ICpjb2RlZF9idWZmZXJfcmVmOwo+IC0KPiAtwqDCoMKgIC8qKiBUYWlsIGRhdGEgb2YgYSBwaWMs IG5vdyBvbmx5IHVzZWQgZm9yIGF2MSByZXBlYXQgZnJhbWUgaGVhZGVyLiAqLwo+IC3CoMKgwqAg QVZQYWNrZXTCoMKgwqDCoMKgwqDCoCAqdGFpbF9wa3Q7Cj4gwqB9IFZBQVBJRW5jb2RlQ29udGV4 dDsKPiDCoAo+IC1lbnVtIHsKPiAtwqDCoMKgIC8vIENvZGVjIHN1cHBvcnRzIGNvbnRyb2xsaW5n IHRoZSBzdWJkaXZpc2lvbiBvZiBwaWN0dXJlcyBpbnRvIHNsaWNlcy4KPiAtwqDCoMKgIEZMQUdf U0xJQ0VfQ09OVFJPTMKgwqDCoMKgwqDCoMKgwqAgPSAxIDw8IDAsCj4gLcKgwqDCoCAvLyBDb2Rl YyBvbmx5IHN1cHBvcnRzIGNvbnN0YW50IHF1YWxpdHkgKG5vIHJhdGUgY29udHJvbCkuCj4gLcKg wqDCoCBGTEFHX0NPTlNUQU5UX1FVQUxJVFlfT05MWSA9IDEgPDwgMSwKPiAtwqDCoMKgIC8vIENv ZGVjIGlzIGludHJhLW9ubHkuCj4gLcKgwqDCoCBGTEFHX0lOVFJBX09OTFnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gMSA8PCAyLAo+IC3CoMKgwqAgLy8gQ29kZWMgc3VwcG9ydHMgQi1waWN0dXJl cy4KPiAtwqDCoMKgIEZMQUdfQl9QSUNUVVJFU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAxIDw8 IDMsCj4gLcKgwqDCoCAvLyBDb2RlYyBzdXBwb3J0cyByZWZlcmVuY2luZyBCLXBpY3R1cmVzLgo+ IC3CoMKgwqAgRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNFU8KgID0gMSA8PCA0LAo+IC3CoMKgwqAg Ly8gQ29kZWMgc3VwcG9ydHMgbm9uLUlEUiBrZXkgcGljdHVyZXMgKHRoYXQgaXMsIGtleSBwaWN0 dXJlcyBkbwo+IC3CoMKgwqAgLy8gbm90IG5lY2Vzc2FyaWx5IGVtcHR5IHRoZSBEUEIpLgo+IC3C oMKgwqAgRkxBR19OT05fSURSX0tFWV9QSUNUVVJFU8KgID0gMSA8PCA1LAo+IC3CoMKgwqAgLy8g Q29kZWMgb3V0cHV0IHBhY2tldCB3aXRob3V0IHRpbWVzdGFtcCBkZWxheSwgd2hpY2ggbWVhbnMg dGhlCj4gLcKgwqDCoCAvLyBvdXRwdXQgcGFja2V0IGhhcyBzYW1lIFBUUyBhbmQgRFRTLgo+IC3C oMKgwqAgRkxBR19USU1FU1RBTVBfTk9fREVMQVnCoMKgwqAgPSAxIDw8IDYsCj4gLX07Cj4gLQo+ IMKgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVUeXBlIHsKPiDCoMKgwqDCoCAvLyBMaXN0IG9m IHN1cHBvcnRlZCBwcm9maWxlcyBhbmQgY29ycmVzcG9uZGluZyBWQUFQSSBwcm9maWxlcy4KPiDC oMKgwqDCoCAvLyAoTXVzdCBlbmQgd2l0aCBBVl9QUk9GSUxFX1VOS05PV04uKQo+IEBAIC01MDUs MTkgKzMzOCw2IEBAIGludCBmZl92YWFwaV9lbmNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KTsKPiDCoMKgwqDCoMKgwqAgIm1heSBub3Qgc3VwcG9ydCBhbGwgZW5jb2RpbmcgZmVhdHVy ZXMpIiwgXAo+IMKgwqDCoMKgwqDCoCBPRkZTRVQoY29tbW9uLmxvd19wb3dlciksIEFWX09QVF9U WVBFX0JPT0wsIFwKPiDCoMKgwqDCoMKgwqAgeyAuaTY0ID0gMCB9LCAwLCAxLCBGTEFHUyB9LCBc Cj4gLcKgwqDCoCB7ICJpZHJfaW50ZXJ2YWwiLCBcCj4gLcKgwqDCoMKgwqAgIkRpc3RhbmNlIChp biBJLWZyYW1lcykgYmV0d2VlbiBJRFIgZnJhbWVzIiwgXAo+IC3CoMKgwqDCoMKgIE9GRlNFVChj b21tb24uaWRyX2ludGVydmFsKSwgQVZfT1BUX1RZUEVfSU5ULCBcCj4gLcKgwqDCoMKgwqAgeyAu aTY0ID0gMCB9LCAwLCBJTlRfTUFYLCBGTEFHUyB9LCBcCj4gLcKgwqDCoCB7ICJiX2RlcHRoIiwg XAo+IC3CoMKgwqDCoMKgICJNYXhpbXVtIEItZnJhbWUgcmVmZXJlbmNlIGRlcHRoIiwgXAo+IC3C oMKgwqDCoMKgIE9GRlNFVChjb21tb24uZGVzaXJlZF9iX2RlcHRoKSwgQVZfT1BUX1RZUEVfSU5U LCBcCj4gLcKgwqDCoMKgwqAgeyAuaTY0ID0gMSB9LCAxLCBJTlRfTUFYLCBGTEFHUyB9LCBcCj4g LcKgwqDCoCB7ICJhc3luY19kZXB0aCIsICJNYXhpbXVtIHByb2Nlc3NpbmcgcGFyYWxsZWxpc20u ICIgXAo+IC3CoMKgwqDCoMKgICJJbmNyZWFzZSB0aGlzIHRvIGltcHJvdmUgc2luZ2xlIGNoYW5u ZWwgcGVyZm9ybWFuY2UuIFRoaXMgb3B0aW9uICIgXAo+IC3CoMKgwqDCoMKgICJkb2Vzbid0IHdv cmsgaWYgZHJpdmVyIGRvZXNuJ3QgaW1wbGVtZW50IHZhU3luY0J1ZmZlciBmdW5jdGlvbi4iLCBc Cj4gLcKgwqDCoMKgwqAgT0ZGU0VUKGNvbW1vbi5hc3luY19kZXB0aCksIEFWX09QVF9UWVBFX0lO VCwgXAo+IC3CoMKgwqDCoMKgIHsgLmk2NCA9IDIgfSwgMSwgTUFYX0FTWU5DX0RFUFRILCBGTEFH UyB9LCBcCj4gwqDCoMKgwqAgeyAibWF4X2ZyYW1lX3NpemUiLCBcCj4gwqDCoMKgwqDCoMKgICJN YXhpbXVtIGZyYW1lIHNpemUgKGluIGJ5dGVzKSIsXAo+IMKgwqDCoMKgwqDCoCBPRkZTRVQoY29t bW9uLm1heF9mcmFtZV9zaXplKSwgQVZfT1BUX1RZUEVfSU5ULCBcCj4gQEAgLTUyOSw3ICszNDks NyBAQCBpbnQgZmZfdmFhcGlfZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCk7Cj4g wqAjZGVmaW5lIFZBQVBJX0VOQ09ERV9SQ19PUFRJT05TIFwKPiDCoMKgwqDCoCB7ICJyY19tb2Rl IixcCj4gwqDCoMKgwqDCoMKgICJTZXQgcmF0ZSBjb250cm9sIG1vZGUiLCBcCj4gLcKgwqDCoMKg wqAgT0ZGU0VUKGNvbW1vbi5leHBsaWNpdF9yY19tb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCBcCj4g K8KgwqDCoMKgwqAgT0ZGU0VUKGNvbW1vbi5iYXNlLmV4cGxpY2l0X3JjX21vZGUpLCBBVl9PUFRf VFlQRV9JTlQsIFwKPiDCoMKgwqDCoMKgwqAgeyAuaTY0ID0gUkNfTU9ERV9BVVRPIH0sIFJDX01P REVfQVVUTywgUkNfTU9ERV9NQVgsIEZMQUdTLCAudW5pdCA9Cj4gInJjX21vZGUiIH0sIFwKPiDC oMKgwqDCoCB7ICJhdXRvIiwgIkNob29zZSBtb2RlIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gb3Ro ZXIgcGFyYW1ldGVycyIsIFwKPiDCoMKgwqDCoMKgwqAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IFJDX01PREVfQVVUTyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPQo+ICJyY19tb2RlIiB9 LCBcCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jIGIvbGliYXZj b2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPiBpbmRleCBhNDZiODgyYWI5Li41MTJiNGUzNzMzIDEw MDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jCj4gKysrIGIvbGliYXZj b2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPiBAQCAtMTA5LDIwICsxMDksMjEgQEAgc3RhdGljIHZv aWQgdmFhcGlfZW5jb2RlX2F2MV90cmFjZV93cml0ZV9sb2codm9pZCAqY3R4LAo+IMKgCj4gwqBz dGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2F2MV9nZXRfZW5jb2Rlcl9jYXBzKEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJp diA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNl X2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMUNvbnRleHTC oMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoAo+IMKgwqDCoMKgIC8vIFN1cmZhY2Vz IG11c3QgYmUgYWxpZ25lZCB0byBzdXBlcmJsb2NrIGJvdW5kYXJpZXMuCj4gLcKgwqDCoCBjdHgt PnN1cmZhY2Vfd2lkdGjCoCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLMKgIHByaXYtPnVzZV8xMjh4 MTI4X3N1cGVyYmxvY2sKPiA/IDEyOCA6IDY0KTsKPiAtwqDCoMKgIGN0eC0+c3VyZmFjZV9oZWln aHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIHByaXYtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sK PiA/IDEyOCA6IDY0KTsKPiArwqDCoMKgIGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRowqAgPSBGRkFM SUdOKGF2Y3R4LT53aWR0aCzCoCBwcml2LQo+ID51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8gMTI4 IDogNjQpOwo+ICvCoMKgwqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0 eC0+aGVpZ2h0LCBwcml2LQo+ID51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8gMTI4IDogNjQpOwo+ IMKgCj4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBhdl9jb2xkIGlu dCB2YWFwaV9lbmNvZGVfYXYxX2NvbmZpZ3VyZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqB7 Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2Y3R4LT5w cml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqAgKmN0eCA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMUNvbnRleHTCoMKgICpw cml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBpbnQgcmV0Owo+IMKgCj4gwqDCoMKg wqAgcmV0ID0gZmZfY2JzX2luaXQoJnByaXYtPmNiYywgQVZfQ09ERUNfSURfQVYxLCBhdmN0eCk7 Cj4gQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVf YXYxX2NvbmZpZ3VyZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqAgcHJpdi0+Y2Jj LT50cmFjZV93cml0ZV9jYWxsYmFjayA9IHZhYXBpX2VuY29kZV9hdjFfdHJhY2Vfd3JpdGVfbG9n Owo+IMKgCj4gwqDCoMKgwqAgaWYgKGN0eC0+cmNfbW9kZS0+cXVhbGl0eSkgewo+IC3CoMKgwqDC oMKgwqDCoCBwcml2LT5xX2lkeF9wID0gYXZfY2xpcChjdHgtPnJjX3F1YWxpdHksIDAsIEFWMV9N QVhfUVVBTlQpOwo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT5xX2lkeF9wID0gYXZfY2xpcChiYXNl X2N0eC0+cmNfcXVhbGl0eSwgMCwgQVYxX01BWF9RVUFOVCk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBp ZiAoZmFicyhhdmN0eC0+aV9xdWFudF9mYWN0b3IpID4gMC4wKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwcml2LT5xX2lkeF9pZHIgPQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGF2X2NsaXAoKGZhYnMoYXZjdHgtPmlfcXVhbnRfZmFjdG9yKSAqIHByaXYtPnFfaWR4X3DC oCArCj4gQEAgLTM1NSw2ICszNTYsNyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2F2MV93 cml0ZV9zZXF1ZW5jZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgCj4gwqBzdGF0 aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KQo+IMKgewo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDC oMKgwqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29k ZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9k YXRhOwo+IMKgwqDCoMKgIFZBQVBJRW5jb2RlQVYxQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoMKg ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBBVjFSYXdPQlXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpzaF9vYnUgPSAmcHJpdi0+c2g7Cj4gQEAg LTM2Nyw3ICszNjksNyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NlcXVl bmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqAgbWVtc2V0KHNoX29i dSwgMCwgc2l6ZW9mKCpzaF9vYnUpKTsKPiDCoMKgwqDCoCBzaF9vYnUtPmhlYWRlci5vYnVfdHlw ZSA9IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSOwo+IMKgCj4gLcKgwqDCoCBkZXNjID0gYXZfcGl4 X2ZtdF9kZXNjX2dldChwcml2LT5jb21tb24uaW5wdXRfZnJhbWVzLT5zd19mb3JtYXQpOwo+ICvC oMKgwqAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+ c3dfZm9ybWF0KTsKPiDCoMKgwqDCoCBhdl9hc3NlcnQwKGRlc2MpOwo+IMKgCj4gwqDCoMKgwqAg c2gtPnNlcV9wcm9maWxlwqAgPSBhdmN0eC0+cHJvZmlsZTsKPiBAQCAtNDE5LDcgKzQyMSw3IEBA IHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFyYW1zKEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZnJhbWVyYXRlID0g MDsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgbGV2ZWwgPSBmZl9hdjFfZ3Vlc3NfbGV2ZWwoYXZj dHgtPmJpdF9yYXRlLCBwcml2LT50aWVyLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnN1cmZhY2Vfd2lk dGgsIGN0eC0+c3VyZmFjZV9oZWlnaHQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2VfY3R4LT5zdXJmYWNl X3dpZHRoLCBiYXNlX2N0eC0KPiA+c3VyZmFjZV9oZWlnaHQsCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2 LT50aWxlX3Jvd3MgKiBwcml2LT50aWxlX2NvbHMsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT50aWxl X2NvbHMsIGZyYW1lcmF0ZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAobGV2ZWwpIHsKPiBAQCAt NDM2LDggKzQzOCw4IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2VxdWVu Y2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCB2c2VxLT5zZXFfbGV2 ZWxfaWR4wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBzaC0+c2VxX2xldmVsX2lkeFswXTsKPiDCoMKg wqDCoCB2c2VxLT5zZXFfdGllcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHNoLT5z ZXFfdGllclswXTsKPiDCoMKgwqDCoCB2c2VxLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSA9IHNo LT5vcmRlcl9oaW50X2JpdHNfbWludXNfMTsKPiAtwqDCoMKgIHZzZXEtPmludHJhX3BlcmlvZMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmdvcF9zaXplOwo+IC3CoMKgwqAgdnNlcS0+aXBf cGVyaW9kwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+Yl9wZXJfcCArIDE7Cj4g K8KgwqDCoCB2c2VxLT5pbnRyYV9wZXJpb2TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gYmFzZV9j dHgtPmdvcF9zaXplOwo+ICvCoMKgwqAgdnNlcS0+aXBfcGVyaW9kwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9IGJhc2VfY3R4LT5iX3Blcl9wICsgMTsKPiDCoAo+IMKgwqDCoMKgIHZzZXEt PnNlcV9maWVsZHMuYml0cy5lbmFibGVfb3JkZXJfaGludCA9IHNoLT5lbmFibGVfb3JkZXJfaGlu dDsKPiDCoAo+IEBAIC00NjQsMTIgKzQ2NiwxMyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2Rl X2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoHsKPiDC oMKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUFWMUNvbnRleHTCoMKg wqDCoMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+IC3CoMKgwqAgVkFBUElF bmNvZGVBVjFQaWN0dXJlwqDCoMKgwqDCoMKgwqDCoMKgICpocGljID0gcGljLT5wcml2X2RhdGE7 Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqAgKmJhc2VfcGljID0g KEhXQmFzZUVuY29kZVBpY3R1cmUgKilwaWM7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMVBpY3R1 cmXCoMKgwqDCoMKgwqDCoMKgwqAgKmhwaWMgPSBiYXNlX3BpYy0+cHJpdl9kYXRhOwo+IMKgwqDC oMKgIEFWMVJhd09CVcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpmaF9v YnUgPSAmcHJpdi0+Zmg7Cj4gwqDCoMKgwqAgQVYxUmF3RnJhbWVIZWFkZXLCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKmZoID0gJmZoX29idS0+b2J1LmZyYW1lLmhlYWRlcjsKPiDCoMKg wqDCoCBWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEgKnZwaWMgPSBwaWMtPmNvZGVjX3Bp Y3R1cmVfcGFyYW1zOwo+IMKgwqDCoMKgIENvZGVkQml0c3RyZWFtRnJhZ21lbnTCoMKgwqDCoMKg wqDCoMKgwqAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsKPiAtwqDCoMKgIFZBQVBJRW5jb2Rl UGljdHVyZcKgwqDCoCAqcmVmOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZcKgwqDCoCAq cmVmOwo+IMKgwqDCoMKgIFZBQVBJRW5jb2RlQVYxUGljdHVyZSAqaHJlZjsKPiDCoMKgwqDCoCBp bnQgc2xvdCwgaTsKPiDCoMKgwqDCoCBpbnQgcmV0Owo+IEBAIC00NzgsMjQgKzQ4MSwyNCBAQCBz dGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWND b250ZXh0ICphdmN0eCwKPiDCoAo+IMKgwqDCoMKgIG1lbXNldChmaF9vYnUsIDAsIHNpemVvZigq Zmhfb2J1KSk7Cj4gwqDCoMKgwqAgcGljLT5uYl9zbGljZXMgPSBwcml2LT50aWxlX2dyb3VwczsK PiAtwqDCoMKgIHBpYy0+bm9uX2luZGVwZW5kZW50X2ZyYW1lID0gcGljLT5lbmNvZGVfb3JkZXIg PCBwaWMtPmRpc3BsYXlfb3JkZXI7Cj4gK8KgwqDCoCBwaWMtPm5vbl9pbmRlcGVuZGVudF9mcmFt ZSA9IGJhc2VfcGljLT5lbmNvZGVfb3JkZXIgPCBiYXNlX3BpYy0KPiA+ZGlzcGxheV9vcmRlcjsK PiDCoMKgwqDCoCBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfRlJBTUVfSEVBREVS Owo+IMKgwqDCoMKgIGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVsZCA9IDE7Cj4gwqAK PiAtwqDCoMKgIHN3aXRjaCAocGljLT50eXBlKSB7Cj4gK8KgwqDCoCBzd2l0Y2ggKGJhc2VfcGlj LT50eXBlKSB7Cj4gwqDCoMKgwqAgY2FzZSBQSUNUVVJFX1RZUEVfSURSOgo+IC3CoMKgwqDCoMKg wqDCoCBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSA9PSAwIHx8IHBpYy0+bmJfcmVmc1sxXSk7 Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoYmFzZV9waWMtPm5iX3JlZnNbMF0gPT0gMCB8 fCBiYXNlX3BpYy0+bmJfcmVmc1sxXSk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmaC0+ZnJhbWVfdHlw ZSA9IEFWMV9GUkFNRV9LRVk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmaC0+cmVmcmVzaF9mcmFtZV9m bGFncyA9IDB4RkY7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmaC0+YmFzZV9xX2lkeCA9IHByaXYtPnFf aWR4X2lkcjsKPiDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPnNsb3QgPSAwOwo+IC3CoMKgwqDCoMKg wqDCoCBocGljLT5sYXN0X2lkcl9mcmFtZSA9IHBpYy0+ZGlzcGxheV9vcmRlcjsKPiArwqDCoMKg wqDCoMKgwqAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlcjsK PiDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX1A6 Cj4gLcKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdKTsKPiArwqDCoMKg wqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+bmJfcmVmc1swXSk7Cj4gwqDCoMKgwqDCoMKg wqDCoCBmaC0+ZnJhbWVfdHlwZSA9IEFWMV9GUkFNRV9JTlRFUjsKPiDCoMKgwqDCoMKgwqDCoMKg IGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhfcDsKPiAtwqDCoMKgwqDCoMKgwqAgcmVmID0g cGljLT5yZWZzWzBdW3BpYy0+bmJfcmVmc1swXSAtIDFdOwo+ICvCoMKgwqDCoMKgwqDCoCByZWYg PSBiYXNlX3BpYy0+cmVmc1swXVtiYXNlX3BpYy0+bmJfcmVmc1swXSAtIDFdOwo+IMKgwqDCoMKg wqDCoMKgwqAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+ c2xvdCA9ICFocmVmLT5zbG90Owo+IMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+bGFzdF9pZHJfZnJh bWUgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiBAQCAtNTEwLDggKzUxMyw4IEBAIHN0YXRpYyBp bnQKPiB2YWFwaV9lbmNvZGVfYXYxX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRz LnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9MQVNUOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oCAvKiogc2V0IHRoZSAybmQgbmVhcmVzdCBmcmFtZSBpbiBMMCBhcyBHb2xkZW4gZnJhbWUuICov Cj4gLcKgwqDCoMKgwqDCoMKgIGlmIChwaWMtPm5iX3JlZnNbMF0gPiAxKSB7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmVmID0gcGljLT5yZWZzWzBdW3BpYy0+bmJfcmVmc1swXSAtIDJdOwo+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoYmFzZV9waWMtPm5iX3JlZnNbMF0gPiAxKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmVmID0gYmFzZV9waWMtPnJlZnNbMF1bYmFzZV9waWMtPm5iX3Jl ZnNbMF0gLSAyXTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHJlZiA9IHJlZi0+cHJpdl9k YXRhOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmaC0+cmVmX2ZyYW1lX2lkeFszXSA9IGhy ZWYtPnNsb3Q7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZoLT5yZWZfb3JkZXJfaGludFto cmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtIGhyZWYtCj4gPmxhc3RfaWRyX2ZyYW1l Owo+IEBAIC01MTksNyArNTIyLDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9hdjFfaW5p dF9waWN0dXJlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDC oCB9Cj4gwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiDCoMKgwqDCoCBjYXNlIFBJQ1RVUkVfVFlQ RV9COgo+IC3CoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSAmJiBwaWMt Pm5iX3JlZnNbMV0pOwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT5uYl9y ZWZzWzBdICYmIGJhc2VfcGljLT5uYl9yZWZzWzFdKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGZoLT5m cmFtZV90eXBlID0gQVYxX0ZSQU1FX0lOVEVSOwo+IMKgwqDCoMKgwqDCoMKgwqAgZmgtPmJhc2Vf cV9pZHggPSBwcml2LT5xX2lkeF9iOwo+IMKgwqDCoMKgwqDCoMKgwqAgZmgtPnJlZnJlc2hfZnJh bWVfZmxhZ3MgPSAweDA7Cj4gQEAgLTUzMiw3ICs1MzUsNyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlf ZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDC oMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4 MCA9IEFWMV9SRUZfRlJBTUVfTEFTVDsKPiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9mcmFt ZV9jdHJsX2wxLmZpZWxkcy5zZWFyY2hfaWR4MCA9IEFWMV9SRUZfRlJBTUVfQldEUkVGOwo+IMKg Cj4gLcKgwqDCoMKgwqDCoMKgIHJlZsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IHBpYy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0gLSAxXTsK PiArwqDCoMKgwqDCoMKgwqAgcmVmwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgID0gYmFzZV9waWMtPnJlZnNbMF1bYmFzZV9waWMtCj4gPm5iX3Jl ZnNbMF0gLSAxXTsKPiDCoMKgwqDCoMKgwqDCoMKgIGhyZWbCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcmVmLT5wcml2X2RhdGE7Cj4gwqDCoMKg wqDCoMKgwqDCoCBocGljLT5sYXN0X2lkcl9mcmFtZcKgwqDCoMKgwqDCoMKgwqDCoMKgID0gaHJl Zi0+bGFzdF9pZHJfZnJhbWU7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmaC0+cHJpbWFyeV9yZWZfZnJh bWXCoMKgwqDCoMKgwqDCoMKgwqAgPSBocmVmLT5zbG90Owo+IEBAIC01NDEsNyArNTQ0LDcgQEAg c3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNvZGVj Q29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZoLT5yZWZfZnJhbWVf aWR4W2ldID0gaHJlZi0+c2xvdDsKPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqDC oMKgwqDCoCByZWbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBwaWMtPnJlZnNbMV1bcGljLT5uYl9yZWZzWzFdIC0gMV07Cj4gK8KgwqDCoMKg wqDCoMKgIHJlZsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IGJhc2VfcGljLT5yZWZzWzFdW2Jhc2VfcGljLQo+ID5uYl9yZWZzWzFdIC0gMV07 Cj4gwqDCoMKgwqDCoMKgwqDCoCBocmVmwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IHJlZi0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqAg ZmgtPnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gaHJl Zi0KPiA+bGFzdF9pZHJfZnJhbWU7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSBBVjFfUkVG X0ZSQU1FX0dPTERFTjsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gQEAgLTU1Miwx MyArNTU1LDEzIEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfYXYxX2luaXRfcGljdHVyZV9w YXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0 MCgwICYmICJpbnZhbGlkIHBpY3R1cmUgdHlwZSIpOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKg wqAgZmgtPnNob3dfZnJhbWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBwaWMtPmRp c3BsYXlfb3JkZXIgPD0gcGljLT5lbmNvZGVfb3JkZXI7Cj4gK8KgwqDCoCBmaC0+c2hvd19mcmFt ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGJhc2VfcGljLT5kaXNwbGF5X29yZGVy IDw9IGJhc2VfcGljLQo+ID5lbmNvZGVfb3JkZXI7Cj4gwqDCoMKgwqAgZmgtPnNob3dhYmxlX2Zy YW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGZoLT5mcmFtZV90eXBlICE9IEFWMV9GUkFNRV9L RVk7Cj4gwqDCoMKgwqAgZmgtPmZyYW1lX3dpZHRoX21pbnVzXzHCoMKgwqDCoMKgwqAgPSBhdmN0 eC0+d2lkdGggLSAxOwo+IMKgwqDCoMKgIGZoLT5mcmFtZV9oZWlnaHRfbWludXNfMcKgwqDCoMKg wqAgPSBhdmN0eC0+aGVpZ2h0IC0gMTsKPiDCoMKgwqDCoCBmaC0+cmVuZGVyX3dpZHRoX21pbnVz XzHCoMKgwqDCoMKgID0gZmgtPmZyYW1lX3dpZHRoX21pbnVzXzE7Cj4gwqDCoMKgwqAgZmgtPnJl bmRlcl9oZWlnaHRfbWludXNfMcKgwqDCoMKgID0gZmgtPmZyYW1lX2hlaWdodF9taW51c18xOwo+ IC3CoMKgwqAgZmgtPm9yZGVyX2hpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBw aWMtPmRpc3BsYXlfb3JkZXIgLSBocGljLQo+ID5sYXN0X2lkcl9mcmFtZTsKPiArwqDCoMKgIGZo LT5vcmRlcl9oaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gYmFzZV9waWMtPmRp c3BsYXlfb3JkZXIgLSBocGljLQo+ID5sYXN0X2lkcl9mcmFtZTsKPiDCoMKgwqDCoCBmaC0+dGls ZV9jb2xzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBwcml2LT50aWxlX2NvbHM7 Cj4gwqDCoMKgwqAgZmgtPnRpbGVfcm93c8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gcHJpdi0+dGlsZV9yb3dzOwo+IMKgwqDCoMKgIGZoLT50aWxlX2NvbHNfbG9nMsKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgPSBwcml2LT50aWxlX2NvbHNfbG9nMjsKPiBAQCAtNjI0LDEzICs2Mjcs MTMgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJlX3BhcmFtcyhB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoCB2cGljLT5yZWZlcmVuY2Vf ZnJhbWVzW2ldID0gVkFfSU5WQUxJRF9TVVJGQUNFOwo+IMKgCj4gwqDCoMKgwqAgZm9yIChpID0g MDsgaSA8IE1BWF9SRUZFUkVOQ0VfTElTVF9OVU07IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoCBm b3IgKGludCBqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1tpXTsgaisrKSB7Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpyZWZfcGljID0gcGljLT5yZWZzW2ldW2pd Owo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBqID0gMDsgaiA8IGJhc2VfcGljLT5uYl9yZWZz W2ldOyBqKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJl ICpyZWZfcGljID0gYmFzZV9waWMtPnJlZnNbaV1bal07Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2xvdCA9ICgoVkFBUElFbmNvZGVBVjFQaWN0dXJlKilyZWZfcGljLT5wcml2X2Rh dGEpLT5zbG90Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHZwaWMtPnJl ZmVyZW5jZV9mcmFtZXNbc2xvdF0gPT0gVkFfSU5WQUxJRF9TVVJGQUNFKTsKPiDCoAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbc2xvdF0gPSByZWZfcGlj LT5yZWNvbl9zdXJmYWNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZmVyZW5j ZV9mcmFtZXNbc2xvdF0gPSAoKFZBQVBJRW5jb2RlUGljdHVyZSAqKXJlZl9waWMpLQo+ID5yZWNv bl9zdXJmYWNlOwo+IMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgIH0KPiDCoAo+IEBAIC02 NTEsNyArNjU0LDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJl X3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoCB2cGljLT5i aXRfb2Zmc2V0X2NkZWZfcGFyYW1zwqDCoMKgwqDCoMKgwqDCoCA9IHByaXYtPmNkZWZfc3RhcnRf b2Zmc2V0Owo+IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+c2l6ZV9pbl9iaXRzX2NkZWZfcGFyYW1z wqDCoMKgwqDCoMKgID0gcHJpdi0+Y2RlZl9wYXJhbV9zaXplOwo+IMKgwqDCoMKgwqDCoMKgwqAg dnBpYy0+c2l6ZV9pbl9iaXRzX2ZyYW1lX2hkcl9vYnXCoMKgwqDCoCA9IHByaXYtPmZoX2RhdGFf bGVuOwo+IC3CoMKgwqDCoMKgwqDCoCB2cGljLT5ieXRlX29mZnNldF9mcmFtZV9oZHJfb2J1X3Np emUgPSAoKChwaWMtPnR5cGUgPT0KPiBQSUNUVVJFX1RZUEVfSURSKSA/Cj4gK8KgwqDCoMKgwqDC oMKgIHZwaWMtPmJ5dGVfb2Zmc2V0X2ZyYW1lX2hkcl9vYnVfc2l6ZSA9ICgoKGJhc2VfcGljLT50 eXBlID09Cj4gUElDVFVSRV9UWVBFX0lEUikgPwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcHJpdi0+c2hfZGF0YV9sZW4gLyA4IDogMCkgKwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGZoX29idS0KPiA+aGVhZGVyLm9idV9leHRlbnNpb25f ZmxhZyA/Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAyIDogMSkpOwo+ IEBAIC02OTMsMTQgKzY5NiwxNSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2F2MV93cml0 ZV9waWN0dXJlX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqAgQ29kZWRC aXRzdHJlYW1BVjFDb250ZXh0ICpjYmN0eCA9IHByaXYtPmNiYy0+cHJpdl9kYXRhOwo+IMKgwqDC oMKgIEFWMVJhd09CVcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmZoX29idSA9ICZwcml2 LT5maDsKPiDCoMKgwqDCoCBBVjFSYXdGcmFtZUhlYWRlcsKgwqDCoMKgwqDCoCAqcmVwX2ZoID0g JmZoX29idS0+b2J1LmZyYW1lX2hlYWRlcjsKPiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUg KmJhc2VfcGljwqDCoCA9IChIV0Jhc2VFbmNvZGVQaWN0dXJlICopcGljOwo+IMKgwqDCoMKgIFZB QVBJRW5jb2RlQVYxUGljdHVyZSAqaHJlZjsKPiDCoMKgwqDCoCBpbnQgcmV0ID0gMDsKPiDCoAo+ IMKgwqDCoMKgIHBpYy0+dGFpbF9zaXplID0gMDsKPiDCoMKgwqDCoCAvKiogUGFjayByZXBlYXQg ZnJhbWUgaGVhZGVyLiAqLwo+IC3CoMKgwqAgaWYgKHBpYy0+ZGlzcGxheV9vcmRlciA+IHBpYy0+ ZW5jb2RlX29yZGVyKSB7Cj4gK8KgwqDCoCBpZiAoYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIgPiBi YXNlX3BpYy0+ZW5jb2RlX29yZGVyKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBtZW1zZXQoZmhfb2J1 LCAwLCBzaXplb2YoKmZoX29idSkpOwo+IC3CoMKgwqDCoMKgwqDCoCBocmVmID0gcGljLT5yZWZz WzBdW3BpYy0+bmJfcmVmc1swXSAtIDFdLT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgIGhy ZWYgPSBiYXNlX3BpYy0+cmVmc1swXVtiYXNlX3BpYy0+bmJfcmVmc1swXSAtIDFdLT5wcml2X2Rh dGE7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVf RlJBTUVfSEVBREVSOwo+IMKgwqDCoMKgwqDCoMKgwqAgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19z aXplX2ZpZWxkID0gMTsKPiDCoAo+IEBAIC04NjIsNiArODY2LDcgQEAgc3RhdGljIGF2X2NvbGQg aW50IHZhYXBpX2VuY29kZV9hdjFfY2xvc2UoQVZDb2RlY0NvbnRleHQKPiAqYXZjdHgpCj4gwqAj ZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09E SU5HX1BBUkFNKQo+IMKgCj4gwqBzdGF0aWMgY29uc3QgQVZPcHRpb24gdmFhcGlfZW5jb2RlX2F2 MV9vcHRpb25zW10gPSB7Cj4gK8KgwqDCoCBIV19CQVNFX0VOQ09ERV9DT01NT05fT1BUSU9OUywK PiDCoMKgwqDCoCBWQUFQSV9FTkNPREVfQ09NTU9OX09QVElPTlMsCj4gwqDCoMKgwqAgVkFBUElf RU5DT0RFX1JDX09QVElPTlMsCj4gwqDCoMKgwqAgeyAicHJvZmlsZSIsICJTZXQgcHJvZmlsZSAo c2VxX3Byb2ZpbGUpIiwKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfaDI2 NC5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfaDI2NC5jCj4gaW5kZXggMzdkZjkxMDNhZS4u YWEwMTFiYTMwNyAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9oMjY0LmMK PiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9oMjY0LmMKPiBAQCAtMjM0LDcgKzIzNCw3 IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF93cml0ZV9leHRyYV9oZWFkZXIoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gZmFpbDsKPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKgwqDCoMKgwqDCoMKgIGlmIChwcml2 LT5zZWlfbmVlZGVkICYgU0VJX1RJTUlORykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChwaWMtPmJhc2UudHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKSB7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gZmZfY2JzX3NlaV9hZGRfbWVzc2FnZShwcml2 LT5jYmMsIGF1LCAxLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTRUlfVFlQ RV9CVUZGRVJJTkdfUEVSSU9ELAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm cHJpdi0+c2VpX2J1ZmZlcmluZ19wZXJpb2QsCj4gTlVMTCk7Cj4gQEAgLTI5Niw2ICsyOTYsNyBA QCBmYWlsOgo+IMKgCj4gwqBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9oMjY0X2luaXRfc2VxdWVu Y2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiArwqDCoMKgIEhXQmFzZUVu Y29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVIMjY0 Q29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDC oMKgwqDCoCBIMjY0UmF3U1BTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqc3BzID0gJnByaXYtPnJhd19zcHM7Cj4gQEAgLTMwOCw3ICszMDksNyBAQCBzdGF0 aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjRfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQo+IMKgwqDCoMKgIG1lbXNldChzcHMsIDAsIHNpemVvZigqc3BzKSk7Cj4g wqDCoMKgwqAgbWVtc2V0KHBwcywgMCwgc2l6ZW9mKCpwcHMpKTsKPiDCoAo+IC3CoMKgwqAgZGVz YyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocHJpdi0+Y29tbW9uLmlucHV0X2ZyYW1lcy0+c3dfZm9y bWF0KTsKPiArwqDCoMKgIGRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KGJhc2VfY3R4LT5pbnB1 dF9mcmFtZXMtPnN3X2Zvcm1hdCk7Cj4gwqDCoMKgwqAgYXZfYXNzZXJ0MChkZXNjKTsKPiDCoMKg wqDCoCBpZiAoZGVzYy0+bmJfY29tcG9uZW50cyA9PSAxIHx8IGRlc2MtPmxvZzJfY2hyb21hX3cg IT0gMSB8fCBkZXNjLQo+ID5sb2cyX2Nocm9tYV9oICE9IDEpIHsKPiDCoMKgwqDCoMKgwqDCoMKg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2hyb21hIGZvcm1hdCBvZiBpbnB1dCBwaXhl bCBmb3JtYXQgIgo+IEBAIC0zMjcsMTggKzMyOCwxOCBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5j b2RlX2gyNjRfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKg wqDCoMKgwqDCoMKgwqAgc3BzLT5jb25zdHJhaW50X3NldDFfZmxhZyA9IDE7Cj4gwqAKPiDCoMKg wqDCoCBpZiAoYXZjdHgtPnByb2ZpbGUgPT0gQVZfUFJPRklMRV9IMjY0X0hJR0ggfHwgYXZjdHgt PnByb2ZpbGUgPT0KPiBBVl9QUk9GSUxFX0gyNjRfSElHSF8xMCkKPiAtwqDCoMKgwqDCoMKgwqAg c3BzLT5jb25zdHJhaW50X3NldDNfZmxhZyA9IGN0eC0+Z29wX3NpemUgPT0gMTsKPiArwqDCoMKg wqDCoMKgwqAgc3BzLT5jb25zdHJhaW50X3NldDNfZmxhZyA9IGJhc2VfY3R4LT5nb3Bfc2l6ZSA9 PSAxOwo+IMKgCj4gwqDCoMKgwqAgaWYgKGF2Y3R4LT5wcm9maWxlID09IEFWX1BST0ZJTEVfSDI2 NF9NQUlOIHx8Cj4gwqDCoMKgwqDCoMKgwqDCoCBhdmN0eC0+cHJvZmlsZSA9PSBBVl9QUk9GSUxF X0gyNjRfSElHSCB8fCBhdmN0eC0+cHJvZmlsZSA9PQo+IEFWX1BST0ZJTEVfSDI2NF9ISUdIXzEw KSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBzcHMtPmNvbnN0cmFpbnRfc2V0NF9mbGFnID0gMTsKPiAt wqDCoMKgwqDCoMKgwqAgc3BzLT5jb25zdHJhaW50X3NldDVfZmxhZyA9IGN0eC0+Yl9wZXJfcCA9 PSAwOwo+ICvCoMKgwqDCoMKgwqDCoCBzcHMtPmNvbnN0cmFpbnRfc2V0NV9mbGFnID0gYmFzZV9j dHgtPmJfcGVyX3AgPT0gMDsKPiDCoMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKgIGlmIChjdHgtPmdv cF9zaXplID09IDEpCj4gK8KgwqDCoCBpZiAoYmFzZV9jdHgtPmdvcF9zaXplID09IDEpCj4gwqDC oMKgwqDCoMKgwqDCoCBwcml2LT5kcGJfZnJhbWVzID0gMDsKPiDCoMKgwqDCoCBlbHNlCj4gLcKg wqDCoMKgwqDCoMKgIHByaXYtPmRwYl9mcmFtZXMgPSAxICsgY3R4LT5tYXhfYl9kZXB0aDsKPiAr wqDCoMKgwqDCoMKgwqAgcHJpdi0+ZHBiX2ZyYW1lcyA9IDEgKyBiYXNlX2N0eC0+bWF4X2JfZGVw dGg7Cj4gwqAKPiDCoMKgwqDCoCBpZiAoYXZjdHgtPmxldmVsICE9IEFWX0xFVkVMX1VOS05PV04p IHsKPiDCoMKgwqDCoMKgwqDCoMKgIHNwcy0+bGV2ZWxfaWRjID0gYXZjdHgtPmxldmVsOwo+IEBA IC0zNzUsNyArMzc2LDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9oMjY0X2luaXRfc2Vx dWVuY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCBzcHMtPmJpdF9k ZXB0aF9jaHJvbWFfbWludXM4ID0gYml0X2RlcHRoIC0gODsKPiDCoAo+IMKgwqDCoMKgIHNwcy0+ bG9nMl9tYXhfZnJhbWVfbnVtX21pbnVzNCA9IDQ7Cj4gLcKgwqDCoCBzcHMtPnBpY19vcmRlcl9j bnRfdHlwZcKgwqDCoMKgwqDCoMKgID0gY3R4LT5tYXhfYl9kZXB0aCA/IDAgOiAyOwo+ICvCoMKg wqAgc3BzLT5waWNfb3JkZXJfY250X3R5cGXCoMKgwqDCoMKgwqDCoCA9IGJhc2VfY3R4LT5tYXhf Yl9kZXB0aCA/IDAgOiAyOwo+IMKgwqDCoMKgIGlmIChzcHMtPnBpY19vcmRlcl9jbnRfdHlwZSA9 PSAwKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBzcHMtPmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNi X21pbnVzNCA9IDQ7Cj4gwqDCoMKgwqAgfQo+IEBAIC01MDIsOCArNTAzLDggQEAgc3RhdGljIGlu dAo+IHZhYXBpX2VuY29kZV9oMjY0X2luaXRfc2VxdWVuY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0 ICphdmN0eCkKPiDCoMKgwqDCoCBzcHMtPnZ1aS5tb3Rpb25fdmVjdG9yc19vdmVyX3BpY19ib3Vu ZGFyaWVzX2ZsYWcgPSAxOwo+IMKgwqDCoMKgIHNwcy0+dnVpLmxvZzJfbWF4X212X2xlbmd0aF9o b3Jpem9udGFsID0gMTU7Cj4gwqDCoMKgwqAgc3BzLT52dWkubG9nMl9tYXhfbXZfbGVuZ3RoX3Zl cnRpY2FswqDCoCA9IDE1Owo+IC3CoMKgwqAgc3BzLT52dWkubWF4X251bV9yZW9yZGVyX2ZyYW1l c8KgwqDCoMKgwqDCoMKgID0gY3R4LT5tYXhfYl9kZXB0aDsKPiAtwqDCoMKgIHNwcy0+dnVpLm1h eF9kZWNfZnJhbWVfYnVmZmVyaW5nwqDCoMKgwqDCoMKgID0gY3R4LT5tYXhfYl9kZXB0aCArIDE7 Cj4gK8KgwqDCoCBzcHMtPnZ1aS5tYXhfbnVtX3Jlb3JkZXJfZnJhbWVzwqDCoMKgwqDCoMKgwqAg PSBiYXNlX2N0eC0+bWF4X2JfZGVwdGg7Cj4gK8KgwqDCoCBzcHMtPnZ1aS5tYXhfZGVjX2ZyYW1l X2J1ZmZlcmluZ8KgwqDCoMKgwqDCoCA9IGJhc2VfY3R4LT5tYXhfYl9kZXB0aCArIDE7Cj4gwqAK PiDCoMKgwqDCoCBwcHMtPm5hbF91bml0X2hlYWRlci5uYWxfcmVmX2lkYyA9IDM7Cj4gwqDCoMKg wqAgcHBzLT5uYWxfdW5pdF9oZWFkZXIubmFsX3VuaXRfdHlwZSA9IEgyNjRfTkFMX1BQUzsKPiBA QCAtNTM2LDkgKzUzNyw5IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3Nl cXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqAgKnZzZXEgPSAo VkFFbmNTZXF1ZW5jZVBhcmFtZXRlckJ1ZmZlckgyNjQpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIC5z ZXFfcGFyYW1ldGVyX3NldF9pZCA9IHNwcy0+c2VxX3BhcmFtZXRlcl9zZXRfaWQsCj4gwqDCoMKg wqDCoMKgwqDCoCAubGV2ZWxfaWRjwqDCoMKgwqDCoMKgwqAgPSBzcHMtPmxldmVsX2lkYywKPiAt wqDCoMKgwqDCoMKgwqAgLmludHJhX3BlcmlvZMKgwqDCoMKgID0gY3R4LT5nb3Bfc2l6ZSwKPiAt wqDCoMKgwqDCoMKgwqAgLmludHJhX2lkcl9wZXJpb2QgPSBjdHgtPmdvcF9zaXplLAo+IC3CoMKg wqDCoMKgwqDCoCAuaXBfcGVyaW9kwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmJfcGVyX3AgKyAxLAo+ ICvCoMKgwqDCoMKgwqDCoCAuaW50cmFfcGVyaW9kwqDCoMKgwqAgPSBiYXNlX2N0eC0+Z29wX3Np emUsCj4gK8KgwqDCoMKgwqDCoMKgIC5pbnRyYV9pZHJfcGVyaW9kID0gYmFzZV9jdHgtPmdvcF9z aXplLAo+ICvCoMKgwqDCoMKgwqDCoCAuaXBfcGVyaW9kwqDCoMKgwqDCoMKgwqAgPSBiYXNlX2N0 eC0+Yl9wZXJfcCArIDEsCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIC5iaXRzX3Blcl9zZWNvbmTC oMKgwqDCoMKgwqAgPSBjdHgtPnZhX2JpdF9yYXRlLAo+IMKgwqDCoMKgwqDCoMKgwqAgLm1heF9u dW1fcmVmX2ZyYW1lc8KgwqDCoCA9IHNwcy0+bWF4X251bV9yZWZfZnJhbWVzLAo+IEBAIC02MjIs MTkgKzYyMywyMCBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjRfaW5pdF9zZXF1ZW5j ZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgc3RhdGljIGludCB2YWFwaV9lbmNv ZGVfaDI2NF9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUg KnBpYykKPiDCoHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNv ZGVDb250ZXh0wqDCoMKgwqDCoMKgwqDCoCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ IMKgwqDCoMKgIFZBQVBJRW5jb2RlSDI2NENvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqAgKnByaXYg PSBhdmN0eC0+cHJpdl9kYXRhOwo+IC3CoMKgwqAgVkFBUElFbmNvZGVIMjY0UGljdHVyZcKgwqDC oMKgwqDCoMKgwqDCoCAqaHBpYyA9IHBpYy0+cHJpdl9kYXRhOwo+IC3CoMKgwqAgVkFBUElFbmNv ZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnByZXYgPSBwaWMtPnByZXY7Cj4g K8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqDCoCAqYmFzZV9waWMgPSAo SFdCYXNlRW5jb2RlUGljdHVyZSAqKXBpYzsKPiArwqDCoMKgIFZBQVBJRW5jb2RlSDI2NFBpY3R1 cmXCoMKgwqDCoMKgwqDCoMKgwqAgKmhwaWMgPSBiYXNlX3BpYy0+cHJpdl9kYXRhOwo+ICvCoMKg wqAgSFdCYXNlRW5jb2RlUGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcHJldiA9IGJh c2VfcGljLT5wcmV2Owo+IMKgwqDCoMKgIFZBQVBJRW5jb2RlSDI2NFBpY3R1cmXCoMKgwqDCoMKg wqDCoMKgICpocHJldiA9IHByZXYgPyBwcmV2LT5wcml2X2RhdGEgOiBOVUxMOwo+IMKgwqDCoMKg IFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckgyNjQgKnZwaWMgPSBwaWMtPmNvZGVjX3BpY3R1 cmVfcGFyYW1zOwo+IMKgwqDCoMKgIGludCBpLCBqID0gMDsKPiDCoAo+IC3CoMKgwqAgaWYgKHBp Yy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKSB7Cj4gLcKgwqDCoMKgwqDCoMKgIGF2X2Fzc2Vy dDAocGljLT5kaXNwbGF5X29yZGVyID09IHBpYy0+ZW5jb2RlX29yZGVyKTsKPiArwqDCoMKgIGlm IChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKSB7Cj4gK8KgwqDCoMKgwqDCoMKg IGF2X2Fzc2VydDAoYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIgPT0gYmFzZV9waWMtPmVuY29kZV9v cmRlcik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPmZyYW1lX251bcKgwqDCoMKgwqAg PSAwOwo+IC3CoMKgwqDCoMKgwqDCoCBocGljLT5sYXN0X2lkcl9mcmFtZSA9IHBpYy0+ZGlzcGxh eV9vcmRlcjsKPiArwqDCoMKgwqDCoMKgwqAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBiYXNlX3Bp Yy0+ZGlzcGxheV9vcmRlcjsKPiDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPmlkcl9waWNfaWTCoMKg wqDCoCA9IGhwcmV2ID8gaHByZXYtPmlkcl9waWNfaWQgKyAxIDogMDsKPiDCoAo+IMKgwqDCoMKg wqDCoMKgwqAgaHBpYy0+cHJpbWFyeV9waWNfdHlwZSA9IDA7Cj4gQEAgLTY0NywxMCArNjQ5LDEw IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3BpY3R1cmVfcGFyYW1zKEFW Q29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPmxhc3RfaWRyX2Zy YW1lID0gaHByZXYtPmxhc3RfaWRyX2ZyYW1lOwo+IMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+aWRy X3BpY19pZMKgwqDCoMKgID0gaHByZXYtPmlkcl9waWNfaWQ7Cj4gwqAKPiAtwqDCoMKgwqDCoMKg wqAgaWYgKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSSkgewo+ICvCoMKgwqDCoMKgwqDCoCBp ZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0kpIHsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaHBpYy0+c2xpY2VfdHlwZcKgwqDCoMKgwqDCoCA9IDc7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGhwaWMtPnByaW1hcnlfcGljX3R5cGUgPSAwOwo+IC3CoMKgwqDCoMKgwqDC oCB9IGVsc2UgaWYgKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCkgewo+ICvCoMKgwqDCoMKg wqDCoCB9IGVsc2UgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QKSB7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPnNsaWNlX3R5cGXCoMKgwqDCoMKgwqAgPSA1Owo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocGljLT5wcmltYXJ5X3BpY190eXBlID0gMTsKPiDC oMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gQEAgLTY1OCwxMyArNjYwLDEzIEBAIHN0YXRpYyBp bnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+cHJpbWFyeV9waWNfdHlw ZSA9IDI7Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgfQo+IC3CoMKgwqAgaHBpYy0+ cGljX29yZGVyX2NudCA9IHBpYy0+ZGlzcGxheV9vcmRlciAtIGhwaWMtPmxhc3RfaWRyX2ZyYW1l Owo+ICvCoMKgwqAgaHBpYy0+cGljX29yZGVyX2NudCA9IGJhc2VfcGljLT5kaXNwbGF5X29yZGVy IC0gaHBpYy0+bGFzdF9pZHJfZnJhbWU7Cj4gwqDCoMKgwqAgaWYgKHByaXYtPnJhd19zcHMucGlj X29yZGVyX2NudF90eXBlID09IDIpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPnBpY19vcmRl cl9jbnQgKj0gMjsKPiDCoMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKgIGhwaWMtPmRwYl9kZWxhecKg wqDCoMKgID0gcGljLT5kaXNwbGF5X29yZGVyIC0gcGljLT5lbmNvZGVfb3JkZXIgKyBjdHgtCj4g Pm1heF9iX2RlcHRoOwo+IC3CoMKgwqAgaHBpYy0+Y3BiX2RlbGF5wqDCoMKgwqAgPSBwaWMtPmVu Y29kZV9vcmRlciAtIGhwaWMtPmxhc3RfaWRyX2ZyYW1lOwo+ICvCoMKgwqAgaHBpYy0+ZHBiX2Rl bGF5wqDCoMKgwqAgPSBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlciAtIGJhc2VfcGljLT5lbmNvZGVf b3JkZXIgKwo+IGJhc2VfY3R4LT5tYXhfYl9kZXB0aDsKPiArwqDCoMKgIGhwaWMtPmNwYl9kZWxh ecKgwqDCoMKgID0gYmFzZV9waWMtPmVuY29kZV9vcmRlciAtIGhwaWMtPmxhc3RfaWRyX2ZyYW1l Owo+IMKgCj4gwqDCoMKgwqAgaWYgKHByaXYtPmF1ZCkgewo+IMKgwqDCoMKgwqDCoMKgwqAgcHJp di0+YXVkX25lZWRlZCA9IDE7Cj4gQEAgLTY4MCw3ICs2ODIsNyBAQCBzdGF0aWMgaW50Cj4gdmFh cGlfZW5jb2RlX2gyNjRfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgs Cj4gwqAKPiDCoMKgwqDCoCBwcml2LT5zZWlfbmVlZGVkID0gMDsKPiDCoAo+IC3CoMKgwqAgaWYg KHByaXYtPnNlaSAmIFNFSV9JREVOVElGSUVSICYmIHBpYy0+ZW5jb2RlX29yZGVyID09IDApCj4g K8KgwqDCoCBpZiAocHJpdi0+c2VpICYgU0VJX0lERU5USUZJRVIgJiYgYmFzZV9waWMtPmVuY29k ZV9vcmRlciA9PSAwKQo+IMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+c2VpX25lZWRlZCB8PSBTRUlf SURFTlRJRklFUjsKPiDCoCNpZiAhQ09ORklHX1ZBQVBJXzEKPiDCoMKgwqDCoCBpZiAoY3R4LT52 YV9yY19tb2RlID09IFZBX1JDX0NCUikKPiBAQCAtNjk2LDExICs2OTgsMTEgQEAgc3RhdGljIGlu dAo+IHZhYXBpX2VuY29kZV9oMjY0X2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+c2VpX25lZWRlZCB8PSBTRUlfVElNSU5H Owo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgaWYgKHByaXYtPnNlaSAmIFNFSV9SRUNPVkVS WV9QT0lOVCAmJiBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0kpIHsKPiArwqDCoMKgIGlmIChw cml2LT5zZWkgJiBTRUlfUkVDT1ZFUllfUE9JTlQgJiYgYmFzZV9waWMtPnR5cGUgPT0gUElDVFVS RV9UWVBFX0kpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPnNlaV9yZWNvdmVyeV9wb2ludCA9 IChIMjY0UmF3U0VJUmVjb3ZlcnlQb2ludCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAu cmVjb3ZlcnlfZnJhbWVfY250ID0gMCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmV4YWN0 X21hdGNoX2ZsYWfCoMKgID0gMSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuYnJva2VuX2xp bmtfZmxhZ8KgwqAgPSBjdHgtPmJfcGVyX3AgPiAwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC5icm9rZW5fbGlua19mbGFnwqDCoCA9IGJhc2VfY3R4LT5iX3Blcl9wID4gMCwKPiDCoMKgwqDC oMKgwqDCoMKgIH07Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPnNlaV9uZWVkZWQgfD0g U0VJX1JFQ09WRVJZX1BPSU5UOwo+IEBAIC03MTAsNyArNzEyLDcgQEAgc3RhdGljIGludAo+IHZh YXBpX2VuY29kZV9oMjY0X2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+IMKgwqDCoMKgwqDCoMKgwqAgaW50IGVycjsKPiDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBz ZWlfYTUzY2NfbGVuOwo+IMKgwqDCoMKgwqDCoMKgwqAgYXZfZnJlZXAoJnByaXYtPnNlaV9hNTNj Y19kYXRhKTsKPiAtwqDCoMKgwqDCoMKgwqAgZXJyID0gZmZfYWxsb2NfYTUzX3NlaShwaWMtPmlu cHV0X2ltYWdlLCAwLCAmcHJpdi0+c2VpX2E1M2NjX2RhdGEsCj4gJnNlaV9hNTNjY19sZW4pOwo+ ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBmZl9hbGxvY19hNTNfc2VpKGJhc2VfcGljLT5pbnB1dF9p bWFnZSwgMCwgJnByaXYtCj4gPnNlaV9hNTNjY19kYXRhLCAmc2VpX2E1M2NjX2xlbik7Cj4gwqDC oMKgwqDCoMKgwqDCoCBpZiAoZXJyIDwgMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIGVycjsKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIChwcml2LT5zZWlfYTUzY2NfZGF0YSAhPSBO VUxMKSB7Cj4gQEAgLTczMCwxNSArNzMyLDE1IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVf aDI2NF9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDC oMKgwqDCoMKgIC5Cb3R0b21GaWVsZE9yZGVyQ250ID0gaHBpYy0+cGljX29yZGVyX2NudCwKPiDC oMKgwqDCoCB9Owo+IMKgwqDCoMKgIGZvciAoaW50IGsgPSAwOyBrIDwgTUFYX1JFRkVSRU5DRV9M SVNUX05VTTsgaysrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBwaWMtPm5i X3JlZnNba107IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZBQVBJRW5jb2RlUGlj dHVyZcKgwqDCoMKgwqAgKnJlZiA9IHBpYy0+cmVmc1trXVtpXTsKPiArwqDCoMKgwqDCoMKgwqAg Zm9yIChpID0gMDsgaSA8IGJhc2VfcGljLT5uYl9yZWZzW2tdOyBpKyspIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgICpyZWYgPSBiYXNlX3BpYy0+ cmVmc1trXVtpXTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVIMjY0UGlj dHVyZSAqaHJlZjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAocmVm ICYmIHJlZi0+ZW5jb2RlX29yZGVyIDwgcGljLT5lbmNvZGVfb3JkZXIpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAocmVmICYmIHJlZi0+ZW5jb2RlX29yZGVyIDwgYmFzZV9w aWMtPmVuY29kZV9vcmRlcik7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhyZWYgPSByZWYt PnByaXZfZGF0YTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2cGljLT5SZWZlcmVu Y2VGcmFtZXNbaisrXSA9IChWQVBpY3R1cmVIMjY0KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAucGljdHVyZV9pZMKgwqDCoMKgwqDCoMKgwqDCoCA9IHJlZi0+cmVjb25fc3Vy ZmFjZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5waWN0dXJlX2lkwqDCoMKg wqDCoMKgwqDCoMKgID0gKChWQUFQSUVuY29kZVBpY3R1cmUgKilyZWYpLQo+ID5yZWNvbl9zdXJm YWNlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5mcmFtZV9pZHjCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IGhyZWYtPmZyYW1lX251bSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAuZmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gVkFfUElDVFVS RV9IMjY0X1NIT1JUX1RFUk1fUkVGRVJFTkNFLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5Ub3BGaWVsZE9yZGVyQ250wqDCoMKgID0gaHJlZi0+cGljX29yZGVyX2NudCwKPiBA QCAtNzU4LDggKzc2MCw4IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3Bp Y3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoAo+IMKgwqDCoMKgIHZwaWMt PmZyYW1lX251bSA9IGhwaWMtPmZyYW1lX251bTsKPiDCoAo+IC3CoMKgwqAgdnBpYy0+cGljX2Zp ZWxkcy5iaXRzLmlkcl9waWNfZmxhZ8KgwqDCoMKgwqDCoCA9IChwaWMtPnR5cGUgPT0KPiBQSUNU VVJFX1RZUEVfSURSKTsKPiAtwqDCoMKgIHZwaWMtPnBpY19maWVsZHMuYml0cy5yZWZlcmVuY2Vf cGljX2ZsYWcgPSAocGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9CKTsKPiArwqDCoMKgIHZwaWMt PnBpY19maWVsZHMuYml0cy5pZHJfcGljX2ZsYWfCoMKgwqDCoMKgwqAgPSAoYmFzZV9waWMtPnR5 cGUgPT0KPiBQSUNUVVJFX1RZUEVfSURSKTsKPiArwqDCoMKgIHZwaWMtPnBpY19maWVsZHMuYml0 cy5yZWZlcmVuY2VfcGljX2ZsYWcgPSAoYmFzZV9waWMtPnR5cGUgIT0KPiBQSUNUVVJFX1RZUEVf Qik7Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoH0KPiBAQCAtNzcwLDMxICs3NzIsMzIg QEAgc3RhdGljIHZvaWQKPiB2YWFwaV9lbmNvZGVfaDI2NF9kZWZhdWx0X3JlZl9waWNfbGlzdChB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqKnJwbDEsCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCAqcnBsX3NpemUpCj4gwqB7Cj4gLcKg wqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnByZXY7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0 dXJlICpiYXNlX3BpYyA9IChIV0Jhc2VFbmNvZGVQaWN0dXJlICopcGljOwo+ICvCoMKgwqAgSFdC YXNlRW5jb2RlUGljdHVyZSAqcHJldjsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUgyNjRQaWN0dXJl ICpocCwgKmhuLCAqaGM7Cj4gwqDCoMKgwqAgaW50IGksIGosIG4gPSAwOwo+IMKgCj4gLcKgwqDC oCBwcmV2ID0gcGljLT5wcmV2Owo+ICvCoMKgwqAgcHJldiA9IGJhc2VfcGljLT5wcmV2Owo+IMKg wqDCoMKgIGF2X2Fzc2VydDAocHJldik7Cj4gLcKgwqDCoCBocCA9IHBpYy0+cHJpdl9kYXRhOwo+ ICvCoMKgwqAgaHAgPSBiYXNlX3BpYy0+cHJpdl9kYXRhOwo+IMKgCj4gLcKgwqDCoCBmb3IgKGkg PSAwOyBpIDwgcGljLT5wcmV2LT5uYl9kcGJfcGljczsgaSsrKSB7Cj4gK8KgwqDCoCBmb3IgKGkg PSAwOyBpIDwgYmFzZV9waWMtPnByZXYtPm5iX2RwYl9waWNzOyBpKyspIHsKPiDCoMKgwqDCoMKg wqDCoMKgIGhuID0gcHJldi0+ZHBiW2ldLT5wcml2X2RhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoCBh dl9hc3NlcnQwKGhuLT5mcmFtZV9udW0gPCBocC0+ZnJhbWVfbnVtKTsKPiDCoAo+IC3CoMKgwqDC oMKgwqDCoCBpZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QKSB7Cj4gK8KgwqDCoMKgwqDC oMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCkgewo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBmb3IgKGogPSBuOyBqID4gMDsgai0tKSB7Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBoYyA9IHJwbDBbaiAtIDFdLT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYyA9IHJwbDBbaiAtIDFdLT5iYXNlLnByaXZfZGF0YTsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGhjLT5mcmFtZV9u dW0gIT0gaG4tPmZyYW1lX251bSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGhjLT5mcmFtZV9udW0gPiBobi0+ZnJhbWVfbnVtKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcnBsMFtqXSA9IHJwbDBbaiAtIDFdOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnBsMFtqXSA9IHByZXYtPmRwYltpXTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBycGwwW2pdID0gKFZBQVBJRW5jb2RlUGljdHVyZSAqKXByZXYt PmRwYltpXTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKHBpYy0+dHlwZSA9PSBQ SUNUVVJFX1RZUEVfQikgewo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGJhc2VfcGljLT50 eXBlID09IFBJQ1RVUkVfVFlQRV9CKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAo aiA9IG47IGogPiAwOyBqLS0pIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhj ID0gcnBsMFtqIC0gMV0tPnByaXZfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGhjID0gcnBsMFtqIC0gMV0tPmJhc2UucHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoaGMtPnBpY19vcmRlcl9jbnQgIT0gaHAtPnBpY19v cmRlcl9jbnQpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChoYy0+cGlj X29yZGVyX2NudCA8IGhwLT5waWNfb3JkZXJfY250KSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaG4tPnBpY19vcmRlcl9jbnQgPiBocC0+cGljX29yZGVy X2NudCB8fAo+IEBAIC04MDYsMTAgKzgwOSwxMCBAQCBzdGF0aWMgdm9pZAo+IHZhYXBpX2VuY29k ZV9oMjY0X2RlZmF1bHRfcmVmX3BpY19saXN0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcnBsMFtqXSA9IHJwbDBbaiAtIDFdOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnBsMFtqXSA9IHByZXYtPmRwYltpXTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBycGwwW2pdID0gKFZBQVBJRW5jb2RlUGljdHVyZSAqKXBy ZXYtPmRwYltpXTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSBuOyBq ID4gMDsgai0tKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYyA9IHJwbDFb aiAtIDFdLT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYyA9 IHJwbDFbaiAtIDFdLT5iYXNlLnByaXZfZGF0YTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhdl9hc3NlcnQwKGhjLT5waWNfb3JkZXJfY250ICE9IGhwLT5waWNfb3JkZXJfY250 KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaGMtPnBpY19vcmRlcl9j bnQgPiBocC0+cGljX29yZGVyX2NudCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGhuLT5waWNfb3JkZXJfY250IDwgaHAtPnBpY19vcmRlcl9jbnQgfHwK PiBAQCAtODIxLDEzICs4MjQsMTMgQEAgc3RhdGljIHZvaWQKPiB2YWFwaV9lbmNvZGVfaDI2NF9k ZWZhdWx0X3JlZl9waWNfbGlzdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJwbDFbal0gPSBycGwxW2ogLSAxXTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJwbDFbal0gPSBwcmV2LT5kcGJbaV07Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcnBsMVtqXSA9IChWQUFQSUVuY29kZVBpY3R1cmUgKilwcmV2LT5kcGJb aV07Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgICsrbjsKPiDC oMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKgIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0Ip IHsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfQikgewo+IMKg wqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAocnBsMFtpXSAhPSBycGwxW2ldKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJyZWFrOwo+IEBAIC04MzYsMjIgKzgzOSwyMiBAQCBzdGF0aWMgdm9pZAo+ IHZhYXBpX2VuY29kZV9oMjY0X2RlZmF1bHRfcmVmX3BpY19saXN0KEFWQ29kZWNDb250ZXh0ICph dmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRkZTV0FQKFZBQVBJRW5jb2RlUGljdHVy ZSosIHJwbDFbMF0sIHJwbDFbMV0pOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgaWYgKHBp Yy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCB8fAo+IC3CoMKgwqDCoMKgwqDCoCBwaWMtPnR5cGUg PT0gUElDVFVSRV9UWVBFX0IpIHsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNU VVJFX1RZUEVfUCB8fAo+ICvCoMKgwqDCoMKgwqDCoCBiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJF X1RZUEVfQikgewo+IMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcs ICJEZWZhdWx0IFJlZlBpY0xpc3QwIGZvciBmbj0lZC9wb2M9JWQ6IiwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaHAtPmZyYW1lX251bSwgaHAtPnBpY19vcmRlcl9jbnQpOwo+IMKg wqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhuID0gcnBsMFtpXS0+cHJpdl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGhuID0gcnBsMFtpXS0+YmFzZS5wcml2X2RhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiwqAgZm49JWQvcG9jPSVkIiwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBobi0+ZnJhbWVfbnVtLCBobi0+cGlj X29yZGVyX2NudCk7Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqDCoMKgwqDCoCBhdl9s b2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlxuIik7Cj4gwqDCoMKgwqAgfQo+IC3CoMKgwqAgaWYg KHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfQikgewo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50 eXBlID09IFBJQ1RVUkVfVFlQRV9CKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgs IEFWX0xPR19ERUJVRywgIkRlZmF1bHQgUmVmUGljTGlzdDEgZm9yIGZuPSVkL3BvYz0lZDoiLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocC0+ZnJhbWVfbnVtLCBocC0+cGljX29y ZGVyX2NudCk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaG4gPSBycGwxW2ldLT5wcml2X2RhdGE7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaG4gPSBycGwxW2ldLT5iYXNlLnByaXZfZGF0YTsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICLCoCBmbj0lZC9w b2M9JWQiLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhuLT5mcmFt ZV9udW0sIGhuLT5waWNfb3JkZXJfY250KTsKPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiBAQCAtODY2 LDggKzg2OSw5IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3NsaWNlX3Bh cmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBWQUFQSUVuY29kZVNsaWNlICpzbGljZSkKPiDCoHsKPiDCoMKgwqDCoCBWQUFQ SUVuY29kZUgyNjRDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgICpwcml2ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlSDI2NFBpY3R1cmXCoMKgwqDCoMKgwqDCoMKgwqAg KmhwaWMgPSBwaWMtPnByaXZfZGF0YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlUGljdHVyZcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcmV2ID0gcGljLT5wcmV2Owo+ICvCoMKgwqAgSFdCYXNl RW5jb2RlUGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoCAqYmFzZV9waWMgPSAoSFdCYXNlRW5jb2Rl UGljdHVyZSAqKXBpYzsKPiArwqDCoMKgIFZBQVBJRW5jb2RlSDI2NFBpY3R1cmXCoMKgwqDCoMKg wqDCoMKgwqAgKmhwaWMgPSBiYXNlX3BpYy0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5j b2RlUGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcHJldiA9IGJhc2VfcGljLT5wcmV2 Owo+IMKgwqDCoMKgIEgyNjRSYXdTUFPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqc3BzID0gJnByaXYtPnJhd19zcHM7Cj4gwqDCoMKgwqAgSDI2NFJhd1BQU8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcHMgPSAmcHJpdi0+ cmF3X3BwczsKPiDCoMKgwqDCoCBIMjY0UmF3U2xpY2VIZWFkZXLCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKnNoID0gJnByaXYtPnJhd19zbGljZS5oZWFkZXI7Cj4gQEAgLTg3NSwxMiAr ODc5LDEyIEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3NsaWNlX3BhcmFt cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqAgVkFFbmNTbGljZVBhcmFtZXRlckJ1 ZmZlckgyNjQgKnZzbGljZSA9IHNsaWNlLT5jb2RlY19zbGljZV9wYXJhbXM7Cj4gwqDCoMKgwqAg aW50IGksIGo7Cj4gwqAKPiAtwqDCoMKgIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lE Uikgewo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpIHsK PiDCoMKgwqDCoMKgwqDCoMKgIHNoLT5uYWxfdW5pdF9oZWFkZXIubmFsX3VuaXRfdHlwZSA9IEgy NjRfTkFMX0lEUl9TTElDRTsKPiDCoMKgwqDCoMKgwqDCoMKgIHNoLT5uYWxfdW5pdF9oZWFkZXIu bmFsX3JlZl9pZGPCoMKgID0gMzsKPiDCoMKgwqDCoCB9IGVsc2Ugewo+IMKgwqDCoMKgwqDCoMKg wqAgc2gtPm5hbF91bml0X2hlYWRlci5uYWxfdW5pdF90eXBlID0gSDI2NF9OQUxfU0xJQ0U7Cj4g LcKgwqDCoMKgwqDCoMKgIHNoLT5uYWxfdW5pdF9oZWFkZXIubmFsX3JlZl9pZGPCoMKgID0gcGlj LT5pc19yZWZlcmVuY2U7Cj4gK8KgwqDCoMKgwqDCoMKgIHNoLT5uYWxfdW5pdF9oZWFkZXIubmFs X3JlZl9pZGPCoMKgID0gYmFzZV9waWMtPmlzX3JlZmVyZW5jZTsKPiDCoMKgwqDCoCB9Cj4gwqAK PiDCoMKgwqDCoCBzaC0+Zmlyc3RfbWJfaW5fc2xpY2UgPSBzbGljZS0+YmxvY2tfc3RhcnQ7Cj4g QEAgLTg5NiwyNSArOTAwLDI1IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0 X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqAKPiDCoMKgwqDCoCBzaC0+ ZGlyZWN0X3NwYXRpYWxfbXZfcHJlZF9mbGFnID0gMTsKPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+ dHlwZSA9PSBQSUNUVVJFX1RZUEVfQikKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQ SUNUVVJFX1RZUEVfQikKPiDCoMKgwqDCoMKgwqDCoMKgIHNoLT5zbGljZV9xcF9kZWx0YSA9IHBy aXYtPmZpeGVkX3FwX2IgLSAocHBzLT5waWNfaW5pdF9xcF9taW51czI2ICsKPiAyNik7Cj4gLcKg wqDCoCBlbHNlIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1ApCj4gK8KgwqDCoCBlbHNl IGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCkKPiDCoMKgwqDCoMKgwqDCoMKg IHNoLT5zbGljZV9xcF9kZWx0YSA9IHByaXYtPmZpeGVkX3FwX3AgLSAocHBzLT5waWNfaW5pdF9x cF9taW51czI2ICsKPiAyNik7Cj4gwqDCoMKgwqAgZWxzZQo+IMKgwqDCoMKgwqDCoMKgwqAgc2gt PnNsaWNlX3FwX2RlbHRhID0gcHJpdi0+Zml4ZWRfcXBfaWRyIC0gKHBwcy0+cGljX2luaXRfcXBf bWludXMyNiArCj4gMjYpOwo+IMKgCj4gLcKgwqDCoCBpZiAocGljLT5pc19yZWZlcmVuY2UgJiYg cGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiAtwqDCoMKgwqDCoMKgwqAgVkFBUElF bmNvZGVQaWN0dXJlICpkaXNjYXJkX2xpc3RbTUFYX0RQQl9TSVpFXTsKPiArwqDCoMKgIGlmIChi YXNlX3BpYy0+aXNfcmVmZXJlbmNlICYmIGJhc2VfcGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9J RFIpIHsKPiArwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZSAqZGlzY2FyZF9saXN0 W01BWF9EUEJfU0laRV07Cj4gwqDCoMKgwqDCoMKgwqDCoCBpbnQgZGlzY2FyZCA9IDAsIGtlZXAg PSAwOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCAvLyBEaXNjYXJkIGV2ZXJ5dGhpbmcgd2hpY2gg aXMgaW4gdGhlIERQQiBvZiB0aGUgcHJldmlvdXMgZnJhbWUgYnV0Cj4gwqDCoMKgwqDCoMKgwqDC oCAvLyBub3QgaW4gdGhlIERQQiBvZiB0aGlzIG9uZS4KPiDCoMKgwqDCoMKgwqDCoMKgIGZvciAo aSA9IDA7IGkgPCBwcmV2LT5uYl9kcGJfcGljczsgaSsrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZm9yIChqID0gMDsgaiA8IHBpYy0+bmJfZHBiX3BpY3M7IGorKykgewo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHByZXYtPmRwYltpXSA9PSBwaWMtPmRwYltqXSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgYmFzZV9waWMtPm5iX2Rw Yl9waWNzOyBqKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwcmV2 LT5kcGJbaV0gPT0gYmFzZV9waWMtPmRwYltqXSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGogPT0gcGljLT5uYl9kcGJfcGljcykgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChqID09IGJhc2VfcGljLT5uYl9kcGJfcGljcykgewo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRpc2NhcmRfbGlzdFtkaXNjYXJkXSA9IHBy ZXYtPmRwYltpXTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArK2Rpc2NhcmQ7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gQEAgLTk0MCw3ICs5NDQsNyBA QCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjRfaW5pdF9zbGljZV9wYXJhbXMoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAo+IMKgCj4gwqDCoMKgwqAgLy8gSWYgdGhlIGludGVuZGVkIHJlZmVy ZW5jZXMgYXJlIG5vdCB0aGUgZmlyc3QgZW50cmllcyBvZiBSZWZQaWNMaXN0Tgo+IMKgwqDCoMKg IC8vIGJ5IGRlZmF1bHQsIHVzZSByZWYtcGljLWxpc3QtbW9kaWZpY2F0aW9uIHRvIG1vdmUgdGhl bSB0aGVyZS4KPiAtwqDCoMKgIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1AgfHwgcGlj LT50eXBlID09IFBJQ1RVUkVfVFlQRV9CKSB7Cj4gK8KgwqDCoCBpZiAoYmFzZV9waWMtPnR5cGUg PT0gUElDVFVSRV9UWVBFX1AgfHwgYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0IpCj4g ewo+IMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpkZWZfbDBbTUFYX0RQQl9T SVpFXSwgKmRlZl9sMVtNQVhfRFBCX1NJWkVdOwo+IMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNv ZGVIMjY0UGljdHVyZSAqaHJlZjsKPiDCoMKgwqDCoMKgwqDCoMKgIGludCBuOwo+IEBAIC05NDgs MTkgKzk1MiwxOSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjRfaW5pdF9zbGljZV9w YXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqAgdmFhcGlfZW5j b2RlX2gyNjRfZGVmYXVsdF9yZWZfcGljX2xpc3QoYXZjdHgsIHBpYywKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlZl9sMCwgZGVmX2wxLCAmbik7Cj4gwqAKPiAtwqDC oMKgwqDCoMKgwqAgaWYgKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCkgewo+ICvCoMKgwqDC oMKgwqDCoCBpZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1ApIHsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaW50IG5lZWRfcnBsbSA9IDA7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVmc1swXTsgaSsrKSB7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXVtpXSk7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocGljLT5yZWZzWzBdW2ldICE9IGRlZl9s MFtpXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMt Pm5iX3JlZnNbMF07IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZf YXNzZXJ0MChiYXNlX3BpYy0+cmVmc1swXVtpXSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoYmFzZV9waWMtPnJlZnNbMF1baV0gIT0gKEhXQmFzZUVuY29kZVBpY3R1cmUg KilkZWZfbDBbaV0pCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBu ZWVkX3JwbG0gPSAxOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2gtPnJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMCA9 IG5lZWRfcnBsbTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG5lZWRfcnBsbSkgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBwaWNfbnVtID0gaHBpYy0+ZnJh bWVfbnVtOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8 IHBpYy0+bmJfcmVmc1swXTsgaSsrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhyZWYgPSBwaWMtPnJlZnNbMF1baV0tPnByaXZfZGF0YTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVmc1sw XTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhyZWYg PSBiYXNlX3BpYy0+cmVmc1swXVtpXS0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChocmVmLT5mcmFtZV9udW0gIT0gcGljX251 bSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaHJlZi0+ ZnJhbWVfbnVtIDwgcGljX251bSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaC0+cnBsbV9sMFtpXS5tb2RpZmljYXRpb25fb2ZfcGljX251bXNf aWRjID0gMDsKPiBAQCAtOTc5LDIwICs5ODMsMjAgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29k ZV9oMjY0X2luaXRfc2xpY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDC oMKgwqDCoMKgIH0gZWxzZSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBuZWVkX3Jw bG1fbDAgPSAwLCBuZWVkX3JwbG1fbDEgPSAwOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQgbjAgPSAwLCBuMSA9IDA7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsg aSA8IHBpYy0+bmJfcmVmc1swXTsgaSsrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXVtpXSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBocmVmID0gcGljLT5yZWZzWzBdW2ldLT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGJhc2VfcGljLT5uYl9yZWZzWzBdOyBpKysp IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoYmFzZV9waWMt PnJlZnNbMF1baV0pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHJlZiA9IGJh c2VfcGljLT5yZWZzWzBdW2ldLT5wcml2X2RhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXZfYXNzZXJ0MChocmVmLT5waWNfb3JkZXJfY250IDwgaHBpYy0+cGljX29yZGVy X2NudCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocGljLT5yZWZzWzBd W2ldICE9IGRlZl9sMFtuMF0pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo YmFzZV9waWMtPnJlZnNbMF1baV0gIT0gKEhXQmFzZUVuY29kZVBpY3R1cmUKPiAqKWRlZl9sMFtu MF0pCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZWVkX3JwbG1f bDAgPSAxOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICsrbjA7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAo aSA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMV07IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChwaWMtPnJlZnNbMV1baV0pOwo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaHJlZiA9IHBpYy0+cmVmc1sxXVtpXS0+cHJpdl9kYXRhOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVmc1sx XTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJh c2VfcGljLT5yZWZzWzFdW2ldKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhy ZWYgPSBiYXNlX3BpYy0+cmVmc1sxXVtpXS0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoaHJlZi0+cGljX29yZGVyX2NudCA+IGhwaWMtPnBp Y19vcmRlcl9jbnQpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBpYy0+ cmVmc1sxXVtpXSAhPSBkZWZfbDFbbjFdKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGJhc2VfcGljLT5yZWZzWzFdW2ldICE9IChIV0Jhc2VFbmNvZGVQaWN0dXJlCj4gKilk ZWZfbDFbbjFdKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVl ZF9ycGxtX2wxID0gMTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArK24xOwo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gQEAgLTEwMDAsOCArMTAwNCw4IEBAIHN0YXRp YyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9pbml0X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNoLT5yZWZfcGljX2xpc3RfbW9k aWZpY2F0aW9uX2ZsYWdfbDAgPSBuZWVkX3JwbG1fbDA7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChuZWVkX3JwbG1fbDApIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpbnQgcGljX251bSA9IGhwaWMtPmZyYW1lX251bTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZvciAoaSA9IGogPSAwOyBpIDwgcGljLT5uYl9yZWZzWzBdOyBpKyspIHsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHJlZiA9IHBpYy0+cmVmc1sw XVtpXS0+cHJpdl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChp ID0gaiA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVmc1swXTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhyZWYgPSBiYXNlX3BpYy0+cmVmc1swXVtpXS0+ cHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZf YXNzZXJ0MChocmVmLT5mcmFtZV9udW0gIT0gcGljX251bSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaHJlZi0+ZnJhbWVfbnVtIDwgcGljX251bSkgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaC0+cnBs bV9sMFtqXS5tb2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID0gMDsKPiBAQCAtMTAyMiw4ICsx MDI2LDggQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9oMjY0X2luaXRfc2xpY2VfcGFyYW1z KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2gtPnJl Zl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMSA9IG5lZWRfcnBsbV9sMTsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKG5lZWRfcnBsbV9sMSkgewo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGludCBwaWNfbnVtID0gaHBpYy0+ZnJhbWVfbnVtOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gaiA9IDA7IGkgPCBwaWMtPm5iX3JlZnNb MV07IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocmVm ID0gcGljLT5yZWZzWzFdW2ldLT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBmb3IgKGkgPSBqID0gMDsgaSA8IGJhc2VfcGljLT5uYl9yZWZzWzFdOyBpKyspIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHJlZiA9IGJhc2VfcGlj LT5yZWZzWzFdW2ldLT5wcml2X2RhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdl9hc3NlcnQwKGhyZWYtPmZyYW1lX251bSAhPSBwaWNfbnVtKTsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChocmVmLT5mcmFtZV9udW0g PCBwaWNfbnVtKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNoLT5ycGxtX2wxW2pdLm1vZGlmaWNhdGlvbl9vZl9waWNfbnVtc19pZGMgPSAwOwo+ IEBAIC0xMDYzLDE1ICsxMDY3LDE1IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9p bml0X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDC oCB2c2xpY2UtPlJlZlBpY0xpc3QxW2ldLmZsYWdzwqDCoMKgwqDCoCA9IFZBX1BJQ1RVUkVfSDI2 NF9JTlZBTElEOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+bmJfcmVmc1sw XSkgewo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT5uYl9yZWZzWzBdKSB7Cj4gwqDCoMKgwqDCoMKg wqDCoCAvLyBCYWNrd2FyZCByZWZlcmVuY2UgZm9yIFAtIG9yIEItZnJhbWUuCj4gLcKgwqDCoMKg wqDCoMKgIGF2X2Fzc2VydDAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QIHx8Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBF X0IpOwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT50eXBlID09IFBJQ1RV UkVfVFlQRV9QIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNl X3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfQik7Cj4gwqDCoMKgwqDCoMKgwqDCoCB2c2xpY2Ut PlJlZlBpY0xpc3QwWzBdID0gdnBpYy0+UmVmZXJlbmNlRnJhbWVzWzBdOwo+IMKgwqDCoMKgIH0K PiAtwqDCoMKgIGlmIChwaWMtPm5iX3JlZnNbMV0pIHsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+ bmJfcmVmc1sxXSkgewo+IMKgwqDCoMKgwqDCoMKgwqAgLy8gRm9yd2FyZCByZWZlcmVuY2UgZm9y IEItZnJhbWUuCj4gLcKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAocGljLT50eXBlID09IFBJQ1RV UkVfVFlQRV9CKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+dHlwZSA9 PSBQSUNUVVJFX1RZUEVfQik7Cj4gwqDCoMKgwqDCoMKgwqDCoCB2c2xpY2UtPlJlZlBpY0xpc3Qx WzBdID0gdnBpYy0+UmVmZXJlbmNlRnJhbWVzWzFdOwo+IMKgwqDCoMKgIH0KPiDCoAo+IEBAIC0x MDgyLDggKzEwODYsOSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjRfaW5pdF9zbGlj ZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgCj4gwqBzdGF0aWMgYXZfY29sZCBp bnQgdmFhcGlfZW5jb2RlX2gyNjRfY29uZmlndXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDC oHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5w cml2X2RhdGE7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUgyNjRDb250ZXh0ICpwcml2ID0gYXZjdHgt PnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoCAq Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2RlSDI2NENvbnRleHTC oCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqDCoMKgwqAgaW50IGVycjsKPiDCoAo+IMKg wqDCoMKgIGVyciA9IGZmX2Nic19pbml0KCZwcml2LT5jYmMsIEFWX0NPREVDX0lEX0gyNjQsIGF2 Y3R4KTsKPiBAQCAtMTA5NCw3ICsxMDk5LDcgQEAgc3RhdGljIGF2X2NvbGQgaW50Cj4gdmFhcGlf ZW5jb2RlX2gyNjRfY29uZmlndXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCBw cml2LT5tYl9oZWlnaHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIDE2KSAvIDE2Owo+IMKgCj4g wqDCoMKgwqAgaWYgKGN0eC0+dmFfcmNfbW9kZSA9PSBWQV9SQ19DUVApIHsKPiAtwqDCoMKgwqDC oMKgwqAgcHJpdi0+Zml4ZWRfcXBfcCA9IGF2X2NsaXAoY3R4LT5yY19xdWFsaXR5LCAxLCA1MSk7 Cj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPmZpeGVkX3FwX3AgPSBhdl9jbGlwKGJhc2VfY3R4LT5y Y19xdWFsaXR5LCAxLCA1MSk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPmlfcXVhbnRf ZmFjdG9yID4gMC4wKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT5maXhlZF9xcF9p ZHIgPQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2NsaXAoKGF2Y3R4LT5p X3F1YW50X2ZhY3RvciAqIHByaXYtPmZpeGVkX3FwX3AgKwo+IEBAIC0xMjAyLDggKzEyMDcsOSBA QCBzdGF0aWMgY29uc3QgVkFBUElFbmNvZGVUeXBlIHZhYXBpX2VuY29kZV90eXBlX2gyNjQgPSB7 Cj4gwqAKPiDCoHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfaDI2NF9pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDC oMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUgyNjRD b250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNv bnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2Rl Q29udGV4dMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZB QVBJRW5jb2RlSDI2NENvbnRleHTCoCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqAKPiDC oMKgwqDCoCBjdHgtPmNvZGVjID0gJnZhYXBpX2VuY29kZV90eXBlX2gyNjQ7Cj4gwqAKPiBAQCAt MTI1MSwxMyArMTI1NywxMyBAQCBzdGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2 NF9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoMKgwqDCoMKgIFZBX0VOQ19Q QUNLRURfSEVBREVSX1NMSUNFwqDCoMKgIHwgLy8gU2xpY2UgaGVhZGVycy4KPiDCoMKgwqDCoMKg wqDCoMKgIFZBX0VOQ19QQUNLRURfSEVBREVSX01JU0M7wqDCoMKgwqDCoCAvLyBTRUkuCj4gwqAK PiAtwqDCoMKgIGN0eC0+c3VyZmFjZV93aWR0aMKgID0gRkZBTElHTihhdmN0eC0+d2lkdGgswqAg MTYpOwo+IC3CoMKgwqAgY3R4LT5zdXJmYWNlX2hlaWdodCA9IEZGQUxJR04oYXZjdHgtPmhlaWdo dCwgMTYpOwo+ICvCoMKgwqAgYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGjCoCA9IEZGQUxJR04oYXZj dHgtPndpZHRoLMKgIDE2KTsKPiArwqDCoMKgIGJhc2VfY3R4LT5zdXJmYWNlX2hlaWdodCA9IEZG QUxJR04oYXZjdHgtPmhlaWdodCwgMTYpOwo+IMKgCj4gLcKgwqDCoCBjdHgtPnNsaWNlX2Jsb2Nr X2hlaWdodCA9IGN0eC0+c2xpY2VfYmxvY2tfd2lkdGggPSAxNjsKPiArwqDCoMKgIGJhc2VfY3R4 LT5zbGljZV9ibG9ja19oZWlnaHQgPSBiYXNlX2N0eC0+c2xpY2VfYmxvY2tfd2lkdGggPSAxNjsK PiDCoAo+IMKgwqDCoMKgIGlmIChwcml2LT5xcCA+IDApCj4gLcKgwqDCoMKgwqDCoMKgIGN0eC0+ ZXhwbGljaXRfcXAgPSBwcml2LT5xcDsKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPmV4cGxp Y2l0X3FwID0gcHJpdi0+cXA7Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4gZmZfdmFhcGlfZW5jb2Rl X2luaXQoYXZjdHgpOwo+IMKgfQo+IEBAIC0xMjc3LDYgKzEyODMsNyBAQCBzdGF0aWMgYXZfY29s ZCBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NF9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4g wqAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihWQUFQSUVuY29kZUgyNjRDb250ZXh0LCB4KQo+ IMKgI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19F TkNPRElOR19QQVJBTSkKPiDCoHN0YXRpYyBjb25zdCBBVk9wdGlvbiB2YWFwaV9lbmNvZGVfaDI2 NF9vcHRpb25zW10gPSB7Cj4gK8KgwqDCoCBIV19CQVNFX0VOQ09ERV9DT01NT05fT1BUSU9OUywK PiDCoMKgwqDCoCBWQUFQSV9FTkNPREVfQ09NTU9OX09QVElPTlMsCj4gwqDCoMKgwqAgVkFBUElf RU5DT0RFX1JDX09QVElPTlMsCj4gwqAKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9l bmNvZGVfaDI2NS5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfaDI2NS5jCj4gaW5kZXggYzRh YWJiZjVlZC4uNGY1ZDhmYzc2ZiAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29k ZV9oMjY1LmMKPiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9oMjY1LmMKPiBAQCAtMjYw LDYgKzI2MCw3IEBAIGZhaWw6Cj4gwqAKPiDCoHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2gyNjVf aW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+ICvCoMKg wqAgSFdCYXNlRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoCAqYmFzZV9jdHggPSBhdmN0 eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUFQ SUVuY29kZUgyNjVDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJp dl9kYXRhOwo+IMKgwqDCoMKgIEgyNjVSYXdWUFPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICp2cHMgPSAmcHJpdi0+cmF3X3ZwczsKPiBAQCAtMjc4LDcgKzI3 OSw3IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9pbml0X3NlcXVlbmNlX3BhcmFt cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqAgbWVtc2V0KHBwcywgMCwgc2l6ZW9m KCpwcHMpKTsKPiDCoAo+IMKgCj4gLcKgwqDCoCBkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChw cml2LT5jb21tb24uaW5wdXRfZnJhbWVzLT5zd19mb3JtYXQpOwo+ICvCoMKgwqAgZGVzYyA9IGF2 X3BpeF9mbXRfZGVzY19nZXQoYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsKPiDC oMKgwqDCoCBhdl9hc3NlcnQwKGRlc2MpOwo+IMKgwqDCoMKgIGlmIChkZXNjLT5uYl9jb21wb25l bnRzID09IDEpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGNocm9tYV9mb3JtYXQgPSAwOwo+IEBAIC0z NDEsNyArMzQyLDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9oMjY1X2luaXRfc2VxdWVu Y2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCBwdGwtPmdlbmVyYWxf bWF4XzQyMGNocm9tYV9jb25zdHJhaW50X2ZsYWfCoCA9IGNocm9tYV9mb3JtYXQgPD0gMTsKPiDC oMKgwqDCoCBwdGwtPmdlbmVyYWxfbWF4X21vbm9jaHJvbWVfY29uc3RyYWludF9mbGFnID0gY2hy b21hX2Zvcm1hdCA9PSAwOwo+IMKgCj4gLcKgwqDCoCBwdGwtPmdlbmVyYWxfaW50cmFfY29uc3Ry YWludF9mbGFnID0gY3R4LT5nb3Bfc2l6ZSA9PSAxOwo+ICvCoMKgwqAgcHRsLT5nZW5lcmFsX2lu dHJhX2NvbnN0cmFpbnRfZmxhZyA9IGJhc2VfY3R4LT5nb3Bfc2l6ZSA9PSAxOwo+IMKgwqDCoMKg IHB0bC0+Z2VuZXJhbF9vbmVfcGljdHVyZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IDA7Cj4gwqAK PiDCoMKgwqDCoCBwdGwtPmdlbmVyYWxfbG93ZXJfYml0X3JhdGVfY29uc3RyYWludF9mbGFnID0g MTsKPiBAQCAtMzUyLDkgKzM1Myw5IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9p bml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqDCoMKg wqDCoCBjb25zdCBIMjY1TGV2ZWxEZXNjcmlwdG9yICpsZXZlbDsKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqAgbGV2ZWwgPSBmZl9oMjY1X2d1ZXNzX2xldmVsKHB0bCwgYXZjdHgtPmJpdF9yYXRlLAo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGN0eC0+c3VyZmFjZV93aWR0aCwgY3R4LT5zdXJmYWNlX2hlaWdodCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBiYXNlX2N0eC0+c3VyZmFjZV93aWR0aCwgYmFzZV9jdHgtCj4gPnN1 cmZhY2VfaGVpZ2h0LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPm5iX3NsaWNlcywgY3R4LT50aWxl X3Jvd3MsIGN0eC0KPiA+dGlsZV9jb2xzLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjdHgtPmJfcGVyX3Ag PiAwKSArIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChiYXNlX2N0eC0+Yl9wZXJfcCA+IDApICsgMSk7 Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAobGV2ZWwpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGxldmVsICVzLlxuIiwgbGV2 ZWwtPm5hbWUpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdGwtPmdlbmVyYWxfbGV2ZWxf aWRjID0gbGV2ZWwtPmxldmVsX2lkYzsKPiBAQCAtMzY4LDggKzM2OSw4IEBAIHN0YXRpYyBpbnQK PiB2YWFwaV9lbmNvZGVfaDI2NV9pbml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAq YXZjdHgpCj4gwqDCoMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgdnBzLT52cHNfc3ViX2xheWVyX29y ZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnID0gMDsKPiAtwqDCoMKgIHZwcy0+dnBzX21heF9kZWNf cGljX2J1ZmZlcmluZ19taW51czFbMF3CoMKgwqDCoMKgID0gY3R4LT5tYXhfYl9kZXB0aCArIDE7 Cj4gLcKgwqDCoCB2cHMtPnZwc19tYXhfbnVtX3Jlb3JkZXJfcGljc1swXcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gY3R4LT5tYXhfYl9kZXB0aDsKPiArwqDCoMKgIHZwcy0+dnBzX21heF9k ZWNfcGljX2J1ZmZlcmluZ19taW51czFbMF3CoMKgwqDCoMKgID0gYmFzZV9jdHgtPm1heF9iX2Rl cHRoICsKPiAxOwo+ICvCoMKgwqAgdnBzLT52cHNfbWF4X251bV9yZW9yZGVyX3BpY3NbMF3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGJhc2VfY3R4LT5tYXhfYl9kZXB0aDsKPiDCoMKgwqDC oCB2cHMtPnZwc19tYXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVzMVswXcKgwqDCoMKgwqDCoMKgID0g MDsKPiDCoAo+IMKgwqDCoMKgIHZwcy0+dnBzX21heF9sYXllcl9pZMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IDA7Cj4gQEAgLTQxMCwxOCArNDExLDE4IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9l bmNvZGVfaDI2NV9pbml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4g wqDCoMKgwqAgc3BzLT5jaHJvbWFfZm9ybWF0X2lkY8KgwqDCoMKgwqDCoMKgwqDCoCA9IGNocm9t YV9mb3JtYXQ7Cj4gwqDCoMKgwqAgc3BzLT5zZXBhcmF0ZV9jb2xvdXJfcGxhbmVfZmxhZyA9IDA7 Cj4gwqAKPiAtwqDCoMKgIHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc8KgID0gY3R4LT5z dXJmYWNlX3dpZHRoOwo+IC3CoMKgwqAgc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA9 IGN0eC0+c3VyZmFjZV9oZWlnaHQ7Cj4gK8KgwqDCoCBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3Nh bXBsZXPCoCA9IGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoOwo+ICvCoMKgwqAgc3BzLT5waWNfaGVp Z2h0X2luX2x1bWFfc2FtcGxlcyA9IGJhc2VfY3R4LT5zdXJmYWNlX2hlaWdodDsKPiDCoAo+IC3C oMKgwqAgaWYgKGF2Y3R4LT53aWR0aMKgICE9IGN0eC0+c3VyZmFjZV93aWR0aCB8fAo+IC3CoMKg wqDCoMKgwqDCoCBhdmN0eC0+aGVpZ2h0ICE9IGN0eC0+c3VyZmFjZV9oZWlnaHQpIHsKPiArwqDC oMKgIGlmIChhdmN0eC0+d2lkdGjCoCAhPSBiYXNlX2N0eC0+c3VyZmFjZV93aWR0aCB8fAo+ICvC oMKgwqDCoMKgwqDCoCBhdmN0eC0+aGVpZ2h0ICE9IGJhc2VfY3R4LT5zdXJmYWNlX2hlaWdodCkg ewo+IMKgwqDCoMKgwqDCoMKgwqAgc3BzLT5jb25mb3JtYW5jZV93aW5kb3dfZmxhZyA9IDE7Cj4g wqDCoMKgwqDCoMKgwqDCoCBzcHMtPmNvbmZfd2luX2xlZnRfb2Zmc2V0wqDCoCA9IDA7Cj4gwqDC oMKgwqDCoMKgwqDCoCBzcHMtPmNvbmZfd2luX3JpZ2h0X29mZnNldMKgID0KPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAoY3R4LT5zdXJmYWNlX3dpZHRoIC0gYXZjdHgtPndpZHRoKSA+PiBkZXNj LT5sb2cyX2Nocm9tYV93Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChiYXNlX2N0eC0+c3Vy ZmFjZV93aWR0aCAtIGF2Y3R4LT53aWR0aCkgPj4gZGVzYy0+bG9nMl9jaHJvbWFfdzsKPiDCoMKg wqDCoMKgwqDCoMKgIHNwcy0+Y29uZl93aW5fdG9wX29mZnNldMKgwqDCoCA9IDA7Cj4gwqDCoMKg wqDCoMKgwqDCoCBzcHMtPmNvbmZfd2luX2JvdHRvbV9vZmZzZXQgPQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChjdHgtPnN1cmZhY2VfaGVpZ2h0IC0gYXZjdHgtPmhlaWdodCkgPj4gZGVzYy0+ bG9nMl9jaHJvbWFfaDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoYmFzZV9jdHgtPnN1cmZh Y2VfaGVpZ2h0IC0gYXZjdHgtPmhlaWdodCkgPj4gZGVzYy0KPiA+bG9nMl9jaHJvbWFfaDsKPiDC oMKgwqDCoCB9IGVsc2Ugewo+IMKgwqDCoMKgwqDCoMKgwqAgc3BzLT5jb25mb3JtYW5jZV93aW5k b3dfZmxhZyA9IDA7Cj4gwqDCoMKgwqAgfQo+IEBAIC02NDMsOSArNjQ0LDkgQEAgc3RhdGljIGlu dAo+IHZhYXBpX2VuY29kZV9oMjY1X2luaXRfc2VxdWVuY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0 ICphdmN0eCkKPiDCoMKgwqDCoMKgwqDCoMKgIC5nZW5lcmFsX2xldmVsX2lkY8KgwqAgPSB2cHMt PnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFsX2xldmVsX2lkYywKPiDCoMKgwqDCoMKgwqDCoMKg IC5nZW5lcmFsX3RpZXJfZmxhZ8KgwqAgPSB2cHMtPnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFs X3RpZXJfZmxhZywKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCAuaW50cmFfcGVyaW9kwqDCoMKgwqAg PSBjdHgtPmdvcF9zaXplLAo+IC3CoMKgwqDCoMKgwqDCoCAuaW50cmFfaWRyX3BlcmlvZCA9IGN0 eC0+Z29wX3NpemUsCj4gLcKgwqDCoMKgwqDCoMKgIC5pcF9wZXJpb2TCoMKgwqDCoMKgwqDCoCA9 IGN0eC0+Yl9wZXJfcCArIDEsCj4gK8KgwqDCoMKgwqDCoMKgIC5pbnRyYV9wZXJpb2TCoMKgwqDC oCA9IGJhc2VfY3R4LT5nb3Bfc2l6ZSwKPiArwqDCoMKgwqDCoMKgwqAgLmludHJhX2lkcl9wZXJp b2QgPSBiYXNlX2N0eC0+Z29wX3NpemUsCj4gK8KgwqDCoMKgwqDCoMKgIC5pcF9wZXJpb2TCoMKg wqDCoMKgwqDCoCA9IGJhc2VfY3R4LT5iX3Blcl9wICsgMSwKPiDCoMKgwqDCoMKgwqDCoMKgIC5i aXRzX3Blcl9zZWNvbmTCoCA9IGN0eC0+dmFfYml0X3JhdGUsCj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgIC5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzwqAgPSBzcHMtPnBpY193aWR0aF9pbl9sdW1h X3NhbXBsZXMsCj4gQEAgLTc1OCwxOCArNzU5LDE5IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNv ZGVfaDI2NV9pbml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqBz dGF0aWMgaW50IHZhYXBpX2VuY29kZV9oMjY1X2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFZBQVBJRW5jb2RlUGljdHVyZSAqcGljKQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVDb250 ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgICpiYXNlX2N0eCA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVIMjY1Q29udGV4dMKgwqDC oMKgwqDCoMKgwqDCoCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gLcKgwqDCoCBWQUFQSUVu Y29kZUgyNjVQaWN0dXJlwqDCoMKgwqDCoMKgwqDCoMKgICpocGljID0gcGljLT5wcml2X2RhdGE7 Cj4gLcKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq cHJldiA9IHBpYy0+cHJldjsKPiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmXCoMKgwqDCoMKg wqDCoMKgICpiYXNlX3BpYyA9IChIV0Jhc2VFbmNvZGVQaWN0dXJlICopcGljOwo+ICvCoMKgwqAg VkFBUElFbmNvZGVIMjY1UGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoCAqaHBpYyA9IGJhc2VfcGlj LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICpwcmV2ID0gYmFzZV9waWMtPnByZXY7Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVI MjY1UGljdHVyZcKgwqDCoMKgwqDCoMKgwqAgKmhwcmV2ID0gcHJldiA/IHByZXYtPnByaXZfZGF0 YSA6IE5VTEw7Cj4gwqDCoMKgwqAgVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVySEVWQyAqdnBp YyA9IHBpYy0+Y29kZWNfcGljdHVyZV9wYXJhbXM7Cj4gwqDCoMKgwqAgaW50IGksIGogPSAwOwo+ IMKgCj4gLcKgwqDCoCBpZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiAtwqDC oMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChwaWMtPmRpc3BsYXlfb3JkZXIgPT0gcGljLT5lbmNvZGVf b3JkZXIpOwo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIp IHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+ZGlzcGxheV9vcmRlciA9 PSBiYXNlX3BpYy0+ZW5jb2RlX29yZGVyKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBocGljLT5s YXN0X2lkcl9mcmFtZSA9IHBpYy0+ZGlzcGxheV9vcmRlcjsKPiArwqDCoMKgwqDCoMKgwqAgaHBp Yy0+bGFzdF9pZHJfZnJhbWUgPSBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlcjsKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqAgaHBpYy0+c2xpY2VfbmFsX3VuaXQgPSBIRVZDX05BTF9JRFJfV19SQURMOwo+ IMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+c2xpY2VfdHlwZcKgwqDCoMKgID0gSEVWQ19TTElDRV9J Owo+IEBAIC03NzgsMjMgKzc4MCwyMyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjVf aW5pdF9waWN0dXJlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKg wqDCoCBhdl9hc3NlcnQwKHByZXYpOwo+IMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+bGFzdF9pZHJf ZnJhbWUgPSBocHJldi0+bGFzdF9pZHJfZnJhbWU7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAgaWYg KHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSSkgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYmFz ZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0kpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaHBpYy0+c2xpY2VfbmFsX3VuaXQgPSBIRVZDX05BTF9DUkFfTlVUOwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBocGljLT5zbGljZV90eXBlwqDCoMKgwqAgPSBIRVZDX1NMSUNFX0k7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhwaWMtPnBpY190eXBlwqDCoMKgwqDCoMKgID0gMDsK PiAtwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1Ap IHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXSk7Cj4g K8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBF X1ApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT5yZWZz WzBdKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHBpYy0+c2xpY2VfbmFsX3VuaXQgPSBI RVZDX05BTF9UUkFJTF9SOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocGljLT5zbGljZV90 eXBlwqDCoMKgwqAgPSBIRVZDX1NMSUNFX1A7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhw aWMtPnBpY190eXBlwqDCoMKgwqDCoMKgID0gMTsKPiDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7 Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICppcmFwX3JlZjsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXVswXSAmJiBw aWMtPnJlZnNbMV1bMF0pOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaXJhcF9yZWYg PSBwaWM7IGlyYXBfcmVmOyBpcmFwX3JlZiA9IGlyYXBfcmVmLT5yZWZzWzFdWzBdKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZSAqaXJhcF9yZWY7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+cmVmc1swXVswXSAmJiBi YXNlX3BpYy0+cmVmc1sxXVswXSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpcmFw X3JlZiA9IGJhc2VfcGljOyBpcmFwX3JlZjsgaXJhcF9yZWYgPSBpcmFwX3JlZi0KPiA+cmVmc1sx XVswXSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpcmFwX3JlZi0+ dHlwZSA9PSBQSUNUVVJFX1RZUEVfSSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKHBpYy0+Yl9kZXB0aCA9PSBjdHgtPm1heF9iX2RlcHRoKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGJhc2VfcGljLT5iX2RlcHRoID09IGJhc2VfY3R4 LT5tYXhfYl9kZXB0aCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhwaWMt PnNsaWNlX25hbF91bml0ID0gaXJhcF9yZWYgPyBIRVZDX05BTF9SQVNMX04KPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOiBIRVZDX05BTF9UUkFJTF9OOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+IEBAIC04MDUsNyArODA3LDcgQEAgc3RhdGlj IGludAo+IHZhYXBpX2VuY29kZV9oMjY1X2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocGljLT5waWNfdHlwZcKgwqAg PSAyOwo+IMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgIH0KPiAtwqDCoMKgIGhwaWMtPnBp Y19vcmRlcl9jbnQgPSBwaWMtPmRpc3BsYXlfb3JkZXIgLSBocGljLT5sYXN0X2lkcl9mcmFtZTsK PiArwqDCoMKgIGhwaWMtPnBpY19vcmRlcl9jbnQgPSBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlciAt IGhwaWMtPmxhc3RfaWRyX2ZyYW1lOwo+IMKgCj4gwqDCoMKgwqAgaWYgKHByaXYtPmF1ZCkgewo+ IMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+YXVkX25lZWRlZCA9IDE7Cj4gQEAgLTgyNyw5ICs4Mjks OSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjVfaW5pdF9waWN0dXJlX3BhcmFtcyhB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqAgLy8gbWF5IGZvcmNlIGFuIElEUiBmcmFt ZSBvbiB0aGUgb3V0cHV0IHdoZXJlIHRoZSBtZWRhZGF0YSBnZXRzCj4gwqDCoMKgwqAgLy8gY2hh bmdlZCBvbiB0aGUgaW5wdXQgZnJhbWUuCj4gwqDCoMKgwqAgaWYgKChwcml2LT5zZWkgJiBTRUlf TUFTVEVSSU5HX0RJU1BMQVkpICYmCj4gLcKgwqDCoMKgwqDCoMKgIChwaWMtPnR5cGUgPT0gUElD VFVSRV9UWVBFX0kgfHwgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSSB8fCBiYXNlX3BpYy0+ dHlwZSA9PQo+IFBJQ1RVUkVfVFlQRV9JRFIpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBBVkZyYW1l U2lkZURhdGEgKnNkID0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9mcmFtZV9nZXRfc2lk ZV9kYXRhKHBpYy0+aW5wdXRfaW1hZ2UsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfZnJh bWVfZ2V0X3NpZGVfZGF0YShiYXNlX3BpYy0+aW5wdXRfaW1hZ2UsCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBB Vl9GUkFNRV9EQVRBX01BU1RFUklOR19ESVNQTEFZX01FVEFEQVRBKTsKPiDCoAo+IMKgwqDCoMKg wqDCoMKgwqAgaWYgKHNkKSB7Cj4gQEAgLTg3NSw5ICs4NzcsOSBAQCBzdGF0aWMgaW50Cj4gdmFh cGlfZW5jb2RlX2gyNjVfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgs Cj4gwqDCoMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgaWYgKChwcml2LT5zZWkgJiBTRUlfQ09OVEVO VF9MSUdIVF9MRVZFTCkgJiYKPiAtwqDCoMKgwqDCoMKgwqAgKHBpYy0+dHlwZSA9PSBQSUNUVVJF X1RZUEVfSSB8fCBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUikpIHsKPiArwqDCoMKgwqDC oMKgwqAgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JIHx8IGJhc2VfcGljLT50eXBl ID09Cj4gUElDVFVSRV9UWVBFX0lEUikpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIEFWRnJhbWVTaWRl RGF0YSAqc2QgPQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2ZyYW1lX2dldF9zaWRlX2Rh dGEocGljLT5pbnB1dF9pbWFnZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9mcmFtZV9n ZXRfc2lkZV9kYXRhKGJhc2VfcGljLT5pbnB1dF9pbWFnZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX0ZS QU1FX0RBVEFfQ09OVEVOVF9MSUdIVF9MRVZFTCk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGlm IChzZCkgewo+IEBAIC04OTcsNyArODk5LDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9o MjY1X2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKg wqDCoMKgwqAgaW50IGVycjsKPiDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBzZWlfYTUzY2NfbGVu Owo+IMKgwqDCoMKgwqDCoMKgwqAgYXZfZnJlZXAoJnByaXYtPnNlaV9hNTNjY19kYXRhKTsKPiAt wqDCoMKgwqDCoMKgwqAgZXJyID0gZmZfYWxsb2NfYTUzX3NlaShwaWMtPmlucHV0X2ltYWdlLCAw LCAmcHJpdi0+c2VpX2E1M2NjX2RhdGEsCj4gJnNlaV9hNTNjY19sZW4pOwo+ICvCoMKgwqDCoMKg wqDCoCBlcnIgPSBmZl9hbGxvY19hNTNfc2VpKGJhc2VfcGljLT5pbnB1dF9pbWFnZSwgMCwgJnBy aXYtCj4gPnNlaV9hNTNjY19kYXRhLCAmc2VpX2E1M2NjX2xlbik7Cj4gwqDCoMKgwqDCoMKgwqDC oCBpZiAoZXJyIDwgMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiDC oMKgwqDCoMKgwqDCoMKgIGlmIChwcml2LT5zZWlfYTUzY2NfZGF0YSAhPSBOVUxMKSB7Cj4gQEAg LTkxNiwxOSArOTE4LDE5IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9pbml0X3Bp Y3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoCB9Owo+IMKgCj4g wqDCoMKgwqAgZm9yIChpbnQgayA9IDA7IGsgPCBNQVhfUkVGRVJFTkNFX0xJU1RfTlVNOyBrKysp IHsKPiAtwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVmc1trXTsgaSsr KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlwqDCoMKgwqDC oCAqcmVmID0gcGljLT5yZWZzW2tdW2ldOwo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgYmFzZV9waWMtPm5iX3JlZnNba107IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEhXQmFzZUVuY29kZVBpY3R1cmXCoMKgwqAgKnJlZiA9IGJhc2VfcGljLT5yZWZzW2tdW2ldOwo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZUgyNjVQaWN0dXJlICpocmVmOwo+ IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChyZWYgJiYgcmVmLT5lbmNv ZGVfb3JkZXIgPCBwaWMtPmVuY29kZV9vcmRlcik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXZfYXNzZXJ0MChyZWYgJiYgcmVmLT5lbmNvZGVfb3JkZXIgPCBiYXNlX3BpYy0+ZW5jb2RlX29y ZGVyKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbaisr XSA9IChWQVBpY3R1cmVIRVZDKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAu cGljdHVyZV9pZMKgwqDCoCA9IHJlZi0+cmVjb25fc3VyZmFjZSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC5waWN0dXJlX2lkwqDCoMKgID0gKChWQUFQSUVuY29kZVBpY3R1cmUg KilyZWYpLT5yZWNvbl9zdXJmYWNlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC5waWNfb3JkZXJfY250ID0gaHJlZi0+cGljX29yZGVyX2NudCwKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC5mbGFncyA9IChyZWYtPmRpc3BsYXlfb3JkZXIgPCBwaWMtPmRpc3Bs YXlfb3JkZXIgPwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmZsYWdzID0gKHJl Zi0+ZGlzcGxheV9vcmRlciA8IGJhc2VfcGljLT5kaXNwbGF5X29yZGVyID8KPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZBX1BJQ1RVUkVfSEVW Q19SUFNfU1RfQ1VSUl9CRUZPUkUgOiAwKSB8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChyZWYtPmRpc3BsYXlfb3JkZXIgPiBwaWMtPmRpc3Bs YXlfb3JkZXIgPwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAocmVmLT5kaXNwbGF5X29yZGVyID4gYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIgPwo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFf UElDVFVSRV9IRVZDX1JQU19TVF9DVVJSX0FGVEVSwqAgOiAwKSwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfTsKPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiBAQCAtOTQ1LDcgKzk0Nyw3IEBAIHN0 YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWND b250ZXh0ICphdmN0eCwKPiDCoAo+IMKgwqDCoMKgIHZwaWMtPm5hbF91bml0X3R5cGUgPSBocGlj LT5zbGljZV9uYWxfdW5pdDsKPiDCoAo+IC3CoMKgwqAgc3dpdGNoIChwaWMtPnR5cGUpIHsKPiAr wqDCoMKgIHN3aXRjaCAoYmFzZV9waWMtPnR5cGUpIHsKPiDCoMKgwqDCoCBjYXNlIFBJQ1RVUkVf VFlQRV9JRFI6Cj4gwqDCoMKgwqDCoMKgwqDCoCB2cGljLT5waWNfZmllbGRzLmJpdHMuaWRyX3Bp Y19mbGFnwqDCoMKgwqDCoMKgID0gMTsKPiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnBpY19maWVs ZHMuYml0cy5jb2RpbmdfdHlwZcKgwqDCoMKgwqDCoMKgID0gMTsKPiBAQCAtOTc3LDkgKzk3OSwx MCBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjVfaW5pdF9zbGljZV9wYXJhbXMoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBWQUFQSUVuY29kZVNsaWNlICpzbGljZSkKPiDCoHsKPiAtwqDCoMKgIFZBQVBJ RW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgt PnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKg wqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUgy NjVDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ IC3CoMKgwqAgVkFBUElFbmNvZGVIMjY1UGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoMKgICpocGlj ID0gcGljLT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDC oMKgwqDCoMKgICpiYXNlX3BpYyA9IChIV0Jhc2VFbmNvZGVQaWN0dXJlICopcGljOwo+ICvCoMKg wqAgVkFBUElFbmNvZGVIMjY1UGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoMKgICpocGljID0gYmFz ZV9waWMtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBjb25zdCBIMjY1UmF3U1BTwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqc3BzID0gJnByaXYtPnJhd19zcHM7Cj4gwqDCoMKgwqAg Y29uc3QgSDI2NVJhd1BQU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBwcyA9 ICZwcml2LT5yYXdfcHBzOwo+IMKgwqDCoMKgIEgyNjVSYXdTbGljZUhlYWRlcsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICpzaCA9ICZwcml2LT5yYXdfc2xpY2UuaGVhZGVyOwo+IEBA IC0xMDAwLDEzICsxMDAzLDEzIEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9pbml0 X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqAKPiDCoMKgwqDCoCBzaC0+ c2xpY2VfdHlwZSA9IGhwaWMtPnNsaWNlX3R5cGU7Cj4gwqAKPiAtwqDCoMKgIGlmIChzaC0+c2xp Y2VfdHlwZSA9PSBIRVZDX1NMSUNFX1AgJiYgY3R4LT5wX3RvX2dwYikKPiArwqDCoMKgIGlmIChz aC0+c2xpY2VfdHlwZSA9PSBIRVZDX1NMSUNFX1AgJiYgYmFzZV9jdHgtPnBfdG9fZ3BiKQo+IMKg wqDCoMKgwqDCoMKgwqAgc2gtPnNsaWNlX3R5cGUgPSBIRVZDX1NMSUNFX0I7Cj4gwqAKPiDCoMKg wqDCoCBzaC0+c2xpY2VfcGljX29yZGVyX2NudF9sc2IgPSBocGljLT5waWNfb3JkZXJfY250ICYK PiDCoMKgwqDCoMKgwqDCoMKgICgxIDw8IChzcHMtPmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNi X21pbnVzNCArIDQpKSAtIDE7Cj4gwqAKPiAtwqDCoMKgIGlmIChwaWMtPnR5cGUgIT0gUElDVFVS RV9UWVBFX0lEUikgewo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50eXBlICE9IFBJQ1RVUkVfVFlQ RV9JRFIpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIEgyNjVSYXdTVFJlZlBpY1NldCAqcnBzOwo+IMKg wqDCoMKgwqDCoMKgwqAgY29uc3QgVkFBUElFbmNvZGVIMjY1UGljdHVyZSAqc3RycDsKPiDCoMKg wqDCoMKgwqDCoMKgIGludCBycHNfcG9jW01BWF9EUEJfU0laRV07Cj4gQEAgLTEwMjAsMzMgKzEw MjMsMzMgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9oMjY1X2luaXRfc2xpY2VfcGFyYW1z KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgcnBzX3BpY3Mg PSAwOwo+IMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IE1BWF9SRUZFUkVOQ0VfTElT VF9OVU07IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaiA9IDA7IGogPCBw aWMtPm5iX3JlZnNbaV07IGorKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RycCA9IHBpYy0+cmVmc1tpXVtqXS0+cHJpdl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGZvciAoaiA9IDA7IGogPCBiYXNlX3BpYy0+bmJfcmVmc1tpXTsgaisrKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJwID0gYmFzZV9waWMtPnJlZnNbaV1bal0tPnBy aXZfZGF0YTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBycHNfcG9jW3Jwc19w aWNzXcKgID0gc3RycC0+cGljX29yZGVyX2NudDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBycHNfdXNlZFtycHNfcGljc10gPSAxOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICsrcnBzX3BpY3M7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKg wqDCoMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgcGlj LT5uYl9kcGJfcGljczsgaSsrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBpYy0+ ZHBiW2ldID09IHBpYykKPiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGJhc2VfcGlj LT5uYl9kcGJfcGljczsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGJhc2Vf cGljLT5kcGJbaV0gPT0gYmFzZV9waWMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29udGludWU7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBq IDwgcGljLT5uYl9yZWZzWzBdOyBqKyspIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChwaWMtPmRwYltpXSA9PSBwaWMtPnJlZnNbMF1bal0pCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZm9yIChqID0gMDsgaiA8IGJhc2VfcGljLT5uYl9yZWZzWzBdOyBqKyspIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChiYXNlX3BpYy0+ZHBiW2ldID09IGJh c2VfcGljLT5yZWZzWzBdW2pdKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYnJlYWs7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoaiA8IHBpYy0+bmJfcmVmc1swXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoaiA8IGJhc2VfcGljLT5uYl9yZWZzWzBdKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9y IChqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1sxXTsgaisrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAocGljLT5kcGJbaV0gPT0gcGljLT5yZWZzWzFdW2pdKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaiA9IDA7IGogPCBiYXNlX3BpYy0+bmJfcmVmc1sxXTsg aisrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYmFzZV9waWMtPmRw YltpXSA9PSBiYXNlX3BpYy0+cmVmc1sxXVtqXSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGogPCBwaWMtPm5iX3JlZnNbMV0pCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKGogPCBiYXNlX3BpYy0+bmJfcmVmc1sxXSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnAgPSBwaWMtPmRwYltpXS0+cHJpdl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnAgPSBiYXNlX3BpYy0+ZHBiW2ldLT5wcml2X2RhdGE7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJwc19wb2NbcnBzX3BpY3NdwqAgPSBzdHJwLT5waWNfb3JkZXJfY250Owo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBycHNfdXNlZFtycHNfcGljc10gPSAwOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCArK3Jwc19waWNzOwo+IEBAIC0xMTEzLDkgKzExMTYsOSBAQCBz dGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjVfaW5pdF9zbGljZV9wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgIHNoLT5zbGljZV9zYW9fbHVtYV9mbGFnID0gc2gtPnNs aWNlX3Nhb19jaHJvbWFfZmxhZyA9Cj4gwqDCoMKgwqDCoMKgwqDCoCBzcHMtPnNhbXBsZV9hZGFw dGl2ZV9vZmZzZXRfZW5hYmxlZF9mbGFnOwo+IMKgCj4gLcKgwqDCoCBpZiAocGljLT50eXBlID09 IFBJQ1RVUkVfVFlQRV9CKQo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVf VFlQRV9CKQo+IMKgwqDCoMKgwqDCoMKgwqAgc2gtPnNsaWNlX3FwX2RlbHRhID0gcHJpdi0+Zml4 ZWRfcXBfYiAtIChwcHMtPmluaXRfcXBfbWludXMyNiArIDI2KTsKPiAtwqDCoMKgIGVsc2UgaWYg KHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCkKPiArwqDCoMKgIGVsc2UgaWYgKGJhc2VfcGlj LT50eXBlID09IFBJQ1RVUkVfVFlQRV9QKQo+IMKgwqDCoMKgwqDCoMKgwqAgc2gtPnNsaWNlX3Fw X2RlbHRhID0gcHJpdi0+Zml4ZWRfcXBfcCAtIChwcHMtPmluaXRfcXBfbWludXMyNiArIDI2KTsK PiDCoMKgwqDCoCBlbHNlCj4gwqDCoMKgwqDCoMKgwqDCoCBzaC0+c2xpY2VfcXBfZGVsdGEgPSBw cml2LT5maXhlZF9xcF9pZHIgLSAocHBzLT5pbml0X3FwX21pbnVzMjYgKwo+IDI2KTsKPiBAQCAt MTE3MCwyMiArMTE3MywyMiBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX2gyNjVfaW5pdF9z bGljZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqAgdnNs aWNlLT5yZWZfcGljX2xpc3QxW2ldLmZsYWdzwqDCoMKgwqDCoCA9IFZBX1BJQ1RVUkVfSEVWQ19J TlZBTElEOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+bmJfcmVmc1swXSkg ewo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT5uYl9yZWZzWzBdKSB7Cj4gwqDCoMKgwqDCoMKgwqDC oCAvLyBCYWNrd2FyZCByZWZlcmVuY2UgZm9yIFAtIG9yIEItZnJhbWUuCj4gLcKgwqDCoMKgwqDC oMKgIGF2X2Fzc2VydDAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QIHx8Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0Ip Owo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVf VFlQRV9QIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX3Bp Yy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfQik7Cj4gwqDCoMKgwqDCoMKgwqDCoCB2c2xpY2UtPnJl Zl9waWNfbGlzdDBbMF0gPSB2cGljLT5yZWZlcmVuY2VfZnJhbWVzWzBdOwo+IC3CoMKgwqDCoMKg wqDCoCBpZiAoY3R4LT5wX3RvX2dwYiAmJiBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1ApCj4g K8KgwqDCoMKgwqDCoMKgIGlmIChiYXNlX2N0eC0+cF90b19ncGIgJiYgYmFzZV9waWMtPnR5cGUg PT0gUElDVFVSRV9UWVBFX1ApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIFJlZmVyZW5j ZSBmb3IgR1BCIEItZnJhbWUsIEwwID09IEwxCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZz bGljZS0+cmVmX3BpY19saXN0MVswXSA9IHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbMF07Cj4gwqDC oMKgwqAgfQo+IC3CoMKgwqAgaWYgKHBpYy0+bmJfcmVmc1sxXSkgewo+ICvCoMKgwqAgaWYgKGJh c2VfcGljLT5uYl9yZWZzWzFdKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAvLyBGb3J3YXJkIHJlZmVy ZW5jZSBmb3IgQi1mcmFtZS4KPiAtwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChwaWMtPnR5cGUg PT0gUElDVFVSRV9UWVBFX0IpOwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGlj LT50eXBlID09IFBJQ1RVUkVfVFlQRV9CKTsKPiDCoMKgwqDCoMKgwqDCoMKgIHZzbGljZS0+cmVm X3BpY19saXN0MVswXSA9IHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbMV07Cj4gwqDCoMKgwqAgfQo+ IMKgCj4gLcKgwqDCoCBpZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QICYmIGN0eC0+cF90 b19ncGIpIHsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCAm JiBiYXNlX2N0eC0+cF90b19ncGIpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIHZzbGljZS0+c2xpY2Vf dHlwZSA9IEhFVkNfU0xJQ0VfQjsKPiDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBG Rl9BUlJBWV9FTEVNUyh2c2xpY2UtPnJlZl9waWNfbGlzdDApOyBpKyspIHsKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdnNsaWNlLT5yZWZfcGljX2xpc3QxW2ldLnBpY3R1cmVfaWQgPSB2c2xp Y2UtCj4gPnJlZl9waWNfbGlzdDBbaV0ucGljdHVyZV9pZDsKPiBAQCAtMTE5OCw4ICsxMjAxLDkg QEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9oMjY1X2luaXRfc2xpY2VfcGFyYW1zKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwKPiDCoAo+IMKgc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29k ZV9oMjY1X2dldF9lbmNvZGVyX2NhcHMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+IC3C oMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlSDI2NUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoMKgICpjdHggPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVIMjY1Q29udGV4dMKgICpwcml2 ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoAo+IMKgI2lmIFZBX0NIRUNLX1ZFUlNJT04oMSwgMTMs IDApCj4gwqDCoMKgwqAgewo+IEBAIC0xMjUwLDE4ICsxMjU0LDE5IEBAIHN0YXRpYyBhdl9jb2xk IGludAo+IHZhYXBpX2VuY29kZV9oMjY1X2dldF9lbmNvZGVyX2NhcHMoQVZDb2RlY0NvbnRleHQg KmF2Y3R4KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIm1pbiBDQiBzaXplICVkeCVkLlxuIiwg cHJpdi0+Y3R1X3NpemUsIHByaXYtPmN0dV9zaXplLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cHJpdi0+bWluX2NiX3NpemUsIHByaXYtPm1pbl9jYl9zaXplKTsKPiDCoAo+IC3CoMKgwqAgY3R4 LT5zdXJmYWNlX3dpZHRowqAgPSBGRkFMSUdOKGF2Y3R4LT53aWR0aCzCoCBwcml2LT5taW5fY2Jf c2l6ZSk7Cj4gLcKgwqDCoCBjdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVp Z2h0LCBwcml2LT5taW5fY2Jfc2l6ZSk7Cj4gK8KgwqDCoCBiYXNlX2N0eC0+c3VyZmFjZV93aWR0 aMKgID0gRkZBTElHTihhdmN0eC0+d2lkdGgswqAgcHJpdi0+bWluX2NiX3NpemUpOwo+ICvCoMKg wqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCBwcml2 LT5taW5fY2Jfc2l6ZSk7Cj4gwqAKPiAtwqDCoMKgIGN0eC0+c2xpY2VfYmxvY2tfd2lkdGggPSBj dHgtPnNsaWNlX2Jsb2NrX2hlaWdodCA9IHByaXYtPmN0dV9zaXplOwo+ICvCoMKgwqAgYmFzZV9j dHgtPnNsaWNlX2Jsb2NrX3dpZHRoID0gYmFzZV9jdHgtPnNsaWNlX2Jsb2NrX2hlaWdodCA9IHBy aXYtCj4gPmN0dV9zaXplOwo+IMKgCj4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiDC oHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfaDI2NV9jb25maWd1cmUoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDC oCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlSDI2NUNvbnRl eHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4 dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250 ZXh0wqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElF bmNvZGVIMjY1Q29udGV4dMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBp bnQgZXJyOwo+IMKgCj4gwqDCoMKgwqAgZXJyID0gZmZfY2JzX2luaXQoJnByaXYtPmNiYywgQVZf Q09ERUNfSURfSEVWQywgYXZjdHgpOwo+IEBAIC0xMjczLDcgKzEyNzgsNyBAQCBzdGF0aWMgYXZf Y29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9jb25maWd1cmUoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQo+IMKgwqDCoMKgwqDCoMKgwqAgLy8gdGhlcmVmb3JlIGFsd2F5cyBib3VuZGVkIGJlbG93 IGJ5IDEsIGV2ZW4gaW4gMTAtYml0IG1vZGUgd2hlcmUKPiDCoMKgwqDCoMKgwqDCoMKgIC8vIGl0 IHNob3VsZCBnbyBkb3duIHRvIC0xMi4KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoCBwcml2LT5maXhl ZF9xcF9wID0gYXZfY2xpcChjdHgtPnJjX3F1YWxpdHksIDEsIDUxKTsKPiArwqDCoMKgwqDCoMKg wqAgcHJpdi0+Zml4ZWRfcXBfcCA9IGF2X2NsaXAoYmFzZV9jdHgtPnJjX3F1YWxpdHksIDEsIDUx KTsKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIChhdmN0eC0+aV9xdWFudF9mYWN0b3IgPiAwLjApCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPmZpeGVkX3FwX2lkciA9Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfY2xpcCgoYXZjdHgtPmlfcXVhbnRfZmFjdG9yICog cHJpdi0+Zml4ZWRfcXBfcCArCj4gQEAgLTEzNTcsOCArMTM2Miw5IEBAIHN0YXRpYyBjb25zdCBW QUFQSUVuY29kZVR5cGUgdmFhcGlfZW5jb2RlX3R5cGVfaDI2NSA9IHsKPiDCoAo+IMKgc3RhdGlj IGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9oMjY1X2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoCAqY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlSDI2NUNvbnRleHQgKnByaXYgPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHgg PSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDC oMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVIMjY1Q29u dGV4dMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoAo+IMKgwqDCoMKgIGN0eC0+Y29k ZWMgPSAmdmFhcGlfZW5jb2RlX3R5cGVfaDI2NTsKPiDCoAo+IEBAIC0xMzc5LDcgKzEzODUsNyBA QCBzdGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2gyNjVfaW5pdChBVkNvZGVjQ29udGV4 dAo+ICphdmN0eCkKPiDCoMKgwqDCoMKgwqDCoMKgIFZBX0VOQ19QQUNLRURfSEVBREVSX01JU0M7 wqDCoMKgwqDCoCAvLyBTRUkKPiDCoAo+IMKgwqDCoMKgIGlmIChwcml2LT5xcCA+IDApCj4gLcKg wqDCoMKgwqDCoMKgIGN0eC0+ZXhwbGljaXRfcXAgPSBwcml2LT5xcDsKPiArwqDCoMKgwqDCoMKg wqAgYmFzZV9jdHgtPmV4cGxpY2l0X3FwID0gcHJpdi0+cXA7Cj4gwqAKPiDCoMKgwqDCoCByZXR1 cm4gZmZfdmFhcGlfZW5jb2RlX2luaXQoYXZjdHgpOwo+IMKgfQo+IEBAIC0xMzk4LDYgKzE0MDQs NyBAQCBzdGF0aWMgYXZfY29sZCBpbnQKPiB2YWFwaV9lbmNvZGVfaDI2NV9jbG9zZShBVkNvZGVj Q29udGV4dCAqYXZjdHgpCj4gwqAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihWQUFQSUVuY29k ZUgyNjVDb250ZXh0LCB4KQo+IMKgI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFS QU0gfCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTSkKPiDCoHN0YXRpYyBjb25zdCBBVk9wdGlv biB2YWFwaV9lbmNvZGVfaDI2NV9vcHRpb25zW10gPSB7Cj4gK8KgwqDCoCBIV19CQVNFX0VOQ09E RV9DT01NT05fT1BUSU9OUywKPiDCoMKgwqDCoCBWQUFQSV9FTkNPREVfQ09NTU9OX09QVElPTlMs Cj4gwqDCoMKgwqAgVkFBUElfRU5DT0RFX1JDX09QVElPTlMsCj4gwqAKPiBkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92YWFwaV9lbmNvZGVfbWpwZWcuYyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2Rl X21qcGVnLmMKPiBpbmRleCBjMTc3NDdlM2E5Li45MTgyOWIxZTBlIDEwMDY0NAo+IC0tLSBhL2xp YmF2Y29kZWMvdmFhcGlfZW5jb2RlX21qcGVnLmMKPiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2Vu Y29kZV9tanBlZy5jCj4gQEAgLTIyMiw3ICsyMjIsOSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5j b2RlX21qcGVnX3dyaXRlX2V4dHJhX2J1ZmZlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqBz dGF0aWMgaW50IHZhYXBpX2VuY29kZV9tanBlZ19pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWND b250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljKQo+IMKgewo+ICvCoMKgwqAgSFdCYXNlRW5jb2Rl Q29udGV4dMKgwqDCoMKgwqDCoMKgwqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDC oMKgwqDCoCBWQUFQSUVuY29kZU1KUEVHQ29udGV4dMKgwqDCoMKgwqDCoMKgwqAgKnByaXYgPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZcKgwqDCoMKgwqDC oMKgwqAgKmJhc2VfcGljID0gKEhXQmFzZUVuY29kZVBpY3R1cmUgKilwaWM7Cj4gwqDCoMKgwqAg SlBFR1Jhd0ZyYW1lSGVhZGVywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpmaCA9ICZw cml2LT5mcmFtZV9oZWFkZXI7Cj4gwqDCoMKgwqAgSlBFR1Jhd1NjYW5IZWFkZXLCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqc2ggPSAmcHJpdi0+c2Nhbi5oZWFkZXI7Cj4gwqDCoMKg wqAgVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVySlBFRyAqdnBpYyA9IHBpYy0+Y29kZWNfcGlj dHVyZV9wYXJhbXM7Cj4gQEAgLTIzMiw5ICsyMzQsOSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5j b2RlX21qcGVnX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKg wqDCoMKgIGNvbnN0IHVpbnQ4X3QgKmNvbXBvbmVudHM7Cj4gwqDCoMKgwqAgaW50IHQsIGksIHF1 YW50X3NjYWxlLCBsZW47Cj4gwqAKPiAtwqDCoMKgIGF2X2Fzc2VydDAocGljLT50eXBlID09IFBJ Q1RVUkVfVFlQRV9JRFIpOwo+ICvCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+dHlwZSA9PSBQ SUNUVVJFX1RZUEVfSURSKTsKPiDCoAo+IC3CoMKgwqAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19n ZXQocHJpdi0+Y29tbW9uLmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsKPiArwqDCoMKgIGRlc2Mg PSBhdl9waXhfZm10X2Rlc2NfZ2V0KGJhc2VfY3R4LT5pbnB1dF9mcmFtZXMtPnN3X2Zvcm1hdCk7 Cj4gwqDCoMKgwqAgYXZfYXNzZXJ0MChkZXNjKTsKPiDCoMKgwqDCoCBpZiAoZGVzYy0+ZmxhZ3Mg JiBBVl9QSVhfRk1UX0ZMQUdfUkdCKQo+IMKgwqDCoMKgwqDCoMKgwqAgY29tcG9uZW50cyA9IGNv bXBvbmVudHNfcmdiOwo+IEBAIC0yNjEsNyArMjYzLDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2Vu Y29kZV9tanBlZ19pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDC oMKgwqDCoCAvLyBKRklGIGhlYWRlci4KPiDCoMKgwqDCoCBpZiAocHJpdi0+amZpZikgewo+IMKg wqDCoMKgwqDCoMKgwqAgSlBFR1Jhd0FwcGxpY2F0aW9uRGF0YSAqYXBwID0gJnByaXYtPmpmaWZf aGVhZGVyOwo+IC3CoMKgwqDCoMKgwqDCoCBBVlJhdGlvbmFsIHNhciA9IHBpYy0+aW5wdXRfaW1h Z2UtPnNhbXBsZV9hc3BlY3RfcmF0aW87Cj4gK8KgwqDCoMKgwqDCoMKgIEFWUmF0aW9uYWwgc2Fy ID0gYmFzZV9waWMtPmlucHV0X2ltYWdlLT5zYW1wbGVfYXNwZWN0X3JhdGlvOwo+IMKgwqDCoMKg wqDCoMKgwqAgaW50IHNhcl93LCBzYXJfaDsKPiDCoMKgwqDCoMKgwqDCoMKgIFB1dEJ5dGVDb250 ZXh0IHBiYzsKPiDCoAo+IEBAIC00MzYsMjUgKzQzOCwyNiBAQCBzdGF0aWMgaW50Cj4gdmFhcGlf ZW5jb2RlX21qcGVnX2luaXRfc2xpY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDC oAo+IMKgc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9tanBlZ19nZXRfZW5jb2Rlcl9j YXBzKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29u dGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRl eHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBjb25zdCBBVlBpeEZt dERlc2NyaXB0b3IgKmRlc2M7Cj4gwqAKPiAtwqDCoMKgIGRlc2MgPSBhdl9waXhfZm10X2Rlc2Nf Z2V0KGN0eC0+aW5wdXRfZnJhbWVzLT5zd19mb3JtYXQpOwo+ICvCoMKgwqAgZGVzYyA9IGF2X3Bp eF9mbXRfZGVzY19nZXQoYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsKPiDCoMKg wqDCoCBhdl9hc3NlcnQwKGRlc2MpOwo+IMKgCj4gLcKgwqDCoCBjdHgtPnN1cmZhY2Vfd2lkdGjC oCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLMKgIDggPDwgZGVzYy0+bG9nMl9jaHJvbWFfdyk7Cj4g LcKgwqDCoCBjdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCA4IDw8 IGRlc2MtPmxvZzJfY2hyb21hX2gpOwo+ICvCoMKgwqAgYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGjC oCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLMKgIDggPDwgZGVzYy0KPiA+bG9nMl9jaHJvbWFfdyk7 Cj4gK8KgwqDCoCBiYXNlX2N0eC0+c3VyZmFjZV9oZWlnaHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWln aHQsIDggPDwgZGVzYy0KPiA+bG9nMl9jaHJvbWFfaCk7Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4g MDsKPiDCoH0KPiDCoAo+IMKgc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9tanBlZ19j b25maWd1cmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+ICvCoMKgwqAgSFdCYXNlRW5j b2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZBQVBJ RW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKg wqDCoCBWQUFQSUVuY29kZU1KUEVHQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4g wqDCoMKgwqAgaW50IGVycjsKPiDCoAo+IC3CoMKgwqAgcHJpdi0+cXVhbGl0eSA9IGN0eC0+cmNf cXVhbGl0eTsKPiArwqDCoMKgIHByaXYtPnF1YWxpdHkgPSBiYXNlX2N0eC0+cmNfcXVhbGl0eTsK PiDCoMKgwqDCoCBpZiAocHJpdi0+cXVhbGl0eSA8IDEgfHwgcHJpdi0+cXVhbGl0eSA+IDEwMCkg ewo+IMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IHF1YWxpdHkgdmFsdWUgJWQgIgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiKG11 c3QgYmUgMS0xMDApLlxuIiwgcHJpdi0+cXVhbGl0eSk7Cj4gQEAgLTU0MCw2ICs1NDMsNyBAQCBz dGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX21qcGVnX2Nsb3NlKEFWQ29kZWNDb250ZXh0 Cj4gKmF2Y3R4KQo+IMKgI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVkFBUElFbmNvZGVNSlBF R0NvbnRleHQsIHgpCj4gwqAjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8 IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQo+IMKgc3RhdGljIGNvbnN0IEFWT3B0aW9uIHZh YXBpX2VuY29kZV9tanBlZ19vcHRpb25zW10gPSB7Cj4gK8KgwqDCoCBIV19CQVNFX0VOQ09ERV9D T01NT05fT1BUSU9OUywKPiDCoMKgwqDCoCBWQUFQSV9FTkNPREVfQ09NTU9OX09QVElPTlMsCj4g wqAKPiDCoMKgwqDCoCB7ICJqZmlmIiwgIkluY2x1ZGUgSkZJRiBoZWFkZXIiLAo+IGRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9tcGVnMi5jIGIvbGliYXZjb2RlYy92YWFwaV9l bmNvZGVfbXBlZzIuYwo+IGluZGV4IGM5YjE2ZmJjZmMuLmFhOGU2ZDZiZGYgMTAwNjQ0Cj4gLS0t IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfbXBlZzIuYwo+ICsrKyBiL2xpYmF2Y29kZWMvdmFh cGlfZW5jb2RlX21wZWcyLmMKPiBAQCAtMTY2LDYgKzE2Niw3IEBAIGZhaWw6Cj4gwqAKPiDCoHN0 YXRpYyBpbnQgdmFhcGlfZW5jb2RlX21wZWcyX2luaXRfc2VxdWVuY2VfcGFyYW1zKEFWQ29kZWND b250ZXh0ICphdmN0eCkKPiDCoHsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHTCoMKgwqDC oMKgwqDCoMKgwqDCoCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZB QVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjdHggPSBh dmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZBQVBJRW5jb2RlTVBFRzJDb250ZXh0wqDCoMKg wqDCoMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIE1QRUcy UmF3U2VxdWVuY2VIZWFkZXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqc2ggPSAmcHJpdi0+ c2VxdWVuY2VfaGVhZGVyOwo+IEBAIC0yODEsNyArMjgyLDcgQEAgc3RhdGljIGludAo+IHZhYXBp X2VuY29kZV9tcGVnMl9pbml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgp Cj4gwqAKPiDCoMKgwqDCoCBzZS0+Yml0X3JhdGVfZXh0ZW5zaW9uwqDCoMKgwqDCoMKgwqAgPSBw cml2LT5iaXRfcmF0ZSA+PiAxODsKPiDCoMKgwqDCoCBzZS0+dmJ2X2J1ZmZlcl9zaXplX2V4dGVu c2lvbiA9IHByaXYtPnZidl9idWZmZXJfc2l6ZSA+PiAxMDsKPiAtwqDCoMKgIHNlLT5sb3dfZGVs YXnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+Yl9wZXJfcCA9PSAwOwo+ ICvCoMKgwqAgc2UtPmxvd19kZWxhecKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0g YmFzZV9jdHgtPmJfcGVyX3AgPT0gMDsKPiDCoAo+IMKgwqDCoMKgIHNlLT5mcmFtZV9yYXRlX2V4 dGVuc2lvbl9uID0gZXh0X247Cj4gwqDCoMKgwqAgc2UtPmZyYW1lX3JhdGVfZXh0ZW5zaW9uX2Qg PSBleHRfZDsKPiBAQCAtMzUzLDggKzM1NCw4IEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVf bXBlZzJfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgCj4g wqAKPiDCoMKgwqDCoCAqdnNlcSA9IChWQUVuY1NlcXVlbmNlUGFyYW1ldGVyQnVmZmVyTVBFRzIp IHsKPiAtwqDCoMKgwqDCoMKgwqAgLmludHJhX3BlcmlvZCA9IGN0eC0+Z29wX3NpemUsCj4gLcKg wqDCoMKgwqDCoMKgIC5pcF9wZXJpb2TCoMKgwqAgPSBjdHgtPmJfcGVyX3AgKyAxLAo+ICvCoMKg wqDCoMKgwqDCoCAuaW50cmFfcGVyaW9kID0gYmFzZV9jdHgtPmdvcF9zaXplLAo+ICvCoMKgwqDC oMKgwqDCoCAuaXBfcGVyaW9kwqDCoMKgID0gYmFzZV9jdHgtPmJfcGVyX3AgKyAxLAo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoCAucGljdHVyZV93aWR0aMKgID0gYXZjdHgtPndpZHRoLAo+IMKgwqDC oMKgwqDCoMKgwqAgLnBpY3R1cmVfaGVpZ2h0ID0gYXZjdHgtPmhlaWdodCwKPiBAQCAtNDE3LDMw ICs0MTgsMzEgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV9tcGVnMl9pbml0X3NlcXVlbmNl X3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQg dmFhcGlfZW5jb2RlX21wZWcyX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNv ZGVQaWN0dXJlICpwaWMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljKQo+IMKgewo+IMKgwqDCoMKgIFZBQVBJRW5jb2Rl TVBFRzJDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmXCoMKgwqDCoMKgwqDCoMKgwqAgKmJhc2VfcGlj ID0gKEhXQmFzZUVuY29kZVBpY3R1cmUgKilwaWM7Cj4gwqDCoMKgwqAgTVBFRzJSYXdQaWN0dXJl SGVhZGVywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBoID0gJnByaXYtPnBpY3R1cmVfaGVh ZGVyOwo+IMKgwqDCoMKgIE1QRUcyUmF3UGljdHVyZUNvZGluZ0V4dGVuc2lvbsKgwqDCoCAqcGNl ID0gJnByaXYtCj4gPnBpY3R1cmVfY29kaW5nX2V4dGVuc2lvbi5kYXRhLnBpY3R1cmVfY29kaW5n Owo+IMKgwqDCoMKgIFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlck1QRUcyICp2cGljID0gcGlj LT5jb2RlY19waWN0dXJlX3BhcmFtczsKPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+dHlwZSA9PSBQ SUNUVVJFX1RZUEVfSURSIHx8IHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSSkgewo+ICvCoMKg wqAgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIgfHwgYmFzZV9waWMtPnR5 cGUgPT0KPiBQSUNUVVJFX1RZUEVfSSkgewo+IMKgwqDCoMKgwqDCoMKgwqAgcGgtPnRlbXBvcmFs X3JlZmVyZW5jZcKgID0gMDsKPiDCoMKgwqDCoMKgwqDCoMKgIHBoLT5waWN0dXJlX2NvZGluZ190 eXBlID0gMTsKPiAtwqDCoMKgwqDCoMKgwqAgcHJpdi0+bGFzdF9pX2ZyYW1lID0gcGljLT5kaXNw bGF5X29yZGVyOwo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT5sYXN0X2lfZnJhbWUgPSBiYXNlX3Bp Yy0+ZGlzcGxheV9vcmRlcjsKPiDCoMKgwqDCoCB9IGVsc2Ugewo+IC3CoMKgwqDCoMKgwqDCoCBw aC0+dGVtcG9yYWxfcmVmZXJlbmNlID0gcGljLT5kaXNwbGF5X29yZGVyIC0gcHJpdi0+bGFzdF9p X2ZyYW1lOwo+IC3CoMKgwqDCoMKgwqDCoCBwaC0+cGljdHVyZV9jb2RpbmdfdHlwZSA9IHBpYy0+ dHlwZSA9PSBQSUNUVVJFX1RZUEVfQiA/IDMgOiAyOwo+ICvCoMKgwqDCoMKgwqDCoCBwaC0+dGVt cG9yYWxfcmVmZXJlbmNlID0gYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIgLSBwcml2LQo+ID5sYXN0 X2lfZnJhbWU7Cj4gK8KgwqDCoMKgwqDCoMKgIHBoLT5waWN0dXJlX2NvZGluZ190eXBlID0gYmFz ZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0IgPyAzIDogMjsKPiDCoMKgwqDCoCB9Cj4gwqAK PiAtwqDCoMKgIGlmIChwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1AgfHwgcGljLT50eXBlID09 IFBJQ1RVUkVfVFlQRV9CKSB7Cj4gK8KgwqDCoCBpZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVS RV9UWVBFX1AgfHwgYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0IpCj4gewo+IMKgwqDC oMKgwqDCoMKgwqAgcGNlLT5mX2NvZGVbMF1bMF0gPSBwcml2LT5mX2NvZGVfaG9yaXpvbnRhbDsK PiDCoMKgwqDCoMKgwqDCoMKgIHBjZS0+Zl9jb2RlWzBdWzFdID0gcHJpdi0+Zl9jb2RlX3ZlcnRp Y2FsOwo+IMKgwqDCoMKgIH0gZWxzZSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBwY2UtPmZfY29kZVsw XVswXSA9IDE1Owo+IMKgwqDCoMKgwqDCoMKgwqAgcGNlLT5mX2NvZGVbMF1bMV0gPSAxNTsKPiDC oMKgwqDCoCB9Cj4gLcKgwqDCoCBpZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9CKSB7Cj4g K8KgwqDCoCBpZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0IpIHsKPiDCoMKgwqDC oMKgwqDCoMKgIHBjZS0+Zl9jb2RlWzFdWzBdID0gcHJpdi0+Zl9jb2RlX2hvcml6b250YWw7Cj4g wqDCoMKgwqDCoMKgwqDCoCBwY2UtPmZfY29kZVsxXVsxXSA9IHByaXYtPmZfY29kZV92ZXJ0aWNh bDsKPiDCoMKgwqDCoCB9IGVsc2Ugewo+IEBAIC00NTEsMTkgKzQ1MywxOSBAQCBzdGF0aWMgaW50 Cj4gdmFhcGlfZW5jb2RlX21wZWcyX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAo+IMKgwqDCoMKgIHZwaWMtPnJlY29uc3RydWN0ZWRfcGljdHVyZSA9IHBpYy0+cmVj b25fc3VyZmFjZTsKPiDCoMKgwqDCoCB2cGljLT5jb2RlZF9idWbCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBwaWMtPm91dHB1dF9idWZmZXI7Cj4gwqAKPiAtwqDCoMKgIHN3aXRjaCAocGljLT50 eXBlKSB7Cj4gK8KgwqDCoCBzd2l0Y2ggKGJhc2VfcGljLT50eXBlKSB7Cj4gwqDCoMKgwqAgY2Fz ZSBQSUNUVVJFX1RZUEVfSURSOgo+IMKgwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX0k6Cj4gwqDC oMKgwqDCoMKgwqDCoCB2cGljLT5waWN0dXJlX3R5cGUgPSBWQUVuY1BpY3R1cmVUeXBlSW50cmE7 Cj4gwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiDCoMKgwqDCoCBjYXNlIFBJQ1RVUkVfVFlQRV9Q Ogo+IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cGljdHVyZV90eXBlID0gVkFFbmNQaWN0dXJlVHlw ZVByZWRpY3RpdmU7Cj4gLcKgwqDCoMKgwqDCoMKgIHZwaWMtPmZvcndhcmRfcmVmZXJlbmNlX3Bp Y3R1cmUgPSBwaWMtPnJlZnNbMF1bMF0tPnJlY29uX3N1cmZhY2U7Cj4gK8KgwqDCoMKgwqDCoMKg IHZwaWMtPmZvcndhcmRfcmVmZXJlbmNlX3BpY3R1cmUgPSAoKFZBQVBJRW5jb2RlUGljdHVyZSAq KWJhc2VfcGljLQo+ID5yZWZzWzBdWzBdKS0+cmVjb25fc3VyZmFjZTsKPiDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+IMKgwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX0I6Cj4gwqDCoMKgwqDCoMKg wqDCoCB2cGljLT5waWN0dXJlX3R5cGUgPSBWQUVuY1BpY3R1cmVUeXBlQmlkaXJlY3Rpb25hbDsK PiAtwqDCoMKgwqDCoMKgwqAgdnBpYy0+Zm9yd2FyZF9yZWZlcmVuY2VfcGljdHVyZcKgID0gcGlj LT5yZWZzWzBdWzBdLT5yZWNvbl9zdXJmYWNlOwo+IC3CoMKgwqDCoMKgwqDCoCB2cGljLT5iYWNr d2FyZF9yZWZlcmVuY2VfcGljdHVyZSA9IHBpYy0+cmVmc1sxXVswXS0+cmVjb25fc3VyZmFjZTsK PiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+Zm9yd2FyZF9yZWZlcmVuY2VfcGljdHVyZcKgID0gKChW QUFQSUVuY29kZVBpY3R1cmUgKiliYXNlX3BpYy0KPiA+cmVmc1swXVswXSktPnJlY29uX3N1cmZh Y2U7Cj4gK8KgwqDCoMKgwqDCoMKgIHZwaWMtPmJhY2t3YXJkX3JlZmVyZW5jZV9waWN0dXJlID0g KChWQUFQSUVuY29kZVBpY3R1cmUgKiliYXNlX3BpYy0KPiA+cmVmc1sxXVswXSktPnJlY29uX3N1 cmZhY2U7Cj4gwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiDCoMKgwqDCoCBkZWZhdWx0Ogo+IMKg wqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MCgwICYmICJpbnZhbGlkIHBpY3R1cmUgdHlwZSIpOwo+ IEBAIC00NzksMTcgKzQ4MSwxOCBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX21wZWcyX2lu aXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgfQo+IMKgCj4gwqBz dGF0aWMgaW50IHZhYXBpX2VuY29kZV9tcGVnMl9pbml0X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZBQVBJ RW5jb2RlUGljdHVyZSAqcGljLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBWQUFQSUVuY29kZVNsaWNlICpzbGljZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYywKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVNsaWNlICpzbGljZSkKPiDCoHsKPiAtwqDC oMKgIFZBQVBJRW5jb2RlTVBFRzJDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcHJpdiA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gLcKgwqDCoCBWQUVuY1NsaWNlUGFyYW1ldGVyQnVmZmVyTVBF RzLCoMKgICp2c2xpY2UgPSBzbGljZS0+Y29kZWNfc2xpY2VfcGFyYW1zOwo+ICvCoMKgwqAgSFdC YXNlRW5jb2RlUGljdHVyZcKgwqDCoMKgwqDCoMKgwqDCoCAqYmFzZV9waWMgPSAoSFdCYXNlRW5j b2RlUGljdHVyZSAqKXBpYzsKPiArwqDCoMKgIFZBQVBJRW5jb2RlTVBFRzJDb250ZXh0wqDCoMKg wqDCoMKgwqDCoMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBRW5jU2xp Y2VQYXJhbWV0ZXJCdWZmZXJNUEVHMiAqdnNsaWNlID0gc2xpY2UtPmNvZGVjX3NsaWNlX3BhcmFt czsKPiDCoMKgwqDCoCBpbnQgcXA7Cj4gwqAKPiDCoMKgwqDCoCB2c2xpY2UtPm1hY3JvYmxvY2tf YWRkcmVzcyA9IHNsaWNlLT5ibG9ja19zdGFydDsKPiDCoMKgwqDCoCB2c2xpY2UtPm51bV9tYWNy b2Jsb2Nrc8KgwqDCoCA9IHNsaWNlLT5ibG9ja19zaXplOwo+IMKgCj4gLcKgwqDCoCBzd2l0Y2gg KHBpYy0+dHlwZSkgewo+ICvCoMKgwqAgc3dpdGNoIChiYXNlX3BpYy0+dHlwZSkgewo+IMKgwqDC oMKgIGNhc2UgUElDVFVSRV9UWVBFX0lEUjoKPiDCoMKgwqDCoCBjYXNlIFBJQ1RVUkVfVFlQRV9J Ogo+IMKgwqDCoMKgwqDCoMKgwqAgcXAgPSBwcml2LT5xdWFudF9pOwo+IEBAIC01MDUsMTQgKzUw OCwxNSBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX21wZWcyX2luaXRfc2xpY2VfcGFyYW1z KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoCB2c2xp Y2UtPnF1YW50aXNlcl9zY2FsZV9jb2RlID0gcXA7Cj4gLcKgwqDCoCB2c2xpY2UtPmlzX2ludHJh X3NsaWNlID0gKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSIHx8Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGljLT50eXBl ID09IFBJQ1RVUkVfVFlQRV9JKTsKPiArwqDCoMKgIHZzbGljZS0+aXNfaW50cmFfc2xpY2UgPSAo YmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUiB8fAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2VfcGljLT50eXBl ID09IFBJQ1RVUkVfVFlQRV9JKTsKPiDCoAo+IMKgwqDCoMKgIHJldHVybiAwOwo+IMKgfQo+IMKg Cj4gwqBzdGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX21wZWcyX2NvbmZpZ3VyZShBVkNv ZGVjQ29udGV4dCAqYXZjdHgpCj4gwqB7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpi YXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0 wqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZBQVBJRW5j b2RlTVBFRzJDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBpbnQg ZXJyOwo+IEBAIC01MjIsNyArNTI2LDcgQEAgc3RhdGljIGF2X2NvbGQgaW50Cj4gdmFhcGlfZW5j b2RlX21wZWcyX2NvbmZpZ3VyZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gZXJyOwo+IMKgCj4gwqDCoMKgwqAgaWYgKGN0eC0+dmFfcmNfbW9kZSA9PSBW QV9SQ19DUVApIHsKPiAtwqDCoMKgwqDCoMKgwqAgcHJpdi0+cXVhbnRfcCA9IGF2X2NsaXAoY3R4 LT5yY19xdWFsaXR5LCAxLCAzMSk7Cj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPnF1YW50X3AgPSBh dl9jbGlwKGJhc2VfY3R4LT5yY19xdWFsaXR5LCAxLCAzMSk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBp ZiAoYXZjdHgtPmlfcXVhbnRfZmFjdG9yID4gMC4wKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwcml2LT5xdWFudF9pID0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9j bGlwKChhdmN0eC0+aV9xdWFudF9mYWN0b3IgKiBwcml2LT5xdWFudF9wICsKPiBAQCAtNjM5LDYg KzY0Myw3IEBAIHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfbXBlZzJfY2xvc2UoQVZD b2RlY0NvbnRleHQKPiAqYXZjdHgpCj4gwqAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihWQUFQ SUVuY29kZU1QRUcyQ29udGV4dCwgeCkKPiDCoCNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX1ZJ REVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0pCj4gwqBzdGF0aWMgY29uc3Qg QVZPcHRpb24gdmFhcGlfZW5jb2RlX21wZWcyX29wdGlvbnNbXSA9IHsKPiArwqDCoMKgIEhXX0JB U0VfRU5DT0RFX0NPTU1PTl9PUFRJT05TLAo+IMKgwqDCoMKgIFZBQVBJX0VOQ09ERV9DT01NT05f T1BUSU9OUywKPiDCoMKgwqDCoCBWQUFQSV9FTkNPREVfUkNfT1BUSU9OUywKPiDCoAo+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV92cDguYyBiL2xpYmF2Y29kZWMvdmFhcGlf ZW5jb2RlX3ZwOC5jCj4gaW5kZXggOGE1NTdiOTY3ZS4uYzgyMDNkY2JjOSAxMDA2NDQKPiAtLS0g YS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV92cDguYwo+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlf ZW5jb2RlX3ZwOC5jCj4gQEAgLTUyLDYgKzUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNv ZGVWUDhDb250ZXh0IHsKPiDCoAo+IMKgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfdnA4X2luaXRf c2VxdWVuY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoHsKPiArwqDCoMKgIEhX QmFzZUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUVuY1NlcXVlbmNl UGFyYW1ldGVyQnVmZmVyVlA4ICp2c2VxID0gY3R4LT5jb2RlY19zZXF1ZW5jZV9wYXJhbXM7Cj4g wqAKPiBAQCAtNjYsNyArNjcsNyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX3ZwOF9pbml0 X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gwqAKPiDCoMKgwqDCoCBp ZiAoIShjdHgtPnZhX3JjX21vZGUgJiBWQV9SQ19DUVApKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCB2 c2VxLT5iaXRzX3Blcl9zZWNvbmQgPSBjdHgtPnZhX2JpdF9yYXRlOwo+IC3CoMKgwqDCoMKgwqDC oCB2c2VxLT5pbnRyYV9wZXJpb2TCoMKgwqAgPSBjdHgtPmdvcF9zaXplOwo+ICvCoMKgwqDCoMKg wqDCoCB2c2VxLT5pbnRyYV9wZXJpb2TCoMKgwqAgPSBiYXNlX2N0eC0+Z29wX3NpemU7Cj4gwqDC oMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gQEAgLTc1LDYgKzc2LDcgQEAgc3Rh dGljIGludAo+IHZhYXBpX2VuY29kZV92cDhfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQo+IMKgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfdnA4X2luaXRfcGljdHVy ZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYykKPiDCoHsKPiArwqDCoMKg IEhXQmFzZUVuY29kZVBpY3R1cmXCoMKgwqDCoMKgwqDCoCAqYmFzZV9waWMgPSAoSFdCYXNlRW5j b2RlUGljdHVyZSAqKXBpYzsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZVZQOENvbnRleHTCoMKgwqDC oMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZBRW5jUGlj dHVyZVBhcmFtZXRlckJ1ZmZlclZQOCAqdnBpYyA9IHBpYy0+Y29kZWNfcGljdHVyZV9wYXJhbXM7 Cj4gwqDCoMKgwqAgaW50IGk7Cj4gQEAgLTgzLDEwICs4NSwxMCBAQCBzdGF0aWMgaW50Cj4gdmFh cGlfZW5jb2RlX3ZwOF9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwK PiDCoAo+IMKgwqDCoMKgIHZwaWMtPmNvZGVkX2J1ZiA9IHBpYy0+b3V0cHV0X2J1ZmZlcjsKPiDC oAo+IC3CoMKgwqAgc3dpdGNoIChwaWMtPnR5cGUpIHsKPiArwqDCoMKgIHN3aXRjaCAoYmFzZV9w aWMtPnR5cGUpIHsKPiDCoMKgwqDCoCBjYXNlIFBJQ1RVUkVfVFlQRV9JRFI6Cj4gwqDCoMKgwqAg Y2FzZSBQSUNUVVJFX1RZUEVfSToKPiAtwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChwaWMtPm5i X3JlZnNbMF0gPT0gMCAmJiBwaWMtPm5iX3JlZnNbMV0gPT0gMCk7Cj4gK8KgwqDCoMKgwqDCoMKg IGF2X2Fzc2VydDAoYmFzZV9waWMtPm5iX3JlZnNbMF0gPT0gMCAmJiBiYXNlX3BpYy0+bmJfcmVm c1sxXSA9PSAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9mbGFncy5iaXRzLmZvcmNl X2tmID0gMTsKPiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9sYXN0X2ZyYW1lID0KPiDCoMKg wqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9nZl9mcmFtZcKgwqAgPQo+IEBAIC05NCwyMCArOTYsMjAg QEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV92cDhfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNv ZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZBX0lOVkFMSURf U1VSRkFDRTsKPiDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgIGNhc2UgUElDVFVS RV9UWVBFX1A6Cj4gLcKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoIXBpYy0+bmJfcmVmc1sxXSk7 Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoIWJhc2VfcGljLT5uYl9yZWZzWzFdKTsKPiDC oMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9mbGFncy5iaXRzLm5vX3JlZl9sYXN0ID0gMDsKPiDC oMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9mbGFncy5iaXRzLm5vX3JlZl9nZsKgwqAgPSAxOwo+ IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmX2ZsYWdzLmJpdHMubm9fcmVmX2FyZsKgID0gMTsK PiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9sYXN0X2ZyYW1lID0KPiDCoMKgwqDCoMKgwqDC oMKgIHZwaWMtPnJlZl9nZl9mcmFtZcKgwqAgPQo+IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVm X2FyZl9mcmFtZcKgID0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPnJlZnNbMF1bMF0t PnJlY29uX3N1cmZhY2U7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKChWQUFQSUVuY29kZVBp Y3R1cmUgKiliYXNlX3BpYy0+cmVmc1swXVswXSktPnJlY29uX3N1cmZhY2U7Cj4gwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPiDCoMKgwqDCoCBkZWZhdWx0Ogo+IMKgwqDCoMKgwqDCoMKgwqAgYXZf YXNzZXJ0MCgwICYmICJpbnZhbGlkIHBpY3R1cmUgdHlwZSIpOwo+IMKgwqDCoMKgIH0KPiDCoAo+ IC3CoMKgwqAgdnBpYy0+cGljX2ZsYWdzLmJpdHMuZnJhbWVfdHlwZSA9IChwaWMtPnR5cGUgIT0g UElDVFVSRV9UWVBFX0lEUik7Cj4gK8KgwqDCoCB2cGljLT5waWNfZmxhZ3MuYml0cy5mcmFtZV90 eXBlID0gKGJhc2VfcGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9JRFIpOwo+IMKgwqDCoMKgIHZw aWMtPnBpY19mbGFncy5iaXRzLnNob3dfZnJhbWUgPSAxOwo+IMKgCj4gwqDCoMKgwqAgdnBpYy0+ cGljX2ZsYWdzLmJpdHMucmVmcmVzaF9sYXN0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDE7Cj4g QEAgLTE0NSw3ICsxNDcsNyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX3ZwOF93cml0ZV9x dWFudF90YWJsZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gwqAKPiDCoMKgwqDCoCBtZW1zZXQo JnF1YW50LCAwLCBzaXplb2YocXVhbnQpKTsKPiDCoAo+IC3CoMKgwqAgaWYgKHBpYy0+dHlwZSA9 PSBQSUNUVVJFX1RZUEVfUCkKPiArwqDCoMKgIGlmIChwaWMtPmJhc2UudHlwZSA9PSBQSUNUVVJF X1RZUEVfUCkKPiDCoMKgwqDCoMKgwqDCoMKgIHEgPSBwcml2LT5xX2luZGV4X3A7Cj4gwqDCoMKg wqAgZWxzZQo+IMKgwqDCoMKgwqDCoMKgwqAgcSA9IHByaXYtPnFfaW5kZXhfaTsKPiBAQCAtMTYx LDEwICsxNjMsMTEgQEAgc3RhdGljIGludAo+IHZhYXBpX2VuY29kZV92cDhfd3JpdGVfcXVhbnRf dGFibGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgCj4gwqBzdGF0aWMgYXZfY29sZCBpbnQg dmFhcGlfZW5jb2RlX3ZwOF9jb25maWd1cmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+ IC3CoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2Rh dGE7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZVZQOENvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqDCoCAqY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2RlVlA4Q29udGV4dMKgICpwcml2ID0g YXZjdHgtPnByaXZfZGF0YTsKPiDCoAo+IC3CoMKgwqAgcHJpdi0+cV9pbmRleF9wID0gYXZfY2xp cChjdHgtPnJjX3F1YWxpdHksIDAsIFZQOF9NQVhfUVVBTlQpOwo+ICvCoMKgwqAgcHJpdi0+cV9p bmRleF9wID0gYXZfY2xpcChiYXNlX2N0eC0+cmNfcXVhbGl0eSwgMCwgVlA4X01BWF9RVUFOVCk7 Cj4gwqDCoMKgwqAgaWYgKGF2Y3R4LT5pX3F1YW50X2ZhY3RvciA+IDAuMCkKPiDCoMKgwqDCoMKg wqDCoMKgIHByaXYtPnFfaW5kZXhfaSA9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Ns aXAoKGF2Y3R4LT5pX3F1YW50X2ZhY3RvciAqIHByaXYtPnFfaW5kZXhfcMKgICsKPiBAQCAtMjE2 LDYgKzIxOSw3IEBAIHN0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfdnA4X2luaXQoQVZD b2RlY0NvbnRleHQKPiAqYXZjdHgpCj4gwqAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihWQUFQ SUVuY29kZVZQOENvbnRleHQsIHgpCj4gwqAjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURF T19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQo+IMKgc3RhdGljIGNvbnN0IEFW T3B0aW9uIHZhYXBpX2VuY29kZV92cDhfb3B0aW9uc1tdID0gewo+ICvCoMKgwqAgSFdfQkFTRV9F TkNPREVfQ09NTU9OX09QVElPTlMsCj4gwqDCoMKgwqAgVkFBUElfRU5DT0RFX0NPTU1PTl9PUFRJ T05TLAo+IMKgwqDCoMKgIFZBQVBJX0VOQ09ERV9SQ19PUFRJT05TLAo+IMKgCj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX3ZwOS5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNv ZGVfdnA5LmMKPiBpbmRleCBjMmE4ZGVjNzFiLi43YTBjYjBjN2ZjIDEwMDY0NAo+IC0tLSBhL2xp YmF2Y29kZWMvdmFhcGlfZW5jb2RlX3ZwOS5jCj4gKysrIGIvbGliYXZjb2RlYy92YWFwaV9lbmNv ZGVfdnA5LmMKPiBAQCAtNTMsNiArNTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZVZQ OUNvbnRleHQgewo+IMKgCj4gwqBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV92cDlfaW5pdF9zZXF1 ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgewo+ICvCoMKgwqAgSFdCYXNl RW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoMKgwqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgIFZBRW5jU2VxdWVuY2VQYXJh bWV0ZXJCdWZmZXJWUDkgKnZzZXEgPSBjdHgtPmNvZGVjX3NlcXVlbmNlX3BhcmFtczsKPiDCoMKg wqDCoCBWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJWUDnCoCAqdnBpYyA9IGN0eC0+Y29kZWNf cGljdHVyZV9wYXJhbXM7Cj4gQEAgLTY0LDcgKzY1LDcgQEAgc3RhdGljIGludAo+IHZhYXBpX2Vu Y29kZV92cDlfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKg Cj4gwqDCoMKgwqAgaWYgKCEoY3R4LT52YV9yY19tb2RlICYgVkFfUkNfQ1FQKSkgewo+IMKgwqDC oMKgwqDCoMKgwqAgdnNlcS0+Yml0c19wZXJfc2Vjb25kID0gY3R4LT52YV9iaXRfcmF0ZTsKPiAt wqDCoMKgwqDCoMKgwqAgdnNlcS0+aW50cmFfcGVyaW9kwqDCoMKgID0gY3R4LT5nb3Bfc2l6ZTsK PiArwqDCoMKgwqDCoMKgwqAgdnNlcS0+aW50cmFfcGVyaW9kwqDCoMKgID0gYmFzZV9jdHgtPmdv cF9zaXplOwo+IMKgwqDCoMKgIH0KPiDCoAo+IMKgwqDCoMKgIHZwaWMtPmZyYW1lX3dpZHRoX3Ny Y8KgID0gYXZjdHgtPndpZHRoOwo+IEBAIC03OCw5ICs3OSwxMCBAQCBzdGF0aWMgaW50Cj4gdmFh cGlfZW5jb2RlX3ZwOV9pbml0X3NlcXVlbmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgp Cj4gwqBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV92cDlfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNv ZGVjQ29udGV4dCAqYXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljKQo+IMKgewo+IC3CoMKgwqAgVkFBUElFbmNvZGVD b250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0wqDCoMKgwqDCoMKgwqAgKmJhc2VfY3R4ID0g YXZjdHgtPnByaXZfZGF0YTsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZVZQOUNvbnRleHTCoMKgwqDC oMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+IC3CoMKgwqAgVkFBUElFbmNv ZGVWUDlQaWN0dXJlwqDCoMKgwqDCoMKgwqDCoMKgICpocGljID0gcGljLT5wcml2X2RhdGE7Cj4g K8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqAgKmJhc2VfcGljID0gKEhX QmFzZUVuY29kZVBpY3R1cmUgKilwaWM7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZVZQOVBpY3R1cmXC oMKgwqDCoMKgwqDCoMKgwqAgKmhwaWMgPSBiYXNlX3BpYy0+cHJpdl9kYXRhOwo+IMKgwqDCoMKg IFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlclZQOSAqdnBpYyA9IHBpYy0+Y29kZWNfcGljdHVy ZV9wYXJhbXM7Cj4gwqDCoMKgwqAgaW50IGk7Cj4gwqDCoMKgwqAgaW50IG51bV90aWxlX2NvbHVt bnM7Cj4gQEAgLTk0LDIwICs5NiwyMCBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX3ZwOV9p bml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoCBudW1f dGlsZV9jb2x1bW5zID0gKHZwaWMtPmZyYW1lX3dpZHRoX3NyYyArIFZQOV9NQVhfVElMRV9XSURU SCAtIDEpIC8KPiBWUDlfTUFYX1RJTEVfV0lEVEg7Cj4gwqDCoMKgwqAgdnBpYy0+bG9nMl90aWxl X2NvbHVtbnMgPSBudW1fdGlsZV9jb2x1bW5zID09IDEgPyAwIDoKPiBhdl9sb2cyKG51bV90aWxl X2NvbHVtbnMgLSAxKSArIDE7Cj4gwqAKPiAtwqDCoMKgIHN3aXRjaCAocGljLT50eXBlKSB7Cj4g K8KgwqDCoCBzd2l0Y2ggKGJhc2VfcGljLT50eXBlKSB7Cj4gwqDCoMKgwqAgY2FzZSBQSUNUVVJF X1RZUEVfSURSOgo+IC3CoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSA9 PSAwICYmIHBpYy0+bmJfcmVmc1sxXSA9PSAwKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0 MChiYXNlX3BpYy0+bmJfcmVmc1swXSA9PSAwICYmIGJhc2VfcGljLT5uYl9yZWZzWzFdID09IDAp Owo+IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmX2ZsYWdzLmJpdHMuZm9yY2Vfa2YgPSAxOwo+ IMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4ZmY7Cj4gwqDC oMKgwqDCoMKgwqDCoCBocGljLT5zbG90ID0gMDsKPiDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ IMKgwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX1A6Cj4gLcKgwqDCoMKgwqDCoMKgIGF2X2Fzc2Vy dDAoIXBpYy0+bmJfcmVmc1sxXSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoIWJhc2Vf cGljLT5uYl9yZWZzWzFdKTsKPiDCoMKgwqDCoMKgwqDCoMKgIHsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBWQUFQSUVuY29kZVZQOVBpY3R1cmUgKmhyZWYgPSBwaWMtPnJlZnNbMF1bMF0tPnBy aXZfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVZQOVBpY3R1cmUg KmhyZWYgPSBiYXNlX3BpYy0+cmVmc1swXVswXS0+cHJpdl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdl9hc3NlcnQwKGhyZWYtPnNsb3QgPT0gMCB8fCBocmVmLT5zbG90ID09IDEp Owo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+bWF4X2JfZGVwdGggPiAw KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGJhc2VfY3R4LT5tYXhfYl9kZXB0aCA+ IDApIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocGljLT5zbG90ID0gIWhy ZWYtPnNsb3Q7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmcmVz aF9mcmFtZV9mbGFncyA9IDEgPDwgaHBpYy0+c2xvdCB8IDB4ZmM7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0gZWxzZSB7Cj4gQEAgLTEyMCwyMCArMTIyLDIwIEBAIHN0YXRpYyBpbnQKPiB2 YWFwaV9lbmNvZGVfdnA5X2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+IMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gwqDCoMKg wqAgY2FzZSBQSUNUVVJFX1RZUEVfQjoKPiAtwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChwaWMt Pm5iX3JlZnNbMF0gJiYgcGljLT5uYl9yZWZzWzFdKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNz ZXJ0MChiYXNlX3BpYy0+bmJfcmVmc1swXSAmJiBiYXNlX3BpYy0+bmJfcmVmc1sxXSk7Cj4gwqDC oMKgwqDCoMKgwqDCoCB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVWUDlQ aWN0dXJlICpocmVmMCA9IHBpYy0+cmVmc1swXVswXS0+cHJpdl9kYXRhLAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KmhyZWYxID0gcGljLT5yZWZzWzFdWzBdLT5wcml2X2RhdGE7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXZfYXNzZXJ0MChocmVmMC0+c2xvdCA8IHBpYy0+Yl9kZXB0aCArIDEgJiYKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHJlZjEtPnNsb3QgPCBw aWMtPmJfZGVwdGggKyAxKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUFQSUVuY29kZVZQ OVBpY3R1cmUgKmhyZWYwID0gYmFzZV9waWMtPnJlZnNbMF1bMF0tPnByaXZfZGF0YSwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICpocmVmMSA9IGJhc2VfcGljLT5yZWZzWzFdWzBdLT5wcml2X2RhdGE7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChocmVmMC0+c2xvdCA8IGJhc2VfcGljLT5iX2Rl cHRoICsgMSAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBocmVmMS0+c2xvdCA8IGJhc2VfcGljLT5iX2RlcHRoICsgMSk7Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAocGljLT5iX2RlcHRoID09IGN0eC0+bWF4X2JfZGVwdGgpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYmFzZV9waWMtPmJfZGVwdGggPT0gYmFzZV9jdHgt Pm1heF9iX2RlcHRoKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gVW5y ZWZlcmVuY2VkIGZyYW1lLgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZwaWMt PnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSAweDAwOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGhwaWMtPnNsb3QgPSA4Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ug ewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmcmVzaF9mcmFtZV9m bGFncyA9IDB4ZmUgPDwgcGljLT5iX2RlcHRoICYgMHhmZjsKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGhwaWMtPnNsb3QgPSAxICsgcGljLT5iX2RlcHRoOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4ZmUgPDwg YmFzZV9waWMtPmJfZGVwdGggJiAweGZmOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaHBpYy0+c2xvdCA9IDEgKyBiYXNlX3BpYy0+Yl9kZXB0aDsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2cGljLT5yZWZfZmxhZ3MuYml0 cy5yZWZfZnJhbWVfY3RybF9sMMKgID0gMTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnBp Yy0+cmVmX2ZsYWdzLmJpdHMucmVmX2ZyYW1lX2N0cmxfbDHCoCA9IDI7Cj4gQEAgLTE0OCwzMSAr MTUwLDMxIEBAIHN0YXRpYyBpbnQKPiB2YWFwaV9lbmNvZGVfdnA5X2luaXRfcGljdHVyZV9wYXJh bXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IMKgwqDCoMKgIH0KPiDCoMKgwqDCoCBpZiAodnBp Yy0+cmVmcmVzaF9mcmFtZV9mbGFncyA9PSAweDAwKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBhdl9s b2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlBpYyAlIlBSSWQ2NCIgbm90IHN0b3JlZC5cbiIsCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGljLT5kaXNwbGF5X29yZGVyKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlcik7Cj4gwqDC oMKgwqAgfSBlbHNlIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiUGljICUiUFJJZDY0IiBzdG9yZWQgaW4gc2xvdCAlZC5cbiIsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGljLT5kaXNwbGF5X29yZGVyLCBocGljLT5zbG90KTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlciwgaHBpYy0+ c2xvdCk7Cj4gwqDCoMKgwqAgfQo+IMKgCj4gwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEZGX0FS UkFZX0VMRU1TKHZwaWMtPnJlZmVyZW5jZV9mcmFtZXMpOyBpKyspCj4gwqDCoMKgwqDCoMKgwqDC oCB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW2ldID0gVkFfSU5WQUxJRF9TVVJGQUNFOwo+IMKgCj4g wqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IE1BWF9SRUZFUkVOQ0VfTElTVF9OVU07IGkrKykgewo+ IC3CoMKgwqDCoMKgwqDCoCBmb3IgKGludCBqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1tpXTsgaisr KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpyZWZfcGlj ID0gcGljLT5yZWZzW2ldW2pdOwo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBqID0gMDsgaiA8 IGJhc2VfcGljLT5uYl9yZWZzW2ldOyBqKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBI V0Jhc2VFbmNvZGVQaWN0dXJlICpyZWZfcGljID0gYmFzZV9waWMtPnJlZnNbaV1bal07Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBzbG90Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzbG90ID0gKChWQUFQSUVuY29kZVZQOVBpY3R1cmUqKXJlZl9waWMtPnByaXZfZGF0YSktPnNs b3Q7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAodnBpYy0+cmVmZXJlbmNl X2ZyYW1lc1tzbG90XSA9PSBWQV9JTlZBTElEX1NVUkZBQ0UpOwo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbc2xvdF0gPSByZWZfcGljLT5yZWNvbl9zdXJm YWNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbc2xv dF0gPSAoKFZBQVBJRW5jb2RlUGljdHVyZSAqKXJlZl9waWMpLQo+ID5yZWNvbl9zdXJmYWNlOwo+ IMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgdnBpYy0+cGlj X2ZsYWdzLmJpdHMuZnJhbWVfdHlwZSA9IChwaWMtPnR5cGUgIT0gUElDVFVSRV9UWVBFX0lEUik7 Cj4gLcKgwqDCoCB2cGljLT5waWNfZmxhZ3MuYml0cy5zaG93X2ZyYW1lID0gcGljLT5kaXNwbGF5 X29yZGVyIDw9IHBpYy0KPiA+ZW5jb2RlX29yZGVyOwo+ICvCoMKgwqAgdnBpYy0+cGljX2ZsYWdz LmJpdHMuZnJhbWVfdHlwZSA9IChiYXNlX3BpYy0+dHlwZSAhPSBQSUNUVVJFX1RZUEVfSURSKTsK PiArwqDCoMKgIHZwaWMtPnBpY19mbGFncy5iaXRzLnNob3dfZnJhbWUgPSBiYXNlX3BpYy0+ZGlz cGxheV9vcmRlciA8PSBiYXNlX3BpYy0KPiA+ZW5jb2RlX29yZGVyOwo+IMKgCj4gLcKgwqDCoCBp ZiAocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpCj4gK8KgwqDCoCBpZiAoYmFzZV9waWMt PnR5cGUgPT0gUElDVFVSRV9UWVBFX0lEUikKPiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPmx1bWFf YWNfcWluZGV4wqDCoMKgwqAgPSBwcml2LT5xX2lkeF9pZHI7Cj4gLcKgwqDCoCBlbHNlIGlmIChw aWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1ApCj4gK8KgwqDCoCBlbHNlIGlmIChiYXNlX3BpYy0+ dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCkKPiDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPmx1bWFfYWNf cWluZGV4wqDCoMKgwqAgPSBwcml2LT5xX2lkeF9wOwo+IMKgwqDCoMKgIGVsc2UKPiDCoMKgwqDC oMKgwqDCoMKgIHZwaWMtPmx1bWFfYWNfcWluZGV4wqDCoMKgwqAgPSBwcml2LT5xX2lkeF9iOwo+ IEBAIC0xODgsMjIgKzE5MCwyMyBAQCBzdGF0aWMgaW50Cj4gdmFhcGlfZW5jb2RlX3ZwOV9pbml0 X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoAo+IMKgc3RhdGljIGF2 X2NvbGQgaW50IHZhYXBpX2VuY29kZV92cDlfZ2V0X2VuY29kZXJfY2FwcyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgpCj4gwqB7Cj4gLcKgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2 Y3R4LT5wcml2X2RhdGE7Cj4gwqAKPiDCoMKgwqDCoCAvLyBTdXJmYWNlcyBtdXN0IGJlIGFsaWdu ZWQgdG8gNjR4NjQgc3VwZXJibG9jayBib3VuZGFyaWVzLgo+IC3CoMKgwqAgY3R4LT5zdXJmYWNl X3dpZHRowqAgPSBGRkFMSUdOKGF2Y3R4LT53aWR0aCzCoCA2NCk7Cj4gLcKgwqDCoCBjdHgtPnN1 cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCA2NCk7Cj4gK8KgwqDCoCBiYXNl X2N0eC0+c3VyZmFjZV93aWR0aMKgID0gRkZBTElHTihhdmN0eC0+d2lkdGgswqAgNjQpOwo+ICvC oMKgwqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCA2 NCk7Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoH0KPiDCoAo+IMKgc3RhdGljIGF2X2Nv bGQgaW50IHZhYXBpX2VuY29kZV92cDlfY29uZmlndXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkK PiDCoHsKPiAtwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+IC3CoMKgwqAgVkFBUElFbmNvZGVWUDlDb250ZXh0ICpwcml2ID0gYXZjdHgt PnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2RlQ29udGV4dMKgwqDCoMKgwqDCoCAq Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2RlVlA5Q29udGV4dMKg wqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+IMKgCj4gwqDCoMKgwqAgaWYgKGN0eC0+cmNf bW9kZS0+cXVhbGl0eSkgewo+IC3CoMKgwqDCoMKgwqDCoCBwcml2LT5xX2lkeF9wID0gYXZfY2xp cChjdHgtPnJjX3F1YWxpdHksIDAsIFZQOV9NQVhfUVVBTlQpOwo+ICvCoMKgwqDCoMKgwqDCoCBw cml2LT5xX2lkeF9wID0gYXZfY2xpcChiYXNlX2N0eC0+cmNfcXVhbGl0eSwgMCwgVlA5X01BWF9R VUFOVCk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPmlfcXVhbnRfZmFjdG9yID4gMC4w KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT5xX2lkeF9pZHIgPQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2NsaXAoKGF2Y3R4LT5pX3F1YW50X2ZhY3RvciAq IHByaXYtPnFfaWR4X3DCoCArCj4gQEAgLTI3Myw2ICsyNzYsNyBAQCBzdGF0aWMgYXZfY29sZCBp bnQgdmFhcGlfZW5jb2RlX3ZwOV9pbml0KEFWQ29kZWNDb250ZXh0Cj4gKmF2Y3R4KQo+IMKgI2Rl ZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVkFBUElFbmNvZGVWUDlDb250ZXh0LCB4KQo+IMKgI2Rl ZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19FTkNPRElO R19QQVJBTSkKPiDCoHN0YXRpYyBjb25zdCBBVk9wdGlvbiB2YWFwaV9lbmNvZGVfdnA5X29wdGlv bnNbXSA9IHsKPiArwqDCoMKgIEhXX0JBU0VfRU5DT0RFX0NPTU1PTl9PUFRJT05TLAo+IMKgwqDC oMKgIFZBQVBJX0VOQ09ERV9DT01NT05fT1BUSU9OUywKPiDCoMKgwqDCoCBWQUFQSV9FTkNPREVf UkNfT1BUSU9OUywKPiDCoAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9y ZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVu c3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVz dEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=