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 EADE347489 for ; Fri, 8 Sep 2023 06:31:51 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D26F868C861; Fri, 8 Sep 2023 09:31:47 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.126]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CF26D68C48E for ; Fri, 8 Sep 2023 09:31:39 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694154705; x=1725690705; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=zUr19rXFcDH4RbxOKFJGfftFjc53xWafvY440DzUMe8=; b=gpFnWXn8idmvSNDKM/ytisXGPBSqeV+8vefcEv21QXfmEV4E02nkJEaz PVBsQV89D+gwXg5QonthebfWapvrXFxWzHvSBHgcfgO3vClcAhLVE8Ei1 zFESWiSMtCTQcqS/7XoEZ5IHuPq+muBxQIzVZPXYq59H0dxf57BUyPSHq /JWPdAxOI2uwvJfDGi2/6VCioQ1xGP4NP85UB7TkYqpiV/04+5u4LRaB1 uKYTAzT2mfAs3+TIMYWrriuZXWP2GZ2nTJnI75hE8sXX3VT5CDdAZO8+3 2V9izFxqZ/mn8mwqEdrAPaJTm45BGD6OZ0MRvXeqQsV7KSOJgCfR141AT w==; X-IronPort-AV: E=McAfee;i="6600,9927,10826"; a="362635593" X-IronPort-AV: E=Sophos;i="6.02,236,1688454000"; d="scan'208";a="362635593" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2023 23:31:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10826"; a="777455863" X-IronPort-AV: E=Sophos;i="6.02,236,1688454000"; d="scan'208";a="777455863" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga001.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 07 Sep 2023 23:31:26 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Thu, 7 Sep 2023 23:31:25 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Thu, 7 Sep 2023 23:31:25 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32 via Frontend Transport; Thu, 7 Sep 2023 23:31:25 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Thu, 7 Sep 2023 23:31:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Djg0tb+biHg3jno/4btILUFx1132m+iZQcuxv+nHOdM9bMeJA33P/mPie94q+1qRI/bp+8C5noRzOxRaXVDFu8Wmyvhs616yXwtoQM5aPNb8fUMEwGxL6s76FBNPehqMcDfgwJTGWLvC9MvC2eMAo1c9708bcI84mvLxIyxiSFTknYJYMsD3rPmLur5aMhBaKqx+lOesSvXk46+kbj3dEUlkkIfH9GM0Okk14Smq5yzCTcU5yLnyEkGYFIohdVyfzk27KZ84WVCAv/4cF9l37mOK6LErOr3Yt7fvuOiRmCegUG+lvyTS/Im3hSHRY3jmxMxzzujyd4mKubI/otzbXA== 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=zUr19rXFcDH4RbxOKFJGfftFjc53xWafvY440DzUMe8=; b=J2qyVXSA07A1NnbZatESTLD3u2RK5msu6HwZ9pPD9dMkje9Xk18wuDlsqGDEblc4BVqgpaD2nazmwApvwCKk4YNw/H3Em3OaZYlgB/e//f5dd6TNAnNKStsx4VCPxjA9535A1VQgvmzbDyVeGy1+7DzHICF3f8oPLPXpGoVquDEjNABda5C0ZC/RggZjGabSOpcYtNaBSSTV7A0FGrxZh2wEMutbwPoRGj8rEyc73GfO69ud4kfWN1z3nywa7ezwBapBXDcAuWODfWYTnhOCGfrfFdY9d3b7WzKn3u5mpY42uzZlnbGx4H5inGwwMMn+70VgH76aA6OGUzadVJ0xbA== 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 BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by PH7PR11MB8528.namprd11.prod.outlook.com (2603:10b6:510:2fd::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.30; Fri, 8 Sep 2023 06:31:21 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::7502:5d29:13b8:cdb3]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::7502:5d29:13b8:cdb3%4]) with mapi id 15.20.6745.035; Fri, 8 Sep 2023 06:31:21 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v4 7/8] lavc/vaapi_encode: Add VAAPI AV1 encoder Thread-Index: AQHZ29wAMkpgt+rLKUm5wRbGvdCxPbAQhGyA Date: Fri, 8 Sep 2023 06:31:21 +0000 Message-ID: <3c776e21915138891c020a3179e8cffa23a5288f.camel@intel.com> References: <20230831072107.1051955-1-fei.w.wang@intel.com> <20230831072107.1051955-7-fei.w.wang@intel.com> In-Reply-To: <20230831072107.1051955-7-fei.w.wang@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: BN9PR11MB5515:EE_|PH7PR11MB8528:EE_ x-ms-office365-filtering-correlation-id: 70df9d97-d469-45b8-b8e6-08dbb0353758 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ZYN5DQIem2Rr5VtkKpygQcnmCLS+H2Y6EF2owYy97gzpDARHGtJBos1XLcbiSjIFLOQYc3WxVF7/2sFlNZjBK4pf9SxcZneTjRwQ6JMVMciNpgM6KpZRpeKAC8zkwZKvFTeQCPL1NM29WUG4uUI2+YXP3PPA4/Bt150JMA2eNFPHQOimSxp3xvT3nTDXldH6OkPXjcXcQpYdzVT6ExYDvbca8GBD4fcSCACnGipYoS93EFSdcBL1lBS1bl8uugEfveIzzekeOa9c/NmKV0TLwAeYznDiO1XDquRgUoRkuT9T6MJbsKlI0L2BHdYTdSVrBU63AUCMucWIi+vve3iNP3/ma1E5pupaHupytt2CHTJN+FUSxxH5AKXDBxx5vkrmaORmh1tB8wODaPrUOgCGCcklvifvIcaNhBrkL2FNGYxPO3gqUKyCeDccpSuY4YUiY0ZMTyRXAvpCVu7ZLpKWJtKPWupcJQer+27sUvzYGb0VFdMokg95pcNj7xnWDxEckD/38YXdv874D9fT4ZlhQtpTfzjJFBOEhwXZx5P7C/iBCYRawCghrbYGmba097r0XH69D79V84XBQZtRmvrWA4v2ErOdL7C/i1FHY00r1V+NRQh9E4c1VzTRTE2dzzwJysVewNC0pYvgYnPCHzzX7A== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(346002)(366004)(396003)(39860400002)(376002)(136003)(1800799009)(186009)(451199024)(6486002)(6506007)(71200400001)(6512007)(19627235002)(478600001)(83380400001)(107886003)(2616005)(26005)(30864003)(2906002)(66446008)(6916009)(66476007)(64756008)(66556008)(66946007)(316002)(76116006)(41300700001)(5660300002)(4326008)(8676002)(8936002)(36756003)(86362001)(38100700002)(38070700005)(91956017)(82960400001)(122000001)(2004002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Sk9sYmgwM1NNYlgwL09aV0NrWVE4bjVLenVhYkQ5b0s5dTdsMFVBZU01UXNC?= =?utf-8?B?dUliT2w5cUVzT0pQZjkvdEtWQ0JIeGtXUjBjYXl3UURMTlRQR2w3SDYza0lB?= =?utf-8?B?TEdoTnFJV3RkVkMxSVJMYjNZTWFNTEg0c0JyTmpPUTNaMFlxRHVrazQ1SGl3?= =?utf-8?B?ZHZoYU8yd3lNSUdlQytjUEV4VEYzYUpyWUF0QU1rU25ycHFMUGlrWDZIU3VC?= =?utf-8?B?M2hCb1hyWnZEQmo0SXl6R2xRKzAwYXVGVndOb0dHdTU5M3MyU25USmpwaEJ2?= =?utf-8?B?Qk9ENkJBUEdzTTVoK0FOYllSQ3BkT0dQSlJ2dHhkTmh6dFBzMWtMa2lUWHlp?= =?utf-8?B?Q2VJT2FXbXpqblFpQldLenJTYy9zekhpeFV4S2RlL3B5UW03RU1RWktFZ0pu?= =?utf-8?B?T0dxTDZRZ2ZCNDVNUzhuL3BHSnZzaDhnUWQ3a2UvamZvTzNTZHYzTFA4bytV?= =?utf-8?B?U3lTZHFjTUZZY0NGbWVWWnhZbHJkWWx5ak9EMFZsVnJSTTZ0VFB4NklRYStS?= =?utf-8?B?YlU4ajMweXJjSU1Pby9vWm9pL2V4Q1dWM2dmSWt1a2JQc05aU2h0RUFkeW5o?= =?utf-8?B?R2RVYnFWVVV1ME5FQ3ZBR05zdzZjaFhtOSt6MEp4cU95M3FDd1p4Njl1dkJF?= =?utf-8?B?b3YzRW0rWEtHdzF3K2pMOEczSGIyeWZLT0x5bCtTNlZpQmQxYlVJdjRKZnNy?= =?utf-8?B?dlZsbDRVSEZqTENHVnVJQzVxeUg3a05CY0hPanlBbTBIbmMvZWJkSC96bVZj?= =?utf-8?B?MW9HSTZBZmpOeFluSTBQV25QSklDSkMvbmJjdDJxbCtjRTAyZG9pVFdyQ0Vy?= =?utf-8?B?WXkvTCtROVByWEFVMmpTNkZzYVJDMThwNldBRWZpSTZCU3JrbGM2Qi9lSWVz?= =?utf-8?B?VTZwdER2OFRWdWMwK1YwSzgzRlBNR1RFa2lLdXdoMERIcWtyTDZhLzBRUmhJ?= =?utf-8?B?dWV4cmcvSVorZFF1K1ZCUE1OQVNqUTNreExCT3M5LzIrTnhHbXFiOWlkT2Jp?= =?utf-8?B?dzFXU0ZFUTZFSjZrMWxVK2ltVGMvQmlxcmtPbEJlQzl0cmFlR2VMQk5hYjVO?= =?utf-8?B?TW9mZm05eUx3dTd6NlZod1hreG93YXphUmNMWSthTkl1MEJVekJ1Und0Q2dN?= =?utf-8?B?blA5bUhzck05YURwa1pDREwwamRDWnlWN1QvK29hK1ZmMFRWQkpzNGRXWWZx?= =?utf-8?B?NVVYTndvN1htTlMybHZHU0crOEN3YjVtdGQzSG0vMmFjbVpoaVFLSHhpaUtN?= =?utf-8?B?RktRaWdES0o1Y3BVaURNc3JaRWlLNnNoWlgrdVN6UTduOGkyWHZPUGxldUx3?= =?utf-8?B?NjlaVVJTNkpabkNvYjUrM0dweS8vQ0gxbFZBS3ljWEE5YUtMZnd3a0lKSGJW?= =?utf-8?B?R0VqSkQ1M0dSVUNZNUpkM2VpSEVXR3I1cG5vQnowZS9idDQ5TU1oMkdRbkZu?= =?utf-8?B?bWFobGdFRkJFd3F4dC9RcjY5QVViam1NTzF5ZVRZdi8wQ2Y1RW9yUWZQSE5O?= =?utf-8?B?a01tTDR0QUFvUGo2cDNOU2Q5Vm0rMkl0MmRzcXJ1UzRXN3hpSUhFMUhvM2xs?= =?utf-8?B?b2hMeUpETi9TNmFVNGx3NEZtbHNlYnBhcFZ3VVk2UDd0aFFuMjNwbGwybldD?= =?utf-8?B?TUM3alpDNmZrNDFIc0lPaEh2MGhYU1l4cUdLT01qZ0JnZkZvcStQalJoT0JJ?= =?utf-8?B?ZjRWL0VpTGxTNGRjOU1Ta0dOM3JnQjBEcmRybGVlcnJBUURNSnBCcGxJb2dD?= =?utf-8?B?R29DZVlCZDE0aWVTQWdEalhzRVdTOFY3TnlXTXhlbjBGSnNJU1R6aTI4YkpR?= =?utf-8?B?LzJESGplb0lYNkhFNTZCTDQ4TTB4aFQ3VzZKNUkwdmEzem54bFZ5azVhZjRJ?= =?utf-8?B?cmR2QklITXZiaGNzU2hPL1gveGs0dktReVFHUW1MTGVtSStGVG1nY3h6UEp1?= =?utf-8?B?MWYrUktML1lMN3h1KzMxUlhzdnpuajJvWDh6K09CUFBoVm9OOURsV2dvQ0Zu?= =?utf-8?B?VERocE92NlhVTWxranUrbzcwZVJraUQzUmNhUGVqMU9MSDFqV1dBN2hjV1o0?= =?utf-8?B?TWtSSkhZZ0R2b21wM0VNNThQakk2dTJMSFdoYjY1SytDRDhhTkJEaG90NFhO?= =?utf-8?B?dUR5LzluaUtVMnRtUXdwTGN1SDJkR2lEQXdKTEVLWkRMTDV3VGV4QXNIaTRT?= =?utf-8?B?WUE9PQ==?= Content-ID: <40A183E4087E534489014AB8099089D0@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70df9d97-d469-45b8-b8e6-08dbb0353758 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Sep 2023 06:31:21.0879 (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: DwK7WBlAUoPDgmtj+Tl7dkDI2V4DypL/liExPwtUiBmuss+myXbGnBy7twYIIc56Z+Hpt/iP1p3DtOfHKuOq+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB8528 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v4 7/8] lavc/vaapi_encode: Add VAAPI AV1 encoder 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: "Wang, Fei W" 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: T24gRG8sIDIwMjMtMDgtMzEgYXQgMTU6MjEgKzA4MDAsIGZlaS53LndhbmctYXQtaW50ZWwuY29t QGZmbXBlZy5vcmcgd3JvdGU6Cj4gRnJvbTogRmVpIFdhbmcgPGZlaS53LndhbmdAaW50ZWwuY29t Pgo+IAo+IFNpZ25lZC1vZmYtYnk6IEZlaSBXYW5nIDxmZWkudy53YW5nQGludGVsLmNvbT4KPiAt LS0KPiBGaXhlZCB0aGUgZGlzY3Vzc2lvbnMgaW4gVjMuCj4gCj4gwqBDaGFuZ2Vsb2fCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKgY29uZmlndXJl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzICsKPiDCoGRv Yy9lbmNvZGVycy50ZXhpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxNCArCj4gwqBsaWJh dmNvZGVjL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4gwqBsaWJhdmNv ZGVjL2FsbGNvZGVjcy5jwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBsaWJhdmNvZGVjL2F2 MV9sZXZlbHMuY8KgwqDCoMKgwqDCoCB8wqAgOTIgKysrKwo+IMKgbGliYXZjb2RlYy9hdjFfbGV2 ZWxzLmjCoMKgwqDCoMKgwqAgfMKgIDU4ICsrKwo+IMKgbGliYXZjb2RlYy92YWFwaV9lbmNvZGUu Y8KgwqDCoMKgIHwgMTk4ICsrKysrLS0KPiDCoGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmjCoMKg wqDCoCB8wqAgMjQgKwo+IMKgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMgfCA5NDkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IMKgbGliYXZjb2RlYy92ZXJzaW9uLmjC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArLQo+IMKgMTEgZmlsZXMgY2hhbmdlZCwgMTMxMSBp bnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL2F2MV9sZXZlbHMuYwo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYXYx X2xldmVscy5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVf YXYxLmMKCgpGRl9QUk9GSUxFXyogd2VyZSBkZXByZWNhdGVkIHJlY2VudGx5LCBwbGVhc2UgdXNl IEFWX1BST0ZJTEVfKiBpbgp2YWFwaV9lbmNvZGVfYXYxLmMKClRoYW5rcwpIYWloYW8KCgo+IAo+ IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKPiBpbmRleCBjMDEwZTg2MTU5Li5i MTBjNjVhNGM1IDEwMDY0NAo+IC0tLSBhL0NoYW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBA IC0zMCw2ICszMCw3IEBAIHZlcnNpb24gPG5leHQ+Ogo+IMKgLSBzdXBwb3J0IGZvciB0aGUgUF9T S0lQIGhpbnRpbmcgdG8gc3BlZWQgdXAgbGlieDI2NCBlbmNvZGluZwo+IMKgLSBTdXBwb3J0IEhF VkMsVlA5LEFWMSBjb2RlYyBpbiBlbmhhbmNlZCBmbHYgZm9ybWF0Cj4gwqAtIGFwc25yIGFuZCBh c2lzZHIgYXVkaW8gZmlsdGVycwo+ICstIFZBQVBJIEFWMSBlbmNvZGVyCj4gwqAKPiDCoAo+IMKg dmVyc2lvbiA2LjA6Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4 IGJkN2Y3Njk3YzguLmVjN2E4MGNkNDggMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIv Y29uZmlndXJlCj4gQEAgLTMzMjMsNiArMzMyMyw4IEBAIGF2MV9xc3ZfZGVjb2Rlcl9zZWxlY3Q9 InFzdmRlYyIKPiDCoGF2MV9xc3ZfZW5jb2Rlcl9zZWxlY3Q9InFzdmVuYyIKPiDCoGF2MV9xc3Zf ZW5jb2Rlcl9kZXBzPSJsaWJ2cGwiCj4gwqBhdjFfYW1mX2VuY29kZXJfZGVwcz0iYW1mIgo+ICth djFfdmFhcGlfZW5jb2Rlcl9kZXBzPSJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEiCj4g K2F2MV92YWFwaV9lbmNvZGVyX3NlbGVjdD0iY2JzX2F2MSB2YWFwaV9lbmNvZGUiCj4gwqAKPiDC oCMgcGFyc2Vycwo+IMKgYWFjX3BhcnNlcl9zZWxlY3Q9ImFkdHNfaGVhZGVyIG1wZWc0YXVkaW8i Cj4gQEAgLTcxMTAsNiArNzExMiw3IEBAIGlmIGVuYWJsZWQgdmFhcGk7IHRoZW4KPiDCoMKgwqDC oCBjaGVja190eXBlICJ2YS92YS5oIHZhL3ZhX2VuY19qcGVnLmgiICJWQUVuY1BpY3R1cmVQYXJh bWV0ZXJCdWZmZXJKUEVHIgo+IMKgwqDCoMKgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5j X3ZwOC5oIsKgICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJWUDgiCj4gwqDCoMKgwqAgY2hl Y2tfdHlwZSAidmEvdmEuaCB2YS92YV9lbmNfdnA5LmgiwqAgIlZBRW5jUGljdHVyZVBhcmFtZXRl ckJ1ZmZlclZQOSIKPiArwqDCoMKgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5jX2F2MS5o IsKgICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEiCj4gwqBmaQo+IMKgCj4gwqBpZiBl bmFibGVkX2FsbCBvcGVuY2wgbGliZHJtIDsgdGhlbgo+IGRpZmYgLS1naXQgYS9kb2MvZW5jb2Rl cnMudGV4aSBiL2RvYy9lbmNvZGVycy50ZXhpCj4gaW5kZXggNmY4ZjVlMTI3ZS4uZDdkOTU4NGEw YyAxMDA2NDQKPiAtLS0gYS9kb2MvZW5jb2RlcnMudGV4aQo+ICsrKyBiL2RvYy9lbmNvZGVycy50 ZXhpCj4gQEAgLTM5OTUsNiArMzk5NSwyMCBAQCBBdmVyYWdlIHZhcmlhYmxlIGJpdHJhdGUuCj4g wqBFYWNoIGVuY29kZXIgYWxzbyBoYXMgaXRzIG93biBzcGVjaWZpYyBvcHRpb25zOgo+IMKgQHRh YmxlIEBvcHRpb24KPiDCoAo+ICtAaXRlbSBhdjFfdmFhcGkKPiArQG9wdGlvbntwcm9maWxlfSBz ZXRzIHRoZSB2YWx1ZSBvZiBAZW1waHtzZXFfcHJvZmlsZX0uCj4gK0BvcHRpb257dGllcn0gc2V0 cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX3RpZXJ9Lgo+ICtAb3B0aW9ue2xldmVsfSBzZXRzIHRo ZSB2YWx1ZSBvZiBAZW1waHtzZXFfbGV2ZWxfaWR4fS4KPiArCj4gK0B0YWJsZSBAb3B0aW9uCj4g K0BpdGVtIHRpbGVzCj4gK1NldCB0aGUgbnVtYmVyIG9mIHRpbGVzIHRvIGVuY29kZSB0aGUgaW5w dXQgdmlkZW8gd2l0aCwgYXMgY29sdW1ucyB4IHJvd3MuCj4gKyhkZWZhdWx0IGlzIGF1dG8sIHdo aWNoIG1lYW5zIHVzZSBtaW5pbWFsIHRpbGUgY29sdW1uL3JvdyBudW1iZXIpLgo+ICtAaXRlbSB0 aWxlX2dyb3Vwcwo+ICtTZXQgdGlsZSBncm91cHMgbnVtYmVyLiBBbGwgdGhlIHRpbGVzIHdpbGwg YmUgZGlzdHJpYnV0ZWQgYXMgZXZlbmx5IGFzCj4gcG9zc2libGUgdG8KPiArZWFjaCB0aWxlIGdy b3VwLiAoZGVmYXVsdCBpcyAxKS4KPiArQGVuZCB0YWJsZQo+ICsKPiDCoEBpdGVtIGgyNjRfdmFh cGkKPiDCoEBvcHRpb257cHJvZmlsZX0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7cHJvZmlsZV9p ZGN9IGFuZCB0aGUKPiBAZW1waHtjb25zdHJhaW50X3NldCpfZmxhZ31zLgo+IMKgQG9wdGlvbnts ZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7bGV2ZWxfaWRjfS4KPiBkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBpbmRleCBmOTYxZDBh YmQ2Li5lMzE1Mjk5YTBlIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiArKysg Yi9saWJhdmNvZGVjL01ha2VmaWxlCj4gQEAgLTI1OCw2ICsyNTgsNyBAQCBPQkpTLSQoQ09ORklH X0FWMV9NRURJQUNPREVDX0RFQ09ERVIpwqAgKz0gbWVkaWFjb2RlY2RlYy5vCj4gwqBPQkpTLSQo Q09ORklHX0FWMV9NRURJQUNPREVDX0VOQ09ERVIpwqAgKz0gbWVkaWFjb2RlY2VuYy5vCj4gwqBP QkpTLSQoQ09ORklHX0FWMV9OVkVOQ19FTkNPREVSKcKgwqDCoMKgwqDCoCArPSBudmVuY19hdjEu byBudmVuYy5vCj4gwqBPQkpTLSQoQ09ORklHX0FWMV9RU1ZfRU5DT0RFUinCoMKgwqDCoMKgwqDC oMKgICs9IHFzdmVuY19hdjEubwo+ICtPQkpTLSQoQ09ORklHX0FWMV9WQUFQSV9FTkNPREVSKcKg wqDCoMKgwqDCoCArPSB2YWFwaV9lbmNvZGVfYXYxLm8gYXYxX2xldmVscy5vCj4gwqBPQkpTLSQo Q09ORklHX0FWUk5fREVDT0RFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGF2cm5kZWMubwo+ IMKgT0JKUy0kKENPTkZJR19BVlJQX0RFQ09ERVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBy MjEwZGVjLm8KPiDCoE9CSlMtJChDT05GSUdfQVZSUF9FTkNPREVSKcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKz0gcjIxMGVuYy5vCj4gQEAgLTEzMjIsNiArMTMyMyw3IEBAIFRFU1RQUk9HUyA9Cj4g YXZjb2RlY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAganBlZzIwMDBkd3TCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXRob3Bz wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiDCoAo+ICtU RVNUUFJPR1MtJChDT05GSUdfQVYxX1ZBQVBJX0VOQ09ERVIpwqDCoMKgwqAgKz0gYXYxX2xldmVs cwo+IMKgVEVTVFBST0dTLSQoQ09ORklHX0NBQkFDKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICs9IGNhYmFjCj4gwqBURVNUUFJPR1MtJChDT05GSUdfRENUKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBhdmZmdAo+IMKgVEVTVFBST0dTLSQoQ09ORklHX0ZG VCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZmZ0IGZmdC1maXhlZDMy Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNv ZGVjcy5jCj4gaW5kZXggODc3NWQxNWE0Zi4uYzQzYzFkN2I0OCAxMDA2NDQKPiAtLS0gYS9saWJh dmNvZGVjL2FsbGNvZGVjcy5jCj4gKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IEBAIC04 NDQsNiArODQ0LDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX252ZW5jX2VuY29kZXI7 Cj4gwqBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hdjFfcXN2X2RlY29kZXI7Cj4gwqBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9hdjFfcXN2X2VuY29kZXI7Cj4gwqBleHRlcm4gY29uc3QgRkZDb2Rl YyBmZl9hdjFfYW1mX2VuY29kZXI7Cj4gK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV92YWFw aV9lbmNvZGVyOwo+IMKgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmgyNjRfZW5jb2Rl cjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm9wZW5oMjY0X2RlY29kZXI7Cj4gwqBl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0X2FtZl9lbmNvZGVyOwo+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2F2MV9sZXZlbHMuYyBiL2xpYmF2Y29kZWMvYXYxX2xldmVscy5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi4xOWI2ZWUxNzM2Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvYXYxX2xldmVscy5jCj4gQEAgLTAsMCArMSw5MiBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiAr ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUg R05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPiBV U0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c3RkZGVmLmg+Cj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvbWFjcm9zLmgiCj4gKyNpbmNsdWRlICJhdjFfbGV2ZWxzLmgiCj4gKwo+ICsvKiogaWdub3Jl IGVudHJpZXMgd2hpY2ggbmFtZWQgaW4gc3BlYyBidXQgbm8gZGV0YWlscy4gTGlrZSBsZXZlbCAy LjIgYW5kCj4gNy4wLiAqLwo+ICtzdGF0aWMgY29uc3QgQVYxTGV2ZWxEZXNjcmlwdG9yIGF2MV9s ZXZlbHNbXSA9IHsKPiArwqDCoMKgIC8vIE5hbWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgTWF4VlNpemXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgCj4gTWFpbk1icHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBN YXhUaWxlcwo+ICvCoMKgwqAgLy8gfMKgIGxldmVsX2lkeMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHwgTWF4RGlzcGxheVJhdGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8Cj4gSGlnaE1icHPCoMKgwqDCoMKgwqDCoMKgIHwgTWF4VGlsZUNvbHMKPiArwqDC oMKgIC8vIHzCoMKgwqDCoMKgIHzCoMKgIE1heFBpY1NpemXCoMKgwqDCoMKgwqDCoCB8wqDCoMKg wqDCoMKgIHzCoMKgwqDCoCBNYXhEZWNvZGVSYXRlwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgCj4g fMKgwqAgTWFpbkNSwqDCoMKgIHzCoMKgIHwKPiArwqDCoMKgIC8vIHzCoMKgwqDCoMKgIHzCoMKg wqDCoCB8wqDCoMKgIE1heEhTaXplwqDCoCB8wqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKg wqDCoCB8IE1heEhlYWRlclJhdGUgfMKgwqDCoAo+IHzCoMKgwqDCoCB8IEhpZ2hDUnzCoMKgIHwK PiArwqDCoMKgIC8vIHzCoMKgwqDCoMKgIHzCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqAgfMKgwqDC oMKgwqAgfMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoCB8 wqDCoMKgwqDCoMKgIHzCoMKgwqAKPiB8wqDCoMKgwqAgfMKgIHzCoMKgwqAgfMKgwqAgfAo+ICvC oMKgwqAgeyAiMi4wIizCoCAwLMKgwqAgMTQ3NDU2LMKgIDIwNDgsIDExNTIswqDCoCA0NDIzNjgw LMKgwqDCoMKgIDU1Mjk2MDAsIDE1MCzCoMKgCj4gMS41LMKgwqDCoMKgIDAsIDIsIDAswqDCoCA4 LMKgIDQgfSwKPiArwqDCoMKgIHsgIjIuMSIswqAgMSzCoMKgIDI3ODc4NCzCoCAyODE2LCAxNTg0 LMKgwqAgODM2MzUyMCzCoMKgwqAgMTA0NTQ0MDAsIDE1MCzCoMKgCj4gMy4wLMKgwqDCoMKgIDAs IDIsIDAswqDCoCA4LMKgIDQgfSwKPiArwqDCoMKgIHsgIjMuMCIswqAgNCzCoMKgIDY2NTg1NizC oCA0MzUyLCAyNDQ4LMKgIDE5OTc1NjgwLMKgwqDCoCAyNDk2OTYwMCwgMTUwLMKgwqAKPiA2LjAs wqDCoMKgwqAgMCwgMiwgMCzCoCAxNizCoCA2IH0sCj4gK8KgwqDCoCB7ICIzLjEiLMKgIDUswqAg MTA2NTAyNCzCoCA1NTA0LCAzMDk2LMKgIDMxOTUwNzIwLMKgwqDCoCAzOTkzODQwMCwgMTUwLMKg Cj4gMTAuMCzCoMKgwqDCoCAwLCAyLCAwLMKgIDE2LMKgIDYgfSwKPiArwqDCoMKgIHsgIjQuMCIs wqAgOCzCoCAyMzU5Mjk2LMKgIDYxNDQsIDM0NTYswqAgNzA3Nzg4ODAswqDCoMKgIDc3ODU2NzY4 LCAzMDAswqAgMTIuMCzCoAo+IDMwLjAsIDQsIDQswqAgMzIswqAgOCB9LAo+ICvCoMKgwqAgeyAi NC4xIizCoCA5LMKgIDIzNTkyOTYswqAgNjE0NCwgMzQ1NizCoCAxNDE1NTc3NjAswqAgMTU1NzEz NTM2LCAzMDAswqAgMjAuMCzCoAo+IDUwLjAsIDQsIDQswqAgMzIswqAgOCB9LAo+ICvCoMKgwqAg eyAiNS4wIiwgMTIswqAgODkxMjg5NizCoCA4MTkyLCA0MzUyLMKgIDI2NzM4Njg4MCzCoCAyNzM3 MTUyMDAsIDMwMCzCoCAzMC4wLAo+IDEwMC4wLCA2LCA0LMKgIDY0LMKgIDggfSwKPiArwqDCoMKg IHsgIjUuMSIsIDEzLMKgIDg5MTI4OTYswqAgODE5MiwgNDM1MizCoCA1MzQ3NzM3NjAswqAgNTQ3 NDMwNDAwLCAzMDAswqAgNDAuMCwKPiAxNjAuMCwgOCwgNCzCoCA2NCzCoCA4IH0sCj4gK8KgwqDC oCB7ICI1LjIiLCAxNCzCoCA4OTEyODk2LMKgIDgxOTIsIDQzNTIsIDEwNjk1NDc1MjAsIDEwOTQ4 NjA4MDAsIDMwMCzCoCA2MC4wLAo+IDI0MC4wLCA4LCA0LMKgIDY0LMKgIDggfSwKPiArwqDCoMKg IHsgIjUuMyIsIDE1LMKgIDg5MTI4OTYswqAgODE5MiwgNDM1MiwgMTA2OTU0NzUyMCwgMTE3NjUw MjI3MiwgMzAwLMKgIDYwLjAsCj4gMjQwLjAsIDgsIDQswqAgNjQswqAgOCB9LAo+ICvCoMKgwqAg eyAiNi4wIiwgMTYsIDM1NjUxNTg0LCAxNjM4NCwgODcwNCwgMTA2OTU0NzUyMCwgMTE3NjUwMjI3 MiwgMzAwLMKgIDYwLjAsCj4gMjQwLjAsIDgsIDQsIDEyOCwgMTYgfSwKPiArwqDCoMKgIHsgIjYu MSIsIDE3LCAzNTY1MTU4NCwgMTYzODQsIDg3MDQsIDIxMzkwOTUwNDAsIDIxODk3MjE2MDAsIDMw MCwgMTAwLjAsCj4gNDgwLjAsIDgsIDQsIDEyOCwgMTYgfSwKPiArwqDCoMKgIHsgIjYuMiIsIDE4 LCAzNTY1MTU4NCwgMTYzODQsIDg3MDQsIDQyNzgxOTAwODAsIDQzNzk0NDMyMDAsIDMwMCwgMTYw LjAsCj4gODAwLjAsIDgsIDQsIDEyOCwgMTYgfSwKPiArwqDCoMKgIHsgIjYuMyIsIDE5LCAzNTY1 MTU4NCwgMTYzODQsIDg3MDQsIDQyNzgxOTAwODAsIDQ3MDYwMDkwODgsIDMwMCwgMTYwLjAsCj4g ODAwLjAsIDgsIDQsIDEyOCwgMTYgfSwKPiArfTsKPiArCj4gK2NvbnN0IEFWMUxldmVsRGVzY3Jp cHRvciAqZmZfYXYxX2d1ZXNzX2xldmVsKGludDY0X3QgYml0cmF0ZSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgdGllciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpbnQgd2lkdGgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50 IGhlaWdodCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgdGlsZXMsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHRpbGVfY29scywKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmbG9hdCBmcHMpCj4gK3sKPiArwqDCoMKgIGludCBw aWNfc2l6ZTsKPiArwqDCoMKgIHVpbnQ2NF90IGRpc3BsYXlfcmF0ZTsKPiArwqDCoMKgIGZsb2F0 IG1heF9icjsKPiArCj4gK8KgwqDCoCBwaWNfc2l6ZSA9IHdpZHRoICogaGVpZ2h0Owo+ICvCoMKg wqAgZGlzcGxheV9yYXRlID0gKHVpbnQ2NF90KXBpY19zaXplICogZnBzOwo+ICsKPiArwqDCoMKg IGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoYXYxX2xldmVscyk7IGkrKykgewo+ ICvCoMKgwqDCoMKgwqDCoCBjb25zdCBBVjFMZXZlbERlc2NyaXB0b3IgKmxldmVsID0gJmF2MV9s ZXZlbHNbaV07Cj4gK8KgwqDCoMKgwqDCoMKgIC8vIExpbWl0YXRpb246IGRlY29kZSByYXRlLCBo ZWFkZXIgcmF0ZSwgY29tcHJlc3MgcmF0ZSwgZXRjLiBhcmUgbm90Cj4gY29uc2lkZXJlZC4KPiAr wqDCoMKgwqDCoMKgwqAgaWYgKHBpY19zaXplID4gbGV2ZWwtPm1heF9waWNfc2l6ZSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHdpZHRo ID4gbGV2ZWwtPm1heF9oX3NpemUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChoZWlnaHQgPiBsZXZlbC0+bWF4X3Zfc2l6ZSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGRpc3Bs YXlfcmF0ZSA+IGxldmVsLT5tYXhfZGlzcGxheV9yYXRlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnRpbnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHRpZXIpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWF4X2JyID0gbGV2ZWwtPmhpZ2hfbWJwczsKPiArwqDCoMKgwqDCoMKg wqAgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1heF9iciA9IGxldmVsLT5tYWluX21i cHM7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICghbWF4X2JyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYml0cmF0ZSA+IChpbnQ2NF90KSgx MDAwMDAwLjAgKiBtYXhfYnIpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHRpbGVzID4gbGV2ZWwtPm1heF90aWxlcykKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHRpbGVf Y29scyA+IGxldmVsLT5tYXhfdGlsZV9jb2xzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gbGV2ZWw7Cj4gK8KgwqDCoCB9Cj4gKwo+ ICvCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hdjFf bGV2ZWxzLmggYi9saWJhdmNvZGVjL2F2MV9sZXZlbHMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMC4uMTY0Y2I4NzZiYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9s aWJhdmNvZGVjL2F2MV9sZXZlbHMuaAo+IEBAIC0wLDAgKzEsNTggQEAKPiArLyoKPiArICogQ29w eXJpZ2h0IChjKSAyMDIzIEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoCBTZWUgdGhlIEdOVQo+ICsgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxCj4gVVNBCj4gKyAqLwo+ICsK PiArI2lmbmRlZiBBVkNPREVDX0FWMV9MRVZFTFNfSAo+ICsjZGVmaW5lIEFWQ09ERUNfQVYxX0xF VkVMU19ICj4gKwo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBB VjFMZXZlbERlc2NyaXB0b3Igewo+ICvCoMKgwqAgY2hhcsKgwqDCoMKgIG5hbWVbNF07Cj4gK8Kg wqDCoCB1aW50OF90wqAgbGV2ZWxfaWR4Owo+ICsKPiArwqDCoMKgIHVpbnQzMl90IG1heF9waWNf c2l6ZTsKPiArwqDCoMKgIHVpbnQzMl90IG1heF9oX3NpemU7Cj4gK8KgwqDCoCB1aW50MzJfdCBt YXhfdl9zaXplOwo+ICvCoMKgwqAgdWludDY0X3QgbWF4X2Rpc3BsYXlfcmF0ZTsKPiArwqDCoMKg IHVpbnQ2NF90IG1heF9kZWNvZGVfcmF0ZTsKPiArCj4gK8KgwqDCoCB1aW50MzJfdCBtYXhfaGVh ZGVyX3JhdGU7Cj4gK8KgwqDCoCBmbG9hdMKgwqDCoCBtYWluX21icHM7Cj4gK8KgwqDCoCBmbG9h dMKgwqDCoCBoaWdoX21icHM7Cj4gK8KgwqDCoCB1aW50MzJfdCBtYWluX2NyOwo+ICvCoMKgwqAg dWludDMyX3QgaGlnaF9jcjsKPiArwqDCoMKgIHVpbnQzMl90IG1heF90aWxlczsKPiArwqDCoMKg IHVpbnQzMl90IG1heF90aWxlX2NvbHM7Cj4gK30gQVYxTGV2ZWxEZXNjcmlwdG9yOwo+ICsKPiAr LyoqCj4gKyAqIEd1ZXNzIHRoZSBsZXZlbCBvZiBhIHN0cmVhbSBmcm9tIHNvbWUgcGFyYW1ldGVy cy4KPiArICoKPiArICogVW5rbm93biBwYXJhbWV0ZXJzIG1heSBiZSB6ZXJvLCBpbiB3aGljaCBj YXNlIHRoZXkgd2lsbCBiZSBpZ25vcmVkLgo+ICsgKi8KPiArY29uc3QgQVYxTGV2ZWxEZXNjcmlw dG9yICpmZl9hdjFfZ3Vlc3NfbGV2ZWwoaW50NjRfdCBiaXRyYXRlLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGludCB0aWVyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGludCB3aWR0aCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQg aGVpZ2h0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCB0aWxlX3Jvd3Ms Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHRpbGVfY29scywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmbG9hdCBmcHMpOwo+ICsKPiArI2VuZGlmIC8q IEFWQ09ERUNfQVYxX0xFVkVMU19IICovCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlf ZW5jb2RlLmMgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jCj4gaW5kZXggNzkwNDUwYWEyMS4u ZjViZjVhYjY4MCAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jCj4gKysr IGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYwo+IEBAIC02ODMsNiArNjgzLDExIEBAIHN0YXRp YyBpbnQKPiB2YWFwaV9lbmNvZGVfc2V0X291dHB1dF9wcm9wZXJ0eShBVkNvZGVjQ29udGV4dCAq YXZjdHgsCj4gwqDCoMKgwqDCoMKgwqDCoCBwaWMtPm9wYXF1ZV9yZWYgPSBOVUxMOwo+IMKgwqDC oMKgIH0KPiDCoAo+ICvCoMKgwqAgaWYgKGN0eC0+Y29kZWMtPmZsYWdzICYgRkxBR19USU1FU1RB TVBfTk9fREVMQVkpIHsKPiArwqDCoMKgwqDCoMKgwqAgcGt0LT5kdHMgPSBwa3QtPnB0czsKPiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gK8KgwqDCoCB9Cj4gKwo+IMKgwqDCoMKgIGlmIChj dHgtPm91dHB1dF9kZWxheSA9PSAwKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBwa3QtPmR0cyA9IHBr dC0+cHRzOwo+IMKgwqDCoMKgIH0gZWxzZSBpZiAocGljLT5lbmNvZGVfb3JkZXIgPCBjdHgtPmRl Y29kZV9kZWxheSkgewo+IEBAIC02OTgsNjUgKzcwMywxNjAgQEAgc3RhdGljIGludAo+IHZhYXBp X2VuY29kZV9zZXRfb3V0cHV0X3Byb3BlcnR5KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKg wqDCoCByZXR1cm4gMDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRw dXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMs IEFWUGFja2V0ICpwa3QpCj4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2dldF9jb2RlZF9idWZm ZXJfc2l6ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gVkFCdWZmZXJJRCBidWZfaWQpCj4gwqB7 Cj4gwqDCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ IMKgwqDCoMKgIFZBQ29kZWRCdWZmZXJTZWdtZW50ICpidWZfbGlzdCwgKmJ1ZjsKPiArwqDCoMKg IGludCBzaXplID0gMDsKPiDCoMKgwqDCoCBWQVN0YXR1cyB2YXM7Cj4gLcKgwqDCoCBpbnQgdG90 YWxfc2l6ZSA9IDA7Cj4gLcKgwqDCoCB1aW50OF90ICpwdHI7Cj4gwqDCoMKgwqAgaW50IGVycjsK PiDCoAo+IC3CoMKgwqAgZXJyID0gdmFhcGlfZW5jb2RlX3dhaXQoYXZjdHgsIHBpYyk7Cj4gLcKg wqDCoCBpZiAoZXJyIDwgMCkKPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiAtCj4gLcKg wqDCoCBidWZfbGlzdCA9IE5VTEw7Cj4gLcKgwqDCoCB2YXMgPSB2YU1hcEJ1ZmZlcihjdHgtPmh3 Y3R4LT5kaXNwbGF5LCBwaWMtPm91dHB1dF9idWZmZXIsCj4gK8KgwqDCoCB2YXMgPSB2YU1hcEJ1 ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBidWZfaWQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZvaWQqKikmYnVmX2xpc3QpOwo+IMKgwqDCoMKgIGlm ICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIG1hcCBvdXRwdXQgYnVmZmVyczogIgo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJWQgKCVzKS5cbiIsIHZhcywgdmFFcnJvclN0 cih2YXMpKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRUlPKTsKPiAtwqDCoMKg wqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+IMKgwqDC oMKgIH0KPiDCoAo+IMKgwqDCoMKgIGZvciAoYnVmID0gYnVmX2xpc3Q7IGJ1ZjsgYnVmID0gYnVm LT5uZXh0KQo+IC3CoMKgwqDCoMKgwqDCoCB0b3RhbF9zaXplICs9IGJ1Zi0+c2l6ZTsKPiArwqDC oMKgwqDCoMKgwqAgc2l6ZSArPSBidWYtPnNpemU7Cj4gwqAKPiAtwqDCoMKgIGVyciA9IGZmX2dl dF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIHRvdGFsX3NpemUsIDApOwo+IC3CoMKgwqAgcHRy ID0gcGt0LT5kYXRhOwo+ICvCoMKgwqAgdmFzID0gdmFVbm1hcEJ1ZmZlcihjdHgtPmh3Y3R4LT5k aXNwbGF5LCBidWZfaWQpOwo+ICvCoMKgwqAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byB1bm1hcCBvdXRwdXQgYnVmZmVyczogIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICIlZCAoJXMpLlxuIiwgdmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ICvCoMKgwqDCoMKgwqDCoCBl cnIgPSBBVkVSUk9SKEVJTyk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4gK8KgwqDC oCB9Cj4gwqAKPiAtwqDCoMKgIGlmIChlcnIgPCAwKQo+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIGZh aWxfbWFwcGVkOwo+ICvCoMKgwqAgcmV0dXJuIHNpemU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dmFhcGlfZW5jb2RlX2dldF9jb2RlZF9idWZmZXJfZGF0YShBVkNvZGVjQ29udGV4dCAqYXZjdHgs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQUJ1ZmZlcklEIGJ1Zl9pZCwg dWludDhfdAo+ICoqZHN0KQo+ICt7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUNvZGVkQnVmZmVyU2VnbWVudCAqYnVmX2xp c3QsICpidWY7Cj4gK8KgwqDCoCBWQVN0YXR1cyB2YXM7Cj4gK8KgwqDCoCBpbnQgZXJyOwo+ICsK PiArwqDCoMKgIHZhcyA9IHZhTWFwQnVmZmVyKGN0eC0+aHdjdHgtPmRpc3BsYXksIGJ1Zl9pZCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh2b2lkKiopJmJ1 Zl9saXN0KTsKPiArwqDCoMKgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsKPiArwqDC oMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gbWFwIG91 dHB1dCBidWZmZXJzOiAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVkICglcyku XG4iLCB2YXMsIHZhRXJyb3JTdHIodmFzKSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJS T1IoRUlPKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiArwqDCoMKgIH0KPiDCoAo+ IMKgwqDCoMKgIGZvciAoYnVmID0gYnVmX2xpc3Q7IGJ1ZjsgYnVmID0gYnVmLT5uZXh0KSB7Cj4g wqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBidWZm ZXI6ICV1IGJ5dGVzICIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIihzdGF0dXMg JTA4eCkuXG4iLCBidWYtPnNpemUsIGJ1Zi0+c3RhdHVzKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDC oCBtZW1jcHkocHRyLCBidWYtPmJ1ZiwgYnVmLT5zaXplKTsKPiAtwqDCoMKgwqDCoMKgwqAgcHRy ICs9IGJ1Zi0+c2l6ZTsKPiArwqDCoMKgwqDCoMKgwqAgbWVtY3B5KCpkc3QsIGJ1Zi0+YnVmLCBi dWYtPnNpemUpOwo+ICvCoMKgwqDCoMKgwqDCoCAqZHN0ICs9IGJ1Zi0+c2l6ZTsKPiDCoMKgwqDC oCB9Cj4gwqAKPiAtwqDCoMKgIHZhcyA9IHZhVW5tYXBCdWZmZXIoY3R4LT5od2N0eC0+ZGlzcGxh eSwgcGljLT5vdXRwdXRfYnVmZmVyKTsKPiArwqDCoMKgIHZhcyA9IHZhVW5tYXBCdWZmZXIoY3R4 LT5od2N0eC0+ZGlzcGxheSwgYnVmX2lkKTsKPiDCoMKgwqDCoCBpZiAodmFzICE9IFZBX1NUQVRV U19TVUNDRVNTKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byB1bm1hcCBvdXRwdXQgYnVmZmVyczogIgo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiJWQgKCVzKS5cbiIsIHZhcywgdmFFcnJvclN0cih2YXMpKTsKPiDCoMKg wqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRUlPKTsKPiAtwqDCoMKgwqDCoMKgwqAgZ290byBm YWlsOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDC oMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9nZXRfY29k ZWRfZGF0YShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFB UElFbmNvZGVQaWN0dXJlICpwaWMsIEFWUGFja2V0Cj4gKnBrdCkKPiArewo+ICvCoMKgwqAgVkFB UElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFCdWZm ZXJJRCBvdXRwdXRfYnVmZmVyX3ByZXY7Cj4gK8KgwqDCoCBpbnQgdG90YWxfc2l6ZSA9IDA7Cj4g K8KgwqDCoCB1aW50OF90ICpwdHI7Cj4gK8KgwqDCoCBpbnQgcmV0Owo+ICsKPiArwqDCoMKgIGlm IChjdHgtPmNvZGVkX2J1ZmZlcl9yZWYpIHsKPiArwqDCoMKgwqDCoMKgwqAgb3V0cHV0X2J1ZmZl cl9wcmV2ID0gKFZBQnVmZmVySUQpKHVpbnRwdHJfdCljdHgtPmNvZGVkX2J1ZmZlcl9yZWYtCj4g PmRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHZhYXBpX2VuY29kZV9nZXRfY29kZWRfYnVm ZmVyX3NpemUoYXZjdHgsIG91dHB1dF9idWZmZXJfcHJldik7Cj4gK8KgwqDCoMKgwqDCoMKgIGlm IChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZW5kOwo+ICvCoMKgwqDC oMKgwqDCoCB0b3RhbF9zaXplICs9IHJldDsKPiDCoMKgwqDCoCB9Cj4gwqAKPiArwqDCoMKgIHJl dCA9IHZhYXBpX2VuY29kZV9nZXRfY29kZWRfYnVmZmVyX3NpemUoYXZjdHgsIHBpYy0+b3V0cHV0 X2J1ZmZlcik7Cj4gK8KgwqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBl bmQ7Cj4gK8KgwqDCoCB0b3RhbF9zaXplICs9IHJldDsKPiArCj4gK8KgwqDCoCByZXQgPSBmZl9n ZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCB0b3RhbF9zaXplLCAwKTsKPiArwqDCoMKgIGlm IChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVuZDsKPiArwqDCoMKgIHB0ciA9IHBr dC0+ZGF0YTsKPiArCj4gK8KgwqDCoCBpZiAoY3R4LT5jb2RlZF9idWZmZXJfcmVmKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIHJldCA9IHZhYXBpX2VuY29kZV9nZXRfY29kZWRfYnVmZmVyX2RhdGEoYXZj dHgsIG91dHB1dF9idWZmZXJfcHJldiwKPiAmcHRyKTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJl dCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlbmQ7Cj4gK8KgwqDCoCB9Cj4g Kwo+ICvCoMKgwqAgcmV0ID0gdmFhcGlfZW5jb2RlX2dldF9jb2RlZF9idWZmZXJfZGF0YShhdmN0 eCwgcGljLT5vdXRwdXRfYnVmZmVyLAo+ICZwdHIpOwo+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4g K8KgwqDCoMKgwqDCoMKgIGdvdG8gZW5kOwo+ICsKPiArZW5kOgo+ICvCoMKgwqAgaWYgKGN0eC0+ Y29kZWRfYnVmZmVyX3JlZikgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9idWZmZXJfdW5yZWYoJmN0 eC0+Y29kZWRfYnVmZmVyX3JlZik7Cj4gK8KgwqDCoCB9Cj4gwqDCoMKgwqAgYXZfYnVmZmVyX3Vu cmVmKCZwaWMtPm91dHB1dF9idWZmZXJfcmVmKTsKPiDCoMKgwqDCoCBwaWMtPm91dHB1dF9idWZm ZXIgPSBWQV9JTlZBTElEX0lEOwo+IMKgCj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMsIEFWUGFja2V0ICpwa3QpCj4gK3sKPiArwqDC oMKgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKg IEFWUGFja2V0ICpwa3RfcHRyID0gcGt0Owo+ICvCoMKgwqAgaW50IGVycjsKPiArCj4gK8KgwqDC oCBlcnIgPSB2YWFwaV9lbmNvZGVfd2FpdChhdmN0eCwgcGljKTsKPiArwqDCoMKgIGlmIChlcnIg PCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+ICsKPiArwqDCoMKgIGlmIChwaWMt Pm5vbl9pbmRlcGVuZGVudF9mcmFtZSkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKCFj dHgtPmNvZGVkX2J1ZmZlcl9yZWYpOwo+ICvCoMKgwqDCoMKgwqDCoCBjdHgtPmNvZGVkX2J1ZmZl cl9yZWYgPSBhdl9idWZmZXJfcmVmKHBpYy0+b3V0cHV0X2J1ZmZlcl9yZWYpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqAgaWYgKHBpYy0+dGFpbF9zaXplKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGN0eC0+dGFpbF9wa3QtPnNpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IEFWRVJST1IoQVZFUlJPUl9CVUcpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBlbmQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwg Y3R4LT50YWlsX3BrdCwgcGljLT50YWlsX3NpemUsCj4gMCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGVyciA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3Rv IGVuZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KGN0eC0+dGFpbF9wa3Qt PmRhdGEsIHBpYy0+dGFpbF9kYXRhLCBwaWMtPnRhaWxfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGt0X3B0ciA9IGN0eC0+dGFpbF9wa3Q7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiAr wqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IHZhYXBpX2VuY29kZV9nZXRf Y29kZWRfZGF0YShhdmN0eCwgcGljLCBwa3QpOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZXJyIDwg MCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVuZDsKPiArwqDCoMKgIH0KPiArCj4g wqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRwdXQgcmVhZCBmb3IgcGlj ICUiUFJJZDY0Ii8lIlBSSWQ2NCIuXG4iLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGljLT5k aXNwbGF5X29yZGVyLCBwaWMtPmVuY29kZV9vcmRlcik7Cj4gLcKgwqDCoCByZXR1cm4gMDsKPiDC oAo+IC1mYWlsX21hcHBlZDoKPiAtwqDCoMKgIHZhVW5tYXBCdWZmZXIoY3R4LT5od2N0eC0+ZGlz cGxheSwgcGljLT5vdXRwdXRfYnVmZmVyKTsKPiAtZmFpbDoKPiArwqDCoMKgIHZhYXBpX2VuY29k ZV9zZXRfb3V0cHV0X3Byb3BlcnR5KGF2Y3R4LCBwaWMsIHBrdF9wdHIpOwo+ICsKPiArZW5kOgo+ IMKgwqDCoMKgIGF2X2J1ZmZlcl91bnJlZigmcGljLT5vdXRwdXRfYnVmZmVyX3JlZik7Cj4gwqDC oMKgwqAgcGljLT5vdXRwdXRfYnVmZmVyID0gVkFfSU5WQUxJRF9JRDsKPiDCoMKgwqDCoCByZXR1 cm4gZXJyOwo+IEBAIC0xMTI4LDkgKzEyMjgsMTkgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVf cGlja19uZXh0KEFWQ29kZWNDb250ZXh0Cj4gKmF2Y3R4LAo+IMKgCj4gwqDCoMKgwqAgdmFhcGlf ZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgcGljLCAwLCAxLCAwKTsKPiDCoMKgwqDCoCBpZiAo cGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiAtwqDCoMKgwqDCoMKgwqAgdmFhcGlf ZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgc3RhcnQsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBpYy0+dHlwZSA9PSBQSUNUVVJF X1RZUEVfUCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYl9jb3VudGVyID4gMCwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgIC8vIFRPRE86 IGFwcGx5IGJvdGggcHJldmlvdXMgYW5kIGZvcndhcmQgbXVsdGkgcmVmZXJlbmNlIGZvciBhbGwK PiB2YWFwaSBlbmNvZGVycy4KPiArwqDCoMKgwqDCoMKgwqAgLy8gQW5kIEwwL0wxIHJlZmVyZW5j ZSBmcmFtZSBudW1iZXIgY2FuIGJlIHNldCBkeW5hbWljYWxseSB0aHJvdWdoCj4gcXVlcnkKPiAr wqDCoMKgwqDCoMKgwqAgLy8gVkFDb25maWdBdHRyaWJFbmNNYXhSZWZGcmFtZXMgYXR0cmlidXRl Lgo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FW MSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjdHgtPm5iX25l eHRfcHJldjsgaSsrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFhcGlfZW5j b2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgY3R4LT5uZXh0X3ByZXZbaV0sCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1AsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiX2Nv dW50ZXIgPiAwLCAwKTsKPiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgc3RhcnQsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJfY291bnRlciA+IDAs IDApOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBw aWMsIGN0eC0+bmV4dF9wcmV2W2N0eC0+bmJfbmV4dF9wcmV2IC0KPiAxXSwgMCwgMCwgMSk7Cj4g wqDCoMKgwqAgfQo+IMKgCj4gQEAgLTEyOTIsNiArMTQwMiwxOSBAQCBpbnQgZmZfdmFhcGlfZW5j b2RlX3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0Cj4gKmF2Y3R4LCBBVlBhY2tldCAqcGt0 KQo+IMKgwqDCoMKgIEFWRnJhbWUgKmZyYW1lID0gY3R4LT5mcmFtZTsKPiDCoMKgwqDCoCBpbnQg ZXJyOwo+IMKgCj4gK3N0YXJ0Ogo+ICvCoMKgwqAgLyoqIGlmIG5vIEIgZnJhbWUgYmVmb3JlIHJl cGVhdCBQIGZyYW1lLCBzZW50IHJlcGVhdCBQIGZyYW1lIG91dC4gKi8KPiArwqDCoMKgIGlmIChj dHgtPnRhaWxfcGt0LT5zaXplKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoVkFBUElFbmNvZGVQ aWN0dXJlICp0bXAgPSBjdHgtPnBpY19zdGFydDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCj4gewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0bXAtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0Ig JiYgdG1wLT5wdHMgPCBjdHgtPnRhaWxfcGt0LT5wdHMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICghdG1w LT5uZXh0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9wYWNrZXRfbW92 ZV9yZWYocGt0LCBjdHgtPnRhaWxfcGt0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gZW5kOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKg wqAgfQo+ICvCoMKgwqAgfQo+ICsKPiDCoMKgwqDCoCBlcnIgPSBmZl9lbmNvZGVfZ2V0X2ZyYW1l KGF2Y3R4LCBmcmFtZSk7Cj4gwqDCoMKgwqAgaWYgKGVyciA8IDAgJiYgZXJyICE9IEFWRVJST1Jf RU9GKQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiBAQCAtMTM1NiwxNyArMTQ3OSwy MSBAQCBpbnQgZmZfdmFhcGlfZW5jb2RlX3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0Cj4g KmF2Y3R4LCBBVlBhY2tldCAqcGt0KQo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiDC oMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKgIHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3Byb3BlcnR5 KGF2Y3R4LCBwaWMsIHBrdCk7Cj4gLcKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg Ik91dHB1dCBwYWNrZXQ6IHB0cyAlIlBSSWQ2NCIsIGR0cyAlIlBSSWQ2NCIsCj4gIgo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoCAic2l6ZSAlZCBieXRlcy5cbiIsIHBrdC0+cHRzLCBwa3QtPmR0cywg cGt0LT5zaXplKTsKPiAtCj4gwqDCoMKgwqAgY3R4LT5vdXRwdXRfb3JkZXIgPSBwaWMtPmVuY29k ZV9vcmRlcjsKPiDCoMKgwqDCoCB2YWFwaV9lbmNvZGVfY2xlYXJfb2xkKGF2Y3R4KTsKPiDCoAo+ ICvCoMKgwqAgLyoqIGxvb3AgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwa3QgaW4gZW5jb2RlciBmbHVz aGluZy4gKi8KPiArwqDCoMKgIGlmIChjdHgtPmVuZF9vZl9zdHJlYW0gJiYgIXBrdC0+c2l6ZSkK PiArwqDCoMKgwqDCoMKgwqAgZ290byBzdGFydDsKPiArCj4gK2VuZDoKPiArwqDCoMKgIGlmIChw a3QtPnNpemUpCj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi T3V0cHV0IHBhY2tldDogcHRzICUiUFJJZDY0IiwgZHRzCj4gJSJQUklkNjQiLCAiCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInNpemUgJWQgYnl0ZXMuXG4iLCBwa3QtPnB0cywgcGt0 LT5kdHMsIHBrdC0+c2l6ZSk7Cj4gKwo+IMKgwqDCoMKgIHJldHVybiAwOwo+IMKgfQo+IMKgCj4g LQo+IMKgc3RhdGljIGF2X2NvbGQgdm9pZCB2YWFwaV9lbmNvZGVfYWRkX2dsb2JhbF9wYXJhbShB VkNvZGVjQ29udGV4dCAqYXZjdHgsIGludAo+IHR5cGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+IMKgewo+ IEBAIC0yNjY3LDYgKzI3OTQsMTIgQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlfZW5jb2RlX2luaXQo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+IMKgwqDCoMKgIGN0eC0+ZGV2aWNlID0gKEFWSFdEZXZp Y2VDb250ZXh0KiljdHgtPmRldmljZV9yZWYtPmRhdGE7Cj4gwqDCoMKgwqAgY3R4LT5od2N0eCA9 IGN0eC0+ZGV2aWNlLT5od2N0eDsKPiDCoAo+ICvCoMKgwqAgY3R4LT50YWlsX3BrdCA9IGF2X3Bh Y2tldF9hbGxvYygpOwo+ICvCoMKgwqAgaWYgKCFjdHgtPnRhaWxfcGt0KSB7Cj4gK8KgwqDCoMKg wqDCoMKgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWls Owo+ICvCoMKgwqAgfQo+ICsKPiDCoMKgwqDCoCBlcnIgPSB2YWFwaV9lbmNvZGVfcHJvZmlsZV9l bnRyeXBvaW50KGF2Y3R4KTsKPiDCoMKgwqDCoCBpZiAoZXJyIDwgMCkKPiDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gZmFpbDsKPiBAQCAtMjg1OSw2ICsyOTkyLDcgQEAgYXZfY29sZCBpbnQgZmZfdmFh cGlfZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiDCoMKgwqDCoCB9Cj4gwqAK PiDCoMKgwqDCoCBhdl9mcmFtZV9mcmVlKCZjdHgtPmZyYW1lKTsKPiArwqDCoMKgIGF2X3BhY2tl dF9mcmVlKCZjdHgtPnRhaWxfcGt0KTsKPiDCoAo+IMKgwqDCoMKgIGF2X2ZyZWVwKCZjdHgtPmNv ZGVjX3NlcXVlbmNlX3BhcmFtcyk7Cj4gwqDCoMKgwqAgYXZfZnJlZXAoJmN0eC0+Y29kZWNfcGlj dHVyZV9wYXJhbXMpOwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5oIGIv bGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaAo+IGluZGV4IGQ1NDUyYTM3YjMuLjQxNmEzY2VkNWIg MTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaAo+ICsrKyBiL2xpYmF2Y29k ZWMvdmFhcGlfZW5jb2RlLmgKPiBAQCAtMTMzLDYgKzEzMywxNyBAQCB0eXBlZGVmIHN0cnVjdCBW QUFQSUVuY29kZVBpY3R1cmUgewo+IMKgCj4gwqDCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKg IG5iX3NsaWNlczsKPiDCoMKgwqDCoCBWQUFQSUVuY29kZVNsaWNlICpzbGljZXM7Cj4gKwo+ICvC oMKgwqAgLyoqCj4gK8KgwqDCoMKgICogaW5kaWNhdGUgaWYgY3VycmVudCBmcmFtZSBpcyBhbiBp bmRlcGVuZGVudCBmcmFtZSB0aGF0IHRoZSBjb2RlZCBkYXRhCj4gK8KgwqDCoMKgICogY2FuIGJl IHB1c2hlZCB0byBkb3duc3RyZWFtIGRpcmVjdGx5LiBDb2RlZCBvZiBub24taW5kZXBlbmRlbnQg ZnJhbWUKPiArwqDCoMKgwqAgKiBkYXRhIHdpbGwgYmUgY29uY2F0ZW5hdGVkIGludG8gbmV4dCBp bmRlcGVuZGVudCBmcmFtZS4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIGludCBub25faW5kZXBl bmRlbnRfZnJhbWU7Cj4gK8KgwqDCoCAvKiogVGFpbCBkYXRhIG9mIGN1cnJlbnQgcGljLCB1c2Vk IG9ubHkgZm9yIHJlcGVhdCBoZWFkZXIgb2YgQVYxLiAqLwo+ICvCoMKgwqAgY2hhciB0YWlsX2Rh dGFbTUFYX1BBUkFNX0JVRkZFUl9TSVpFXTsKPiArwqDCoMKgIC8qKiBCeXRlIGxlbmd0aCBvZiB0 YWlsX2RhdGEuICovCj4gK8KgwqDCoCBzaXplX3QgdGFpbF9zaXplOwo+IMKgfSBWQUFQSUVuY29k ZVBpY3R1cmU7Cj4gwqAKPiDCoHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUHJvZmlsZSB7Cj4g QEAgLTM2Nyw2ICszNzgsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVDb250ZXh0IHsK PiDCoMKgwqDCoCBBVkZpZm/CoMKgwqDCoMKgwqDCoMKgwqAgKmVuY29kZV9maWZvOwo+IMKgwqDC oMKgIC8vIE1heCBudW1iZXIgb2YgZnJhbWUgYnVmZmVyZWQgaW4gZW5jb2Rlci4KPiDCoMKgwqDC oCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN5bmNfZGVwdGg7Cj4gKwo+ICvCoMKgwqAg LyoqIEhlYWQgZGF0YSBmb3IgY3VycmVudCBvdXRwdXQgcGt0LCB1c2VkIG9ubHkgZm9yIEFWMS4g Ki8KPiArwqDCoMKgIC8vdm9pZMKgICpoZWFkZXJfZGF0YTsKPiArwqDCoMKgIC8vc2l6ZV90IGhl YWRlcl9kYXRhX3NpemU7Cj4gKwo+ICvCoMKgwqAgLyoqIEJ1ZmZlcmVkIGNvZGVkIGRhdGEgb2Yg YSBwaWMgaWYgaXQgaXMgYW4gbm9uLWluZGVwZW5kZW50IGZyYW1lLiAqLwo+ICvCoMKgwqAgQVZC dWZmZXJSZWbCoMKgwqDCoCAqY29kZWRfYnVmZmVyX3JlZjsKPiArCj4gK8KgwqDCoCAvKiogVGFp bCBkYXRhIG9mIGEgcGljLCBub3cgb25seSB1c2VkIGZvciBhdjEgcmVwZWF0IGZyYW1lIGhlYWRl ci4gKi8KPiArwqDCoMKgIEFWUGFja2V0wqDCoMKgwqDCoMKgwqAgKnRhaWxfcGt0Owo+IMKgfSBW QUFQSUVuY29kZUNvbnRleHQ7Cj4gwqAKPiDCoGVudW0gewo+IEBAIC0zODMsNiArNDA0LDkgQEAg ZW51bSB7Cj4gwqDCoMKgwqAgLy8gQ29kZWMgc3VwcG9ydHMgbm9uLUlEUiBrZXkgcGljdHVyZXMg KHRoYXQgaXMsIGtleSBwaWN0dXJlcyBkbwo+IMKgwqDCoMKgIC8vIG5vdCBuZWNlc3NhcmlseSBl bXB0eSB0aGUgRFBCKS4KPiDCoMKgwqDCoCBGTEFHX05PTl9JRFJfS0VZX1BJQ1RVUkVTwqAgPSAx IDw8IDUsCj4gK8KgwqDCoCAvLyBDb2RlYyBvdXRwdXQgcGFja2V0IHdpdGhvdXQgdGltZXN0YW1w IGRlbGF5LCB3aGljaCBtZWFucyB0aGUKPiArwqDCoMKgIC8vIG91dHB1dCBwYWNrZXQgaGFzIHNh bWUgUFRTIGFuZCBEVFMuCj4gK8KgwqDCoCBGTEFHX1RJTUVTVEFNUF9OT19ERUxBWcKgwqDCoCA9 IDEgPDwgNiwKPiDCoH07Cj4gwqAKPiDCoHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlVHlwZSB7 Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jIGIvbGliYXZjb2Rl Yy92YWFwaV9lbmNvZGVfYXYxLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLjJjZmJiZDdjNjcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92YWFw aV9lbmNvZGVfYXYxLmMKPiBAQCAtMCwwICsxLDk0OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQg KGMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPiBVU0EKPiArICovCj4gKwo+ICsjaW5j bHVkZSA8dmEvdmEuaD4KPiArI2luY2x1ZGUgPHZhL3ZhX2VuY19hdjEuaD4KPiArCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ ICsKPiArI2luY2x1ZGUgImNic19hdjEuaCIKPiArI2luY2x1ZGUgInB1dF9iaXRzLmgiCj4gKyNp bmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiYXYxX2xldmVscy5oIgo+ICsj aW5jbHVkZSAidmFhcGlfZW5jb2RlLmgiCj4gKwo+ICsjZGVmaW5lIEFWMV9NQVhfUVVBTlQgMjU1 Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZUFWMVBpY3R1cmUgewo+ICvCoMKgwqAg aW50NjRfdCBsYXN0X2lkcl9mcmFtZTsKPiArwqDCoMKgIGludCBzbG90Owo+ICt9IFZBQVBJRW5j b2RlQVYxUGljdHVyZTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlQVYxQ29udGV4 dCB7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNvbnRleHQgY29tbW9uOwo+ICvCoMKgwqAgQVYxUmF3 T0JVIHNoOyAvKio8IHNlcXVlbmNlIGhlYWRlci4qLwo+ICvCoMKgwqAgQVYxUmF3T0JVIGZoOyAv Kio8IGZyYW1lIGhlYWRlci4qLwo+ICvCoMKgwqAgQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjYmM7 Cj4gK8KgwqDCoCBDb2RlZEJpdHN0cmVhbUZyYWdtZW50IGN1cnJlbnRfb2J1Owo+ICvCoMKgwqAg VkFDb25maWdBdHRyaWJWYWxFbmNBVjEgYXR0cjsKPiArwqDCoMKgIFZBQ29uZmlnQXR0cmliVmFs RW5jQVYxRXh0MSBhdHRyX2V4dDE7Cj4gK8KgwqDCoCBWQUNvbmZpZ0F0dHJpYlZhbEVuY0FWMUV4 dDIgYXR0cl9leHQyOwo+ICsKPiArwqDCoMKgIGNoYXIgc2hfZGF0YVtNQVhfUEFSQU1fQlVGRkVS X1NJWkVdOyAvKio8IGNvZGVkIHNlcXVlbmNlIGhlYWRlciBkYXRhLiAqLwo+ICvCoMKgwqAgc2l6 ZV90IHNoX2RhdGFfbGVuOyAvKio8IGJpdCBsZW5ndGggb2Ygc2hfZGF0YS4gKi8KPiArwqDCoMKg IGNoYXIgZmhfZGF0YVtNQVhfUEFSQU1fQlVGRkVSX1NJWkVdOyAvKio8IGNvZGVkIGZyYW1lIGhl YWRlciBkYXRhLiAqLwo+ICvCoMKgwqAgc2l6ZV90IGZoX2RhdGFfbGVuOyAvKio8IGJpdCBsZW5n dGggb2YgZmhfZGF0YS4gKi8KPiArCj4gK8KgwqDCoCB1aW50OF90IHVuaWZvcm1fdGlsZTsKPiAr wqDCoMKgIHVpbnQ4X3QgdXNlXzEyOHgxMjhfc3VwZXJibG9jazsKPiArwqDCoMKgIGludCBzYl9j b2xzOwo+ICvCoMKgwqAgaW50IHNiX3Jvd3M7Cj4gK8KgwqDCoCBpbnQgdGlsZV9jb2xzX2xvZzI7 Cj4gK8KgwqDCoCBpbnQgdGlsZV9yb3dzX2xvZzI7Cj4gK8KgwqDCoCBpbnQgbWF4X3RpbGVfd2lk dGhfc2I7Cj4gK8KgwqDCoCBpbnQgbWF4X3RpbGVfaGVpZ2h0X3NiOwo+ICvCoMKgwqAgdWludDhf dCB3aWR0aF9pbl9zYnNfbWludXNfMVtBVjFfTUFYX1RJTEVfQ09MU107Cj4gK8KgwqDCoCB1aW50 OF90IGhlaWdodF9pbl9zYnNfbWludXNfMVtBVjFfTUFYX1RJTEVfUk9XU107Cj4gKwo+ICvCoMKg wqAgaW50IG1pbl9sb2cyX3RpbGVfY29sczsKPiArwqDCoMKgIGludCBtYXhfbG9nMl90aWxlX2Nv bHM7Cj4gK8KgwqDCoCBpbnQgbWluX2xvZzJfdGlsZV9yb3dzOwo+ICvCoMKgwqAgaW50IG1heF9s b2cyX3RpbGVfcm93czsKPiArCj4gK8KgwqDCoCBpbnQgcV9pZHhfaWRyOwo+ICvCoMKgwqAgaW50 IHFfaWR4X3A7Cj4gK8KgwqDCoCBpbnQgcV9pZHhfYjsKPiArCj4gK8KgwqDCoCAvKiogYml0IHBv c2l0aW9ucyBpbiBjdXJyZW50IGZyYW1lIGhlYWRlciAqLwo+ICvCoMKgwqAgaW50IHFpbmRleF9v ZmZzZXQ7Cj4gK8KgwqDCoCBpbnQgbG9vcGZpbHRlcl9vZmZzZXQ7Cj4gK8KgwqDCoCBpbnQgY2Rl Zl9zdGFydF9vZmZzZXQ7Cj4gK8KgwqDCoCBpbnQgY2RlZl9wYXJhbV9zaXplOwo+ICsKPiArwqDC oMKgIC8qKiB1c2VyIG9wdGlvbnMgKi8KPiArwqDCoMKgIGludCBwcm9maWxlOwo+ICvCoMKgwqAg aW50IGxldmVsOwo+ICvCoMKgwqAgaW50IHRpZXI7Cj4gK8KgwqDCoCBpbnQgdGlsZV9jb2xzLCB0 aWxlX3Jvd3M7Cj4gK8KgwqDCoCBpbnQgdGlsZV9ncm91cHM7Cj4gK30gVkFBUElFbmNvZGVBVjFD b250ZXh0Owo+ICsKPiArc3RhdGljIHZvaWQgdmFhcGlfZW5jb2RlX2F2MV90cmFjZV93cml0ZV9s b2codm9pZCAqY3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFB1dEJpdENv bnRleHQgKnBiYywgaW50IGxlbmd0aCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGludAo+ICpzdWJzY3JpcHRzLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludDY0X3QgdmFsdWUpCj4gK3sKPiArwqDCoMKgIFZBQVBJ RW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGN0eDsKPiArwqDCoMKgIGludCBwb3NpdGlvbjsKPiAr Cj4gK8KgwqDCoCBwb3NpdGlvbiA9IHB1dF9iaXRzX2NvdW50KHBiYyk7Cj4gK8KgwqDCoCBhdl9h c3NlcnQwKHBvc2l0aW9uID49IGxlbmd0aCk7Cj4gKwo+ICvCoMKgwqAgaWYgKCFzdHJjbXAoc3Ry LCAiYmFzZV9xX2lkeCIpKQo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT5xaW5kZXhfb2Zmc2V0ID0g cG9zaXRpb24gLSBsZW5ndGg7Cj4gK8KgwqDCoCBlbHNlIGlmICghc3RyY21wKHN0ciwgImxvb3Bf ZmlsdGVyX2xldmVsWzBdIikpCj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPmxvb3BmaWx0ZXJfb2Zm c2V0ID0gcG9zaXRpb24gLSBsZW5ndGg7Cj4gK8KgwqDCoCBlbHNlIGlmICghc3RyY21wKHN0ciwg ImNkZWZfZGFtcGluZ19taW51c18zIikpCj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPmNkZWZfc3Rh cnRfb2Zmc2V0ID0gcG9zaXRpb24gLSBsZW5ndGg7Cj4gK8KgwqDCoCBlbHNlIGlmICghc3RyY21w KHN0ciwgImNkZWZfdXZfc2VjX3N0cmVuZ3RoW2ldIikpCj4gK8KgwqDCoMKgwqDCoMKgIHByaXYt PmNkZWZfcGFyYW1fc2l6ZSA9IHBvc2l0aW9uIC0gcHJpdi0+Y2RlZl9zdGFydF9vZmZzZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfYXYxX2dldF9lbmNvZGVy X2NhcHMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNv bnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMUNv bnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsKPiArwqDCoMKgIC8vIFN1cmZhY2Vz IG11c3QgYmUgYWxpZ25lZCB0byBzdXBlcmJsb2NrIGJvdW5kYXJpZXMuCj4gK8KgwqDCoCBjdHgt PnN1cmZhY2Vfd2lkdGjCoCA9IEZGQUxJR04oYXZjdHgtPndpZHRoLMKgIHByaXYtPnVzZV8xMjh4 MTI4X3N1cGVyYmxvY2sKPiA/IDEyOCA6IDY0KTsKPiArwqDCoMKgIGN0eC0+c3VyZmFjZV9oZWln aHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIHByaXYtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sK PiA/IDEyOCA6IDY0KTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFfY29uZmlndXJlKEFWQ29kZWNDb250ZXh0ICph dmN0eCkKPiArewo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0wqDCoMKgwqAgKmN0eCA9IGF2 Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgaW50IHJldDsKPiArCj4gK8KgwqDCoCByZXQgPSBm Zl9jYnNfaW5pdCgmcHJpdi0+Y2JjLCBBVl9DT0RFQ19JRF9BVjEsIGF2Y3R4KTsKPiArwqDCoMKg IGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ICvCoMKgwqAgcHJp di0+Y2JjLT50cmFjZV9lbmFibGXCoCA9IDE7Cj4gK8KgwqDCoCBwcml2LT5jYmMtPnRyYWNlX2xl dmVswqDCoCA9IEFWX0xPR19ERUJVRzsKPiArwqDCoMKgIHByaXYtPmNiYy0+dHJhY2VfY29udGV4 dCA9IGN0eDsKPiArwqDCoMKgIHByaXYtPmNiYy0+dHJhY2Vfd3JpdGVfY2FsbGJhY2sgPSB2YWFw aV9lbmNvZGVfYXYxX3RyYWNlX3dyaXRlX2xvZzsKPiArCj4gK8KgwqDCoCBpZiAoY3R4LT5yY19t b2RlLT5xdWFsaXR5KSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPnFfaWR4X3AgPSBhdl9jbGlw KGN0eC0+cmNfcXVhbGl0eSwgMCwgQVYxX01BWF9RVUFOVCk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlm IChmYWJzKGF2Y3R4LT5pX3F1YW50X2ZhY3RvcikgPiAwLjApCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcHJpdi0+cV9pZHhfaWRyID0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF2X2NsaXAoKGZhYnMoYXZjdHgtPmlfcXVhbnRfZmFjdG9yKSAqIHByaXYtPnFfaWR4X3DCoCAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmN0 eC0+aV9xdWFudF9vZmZzZXQpICsgMC41LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDAsIEFWMV9NQVhfUVVBTlQpOwo+ICvCoMKgwqDCoMKgwqDCoCBl bHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+cV9pZHhfaWRyID0gcHJpdi0+cV9p ZHhfcDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmYWJzKGF2Y3R4LT5iX3F1YW50X2ZhY3Rv cikgPiAwLjApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+cV9pZHhfYiA9Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9jbGlwKChmYWJzKGF2Y3R4LT5iX3F1YW50 X2ZhY3RvcikgKiBwcml2LT5xX2lkeF9wwqAgKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmJfcXVhbnRfb2Zmc2V0KSArIDAuNSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwLCBBVjFfTUFY X1FVQU5UKTsKPiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHByaXYtPnFfaWR4X2IgPSBwcml2LT5xX2lkeF9wOwo+ICvCoMKgwqAgfSBlbHNlIHsKPiArwqDC oMKgwqDCoMKgwqAgLyoqIEFyYml0cmFyeSB2YWx1ZSAqLwo+ICvCoMKgwqDCoMKgwqDCoCBwcml2 LT5xX2lkeF9pZHIgPSBwcml2LT5xX2lkeF9wID0gcHJpdi0+cV9pZHhfYiA9IDEyODsKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YWFw aV9lbmNvZGVfYXYxX2FkZF9vYnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKmF1LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ4X3Qg dHlwZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2b2lkICpvYnVfdW5pdCkKPiArewo+ICvCoMKgwqAgaW50 IHJldDsKPiArCj4gK8KgwqDCoCByZXQgPSBmZl9jYnNfaW5zZXJ0X3VuaXRfY29udGVudChhdSwg LTEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlLCBvYnVfdW5pdCwgTlVMTCk7Cj4gK8KgwqDCoCBp ZiAocmV0IDwgMCkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBhZGQgT0JVIHVuaXQ6ICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAidHlwZSA9ICVkLlxuIiwgdHlwZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9vYnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjaGFyICpkYXRhLCBzaXplX3QgKmRhdGFfbGVuLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpicykKPiArewo+ICvCoMKgwqAgVkFB UElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIGlu dCByZXQ7Cj4gKwo+ICvCoMKgwqAgcmV0ID0gZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEocHJp di0+Y2JjLCBicyk7Cj4gK8KgwqDCoCBpZiAocmV0IDwgMCkgewo+ICvCoMKgwqDCoMKgwqDCoCBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB3cml0ZSBwYWNrZWQgaGVhZGVy LlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvC oMKgwqAgaWYgKChzaXplX3QpOCAqIE1BWF9QQVJBTV9CVUZGRVJfU0laRSA8IDggKiBicy0+ZGF0 YV9zaXplIC0gYnMtCj4gPmRhdGFfYml0X3BhZGRpbmcpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBY2Nlc3MgdW5pdCB0b28gbGFyZ2U6ICIKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJXp1IDwgJXp1LlxuIiwgKHNpemVfdCk4ICogTUFY X1BBUkFNX0JVRkZFUl9TSVpFLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDggKiBi cy0+ZGF0YV9zaXplIC0gYnMtPmRhdGFfYml0X3BhZGRpbmcpOwo+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gQVZFUlJPUihFTk9TUEMpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIG1lbWNweShk YXRhLCBicy0+ZGF0YSwgYnMtPmRhdGFfc2l6ZSk7Cj4gK8KgwqDCoCAqZGF0YV9sZW4gPSA4ICog YnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nOwo+ICsKPiArwqDCoMKgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpbGVfbG9nMihpbnQgYmxrU2l6ZSwgaW50IHRh cmdldCkgewo+ICvCoMKgwqAgaW50IGs7Cj4gK8KgwqDCoCBmb3IgKGsgPSAwOyAoYmxrU2l6ZSA8 PCBrKSA8IHRhcmdldDsgaysrKTsKPiArwqDCoMKgIHJldHVybiBrOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfc2V0X3RpbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ ICt7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOwo+ICvCoMKgwqAgaW50IG1pX2NvbHMsIG1pX3Jvd3MsIHNiX3NoaWZ0LCBzYl9zaXplOwo+ ICvCoMKgwqAgaW50IG1heF90aWxlX2FyZWFfc2IsIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkOwo+ ICvCoMKgwqAgaW50IHRpbGVfd2lkdGhfc2IsIHRpbGVfaGVpZ2h0X3NiLCB3aWRlc3RfdGlsZV9z YjsKPiArwqDCoMKgIGludCB0aWxlX2NvbHMsIHRpbGVfcm93czsKPiArwqDCoMKgIGludCBtaW5f bG9nMl90aWxlczsKPiArwqDCoMKgIGludCBpOwo+ICsKPiArwqDCoMKgIGlmIChwcml2LT50aWxl X2NvbHMgPiBBVjFfTUFYX1RJTEVfQ09MUyB8fAo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT50aWxl X3Jvd3MgPiBBVjFfTUFYX1RJTEVfUk9XUykgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgdGlsZSBudW1iZXIgJWR4JWQsIHNob3VsZCBsZXNz Cj4gdGhhbiAlZHglZC5cbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+ dGlsZV9jb2xzLCBwcml2LT50aWxlX3Jvd3MsIEFWMV9NQVhfVElMRV9DT0xTLAo+IEFWMV9NQVhf VElMRV9ST1dTKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCBtaV9jb2xzID0gMiAqICgoYXZjdHgtPndpZHRoICsgNykg Pj4gMyk7Cj4gK8KgwqDCoCBtaV9yb3dzID0gMiAqICgoYXZjdHgtPmhlaWdodCArIDcpID4+IDMp Owo+ICvCoMKgwqAgcHJpdi0+c2JfY29scyA9IHByaXYtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sg Pwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKG1pX2NvbHMgKyAz MSkgPj4gNSkgOiAoKG1pX2NvbHMgKyAxNSkgPj4gNCk7Cj4gK8KgwqDCoCBwcml2LT5zYl9yb3dz ID0gcHJpdi0+dXNlXzEyOHgxMjhfc3VwZXJibG9jayA/Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICgobWlfcm93cyArIDMxKSA+PiA1KSA6ICgobWlfcm93cyArIDE1 KSA+PiA0KTsKPiArwqDCoMKgIHNiX3NoaWZ0ID0gcHJpdi0+dXNlXzEyOHgxMjhfc3VwZXJibG9j ayA/IDUgOiA0Owo+ICvCoMKgwqAgc2Jfc2l6ZcKgID0gc2Jfc2hpZnQgKyAyOwo+ICvCoMKgwqAg cHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IgPSBBVjFfTUFYX1RJTEVfV0lEVEggPj4gc2Jfc2l6ZTsK PiArwqDCoMKgIG1heF90aWxlX2FyZWFfc2IgPSBBVjFfTUFYX1RJTEVfQVJFQcKgID4+ICgyICog c2Jfc2l6ZSk7Cj4gKwo+ICvCoMKgwqAgcHJpdi0+bWluX2xvZzJfdGlsZV9jb2xzID0gdGlsZV9s b2cyKHByaXYtPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LQo+ID5zYl9jb2xzKTsKPiArwqDCoMKg IHByaXYtPm1heF9sb2cyX3RpbGVfY29scyA9IHRpbGVfbG9nMigxLCBGRk1JTihwcml2LT5zYl9j b2xzLAo+IEFWMV9NQVhfVElMRV9DT0xTKSk7Cj4gK8KgwqDCoCBwcml2LT5tYXhfbG9nMl90aWxl X3Jvd3MgPSB0aWxlX2xvZzIoMSwgRkZNSU4ocHJpdi0+c2Jfcm93cywKPiBBVjFfTUFYX1RJTEVf Uk9XUykpOwo+ICvCoMKgwqAgbWluX2xvZzJfdGlsZXMgPSBGRk1BWChwcml2LT5taW5fbG9nMl90 aWxlX2NvbHMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdGlsZV9sb2cyKG1heF90aWxlX2FyZWFfc2IsIHByaXYtPnNiX3Jvd3MgKiBwcml2 LQo+ID5zYl9jb2xzKSk7Cj4gKwo+ICvCoMKgwqAgdGlsZV9jb2xzID0gYXZfY2xpcChwcml2LT50 aWxlX2NvbHMsIChwcml2LT5zYl9jb2xzICsgcHJpdi0KPiA+bWF4X3RpbGVfd2lkdGhfc2IgLSAx KSAvIHByaXYtPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LT5zYl9jb2xzKTsKPiArCj4gK8KgwqDC oCBpZiAoIXByaXYtPnRpbGVfY29scykKPiArwqDCoMKgwqDCoMKgwqAgcHJpdi0+dGlsZV9jb2xz ID0gdGlsZV9jb2xzOwo+ICvCoMKgwqAgZWxzZSBpZiAocHJpdi0+dGlsZV9jb2xzICE9IHRpbGVf Y29scyl7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCB0aWxlIGNvbHMgJWQsIHNob3VsZCBiZSBpbiByYW5nZQo+IG9mICVkfiVkXG4iLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPnRpbGVfY29scywKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAocHJpdi0+c2JfY29scyArIHByaXYtPm1heF90aWxlX3dpZHRo X3NiIC0gMSkgLyBwcml2LQo+ID5tYXhfdGlsZV93aWR0aF9zYiwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwcml2LT5zYl9jb2xzKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBwcml2LT50aWxlX2NvbHNf bG9nMiA9IHRpbGVfbG9nMigxLCBwcml2LT50aWxlX2NvbHMpOwo+ICvCoMKgwqAgdGlsZV93aWR0 aF9zYiA9IChwcml2LT5zYl9jb2xzICsgKDEgPDwgcHJpdi0+dGlsZV9jb2xzX2xvZzIpIC0gMSkg Pj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+dGlsZV9j b2xzX2xvZzI7Cj4gKwo+ICvCoMKgwqAgaWYgKHByaXYtPnRpbGVfcm93cyA+IHByaXYtPnNiX3Jv d3MpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIHRpbGUgcm93cyAlZCwgc2hvdWxkIGJlIGxlc3MKPiB0aGFuICVkLlxuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT50aWxlX3Jvd3MsIHByaXYtPnNiX3Jvd3MpOwo+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqAgfQo+ICsK PiArwqDCoMKgIC8qKiBUcnkgdXNlciBzZXR0aW5nIHRpbGUgcm93cyBudW1iZXIgZmlyc3QuICov Cj4gK8KgwqDCoCB0aWxlX3Jvd3MgPSBwcml2LT50aWxlX3Jvd3MgPyBwcml2LT50aWxlX3Jvd3Mg OiAxOwo+ICvCoMKgwqAgZm9yICg7IHRpbGVfcm93cyA8PSBwcml2LT5zYl9yb3dzICYmIHRpbGVf cm93cyA8PSBBVjFfTUFYX1RJTEVfUk9XUzsKPiB0aWxlX3Jvd3MrKykgewo+ICvCoMKgwqDCoMKg wqDCoCAvKiogdHJ5IHVuaWZvcm1lZCB0aWxlLiAqLwo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT50 aWxlX3Jvd3NfbG9nMiA9IHRpbGVfbG9nMigxLCB0aWxlX3Jvd3MpOwo+ICvCoMKgwqDCoMKgwqDC oCBpZiAoKHByaXYtPnNiX2NvbHMgKyB0aWxlX3dpZHRoX3NiIC0gMSkgLyB0aWxlX3dpZHRoX3Ni ID09IHByaXYtCj4gPnRpbGVfY29scykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAo aSA9IDA7IGkgPCBwcml2LT50aWxlX2NvbHMgLSAxOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwcml2LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IHRpbGVfd2lkdGhf c2IgLSAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPndpZHRoX2luX3Nic19taW51 c18xW2ldID0gcHJpdi0+c2JfY29scyAtIChwcml2LT50aWxlX2NvbHMKPiAtIDEpICogdGlsZV93 aWR0aF9zYiAtIDE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpbGVfaGVpZ2h0X3Ni ID0gKHByaXYtPnNiX3Jvd3MgKyAoMSA8PCBwcml2LT50aWxlX3Jvd3NfbG9nMikgLQo+IDEpID4+ Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHByaXYtPnRpbGVfcm93c19sb2cyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoKHByaXYtPnNiX3Jvd3MgKyB0aWxlX2hlaWdodF9zYiAtIDEpIC8gdGlsZV9oZWlnaHRfc2Ig PT0KPiB0aWxlX3Jvd3MgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpbGVf aGVpZ2h0X3NiIDw9IG1heF90aWxlX2FyZWFfc2IgLyB0aWxlX3dpZHRoX3NiKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgdGlsZV9yb3dzIC0gMTsg aSsrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT5oZWln aHRfaW5fc2JzX21pbnVzXzFbaV0gPSB0aWxlX2hlaWdodF9zYiAtIDE7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2 LT5zYl9yb3dzIC0gKHRpbGVfcm93cyAtCj4gMSkgKiB0aWxlX2hlaWdodF9zYiAtIDE7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+dW5pZm9ybV90aWxlID0gMTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPm1pbl9sb2cyX3RpbGVfcm93 cyA9IEZGTUFYKG1pbl9sb2cyX3RpbGVzIC0gcHJpdi0KPiA+dGlsZV9jb2xzX2xvZzIsIDApOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAg LyoqIHRyeSBub24tdW5pZm9ybWVkIHRpbGUuICovCj4gK8KgwqDCoMKgwqDCoMKgIHdpZGVzdF90 aWxlX3NiID0gMDsKPiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVf Y29sczsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+d2lkdGhfaW5fc2Jz X21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJpdi0+c2JfY29scyAvIHByaXYtCj4gPnRpbGVfY29s cyAtIGkgKiBwcml2LT5zYl9jb2xzIC8gcHJpdi0+dGlsZV9jb2xzIC0gMTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB3aWRlc3RfdGlsZV9zYiA9IEZGTUFYKHdpZGVzdF90aWxlX3NiLCBwcml2 LQo+ID53aWR0aF9pbl9zYnNfbWludXNfMVtpXSArIDEpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAobWluX2xvZzJfdGlsZXMpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbWF4X3RpbGVfYXJlYV9zYl92YXJpZWQgPSAocHJpdi0+c2Jfcm93cyAqIHByaXYt PnNiX2NvbHMpID4+Cj4gKG1pbl9sb2cyX3RpbGVzICsgMSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGVs c2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZCA9IHBy aXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9jb2xzOwo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT5tYXhf dGlsZV9oZWlnaHRfc2IgPSBGRk1BWCgxLCBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZCAvCj4gd2lk ZXN0X3RpbGVfc2IpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHRpbGVfcm93cyA9PSBhdl9j bGlwKHRpbGVfcm93cywgKHByaXYtPnNiX3Jvd3MgKyBwcml2LQo+ID5tYXhfdGlsZV9oZWlnaHRf c2IgLSAxKSAvIHByaXYtPm1heF90aWxlX2hlaWdodF9zYiwgcHJpdi0+c2Jfcm93cykpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgdGlsZV9yb3dzOyBpKyspCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVz XzFbaV0gPSAoaSArIDEpICogcHJpdi0+c2Jfcm93cyAvCj4gdGlsZV9yb3dzIC0gaSAqIHByaXYt PnNiX3Jvd3MgLyB0aWxlX3Jvd3MgLSAxOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgLyoqIFJldHVy biBpbnZhbGlkIHBhcmFtZXRlciBpZiBleHBsaWNpdCB0aWxlIHJvd3MgaXMgc2V0LiAqLwo+ICvC oMKgwqDCoMKgwqDCoCBpZiAocHJpdi0+dGlsZV9yb3dzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHRpbGUgcm93cyAlZC5c biIsIHByaXYtCj4gPnRpbGVfcm93cyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIHByaXYtPnRpbGVfcm93cyA9IHRpbGVfcm93czsKPiArwqDCoMKgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0RFQlVHLCAiU2V0dGluZyB0aWxlIGNvbHMvcm93cyB0byAlZC8lZC5cbiIsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzKTsK PiArCj4gK8KgwqDCoCAvKiogY2hlY2sgaWYgdGlsZSBjb2xzL3Jvd3MgaXMgc3VwcG9ydGVkIGJ5 IGRyaXZlci4gKi8KPiArwqDCoMKgIGlmIChwcml2LT5hdHRyX2V4dDIuYml0cy5tYXhfdGlsZV9u dW1fbWludXMxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICgocHJpdi0+dGlsZV9jb2xzICogcHJp di0+dGlsZV9yb3dzIC0gMSkgPiBwcml2LQo+ID5hdHRyX2V4dDIuYml0cy5tYXhfdGlsZV9udW1f bWludXMxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJVbnN1cHBvcnRlZCB0aWxlIG51bSAlZCAqICVkID0gJWQgYnkKPiBkcml2ZXIsICIK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJzaG91bGQgYmUgYXQgbW9z dCAlZC5cbiIsIHByaXYtPnRpbGVfY29scywgcHJpdi0KPiA+dGlsZV9yb3dzLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGls ZV9yb3dzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+YXR0 cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSArIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCAvKiogY2hlY2sgaWYgdGlsZSBncm91cCBudW1iZXJzIGlzIHZh bGlkLiAqLwo+ICvCoMKgwqAgaWYgKHByaXYtPnRpbGVfZ3JvdXBzID4gcHJpdi0+dGlsZV9jb2xz ICogcHJpdi0+dGlsZV9yb3dzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgZ3JvdXBzIG51bWJlciAlZCwgIgo+ICvCoMKgwqDC oMKgwqDCoCAiY29ycmVjdCB0byAlZC5cbiIsIHByaXYtPnRpbGVfZ3JvdXBzLCBwcml2LT50aWxl X2NvbHMgKiBwcml2LQo+ID50aWxlX3Jvd3MpOwo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT50aWxl X2dyb3VwcyA9IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93czsKPiArwqDCoMKgIH0K PiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YWFwaV9lbmNv ZGVfYXYxX3dyaXRlX3NlcXVlbmNlX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKmRhdGEsIHNpemVf dAo+ICpkYXRhX2xlbikKPiArewo+ICvCoMKgwqAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2 ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArCj4gK8KgwqDCoCBtZW1jcHkoZGF0YSwgJnByaXYtPnNo X2RhdGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAqIHNpemVvZihjaGFyKSk7Cj4gK8KgwqDCoCAq ZGF0YV9sZW4gPSBwcml2LT5zaF9kYXRhX2xlbjsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFyYW1z KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICvCoMKgwqAgVkFBUElFbmNvZGVDb250ZXh0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiAr wqDCoMKgIFZBQVBJRW5jb2RlQVYxQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcml2ID0g YXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEFWMVJhd09CVcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKnNoX29idSA9ICZwcml2LT5zaDsKPiArwqDCoMKgIEFWMVJh d1NlcXVlbmNlSGVhZGVywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnNoID0gJnNoX29idS0+ b2J1LnNlcXVlbmNlX2hlYWRlcjsKPiArwqDCoMKgIFZBRW5jU2VxdWVuY2VQYXJhbWV0ZXJCdWZm ZXJBVjEgKnZzZXEgPSBjdHgtPmNvZGVjX3NlcXVlbmNlX3BhcmFtczsKPiArwqDCoMKgIENvZGVk Qml0c3RyZWFtRnJhZ21lbnTCoMKgwqDCoMKgwqDCoMKgwqDCoCAqb2J1ID0gJnByaXYtPmN1cnJl bnRfb2J1Owo+ICvCoMKgwqAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjOwo+ICvCoMKg wqAgaW50IHJldDsKPiArCj4gK8KgwqDCoCBtZW1zZXQoc2hfb2J1LCAwLCBzaXplb2YoKnNoX29i dSkpOwo+ICvCoMKgwqAgc2hfb2J1LT5oZWFkZXIub2J1X3R5cGUgPSBBVjFfT0JVX1NFUVVFTkNF X0hFQURFUjsKPiArCj4gK8KgwqDCoCBkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChwcml2LT5j b21tb24uaW5wdXRfZnJhbWVzLT5zd19mb3JtYXQpOwo+ICvCoMKgwqAgYXZfYXNzZXJ0MChkZXNj KTsKPiArCj4gK8KgwqDCoCBzaC0+c2VxX3Byb2ZpbGXCoCA9IGF2Y3R4LT5wcm9maWxlOwo+ICvC oMKgwqAgaWYgKCFzaC0+c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzKQo+ICvCoMKgwqDC oMKgwqDCoCBzaC0+c2VxX2ZvcmNlX2ludGVnZXJfbXYgPSBBVjFfU0VMRUNUX0lOVEVHRVJfTVY7 Cj4gK8KgwqDCoCBzaC0+ZnJhbWVfd2lkdGhfYml0c19taW51c18xwqAgPSBhdl9sb2cyKGF2Y3R4 LT53aWR0aCk7Cj4gK8KgwqDCoCBzaC0+ZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSA9IGF2X2xv ZzIoYXZjdHgtPmhlaWdodCk7Cj4gK8KgwqDCoCBzaC0+bWF4X2ZyYW1lX3dpZHRoX21pbnVzXzHC oMKgID0gYXZjdHgtPndpZHRoIC0gMTsKPiArwqDCoMKgIHNoLT5tYXhfZnJhbWVfaGVpZ2h0X21p bnVzXzHCoCA9IGF2Y3R4LT5oZWlnaHQgLSAxOwo+ICvCoMKgwqAgc2gtPnNlcV90aWVyWzBdwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHByaXYtPnRpZXI7Cj4gK8KgwqDCoCAvKiogZW5h YmxlIG9yZGVyIGhpbnQgYW5kIHJlc2VydmUgbWF4aW11bSA4IGJpdHMgZm9yIGl0IGJ5IGRlZmF1 bHQuICovCj4gK8KgwqDCoCBzaC0+ZW5hYmxlX29yZGVyX2hpbnTCoMKgwqDCoMKgwqDCoMKgID0g MTsKPiArwqDCoMKgIHNoLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMcKgwqAgPSA3Owo+ICsKPiAr wqDCoMKgIHNoLT5jb2xvcl9jb25maWcgPSAoQVYxUmF3Q29sb3JDb25maWcpIHsKPiArwqDCoMKg wqDCoMKgwqAgLmhpZ2hfYml0ZGVwdGjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gZGVzYy0+Y29tcFswXS5kZXB0aCA9PSA4ID8gMCA6IDEsCj4gK8KgwqDCoMKgwqDCoMKgIC5j b2xvcl9wcmltYXJpZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBhdmN0eC0+Y29s b3JfcHJpbWFyaWVzLAo+ICvCoMKgwqDCoMKgwqDCoCAudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNz wqDCoMKgwqDCoMKgID0gYXZjdHgtPmNvbG9yX3RyYywKPiArwqDCoMKgwqDCoMKgwqAgLm1hdHJp eF9jb2VmZmljaWVudHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gYXZjdHgtPmNvbG9yc3BhY2Us Cj4gK8KgwqDCoMKgwqDCoMKgIC5jb2xvcl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgPSAoYXZj dHgtPmNvbG9yX3ByaW1hcmllcyAhPQo+IEFWQ09MX1BSSV9VTlNQRUNJRklFRCB8fAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmNvbG9yX3RyY8KgwqDCoMKgwqDCoCAhPQo+ IEFWQ09MX1RSQ19VTlNQRUNJRklFRCB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXZjdHgtPmNvbG9yc3BhY2XCoMKgwqDCoMKgICE9Cj4gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEKSwK PiArwqDCoMKgwqDCoMKgwqAgLmNvbG9yX3JhbmdlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgPSBhdmN0eC0+Y29sb3JfcmFuZ2UgPT0KPiBBVkNPTF9SQU5HRV9KUEVHLAo+ ICvCoMKgwqDCoMKgwqDCoCAuc3Vic2FtcGxpbmdfeMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBkZXNjLT5sb2cyX2Nocm9tYV93LAo+ICvCoMKgwqDCoMKgwqDCoCAuc3Vic2Ft cGxpbmdfecKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBkZXNjLT5sb2cyX2No cm9tYV9oLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBzd2l0Y2ggKGF2Y3R4LT5jaHJvbWFf c2FtcGxlX2xvY2F0aW9uKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZDSFJPTUFfTE9DX0xF RlQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2gtPmNvbG9yX2NvbmZpZy5jaHJvbWFfc2Ft cGxlX3Bvc2l0aW9uID0gQVYxX0NTUF9WRVJUSUNBTDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBBVkNIUk9NQV9MT0NfVE9QTEVGVDoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaC0+Y29sb3JfY29uZmlnLmNocm9tYV9zYW1wbGVfcG9z aXRpb24gPSBBVjFfQ1NQX0NPTE9DQVRFRDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsKPiArwqDCoMKgwqDCoMKgwqAgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aC0+Y29sb3JfY29uZmlnLmNocm9tYV9zYW1wbGVfcG9zaXRpb24gPSBBVjFfQ1NQX1VOS05PV047 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKg wqAgaWYgKGF2Y3R4LT5sZXZlbCAhPSBGRl9MRVZFTF9VTktOT1dOKSB7Cj4gK8KgwqDCoMKgwqDC oMKgIHNoLT5zZXFfbGV2ZWxfaWR4WzBdID0gYXZjdHgtPmxldmVsOwo+ICvCoMKgwqAgfSBlbHNl IHsKPiArwqDCoMKgwqDCoMKgwqAgY29uc3QgQVYxTGV2ZWxEZXNjcmlwdG9yICpsZXZlbDsKPiAr wqDCoMKgwqDCoMKgwqAgZmxvYXQgZnJhbWVyYXRlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYg KGF2Y3R4LT5mcmFtZXJhdGUubnVtID4gMCAmJiBhdmN0eC0+ZnJhbWVyYXRlLmRlbiA+IDApCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZnJhbWVyYXRlID0gYXZjdHgtPmZyYW1lcmF0ZS5udW0g LyBhdmN0eC0+ZnJhbWVyYXRlLmRlbjsKPiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZyYW1lcmF0ZSA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBsZXZl bCA9IGZmX2F2MV9ndWVzc19sZXZlbChhdmN0eC0+Yml0X3JhdGUsIHByaXYtPnRpZXIsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGN0eC0+c3VyZmFjZV93aWR0aCwgY3R4LT5zdXJmYWNlX2hlaWdodCwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcHJpdi0+dGlsZV9yb3dzICogcHJpdi0+dGlsZV9jb2xzLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwcml2LT50aWxlX2NvbHMsIGZyYW1lcmF0ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChsZXZl bCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICJVc2luZyBsZXZlbCAlcy5cbiIsIGxldmVsLT5uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaC0+c2VxX2xldmVsX2lkeFswXSA9IGxldmVsLT5sZXZlbF9pZHg7Cj4gK8KgwqDC oMKgwqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfVkVSQk9TRSwgIlN0cmVhbSB3aWxsIG5vdCBjb25mb3JtIHRvICIKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJhbnkgbm9ybWFsIGxldmVsLCB1c2luZyBt YXhpbXVtIHBhcmFtZXRlcnMgbGV2ZWwgYnkKPiBkZWZhdWx0LlxuIik7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc2gtPnNlcV9sZXZlbF9pZHhbMF0gPSAzMTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaC0+c2VxX3RpZXJbMF0gPSAxOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDC oCB9Cj4gK8KgwqDCoCB2c2VxLT5zZXFfcHJvZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IHNoLT5zZXFfcHJvZmlsZTsKPiArwqDCoMKgIHZzZXEtPnNlcV9sZXZlbF9pZHjCoMKgwqDCoMKg wqDCoMKgwqDCoCA9IHNoLT5zZXFfbGV2ZWxfaWR4WzBdOwo+ICvCoMKgwqAgdnNlcS0+c2VxX3Rp ZXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBzaC0+c2VxX3RpZXJbMF07Cj4gK8Kg wqDCoCB2c2VxLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSA9IHNoLT5vcmRlcl9oaW50X2JpdHNf bWludXNfMTsKPiArwqDCoMKgIHZzZXEtPmludHJhX3BlcmlvZMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgPSBjdHgtPmdvcF9zaXplOwo+ICvCoMKgwqAgdnNlcS0+aXBfcGVyaW9kwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+Yl9wZXJfcCArIDE7Cj4gKwo+ICvCoMKgwqAgdnNlcS0+ c2VxX2ZpZWxkcy5iaXRzLmVuYWJsZV9vcmRlcl9oaW50ID0gc2gtPmVuYWJsZV9vcmRlcl9oaW50 Owo+ICsKPiArwqDCoMKgIGlmICghKGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JDX0NRUCkpIHsKPiAr wqDCoMKgwqDCoMKgwqAgdnNlcS0+Yml0c19wZXJfc2Vjb25kID0gY3R4LT52YV9iaXRfcmF0ZTsK PiArwqDCoMKgwqDCoMKgwqAgdnNlcS0+c2VxX2ZpZWxkcy5iaXRzLmVuYWJsZV9jZGVmID0gc2gt PmVuYWJsZV9jZGVmID0gMTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXQgPSB2YWFwaV9l bmNvZGVfYXYxX2FkZF9vYnUoYXZjdHgsIG9idSwgQVYxX09CVV9TRVFVRU5DRV9IRUFERVIsCj4g JnByaXYtPnNoKTsKPiArwqDCoMKgIGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCBnb3Rv IGVuZDsKPiArCj4gK8KgwqDCoCByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX29idShhdmN0 eCwgcHJpdi0+c2hfZGF0YSwgJnByaXYtCj4gPnNoX2RhdGFfbGVuLCBvYnUpOwo+ICvCoMKgwqAg aWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZW5kOwo+ICsKPiArZW5kOgo+ICvC oMKgwqAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7Cj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJlX3BhcmFt cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMpCj4gK3sKPiArwqDCoMKgIFZBQVBJRW5j b2RlQ29udGV4dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9k YXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVBVjFDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgICpw cml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIFZBQVBJRW5jb2RlQVYxUGljdHVyZcKg wqDCoMKgwqDCoMKgwqDCoCAqaHBpYyA9IHBpYy0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgQVYxUmF3 T0JVwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmZoX29idSA9ICZwcml2 LT5maDsKPiArwqDCoMKgIEFWMVJhd0ZyYW1lSGVhZGVywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICpmaCA9ICZmaF9vYnUtPm9idS5mcmFtZS5oZWFkZXI7Cj4gK8KgwqDCoCBWQUVuY1Bp Y3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEgKnZwaWMgPSBwaWMtPmNvZGVjX3BpY3R1cmVfcGFyYW1z Owo+ICvCoMKgwqAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudMKgwqDCoMKgwqDCoMKgwqDCoCAqb2J1 ID0gJnByaXYtPmN1cnJlbnRfb2J1Owo+ICvCoMKgwqAgVkFBUElFbmNvZGVQaWN0dXJlwqDCoMKg ICpyZWY7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUFWMVBpY3R1cmUgKmhyZWY7Cj4gK8KgwqDCoCBp bnQgc2xvdCwgaTsKPiArwqDCoMKgIGludCByZXQ7Cj4gK8KgwqDCoCBzdGF0aWMgY29uc3QgaW50 OF90Cj4gZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzW0FWMV9UT1RBTF9SRUZTX1BFUl9G UkFNRV0gPQo+ICvCoMKgwqDCoMKgwqDCoCB7IDEsIDAsIDAsIDAsIC0xLCAwLCAtMSwgLTEgfTsK PiArCj4gK8KgwqDCoCBtZW1zZXQoZmhfb2J1LCAwLCBzaXplb2YoKmZoX29idSkpOwo+ICvCoMKg wqAgcGljLT5uYl9zbGljZXMgPSBwcml2LT50aWxlX2dyb3VwczsKPiArwqDCoMKgIHBpYy0+bm9u X2luZGVwZW5kZW50X2ZyYW1lID0gcGljLT5lbmNvZGVfb3JkZXIgPCBwaWMtPmRpc3BsYXlfb3Jk ZXI7Cj4gK8KgwqDCoCBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfRlJBTUVfSEVB REVSOwo+ICvCoMKgwqAgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2ZpZWxkID0gMTsKPiAr Cj4gK8KgwqDCoCBzd2l0Y2ggKHBpYy0+dHlwZSkgewo+ICvCoMKgwqAgY2FzZSBQSUNUVVJFX1RZ UEVfSURSOgo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSA9PSAw IHx8IHBpYy0+bmJfcmVmc1sxXSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGZoLT5mcmFtZV90eXBlID0g QVYxX0ZSQU1FX0tFWTsKPiArwqDCoMKgwqDCoMKgwqAgZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3Mg PSAweEZGOwo+ICvCoMKgwqDCoMKgwqDCoCBmaC0+YmFzZV9xX2lkeCA9IHByaXYtPnFfaWR4X2lk cjsKPiArwqDCoMKgwqDCoMKgwqAgaHBpYy0+c2xvdCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgIGhw aWMtPmxhc3RfaWRyX2ZyYW1lID0gcGljLT5kaXNwbGF5X29yZGVyOwo+ICvCoMKgwqDCoMKgwqDC oCBicmVhazsKPiArwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX1A6Cj4gK8KgwqDCoMKgwqDCoMKg IGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdKTsKPiArwqDCoMKgwqDCoMKgwqAgZmgtPmZyYW1l X3R5cGUgPSBBVjFfRlJBTUVfSU5URVI7Cj4gK8KgwqDCoMKgwqDCoMKgIGZoLT5iYXNlX3FfaWR4 ID0gcHJpdi0+cV9pZHhfcDsKPiArwqDCoMKgwqDCoMKgwqAgcmVmID0gcGljLT5yZWZzWzBdW3Bp Yy0+bmJfcmVmc1swXSAtIDFdOwo+ICvCoMKgwqDCoMKgwqDCoCBocmVmID0gcmVmLT5wcml2X2Rh dGE7Cj4gK8KgwqDCoMKgwqDCoMKgIGhwaWMtPnNsb3QgPSAhaHJlZi0+c2xvdDsKPiArwqDCoMKg wqDCoMKgwqAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiAr wqDCoMKgwqDCoMKgwqAgZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSAxIDw8IGhwaWMtPnNsb3Q7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAvKiogc2V0IHRoZSBuZWFyZXN0IGZyYW1lIGluIEwwIGFz IGFsbCByZWZlcmVuY2UgZnJhbWUuICovCj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkg PCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZo LT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvC oMKgwqDCoMKgwqDCoCBmaC0+cHJpbWFyeV9yZWZfZnJhbWUgPSBocmVmLT5zbG90Owo+ICvCoMKg wqDCoMKgwqDCoCBmaC0+cmVmX29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSByZWYtPmRpc3BsYXlf b3JkZXIgLSBocmVmLQo+ID5sYXN0X2lkcl9mcmFtZTsKPiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+ cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRzLnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9MQVNU Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAgLyoqIHNldCB0aGUgMm5kIG5lYXJlc3QgZnJhbWUgaW4g TDAgYXMgR29sZGVuIGZyYW1lLiAqLwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocGljLT5uYl9yZWZz WzBdID4gMSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZiA9IHBpYy0+cmVmc1swXVtw aWMtPm5iX3JlZnNbMF0gLSAyXTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocmVmID0gcmVm LT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmgtPnJlZl9mcmFtZV9pZHhb M10gPSBocmVmLT5zbG90Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZoLT5yZWZfb3JkZXJf aGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtIGhyZWYtCj4gPmxhc3RfaWRy X2ZyYW1lOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2ww LmZpZWxkcy5zZWFyY2hfaWR4MSA9Cj4gQVYxX1JFRl9GUkFNRV9HT0xERU47Cj4gK8KgwqDCoMKg wqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBjYXNlIFBJQ1RVUkVf VFlQRV9COgo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSAmJiBw aWMtPm5iX3JlZnNbMV0pOwo+ICvCoMKgwqDCoMKgwqDCoCBmaC0+ZnJhbWVfdHlwZSA9IEFWMV9G UkFNRV9JTlRFUjsKPiArwqDCoMKgwqDCoMKgwqAgZmgtPmJhc2VfcV9pZHggPSBwcml2LT5xX2lk eF9iOwo+ICvCoMKgwqDCoMKgwqDCoCBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4MDsKPiAr wqDCoMKgwqDCoMKgwqAgZmgtPnJlZmVyZW5jZV9zZWxlY3QgPSAxOwo+ICsKPiArwqDCoMKgwqDC oMKgwqAgLyoqIEIgZnJhbWUgd2lsbCBub3QgYmUgcmVmZXJlbmNlZCwgZGlzYWJsZSBpdHMgcmVj b24gZnJhbWUuICovCj4gK8KgwqDCoMKgwqDCoMKgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5k aXNhYmxlX2ZyYW1lX3JlY29uID0gMTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIC8qKiBVc2UgTEFT VF9GUkFNRSBhbmQgQldEUkVGX0ZSQU1FIGZvciByZWZlcmVuY2UuICovCj4gK8KgwqDCoMKgwqDC oMKgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4MCA9IEFWMV9SRUZf RlJBTUVfTEFTVDsKPiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDEuZmll bGRzLnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9CV0RSRUY7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoCByZWbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMV07Cj4gK8KgwqDCoMKgwqDC oMKgIGhyZWbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gcmVmLT5wcml2X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgIGhwaWMtPmxhc3RfaWRyX2Zy YW1lwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiArwqDCoMKg wqDCoMKgwqAgZmgtPnByaW1hcnlfcmVmX2ZyYW1lwqDCoMKgwqDCoMKgwqDCoMKgID0gaHJlZi0+ c2xvdDsKPiArwqDCoMKgwqDCoMKgwqAgZmgtPnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3RdID0g cmVmLT5kaXNwbGF5X29yZGVyIC0gaHJlZi0KPiA+bGFzdF9pZHJfZnJhbWU7Cj4gK8KgwqDCoMKg wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSsrKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZmgtPnJlZl9mcmFtZV9pZHhbaV0gPSBocmVmLT5zbG90Owo+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZWbCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBwaWMtPnJlZnNbMV1b cGljLT5uYl9yZWZzWzFdIC0gMV07Cj4gK8KgwqDCoMKgwqDCoMKgIGhyZWbCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcmVmLT5wcml2X2RhdGE7 Cj4gK8KgwqDCoMKgwqDCoMKgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ ZGlzcGxheV9vcmRlciAtIGhyZWYtCj4gPmxhc3RfaWRyX2ZyYW1lOwo+ICvCoMKgwqDCoMKgwqDC oCBmb3IgKGkgPSBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsg aSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmgtPnJlZl9mcmFtZV9pZHhbaV0gPSBo cmVmLT5zbG90Owo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ ICvCoMKgwqAgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MCgwICYmICJpbnZh bGlkIHBpY3R1cmUgdHlwZSIpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGZoLT5zaG93X2Zy YW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcGljLT5kaXNwbGF5X29yZGVyIDw9 IHBpYy0+ZW5jb2RlX29yZGVyOwo+ICvCoMKgwqAgZmgtPnNob3dhYmxlX2ZyYW1lwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IGZoLT5mcmFtZV90eXBlICE9IEFWMV9GUkFNRV9LRVk7Cj4gK8KgwqDC oCBmaC0+ZnJhbWVfd2lkdGhfbWludXNfMcKgwqDCoMKgwqDCoCA9IGF2Y3R4LT53aWR0aCAtIDE7 Cj4gK8KgwqDCoCBmaC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzHCoMKgwqDCoMKgID0gYXZjdHgtPmhl aWdodCAtIDE7Cj4gK8KgwqDCoCBmaC0+cmVuZGVyX3dpZHRoX21pbnVzXzHCoMKgwqDCoMKgID0g ZmgtPmZyYW1lX3dpZHRoX21pbnVzXzE7Cj4gK8KgwqDCoCBmaC0+cmVuZGVyX2hlaWdodF9taW51 c18xwqDCoMKgwqAgPSBmaC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzE7Cj4gK8KgwqDCoCBmaC0+b3Jk ZXJfaGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHBpYy0+ZGlzcGxheV9vcmRl ciAtIGhwaWMtCj4gPmxhc3RfaWRyX2ZyYW1lOwo+ICvCoMKgwqAgZmgtPnRpbGVfY29sc8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcHJpdi0+dGlsZV9jb2xzOwo+ICvCoMKgwqAg ZmgtPnRpbGVfcm93c8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcHJpdi0+dGls ZV9yb3dzOwo+ICvCoMKgwqAgZmgtPnRpbGVfY29sc19sb2cywqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IHByaXYtPnRpbGVfY29sc19sb2cyOwo+ICvCoMKgwqAgZmgtPnRpbGVfcm93c19sb2cywqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IHByaXYtPnRpbGVfcm93c19sb2cyOwo+ICvCoMKgwqAgZmgt PnVuaWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcgPSBwcml2LT51bmlmb3JtX3RpbGU7Cj4gK8KgwqDC oCBmaC0+dGlsZV9zaXplX2J5dGVzX21pbnVzMcKgwqDCoCA9IHByaXYtCj4gPmF0dHJfZXh0Mi5i aXRzLnRpbGVfc2l6ZV9ieXRlc19taW51czE7Cj4gKwo+ICvCoMKgwqAgLyoqIGlnbm9yZSBPTkxZ XzR4NCBtb2RlIGZvciBjb2RlZGxvc3NsZXNzIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZC4gKi8K PiArwqDCoMKgIGlmIChwcml2LT5hdHRyX2V4dDIuYml0cy50eF9tb2RlX3N1cHBvcnQgJiAweDA0 KQo+ICvCoMKgwqDCoMKgwqDCoCBmaC0+dHhfbW9kZSA9IEFWMV9UWF9NT0RFX1NFTEVDVDsKPiAr wqDCoMKgIGVsc2UgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVfc3VwcG9ydCAmIDB4 MDIpCj4gK8KgwqDCoMKgwqDCoMKgIGZoLT50eF9tb2RlID0gQVYxX1RYX01PREVfTEFSR0VTVDsK PiArwqDCoMKgIGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIk5vIGF2YWlsYWJsZSB0eCBtb2RlIGZvdW5kLlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgZm9yIChp ID0gMDsgaSA8IGZoLT50aWxlX2NvbHM7IGkrKykKPiArwqDCoMKgwqDCoMKgwqAgZmgtPndpZHRo X2luX3Nic19taW51c18xW2ldID0gdnBpYy0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2 LQo+ID53aWR0aF9pbl9zYnNfbWludXNfMVtpXTsKPiArCj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBp IDwgZmgtPnRpbGVfcm93czsgaSsrKQo+ICvCoMKgwqDCoMKgwqDCoCBmaC0+aGVpZ2h0X2luX3Ni c19taW51c18xW2ldID0gdnBpYy0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldID0gcHJpdi0KPiA+ aGVpZ2h0X2luX3Nic19taW51c18xW2ldOwo+ICsKPiArwqDCoMKgIG1lbWNweShmaC0+bG9vcF9m aWx0ZXJfcmVmX2RlbHRhcywgZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCBBVjFfVE9UQUxfUkVGU19QRVJfRlJBTUUgKiBzaXplb2YoaW50OF90 KSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgJiYg ZmgtPnNob3dfZnJhbWUpIHsKPiArwqDCoMKgwqDCoMKgwqAgZmgtPmVycm9yX3Jlc2lsaWVudF9t b2RlID0gMTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoZmgtPmZyYW1lX3R5cGUgPT0g QVYxX0ZSQU1FX0tFWSB8fCBmaC0+ZXJyb3JfcmVzaWxpZW50X21vZGUpCj4gK8KgwqDCoMKgwqDC oMKgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IEFWMV9QUklNQVJZX1JFRl9OT05FOwo+ICsKPiAr wqDCoMKgIHZwaWMtPmJhc2VfcWluZGV4wqDCoMKgwqDCoMKgwqDCoMKgID0gZmgtPmJhc2VfcV9p ZHg7Cj4gK8KgwqDCoCB2cGljLT5mcmFtZV93aWR0aF9taW51c18xwqAgPSBmaC0+ZnJhbWVfd2lk dGhfbWludXNfMTsKPiArwqDCoMKgIHZwaWMtPmZyYW1lX2hlaWdodF9taW51c18xID0gZmgtPmZy YW1lX2hlaWdodF9taW51c18xOwo+ICvCoMKgwqAgdnBpYy0+cHJpbWFyeV9yZWZfZnJhbWXCoMKg wqAgPSBmaC0+cHJpbWFyeV9yZWZfZnJhbWU7Cj4gK8KgwqDCoCB2cGljLT5yZWNvbnN0cnVjdGVk X2ZyYW1lwqAgPSBwaWMtPnJlY29uX3N1cmZhY2U7Cj4gK8KgwqDCoCB2cGljLT5jb2RlZF9idWbC oMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcGljLT5vdXRwdXRfYnVmZmVyOwo+ICvCoMKgwqAgdnBp Yy0+dGlsZV9jb2xzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGZoLT50aWxlX2NvbHM7Cj4gK8Kg wqDCoCB2cGljLT50aWxlX3Jvd3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZmgtPnRpbGVfcm93 czsKPiArwqDCoMKgIHZwaWMtPm9yZGVyX2hpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGZoLT5v cmRlcl9oaW50Owo+ICsjaWYgVkFfQ0hFQ0tfVkVSU0lPTigxLCAxNSwgMCkKPiArwqDCoMKgIHZw aWMtPnJlZnJlc2hfZnJhbWVfZmxhZ3PCoCA9IGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzOwo+ICsj ZW5kaWYKPiArCj4gK8KgwqDCoCB2cGljLT5waWN0dXJlX2ZsYWdzLmJpdHMuZW5hYmxlX2ZyYW1l X29idcKgwqDCoMKgID0gMDsKPiArwqDCoMKgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5mcmFt ZV90eXBlwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBmaC0+ZnJhbWVfdHlwZTsKPiArwqDCoMKgIHZw aWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5yZWR1Y2VkX3R4X3NldMKgwqDCoMKgwqDCoCA9IGZoLT5y ZWR1Y2VkX3R4X3NldDsKPiArwqDCoMKgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lcnJvcl9y ZXNpbGllbnRfbW9kZSA9IGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZTsKPiArCj4gK8KgwqDCoCAv KiogbGV0IGRyaXZlciBkZWNpZGUgdG8gdXNlIHNpbmdsZSBvciBjb21wb3VuZCByZWZlcmVuY2Ug cHJlZGljdGlvbgo+IG1vZGUuICovCj4gK8KgwqDCoCB2cGljLT5tb2RlX2NvbnRyb2xfZmxhZ3Mu Yml0cy5yZWZlcmVuY2VfbW9kZSA9IGZoLT5yZWZlcmVuY2Vfc2VsZWN0ID8gMiA6Cj4gMDsKPiAr wqDCoMKgIHZwaWMtPm1vZGVfY29udHJvbF9mbGFncy5iaXRzLnR4X21vZGUgPSBmaC0+dHhfbW9k ZTsKPiArCj4gK8KgwqDCoCB2cGljLT50aWxlX2dyb3VwX29idV9oZHJfaW5mby5iaXRzLm9idV9o YXNfc2l6ZV9maWVsZCA9IDE7Cj4gKwo+ICvCoMKgwqAgLyoqIHNldCByZWZlcmVuY2UuICovCj4g K8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBpKyspCj4gK8KgwqDC oMKgwqDCoMKgIHZwaWMtPnJlZl9mcmFtZV9pZHhbaV0gPSBmaC0+cmVmX2ZyYW1lX2lkeFtpXTsK PiArCj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVModnBpYy0+cmVmZXJl bmNlX2ZyYW1lcyk7IGkrKykKPiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmZXJlbmNlX2ZyYW1l c1tpXSA9IFZBX0lOVkFMSURfU1VSRkFDRTsKPiArCj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwg TUFYX1JFRkVSRU5DRV9MSVNUX05VTTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaW50 IGogPSAwOyBqIDwgcGljLT5uYl9yZWZzW2ldOyBqKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBWQUFQSUVuY29kZVBpY3R1cmUgKnJlZl9waWMgPSBwaWMtPnJlZnNbaV1bal07Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNsb3QgPSAoKFZBQVBJRW5jb2RlQVYxUGljdHVyZSop cmVmX3BpYy0+cHJpdl9kYXRhKS0+c2xvdDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9h c3NlcnQwKHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbc2xvdF0gPT0gVkFfSU5WQUxJRF9TVVJGQUNF KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tz bG90XSA9IHJlZl9waWMtPnJlY29uX3N1cmZhY2U7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBmaF9vYnUtPm9idV9zaXplX2J5dGVfbGVuID0gcHJpdi0+YXR0 cl9leHQyLmJpdHMub2J1X3NpemVfYnl0ZXNfbWludXMxICsKPiAxOwo+ICvCoMKgwqAgcmV0ID0g dmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KGF2Y3R4LCBvYnUsIEFWMV9PQlVfRlJBTUVfSEVBREVS LCAmcHJpdi0KPiA+ZmgpOwo+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZW5kOwo+ICsKPiArwqDCoMKgIHJldCA9IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfb2J1 KGF2Y3R4LCBwcml2LT5maF9kYXRhLCAmcHJpdi0KPiA+ZmhfZGF0YV9sZW4sIG9idSk7Cj4gK8Kg wqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBlbmQ7Cj4gKwo+ICvCoMKg wqAgaWYgKCEoY3R4LT52YV9yY19tb2RlICYgVkFfUkNfQ1FQKSkgewo+ICvCoMKgwqDCoMKgwqDC oCB2cGljLT5taW5fYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWluLCAxLCBBVjFfTUFY X1FVQU5UKTsKPiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+bWF4X2Jhc2VfcWluZGV4ID0gYXZfY2xp cChhdmN0eC0+cW1heCwgMSwgQVYxX01BWF9RVUFOVCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCB2 cGljLT5iaXRfb2Zmc2V0X3FpbmRleMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gcHJpdi0+ cWluZGV4X29mZnNldDsKPiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+Yml0X29mZnNldF9sb29wZmls dGVyX3BhcmFtc8KgwqAgPSBwcml2LT5sb29wZmlsdGVyX29mZnNldDsKPiArwqDCoMKgwqDCoMKg wqAgdnBpYy0+Yml0X29mZnNldF9jZGVmX3BhcmFtc8KgwqDCoMKgwqDCoMKgwqAgPSBwcml2LT5j ZGVmX3N0YXJ0X29mZnNldDsKPiArwqDCoMKgwqDCoMKgwqAgdnBpYy0+c2l6ZV9pbl9iaXRzX2Nk ZWZfcGFyYW1zwqDCoMKgwqDCoMKgID0gcHJpdi0+Y2RlZl9wYXJhbV9zaXplOwo+ICvCoMKgwqDC oMKgwqDCoCB2cGljLT5zaXplX2luX2JpdHNfZnJhbWVfaGRyX29idcKgwqDCoMKgID0gcHJpdi0+ ZmhfZGF0YV9sZW47Cj4gK8KgwqDCoMKgwqDCoMKgIHZwaWMtPmJ5dGVfb2Zmc2V0X2ZyYW1lX2hk cl9vYnVfc2l6ZSA9ICgoKHBpYy0+dHlwZSA9PQo+IFBJQ1RVUkVfVFlQRV9JRFIpID8KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+c2hfZGF0YV9sZW4gLyA4IDog MCkgKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZmhfb2J1LQo+ID5o ZWFkZXIub2J1X2V4dGVuc2lvbl9mbGFnID8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMiA6IDEpKTsKPiArwqDCoMKgIH0KPiArCj4gK2VuZDoKPiArwqDCoMKgIGZmX2Ni c19mcmFnbWVudF9yZXNldChvYnUpOwo+ICvCoMKgwqAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2xpY2VfcGFyYW1zKEFWQ29kZWNDb250 ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZBQVBJRW5j b2RlUGljdHVyZSAqcGljLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFB UElFbmNvZGVTbGljZSAqc2xpY2UpCj4gK3sKPiArwqDCoMKgIFZBQVBJRW5jb2RlQVYxQ29udGV4 dMKgwqDCoMKgwqAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFFbmNUaWxl R3JvdXBCdWZmZXJBVjHCoCAqdnNsaWNlID0gc2xpY2UtPmNvZGVjX3NsaWNlX3BhcmFtczsKPiAr wqDCoMKgIENvZGVkQml0c3RyZWFtQVYxQ29udGV4dMKgICpjYmN0eCA9IHByaXYtPmNiYy0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgaW50IGRpdjsKPiArCj4gK8KgwqDCoCAvKiogU2V0IHRpbGUgZ3Jv dXAgaW5mby4gKi8KPiArwqDCoMKgIGRpdiA9IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVf cm93cyAvIHByaXYtPnRpbGVfZ3JvdXBzOwo+ICvCoMKgwqAgdnNsaWNlLT50Z19zdGFydCA9IHNs aWNlLT5pbmRleCAqIGRpdjsKPiArwqDCoMKgIGlmIChzbGljZS0+aW5kZXggPT0gKHByaXYtPnRp bGVfZ3JvdXBzIC0gMSkpIHsKPiArwqDCoMKgwqDCoMKgwqAgdnNsaWNlLT50Z19lbmQgPSBwcml2 LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MgLSAxOwo+ICvCoMKgwqDCoMKgwqDCoCBjYmN0 eC0+c2Vlbl9mcmFtZV9oZWFkZXIgPSAwOwo+ICvCoMKgwqAgfSBlbHNlIHsKPiArwqDCoMKgwqDC oMKgwqAgdnNsaWNlLT50Z19lbmQgPSAoc2xpY2UtPmluZGV4ICsgMSkgKiBkaXYgLSAxOwo+ICvC oMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZh YXBpX2VuY29kZV9hdjFfd3JpdGVfcGljdHVyZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkFBUElFbmNvZGVQ aWN0dXJlICpwaWMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj aGFyICpkYXRhLCBzaXplX3QKPiAqZGF0YV9sZW4pCj4gK3sKPiArwqDCoMKgIFZBQVBJRW5jb2Rl QVYxQ29udGV4dMKgwqDCoMKgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIENv ZGVkQml0c3RyZWFtRnJhZ21lbnTCoMKgwqDCoCAqb2J1ID0gJnByaXYtPmN1cnJlbnRfb2J1Owo+ ICvCoMKgwqAgQ29kZWRCaXRzdHJlYW1BVjFDb250ZXh0ICpjYmN0eCA9IHByaXYtPmNiYy0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgQVYxUmF3T0JVwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq Zmhfb2J1ID0gJnByaXYtPmZoOwo+ICvCoMKgwqAgQVYxUmF3RnJhbWVIZWFkZXLCoMKgwqDCoMKg wqAgKnJlcF9maCA9ICZmaF9vYnUtPm9idS5mcmFtZV9oZWFkZXI7Cj4gK8KgwqDCoCBWQUFQSUVu Y29kZUFWMVBpY3R1cmUgKmhyZWY7Cj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPiArCj4gK8KgwqDC oCBwaWMtPnRhaWxfc2l6ZSA9IDA7Cj4gK8KgwqDCoCAvKiogUGFjayByZXBlYXQgZnJhbWUgaGVh ZGVyLiAqLwo+ICvCoMKgwqAgaWYgKHBpYy0+ZGlzcGxheV9vcmRlciA+IHBpYy0+ZW5jb2RlX29y ZGVyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIG1lbXNldChmaF9vYnUsIDAsIHNpemVvZigqZmhfb2J1 KSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGhyZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBd IC0gMV0tPnByaXZfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqAgZmhfb2J1LT5oZWFkZXIub2J1X3R5 cGUgPSBBVjFfT0JVX0ZSQU1FX0hFQURFUjsKPiArwqDCoMKgwqDCoMKgwqAgZmhfb2J1LT5oZWFk ZXIub2J1X2hhc19zaXplX2ZpZWxkID0gMTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIHJlcF9maC0+ c2hvd19leGlzdGluZ19mcmFtZcKgwqAgPSAxOwo+ICvCoMKgwqDCoMKgwqDCoCByZXBfZmgtPmZy YW1lX3RvX3Nob3dfbWFwX2lkeCA9IGhyZWYtPnNsb3QgPT0gMDsKPiArwqDCoMKgwqDCoMKgwqAg cmVwX2ZoLT5mcmFtZV90eXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFWMV9GUkFNRV9JTlRF UjsKPiArwqDCoMKgwqDCoMKgwqAgcmVwX2ZoLT5mcmFtZV93aWR0aF9taW51c18xwqDCoCA9IGF2 Y3R4LT53aWR0aCAtIDE7Cj4gK8KgwqDCoMKgwqDCoMKgIHJlcF9maC0+ZnJhbWVfaGVpZ2h0X21p bnVzXzHCoCA9IGF2Y3R4LT5oZWlnaHQgLSAxOwo+ICvCoMKgwqDCoMKgwqDCoCByZXBfZmgtPnJl bmRlcl93aWR0aF9taW51c18xwqAgPSByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzE7Cj4gK8Kg wqDCoMKgwqDCoMKgIHJlcF9maC0+cmVuZGVyX2hlaWdodF9taW51c18xID0gcmVwX2ZoLT5mcmFt ZV9oZWlnaHRfbWludXNfMTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGNiY3R4LT5zZWVuX2ZyYW1l X2hlYWRlciA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSB2YWFwaV9lbmNvZGVfYXYx X2FkZF9vYnUoYXZjdHgsIG9idSwgQVYxX09CVV9GUkFNRV9IRUFERVIsCj4gJnByaXYtPmZoKTsK PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z290byBlbmQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dy aXRlX29idShhdmN0eCwgcGljLT50YWlsX2RhdGEsICZwaWMtCj4gPnRhaWxfc2l6ZSwgb2J1KTsK PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z290byBlbmQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBwaWMtPnRhaWxfc2l6ZSAvPSA4Owo+ICvC oMKgwqAgfQo+ICsKPiArwqDCoMKgIG1lbWNweShkYXRhLCAmcHJpdi0+ZmhfZGF0YSwgTUFYX1BB UkFNX0JVRkZFUl9TSVpFICogc2l6ZW9mKGNoYXIpKTsKPiArwqDCoMKgICpkYXRhX2xlbiA9IHBy aXYtPmZoX2RhdGFfbGVuOwo+ICsKPiArZW5kOgo+ICvCoMKgwqAgZmZfY2JzX2ZyYWdtZW50X3Jl c2V0KG9idSk7Cj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg VkFBUElFbmNvZGVQcm9maWxlIHZhYXBpX2VuY29kZV9hdjFfcHJvZmlsZXNbXSA9IHsKPiArwqDC oMKgIHsgRkZfUFJPRklMRV9BVjFfTUFJTizCoCA4LCAzLCAxLCAxLCBWQVByb2ZpbGVBVjFQcm9m aWxlMCB9LAo+ICvCoMKgwqAgeyBGRl9QUk9GSUxFX0FWMV9NQUlOLCAxMCwgMywgMSwgMSwgVkFQ cm9maWxlQVYxUHJvZmlsZTAgfSwKPiArwqDCoMKgIHsgRkZfUFJPRklMRV9VTktOT1dOIH0KPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBWQUFQSUVuY29kZVR5cGUgdmFhcGlfZW5jb2RlX3R5cGVf YXYxID0gewo+ICvCoMKgwqAgLnByb2ZpbGVzwqDCoMKgwqDCoMKgwqAgPSB2YWFwaV9lbmNvZGVf YXYxX3Byb2ZpbGVzLAo+ICvCoMKgwqAgLmZsYWdzwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBGTEFH X0JfUElDVFVSRVMgfCBGTEFHX1RJTUVTVEFNUF9OT19ERUxBWSwKPiArwqDCoMKgIC5kZWZhdWx0 X3F1YWxpdHkgPSAyNSwKPiArCj4gK8KgwqDCoCAuZ2V0X2VuY29kZXJfY2FwcyA9ICZ2YWFwaV9l bmNvZGVfYXYxX2dldF9lbmNvZGVyX2NhcHMsCj4gK8KgwqDCoCAuY29uZmlndXJlwqDCoMKgwqDC oMKgwqAgPSAmdmFhcGlfZW5jb2RlX2F2MV9jb25maWd1cmUsCj4gKwo+ICvCoMKgwqAgLnNlcXVl bmNlX2hlYWRlcl90eXBlwqAgPSBWQUVuY1BhY2tlZEhlYWRlclNlcXVlbmNlLAo+ICvCoMKgwqAg LnNlcXVlbmNlX3BhcmFtc19zaXplwqAgPSBzaXplb2YoVkFFbmNTZXF1ZW5jZVBhcmFtZXRlckJ1 ZmZlckFWMSksCj4gK8KgwqDCoCAuaW5pdF9zZXF1ZW5jZV9wYXJhbXPCoCA9ICZ2YWFwaV9lbmNv ZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFyYW1zLAo+ICvCoMKgwqAgLndyaXRlX3NlcXVlbmNlX2hl YWRlciA9ICZ2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX3NlcXVlbmNlX2hlYWRlciwKPiArCj4gK8Kg wqDCoCAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWQUFQSUVuY29kZUFWMVBpY3R1 cmUpLAo+ICvCoMKgwqAgLnBpY3R1cmVfaGVhZGVyX3R5cGXCoMKgwqAgPSBWQUVuY1BhY2tlZEhl YWRlclBpY3R1cmUsCj4gK8KgwqDCoCAucGljdHVyZV9wYXJhbXNfc2l6ZcKgwqDCoCA9IHNpemVv ZihWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEpLAo+ICvCoMKgwqAgLmluaXRfcGljdHVy ZV9wYXJhbXPCoMKgwqAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zLAo+ ICvCoMKgwqAgLndyaXRlX3BpY3R1cmVfaGVhZGVywqDCoCA9ICZ2YWFwaV9lbmNvZGVfYXYxX3dy aXRlX3BpY3R1cmVfaGVhZGVyLAo+ICsKPiArwqDCoMKgIC5zbGljZV9wYXJhbXNfc2l6ZSA9IHNp emVvZihWQUVuY1RpbGVHcm91cEJ1ZmZlckFWMSksCj4gK8KgwqDCoCAuaW5pdF9zbGljZV9wYXJh bXMgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NsaWNlX3BhcmFtcywKPiArfTsKPiArCj4gK3N0 YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfYXYxX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQo+ICt7Cj4gK8KgwqDCoCBWQUFQSUVuY29kZUNvbnRleHTCoMKgwqDCoMKgICpjdHggPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFBUElFbmNvZGVBVjFDb250ZXh0wqAgKnByaXYg PSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgVkFDb25maWdBdHRyaWIgYXR0cjsKPiArwqDC oMKgIFZBU3RhdHVzIHZhczsKPiArwqDCoMKgIGludCByZXQ7Cj4gKwo+ICvCoMKgwqAgY3R4LT5j b2RlYyA9ICZ2YWFwaV9lbmNvZGVfdHlwZV9hdjE7Cj4gKwo+ICvCoMKgwqAgY3R4LT5kZXNpcmVk X3BhY2tlZF9oZWFkZXJzID0KPiArwqDCoMKgwqDCoMKgwqAgVkFfRU5DX1BBQ0tFRF9IRUFERVJf U0VRVUVOQ0UgfAo+ICvCoMKgwqDCoMKgwqDCoCBWQV9FTkNfUEFDS0VEX0hFQURFUl9QSUNUVVJF Owo+ICsKPiArwqDCoMKgIGlmIChhdmN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxFX1VOS05PV04p Cj4gK8KgwqDCoMKgwqDCoMKgIGF2Y3R4LT5wcm9maWxlID0gcHJpdi0+cHJvZmlsZTsKPiArwqDC oMKgIGlmIChhdmN0eC0+bGV2ZWwgPT0gRkZfTEVWRUxfVU5LTk9XTikKPiArwqDCoMKgwqDCoMKg wqAgYXZjdHgtPmxldmVsID0gcHJpdi0+bGV2ZWw7Cj4gKwo+ICvCoMKgwqAgaWYgKGF2Y3R4LT5s ZXZlbCAhPSBGRl9MRVZFTF9VTktOT1dOICYmIGF2Y3R4LT5sZXZlbCAmIH4weDFmKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBsZXZlbCAl ZFxuIiwgYXZjdHgtPmxldmVsKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXQgPSBmZl92YWFwaV9lbmNvZGVfaW5p dChhdmN0eCk7Cj4gK8KgwqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPiArCj4gK8KgwqDCoCBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMTsKPiAr wqDCoMKgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjdHgtPnZhX3Byb2ZpbGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+dmFfZW50cnlwb2ludCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJmF0dHIsIDEpOwo+ICvCoMKgwqAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBxdWVyeSAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImNvbmZpZyBhdHRyaWJ1 dGU6ICVkICglcykuXG4iLCB2YXMsIHZhRXJyb3JTdHIodmFzKSk7Cj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICvCoMKgwqAgfSBlbHNlIGlmIChhdHRyLnZhbHVl ID09IFZBX0FUVFJJQl9OT1RfU1VQUE9SVEVEKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPmF0 dHIudmFsdWUgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJO SU5HLCAiQXR0cmlidXRlIHR5cGU6JWQgaXMgbm90ICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAic3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsKPiArwqDCoMKgIH0gZWxzZSB7Cj4g K8KgwqDCoMKgwqDCoMKgIHByaXYtPmF0dHIudmFsdWUgPSBhdHRyLnZhbHVlOwo+ICvCoMKgwqAg fQo+ICsKPiArwqDCoMKgIGF0dHIudHlwZSA9IFZBQ29uZmlnQXR0cmliRW5jQVYxRXh0MTsKPiAr wqDCoMKgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjdHgtPnZhX3Byb2ZpbGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+dmFfZW50cnlwb2ludCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJmF0dHIsIDEpOwo+ICvCoMKgwqAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBxdWVyeSAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImNvbmZpZyBhdHRyaWJ1 dGU6ICVkICglcykuXG4iLCB2YXMsIHZhRXJyb3JTdHIodmFzKSk7Cj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICvCoMKgwqAgfSBlbHNlIGlmIChhdHRyLnZhbHVl ID09IFZBX0FUVFJJQl9OT1RfU1VQUE9SVEVEKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPmF0 dHJfZXh0MS52YWx1ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1dBUk5JTkcsICJBdHRyaWJ1dGUgdHlwZTolZCBpcyBub3QgIgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJzdXBwb3J0ZWQuXG4iLCBhdHRyLnR5cGUpOwo+ICvCoMKgwqAgfSBlbHNl IHsKPiArwqDCoMKgwqDCoMKgwqAgcHJpdi0+YXR0cl9leHQxLnZhbHVlID0gYXR0ci52YWx1ZTsK PiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCAvKiogVGhpcyBhdHRyIHByb3ZpZGVzIGVzc2VudGlh bCBpbmRpY2F0b3JzLCByZXR1cm4gZXJyb3IgaWYgbm90IHN1cHBvcnQuCj4gKi8KPiArwqDCoMKg IGF0dHIudHlwZSA9IFZBQ29uZmlnQXR0cmliRW5jQVYxRXh0MjsKPiArwqDCoMKgIHZhcyA9IHZh R2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnZh X3Byb2ZpbGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+dmFfZW50cnlwb2ludCwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmF0dHIsIDEp Owo+ICvCoMKgwqAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUyB8fCBhdHRyLnZhbHVlID09 IFZBX0FUVFJJQl9OT1RfU1VQUE9SVEVEKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAiY29uZmlnIGF0dHJpYnV0ZTogJWQgKCVzKS5cbiIsIHZhcywgdmFFcnJvclN0 cih2YXMpKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gK8Kg wqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCBwcml2LT5hdHRyX2V4dDIudmFsdWUgPSBh dHRyLnZhbHVlOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldCA9IHZhYXBpX2VuY29kZV9h djFfc2V0X3RpbGUoYXZjdHgpOwo+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBhdl9jb2xkIGludCB2YWFwaV9lbmNvZGVfYXYxX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0 eCkKPiArewo+ICvCoMKgwqAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnBy aXZfZGF0YTsKPiArCj4gK8KgwqDCoCBmZl9jYnNfZnJhZ21lbnRfZnJlZSgmcHJpdi0+Y3VycmVu dF9vYnUpOwo+ICvCoMKgwqAgZmZfY2JzX2Nsb3NlKCZwcml2LT5jYmMpOwo+ICsKPiArwqDCoMKg IHJldHVybiBmZl92YWFwaV9lbmNvZGVfY2xvc2UoYXZjdHgpOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IE9GRlNFVCh4KSBvZmZzZXRvZihWQUFQSUVuY29kZUFWMUNvbnRleHQsIHgpCj4gKyNkZWZpbmUg RkxBR1MgKEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFS QU0pCj4gKwo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gdmFhcGlfZW5jb2RlX2F2MV9vcHRpb25z W10gPSB7Cj4gK8KgwqDCoCBWQUFQSV9FTkNPREVfQ09NTU9OX09QVElPTlMsCj4gK8KgwqDCoCBW QUFQSV9FTkNPREVfUkNfT1BUSU9OUywKPiArwqDCoMKgIHsgInByb2ZpbGUiLCAiU2V0IHByb2Zp bGUgKHNlcV9wcm9maWxlKSIsCj4gK8KgwqDCoMKgwqAgT0ZGU0VUKHByb2ZpbGUpLCBBVl9PUFRf VFlQRV9JTlQsCj4gK8KgwqDCoMKgwqAgeyAuaTY0ID0gRkZfUFJPRklMRV9VTktOT1dOIH0sIEZG X1BST0ZJTEVfVU5LTk9XTiwgMHhmZiwgRkxBR1MsCj4gInByb2ZpbGUiIH0sCj4gKwo+ICsjZGVm aW5lIFBST0ZJTEUobmFtZSwgdmFsdWUpwqAgbmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIFwKPiArwqDCoMKgIHsgLmk2NCA9IHZhbHVlIH0sIDAsIDAsIEZMQUdTLCAicHJvZmlsZSIK PiArwqDCoMKgIHsgUFJPRklMRSgibWFpbiIswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBG Rl9QUk9GSUxFX0FWMV9NQUlOKSB9LAo+ICvCoMKgwqAgeyBQUk9GSUxFKCJoaWdoIizCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZGX1BST0ZJTEVfQVYxX0hJR0gpIH0sCj4gK8KgwqDCoCB7 IFBST0ZJTEUoInByb2Zlc3Npb25hbCIswqDCoMKgwqDCoMKgIEZGX1BST0ZJTEVfQVYxX1BST0ZF U1NJT05BTCkgfSwKPiArI3VuZGVmIFBST0ZJTEUKPiArCj4gK8KgwqDCoCB7ICJ0aWVyIiwgIlNl dCB0aWVyIChzZXFfdGllcikiLAo+ICvCoMKgwqDCoMKgIE9GRlNFVCh0aWVyKSwgQVZfT1BUX1RZ UEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDEsIEZMQUdTLCAidGllciIgfSwKPiArwqDCoMKgIHsg Im1haW4iLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKPiArwqDCoMKgwqDCoCB7IC5pNjQg PSAwIH0sIDAsIDAsIEZMQUdTLCAidGllciIgfSwKPiArwqDCoMKgIHsgImhpZ2giLCBOVUxMLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwKPiArwqDCoMKgwqDCoCB7IC5pNjQgPSAxIH0sIDAsIDAsIEZM QUdTLCAidGllciIgfSwKPiArwqDCoMKgIHsgImxldmVsIiwgIlNldCBsZXZlbCAoc2VxX2xldmVs X2lkeCkiLAo+ICvCoMKgwqDCoMKgIE9GRlNFVChsZXZlbCksIEFWX09QVF9UWVBFX0lOVCwKPiAr wqDCoMKgwqDCoCB7IC5pNjQgPSBGRl9MRVZFTF9VTktOT1dOIH0sIEZGX0xFVkVMX1VOS05PV04s IDB4MWYsIEZMQUdTLCAibGV2ZWwiIH0sCj4gKwo+ICsjZGVmaW5lIExFVkVMKG5hbWUsIHZhbHVl KSBuYW1lLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgXAo+ICvCoMKgwqDCoMKgIHsgLmk2 NCA9IHZhbHVlIH0sIDAsIDAsIEZMQUdTLCAibGV2ZWwiCj4gK8KgwqDCoCB7IExFVkVMKCIyLjAi LMKgIDApIH0sCj4gK8KgwqDCoCB7IExFVkVMKCIyLjEiLMKgIDEpIH0sCj4gK8KgwqDCoCB7IExF VkVMKCIzLjAiLMKgIDQpIH0sCj4gK8KgwqDCoCB7IExFVkVMKCIzLjEiLMKgIDUpIH0sCj4gK8Kg wqDCoCB7IExFVkVMKCI0LjAiLMKgIDgpIH0sCj4gK8KgwqDCoCB7IExFVkVMKCI0LjEiLMKgIDkp IH0sCj4gK8KgwqDCoCB7IExFVkVMKCI1LjAiLCAxMikgfSwKPiArwqDCoMKgIHsgTEVWRUwoIjUu MSIsIDEzKSB9LAo+ICvCoMKgwqAgeyBMRVZFTCgiNS4yIiwgMTQpIH0sCj4gK8KgwqDCoCB7IExF VkVMKCI1LjMiLCAxNSkgfSwKPiArwqDCoMKgIHsgTEVWRUwoIjYuMCIsIDE2KSB9LAo+ICvCoMKg wqAgeyBMRVZFTCgiNi4xIiwgMTcpIH0sCj4gK8KgwqDCoCB7IExFVkVMKCI2LjIiLCAxOCkgfSwK PiArwqDCoMKgIHsgTEVWRUwoIjYuMyIsIDE5KSB9LAo+ICsjdW5kZWYgTEVWRUwKPiArCj4gK8Kg wqDCoCB7ICJ0aWxlcyIsICJUaWxlIGNvbHVtbnMgeCByb3dzIChVc2UgbWluaW1hbCB0aWxlIGNv bHVtbi9yb3cgbnVtYmVyCj4gYXV0b21hdGljYWxseSBieSBkZWZhdWx0KSIsCj4gK8KgwqDCoMKg wqAgT0ZGU0VUKHRpbGVfY29scyksIEFWX09QVF9UWVBFX0lNQUdFX1NJWkUsIHsgLnN0ciA9IE5V TEwgfSwgMCwgMCwgRkxBR1MKPiB9LAo+ICvCoMKgwqAgeyAidGlsZV9ncm91cHMiLCAiTnVtYmVy IG9mIHRpbGUgZ3JvdXBzIGZvciBlbmNvZGluZyIsCj4gK8KgwqDCoMKgwqAgT0ZGU0VUKHRpbGVf Z3JvdXBzKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAxIH0sIDEsCj4gQVYxX01BWF9USUxF X1JPV1MgKiBBVjFfTUFYX1RJTEVfQ09MUywgRkxBR1MgfSwKPiArCj4gK8KgwqDCoCB7IE5VTEwg fSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB2YWFwaV9lbmNvZGVf YXYxX2RlZmF1bHRzW10gPSB7Cj4gK8KgwqDCoCB7ICJiIizCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiMCLCoMKgIH0sCj4gK8KgwqDCoCB7ICJiZiIswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICIyIsKgwqAgfSwKPiArwqDCoMKgIHsgImciLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIx MjAiIH0sCj4gK8KgwqDCoCB7ICJxbWluIizCoMKgwqDCoMKgwqDCoMKgwqDCoCAiMSLCoMKgIH0s Cj4gK8KgwqDCoCB7ICJxbWF4IizCoMKgwqDCoMKgwqDCoMKgwqDCoCAiMjU1IiB9LAo+ICvCoMKg wqAgeyBOVUxMIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB2YWFwaV9lbmNv ZGVfYXYxX2NsYXNzID0gewo+ICvCoMKgwqAgLmNsYXNzX25hbWUgPSAiYXYxX3ZhYXBpIiwKPiAr wqDCoMKgIC5pdGVtX25hbWXCoCA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+ICvCoMKgwqAgLm9w dGlvbsKgwqDCoMKgID0gdmFhcGlfZW5jb2RlX2F2MV9vcHRpb25zLAo+ICvCoMKgwqAgLnZlcnNp b27CoMKgwqAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCj4gK307Cj4gKwo+ICtjb25zdCBGRkNv ZGVjIGZmX2F2MV92YWFwaV9lbmNvZGVyID0gewo+ICvCoMKgwqAgLnAubmFtZcKgwqDCoMKgwqDC oMKgwqAgPSAiYXYxX3ZhYXBpIiwKPiArwqDCoMKgIENPREVDX0xPTkdfTkFNRSgiQVYxIChWQUFQ SSkiKSwKPiArwqDCoMKgIC5wLnR5cGXCoMKgwqDCoMKgwqDCoMKgID0gQVZNRURJQV9UWVBFX1ZJ REVPLAo+ICvCoMKgwqAgLnAuaWTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFWX0NPREVDX0lEX0FW MSwKPiArwqDCoMKgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWQUFQSUVuY29kZUFWMUNvbnRl eHQpLAo+ICvCoMKgwqAgLmluaXTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9ICZ2YWFwaV9lbmNvZGVf YXYxX2luaXQsCj4gK8KgwqDCoCBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tFVF9DQigmZmZfdmFhcGlf ZW5jb2RlX3JlY2VpdmVfcGFja2V0KSwKPiArwqDCoMKgIC5jbG9zZcKgwqDCoMKgwqDCoMKgwqDC oCA9ICZ2YWFwaV9lbmNvZGVfYXYxX2Nsb3NlLAo+ICvCoMKgwqAgLnAucHJpdl9jbGFzc8KgwqAg PSAmdmFhcGlfZW5jb2RlX2F2MV9jbGFzcywKPiArwqDCoMKgIC5wLmNhcGFiaWxpdGllcyA9IEFW X0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVDX0NBUF9IQVJEV0FSRSB8Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBVl9DT0RFQ19DQVBfRFIxIHwKPiBBVl9D T0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURfT1BBUVVFLAo+ICvCoMKgwqAgLmNhcHNfaW50ZXJu YWzCoCA9IEZGX0NPREVDX0NBUF9OT1RfSU5JVF9USFJFQURTQUZFIHwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZGX0NPREVDX0NBUF9JTklUX0NMRUFOVVAs Cj4gK8KgwqDCoCAuZGVmYXVsdHPCoMKgwqDCoMKgwqAgPSB2YWFwaV9lbmNvZGVfYXYxX2RlZmF1 bHRzLAo+ICvCoMKgwqAgLnAucGl4X2ZtdHMgPSAoY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0W10p IHsKPiArwqDCoMKgwqDCoMKgwqAgQVZfUElYX0ZNVF9WQUFQSSwKPiArwqDCoMKgwqDCoMKgwqAg QVZfUElYX0ZNVF9OT05FLAo+ICvCoMKgwqAgfSwKPiArwqDCoMKgIC5od19jb25maWdzwqDCoMKg wqAgPSBmZl92YWFwaV9lbmNvZGVfaHdfY29uZmlncywKPiArwqDCoMKgIC5wLndyYXBwZXJfbmFt ZSA9ICJ2YWFwaSIsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oIGIv bGliYXZjb2RlYy92ZXJzaW9uLmgKPiBpbmRleCA3MjhhYjg4MzlkLi5lMGZlMmViN2I4IDEwMDY0 NAo+IC0tLSBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gKysrIGIvbGliYXZjb2RlYy92ZXJzaW9u LmgKPiBAQCAtMjksNyArMjksNyBAQAo+IMKgCj4gwqAjaW5jbHVkZSAidmVyc2lvbl9tYWpvci5o Igo+IMKgCj4gLSNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SwqAgMjMKPiArI2RlZmlu ZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1LCoCAyNAo+IMKgI2RlZmluZSBMSUJBVkNPREVDX1ZF UlNJT05fTUlDUk8gMTAwCj4gwqAKPiDCoCNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVMKg IEFWX1ZFUlNJT05fSU5UKExJQkFWQ09ERUNfVkVSU0lPTl9NQUpPUiwgXAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBv ciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5z dWJzY3JpYmUiLgo=