From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id MaLPJRZbFWonpxwAWB0awg (envelope-from ) for ; Tue, 26 May 2026 04:34:30 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ijloCaRB; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 6F42D1E062; Tue, 26 May 2026 04:34:30 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id C11C71E062 for ; Tue, 26 May 2026 04:34:26 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 51D3B4BA903B for ; Tue, 26 May 2026 08:34:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 51D3B4BA903B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ijloCaRB Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by sourceware.org (Postfix) with ESMTPS id 722394BA2E0B for ; Tue, 26 May 2026 08:33:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 722394BA2E0B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 722394BA2E0B Authentication-Results: sourceware.org; arc=fail smtp.remote-ip=192.198.163.7 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1779784430; cv=fail; b=BDLTCbD1LFXa6vDb/uE7695DrWBEatQPhEWopfCr4kWekm+h9ke1QYPvYjHVicrhk4ZL9f4aExUhc5I4tYGZAz01wNYYkBZisaUmvUW931bnVO0Aj64Mdfru7906+dHRKAlta2zOJl8wxDvPvb0EJuwiosPz46Ya6nZX6/GeEZk= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1779784430; c=relaxed/simple; bh=yKzfbR52qZrpd9xsdUmuTH4nHUv4zpSGDfHym7wCHdQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=oq7cIAFhISeoH5bWvri9WRdnVXo0jo4BbESAt3/G4zmpx4urzu0bSyt0Cp5JVcVjhJxtGLvbARRR/T5+ym9m1tbeA4hnE7QD0YNof8T4Dv6sk9W27TcHRK1wMgEViMC2G6066f1sIlcWrIgFH/Yux8Me+M439V3e4E0xam5hk80= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ijloCaRB DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 722394BA2E0B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1779784430; x=1811320430; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version:content-transfer-encoding; bh=yKzfbR52qZrpd9xsdUmuTH4nHUv4zpSGDfHym7wCHdQ=; b=ijloCaRBcm6/7jg9GRdzGhoZdpRwyZEuMRBrcXSdLdZcNVQpKigk8wFl z3lA6Ygr3vEDWLV3+rc/m/cjkuvWjcG9y6lBAmQznrKYOFZpOujBgfr1x LUbvQmScnsiYDmCs9KK+ovBoZm8C4UUYS68fZ5Q3XvhdJLfVMewhJG4E2 K1tXVG+GchmflN0wJuBTXgCa4PwIUXEbe1Tu3hNoNOm3JxDooPhQhZvWD eesoxcxVhMoMsQtHNUJp08i6IpUdwLYoDuBS8LeqDE8Jb+H7A59JZApOk Cmv4NanVDKT3FOlealytVL0HZp3a/Cp3xvRZV7T+avhFW6Hw19ARjl5dL w==; X-CSE-ConnectionGUID: BDMykDrRSyuxdVNzMcNvGA== X-CSE-MsgGUID: k5FtGJLNQEm2J3JfON+iLg== X-IronPort-AV: E=McAfee;i="6800,10657,11797"; a="106050239" X-IronPort-AV: E=Sophos;i="6.24,169,1774335600"; d="scan'208";a="106050239" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2026 01:33:47 -0700 X-CSE-ConnectionGUID: fq+5nuczSF2kghZzeQu2xg== X-CSE-MsgGUID: eWqx1RrSTqukcNiYs5Na2w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.24,169,1774335600"; d="scan'208";a="241913384" Received: from fmsmsx902.amr.corp.intel.com ([10.18.126.91]) by orviesa009.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2026 01:33:47 -0700 Received: from FMSMSX903.amr.corp.intel.com (10.18.126.92) by fmsmsx902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Tue, 26 May 2026 01:33:46 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Tue, 26 May 2026 01:33:46 -0700 Received: from CY3PR05CU001.outbound.protection.outlook.com (40.93.201.29) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Tue, 26 May 2026 01:33:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=D7B+g9KrjKbkDQV38HRywFegMYoljfY7Wv6TKTc9zVaGOrTOMHQUTcPYtXHCPgQdAI/FKbQ/vvm/pKuND69kCWQQbpTV7N2drsmTxHKwr8FpS5DAf2h/BU95Q1HVsKkXshlmDddxpq3+SiE+eOYYRIzweDsgw2fwJjMwI/RkKsQfVSiR7bypyziRMmCBC0RAjqs+9Yfln93WeoRkeAF5XXJctn++wlLluJibjnBOL1YN7hujPekjeHztkH35YG9aLQdJE6EPduZmeuS2uWbbHgSS2A26KW1BYeOUsgdSStHkmz7N+dp6WdbyZpQNOmvi0qtumL/EPEm9EXoyVD5H+Q== 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=sgRcM+JNE9RzIFb7YqveIPNxcbH8HDMFxjModTnCUV8=; b=ddgGZgBBSoZqZvy3gU5KA0yN7L5JhuqQhlipdoKURPAZaY1mw0O4qGVdkg/SscIRS2N7/iUSBSu1jsgRV/d1bJnWU3j1isey1jTd5PmP+895c73EogDiyyUxe3vl7Gwud4jRPmsvgYzOPGmeb8FB3JbAJCjXuoMs6vA9lJVBjzIpYzgPPZUCszlDlpx7jcEg7TT5jYC/LOEmhnYBhN+ctvhzUnU5omkLlr1fz+lGEiJj0AaUU9YLr7yLC3tUVWwJQUUkROdib9XSWk3U9GovOQLIbyo6nE9BN88jVKEtvRLepCZYvT1aATfD8Iz4zQXWhWjd2gAdAv9ijNz3YwU8Lw== 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 SN7PR11MB7638.namprd11.prod.outlook.com (2603:10b6:806:34b::22) by MW4PR11MB6885.namprd11.prod.outlook.com (2603:10b6:303:21b::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.11; Tue, 26 May 2026 08:33:36 +0000 Received: from SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011]) by SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011%3]) with mapi id 15.21.0048.016; Tue, 26 May 2026 08:33:36 +0000 From: "Schimpe, Christina" To: Guinevere Larsen , "gdb-patches@sourceware.org" CC: Thiago Jung Bauermann Subject: RE: [PATCH v3 1/7] gdb/record: Refactor record history Thread-Topic: [PATCH v3 1/7] gdb/record: Refactor record history Thread-Index: AQHc5InzvkuFtAk9DkiViAE6g0SStrYWov2g Date: Tue, 26 May 2026 08:33:36 +0000 Message-ID: References: <20260515163706.3355686-1-guinevere@redhat.com> <20260515163706.3355686-2-guinevere@redhat.com> In-Reply-To: <20260515163706.3355686-2-guinevere@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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: SN7PR11MB7638:EE_|MW4PR11MB6885:EE_ x-ms-office365-filtering-correlation-id: 6a201e4b-ea8a-4798-a5dd-08debb017b0b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|10070799003|366016|376014|1800799024|18096099006|38070700021|17096099006|6133799003|3023799007|22082099003|56012099003|18002099003|4143699003|5023799004|11063799006; x-microsoft-antispam-message-info: x7idpbRQmV8Bvrhao242DvLi9gIa3z/JUdavvRx9ia150jLLARfDLUpzgsMEGMkwyH2m1nRNkfyveRDngegWBdIb2q2eqlYJr6a/rZ5a6PciGnKvHlIYtyTzH0d3DHIwlg/I6EwuqgOFsGi8KQSr1NcbJz3tq8tYaxeCaaJVoSqL42KC+u6xwYCTEm3MgHVfi2kCZz8Xu8BdfIAUEG8FnuczhB6MiUWpWDLbvUA6F2erPk9xO0wsBo6b8sBvqKVI8h45ERagSHWCPJuukU7MU/xkz32y/M3X6CKTut9YzDrWHstsgytrqb5eR2AI81xBgg6n1QH35eukcv3U3REwazHfTtCpcSrsQDUMN27LU0iuqFgmsHZ5R2fHyzXtx2oVOQHcYuCYUgbxO48l/KFIcPex1i+6tEcBxxe93uvS5qF4hcWTvJpn4E48kJNjflSAuJW4LBI1eIWkmLEKnLi9+1HdwqKFWqE2UHX23OFayqkfrJxDk7UyHBbj50Al1C1yse+zC8LW9ofV08g4Bx8xoRMgSLiN2J5385KADmadVWrmbDZ2E/p9UcnwerYBiQEy92ZL27BGAw1pT6GaxXUQt9X1nOZWc3jY38+4+3uegxCPCLaBV3BrDmyRoqi222MpIwKQjb1srlb42qFMjjbW78FvnLpVPh09OZZ14I+yeMOJs1+WVpd7eu3DuM9KoPIp0uXv1pK5Z5aYSQ0yHWMI3tvpr4xEpw7Q4GtA6zzG/+LWj6GaB5O1H6nALlADOuQH x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR11MB7638.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(10070799003)(366016)(376014)(1800799024)(18096099006)(38070700021)(17096099006)(6133799003)(3023799007)(22082099003)(56012099003)(18002099003)(4143699003)(5023799004)(11063799006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 2 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eHVkbU83b3MzNVdHYktzemhyZHFaQWd2Qkc0SklORlM4R1FUaDVYeTN3NlRy?= =?utf-8?B?RU01alR6RE5YbVFla3JHTVQ5UWlPVXpUQlp3RjA1bkdjb0QzMjNYMXBGbTlQ?= =?utf-8?B?UVo1Z2lVQ01xdzlTZTR6RXJranQ2RDg0YkJsVG9Jb2JEZXJ6RGRQMU9QeWdS?= =?utf-8?B?cGpzNGNhaHFCQTZWemw2WFB4eitPOWliQWdrSmt5M3U0QmE2RVRpQTZiYmMw?= =?utf-8?B?OHdITlVVVUErd1RGMEFQenVvQkh6cXlKL3dmOGFTYkM2WHhjNlg0UTJEL3hx?= =?utf-8?B?U3djaTFLNFViZ1BYOFpZUHM3OE5ZM3J6WlRlbGxDVXdybWFteFhXNVJHSG1B?= =?utf-8?B?VkdINGU3R2IzV3lhS3hyazAzUVBaTCtMaFk1QjA5QlhjU2trZzd0QkpTekhh?= =?utf-8?B?T3dEMllIMHA0V0k4N0RDSnpxRWt3eDlOZDFsQktuYlZwRTdQaHVaU2xQbm93?= =?utf-8?B?T1BWdUdaQk9yV1IrR0tDVnBSZk9GOC9IZVlyak00WVliT1AzdkVWU3BuaHJD?= =?utf-8?B?bURWTWJwQUNjY2QyOHNCeE9qWXhtK0RJUkVZVUoyLzZOTEF4Yk0zakdDOWdE?= =?utf-8?B?amtnRDRvbldrMXlJTFNGNGc4UExGeWpMY2lHcDZhdXFERDJRTDJpZ3l1aXRJ?= =?utf-8?B?TWs5aENkT0Zzc21rYmhTN1dYK1ZLYjFZbjFBS3N3MjJYNUdqZm90TmMyMExs?= =?utf-8?B?Q08zNDhVQ3UyWjA3UkExaTFFWlRPM0RDZ1RBZGozcDFuc3JhTVprUnYwTWx3?= =?utf-8?B?SGprZUxtdVBJaENJY3drRkdqYjRnUWxtMUFQY28yMjQvSXFaZnIrQ1I4cnZr?= =?utf-8?B?a3o4VzZtbGZKckJkNVBSRmw5RWViejFtMldUYlpweXA5cmNSY2FUK2NnWlVU?= =?utf-8?B?ZUxHWWNRMUcvb0dieVduWWM5aU5UWVh2NG5zWjZFbnJ5Y1VyekpJUS9mSjd1?= =?utf-8?B?UXhnNFgvUWhOV2RaSWc1QVNsYk9kbTZhZ2J5THpCMGNHa2gvb0J5Rmd1aHVM?= =?utf-8?B?MlBpVVB5YUQxelhIVGpPMnRFVng0UnNKSHRhWWtqV3luNGZrdHdXZnZ1a1lH?= =?utf-8?B?RjRGMzAwdEY0YUQ2ZXovMTdKOFNndUVaTWlSSXRhdmxKM1NldEQvQmFWMCtM?= =?utf-8?B?WTk0eUhvWERpa2Q0VzIyVGFGZVhyeG16NDB0UVlZcmFKc2F5citEbVVmWlRJ?= =?utf-8?B?WjZNVnEwZ3JveWhEUEZmc3VSNHQ4bVo0UVJNQkpBNFZ2TEE5dGZTQ0FtYVpy?= =?utf-8?B?U1VIZCs0SXRDSFNLNEZocHRqTXJwSGdLbVR5akVndnpha2JjWVBmZ0JUZTV2?= =?utf-8?B?ZnQwbi92WTBpTVRMSVhpQUVTVEY5clc1WnMwYkhESnA4MkxWQXkrZWNaMzNO?= =?utf-8?B?clhjL1kvSys4SGk0am9GRno0OW1FRHVKaDY0aXAyeFE1aTF2L3pMQ0ZNcFRI?= =?utf-8?B?V1NBNFYwZ1ovTy9yaGl1Z3RkOS8vMjJGeGMyK0VzN0M5aVpoUzRDSUJTTmto?= =?utf-8?B?dHlKOEZteU1acVRPNjJYUXdxNktJT1Y5WFkxVGhIS2VjcVdCb3VRenhmcXY3?= =?utf-8?B?Qi9ZVitTaGpkNmZJdXNsbDE1WnBmUkFwTUJLZmgySVU3c3NSRHUrY0FDWXU3?= =?utf-8?B?SkpXZzF2U3dxWWt1RzNmenlkWGJJMTNMT2R3Z00vSDlOR1pXYWtiRnZ2T1Np?= =?utf-8?B?alRRWjdWbXBTcDhNaVBiZ3hORjRjTCtkdzNHQVlhVTNQYlRoc1NXb3dINE42?= =?utf-8?B?YW1YQ21sVnhTUUc1SXdBUmVDK2Q2ZFhIWkJkUzJTbVk2WmUzbllqYXIrTDJt?= =?utf-8?B?ZUNmNzFFSmlpRVdUbnoxVEx5QVVkS1pMcDhsVDVZTS9zeU5Yc3FsK09Wd0N2?= =?utf-8?B?UkhJRk4wRTE2R2tFNW9iSG9oV1NBclRTc2Q5U25sSElmZ1ZUbm1kZGNCOHcy?= =?utf-8?B?WVlXYWo2czIwRndLWjVsWlhmT0dXM0ovQzZqTnh2NG9Yc0pUU09vYUl0Qms3?= =?utf-8?B?UFRrdlNZUHBNbGJ6RlgvaUxrdWlVaEVweEdKU2FhQU5rRHorYWJOd3VlaFg5?= =?utf-8?B?T1h6VURrWlQxRGI1MWpKRTFQblNpWmpJZEF1SXhXOEg5R2lYKzRiZVZXQzhk?= =?utf-8?B?M3BldkhPTXpDS3owNDVaSTFOSGNuWisySDNuZ0VqbHRoKzNYcmFmNTU3QzVQ?= =?utf-8?B?YTEvNTkvb2Rab2c3NUU4VVpKY0xoaU9GWm5uWGlpZmVrbGZvbGdWU01jZGd2?= =?utf-8?B?RVpxOFZpK2hyQmRnT2NoRjMzRW1vQ1dSdmxYS1l0c3dQbGdPU3VTNTdyL1hU?= =?utf-8?B?clFoMDNSb1NZRlk4ei9XUGpDd2FpUmpSVmh6TmxhS0VSODNrOCtJUGo2NHJR?= =?utf-8?Q?mRXc7KzZW+RA6S/owTwZUSfrCDtEj2JVlZtH5MzhDQGhV?= x-ms-exchange-antispam-messagedata-1: dNXogRwvAGmZ+A== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: JenL7HEwtt6x9Ag1oReRxKBxsdYn4rlHxoPi10eWRD2IUcNUmO6+keWzr9qDoC2t5IEnM2v49T+HNmJFU1Ayd7cEGbhNFbaCTYzPvgt3p7iltYstUK33kZWnmLOKtOFYQWzZVWP3j8ZhTf8ywFzZiNpX4oFRnYZiiVeVcakseoFTwrk6HfBuaASIEaa7YmPXYCdtz63KvzElmSMP3wxmgyMASdR7yeTGvrYeTwoMlusU3uek9aNWBpMWVy3luJNK5QFkrirNqq+Cnb7eXvDaTlNDBvQa8Ei4kFhbX6Gng8Uvl/SL7wW3AfFP+nT6iUaSO+IRPudNi+xbhla7AYZD+A== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7638.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a201e4b-ea8a-4798-a5dd-08debb017b0b X-MS-Exchange-CrossTenant-originalarrivaltime: 26 May 2026 08:33:36.6877 (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: yaaEdf7ZAPMbXpMs3Dcp9ZHXWUJfnJF5/NbYff4M6s3z2DBV6LtK08kgjNoy96MtRUb70Fvo7b6io8PW2CQEIwCcYQeTvNYDmkliCWJQQ2w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB6885 X-OriginatorOrg: intel.com Content-Transfer-Encoding: base64 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org SGkgR3VpbmV2ZXJlLA0KDQpQbGVhc2UgZmluZCBzb21lIGZ1cnRoZXIgY29tbWVudHMgYmVsb3cu DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogR3VpbmV2ZXJlIExhcnNl biA8Z3VpbmV2ZXJlQHJlZGhhdC5jb20+DQo+IFNlbnQ6IEZyZWl0YWcsIDE1LiBNYWkgMjAyNiAx ODozNw0KPiBUbzogZ2RiLXBhdGNoZXNAc291cmNld2FyZS5vcmcNCj4gQ2M6IEd1aW5ldmVyZSBM YXJzZW4gPGd1aW5ldmVyZUByZWRoYXQuY29tPjsgVGhpYWdvIEp1bmcgQmF1ZXJtYW5uDQo+IDx0 aGlhZ28uYmF1ZXJtYW5uQGxpbmFyby5vcmc+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MyAxLzddIGdk Yi9yZWNvcmQ6IFJlZmFjdG9yIHJlY29yZCBoaXN0b3J5DQo+IA0KPiBUaGlzIGlzIHRoZSBmaXJz dCBzdGVwIGluIGEgbGFyZ2UgcmVmYWN0b3IgaW4gaG93IEdEQiBrZWVwcyBleGVjdXRpb24NCj4g aGlzdG9yeS4gIFJhdGhlciB0aGFuIHVzaW5nIGEgbGlua2VkIGxpc3Qgd2hlcmUgbXVsdGlwbGUg ZW50cmllcyBjYW4NCj4gZGVzY3JpYmUgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24sIHRoZSBoaXN0b3J5 IHdpbGwgbm93IGJlIHN0b3JlZCBpbiBhbg0KPiBzdGQ6OmRlcXVlLCBlYWNoIGluc3RydWN0aW9u IGJlaW5nIG9uZSBlbnRyeSBpbiB0aGUgZGVxdWUuDQo+IA0KPiBUaGUgY2hvaWNlIHdhcyBpbml0 aWFsbHkgdG8gdXNlIGFuIHN0ZDo6dmVjdG9yLCBidXQgaXQgd291bGQgYmVjb21lDQo+IHVud2ll bGR5IGJlY2F1c2UgaXQgbmVlZHMgYWxsIHRoZSBtZW1vcnkgdG8gYmUgY29uc2VjdXRpdmUsIHdo aWNoIGlzDQo+IGhhcmQgZm9yIDIwMCB0aG91c2FuZCBlbnRyaWVzLiBEZXF1ZSB3YXMgcGlja2Vk IGJlY2F1c2UgaXQgd2FzIGEgbmljZQ0KPiBtaWRwb2ludCBiZXR3ZWVuIHZlY3RvciAobWF4aW11 bSBjYWNoZSBjb2hlc2lvbikgYW5kIGxpbmtlZCBsaXN0DQo+IChtYXhpbXVtIGVhc2Ugb2YgZmlu ZGluZyBzcGFjZSB0byBzdG9yZSBtb3JlKS4NCj4gDQo+IEVhY2ggaW5zdHJ1Y3Rpb24gaW4gbWVt b3J5IHdpbGwgYmUgbm93IG9uZSByZWNvcmRfZnVsbF9pbnN0cnVjdGlvbg0KPiBlbnRyeSwgd2hp Y2ggZm9yIHRoaXMgY29tbWl0IGp1c3QgY29udGFpbnMgYSB2ZWN0b3Igb2YNCj4gcmVjb3JkX2Z1 bGxfZW50cnkgZm9yIHRoZSBlZmZlY3RzIG9mIHRoZSBpbnN0cnVjdGlvbiwgYW5kIHRoZSBkYXRh IHRoYXQNCj4gd2FzIHN0b3JlZCBpbiB0aGUgcmVjb3JkX2Z1bGxfZW5kIGVudHJ5ICh0aGF0IGlz LCB0aGUgaW5zdHJ1Y3Rpb24gbnVtYmVyDQo+IGFuZCB0aGUgc2lnbmFsLCBpZiBhbnkpLg0KPiAN Cj4gVGhpcyBjaGFuZ2UgaW50cm9kdWNlZCBhIG1pbmltYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1l bnQgKHdoYXQncw0KPiBpbXBvcnRhbnQgaXMgdGhhdCBpdCBpc24ndCBhIGRlZ3JhZGF0aW9uKSBh bmQgYSAgcmVkdWN0aW9uIGluIHRoZSB0b3RhbA0KPiBtZW1vcnkgZm9vdHByaW50IG9mIHJvdWdo bHkgMjAlIGlmIHRoZSBlbnRpcmUgaGlzdG9yeSBpcyB1c2VkLg0KPiANCj4gUmV2aWV3ZWQtYnk6 IFRoaWFnbyBKdW5nIEJhdWVybWFubiA8dGhpYWdvLmJhdWVybWFubkBsaW5hcm8ub3JnPg0KPiAt LS0NCj4gIGdkYi9hYXJjaDY0LXRkZXAuYyAgICAgfCAgICAyIC0NCj4gIGdkYi9hbWQ2NC1saW51 eC10ZGVwLmMgfCAgICAzIC0NCj4gIGdkYi9hcm0tdGRlcC5jICAgICAgICAgfCAgICAyIC0NCj4g IGdkYi9pMzg2LWxpbnV4LXRkZXAuYyAgfCAgICAzIC0NCj4gIGdkYi9pMzg2LXRkZXAuYyAgICAg ICAgfCAgICA0IC0NCj4gIGdkYi9sb29uZ2FyY2gtdGRlcC5jICAgfCAgICAyIC0NCj4gIGdkYi9t b3hpZS10ZGVwLmMgICAgICAgfCAgICAyIC0NCj4gIGdkYi9wcGMtbGludXgtdGRlcC5jICAgfCAg ICAzIC0NCj4gIGdkYi9yZWNvcmQtZnVsbC5jICAgICAgfCAxMTg2ICsrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gIGdkYi9yZWNvcmQtZnVsbC5oICAgICAgfCAgICAx IC0NCj4gIGdkYi9yaXNjdi10ZGVwLmMgICAgICAgfCAgICAzIC0NCj4gIGdkYi9yczYwMDAtdGRl cC5jICAgICAgfCAgICA0IC0NCj4gIGdkYi9zMzkwLWxpbnV4LXRkZXAuYyAgfCAgICAzIC0NCj4g IGdkYi9zMzkwLXRkZXAuYyAgICAgICAgfCAgICAyIC0NCj4gIDE0IGZpbGVzIGNoYW5nZWQsIDQ4 NCBpbnNlcnRpb25zKCspLCA3MzYgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZ2Ri L2FhcmNoNjQtdGRlcC5jIGIvZ2RiL2FhcmNoNjQtdGRlcC5jDQo+IGluZGV4IDRiZWZhYTI3MjBk Li5hNTMyOTkyYjFkOCAxMDA2NDQNCj4gLS0tIGEvZ2RiL2FhcmNoNjQtdGRlcC5jDQo+ICsrKyBi L2dkYi9hYXJjaDY0LXRkZXAuYw0KPiBAQCAtNjIxMCw4ICs2MjEwLDYgQEAgYWFyY2g2NF9wcm9j ZXNzX3JlY29yZCAoc3RydWN0IGdkYmFyY2gNCj4gKmdkYmFyY2gsIHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsDQo+ICAJICAgICAgIGFhcmNoNjRfcmVjb3JkLmFhcmNoNjRfbWVtc1tyZWNfbm9d LmxlbikpDQo+ICAJICAgIHJldCA9IC0xOw0KPiANCj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9h cmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gLQlyZXQgPSAtMTsNCj4gICAgICB9DQo+IA0KPiAgICBk ZWFsbG9jYXRlX3JlZ19tZW0gKCZhYXJjaDY0X3JlY29yZCk7DQo+IGRpZmYgLS1naXQgYS9nZGIv YW1kNjQtbGludXgtdGRlcC5jIGIvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYw0KPiBpbmRleCBhNWFj MjY2NTRjZi4uOWIyM2RiNzJiYmUgMTAwNjQ0DQo+IC0tLSBhL2dkYi9hbWQ2NC1saW51eC10ZGVw LmMNCj4gKysrIGIvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYw0KPiBAQCAtMTU5MSw5ICsxNTkxLDYg QEAgYW1kNjRfbGludXhfcmVjb3JkX3NpZ25hbCAoc3RydWN0IGdkYmFyY2gNCj4gKmdkYmFyY2gs DQo+ICAJCQkJICAgICArIEFNRDY0X0xJTlVYX2ZyYW1lX3NpemUpKQ0KPiAgICAgIHJldHVybiAt MTsNCj4gDQo+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gLSAg ICByZXR1cm4gLTE7DQo+IC0NCj4gICAgcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiBkaWZmIC0tZ2l0 IGEvZ2RiL2FybS10ZGVwLmMgYi9nZGIvYXJtLXRkZXAuYw0KPiBpbmRleCAwOGNjZTlkYmFkOC4u MWNlMDkyN2YyNmIgMTAwNjQ0DQo+IC0tLSBhL2dkYi9hcm0tdGRlcC5jDQo+ICsrKyBiL2dkYi9h cm0tdGRlcC5jDQo+IEBAIC0xNDkxMSw4ICsxNDkxMSw2IEBAIGFybV9wcm9jZXNzX3JlY29yZCAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsDQo+IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+ ICAJICAgIH0NCj4gIAl9DQo+IA0KPiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfZW5kICgpKQ0KPiAtCXJldCA9IC0xOw0KPiAgICAgIH0NCj4gDQo+IA0KPiBkaWZmIC0tZ2l0 IGEvZ2RiL2kzODYtbGludXgtdGRlcC5jIGIvZ2RiL2kzODYtbGludXgtdGRlcC5jDQo+IGluZGV4 IDIzYWVjY2FjOWZjLi40ZjMzNzY2ZmNkZCAxMDA2NDQNCj4gLS0tIGEvZ2RiL2kzODYtbGludXgt dGRlcC5jDQo+ICsrKyBiL2dkYi9pMzg2LWxpbnV4LXRkZXAuYw0KPiBAQCAtOTQ5LDkgKzk0OSw2 IEBAIGkzODZfbGludXhfcmVjb3JkX3NpZ25hbCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsDQo+ ICAJCQkJICAgICBJMzg2X0xJTlVYX3hzdGF0ZSArDQo+IEkzODZfTElOVVhfZnJhbWVfc2l6ZSkp DQo+ICAgICAgcmV0dXJuIC0xOw0KPiANCj4gLSAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfZW5kICgpKQ0KPiAtICAgIHJldHVybiAtMTsNCj4gLQ0KPiAgICByZXR1cm4gMDsNCj4gIH0N Cj4gIA0KDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZ2RiL2kzODYtdGRlcC5jIGIvZ2RiL2kzODYtdGRl cC5jDQo+IGluZGV4IGZhOTM1YjVmY2RiLi5mZWUzNmI0NmE3MyAxMDA2NDQNCj4gLS0tIGEvZ2Ri L2kzODYtdGRlcC5jDQo+ICsrKyBiL2dkYi9pMzg2LXRkZXAuYw0KPiBAQCAtNTIwMSw4ICs1MjAx LDYgQEAgaTM4Nl9yZWNvcmRfdmV4IChzdHJ1Y3QgaTM4Nl9yZWNvcmRfcyAqaXIsIHVpbnQ4X3QN Cj4gdmV4X3csIHVpbnQ4X3QgdmV4X3IsDQo+ICAgICAgfQ0KPiANCj4gICAgcmVjb3JkX2Z1bGxf YXJjaF9saXN0X2FkZF9yZWcgKGlyLT5yZWdjYWNoZSwgaXItDQo+ID5yZWdtYXBbWDg2X1JFQ09S RF9SRUlQX1JFR05VTV0pOw0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQg KCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiANCj4gICAgcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC04 MzU5LDggKzgzNTcsNiBAQCBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpLA0KPiAN Cj4gICAgLyogSW4gdGhlIGZ1dHVyZSwgbWF5YmUgc3RpbGwgbmVlZCB0byBkZWFsIHdpdGggbmVl ZF9kYXNtLiAgKi8NCj4gICAgSTM4Nl9SRUNPUkRfRlVMTF9BUkNIX0xJU1RfQUREX1JFRyAoWDg2 X1JFQ09SRF9SRUlQX1JFR05VTSk7DQo+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRk X2VuZCAoKSkNCj4gLSAgICByZXR1cm4gLTE7DQo+IA0KPiAgICByZXR1cm4gMDsNCj4gDQo+IGRp ZmYgLS1naXQgYS9nZGIvbG9vbmdhcmNoLXRkZXAuYyBiL2dkYi9sb29uZ2FyY2gtdGRlcC5jDQo+ IGluZGV4IDIyNWIxYWJiNzAzLi41ZWM2YjJhNDhkMCAxMDA2NDQNCj4gLS0tIGEvZ2RiL2xvb25n YXJjaC10ZGVwLmMNCj4gKysrIGIvZ2RiL2xvb25nYXJjaC10ZGVwLmMNCj4gQEAgLTI3ODksOCAr Mjc4OSw2IEBAIGxvb25nYXJjaF9wcm9jZXNzX3JlY29yZCAoc3RydWN0IGdkYmFyY2gNCj4gKmdk YmFyY2gsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+ICAJCQkJCSBMT09OR0FSQ0hfUENf UkVHTlVNKSkNCj4gIAlyZXR1cm4gLTE7DQo+IA0KPiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF9hZGRfZW5kICgpKQ0KPiAtCXJldHVybiAtMTsNCj4gICAgICB9DQo+IA0KPiAgICBy ZXR1cm4gcmV0Ow0KPiBkaWZmIC0tZ2l0IGEvZ2RiL21veGllLXRkZXAuYyBiL2dkYi9tb3hpZS10 ZGVwLmMNCj4gaW5kZXggYzhhMDRkMjFmNTkuLjJmOGYwMTg2NDg4IDEwMDY0NA0KPiAtLS0gYS9n ZGIvbW94aWUtdGRlcC5jDQo+ICsrKyBiL2dkYi9tb3hpZS10ZGVwLmMNCj4gQEAgLTEwNDAsOCAr MTA0MCw2IEBAIG1veGllX3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwN Cj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gDQo+ICAgIGlmIChyZWNvcmRfZnVsbF9h cmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUsIE1PWElFX1BDX1JFR05VTSkpDQo+ICAgICAgcmV0 dXJuIC0xOw0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0g ICAgcmV0dXJuIC0xOw0KPiAgICByZXR1cm4gMDsNCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9n ZGIvcHBjLWxpbnV4LXRkZXAuYyBiL2dkYi9wcGMtbGludXgtdGRlcC5jDQo+IGluZGV4IDE5Njk4 ZWFhY2JlLi5lMmY1MzU1MTcwOSAxMDA2NDQNCj4gLS0tIGEvZ2RiL3BwYy1saW51eC10ZGVwLmMN Cj4gKysrIGIvZ2RiL3BwYy1saW51eC10ZGVwLmMNCj4gQEAgLTE1NjUsOSArMTU2NSw2IEBAIHBw Y19saW51eF9yZWNvcmRfc2lnbmFsIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gc3RydWN0 IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRf bWVtIChzcCwgU0lHTkFMX0ZSQU1FU0laRSArDQo+IHNpemVvZl9ydF9zaWdmcmFtZSkpDQo+ICAg ICAgcmV0dXJuIC0xOw0KPiANCj4gLSAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5k ICgpKQ0KPiAtICAgIHJldHVybiAtMTsNCj4gLQ0KPiAgICByZXR1cm4gMDsNCj4gIH0NCj4gDQo+ IGRpZmYgLS1naXQgYS9nZGIvcmVjb3JkLWZ1bGwuYyBiL2dkYi9yZWNvcmQtZnVsbC5jDQo+IGlu ZGV4IDY5ZDJjMTAwZTU3Li4wMmE1NzcyNmE5NSAxMDA2NDQNCj4gLS0tIGEvZ2RiL3JlY29yZC1m dWxsLmMNCj4gKysrIGIvZ2RiL3JlY29yZC1mdWxsLmMNCj4gQEAgLTQ3LDYgKzQ3LDkgQEANCj4g ICNpbmNsdWRlICJpbnRlcnBzLmgiDQo+ICAjaW5jbHVkZSAiY2xpL2NsaS1zdHlsZS5oIg0KPiAN Cj4gKyNpbmNsdWRlIDx2ZWN0b3I+DQo+ICsjaW5jbHVkZSA8b3B0aW9uYWw+DQo+ICsjaW5jbHVk ZSA8ZGVxdWU+DQo+ICAjaW5jbHVkZSA8c2lnbmFsLmg+DQo+IA0KPiAgLyogVGhpcyBtb2R1bGUg aW1wbGVtZW50cyAidGFyZ2V0IHJlY29yZC1mdWxsIiwgYWxzbyBrbm93biBhcyAicHJvY2Vzcw0K PiBAQCAtNzIsMjAgKzc1LDE3IEBADQo+ICAjZGVmaW5lIERFRkFVTFRfUkVDT1JEX0ZVTExfSU5T Tl9NQVhfTlVNCTIwMDAwMA0KPiANCj4gICNkZWZpbmUgUkVDT1JEX0ZVTExfSVNfUkVQTEFZIFwN Cj4gLSAgKHJlY29yZF9mdWxsX2xpc3QtPm5leHQgfHwgOjpleGVjdXRpb25fZGlyZWN0aW9uID09 IEVYRUNfUkVWRVJTRSkNCj4gKyAgKChyZWNvcmRfZnVsbF9uZXh0X2luc24gIT0gcmVjb3JkX2Z1 bGxfbGlzdC5zaXplICgpKSBcDQo+ICsgICAgfHwgOjpleGVjdXRpb25fZGlyZWN0aW9uID09IEVY RUNfUkVWRVJTRSkNCj4gDQo+ICAjZGVmaW5lIFJFQ09SRF9GVUxMX0ZJTEVfTUFHSUMJbmV0b3Jk ZXIzMigweDIwMDkxMDE2KQ0KPiANCj4gIC8qIFRoZXNlIGFyZSB0aGUgY29yZSBzdHJ1Y3RzIG9m IHRoZSBwcm9jZXNzIHJlY29yZCBmdW5jdGlvbmFsaXR5Lg0KPiANCj4gICAgIEEgcmVjb3JkX2Z1 bGxfZW50cnkgaXMgYSByZWNvcmQgb2YgdGhlIHZhbHVlIGNoYW5nZSBvZiBhIHJlZ2lzdGVyDQo+ IC0gICAoInJlY29yZF9mdWxsX3JlZyIpIG9yIGEgcGFydCBvZiBtZW1vcnkgKCJyZWNvcmRfZnVs bF9tZW0iKS4gIEFuZCBlYWNoDQo+IC0gICBpbnN0cnVjdGlvbiBtdXN0IGhhdmUgYSBzdHJ1Y3Qg cmVjb3JkX2Z1bGxfZW50cnkgKCJyZWNvcmRfZnVsbF9lbmQiKQ0KPiAtICAgdGhhdCBpbmRpY2F0 ZXMgdGhhdCB0aGlzIGlzIHRoZSBsYXN0IHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSBvZiB0aGlz DQo+IC0gICBpbnN0cnVjdGlvbi4NCj4gLQ0KPiAtICAgRWFjaCBzdHJ1Y3QgcmVjb3JkX2Z1bGxf ZW50cnkgaXMgbGlua2VkIHRvICJyZWNvcmRfZnVsbF9saXN0IiBieSAicHJldiINCj4gLSAgIGFu ZCAibmV4dCIgcG9pbnRlcnMuICAqLw0KPiArICAgKCJyZWNvcmRfZnVsbF9yZWciKSBvciBhIHBh cnQgb2YgbWVtb3J5ICgicmVjb3JkX2Z1bGxfbWVtIikuDQo+ICsgICBUaGVzZSBhcmUgc2F2ZWQg b24gdGhlIHJlY29yZF9mdWxsX2luc3RydWN0aW9uIHN0cnVjdCwgd2hpY2ggYWxzbw0KPiArICAg Y29udGFpbnMgc29tZSBleHRyYSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBkZWxpdmVyZWQgc2lnbmFs cy4gICovDQoNCk9wdGlvbmFsIHN1Z2dlc3Rpb24gKHNpbmNlIGl0IGhhcyBiZWVuIGxpa2UgdGhp cyBiZWZvcmUgYWxyZWFkeSk6DQoNClRoZSBkZXNjcmlwdGlvbiBmb3IgcmVjb3JkX2Z1bGxfZW50 cnkgaXMgbm90IGFib3ZlIHRoZSBhY3R1YWwgc3RydWN0IGFuZCB0aGUNCmZ1cnRoZXIgc3RydWN0 cyBtaXNzIGEgY29tbWVudC4gSW4gdGhlIGRlc2NyaXB0aW9uIGFib3ZlIHRoZSBlbnVtIHZhbHVl cw0KYXJlIGRlc2NyaWJlZCAnKCJyZWNvcmRfZnVsbF9yZWciKSBvciBhIHBhcnQgb2YgbWVtb3J5 ICgicmVjb3JkX2Z1bGxfbWVtIiknLA0KYnV0IG5vdCB0aGUgYWN0dWFsIHN0cnVjdHMuICBJIHRo aW5rIGl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gd3JpdGUgdGhpcyBvdXQgYSBiaXQgbW9yZSwgDQph ZGQgY29tbWVudHMgdG8gZWFjaCBzdHJ1Y3QgYW5kIG1vdmUgdGhlIG9uZSBmb3IgcmVjb3JkX2Z1 bGxfZW50cnkNCmFib3ZlIGl0cyBhY3R1YWwgc3RydWN0Lg0KR2l2ZW4gdGhhdCB0aGlzIGNvbW1p dCBpcyBhbHJlYWR5IGJpZyBlbm91Z2gsIGEgc2VwYXJhdGUgY29tbWl0IG1pZ2h0IGJlIGJldHRl ci4gDQoNCj4gIHN0cnVjdCByZWNvcmRfZnVsbF9tZW1fZW50cnkNCj4gIHsNCj4gQEAgLTExMiw0 NyArMTEyLDE0IEBAIHN0cnVjdCByZWNvcmRfZnVsbF9yZWdfZW50cnkNCj4gICAgfSB1Ow0KPiAg fTsNCj4gDQo+IC1zdHJ1Y3QgcmVjb3JkX2Z1bGxfZW5kX2VudHJ5DQo+IC17DQo+IC0gIGVudW0g Z2RiX3NpZ25hbCBzaWd2YWw7DQo+IC0gIFVMT05HRVNUIGluc25fbnVtOw0KPiAtfTsNCj4gLQ0K PiAgZW51bSByZWNvcmRfZnVsbF90eXBlDQo+ICB7DQo+IC0gIHJlY29yZF9mdWxsX2VuZCA9IDAs DQo+ICAgIHJlY29yZF9mdWxsX3JlZywNCj4gICAgcmVjb3JkX2Z1bGxfbWVtDQo+ICB9Ow0KPiAN Cj4gLS8qIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFrZXMgdXAgdGhlIGV4ZWN1 dGlvbiBsb2cuDQo+IC0NCj4gLSAgIFRoZSBleGVjdXRpb24gbG9nIGNvbnNpc3RzIG9mIGEgc2lu Z2xlIGxpbmtlZCBsaXN0IG9mIGVudHJpZXMNCj4gLSAgIG9mIHR5cGUgInN0cnVjdCByZWNvcmRf ZnVsbF9lbnRyeSIuICBJdCBpcyBkb3VibHkgbGlua2VkIHNvIHRoYXQgaXQNCj4gLSAgIGNhbiBi ZSB0cmF2ZXJzZWQgaW4gZWl0aGVyIGRpcmVjdGlvbi4NCj4gLQ0KPiAtICAgVGhlIHN0YXJ0IG9m IHRoZSBsaXN0IGlzIGFuY2hvcmVkIGJ5IGEgc3RydWN0IGNhbGxlZA0KPiAtICAgInJlY29yZF9m dWxsX2ZpcnN0Ii4gIFRoZSBwb2ludGVyICJyZWNvcmRfZnVsbF9saXN0IiBlaXRoZXIgcG9pbnRz DQo+IC0gICB0byB0aGUgbGFzdCBlbnRyeSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgbGlzdCAoaW4g cmVjb3JkIG1vZGUpLCBvciB0bw0KPiAtICAgdGhlIG5leHQgZW50cnkgaW4gdGhlIGxpc3QgdGhh dCB3aWxsIGJlIGV4ZWN1dGVkIChpbiByZXBsYXkgbW9kZSkuDQo+IC0NCj4gLSAgIEVhY2ggbGlz dCBlbGVtZW50IChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkpLCBpbiBhZGRpdGlvbiB0byBuZXh0 DQo+IC0gICBhbmQgcHJldiBwb2ludGVycywgY29uc2lzdHMgb2YgYSB1bmlvbiBvZiB0aHJlZSBl bnRyeSB0eXBlczogbWVtLA0KPiAtICAgcmVnLCBhbmQgZW5kLiAgQSBmaWVsZCBjYWxsZWQgInR5 cGUiIGRldGVybWluZXMgd2hpY2ggZW50cnkgdHlwZSBpcw0KPiAtICAgcmVwcmVzZW50ZWQgYnkg YSBnaXZlbiBsaXN0IGVsZW1lbnQuDQo+IC0NCj4gLSAgIEVhY2ggaW5zdHJ1Y3Rpb24gdGhhdCBp cyBhZGRlZCB0byB0aGUgZXhlY3V0aW9uIGxvZyBpcyByZXByZXNlbnRlZA0KPiAtICAgYnkgYSB2 YXJpYWJsZSBudW1iZXIgb2YgbGlzdCBlbGVtZW50cyAoJ2VudHJpZXMnKS4gIFRoZSBpbnN0cnVj dGlvbg0KPiAtICAgd2lsbCBoYXZlIG9uZSAicmVnIiBlbnRyeSBmb3IgZWFjaCByZWdpc3RlciB0 aGF0IGlzIGNoYW5nZWQgYnkNCj4gLSAgIGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24gKGluY2x1 ZGluZyB0aGUgUEMgaW4gZXZlcnkgY2FzZSkuICBJdA0KPiAtICAgd2lsbCBhbHNvIGhhdmUgb25l ICJtZW0iIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBjaGFuZ2UuICBGaW5hbGx5LA0KPiAtICAgZWFj aCBpbnN0cnVjdGlvbiB3aWxsIGhhdmUgYW4gImVuZCIgZW50cnkgdGhhdCBzZXBhcmF0ZXMgaXQg ZnJvbQ0KPiAtICAgdGhlIGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXh0IGluc3RydWN0 aW9uLiAgKi8NCj4gLQ0KPiAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5DQo+ICB7DQo+IC0gIHN0 cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcHJldjsNCj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2Vu dHJ5ICpuZXh0Ow0KPiAgICBlbnVtIHJlY29yZF9mdWxsX3R5cGUgdHlwZTsNCj4gICAgdW5pb24N Cj4gICAgew0KPiBAQCAtMTYwLDExICsxMjcsMzEgQEAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5 DQo+ICAgICAgc3RydWN0IHJlY29yZF9mdWxsX3JlZ19lbnRyeSByZWc7DQo+ICAgICAgLyogbWVt ICovDQo+ICAgICAgc3RydWN0IHJlY29yZF9mdWxsX21lbV9lbnRyeSBtZW07DQo+IC0gICAgLyog ZW5kICovDQo+IC0gICAgc3RydWN0IHJlY29yZF9mdWxsX2VuZF9lbnRyeSBlbmQ7DQo+ICAgIH0g dTsNCj4gIH07DQo+IA0KPiArLyogVGhpcyBpcyB0aGUgbWFpbiBzdHJ1Y3R1cmUgdGhhdCBjb21w cmlzZXMgdGhlIGV4ZWN1dGlvbiBsb2cuDQo+ICsgICBFYWNoIGluc3RydWN0aW9uIGlzIGNvbXBy aXNlZCBvZjoNCj4gKyAgICogVGhlIGluc3RydWN0aW9uIG51bWJlcjogSG93IG1hbnkgaW5zdHJ1 Y3Rpb25zIHdlcmUgcmVjb3JkZWQgYmVmb3JlDQo+ICsgICAgIHRoaXMgb25lOw0KPiArICAgKiBz aWd2YWw6IFdoZXRoZXIgdGhlIGluZmVyaW9yIHJlY2VpdmVkIGEgc2lnbmFsIHdoaWxlIHRoZSBm b2xsb3dpbmcNCj4gKyAgICAgaW5zdHJ1Y3Rpb24gd2FzIGJlaW5nIHJlY29yZGVkOw0KPiArICAg KiBlZmZlY3RzOiBBIGxpc3Qgb2YgcmVjb3JkX2Z1bGxfZW50cnkgc3RydWN0dXJlcywgZWFjaCBv ZiB3aGljaA0KPiArICAgICBkZXNjcmliaW5nIG9uZSBlZmZlY3QgdGhhdCB0aGUgaW5zdHJ1Y3Rp b24gaGFzIG9uIHRoZSBpbmZlcmlvci4NCj4gKw0KPiArICAgTm90ZSwgdGhlIHNpZ25hbCBpcyBz dG9yZWQgaW4gdGhlIHByZXZpb3VzIGluc3RydWN0aW9uIGZvciBoaXN0b3JpY2FsDQo+ICsgICBy ZWFzb25zLiAgVGhpcyBpcyBob3cgaXQgd2FzIGZpcnN0IGltcGxlbWVudGVkLCBhbmQgbm8gb25l IGhhcyBnb3R0ZW4NCj4gKyAgIGFyb3VuZCB0byBjaGFuZ2luZyBpdCB5ZXQuICAqLw0KPiArDQo+ ICtzdHJ1Y3QgcmVjb3JkX2Z1bGxfaW5zdHJ1Y3Rpb24NCj4gK3sNCj4gKyAgLyogVGhpcyBtaWdo dCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5kZXggaWYNCj4gKyAgICAgd2UgaGFkIHRvIHJlbW92 ZSB0aGUgZmlyc3QgZmV3IGluc3RydWN0aW9ucy4gICovDQo+ICsgIHVpbnQzMl90IGluc25fbnVt Ow0KPiArICBzdGQ6Om9wdGlvbmFsPGdkYl9zaWduYWw+IHNpZ3ZhbDsNCj4gKyAgc3RkOjp2ZWN0 b3I8cmVjb3JkX2Z1bGxfZW50cnk+IGVmZmVjdHM7DQo+ICt9Ow0KPiArDQo+ICAvKiBJZiB0cnVl LCBxdWVyeSBpZiBQUkVDIGNhbm5vdCByZWNvcmQgbWVtb3J5DQo+ICAgICBjaGFuZ2Ugb2YgbmV4 dCBpbnN0cnVjdGlvbi4gICovDQo+ICBib29sIHJlY29yZF9mdWxsX21lbW9yeV9xdWVyeSA9IGZh bHNlOw0KPiBAQCAtMTgxLDI3ICsxNjgsMjUgQEAgc3RhdGljIGRldGFjaGVkX3JlZ2NhY2hlDQo+ ICpyZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiA9IE5VTEw7DQo+ICBzdGF0aWMgc3RkOjp2ZWN0b3I8 dGFyZ2V0X3NlY3Rpb24+IHJlY29yZF9mdWxsX2NvcmVfc2VjdGlvbnM7DQo+ICBzdGF0aWMgc3Ry dWN0IHJlY29yZF9mdWxsX2NvcmVfYnVmX2VudHJ5ICpyZWNvcmRfZnVsbF9jb3JlX2J1Zl9saXN0 ID0gTlVMTDsNCj4gDQo+IC0vKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgdXNlZCBmb3Ig bWFuYWdpbmcgdGhlIGxpbmtlZCBsaXN0IHRoYXQNCj4gLSAgIHJlcHJlc2VudHMgdGhlIGV4ZWN1 dGlvbiBsb2cuDQo+ICsvKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgdXNlZCBmb3IgbWFu YWdpbmcgdGhlIGhpc3Rvcnkgb2YgZXhlY3V0ZWQNCj4gKyAgIGluc3RydWN0aW9ucyBmcm9tIHRo ZSBpbmZlcmlvci4NCj4gDQo+IC0gICByZWNvcmRfZnVsbF9maXJzdCBpcyB0aGUgYW5jaG9yIHRo YXQgaG9sZHMgZG93biB0aGUgYmVnaW5uaW5nIG9mDQo+IC0gICB0aGUgbGlzdC4NCj4gKyAgIHJl Y29yZF9mdWxsX2xpc3QgY29udGFpbnMgYWxsIGluc3RydWN0aW9ucyB0aGF0IHdlcmUgZnVsbHkg ZXhlY3V0ZWQgYW5kDQo+ICsgICBzYXZlZCB0byB0aGUgbG9nLCBzbyB0aGF0IHdlIGNhbiByZXBs YXkgdGhlIGV4ZWN1dGlvbi4NCj4gDQo+IC0gICByZWNvcmRfZnVsbF9saXN0IHNlcnZlcyB0d28g ZnVuY3Rpb25zOg0KPiAtICAgICAxKSBJbiByZWNvcmQgbW9kZSwgaXQgYW5jaG9ycyB0aGUgZW5k IG9mIHRoZSBsaXN0Lg0KPiAtICAgICAyKSBJbiByZXBsYXkgbW9kZSwgaXQgdHJhdmVyc2VzIHRo ZSBsaXN0IGFuZCBwb2ludHMgdG8NCj4gLQl0aGUgbmV4dCBpbnN0cnVjdGlvbiB0aGF0IG11c3Qg YmUgZW11bGF0ZWQuDQo+ICsgICByZWNvcmRfZnVsbF9uZXh0X2luc24gYWx3YXlzIHBvaW50cyB0 byB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0aGF0IHdvdWxkDQo+ICsgICBiZSBleGVjdXRlZCBpZiB0 aGUgaW5mZXJpb3IgZXhlY3V0ZXMgZm9yd2FyZC4gIEluIHRoZSBzcGVjaWFsIGNhc2Ugd2hlbg0K PiArICAgdGhlIGluZmVyaW9yIGlzIG5vdCByZXBsYXlpbmcsIHJlY29yZF9mdWxsX25leHRfaW5z biBwb2ludHMgcGFzdCB0aGUNCj4gKyAgIGVuZCBvZiB0aGUgaGlzdG9yeS4NCj4gDQo+IC0gICBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCBhbmQgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwg YXJlIHVzZWQNCj4gLSAgIHRvIG1hbmFnZSBhIHNlcGFyYXRlIGxpc3QsIHdoaWNoIGlzIHVzZWQg dG8gYnVpbGQgdXAgdGhlIGNoYW5nZQ0KPiAtICAgZWxlbWVudHMgb2YgdGhlIGN1cnJlbnRseSBl eGVjdXRpbmcgaW5zdHJ1Y3Rpb24gZHVyaW5nIHJlY29yZCBtb2RlLg0KPiAtICAgV2hlbiB0aGlz IGluc3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlbHkgYW5ub3RhdGVkIGluIHRoZSAiYXJjaA0K PiAtICAgbGlzdCIsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIG1haW4gZXhlY3V0aW9uIGxv Zy4gICovDQo+ICsgICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uIGhvbGRzIGEg cGFydGlhbCBpbnN0cnVjdGlvbiwgd2hpbGUNCj4gKyAgIHRoZSBsb3dlciB0YXJnZXQgaXMgZGlz YXNzZW1ibGluZyB0aGUgaW5zdHJ1Y3Rpb24sIG9yIGFzIHBhcnRpYWwgeGZlcnMgYXJlDQo+ICsg ICBoYXBwZW5pbmcuICBJdCBpcyBtYW5pcHVsYXRlZCBieSB0aGUgImFyY2ggbGlzdCIgZnVuY3Rp b25zIGZvciBoaXN0b3JpY2FsDQo+ICsgICByZWFzb25zLiAgKi8NCj4gDQo+IC1zdGF0aWMgc3Ry dWN0IHJlY29yZF9mdWxsX2VudHJ5IHJlY29yZF9mdWxsX2ZpcnN0Ow0KPiAtc3RhdGljIHN0cnVj dCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjb3JkX2Z1bGxfbGlzdCA9ICZyZWNvcmRfZnVsbF9maXJz dDsNCj4gLXN0YXRpYyBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlY29yZF9mdWxsX2FyY2hf bGlzdF9oZWFkID0gTlVMTDsNCj4gLXN0YXRpYyBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJl Y29yZF9mdWxsX2FyY2hfbGlzdF90YWlsID0gTlVMTDsNCj4gK3N0YXRpYyBzdGQ6OmRlcXVlPHJl Y29yZF9mdWxsX2luc3RydWN0aW9uPiByZWNvcmRfZnVsbF9saXN0Ow0KPiArc3RhdGljIHJlY29y ZF9mdWxsX2luc3RydWN0aW9uIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb247DQo+ ICtzdGF0aWMgaW50IHJlY29yZF9mdWxsX25leHRfaW5zbjsNCj4gDQo+ICAvKiB0cnVlIGFzayB1 c2VyLiBmYWxzZSBhdXRvIGRlbGV0ZSB0aGUgbGFzdCBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnku ICAqLw0KPiAgc3RhdGljIGJvb2wgcmVjb3JkX2Z1bGxfc3RvcF9hdF9saW1pdCA9IHRydWU7DQo+ IEBAIC0zNjEsNiArMzQ2LDE0IEBAIHJlY29yZF9mdWxsX3RhcmdldDo6a2lsbCAoKQ0KPiAgICBy ZWNvcmRfa2lsbCAodGhpcyk7DQo+ICB9DQoNClRoaXMgIGZ1bmN0aW9uIGlzIHN0aWxsIG1pc3Np bmcgYSBjb21tZW50Lg0KDQo+ICtzdGF0aWMgdm9pZA0KPiArcmVjb3JkX2Z1bGxfcmVzZXRfaW5j b21wbGV0ZSAoKQ0KPiArew0KPiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9u LmVmZmVjdHMuY2xlYXIgKCk7DQo+ICsgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rp b24uc2lndmFsLnJlc2V0ICgpOw0KPiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0 aW9uLmluc25fbnVtID0gMDsNCj4gK30NCj4gKw0KPiAgLyogU2VlIHJlY29yZC1mdWxsLmguICAq Lw0KPiANCj4gIGludA0KPiBAQCAtMzkwLDE1NiArMzgzLDEyNCBAQCBzdGF0aWMgc3RydWN0IGNt ZF9saXN0X2VsZW1lbnQNCj4gKnNob3dfcmVjb3JkX2Z1bGxfY21kbGlzdDsNCj4gIC8qIENvbW1h bmQgbGlzdCBmb3IgInJlY29yZCBmdWxsIi4gICovDQo+ICBzdGF0aWMgc3RydWN0IGNtZF9saXN0 X2VsZW1lbnQgKnJlY29yZF9mdWxsX2NtZGxpc3Q7DQo+IA0KPiAtc3RhdGljIHZvaWQgcmVjb3Jk X2Z1bGxfZ290b19pbnNuIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmVudHJ5LA0KPiArc3Rh dGljIHZvaWQgcmVjb3JkX2Z1bGxfZ290b19pbnNuIChzaXplX3QgdGFyZ2V0X2luc24sDQo+ICAJ CQkJICAgZW51bSBleGVjX2RpcmVjdGlvbl9raW5kIGRpcik7DQoNCklzIHRoaXMgc29tZSBnZW5l cmFsIGd1aWRlbGluZSB0byBjYWxsIHRoaXMgY2xlYW51cC9pbml0IGluc3RlYWQgb2YgcmVsZWFz ZS9hbGxvYyA/DQpTaW5jZSB0aGlzIHBhdGNoIGlzIGFscmVhZHkgc28gYmlnLCBJIGp1c3Qgd29u ZGVyIHdoeSB5b3UgY2hhbmdlZCBpdC4g8J+Yig0KDQo+IC0vKiBBbGxvYyBhbmQgZnJlZSBmdW5j dGlvbnMgZm9yIHJlY29yZF9mdWxsX3JlZywgcmVjb3JkX2Z1bGxfbWVtLCBhbmQNCj4gLSAgIHJl Y29yZF9mdWxsX2VuZCBlbnRyaWVzLiAgKi8NCj4gKy8qIEluaXRpYWxpemF0aW9uIGFuZCBjbGVh bnVwIGZ1bmN0aW9ucyBmb3IgcmVjb3JkX2Z1bGxfcmVnIGFuZA0KPiArICAgcmVjb3JkX2Z1bGxf bWVtIGVudHJpZXMuICAqLw0KPiANCj4gLS8qIEFsbG9jIGEgcmVjb3JkX2Z1bGxfcmVnIHJlY29y ZCBlbnRyeS4gICovDQo+ICsvKiBJbml0IGEgcmVjb3JkX2Z1bGxfcmVnIHJlY29yZCBlbnRyeS4g ICovDQo+IA0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKg0KPiAt cmVjb3JkX2Z1bGxfcmVnX2FsbG9jIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVn bnVtKQ0KPiArc3RhdGljIGlubGluZSByZWNvcmRfZnVsbF9lbnRyeQ0KPiArcmVjb3JkX2Z1bGxf cmVnX2luaXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ICB7DQo+ IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiArICByZWNvcmRfZnVsbF9lbnRy eSByZWM7DQo+ICAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7 DQo+IA0KPiAtICByZWMgPSBYQ05FVyAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5KTsNCj4gLSAg cmVjLT50eXBlID0gcmVjb3JkX2Z1bGxfcmVnOw0KPiAtICByZWMtPnUucmVnLm51bSA9IHJlZ251 bTsNCj4gLSAgcmVjLT51LnJlZy5sZW4gPSByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCByZWdudW0p Ow0KPiAtICBpZiAocmVjLT51LnJlZy5sZW4gPiBzaXplb2YgKHJlYy0+dS5yZWcudS5idWYpKQ0K PiAtICAgIHJlYy0+dS5yZWcudS5wdHIgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAocmVjLT51LnJl Zy5sZW4pOw0KPiArICByZWMudHlwZSA9IHJlY29yZF9mdWxsX3JlZzsNCj4gKyAgcmVjLnUucmVn Lm51bSA9IHJlZ251bTsNCj4gKyAgcmVjLnUucmVnLmxlbiA9IHJlZ2lzdGVyX3NpemUgKGdkYmFy Y2gsIHJlZ251bSk7DQo+ICsgIGlmIChyZWMudS5yZWcubGVuID4gc2l6ZW9mIChyZWMudS5yZWcu dS5idWYpKQ0KPiArICAgIHJlYy51LnJlZy51LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChy ZWMudS5yZWcubGVuKTsNCj4gDQo+ICAgIHJldHVybiByZWM7DQo+ICB9DQo+IA0KPiAtLyogRnJl ZSBhIHJlY29yZF9mdWxsX3JlZyByZWNvcmQgZW50cnkuICAqLw0KPiArLyogQ2xlYW51cCBhIHJl Y29yZF9mdWxsX3JlZyByZWNvcmQgZW50cnkuICAqLw0KPiANCj4gIHN0YXRpYyBpbmxpbmUgdm9p ZA0KPiAtcmVjb3JkX2Z1bGxfcmVnX3JlbGVhc2UgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAq cmVjKQ0KPiArcmVjb3JkX2Z1bGxfcmVnX2NsZWFudXAgKHJlY29yZF9mdWxsX2VudHJ5IHJlYykN Cj4gIHsNCj4gLSAgZ2RiX2Fzc2VydCAocmVjLT50eXBlID09IHJlY29yZF9mdWxsX3JlZyk7DQo+ IC0gIGlmIChyZWMtPnUucmVnLmxlbiA+IHNpemVvZiAocmVjLT51LnJlZy51LmJ1ZikpDQo+IC0g ICAgeGZyZWUgKHJlYy0+dS5yZWcudS5wdHIpOw0KPiAtICB4ZnJlZSAocmVjKTsNCj4gKyAgZ2Ri X2Fzc2VydCAocmVjLnR5cGUgPT0gcmVjb3JkX2Z1bGxfcmVnKTsNCj4gKyAgaWYgKHJlYy51LnJl Zy5sZW4gPiBzaXplb2YgKHJlYy51LnJlZy51LmJ1ZikpDQo+ICsgICAgeGZyZWUgKHJlYy51LnJl Zy51LnB0cik7DQo+ICB9DQo+IA0KPiAtLyogQWxsb2MgYSByZWNvcmRfZnVsbF9tZW0gcmVjb3Jk IGVudHJ5LiAgKi8NCj4gKy8qIEluaXQgYSByZWNvcmRfZnVsbF9tZW0gcmVjb3JkIGVudHJ5LiAg Ki8NCj4gDQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqDQo+IC1y ZWNvcmRfZnVsbF9tZW1fYWxsb2MgKENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKQ0KPiArc3RhdGlj IGlubGluZSByZWNvcmRfZnVsbF9lbnRyeQ0KPiArcmVjb3JkX2Z1bGxfbWVtX2luaXQgKENPUkVf QUREUiBhZGRyLCBpbnQgbGVuKQ0KPiAgew0KPiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkg KnJlYzsNCj4gKyAgcmVjb3JkX2Z1bGxfZW50cnkgcmVjOw0KPiANCj4gLSAgcmVjID0gWENORVcg KHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSk7DQo+IC0gIHJlYy0+dHlwZSA9IHJlY29yZF9mdWxs X21lbTsNCj4gLSAgcmVjLT51Lm1lbS5hZGRyID0gYWRkcjsNCj4gLSAgcmVjLT51Lm1lbS5sZW4g PSBsZW47DQo+IC0gIGlmIChyZWMtPnUubWVtLmxlbiA+IHNpemVvZiAocmVjLT51Lm1lbS51LmJ1 ZikpDQo+IC0gICAgcmVjLT51Lm1lbS51LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChsZW4p Ow0KPiArICByZWMudHlwZSA9IHJlY29yZF9mdWxsX21lbTsNCj4gKyAgcmVjLnUubWVtLmFkZHIg PSBhZGRyOw0KPiArICByZWMudS5tZW0ubGVuID0gbGVuOw0KPiArICBpZiAocmVjLnUubWVtLmxl biA+IHNpemVvZiAocmVjLnUubWVtLnUuYnVmKSkNCj4gKyAgICByZWMudS5tZW0udS5wdHIgPSAo Z2RiX2J5dGUgKikgeG1hbGxvYyAobGVuKTsNCj4gKyAgcmVjLnUubWVtLm1lbV9lbnRyeV9ub3Rf YWNjZXNzaWJsZSA9IDA7DQo+IA0KPiAgICByZXR1cm4gcmVjOw0KPiAgfQ0KPiANCj4gLS8qIEZy ZWUgYSByZWNvcmRfZnVsbF9tZW0gcmVjb3JkIGVudHJ5LiAgKi8NCj4gKy8qIENsZWFudXAgYSBy ZWNvcmRfZnVsbF9tZW0gcmVjb3JkIGVudHJ5LiAgKi8NCj4gDQo+ICBzdGF0aWMgaW5saW5lIHZv aWQNCj4gLXJlY29yZF9mdWxsX21lbV9yZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkg KnJlYykNCj4gK3JlY29yZF9mdWxsX21lbV9jbGVhbnVwIChyZWNvcmRfZnVsbF9lbnRyeSByZWMp DQo+ICB7DQo+IC0gIGdkYl9hc3NlcnQgKHJlYy0+dHlwZSA9PSByZWNvcmRfZnVsbF9tZW0pOw0K PiAtICBpZiAocmVjLT51Lm1lbS5sZW4gPiBzaXplb2YgKHJlYy0+dS5tZW0udS5idWYpKQ0KPiAt ICAgIHhmcmVlIChyZWMtPnUubWVtLnUucHRyKTsNCj4gLSAgeGZyZWUgKHJlYyk7DQo+ICsgIGdk Yl9hc3NlcnQgKHJlYy50eXBlID09IHJlY29yZF9mdWxsX21lbSk7DQo+ICsgIGlmIChyZWMudS5t ZW0ubGVuID4gc2l6ZW9mIChyZWMudS5tZW0udS5idWYpKQ0KPiArICAgIHhmcmVlIChyZWMudS5t ZW0udS5wdHIpOw0KPiAgfQ0KPiANCj4gLS8qIEFsbG9jIGEgcmVjb3JkX2Z1bGxfZW5kIHJlY29y ZCBlbnRyeS4gICovDQo+IC0NCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlY29yZF9mdWxsX2Vu dHJ5ICoNCj4gLXJlY29yZF9mdWxsX2VuZF9hbGxvYyAodm9pZCkNCj4gLXsNCj4gLSAgc3RydWN0 IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+IC0NCj4gLSAgcmVjID0gWENORVcgKHN0cnVjdCBy ZWNvcmRfZnVsbF9lbnRyeSk7DQo+IC0gIHJlYy0+dHlwZSA9IHJlY29yZF9mdWxsX2VuZDsNCj4g LQ0KPiAtICByZXR1cm4gcmVjOw0KPiAtfQ0KPiAtDQo+IC0vKiBGcmVlIGEgcmVjb3JkX2Z1bGxf ZW5kIHJlY29yZCBlbnRyeS4gICovDQo+ICsvKiBGcmVlIG9uZSByZWNvcmQgZW50cnksIGFueSB0 eXBlLiAgKi8NCj4gDQo+ICBzdGF0aWMgaW5saW5lIHZvaWQNCj4gLXJlY29yZF9mdWxsX2VuZF9y ZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gK3JlY29yZF9mdWxsX2Vu dHJ5X2NsZWFudXAgKHJlY29yZF9mdWxsX2VudHJ5IHJlYykNCj4gIHsNCj4gLSAgeGZyZWUgKHJl Yyk7DQo+IC19DQo+IC0NCj4gLS8qIEZyZWUgb25lIHJlY29yZCBlbnRyeSwgYW55IHR5cGUuDQo+ IC0gICBSZXR1cm4gZW50cnktPnR5cGUsIGluIGNhc2UgY2FsbGVyIHdhbnRzIHRvIGtub3cuICAq Lw0KPiANCj4gLXN0YXRpYyBpbmxpbmUgZW51bSByZWNvcmRfZnVsbF90eXBlDQo+IC1yZWNvcmRf ZnVsbF9lbnRyeV9yZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gLXsN Cj4gLSAgZW51bSByZWNvcmRfZnVsbF90eXBlIHR5cGUgPSByZWMtPnR5cGU7DQo+IC0NCj4gLSAg c3dpdGNoICh0eXBlKSB7DQo+ICsgIHN3aXRjaCAocmVjLnR5cGUpIHsNCj4gICAgY2FzZSByZWNv cmRfZnVsbF9yZWc6DQo+IC0gICAgcmVjb3JkX2Z1bGxfcmVnX3JlbGVhc2UgKHJlYyk7DQo+ICsg ICAgcmVjb3JkX2Z1bGxfcmVnX2NsZWFudXAgKHJlYyk7DQo+ICAgICAgYnJlYWs7DQo+ICAgIGNh c2UgcmVjb3JkX2Z1bGxfbWVtOg0KPiAtICAgIHJlY29yZF9mdWxsX21lbV9yZWxlYXNlIChyZWMp Ow0KPiAtICAgIGJyZWFrOw0KPiAtICBjYXNlIHJlY29yZF9mdWxsX2VuZDoNCj4gLSAgICByZWNv cmRfZnVsbF9lbmRfcmVsZWFzZSAocmVjKTsNCj4gKyAgICByZWNvcmRfZnVsbF9tZW1fY2xlYW51 cCAocmVjKTsNCj4gICAgICBicmVhazsNCj4gICAgfQ0KPiAtICByZXR1cm4gdHlwZTsNCj4gIH0N Cj4gDQo+IC0vKiBGcmVlIGFsbCByZWNvcmQgZW50cmllcyBpbiBsaXN0IHBvaW50ZWQgdG8gYnkg UkVDLiAgKi8NCj4gLQ0KPiAgc3RhdGljIHZvaWQNCj4gLXJlY29yZF9mdWxsX2xpc3RfcmVsZWFz ZSAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ICtyZWNvcmRfZnVsbF9yZXNldF9o aXN0b3J5ICgpDQo+ICB7DQo+IC0gIGlmICghcmVjKQ0KPiAtICAgIHJldHVybjsNCj4gLQ0KPiAt ICB3aGlsZSAocmVjLT5uZXh0KQ0KPiAtICAgIHJlYyA9IHJlYy0+bmV4dDsNCj4gKyAgcmVjb3Jk X2Z1bGxfaW5zbl9udW0gPSAwOw0KPiArICByZWNvcmRfZnVsbF9pbnNuX2NvdW50ID0gMDsNCj4g KyAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuID0gMDsNCj4gDQo+IC0gIHdoaWxlIChyZWMtPnByZXYp DQo+ICsgIGZvciAoYXV0byAmaW5zbiA6IHJlY29yZF9mdWxsX2xpc3QpDQo+ICAgICAgew0KPiAt ICAgICAgcmVjID0gcmVjLT5wcmV2Ow0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZW50cnlfcmVsZWFz ZSAocmVjLT5uZXh0KTsNCj4gKyAgICAgIGZvciAoYXV0byAmZW50cnkgOiBpbnNuLmVmZmVjdHMp DQo+ICsJcmVjb3JkX2Z1bGxfZW50cnlfY2xlYW51cCAoZW50cnkpOw0KPiAgICAgIH0NCj4gDQo+ IC0gIGlmIChyZWMgPT0gJnJlY29yZF9mdWxsX2ZpcnN0KQ0KPiArICByZWNvcmRfZnVsbF9saXN0 LmNsZWFyICgpOw0KPiArfQ0KDQpUaGlzIGZ1bmN0aW9uIGlzIG1pc3NpbmcgYSBjb21tZW50Lg0K DQo+ICtzdGF0aWMgdm9pZA0KPiArcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAo aW50IGluZGV4KQ0KPiArew0KPiArICBmb3IgKGludCBpID0gcmVjb3JkX2Z1bGxfbGlzdC5zaXpl ICgpIC0gMTsgaSA+IGluZGV4OyBpLS0pDQo+ICAgICAgew0KPiAtICAgICAgcmVjb3JkX2Z1bGxf aW5zbl9udW0gPSAwOw0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZmlyc3QubmV4dCA9IE5VTEw7DQo+ ICsgICAgICBmb3IgKGF1dG8gJmVudHJ5IDogcmVjb3JkX2Z1bGxfbGlzdFtpXS5lZmZlY3RzKQ0K PiArCXJlY29yZF9mdWxsX2VudHJ5X2NsZWFudXAgKGVudHJ5KTsNCj4gKyAgICAgIHJlY29yZF9m dWxsX2xpc3QucG9wX2JhY2sgKCk7DQo+ICAgICAgfQ0KPiAtICBlbHNlDQo+IC0gICAgcmVjb3Jk X2Z1bGxfZW50cnlfcmVsZWFzZSAocmVjKTsNCj4gKyAgLyogU2V0IHRoZSBuZXh0IGluc3RydWN0 aW9uIHRvIGJlIHBhc3QgdGhlIGVuZCBvZiB0aGUgbG9nIHNvIHdlDQo+ICsgICAgIHN0YXJ0IHJl Y29yZGluZyBpZiB0aGUgdXNlciBtb3ZlcyBmb3J3YXJkIGFnYWluLiAgKi8NCj4gKyAgcmVjb3Jk X2Z1bGxfbmV4dF9pbnNuID0gaW5kZXg7DQo+ICB9DQo+IA0KPiAtLyogRnJlZSBhbGwgcmVjb3Jk IGVudHJpZXMgZm9yd2FyZCBvZiB0aGUgZ2l2ZW4gbGlzdCBwb3NpdGlvbi4gICovDQo+ICsvKiBT YXZlIHRoZSBpbmNvbXBsZXRlIGluc3RydWN0aW9uIGluIHRoZSBsb2cuICAqLw0KPiANCj4gIHN0 YXRpYyB2b2lkDQo+IC1yZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChzdHJ1Y3Qg cmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gK3JlY29yZF9mdWxsX3NhdmVfaW5zdHJ1Y3Rpb24g KCkNCj4gIHsNCj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICp0bXAgPSByZWMtPm5leHQ7 DQo+ICsgICsrcmVjb3JkX2Z1bGxfaW5zbl9jb3VudDsNCj4gKyAgcmVjb3JkX2Z1bGxfaW5jb21w bGV0ZV9pbnN0cnVjdGlvbi5pbnNuX251bSA9IHJlY29yZF9mdWxsX2luc25fY291bnQ7DQo+ICsg IHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uZWZmZWN0cy5zaHJpbmtfdG9fZml0 ICgpOw0KPiArICByZWNvcmRfZnVsbF9saXN0LnB1c2hfYmFjayAoc3RkOjptb3ZlDQo+IChyZWNv cmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uKSk7DQo+ICsgIHJlY29yZF9mdWxsX25leHRf aW5zbisrOw0KPiANCj4gLSAgcmVjLT5uZXh0ID0gTlVMTDsNCj4gLSAgd2hpbGUgKHRtcCkNCj4g LSAgICB7DQo+IC0gICAgICByZWMgPSB0bXAtPm5leHQ7DQo+IC0gICAgICBpZiAocmVjb3JkX2Z1 bGxfZW50cnlfcmVsZWFzZSAodG1wKSA9PSByZWNvcmRfZnVsbF9lbmQpDQo+IC0Jew0KPiAtCSAg cmVjb3JkX2Z1bGxfaW5zbl9udW0tLTsNCj4gLQkgIHJlY29yZF9mdWxsX2luc25fY291bnQtLTsN Cj4gLQl9DQo+IC0gICAgICB0bXAgPSByZWM7DQo+IC0gICAgfQ0KPiArICByZWNvcmRfZnVsbF9y ZXNldF9pbmNvbXBsZXRlICgpOw0KPiAgfQ0KPiANCj4gIC8qIERlbGV0ZSB0aGUgZmlyc3QgaW5z dHJ1Y3Rpb24gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2csIHRvIG1ha2UNCj4gQEAgLTU1 MCw1MiArNTExLDIyIEBAIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHN0cnVj dA0KPiByZWNvcmRfZnVsbF9lbnRyeSAqcmVjKQ0KPiAgc3RhdGljIHZvaWQNCj4gIHJlY29yZF9m dWxsX2xpc3RfcmVsZWFzZV9maXJzdCAodm9pZCkNCj4gIHsNCj4gLSAgc3RydWN0IHJlY29yZF9m dWxsX2VudHJ5ICp0bXA7DQo+IC0NCj4gLSAgaWYgKCFyZWNvcmRfZnVsbF9maXJzdC5uZXh0KQ0K PiArICBpZiAocmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSkNCj4gICAgICByZXR1cm47DQo+IA0K PiAtICAvKiBMb29wIHVudGlsIGEgcmVjb3JkX2Z1bGxfZW5kLiAgKi8NCj4gLSAgd2hpbGUgKDEp DQo+IC0gICAgew0KPiAtICAgICAgLyogQ3V0IHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgb3V0IG9m IHRoZSBsaW5rZWQgbGlzdC4gICovDQo+IC0gICAgICB0bXAgPSByZWNvcmRfZnVsbF9maXJzdC5u ZXh0Ow0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZmlyc3QubmV4dCA9IHRtcC0+bmV4dDsNCj4gLSAg ICAgIHRtcC0+bmV4dC0+cHJldiA9ICZyZWNvcmRfZnVsbF9maXJzdDsNCj4gLQ0KPiAtICAgICAg LyogdG1wIGlzIG5vdyBpc29sYXRlZCwgYW5kIGNhbiBiZSBkZWxldGVkLiAgKi8NCj4gLSAgICAg IGlmIChyZWNvcmRfZnVsbF9lbnRyeV9yZWxlYXNlICh0bXApID09IHJlY29yZF9mdWxsX2VuZCkN Cj4gLQlicmVhazsJLyogRW5kIGxvb3AgYXQgZmlyc3QgcmVjb3JkX2Z1bGxfZW5kLiAgKi8NCj4g KyAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29yZF9mdWxsX2xpc3RbMF0uZWZmZWN0cykNCj4gKyAg ICByZWNvcmRfZnVsbF9lbnRyeV9jbGVhbnVwIChlbnRyeSk7DQo+IA0KPiAtICAgICAgaWYgKCFy ZWNvcmRfZnVsbF9maXJzdC5uZXh0KQ0KPiAtCXsNCj4gLQkgIGdkYl9hc3NlcnQgKHJlY29yZF9m dWxsX2luc25fbnVtID09IDEpOw0KPiAtCSAgYnJlYWs7CS8qIEVuZCBsb29wIHdoZW4gbGlzdCBp cyBlbXB0eS4gICovDQo+IC0JfQ0KPiAtICAgIH0NCj4gKyAgcmVjb3JkX2Z1bGxfbGlzdC5wb3Bf ZnJvbnQgKCk7DQo+ICsgIC0tcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOw0KPiAgfQ0KPiANCj4gIC8q IEFkZCBhIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSB0byByZWNvcmRfZnVsbF9hcmNoX2xpc3Qu ICAqLw0KPiANCj4gIHN0YXRpYyB2b2lkDQo+IC1yZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkIChz dHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gK3JlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGQgKHJlY29yZF9mdWxsX2VudHJ5ICZyZWMpDQo+ICB7DQo+IC0gIGlmIChyZWNvcmRfZGVidWcg PiAxKQ0KPiAtICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCSJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAlcy5cbiIsDQo+IC0JCWhvc3RfYWRkcmVzc190 b19zdHJpbmcgKHJlYykpOw0KPiAtDQo+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFp bCkNCj4gLSAgICB7DQo+IC0gICAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbC0+bmV4dCA9 IHJlYzsNCj4gLSAgICAgIHJlYy0+cHJldiA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsOw0K PiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwgPSByZWM7DQo+IC0gICAgfQ0KPiAt ICBlbHNlDQo+IC0gICAgew0KPiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgPSBy ZWM7DQo+IC0gICAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsNCj4gLSAgICB9 DQo+ICsgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uZWZmZWN0cy5wdXNoX2Jh Y2sgKHJlYyk7DQoNCk5vdyBzaW5jZSB0aGlzIGlzIG9uZSBsaW5lIG9ubHksIGRvIHdlIHJlYWxs eSBuZWVkIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIHRoaXM/DQoNCj4gIH0NCj4gDQo+ICAvKiBS ZXR1cm4gdGhlIHZhbHVlIHN0b3JhZ2UgbG9jYXRpb24gb2YgYSByZWNvcmQgZW50cnkuICAqLw0K PiBAQCAtNjEzLDcgKzU0NCw2IEBAIHJlY29yZF9mdWxsX2dldF9sb2MgKHN0cnVjdCByZWNvcmRf ZnVsbF9lbnRyeSAqcmVjKQ0KPiAgICAgICAgcmV0dXJuIHJlYy0+dS5yZWcudS5wdHI7DQo+ICAg ICAgZWxzZQ0KPiAgICAgICAgcmV0dXJuIHJlYy0+dS5yZWcudS5idWY7DQo+IC0gIGNhc2UgcmVj b3JkX2Z1bGxfZW5kOg0KPiAgICBkZWZhdWx0Og0KPiAgICAgIGdkYl9hc3NlcnRfbm90X3JlYWNo ZWQgKCJ1bmV4cGVjdGVkIHJlY29yZF9mdWxsX2VudHJ5IHR5cGUiKTsNCj4gICAgICByZXR1cm4g TlVMTDsNCj4gQEAgLTYyNSw3ICs1NTUsNyBAQCByZWNvcmRfZnVsbF9nZXRfbG9jIChzdHJ1Y3Qg cmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gIGludA0KPiAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0 X2FkZF9yZWcgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ICB7DQo+ IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiArICByZWNvcmRfZnVsbF9lbnRy eSByZWM7DQo+IA0KPiAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCj4gICAgICBnZGJfcHJpbnRm IChnZGJfc3RkbG9nLA0KPiBAQCAtNjMzLDkgKzU2Myw5IEBAIHJlY29yZF9mdWxsX2FyY2hfbGlz dF9hZGRfcmVnIChzdHJ1Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiAg CQkicmVjb3JkIGxpc3QuXG4iLA0KPiAgCQlyZWdudW0pOw0KPiANCj4gLSAgcmVjID0gcmVjb3Jk X2Z1bGxfcmVnX2FsbG9jIChyZWdjYWNoZSwgcmVnbnVtKTsNCj4gKyAgcmVjID0gcmVjb3JkX2Z1 bGxfcmVnX2luaXQgKHJlZ2NhY2hlLCByZWdudW0pOw0KPiANCj4gLSAgcmVnY2FjaGUtPmNvb2tl ZF9yZWFkIChyZWdudW0sIHJlY29yZF9mdWxsX2dldF9sb2MgKHJlYykpOw0KPiArICByZWdjYWNo ZS0+Y29va2VkX3JlYWQgKHJlZ251bSwgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAoJnJlYykpOw0KPiAN Cj4gICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsNCj4gDQo+IEBAIC02NDgsNyAr NTc4LDcgQEAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHN0cnVjdCByZWdjYWNoZQ0K PiAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ICBpbnQNCj4gIHJlY29yZF9mdWxsX2FyY2hfbGlz dF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxlbikNCj4gIHsNCj4gLSAgc3RydWN0IHJl Y29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+ICsgIHJlY29yZF9mdWxsX2VudHJ5IHJlYzsNCj4gDQo+ ICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQ0KPiAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2cs DQo+IEBAIC02NTksMTIgKzU4OSwxMiBAQCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX21lbSAo Q09SRV9BRERSDQo+IGFkZHIsIGludCBsZW4pDQo+ICAgIGlmICghYWRkcikJLyogRklYTUU6IFdo eT8gIFNvbWUgYXJjaCBtdXN0IHBlcm1pdCBpdC4uLiAgKi8NCj4gICAgICByZXR1cm4gMDsNCj4g DQo+IC0gIHJlYyA9IHJlY29yZF9mdWxsX21lbV9hbGxvYyAoYWRkciwgbGVuKTsNCj4gKyAgcmVj ID0gcmVjb3JkX2Z1bGxfbWVtX2luaXQgKGFkZHIsIGxlbik7DQo+IA0KPiAgICBpZiAocmVjb3Jk X3JlYWRfbWVtb3J5IChjdXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpLCBhZGRyLA0KPiAtCQkJ ICByZWNvcmRfZnVsbF9nZXRfbG9jIChyZWMpLCBsZW4pKQ0KPiArCQkJICByZWNvcmRfZnVsbF9n ZXRfbG9jICgmcmVjKSwgbGVuKSkNCj4gICAgICB7DQo+IC0gICAgICByZWNvcmRfZnVsbF9tZW1f cmVsZWFzZSAocmVjKTsNCj4gKyAgICAgIHJlY29yZF9mdWxsX21lbV9jbGVhbnVwIChyZWMpOw0K PiAgICAgICAgcmV0dXJuIC0xOw0KPiAgICAgIH0NCj4gDQo+IEBAIC02NzMsMjcgKzYwMyw2IEBA IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwNCj4gaW50IGxl bikNCj4gICAgcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAtLyogQWRkIGEgcmVjb3JkX2Z1bGxfZW5k IHR5cGUgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5IHRvDQo+IC0gICByZWNvcmRfZnVsbF9hcmNo X2xpc3QuICAqLw0KPiAtDQo+IC1pbnQNCj4gLXJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5k ICh2b2lkKQ0KPiAtew0KPiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYzsNCj4gLQ0K PiAtICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCj4gLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9n LA0KPiAtCQkiUHJvY2VzcyByZWNvcmQ6IGFkZCBlbmQgdG8gYXJjaCBsaXN0LlxuIik7DQo+IC0N Cj4gLSAgcmVjID0gcmVjb3JkX2Z1bGxfZW5kX2FsbG9jICgpOw0KPiAtICByZWMtPnUuZW5kLnNp Z3ZhbCA9IEdEQl9TSUdOQUxfMDsNCj4gLSAgcmVjLT51LmVuZC5pbnNuX251bSA9ICsrcmVjb3Jk X2Z1bGxfaW5zbl9jb3VudDsNCj4gLQ0KPiAtICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkIChy ZWMpOw0KPiAtDQo+IC0gIHJldHVybiAwOw0KPiAtfQ0KPiAtDQo+ICBzdGF0aWMgdm9pZA0KPiAg cmVjb3JkX2Z1bGxfY2hlY2tfaW5zbl9udW0gKHZvaWQpDQo+ICB7DQo+IEBAIC03MjUsOCArNjM0 LDcgQEAgcmVjb3JkX2Z1bGxfbWVzc2FnZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4g ZW51bSBnZGJfc2lnbmFsIHNpZ25hbCkNCj4gDQo+ICAgIHRyeQ0KPiAgICAgIHsNCj4gLSAgICAg IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsNCj4gLSAgICAgIHJlY29yZF9mdWxs X2FyY2hfbGlzdF90YWlsID0gTlVMTDsNCj4gKyAgICAgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29t cGxldGUgKCk7DQo+IA0KPiAgICAgICAgLyogQ2hlY2sgcmVjb3JkX2Z1bGxfaW5zbl9udW0uICAq Lw0KPiAgICAgICAgcmVjb3JkX2Z1bGxfY2hlY2tfaW5zbl9udW0gKCk7DQo+IEBAIC03NDYsMjAg KzY1NCwxNiBAQCByZWNvcmRfZnVsbF9tZXNzYWdlIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LA0KPiBlbnVtIGdkYl9zaWduYWwgc2lnbmFsKQ0KPiAgCSB0aGUgdXNlciBzYXlzIHNvbWV0aGlu ZyBkaWZmZXJlbnQsIGxpa2UgImRlbGl2ZXIgdGhpcyBzaWduYWwiDQo+ICAJIGR1cmluZyB0aGUg cmVwbGF5IG1vZGUpLg0KPiANCj4gLQkgVXNlciBzaG91bGQgdW5kZXJzdGFuZCB0aGF0IG5vdGhp bmcgaGUgZG9lcyBkdXJpbmcgdGhlIHJlcGxheQ0KPiAtCSBtb2RlIHdpbGwgY2hhbmdlIHRoZSBi ZWhhdmlvciBvZiB0aGUgY2hpbGQuICBJZiBoZSB0cmllcywNCj4gKwkgVXNlciBzaG91bGQgdW5k ZXJzdGFuZCB0aGF0IG5vdGhpbmcgdGhleSBkbyBkdXJpbmcgdGhlIHJlcGxheQ0KPiArCSBtb2Rl IHdpbGwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgY2hpbGQuICBJZiB0aGV5IHRyeSwNCj4g IAkgdGhlbiB0aGF0IGlzIGEgdXNlciBlcnJvci4NCj4gDQo+ICAJIEJ1dCB3ZSBzaG91bGQgc3Rp bGwgZGVsaXZlciB0aGUgc2lnbmFsIHRvIGdkYiBkdXJpbmcgdGhlIHJlcGxheSwNCj4gIAkgaWYg d2UgZGVsaXZlcmVkIGl0IGR1cmluZyB0aGUgcmVjb3JkaW5nLiAgVGhlcmVmb3JlIHdlIHNob3Vs ZA0KPiAgCSByZWNvcmQgdGhlIHNpZ25hbCBkdXJpbmcgcmVjb3JkX2Z1bGxfd2FpdCwgbm90DQo+ ICAJIHJlY29yZF9mdWxsX3Jlc3VtZS4gICovDQo+IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfbGlz dCAhPSAmcmVjb3JkX2Z1bGxfZmlyc3QpICAvKiBGSVhNRSBiZXR0ZXIgd2F5DQo+IC0JCQkJCQkg ICAgICB0byBjaGVjayAqLw0KPiAtCXsNCj4gLQkgIGdkYl9hc3NlcnQgKHJlY29yZF9mdWxsX2xp c3QtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKTsNCj4gLQkgIHJlY29yZF9mdWxsX2xpc3QtPnUu ZW5kLnNpZ3ZhbCA9IHNpZ25hbDsNCj4gLQl9DQo+ICsgICAgICBpZiAoc2lnbmFsICE9IEdEQl9T SUdOQUxfMCAmJiAhcmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSkNCj4gKwlyZWNvcmRfZnVsbF9s aXN0W3JlY29yZF9mdWxsX25leHRfaW5zbiAtIDFdLnNpZ3ZhbCA9IHNpZ25hbDsNCj4gDQo+ICAg ICAgICBpZiAoc2lnbmFsID09IEdEQl9TSUdOQUxfMA0KPiAgCSAgfHwgIWdkYmFyY2hfcHJvY2Vz c19yZWNvcmRfc2lnbmFsX3AgKGdkYmFyY2gpKQ0KPiBAQCAtNzc4LDEzICs2ODIsMTEgQEAgcmVj b3JkX2Z1bGxfbWVzc2FnZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gZW51bSBnZGJf c2lnbmFsIHNpZ25hbCkNCj4gICAgICB9DQo+ICAgIGNhdGNoIChjb25zdCBnZGJfZXhjZXB0aW9u ICZleCkNCj4gICAgICB7DQo+IC0gICAgICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29y ZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gKyAgICAgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29t cGxldGUgKCk7DQo+ICAgICAgICB0aHJvdzsNCj4gICAgICB9DQo+IA0KPiAtICByZWNvcmRfZnVs bF9saXN0LT5uZXh0ID0gcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQ7DQo+IC0gIHJlY29yZF9m dWxsX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3JkX2Z1bGxfbGlzdDsNCj4gLSAgcmVjb3Jk X2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsOw0KPiArICByZWNvcmRfZnVs bF9zYXZlX2luc3RydWN0aW9uICgpOw0KPiANCj4gICAgaWYgKHJlY29yZF9mdWxsX2luc25fbnVt ID09IHJlY29yZF9mdWxsX2luc25fbWF4X251bSkNCj4gICAgICByZWNvcmRfZnVsbF9saXN0X3Jl bGVhc2VfZmlyc3QgKCk7DQo+IEBAIC04MjksOSArNzMxLDkgQEAgc3RhdGljIGVudW0gdGFyZ2V0 X3N0b3BfcmVhc29uDQo+IHJlY29yZF9mdWxsX3N0b3BfcmVhc29uDQo+ICAgICBlbnRyaWVzIGFu ZCBtZW1vcnkgZW50cmllcywgZm9sbG93ZWQgYnkgYW4gJ2VuZCcgZW50cnkuICAqLw0KPiANCj4g IHN0YXRpYyBpbmxpbmUgdm9pZA0KPiAtcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLA0KPiAtCQkgICAgICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsDQo+ IC0JCSAgICAgICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmVudHJ5KQ0KPiArcmVjb3JkX2Z1 bGxfZXhlY19lbnRyeSAocmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiArCQkJZ2RiYXJjaCAqZ2RiYXJj aCwNCj4gKwkJCXJlY29yZF9mdWxsX2VudHJ5ICplbnRyeSkNCj4gIHsNCj4gICAgc3dpdGNoIChl bnRyeS0+dHlwZSkNCj4gICAgICB7DQo+IEBAIC05MDksNiArODExLDE1IEBAIHJlY29yZF9mdWxs X2V4ZWNfaW5zbiAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gICAgICB9DQo+ICB9DQoN CkFnYWluIGZ1bmN0aW9uIGNvbW1lbnQuLiDwn5iJDQoNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0K PiArcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSAqcmVnY2FjaGUsDQo+ICsJCSAgICAg ICBnZGJhcmNoICpnZGJhcmNoLA0KPiArCQkgICAgICAgcmVjb3JkX2Z1bGxfaW5zdHJ1Y3Rpb24g Jmluc24pDQo+ICt7DQo+ICsgIGZvciAoYXV0byAmZW50cnkgOiBpbnNuLmVmZmVjdHMpDQo+ICsg ICAgcmVjb3JkX2Z1bGxfZXhlY19lbnRyeSAocmVnY2FjaGUsIGdkYmFyY2gsICZlbnRyeSk7DQo+ ICt9DQo+ICsNCj4gIHN0YXRpYyB2b2lkIHJlY29yZF9mdWxsX3Jlc3RvcmUgKHN0cnVjdCBiZmQg JmNiZmQpOw0KPiANCj4gIC8qIEFzeW5jaHJvbm91cyBzaWduYWwgaGFuZGxlIHJlZ2lzdGVyZWQg YXMgZXZlbnQgbG9vcCBzb3VyY2UgZm9yIHdoZW4NCj4gQEAgLTk4MywxMCArODk0LDcgQEAgcmVj b3JkX2Z1bGxfb3BlbiAoY29uc3QgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQ0KPiAgICByZWNv cmRfcHJlb3BlbiAoKTsNCj4gDQo+ICAgIC8qIFJlc2V0ICovDQo+IC0gIHJlY29yZF9mdWxsX2lu c25fbnVtID0gMDsNCj4gLSAgcmVjb3JkX2Z1bGxfaW5zbl9jb3VudCA9IDA7DQo+IC0gIHJlY29y ZF9mdWxsX2xpc3QgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+IC0gIHJlY29yZF9mdWxsX2xpc3Qt Pm5leHQgPSBOVUxMOw0KPiArICByZWNvcmRfZnVsbF9yZXNldF9oaXN0b3J5ICgpOw0KPiANCj4g ICAgYmZkICpjYmZkID0gZ2V0X2luZmVyaW9yX2NvcmVfYmZkIChjdXJyZW50X2luZmVyaW9yICgp KTsNCj4gICAgaWYgKGNiZmQgIT0gbnVsbHB0cikNCj4gQEAgLTEwMTQsNyArOTIyLDcgQEAgcmVj b3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmNsb3NlICgpDQo+ICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ ICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZnVs bF9jbG9zZVxuIik7DQo+IA0KPiAtICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9m dWxsX2xpc3QpOw0KPiArICByZWNvcmRfZnVsbF9yZXNldF9oaXN0b3J5ICgpOw0KPiANCj4gICAg LyogUmVsZWFzZSByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1Zi4gICovDQo+ICAgIGlmIChyZWNvcmRf ZnVsbF9jb3JlX3JlZ2J1ZikNCj4gQEAgLTEzMTMsNyArMTIyMSw2IEBAIHJlY29yZF9mdWxsX3dh aXRfMSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4gICAgICAgIHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7DQo+ICAgICAgICBjb25zdCBhZGRyZXNzX3NwYWNl ICphc3BhY2UgPSBjdXJyZW50X2luZmVyaW9yICgpLT5hc3BhY2UuZ2V0ICgpOw0KPiAgICAgICAg aW50IGNvbnRpbnVlX2ZsYWcgPSAxOw0KPiAtICAgICAgaW50IGZpcnN0X3JlY29yZF9mdWxsX2Vu ZCA9IDE7DQo+IA0KPiAgICAgICAgdHJ5DQo+ICAJew0KPiBAQCAtMTMyMiw3ICsxMjI5LDYgQEAg cmVjb3JkX2Z1bGxfd2FpdF8xIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0KPiAgCSAgcmVjb3Jk X2Z1bGxfc3RvcF9yZWFzb24gPSBUQVJHRVRfU1RPUFBFRF9CWV9OT19SRUFTT047DQo+ICAJICBz dGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMXzApOw0KPiANCj4gLQkgIC8qIENoZWNrIGJy ZWFrcG9pbnQgd2hlbiBmb3J3YXJkIGV4ZWN1dGUuICAqLw0KPiAgCSAgaWYgKGV4ZWN1dGlvbl9k aXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQ0KPiAgCSAgICB7DQo+ICAJICAgICAgdG1wX3BjID0g cmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOw0KPiBAQCAtMTMzMCw4ICsxMjM2LDcgQEAgcmVj b3JkX2Z1bGxfd2FpdF8xIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0KPiANCj4gJnJlY29yZF9m dWxsX3N0b3BfcmVhc29uKSkNCj4gIAkJew0KPiAgCQkgIGlmIChyZWNvcmRfZGVidWcpDQo+IC0J CSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQkJCSJQcm9jZXNzIHJlY29yZDogYnJl YWsgYXQgJXMuXG4iLA0KPiArCQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgIlByb2Nlc3Mg cmVjb3JkOiBicmVhayBhdCAlcy5cbiIsDQo+ICAJCQkJcGFkZHJlc3MgKGdkYmFyY2gsIHRtcF9w YykpOw0KPiAgCQkgIGdvdG8gcmVwbGF5X291dDsNCj4gIAkJfQ0KPiBAQCAtMTM0NCwxMCArMTI0 OSwxMCBAQCByZWNvcmRfZnVsbF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQo+ICAJ ICAgICB0aGUgc2lnbmFsLiAgKi8NCj4gIAkgIHRhcmdldF90ZXJtaW5hbDo6b3VycyAoKTsNCj4g DQo+IC0JICAvKiBJbiBFWEVDX0ZPUldBUkQgbW9kZSwgcmVjb3JkX2Z1bGxfbGlzdCBwb2ludHMg dG8gdGhlIHRhaWwgb2YNCj4gcHJldg0KPiAtCSAgICAgaW5zdHJ1Y3Rpb24uICAqLw0KPiAtCSAg aWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEICYmIHJlY29yZF9mdWxsX2xp c3QtDQo+ID5uZXh0KQ0KPiAtCSAgICByZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlz dC0+bmV4dDsNCj4gKwkgIC8qIEluIEVYRUNfRk9SV0FSRCBtb2RlLCByZWNvcmRfZnVsbF9uZXh0 X2luc24gaXMgdGhlIG5leHQNCj4gKwkgICAgIGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVkLiAg Ki8NCj4gKwkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkNCj4gKwkg ICAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuLS07DQo+IA0KPiAgCSAgLyogTG9vcCBvdmVyIHRoZSBy ZWNvcmRfZnVsbF9saXN0LCBsb29raW5nIGZvciB0aGUgbmV4dCBwbGFjZSB0bw0KPiAgCSAgICAg c3RvcC4gICovDQo+IEBAIC0xMzU1LDEwOCArMTI2MCw5MiBAQCByZWNvcmRfZnVsbF93YWl0XzEg KHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQo+ICAJICAgIHsNCj4gIAkgICAgICAvKiBDaGVjayBm b3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8NCj4gIAkgICAgICBpZiAoZXhlY3V0aW9u X2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UNCj4gLQkJICAmJiByZWNvcmRfZnVsbF9saXN0ID09 ICZyZWNvcmRfZnVsbF9maXJzdCkNCj4gKwkJICAmJiByZWNvcmRfZnVsbF9uZXh0X2luc24gPCAw KQ0KPiAgCQl7DQo+ICAJCSAgLyogSGl0IGJlZ2lubmluZyBvZiByZWNvcmQgbG9nIGluIHJldmVy c2UuICAqLw0KPiAgCQkgIHN0YXR1cy0+c2V0X25vX2hpc3RvcnkgKCk7DQo+ICsJCSAgcmVjb3Jk X2Z1bGxfbmV4dF9pbnNuID0gMDsNCj4gIAkJICBicmVhazsNCj4gIAkJfQ0KPiAgCSAgICAgIGlm IChleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJTRQ0KPiAtCQkgICYmICFyZWNvcmRf ZnVsbF9saXN0LT5uZXh0KQ0KPiArCQkgICYmIHJlY29yZF9mdWxsX25leHRfaW5zbiA9PSByZWNv cmRfZnVsbF9saXN0LnNpemUgKCkpDQo+ICAJCXsNCj4gIAkJICAvKiBIaXQgZW5kIG9mIHJlY29y ZCBsb2cgZ29pbmcgZm9yd2FyZC4gICovDQo+ICAJCSAgc3RhdHVzLT5zZXRfbm9faGlzdG9yeSAo KTsNCj4gIAkJICBicmVhazsNCj4gIAkJfQ0KPiANCj4gLQkgICAgICByZWNvcmRfZnVsbF9leGVj X2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfZnVsbF9saXN0KTsNCj4gKwkgICAgICBy ZWNvcmRfZnVsbF9leGVjX2luc24NCj4gKwkJKHJlZ2NhY2hlLCBnZGJhcmNoLA0KPiArCQkgcmVj b3JkX2Z1bGxfbGlzdFtyZWNvcmRfZnVsbF9uZXh0X2luc25dKTsNCj4gDQo+IC0JICAgICAgaWYg KHJlY29yZF9mdWxsX2xpc3QtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiArCSAgICAgIC8q IHN0ZXAgKi8NCj4gKwkgICAgICBpZiAocmVjb3JkX2Z1bGxfcmVzdW1lX3N0ZXApDQo+ICAJCXsN Cj4gIAkJICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCj4gLQkJICAgIGdkYl9wcmludGYNCj4gLQkJ ICAgICAgKGdkYl9zdGRsb2csDQo+IC0JCSAgICAgICAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9m dWxsX2VuZCAlcyB0byAiDQo+IC0JCSAgICAgICAiaW5mZXJpb3IuXG4iLA0KPiAtCQkgICAgICAg aG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVjb3JkX2Z1bGxfbGlzdCkpOw0KPiAtDQo+IC0JCSAg aWYgKGZpcnN0X3JlY29yZF9mdWxsX2VuZA0KPiAtCQkgICAgICAmJiBleGVjdXRpb25fZGlyZWN0 aW9uID09IEVYRUNfUkVWRVJTRSkNCj4gLQkJICAgIHsNCj4gLQkJICAgICAgLyogV2hlbiByZXZl cnNlIGV4ZWN1dGUsIHRoZSBmaXJzdA0KPiAtCQkJIHJlY29yZF9mdWxsX2VuZCBpcyB0aGUgcGFy dCBvZiBjdXJyZW50DQo+IC0JCQkgaW5zdHJ1Y3Rpb24uICAqLw0KPiAtCQkgICAgICBmaXJzdF9y ZWNvcmRfZnVsbF9lbmQgPSAwOw0KPiAtCQkgICAgfQ0KPiAtCQkgIGVsc2UNCj4gLQkJICAgIHsN Cj4gLQkJICAgICAgLyogSW4gRVhFQ19SRVZFUlNFIG1vZGUsIHRoaXMgaXMgdGhlDQo+IC0JCQkg cmVjb3JkX2Z1bGxfZW5kIG9mIHByZXYgaW5zdHJ1Y3Rpb24uICBJbg0KPiAtCQkJIEVYRUNfRk9S V0FSRCBtb2RlLCB0aGlzIGlzIHRoZQ0KPiAtCQkJIHJlY29yZF9mdWxsX2VuZCBvZiBjdXJyZW50 IGluc3RydWN0aW9uLiAgKi8NCj4gLQkJICAgICAgLyogc3RlcCAqLw0KPiAtCQkgICAgICBpZiAo cmVjb3JkX2Z1bGxfcmVzdW1lX3N0ZXApDQo+IC0JCQl7DQo+IC0JCQkgIGlmIChyZWNvcmRfZGVi dWcgPiAxKQ0KPiAtCQkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkJCSJQcm9j ZXNzIHJlY29yZDogc3RlcC5cbiIpOw0KPiAtCQkJICBjb250aW51ZV9mbGFnID0gMDsNCj4gLQkJ CX0NCj4gLQ0KPiAtCQkgICAgICAvKiBjaGVjayBicmVha3BvaW50ICovDQo+IC0JCSAgICAgIHRt cF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsNCj4gLQkJICAgICAgaWYgKHJlY29y ZF9jaGVja19zdG9wcGVkX2J5X2JyZWFrcG9pbnQNCj4gLQkJCSAgKGFzcGFjZSwgdG1wX3BjLCAm cmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24pKQ0KPiAtCQkJew0KPiAtCQkJICBpZiAocmVjb3JkX2Rl YnVnKQ0KPiAtCQkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkJCSJQcm9jZXNz IHJlY29yZDogYnJlYWsgIg0KPiAtCQkJCQkiYXQgJXMuXG4iLA0KPiAtCQkJCQlwYWRkcmVzcyAo Z2RiYXJjaCwgdG1wX3BjKSk7DQo+ICsJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAr CQkJCSJQcm9jZXNzIHJlY29yZDogc3RlcC5cbiIpOw0KPiArCQkgIGNvbnRpbnVlX2ZsYWcgPSAw Ow0KPiArCQl9DQo+IA0KPiAtCQkJICBjb250aW51ZV9mbGFnID0gMDsNCj4gLQkJCX0NCj4gKwkg ICAgICAvKiBjaGVjayBicmVha3BvaW50ICovDQo+ICsJICAgICAgdG1wX3BjID0gcmVnY2FjaGVf cmVhZF9wYyAocmVnY2FjaGUpOw0KPiArCSAgICAgIGlmIChyZWNvcmRfY2hlY2tfc3RvcHBlZF9i eV9icmVha3BvaW50DQo+ICsJCSAgKGFzcGFjZSwgdG1wX3BjLCAmcmVjb3JkX2Z1bGxfc3RvcF9y ZWFzb24pKQ0KPiArCQl7DQo+ICsJCSAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gKwkJICAgIGdkYl9w cmludGYgKGdkYl9zdGRsb2csDQo+ICsJCQkJIlByb2Nlc3MgcmVjb3JkOiBicmVhayAiDQo+ICsJ CQkJImF0ICVzLlxuIiwNCj4gKwkJCQlwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wX3BjKSk7DQo+IA0K PiAtCQkgICAgICBpZiAocmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24NCj4gLQkJCSAgPT0gVEFSR0VU X1NUT1BQRURfQllfV0FUQ0hQT0lOVCkNCj4gLQkJCXsNCj4gLQkJCSAgaWYgKHJlY29yZF9kZWJ1 ZykNCj4gLQkJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQkJCQkiUHJvY2VzcyBy ZWNvcmQ6IGhpdCBodyAiDQo+IC0JCQkJCSJ3YXRjaHBvaW50LlxuIik7DQo+IC0JCQkgIGNvbnRp bnVlX2ZsYWcgPSAwOw0KPiAtCQkJfQ0KPiAtCQkgICAgICAvKiBDaGVjayB0YXJnZXQgc2lnbmFs ICovDQo+IC0JCSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0LT51LmVuZC5zaWd2YWwgIT0gR0RC X1NJR05BTF8wKQ0KPiAtCQkJLyogRklYTUU6IGJldHRlciB3YXkgdG8gY2hlY2sgKi8NCj4gLQkJ CWNvbnRpbnVlX2ZsYWcgPSAwOw0KPiAtCQkgICAgfQ0KPiArCQkgIGNvbnRpbnVlX2ZsYWcgPSAw Ow0KPiAgCQl9DQo+IA0KPiAtCSAgICAgIGlmIChjb250aW51ZV9mbGFnKQ0KPiArCSAgICAgIGlm IChyZWNvcmRfZnVsbF9zdG9wX3JlYXNvbg0KPiArCQkgID09IFRBUkdFVF9TVE9QUEVEX0JZX1dB VENIUE9JTlQpDQo+ICAJCXsNCj4gLQkJICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVD X1JFVkVSU0UpDQo+IC0JCSAgICB7DQo+IC0JCSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0LT5w cmV2KQ0KPiAtCQkJcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPnByZXY7DQo+ IC0JCSAgICB9DQo+IC0JCSAgZWxzZQ0KPiAtCQkgICAgew0KPiAtCQkgICAgICBpZiAocmVjb3Jk X2Z1bGxfbGlzdC0+bmV4dCkNCj4gLQkJCXJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9s aXN0LT5uZXh0Ow0KPiAtCQkgICAgfQ0KPiArCQkgIGlmIChyZWNvcmRfZGVidWcpDQo+ICsJCSAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiArCQkJCSJQcm9jZXNzIHJlY29yZDogaGl0IGh3 ICINCj4gKwkJCQkid2F0Y2hwb2ludC5cbiIpOw0KPiArCQkgIGNvbnRpbnVlX2ZsYWcgPSAwOw0K PiAgCQl9DQo+ICsJICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9p bnNuXS5zaWd2YWwuaGFzX3ZhbHVlICgpKQ0KPiArCQljb250aW51ZV9mbGFnID0gMDsNCj4gKw0K PiArCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkNCj4gKwkJ cmVjb3JkX2Z1bGxfbmV4dF9pbnNuLS07DQo+ICsJICAgICAgZWxzZQ0KPiArCQlyZWNvcmRfZnVs bF9uZXh0X2luc24rKzsNCj4gIAkgICAgfQ0KPiAgCSAgd2hpbGUgKGNvbnRpbnVlX2ZsYWcpOw0K PiANCj4gKwkgIGlmIChyZWNvcmRfZnVsbF9uZXh0X2luc24gPCAwKQ0KPiArCSAgICB7DQo+ICsJ ICAgICAgZ2RiX2Fzc2VydCAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpOw0K PiArCSAgICAgIHJlY29yZF9mdWxsX25leHRfaW5zbiA9IDA7DQo+ICsJICAgIH0NCj4gKwkgIGVs c2UgaWYgKHJlY29yZF9mdWxsX25leHRfaW5zbiA+IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSkN Cj4gKwkgICAgew0KPiArCSAgICAgIGdkYl9hc3NlcnQgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0g RVhFQ19GT1JXQVJEKTsNCj4gKwkgICAgICByZWNvcmRfZnVsbF9uZXh0X2luc24gPSByZWNvcmRf ZnVsbF9saXN0LnNpemUgKCk7DQo+ICsJICAgIH0NCj4gKwkgIC8qIFJlc2V0IHRoZSBjdXJyZW50 IGluc3RydWN0aW9uIHRvIHBvaW50IHRvIHRoZSBvbmUgdG8gYmUgcmVwbGF5ZWQNCj4gKwkgICAg IG1vdmluZyBmb3J3YXJkLiAgKi8NCj4gKwkgIGVsc2UgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24g PT0gRVhFQ19SRVZFUlNFKQ0KPiArCSAgICByZWNvcmRfZnVsbF9uZXh0X2luc24rKzsNCj4gKw0K PiAgCXJlcGxheV9vdXQ6DQo+ICAJICBpZiAoc3RhdHVzLT5raW5kICgpID09IFRBUkdFVF9XQUlU S0lORF9TVE9QUEVEKQ0KPiAgCSAgICB7DQo+ICsJICAgICAgaW50IGluc24gPSAoZXhlY3V0aW9u X2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpDQo+ICsJCQkgPyByZWNvcmRfZnVsbF9uZXh0X2lu c24gLSAxIDogcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOw0KPiAgCSAgICAgIGlmIChyZWNvcmRfZnVs bF9nZXRfc2lnKQ0KPiAgCQlzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX0lOVCk7DQo+ IC0JICAgICAgZWxzZSBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuc2lndmFsICE9IEdEQl9T SUdOQUxfMCkNCj4gLQkJLyogRklYTUU6IGJldHRlciB3YXkgdG8gY2hlY2sgKi8NCj4gLQkJc3Rh dHVzLT5zZXRfc3RvcHBlZCAocmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuc2lndmFsKTsNCj4gKwkg ICAgICBlbHNlIGlmIChyZWNvcmRfZnVsbF9saXN0W2luc25dLnNpZ3ZhbC5oYXNfdmFsdWUgKCkp DQo+ICsJCXN0YXR1cy0+c2V0X3N0b3BwZWQNCj4gKwkJICAocmVjb3JkX2Z1bGxfbGlzdFtpbnNu XS5zaWd2YWwudmFsdWUgKCkpOw0KPiAgCSAgICAgIGVsc2UNCj4gIAkJc3RhdHVzLT5zZXRfc3Rv cHBlZCAoR0RCX1NJR05BTF9UUkFQKTsNCj4gIAkgICAgfQ0KPiBAQCAtMTQ2NCwxMiArMTM1Myw5 IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4gICAgICAg IGNhdGNoIChjb25zdCBnZGJfZXhjZXB0aW9uICZleCkNCj4gIAl7DQo+ICAJICBpZiAoZXhlY3V0 aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+IC0JICAgIHsNCj4gLQkgICAgICBpZiAo cmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gLQkJcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9m dWxsX2xpc3QtPm5leHQ7DQo+IC0JICAgIH0NCj4gKwkgICAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNu Kys7DQo+ICAJICBlbHNlDQo+IC0JICAgIHJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9s aXN0LT5wcmV2Ow0KPiArCSAgICByZWNvcmRfZnVsbF9uZXh0X2luc24tLTsNCj4gDQo+ICAJICB0 aHJvdzsNCj4gIAl9DQo+IEBAIC0xNTU3LDggKzE0NDMsNyBAQCByZWNvcmRfZnVsbF9yZWdpc3Rl cnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiAg ICAvKiBDaGVjayByZWNvcmRfZnVsbF9pbnNuX251bS4gICovDQo+ICAgIHJlY29yZF9mdWxsX2No ZWNrX2luc25fbnVtICgpOw0KPiANCj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgPSBO VUxMOw0KPiAtICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7DQo+ICsgIHJlY29y ZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+IA0KPiAgICBpZiAocmVnbnVtIDwgMCkNCj4g ICAgICB7DQo+IEBAIC0xNTY4LDcgKzE0NTMsNyBAQCByZWNvcmRfZnVsbF9yZWdpc3RlcnNfY2hh bmdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiAgCXsNCj4g IAkgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUsIGkpKQ0KPiAg CSAgICB7DQo+IC0JICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRfZnVsbF9h cmNoX2xpc3RfdGFpbCk7DQo+ICsJICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAo KTsNCj4gIAkgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQg ZXhlY3V0aW9uIGxvZy4iKSk7DQo+ICAJICAgIH0NCj4gIAl9DQo+IEBAIC0xNTc3LDE4ICsxNDYy LDExIEBAIHJlY29yZF9mdWxsX3JlZ2lzdGVyc19jaGFuZ2UgKHN0cnVjdCByZWdjYWNoZQ0KPiAq cmVnY2FjaGUsIGludCByZWdudW0pDQo+ICAgICAgew0KPiAgICAgICAgaWYgKHJlY29yZF9mdWxs X2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgcmVnbnVtKSkNCj4gIAl7DQo+IC0JICByZWNv cmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gKwkg IHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ICAJICBlcnJvciAoXygiUHJvY2Vz cyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7DQo+ICAJfQ0KPiAg ICAgIH0NCj4gLSAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiAtICAg IHsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAocmVjb3JkX2Z1bGxfYXJjaF9s aXN0X3RhaWwpOw0KPiAtICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8g cmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOw0KPiAtICAgIH0NCj4gLSAgcmVjb3JkX2Z1bGxfbGlz dC0+bmV4dCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkOw0KPiAtICByZWNvcmRfZnVsbF9h cmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+IC0gIHJlY29yZF9mdWxs X2xpc3QgPSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4gKyAgcmVjb3JkX2Z1bGxfc2F2 ZV9pbnN0cnVjdGlvbiAoKTsNCj4gDQo+ICAgIGlmIChyZWNvcmRfZnVsbF9pbnNuX251bSA9PSBy ZWNvcmRfZnVsbF9pbnNuX21heF9udW0pDQo+ICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNl X2ZpcnN0ICgpOw0KPiBAQCAtMTYwNyw3ICsxNDg1LDcgQEAgcmVjb3JkX2Z1bGxfdGFyZ2V0Ojpz dG9yZV9yZWdpc3RlcnMgKHN0cnVjdA0KPiByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykN Cj4gIAl7DQo+ICAJICBpbnQgbjsNCj4gDQo+IC0JICAvKiBMZXQgdXNlciBjaG9vc2UgaWYgaGUg d2FudHMgdG8gd3JpdGUgcmVnaXN0ZXIgb3Igbm90LiAgKi8NCj4gKwkgIC8qIExldCB1c2VyIGNo b29zZSBpZiB0aGV5IHdhbnQgdG8gd3JpdGUgcmVnaXN0ZXIgb3Igbm90LiAgKi8NCg0KSXQgbWln aHQgYmUgY2xlYW5lciB0byBtb3ZlIHN1Y2ggY2hhbmdlcyBpbiBhIHNlcGFyYXRlIGNvbW1pdCwN CnNpbmNlIHRoZXkganVzdCBtYWtlIHRoaXMgYmlnIHBhdGNoIGV2ZW4gYmlnZ2VyLg0KDQo+ICAJ ICBpZiAocmVnbm8gPCAwKQ0KPiAgCSAgICBuID0NCj4gIAkgICAgICBxdWVyeSAoXygiQmVjYXVz ZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSAiDQo+IEBAIC0xNjQyLDcgKzE1 MjAsNyBAQCByZWNvcmRfZnVsbF90YXJnZXQ6OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0DQo+IHJl Z2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQ0KPiAgCSAgICB9DQo+IA0KPiAgCSAgLyogRGVz dHJveSB0aGUgcmVjb3JkIGZyb20gaGVyZSBmb3J3YXJkLiAgKi8NCj4gLQkgIHJlY29yZF9mdWxs X2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHJlY29yZF9mdWxsX2xpc3QpOw0KPiArCSAgcmVjb3Jk X2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVjb3JkX2Z1bGxfbmV4dF9pbnNuKTsNCj4g IAl9DQo+IA0KPiAgICAgICAgcmVjb3JkX2Z1bGxfcmVnaXN0ZXJzX2NoYW5nZSAocmVnY2FjaGUs IHJlZ25vKTsNCj4gQEAgLTE2NzUsMzYgKzE1NTMsMjQgQEAgcmVjb3JkX2Z1bGxfdGFyZ2V0Ojp4 ZmVyX3BhcnRpYWwgKGVudW0NCj4gdGFyZ2V0X29iamVjdCBvYmplY3QsDQo+ICAJICAgIGVycm9y IChfKCJQcm9jZXNzIHJlY29yZCBjYW5jZWxlZCB0aGUgb3BlcmF0aW9uLiIpKTsNCj4gDQo+ICAJ ICAvKiBEZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLw0KPiAtCSAgcmVj b3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVjb3JkX2Z1bGxfbGlzdCk7DQo+ICsJ ICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChyZWNvcmRfZnVsbF9uZXh0X2lu c24pOw0KPiAgCX0NCj4gDQo+ICAgICAgICAvKiBDaGVjayByZWNvcmRfZnVsbF9pbnNuX251bSAq Lw0KPiAgICAgICAgcmVjb3JkX2Z1bGxfY2hlY2tfaW5zbl9udW0gKCk7DQo+IA0KPiAgICAgICAg LyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgdG8gbGlzdCBhcyBhbiBpbnN0cnVjdGlvbi4gICov DQo+IC0gICAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7DQo+IC0gICAgICBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7DQo+ICsgICAgICByZWNvcmRfZnVsbF9y ZXNldF9pbmNvbXBsZXRlICgpOw0KPiAgICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfbWVtIChvZmZzZXQsIGxlbikpDQo+ICAJew0KPiAtCSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxl YXNlIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCk7DQo+IC0JICBpZiAocmVjb3JkX2RlYnVn KQ0KPiAtCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQkJIlByb2Nlc3MgcmVjb3Jk OiBmYWlsZWQgdG8gcmVjb3JkICINCj4gLQkJCSJleGVjdXRpb24gbG9nLiIpOw0KPiAtCSAgcmV0 dXJuIFRBUkdFVF9YRkVSX0VfSU87DQo+IC0JfQ0KPiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF9hZGRfZW5kICgpKQ0KPiAtCXsNCj4gLQkgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFz ZSAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwpOw0KPiArCSAgcmVjb3JkX2Z1bGxfcmVzZXRf aW5jb21wbGV0ZSAoKTsNCj4gIAkgIGlmIChyZWNvcmRfZGVidWcpDQo+ICAJICAgIGdkYl9wcmlu dGYgKGdkYl9zdGRsb2csDQo+ICAJCQkiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQg Ig0KPiAgCQkJImV4ZWN1dGlvbiBsb2cuIik7DQo+ICAJICByZXR1cm4gVEFSR0VUX1hGRVJfRV9J TzsNCj4gIAl9DQo+IC0gICAgICByZWNvcmRfZnVsbF9saXN0LT5uZXh0ID0gcmVjb3JkX2Z1bGxf YXJjaF9saXN0X2hlYWQ7DQo+IC0gICAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZC0+cHJl diA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+IC0gICAgICByZWNvcmRfZnVsbF9saXN0ID0gcmVjb3Jk X2Z1bGxfYXJjaF9saXN0X3RhaWw7DQo+ICsgICAgICByZWNvcmRfZnVsbF9zYXZlX2luc3RydWN0 aW9uICgpOw0KPiANCj4gICAgICAgIGlmIChyZWNvcmRfZnVsbF9pbnNuX251bSA9PSByZWNvcmRf ZnVsbF9pbnNuX21heF9udW0pDQo+ICAJcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZpcnN0ICgp Ow0KPiBAQCAtMTg2NSw5ICsxNzMxLDExIEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpnZXRf Ym9va21hcmsgKGNvbnN0DQo+IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkNCj4gIHsNCj4gICAg Y2hhciAqcmV0ID0gTlVMTDsNCj4gDQo+ICsgIGlmIChyZWNvcmRfZnVsbF9saXN0LmVtcHR5ICgp KQ0KPiArICAgIHJldHVybiAoZ2RiX2J5dGUgKikgcmV0Ow0KPiArDQo+ICAgIC8qIFJldHVybiBz dHJpbmdpZmllZCBmb3JtIG9mIGluc3RydWN0aW9uIGNvdW50LiAgKi8NCj4gLSAgaWYgKHJlY29y ZF9mdWxsX2xpc3QgJiYgcmVjb3JkX2Z1bGxfbGlzdC0+dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQp DQo+IC0gICAgcmV0ID0geHN0cmR1cCAocHVsb25nZXN0IChyZWNvcmRfZnVsbF9saXN0LT51LmVu ZC5pbnNuX251bSkpOw0KPiArICByZXQgPSB4c3RyZHVwIChwdWxvbmdlc3QNCj4gKHJlY29yZF9m dWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9pbnNuXS5pbnNuX251bSkpOw0KPiANCj4gICAgaWYg KHJlY29yZF9kZWJ1ZykNCj4gICAgICB7DQo+IEBAIC0xOTIzLDMwICsxNzkxLDIyIEBAIHJlY29y ZF9mdWxsX2Jhc2VfdGFyZ2V0OjpyZWNvcmRfbWV0aG9kDQo+IChwdGlkX3QgcHRpZCkNCj4gIHZv aWQNCj4gIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjppbmZvX3JlY29yZCAoKQ0KPiAgew0KPiAt ICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnA7DQo+IC0NCj4gICAgaWYgKFJFQ09SRF9GVUxM X0lTX1JFUExBWSkNCj4gICAgICBnZGJfcHJpbnRmIChfKCJSZXBsYXkgbW9kZTpcbiIpKTsNCj4g ICAgZWxzZQ0KPiAgICAgIGdkYl9wcmludGYgKF8oIlJlY29yZCBtb2RlOlxuIikpOw0KPiANCj4g LSAgLyogRmluZCBlbnRyeSBmb3IgZmlyc3QgYWN0dWFsIGluc3RydWN0aW9uIGluIHRoZSBsb2cu ICAqLw0KPiAtICBmb3IgKHAgPSByZWNvcmRfZnVsbF9maXJzdC5uZXh0Ow0KPiAtICAgICAgIHAg IT0gTlVMTCAmJiBwLT50eXBlICE9IHJlY29yZF9mdWxsX2VuZDsNCj4gLSAgICAgICBwID0gcC0+ bmV4dCkNCj4gLSAgICA7DQo+IC0NCj4gICAgLyogRG8gd2UgaGF2ZSBhIGxvZyBhdCBhbGw/ICAq Lw0KPiAtICBpZiAocCAhPSBOVUxMICYmIHAtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiAr ICBpZiAoIXJlY29yZF9mdWxsX2xpc3QuZW1wdHkgKCkpDQo+ICAgICAgew0KPiAgICAgICAgLyog RGlzcGxheSBpbnN0cnVjdGlvbiBudW1iZXIgZm9yIGZpcnN0IGluc3RydWN0aW9uIGluIHRoZSBs b2cuICAqLw0KPiAtICAgICAgZ2RiX3ByaW50ZiAoXygiTG93ZXN0IHJlY29yZGVkIGluc3RydWN0 aW9uIG51bWJlciBpcyAlcy5cbiIpLA0KPiAtCQkgIHB1bG9uZ2VzdCAocC0+dS5lbmQuaW5zbl9u dW0pKTsNCj4gKyAgICAgIGdkYl9wcmludGYgKF8oIkxvd2VzdCByZWNvcmRlZCBpbnN0cnVjdGlv biBudW1iZXIgaXMgJXUuXG4iKSwNCj4gKwkJICByZWNvcmRfZnVsbF9saXN0WzBdLmluc25fbnVt KTsNCj4gDQo+ICAgICAgICAvKiBJZiBpbiByZXBsYXkgbW9kZSwgZGlzcGxheSB3aGVyZSB3ZSBh cmUgaW4gdGhlIGxvZy4gICovDQo+ICAgICAgICBpZiAoUkVDT1JEX0ZVTExfSVNfUkVQTEFZKQ0K PiAtCWdkYl9wcmludGYgKF8oIkN1cnJlbnQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVzLlxuIiks DQo+IC0JCSAgICBwdWxvbmdlc3QgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5kLmluc25fbnVtKSk7 DQo+ICsJZ2RiX3ByaW50ZiAoXygiQ3VycmVudCBpbnN0cnVjdGlvbiBudW1iZXIgaXMgJXUuXG4i KSwNCj4gKwkJICAgIHJlY29yZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9pbnNuXS5pbnNu X251bSk7DQo+IA0KPiAgICAgICAgLyogRGlzcGxheSBpbnN0cnVjdGlvbiBudW1iZXIgZm9yIGxh c3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGxvZy4gICovDQo+ICAgICAgICBnZGJfcHJpbnRmIChfKCJI aWdoZXN0IHJlY29yZGVkIGluc3RydWN0aW9uIG51bWJlciBpcyAlcy5cbiIpLA0KPiBAQCAtMTk3 NSw3ICsxODM1LDcgQEAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnN1cHBvcnRzX2RlbGV0ZV9y ZWNvcmQNCj4gKCkNCj4gIHZvaWQNCj4gIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpkZWxldGVf cmVjb3JkICgpDQo+ICB7DQo+IC0gIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcg KHJlY29yZF9mdWxsX2xpc3QpOw0KPiArICByZWNvcmRfZnVsbF9yZXNldF9oaXN0b3J5ICgpOw0K PiAgfQ0KPiANCj4gIC8qIFRoZSAicmVjb3JkX2lzX3JlcGxheWluZyIgdGFyZ2V0IG1ldGhvZC4g ICovDQo+IEBAIC0yMDAxLDIzICsxODYxLDIzIEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0Ojpy ZWNvcmRfd2lsbF9yZXBsYXkNCj4gKHB0aWRfdCBwdGlkLCBpbnQgZGlyKQ0KPiAgLyogR28gdG8g YSBzcGVjaWZpYyBlbnRyeS4gICovDQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gLXJlY29yZF9mdWxs X2dvdG9fZW50cnkgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcCkNCj4gK3JlY29yZF9mdWxs X2dvdG9fZW50cnkgKHNpemVfdCB0YXJnZXRfaW5zbikNCj4gIHsNCj4gLSAgaWYgKHAgPT0gTlVM TCkNCj4gKyAgaWYgKHRhcmdldF9pbnNuID49IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSkNCj4g ICAgICBlcnJvciAoXygiVGFyZ2V0IGluc24gbm90IGZvdW5kLiIpKTsNCj4gLSAgZWxzZSBpZiAo cCA9PSByZWNvcmRfZnVsbF9saXN0KQ0KPiArICBlbHNlIGlmICh0YXJnZXRfaW5zbiA9PSByZWNv cmRfZnVsbF9uZXh0X2luc24pDQo+ICAgICAgZXJyb3IgKF8oIkFscmVhZHkgYXQgdGFyZ2V0IGlu c24uIikpOw0KPiAtICBlbHNlIGlmIChwLT51LmVuZC5pbnNuX251bSA+IHJlY29yZF9mdWxsX2xp c3QtPnUuZW5kLmluc25fbnVtKQ0KPiArICBlbHNlIGlmICh0YXJnZXRfaW5zbiA+IHJlY29yZF9m dWxsX25leHRfaW5zbikNCj4gICAgICB7DQo+ICAgICAgICBnZGJfcHJpbnRmIChfKCJHbyBmb3J3 YXJkIHRvIGluc24gbnVtYmVyICVzXG4iKSwNCj4gLQkJICBwdWxvbmdlc3QgKHAtPnUuZW5kLmlu c25fbnVtKSk7DQo+IC0gICAgICByZWNvcmRfZnVsbF9nb3RvX2luc24gKHAsIEVYRUNfRk9SV0FS RCk7DQo+ICsJCSAgcHVsb25nZXN0IChyZWNvcmRfZnVsbF9saXN0W3RhcmdldF9pbnNuXS5pbnNu X251bSkpOw0KPiArICAgICAgcmVjb3JkX2Z1bGxfZ290b19pbnNuICh0YXJnZXRfaW5zbiwgRVhF Q19GT1JXQVJEKTsNCj4gICAgICB9DQo+ICAgIGVsc2UNCj4gICAgICB7DQo+ICAgICAgICBnZGJf cHJpbnRmIChfKCJHbyBiYWNrd2FyZCB0byBpbnNuIG51bWJlciAlc1xuIiksDQo+IC0JCSAgcHVs b25nZXN0IChwLT51LmVuZC5pbnNuX251bSkpOw0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZ290b19p bnNuIChwLCBFWEVDX1JFVkVSU0UpOw0KPiArCQkgIHB1bG9uZ2VzdCAodGFyZ2V0X2luc24pKTsN Cj4gKyAgICAgIHJlY29yZF9mdWxsX2dvdG9faW5zbiAodGFyZ2V0X2luc24sIEVYRUNfUkVWRVJT RSk7DQo+ICAgICAgfQ0KPiANCj4gICAgcmVnaXN0ZXJzX2NoYW5nZWQgKCk7DQo+IEBAIC0yMDMz LDEzICsxODkzLDcgQEAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAoc3RydWN0IHJlY29yZF9mdWxs X2VudHJ5DQo+ICpwKQ0KPiAgdm9pZA0KPiAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmdvdG9f cmVjb3JkX2JlZ2luICgpDQo+ICB7DQo+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcCA9 IE5VTEw7DQo+IC0NCj4gLSAgZm9yIChwID0gJnJlY29yZF9mdWxsX2ZpcnN0OyBwICE9IE5VTEw7 IHAgPSBwLT5uZXh0KQ0KPiAtICAgIGlmIChwLT50eXBlID09IHJlY29yZF9mdWxsX2VuZCkNCj4g LSAgICAgIGJyZWFrOw0KPiAtDQo+IC0gIHJlY29yZF9mdWxsX2dvdG9fZW50cnkgKHApOw0KPiAr ICByZWNvcmRfZnVsbF9nb3RvX2VudHJ5ICgwKTsNCj4gIH0NCj4gDQo+ICAvKiBUaGUgImdvdG9f cmVjb3JkX2VuZCIgdGFyZ2V0IG1ldGhvZC4gICovDQo+IEBAIC0yMDQ3LDE1ICsxOTAxLDcgQEAg cmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmdvdG9fcmVjb3JkX2JlZ2luICgpDQo+ICB2b2lkDQo+ ICByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6Z290b19yZWNvcmRfZW5kICgpDQo+ICB7DQo+IC0g IHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcCA9IE5VTEw7DQo+IC0NCj4gLSAgZm9yIChwID0g cmVjb3JkX2Z1bGxfbGlzdDsgcC0+bmV4dCAhPSBOVUxMOyBwID0gcC0+bmV4dCkNCj4gLSAgICA7 DQo+IC0gIGZvciAoOyBwIT0gTlVMTDsgcCA9IHAtPnByZXYpDQo+IC0gICAgaWYgKHAtPnR5cGUg PT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiAtICAgICAgYnJlYWs7DQo+IC0NCj4gLSAgcmVjb3JkX2Z1 bGxfZ290b19lbnRyeSAocCk7DQo+ICsgIHJlY29yZF9mdWxsX2dvdG9fZW50cnkgKHJlY29yZF9m dWxsX2xpc3Quc2l6ZSAoKSAtIDEpOw0KPiAgfQ0KPiANCj4gIC8qIFRoZSAiZ290b19yZWNvcmQi IHRhcmdldCBtZXRob2QuICAqLw0KPiBAQCAtMjA2MywxMyArMTkwOSw3IEBAIHJlY29yZF9mdWxs X2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZF9lbmQgKCkNCj4gIHZvaWQNCj4gIHJlY29yZF9mdWxs X2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZCAoVUxPTkdFU1QgdGFyZ2V0X2luc24pDQo+ICB7DQo+ IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcCA9IE5VTEw7DQo+IC0NCj4gLSAgZm9yIChw ID0gJnJlY29yZF9mdWxsX2ZpcnN0OyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KQ0KPiAtICAgIGlm IChwLT50eXBlID09IHJlY29yZF9mdWxsX2VuZCAmJiBwLT51LmVuZC5pbnNuX251bSA9PSB0YXJn ZXRfaW5zbikNCj4gLSAgICAgIGJyZWFrOw0KPiAtDQo+IC0gIHJlY29yZF9mdWxsX2dvdG9fZW50 cnkgKHApOw0KPiArICByZWNvcmRfZnVsbF9nb3RvX2VudHJ5ICh0YXJnZXRfaW5zbik7DQo+ICB9 DQo+IA0KPiAgLyogVGhlICJyZWNvcmRfc3RvcF9yZXBsYXlpbmciIHRhcmdldCBtZXRob2QuICAq Lw0KPiBAQCAtMjMzOSwxOSArMjE3OSw5NiBAQCBuZXRvcmRlcjMyICh1aW50MzJfdCBpbnB1dCkN Cj4gICAgcmV0dXJuIHJldDsNCj4gIH0NCg0KRnVuY3Rpb24gY29tbWVudC4gQW5kIEkgdGhpbmsg aXQgd291bGQgYmUgY2xlYW5lciB0byBtb3ZlIHRoaXMgcmVmYWN0b3JpbmcgaW4NCmEgc2VwYXJh dGUgcGF0Y2gsIHRvby4gT3IgaXMgdGhpcyBzZXBhcmF0ZSBmdW5jdGlvbiBvbmx5IHBvc3NpYmxl IGR1ZSB0byB0aGUgY2hhbmdlDQpmcm9tIHVzaW5nIGEgbGlzdCB0byBzdGQ6OmRlcXVlPyANCg0K PiArc3RhdGljIHZvaWQNCj4gK3JlY29yZF9mdWxsX3JlYWRfZW50cnlfZnJvbV9iZmQgKGJmZCAq Y2JmZCwgYXNlY3Rpb24gKm9zZWMsIGludCAqYmZkX29mZnNldCkNCj4gK3sNCj4gKyAgdWludDhf dCByZWN0eXBlOw0KPiArICB1aW50MzJfdCByZWdudW0sIGxlbjsNCj4gKyAgdWludDY0X3QgYWRk cjsNCj4gKyAgcmVnY2FjaGUgKmNhY2hlID0gZ2V0X3RocmVhZF9yZWdjYWNoZSAoaW5mZXJpb3Jf dGhyZWFkICgpKTsNCj4gKw0KPiArICBiZmRjb3JlX3JlYWQgKGNiZmQsIG9zZWMsICZyZWN0eXBl LCBzaXplb2YgKHJlY3R5cGUpLCBiZmRfb2Zmc2V0KTsNCj4gKyAgc3dpdGNoIChyZWN0eXBlKQ0K PiArICAgIHsNCj4gKyAgICBjYXNlIHJlY29yZF9mdWxsX3JlZzogLyogcmVnICovDQo+ICsgICAg ICB7DQo+ICsJLyogR2V0IHJlZ2lzdGVyIG51bWJlciB0byByZWdudW0uICAqLw0KPiArCWJmZGNv cmVfcmVhZCAoY2JmZCwgb3NlYywgJnJlZ251bSwgc2l6ZW9mIChyZWdudW0pLCBiZmRfb2Zmc2V0 KTsNCj4gKwlyZWdudW0gPSBuZXRvcmRlcjMyIChyZWdudW0pOw0KPiArDQo+ICsJcmVjb3JkX2Z1 bGxfZW50cnkgcmVjOw0KPiArDQo+ICsJcmVjID0gcmVjb3JkX2Z1bGxfcmVnX2luaXQgKGNhY2hl LCByZWdudW0pOw0KPiArDQo+ICsJLyogR2V0IHZhbC4gICovDQo+ICsJYmZkY29yZV9yZWFkIChj YmZkLCBvc2VjLCByZWNvcmRfZnVsbF9nZXRfbG9jICgmcmVjKSwNCj4gKwkJICAgICAgcmVjLnUu cmVnLmxlbiwgYmZkX29mZnNldCk7DQo+ICsNCj4gKwlpZiAocmVjb3JkX2RlYnVnKQ0KPiArCSAg Z2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gKwkJICAgICAgIiAgUmVhZGluZyByZWdpc3RlciAl ZCAoMSAiDQo+ICsJCSAgICAgICJwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwNCj4gKwkJICAg ICAgcmVjLnUucmVnLm51bSwNCj4gKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAocmVn bnVtKSwNCj4gKwkJICAgICAgcmVjLnUucmVnLmxlbik7DQo+ICsNCj4gKwlyZWNvcmRfZnVsbF9h cmNoX2xpc3RfYWRkIChyZWMpOw0KPiArCWJyZWFrOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAg Y2FzZSByZWNvcmRfZnVsbF9tZW06IC8qIG1lbSAqLw0KPiArICAgICAgew0KPiArCS8qIEdldCBs ZW4uICAqLw0KPiArCWJmZGNvcmVfcmVhZCAoY2JmZCwgb3NlYywgJmxlbiwgc2l6ZW9mIChsZW4p LCBiZmRfb2Zmc2V0KTsNCj4gKwlsZW4gPSBuZXRvcmRlcjMyIChsZW4pOw0KPiArDQo+ICsJLyog R2V0IGFkZHIuICAqLw0KPiArCWJmZGNvcmVfcmVhZCAoY2JmZCwgb3NlYywgJmFkZHIsIHNpemVv ZiAoYWRkciksDQo+ICsJCSAgICAgIGJmZF9vZmZzZXQpOw0KPiArCWFkZHIgPSBuZXRvcmRlcjY0 IChhZGRyKTsNCj4gKw0KPiArCXJlY29yZF9mdWxsX2VudHJ5IHJlYzsNCj4gKwlyZWMgPSByZWNv cmRfZnVsbF9tZW1faW5pdCAoYWRkciwgbGVuKTsNCj4gKw0KPiArCS8qIEdldCB2YWwuICAqLw0K PiArCWJmZGNvcmVfcmVhZCAoY2JmZCwgb3NlYywgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAoJnJlYyks IGxlbiwNCj4gKwkJICAgICAgYmZkX29mZnNldCk7DQo+ICsNCj4gKwlpZiAocmVjb3JkX2RlYnVn KQ0KPiArCSAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gKwkJICAgICAgIiAgUmVhZGluZyBt ZW1vcnkgJXMgKDEgcGx1cyAiDQo+ICsJCSAgICAgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRl cylcbiIsDQo+ICsJCSAgICAgIHBhZGRyZXNzIChnZXRfY3VycmVudF9hcmNoICgpLA0KPiArCQkJ CXJlYy51Lm1lbS5hZGRyKSwNCj4gKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoYWRk ciksDQo+ICsJCSAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGxlbiksDQo+ICsJCSAgICAg IGxlbik7DQo+ICsNCj4gKwlyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkIChyZWMpOw0KPiArCWJy ZWFrOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAgIGVycm9yIChf KCJCYWQgZW50cnkgdHlwZSAlZCwgb2Zmc2V0ICVkIG9mICVsdSBpbiBjb3JlIGZpbGUgJXBzLiIp LA0KPiArCSAgICAgcmVjdHlwZSwgKmJmZF9vZmZzZXQsIGJmZF9zZWN0aW9uX3NpemUgKG9zZWMp LA0KPiArCSAgICAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLA0KPiAr CQkJICAgIGJmZF9nZXRfZmlsZW5hbWUgKGNiZmQpKSk7DQo+ICsgICAgICBicmVhazsNCj4gKyAg ICB9DQo+ICt9DQo+ICsNCj4gIC8qIFJlc3RvcmUgdGhlIGV4ZWN1dGlvbiBsb2cgZnJvbSBjb3Jl IGZpbGUgQ0JGRC4gICovDQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gIHJlY29yZF9mdWxsX3Jlc3Rv cmUgKHN0cnVjdCBiZmQgJmNiZmQpDQo+ICB7DQo+ICAgIHVpbnQzMl90IG1hZ2ljOw0KPiAtICBz dHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYzsNCj4gICAgYXNlY3Rpb24gKm9zZWM7DQo+ICAg IHVpbnQzMl90IG9zZWNfc2l6ZTsNCj4gICAgaW50IGJmZF9vZmZzZXQgPSAwOw0KPiANCj4gICAg LyogInJlY29yZF9mdWxsX3Jlc3RvcmUiIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHJlY29yZCBs aXN0IGlzIGVtcHR5LiAgKi8NCj4gLSAgZ2RiX2Fzc2VydCAocmVjb3JkX2Z1bGxfZmlyc3QubmV4 dCA9PSBOVUxMKTsNCj4gKyAgZ2RiX2Fzc2VydCAocmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSk7 DQo+IA0KPiAgICBpZiAocmVjb3JkX2RlYnVnKQ0KPiAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRs b2csICJSZXN0b3JpbmcgcmVjb3JkaW5nIGZyb20gY29yZSBmaWxlLlxuIik7DQo+IEBAIC0yMzc5 LDEyNCArMjI5Niw0NyBAQCByZWNvcmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKQ0K PiAgCQkiUkVDT1JEX0ZVTExfRklMRV9NQUdJQyAoMHglcylcbiIsDQo+ICAJCXBoZXhfbnogKG5l dG9yZGVyMzIgKG1hZ2ljKSwgNCkpOw0KPiANCj4gLSAgLyogUmVzdG9yZSB0aGUgZW50cmllcyBp biByZWNmZCBpbnRvIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkIGFuZA0KPiAtICAgICByZWNv cmRfZnVsbF9hcmNoX2xpc3RfdGFpbC4gICovDQo+IC0gIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9o ZWFkID0gTlVMTDsNCj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwgPSBOVUxMOw0KPiAg ICByZWNvcmRfZnVsbF9pbnNuX251bSA9IDA7DQo+IA0KPiAgICB0cnkNCj4gICAgICB7DQo+IC0g ICAgICByZWdjYWNoZSAqcmVnY2FjaGUgPSBnZXRfdGhyZWFkX3JlZ2NhY2hlIChpbmZlcmlvcl90 aHJlYWQgKCkpOw0KPiAtDQo+IC0gICAgICB3aGlsZSAoMSkNCj4gKyAgICAgIHdoaWxlIChiZmRf b2Zmc2V0IDwgb3NlY19zaXplKQ0KPiAgCXsNCj4gLQkgIHVpbnQ4X3QgcmVjdHlwZTsNCj4gLQkg IHVpbnQzMl90IHJlZ251bSwgbGVuLCBzaWduYWwsIGNvdW50Ow0KPiAtCSAgdWludDY0X3QgYWRk cjsNCj4gKwkgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ICsJICB1aW50MzJf dCBlZmZfY291bnQgPSAwOw0KPiArCSAgdWludDhfdCBzaWd2YWw7DQo+ICsJICB1aW50MzJfdCBp bnNuX251bTsNCj4gDQo+IC0JICAvKiBXZSBhcmUgZmluaXNoZWQgd2hlbiBvZmZzZXQgcmVhY2hl cyBvc2VjX3NpemUuICAqLw0KPiAtCSAgaWYgKGJmZF9vZmZzZXQgPj0gb3NlY19zaXplKQ0KPiAt CSAgICBicmVhazsNCj4gLQkgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZyZWN0eXBlLCBz aXplb2YgKHJlY3R5cGUpLCAmYmZkX29mZnNldCk7DQo+ICsJICAvKiBGaXJzdCByZWFkIHRoZSBn ZW5lcmljIGluZm9ybWF0aW9uIGZvciBhbiBpbnN0cnVjdGlvbi4gICovDQo+ICsJICBiZmRjb3Jl X3JlYWQgKCZjYmZkLCBvc2VjLCAmc2lndmFsLCBzaXplb2YgKHVpbnQ4X3QpLCAmYmZkX29mZnNl dCk7DQo+ICsJICBiZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmZWZmX2NvdW50LCBzaXplb2Yg KHVpbnQzMl90KSwNCj4gKwkJCSZiZmRfb2Zmc2V0KTsNCj4gKwkgIGJmZGNvcmVfcmVhZCAoJmNi ZmQsIG9zZWMsICZpbnNuX251bSwgc2l6ZW9mICh1aW50MzJfdCksDQo+ICsJCQkmYmZkX29mZnNl dCk7DQo+IA0KPiAtCSAgc3dpdGNoIChyZWN0eXBlKQ0KPiAtCSAgICB7DQo+IC0JICAgIGNhc2Ug cmVjb3JkX2Z1bGxfcmVnOiAvKiByZWcgKi8NCj4gLQkgICAgICAvKiBHZXQgcmVnaXN0ZXIgbnVt YmVyIHRvIHJlZ251bS4gICovDQo+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywg JnJlZ251bSwgc2l6ZW9mIChyZWdudW0pLA0KPiAtCQkJICAgICZiZmRfb2Zmc2V0KTsNCj4gLQkg ICAgICByZWdudW0gPSBuZXRvcmRlcjMyIChyZWdudW0pOw0KPiAtDQo+IC0JICAgICAgcmVjID0g cmVjb3JkX2Z1bGxfcmVnX2FsbG9jIChyZWdjYWNoZSwgcmVnbnVtKTsNCj4gLQ0KPiAtCSAgICAg IC8qIEdldCB2YWwuICAqLw0KPiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsIHJl Y29yZF9mdWxsX2dldF9sb2MgKHJlYyksDQo+IC0JCQkgICAgcmVjLT51LnJlZy5sZW4sICZiZmRf b2Zmc2V0KTsNCj4gLQ0KPiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+IC0JCWdkYl9wcmlu dGYgKGdkYl9zdGRsb2csDQo+IC0JCQkgICAgIiAgUmVhZGluZyByZWdpc3RlciAlZCAoMSAiDQo+ IC0JCQkgICAgInBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiAtCQkJICAgIHJlYy0+dS5y ZWcubnVtLA0KPiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHJlZ251bSksDQo+IC0J CQkgICAgcmVjLT51LnJlZy5sZW4pOw0KPiAtCSAgICAgIGJyZWFrOw0KPiArCSAgcmVjb3JkX2Z1 bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5pbnNuX251bSA9IG5ldG9yZGVyMzINCj4gKGluc25f bnVtKTsNCj4gKwkgIGlmIChzaWd2YWwgIT0gR0RCX1NJR05BTF8wKQ0KPiArCSAgICByZWNvcmRf ZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLnNpZ3ZhbCA9IChnZGJfc2lnbmFsKSBzaWd2YWw7 DQo+IA0KPiAtCSAgICBjYXNlIHJlY29yZF9mdWxsX21lbTogLyogbWVtICovDQo+IC0JICAgICAg LyogR2V0IGxlbi4gICovDQo+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmxl biwgc2l6ZW9mIChsZW4pLCAmYmZkX29mZnNldCk7DQo+IC0JICAgICAgbGVuID0gbmV0b3JkZXIz MiAobGVuKTsNCj4gLQ0KPiAtCSAgICAgIC8qIEdldCBhZGRyLiAgKi8NCj4gLQkgICAgICBiZmRj b3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmYWRkciwgc2l6ZW9mIChhZGRyKSwgJmJmZF9vZmZzZXQp Ow0KPiAtCSAgICAgIGFkZHIgPSBuZXRvcmRlcjY0IChhZGRyKTsNCj4gLQ0KPiAtCSAgICAgIHJl YyA9IHJlY29yZF9mdWxsX21lbV9hbGxvYyAoYWRkciwgbGVuKTsNCj4gLQ0KPiAtCSAgICAgIC8q IEdldCB2YWwuICAqLw0KPiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsIHJlY29y ZF9mdWxsX2dldF9sb2MgKHJlYyksDQo+IC0JCQkgICAgcmVjLT51Lm1lbS5sZW4sICZiZmRfb2Zm c2V0KTsNCj4gLQ0KPiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+IC0JCWdkYl9wcmludGYg KGdkYl9zdGRsb2csDQo+IC0JCQkgICAgIiAgUmVhZGluZyBtZW1vcnkgJXMgKDEgcGx1cyAiDQo+ IC0JCQkgICAgIiVsdSBwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwNCj4gLQkJCSAgICBwYWRk cmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwNCj4gLQkJCQkgICAgICByZWMtPnUubWVtLmFkZHIp LA0KPiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGFkZHIpLA0KPiAtCQkJICAgICh1 bnNpZ25lZCBsb25nKSBzaXplb2YgKGxlbiksDQo+IC0JCQkgICAgcmVjLT51Lm1lbS5sZW4pOw0K PiAtCSAgICAgIGJyZWFrOw0KPiArCSAgZWZmX2NvdW50ID0gbmV0b3JkZXIzMiAoZWZmX2NvdW50 KTsNCj4gDQo+IC0JICAgIGNhc2UgcmVjb3JkX2Z1bGxfZW5kOiAvKiBlbmQgKi8NCj4gLQkgICAg ICByZWMgPSByZWNvcmRfZnVsbF9lbmRfYWxsb2MgKCk7DQo+IC0JICAgICAgcmVjb3JkX2Z1bGxf aW5zbl9udW0gKys7DQo+IC0NCj4gLQkgICAgICAvKiBHZXQgc2lnbmFsIHZhbHVlLiAgKi8NCj4g LQkgICAgICBiZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmc2lnbmFsLCBzaXplb2YgKHNpZ25h bCksDQo+IC0JCQkgICAgJmJmZF9vZmZzZXQpOw0KPiAtCSAgICAgIHNpZ25hbCA9IG5ldG9yZGVy MzIgKHNpZ25hbCk7DQo+IC0JICAgICAgcmVjLT51LmVuZC5zaWd2YWwgPSAoZW51bSBnZGJfc2ln bmFsKSBzaWduYWw7DQo+IC0NCj4gLQkgICAgICAvKiBHZXQgaW5zbiBjb3VudC4gICovDQo+IC0J ICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmNvdW50LCBzaXplb2YgKGNvdW50KSwg JmJmZF9vZmZzZXQpOw0KPiAtCSAgICAgIGNvdW50ID0gbmV0b3JkZXIzMiAoY291bnQpOw0KPiAt CSAgICAgIHJlYy0+dS5lbmQuaW5zbl9udW0gPSBjb3VudDsNCj4gLQkgICAgICByZWNvcmRfZnVs bF9pbnNuX2NvdW50ID0gY291bnQgKyAxOw0KPiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ IC0JCWdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkgICAgIiAgUmVhZGluZyByZWNvcmRf ZnVsbF9lbmQgKDEgKyAiDQo+IC0JCQkgICAgIiVsdSArICVsdSBieXRlcyksIG9mZnNldCA9PSAl c1xuIiwNCj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChzaWduYWwpLA0KPiAtCQkJ ICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGNvdW50KSwNCj4gLQkJCSAgICBwYWRkcmVzcyAo Z2V0X2N1cnJlbnRfYXJjaCAoKSwNCj4gLQkJCQkgICAgICBiZmRfb2Zmc2V0KSk7DQo+IC0JICAg ICAgYnJlYWs7DQo+ICsJICAvKiBUaGlzIGRlYWxzIHdpdGggYWxsIHRoZSBzaWRlIGVmZmVjdHMu ICAqLw0KPiArCSB3aGlsZSAoZWZmX2NvdW50ID4gMCkNCj4gKwkgICB7DQo+ICsJICAgICBlZmZf Y291bnQtLTsNCj4gDQo+IC0JICAgIGRlZmF1bHQ6DQo+IC0JICAgICAgZXJyb3IgKF8oIkJhZCBl bnRyeSB0eXBlIGluIGNvcmUgZmlsZSAlcHMuIiksDQo+IC0JCSAgICAgc3R5bGVkX3N0cmluZyAo ZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLA0KPiAtCQkJCSAgICBiZmRfZ2V0X2ZpbGVuYW1lICgm Y2JmZCkpKTsNCj4gLQkgICAgICBicmVhazsNCj4gLQkgICAgfQ0KPiArCSAgICAgcmVjb3JkX2Z1 bGxfcmVhZF9lbnRyeV9mcm9tX2JmZCAoJmNiZmQsIG9zZWMsICZiZmRfb2Zmc2V0KTsNCj4gKwkg ICB9DQo+IA0KPiAtCSAgLyogQWRkIHJlYyB0byByZWNvcmQgYXJjaCBsaXN0LiAgKi8NCj4gLQkg IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGQgKHJlYyk7DQo+ICsJICByZWNvcmRfZnVsbF9zYXZl X2luc3RydWN0aW9uICgpOw0KPiAgCX0NCj4gICAgICB9DQo+ICAgIGNhdGNoIChjb25zdCBnZGJf ZXhjZXB0aW9uICZleCkNCj4gICAgICB7DQo+IC0gICAgICByZWNvcmRfZnVsbF9saXN0X3JlbGVh c2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gKyAgICAgIHJlY29yZF9mdWxsX3Jl c2V0X2luY29tcGxldGUgKCk7DQo+ICAgICAgICB0aHJvdzsNCj4gICAgICB9DQo+IA0KPiAtICAv KiBBZGQgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgdG8gdGhlIGVuZCBvZiByZWNvcmQgbGlz dC4gICovDQo+IC0gIHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgPSByZWNvcmRfZnVsbF9hcmNoX2xp c3RfaGVhZDsNCj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQtPnByZXYgPSAmcmVjb3Jk X2Z1bGxfZmlyc3Q7DQo+IC0gIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsLT5uZXh0ID0gTlVM TDsNCj4gLSAgcmVjb3JkX2Z1bGxfbGlzdCA9ICZyZWNvcmRfZnVsbF9maXJzdDsNCj4gLQ0KPiAg ICAvKiBVcGRhdGUgcmVjb3JkX2Z1bGxfaW5zbl9tYXhfbnVtLiAgKi8NCj4gICAgaWYgKHJlY29y ZF9mdWxsX2luc25fbnVtID4gcmVjb3JkX2Z1bGxfaW5zbl9tYXhfbnVtKQ0KPiAgICAgIHsNCj4g QEAgLTI1MDUsNiArMjM0NSwxMCBAQCByZWNvcmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZj YmZkKQ0KPiAgCSAgICAgICByZWNvcmRfZnVsbF9pbnNuX21heF9udW0pOw0KPiAgICAgIH0NCj4g DQo+ICsgIC8qIFdoZW4gbG9hZGluZyBhIHJlY29yZGluZywgd2UnbGwgYWx3YXlzIHN0YXJ0IGF0 IHRoZSBvbGRlc3QgcG9zc2libGUNCj4gKyAgICAgaW5zdHJ1Y3Rpb24sIG5vIG1hdHRlciB3aGVy ZSB0aGUgb3JpZ2luYWwgcmVjb3JkaW5nIHdhcyBzdG9wcGVkLiAgKi8NCj4gKyAgcmVjb3JkX2Z1 bGxfbmV4dF9pbnNuID0gMDsNCj4gKw0KPiAgICAvKiBTdWNjZWVkZWQuICAqLw0KPiAgICBnZGJf cHJpbnRmIChfKCJSZXN0b3JlZCByZWNvcmRzIGZyb20gY29yZSBmaWxlICVzLlxuIiksDQo+ICAJ ICAgICAgYmZkX2dldF9maWxlbmFtZSAoJmNiZmQpKTsNCj4gQEAgLTI1MzgsMTMgKzIzODIsNzMg QEAgY21kX3JlY29yZF9mdWxsX3Jlc3RvcmUgKGNvbnN0IGNoYXIgKmFyZ3MsIGludA0KPiBmcm9t X3R0eSkNCj4gICAgcmVjb3JkX2Z1bGxfb3BlbiAobnVsbHB0ciwgZnJvbV90dHkpOw0KPiAgfQ0K DQpGdW5jdGlvbiBjb21tZW50LiBBbmQgc2ltaWxhciBjb21tZW50IGZvciBzZXBhcmF0ZSBwYXRj aC4NCg0KSSBiZWxpZXZlIHN0aC4gbGlrZSBhIGZvbGxvdy11cCBjb21taXQgdGhhdCBpbnRyb2R1 Y2VzIHRoZSBmdW5jdGlvbnMNCnJlY29yZF9mdWxsX3JlYWRfZW50cnlfZnJvbV9iZmQgYW5kIHJl Y29yZF9mdWxsX3dyaXRlX2VudHJ5X3RvX2JmZA0Kd291bGQgbWFrZSB0aGlzIG11Y2ggZWFzaWVy IHRvIHJldmlldy4NCg0KPiArc3RhdGljIHZvaWQNCj4gK3JlY29yZF9mdWxsX3dyaXRlX2VudHJ5 X3RvX2JmZCAocmVjb3JkX2Z1bGxfZW50cnkgJmVudHJ5LA0KPiArCQkJCWdkYl9iZmRfcmVmX3B0 ciBvYmZkLA0KPiArCQkJCWFzZWN0aW9uICpvc2VjLCBpbnQgKmJmZF9vZmZzZXQsDQo+ICsJCQkJ Z2RiYXJjaCAqZ2RiYXJjaCkNCj4gK3sNCj4gKyAgLyogU2F2ZSBlbnRyeS4gICovDQo+ICsgIHVp bnQ4X3QgdHlwZTsNCj4gKyAgdWludDMyX3QgcmVnbnVtLCBsZW47DQo+ICsgIHVpbnQ2NF90IGFk ZHI7DQo+ICsNCj4gKyAgdHlwZSA9IGVudHJ5LnR5cGU7DQo+ICsgIGJmZGNvcmVfd3JpdGUgKG9i ZmQuZ2V0ICgpLCBvc2VjLCAmdHlwZSwgc2l6ZW9mICh0eXBlKSwgYmZkX29mZnNldCk7DQo+ICsN Cj4gKyAgc3dpdGNoIChlbnRyeS50eXBlKQ0KPiArICAgIHsNCj4gKyAgICBjYXNlIHJlY29yZF9m dWxsX3JlZzogLyogcmVnICovDQo+ICsgICAgICBpZiAocmVjb3JkX2RlYnVnKQ0KPiArCWdkYl9w cmludGYgKGdkYl9zdGRsb2csDQo+ICsJCSAgICAiICBXcml0aW5nIHJlZ2lzdGVyICVkICgxICIN Cj4gKwkJICAgICJwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwNCj4gKwkJICAgIGVudHJ5LnUu cmVnLm51bSwNCj4gKwkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHJlZ251bSksDQo+ICsJ CSAgICBlbnRyeS51LnJlZy5sZW4pOw0KPiArDQo+ICsgICAgICAvKiBXcml0ZSByZWdudW0uICAq Lw0KPiArICAgICAgcmVnbnVtID0gbmV0b3JkZXIzMiAoZW50cnkudS5yZWcubnVtKTsNCj4gKyAg ICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmcmVnbnVtLCBzaXplb2YgKHJl Z251bSksIGJmZF9vZmZzZXQpOw0KPiArDQo+ICsgICAgICAvKiBXcml0ZSByZWd2YWwuICAqLw0K PiArICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsIHJlY29yZF9mdWxsX2dl dF9sb2MgKCZlbnRyeSksDQo+ICsJCSAgICAgZW50cnkudS5yZWcubGVuLCBiZmRfb2Zmc2V0KTsN Cj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgY2FzZSByZWNvcmRfZnVsbF9tZW06IC8qIG1l bSAqLw0KPiArICAgICAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gKwlnZGJfcHJpbnRmIChnZGJfc3Rk bG9nLA0KPiArCQkgICAgIiAgV3JpdGluZyBtZW1vcnkgJXMgKDEgcGx1cyAiDQo+ICsJCSAgICAi JWx1IHBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiArCQkgICAgcGFkZHJlc3MgKGdkYmFy Y2gsDQo+ICsJCQkgICAgICBlbnRyeS51Lm1lbS5hZGRyKSwNCj4gKwkJICAgICh1bnNpZ25lZCBs b25nKSBzaXplb2YgKGFkZHIpLA0KPiArCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAobGVu KSwNCj4gKwkJICAgIGVudHJ5LnUubWVtLmxlbik7DQo+ICsNCj4gKyAgICAgIC8qIFdyaXRlIG1l bWxlbi4gICovDQo+ICsgICAgICBsZW4gPSBuZXRvcmRlcjMyIChlbnRyeS51Lm1lbS5sZW4pOw0K PiArICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZsZW4sIHNpemVvZiAo bGVuKSwgYmZkX29mZnNldCk7DQo+ICsNCj4gKyAgICAgIC8qIFdyaXRlIG1lbWFkZHIuICAqLw0K PiArICAgICAgYWRkciA9IG5ldG9yZGVyNjQgKGVudHJ5LnUubWVtLmFkZHIpOw0KPiArICAgICAg YmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZhZGRyLCBzaXplb2YgKGFkZHIpLCBi ZmRfb2Zmc2V0KTsNCj4gKw0KPiArICAgICAgLyogV3JpdGUgbWVtdmFsLiAgKi8NCj4gKyAgICAg IGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCByZWNvcmRfZnVsbF9nZXRfbG9jICgm ZW50cnkpLA0KPiArCQkgICAgIGVudHJ5LnUubWVtLmxlbiwgYmZkX29mZnNldCk7DQo+ICsgICAg ICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gK30NCj4gKw0KPiAgLyogU2F2ZSB0aGUgZXhlY3V0 aW9uIGxvZyB0byBhIGZpbGUuICBXZSB1c2UgYSBtb2RpZmllZCBlbGYgY29yZWZpbGUNCj4gICAg IGZvcm1hdCwgd2l0aCBhbiBleHRyYSBzZWN0aW9uIGZvciBvdXIgZGF0YS4gICovDQo+IA0KPiAg dm9pZA0KPiAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnNhdmVfcmVjb3JkIChjb25zdCBjaGFy ICpyZWNmaWxlbmFtZSkNCj4gIHsNCj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpjdXJf cmVjb3JkX2Z1bGxfbGlzdDsNCj4gICAgdWludDMyX3QgbWFnaWM7DQo+ICAgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoOw0KPiAgICBpbnQgc2F2ZV9zaXplID0gMDsNCj4gQEAgLTI1NjIsOSArMjQ2 Niw2IEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpzYXZlX3JlY29yZCAoY29uc3QgY2hhcg0K PiAqcmVjZmlsZW5hbWUpDQo+ICAgIC8qIEFycmFuZ2UgdG8gcmVtb3ZlIHRoZSBvdXRwdXQgZmls ZSBvbiBmYWlsdXJlLiAgKi8NCj4gICAgZ2RiOjp1bmxpbmtlciB1bmxpbmtfZmlsZSAocmVjZmls ZW5hbWUpOw0KPiANCj4gLSAgLyogU2F2ZSB0aGUgY3VycmVudCByZWNvcmQgZW50cnkgdG8gImN1 cl9yZWNvcmRfZnVsbF9saXN0Ii4gICovDQo+IC0gIGN1cl9yZWNvcmRfZnVsbF9saXN0ID0gcmVj b3JkX2Z1bGxfbGlzdDsNCj4gLQ0KPiAgICAvKiBHZXQgdGhlIHZhbHVlcyBvZiByZWdjYWNoZSBh bmQgZ2RiYXJjaC4gICovDQo+ICAgIHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF90aHJlYWRfcmVn Y2FjaGUgKGluZmVyaW9yX3RocmVhZCAoKSk7DQo+ICAgIGdkYmFyY2ggPSByZWdjYWNoZS0+YXJj aCAoKTsNCj4gQEAgLTI1NzQsMzQgKzI0NzUsMjcgQEAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6 OnNhdmVfcmVjb3JkIChjb25zdA0KPiBjaGFyICpyZWNmaWxlbmFtZSkNCj4gICAgICA9IHJlY29y ZF9mdWxsX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7DQo+IA0KPiAgICAvKiBSZXZlcnNl IGV4ZWN1dGUgdG8gdGhlIGJlZ2luIG9mIHJlY29yZCBsaXN0LiAgKi8NCj4gLSAgd2hpbGUgKDEp DQo+IC0gICAgew0KPiAtICAgICAgLyogQ2hlY2sgZm9yIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxv Zy4gICovDQo+IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdCA9PSAmcmVjb3JkX2Z1bGxfZmly c3QpDQo+IC0JYnJlYWs7DQo+IC0NCj4gLSAgICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVn Y2FjaGUsIGdkYmFyY2gsIHJlY29yZF9mdWxsX2xpc3QpOw0KPiAtDQo+IC0gICAgICBpZiAocmVj b3JkX2Z1bGxfbGlzdC0+cHJldikNCj4gLQlyZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxf bGlzdC0+cHJldjsNCj4gLSAgICB9DQo+ICsgIGZvciAoaW50IGkgPSByZWNvcmRfZnVsbF9uZXh0 X2luc24gLSAxOyBpID49IDA7IGktLSkNCj4gKyAgICByZWNvcmRfZnVsbF9leGVjX2luc24gKHJl Z2NhY2hlLCBnZGJhcmNoLA0KPiArCQkJICAgcmVjb3JkX2Z1bGxfbGlzdFtpXSk7DQo+IA0KPiAg ICAvKiBDb21wdXRlIHRoZSBzaXplIG5lZWRlZCBmb3IgdGhlIGV4dHJhIGJmZCBzZWN0aW9uLiAg Ki8NCj4gICAgc2F2ZV9zaXplID0gNDsJLyogbWFnaWMgY29va2llICovDQo+IC0gIGZvciAocmVj b3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQ7IHJlY29yZF9mdWxsX2xpc3Q7 DQo+IC0gICAgICAgcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPm5leHQpDQo+ IC0gICAgc3dpdGNoIChyZWNvcmRfZnVsbF9saXN0LT50eXBlKQ0KPiAtICAgICAgew0KPiAtICAg ICAgY2FzZSByZWNvcmRfZnVsbF9lbmQ6DQo+IC0Jc2F2ZV9zaXplICs9IDEgKyA0ICsgNDsNCj4g LQlicmVhazsNCj4gLSAgICAgIGNhc2UgcmVjb3JkX2Z1bGxfcmVnOg0KPiAtCXNhdmVfc2l6ZSAr PSAxICsgNCArIHJlY29yZF9mdWxsX2xpc3QtPnUucmVnLmxlbjsNCj4gLQlicmVhazsNCj4gLSAg ICAgIGNhc2UgcmVjb3JkX2Z1bGxfbWVtOg0KPiAtCXNhdmVfc2l6ZSArPSAxICsgNCArIDggKyBy ZWNvcmRfZnVsbF9saXN0LT51Lm1lbS5sZW47DQo+IC0JYnJlYWs7DQo+IC0gICAgICB9DQo+ICsg IGZvciAoaW50IGkgPSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCkgLSAxOyBpID49IDA7IGktLSkN Cj4gKyAgICB7DQo+ICsgICAgICAvKiBOdW1iZXIgb2YgZWZmZWN0cyBvZiBhbiBpbnN0cnVjdGlv bi4gICovDQo+ICsgICAgICBzYXZlX3NpemUgKz0gc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2Yg KHVpbnQ4X3QpICsgc2l6ZW9mICh1aW50MzJfdCk7DQo+ICsgICAgICBmb3IgKGF1dG8gJmVudHJ5 IDogcmVjb3JkX2Z1bGxfbGlzdFtpXS5lZmZlY3RzKQ0KPiArCXN3aXRjaCAoZW50cnkudHlwZSkN Cj4gKwkgIHsNCj4gKwkgIGNhc2UgcmVjb3JkX2Z1bGxfcmVnOg0KPiArCSAgICBzYXZlX3NpemUg Kz0gMSArIDQgKyBlbnRyeS51LnJlZy5sZW47DQo+ICsJICAgIGJyZWFrOw0KPiArCSAgY2FzZSBy ZWNvcmRfZnVsbF9tZW06DQo+ICsJICAgIHNhdmVfc2l6ZSArPSAxICsgNCArIDggKyBlbnRyeS51 Lm1lbS5sZW47DQo+ICsJICAgIGJyZWFrOw0KPiArCSAgfQ0KPiArICAgIH0NCj4gDQo+ICAgIC8q IE1ha2UgdGhlIG5ldyBiZmQgc2VjdGlvbi4gICovDQo+ICAgIG9zZWMgPSBiZmRfbWFrZV9zZWN0 aW9uX2FueXdheV93aXRoX2ZsYWdzIChvYmZkLmdldCAoKSwgInByZWNvcmQiLA0KPiBAQCAtMjYz MCwxMDggKzI1MjQsMzIgQEAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnNhdmVfcmVjb3JkIChj b25zdA0KPiBjaGFyICpyZWNmaWxlbmFtZSkNCj4gDQo+ICAgIC8qIFNhdmUgdGhlIGVudHJpZXMg dG8gcmVjZmQgYW5kIGZvcndhcmQgZXhlY3V0ZSB0byB0aGUgZW5kIG9mDQo+ICAgICAgIHJlY29y ZCBsaXN0LiAgKi8NCj4gLSAgcmVjb3JkX2Z1bGxfbGlzdCA9ICZyZWNvcmRfZnVsbF9maXJzdDsN Cj4gLSAgd2hpbGUgKDEpDQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkX2Z1bGxfbGlz dC5zaXplICgpOyBpKyspDQo+ICAgICAgew0KPiAtICAgICAgLyogU2F2ZSBlbnRyeS4gICovDQo+ IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdCAhPSAmcmVjb3JkX2Z1bGxfZmlyc3QpDQo+ICsg ICAgICB1aW50MzJfdCBlZmZfY291bnQgPSAodWludDMyX3QpIHJlY29yZF9mdWxsX2xpc3RbaV0u ZWZmZWN0cy5zaXplICgpOw0KPiArICAgICAgdWludDMyX3QgaW5zbl9udW0gPSByZWNvcmRfZnVs bF9saXN0W2ldLmluc25fbnVtOw0KPiArICAgICAgdWludDhfdCBzaWd2YWwgPSAocmVjb3JkX2Z1 bGxfbGlzdFtpXS5zaWd2YWwuaGFzX3ZhbHVlICgpKQ0KPiArCQkJID8gcmVjb3JkX2Z1bGxfbGlz dFtpXS5zaWd2YWwudmFsdWUgKCkNCj4gKwkJCSA6IEdEQl9TSUdOQUxfMDsNCj4gKw0KPiArICAg ICAgLyogU2lnbmFsLiAgKi8NCj4gKyAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBv c2VjLCAmc2lndmFsLCBzaXplb2YgKHNpZ3ZhbCksICZiZmRfb2Zmc2V0KTsNCj4gKyAgICAgIGVm Zl9jb3VudCA9IG5ldG9yZGVyMzIgKGVmZl9jb3VudCk7DQo+ICsgICAgICAvKiBOdW1iZXIgb2Yg ZWZmZWN0cy4gICovDQo+ICsgICAgICBiZmRjb3JlX3dyaXRlIChvYmZkLmdldCAoKSwgb3NlYywg JmVmZl9jb3VudCwgc2l6ZW9mIChlZmZfY291bnQpLA0KPiArCQkgICAgICZiZmRfb2Zmc2V0KTsN Cj4gKyAgICAgIC8qIEluc3RydWN0aW9uIG51bWJlci4gICovDQo+ICsgICAgICBiZmRjb3JlX3dy aXRlIChvYmZkLmdldCAoKSwgb3NlYywgJmluc25fbnVtLCBzaXplb2YgKHVpbnQzMl90KSwNCj4g KwkJICAgICAmYmZkX29mZnNldCk7DQo+ICsNCj4gKyAgICAgIGZvciAoYXV0byAmZW50cnkgOiBy ZWNvcmRfZnVsbF9saXN0W2ldLmVmZmVjdHMpDQo+ICAJew0KPiAtCSAgdWludDhfdCB0eXBlOw0K PiAtCSAgdWludDMyX3QgcmVnbnVtLCBsZW4sIHNpZ25hbCwgY291bnQ7DQo+IC0JICB1aW50NjRf dCBhZGRyOw0KPiAtDQo+IC0JICB0eXBlID0gcmVjb3JkX2Z1bGxfbGlzdC0+dHlwZTsNCj4gLQkg IGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmdHlwZSwgc2l6ZW9mICh0eXBlKSwg JmJmZF9vZmZzZXQpOw0KPiAtDQo+IC0JICBzd2l0Y2ggKHJlY29yZF9mdWxsX2xpc3QtPnR5cGUp DQo+IC0JICAgIHsNCj4gLQkgICAgY2FzZSByZWNvcmRfZnVsbF9yZWc6IC8qIHJlZyAqLw0KPiAt CSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+IC0JCWdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ IC0JCQkgICAgIiAgV3JpdGluZyByZWdpc3RlciAlZCAoMSAiDQo+IC0JCQkgICAgInBsdXMgJWx1 IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiAtCQkJICAgIHJlY29yZF9mdWxsX2xpc3QtPnUucmVnLm51 bSwNCj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChyZWdudW0pLA0KPiAtCQkJICAg IHJlY29yZF9mdWxsX2xpc3QtPnUucmVnLmxlbik7DQo+IC0NCj4gLQkgICAgICAvKiBXcml0ZSBy ZWdudW0uICAqLw0KPiAtCSAgICAgIHJlZ251bSA9IG5ldG9yZGVyMzIgKHJlY29yZF9mdWxsX2xp c3QtPnUucmVnLm51bSk7DQo+IC0JICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9z ZWMsICZyZWdudW0sDQo+IC0JCQkgICAgIHNpemVvZiAocmVnbnVtKSwgJmJmZF9vZmZzZXQpOw0K PiAtDQo+IC0JICAgICAgLyogV3JpdGUgcmVndmFsLiAgKi8NCj4gLQkgICAgICBiZmRjb3JlX3dy aXRlIChvYmZkLmdldCAoKSwgb3NlYywNCj4gLQkJCSAgICAgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAo cmVjb3JkX2Z1bGxfbGlzdCksDQo+IC0JCQkgICAgIHJlY29yZF9mdWxsX2xpc3QtPnUucmVnLmxl biwgJmJmZF9vZmZzZXQpOw0KPiAtCSAgICAgIGJyZWFrOw0KPiAtDQo+IC0JICAgIGNhc2UgcmVj b3JkX2Z1bGxfbWVtOiAvKiBtZW0gKi8NCj4gLQkgICAgICBpZiAocmVjb3JkX2RlYnVnKQ0KPiAt CQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQkJICAgICIgIFdyaXRpbmcgbWVtb3J5ICVz ICgxIHBsdXMgIg0KPiAtCQkJICAgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIsDQo+ IC0JCQkgICAgcGFkZHJlc3MgKGdkYmFyY2gsDQo+IC0JCQkJICAgICAgcmVjb3JkX2Z1bGxfbGlz dC0+dS5tZW0uYWRkciksDQo+IC0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoYWRkciks DQo+IC0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAobGVuKSwNCj4gLQkJCSAgICByZWNv cmRfZnVsbF9saXN0LT51Lm1lbS5sZW4pOw0KPiAtDQo+IC0JICAgICAgLyogV3JpdGUgbWVtbGVu LiAgKi8NCj4gLQkgICAgICBsZW4gPSBuZXRvcmRlcjMyIChyZWNvcmRfZnVsbF9saXN0LT51Lm1l bS5sZW4pOw0KPiAtCSAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmbGVu LCBzaXplb2YgKGxlbiksDQo+IC0JCQkgICAgICZiZmRfb2Zmc2V0KTsNCj4gLQ0KPiAtCSAgICAg IC8qIFdyaXRlIG1lbWFkZHIuICAqLw0KPiAtCSAgICAgIGFkZHIgPSBuZXRvcmRlcjY0IChyZWNv cmRfZnVsbF9saXN0LT51Lm1lbS5hZGRyKTsNCj4gLQkgICAgICBiZmRjb3JlX3dyaXRlIChvYmZk LmdldCAoKSwgb3NlYywgJmFkZHIsDQo+IC0JCQkgICAgIHNpemVvZiAoYWRkciksICZiZmRfb2Zm c2V0KTsNCj4gLQ0KPiAtCSAgICAgIC8qIFdyaXRlIG1lbXZhbC4gICovDQo+IC0JICAgICAgYmZk Y29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsDQo+IC0JCQkgICAgIHJlY29yZF9mdWxsX2dl dF9sb2MgKHJlY29yZF9mdWxsX2xpc3QpLA0KPiAtCQkJICAgICByZWNvcmRfZnVsbF9saXN0LT51 Lm1lbS5sZW4sICZiZmRfb2Zmc2V0KTsNCj4gLQkgICAgICBicmVhazsNCj4gLQ0KPiAtCSAgICAg IGNhc2UgcmVjb3JkX2Z1bGxfZW5kOg0KPiAtCQlpZiAocmVjb3JkX2RlYnVnKQ0KPiAtCQkgIGdk Yl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkgICAgICAiICBXcml0aW5nIHJlY29yZF9mdWxs X2VuZCAoMSArICINCj4gLQkJCSAgICAgICIlbHUgKyAlbHUgYnl0ZXMpXG4iLA0KPiAtCQkJICAg ICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoc2lnbmFsKSwNCj4gLQkJCSAgICAgICh1bnNpZ25l ZCBsb25nKSBzaXplb2YgKGNvdW50KSk7DQo+IC0JCS8qIFdyaXRlIHNpZ25hbCB2YWx1ZS4gICov DQo+IC0JCXNpZ25hbCA9IG5ldG9yZGVyMzIgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5kLnNpZ3Zh bCk7DQo+IC0JCWJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmc2lnbmFsLA0KPiAt CQkJICAgICAgIHNpemVvZiAoc2lnbmFsKSwgJmJmZF9vZmZzZXQpOw0KPiAtDQo+IC0JCS8qIFdy aXRlIGluc24gY291bnQuICAqLw0KPiAtCQljb3VudCA9IG5ldG9yZGVyMzIgKHJlY29yZF9mdWxs X2xpc3QtPnUuZW5kLmluc25fbnVtKTsNCj4gLQkJYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCks IG9zZWMsICZjb3VudCwNCj4gLQkJCSAgICAgICBzaXplb2YgKGNvdW50KSwgJmJmZF9vZmZzZXQp Ow0KPiAtCQlicmVhazsNCj4gLQkgICAgfQ0KPiArCSAgcmVjb3JkX2Z1bGxfd3JpdGVfZW50cnlf dG9fYmZkIChlbnRyeSwgb2JmZCwgb3NlYywgJmJmZF9vZmZzZXQsDQo+ICsJCQkJCSAgZ2RiYXJj aCk7DQo+ICAJfQ0KPiAtDQo+ICAgICAgICAvKiBFeGVjdXRlIGVudHJ5LiAgKi8NCj4gLSAgICAg IHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdkYmFyY2gsIHJlY29yZF9mdWxsX2xp c3QpOw0KPiAtDQo+IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gLQlyZWNv cmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+bmV4dDsNCj4gLSAgICAgIGVsc2UNCj4g LQlicmVhazsNCj4gLSAgICB9DQo+IC0NCj4gLSAgLyogUmV2ZXJzZSBleGVjdXRlIHRvIGN1cl9y ZWNvcmRfZnVsbF9saXN0LiAgKi8NCj4gLSAgd2hpbGUgKDEpDQo+IC0gICAgew0KPiAtICAgICAg LyogQ2hlY2sgZm9yIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxvZy4gICovDQo+IC0gICAgICBpZiAo cmVjb3JkX2Z1bGxfbGlzdCA9PSBjdXJfcmVjb3JkX2Z1bGxfbGlzdCkNCj4gLQlicmVhazsNCj4g LQ0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2RiYXJjaCwgcmVj b3JkX2Z1bGxfbGlzdCk7DQo+IC0NCj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0LT5wcmV2 KQ0KPiAtCXJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9saXN0LT5wcmV2Ow0KPiArICAg ICAgaWYgKGkgPCByZWNvcmRfZnVsbF9uZXh0X2luc24pDQo+ICsJcmVjb3JkX2Z1bGxfZXhlY19p bnNuIChyZWdjYWNoZSwgZ2RiYXJjaCwgcmVjb3JkX2Z1bGxfbGlzdFtpXSk7DQo+ICAgICAgfQ0K PiANCj4gICAgdW5saW5rX2ZpbGUua2VlcCAoKTsNCj4gQEAgLTI3NDIsMTEgKzI1NjAsMTEgQEAg cmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnNhdmVfcmVjb3JkIChjb25zdA0KPiBjaGFyICpyZWNm aWxlbmFtZSkNCj4gIH0NCj4gDQo+ICAvKiByZWNvcmRfZnVsbF9nb3RvX2luc24gLS0gcmV3aW5k IHRoZSByZWNvcmQgbG9nIChmb3J3YXJkIG9yIGJhY2t3YXJkLA0KPiAtICAgZGVwZW5kaW5nIG9u IERJUikgdG8gdGhlIGdpdmVuIGVudHJ5LCBjaGFuZ2luZyB0aGUgcHJvZ3JhbSBzdGF0ZQ0KPiAt ICAgY29ycmVzcG9uZGluZ2x5LiAgKi8NCj4gKyAgIGRlcGVuZGluZyBvbiBESVIpIHRvIHRoZSBl bnRyeSBpbiBwb3NpdGlvbiBUQVJHRVRfSU5TTiBpbiB0aGUgaGlzdG9yeSwNCj4gKyAgIGNoYW5n aW5nIHRoZSBwcm9ncmFtIHN0YXRlIGNvcnJlc3BvbmRpbmdseS4gICovDQo+IA0KPiAgc3RhdGlj IHZvaWQNCj4gLXJlY29yZF9mdWxsX2dvdG9faW5zbiAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5 ICplbnRyeSwNCj4gK3JlY29yZF9mdWxsX2dvdG9faW5zbiAoc2l6ZV90IHRhcmdldF9pbnNuLA0K PiAgCQkgICAgICAgZW51bSBleGVjX2RpcmVjdGlvbl9raW5kIGRpcikNCj4gIHsNCj4gICAgc2Nv cGVkX3Jlc3RvcmUgcmVzdG9yZV9vcGVyYXRpb25fZGlzYWJsZQ0KPiBAQCAtMjc1NywxNyArMjU3 NSwxMiBAQCByZWNvcmRfZnVsbF9nb3RvX2luc24gKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeQ0K PiAqZW50cnksDQo+ICAgIC8qIEFzc3VtZSBldmVyeXRoaW5nIGlzIHZhbGlkOiB3ZSB3aWxsIGhp dCB0aGUgZW50cnksDQo+ICAgICAgIGFuZCB3ZSB3aWxsIG5vdCBoaXQgdGhlIGVuZCBvZiB0aGUg cmVjb3JkaW5nLiAgKi8NCj4gDQo+IC0gIGlmIChkaXIgPT0gRVhFQ19GT1JXQVJEKQ0KPiAtICAg IHJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9saXN0LT5uZXh0Ow0KPiAtDQo+IC0gIGRv DQo+IC0gICAgew0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2Ri YXJjaCwgcmVjb3JkX2Z1bGxfbGlzdCk7DQo+IC0gICAgICBpZiAoZGlyID09IEVYRUNfUkVWRVJT RSkNCj4gLQlyZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+cHJldjsNCj4gLSAg ICAgIGVsc2UNCj4gLQlyZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+bmV4dDsN Cj4gLSAgICB9IHdoaWxlIChyZWNvcmRfZnVsbF9saXN0ICE9IGVudHJ5KTsNCj4gKyAgaWYgKGRp ciA9PSBFWEVDX1JFVkVSU0UpDQo+ICsgICAgZm9yIChpbnQgaSA9IHJlY29yZF9mdWxsX25leHRf aW5zbjsgaSA+IHRhcmdldF9pbnNuOyBpLS0pDQo+ICsgICAgICByZWNvcmRfZnVsbF9leGVjX2lu c24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfZnVsbF9saXN0W2kgLSAxXSk7DQo+ICsgIGVs c2UNCj4gKyAgICBmb3IgKGludCBpID0gcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOyBpIDwgdGFyZ2V0 X2luc247IGkrKykNCj4gKyAgICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdk YmFyY2gsIHJlY29yZF9mdWxsX2xpc3RbaV0pOw0KPiAgfQ0KPiANCj4gIC8qIEFsaWFzIGZvciAi dGFyZ2V0IHJlY29yZC1mdWxsIi4gICovDQo+IEBAIC0yNzk4LDYxICsyNjExLDM2IEBAIHNldF9y ZWNvcmRfZnVsbF9pbnNuX21heF9udW0gKGNvbnN0IGNoYXINCj4gKmFyZ3MsIGludCBmcm9tX3R0 eSwNCj4gIHN0YXRpYyB2b2lkDQo+ICBtYWludGVuYW5jZV9wcmludF9yZWNvcmRfaW5zdHJ1Y3Rp b24gKGNvbnN0IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkNCj4gIHsNCj4gLSAgc3RydWN0IHJl Y29yZF9mdWxsX2VudHJ5ICp0b19wcmludCA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+ICsgIGlmIChy ZWNvcmRfZnVsbF9saXN0LmVtcHR5ICgpKQ0KPiArICAgIGVycm9yIChfKCJOb3QgZW5vdWdoIHJl Y29yZGVkIGhpc3RvcnkiKSk7DQo+IA0KPiArICBpbnQgb2Zmc2V0ID0gcmVjb3JkX2Z1bGxfbmV4 dF9pbnNuIC0gMTsNCj4gKyAgLyogUmVkdWNlIHRoZSBvZmZzZXQgYnkgMSBpZiB0aGUgcmVjb3Jk X2Z1bGxfbmV4dF9pbnNuIGlzIGFmdGVyIHRoZSBlbmQNCj4gKyAgICAgc28gdGhhdCB3ZSBzaG93 IHRoZSBsYXN0IHJlY29yZGVkIGluc3RydWN0aW9uIGluc3RlYWQgb2YgY3Jhc2hpbmcuICAqLw0K PiArICBpZiAob2Zmc2V0ID09IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSkNCj4gKyAgICBvZmZz ZXQtLTsNCj4gICAgaWYgKGFyZ3MgIT0gbnVsbHB0cikNCj4gICAgICB7DQo+IC0gICAgICBpbnQg b2Zmc2V0ID0gdmFsdWVfYXNfbG9uZyAocGFyc2VfYW5kX2V2YWwgKGFyZ3MpKTsNCj4gLSAgICAg IGlmIChvZmZzZXQgPiAwKQ0KPiAtCXsNCj4gLQkgIC8qIE1vdmUgZm9yd2FyZCBPRkZTRVQgaW5z dHJ1Y3Rpb25zLiAgV2Uga25vdyB3ZSBmb3VuZCB0aGUNCj4gLQkgICAgIGVuZCBvZiBhbiBpbnN0 cnVjdGlvbiB3aGVuIHRvX3ByaW50LT50eXBlIGlzIHJlY29yZF9mdWxsX2VuZC4gICovDQo+IC0J ICB3aGlsZSAodG9fcHJpbnQtPm5leHQgIT0gbnVsbHB0ciAmJiBvZmZzZXQgPiAwKQ0KPiAtCSAg ICB7DQo+IC0JICAgICAgdG9fcHJpbnQgPSB0b19wcmludC0+bmV4dDsNCj4gLQkgICAgICBpZiAo dG9fcHJpbnQtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiAtCQlvZmZzZXQtLTsNCj4gLQkg ICAgfQ0KPiAtCSAgaWYgKG9mZnNldCAhPSAwKQ0KPiAtCSAgICBlcnJvciAoXygiTm90IGVub3Vn aCByZWNvcmRlZCBoaXN0b3J5IikpOw0KPiAtCX0NCj4gLSAgICAgIGVsc2UNCj4gLQl7DQo+IC0J ICB3aGlsZSAodG9fcHJpbnQtPnByZXYgIT0gbnVsbHB0ciAmJiBvZmZzZXQgPCAwKQ0KPiAtCSAg ICB7DQo+IC0JICAgICAgdG9fcHJpbnQgPSB0b19wcmludC0+cHJldjsNCj4gLQkgICAgICBpZiAo dG9fcHJpbnQtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiAtCQlvZmZzZXQrKzsNCj4gLQkg ICAgfQ0KPiAtCSAgaWYgKG9mZnNldCAhPSAwKQ0KPiAtCSAgICBlcnJvciAoXygiTm90IGVub3Vn aCByZWNvcmRlZCBoaXN0b3J5IikpOw0KPiAtCX0NCj4gKyAgICAgIG9mZnNldCArPSB2YWx1ZV9h c19sb25nIChwYXJzZV9hbmRfZXZhbCAoYXJncykpOw0KPiArICAgICAgaWYgKG9mZnNldCA+PSBy ZWNvcmRfZnVsbF9saXN0LnNpemUgKCkgfHwgb2Zmc2V0IDwgMCkNCj4gKwllcnJvciAoXygiTm90 IGVub3VnaCByZWNvcmRlZCBoaXN0b3J5IikpOw0KPiAgICAgIH0NCj4gLSAgZ2RiX2Fzc2VydCAo dG9fcHJpbnQgIT0gbnVsbHB0cik7DQo+ICsgIGF1dG8gdG9fcHJpbnQgPSByZWNvcmRfZnVsbF9s aXN0LmJlZ2luICgpICsgb2Zmc2V0Ow0KPiANCj4gICAgZ2RiYXJjaCAqYXJjaCA9IGN1cnJlbnRf aW5mZXJpb3IgKCktPmFyY2ggKCk7DQo+IA0KPiAtICAvKiBHbyBiYWNrIHRvIHRoZSBzdGFydCBv ZiB0aGUgaW5zdHJ1Y3Rpb24uICAqLw0KPiAtICB3aGlsZSAodG9fcHJpbnQtPnByZXYgIT0gbnVs bHB0ciAmJiB0b19wcmludC0+cHJldi0+dHlwZSAhPSByZWNvcmRfZnVsbF9lbmQpDQo+IC0gICAg dG9fcHJpbnQgPSB0b19wcmludC0+cHJldjsNCj4gLQ0KPiAtICAvKiBpZiB3ZSdyZSBpbiB0aGUg Zmlyc3QgcmVjb3JkLCB0aGVyZSBhcmUgbm8gYWN0dWFsIGluc3RydWN0aW9ucw0KPiAtICAgICBy ZWNvcmRlZC4gIFdhcm4gdGhlIHVzZXIgYW5kIGxlYXZlLiAgKi8NCj4gLSAgaWYgKHRvX3ByaW50 ID09ICZyZWNvcmRfZnVsbF9maXJzdCkNCj4gLSAgICBlcnJvciAoXygiTm90IGVub3VnaCByZWNv cmRlZCBoaXN0b3J5IikpOw0KPiAtDQo+IC0gIHdoaWxlICh0b19wcmludC0+dHlwZSAhPSByZWNv cmRfZnVsbF9lbmQpDQo+ICsgIGZvciAoYXV0byBlbnRyeSA6IHRvX3ByaW50LT5lZmZlY3RzKQ0K PiAgICAgIHsNCj4gLSAgICAgIHN3aXRjaCAodG9fcHJpbnQtPnR5cGUpDQo+ICsgICAgICBzd2l0 Y2ggKGVudHJ5LnR5cGUpDQo+ICAJew0KPiAgCSAgY2FzZSByZWNvcmRfZnVsbF9yZWc6DQo+ICAJ ICAgIHsNCj4gLQkgICAgICB0eXBlICpyZWd0eXBlID0gZ2RiYXJjaF9yZWdpc3Rlcl90eXBlIChh cmNoLCB0b19wcmludC0NCj4gPnUucmVnLm51bSk7DQo+ICsJICAgICAgdHlwZSAqcmVndHlwZSA9 IGdkYmFyY2hfcmVnaXN0ZXJfdHlwZSAoYXJjaCwgZW50cnkudS5yZWcubnVtKTsNCj4gIAkgICAg ICB2YWx1ZSAqdmFsDQo+ICAJCSAgPSB2YWx1ZV9mcm9tX2NvbnRlbnRzIChyZWd0eXBlLA0KPiAt CQkJCQkgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAodG9fcHJpbnQpKTsNCj4gKwkJCQkJIHJlY29yZF9m dWxsX2dldF9sb2MgKCZlbnRyeSkpOw0KPiAgCSAgICAgIGdkYl9wcmludGYgKCJSZWdpc3RlciAl cyBjaGFuZ2VkOiAiLA0KPiAtCQkJICBnZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGFyY2gsIHRvX3By aW50LQ0KPiA+dS5yZWcubnVtKSk7DQo+ICsJCQkgIGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoYXJj aCwgZW50cnkudS5yZWcubnVtKSk7DQo+ICAJICAgICAgc3RydWN0IHZhbHVlX3ByaW50X29wdGlv bnMgb3B0czsNCj4gIAkgICAgICBnZXRfdXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7DQo+ICAJ ICAgICAgb3B0cy5yYXcgPSB0cnVlOw0KPiBAQCAtMjg2MiwxNyArMjY1MCwxNiBAQCBtYWludGVu YW5jZV9wcmludF9yZWNvcmRfaW5zdHJ1Y3Rpb24gKGNvbnN0DQo+IGNoYXIgKmFyZ3MsIGludCBm cm9tX3R0eSkNCj4gIAkgICAgfQ0KPiAgCSAgY2FzZSByZWNvcmRfZnVsbF9tZW06DQo+ICAJICAg IHsNCj4gLQkgICAgICBnZGJfYnl0ZSAqYiA9IHJlY29yZF9mdWxsX2dldF9sb2MgKHRvX3ByaW50 KTsNCj4gKwkgICAgICBnZGJfYnl0ZSAqYiA9IHJlY29yZF9mdWxsX2dldF9sb2MgKCZlbnRyeSk7 DQo+ICAJICAgICAgZ2RiX3ByaW50ZiAoIiVkIGJ5dGVzIG9mIG1lbW9yeSBhdCBhZGRyZXNzICVz IGNoYW5nZWQgZnJvbToiLA0KPiAtCQkJICB0b19wcmludC0+dS5tZW0ubGVuLA0KPiAtCQkJICBw cmludF9jb3JlX2FkZHJlc3MgKGFyY2gsIHRvX3ByaW50LT51Lm1lbS5hZGRyKSk7DQo+IC0JICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b19wcmludC0+dS5tZW0ubGVuOyBpKyspDQo+ICsJCQkg IGVudHJ5LnUubWVtLmxlbiwNCj4gKwkJCSAgcHJpbnRfY29yZV9hZGRyZXNzIChhcmNoLCBlbnRy eS51Lm1lbS5hZGRyKSk7DQo+ICsJICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS51Lm1l bS5sZW47IGkrKykNCj4gIAkJZ2RiX3ByaW50ZiAoIiAlMDJ4IiwgYltpXSk7DQo+ICAJICAgICAg Z2RiX3ByaW50ZiAoIlxuIik7DQo+ICAJICAgICAgYnJlYWs7DQo+ICAJICAgIH0NCj4gIAl9DQo+ IC0gICAgICB0b19wcmludCA9IHRvX3ByaW50LT5uZXh0Ow0KPiAgICAgIH0NCj4gIH0NCj4gDQo+ IEBAIC0yODgwLDExICsyNjY3LDYgQEAgSU5JVF9HREJfRklMRSAocmVjb3JkX2Z1bGwpDQo+ICB7 DQo+ICAgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjOw0KPiANCj4gLSAgLyogSW5pdCByZWNv cmRfZnVsbF9maXJzdC4gICovDQo+IC0gIHJlY29yZF9mdWxsX2ZpcnN0LnByZXYgPSBOVUxMOw0K PiAtICByZWNvcmRfZnVsbF9maXJzdC5uZXh0ID0gTlVMTDsNCj4gLSAgcmVjb3JkX2Z1bGxfZmly c3QudHlwZSA9IHJlY29yZF9mdWxsX2VuZDsNCj4gLQ0KPiAgICBhZGRfdGFyZ2V0IChyZWNvcmRf ZnVsbF90YXJnZXRfaW5mbywgcmVjb3JkX2Z1bGxfb3Blbik7DQo+ICAgIGFkZF9kZXByZWNhdGVk X3RhcmdldF9hbGlhcyAocmVjb3JkX2Z1bGxfdGFyZ2V0X2luZm8sICJyZWNvcmQiKTsNCj4gICAg YWRkX3RhcmdldCAocmVjb3JkX2Z1bGxfY29yZV90YXJnZXRfaW5mbywgcmVjb3JkX2Z1bGxfb3Bl bik7DQo+IGRpZmYgLS1naXQgYS9nZGIvcmVjb3JkLWZ1bGwuaCBiL2dkYi9yZWNvcmQtZnVsbC5o DQo+IGluZGV4IDUxZWZmZTc0NTYwLi5jMzI3ZDg3OWE4YSAxMDA2NDQNCj4gLS0tIGEvZ2RiL3Jl Y29yZC1mdWxsLmgNCj4gKysrIGIvZ2RiL3JlY29yZC1mdWxsLmgNCj4gQEAgLTQxLDcgKzQxLDYg QEAgZW51bSByZWNvcmRfcmVzdWx0DQo+IA0KPiAgZXh0ZXJuIGludCByZWNvcmRfZnVsbF9hcmNo X2xpc3RfYWRkX3JlZyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50DQo+IG51bSk7DQo+ ICBleHRlcm4gaW50IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRk ciwgaW50IGxlbik7DQo+IC1leHRlcm4gaW50IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5k ICh2b2lkKTsNCj4gDQo+ICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb2Nlc3MgcmVjb3JkIHRh cmdldCBpcyBvcGVuLiAgKi8NCj4gIGV4dGVybiBpbnQgcmVjb3JkX2Z1bGxfaXNfdXNlZCAodm9p ZCk7DQo+IGRpZmYgLS1naXQgYS9nZGIvcmlzY3YtdGRlcC5jIGIvZ2RiL3Jpc2N2LXRkZXAuYw0K PiBpbmRleCA2YjVjOWMwMmQ0Ni4uZjViMWY2Njg0NGMgMTAwNjQ0DQo+IC0tLSBhL2dkYi9yaXNj di10ZGVwLmMNCj4gKysrIGIvZ2RiL3Jpc2N2LXRkZXAuYw0KPiBAQCAtNTQ2Niw4ICs1NDY2LDUg QEAgcmlzY3ZfcHJvY2Vzc19yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiAgICBpZiAocmVzICE9IFJFQ09SRF9TVUNDRVNTKQ0K PiAgICAgIHJldHVybiByZXM7DQo+IA0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2Fk ZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAtDQo+ICAgIHJldHVybiAwOw0KPiAgfQ0K PiBkaWZmIC0tZ2l0IGEvZ2RiL3JzNjAwMC10ZGVwLmMgYi9nZGIvcnM2MDAwLXRkZXAuYw0KPiBp bmRleCBlMTM1ZGY5NGE0MC4uZjk2NDg4OWE0OWYgMTAwNjQ0DQo+IC0tLSBhL2dkYi9yczYwMDAt dGRlcC5jDQo+ICsrKyBiL2dkYi9yczYwMDAtdGRlcC5jDQo+IEBAIC03MTM4LDggKzcxMzgsNiBA QCBwcGNfcHJvY2Vzc19wcmVmaXhfaW5zdHJ1Y3Rpb24gKGludCBpbnNuX3ByZWZpeCwNCj4gaW50 IGluc25fc3VmZml4LA0KPiAgICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHJl Z2NhY2hlLCBQUENfUENfUkVHTlVNKSkNCj4gICAgICByZXR1cm4gLTE7DQo+IA0KPiAtICBpZiAo cmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAg ICByZXR1cm4gMDsNCj4gIH0NCj4gDQo+IEBAIC03NDQ3LDggKzc0NDUsNiBAQCBwcGNfcHJvY2Vz c19yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLA0KPiANCj4gICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdj YWNoZSwgUFBDX1BDX1JFR05VTSkpDQo+ICAgICAgcmV0dXJuIC0xOw0KPiAtICBpZiAocmVjb3Jk X2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAgICByZXR1 cm4gMDsNCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9nZGIvczM5MC1saW51eC10ZGVwLmMgYi9n ZGIvczM5MC1saW51eC10ZGVwLmMNCj4gaW5kZXggM2NkNmIzNTlkMTMuLjZiZWEzMGYwOGRjIDEw MDY0NA0KPiAtLS0gYS9nZGIvczM5MC1saW51eC10ZGVwLmMNCj4gKysrIGIvZ2RiL3MzOTAtbGlu dXgtdGRlcC5jDQo+IEBAIC05MTAsOSArOTEwLDYgQEAgczM5MF9saW51eF9yZWNvcmRfc2lnbmFs IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwN Cj4gICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfbWVtIChzcCwgc2l6ZW9mX3J0X3Np Z2ZyYW1lKSkNCj4gICAgICByZXR1cm4gLTE7DQo+IA0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJj aF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAtDQo+ICAgIHJldHVybiAw Ow0KPiAgfQ0KPiANCj4gZGlmZiAtLWdpdCBhL2dkYi9zMzkwLXRkZXAuYyBiL2dkYi9zMzkwLXRk ZXAuYw0KPiBpbmRleCBmOWQ3YmRkMDRlNC4uMzZjZTY1OWVhMTUgMTAwNjQ0DQo+IC0tLSBhL2dk Yi9zMzkwLXRkZXAuYw0KPiArKysgYi9nZGIvczM5MC10ZGVwLmMNCj4gQEAgLTcwMTksOCArNzAx OSw2IEBAIHMzOTBfcHJvY2Vzc19yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLA0KPiBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiANCj4gICAgaWYgKHJlY29yZF9mdWxsX2FyY2hf bGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgUzM5MF9QU1dBX1JFR05VTSkpDQo+ICAgICAgcmV0dXJu IC0xOw0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAg cmV0dXJuIC0xOw0KPiAgICByZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC0tDQo+IDIuNTQuMA0KPiAN Cg0KQ2hyaXN0aW5hDQoNCkludGVsIERldXRzY2hsYW5kIEdtYkgNClJlZ2lzdGVyZWQgQWRkcmVz czogRG9ybmFjaGVyIFN0cmFzc2UgMSwgODU2MjIgRmVsZGtpcmNoZW4sIEdlcm1hbnkNClRlbDog KzQ5IDg5IDk5MSA0MzAsIHd3dy5pbnRlbC5kZQ0KTWFuYWdpbmcgRGlyZWN0b3JzOiBIYXJyeSBE ZW1hcywgSmVmZnJleSBTY2huZWlkZXJtYW4sIFlpbiBDaG9uZyBTb3JyZWxsDQpDaGFpcnBlcnNv biBvZiB0aGUgU3VwZXJ2aXNvcnkgQm9hcmQ6IE5pY29sZSBMYXUNClJlZ2lzdGVyZWQgU2VhdDog TXVuaWNoDQpDb21tZXJjaWFsIFJlZ2lzdGVyOiBBbXRzZ2VyaWNodCBNdWVuY2hlbiBIUkIgMTg2 OTI4Cg==