From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6847EC87FCA for ; Thu, 7 Aug 2025 20:22:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2CC3410E48E; Thu, 7 Aug 2025 20:22:49 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="MyO9bqSz"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6B89C10E48E for ; Thu, 7 Aug 2025 20:22:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754598168; x=1786134168; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=KNfSajqinU+uClnFfUcuvhswxDVrIeI3Vf4YiBpvL04=; b=MyO9bqSzjud59BWVdPqLVAn3oW7zxGayiM2S3JQtwpqe8WHSQvEfhePB sW4QOlg+2xMAS3lvF8QTYynX0n2WIkx5/CS/1lDs/6y+idFLjfNK2z9BM Nodpdv5QBirIhXtYLVVJ3JqEkRxInsLDE5vh841FFLyiUJuOT+yw8x67C 3TwtT01AW8AN6APehDrSy6J8diibKVJ85eeHLjqoxLebkx86pGbX5Gt88 svkVRN5hUgxtnxKh4vxtKBT2rKWfZymYOhaNJHk1O46E12RfLoaehpXYB 54rwlblUY0WFnYvauFfEvopJ1A/xKu73jRJRLgA4h83qBVptBzSfcA5tN Q==; X-CSE-ConnectionGUID: ikYWOaztSWenboulWT++5w== X-CSE-MsgGUID: qddDwjuBTo+EuDbg9DQ/Ag== X-IronPort-AV: E=McAfee;i="6800,10657,11514"; a="79500224" X-IronPort-AV: E=Sophos;i="6.17,274,1747724400"; d="scan'208";a="79500224" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Aug 2025 13:22:47 -0700 X-CSE-ConnectionGUID: w07IgGBDQMadrh9Ry/ATgw== X-CSE-MsgGUID: 82MSq7B7TVaB/GByRdPwXw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,274,1747724400"; d="scan'208";a="188824745" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by fmviesa002.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Aug 2025 13:22:47 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.26; Thu, 7 Aug 2025 13:22:46 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.26 via Frontend Transport; Thu, 7 Aug 2025 13:22:46 -0700 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (40.107.102.71) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.26; Thu, 7 Aug 2025 13:22:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d3HIhMu3/GDC9U3dRgASYzUGoUAh9vQUXAkj9wBj9qXdLcgLzm0KXVMXCiMDw+hDuH1Bt+sAorISiUCj5H6Kr5a4MYZXQpdYqT+YWrg/QmWhueRFQxC9g+urrpoK0AGhGN6ATRTmiUmqkKHC7WEMFZzCZCWeICBV7fe5kM85xio7Uo2P9sH/Go1Web1SLyJ3oF28dSzc91fVoaLtSpQm8ZwYauQjC9RuUoWjXc9lov0Ah9u3FvXkfMhFzhsCI3ufVcnijyAEoNNrSll7J5rSfVu2DfwV9mSf6QN3HPjOMElXLV/XOgXsxovUGre18HeR9Zwh4wVQKB/lKjPDdT4ATA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=KNfSajqinU+uClnFfUcuvhswxDVrIeI3Vf4YiBpvL04=; b=XjqOPCLWp1zip+aAT52/khoZsxSoPynCKm5LUHiOBHSKOhQO8KJG8XMCWxlVwCNURH5I58fBoQ8bRBxgELZD7RYuRcH2sh4xVVRdquPrjufhKUtQEWdcvzTSr7ZSZkXAnGnM5T/xRQvhxQyNu/FkiZQvcS40HHGah8XJfqYaMhImt9I06NWnBEPWrSzsM8JpH82QMBuk6xCW/rIcMg0z6BOgNTP5vYUx0fjgdGxa6JxWxwfjyb8Dr7gYJz7Vc7mwT/zJ3mK2+BYFgwZ18O9Rh8sX2rtRQ7zki1MqC4G1RjWNogIVsuXO6rZacYDQmCpFV2FlQ84SDa3kuRK4bmVpOA== 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 DM8PR11MB5573.namprd11.prod.outlook.com (2603:10b6:8:3b::7) by SA0PR11MB4669.namprd11.prod.outlook.com (2603:10b6:806:99::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9009.15; Thu, 7 Aug 2025 20:22:43 +0000 Received: from DM8PR11MB5573.namprd11.prod.outlook.com ([fe80::3f64:5280:3eb4:775b]) by DM8PR11MB5573.namprd11.prod.outlook.com ([fe80::3f64:5280:3eb4:775b%3]) with mapi id 15.20.9009.016; Thu, 7 Aug 2025 20:22:43 +0000 From: "Summers, Stuart" To: "Brost, Matthew" CC: "intel-xe@lists.freedesktop.org" , "Kassabri, Farah" Subject: Re: [PATCH 6/8] drm/xe: Prep TLB invalidation fence before sending Thread-Topic: [PATCH 6/8] drm/xe: Prep TLB invalidation fence before sending Thread-Index: AQHcB9Kji+4OrptfOEGnsuFfJSmNYbRXoPsAgAABbIA= Date: Thu, 7 Aug 2025 20:22:43 +0000 Message-ID: <21632c738ae43a9fafa1cf09fe0f7fcac736043c.camel@intel.com> References: <20250807193649.55399-1-stuart.summers@intel.com> <20250807193649.55399-7-stuart.summers@intel.com> In-Reply-To: Accept-Language: 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: DM8PR11MB5573:EE_|SA0PR11MB4669:EE_ x-ms-office365-filtering-correlation-id: ce43d2f5-ecaa-4c17-27a1-08ddd5f02a2e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?UXNhREJtdkFZZjNyak0wSWU5L2s5bzhsVjBhYVg0WUNBZGRsZmk0Z3VTSlR1?= =?utf-8?B?RmtyeUYzR1dzNmFRYzM5RXdOZ1cxSGppakVSUnJRNjF3cGVoL3lZa1ZVY2Ix?= =?utf-8?B?UkZuMWR1b3h3QmprS3JSaTkzbFlWVVRpNkt4WU5XOG9rWGlNblNsSTIyazND?= =?utf-8?B?R2RvQnM2MENLRUVmVmFvZkJRS05zc3VSWlY1cTd3L0FQRFliN2NaeDBTMVpP?= =?utf-8?B?cDJndzdoQ0pFVHd5UzV4RkNJU05ra1liQ1RqcHUxTVZkNGpMRkdhYUczZHJV?= =?utf-8?B?OUV4MklaSnNqNjBxRVpGSmJiTU9xQ1VJYlhwMWlhK3FTWHVoV3k1dDRxc0NK?= =?utf-8?B?NVVIZWVVVzZVcmU3cGljL1NJQXZ1MjIvOE5LbmZZazNaN3pmK1FOTjQ1T0lD?= =?utf-8?B?MVcxVTEyQndjU21DU1VuSThIVTlEMGxGY0VDRncyNStueGpZWGNURk5YaUM2?= =?utf-8?B?QU1YeUltMGNlOVY3MmV4bUp0N0NKclYwbEJLY2tZbE9YYzBlS21FM29iOGxw?= =?utf-8?B?TVBtSW9rOU5mQ0R6dFlWY2xxTXdsSnZFNXpkK0ZjWjdxQUlJeUdSV1lrcVZo?= =?utf-8?B?WSsyS2J6djVlWjVsd2JxcjMvUThaTlpJQnRTcGFkOUVSZ1BnRGF3eEtMOVA0?= =?utf-8?B?SHdnKzVwQWovMWhqSGhnSTFLTEJMMld3dVVGaDhuZ2c2eGgzdXZiZ3V6Q1Jh?= =?utf-8?B?ZklvM3YzMEMyUVZpejhFVmh5d3FyRDlPYVlHeUhaM2NESUo4YWZLUDU5a1di?= =?utf-8?B?eFdlUElSZFMxRTdjdkcrZjBGN1pDNWl6eDVpdmtPQ203ajlKK1hNaWNheTI4?= =?utf-8?B?dkxDNTQvb2V3NWVwNkZ4VEdkTUFMQVpZUCtGMkYwN0NwTFFmTWpmV0ppTkhk?= =?utf-8?B?TENBbFRiVy94bWRzdG1EOWE5cUV5bkcvOU5zU1plRWlReVBRTlZHcDVJOCtT?= =?utf-8?B?Ym1VMnhUWW8reEEzL2VNKzEvQVlsVVVyTGdIbk93bTRINnFlV0NFOGxhY1lY?= =?utf-8?B?bFRpNGxmNjVSajhjVElWWDhoRzc2YndWWmYzMWhKMEdQbnJzWmhoc2VCeG9I?= =?utf-8?B?Q3RkRTBJMngveFllTWRkOVFwVnBEbURxSDNNTEZGb3gxSHlsSmFmM2tHVHAz?= =?utf-8?B?OVBLS3VsTC9CYmpMZEQ5dkRUenBLU2Q4Y1Y2c005SFBPdFlBS3Rsc3VMU1VD?= =?utf-8?B?ZUFtaHdRcWFVTTg1Ym9NNTZtK3pyZld0NmxaQ3lEbnBqYlNzRU03YjlMTXpJ?= =?utf-8?B?V0dOYUhtb0t4Yk5iSmVwdjN5bE40SGdJSEtFSmt3dStBTUV6bUROQlF2S2py?= =?utf-8?B?UFBzRzZBRnBGNFVvODlMZGl0YnZJMHBtSEJ3a1o5UzhQbnZTRUdlWDNBZXBD?= =?utf-8?B?SEtFVkxMM1ZReW0zY0dNUnNKT0l1NzJMb0kyTzQxTWdqQnUxTTNVM2NNcExq?= =?utf-8?B?NWx6cDBVMEwrQXFRWUtrMkNnSUJjSTViMStlRHpUQ0RPTHVVRlFJb3RXTXZt?= =?utf-8?B?cWFtRG16TGV5ZnhWT2RaMElsNTlHNy9jQlh1dzRlR1hSRG9qR2xIenc1V2U2?= =?utf-8?B?Z0hVTmhUNmdXM0pOY2FaZWVoOEtpdHQ5STFoWWFqZGpvajdhbVJxRHRUMm5N?= =?utf-8?B?UFpXUklIRk5TSC9mYk1DTDZKVnZuTjZDaXppbk96MmdzNllSV3lhUW5sbUhs?= =?utf-8?B?cm80UXdFQ2cvdER6L1MxeVh1VEdEaENUR1NsMm9hV3h4dTdUeVlJN2RsOU5j?= =?utf-8?B?d0d3VjdVZ2hhZVJCbktOZ2w0QVJ6aWhEM3pIdGZ4Ly84eG5JMjkvS2cveWhV?= =?utf-8?B?ZnZtdnp6eFBxaWpIYkhUbUxwUE44cGliQVlVQXlQYnZmWkNmNndnc25sL2Nq?= =?utf-8?B?RXJGYWJnaFdGandkRjR3U1FCRDI5L1d0NFVZTktGY0xodDRhTU04bWdlOWox?= =?utf-8?B?M0JqWmhwTVpkcUlsNld3L2h1V0dOL0dlRHhZbWxTbGlMZFhQMFFLbGNXMjNF?= =?utf-8?Q?jnif0Gd7WdXcd7+yJEoTBwl0z/nP60=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5573.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eW9jK1Zmd1AxTzYza0djY3R0cjNyaElLZG1aYjJlRmh5RnJkRXJON25jK29W?= =?utf-8?B?VWErbjNUbWFrMGF6bHMrRUZvbHJoc0h6RW5sQmdTcnE0MEJkcm5oRnNNa05Z?= =?utf-8?B?V25PZmlFMVNVTkRQSUJCeGJicDFVb0MxNk5hZnV4M0JuVWlRWlNYWXZxUnF5?= =?utf-8?B?QzQvTUcrUVN1VU0rZzlKaUlhLy8xYTBnZkZhQ0NNWlpSQk5pbzBKU0Z6eTNt?= =?utf-8?B?OEdPRU1JbS9hVG5nMDViOGdhdUYrQ1lERXlka3V3anFpSkEwV0RxOWR4UGJu?= =?utf-8?B?OWhqdTFUY3hVR3VrK1lZcTFTbFRXclFqSGwxNDRraHZtYXFpdWVRYUN3TTYy?= =?utf-8?B?d0dvWnRzd1Q1WFlrWnJwcHh3eCtGejIyMEhBYTNsbjYrK3ZsVFoyYWpidXpC?= =?utf-8?B?QTBUeTQzTDNpZzEveXhFNFQ4UnZpUFhXYmJBdUNlRFJHdE91VnNER3p4RlpT?= =?utf-8?B?dm9nazhtdGVGU3dJNWpucmthYURNeHNEdWc3SHBUK3I3MkF1cWZleFZGVFpu?= =?utf-8?B?MXJyVmJabCtpK0o2QWkwRDBQRndRQnR0bFVwQVpybzFxa3pSSWhBN0d4d2Rs?= =?utf-8?B?ajhlVWFBTUE5clRsM2trVlRCaFZHUTc3by85SUlzZmFKc2ljYStwcGk5L1Rm?= =?utf-8?B?WUp2RHpWa0VRczdPV2hiTDkzbjVNVS9Vd3VJcm5xS0l2VzBVK0RjQ3IwUGQ4?= =?utf-8?B?NG9MaHcyTm9qYWpqSStEdUJtUHlvOXhFZGROV1BNYk84YU9acHdTY0ZKakI4?= =?utf-8?B?ZW0wd1ZDVHVXL2NibHVQdUJvZXluVS9WY1VGN3h2NlJsMmYzYklhMmgySGZp?= =?utf-8?B?a1BMKzBrV0FPdmJMRW1qaDhBQk5LMksyQlV0RDVYaWlQVXZJMEtwZmNhNDRj?= =?utf-8?B?eVIxaGJlWGtScW5Nd1VMZFYyQUxIMWVNendqVkgxV0J3SVoxbzk2OWJ2blEx?= =?utf-8?B?RGdFeEd3aFZxc05sSjhRSUNXNDQ3cmplSEU3d3R2d2ZkSUhueU9RdUJJaEhR?= =?utf-8?B?ZHB0TTAzY2hsZEpMUFF1TEJiM2NyUjUxRlp1WC9oTEVmT2hKR240cTk0czdT?= =?utf-8?B?Y2czMWJldzlBVDNKOWdxUEVrditvNm1ZNUliRk9HKzE2TWRMTmRkZ3MxMmJD?= =?utf-8?B?VTJQMm11RG42Y3ZYSnpUM1JQYWMyRWhRMk5NcjB0Y2ZpZUNVMVNjUkt6MU96?= =?utf-8?B?Q2lkZ3hQb09mbkpNNXpoeDJMQzdlT2JnOUJpNHBnM3NGQTNhNkdreEJ5cnE4?= =?utf-8?B?L2FZWW9mczFZcUFybDh5SGpFVGthZnVTTVFXV09Kelg5SEk4NitrU3VSd0NB?= =?utf-8?B?eFFZQ1orWktWVVRIOXBqV0VlSjVRaXFXL1hUbmdXTmd3N1doVkE2N3NjRGpN?= =?utf-8?B?WFllbVB2VndycnpLdFVUS1VGRTBwMnhUQkUxVnVLcjUvT0p4S3dJb0dicjJK?= =?utf-8?B?a0hXUEg4MlRjQ2I4aGlGbUF0VWFQb0gxSTh2MlNUZUxoQmNmOVd5WTVmbVh0?= =?utf-8?B?V2ZhN09NdDBzTDN6SHpYZGZ1eGxNcmlwd3Q2aVBnWlptM2pmbkR3WkMzbHV6?= =?utf-8?B?cGZaWFVVVzZ2dDRFR2VuaE1vVWNFaXg3dDIrTGtRY2VZMUxvTk15Rk1JQ2hj?= =?utf-8?B?c2M5akppRnY1SXR2UFVZY2ZiZjVTdVJmc0FCQVVXL1V1WDRibDV2Sk0wditG?= =?utf-8?B?Z0syWE4vbDR3M2FpbW1XalRLZWtNeks3dWpMSGRzVlYwTkI4ODFhRlNEblBN?= =?utf-8?B?akRFZ1ExMm1wWDJ5aTZVSWUxMjExQnNKMCtEanpYSUE2MElLSVNMK3lxVkY0?= =?utf-8?B?dUpwby9nY3g5NEM4RTlDbHpLTU4wWjNvMy85VDlMQkU3cjRBRUlBQm8ydGJE?= =?utf-8?B?ZWJxaWk5b3Blczc0WnNkR2RMTzhjN2lDR2crWTBvR1pNeTlJd3JQU1JneURZ?= =?utf-8?B?YlhLRWRHVEthZmRnRENjQjR6MnNyNHNxWW1uQ3QvTGtibytyNGtCbUVVSVJF?= =?utf-8?B?SXVmWmZIS0pieVJyMHlWVHdxeVNQRTZRRUk2cEd5WEN1Wmw5a2dqVUJkMkJ4?= =?utf-8?B?eUVqMzlKUnBNL0M4cVBpUGtyZmhHbXlHa0prK04zMTZWYVNZa3FKL2l5dnpG?= =?utf-8?B?bDZkMzBYcXVubG5QOVhOanNscUFCekNpcElHcVBPQ25LaDJIRGdPUmt6Mjli?= =?utf-8?B?cWc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5573.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce43d2f5-ecaa-4c17-27a1-08ddd5f02a2e X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Aug 2025 20:22:43.2692 (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: 0TIpokc6dIcEPWsp0htT/QzxXLWFg4DwELFfzXFrFVw6MMLX8OqGiDW2VVDl4HUuNz2b2kKiL7FFH2u11cG73fGg3iaCsSg3TrbxVlnKBpo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4669 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gVGh1LCAyMDI1LTA4LTA3IGF0IDEzOjE3IC0wNzAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IE9uIFRodSwgQXVnIDA3LCAyMDI1IGF0IDA3OjM2OjQ3UE0gKzAwMDAsIHN0dWFydHN1bW1lcnMg d3JvdGU6Cj4gPiBGcm9tOiBNYXR0aGV3IEJyb3N0IDxtYXR0aGV3LmJyb3N0QGludGVsLmNvbT4K PiA+IAo+ID4gSXQgaXMgYSBiaXQgYmFja3dhcmRzIHRvIGFkZCBhIFRMQiBpbnZhbGlkYXRpb24g ZmVuY2UgdG8gdGhlCj4gPiBwZW5kaW5nCj4gPiBsaXN0IGFmdGVyIGlzc3VpbmcgdGhlIGludmFs aWRhdGlvbi4gUGVyZm9ybSB0aGlzIHN0ZXAgYmVmb3JlCj4gPiBpc3N1aW5nCj4gPiB0aGUgVExC IGludmFsaWRhdGlvbiBpbiBhIGhlbHBlciBmdW5jdGlvbi4KPiA+IAo+ID4gU2lnbmVkLW9mZi1i eTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Cj4gPiBSZXZpZXdlZC1i eTogU3R1YXJ0IFN1bW1lcnMgPHN0dWFydC5zdW1tZXJzQGludGVsLmNvbT4KPiA+IC0tLQo+ID4g wqBkcml2ZXJzL2dwdS9kcm0veGUveGVfdGxiX2ludmFsLmMgfCAxMDUgKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0KPiA+IC0tLS0KPiA+IMKgMSBmaWxlIGNoYW5nZWQsIDUyIGluc2VydGlvbnMo KyksIDUzIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3hlL3hlX3RsYl9pbnZhbC5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV90bGJfaW52YWwu Ywo+ID4gaW5kZXggOTk1Njk5MTA4YmNiLi45NjdlNWEyNjFiYjYgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0veGUveGVfdGxiX2ludmFsLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV90bGJfaW52YWwuYwo+ID4gQEAgLTY1LDE5ICs2NSwxOSBAQCBfX2ludmFsX2ZlbmNl X3NpZ25hbChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKPiA+IHN0cnVjdCB4ZV90bGJfaW52YWxfZmVu Y2UgKmZlbmNlKQo+ID4gwqBzdGF0aWMgdm9pZAo+ID4gwqBpbnZhbF9mZW5jZV9zaWduYWwoc3Ry dWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV90bGJfaW52YWxfZmVuY2UKPiA+ICpmZW5jZSkK PiA+IMKgewo+ID4gK8KgwqDCoMKgwqDCoMKgbG9ja2RlcF9hc3NlcnRfaGVsZCgmZmVuY2UtPnRs Yl9pbnZhbC0+cGVuZGluZ19sb2NrKTsKPiA+ICsKPiA+IMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Rl bCgmZmVuY2UtPmxpbmspOwo+ID4gwqDCoMKgwqDCoMKgwqDCoF9faW52YWxfZmVuY2Vfc2lnbmFs KHhlLCBmZW5jZSk7Cj4gPiDCoH0KPiA+IMKgCj4gPiAtdm9pZCB4ZV90bGJfaW52YWxfZmVuY2Vf c2lnbmFsKHN0cnVjdCB4ZV90bGJfaW52YWxfZmVuY2UgKmZlbmNlKQo+ID4gK3N0YXRpYyB2b2lk Cj4gPiAraW52YWxfZmVuY2Vfc2lnbmFsX3VubG9ja2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHhlX3RsYl9pbnZhbF9mZW5jZSAqZmVuY2UpCj4gPiDCoHsKPiA+IC3CoMKgwqDCoMKg wqDCoHN0cnVjdCB4ZV9ndCAqZ3Q7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoV0FSTl9P Tl9PTkNFKCFmZW5jZS0+dGxiX2ludmFsKSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm47Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBndCA9IGZlbmNlLT50bGJfaW52 YWwtPnByaXZhdGU7Cj4gPiAtwqDCoMKgwqDCoMKgwqBfX2ludmFsX2ZlbmNlX3NpZ25hbChndF90 b194ZShndCksIGZlbmNlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwaW5fbG9ja19pcnEoJmZlbmNl LT50bGJfaW52YWwtPnBlbmRpbmdfbG9jayk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnZhbF9mZW5j ZV9zaWduYWwoeGUsIGZlbmNlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwaW5fdW5sb2NrX2lycSgm ZmVuY2UtPnRsYl9pbnZhbC0+cGVuZGluZ19sb2NrKTsKPiA+IMKgfQo+ID4gwqAKPiA+IMKgc3Rh dGljIHZvaWQgeGVfZ3RfdGxiX2ZlbmNlX3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQo+ID4gQEAgLTIwOCwxNCArMjA4LDEwIEBAIHN0YXRpYyBib29sIHRsYl9pbnZhbF9zZXFub19w YXN0KHN0cnVjdCB4ZV9ndAo+ID4gKmd0LCBpbnQgc2Vxbm8pCj4gPiDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHNlcW5vX3JlY3YgPj0gc2Vxbm87Cj4gPiDCoH0KPiA+IMKgCj4gPiAtc3RhdGljIGlu dCBzZW5kX3RsYl9pbnZhbChzdHJ1Y3QgeGVfZ3VjICpndWMsCj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV90bGJfaW52YWxfZmVu Y2UgKmZlbmNlLAo+ID4gK3N0YXRpYyBpbnQgc2VuZF90bGJfaW52YWwoc3RydWN0IHhlX2d1YyAq Z3VjLCBzdHJ1Y3QKPiA+IHhlX3RsYl9pbnZhbF9mZW5jZSAqZmVuY2UsCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKmFjdGlvbiwgaW50 IGxlbikKPiA+IMKgewo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndCAqZ3QgPSBndWNf dG9fZ3QoZ3VjKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZ3Rf dG9feGUoZ3QpOwo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHNlcW5vOwo+ID4gLcKgwqDCoMKgwqDC oMKgaW50IHJldDsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgeGVfZ3RfYXNzZXJ0KGd0LCBm ZW5jZSk7Cj4gPiDCoAo+ID4gQEAgLTIyNSw0NyArMjIxLDM4IEBAIHN0YXRpYyBpbnQgc2VuZF90 bGJfaW52YWwoc3RydWN0IHhlX2d1YyAqZ3VjLAo+ID4gwqDCoMKgwqDCoMKgwqDCoCAqIG5lZWQg dG8gYmUgdXBkYXRlZC4KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgCj4gPiArwqDCoMKg wqDCoMKgwqB4ZV9ndF9zdGF0c19pbmNyKGd0LCBYRV9HVF9TVEFUU19JRF9UTEJfSU5WQUwsIDEp Owo+ID4gK8KgwqDCoMKgwqDCoMKgYWN0aW9uWzFdID0gZmVuY2UtPnNlcW5vOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIHhlX2d1Y19jdF9zZW5kKCZndWMtPmN0LCBhY3Rpb24sIGxl biwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBHMkhfTEVOX0RXX1RMQl9JTlZBTElEQVRFLCAxKTsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgeGVfdGxiX2ludmFsX2ZlbmNlX3ByZXAoc3RydWN0IHhlX3RsYl9pbnZhbF9m ZW5jZQo+ID4gKmZlbmNlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV90bGJf aW52YWwgKnRsYl9pbnZhbCA9IGZlbmNlLT50bGJfaW52YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgeGVfZ3QgKmd0ID0gdGxiX2ludmFsLT5wcml2YXRlOwo+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IHhlX2RldmljZSAqeGUgPSBndF90b194ZShndCk7Cj4gPiArCj4gPiDCoMKgwqDCoMKg wqDCoMKgbXV0ZXhfbG9jaygmZ3QtPnRsYl9pbnZhbC5zZXFub19sb2NrKTsKPiAKPiBUaGUgc2Vx bm8gbG9jayBzaG91bGQgYmUgYXNzZXJ0ZWQgaGVyZSwgd2l0aCB0aGUgY2FsbGVyIHRha2luZyB0 aGlzCj4gYW5kCj4gaG9sZGluZyB1bnRpbCBzZW5kX3RsYl9pbnZhbCBpcyBjYWxsZWQuCgpBaCB0 aGFua3MgYWdhaW4sIHlvdSdyZSByaWdodC4gSSdsbCBoYXZlIGEgbmV3IHJldiBwb3N0ZWQgc2hv cnRseS4uLgoKLVN0dWFydAoKPiAKPiBNYXR0Cj4gCj4gPiAtwqDCoMKgwqDCoMKgwqBzZXFubyA9 IGd0LT50bGJfaW52YWwuc2Vxbm87Cj4gPiAtwqDCoMKgwqDCoMKgwqBmZW5jZS0+c2Vxbm8gPSBz ZXFubzsKPiA+ICvCoMKgwqDCoMKgwqDCoGZlbmNlLT5zZXFubyA9IHRsYl9pbnZhbC0+c2Vxbm87 Cj4gPiDCoMKgwqDCoMKgwqDCoMKgdHJhY2VfeGVfdGxiX2ludmFsX2ZlbmNlX3NlbmQoeGUsIGZl bmNlKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGFjdGlvblsxXSA9IHNlcW5vOwo+ID4gLcKgwqDCoMKg wqDCoMKgcmV0ID0geGVfZ3VjX2N0X3NlbmQoJmd1Yy0+Y3QsIGFjdGlvbiwgbGVuLAo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHMkhf TEVOX0RXX1RMQl9JTlZBTElEQVRFLCAxKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghcmV0KSB7 Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Bpbl9sb2NrX2lycSgmZ3QtPnRs Yl9pbnZhbC5wZW5kaW5nX2xvY2spOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogV2UgaGF2ZW4ndCBhY3R1 YWxseSBwdWJsaXNoZWQgdGhlIFRMQiBmZW5jZSBhcwo+ID4gcGVyCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogcGVuZGluZ19mZW5jZXMsIGJ1dCBpbiB0aGVvcnkgb3VyIHNl cW5vIGNvdWxkCj4gPiBoYXZlIGFscmVhZHkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBiZWVuIHdyaXR0ZW4gYXMgd2UgYWNxdWlyZWQgdGhlIHBlbmRpbmdfbG9jay4gSW4K PiA+IHN1Y2ggYSBjYXNlCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogd2Ug Y2FuIGp1c3QgZ28gYWhlYWQgYW5kIHNpZ25hbCB0aGUgZmVuY2UgaGVyZS4KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAodGxiX2ludmFsX3NlcW5vX3Bhc3QoZ3QsIHNlcW5vKSkgewo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX2ludmFsX2ZlbmNlX3NpZ25h bCh4ZSwgZmVuY2UpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7 Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZlbmNl LT5pbnZhbF90aW1lID0ga3RpbWVfZ2V0KCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJmZlbmNlLT5saW5rLAo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmZ3QtCj4gPiA+dGxiX2ludmFsLnBlbmRpbmdfZmVuY2VzKTsKPiA+IC0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxp c3RfaXNfc2luZ3VsYXIoJmd0LQo+ID4gPnRsYl9pbnZhbC5wZW5kaW5nX2ZlbmNlcykpCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZndC0KPiA+ID50bGJfaW52YWwuZmVuY2VfdGRyLAo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiB0bGJfdGlt ZW91dF9qaWZmaWVzKGd0KSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNwaW5fdW5sb2NrX2lycSgmZ3QtPnRs Yl9pbnZhbC5wZW5kaW5nX2xvY2spOwo+ID4gLcKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX2ludmFsX2ZlbmNlX3NpZ25hbCh4ZSwgZmVu Y2UpOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFyZXQpIHsK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBndC0+dGxiX2ludmFsLnNlcW5vID0g KGd0LT50bGJfaW52YWwuc2Vxbm8gKyAxKSAlCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoFRMQl9JTlZBTElEQVRJT05fU0VRTk9fTUFYOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZ3QtPnRsYl9pbnZhbC5zZXFubykKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3QtPnRsYl9p bnZhbC5zZXFubyA9IDE7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtwqDCoMKgwqDCoMKgwqBt dXRleF91bmxvY2soJmd0LT50bGJfaW52YWwuc2Vxbm9fbG9jayk7Cj4gPiAtwqDCoMKgwqDCoMKg wqB4ZV9ndF9zdGF0c19pbmNyKGd0LCBYRV9HVF9TVEFUU19JRF9UTEJfSU5WQUwsIDEpOwo+ID4g wqAKPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBzcGlu X2xvY2tfaXJxKCZ0bGJfaW52YWwtPnBlbmRpbmdfbG9jayk7Cj4gPiArwqDCoMKgwqDCoMKgwqBm ZW5jZS0+aW52YWxfdGltZSA9IGt0aW1lX2dldCgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9h ZGRfdGFpbCgmZmVuY2UtPmxpbmssICZ0bGJfaW52YWwtPnBlbmRpbmdfZmVuY2VzKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChsaXN0X2lzX3Npbmd1bGFyKCZ0bGJfaW52YWwtPnBlbmRp bmdfZmVuY2VzKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxdWV1ZV9kZWxh eWVkX3dvcmsoc3lzdGVtX3dxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdGxiX2ludmFsLT5mZW5jZV90ZHIs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHRsYl90aW1lb3V0X2ppZmZpZXMoZ3QpKTsKPiA+ICvCoMKgwqDCoMKg wqDCoHNwaW5fdW5sb2NrX2lycSgmdGxiX2ludmFsLT5wZW5kaW5nX2xvY2spOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgdGxiX2ludmFsLT5zZXFubyA9ICh0bGJfaW52YWwtPnNlcW5vICsgMSkg JQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFRMQl9JTlZBTElEQVRJT05fU0VR Tk9fTUFYOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCF0bGJfaW52YWwtPnNlcW5vKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRsYl9pbnZhbC0+c2Vxbm8gPSAxOwo+ID4gK8Kg wqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZndC0+dGxiX2ludmFsLnNlcW5vX2xvY2spOwo+ID4g wqB9Cj4gPiDCoAo+ID4gwqAjZGVmaW5lIE1BS0VfSU5WQUxfT1AodHlwZSnCoMKgwqDCoCgodHlw ZSA8PAo+ID4gWEVfR1VDX1RMQl9JTlZBTF9UWVBFX1NISUZUKSB8IFwKPiA+IEBAIC0yOTMsNyAr MjgwLDEyIEBAIHN0YXRpYyBpbnQgeGVfdGxiX2ludmFsX2d1YyhzdHJ1Y3QgeGVfZ3QgKmd0LAo+ ID4gwqDCoMKgwqDCoMKgwqDCoH07Cj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IMKg Cj4gPiArwqDCoMKgwqDCoMKgwqB4ZV90bGJfaW52YWxfZmVuY2VfcHJlcChmZW5jZSk7Cj4gPiAr Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gc2VuZF90bGJfaW52YWwoJmd0LT51Yy5ndWMsIGZl bmNlLCBhY3Rpb24sCj4gPiBBUlJBWV9TSVpFKGFjdGlvbikpOwo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW52YWxfZmVu Y2Vfc2lnbmFsX3VubG9ja2VkKGd0X3RvX3hlKGd0KSwgZmVuY2UpOwo+ID4gKwo+ID4gwqDCoMKg wqDCoMKgwqDCoC8qCj4gPiDCoMKgwqDCoMKgwqDCoMKgICogLUVDQU5DRUxFRCBpbmRpY2F0ZXMg dGhlIENUIGlzIHN0b3BwZWQgZm9yIGEgR1QgcmVzZXQuCj4gPiBUTEIgY2FjaGVzCj4gPiDCoMKg wqDCoMKgwqDCoMKgICrCoCBzaG91bGQgYmUgbnVrZWQgb24gYSBHVCByZXNldCBzbyB0aGlzIGVy cm9yIGNhbiBiZQo+ID4gaWdub3JlZC4KPiA+IEBAIC00MjAsNyArNDEyLDcgQEAgaW50IHhlX3Rs Yl9pbnZhbF9yYW5nZShzdHJ1Y3QgeGVfdGxiX2ludmFsCj4gPiAqdGxiX2ludmFsLAo+ID4gwqAj ZGVmaW5lIE1BWF9UTEJfSU5WQUxJREFUSU9OX0xFTsKgwqDCoMKgwqDCoMKgNwo+ID4gwqDCoMKg wqDCoMKgwqDCoHUzMiBhY3Rpb25bTUFYX1RMQl9JTlZBTElEQVRJT05fTEVOXTsKPiA+IMKgwqDC oMKgwqDCoMKgwqB1NjQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqBp bnQgbGVuID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBsZW4gPSAwLCByZXQ7Cj4gPiDCoAo+ ID4gwqDCoMKgwqDCoMKgwqDCoHhlX2d0X2Fzc2VydChndCwgZmVuY2UpOwo+ID4gwqAKPiA+IEBA IC00ODEsNyArNDczLDE0IEBAIGludCB4ZV90bGJfaW52YWxfcmFuZ2Uoc3RydWN0IHhlX3RsYl9p bnZhbAo+ID4gKnRsYl9pbnZhbCwKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgeGVfZ3RfYXNz ZXJ0KGd0LCBsZW4gPD0gTUFYX1RMQl9JTlZBTElEQVRJT05fTEVOKTsKPiA+IMKgCj4gPiAtwqDC oMKgwqDCoMKgwqByZXR1cm4gc2VuZF90bGJfaW52YWwoJmd0LT51Yy5ndWMsIGZlbmNlLCBhY3Rp b24sIGxlbik7Cj4gPiArwqDCoMKgwqDCoMKgwqB4ZV90bGJfaW52YWxfZmVuY2VfcHJlcChmZW5j ZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBzZW5kX3RsYl9pbnZhbCgmZ3QtPnVj Lmd1YywgZmVuY2UsIGFjdGlvbiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVJSQVlfU0laRShhY3Rpb24pKTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChyZXQgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlu dmFsX2ZlbmNlX3NpZ25hbF91bmxvY2tlZCh4ZSwgZmVuY2UpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsKPiA+IMKgfQo+ID4gwqAKPiA+IMKgLyoqCj4gPiAtLSAKPiA+IDIu MzQuMQo+ID4gCgo=