From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 1DPNEFwuBGr7ZTUAWB0awg (envelope-from ) for ; Wed, 13 May 2026 03:55:08 -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=FK6mjCla; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 0EABB1E093; Wed, 13 May 2026 03:55:08 -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 35AF91E093 for ; Wed, 13 May 2026 03:54:58 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 909504BA23DB for ; Wed, 13 May 2026 07:54:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 909504BA23DB 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=FK6mjCla Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by sourceware.org (Postfix) with ESMTPS id 121C74BA5439 for ; Wed, 13 May 2026 07:54:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 121C74BA5439 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 121C74BA5439 Authentication-Results: sourceware.org; arc=fail smtp.remote-ip=198.175.65.9 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1778658854; cv=fail; b=gZjCT+j3MPuhwn/hHFD1NR8WxvjvDLNn1cwFnbN245TtI11saZNeg1YxAD03psVAVMOsEnMlpsDx7VaWgn9XQ1w4EpCaQLa+8bq2bkPuXUfAvqPOcP2aLxGP5XQdQ0cJ9lVeJjYtAAmcjoSQqeVUgHqhjkAlaA5Kef/AlFK7Ibg= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1778658854; c=relaxed/simple; bh=9Vwtv1yZn9WFjaV5HzWEnsePjun9yrx/licr5xgh8ys=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=g7AOESejt9jL5vAV4TqKvLLdH5F1fbdow9Vny1655ZnEZsWqmyEl3qYMUXVUesWAPsGf5A47hVAACi37tGSi2aJ9iWzy908yYRpc4xZQeFP//TGbnkKNZCoUYtWGJ8B7PCPx27TbV+CllmckAXP52sxb0YgX8QccZqfiJH1dDeI= 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=FK6mjCla DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 121C74BA5439 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1778658855; x=1810194855; h=from:to:subject:date:message-id:references:in-reply-to: mime-version:content-transfer-encoding; bh=9Vwtv1yZn9WFjaV5HzWEnsePjun9yrx/licr5xgh8ys=; b=FK6mjClaNYQ5UXWAvC7uWQnDo+wnZcBOfMFabPEW35qgrTTcSaG7Q/z1 0xyNAsKgyWBa9l1S/zf8O4fm4W1oE8WkikcryfQgVpDtOBE0472Aa1Y1a rgLig6QDPu6u7xiV6/rxlppnmCfAECpaiXnKdaVVdUbSk2S/7zD6+f91c ifR/RMYQ9sgnzZUYSb+XsKh9KCSIbzeTRl/mMcLMsSjMZ5iQjjysBIKRp e68xbQMC/N0pJwwq8qCGjChdgvAo3XGBhwacFvw8ZfVdJogsEXmGCtZFo MOFNX5Bz4NlsDWGg9cG1g42uxhnvV8aV7TpvaGng1Iy5rwJ0RzUBM8AMb A==; X-CSE-ConnectionGUID: Pshqz1MFTt6qp3DXx5v20A== X-CSE-MsgGUID: tqCeYSykTAmCxLafrVhaBA== X-IronPort-AV: E=McAfee;i="6800,10657,11784"; a="102245770" X-IronPort-AV: E=Sophos;i="6.23,232,1770624000"; d="scan'208";a="102245770" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2026 00:54:13 -0700 X-CSE-ConnectionGUID: zE7c74E2Ruy2C4i/9Aub4g== X-CSE-MsgGUID: stHj9HgbR5q9Zyc5J803KQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,232,1770624000"; d="scan'208";a="276123097" Received: from fmsmsx901.amr.corp.intel.com ([10.18.126.90]) by orviesa001.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2026 00:54:12 -0700 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Wed, 13 May 2026 00:54:11 -0700 Received: from fmsedg902.ED.cps.intel.com (10.1.192.144) 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 via Frontend Transport; Wed, 13 May 2026 00:54:11 -0700 Received: from BN8PR05CU002.outbound.protection.outlook.com (52.101.57.69) by edgegateway.intel.com (192.55.55.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Wed, 13 May 2026 00:54:11 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J3G5Y4CxHm6J2IgbOUZVIgL7np26/9nW6Iz99kIAdesNaQAqhrQFU1REBxMAljGlYLWiB0OwjluY7zaLFsmS+Tk+s/UqUP9YA02B1Co2WuExvwCPURiUxQiFVRlpFy5y6y3nT6Ar/BYcJRlkIcxwOWBrpTWe7iKKjAHiyhD1Ju2MOW5WAk6RriawiwXVFhmB1+UEkdwq+xTW/DfQtV8WCfmFc27NFkxj1F55jDG5ASb07Uy6EPA/GEu4PXnExc1eo8GYIamA1lsUmbwRz9ClK/oTcq4xvySGDjGjqBxa3mNdlXyxRm+bJmiD3jHM/YRtg7W33uNDbFgfvccDpTxM/g== 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=DpcraPQVz73rkpwaC+H6TgNdVrVcDVaFQVW+3kJqjzQ=; b=WDcbsLREjUx0uJNMaNTY7NxZfnfoQODH1XsM1wR4XNGDVowGwZyVEhfDmN8/NMM95mZq2zy6eEbEhUGZCSMSAxMHtC5GZUa9GIYPV/hQ+9qLDjHu90tK6q46sOshXIDQbSrA2ZwBqRLYBRST/WIfwxZohph7BqBx2exC2kBStMW70HnuRYX2/CDhwabJfO1f8tiA6ZMaawi7Nm1DjApVUkcAVv5N3BXfxGsnGE0SYB8To/yfhxQKLoHH1pLlw3MfHlYXmrbG7rgMklowwZ0Ff/CeK43fXXDdtE/pY2E499RfFBL/7KE5GTdcOupKhgnB7syKCFMUc2SQjQNs9p+0+Q== 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 SA1PR11MB9825.namprd11.prod.outlook.com (2603:10b6:806:4d7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May 2026 07:54:04 +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.20.9913.009; Wed, 13 May 2026 07:54:03 +0000 From: "Schimpe, Christina" To: Guinevere Larsen , "gdb-patches@sourceware.org" Subject: RE: [PATCH v2 1/6] gdb/record: Refactor record history Thread-Topic: [PATCH v2 1/6] gdb/record: Refactor record history Thread-Index: AQHc0zWs2tneStgsnkGdGTFQ8Vh1hbYA9WWAgAH0sQCABBlGQIAD1sIAgADWuTA= Date: Wed, 13 May 2026 07:54:03 +0000 Message-ID: References: <20260423152604.171356-1-guinevere@redhat.com> <20260423152604.171356-2-guinevere@redhat.com> <9de15785-0595-417b-b14d-fe5820738231@redhat.com> <23236510-ef59-4396-91eb-5763725f01cc@redhat.com> In-Reply-To: <23236510-ef59-4396-91eb-5763725f01cc@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_|SA1PR11MB9825:EE_ x-ms-office365-filtering-correlation-id: 43561b8b-6705-4454-c812-08deb0c4cd40 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|10070799003|366016|11063799003|3023799003|56012099003|18002099003|22082099003|18096099006|17096099006|38070700021|13003099007; x-microsoft-antispam-message-info: yKwt0f4c6T1Kzm4oDkCDJeeF2d/ZmBp9F9ppsBHmxwBhgx+ZXW7TrRNMx1O3VpBai4DctMH2Qh6fLan4yUWyaL4JXjfG0KJocDzhx9BHrdiHWu8Jl96WTVlgWlQwucHkGYxXsjbTtvGXjGOZ6rQsAgN+qNxent/XfYbELZV3hGtSW+aKH+3rsQXDhDpOLK7yaL92UlT1DjABVNyOSdaMOS7cA9ZVtJ8nz/vi4mlOd0UtqpXmOAi0mKHfOdtxp9gZLUya6ichLADOV/67u747Jt/+3i+2UzSxmseufqzHL0V3TPraabqOGykMJq2TeCQq4wgQQ/iLgulql9u+iXj7J0nA7egLsvh7bvKU2338WdNL7cKwO7WK5BmFOJKsNjNqFNEe/XjwA2PRn4k8yLiNTssdOPhTml68zJZyJ7HUNPVhg3tA8LdHhB2gwmf5JDdcg+vBs8zVGJA7Q7hrhRJXuzv9p9y7PEq3LeeD70Q0A0DhpZKkdBG6X8gBksSZ6M61HuUvMTIzungStAXEWbsLyO8CqWVzfU06+YRaWLKpuyrKL357HKPnnVUegQXbL4t9/8E3Gx2RBrifvI9HrnuzsJnwZTOFBJAFMyq9buPLlVBQfb0nKJz6ZqvDASsZVcGGXppteBhOeMxLh7Nafyqdfg/Z5j0eTzrYdJgNlAcm8poG99/+v1kr9r9lnOlELs4l 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)(376014)(1800799024)(10070799003)(366016)(11063799003)(3023799003)(56012099003)(18002099003)(22082099003)(18096099006)(17096099006)(38070700021)(13003099007); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 2 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cDFqOXZ3cVExV1JoZWZmZHVqeGhmc3lMRVJHMWtGSVN0TTBvaHgvY216bXRn?= =?utf-8?B?YXpBSGg5ZUU2UjBqaXk0ZDN3czFNUGxMaEZWdHpGdGdPOUxCZHY0b3hXUkZX?= =?utf-8?B?dlVCeXUvQlRFYjJqVHRnZWt6V2pnZkUrMVZCYXBEcUpPUDYzV0hnUHlpdG9z?= =?utf-8?B?WWxRT1dvKzNneHoyL3lMTGltMUNtVCtueGY5U0VxaTZsb3VIVnJBaU02aklG?= =?utf-8?B?dUd5QTNOU2JTVG44SEJsUEpCYk9rNUY5Z2U3YmN1VmNjTlBVSzBmankvTVRZ?= =?utf-8?B?K0hQWVRFZ0crUGNoSkcwOVYzK3pmbG4rSDBDdXpLQ1l3VHd0S1RkYUM2Mm9j?= =?utf-8?B?Qm1ZcmJ3aExnamdPOTFJdmdWVTVvREJMQ2EvMjZYcC9RZTRuTE84ME9oVXFs?= =?utf-8?B?WGxCWTdza1loWXk2NG43T3lxME95SVJ5dXh2c3dRTHZhenlIMUdkbXphN1NJ?= =?utf-8?B?QytwNEdvNXhRdXAraXAxMG92RjhIUndxMWt2WHpzdk1FZTdkY2o2VWdYSWc0?= =?utf-8?B?cG1oaWxFRXg3OS9PTGl4c20zOFo2eG90MUpmNlRhL1VxOUduTGs4elN6ZG9U?= =?utf-8?B?NWp4MVFQTjBwQmJNS3pKaU54VWJoeWpGbDZPdTl3Q09Kb0pQYzVVbUdtK0Yy?= =?utf-8?B?NE4yYk5HTnpyUUJqYTU0V25ad2hTaXplZmptcWhIRzBiWXgxTFZobFJzMXpW?= =?utf-8?B?bmZuQ2haMitmdVViVjRHdm1POC83dkZjdkhTb0ZHMGhSQmF4MU5Ca2NOYmpB?= =?utf-8?B?MGtVNEttbHVWMUthdEtEVW4vNHpKUDZtSGtINjR3NFdoV080WVlETCtVT2Ji?= =?utf-8?B?Ri9hcC9jd2hzWGRsRXpwQWtVQ3NCQ1lGZFk2M0R6aTNvNzRGeDRkU3JWNWNX?= =?utf-8?B?bGFSQVkzT0Vqa2svRzlBRXFlYVp0Z1VLUU1BOXd0MnJOK00rYWk4UC84RG1h?= =?utf-8?B?ZVlTY3B5MDRJQi84UjZCelllL1pzMllwR3hkbWsyeGIwUmJjU1JQemVPRlNs?= =?utf-8?B?KzUvNEU0ZFBlY1R0SEZteHNraStQaHVIMHZQL09ZRExxZnU1cE1BdlNNVUtE?= =?utf-8?B?aHhiRG0rOGJxaUxsNDZLdlVGajRHZFpNZDhBZnRsNjN3QVkyYlowbWx5SlVw?= =?utf-8?B?ZWFsUkxYN2dyaDk5RTlacXFsZ2U0RWNoeEcvb3RMMEpMNkc1WDRUNWZWSENk?= =?utf-8?B?ZEdQYXM0TUJ1VzJObHRJczVRdkJiVGxseU92MXNLcTU0Z0M4c1d5YWR4aUFW?= =?utf-8?B?UWhnNVk2UEVsbythbStVMXljcGliK1JEdEhEK2FPM251RDVYT0N3RzFaamUz?= =?utf-8?B?cTNvbDRwVk1RY3hlZ1NRZ3pjYUZERVhza0NwODRubE5ZWjQ1WGpPQ3lzRnpN?= =?utf-8?B?b2VMeXJHUnd5ak5GQityU3YzSFZwQ1pabVdDVXJOdnppZnNpWG5sS3QyT0xL?= =?utf-8?B?b3NjL2lBZHpTbEN6ZUVNWWwzSG9WNGhhaVY4NXNXZGEwd0Y4blljQ0U5bVVZ?= =?utf-8?B?UU41S3A0czFOaldTdXZybGRsQVJlM1J1cjFKZVYrR0JlWjVabXpFd2VVWWRk?= =?utf-8?B?aFJ2ZmkxUlg0N21wcHNNb2tRU0loYkRNSzJlb0RSQXNXMWFoVG0yNkxhcW80?= =?utf-8?B?dm5KL3Bna0dKYUNiUE1jVTV4cVhtM3JobUNzUXZMeERoeHRXWkF0VjR6Y080?= =?utf-8?B?VC9yeXZuQnRlN2dRVnUwTjg4ZmxwZ1RwRVdsYWFITVVVZ1h0R0lzWmxHRnJF?= =?utf-8?B?YlNLb2R2UDc0dThCSTN5ay9NWitIYWZsbGxqcFRQQTNDZzNKb3I0UnhYSlVS?= =?utf-8?B?TlY3RkE0ZElHL1o1L2lnMXpYM1pVN0RJdklPWmxvYnlTMmhHWXZGb0tBY2ZM?= =?utf-8?B?SkZVbWxBWWhxbkEvdVhLd3lQUHFjWmE4bXFlTmFWL1g4SWRibmZRNVpJWkxH?= =?utf-8?B?emZhR0FpWTZDWDdrVmZxREpnN2w0WTFBRGJEalgxTTFRdHI1WHhmWmlvY3dN?= =?utf-8?B?U2tlTlp3eS9hUmgyeVYzY1FaTC9qa1lTNDh0ci9mb2M2WjNsQU95VXVQZHFE?= =?utf-8?B?ckh0aU8yVEFjOXY4TTlOc3hGbDJFNTlVWDhkVDlpamtZZnFhT0JEZWs0OUpJ?= =?utf-8?B?bTVnNHU1YnRRSWlEKzhFNG9EKzYya1VqNW5QZXA3a0pqcDNGNTgvclVZUk45?= =?utf-8?B?UnhldGVmN05Pcmo5R3NZOUhRZGVodW9wcEpFUzV4VHM4VnJ3bWMwNTI2VVVL?= =?utf-8?B?QzJ5U3A5WFltMmhaWVdKckw0ME1jZGI2Zm1rWVV5enRvZTFFeEpMd1F1SjBn?= =?utf-8?B?NnVKaXVnc1RvbXRzakM4ellveTJxWTVmUVVCRS9GY3FVekpyUGl1Q0dJbHQr?= =?utf-8?Q?sMG2+G1oFYqIxVHofr19Krz97c87Yn9y4XEHxAPUzZGUN?= x-ms-exchange-antispam-messagedata-1: 4Mu5DskIQaKcjg== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: sDZM7E48WeLpmkSBVftnme1PRL7A/trZmr29O3FnGUED1mq77tGJUKzHhIQ8dbvPPm2BddWo7hcZ6mCLhddpOtpDF+vVvXgO4+2eIU/ccTclLasoJPaktzHWzAm3f7C6hr4cnEht4YezoJNXbeDcRo+MsulNslNHdAHFGnQr9nS185cP06wiZ53TIluZQcyb/LYe/Ig5rTPWNGEr/xgJgQhJ4GUdcoM9BaLOpCgfWvRIlIEeu0fvhdl32wWGWpQ7PwkBfomEIzvHX4dpPwObObmzLISlms2PklGdoOtRbe+Xm68JyOgKZJ8ti3ublkQlYU6FCfCItnnnm5+G00cFKA== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7638.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43561b8b-6705-4454-c812-08deb0c4cd40 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 May 2026 07:54:03.6535 (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: zn6NxHeJjoaYZ9CCx1bENBZVa3fmP9QNbnDZ5/nBYJXDQuZWBLnM063Lwt90jTpEKSC6UeTOeKAk4MPiYxVaUugIz7lTXji+eL3XlggPAdU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB9825 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 SGkgR3VpbmV2ZXJlLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEd1 aW5ldmVyZSBMYXJzZW4gPGd1aW5ldmVyZUByZWRoYXQuY29tPg0KPiBTZW50OiBEaWVuc3RhZywg MTIuIE1haSAyMDI2IDIwOjUxDQo+IFRvOiBTY2hpbXBlLCBDaHJpc3RpbmEgPGNocmlzdGluYS5z Y2hpbXBlQGludGVsLmNvbT47IGdkYi0NCj4gcGF0Y2hlc0Bzb3VyY2V3YXJlLm9yZw0KPiBTdWJq ZWN0OiBSZTogW1BBVENIIHYyIDEvNl0gZ2RiL3JlY29yZDogUmVmYWN0b3IgcmVjb3JkIGhpc3Rv cnkNCj4gDQo+IE9uIDUvMTEvMjYgMTI6MjMgUE0sIFNjaGltcGUsIENocmlzdGluYSB3cm90ZToN Cj4gPiBIaSBHdWluZXZlcmUsDQo+ID4NCj4gPiBQbGVhc2UgZmluZCBzb21lIGZ1cnRoZXIgY29t bWVudHMgYmVsb3cuDQo+IA0KPiBIaSBDaHJpc3RpbmEhDQo+IA0KPiBUaGFua3MgYWdhaW4gZm9y IHRha2luZyBzdWNoIGEgZGV0YWlsZWQgbG9vayBhdCB0aGlzIHBhdGNoISBJIGhhdmUgc29tZQ0K PiBpbmxpbmVkIGNvbW1lbnRzLCB0aGFua3MgZm9yIGZpbmRpbmcgdGhlc2UgaXNzdWVzIQ0KDQpO byBwcm9ibGVtLCBpdCdzIGFsd2F5cyBnb29kIHRvIHNlZSBuZXcgcGxhY2VzIGluIEdEQi4g8J+Y ig0KSSBzdGlsbCBkaWQgbm90IGZ1bGx5IGdldCB0aGUgcmVjb3JkaW5nIGluZnJhc3RydWN0dXJl IFRCSCwgYnV0IEkgYW0gZ2V0dGluZyBjbG9zZXIuLi4NCg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBHdWluZXZlcmUgTGFyc2VuIDxndWluZXZlcmVAcmVkaGF0 LmNvbT4NCj4gPj4gU2VudDogRG9ubmVyc3RhZywgNy4gTWFpIDIwMjYgMTk6MzgNCj4gPj4gVG86 IFNjaGltcGUsIENocmlzdGluYSA8Y2hyaXN0aW5hLnNjaGltcGVAaW50ZWwuY29tPjsgZ2RiLQ0K PiA+PiBwYXRjaGVzQHNvdXJjZXdhcmUub3JnDQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIg MS82XSBnZGIvcmVjb3JkOiBSZWZhY3RvciByZWNvcmQgaGlzdG9yeQ0KPiA+Pg0KPiA+PiBPbiA1 LzYvMjYgNjoxNiBQTSwgU2NoaW1wZSwgQ2hyaXN0aW5hIHdyb3RlOg0KPiA+Pj4gSGkgR3VpbmV2 ZXJlLA0KPiA+Pj4NCj4gPj4+IFRoYW5rIHlvdSBmb3Igd29ya2luZyBvbiB0aGlzLg0KPiA+Pj4g SSBmb3VuZCB0d28gaXRlbXMgdGhhdCBtaWdodCBiZSB3b3J0aCBsb29raW5nIGF0IGluIG1vcmUg ZGV0YWlsLCBidXQNCj4gPj4+IGFwYXJ0IGZyb20gdGhhdCBpdOKAmXMgbW9zdGx5IG1pbm9yIG5p dHMuIFBsZWFzZSBmaW5kIG15IGZlZWRiYWNrIGJlbG93Lg0KPiA+Pj4NCj4gPj4+IEkgZG9u4oCZ dCBoYXZlIG11Y2ggZXhwZXJpZW5jZSB3aXRoIHRoZSByZWNvcmQgZmVhdHVyZSwgc28gbXkgcmV2 aWV3IGlzDQo+ID4+PiBhIGJpdCBzbG93IGhlcmUuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBw YXRjaCwgSSBwcm9iYWJseSBuZWVkIG1vcmUNCj4gdGltZSwNCj4gPj4+IGJ1dCBJIHdhbnRlZCB0 byBzaGFyZSB0aGUgY29tbWVudHMgSSBhbHJlYWR5IGhhdmUuIFNvcnJ5IGZvciBjaGltaW5nIGlu DQo+ID4+PiBzbyBsYXRlLiBJ4oCZbGwgdHJ5IGFnYWluIHRvbW9ycm93LCBvciBieSBGcmlkYXkg YXQgdGhlIGxhdGVzdC4NCj4gPj4gSGkhIFRoYW5rIHlvdSBmb3Igbm90aW5nIGFsbCB0aGUgaW5j b25zaXN0ZW5jaWVzLCBJJ2xsIGZpeCBhbG1vc3QgYWxsIG9mDQo+ID4+IHRoZW0gYmVmb3JlIHB1 c2hpbmchDQo+ID4+DQo+ID4+IFRoZSBvbmUgdGhpbmcgSSBkb24ndCB0aGluayBpdCdzIGEgZ29v ZCBpZGVhIGlzIHRvIG1ha2UgdGhlIGNoYW5nZSBmcm9tDQo+ID4+IHJlY29yZF9mdWxsX2xpc3Qg LT4gcmVjb3JkX2Z1bGxfbG9nIGluIHRoaXMgY29tbWl0Li4uIG1vc3RseSBiZWNhdXNlIGl0DQo+ ID4+IHdpbGwgaW50cm9kdWNlIHVudG9sZCBhbW91bnRzIG9mIHJlYmFzZSBjb25mbGljdHMuIEkn bGwgaW50cm9kdWNlIGENCj4gPj4gZm9sbG93aW5nIGNvbW1pdCB0byB0aGlzIHNlcmllcyB0aGF0 IHdpbGwgbWFrZSB0aGF0IHJlbmFtaW5nLCB0aG91Z2ggOikNCj4gPj4gLS0NCj4gPj4gQ2hlZXJz LA0KPiA+PiBHdWluZXZlcmUgTGFyc2VuDQo+ID4+IEl0L3NoZQ0KPiA+Pg0KPiA+Pj4+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4gRnJvbTogR3VpbmV2ZXJlIExhcnNlbiA8Z3Vp bmV2ZXJlQHJlZGhhdC5jb20+DQo+ID4+Pj4gU2VudDogRG9ubmVyc3RhZywgMjMuIEFwcmlsIDIw MjYgMTc6MjYNCj4gPj4+PiBUbzogZ2RiLXBhdGNoZXNAc291cmNld2FyZS5vcmcNCj4gPj4+PiBD YzogR3VpbmV2ZXJlIExhcnNlbiA8Z3VpbmV2ZXJlQHJlZGhhdC5jb20+DQo+ID4+Pj4gU3ViamVj dDogW1BBVENIIHYyIDEvNl0gZ2RiL3JlY29yZDogUmVmYWN0b3IgcmVjb3JkIGhpc3RvcnkNCj4g Pj4+Pg0KPiA+Pj4+IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBsYXJnZSByZWZhY3RvciBp biBob3cgR0RCIGtlZXBzIGV4ZWN1dGlvbg0KPiA+Pj4+IGhpc3RvcnkuICBSYXRoZXIgdGhhbiB1 c2luZyBhIGxpbmtlZCBsaXN0IHdoZXJlIG11bHRpcGxlIGVudHJpZXMgY2FuDQo+ID4+Pj4gZGVz Y3JpYmUgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24sIHRoZSBoaXN0b3J5IHdpbGwgbm93IGJlIHN0b3Jl ZCBpbiBhbg0KPiA+Pj4+IHN0ZDo6ZGVxdWUsIGVhY2ggaW5zdHJ1Y3Rpb24gYmVpbmcgb25lIGVu dHJ5IGluIHRoZSBkZXF1ZS4NCj4gPj4+Pg0KPiA+Pj4+IFRoZSBjaG9pY2Ugd2FzIGluaXRpYWxs eSB0byB1c2UgYW4gc3RkOjp2ZWN0b3IsIGJ1dCBpdCB3b3VsZCBiZWNvbWUNCj4gPj4+PiB1bndp ZWxkeSBiZWNhdXNlIGl0IG5lZWRzIGFsbCB0aGUgbWVtb3J5IHRvIGJlIGNvbnNlY3V0aXZlLCB3 aGljaCBpcw0KPiA+Pj4+IGhhcmQgZm9yIDIwMCB0aG91c2FuZCBlbnRyaWVzLiBEZXF1ZSB3YXMg cGlja2VkIGJlY2F1c2UgaXQgd2FzIGEgbmljZQ0KPiA+Pj4+IG1pZHBvaW50IGJldHdlZW4gdmVj dG9yIChtYXhpbXVtIGNhY2hlIGNvaGVzaW9uKSBhbmQgbGlua2VkIGxpc3QNCj4gPj4+PiAobWF4 aW11bSBlYXNlIG9mIGZpbmRpbmcgc3BhY2UgdG8gc3RvcmUgbW9yZSkuDQo+ID4+Pj4NCj4gPj4+ PiBFYWNoIGluc3RydWN0aW9uIGluIG1lbW9yeSB3aWxsIGJlIG5vdyBvbmUgcmVjb3JkX2Z1bGxf aW5zdHJ1Y3Rpb24NCj4gPj4+PiBlbnRyeSwgd2hpY2ggZm9yIHRoaXMgY29tbWl0IGp1c3QgY29u dGFpbnMgYSB2ZWN0b3Igb2YNCj4gPj4+PiByZWNvcmRfZnVsbF9lbnRyeSBmb3IgdGhlIGVmZmVj dHMgb2YgdGhlIGluc3RydWN0aW9uLCBhbmQgdGhlIGRhdGEgdGhhdA0KPiA+Pj4+IHdhcyBzdG9y ZWQgaW4gdGhlIHJlY29yZF9mdWxsX2VuZCBlbnRyeSAodGhhdCBpcywgdGhlIGluc3RydWN0aW9u IG51bWJlcg0KPiA+Pj4+IGFuZCB0aGUgc2lnbmFsLCBpZiBhbnkpLg0KPiA+Pj4+DQo+ID4+Pj4g VGhpcyBjaGFuZ2UgaW50cm9kdWNlZCBhIG1pbmltYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQg KHdoYXQncw0KPiA+Pj4+IGltcG9ydGFudCBpcyB0aGF0IGl0IGlzbid0IGEgZGVncmFkYXRpb24p IGFuZCBhICByZWR1Y3Rpb24gaW4gdGhlIHRvdGFsDQo+ID4+Pj4gbWVtb3J5IGZvb3RwcmludCBv ZiByb3VnaGx5IDIwJSBpZiB0aGUgZW50aXJlIGhpc3RvcnkgaXMgdXNlZC4NCj4gPj4+PiAtLS0N Cj4gPj4+PiAgICBnZGIvYWFyY2g2NC10ZGVwLmMgICAgIHwgICAgMiAtDQo+ID4+Pj4gICAgZ2Ri L2FtZDY0LWxpbnV4LXRkZXAuYyB8ICAgIDMgLQ0KPiA+Pj4+ICAgIGdkYi9hcm0tdGRlcC5jICAg ICAgICAgfCAgICAyIC0NCj4gPj4+PiAgICBnZGIvaTM4Ni1saW51eC10ZGVwLmMgIHwgICAgMyAt DQo+ID4+Pj4gICAgZ2RiL2kzODYtdGRlcC5jICAgICAgICB8ICAgIDQgLQ0KPiA+Pj4+ICAgIGdk Yi9sb29uZ2FyY2gtdGRlcC5jICAgfCAgICAyIC0NCj4gPj4+PiAgICBnZGIvbW94aWUtdGRlcC5j ICAgICAgIHwgICAgMiAtDQo+ID4+Pj4gICAgZ2RiL3BwYy1saW51eC10ZGVwLmMgICB8ICAgIDMg LQ0KPiA+Pj4+ICAgIGdkYi9yZWNvcmQtZnVsbC5jICAgICAgfCAxMTgwICsrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPj4+PiAgICBnZGIvcmVjb3JkLWZ1bGwuaCAg ICAgIHwgICAgMSAtDQo+ID4+Pj4gICAgZ2RiL3Jpc2N2LXRkZXAuYyAgICAgICB8ICAgIDMgLQ0K PiA+Pj4+ICAgIGdkYi9yczYwMDAtdGRlcC5jICAgICAgfCAgICA0IC0NCj4gPj4+PiAgICBnZGIv czM5MC1saW51eC10ZGVwLmMgIHwgICAgMyAtDQo+ID4+Pj4gICAgZ2RiL3MzOTAtdGRlcC5jICAg ICAgICB8ICAgIDIgLQ0KPiA+Pj4+ICAgIDE0IGZpbGVzIGNoYW5nZWQsIDQ3NiBpbnNlcnRpb25z KCspLCA3MzggZGVsZXRpb25zKC0pDQo+ID4+Pj4NCj4gPj4+PiBkaWZmIC0tZ2l0IGEvZ2RiL2Fh cmNoNjQtdGRlcC5jIGIvZ2RiL2FhcmNoNjQtdGRlcC5jDQo+ID4+Pj4gaW5kZXggNGJlZmFhMjcy MGQuLmE1MzI5OTJiMWQ4IDEwMDY0NA0KPiA+Pj4+IC0tLSBhL2dkYi9hYXJjaDY0LXRkZXAuYw0K PiA+Pj4+ICsrKyBiL2dkYi9hYXJjaDY0LXRkZXAuYw0KPiA+Pj4+IEBAIC02MjEwLDggKzYyMTAs NiBAQCBhYXJjaDY0X3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiA+PiAqZ2RiYXJj aCwNCj4gPj4+PiBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiA+Pj4+ICAgIAkgICAgICAg YWFyY2g2NF9yZWNvcmQuYWFyY2g2NF9tZW1zW3JlY19ub10ubGVuKSkNCj4gPj4+PiAgICAJICAg IHJldCA9IC0xOw0KPiA+Pj4+DQo+ID4+Pj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xp c3RfYWRkX2VuZCAoKSkNCj4gPj4+PiAtCXJldCA9IC0xOw0KPiA+Pj4+ICAgICAgICB9DQo+ID4+ Pj4NCj4gPj4+PiAgICAgIGRlYWxsb2NhdGVfcmVnX21lbSAoJmFhcmNoNjRfcmVjb3JkKTsNCj4g Pj4+PiBkaWZmIC0tZ2l0IGEvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYyBiL2dkYi9hbWQ2NC1saW51 eC10ZGVwLmMNCj4gPj4+PiBpbmRleCBhNWFjMjY2NTRjZi4uOWIyM2RiNzJiYmUgMTAwNjQ0DQo+ ID4+Pj4gLS0tIGEvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYw0KPiA+Pj4+ICsrKyBiL2dkYi9hbWQ2 NC1saW51eC10ZGVwLmMNCj4gPj4+PiBAQCAtMTU5MSw5ICsxNTkxLDYgQEAgYW1kNjRfbGludXhf cmVjb3JkX3NpZ25hbCAoc3RydWN0IGdkYmFyY2gNCj4gPj4+PiAqZ2RiYXJjaCwNCj4gPj4+PiAg ICAJCQkJICAgICArIEFNRDY0X0xJTlVYX2ZyYW1lX3NpemUpKQ0KPiA+Pj4+ICAgICAgICByZXR1 cm4gLTE7DQo+ID4+Pj4NCj4gPj4+PiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9l bmQgKCkpDQo+ID4+Pj4gLSAgICByZXR1cm4gLTE7DQo+ID4+Pj4gLQ0KPiA+Pj4+ICAgICAgcmV0 dXJuIDA7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gZGlmZiAtLWdpdCBhL2dkYi9hcm0t dGRlcC5jIGIvZ2RiL2FybS10ZGVwLmMNCj4gPj4+PiBpbmRleCAwOGNjZTlkYmFkOC4uMWNlMDky N2YyNmIgMTAwNjQ0DQo+ID4+Pj4gLS0tIGEvZ2RiL2FybS10ZGVwLmMNCj4gPj4+PiArKysgYi9n ZGIvYXJtLXRkZXAuYw0KPiA+Pj4+IEBAIC0xNDkxMSw4ICsxNDkxMSw2IEBAIGFybV9wcm9jZXNz X3JlY29yZCAoc3RydWN0IGdkYmFyY2gNCj4gPj4gKmdkYmFyY2gsDQo+ID4+Pj4gc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwNCj4gPj4+PiAgICAJICAgIH0NCj4gPj4+PiAgICAJfQ0KPiA+Pj4+ DQo+ID4+Pj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4g Pj4+PiAtCXJldCA9IC0xOw0KPiA+Pj4+ICAgICAgICB9DQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+ IGRpZmYgLS1naXQgYS9nZGIvaTM4Ni1saW51eC10ZGVwLmMgYi9nZGIvaTM4Ni1saW51eC10ZGVw LmMNCj4gPj4+PiBpbmRleCAyM2FlY2NhYzlmYy4uNGYzMzc2NmZjZGQgMTAwNjQ0DQo+ID4+Pj4g LS0tIGEvZ2RiL2kzODYtbGludXgtdGRlcC5jDQo+ID4+Pj4gKysrIGIvZ2RiL2kzODYtbGludXgt dGRlcC5jDQo+ID4+Pj4gQEAgLTk0OSw5ICs5NDksNiBAQCBpMzg2X2xpbnV4X3JlY29yZF9zaWdu YWwgKHN0cnVjdCBnZGJhcmNoDQo+ID4+ICpnZGJhcmNoLA0KPiA+Pj4+ICAgIAkJCQkgICAgIEkz ODZfTElOVVhfeHN0YXRlICsNCj4gPj4+PiBJMzg2X0xJTlVYX2ZyYW1lX3NpemUpKQ0KPiA+Pj4+ ICAgICAgICByZXR1cm4gLTE7DQo+ID4+Pj4NCj4gPj4+PiAtICBpZiAocmVjb3JkX2Z1bGxfYXJj aF9saXN0X2FkZF9lbmQgKCkpDQo+ID4+Pj4gLSAgICByZXR1cm4gLTE7DQo+ID4+Pj4gLQ0KPiA+ Pj4+ICAgICAgcmV0dXJuIDA7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBk aWZmIC0tZ2l0IGEvZ2RiL2kzODYtdGRlcC5jIGIvZ2RiL2kzODYtdGRlcC5jDQo+ID4+Pj4gaW5k ZXggZmE5MzViNWZjZGIuLmZlZTM2YjQ2YTczIDEwMDY0NA0KPiA+Pj4+IC0tLSBhL2dkYi9pMzg2 LXRkZXAuYw0KPiA+Pj4+ICsrKyBiL2dkYi9pMzg2LXRkZXAuYw0KPiA+Pj4+IEBAIC01MjAxLDgg KzUyMDEsNiBAQCBpMzg2X3JlY29yZF92ZXggKHN0cnVjdCBpMzg2X3JlY29yZF9zICppciwNCj4g Pj4gdWludDhfdA0KPiA+Pj4+IHZleF93LCB1aW50OF90IHZleF9yLA0KPiA+Pj4+ICAgICAgICB9 DQo+ID4+Pj4NCj4gPj4+PiAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChpci0+ cmVnY2FjaGUsIGlyLQ0KPiA+Pj4+PiByZWdtYXBbWDg2X1JFQ09SRF9SRUlQX1JFR05VTV0pOw0K PiA+Pj4+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gPj4+PiAt ICAgIHJldHVybiAtMTsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgcmV0dXJuIDA7DQo+ID4+Pj4gICAg fQ0KPiA+Pj4+IEBAIC04MzU5LDggKzgzNTcsNiBAQCBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBw cm9ncmFtPyIpLA0KPiA+Pj4+DQo+ID4+Pj4gICAgICAvKiBJbiB0aGUgZnV0dXJlLCBtYXliZSBz dGlsbCBuZWVkIHRvIGRlYWwgd2l0aCBuZWVkX2Rhc20uICAqLw0KPiA+Pj4+ICAgICAgSTM4Nl9S RUNPUkRfRlVMTF9BUkNIX0xJU1RfQUREX1JFRw0KPiA+PiAoWDg2X1JFQ09SRF9SRUlQX1JFR05V TSk7DQo+ID4+Pj4gLSAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+ Pj4+IC0gICAgcmV0dXJuIC0xOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICByZXR1cm4gMDsNCj4gPj4+ Pg0KPiA+Pj4+IGRpZmYgLS1naXQgYS9nZGIvbG9vbmdhcmNoLXRkZXAuYyBiL2dkYi9sb29uZ2Fy Y2gtdGRlcC5jDQo+ID4+Pj4gaW5kZXggMjI1YjFhYmI3MDMuLjVlYzZiMmE0OGQwIDEwMDY0NA0K PiA+Pj4+IC0tLSBhL2dkYi9sb29uZ2FyY2gtdGRlcC5jDQo+ID4+Pj4gKysrIGIvZ2RiL2xvb25n YXJjaC10ZGVwLmMNCj4gPj4+PiBAQCAtMjc4OSw4ICsyNzg5LDYgQEAgbG9vbmdhcmNoX3Byb2Nl c3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiA+Pj4+ICpnZGJhcmNoLCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLA0KPiA+Pj4+ICAgIAkJCQkJIExPT05HQVJDSF9QQ19SRUdOVU0pKQ0KPiA+ Pj4+ICAgIAlyZXR1cm4gLTE7DQo+ID4+Pj4NCj4gPj4+PiAtICAgICAgaWYgKHJlY29yZF9mdWxs X2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+Pj4+IC0JcmV0dXJuIC0xOw0KPiA+Pj4+ICAgICAg ICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAgIHJldHVybiByZXQ7DQo+ID4+Pj4gZGlmZiAtLWdpdCBh L2dkYi9tb3hpZS10ZGVwLmMgYi9nZGIvbW94aWUtdGRlcC5jDQo+ID4+Pj4gaW5kZXggYzhhMDRk MjFmNTkuLjJmOGYwMTg2NDg4IDEwMDY0NA0KPiA+Pj4+IC0tLSBhL2dkYi9tb3hpZS10ZGVwLmMN Cj4gPj4+PiArKysgYi9nZGIvbW94aWUtdGRlcC5jDQo+ID4+Pj4gQEAgLTEwNDAsOCArMTA0MCw2 IEBAIG1veGllX3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiA+PiAqZ2RiYXJjaCwN Cj4gPj4+PiBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiA+Pj4+DQo+ID4+Pj4gICAgICBp ZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBNT1hJRV9QQ19SRUdO VU0pKQ0KPiA+Pj4+ICAgICAgICByZXR1cm4gLTE7DQo+ID4+Pj4gLSAgaWYgKHJlY29yZF9mdWxs X2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+Pj4+IC0gICAgcmV0dXJuIC0xOw0KPiA+Pj4+ICAg ICAgcmV0dXJuIDA7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gZGlmZiAtLWdpdCBhL2dk Yi9wcGMtbGludXgtdGRlcC5jIGIvZ2RiL3BwYy1saW51eC10ZGVwLmMNCj4gPj4+PiBpbmRleCAx OTY5OGVhYWNiZS4uZTJmNTM1NTE3MDkgMTAwNjQ0DQo+ID4+Pj4gLS0tIGEvZ2RiL3BwYy1saW51 eC10ZGVwLmMNCj4gPj4+PiArKysgYi9nZGIvcHBjLWxpbnV4LXRkZXAuYw0KPiA+Pj4+IEBAIC0x NTY1LDkgKzE1NjUsNiBAQCBwcGNfbGludXhfcmVjb3JkX3NpZ25hbCAoc3RydWN0IGdkYmFyY2gN Cj4gPj4gKmdkYmFyY2gsDQo+ID4+Pj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gPj4+ PiAgICAgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX21lbSAoc3AsIFNJR05BTF9GUkFN RVNJWkUgKw0KPiA+Pj4+IHNpemVvZl9ydF9zaWdmcmFtZSkpDQo+ID4+Pj4gICAgICAgIHJldHVy biAtMTsNCj4gPj4+Pg0KPiA+Pj4+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX2Vu ZCAoKSkNCj4gPj4+PiAtICAgIHJldHVybiAtMTsNCj4gPj4+PiAtDQo+ID4+Pj4gICAgICByZXR1 cm4gMDsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiBkaWZmIC0tZ2l0IGEvZ2RiL3JlY29y ZC1mdWxsLmMgYi9nZGIvcmVjb3JkLWZ1bGwuYw0KPiA+Pj4+IGluZGV4IDY5ZDJjMTAwZTU3Li5h YWM2OWNlZTE3ZSAxMDA2NDQNCj4gPj4+PiAtLS0gYS9nZGIvcmVjb3JkLWZ1bGwuYw0KPiA+Pj4+ ICsrKyBiL2dkYi9yZWNvcmQtZnVsbC5jDQo+ID4+PiBJIHRoaW5rIHdlIHNob3VsZCBpbmNsdWRl IHZlY3Rvciwgb3B0aW9uYWwgYW5kIGRlcXVlIGRpcmVjdGx5Lg0KPiA+Pj4NCj4gPj4+PiBAQCAt NzIsMjAgKzcyLDE3IEBADQo+ID4+Pj4gICAgI2RlZmluZSBERUZBVUxUX1JFQ09SRF9GVUxMX0lO U05fTUFYX05VTQkyMDAwMDANCj4gPj4+Pg0KPiA+Pj4+ICAgICNkZWZpbmUgUkVDT1JEX0ZVTExf SVNfUkVQTEFZIFwNCj4gPj4+PiAtICAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCB8fCA6OmV4ZWN1 dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiA+Pj4+ICsgICggKHJlY29yZF9mdWxs X25leHRfaW5zbiAhPSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCkpIFwNCj4gPj4+IE5pdDogTm8g d2hpdGVzcGFjZSBhZnRlciB0aGUgZmlyc3QgYnJhY2tldDoNCj4gPj4+ID0+ICgocmVjb3JkX2Z1 bGxfbmV4dF9pbnNuICE9IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSkgXA0KPiA+Pj4NCj4gPj4+ PiArICAgICB8fCA6OmV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiA+Pj4+ DQo+ID4+Pj4gICAgI2RlZmluZSBSRUNPUkRfRlVMTF9GSUxFX01BR0lDCW5ldG9yZGVyMzIoMHgy MDA5MTAxNikNCj4gPj4+Pg0KPiA+Pj4+ICAgIC8qIFRoZXNlIGFyZSB0aGUgY29yZSBzdHJ1Y3Rz IG9mIHRoZSBwcm9jZXNzIHJlY29yZCBmdW5jdGlvbmFsaXR5Lg0KPiA+Pj4+DQo+ID4+Pj4gICAg ICAgQSByZWNvcmRfZnVsbF9lbnRyeSBpcyBhIHJlY29yZCBvZiB0aGUgdmFsdWUgY2hhbmdlIG9m IGEgcmVnaXN0ZXINCj4gPj4+PiAtICAgKCJyZWNvcmRfZnVsbF9yZWciKSBvciBhIHBhcnQgb2Yg bWVtb3J5ICgicmVjb3JkX2Z1bGxfbWVtIikuICBBbmQNCj4gZWFjaA0KPiA+Pj4+IC0gICBpbnN0 cnVjdGlvbiBtdXN0IGhhdmUgYSBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKCJyZWNvcmRfZnVs bF9lbmQiKQ0KPiA+Pj4+IC0gICB0aGF0IGluZGljYXRlcyB0aGF0IHRoaXMgaXMgdGhlIGxhc3Qg c3RydWN0IHJlY29yZF9mdWxsX2VudHJ5IG9mIHRoaXMNCj4gPj4+PiAtICAgaW5zdHJ1Y3Rpb24u DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gICBFYWNoIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSBpcyBs aW5rZWQgdG8gInJlY29yZF9mdWxsX2xpc3QiIGJ5ICJwcmV2Ig0KPiA+Pj4+IC0gICBhbmQgIm5l eHQiIHBvaW50ZXJzLiAgKi8NCj4gPj4+PiArICAgKCJyZWNvcmRfZnVsbF9yZWciKSBvciBhIHBh cnQgb2YgbWVtb3J5ICgicmVjb3JkX2Z1bGxfbWVtIikuDQo+ID4+Pj4gKyAgIFRoZXNlIGFyZSBz YXZlZCBvbiB0aGUgcmVjb3JkX2Z1bGxfaW5zdHJ1Y3Rpb24gc3RydWN0LCB3aGljaCBhbHNvDQo+ ID4+Pj4gKyAgIGNvbnRhaW5zIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24sIHN1Y2ggYXMgZGVsaXZl cmVkIHNpZ25hbHMuICAqLw0KPiA+Pj4+DQo+ID4+Pj4gICAgc3RydWN0IHJlY29yZF9mdWxsX21l bV9lbnRyeQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiBAQCAtMTEyLDQ3ICsxMDksMTQgQEAgc3RydWN0 IHJlY29yZF9mdWxsX3JlZ19lbnRyeQ0KPiA+Pj4+ICAgICAgfSB1Ow0KPiA+Pj4+ICAgIH07DQo+ ID4+Pj4NCj4gPj4+PiAtc3RydWN0IHJlY29yZF9mdWxsX2VuZF9lbnRyeQ0KPiA+Pj4+IC17DQo+ ID4+Pj4gLSAgZW51bSBnZGJfc2lnbmFsIHNpZ3ZhbDsNCj4gPj4+PiAtICBVTE9OR0VTVCBpbnNu X251bTsNCj4gPj4+PiAtfTsNCj4gPj4+PiAtDQo+ID4+Pj4gICAgZW51bSByZWNvcmRfZnVsbF90 eXBlDQo+ID4+Pj4gICAgew0KPiA+Pj4+IC0gIHJlY29yZF9mdWxsX2VuZCA9IDAsDQo+ID4+Pj4g ICAgICByZWNvcmRfZnVsbF9yZWcsDQo+ID4+Pj4gICAgICByZWNvcmRfZnVsbF9tZW0NCj4gPj4+ PiAgICB9Ow0KPiA+Pj4+DQo+ID4+Pj4gLS8qIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRo YXQgbWFrZXMgdXAgdGhlIGV4ZWN1dGlvbiBsb2cuDQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gICBUaGUg ZXhlY3V0aW9uIGxvZyBjb25zaXN0cyBvZiBhIHNpbmdsZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVz DQo+ID4+Pj4gLSAgIG9mIHR5cGUgInN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSIuICBJdCBpcyBk b3VibHkgbGlua2VkIHNvIHRoYXQgaXQNCj4gPj4+PiAtICAgY2FuIGJlIHRyYXZlcnNlZCBpbiBl aXRoZXIgZGlyZWN0aW9uLg0KPiA+Pj4+IC0NCj4gPj4+PiAtICAgVGhlIHN0YXJ0IG9mIHRoZSBs aXN0IGlzIGFuY2hvcmVkIGJ5IGEgc3RydWN0IGNhbGxlZA0KPiA+Pj4+IC0gICAicmVjb3JkX2Z1 bGxfZmlyc3QiLiAgVGhlIHBvaW50ZXIgInJlY29yZF9mdWxsX2xpc3QiIGVpdGhlciBwb2ludHMN Cj4gPj4+PiAtICAgdG8gdGhlIGxhc3QgZW50cnkgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIGxpc3Qg KGluIHJlY29yZCBtb2RlKSwgb3IgdG8NCj4gPj4+PiAtICAgdGhlIG5leHQgZW50cnkgaW4gdGhl IGxpc3QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIChpbiByZXBsYXkgbW9kZSkuDQo+ID4+Pj4gLQ0K PiA+Pj4+IC0gICBFYWNoIGxpc3QgZWxlbWVudCAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5KSwg aW4gYWRkaXRpb24gdG8gbmV4dA0KPiA+Pj4+IC0gICBhbmQgcHJldiBwb2ludGVycywgY29uc2lz dHMgb2YgYSB1bmlvbiBvZiB0aHJlZSBlbnRyeSB0eXBlczogbWVtLA0KPiA+Pj4+IC0gICByZWcs IGFuZCBlbmQuICBBIGZpZWxkIGNhbGxlZCAidHlwZSIgZGV0ZXJtaW5lcyB3aGljaCBlbnRyeSB0 eXBlIGlzDQo+ID4+Pj4gLSAgIHJlcHJlc2VudGVkIGJ5IGEgZ2l2ZW4gbGlzdCBlbGVtZW50Lg0K PiA+Pj4+IC0NCj4gPj4+PiAtICAgRWFjaCBpbnN0cnVjdGlvbiB0aGF0IGlzIGFkZGVkIHRvIHRo ZSBleGVjdXRpb24gbG9nIGlzIHJlcHJlc2VudGVkDQo+ID4+Pj4gLSAgIGJ5IGEgdmFyaWFibGUg bnVtYmVyIG9mIGxpc3QgZWxlbWVudHMgKCdlbnRyaWVzJykuICBUaGUgaW5zdHJ1Y3Rpb24NCj4g Pj4+PiAtICAgd2lsbCBoYXZlIG9uZSAicmVnIiBlbnRyeSBmb3IgZWFjaCByZWdpc3RlciB0aGF0 IGlzIGNoYW5nZWQgYnkNCj4gPj4+PiAtICAgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlvbiAoaW5j bHVkaW5nIHRoZSBQQyBpbiBldmVyeSBjYXNlKS4gIEl0DQo+ID4+Pj4gLSAgIHdpbGwgYWxzbyBo YXZlIG9uZSAibWVtIiBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgY2hhbmdlLiAgRmluYWxseSwNCj4g Pj4+PiAtICAgZWFjaCBpbnN0cnVjdGlvbiB3aWxsIGhhdmUgYW4gImVuZCIgZW50cnkgdGhhdCBz ZXBhcmF0ZXMgaXQgZnJvbQ0KPiA+Pj4+IC0gICB0aGUgY2hhbmdlcyBhc3NvY2lhdGVkIHdpdGgg dGhlIG5leHQgaW5zdHJ1Y3Rpb24uICAqLw0KPiA+Pj4+IC0NCj4gPj4+PiAgICBzdHJ1Y3QgcmVj b3JkX2Z1bGxfZW50cnkNCj4gPj4+PiAgICB7DQo+ID4+Pj4gLSAgc3RydWN0IHJlY29yZF9mdWxs X2VudHJ5ICpwcmV2Ow0KPiA+Pj4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqbmV4dDsN Cj4gPj4+PiAgICAgIGVudW0gcmVjb3JkX2Z1bGxfdHlwZSB0eXBlOw0KPiA+Pj4+ICAgICAgdW5p b24NCj4gPj4+PiAgICAgIHsNCj4gPj4+PiBAQCAtMTYwLDExICsxMjQsMzEgQEAgc3RydWN0IHJl Y29yZF9mdWxsX2VudHJ5DQo+ID4+Pj4gICAgICAgIHN0cnVjdCByZWNvcmRfZnVsbF9yZWdfZW50 cnkgcmVnOw0KPiA+Pj4+ICAgICAgICAvKiBtZW0gKi8NCj4gPj4+PiAgICAgICAgc3RydWN0IHJl Y29yZF9mdWxsX21lbV9lbnRyeSBtZW07DQo+ID4+Pj4gLSAgICAvKiBlbmQgKi8NCj4gPj4+PiAt ICAgIHN0cnVjdCByZWNvcmRfZnVsbF9lbmRfZW50cnkgZW5kOw0KPiA+Pj4+ICAgICAgfSB1Ow0K PiA+Pj4+ICAgIH07DQo+ID4+Pj4NCj4gPj4+PiArLyogVGhpcyBpcyB0aGUgbWFpbiBzdHJ1Y3R1 cmUgdGhhdCBjb21wcmlzZXMgdGhlIGV4ZWN1dGlvbiBsb2cuDQo+ID4+Pj4gKyAgIEVhY2ggaW5z dHJ1Y3Rpb24gaXMgY29tcHJpc2VkIG9mOg0KPiA+Pj4+ICsgICAqIFRoZSBpbnN0cnVjdGlvbiBu dW1iZXI6IEhvdyBtYW55IGluc3RydWN0aW9ucyB3ZXJlIHJlY29yZGVkDQo+IGJlZm9yZQ0KPiA+ Pj4+ICsgICAgIHRoaXMgb25lOw0KPiA+Pj4+ICsgICAqIHNpZ3ZhbDogV2hldGhlciB0aGUgaW5m ZXJpb3IgcmVjZWl2ZWQgYSBzaWduYWwgd2hpbGUgdGhlIGZvbGxvd2luZw0KPiA+Pj4+ICsgICAg IGluc3RydWN0aW9uIHdhcyBiZWluZyByZWNvcmRlZDsNCj4gPiBJdCBtaWdodCBiZSB3b3J0aCBk ZXNjcmliaW5nIGluIHRoZSBjb21tZW50IGluIHdoaWNoIGNhc2VzIHRoaXMgZG9lcyBub3QNCj4g PiBoYXZlIGEgdmFsdWUsIHRvIHBvaW50IG91dCB0aGUgcmVhc29uIHdoeSB0aGlzIGlzIG5vdyBv cHRpb25hbC4NCj4gPiBBcyBJIHVuZGVyc3RhbmQgaXQgYmVmb3JlIHRoaXMgcGF0Y2ggd2UgdXNl ZCBHREJfU0lHTkFMXzAgZm9yIHRoaXMgY2FzZSwgaXMNCj4gdGhhdCByaWdodD8NCj4gDQo+IHdl bGwsIHllYWgsIHdlIHVzZWQgdG8gdXNlIEdEQl9TSUdOQUxfMCwgYnV0IEkgdGhpbmsgaXQgaXMg YmV0dGVyIHRvDQo+IGV4cGxpY2l0bHkgc2F5ICJ0aGVyZSB3YXMgbm8gc2lnbmFsIiBvdGhlciB0 aGFuIHNheSAidGhlIHNpZ25hbCB3YXMgMCINCj4gd2hpY2ggaXMgdHJlYXRlZCBhcyBhIG5vdGhp bmcuIEl0J3MgdGhlIHByb2JsZW0gd2l0aCBOVUxML251bGxwdHIsDQo+IHZlcnN1cyBsYW5ndWFn ZXMgd2hlcmUgbnVsbHB0cnMgYXJlbid0IGFsbG93ZWQgYW5kIGluc3RlYWQgYWNjZXNzaW5nIGFu DQo+IHVuc2V0IHBvaW50ZXIgaXMganVzdCBkaXNhbGxvd2VkLiBJIGp1c3Qgd2FudCB0byBhZGQg bW9yZSBtaW5kZnVsIHVzYWdlDQo+IG9mIGl0IHRvIG1ha2UgY29kZSBzYWZlci4NCj4gDQo+IFNv IEkgZG9uJ3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gYWRkIGluIGEgY29tbWVudCB3aHkgaXQg Y2hhbmdlZCwgd2hlbg0KPiB3ZSBpbnN0ZWFkIG5lZWRlZCBhIGNvbW1lbnQgZWFybGllciBhYm91 dCBob3cgdG8gZGVhbCB3aXRoICJubyBzaWduYWwNCj4gd2FzIGRlbGl2ZXJlZCINCg0KWWVzLCBm aW5lIHdpdGggbWUuIA0KDQo+ID4+Pj4gKyAgICogZWZmZWN0czogQSBsaXN0IG9mIHJlY29yZF9m dWxsX2VudHJ5IHN0cnVjdHVyZXMsIGVhY2ggb2Ygd2hpY2gNCj4gPj4+PiArICAgICBkZXNjcmli aW5nIG9uZSBlZmZlY3QgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gaGFzIG9uIHRoZSBpbmZlcmlvci4N Cj4gPj4+PiArDQo+ID4+Pj4gKyAgIE5vdGUsIHRoZSBzaWduYWwgaXMgc3RvcmVkIGluIHRoZSBw cmV2aW91cyBpbnN0cnVjdGlvbiBmb3IgaGlzdG9yaWNhbA0KPiA+Pj4+ICsgICByZWFzb25zLiAg VGhpcyBpcyBob3cgaXQgd2FzIGZpcnN0IGltcGxlbWVudGVkLCBhbmQgbm8gb25lIGhhcyBnb3R0 ZW4NCj4gPj4+PiArICAgYXJvdW5kIHRvIGNoYW5naW5nIGl0IHlldC4gICovDQo+ID4+Pj4gKw0K PiA+Pj4+ICtzdHJ1Y3QgcmVjb3JkX2Z1bGxfaW5zdHJ1Y3Rpb24NCj4gPj4+PiArew0KPiA+Pj4+ ICsgIC8qIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGluZGV4IGlmDQo+ID4+Pj4g KyAgICAgd2UgaGFkIHRvIHJlbW92ZSB0aGUgZmlyc3QgZmV3IGluc3RydWN0aW9ucy4gICovDQo+ ID4+Pj4gKyAgdWludDMyX3QgaW5zbl9udW07DQo+ID4+Pj4gKyAgc3RkOjpvcHRpb25hbDxnZGJf c2lnbmFsPiBzaWd2YWw7DQo+ID4+Pj4gKyAgc3RkOjp2ZWN0b3I8cmVjb3JkX2Z1bGxfZW50cnk+ IGVmZmVjdHM7DQo+ID4+Pj4gK307DQo+ID4+Pj4gKw0KPiA+Pj4+ICAgIC8qIElmIHRydWUsIHF1 ZXJ5IGlmIFBSRUMgY2Fubm90IHJlY29yZCBtZW1vcnkNCj4gPj4+PiAgICAgICBjaGFuZ2Ugb2Yg bmV4dCBpbnN0cnVjdGlvbi4gICovDQo+ID4+Pj4gICAgYm9vbCByZWNvcmRfZnVsbF9tZW1vcnlf cXVlcnkgPSBmYWxzZTsNCj4gPj4+PiBAQCAtMTgxLDI3ICsxNjUsMjUgQEAgc3RhdGljIGRldGFj aGVkX3JlZ2NhY2hlDQo+ID4+Pj4gKnJlY29yZF9mdWxsX2NvcmVfcmVnYnVmID0gTlVMTDsNCj4g Pj4+PiAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8dGFyZ2V0X3NlY3Rpb24+IHJlY29yZF9mdWxsX2Nv cmVfc2VjdGlvbnM7DQo+ID4+Pj4gICAgc3RhdGljIHN0cnVjdCByZWNvcmRfZnVsbF9jb3JlX2J1 Zl9lbnRyeSAqcmVjb3JkX2Z1bGxfY29yZV9idWZfbGlzdCA9DQo+ID4+IE5VTEw7DQo+ID4+Pj4g LS8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB1c2VkIGZvciBtYW5hZ2luZyB0aGUgbGlu a2VkIGxpc3QgdGhhdA0KPiA+Pj4+IC0gICByZXByZXNlbnRzIHRoZSBleGVjdXRpb24gbG9nLg0K PiA+Pj4+ICsvKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgdXNlZCBmb3IgbWFuYWdpbmcg dGhlIGhpc3Rvcnkgb2YNCj4gZXhlY3V0ZWQNCj4gPj4+PiArICAgaW5zdHJ1Y3Rpb25zIGZyb20g dGhlIGluZmVyaW9yLg0KPiA+Pj4+DQo+ID4+Pj4gLSAgIHJlY29yZF9mdWxsX2ZpcnN0IGlzIHRo ZSBhbmNob3IgdGhhdCBob2xkcyBkb3duIHRoZSBiZWdpbm5pbmcgb2YNCj4gPj4+PiAtICAgdGhl IGxpc3QuDQo+ID4+Pj4gKyAgIHJlY29yZF9mdWxsX2xpc3QgY29udGFpbnMgYWxsIGluc3RydWN0 aW9ucyB0aGF0IHdlcmUgZnVsbHkgZXhlY3V0ZWQgYW5kDQo+ID4+Pj4gKyAgIHNhdmVkIHRvIHRo ZSBsb2csIHNvIHRoYXQgd2UgY2FuIHJlcGxheSB0aGUgZXhlY3V0aW9uLg0KPiA+Pj4+DQo+ID4+ Pj4gLSAgIHJlY29yZF9mdWxsX2xpc3Qgc2VydmVzIHR3byBmdW5jdGlvbnM6DQo+ID4+Pj4gLSAg ICAgMSkgSW4gcmVjb3JkIG1vZGUsIGl0IGFuY2hvcnMgdGhlIGVuZCBvZiB0aGUgbGlzdC4NCj4g Pj4+PiAtICAgICAyKSBJbiByZXBsYXkgbW9kZSwgaXQgdHJhdmVyc2VzIHRoZSBsaXN0IGFuZCBw b2ludHMgdG8NCj4gPj4+PiAtCXRoZSBuZXh0IGluc3RydWN0aW9uIHRoYXQgbXVzdCBiZSBlbXVs YXRlZC4NCj4gPj4+PiArICAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIGFsd2F5cyBwb2ludHMgdG8g dGhlIG5leHQgaW5zdHJ1Y3Rpb24gdGhhdA0KPiB3b3VsZA0KPiA+Pj4+ICsgICBiZSBleGVjdXRl ZCBpZiB0aGUgaW5mZXJpb3IgZXhlY3V0ZXMgZm9yd2FyZC4gIEluIHRoZSBzcGVjaWFsIGNhc2Ug d2hlbg0KPiA+Pj4+ICsgICB0aGUgaW5mZXJpb3IgaXMgbm90IHJlcGxheWluZywgcmVjb3JkX2Z1 bGxfbmV4dF9pbnNuIHBvaW50cyBwYXN0IHRoZQ0KPiA+Pj4+ICsgICBlbmQgb2YgdGhlIGhpc3Rv cnkuDQo+ID4+Pj4NCj4gPj4+PiAtICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgYW5kIHJl Y29yZF9mdWxsX2FyY2hfbGlzdF90YWlsIGFyZSB1c2VkDQo+ID4+Pj4gLSAgIHRvIG1hbmFnZSBh IHNlcGFyYXRlIGxpc3QsIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgdXAgdGhlIGNoYW5nZQ0KPiA+ Pj4+IC0gICBlbGVtZW50cyBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBpbnN0cnVjdGlvbiBk dXJpbmcgcmVjb3JkIG1vZGUuDQo+ID4+Pj4gLSAgIFdoZW4gdGhpcyBpbnN0cnVjdGlvbiBoYXMg YmVlbiBjb21wbGV0ZWx5IGFubm90YXRlZCBpbiB0aGUgImFyY2gNCj4gPj4+PiAtICAgbGlzdCIs IGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIG1haW4gZXhlY3V0aW9uIGxvZy4gICovDQo+ID4+ Pj4gKyAgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24gaG9sZHMgYSBwYXJ0aWFs IGluc3RydWN0aW9uLCB3aGlsZQ0KPiA+Pj4+ICsgICB0aGUgbG93ZXIgdGFyZ2V0IGlzIGRpc2Fz c2VtYmxpbmcgdGhlIGluc3RydWN0aW9uLCBvciBhcyBwYXJ0aWFsIHhmZXJzDQo+IGFyZQ0KPiA+ Pj4+ICsgICBoYXBwZW5pbmcuICBJdCBpcyBtYW5pcHVsYXRlZCBieSB0aGUgImFyY2ggbGlzdCIg ZnVuY3Rpb25zIGZvciBoaXN0b3JpY2FsDQo+ID4+Pj4gKyAgIHJlYXNvbnMuICAqLw0KPiA+Pj4+ DQo+ID4+Pj4gLXN0YXRpYyBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgcmVjb3JkX2Z1bGxfZmly c3Q7DQo+ID4+Pj4gLXN0YXRpYyBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlY29yZF9mdWxs X2xpc3QgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+ID4+Pj4gLXN0YXRpYyBzdHJ1Y3QgcmVjb3Jk X2Z1bGxfZW50cnkgKnJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsNCj4gPj4+PiAt c3RhdGljIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3Rh aWwgPSBOVUxMOw0KPiA+Pj4+ICtzdGF0aWMgc3RkOjpkZXF1ZTxyZWNvcmRfZnVsbF9pbnN0cnVj dGlvbj4gcmVjb3JkX2Z1bGxfbGlzdDsNCj4gPj4+IEdpdmVuIHRoYXQgdGhpcyBpcyBub3QgYSBs aXN0IGFueW1vcmUgSSB3b25kZXIgaWYgd2Ugc2hvdWxkIGJldHRlciBjYWxsIHRoaXMNCj4gPj4g c3RoLiBsaWtlDQo+ID4+PiByZWNvcmRfZnVsbF9oaXN0b3J5IG9yIHJlY29yZF9mdWxsX2xvZyBv ciBldmVuIHNpbXBseQ0KPiA+PiByZWNvcmRlZF9pbnN0cnVjdGlvbnM/DQo+ID4+Pj4gK3N0YXRp YyByZWNvcmRfZnVsbF9pbnN0cnVjdGlvbiByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0 aW9uOw0KPiA+Pj4+ICtpbnQgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOw0KPiA+IEFueSBwYXJ0aWN1 bGFyIHJlYXNvbiB3aHkgdGhpcyBpcyBub3Qgc3RhdGljPw0KPiBubywgSSdsbCBtYWtlIHRoYXQg Y2hhbmdlLg0KPiA+DQo+ID4+Pj4gICAgLyogdHJ1ZSBhc2sgdXNlci4gZmFsc2UgYXV0byBkZWxl dGUgdGhlIGxhc3Qgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5LiAgKi8NCj4gPj4+PiAgICBzdGF0 aWMgYm9vbCByZWNvcmRfZnVsbF9zdG9wX2F0X2xpbWl0ID0gdHJ1ZTsNCj4gPj4+PiBAQCAtMzYx LDYgKzM0MywxNCBAQCByZWNvcmRfZnVsbF90YXJnZXQ6OmtpbGwgKCkNCj4gPj4+PiAgICAgIHJl Y29yZF9raWxsICh0aGlzKTsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiArc3RhdGljIHZv aWQNCj4gPj4+PiArcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKQ0KPiA+Pj4+ICt7DQo+ ID4+Pj4gKyAgcmVjb3JkX2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5lZmZlY3RzLmNsZWFy ICgpOw0KPiA+Pj4+ICsgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uc2lndmFs LnJlc2V0ICgpOw0KPiA+Pj4+ICsgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24u aW5zbl9udW0gPSAwOw0KPiA+Pj4+ICt9DQo+ID4+Pj4gKw0KPiA+Pj4+ICAgIC8qIFNlZSByZWNv cmQtZnVsbC5oLiAgKi8NCj4gPj4+Pg0KPiA+Pj4+ICAgIGludA0KPiA+Pj4+IEBAIC0zOTAsMTU2 ICszODAsMTIwIEBAIHN0YXRpYyBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudA0KPiA+Pj4+ICpzaG93 X3JlY29yZF9mdWxsX2NtZGxpc3Q7DQo+ID4+Pj4gICAgLyogQ29tbWFuZCBsaXN0IGZvciAicmVj b3JkIGZ1bGwiLiAgKi8NCj4gPj4+PiAgICBzdGF0aWMgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQg KnJlY29yZF9mdWxsX2NtZGxpc3Q7DQo+ID4+Pj4NCj4gPj4+PiAtc3RhdGljIHZvaWQgcmVjb3Jk X2Z1bGxfZ290b19pbnNuIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmVudHJ5LA0KPiA+Pj4+ ICtzdGF0aWMgdm9pZCByZWNvcmRfZnVsbF9nb3RvX2luc24gKHNpemVfdCB0YXJnZXRfaW5zbiwN Cj4gPj4+PiAgICAJCQkJICAgZW51bSBleGVjX2RpcmVjdGlvbl9raW5kIGRpcik7DQo+ID4+Pj4N Cj4gPj4+PiAtLyogQWxsb2MgYW5kIGZyZWUgZnVuY3Rpb25zIGZvciByZWNvcmRfZnVsbF9yZWcs IHJlY29yZF9mdWxsX21lbSwgYW5kDQo+ID4+Pj4gLSAgIHJlY29yZF9mdWxsX2VuZCBlbnRyaWVz LiAgKi8NCj4gPj4+PiArLyogSW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVuY3Rpb25zIGZv ciByZWNvcmRfZnVsbF9yZWcgYW5kDQo+ID4+Pj4gKyAgIHJlY29yZF9mdWxsX21lbSBlbnRyaWVz LiAgKi8NCj4gPj4+Pg0KPiA+Pj4+IC0vKiBBbGxvYyBhIHJlY29yZF9mdWxsX3JlZyByZWNvcmQg ZW50cnkuICAqLw0KPiA+Pj4+ICsvKiBJbml0IGEgcmVjb3JkX2Z1bGxfcmVnIHJlY29yZCBlbnRy eS4gICovDQo+ID4+Pj4NCj4gPj4+PiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVjb3JkX2Z1bGxf ZW50cnkgKg0KPiA+Pj4+IC1yZWNvcmRfZnVsbF9yZWdfYWxsb2MgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIGludCByZWdudW0pDQo+ID4+Pj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlY29y ZF9mdWxsX2VudHJ5DQo+ID4+Pj4gK3JlY29yZF9mdWxsX3JlZ19pbml0IChzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiAtICBzdHJ1Y3Qg cmVjb3JkX2Z1bGxfZW50cnkgKnJlYzsNCj4gPj4+PiArICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50 cnkgcmVjOw0KPiA+Pj4+ICAgICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSByZWdjYWNoZS0+ YXJjaCAoKTsNCj4gPj4+Pg0KPiA+Pj4+IC0gIHJlYyA9IFhDTkVXIChzdHJ1Y3QgcmVjb3JkX2Z1 bGxfZW50cnkpOw0KPiA+Pj4+IC0gIHJlYy0+dHlwZSA9IHJlY29yZF9mdWxsX3JlZzsNCj4gPj4+ PiAtICByZWMtPnUucmVnLm51bSA9IHJlZ251bTsNCj4gPj4+PiAtICByZWMtPnUucmVnLmxlbiA9 IHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ251bSk7DQo+ID4+Pj4gLSAgaWYgKHJlYy0+dS5y ZWcubGVuID4gc2l6ZW9mIChyZWMtPnUucmVnLnUuYnVmKSkNCj4gPj4+PiAtICAgIHJlYy0+dS5y ZWcudS5wdHIgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAocmVjLT51LnJlZy5sZW4pOw0KPiA+Pj4+ ICsgIHJlYy50eXBlID0gcmVjb3JkX2Z1bGxfcmVnOw0KPiA+Pj4+ICsgIHJlYy51LnJlZy5udW0g PSByZWdudW07DQo+ID4+Pj4gKyAgcmVjLnUucmVnLmxlbiA9IHJlZ2lzdGVyX3NpemUgKGdkYmFy Y2gsIHJlZ251bSk7DQo+ID4+Pj4gKyAgaWYgKHJlYy51LnJlZy5sZW4gPiBzaXplb2YgKHJlYy51 LnJlZy51LmJ1ZikpDQo+ID4+Pj4gKyAgICByZWMudS5yZWcudS5wdHIgPSAoZ2RiX2J5dGUgKikg eG1hbGxvYyAocmVjLnUucmVnLmxlbik7DQo+ID4+Pj4NCj4gPj4+PiAgICAgIHJldHVybiByZWM7 DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gLS8qIEZyZWUgYSByZWNvcmRfZnVsbF9yZWcg cmVjb3JkIGVudHJ5LiAgKi8NCj4gPj4+PiArLyogQ2xlYW51cCBhIHJlY29yZF9mdWxsX3JlZyBy ZWNvcmQgZW50cnkuICAqLw0KPiA+Pj4+DQo+ID4+Pj4gICAgc3RhdGljIGlubGluZSB2b2lkDQo+ ID4+Pj4gLXJlY29yZF9mdWxsX3JlZ19yZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkg KnJlYykNCj4gPj4+PiArcmVjb3JkX2Z1bGxfcmVnX2NsZWFudXAgKHN0cnVjdCByZWNvcmRfZnVs bF9lbnRyeSByZWMpDQo+ID4+Pj4gICAgew0KPiA+Pj4+IC0gIGdkYl9hc3NlcnQgKHJlYy0+dHlw ZSA9PSByZWNvcmRfZnVsbF9yZWcpOw0KPiA+Pj4+IC0gIGlmIChyZWMtPnUucmVnLmxlbiA+IHNp emVvZiAocmVjLT51LnJlZy51LmJ1ZikpDQo+ID4+Pj4gLSAgICB4ZnJlZSAocmVjLT51LnJlZy51 LnB0cik7DQo+ID4+Pj4gLSAgeGZyZWUgKHJlYyk7DQo+ID4+Pj4gKyAgZ2RiX2Fzc2VydCAocmVj LnR5cGUgPT0gcmVjb3JkX2Z1bGxfcmVnKTsNCj4gPj4+PiArICBpZiAocmVjLnUucmVnLmxlbiA+ IHNpemVvZiAocmVjLnUucmVnLnUuYnVmKSkNCj4gPj4+PiArICAgIHhmcmVlIChyZWMudS5yZWcu dS5wdHIpOw0KPiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+Pj4+IC0vKiBBbGxvYyBhIHJlY29yZF9m dWxsX21lbSByZWNvcmQgZW50cnkuICAqLw0KPiA+Pj4+ICsvKiBJbml0IGEgcmVjb3JkX2Z1bGxf bWVtIHJlY29yZCBlbnRyeS4gICovDQo+ID4+Pj4NCj4gPj4+PiAtc3RhdGljIGlubGluZSBzdHJ1 Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKg0KPiA+Pj4+IC1yZWNvcmRfZnVsbF9tZW1fYWxsb2MgKENP UkVfQUREUiBhZGRyLCBpbnQgbGVuKQ0KPiA+Pj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCByZWNv cmRfZnVsbF9lbnRyeQ0KPiA+Pj4+ICtyZWNvcmRfZnVsbF9tZW1faW5pdCAoQ09SRV9BRERSIGFk ZHIsIGludCBsZW4pDQo+ID4+Pj4gICAgew0KPiA+Pj4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9l bnRyeSAqcmVjOw0KPiA+Pj4+ICsgIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSByZWM7DQo+ID4+ Pj4NCj4gPj4+PiAtICByZWMgPSBYQ05FVyAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5KTsNCj4g Pj4+PiAtICByZWMtPnR5cGUgPSByZWNvcmRfZnVsbF9tZW07DQo+ID4+Pj4gLSAgcmVjLT51Lm1l bS5hZGRyID0gYWRkcjsNCj4gPj4+PiAtICByZWMtPnUubWVtLmxlbiA9IGxlbjsNCj4gPj4+PiAt ICBpZiAocmVjLT51Lm1lbS5sZW4gPiBzaXplb2YgKHJlYy0+dS5tZW0udS5idWYpKQ0KPiA+Pj4+ IC0gICAgcmVjLT51Lm1lbS51LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChsZW4pOw0KPiA+ Pj4+ICsgIHJlYy50eXBlID0gcmVjb3JkX2Z1bGxfbWVtOw0KPiA+Pj4+ICsgIHJlYy51Lm1lbS5h ZGRyID0gYWRkcjsNCj4gPj4+PiArICByZWMudS5tZW0ubGVuID0gbGVuOw0KPiA+Pj4+ICsgIGlm IChyZWMudS5tZW0ubGVuID4gc2l6ZW9mIChyZWMudS5tZW0udS5idWYpKQ0KPiA+Pj4+ICsgICAg cmVjLnUubWVtLnUucHRyID0gKGdkYl9ieXRlICopIHhtYWxsb2MgKGxlbik7DQo+ID4+Pj4gKyAg cmVjLnUubWVtLm1lbV9lbnRyeV9ub3RfYWNjZXNzaWJsZSA9IDA7DQo+ID4+Pj4NCj4gPj4+PiAg ICAgIHJldHVybiByZWM7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gLS8qIEZyZWUgYSBy ZWNvcmRfZnVsbF9tZW0gcmVjb3JkIGVudHJ5LiAgKi8NCj4gPj4+PiArLyogQ2xlYW51cCBhIHJl Y29yZF9mdWxsX21lbSByZWNvcmQgZW50cnkuICAqLw0KPiA+Pj4+DQo+ID4+Pj4gICAgc3RhdGlj IGlubGluZSB2b2lkDQo+ID4+Pj4gLXJlY29yZF9mdWxsX21lbV9yZWxlYXNlIChzdHJ1Y3QgcmVj b3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gPj4+PiAtew0KPiA+Pj4+IC0gIGdkYl9hc3NlcnQgKHJl Yy0+dHlwZSA9PSByZWNvcmRfZnVsbF9tZW0pOw0KPiA+Pj4+IC0gIGlmIChyZWMtPnUubWVtLmxl biA+IHNpemVvZiAocmVjLT51Lm1lbS51LmJ1ZikpDQo+ID4+Pj4gLSAgICB4ZnJlZSAocmVjLT51 Lm1lbS51LnB0cik7DQo+ID4+Pj4gLSAgeGZyZWUgKHJlYyk7DQo+ID4+Pj4gLX0NCj4gPj4+PiAt DQo+ID4+Pj4gLS8qIEFsbG9jIGEgcmVjb3JkX2Z1bGxfZW5kIHJlY29yZCBlbnRyeS4gICovDQo+ ID4+Pj4gLQ0KPiA+Pj4+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAq DQo+ID4+Pj4gLXJlY29yZF9mdWxsX2VuZF9hbGxvYyAodm9pZCkNCj4gPj4+PiArcmVjb3JkX2Z1 bGxfbWVtX2NsZWFudXAgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSByZWMpDQo+ID4+Pj4gICAg ew0KPiA+Pj4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiA+Pj4+IC0NCj4g Pj4+PiAtICByZWMgPSBYQ05FVyAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5KTsNCj4gPj4+PiAt ICByZWMtPnR5cGUgPSByZWNvcmRfZnVsbF9lbmQ7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gIHJldHVy biByZWM7DQo+ID4+Pj4gKyAgZ2RiX2Fzc2VydCAocmVjLnR5cGUgPT0gcmVjb3JkX2Z1bGxfbWVt KTsNCj4gPj4+PiArICBpZiAocmVjLnUubWVtLmxlbiA+IHNpemVvZiAocmVjLnUubWVtLnUuYnVm KSkNCj4gPj4+PiArICAgIHhmcmVlIChyZWMudS5tZW0udS5wdHIpOw0KPiA+Pj4+ICAgIH0NCj4g Pj4+Pg0KPiA+Pj4+IC0vKiBGcmVlIGEgcmVjb3JkX2Z1bGxfZW5kIHJlY29yZCBlbnRyeS4gICov DQo+ID4+Pj4gKy8qIEZyZWUgb25lIHJlY29yZCBlbnRyeSwgYW55IHR5cGUuICAqLw0KPiA+Pj4+ DQo+ID4+Pj4gICAgc3RhdGljIGlubGluZSB2b2lkDQo+ID4+Pj4gLXJlY29yZF9mdWxsX2VuZF9y ZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gPj4+PiAtew0KPiA+Pj4+ IC0gIHhmcmVlIChyZWMpOw0KPiA+Pj4+IC19DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0vKiBGcmVlIG9u ZSByZWNvcmQgZW50cnksIGFueSB0eXBlLg0KPiA+Pj4+IC0gICBSZXR1cm4gZW50cnktPnR5cGUs IGluIGNhc2UgY2FsbGVyIHdhbnRzIHRvIGtub3cuICAqLw0KPiA+Pj4+IC0NCj4gPj4+PiAtc3Rh dGljIGlubGluZSBlbnVtIHJlY29yZF9mdWxsX3R5cGUNCj4gPj4+PiAtcmVjb3JkX2Z1bGxfZW50 cnlfcmVsZWFzZSAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ID4+Pj4gK3JlY29y ZF9mdWxsX2VudHJ5X2NsZWFudXAgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSByZWMpDQo+ID4+ Pj4gICAgew0KPiA+Pj4+IC0gIGVudW0gcmVjb3JkX2Z1bGxfdHlwZSB0eXBlID0gcmVjLT50eXBl Ow0KPiA+Pj4+DQo+ID4+Pj4gLSAgc3dpdGNoICh0eXBlKSB7DQo+ID4+Pj4gKyAgc3dpdGNoIChy ZWMudHlwZSkgew0KPiA+Pj4+ICAgICAgY2FzZSByZWNvcmRfZnVsbF9yZWc6DQo+ID4+Pj4gLSAg ICByZWNvcmRfZnVsbF9yZWdfcmVsZWFzZSAocmVjKTsNCj4gPj4+PiArICAgIHJlY29yZF9mdWxs X3JlZ19jbGVhbnVwIChyZWMpOw0KPiA+Pj4+ICAgICAgICBicmVhazsNCj4gPj4+PiAgICAgIGNh c2UgcmVjb3JkX2Z1bGxfbWVtOg0KPiA+Pj4+IC0gICAgcmVjb3JkX2Z1bGxfbWVtX3JlbGVhc2Ug KHJlYyk7DQo+ID4+Pj4gLSAgICBicmVhazsNCj4gPj4+PiAtICBjYXNlIHJlY29yZF9mdWxsX2Vu ZDoNCj4gPj4+PiAtICAgIHJlY29yZF9mdWxsX2VuZF9yZWxlYXNlIChyZWMpOw0KPiA+Pj4+ICsg ICAgcmVjb3JkX2Z1bGxfbWVtX2NsZWFudXAgKHJlYyk7DQo+ID4+Pj4gICAgICAgIGJyZWFrOw0K PiA+Pj4+ICAgICAgfQ0KPiA+Pj4+IC0gIHJldHVybiB0eXBlOw0KPiA+Pj4+ICAgIH0NCj4gPj4+ Pg0KPiA+Pj4+IC0vKiBGcmVlIGFsbCByZWNvcmQgZW50cmllcyBpbiBsaXN0IHBvaW50ZWQgdG8g YnkgUkVDLiAgKi8NCj4gPj4+PiAtDQo+ID4+Pj4gICAgc3RhdGljIHZvaWQNCj4gPj4+PiAtcmVj b3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4g Pj4+PiArcmVjb3JkX2Z1bGxfcmVzZXRfaGlzdG9yeSAoKQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiAt ICBpZiAoIXJlYykNCj4gPj4+PiAtICAgIHJldHVybjsNCj4gPj4+PiAtDQo+ID4+Pj4gLSAgd2hp bGUgKHJlYy0+bmV4dCkNCj4gPj4+PiAtICAgIHJlYyA9IHJlYy0+bmV4dDsNCj4gPj4+PiArICBy ZWNvcmRfZnVsbF9pbnNuX251bSA9IDA7DQo+ID4+Pj4gKyAgcmVjb3JkX2Z1bGxfaW5zbl9jb3Vu dCA9IDA7DQo+ID4+Pj4gKyAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuID0gMDsNCj4gPj4+Pg0KPiA+ Pj4+IC0gIHdoaWxlIChyZWMtPnByZXYpDQo+ID4+Pj4gKyAgZm9yIChhdXRvICZpbnNuIDogcmVj b3JkX2Z1bGxfbGlzdCkNCj4gPj4+PiAgICAgICAgew0KPiA+Pj4+IC0gICAgICByZWMgPSByZWMt PnByZXY7DQo+ID4+Pj4gLSAgICAgIHJlY29yZF9mdWxsX2VudHJ5X3JlbGVhc2UgKHJlYy0+bmV4 dCk7DQo+ID4+Pj4gKyAgICAgIGZvciAoYXV0byAmZW50cnkgOiBpbnNuLmVmZmVjdHMpDQo+ID4+ Pj4gKwlyZWNvcmRfZnVsbF9lbnRyeV9jbGVhbnVwIChlbnRyeSk7DQo+ID4+Pj4gICAgICAgIH0N Cj4gPj4+Pg0KPiA+Pj4+IC0gIGlmIChyZWMgPT0gJnJlY29yZF9mdWxsX2ZpcnN0KQ0KPiA+Pj4+ IC0gICAgew0KPiA+Pj4+IC0gICAgICByZWNvcmRfZnVsbF9pbnNuX251bSA9IDA7DQo+ID4+Pj4g LSAgICAgIHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgPSBOVUxMOw0KPiA+Pj4+IC0gICAgfQ0KPiA+ Pj4+IC0gIGVsc2UNCj4gPj4+PiAtICAgIHJlY29yZF9mdWxsX2VudHJ5X3JlbGVhc2UgKHJlYyk7 DQo+ID4+Pj4gKyAgcmVjb3JkX2Z1bGxfbGlzdC5jbGVhciAoKTsNCj4gPj4+PiAgICB9DQo+ID4+ Pj4NCj4gPj4+PiAtLyogRnJlZSBhbGwgcmVjb3JkIGVudHJpZXMgZm9yd2FyZCBvZiB0aGUgZ2l2 ZW4gbGlzdCBwb3NpdGlvbi4gICovDQo+ID4+Pj4gLQ0KPiA+Pj4+ICAgIHN0YXRpYyB2b2lkDQo+ ID4+Pj4gLXJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHN0cnVjdCByZWNvcmRf ZnVsbF9lbnRyeSAqcmVjKQ0KPiA+Pj4+ICtyZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93 aW5nIChpbnQgaW5kZXgpDQo+ID4+Pj4gICAgew0KPiA+Pj4+IC0gIHN0cnVjdCByZWNvcmRfZnVs bF9lbnRyeSAqdG1wID0gcmVjLT5uZXh0Ow0KPiA+Pj4+IC0NCj4gPj4+PiAtICByZWMtPm5leHQg PSBOVUxMOw0KPiA+Pj4+IC0gIHdoaWxlICh0bXApDQo+ID4+Pj4gKyAgZm9yIChpbnQgaSA9IHJl Y29yZF9mdWxsX2xpc3Quc2l6ZSAoKSAtIDE7IGkgPiBpbmRleDsgaS0tKQ0KPiA+Pj4+ICAgICAg ICB7DQo+ID4+Pj4gLSAgICAgIHJlYyA9IHRtcC0+bmV4dDsNCj4gPj4+PiAtICAgICAgaWYgKHJl Y29yZF9mdWxsX2VudHJ5X3JlbGVhc2UgKHRtcCkgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiA+Pj4+ IC0Jew0KPiA+Pj4+IC0JICByZWNvcmRfZnVsbF9pbnNuX251bS0tOw0KPiA+Pj4+IC0JICByZWNv cmRfZnVsbF9pbnNuX2NvdW50LS07DQo+ID4+Pj4gLQl9DQo+ID4+Pj4gLSAgICAgIHRtcCA9IHJl YzsNCj4gPj4+PiArICAgICAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29yZF9mdWxsX2xpc3RbaV0u ZWZmZWN0cykNCj4gPj4+PiArCXJlY29yZF9mdWxsX2VudHJ5X2NsZWFudXAgKGVudHJ5KTsNCj4g Pj4+PiArICAgICAgcmVjb3JkX2Z1bGxfbGlzdC5wb3BfYmFjayAoKTsNCj4gPj4+PiAgICAgICAg fQ0KPiA+Pj4+ICsgIC8qIFNldCB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBiZSBwYXN0IHRoZSBl bmQgb2YgdGhlIGxvZyBzbyB3ZQ0KPiA+Pj4+ICsgICAgIHN0YXJ0IHJlY29yZGluZyBpZiB0aGUg dXNlciBtb3ZlcyBmb3J3YXJkIGFnYWluLiAgKi8NCj4gPj4+PiArICByZWNvcmRfZnVsbF9uZXh0 X2luc24gPSBpbmRleDsNCj4gPj4+PiArfQ0KPiA+Pj4+ICtzdGF0aWMgdm9pZA0KPiA+Pj4+ICty ZWNvcmRfZnVsbF9zYXZlX2luc3RydWN0aW9uICgpDQo+ID4gQSBmdW5jdGlvbiBjb21tZW50IHdv dWxkIGJlIG5pY2UuDQo+ID4NCj4gPj4+PiArew0KPiA+Pj4+ICsgICsrcmVjb3JkX2Z1bGxfaW5z bl9jb3VudDsNCj4gPj4+PiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLmlu c25fbnVtID0NCj4gcmVjb3JkX2Z1bGxfaW5zbl9jb3VudDsNCj4gPj4+PiArICByZWNvcmRfZnVs bF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLmVmZmVjdHMuc2hyaW5rX3RvX2ZpdCAoKTsNCj4gPj4+ PiArICByZWNvcmRfZnVsbF9saXN0LnB1c2hfYmFjayAocmVjb3JkX2Z1bGxfaW5jb21wbGV0ZV9p bnN0cnVjdGlvbik7DQo+ID4gSSB0aGluayB0aGlzIGxpbmUgd2lsbCBhdCBzb21lIHBvaW50IGNh bGwgdGhlIGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvciBvZg0KPiByZWNvcmRfZnVsbF9tZW1fZW50 cnkNCj4gPiBhbmQgcmVjb3JkX2Z1bGxfcmVnX2VudHJ5LCB3aGljaCBoYXZlIHRob3NlIGJ1ZmZl cnM6DQo+ID4NCj4gPiBnZGJfYnl0ZSBidWZbc2l6ZW9mIChnZGJfYnl0ZSAqKV07DQo+ID4NCj4g PiBJSVVDIHlvdSdsbCBvbmx5IGhhdmUgYSBzaGFsbG93IGNvcHkuIFNob3VsZCB3ZSB1c2UgYSBz dGQ6Om1vdmUgaW5zdGVhZA0KPiBoZXJlPw0KPiBNaWdodCBiZSB3b3J0aCwgeWVhaC4uLg0KPiA+ DQo+ID4gSSBmdXJ0aGVyIHdvbmRlciBpZiB0aGlzIHByb2JsZW0gbWlnaHQgYmUgcmVsYXRlZCB0 byB0aGUgZG91YmxlIGZyZWUgaXNzdWVzDQo+IHlvdQ0KPiA+IGRlc2NyaWJlIGluIHBhdGNoICMz LiBXb3VsZCB5b3UgbWluZCBjaGVja2luZz8NCj4gSSBkaWQgY2hlY2sgaXQhIFdoZW4gSSB3YXMg d29ya2luZyBvbiBwYXRjaCAjMywgSSBkaXNhYmxlZCBjb3B5DQo+IGNvbnN0cnVjdGlvbiwgb25s eSBhbGxvd2VkIG1vdmUgY29uc3RydWN0b3IvYXNzaWdubWVudCBiZWNhdXNlIEkNCj4gc3BlY2lm aWNhbGx5IHRob3VnaHQgdGhhdCB0aGUgdmVjdG9yIHB1c2hfYmFjayB3YXMgdGhlIHJlYXNvbiBm b3IgdGhlDQo+IGRvdWJsZSBmcmVlcywgYnV0IGl0IHN0aWxsIGhhcHBlbmVkLg0KDQpUaGF0J3Mg d2VpcmQsIGl0IHdvdWxkIGhhdmUgcGVyZmVjdGx5IGV4cGxhaW5lZCBpdC4NClNvIHdpdGggc3Rk Ojptb3ZlIHdlIHN0aWxsIGhhdmUgdGhpcyBwcm9ibGVtPw0KV291bGQgeW91IG1pbmQgc2hhcmlu ZyBzb21lIGJhY2t0cmFjZSBvZiB0aGlzIGRvdWJsZSBmcmVlIGVycm9yID8NCg0KPiA+IEFuZCBp ZiB5b3UgYWRkIHRoZSBkZXN0cnVjdG9yLCBJIHRoaW5rIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8g YWRkIGEgY29weQ0KPiBjb25zdHJ1Y3RvciBldGMuLCB0b286DQo+ID4gaHR0cHM6Ly9lbi5jcHBy ZWZlcmVuY2UuY29tL2NwcC9sYW5ndWFnZS9ydWxlX29mX3RocmVlDQo+ID4NCj4gPj4+PiArICBy ZWNvcmRfZnVsbF9uZXh0X2luc24rKzsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAv KiBEZWxldGUgdGhlIGZpcnN0IGluc3RydWN0aW9uIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUg bG9nLCB0byBtYWtlDQo+ID4+Pj4gQEAgLTU1MCw1MiArNTA0LDIyIEBAIHJlY29yZF9mdWxsX2xp c3RfcmVsZWFzZV9mb2xsb3dpbmcgKHN0cnVjdA0KPiA+Pj4+IHJlY29yZF9mdWxsX2VudHJ5ICpy ZWMpDQo+ID4+Pj4gICAgc3RhdGljIHZvaWQNCj4gPj4+PiAgICByZWNvcmRfZnVsbF9saXN0X3Jl bGVhc2VfZmlyc3QgKHZvaWQpDQo+ID4+Pj4gICAgew0KPiA+Pj4+IC0gIHN0cnVjdCByZWNvcmRf ZnVsbF9lbnRyeSAqdG1wOw0KPiA+Pj4+IC0NCj4gPj4+PiAtICBpZiAoIXJlY29yZF9mdWxsX2Zp cnN0Lm5leHQpDQo+ID4+Pj4gKyAgaWYgKHJlY29yZF9mdWxsX2xpc3QuZW1wdHkgKCkpDQo+ID4+ Pj4gICAgICAgIHJldHVybjsNCj4gPj4+Pg0KPiA+Pj4+IC0gIC8qIExvb3AgdW50aWwgYSByZWNv cmRfZnVsbF9lbmQuICAqLw0KPiA+Pj4+IC0gIHdoaWxlICgxKQ0KPiA+Pj4+IC0gICAgew0KPiA+ Pj4+IC0gICAgICAvKiBDdXQgcmVjb3JkX2Z1bGxfZmlyc3QubmV4dCBvdXQgb2YgdGhlIGxpbmtl ZCBsaXN0LiAgKi8NCj4gPj4+PiAtICAgICAgdG1wID0gcmVjb3JkX2Z1bGxfZmlyc3QubmV4dDsN Cj4gPj4+PiAtICAgICAgcmVjb3JkX2Z1bGxfZmlyc3QubmV4dCA9IHRtcC0+bmV4dDsNCj4gPj4+ PiAtICAgICAgdG1wLT5uZXh0LT5wcmV2ID0gJnJlY29yZF9mdWxsX2ZpcnN0Ow0KPiA+Pj4+IC0N Cj4gPj4+PiAtICAgICAgLyogdG1wIGlzIG5vdyBpc29sYXRlZCwgYW5kIGNhbiBiZSBkZWxldGVk LiAgKi8NCj4gPj4+PiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2VudHJ5X3JlbGVhc2UgKHRtcCkg PT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiA+Pj4+IC0JYnJlYWs7CS8qIEVuZCBsb29wIGF0IGZpcnN0 IHJlY29yZF9mdWxsX2VuZC4gICovDQo+ID4+Pj4gKyAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29y ZF9mdWxsX2xpc3RbMF0uZWZmZWN0cykNCj4gPj4+PiArICAgIHJlY29yZF9mdWxsX2VudHJ5X2Ns ZWFudXAgKGVudHJ5KTsNCj4gPj4+Pg0KPiA+Pj4+IC0gICAgICBpZiAoIXJlY29yZF9mdWxsX2Zp cnN0Lm5leHQpDQo+ID4+Pj4gLQl7DQo+ID4+Pj4gLQkgIGdkYl9hc3NlcnQgKHJlY29yZF9mdWxs X2luc25fbnVtID09IDEpOw0KPiA+Pj4+IC0JICBicmVhazsJLyogRW5kIGxvb3Agd2hlbiBsaXN0 IGlzIGVtcHR5LiAgKi8NCj4gPj4+PiAtCX0NCj4gPj4+PiAtICAgIH0NCj4gPj4+PiArICByZWNv cmRfZnVsbF9saXN0LnBvcF9mcm9udCAoKTsNCj4gPj4+PiArICAtLXJlY29yZF9mdWxsX25leHRf aW5zbjsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAvKiBBZGQgYSBzdHJ1Y3QgcmVj b3JkX2Z1bGxfZW50cnkgdG8gcmVjb3JkX2Z1bGxfYXJjaF9saXN0LiAgKi8NCj4gPj4+Pg0KPiA+ Pj4+ICAgIHN0YXRpYyB2b2lkDQo+ID4+Pj4gLXJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGQgKHN0 cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjKQ0KPiA+Pj4+ICtyZWNvcmRfZnVsbF9hcmNoX2xp c3RfYWRkIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgJnJlYykNCj4gPj4+PiAgICB7DQo+ID4+ Pj4gLSAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpDQo+ID4+Pj4gLSAgICBnZGJfcHJpbnRmIChnZGJf c3RkbG9nLA0KPiA+Pj4+IC0JCSJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Z1bGxfYXJjaF9saXN0 X2FkZCAlcy5cbiIsDQo+ID4+Pj4gLQkJaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVjKSk7DQo+ ID4+Pj4gLQ0KPiA+Pj4+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCkNCj4gPj4+ PiAtICAgIHsNCj4gPj4+PiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwtPm5leHQg PSByZWM7DQo+ID4+Pj4gLSAgICAgIHJlYy0+cHJldiA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF90 YWlsOw0KPiA+Pj4+IC0gICAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsNCj4g Pj4+PiAtICAgIH0NCj4gPj4+PiAtICBlbHNlDQo+ID4+Pj4gLSAgICB7DQo+ID4+Pj4gLSAgICAg IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkID0gcmVjOw0KPiA+Pj4+IC0gICAgICByZWNvcmRf ZnVsbF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsNCj4gPj4+PiAtICAgIH0NCj4gPj4+PiArICByZWNv cmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLmVmZmVjdHMucHVzaF9iYWNrIChyZWMpOw0K PiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+Pj4+ICAgIC8qIFJldHVybiB0aGUgdmFsdWUgc3RvcmFn ZSBsb2NhdGlvbiBvZiBhIHJlY29yZCBlbnRyeS4gICovDQo+ID4+Pj4gQEAgLTYxMyw3ICs1Mzcs NiBAQCByZWNvcmRfZnVsbF9nZXRfbG9jIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkNCj4gKnJl YykNCj4gPj4+PiAgICAgICAgICByZXR1cm4gcmVjLT51LnJlZy51LnB0cjsNCj4gPj4+PiAgICAg ICAgZWxzZQ0KPiA+Pj4+ICAgICAgICAgIHJldHVybiByZWMtPnUucmVnLnUuYnVmOw0KPiA+Pj4+ IC0gIGNhc2UgcmVjb3JkX2Z1bGxfZW5kOg0KPiA+Pj4+ICAgICAgZGVmYXVsdDoNCj4gPj4+PiAg ICAgICAgZ2RiX2Fzc2VydF9ub3RfcmVhY2hlZCAoInVuZXhwZWN0ZWQgcmVjb3JkX2Z1bGxfZW50 cnkgdHlwZSIpOw0KPiA+Pj4+ICAgICAgICByZXR1cm4gTlVMTDsNCj4gPj4+PiBAQCAtNjI1LDcg KzU0OCw3IEBAIHJlY29yZF9mdWxsX2dldF9sb2MgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeQ0K PiAqcmVjKQ0KPiA+Pj4+ICAgIGludA0KPiA+Pj4+ICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfcmVnIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiA+Pj4+ICAg IHsNCj4gPj4+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYzsNCj4gPj4+PiArICBz dHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgcmVjOw0KPiA+Pj4gSSB0aGluayB3ZSBjYW4gb21pdCB0 aGUgc3RydWN0IGtleXdvcmQgaGVyZSAodGhlcmUgYXJlIHNvbWUgbW9yZQ0KPiA+PiBvY2N1cnJl bmNlcyBpbiB0aGlzIHBhdGNoKS4NCj4gPj4+PiAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQ0K PiA+Pj4+ICAgICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+Pj4+IEBAIC02MzMsOSAr NTU2LDkgQEAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHN0cnVjdCByZWdjYWNoZQ0K PiA+Pj4+ICpyZWdjYWNoZSwgaW50IHJlZ251bSkNCj4gPj4+PiAgICAJCSJyZWNvcmQgbGlzdC5c biIsDQo+ID4+Pj4gICAgCQlyZWdudW0pOw0KPiA+Pj4+DQo+ID4+Pj4gLSAgcmVjID0gcmVjb3Jk X2Z1bGxfcmVnX2FsbG9jIChyZWdjYWNoZSwgcmVnbnVtKTsNCj4gPj4+PiArICByZWMgPSByZWNv cmRfZnVsbF9yZWdfaW5pdCAocmVnY2FjaGUsIHJlZ251bSk7DQo+ID4+Pj4NCj4gPj4+PiAtICBy ZWdjYWNoZS0+Y29va2VkX3JlYWQgKHJlZ251bSwgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAocmVjKSk7 DQo+ID4+Pj4gKyAgcmVnY2FjaGUtPmNvb2tlZF9yZWFkIChyZWdudW0sIHJlY29yZF9mdWxsX2dl dF9sb2MgKCZyZWMpKTsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0 X2FkZCAocmVjKTsNCj4gPj4+Pg0KPiA+Pj4+IEBAIC02NDgsNyArNTcxLDcgQEAgcmVjb3JkX2Z1 bGxfYXJjaF9saXN0X2FkZF9yZWcgKHN0cnVjdCByZWdjYWNoZQ0KPiA+Pj4+ICpyZWdjYWNoZSwg aW50IHJlZ251bSkNCj4gPj4+PiAgICBpbnQNCj4gPj4+PiAgICByZWNvcmRfZnVsbF9hcmNoX2xp c3RfYWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pDQo+ID4+Pj4gICAgew0KPiA+Pj4+ IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiA+Pj4+ICsgIHN0cnVjdCByZWNv cmRfZnVsbF9lbnRyeSByZWM7DQo+ID4+Pj4NCj4gPj4+PiAgICAgIGlmIChyZWNvcmRfZGVidWcg PiAxKQ0KPiA+Pj4+ICAgICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+Pj4+IEBAIC02 NTksMTIgKzU4MiwxMiBAQCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX21lbQ0KPiAoQ09SRV9B RERSDQo+ID4+IGFkZHIsDQo+ID4+Pj4gaW50IGxlbikNCj4gPj4+PiAgICAgIGlmICghYWRkcikJ LyogRklYTUU6IFdoeT8gIFNvbWUgYXJjaCBtdXN0IHBlcm1pdCBpdC4uLiAgKi8NCj4gPj4+PiAg ICAgICAgcmV0dXJuIDA7DQo+ID4+Pj4NCj4gPj4+PiAtICByZWMgPSByZWNvcmRfZnVsbF9tZW1f YWxsb2MgKGFkZHIsIGxlbik7DQo+ID4+Pj4gKyAgcmVjID0gcmVjb3JkX2Z1bGxfbWVtX2luaXQg KGFkZHIsIGxlbik7DQo+ID4+Pj4NCj4gPj4+PiAgICAgIGlmIChyZWNvcmRfcmVhZF9tZW1vcnkg KGN1cnJlbnRfaW5mZXJpb3IgKCktPmFyY2ggKCksIGFkZHIsDQo+ID4+Pj4gLQkJCSAgcmVjb3Jk X2Z1bGxfZ2V0X2xvYyAocmVjKSwgbGVuKSkNCj4gPj4+PiArCQkJICByZWNvcmRfZnVsbF9nZXRf bG9jICgmcmVjKSwgbGVuKSkNCj4gPj4+PiAgICAgICAgew0KPiA+Pj4+IC0gICAgICByZWNvcmRf ZnVsbF9tZW1fcmVsZWFzZSAocmVjKTsNCj4gPj4+PiArICAgICAgcmVjb3JkX2Z1bGxfbWVtX2Ns ZWFudXAgKHJlYyk7DQo+ID4+Pj4gICAgICAgICAgcmV0dXJuIC0xOw0KPiA+Pj4+ICAgICAgICB9 DQo+ID4+Pj4NCj4gPj4+PiBAQCAtNjczLDI3ICs1OTYsNiBAQCByZWNvcmRfZnVsbF9hcmNoX2xp c3RfYWRkX21lbSAoQ09SRV9BRERSDQo+ID4+IGFkZHIsDQo+ID4+Pj4gaW50IGxlbikNCj4gPj4+ PiAgICAgIHJldHVybiAwOw0KPiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+Pj4+IC0vKiBBZGQgYSBy ZWNvcmRfZnVsbF9lbmQgdHlwZSBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgdG8NCj4gPj4+PiAt ICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0LiAgKi8NCj4gPj4+PiAtDQo+ID4+Pj4gLWludA0KPiA+ Pj4+IC1yZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAodm9pZCkNCj4gPj4+PiAtew0KPiA+ Pj4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiA+Pj4+IC0NCj4gPj4+PiAt ICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCj4gPj4+PiAtICAgIGdkYl9wcmludGYgKGdkYl9zdGRs b2csDQo+ID4+Pj4gLQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgZW5kIHRvIGFyY2ggbGlzdC5cbiIp Ow0KPiA+Pj4+IC0NCj4gPj4+PiAtICByZWMgPSByZWNvcmRfZnVsbF9lbmRfYWxsb2MgKCk7DQo+ ID4+Pj4gLSAgcmVjLT51LmVuZC5zaWd2YWwgPSBHREJfU0lHTkFMXzA7DQo+ID4+Pj4gLSAgcmVj LT51LmVuZC5pbnNuX251bSA9ICsrcmVjb3JkX2Z1bGxfaW5zbl9jb3VudDsNCj4gPj4+PiAtDQo+ ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsNCj4gPj4+PiAtDQo+ID4+ Pj4gLSAgcmV0dXJuIDA7DQo+ID4+Pj4gLX0NCj4gPj4+PiAtDQo+ID4+Pj4gICAgc3RhdGljIHZv aWQNCj4gPj4+PiAgICByZWNvcmRfZnVsbF9jaGVja19pbnNuX251bSAodm9pZCkNCj4gPj4+PiAg ICB7DQo+ID4+Pj4gQEAgLTcyNSw4ICs2MjcsNyBAQCByZWNvcmRfZnVsbF9tZXNzYWdlIChzdHJ1 Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLA0KPiA+Pj4+IGVudW0gZ2RiX3NpZ25hbCBzaWduYWwp DQo+ID4+Pj4NCj4gPj4+PiAgICAgIHRyeQ0KPiA+Pj4+ICAgICAgICB7DQo+ID4+Pj4gLSAgICAg IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsNCj4gPj4+PiAtICAgICAgcmVjb3Jk X2Z1bGxfYXJjaF9saXN0X3RhaWwgPSBOVUxMOw0KPiA+Pj4+ICsgICAgICByZWNvcmRfZnVsbF9y ZXNldF9pbmNvbXBsZXRlICgpOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICAgICAgLyogQ2hlY2sgcmVj b3JkX2Z1bGxfaW5zbl9udW0uICAqLw0KPiA+Pj4+ICAgICAgICAgIHJlY29yZF9mdWxsX2NoZWNr X2luc25fbnVtICgpOw0KPiA+Pj4+IEBAIC03NDYsMjAgKzY0NywxNiBAQCByZWNvcmRfZnVsbF9t ZXNzYWdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gPj4gKnJlZ2NhY2hlLA0KPiA+Pj4+IGVudW0gZ2Ri X3NpZ25hbCBzaWduYWwpDQo+ID4+Pj4gICAgCSB0aGUgdXNlciBzYXlzIHNvbWV0aGluZyBkaWZm ZXJlbnQsIGxpa2UgImRlbGl2ZXIgdGhpcyBzaWduYWwiDQo+ID4+Pj4gICAgCSBkdXJpbmcgdGhl IHJlcGxheSBtb2RlKS4NCj4gPj4+Pg0KPiA+Pj4+IC0JIFVzZXIgc2hvdWxkIHVuZGVyc3RhbmQg dGhhdCBub3RoaW5nIGhlIGRvZXMgZHVyaW5nIHRoZSByZXBsYXkNCj4gPj4+PiAtCSBtb2RlIHdp bGwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgY2hpbGQuICBJZiBoZSB0cmllcywNCj4gPj4+ PiArCSBVc2VyIHNob3VsZCB1bmRlcnN0YW5kIHRoYXQgbm90aGluZyB0aGV5IGRvIGR1cmluZyB0 aGUgcmVwbGF5DQo+ID4+Pj4gKwkgbW9kZSB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhl IGNoaWxkLiAgSWYgdGhleSB0cnksDQo+ID4+Pj4gICAgCSB0aGVuIHRoYXQgaXMgYSB1c2VyIGVy cm9yLg0KPiA+Pj4+DQo+ID4+Pj4gICAgCSBCdXQgd2Ugc2hvdWxkIHN0aWxsIGRlbGl2ZXIgdGhl IHNpZ25hbCB0byBnZGIgZHVyaW5nIHRoZSByZXBsYXksDQo+ID4+Pj4gICAgCSBpZiB3ZSBkZWxp dmVyZWQgaXQgZHVyaW5nIHRoZSByZWNvcmRpbmcuICBUaGVyZWZvcmUgd2Ugc2hvdWxkDQo+ID4+ Pj4gICAgCSByZWNvcmQgdGhlIHNpZ25hbCBkdXJpbmcgcmVjb3JkX2Z1bGxfd2FpdCwgbm90DQo+ ID4+Pj4gICAgCSByZWNvcmRfZnVsbF9yZXN1bWUuICAqLw0KPiA+Pj4+IC0gICAgICBpZiAocmVj b3JkX2Z1bGxfbGlzdCAhPSAmcmVjb3JkX2Z1bGxfZmlyc3QpICAvKiBGSVhNRSBiZXR0ZXIgd2F5 DQo+ID4+Pj4gLQkJCQkJCSAgICAgIHRvIGNoZWNrICovDQo+ID4+Pj4gLQl7DQo+ID4+Pj4gLQkg IGdkYl9hc3NlcnQgKHJlY29yZF9mdWxsX2xpc3QtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKTsN Cj4gPj4+PiAtCSAgcmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuc2lndmFsID0gc2lnbmFsOw0KPiA+ Pj4+IC0JfQ0KPiA+Pj4+ICsgICAgICBpZiAoc2lnbmFsICE9IEdEQl9TSUdOQUxfMCkNCj4gPj4+ PiArCXJlY29yZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIC0gMV0uc2lndmFsID0g c2lnbmFsOw0KPiA+IFNpbWlsYXIgY29tbWVudCBhcyBhbHJlYWR5IGluIG15IGVhcmxpZXIgcmV2 aWV3Og0KPiA+IENhbiByZWNvcmRfZnVsbF9uZXh0X2luc24gYmUgPT0gMCBoZXJlIG9yIG1heSBy ZWNvcmRfZnVsbF9saXN0IGJlIGVtcHR5ID8NCj4gT2ggeW91J3JlIHJpZ2h0LiBUaGlzIGlzIHBy b2JhYmx5IGJlY2F1c2UgSSBtaXN1bmRlcnN0b29kIHRoZSBvcmRlciBvZg0KPiBvcGVyYXRpb25z IGFuZCB3YXMgc2F2aW5nIGl0IHRvIHRoZSBjdXJyZW50IG9uZSwgbm90IHRoZSBwcmV2aW91cyBv bmUsDQo+IGFuZCB3aGVuIEkgZml4ZWQgdGhhdCBJIGZvcmdvdCB0byBjaGVjayB0aGUgb3JpZ2lu YWwNCj4gPg0KPiA+IEkgdGhpbmsgaXQgbWlnaHQgYmUgd29ydGggY2hlY2tpbmcgdGhlIHBhdGNo IGlmIHRoZXJlIGFyZSBtb3JlIHNpbWlsYXIgaXNzdWVzLg0KPiA+IFRoZSBvbGQgcGF0Y2ggaGFk IG1vcmUgZ3VhcmRzIHRvIGNoZWNrIHRoaXMuDQo+IHllYWggZ29vZCBwb2ludCwgSSdsbCBsb29r IHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIHNlZSBpZiBJIG5vdGljZSBpdA0KPiBhbnl3aGVyZSBl bHNlLg0KPiA+DQo+ID4gQW5kIEkgbm90aWNlZCBpbiBzb21lIG90aGVyIGxvY2F0aW9ucyB5b3Ug Y2FzdCBpdDoNCj4gPg0KPiA+IAkgIGlmIChzaWd2YWwgIT0gR0RCX1NJR05BTF8wKQ0KPiA+IAkg ICAgcmVjb3JkX2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5zaWd2YWwgPSAoZ2RiX3NpZ25h bCkgc2lndmFsOw0KPiA+DQo+ID4gTm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3Nhcnkgb3Igbm90 LCBidXQgaXQgbWlnaHQgYmUgZm9yIGNoZWNraW5nIGFuZCBtYWtpbmcNCj4gaXQgY29uc2lzdGVu dD8NCj4gSSBjYXN0IGl0IGluIHRoZSBvdGhlciBsb2NhdGlvbiBiZWNhdXNlIGl0IGlzIHJlYWRp bmcgZnJvbSB0aGUgQkZEIGFuZA0KPiBzbyBzaWd2YWwgaXMgZGVjbGFyZWQgYXMgdWludDhfdCwg bm90IGFzIGdkYl9zaWduYWwuDQo+ID4gQW5kIGlzIGl0IGludGVuZGVkIHRoYXQgbm93IHdlIGRv bid0IGNsZWFyIHNpZ3ZhbCBhbnltb3JlPw0KPiA+DQo+ID4gU2hvdWxkbid0IHdlIHNldCBpdCB0 byAgc3RkOjpudWxsb3B0IGluIGNhc2Ugc2lnbmFsID09IEdEQl9TSUdOQUxfMCwgIHRvDQo+IG1h dGNoIHRoZSBvcmlnaW5hbA0KPiA+IGJlaGF2aW91cj8NCj4gDQo+IHllYWggdGhpcyBpcyBhIG1p c3Rha2UuIFRoZSBwbGFuIHdhcyB0aGF0IHJlY29yZF9mdWxsX3NhdmVfaW5zdHJ1Y3Rpb24NCj4g Y2xlYXJzIHRoZSBpbmNvbXBsZXRlIGluc3RydWN0aW9uLCBidXQgSSBhcHBhcmVudGx5IGZvcmdv dCB0aGF0Lg0KPiANCj4gV2l0aCB0aGF0LCBpdCBzaG91bGQgYWx3YXlzIGJlIGNsZWFyIHNvIHdl IHdvbid0IG5lZWQgdG8gZXhwbGljaXRseSBzZXQNCj4gaXQgdG8gbnVsbG9wdC4NCj4gDQo+IEkn bGwgdXBkYXRlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLg0KPiANCj4gPg0KPiA+Pj4+ICAgICAgICAg IGlmIChzaWduYWwgPT0gR0RCX1NJR05BTF8wDQo+ID4+Pj4gICAgCSAgfHwgIWdkYmFyY2hfcHJv Y2Vzc19yZWNvcmRfc2lnbmFsX3AgKGdkYmFyY2gpKQ0KPiA+Pj4+IEBAIC03NzgsMTMgKzY3NSwx MSBAQCByZWNvcmRfZnVsbF9tZXNzYWdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gPj4gKnJlZ2NhY2hl LA0KPiA+Pj4+IGVudW0gZ2RiX3NpZ25hbCBzaWduYWwpDQo+ID4+Pj4gICAgICAgIH0NCj4gPj4+ PiAgICAgIGNhdGNoIChjb25zdCBnZGJfZXhjZXB0aW9uICZleCkNCj4gPj4+PiAgICAgICAgew0K PiA+Pj4+IC0gICAgICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hf bGlzdF90YWlsKTsNCj4gPj4+PiArICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAo KTsNCj4gPj4+PiAgICAgICAgICB0aHJvdzsNCj4gPj4+PiAgICAgICAgfQ0KPiA+Pj4+DQo+ID4+ Pj4gLSAgcmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFk Ow0KPiA+Pj4+IC0gIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3JkX2Z1 bGxfbGlzdDsNCj4gPj4+PiAtICByZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfYXJjaF9s aXN0X3RhaWw7DQo+ID4+Pj4gKyAgcmVjb3JkX2Z1bGxfc2F2ZV9pbnN0cnVjdGlvbiAoKTsNCj4g Pj4+Pg0KPiA+Pj4+ICAgICAgaWYgKHJlY29yZF9mdWxsX2luc25fbnVtID09IHJlY29yZF9mdWxs X2luc25fbWF4X251bSkNCj4gPj4+PiAgICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2Zp cnN0ICgpOw0KPiA+Pj4+IEBAIC04MjksOSArNzI0LDkgQEAgc3RhdGljIGVudW0gdGFyZ2V0X3N0 b3BfcmVhc29uDQo+ID4+Pj4gcmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24NCj4gPj4+PiAgICAgICBl bnRyaWVzIGFuZCBtZW1vcnkgZW50cmllcywgZm9sbG93ZWQgYnkgYW4gJ2VuZCcgZW50cnkuICAq Lw0KPiA+Pj4+DQo+ID4+Pj4gICAgc3RhdGljIGlubGluZSB2b2lkDQo+ID4+Pj4gLXJlY29yZF9m dWxsX2V4ZWNfaW5zbiAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gPj4+PiAtCQkgICAg ICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsDQo+ID4+Pj4gLQkJICAgICAgIHN0cnVjdCByZWNv cmRfZnVsbF9lbnRyeSAqZW50cnkpDQo+ID4+Pj4gK3JlY29yZF9mdWxsX2V4ZWNfZW50cnkgKHN0 cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+ID4+Pj4gKwkJCXN0cnVjdCBnZGJhcmNoICpnZGJh cmNoLA0KPiA+Pj4+ICsJCQlzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmVudHJ5KQ0KPiA+Pj4g Tml0OiBvbWl0IHN0cnVjdCBrZXl3b3Jkcw0KPiA+Pj4gQW5kIHRoZXJlIGFyZSBzb21lIG1vcmUg cGxhY2VzIGluIHRoaXMgc2VyaWVzL3BhdGNoLCBidXQgSSB3aWxsIHN0b3ANCj4gPj4gY29tbWVu dGluZw0KPiA+Pj4gbm93IG9uIGFsbCBvZiB0aGVtLg0KPiA+Pj4NCj4gPj4+PiAgICB7DQo+ID4+ Pj4gICAgICBzd2l0Y2ggKGVudHJ5LT50eXBlKQ0KPiA+Pj4+ICAgICAgICB7DQo+ID4+Pj4gQEAg LTkwOSw2ICs4MDQsMTUgQEAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChzdHJ1Y3QgcmVnY2FjaGUN Cj4gPj4gKnJlZ2NhY2hlLA0KPiA+Pj4+ICAgICAgICB9DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ ID4+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+Pj4+ICtyZWNvcmRfZnVsbF9leGVjX2luc24g KHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+ID4+Pj4gKwkJICAgICAgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLA0KPiA+Pj4+ICsJCSAgICAgICByZWNvcmRfZnVsbF9pbnN0cnVjdGlvbiAm aW5zbikNCj4gPj4+PiArew0KPiA+Pj4+ICsgIGZvciAoYXV0byAmZW50cnkgOiBpbnNuLmVmZmVj dHMpDQo+ID4+Pj4gKyAgICByZWNvcmRfZnVsbF9leGVjX2VudHJ5IChyZWdjYWNoZSwgZ2RiYXJj aCwgJmVudHJ5KTsNCj4gPj4+PiArfQ0KPiA+Pj4+ICsNCj4gPj4+PiAgICBzdGF0aWMgdm9pZCBy ZWNvcmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKTsNCj4gPj4+Pg0KPiA+Pj4+ICAg IC8qIEFzeW5jaHJvbm91cyBzaWduYWwgaGFuZGxlIHJlZ2lzdGVyZWQgYXMgZXZlbnQgbG9vcCBz b3VyY2UgZm9yDQo+IHdoZW4NCj4gPj4+PiBAQCAtOTgzLDEwICs4ODcsNyBAQCByZWNvcmRfZnVs bF9vcGVuIChjb25zdCBjaGFyICphcmdzLCBpbnQNCj4gZnJvbV90dHkpDQo+ID4+Pj4gICAgICBy ZWNvcmRfcHJlb3BlbiAoKTsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgLyogUmVzZXQgKi8NCj4gPj4+ PiAtICByZWNvcmRfZnVsbF9pbnNuX251bSA9IDA7DQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfaW5z bl9jb3VudCA9IDA7DQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfbGlzdCA9ICZyZWNvcmRfZnVsbF9m aXJzdDsNCj4gPj4+PiAtICByZWNvcmRfZnVsbF9saXN0LT5uZXh0ID0gTlVMTDsNCj4gPj4+PiAr ICByZWNvcmRfZnVsbF9yZXNldF9oaXN0b3J5ICgpOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICBiZmQg KmNiZmQgPSBnZXRfaW5mZXJpb3JfY29yZV9iZmQgKGN1cnJlbnRfaW5mZXJpb3IgKCkpOw0KPiA+ Pj4+ICAgICAgaWYgKGNiZmQgIT0gbnVsbHB0cikNCj4gPj4+PiBAQCAtMTAxNCw3ICs5MTUsNyBA QCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6Y2xvc2UgKCkNCj4gPj4+PiAgICAgIGlmIChyZWNv cmRfZGVidWcpDQo+ID4+Pj4gICAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csICJQcm9jZXNz IHJlY29yZDogcmVjb3JkX2Z1bGxfY2xvc2VcbiIpOw0KPiA+Pj4+DQo+ID4+Pj4gLSAgcmVjb3Jk X2Z1bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRfZnVsbF9saXN0KTsNCj4gPj4+PiArICByZWNvcmRf ZnVsbF9yZXNldF9oaXN0b3J5ICgpOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICAvKiBSZWxlYXNlIHJl Y29yZF9mdWxsX2NvcmVfcmVnYnVmLiAgKi8NCj4gPj4+PiAgICAgIGlmIChyZWNvcmRfZnVsbF9j b3JlX3JlZ2J1ZikNCj4gPj4+PiBAQCAtMTMxMyw3ICsxMjE0LDYgQEAgcmVjb3JkX2Z1bGxfd2Fp dF8xIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0KPiA+Pj4+ICAgICAgICAgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7DQo+ID4+Pj4gICAgICAgICAgY29uc3Qg YWRkcmVzc19zcGFjZSAqYXNwYWNlID0gY3VycmVudF9pbmZlcmlvciAoKS0+YXNwYWNlLmdldCAo KTsNCj4gPj4+PiAgICAgICAgICBpbnQgY29udGludWVfZmxhZyA9IDE7DQo+ID4+Pj4gLSAgICAg IGludCBmaXJzdF9yZWNvcmRfZnVsbF9lbmQgPSAxOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICAgICAg dHJ5DQo+ID4+Pj4gICAgCXsNCj4gPj4+PiBAQCAtMTMyMiw3ICsxMjIyLDYgQEAgcmVjb3JkX2Z1 bGxfd2FpdF8xIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0KPiA+Pj4+ICAgIAkgIHJlY29yZF9m dWxsX3N0b3BfcmVhc29uID0gVEFSR0VUX1NUT1BQRURfQllfTk9fUkVBU09OOw0KPiA+Pj4+ICAg IAkgIHN0YXR1cy0+c2V0X3N0b3BwZWQgKEdEQl9TSUdOQUxfMCk7DQo+ID4+Pj4NCj4gPj4+PiAt CSAgLyogQ2hlY2sgYnJlYWtwb2ludCB3aGVuIGZvcndhcmQgZXhlY3V0ZS4gICovDQo+ID4+Pj4g ICAgCSAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQ0KPiA+Pj4+ICAg IAkgICAgew0KPiA+Pj4+ICAgIAkgICAgICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdj YWNoZSk7DQo+ID4+Pj4gQEAgLTEzMzAsOCArMTIyOSw3IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAo c3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4gPj4+Pg0KPiA+Pj4+ICZyZWNvcmRfZnVsbF9zdG9w X3JlYXNvbikpDQo+ID4+Pj4gICAgCQl7DQo+ID4+Pj4gICAgCQkgIGlmIChyZWNvcmRfZGVidWcp DQo+ID4+Pj4gLQkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+Pj4gLQkJCQkiUHJv Y2VzcyByZWNvcmQ6IGJyZWFrIGF0ICVzLlxuIiwNCj4gPj4+PiArCQkgICAgZ2RiX3ByaW50ZiAo Z2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBicmVhayBhdCAlcy5cbiIsDQo+ID4+Pj4gICAg CQkJCXBhZGRyZXNzIChnZGJhcmNoLCB0bXBfcGMpKTsNCj4gPj4+PiAgICAJCSAgZ290byByZXBs YXlfb3V0Ow0KPiA+Pj4+ICAgIAkJfQ0KPiA+Pj4+IEBAIC0xMzQ0LDEwICsxMjQyLDEwIEBAIHJl Y29yZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRhcmdldF9vcHMNCj4gKm9wcywNCj4gPj4+PiAgICAJ ICAgICB0aGUgc2lnbmFsLiAgKi8NCj4gPj4+PiAgICAJICB0YXJnZXRfdGVybWluYWw6Om91cnMg KCk7DQo+ID4+Pj4NCj4gPj4+PiAtCSAgLyogSW4gRVhFQ19GT1JXQVJEIG1vZGUsIHJlY29yZF9m dWxsX2xpc3QgcG9pbnRzIHRvIHRoZSB0YWlsIG9mDQo+ID4+IHByZXYNCj4gPj4+PiAtCSAgICAg aW5zdHJ1Y3Rpb24uICAqLw0KPiA+Pj4+IC0JICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBF WEVDX0ZPUldBUkQgJiYgcmVjb3JkX2Z1bGxfbGlzdC0NCj4gPj4+IG5leHQpDQo+ID4+Pj4gLQkg ICAgcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPm5leHQ7DQo+ID4+Pj4gKwkg IC8qIEluIEVYRUNfRk9SV0FSRCBtb2RlLCByZWNvcmRfZnVsbF9uZXh0X2luc24gaXMgdGhlIG5l eHQNCj4gPj4+PiArCSAgICAgaW5zdHJ1Y3Rpb24gdG8gYmUgZXhlY3V0ZWQuICAqLw0KPiA+Pj4+ ICsJICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+ID4+Pj4gKwkg ICAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuLS07DQo+ID4+Pj4NCj4gPj4+PiAgICAJICAvKiBMb29w IG92ZXIgdGhlIHJlY29yZF9mdWxsX2xpc3QsIGxvb2tpbmcgZm9yIHRoZSBuZXh0IHBsYWNlIHRv DQo+ID4+Pj4gICAgCSAgICAgc3RvcC4gICovDQo+ID4+Pj4gQEAgLTEzNTUsMTA4ICsxMjUzLDky IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRhcmdldF9vcHMNCj4gKm9wcywNCj4gPj4+ PiAgICAJICAgIHsNCj4gPj4+PiAgICAJICAgICAgLyogQ2hlY2sgZm9yIGJlZ2lubmluZyBhbmQg ZW5kIG9mIGxvZy4gICovDQo+ID4+Pj4gICAgCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9u ID09IEVYRUNfUkVWRVJTRQ0KPiA+Pj4+IC0JCSAgJiYgcmVjb3JkX2Z1bGxfbGlzdCA9PSAmcmVj b3JkX2Z1bGxfZmlyc3QpDQo+ID4+Pj4gKwkJICAmJiByZWNvcmRfZnVsbF9uZXh0X2luc24gPCAw KQ0KPiA+Pj4+ICAgIAkJew0KPiA+Pj4+ICAgIAkJICAvKiBIaXQgYmVnaW5uaW5nIG9mIHJlY29y ZCBsb2cgaW4gcmV2ZXJzZS4gICovDQo+ID4+Pj4gICAgCQkgIHN0YXR1cy0+c2V0X25vX2hpc3Rv cnkgKCk7DQo+ID4+Pj4gKwkJICByZWNvcmRfZnVsbF9uZXh0X2luc24gPSAwOw0KPiA+Pj4+ICAg IAkJICBicmVhazsNCj4gPj4+PiAgICAJCX0NCj4gPj4+PiAgICAJICAgICAgaWYgKGV4ZWN1dGlv bl9kaXJlY3Rpb24gIT0gRVhFQ19SRVZFUlNFDQo+ID4+Pj4gLQkJICAmJiAhcmVjb3JkX2Z1bGxf bGlzdC0+bmV4dCkNCj4gPj4+PiArCQkgICYmIHJlY29yZF9mdWxsX25leHRfaW5zbiA9PSByZWNv cmRfZnVsbF9saXN0LnNpemUgKCkpDQo+ID4+Pj4gICAgCQl7DQo+ID4+Pj4gICAgCQkgIC8qIEhp dCBlbmQgb2YgcmVjb3JkIGxvZyBnb2luZyBmb3J3YXJkLiAgKi8NCj4gPj4+PiAgICAJCSAgc3Rh dHVzLT5zZXRfbm9faGlzdG9yeSAoKTsNCj4gPj4+PiAgICAJCSAgYnJlYWs7DQo+ID4+Pj4gICAg CQl9DQo+ID4+Pj4NCj4gPj4+PiAtCSAgICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2Fj aGUsIGdkYmFyY2gsIHJlY29yZF9mdWxsX2xpc3QpOw0KPiA+Pj4+ICsJICAgICAgcmVjb3JkX2Z1 bGxfZXhlY19pbnNuDQo+ID4+Pj4gKwkJKHJlZ2NhY2hlLCBnZGJhcmNoLA0KPiA+Pj4+ICsJCSBy ZWNvcmRfZnVsbF9saXN0W3JlY29yZF9mdWxsX25leHRfaW5zbl0pOw0KPiA+Pj4+DQo+ID4+Pj4g LQkgICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQpDQo+ ID4+Pj4gKwkgICAgICAvKiBzdGVwICovDQo+ID4+Pj4gKwkgICAgICBpZiAocmVjb3JkX2Z1bGxf cmVzdW1lX3N0ZXApDQo+ID4+Pj4gICAgCQl7DQo+ID4+Pj4gICAgCQkgIGlmIChyZWNvcmRfZGVi dWcgPiAxKQ0KPiA+Pj4+IC0JCSAgICBnZGJfcHJpbnRmDQo+ID4+Pj4gLQkJICAgICAgKGdkYl9z dGRsb2csDQo+ID4+Pj4gLQkJICAgICAgICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Z1bGxfZW5k ICVzIHRvICINCj4gPj4+PiAtCQkgICAgICAgImluZmVyaW9yLlxuIiwNCj4gPj4+PiAtCQkgICAg ICAgaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVjb3JkX2Z1bGxfbGlzdCkpOw0KPiA+Pj4+IC0N Cj4gPj4+PiAtCQkgIGlmIChmaXJzdF9yZWNvcmRfZnVsbF9lbmQNCj4gPj4+PiAtCQkgICAgICAm JiBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkNCj4gPj4+PiAtCQkgICAgew0K PiA+Pj4+IC0JCSAgICAgIC8qIFdoZW4gcmV2ZXJzZSBleGVjdXRlLCB0aGUgZmlyc3QNCj4gPj4+ PiAtCQkJIHJlY29yZF9mdWxsX2VuZCBpcyB0aGUgcGFydCBvZiBjdXJyZW50DQo+ID4+Pj4gLQkJ CSBpbnN0cnVjdGlvbi4gICovDQo+ID4+Pj4gLQkJICAgICAgZmlyc3RfcmVjb3JkX2Z1bGxfZW5k ID0gMDsNCj4gPj4+PiAtCQkgICAgfQ0KPiA+Pj4+IC0JCSAgZWxzZQ0KPiA+Pj4+IC0JCSAgICB7 DQo+ID4+Pj4gLQkJICAgICAgLyogSW4gRVhFQ19SRVZFUlNFIG1vZGUsIHRoaXMgaXMgdGhlDQo+ ID4+Pj4gLQkJCSByZWNvcmRfZnVsbF9lbmQgb2YgcHJldiBpbnN0cnVjdGlvbi4gIEluDQo+ID4+ Pj4gLQkJCSBFWEVDX0ZPUldBUkQgbW9kZSwgdGhpcyBpcyB0aGUNCj4gPj4+PiAtCQkJIHJlY29y ZF9mdWxsX2VuZCBvZiBjdXJyZW50IGluc3RydWN0aW9uLiAgKi8NCj4gPj4+PiAtCQkgICAgICAv KiBzdGVwICovDQo+ID4+Pj4gLQkJICAgICAgaWYgKHJlY29yZF9mdWxsX3Jlc3VtZV9zdGVwKQ0K PiA+Pj4+IC0JCQl7DQo+ID4+Pj4gLQkJCSAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpDQo+ID4+Pj4g LQkJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+Pj4+IC0JCQkJCSJQcm9jZXNzIHJl Y29yZDogc3RlcC5cbiIpOw0KPiA+Pj4+IC0JCQkgIGNvbnRpbnVlX2ZsYWcgPSAwOw0KPiA+Pj4+ IC0JCQl9DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0JCSAgICAgIC8qIGNoZWNrIGJyZWFrcG9pbnQgKi8N Cj4gPj4+PiAtCQkgICAgICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSk7DQo+ ID4+Pj4gLQkJICAgICAgaWYgKHJlY29yZF9jaGVja19zdG9wcGVkX2J5X2JyZWFrcG9pbnQNCj4g Pj4+PiAtCQkJICAoYXNwYWNlLCB0bXBfcGMsICZyZWNvcmRfZnVsbF9zdG9wX3JlYXNvbikpDQo+ ID4+Pj4gLQkJCXsNCj4gPj4+PiAtCQkJICBpZiAocmVjb3JkX2RlYnVnKQ0KPiA+Pj4+IC0JCQkg ICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4+PiAtCQkJCQkiUHJvY2VzcyByZWNvcmQ6 IGJyZWFrICINCj4gPj4+PiAtCQkJCQkiYXQgJXMuXG4iLA0KPiA+Pj4+IC0JCQkJCXBhZGRyZXNz IChnZGJhcmNoLCB0bXBfcGMpKTsNCj4gPj4+PiArCQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxv ZywNCj4gPj4+PiArCQkJCSJQcm9jZXNzIHJlY29yZDogc3RlcC5cbiIpOw0KPiA+Pj4+ICsJCSAg Y29udGludWVfZmxhZyA9IDA7DQo+ID4+Pj4gKwkJfQ0KPiA+Pj4+DQo+ID4+Pj4gLQkJCSAgY29u dGludWVfZmxhZyA9IDA7DQo+ID4+Pj4gLQkJCX0NCj4gPj4+PiArCSAgICAgIC8qIGNoZWNrIGJy ZWFrcG9pbnQgKi8NCj4gPj4+PiArCSAgICAgIHRtcF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJl Z2NhY2hlKTsNCj4gPj4+PiArCSAgICAgIGlmIChyZWNvcmRfY2hlY2tfc3RvcHBlZF9ieV9icmVh a3BvaW50DQo+ID4+Pj4gKwkJICAoYXNwYWNlLCB0bXBfcGMsICZyZWNvcmRfZnVsbF9zdG9wX3Jl YXNvbikpDQo+ID4+Pj4gKwkJew0KPiA+Pj4+ICsJCSAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gPj4+ PiArCQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4+PiArCQkJCSJQcm9jZXNzIHJl Y29yZDogYnJlYWsgIg0KPiA+Pj4+ICsJCQkJImF0ICVzLlxuIiwNCj4gPj4+PiArCQkJCXBhZGRy ZXNzIChnZGJhcmNoLCB0bXBfcGMpKTsNCj4gPj4+Pg0KPiA+Pj4+IC0JCSAgICAgIGlmIChyZWNv cmRfZnVsbF9zdG9wX3JlYXNvbg0KPiA+Pj4+IC0JCQkgID09IFRBUkdFVF9TVE9QUEVEX0JZX1dB VENIUE9JTlQpDQo+ID4+Pj4gLQkJCXsNCj4gPj4+PiAtCQkJICBpZiAocmVjb3JkX2RlYnVnKQ0K PiA+Pj4+IC0JCQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4+PiAtCQkJCQkiUHJv Y2VzcyByZWNvcmQ6IGhpdCBodyAiDQo+ID4+Pj4gLQkJCQkJIndhdGNocG9pbnQuXG4iKTsNCj4g Pj4+PiAtCQkJICBjb250aW51ZV9mbGFnID0gMDsNCj4gPj4+PiAtCQkJfQ0KPiA+Pj4+IC0JCSAg ICAgIC8qIENoZWNrIHRhcmdldCBzaWduYWwgKi8NCj4gPj4+PiAtCQkgICAgICBpZiAocmVjb3Jk X2Z1bGxfbGlzdC0+dS5lbmQuc2lndmFsICE9IEdEQl9TSUdOQUxfMCkNCj4gPj4+PiAtCQkJLyog RklYTUU6IGJldHRlciB3YXkgdG8gY2hlY2sgKi8NCj4gPj4+PiAtCQkJY29udGludWVfZmxhZyA9 IDA7DQo+ID4+Pj4gLQkJICAgIH0NCj4gPj4+PiArCQkgIGNvbnRpbnVlX2ZsYWcgPSAwOw0KPiA+ Pj4+ICAgIAkJfQ0KPiA+Pj4+DQo+ID4+Pj4gLQkgICAgICBpZiAoY29udGludWVfZmxhZykNCj4g Pj4+PiArCSAgICAgIGlmIChyZWNvcmRfZnVsbF9zdG9wX3JlYXNvbg0KPiA+Pj4+ICsJCSAgPT0g VEFSR0VUX1NUT1BQRURfQllfV0FUQ0hQT0lOVCkNCj4gPj4+PiAgICAJCXsNCj4gPj4+PiAtCQkg IGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkNCj4gPj4+PiAtCQkgICAg ew0KPiA+Pj4+IC0JCSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0LT5wcmV2KQ0KPiA+Pj4+IC0J CQlyZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+cHJldjsNCj4gPj4+PiAtCQkg ICAgfQ0KPiA+Pj4+IC0JCSAgZWxzZQ0KPiA+Pj4+IC0JCSAgICB7DQo+ID4+Pj4gLQkJICAgICAg aWYgKHJlY29yZF9mdWxsX2xpc3QtPm5leHQpDQo+ID4+Pj4gLQkJCXJlY29yZF9mdWxsX2xpc3Qg PSByZWNvcmRfZnVsbF9saXN0LT5uZXh0Ow0KPiA+Pj4+IC0JCSAgICB9DQo+ID4+Pj4gKwkJICBp ZiAocmVjb3JkX2RlYnVnKQ0KPiA+Pj4+ICsJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0K PiA+Pj4+ICsJCQkJIlByb2Nlc3MgcmVjb3JkOiBoaXQgaHcgIg0KPiA+Pj4+ICsJCQkJIndhdGNo cG9pbnQuXG4iKTsNCj4gPj4+PiArCQkgIGNvbnRpbnVlX2ZsYWcgPSAwOw0KPiA+Pj4+ICAgIAkJ fQ0KPiA+Pj4+ICsJICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9p bnNuXS5zaWd2YWwuaGFzX3ZhbHVlICgpKQ0KPiA+Pj4+ICsJCWNvbnRpbnVlX2ZsYWcgPSAwOw0K PiA+Pj4+ICsNCj4gPj4+PiArCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNf UkVWRVJTRSkNCj4gPj4+PiArCQlyZWNvcmRfZnVsbF9uZXh0X2luc24tLTsNCj4gPj4+PiArCSAg ICAgIGVsc2UNCj4gPj4+PiArCQlyZWNvcmRfZnVsbF9uZXh0X2luc24rKzsNCj4gPj4+PiAgICAJ ICAgIH0NCj4gPj4+PiAgICAJICB3aGlsZSAoY29udGludWVfZmxhZyk7DQo+ID4+Pj4NCj4gPj4+ PiArCSAgaWYgKHJlY29yZF9mdWxsX25leHRfaW5zbiA8IDApDQo+ID4+Pj4gKwkgICAgew0KPiA+ Pj4+ICsJICAgICAgZ2RiX2Fzc2VydCAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVS U0UpOw0KPiA+Pj4+ICsJICAgICAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuID0gMDsNCj4gPj4+PiAr CSAgICB9DQo+ID4+Pj4gKwkgIGVsc2UgaWYgKHJlY29yZF9mdWxsX25leHRfaW5zbiA+IHJlY29y ZF9mdWxsX2xpc3Quc2l6ZSAoKSkNCj4gPj4+PiArCSAgICB7DQo+ID4+Pj4gKwkgICAgICBnZGJf YXNzZXJ0IChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCk7DQo+ID4+Pj4gKwkg ICAgICByZWNvcmRfZnVsbF9uZXh0X2luc24gPSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCk7DQo+ ID4+Pj4gKwkgICAgfQ0KPiA+Pj4+ICsJICAvKiBSZXNldCB0aGUgY3VycmVudCBpbnN0cnVjaXRv biB0byBwb2ludCB0byB0aGUgb25lIHRvIGJlIHJlcGxheWVkDQo+ID4+PiBOaXQ6IGluc3RydWN0 aW9uDQo+ID4+Pg0KPiA+Pj4+ICsJICAgICBtb3ZpbmcgZm9yd2FyZC4gICovDQo+ID4+Pj4gKwkg IGVsc2UgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiA+Pj4+ICsJ ICAgIHJlY29yZF9mdWxsX25leHRfaW5zbisrOw0KPiA+Pj4+ICsNCj4gPj4+PiAgICAJcmVwbGF5 X291dDoNCj4gPj4+PiAgICAJICBpZiAoc3RhdHVzLT5raW5kICgpID09IFRBUkdFVF9XQUlUS0lO RF9TVE9QUEVEKQ0KPiA+Pj4+ICAgIAkgICAgew0KPiA+Pj4+ICsJICAgICAgaW50IGluc24gPSAo ZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpDQo+ID4+Pj4gKwkJCSA/IHJlY29y ZF9mdWxsX25leHRfaW5zbiAtIDEgOiByZWNvcmRfZnVsbF9uZXh0X2luc247DQo+ID4+Pj4gICAg CSAgICAgIGlmIChyZWNvcmRfZnVsbF9nZXRfc2lnKQ0KPiA+Pj4+ICAgIAkJc3RhdHVzLT5zZXRf c3RvcHBlZCAoR0RCX1NJR05BTF9JTlQpOw0KPiA+Pj4+IC0JICAgICAgZWxzZSBpZiAocmVjb3Jk X2Z1bGxfbGlzdC0+dS5lbmQuc2lndmFsICE9IEdEQl9TSUdOQUxfMCkNCj4gPj4+PiAtCQkvKiBG SVhNRTogYmV0dGVyIHdheSB0byBjaGVjayAqLw0KPiA+Pj4+IC0JCXN0YXR1cy0+c2V0X3N0b3Bw ZWQgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5kLnNpZ3ZhbCk7DQo+ID4+Pj4gKwkgICAgICBlbHNl IGlmIChyZWNvcmRfZnVsbF9saXN0W2luc25dLnNpZ3ZhbC5oYXNfdmFsdWUgKCkpDQo+ID4+Pj4g KwkJc3RhdHVzLT5zZXRfc3RvcHBlZA0KPiA+Pj4+ICsJCSAgKHJlY29yZF9mdWxsX2xpc3RbaW5z bl0uc2lndmFsLnZhbHVlICgpKTsNCj4gPj4+PiAgICAJICAgICAgZWxzZQ0KPiA+Pj4+ICAgIAkJ c3RhdHVzLT5zZXRfc3RvcHBlZCAoR0RCX1NJR05BTF9UUkFQKTsNCj4gPj4+PiAgICAJICAgIH0N Cj4gPj4+PiBAQCAtMTQ2NCwxMiArMTM0Niw5IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAoc3RydWN0 IHRhcmdldF9vcHMgKm9wcywNCj4gPj4+PiAgICAgICAgICBjYXRjaCAoY29uc3QgZ2RiX2V4Y2Vw dGlvbiAmZXgpDQo+ID4+Pj4gICAgCXsNCj4gPj4+PiAgICAJICBpZiAoZXhlY3V0aW9uX2RpcmVj dGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+ID4+Pj4gLQkgICAgew0KPiA+Pj4+IC0JICAgICAgaWYg KHJlY29yZF9mdWxsX2xpc3QtPm5leHQpDQo+ID4+Pj4gLQkJcmVjb3JkX2Z1bGxfbGlzdCA9IHJl Y29yZF9mdWxsX2xpc3QtPm5leHQ7DQo+ID4+Pj4gLQkgICAgfQ0KPiA+Pj4+ICsJICAgIHJlY29y ZF9mdWxsX25leHRfaW5zbisrOw0KPiA+Pj4+ICAgIAkgIGVsc2UNCj4gPj4+PiAtCSAgICByZWNv cmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+cHJldjsNCj4gPj4+PiArCSAgICByZWNv cmRfZnVsbF9uZXh0X2luc24tLTsNCj4gPj4+Pg0KPiA+Pj4+ICAgIAkgIHRocm93Ow0KPiA+Pj4+ ICAgIAl9DQo+ID4+Pj4gQEAgLTE1NTcsOCArMTQzNiw3IEBAIHJlY29yZF9mdWxsX3JlZ2lzdGVy c19jaGFuZ2UgKHN0cnVjdA0KPiByZWdjYWNoZQ0KPiA+Pj4+ICpyZWdjYWNoZSwgaW50IHJlZ251 bSkNCj4gPj4+PiAgICAgIC8qIENoZWNrIHJlY29yZF9mdWxsX2luc25fbnVtLiAgKi8NCj4gPj4+ PiAgICAgIHJlY29yZF9mdWxsX2NoZWNrX2luc25fbnVtICgpOw0KPiA+Pj4+DQo+ID4+Pj4gLSAg cmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgPSBOVUxMOw0KPiA+Pj4+IC0gIHJlY29yZF9mdWxs X2FyY2hfbGlzdF90YWlsID0gTlVMTDsNCj4gPj4+PiArICByZWNvcmRfZnVsbF9yZXNldF9pbmNv bXBsZXRlICgpOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICBpZiAocmVnbnVtIDwgMCkNCj4gPj4+PiAg ICAgICAgew0KPiA+Pj4+IEBAIC0xNTY4LDcgKzE0NDYsNyBAQCByZWNvcmRfZnVsbF9yZWdpc3Rl cnNfY2hhbmdlIChzdHJ1Y3QNCj4gcmVnY2FjaGUNCj4gPj4+PiAqcmVnY2FjaGUsIGludCByZWdu dW0pDQo+ID4+Pj4gICAgCXsNCj4gPj4+PiAgICAJICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0 X2FkZF9yZWcgKHJlZ2NhY2hlLCBpKSkNCj4gPj4+PiAgICAJICAgIHsNCj4gPj4+PiAtCSAgICAg IHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwpOw0K PiA+Pj4+ICsJICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gPj4+PiAg ICAJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1 dGlvbiBsb2cuIikpOw0KPiA+Pj4+ICAgIAkgICAgfQ0KPiA+Pj4+ICAgIAl9DQo+ID4+Pj4gQEAg LTE1NzcsMTggKzE0NTUsMTEgQEAgcmVjb3JkX2Z1bGxfcmVnaXN0ZXJzX2NoYW5nZSAoc3RydWN0 DQo+ID4+IHJlZ2NhY2hlDQo+ID4+Pj4gKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiA+Pj4+ICAg ICAgICB7DQo+ID4+Pj4gICAgICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVn IChyZWdjYWNoZSwgcmVnbnVtKSkNCj4gPj4+PiAgICAJew0KPiA+Pj4+IC0JICByZWNvcmRfZnVs bF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gPj4+PiArCSAg cmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gPj4+PiAgICAJICBlcnJvciAoXygi UHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7DQo+ID4+ Pj4gICAgCX0NCj4gPj4+PiAgICAgICAgfQ0KPiA+Pj4+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNo X2xpc3RfYWRkX2VuZCAoKSkNCj4gPj4+PiAtICAgIHsNCj4gPj4+PiAtICAgICAgcmVjb3JkX2Z1 bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCk7DQo+ID4+Pj4gLSAg ICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24g bG9nLiIpKTsNCj4gPj4+PiAtICAgIH0NCj4gPj4+PiAtICByZWNvcmRfZnVsbF9saXN0LT5uZXh0 ID0gcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQ7DQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfYXJj aF9saXN0X2hlYWQtPnByZXYgPSByZWNvcmRfZnVsbF9saXN0Ow0KPiA+Pj4+IC0gIHJlY29yZF9m dWxsX2xpc3QgPSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4gPj4+PiArICByZWNvcmRf ZnVsbF9zYXZlX2luc3RydWN0aW9uICgpOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICBpZiAocmVjb3Jk X2Z1bGxfaW5zbl9udW0gPT0gcmVjb3JkX2Z1bGxfaW5zbl9tYXhfbnVtKQ0KPiA+Pj4+ICAgICAg ICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7DQo+ID4+Pj4gQEAgLTE2MDcsNyAr MTQ3OCw3IEBAIHJlY29yZF9mdWxsX3RhcmdldDo6c3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QNCj4g Pj4+PiByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykNCj4gPj4+PiAgICAJew0KPiA+Pj4+ ICAgIAkgIGludCBuOw0KPiA+Pj4+DQo+ID4+Pj4gLQkgIC8qIExldCB1c2VyIGNob29zZSBpZiBo ZSB3YW50cyB0byB3cml0ZSByZWdpc3RlciBvciBub3QuICAqLw0KPiA+Pj4+ICsJICAvKiBMZXQg dXNlciBjaG9vc2UgaWYgdGhleSB3YW50IHRvIHdyaXRlIHJlZ2lzdGVyIG9yIG5vdC4gICovDQo+ ID4+Pj4gICAgCSAgaWYgKHJlZ25vIDwgMCkNCj4gPj4+PiAgICAJICAgIG4gPQ0KPiA+Pj4+ICAg IAkgICAgICBxdWVyeSAoXygiQmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5n IHRoZSAiDQo+ID4+Pj4gQEAgLTE2NDIsNyArMTUxMyw3IEBAIHJlY29yZF9mdWxsX3RhcmdldDo6 c3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QNCj4gPj4+PiByZWdjYWNoZSAqcmVnY2FjaGUsIGludCBy ZWdubykNCj4gPj4+PiAgICAJICAgIH0NCj4gPj4+Pg0KPiA+Pj4+ICAgIAkgIC8qIERlc3Ryb3kg dGhlIHJlY29yZCBmcm9tIGhlcmUgZm9yd2FyZC4gICovDQo+ID4+Pj4gLQkgIHJlY29yZF9mdWxs X2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHJlY29yZF9mdWxsX2xpc3QpOw0KPiA+Pj4+ICsJICBy ZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChyZWNvcmRfZnVsbF9uZXh0X2luc24p Ow0KPiA+Pj4+ICAgIAl9DQo+ID4+Pj4NCj4gPj4+PiAgICAgICAgICByZWNvcmRfZnVsbF9yZWdp c3RlcnNfY2hhbmdlIChyZWdjYWNoZSwgcmVnbm8pOw0KPiA+Pj4+IEBAIC0xNjc1LDM2ICsxNTQ2 LDI0IEBAIHJlY29yZF9mdWxsX3RhcmdldDo6eGZlcl9wYXJ0aWFsIChlbnVtDQo+ID4+Pj4gdGFy Z2V0X29iamVjdCBvYmplY3QsDQo+ID4+Pj4gICAgCSAgICBlcnJvciAoXygiUHJvY2VzcyByZWNv cmQgY2FuY2VsZWQgdGhlIG9wZXJhdGlvbi4iKSk7DQo+ID4+Pj4NCj4gPj4+PiAgICAJICAvKiBE ZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLw0KPiA+Pj4+IC0JICByZWNv cmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChyZWNvcmRfZnVsbF9saXN0KTsNCj4gPj4+ PiArCSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVjb3JkX2Z1bGxfbmV4 dF9pbnNuKTsNCj4gPj4+PiAgICAJfQ0KPiA+Pj4+DQo+ID4+Pj4gICAgICAgICAgLyogQ2hlY2sg cmVjb3JkX2Z1bGxfaW5zbl9udW0gKi8NCj4gPj4+PiAgICAgICAgICByZWNvcmRfZnVsbF9jaGVj a19pbnNuX251bSAoKTsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgICAgIC8qIFJlY29yZCByZWdpc3Rl cnMgY2hhbmdlIHRvIGxpc3QgYXMgYW4gaW5zdHJ1Y3Rpb24uICAqLw0KPiA+Pj4+IC0gICAgICBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7DQo+ID4+Pj4gLSAgICAgIHJlY29yZF9m dWxsX2FyY2hfbGlzdF90YWlsID0gTlVMTDsNCj4gPj4+PiArICAgICAgcmVjb3JkX2Z1bGxfcmVz ZXRfaW5jb21wbGV0ZSAoKTsNCj4gPj4+PiAgICAgICAgICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9s aXN0X2FkZF9tZW0gKG9mZnNldCwgbGVuKSkNCj4gPj4+PiAgICAJew0KPiA+Pj4+IC0JICByZWNv cmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gPj4+ PiArCSAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gPj4+PiAgICAJICBpZiAo cmVjb3JkX2RlYnVnKQ0KPiA+Pj4+ICAgIAkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4g Pj4+PiAgICAJCQkiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgIg0KPiA+Pj4+ICAg IAkJCSJleGVjdXRpb24gbG9nLiIpOw0KPiA+Pj4+ICAgIAkgIHJldHVybiBUQVJHRVRfWEZFUl9F X0lPOw0KPiA+Pj4+ICAgIAl9DQo+ID4+Pj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xp c3RfYWRkX2VuZCAoKSkNCj4gPj4+PiAtCXsNCj4gPj4+PiAtCSAgcmVjb3JkX2Z1bGxfbGlzdF9y ZWxlYXNlIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCk7DQo+ID4+Pj4gLQkgIGlmIChyZWNv cmRfZGVidWcpDQo+ID4+Pj4gLQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4+PiAt CQkJIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkICINCj4gPj4+PiAtCQkJImV4ZWN1 dGlvbiBsb2cuIik7DQo+ID4+Pj4gLQkgIHJldHVybiBUQVJHRVRfWEZFUl9FX0lPOw0KPiA+Pj4+ IC0JfQ0KPiA+Pj4+IC0gICAgICByZWNvcmRfZnVsbF9saXN0LT5uZXh0ID0gcmVjb3JkX2Z1bGxf YXJjaF9saXN0X2hlYWQ7DQo+ID4+Pj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFk LT5wcmV2ID0gcmVjb3JkX2Z1bGxfbGlzdDsNCj4gPj4+PiAtICAgICAgcmVjb3JkX2Z1bGxfbGlz dCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsOw0KPiA+Pj4+ICsgICAgICByZWNvcmRfZnVs bF9zYXZlX2luc3RydWN0aW9uICgpOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICAgICAgaWYgKHJlY29y ZF9mdWxsX2luc25fbnVtID09IHJlY29yZF9mdWxsX2luc25fbWF4X251bSkNCj4gPj4+PiAgICAJ cmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOw0KPiA+Pj4+IEBAIC0xODY2LDggKzE3 MjUsNyBAQCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6Z2V0X2Jvb2ttYXJrDQo+IChjb25zdA0K PiA+PiBjaGFyDQo+ID4+Pj4gKmFyZ3MsIGludCBmcm9tX3R0eSkNCj4gPj4+PiAgICAgIGNoYXIg KnJldCA9IE5VTEw7DQo+ID4+Pj4NCj4gPj4+PiAgICAgIC8qIFJldHVybiBzdHJpbmdpZmllZCBm b3JtIG9mIGluc3RydWN0aW9uIGNvdW50LiAgKi8NCj4gPj4+PiAtICBpZiAocmVjb3JkX2Z1bGxf bGlzdCAmJiByZWNvcmRfZnVsbF9saXN0LT50eXBlID09IHJlY29yZF9mdWxsX2VuZCkNCj4gPj4+ PiAtICAgIHJldCA9IHhzdHJkdXAgKHB1bG9uZ2VzdCAocmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQu aW5zbl9udW0pKTsNCj4gPj4+PiArICByZXQgPSB4c3RyZHVwIChwdWxvbmdlc3QNCj4gPj4gKHJl Y29yZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9pbnNuXS5pbnNuX251bSkpOw0KPiA+Pj4g SSB0aGluayB3ZSBjYW4gZ2V0IGhlcmUgd2l0aCBhbiBlbXB0eSByZWNvcmRfZnVsbF9saXN0IC0g aW4gY2FzZSB3ZSBhcmUgaW4NCj4gPj4gcmVjb3JkaW5nIG1vZGUsDQo+ID4+PiBubyBpbnN0cnVj dGlvbnMgaGF2ZSBiZWVuIGxvZ2dlZCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQ6DQo+ID4+ Pg0KPiA+Pj4gfn5+DQo+ID4+PiAoZ2RiKSBpbmZvIHJlY29yZA0KPiA+Pj4gQWN0aXZlIHJlY29y ZCB0YXJnZXQ6IHJlY29yZC1mdWxsDQo+ID4+PiBSZWNvcmQgbW9kZToNCj4gPj4+IE5vIGluc3Ry dWN0aW9ucyBoYXZlIGJlZW4gbG9nZ2VkLg0KPiA+Pj4gTWF4IGxvZ2dlZCBpbnN0cnVjdGlvbnMg aXMgMjAwMDAwLg0KPiA+Pj4gKGdkYikgYm9va21hcmsNCj4gPj4+DQo+ID4+PiBUaHJlYWQgMSAi Z2RiLXVwIiBoaXQgQnJlYWtwb2ludCAxLA0KPiByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6Z2V0 X2Jvb2ttYXJrDQo+ID4+ICh0aGlzPTB4NTU1NTU4MzkyOTAwIDxyZWNvcmRfZnVsbF9vcHM+LCBh cmdzPTB4MCwgZnJvbV90dHk9MSkgYXQNCj4gPj4gL3RtcC9yZWNvcmQtZnVsbC5jOjE3NzQNCj4g Pj4+IDE3NzQgICAgICBjaGFyICpyZXQgPSBOVUxMOw0KPiA+Pj4gKGdkYikgcCByZWNvcmRfZnVs bF9uZXh0X2luc24NCj4gPj4+ICQxID0gMA0KPiA+Pj4gKGdkYikgcCByZWNvcmRfZnVsbF9saXN0 LmVtcHR5ICgpDQo+ID4+PiAkMiA9IHRydWUNCj4gPj4+IH5+fg0KPiA+IEkgd29uZGVyLCBkbyB3 ZSBzb21ld2hlcmUgaGF2ZSBhIHRlc3QgZm9yIGJvb2ttYXJrcz8NCj4gPiBJIGFsc28gZmluZCBh IHNwZWNpZmljIGRlc2NyaXB0aW9uIGZvciB0aGlzIGluIHRoZSBtYW51YWwuLi4gd2hhdCdzIHRo ZQ0KPiBkaWZmZXJlbmNlIHRvIGNoZWNrcG9pbnRzPw0KPiANCj4gQ2hlY2twb2ludHMgZm9yayB0 aGUgaW5mZXJpb3IgYW5kIHN0b3AgdGhlIGZvcmsgaW1tZWRpYXRlbHksIGFsbG93aW5nDQo+IHlv dSB0byBnbyBiYWNrIHRvIHRoYXQgb25lIHBvaW50IGluIHRpbWUsIGJ1dCBub3QgZXhlY3V0aW5n IGJhY2t3YXJkcyBvcg0KPiBhbnl0aGluZywganVzdCBjaGFuZ2luZyBmb3JrcyBhbmQgbGV0dGlu ZyB5b3Ugc2VlIHdoYXQgdGhpbmdzIHdlcmUgbGlrZQ0KPiBiYWNrIHRoZW4gKHRoYXQncyB3aHkg dGhleSB3b24ndCB3b3JrIHdpdGggbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMpLg0KPiBlbnRpcmVs eSB1bnJlbGF0ZWQgdG8gcmV2ZXJzZSBkZWJ1Z2dpbmcNCj4gDQo+IEJvb2ttYXJrcyBsZXQgeW91 IG1hcmsgb25lIGluc3RydWN0aW9uIGluIHRoZSBoaXN0b3J5IGFuZCBlYXNpbHkgZ28gYmFjaw0K PiB0byBpdCB1c2luZyB0aGUgcmV2ZXJzZSBtZWNoYW5pc20uLi4gYXQgbGVhc3QgdGhhdCdzIHdo YXQgSSd2ZSBiZWVuIGFibGUNCj4gdG8gZ2V0IGZyb20gdGhlIGNvZGUsIHRoaXMgcHJlZGF0ZXMg bWUgYW5kIEkgaGF2ZSBubyBpZGVhIGhvdyBpdCBpcw0KPiBhY3R1YWxseSB1c2VkLi4uLg0KPiAN Cj4gSSBxdWlja2x5IGdyZXAnZCBmb3IgYm9va21hcmsgdGVzdHMgYW5kIGNvdWxkbid0IGZpbmQg YW55LiBXZSBzaG91bGQNCj4gcHJvYmFibHkgYWRkIHRoZW0gYXQgc29tZSBwb2ludCwgaWYgYW55 b25lIGV2ZW4gdXNlcyB0aGF0IGZlYXR1cmUuLi4uLi4NCg0KT3IgYXQgbGVhc3QgYWRkaW5nIHNv bWUgZG9jdW1lbnRhdGlvbiwgbWF5YmUgbW9yZSBwZW9wbGUgd291bGQgdXNlIGl0IHRoZW4gLi4u IPCfmIkNCg0KT3RoZXJ3aXNlLCBpZiBub2JvZHkgdXNlcyBpdCwgd2UgY291bGQgZGVwcmVjYXRl IGFuZCByZW1vdmUgaXQgYXQgc29tZSBwb2ludD8NCkl0IGp1c3QgYWRkcyBldmVuIG1vcmUgY29k ZSB0byBtYWludGFpbi4uLg0KDQo+ID4NCj4gPiBJIGFtIGEgYml0IGNvbmZ1c2VkIGFib3V0IHRo ZSBib29rbWFyayBmZWF0dXJlIChvZiBjb3Vyc2UsIHRoaXMgaXMgbm90aGluZw0KPiB0byBmaXgg Zm9yIHRoaXMgc2VyaWVzLi4uKS4NCj4gPg0KPiA+Pj4+ICAgICAgaWYgKHJlY29yZF9kZWJ1ZykN Cj4gPj4+PiAgICAgICAgew0KPiA+Pj4+IEBAIC0xOTIzLDMwICsxNzgxLDIyIEBAIHJlY29yZF9m dWxsX2Jhc2VfdGFyZ2V0OjpyZWNvcmRfbWV0aG9kDQo+ID4+IChwdGlkX3QNCj4gPj4+PiBwdGlk KQ0KPiA+Pj4+ICAgIHZvaWQNCj4gPj4+PiAgICByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6aW5m b19yZWNvcmQgKCkNCj4gPj4+PiAgICB7DQo+ID4+Pj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2Vu dHJ5ICpwOw0KPiA+Pj4+IC0NCj4gPj4+PiAgICAgIGlmIChSRUNPUkRfRlVMTF9JU19SRVBMQVkp DQo+ID4+Pj4gICAgICAgIGdkYl9wcmludGYgKF8oIlJlcGxheSBtb2RlOlxuIikpOw0KPiA+Pj4+ ICAgICAgZWxzZQ0KPiA+Pj4+ICAgICAgICBnZGJfcHJpbnRmIChfKCJSZWNvcmQgbW9kZTpcbiIp KTsNCj4gPj4+Pg0KPiA+Pj4+IC0gIC8qIEZpbmQgZW50cnkgZm9yIGZpcnN0IGFjdHVhbCBpbnN0 cnVjdGlvbiBpbiB0aGUgbG9nLiAgKi8NCj4gPj4+PiAtICBmb3IgKHAgPSByZWNvcmRfZnVsbF9m aXJzdC5uZXh0Ow0KPiA+Pj4+IC0gICAgICAgcCAhPSBOVUxMICYmIHAtPnR5cGUgIT0gcmVjb3Jk X2Z1bGxfZW5kOw0KPiA+Pj4+IC0gICAgICAgcCA9IHAtPm5leHQpDQo+ID4+Pj4gLSAgICA7DQo+ ID4+Pj4gLQ0KPiA+Pj4+ICAgICAgLyogRG8gd2UgaGF2ZSBhIGxvZyBhdCBhbGw/ICAqLw0KPiA+ Pj4+IC0gIGlmIChwICE9IE5VTEwgJiYgcC0+dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQpDQo+ID4+ Pj4gKyAgaWYgKCFyZWNvcmRfZnVsbF9saXN0LmVtcHR5ICgpKQ0KPiA+Pj4+ICAgICAgICB7DQo+ ID4+Pj4gICAgICAgICAgLyogRGlzcGxheSBpbnN0cnVjdGlvbiBudW1iZXIgZm9yIGZpcnN0IGlu c3RydWN0aW9uIGluIHRoZSBsb2cuICAqLw0KPiA+Pj4+IC0gICAgICBnZGJfcHJpbnRmIChfKCJM b3dlc3QgcmVjb3JkZWQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVzLlxuIiksDQo+ID4+Pj4gLQkJ ICBwdWxvbmdlc3QgKHAtPnUuZW5kLmluc25fbnVtKSk7DQo+ID4+Pj4gKyAgICAgIGdkYl9wcmlu dGYgKF8oIkxvd2VzdCByZWNvcmRlZCBpbnN0cnVjdGlvbiBudW1iZXIgaXMgJXUuXG4iKSwNCj4g Pj4+PiArCQkgIHJlY29yZF9mdWxsX2xpc3RbMF0uaW5zbl9udW0pOw0KPiA+Pj4+DQo+ID4+Pj4g ICAgICAgICAgLyogSWYgaW4gcmVwbGF5IG1vZGUsIGRpc3BsYXkgd2hlcmUgd2UgYXJlIGluIHRo ZSBsb2cuICAqLw0KPiA+Pj4+ICAgICAgICAgIGlmIChSRUNPUkRfRlVMTF9JU19SRVBMQVkpDQo+ ID4+Pj4gLQlnZGJfcHJpbnRmIChfKCJDdXJyZW50IGluc3RydWN0aW9uIG51bWJlciBpcyAlcy5c biIpLA0KPiA+Pj4+IC0JCSAgICBwdWxvbmdlc3QgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5kLmlu c25fbnVtKSk7DQo+ID4+Pj4gKwlnZGJfcHJpbnRmIChfKCJDdXJyZW50IGluc3RydWN0aW9uIG51 bWJlciBpcyAldS5cbiIpLA0KPiA+Pj4+ICsJCSAgICByZWNvcmRfZnVsbF9saXN0W3JlY29yZF9m dWxsX25leHRfaW5zbl0uaW5zbl9udW0pOw0KPiA+Pj4+DQo+ID4+Pj4gICAgICAgICAgLyogRGlz cGxheSBpbnN0cnVjdGlvbiBudW1iZXIgZm9yIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGxvZy4g ICovDQo+ID4+Pj4gICAgICAgICAgZ2RiX3ByaW50ZiAoXygiSGlnaGVzdCByZWNvcmRlZCBpbnN0 cnVjdGlvbiBudW1iZXIgaXMgJXMuXG4iKSwNCj4gPj4+PiBAQCAtMTk3NSw3ICsxODI1LDcgQEAN Cj4gPj4gcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnN1cHBvcnRzX2RlbGV0ZV9yZWNvcmQgKCkN Cj4gPj4+PiAgICB2b2lkDQo+ID4+Pj4gICAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmRlbGV0 ZV9yZWNvcmQgKCkNCj4gPj4+PiAgICB7DQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxl YXNlX2ZvbGxvd2luZyAocmVjb3JkX2Z1bGxfbGlzdCk7DQo+ID4+Pj4gKyAgcmVjb3JkX2Z1bGxf cmVzZXRfaGlzdG9yeSAoKTsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAvKiBUaGUg InJlY29yZF9pc19yZXBsYXlpbmciIHRhcmdldCBtZXRob2QuICAqLw0KPiA+Pj4+IEBAIC0yMDAx LDIzICsxODUxLDIzIEBADQo+IHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpyZWNvcmRfd2lsbF9y ZXBsYXkNCj4gPj4+PiAocHRpZF90IHB0aWQsIGludCBkaXIpDQo+ID4+Pj4gICAgLyogR28gdG8g YSBzcGVjaWZpYyBlbnRyeS4gICovDQo+ID4+Pj4NCj4gPj4+PiAgICBzdGF0aWMgdm9pZA0KPiA+ Pj4+IC1yZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnAp DQo+ID4+Pj4gK3JlY29yZF9mdWxsX2dvdG9fZW50cnkgKHNpemVfdCB0YXJnZXRfaW5zbikNCj4g Pj4+PiAgICB7DQo+ID4+Pj4gLSAgaWYgKHAgPT0gTlVMTCkNCj4gPj4+PiArICBpZiAodGFyZ2V0 X2luc24gPj0gcmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpKQ0KPiA+Pj4+ICAgICAgICBlcnJvciAo XygiVGFyZ2V0IGluc24gbm90IGZvdW5kLiIpKTsNCj4gPj4+PiAtICBlbHNlIGlmIChwID09IHJl Y29yZF9mdWxsX2xpc3QpDQo+ID4+Pj4gKyAgZWxzZSBpZiAodGFyZ2V0X2luc24gPT0gcmVjb3Jk X2Z1bGxfbmV4dF9pbnNuKQ0KPiA+Pj4+ICAgICAgICBlcnJvciAoXygiQWxyZWFkeSBhdCB0YXJn ZXQgaW5zbi4iKSk7DQo+ID4+Pj4gLSAgZWxzZSBpZiAocC0+dS5lbmQuaW5zbl9udW0gPiByZWNv cmRfZnVsbF9saXN0LT51LmVuZC5pbnNuX251bSkNCj4gPj4+PiArICBlbHNlIGlmICh0YXJnZXRf aW5zbiA+IHJlY29yZF9mdWxsX25leHRfaW5zbikNCj4gPj4+PiAgICAgICAgew0KPiA+Pj4+ICAg ICAgICAgIGdkYl9wcmludGYgKF8oIkdvIGZvcndhcmQgdG8gaW5zbiBudW1iZXIgJXNcbiIpLA0K PiA+Pj4+IC0JCSAgcHVsb25nZXN0IChwLT51LmVuZC5pbnNuX251bSkpOw0KPiA+Pj4+IC0gICAg ICByZWNvcmRfZnVsbF9nb3RvX2luc24gKHAsIEVYRUNfRk9SV0FSRCk7DQo+ID4+Pj4gKwkJICBw dWxvbmdlc3QgKHJlY29yZF9mdWxsX2xpc3RbdGFyZ2V0X2luc25dLmluc25fbnVtKSk7DQo+ID4+ Pj4gKyAgICAgIHJlY29yZF9mdWxsX2dvdG9faW5zbiAodGFyZ2V0X2luc24sIEVYRUNfRk9SV0FS RCk7DQo+ID4+Pj4gICAgICAgIH0NCj4gPj4+PiAgICAgIGVsc2UNCj4gPj4+PiAgICAgICAgew0K PiA+Pj4+ICAgICAgICAgIGdkYl9wcmludGYgKF8oIkdvIGJhY2t3YXJkIHRvIGluc24gbnVtYmVy ICVzXG4iKSwNCj4gPj4+PiAtCQkgIHB1bG9uZ2VzdCAocC0+dS5lbmQuaW5zbl9udW0pKTsNCj4g Pj4+PiAtICAgICAgcmVjb3JkX2Z1bGxfZ290b19pbnNuIChwLCBFWEVDX1JFVkVSU0UpOw0KPiA+ Pj4+ICsJCSAgcHVsb25nZXN0ICh0YXJnZXRfaW5zbikpOw0KPiA+Pj4+ICsgICAgICByZWNvcmRf ZnVsbF9nb3RvX2luc24gKHRhcmdldF9pbnNuLCBFWEVDX1JFVkVSU0UpOw0KPiA+Pj4+ICAgICAg ICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAgIHJlZ2lzdGVyc19jaGFuZ2VkICgpOw0KPiA+Pj4+IEBA IC0yMDMzLDEzICsxODgzLDcgQEAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAoc3RydWN0DQo+ID4+ IHJlY29yZF9mdWxsX2VudHJ5DQo+ID4+Pj4gKnApDQo+ID4+Pj4gICAgdm9pZA0KPiA+Pj4+ICAg IHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZF9iZWdpbiAoKQ0KPiA+Pj4+ICAg IHsNCj4gPj4+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnAgPSBOVUxMOw0KPiA+Pj4+ IC0NCj4gPj4+PiAtICBmb3IgKHAgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7IHAgIT0gTlVMTDsgcCA9 IHAtPm5leHQpDQo+ID4+Pj4gLSAgICBpZiAocC0+dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQpDQo+ ID4+Pj4gLSAgICAgIGJyZWFrOw0KPiA+Pj4+IC0NCj4gPj4+PiAtICByZWNvcmRfZnVsbF9nb3Rv X2VudHJ5IChwKTsNCj4gPj4+PiArICByZWNvcmRfZnVsbF9nb3RvX2VudHJ5ICgwKTsNCj4gPj4+ PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAvKiBUaGUgImdvdG9fcmVjb3JkX2VuZCIgdGFyZ2V0 IG1ldGhvZC4gICovDQo+ID4+Pj4gQEAgLTIwNDcsMTUgKzE4OTEsNyBAQA0KPiByZWNvcmRfZnVs bF9iYXNlX3RhcmdldDo6Z290b19yZWNvcmRfYmVnaW4gKCkNCj4gPj4+PiAgICB2b2lkDQo+ID4+ Pj4gICAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmdvdG9fcmVjb3JkX2VuZCAoKQ0KPiA+Pj4+ ICAgIHsNCj4gPj4+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnAgPSBOVUxMOw0KPiA+ Pj4+IC0NCj4gPj4+PiAtICBmb3IgKHAgPSByZWNvcmRfZnVsbF9saXN0OyBwLT5uZXh0ICE9IE5V TEw7IHAgPSBwLT5uZXh0KQ0KPiA+Pj4+IC0gICAgOw0KPiA+Pj4+IC0gIGZvciAoOyBwIT0gTlVM TDsgcCA9IHAtPnByZXYpDQo+ID4+Pj4gLSAgICBpZiAocC0+dHlwZSA9PSByZWNvcmRfZnVsbF9l bmQpDQo+ID4+Pj4gLSAgICAgIGJyZWFrOw0KPiA+Pj4+IC0NCj4gPj4+PiAtICByZWNvcmRfZnVs bF9nb3RvX2VudHJ5IChwKTsNCj4gPj4+PiArICByZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChyZWNv cmRfZnVsbF9saXN0LnNpemUgKCkgLTEpOw0KPiA+Pj4gTml0OiB3aGl0ZXNwYWNlIGJlZm9yZSAx ID0+ICJyZWNvcmRfZnVsbF9saXN0LnNpemUgKCkgLSAxIg0KPiA+Pj4NCj4gPj4+IEFuZCBpbiBj YXNlIHRoZSByZWNvcmRfZnVsbF9saXN0IGlzIGVtcHR5LCB3b24ndCB3ZSBjYWxsDQo+ID4+PiBy ZWNvcmRfZnVsbF9nb3RvX2VudHJ5IHdpdGggYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGFyZ2V0X2lu c24gPw0KPiA+Pj4NCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiAgICAvKiBUaGUgImdvdG9f cmVjb3JkIiB0YXJnZXQgbWV0aG9kLiAgKi8NCj4gPj4+PiBAQCAtMjA2MywxMyArMTg5OSw3IEBA IHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZF9lbmQNCj4gKCkNCj4gPj4+PiAg ICB2b2lkDQo+ID4+Pj4gICAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmdvdG9fcmVjb3JkIChV TE9OR0VTVCB0YXJnZXRfaW5zbikNCj4gPj4+PiAgICB7DQo+ID4+Pj4gLSAgc3RydWN0IHJlY29y ZF9mdWxsX2VudHJ5ICpwID0gTlVMTDsNCj4gPj4+PiAtDQo+ID4+Pj4gLSAgZm9yIChwID0gJnJl Y29yZF9mdWxsX2ZpcnN0OyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KQ0KPiA+Pj4+IC0gICAgaWYg KHAtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kICYmIHAtPnUuZW5kLmluc25fbnVtID09IHRhcmdl dF9pbnNuKQ0KPiA+Pj4+IC0gICAgICBicmVhazsNCj4gPj4+PiAtDQo+ID4+Pj4gLSAgcmVjb3Jk X2Z1bGxfZ290b19lbnRyeSAocCk7DQo+ID4+Pj4gKyAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAo dGFyZ2V0X2luc24pOw0KPiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+Pj4+ICAgIC8qIFRoZSAicmVj b3JkX3N0b3BfcmVwbGF5aW5nIiB0YXJnZXQgbWV0aG9kLiAgKi8NCj4gPj4+PiBAQCAtMjMzOSwx OSArMjE2OSw5NiBAQCBuZXRvcmRlcjMyICh1aW50MzJfdCBpbnB1dCkNCj4gPj4+PiAgICAgIHJl dHVybiByZXQ7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gK3N0YXRpYyB2b2lkDQo+ID4+ Pj4gK3JlY29yZF9mdWxsX3JlYWRfZW50cnlfZnJvbV9iZmQgKGJmZCAqY2JmZCwgYXNlY3Rpb24g Km9zZWMsIGludA0KPiA+PiAqYmZkX29mZnNldCkNCj4gPj4+PiArew0KPiA+Pj4+ICsgIHVpbnQ4 X3QgcmVjdHlwZTsNCj4gPj4+PiArICB1aW50MzJfdCByZWdudW0sIGxlbjsNCj4gPj4+PiArICB1 aW50NjRfdCBhZGRyOw0KPiA+Pj4+ICsgIHJlZ2NhY2hlICpjYWNoZSA9IGdldF90aHJlYWRfcmVn Y2FjaGUgKGluZmVyaW9yX3RocmVhZCAoKSk7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgIGJmZGNvcmVf cmVhZCAoY2JmZCwgb3NlYywgJnJlY3R5cGUsIHNpemVvZiAocmVjdHlwZSksIGJmZF9vZmZzZXQp Ow0KPiA+Pj4+ICsgIHN3aXRjaCAocmVjdHlwZSkNCj4gPj4+PiArICAgIHsNCj4gPj4+PiArICAg IGNhc2UgcmVjb3JkX2Z1bGxfcmVnOiAvKiByZWcgKi8NCj4gPj4+PiArICAgICAgew0KPiA+Pj4+ ICsJLyogR2V0IHJlZ2lzdGVyIG51bWJlciB0byByZWdudW0uICAqLw0KPiA+Pj4+ICsJYmZkY29y ZV9yZWFkIChjYmZkLCBvc2VjLCAmcmVnbnVtLCBzaXplb2YgKHJlZ251bSksIGJmZF9vZmZzZXQp Ow0KPiA+Pj4+ICsJcmVnbnVtID0gbmV0b3JkZXIzMiAocmVnbnVtKTsNCj4gPj4+PiArDQo+ID4+ Pj4gKwlyZWNvcmRfZnVsbF9lbnRyeSByZWM7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsJcmVjID0gcmVj b3JkX2Z1bGxfcmVnX2luaXQgKGNhY2hlLCByZWdudW0pOw0KPiA+Pj4+ICsNCj4gPj4+PiArCS8q IEdldCB2YWwuICAqLw0KPiA+Pj4+ICsJYmZkY29yZV9yZWFkIChjYmZkLCBvc2VjLCByZWNvcmRf ZnVsbF9nZXRfbG9jICgmcmVjKSwNCj4gPj4+PiArCQkgICAgICByZWMudS5yZWcubGVuLCBiZmRf b2Zmc2V0KTsNCj4gPj4+PiArDQo+ID4+Pj4gKwlpZiAocmVjb3JkX2RlYnVnKQ0KPiA+Pj4+ICsJ ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+Pj4+ICsJCSAgICAgICIgIFJlYWRpbmcgcmVn aXN0ZXIgJWQgKDEgIg0KPiA+Pj4+ICsJCSAgICAgICJwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxu IiwNCj4gPj4+PiArCQkgICAgICByZWMudS5yZWcubnVtLA0KPiA+Pj4+ICsJCSAgICAgICh1bnNp Z25lZCBsb25nKSBzaXplb2YgKHJlZ251bSksDQo+ID4+Pj4gKwkJICAgICAgcmVjLnUucmVnLmxl bik7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsJcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsN Cj4gPj4+PiArCWJyZWFrOw0KPiA+Pj4+ICsgICAgICB9DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAg Y2FzZSByZWNvcmRfZnVsbF9tZW06IC8qIG1lbSAqLw0KPiA+Pj4+ICsgICAgICB7DQo+ID4+Pj4g KwkvKiBHZXQgbGVuLiAgKi8NCj4gPj4+PiArCWJmZGNvcmVfcmVhZCAoY2JmZCwgb3NlYywgJmxl biwgc2l6ZW9mIChsZW4pLCBiZmRfb2Zmc2V0KTsNCj4gPj4+PiArCWxlbiA9IG5ldG9yZGVyMzIg KGxlbik7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsJLyogR2V0IGFkZHIuICAqLw0KPiA+Pj4+ICsJYmZk Y29yZV9yZWFkIChjYmZkLCBvc2VjLCAmYWRkciwgc2l6ZW9mIChhZGRyKSwNCj4gPj4+PiArCQkg ICAgICBiZmRfb2Zmc2V0KTsNCj4gPj4+PiArCWFkZHIgPSBuZXRvcmRlcjY0IChhZGRyKTsNCj4g Pj4+PiArDQo+ID4+Pj4gKwlyZWNvcmRfZnVsbF9lbnRyeSByZWM7DQo+ID4+Pj4gKwlyZWMgPSBy ZWNvcmRfZnVsbF9tZW1faW5pdCAoYWRkciwgbGVuKTsNCj4gPj4+PiArDQo+ID4+Pj4gKwkvKiBH ZXQgdmFsLiAgKi8NCj4gPj4+PiArCWJmZGNvcmVfcmVhZCAoY2JmZCwgb3NlYywgcmVjb3JkX2Z1 bGxfZ2V0X2xvYyAoJnJlYyksIGxlbiwNCj4gPj4+PiArCQkgICAgICBiZmRfb2Zmc2V0KTsNCj4g Pj4+PiArDQo+ID4+Pj4gKwlpZiAocmVjb3JkX2RlYnVnKQ0KPiA+Pj4+ICsJICBnZGJfcHJpbnRm IChnZGJfc3RkbG9nLA0KPiA+Pj4+ICsJCSAgICAgICIgIFJlYWRpbmcgbWVtb3J5ICVzICgxIHBs dXMgIg0KPiA+Pj4+ICsJCSAgICAgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIsDQo+ ID4+Pj4gKwkJICAgICAgcGFkZHJlc3MgKGdldF9jdXJyZW50X2FyY2ggKCksDQo+ID4+Pj4gKwkJ CQlyZWMudS5tZW0uYWRkciksDQo+ID4+Pj4gKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVv ZiAoYWRkciksDQo+ID4+Pj4gKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAobGVuKSwN Cj4gPj4+PiArCQkgICAgICBsZW4pOw0KPiA+Pj4+ICsNCj4gPj4+PiArCXJlY29yZF9mdWxsX2Fy Y2hfbGlzdF9hZGQgKHJlYyk7DQo+ID4+Pj4gKwlicmVhazsNCj4gPj4+PiArICAgICAgfQ0KPiA+ Pj4+ICsNCj4gPj4+PiArICAgIGRlZmF1bHQ6DQo+ID4+Pj4gKyAgICAgIGVycm9yIChfKCJCYWQg ZW50cnkgdHlwZSAlZCwgb2Zmc2V0ICVkIG9mICVsdSBpbiBjb3JlIGZpbGUgJXBzLiIpLA0KPiA+ Pj4+ICsJICAgICByZWN0eXBlLCAqYmZkX29mZnNldCwgYmZkX3NlY3Rpb25fc2l6ZSAob3NlYyks DQo+ID4+Pj4gKwkgICAgIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwN Cj4gPj4+PiArCQkJICAgIGJmZF9nZXRfZmlsZW5hbWUgKGNiZmQpKSk7DQo+ID4+Pj4gKyAgICAg IGJyZWFrOw0KPiA+Pj4+ICsgICAgfQ0KPiA+Pj4+ICt9DQo+ID4+Pj4gKw0KPiA+Pj4+ICAgIC8q IFJlc3RvcmUgdGhlIGV4ZWN1dGlvbiBsb2cgZnJvbSBjb3JlIGZpbGUgQ0JGRC4gICovDQo+ID4+ Pj4NCj4gPj4+PiAgICBzdGF0aWMgdm9pZA0KPiA+Pj4+ICAgIHJlY29yZF9mdWxsX3Jlc3RvcmUg KHN0cnVjdCBiZmQgJmNiZmQpDQo+ID4+Pj4gICAgew0KPiA+Pj4+ICAgICAgdWludDMyX3QgbWFn aWM7DQo+ID4+Pj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+ID4+Pj4gICAg ICBhc2VjdGlvbiAqb3NlYzsNCj4gPj4+PiAgICAgIHVpbnQzMl90IG9zZWNfc2l6ZTsNCj4gPj4+ PiAgICAgIGludCBiZmRfb2Zmc2V0ID0gMDsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgLyogInJlY29y ZF9mdWxsX3Jlc3RvcmUiIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHJlY29yZCBsaXN0IGlzIGVt cHR5Lg0KPiAqLw0KPiA+Pj4+IC0gIGdkYl9hc3NlcnQgKHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQg PT0gTlVMTCk7DQo+ID4+Pj4gKyAgZ2RiX2Fzc2VydCAocmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAo KSk7DQo+ID4+Pj4NCj4gPj4+PiAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ID4+Pj4gICAgICAg IGdkYl9wcmludGYgKGdkYl9zdGRsb2csICJSZXN0b3JpbmcgcmVjb3JkaW5nIGZyb20gY29yZSBm aWxlLlxuIik7DQo+ID4+Pj4gQEAgLTIzNzksMTI0ICsyMjg2LDQ3IEBAIHJlY29yZF9mdWxsX3Jl c3RvcmUgKHN0cnVjdCBiZmQgJmNiZmQpDQo+ID4+Pj4gICAgCQkiUkVDT1JEX0ZVTExfRklMRV9N QUdJQyAoMHglcylcbiIsDQo+ID4+Pj4gICAgCQlwaGV4X256IChuZXRvcmRlcjMyIChtYWdpYyks IDQpKTsNCj4gPj4+Pg0KPiA+Pj4+IC0gIC8qIFJlc3RvcmUgdGhlIGVudHJpZXMgaW4gcmVjZmQg aW50byByZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCBhbmQNCj4gPj4+PiAtICAgICByZWNvcmRf ZnVsbF9hcmNoX2xpc3RfdGFpbC4gICovDQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0 X2hlYWQgPSBOVUxMOw0KPiA+Pj4+IC0gIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsID0gTlVM TDsNCj4gPj4+PiAgICAgIHJlY29yZF9mdWxsX2luc25fbnVtID0gMDsNCj4gPj4+Pg0KPiA+Pj4+ ICAgICAgdHJ5DQo+ID4+Pj4gICAgICAgIHsNCj4gPj4+PiAtICAgICAgcmVnY2FjaGUgKnJlZ2Nh Y2hlID0gZ2V0X3RocmVhZF9yZWdjYWNoZSAoaW5mZXJpb3JfdGhyZWFkICgpKTsNCj4gPj4+PiAt DQo+ID4+Pj4gLSAgICAgIHdoaWxlICgxKQ0KPiA+Pj4+ICsgICAgICB3aGlsZSAoYmZkX29mZnNl dCA8IG9zZWNfc2l6ZSkNCj4gPj4+PiAgICAJew0KPiA+Pj4+IC0JICB1aW50OF90IHJlY3R5cGU7 DQo+ID4+Pj4gLQkgIHVpbnQzMl90IHJlZ251bSwgbGVuLCBzaWduYWwsIGNvdW50Ow0KPiA+Pj4+ IC0JICB1aW50NjRfdCBhZGRyOw0KPiA+Pj4+IC0NCj4gPj4+PiAtCSAgLyogV2UgYXJlIGZpbmlz aGVkIHdoZW4gb2Zmc2V0IHJlYWNoZXMgb3NlY19zaXplLiAgKi8NCj4gPj4+PiAtCSAgaWYgKGJm ZF9vZmZzZXQgPj0gb3NlY19zaXplKQ0KPiA+Pj4+IC0JICAgIGJyZWFrOw0KPiA+Pj4+IC0JICBi ZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmcmVjdHlwZSwgc2l6ZW9mIChyZWN0eXBlKSwgJmJm ZF9vZmZzZXQpOw0KPiA+Pj4+IC0NCj4gPj4+PiAtCSAgc3dpdGNoIChyZWN0eXBlKQ0KPiA+Pj4+ ICsJICByZWNvcmRfZnVsbF9yZXNldF9pbmNvbXBsZXRlICgpOw0KPiA+Pj4+ICsJICB1aW50MzJf dCBlZmZfY291bnQgPSAwOw0KPiA+Pj4+ICsJICB1aW50OF90IHNpZ3ZhbDsNCj4gPj4+PiArCSAg dWludDMyX3QgaW5zbl9udW07DQo+ID4+Pj4gKw0KPiA+Pj4+ICsJICAvKiBGaXJzdCByZWFkIHRo ZSBnZW5lcmljIGluZm9ybWF0aW9uIGZvciBhbiBpbnN0cnVjdGlvbi4gICovDQo+ID4+Pj4gKwkg IGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZzaWd2YWwsIHNpemVvZiAodWludDhfdCksICZi ZmRfb2Zmc2V0KTsNCj4gPj4+PiArCSAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmVmZl9j b3VudCwgc2l6ZW9mICh1aW50MzJfdCksDQo+ID4+Pj4gKwkJCSZiZmRfb2Zmc2V0KTsNCj4gPj4+ PiArCSAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmluc25fbnVtLCBzaXplb2YgKHVpbnQz Ml90KSwNCj4gPj4+PiArCQkJJmJmZF9vZmZzZXQpOw0KPiA+Pj4+ICsNCj4gPj4+PiArCSAgcmVj b3JkX2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5pbnNuX251bSA9IG5ldG9yZGVyMzINCj4g Pj4+PiAoaW5zbl9udW0pOw0KPiA+Pj4+ICsJICBpZiAoc2lndmFsICE9IEdEQl9TSUdOQUxfMCkN Cj4gPj4+PiArCSAgICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLnNpZ3ZhbCA9 IChnZGJfc2lnbmFsKSBzaWd2YWw7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsJICBlZmZfY291bnQgPSBu ZXRvcmRlcjMyIChlZmZfY291bnQpOw0KPiA+Pj4+ICsNCj4gPj4+PiArCSAgLyogVGhpcyBkZWFs cyB3aXRoIGFsbCB0aGUgc2lkZSBlZmZlY3RzLiAgKi8NCj4gPj4+PiArCSB3aGlsZSAoZWZmX2Nv dW50ID4gMCkNCj4gPj4+PiAgICAJICAgIHsNCj4gPj4+IFRoZXJlIGlzIG9uZSBzcGFjZSB0b28g bXVjaCBpbmRlbnQuDQo+ID4+Pg0KPiA+Pj4+IC0JICAgIGNhc2UgcmVjb3JkX2Z1bGxfcmVnOiAv KiByZWcgKi8NCj4gPj4+PiAtCSAgICAgIC8qIEdldCByZWdpc3RlciBudW1iZXIgdG8gcmVnbnVt LiAgKi8NCj4gPj4+PiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZyZWdudW0s IHNpemVvZiAocmVnbnVtKSwNCj4gPj4+PiAtCQkJICAgICZiZmRfb2Zmc2V0KTsNCj4gPj4+PiAt CSAgICAgIHJlZ251bSA9IG5ldG9yZGVyMzIgKHJlZ251bSk7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0J ICAgICAgcmVjID0gcmVjb3JkX2Z1bGxfcmVnX2FsbG9jIChyZWdjYWNoZSwgcmVnbnVtKTsNCj4g Pj4+PiAtDQo+ID4+Pj4gLQkgICAgICAvKiBHZXQgdmFsLiAgKi8NCj4gPj4+PiAtCSAgICAgIGJm ZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsIHJlY29yZF9mdWxsX2dldF9sb2MgKHJlYyksDQo+ID4+ Pj4gLQkJCSAgICByZWMtPnUucmVnLmxlbiwgJmJmZF9vZmZzZXQpOw0KPiA+Pj4+IC0NCj4gPj4+ PiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ID4+Pj4gLQkJZ2RiX3ByaW50ZiAoZ2RiX3N0 ZGxvZywNCj4gPj4+PiAtCQkJICAgICIgIFJlYWRpbmcgcmVnaXN0ZXIgJWQgKDEgIg0KPiA+Pj4+ IC0JCQkgICAgInBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiA+Pj4+IC0JCQkgICAgcmVj LT51LnJlZy5udW0sDQo+ID4+Pj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChyZWdu dW0pLA0KPiA+Pj4+IC0JCQkgICAgcmVjLT51LnJlZy5sZW4pOw0KPiA+Pj4+IC0JICAgICAgYnJl YWs7DQo+ID4+Pj4gKwkgICAgICBlZmZfY291bnQtLTsNCj4gPj4+Pg0KPiA+Pj4+IC0JICAgIGNh c2UgcmVjb3JkX2Z1bGxfbWVtOiAvKiBtZW0gKi8NCj4gPj4+PiAtCSAgICAgIC8qIEdldCBsZW4u ICAqLw0KPiA+Pj4+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmxlbiwgc2l6 ZW9mIChsZW4pLCAmYmZkX29mZnNldCk7DQo+ID4+Pj4gLQkgICAgICBsZW4gPSBuZXRvcmRlcjMy IChsZW4pOw0KPiA+Pj4+IC0NCj4gPj4+PiAtCSAgICAgIC8qIEdldCBhZGRyLiAgKi8NCj4gPj4+ PiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZhZGRyLCBzaXplb2YgKGFkZHIp LCAmYmZkX29mZnNldCk7DQo+ID4+Pj4gLQkgICAgICBhZGRyID0gbmV0b3JkZXI2NCAoYWRkcik7 DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0JICAgICAgcmVjID0gcmVjb3JkX2Z1bGxfbWVtX2FsbG9jIChh ZGRyLCBsZW4pOw0KPiA+Pj4+IC0NCj4gPj4+PiAtCSAgICAgIC8qIEdldCB2YWwuICAqLw0KPiA+ Pj4+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgcmVjb3JkX2Z1bGxfZ2V0X2xv YyAocmVjKSwNCj4gPj4+PiAtCQkJICAgIHJlYy0+dS5tZW0ubGVuLCAmYmZkX29mZnNldCk7DQo+ ID4+Pj4gLQ0KPiA+Pj4+IC0JICAgICAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gPj4+PiAtCQlnZGJf cHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+Pj4+IC0JCQkgICAgIiAgUmVhZGluZyBtZW1vcnkgJXMg KDEgcGx1cyAiDQo+ID4+Pj4gLQkJCSAgICAiJWx1IHBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4i LA0KPiA+Pj4+IC0JCQkgICAgcGFkZHJlc3MgKGdldF9jdXJyZW50X2FyY2ggKCksDQo+ID4+Pj4g LQkJCQkgICAgICByZWMtPnUubWVtLmFkZHIpLA0KPiA+Pj4+IC0JCQkgICAgKHVuc2lnbmVkIGxv bmcpIHNpemVvZiAoYWRkciksDQo+ID4+Pj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9m IChsZW4pLA0KPiA+Pj4+IC0JCQkgICAgcmVjLT51Lm1lbS5sZW4pOw0KPiA+Pj4+IC0JICAgICAg YnJlYWs7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0JICAgIGNhc2UgcmVjb3JkX2Z1bGxfZW5kOiAvKiBl bmQgKi8NCj4gPj4+PiAtCSAgICAgIHJlYyA9IHJlY29yZF9mdWxsX2VuZF9hbGxvYyAoKTsNCj4g Pj4+PiAtCSAgICAgIHJlY29yZF9mdWxsX2luc25fbnVtICsrOw0KPiA+Pj4+IC0NCj4gPj4+PiAt CSAgICAgIC8qIEdldCBzaWduYWwgdmFsdWUuICAqLw0KPiA+Pj4+IC0JICAgICAgYmZkY29yZV9y ZWFkICgmY2JmZCwgb3NlYywgJnNpZ25hbCwgc2l6ZW9mIChzaWduYWwpLA0KPiA+Pj4+IC0JCQkg ICAgJmJmZF9vZmZzZXQpOw0KPiA+Pj4+IC0JICAgICAgc2lnbmFsID0gbmV0b3JkZXIzMiAoc2ln bmFsKTsNCj4gPj4+PiAtCSAgICAgIHJlYy0+dS5lbmQuc2lndmFsID0gKGVudW0gZ2RiX3NpZ25h bCkgc2lnbmFsOw0KPiA+Pj4+IC0NCj4gPj4+PiAtCSAgICAgIC8qIEdldCBpbnNuIGNvdW50LiAg Ki8NCj4gPj4+PiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZjb3VudCwgc2l6 ZW9mIChjb3VudCksICZiZmRfb2Zmc2V0KTsNCj4gPj4+PiAtCSAgICAgIGNvdW50ID0gbmV0b3Jk ZXIzMiAoY291bnQpOw0KPiA+Pj4+IC0JICAgICAgcmVjLT51LmVuZC5pbnNuX251bSA9IGNvdW50 Ow0KPiA+Pj4+IC0JICAgICAgcmVjb3JkX2Z1bGxfaW5zbl9jb3VudCA9IGNvdW50ICsgMTsNCj4g Pj4+PiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ID4+Pj4gLQkJZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywNCj4gPj4+PiAtCQkJICAgICIgIFJlYWRpbmcgcmVjb3JkX2Z1bGxfZW5kICgxICsg Ig0KPiA+Pj4+IC0JCQkgICAgIiVsdSArICVsdSBieXRlcyksIG9mZnNldCA9PSAlc1xuIiwNCj4g Pj4+PiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHNpZ25hbCksDQo+ID4+Pj4gLQkJ CSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChjb3VudCksDQo+ID4+Pj4gLQkJCSAgICBwYWRk cmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwNCj4gPj4+PiAtCQkJCSAgICAgIGJmZF9vZmZzZXQp KTsNCj4gPj4+PiAtCSAgICAgIGJyZWFrOw0KPiA+Pj4+IC0NCj4gPj4+PiAtCSAgICBkZWZhdWx0 Og0KPiA+Pj4+IC0JICAgICAgZXJyb3IgKF8oIkJhZCBlbnRyeSB0eXBlIGluIGNvcmUgZmlsZSAl cHMuIiksDQo+ID4+Pj4gLQkJICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5 bGUgKCksDQo+ID4+Pj4gLQkJCQkgICAgYmZkX2dldF9maWxlbmFtZSAoJmNiZmQpKSk7DQo+ID4+ Pj4gLQkgICAgICBicmVhazsNCj4gPj4+PiArCSAgICAgIHJlY29yZF9mdWxsX3JlYWRfZW50cnlf ZnJvbV9iZmQgKCZjYmZkLCBvc2VjLCAmYmZkX29mZnNldCk7DQo+ID4+Pj4gICAgCSAgICB9DQo+ ID4+Pj4NCj4gPj4+PiAtCSAgLyogQWRkIHJlYyB0byByZWNvcmQgYXJjaCBsaXN0LiAgKi8NCj4g Pj4+PiAtCSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsNCj4gPj4+PiArCSAgcmVj b3JkX2Z1bGxfc2F2ZV9pbnN0cnVjdGlvbiAoKTsNCj4gPj4+PiAgICAJfQ0KPiA+Pj4+ICAgICAg ICB9DQo+ID4+Pj4gICAgICBjYXRjaCAoY29uc3QgZ2RiX2V4Y2VwdGlvbiAmZXgpDQo+ID4+Pj4g ICAgICAgIHsNCj4gPj4+PiAtICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRf ZnVsbF9hcmNoX2xpc3RfdGFpbCk7DQo+ID4+Pj4gKyAgICAgIHJlY29yZF9mdWxsX3Jlc2V0X2lu Y29tcGxldGUgKCk7DQo+ID4+Pj4gICAgICAgICAgdGhyb3c7DQo+ID4+Pj4gICAgICAgIH0NCj4g Pj4+Pg0KPiA+Pj4+IC0gIC8qIEFkZCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCB0byB0aGUg ZW5kIG9mIHJlY29yZCBsaXN0LiAgKi8NCj4gPj4+PiAtICByZWNvcmRfZnVsbF9maXJzdC5uZXh0 ID0gcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQ7DQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfYXJj aF9saXN0X2hlYWQtPnByZXYgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+ID4+Pj4gLSAgcmVjb3Jk X2Z1bGxfYXJjaF9saXN0X3RhaWwtPm5leHQgPSBOVUxMOw0KPiA+Pj4+IC0gIHJlY29yZF9mdWxs X2xpc3QgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+ID4+Pj4gLQ0KPiA+Pj4+ICAgICAgLyogVXBk YXRlIHJlY29yZF9mdWxsX2luc25fbWF4X251bS4gICovDQo+ID4+Pj4gICAgICBpZiAocmVjb3Jk X2Z1bGxfaW5zbl9udW0gPiByZWNvcmRfZnVsbF9pbnNuX21heF9udW0pDQo+ID4+Pj4gICAgICAg IHsNCj4gPj4+PiBAQCAtMjUwNSw2ICsyMzM1LDEwIEBAIHJlY29yZF9mdWxsX3Jlc3RvcmUgKHN0 cnVjdCBiZmQgJmNiZmQpDQo+ID4+Pj4gICAgCSAgICAgICByZWNvcmRfZnVsbF9pbnNuX21heF9u dW0pOw0KPiA+Pj4+ICAgICAgICB9DQo+ID4+Pj4NCj4gPj4+PiArICAvKiBXaGVuIGxvYWRpbmcg YSByZWNvcmRpbmcsIHdlJ2xsIGFsd2F5cyBzdGFydCBhdCB0aGUgb2xkZXN0IHBvc3NpYmxlDQo+ ID4+Pj4gKyAgICAgaW5zdHJ1Y3Rpb24sIG5vIG1hdHRlciB3aGVyZSB0aGUgb3JpZ2luYWwgcmVj b3JkaW5nIHdhcyBzdG9wcGVkLiAgKi8NCj4gPj4+PiArICByZWNvcmRfZnVsbF9uZXh0X2luc24g PSAwOw0KPiA+Pj4+ICsNCj4gPj4+PiAgICAgIC8qIFN1Y2NlZWRlZC4gICovDQo+ID4+Pj4gICAg ICBnZGJfcHJpbnRmIChfKCJSZXN0b3JlZCByZWNvcmRzIGZyb20gY29yZSBmaWxlICVzLlxuIiks DQo+ID4+Pj4gICAgCSAgICAgIGJmZF9nZXRfZmlsZW5hbWUgKCZjYmZkKSk7DQo+ID4+Pj4gQEAg LTI1MzgsMTMgKzIzNzIsNzMgQEAgY21kX3JlY29yZF9mdWxsX3Jlc3RvcmUgKGNvbnN0IGNoYXIN Cj4gKmFyZ3MsDQo+ID4+IGludA0KPiA+Pj4+IGZyb21fdHR5KQ0KPiA+Pj4+ICAgICAgcmVjb3Jk X2Z1bGxfb3BlbiAobnVsbHB0ciwgZnJvbV90dHkpOw0KPiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+ Pj4+ICtzdGF0aWMgdm9pZA0KPiA+Pj4+ICtyZWNvcmRfZnVsbF93cml0ZV9lbnRyeV90b19iZmQg KHJlY29yZF9mdWxsX2VudHJ5ICZlbnRyeSwNCj4gPj4+PiArCQkJCWdkYl9iZmRfcmVmX3B0ciBv YmZkLA0KPiA+Pj4+ICsJCQkJYXNlY3Rpb24gKm9zZWMsIGludCAqYmZkX29mZnNldCwNCj4gPj4+ PiArCQkJCXN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQ0KPiA+Pj4+ICt7DQo+ID4+Pj4gKyAgLyog U2F2ZSBlbnRyeS4gICovDQo+ID4+Pj4gKyAgdWludDhfdCB0eXBlOw0KPiA+Pj4+ICsgIHVpbnQz Ml90IHJlZ251bSwgbGVuOw0KPiA+Pj4+ICsgIHVpbnQ2NF90IGFkZHI7DQo+ID4+Pj4gKw0KPiA+ Pj4+ICsgIHR5cGUgPSBlbnRyeS50eXBlOw0KPiA+Pj4+ICsgIGJmZGNvcmVfd3JpdGUgKG9iZmQu Z2V0ICgpLCBvc2VjLCAmdHlwZSwgc2l6ZW9mICh0eXBlKSwgYmZkX29mZnNldCk7DQo+ID4+Pj4g Kw0KPiA+Pj4+ICsgIHN3aXRjaCAoZW50cnkudHlwZSkNCj4gPj4+PiArICAgIHsNCj4gPj4+PiAr ICAgIGNhc2UgcmVjb3JkX2Z1bGxfcmVnOiAvKiByZWcgKi8NCj4gPj4+PiArICAgICAgaWYgKHJl Y29yZF9kZWJ1ZykNCj4gPj4+PiArCWdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+Pj4gKwkJ ICAgICIgIFdyaXRpbmcgcmVnaXN0ZXIgJWQgKDEgIg0KPiA+Pj4+ICsJCSAgICAicGx1cyAlbHUg cGx1cyAlZCBieXRlcylcbiIsDQo+ID4+Pj4gKwkJICAgIGVudHJ5LnUucmVnLm51bSwNCj4gPj4+ PiArCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAocmVnbnVtKSwNCj4gPj4+PiArCQkgICAg ZW50cnkudS5yZWcubGVuKTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgIC8qIFdyaXRlIHJlZ251 bS4gICovDQo+ID4+Pj4gKyAgICAgIHJlZ251bSA9IG5ldG9yZGVyMzIgKGVudHJ5LnUucmVnLm51 bSk7DQo+ID4+Pj4gKyAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmcmVn bnVtLCBzaXplb2YgKHJlZ251bSksDQo+ID4+IGJmZF9vZmZzZXQpOw0KPiA+Pj4+ICsNCj4gPj4+ PiArICAgICAgLyogV3JpdGUgcmVndmFsLiAgKi8NCj4gPj4+PiArICAgICAgYmZkY29yZV93cml0 ZSAob2JmZC5nZXQgKCksIG9zZWMsIHJlY29yZF9mdWxsX2dldF9sb2MgKCZlbnRyeSksDQo+ID4+ Pj4gKwkJICAgICBlbnRyeS51LnJlZy5sZW4sIGJmZF9vZmZzZXQpOw0KPiA+Pj4+ICsgICAgICBi cmVhazsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICBjYXNlIHJlY29yZF9mdWxsX21lbTogLyogbWVt ICovDQo+ID4+Pj4gKyAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ID4+Pj4gKwlnZGJfcHJpbnRm IChnZGJfc3RkbG9nLA0KPiA+Pj4+ICsJCSAgICAiICBXcml0aW5nIG1lbW9yeSAlcyAoMSBwbHVz ICINCj4gPj4+PiArCQkgICAgIiVsdSBwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwNCj4gPj4+ PiArCQkgICAgcGFkZHJlc3MgKGdkYmFyY2gsDQo+ID4+Pj4gKwkJCSAgICAgIGVudHJ5LnUubWVt LmFkZHIpLA0KPiA+Pj4+ICsJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChhZGRyKSwNCj4g Pj4+PiArCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAobGVuKSwNCj4gPj4+PiArCQkgICAg ZW50cnkudS5tZW0ubGVuKTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgICAgIC8qIFdyaXRlIG1lbWxl bi4gICovDQo+ID4+Pj4gKyAgICAgIGxlbiA9IG5ldG9yZGVyMzIgKGVudHJ5LnUubWVtLmxlbik7 DQo+ID4+Pj4gKyAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmbGVuLCBz aXplb2YgKGxlbiksIGJmZF9vZmZzZXQpOw0KPiA+Pj4+ICsNCj4gPj4+PiArICAgICAgLyogV3Jp dGUgbWVtYWRkci4gICovDQo+ID4+Pj4gKyAgICAgIGFkZHIgPSBuZXRvcmRlcjY0IChlbnRyeS51 Lm1lbS5hZGRyKTsNCj4gPj4+PiArICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9z ZWMsICZhZGRyLCBzaXplb2YgKGFkZHIpLCBiZmRfb2Zmc2V0KTsNCj4gPj4+PiArDQo+ID4+Pj4g KyAgICAgIC8qIFdyaXRlIG1lbXZhbC4gICovDQo+ID4+Pj4gKyAgICAgIGJmZGNvcmVfd3JpdGUg KG9iZmQuZ2V0ICgpLCBvc2VjLCByZWNvcmRfZnVsbF9nZXRfbG9jICgmZW50cnkpLA0KPiA+Pj4+ ICsJCSAgICAgZW50cnkudS5tZW0ubGVuLCBiZmRfb2Zmc2V0KTsNCj4gPj4+PiArICAgICAgYnJl YWs7DQo+ID4+Pj4gKyAgICB9DQo+ID4+Pj4gKw0KPiA+Pj4+ICt9DQo+ID4+Pj4gKw0KPiA+Pj4+ ICAgIC8qIFNhdmUgdGhlIGV4ZWN1dGlvbiBsb2cgdG8gYSBmaWxlLiAgV2UgdXNlIGEgbW9kaWZp ZWQgZWxmIGNvcmVmaWxlDQo+ID4+Pj4gICAgICAgZm9ybWF0LCB3aXRoIGFuIGV4dHJhIHNlY3Rp b24gZm9yIG91ciBkYXRhLiAgKi8NCj4gPj4+Pg0KPiA+Pj4+ICAgIHZvaWQNCj4gPj4+PiAgICBy ZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c2F2ZV9yZWNvcmQgKGNvbnN0IGNoYXIgKnJlY2ZpbGVu YW1lKQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmN1 cl9yZWNvcmRfZnVsbF9saXN0Ow0KPiA+Pj4+ICAgICAgdWludDMyX3QgbWFnaWM7DQo+ID4+Pj4g ICAgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsNCj4gPj4+PiAgICAgIGludCBzYXZlX3NpemUg PSAwOw0KPiA+Pj4+IEBAIC0yNTYyLDkgKzI0NTYsNiBAQCByZWNvcmRfZnVsbF9iYXNlX3Rhcmdl dDo6c2F2ZV9yZWNvcmQgKGNvbnN0DQo+ID4+IGNoYXINCj4gPj4+PiAqcmVjZmlsZW5hbWUpDQo+ ID4+Pj4gICAgICAvKiBBcnJhbmdlIHRvIHJlbW92ZSB0aGUgb3V0cHV0IGZpbGUgb24gZmFpbHVy ZS4gICovDQo+ID4+Pj4gICAgICBnZGI6OnVubGlua2VyIHVubGlua19maWxlIChyZWNmaWxlbmFt ZSk7DQo+ID4+Pj4NCj4gPj4+PiAtICAvKiBTYXZlIHRoZSBjdXJyZW50IHJlY29yZCBlbnRyeSB0 byAiY3VyX3JlY29yZF9mdWxsX2xpc3QiLiAgKi8NCj4gPj4+PiAtICBjdXJfcmVjb3JkX2Z1bGxf bGlzdCA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+ID4+Pj4gLQ0KPiA+Pj4+ICAgICAgLyogR2V0IHRo ZSB2YWx1ZXMgb2YgcmVnY2FjaGUgYW5kIGdkYmFyY2guICAqLw0KPiA+Pj4+ICAgICAgcmVnY2Fj aGUgKnJlZ2NhY2hlID0gZ2V0X3RocmVhZF9yZWdjYWNoZSAoaW5mZXJpb3JfdGhyZWFkICgpKTsN Cj4gPj4+PiAgICAgIGdkYmFyY2ggPSByZWdjYWNoZS0+YXJjaCAoKTsNCj4gPj4+PiBAQCAtMjU3 NCwzNCArMjQ2NSwyNyBAQCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c2F2ZV9yZWNvcmQNCj4g KGNvbnN0DQo+ID4+Pj4gY2hhciAqcmVjZmlsZW5hbWUpDQo+ID4+Pj4gICAgICAgID0gcmVjb3Jk X2Z1bGxfZ2RiX29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAg LyogUmV2ZXJzZSBleGVjdXRlIHRvIHRoZSBiZWdpbiBvZiByZWNvcmQgbGlzdC4gICovDQo+ID4+ Pj4gLSAgd2hpbGUgKDEpDQo+ID4+Pj4gLSAgICB7DQo+ID4+Pj4gLSAgICAgIC8qIENoZWNrIGZv ciBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsb2cuICAqLw0KPiA+Pj4+IC0gICAgICBpZiAocmVjb3Jk X2Z1bGxfbGlzdCA9PSAmcmVjb3JkX2Z1bGxfZmlyc3QpDQo+ID4+Pj4gLQlicmVhazsNCj4gPj4+ PiAtDQo+ID4+Pj4gLSAgICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdkYmFy Y2gsIHJlY29yZF9mdWxsX2xpc3QpOw0KPiA+Pj4+IC0NCj4gPj4+PiAtICAgICAgaWYgKHJlY29y ZF9mdWxsX2xpc3QtPnByZXYpDQo+ID4+Pj4gLQlyZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1 bGxfbGlzdC0+cHJldjsNCj4gPj4+PiAtICAgIH0NCj4gPj4+PiArICBmb3IgKGludCBpID0gcmVj b3JkX2Z1bGxfbmV4dF9pbnNuIC0gMTsgaSA+PSAwOyBpLS0pDQo+ID4+Pj4gKyAgICByZWNvcmRf ZnVsbF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLA0KPiA+Pj4+ICsJCQkgICByZWNvcmRf ZnVsbF9saXN0W2ldKTsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgLyogQ29tcHV0ZSB0aGUgc2l6ZSBu ZWVkZWQgZm9yIHRoZSBleHRyYSBiZmQgc2VjdGlvbi4gICovDQo+ID4+Pj4gICAgICBzYXZlX3Np emUgPSA0OwkvKiBtYWdpYyBjb29raWUgKi8NCj4gPj4+PiAtICBmb3IgKHJlY29yZF9mdWxsX2xp c3QgPSByZWNvcmRfZnVsbF9maXJzdC5uZXh0OyByZWNvcmRfZnVsbF9saXN0Ow0KPiA+Pj4+IC0g ICAgICAgcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPm5leHQpDQo+ID4+Pj4g LSAgICBzd2l0Y2ggKHJlY29yZF9mdWxsX2xpc3QtPnR5cGUpDQo+ID4+Pj4gLSAgICAgIHsNCj4g Pj4+PiAtICAgICAgY2FzZSByZWNvcmRfZnVsbF9lbmQ6DQo+ID4+Pj4gLQlzYXZlX3NpemUgKz0g MSArIDQgKyA0Ow0KPiA+Pj4+IC0JYnJlYWs7DQo+ID4+Pj4gLSAgICAgIGNhc2UgcmVjb3JkX2Z1 bGxfcmVnOg0KPiA+Pj4+IC0Jc2F2ZV9zaXplICs9IDEgKyA0ICsgcmVjb3JkX2Z1bGxfbGlzdC0+ dS5yZWcubGVuOw0KPiA+Pj4+IC0JYnJlYWs7DQo+ID4+Pj4gLSAgICAgIGNhc2UgcmVjb3JkX2Z1 bGxfbWVtOg0KPiA+Pj4+IC0Jc2F2ZV9zaXplICs9IDEgKyA0ICsgOCArIHJlY29yZF9mdWxsX2xp c3QtPnUubWVtLmxlbjsNCj4gPj4+PiAtCWJyZWFrOw0KPiA+Pj4+IC0gICAgICB9DQo+ID4+Pj4g KyAgZm9yIChpbnQgaSA9IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSAtIDE7IGkgPj0gMDsgaS0t KQ0KPiA+Pj4+ICsgICAgew0KPiA+Pj4+ICsgICAgICAvKiBOdW1iZXIgb2YgZWZmZWN0cyBvZiBh biBpbnN0cnVjdGlvbi4gICovDQo+ID4+Pj4gKyAgICAgIHNhdmVfc2l6ZSArPSBzaXplb2YgKHVp bnQzMl90KSArIHNpemVvZiAodWludDhfdCkgKyBzaXplb2YgKHVpbnQzMl90KTsNCj4gPj4+PiAr ICAgICAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29yZF9mdWxsX2xpc3RbaV0uZWZmZWN0cykNCj4g Pj4+PiArCXN3aXRjaCAoZW50cnkudHlwZSkNCj4gPj4+PiArCSAgew0KPiA+Pj4+ICsJICBjYXNl IHJlY29yZF9mdWxsX3JlZzoNCj4gPj4+PiArCSAgICBzYXZlX3NpemUgKz0gMSArIDQgKyBlbnRy eS51LnJlZy5sZW47DQo+ID4+Pj4gKwkgICAgYnJlYWs7DQo+ID4+Pj4gKwkgIGNhc2UgcmVjb3Jk X2Z1bGxfbWVtOg0KPiA+Pj4+ICsJICAgIHNhdmVfc2l6ZSArPSAxICsgNCArIDggKyBlbnRyeS51 Lm1lbS5sZW47DQo+ID4+Pj4gKwkgICAgYnJlYWs7DQo+ID4+Pj4gKwkgIH0NCj4gPj4+PiArICAg IH0NCj4gPj4+Pg0KPiA+Pj4+ICAgICAgLyogTWFrZSB0aGUgbmV3IGJmZCBzZWN0aW9uLiAgKi8N Cj4gPj4+PiAgICAgIG9zZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheV93aXRoX2ZsYWdzIChv YmZkLmdldCAoKSwgInByZWNvcmQiLA0KPiA+Pj4+IEBAIC0yNjMwLDEwOCArMjUxNCwzMiBAQCBy ZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c2F2ZV9yZWNvcmQNCj4gPj4gKGNvbnN0DQo+ID4+Pj4g Y2hhciAqcmVjZmlsZW5hbWUpDQo+ID4+Pj4NCj4gPj4+PiAgICAgIC8qIFNhdmUgdGhlIGVudHJp ZXMgdG8gcmVjZmQgYW5kIGZvcndhcmQgZXhlY3V0ZSB0byB0aGUgZW5kIG9mDQo+ID4+Pj4gICAg ICAgICByZWNvcmQgbGlzdC4gICovDQo+ID4+Pj4gLSAgcmVjb3JkX2Z1bGxfbGlzdCA9ICZyZWNv cmRfZnVsbF9maXJzdDsNCj4gPj4+PiAtICB3aGlsZSAoMSkNCj4gPj4+PiArICBmb3IgKGludCBp ID0gMDsgaSA8IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKTsgaSsrKQ0KPiA+Pj4+ICAgICAgICB7 DQo+ID4+Pj4gLSAgICAgIC8qIFNhdmUgZW50cnkuICAqLw0KPiA+Pj4+IC0gICAgICBpZiAocmVj b3JkX2Z1bGxfbGlzdCAhPSAmcmVjb3JkX2Z1bGxfZmlyc3QpDQo+ID4+Pj4gKyAgICAgIHVpbnQz Ml90IGVmZl9jb3VudCA9ICh1aW50MzJfdCkgcmVjb3JkX2Z1bGxfbGlzdFtpXS5lZmZlY3RzLnNp emUgKCk7DQo+ID4+Pj4gKyAgICAgIHVpbnQzMl90IGluc25fbnVtID0gcmVjb3JkX2Z1bGxfbGlz dFtpXS5pbnNuX251bTsNCj4gPj4+PiArICAgICAgdWludDhfdCBzaWd2YWwgPSAocmVjb3JkX2Z1 bGxfbGlzdFtpXS5zaWd2YWwuaGFzX3ZhbHVlICgpKQ0KPiA+Pj4+ICsJCQkgPyByZWNvcmRfZnVs bF9saXN0W2ldLnNpZ3ZhbC52YWx1ZSAoKQ0KPiA+Pj4+ICsJCQkgOiBHREJfU0lHTkFMXzA7DQo+ ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICAvKiBTaWduYWwuICAqLw0KPiA+Pj4+ICsgICAgICBiZmRj b3JlX3dyaXRlIChvYmZkLmdldCAoKSwgb3NlYywgJnNpZ3ZhbCwgc2l6ZW9mIChzaWd2YWwpLA0K PiAmYmZkX29mZnNldCk7DQo+ID4+Pj4gKyAgICAgIGVmZl9jb3VudCA9IG5ldG9yZGVyMzIgKGVm Zl9jb3VudCk7DQo+ID4+Pj4gKyAgICAgIC8qIE51bWJlciBvZiBlZmZlY3RzLiAgKi8NCj4gPj4+ PiArICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZlZmZfY291bnQsIHNp emVvZiAoZWZmX2NvdW50KSwNCj4gPj4+PiArCQkgICAgICZiZmRfb2Zmc2V0KTsNCj4gPj4+PiAr ICAgICAgLyogSW5zdHJ1Y3Rpb24gbnVtYmVyLiAgKi8NCj4gPj4+PiArICAgICAgYmZkY29yZV93 cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZpbnNuX251bSwgc2l6ZW9mICh1aW50MzJfdCksDQo+ ID4+Pj4gKwkJICAgICAmYmZkX29mZnNldCk7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgICAgICBmb3Ig KGF1dG8gJmVudHJ5IDogcmVjb3JkX2Z1bGxfbGlzdFtpXS5lZmZlY3RzKQ0KPiA+Pj4+ICAgIAl7 DQo+ID4+Pj4gLQkgIHVpbnQ4X3QgdHlwZTsNCj4gPj4+PiAtCSAgdWludDMyX3QgcmVnbnVtLCBs ZW4sIHNpZ25hbCwgY291bnQ7DQo+ID4+Pj4gLQkgIHVpbnQ2NF90IGFkZHI7DQo+ID4+Pj4gLQ0K PiA+Pj4+IC0JICB0eXBlID0gcmVjb3JkX2Z1bGxfbGlzdC0+dHlwZTsNCj4gPj4+PiAtCSAgYmZk Y29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZ0eXBlLCBzaXplb2YgKHR5cGUpLCAmYmZk X29mZnNldCk7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0JICBzd2l0Y2ggKHJlY29yZF9mdWxsX2xpc3Qt PnR5cGUpDQo+ID4+Pj4gLQkgICAgew0KPiA+Pj4+IC0JICAgIGNhc2UgcmVjb3JkX2Z1bGxfcmVn OiAvKiByZWcgKi8NCj4gPj4+PiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ID4+Pj4gLQkJ Z2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4+PiAtCQkJICAgICIgIFdyaXRpbmcgcmVnaXN0 ZXIgJWQgKDEgIg0KPiA+Pj4+IC0JCQkgICAgInBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4iLA0K PiA+Pj4+IC0JCQkgICAgcmVjb3JkX2Z1bGxfbGlzdC0+dS5yZWcubnVtLA0KPiA+Pj4+IC0JCQkg ICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAocmVnbnVtKSwNCj4gPj4+PiAtCQkJICAgIHJlY29y ZF9mdWxsX2xpc3QtPnUucmVnLmxlbik7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0JICAgICAgLyogV3Jp dGUgcmVnbnVtLiAgKi8NCj4gPj4+PiAtCSAgICAgIHJlZ251bSA9IG5ldG9yZGVyMzIgKHJlY29y ZF9mdWxsX2xpc3QtPnUucmVnLm51bSk7DQo+ID4+Pj4gLQkgICAgICBiZmRjb3JlX3dyaXRlIChv YmZkLmdldCAoKSwgb3NlYywgJnJlZ251bSwNCj4gPj4+PiAtCQkJICAgICBzaXplb2YgKHJlZ251 bSksICZiZmRfb2Zmc2V0KTsNCj4gPj4+PiAtDQo+ID4+Pj4gLQkgICAgICAvKiBXcml0ZSByZWd2 YWwuICAqLw0KPiA+Pj4+IC0JICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMs DQo+ID4+Pj4gLQkJCSAgICAgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAocmVjb3JkX2Z1bGxfbGlzdCks DQo+ID4+Pj4gLQkJCSAgICAgcmVjb3JkX2Z1bGxfbGlzdC0+dS5yZWcubGVuLCAmYmZkX29mZnNl dCk7DQo+ID4+Pj4gLQkgICAgICBicmVhazsNCj4gPj4+PiAtDQo+ID4+Pj4gLQkgICAgY2FzZSBy ZWNvcmRfZnVsbF9tZW06IC8qIG1lbSAqLw0KPiA+Pj4+IC0JICAgICAgaWYgKHJlY29yZF9kZWJ1 ZykNCj4gPj4+PiAtCQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+Pj4+IC0JCQkgICAgIiAg V3JpdGluZyBtZW1vcnkgJXMgKDEgcGx1cyAiDQo+ID4+Pj4gLQkJCSAgICAiJWx1IHBsdXMgJWx1 IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiA+Pj4+IC0JCQkgICAgcGFkZHJlc3MgKGdkYmFyY2gsDQo+ ID4+Pj4gLQkJCQkgICAgICByZWNvcmRfZnVsbF9saXN0LT51Lm1lbS5hZGRyKSwNCj4gPj4+PiAt CQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGFkZHIpLA0KPiA+Pj4+IC0JCQkgICAgKHVu c2lnbmVkIGxvbmcpIHNpemVvZiAobGVuKSwNCj4gPj4+PiAtCQkJICAgIHJlY29yZF9mdWxsX2xp c3QtPnUubWVtLmxlbik7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0JICAgICAgLyogV3JpdGUgbWVtbGVu LiAgKi8NCj4gPj4+PiAtCSAgICAgIGxlbiA9IG5ldG9yZGVyMzIgKHJlY29yZF9mdWxsX2xpc3Qt PnUubWVtLmxlbik7DQo+ID4+Pj4gLQkgICAgICBiZmRjb3JlX3dyaXRlIChvYmZkLmdldCAoKSwg b3NlYywgJmxlbiwgc2l6ZW9mIChsZW4pLA0KPiA+Pj4+IC0JCQkgICAgICZiZmRfb2Zmc2V0KTsN Cj4gPj4+PiAtDQo+ID4+Pj4gLQkgICAgICAvKiBXcml0ZSBtZW1hZGRyLiAgKi8NCj4gPj4+PiAt CSAgICAgIGFkZHIgPSBuZXRvcmRlcjY0IChyZWNvcmRfZnVsbF9saXN0LT51Lm1lbS5hZGRyKTsN Cj4gPj4+PiAtCSAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmYWRkciwN Cj4gPj4+PiAtCQkJICAgICBzaXplb2YgKGFkZHIpLCAmYmZkX29mZnNldCk7DQo+ID4+Pj4gLQ0K PiA+Pj4+IC0JICAgICAgLyogV3JpdGUgbWVtdmFsLiAgKi8NCj4gPj4+PiAtCSAgICAgIGJmZGNv cmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLA0KPiA+Pj4+IC0JCQkgICAgIHJlY29yZF9mdWxs X2dldF9sb2MgKHJlY29yZF9mdWxsX2xpc3QpLA0KPiA+Pj4+IC0JCQkgICAgIHJlY29yZF9mdWxs X2xpc3QtPnUubWVtLmxlbiwgJmJmZF9vZmZzZXQpOw0KPiA+Pj4+IC0JICAgICAgYnJlYWs7DQo+ ID4+Pj4gLQ0KPiA+Pj4+IC0JICAgICAgY2FzZSByZWNvcmRfZnVsbF9lbmQ6DQo+ID4+Pj4gLQkJ aWYgKHJlY29yZF9kZWJ1ZykNCj4gPj4+PiAtCQkgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ ID4+Pj4gLQkJCSAgICAgICIgIFdyaXRpbmcgcmVjb3JkX2Z1bGxfZW5kICgxICsgIg0KPiA+Pj4+ IC0JCQkgICAgICAiJWx1ICsgJWx1IGJ5dGVzKVxuIiwNCj4gPj4+PiAtCQkJICAgICAgKHVuc2ln bmVkIGxvbmcpIHNpemVvZiAoc2lnbmFsKSwNCj4gPj4+PiAtCQkJICAgICAgKHVuc2lnbmVkIGxv bmcpIHNpemVvZiAoY291bnQpKTsNCj4gPj4+PiAtCQkvKiBXcml0ZSBzaWduYWwgdmFsdWUuICAq Lw0KPiA+Pj4+IC0JCXNpZ25hbCA9IG5ldG9yZGVyMzIgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5k LnNpZ3ZhbCk7DQo+ID4+Pj4gLQkJYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZz aWduYWwsDQo+ID4+Pj4gLQkJCSAgICAgICBzaXplb2YgKHNpZ25hbCksICZiZmRfb2Zmc2V0KTsN Cj4gPj4+PiAtDQo+ID4+Pj4gLQkJLyogV3JpdGUgaW5zbiBjb3VudC4gICovDQo+ID4+Pj4gLQkJ Y291bnQgPSBuZXRvcmRlcjMyIChyZWNvcmRfZnVsbF9saXN0LT51LmVuZC5pbnNuX251bSk7DQo+ ID4+Pj4gLQkJYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZjb3VudCwNCj4gPj4+ PiAtCQkJICAgICAgIHNpemVvZiAoY291bnQpLCAmYmZkX29mZnNldCk7DQo+ID4+Pj4gLQkJYnJl YWs7DQo+ID4+Pj4gLQkgICAgfQ0KPiA+Pj4+ICsJICByZWNvcmRfZnVsbF93cml0ZV9lbnRyeV90 b19iZmQgKGVudHJ5LCBvYmZkLCBvc2VjLCAmYmZkX29mZnNldCwNCj4gPj4+PiArCQkJCQkgIGdk YmFyY2gpOw0KPiA+Pj4+ICAgIAl9DQo+ID4+Pj4gLQ0KPiA+Pj4+ICAgICAgICAgIC8qIEV4ZWN1 dGUgZW50cnkuICAqLw0KPiA+Pj4+IC0gICAgICByZWNvcmRfZnVsbF9leGVjX2luc24gKHJlZ2Nh Y2hlLCBnZGJhcmNoLCByZWNvcmRfZnVsbF9saXN0KTsNCj4gPj4+PiAtDQo+ID4+Pj4gLSAgICAg IGlmIChyZWNvcmRfZnVsbF9saXN0LT5uZXh0KQ0KPiA+Pj4+IC0JcmVjb3JkX2Z1bGxfbGlzdCA9 IHJlY29yZF9mdWxsX2xpc3QtPm5leHQ7DQo+ID4+Pj4gLSAgICAgIGVsc2UNCj4gPj4+PiAtCWJy ZWFrOw0KPiA+Pj4+IC0gICAgfQ0KPiA+Pj4+IC0NCj4gPj4+PiAtICAvKiBSZXZlcnNlIGV4ZWN1 dGUgdG8gY3VyX3JlY29yZF9mdWxsX2xpc3QuICAqLw0KPiA+Pj4+IC0gIHdoaWxlICgxKQ0KPiA+ Pj4+IC0gICAgew0KPiA+Pj4+IC0gICAgICAvKiBDaGVjayBmb3IgYmVnaW5uaW5nIGFuZCBlbmQg b2YgbG9nLiAgKi8NCj4gPj4+PiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3QgPT0gY3VyX3Jl Y29yZF9mdWxsX2xpc3QpDQo+ID4+Pj4gLQlicmVhazsNCj4gPj4+PiAtDQo+ID4+Pj4gLSAgICAg IHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdkYmFyY2gsIHJlY29yZF9mdWxsX2xp c3QpOw0KPiA+Pj4+IC0NCj4gPj4+PiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3QtPnByZXYp DQo+ID4+Pj4gLQlyZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+cHJldjsNCj4g Pj4+PiArICAgICAgaWYgKGkgPCByZWNvcmRfZnVsbF9uZXh0X2luc24pDQo+ID4+Pj4gKwlyZWNv cmRfZnVsbF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfZnVsbF9saXN0W2ld KTsNCj4gPj4+PiAgICAgICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gICAgICB1bmxpbmtfZmlsZS5rZWVw ICgpOw0KPiA+Pj4+IEBAIC0yNzQ2LDcgKzI1NTQsNyBAQCByZWNvcmRfZnVsbF9iYXNlX3Rhcmdl dDo6c2F2ZV9yZWNvcmQgKGNvbnN0DQo+ID4+IGNoYXINCj4gPj4+PiAqcmVjZmlsZW5hbWUpDQo+ ID4+Pj4gICAgICAgY29ycmVzcG9uZGluZ2x5LiAgKi8NCj4gPj4+Pg0KPiA+Pj4+ICAgIHN0YXRp YyB2b2lkDQo+ID4+Pj4gLXJlY29yZF9mdWxsX2dvdG9faW5zbiAoc3RydWN0IHJlY29yZF9mdWxs X2VudHJ5ICplbnRyeSwNCj4gPj4+PiArcmVjb3JkX2Z1bGxfZ290b19pbnNuIChzaXplX3QgdGFy Z2V0X2luc24sDQo+ID4+Pj4gICAgCQkgICAgICAgZW51bSBleGVjX2RpcmVjdGlvbl9raW5kIGRp cikNCj4gPj4+IFlvdSBjb3VsZCBleHBsYWluIHRoZSBuZXcgcGFyYW1ldGVyIGluIHRoZSBmdW5j dGlvbiBkZXNjcmlwdGlvbi4NCj4gPj4+DQo+ID4+Pj4gICAgew0KPiA+Pj4+ICAgICAgc2NvcGVk X3Jlc3RvcmUgcmVzdG9yZV9vcGVyYXRpb25fZGlzYWJsZQ0KPiA+Pj4+IEBAIC0yNzU3LDE3ICsy NTY1LDEyIEBAIHJlY29yZF9mdWxsX2dvdG9faW5zbiAoc3RydWN0DQo+ID4+IHJlY29yZF9mdWxs X2VudHJ5DQo+ID4+Pj4gKmVudHJ5LA0KPiA+Pj4+ICAgICAgLyogQXNzdW1lIGV2ZXJ5dGhpbmcg aXMgdmFsaWQ6IHdlIHdpbGwgaGl0IHRoZSBlbnRyeSwNCj4gPj4+PiAgICAgICAgIGFuZCB3ZSB3 aWxsIG5vdCBoaXQgdGhlIGVuZCBvZiB0aGUgcmVjb3JkaW5nLiAgKi8NCj4gPj4+Pg0KPiA+Pj4+ IC0gIGlmIChkaXIgPT0gRVhFQ19GT1JXQVJEKQ0KPiA+Pj4+IC0gICAgcmVjb3JkX2Z1bGxfbGlz dCA9IHJlY29yZF9mdWxsX2xpc3QtPm5leHQ7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gIGRvDQo+ID4+ Pj4gLSAgICB7DQo+ID4+Pj4gLSAgICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUs IGdkYmFyY2gsIHJlY29yZF9mdWxsX2xpc3QpOw0KPiA+Pj4+IC0gICAgICBpZiAoZGlyID09IEVY RUNfUkVWRVJTRSkNCj4gPj4+PiAtCXJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9saXN0 LT5wcmV2Ow0KPiA+Pj4+IC0gICAgICBlbHNlDQo+ID4+Pj4gLQlyZWNvcmRfZnVsbF9saXN0ID0g cmVjb3JkX2Z1bGxfbGlzdC0+bmV4dDsNCj4gPj4+PiAtICAgIH0gd2hpbGUgKHJlY29yZF9mdWxs X2xpc3QgIT0gZW50cnkpOw0KPiA+Pj4+ICsgIGlmIChkaXIgPT0gRVhFQ19SRVZFUlNFKQ0KPiA+ Pj4+ICsgICAgZm9yIChpbnQgaSA9IHJlY29yZF9mdWxsX25leHRfaW5zbjsgaSA+IHRhcmdldF9p bnNuOyBpLS0pDQo+ID4+Pj4gKyAgICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUs IGdkYmFyY2gsIHJlY29yZF9mdWxsX2xpc3RbaSAtIDFdKTsNCj4gPj4+PiArICBlbHNlDQo+ID4+ Pj4gKyAgICBmb3IgKGludCBpID0gcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOyBpIDwgdGFyZ2V0X2lu c247IGkrKykNCj4gPj4+PiArICAgICAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwg Z2RiYXJjaCwgcmVjb3JkX2Z1bGxfbGlzdFtpXSk7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+ Pj4gICAgLyogQWxpYXMgZm9yICJ0YXJnZXQgcmVjb3JkLWZ1bGwiLiAgKi8NCj4gPj4+PiBAQCAt Mjc5OCw2MSArMjYwMSwzNiBAQCBzZXRfcmVjb3JkX2Z1bGxfaW5zbl9tYXhfbnVtIChjb25zdA0K PiBjaGFyDQo+ID4+Pj4gKmFyZ3MsIGludCBmcm9tX3R0eSwNCj4gPj4+PiAgICBzdGF0aWMgdm9p ZA0KPiA+Pj4+ICAgIG1haW50ZW5hbmNlX3ByaW50X3JlY29yZF9pbnN0cnVjdGlvbiAoY29uc3Qg Y2hhciAqYXJncywgaW50IGZyb21fdHR5KQ0KPiA+Pj4+ICAgIHsNCj4gPj4+PiAtICBzdHJ1Y3Qg cmVjb3JkX2Z1bGxfZW50cnkgKnRvX3ByaW50ID0gcmVjb3JkX2Z1bGxfbGlzdDsNCj4gPj4+PiAr ICBpZiAocmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSkNCj4gPj4+PiArICAgIGVycm9yIChfKCJO b3QgZW5vdWdoIHJlY29yZGVkIGhpc3RvcnkiKSk7DQo+ID4+Pj4NCj4gPj4+PiArICBpbnQgb2Zm c2V0ID0gcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIC0gMTsNCj4gPj4+PiArICAvKiBSZWR1Y2UgdGhl IG9mZnNldCBieSAxIGlmIHRoZSByZWNvcmRfZnVsbF9uZXh0X2luc24gaXMgYWZ0ZXIgdGhlIGVu ZA0KPiA+Pj4+ICsgICAgIHNvIHRoYXQgd2Ugc2hvdyB0aGUgbGFzdCByZWNvcmRlZCBpbnN0cnVj dGlvbiBpbnN0ZWFkIG9mIGNyYXNoaW5nLg0KPiAqLw0KPiA+Pj4+ICsgIGlmIChvZmZzZXQgPT0g cmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpKQ0KPiA+Pj4+ICsgICAgb2Zmc2V0LS07DQo+ID4+Pj4g ICAgICBpZiAoYXJncyAhPSBudWxscHRyKQ0KPiA+Pj4+ICAgICAgICB7DQo+ID4+Pj4gLSAgICAg IGludCBvZmZzZXQgPSB2YWx1ZV9hc19sb25nIChwYXJzZV9hbmRfZXZhbCAoYXJncykpOw0KPiA+ Pj4+IC0gICAgICBpZiAob2Zmc2V0ID4gMCkNCj4gPj4+PiAtCXsNCj4gPj4+PiAtCSAgLyogTW92 ZSBmb3J3YXJkIE9GRlNFVCBpbnN0cnVjdGlvbnMuICBXZSBrbm93IHdlIGZvdW5kIHRoZQ0KPiA+ Pj4+IC0JICAgICBlbmQgb2YgYW4gaW5zdHJ1Y3Rpb24gd2hlbiB0b19wcmludC0+dHlwZSBpcyBy ZWNvcmRfZnVsbF9lbmQuICAqLw0KPiA+Pj4+IC0JICB3aGlsZSAodG9fcHJpbnQtPm5leHQgIT0g bnVsbHB0ciAmJiBvZmZzZXQgPiAwKQ0KPiA+Pj4+IC0JICAgIHsNCj4gPj4+PiAtCSAgICAgIHRv X3ByaW50ID0gdG9fcHJpbnQtPm5leHQ7DQo+ID4+Pj4gLQkgICAgICBpZiAodG9fcHJpbnQtPnR5 cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiA+Pj4+IC0JCW9mZnNldC0tOw0KPiA+Pj4+IC0JICAg IH0NCj4gPj4+PiAtCSAgaWYgKG9mZnNldCAhPSAwKQ0KPiA+Pj4+IC0JICAgIGVycm9yIChfKCJO b3QgZW5vdWdoIHJlY29yZGVkIGhpc3RvcnkiKSk7DQo+ID4+Pj4gLQl9DQo+ID4+Pj4gLSAgICAg IGVsc2UNCj4gPj4+PiAtCXsNCj4gPj4+PiAtCSAgd2hpbGUgKHRvX3ByaW50LT5wcmV2ICE9IG51 bGxwdHIgJiYgb2Zmc2V0IDwgMCkNCj4gPj4+PiAtCSAgICB7DQo+ID4+Pj4gLQkgICAgICB0b19w cmludCA9IHRvX3ByaW50LT5wcmV2Ow0KPiA+Pj4+IC0JICAgICAgaWYgKHRvX3ByaW50LT50eXBl ID09IHJlY29yZF9mdWxsX2VuZCkNCj4gPj4+PiAtCQlvZmZzZXQrKzsNCj4gPj4+PiAtCSAgICB9 DQo+ID4+Pj4gLQkgIGlmIChvZmZzZXQgIT0gMCkNCj4gPj4+PiAtCSAgICBlcnJvciAoXygiTm90 IGVub3VnaCByZWNvcmRlZCBoaXN0b3J5IikpOw0KPiA+Pj4+IC0JfQ0KPiA+Pj4+ICsgICAgICBv ZmZzZXQgKz0gdmFsdWVfYXNfbG9uZyAocGFyc2VfYW5kX2V2YWwgKGFyZ3MpKTsNCj4gPj4+PiAr ICAgICAgaWYgKG9mZnNldCA+PSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCkgfHwgb2Zmc2V0IDwg MCkNCj4gPj4+PiArCWVycm9yIChfKCJOb3QgZW5vdWdoIHJlY29yZGVkIGhpc3RvcnkiKSk7DQo+ ID4+Pj4gICAgICAgIH0NCj4gPj4+PiAtICBnZGJfYXNzZXJ0ICh0b19wcmludCAhPSBudWxscHRy KTsNCj4gPj4+PiArICBhdXRvIHRvX3ByaW50ID0gcmVjb3JkX2Z1bGxfbGlzdC5iZWdpbiAoKSAr IG9mZnNldDsNCj4gPj4+Pg0KPiA+Pj4+ICAgICAgZ2RiYXJjaCAqYXJjaCA9IGN1cnJlbnRfaW5m ZXJpb3IgKCktPmFyY2ggKCk7DQo+ID4+Pj4NCj4gPj4+PiAtICAvKiBHbyBiYWNrIHRvIHRoZSBz dGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24uICAqLw0KPiA+Pj4+IC0gIHdoaWxlICh0b19wcmludC0+ cHJldiAhPSBudWxscHRyICYmIHRvX3ByaW50LT5wcmV2LT50eXBlICE9DQo+ID4+IHJlY29yZF9m dWxsX2VuZCkNCj4gPj4+PiAtICAgIHRvX3ByaW50ID0gdG9fcHJpbnQtPnByZXY7DQo+ID4+Pj4g LQ0KPiA+Pj4+IC0gIC8qIGlmIHdlJ3JlIGluIHRoZSBmaXJzdCByZWNvcmQsIHRoZXJlIGFyZSBu byBhY3R1YWwgaW5zdHJ1Y3Rpb25zDQo+ID4+Pj4gLSAgICAgcmVjb3JkZWQuICBXYXJuIHRoZSB1 c2VyIGFuZCBsZWF2ZS4gICovDQo+ID4+Pj4gLSAgaWYgKHRvX3ByaW50ID09ICZyZWNvcmRfZnVs bF9maXJzdCkNCj4gPj4+PiAtICAgIGVycm9yIChfKCJOb3QgZW5vdWdoIHJlY29yZGVkIGhpc3Rv cnkiKSk7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gIHdoaWxlICh0b19wcmludC0+dHlwZSAhPSByZWNv cmRfZnVsbF9lbmQpDQo+ID4+Pj4gKyAgZm9yIChhdXRvIGVudHJ5IDogdG9fcHJpbnQtPmVmZmVj dHMpDQo+ID4+Pj4gICAgICAgIHsNCj4gPj4+PiAtICAgICAgc3dpdGNoICh0b19wcmludC0+dHlw ZSkNCj4gPj4+PiArICAgICAgc3dpdGNoIChlbnRyeS50eXBlKQ0KPiA+Pj4+ICAgIAl7DQo+ID4+ Pj4gICAgCSAgY2FzZSByZWNvcmRfZnVsbF9yZWc6DQo+ID4+Pj4gICAgCSAgICB7DQo+ID4+Pj4g LQkgICAgICB0eXBlICpyZWd0eXBlID0gZ2RiYXJjaF9yZWdpc3Rlcl90eXBlIChhcmNoLCB0b19w cmludC0NCj4gPj4+Pj4gdS5yZWcubnVtKTsNCj4gPj4+PiArCSAgICAgIHR5cGUgKnJlZ3R5cGUg PSBnZGJhcmNoX3JlZ2lzdGVyX3R5cGUgKGFyY2gsIGVudHJ5LnUucmVnLm51bSk7DQo+ID4+Pj4g ICAgCSAgICAgIHZhbHVlICp2YWwNCj4gPj4+PiAgICAJCSAgPSB2YWx1ZV9mcm9tX2NvbnRlbnRz IChyZWd0eXBlLA0KPiA+Pj4+IC0JCQkJCSByZWNvcmRfZnVsbF9nZXRfbG9jICh0b19wcmludCkp Ow0KPiA+Pj4+ICsJCQkJCSByZWNvcmRfZnVsbF9nZXRfbG9jICgmZW50cnkpKTsNCj4gPj4+PiAg ICAJICAgICAgZ2RiX3ByaW50ZiAoIlJlZ2lzdGVyICVzIGNoYW5nZWQ6ICIsDQo+ID4+Pj4gLQkJ CSAgZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChhcmNoLCB0b19wcmludC0NCj4gPj4+Pj4gdS5yZWcu bnVtKSk7DQo+ID4+Pj4gKwkJCSAgZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChhcmNoLCBlbnRyeS51 LnJlZy5udW0pKTsNCj4gPj4+PiAgICAJICAgICAgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMg b3B0czsNCj4gPj4+PiAgICAJICAgICAgZ2V0X3VzZXJfcHJpbnRfb3B0aW9ucyAoJm9wdHMpOw0K PiA+Pj4+ICAgIAkgICAgICBvcHRzLnJhdyA9IHRydWU7DQo+ID4+Pj4gQEAgLTI4NjIsMTcgKzI2 NDAsMTYgQEAgbWFpbnRlbmFuY2VfcHJpbnRfcmVjb3JkX2luc3RydWN0aW9uDQo+ID4+IChjb25z dA0KPiA+Pj4+IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkNCj4gPj4+PiAgICAJICAgIH0NCj4g Pj4+PiAgICAJICBjYXNlIHJlY29yZF9mdWxsX21lbToNCj4gPj4+PiAgICAJICAgIHsNCj4gPj4+ PiAtCSAgICAgIGdkYl9ieXRlICpiID0gcmVjb3JkX2Z1bGxfZ2V0X2xvYyAodG9fcHJpbnQpOw0K PiA+Pj4+ICsJICAgICAgZ2RiX2J5dGUgKmIgPSByZWNvcmRfZnVsbF9nZXRfbG9jICgmZW50cnkp Ow0KPiA+Pj4+ICAgIAkgICAgICBnZGJfcHJpbnRmICgiJWQgYnl0ZXMgb2YgbWVtb3J5IGF0IGFk ZHJlc3MgJXMgY2hhbmdlZCBmcm9tOiIsDQo+ID4+Pj4gLQkJCSAgdG9fcHJpbnQtPnUubWVtLmxl biwNCj4gPj4+PiAtCQkJICBwcmludF9jb3JlX2FkZHJlc3MgKGFyY2gsIHRvX3ByaW50LT51Lm1l bS5hZGRyKSk7DQo+ID4+Pj4gLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvX3ByaW50LT51 Lm1lbS5sZW47IGkrKykNCj4gPj4+PiArCQkJICBlbnRyeS51Lm1lbS5sZW4sDQo+ID4+Pj4gKwkJ CSAgcHJpbnRfY29yZV9hZGRyZXNzIChhcmNoLCBlbnRyeS51Lm1lbS5hZGRyKSk7DQo+ID4+Pj4g KwkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5LnUubWVtLmxlbjsgaSsrKQ0KPiA+Pj4+ ICAgIAkJZ2RiX3ByaW50ZiAoIiAlMDJ4IiwgYltpXSk7DQo+ID4+Pj4gICAgCSAgICAgIGdkYl9w cmludGYgKCJcbiIpOw0KPiA+Pj4+ICAgIAkgICAgICBicmVhazsNCj4gPj4+PiAgICAJICAgIH0N Cj4gPj4+PiAgICAJfQ0KPiA+Pj4+IC0gICAgICB0b19wcmludCA9IHRvX3ByaW50LT5uZXh0Ow0K PiA+Pj4+ICAgICAgICB9DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTI4ODAsMTEg KzI2NTcsNiBAQCBJTklUX0dEQl9GSUxFIChyZWNvcmRfZnVsbCkNCj4gPj4+PiAgICB7DQo+ID4+ Pj4gICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYzsNCj4gPj4+Pg0KPiA+Pj4+IC0gIC8q IEluaXQgcmVjb3JkX2Z1bGxfZmlyc3QuICAqLw0KPiA+Pj4+IC0gIHJlY29yZF9mdWxsX2ZpcnN0 LnByZXYgPSBOVUxMOw0KPiA+Pj4+IC0gIHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgPSBOVUxMOw0K PiA+Pj4+IC0gIHJlY29yZF9mdWxsX2ZpcnN0LnR5cGUgPSByZWNvcmRfZnVsbF9lbmQ7DQo+ID4+ Pj4gLQ0KPiA+Pj4+ICAgICAgYWRkX3RhcmdldCAocmVjb3JkX2Z1bGxfdGFyZ2V0X2luZm8sIHJl Y29yZF9mdWxsX29wZW4pOw0KPiA+Pj4+ICAgICAgYWRkX2RlcHJlY2F0ZWRfdGFyZ2V0X2FsaWFz IChyZWNvcmRfZnVsbF90YXJnZXRfaW5mbywgInJlY29yZCIpOw0KPiA+Pj4+ICAgICAgYWRkX3Rh cmdldCAocmVjb3JkX2Z1bGxfY29yZV90YXJnZXRfaW5mbywgcmVjb3JkX2Z1bGxfb3Blbik7DQo+ ID4+Pj4gZGlmZiAtLWdpdCBhL2dkYi9yZWNvcmQtZnVsbC5oIGIvZ2RiL3JlY29yZC1mdWxsLmgN Cj4gPj4+PiBpbmRleCA1MWVmZmU3NDU2MC4uYzMyN2Q4NzlhOGEgMTAwNjQ0DQo+ID4+Pj4gLS0t IGEvZ2RiL3JlY29yZC1mdWxsLmgNCj4gPj4+PiArKysgYi9nZGIvcmVjb3JkLWZ1bGwuaA0KPiA+ Pj4+IEBAIC00MSw3ICs0MSw2IEBAIGVudW0gcmVjb3JkX3Jlc3VsdA0KPiA+Pj4+DQo+ID4+Pj4g ICAgZXh0ZXJuIGludCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAoc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSwNCj4gaW50DQo+ID4+Pj4gbnVtKTsNCj4gPj4+PiAgICBleHRlcm4gaW50 IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxlbik7 DQo+ID4+Pj4gLWV4dGVybiBpbnQgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKHZvaWQp Ow0KPiA+Pj4+DQo+ID4+Pj4gICAgLyogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9jZXNzIHJlY29y ZCB0YXJnZXQgaXMgb3Blbi4gICovDQo+ID4+Pj4gICAgZXh0ZXJuIGludCByZWNvcmRfZnVsbF9p c191c2VkICh2b2lkKTsNCj4gPj4+PiBkaWZmIC0tZ2l0IGEvZ2RiL3Jpc2N2LXRkZXAuYyBiL2dk Yi9yaXNjdi10ZGVwLmMNCj4gPj4+PiBpbmRleCA2YjVjOWMwMmQ0Ni4uZjViMWY2Njg0NGMgMTAw NjQ0DQo+ID4+Pj4gLS0tIGEvZ2RiL3Jpc2N2LXRkZXAuYw0KPiA+Pj4+ICsrKyBiL2dkYi9yaXNj di10ZGVwLmMNCj4gPj4+PiBAQCAtNTQ2Niw4ICs1NDY2LDUgQEAgcmlzY3ZfcHJvY2Vzc19yZWNv cmQgKHN0cnVjdCBnZGJhcmNoDQo+ICpnZGJhcmNoLA0KPiA+Pj4+IHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsDQo+ID4+Pj4gICAgICBpZiAocmVzICE9IFJFQ09SRF9TVUNDRVNTKQ0KPiA+Pj4+ ICAgICAgICByZXR1cm4gcmVzOw0KPiA+Pj4+DQo+ID4+Pj4gLSAgaWYgKHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+Pj4+IC0gICAgcmV0dXJuIC0xOw0KPiA+Pj4+IC0NCj4g Pj4+PiAgICAgIHJldHVybiAwOw0KPiA+Pj4+ICAgIH0NCj4gPj4+PiBkaWZmIC0tZ2l0IGEvZ2Ri L3JzNjAwMC10ZGVwLmMgYi9nZGIvcnM2MDAwLXRkZXAuYw0KPiA+Pj4+IGluZGV4IGUxMzVkZjk0 YTQwLi5mOTY0ODg5YTQ5ZiAxMDA2NDQNCj4gPj4+PiAtLS0gYS9nZGIvcnM2MDAwLXRkZXAuYw0K PiA+Pj4+ICsrKyBiL2dkYi9yczYwMDAtdGRlcC5jDQo+ID4+Pj4gQEAgLTcxMzgsOCArNzEzOCw2 IEBAIHBwY19wcm9jZXNzX3ByZWZpeF9pbnN0cnVjdGlvbiAoaW50DQo+IGluc25fcHJlZml4LA0K PiA+PiBpbnQNCj4gPj4+PiBpbnNuX3N1ZmZpeCwNCj4gPj4+PiAgICAgIGlmIChyZWNvcmRfZnVs bF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUsIFBQQ19QQ19SRUdOVU0pKQ0KPiA+Pj4+ICAg ICAgICByZXR1cm4gLTE7DQo+ID4+Pj4NCj4gPj4+PiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9s aXN0X2FkZF9lbmQgKCkpDQo+ID4+Pj4gLSAgICByZXR1cm4gLTE7DQo+ID4+Pj4gICAgICByZXR1 cm4gMDsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiBAQCAtNzQ0Nyw4ICs3NDQ1LDYgQEAg cHBjX3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiAqZ2RiYXJjaCwNCj4gPj4+PiBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiA+Pj4+DQo+ID4+Pj4gICAgICBpZiAocmVjb3Jk X2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBQUENfUENfUkVHTlVNKSkNCj4gPj4+ PiAgICAgICAgcmV0dXJuIC0xOw0KPiA+Pj4+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3Rf YWRkX2VuZCAoKSkNCj4gPj4+PiAtICAgIHJldHVybiAtMTsNCj4gPj4+PiAgICAgIHJldHVybiAw Ow0KPiA+Pj4+ICAgIH0NCj4gPj4+Pg0KPiA+Pj4+IGRpZmYgLS1naXQgYS9nZGIvczM5MC1saW51 eC10ZGVwLmMgYi9nZGIvczM5MC1saW51eC10ZGVwLmMNCj4gPj4+PiBpbmRleCAzY2Q2YjM1OWQx My4uNmJlYTMwZjA4ZGMgMTAwNjQ0DQo+ID4+Pj4gLS0tIGEvZ2RiL3MzOTAtbGludXgtdGRlcC5j DQo+ID4+Pj4gKysrIGIvZ2RiL3MzOTAtbGludXgtdGRlcC5jDQo+ID4+Pj4gQEAgLTkxMCw5ICs5 MTAsNiBAQCBzMzkwX2xpbnV4X3JlY29yZF9zaWduYWwgKHN0cnVjdCBnZGJhcmNoDQo+ID4+ICpn ZGJhcmNoLA0KPiA+Pj4+IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+ID4+Pj4gICAgICBp ZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9tZW0gKHNwLCBzaXplb2ZfcnRfc2lnZnJhbWUp KQ0KPiA+Pj4+ICAgICAgICByZXR1cm4gLTE7DQo+ID4+Pj4NCj4gPj4+PiAtICBpZiAocmVjb3Jk X2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+ID4+Pj4gLSAgICByZXR1cm4gLTE7DQo+ID4+ Pj4gLQ0KPiA+Pj4+ICAgICAgcmV0dXJuIDA7DQo+ID4+Pj4gICAgfQ0KPiA+Pj4+DQo+ID4+Pj4g ZGlmZiAtLWdpdCBhL2dkYi9zMzkwLXRkZXAuYyBiL2dkYi9zMzkwLXRkZXAuYw0KPiA+Pj4+IGlu ZGV4IGY5ZDdiZGQwNGU0Li4zNmNlNjU5ZWExNSAxMDA2NDQNCj4gPj4+PiAtLS0gYS9nZGIvczM5 MC10ZGVwLmMNCj4gPj4+PiArKysgYi9nZGIvczM5MC10ZGVwLmMNCj4gPj4+PiBAQCAtNzAxOSw4 ICs3MDE5LDYgQEAgczM5MF9wcm9jZXNzX3JlY29yZCAoc3RydWN0IGdkYmFyY2gNCj4gKmdkYmFy Y2gsDQo+ID4+Pj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gPj4+Pg0KPiA+Pj4+ICAg ICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgUzM5MF9QU1dB X1JFR05VTSkpDQo+ID4+Pj4gICAgICAgIHJldHVybiAtMTsNCj4gPj4+PiAtICBpZiAocmVjb3Jk X2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+ID4+Pj4gLSAgICByZXR1cm4gLTE7DQo+ID4+ Pj4gICAgICByZXR1cm4gMDsNCj4gPj4+PiAgICB9DQo+ID4+Pj4NCj4gPj4+PiAtLQ0KPiA+Pj4+ IDIuNTMuMA0KPiA+Pj4+DQo+ID4+PiBLaW5kIFJlZ2FyZHMsDQo+ID4+PiBDaHJpc3RpbmENCj4g Pj4+DQo+ID4+PiBJbnRlbCBEZXV0c2NobGFuZCBHbWJIDQo+ID4+PiBSZWdpc3RlcmVkIEFkZHJl c3M6IERvcm5hY2hlciBTdHJhc3NlIDEsIDg1NjIyIEZlbGRraXJjaGVuLCBHZXJtYW55DQo+ID4+ PiBUZWw6ICs0OSA4OSA5OTEgNDMwLCB3d3cuaW50ZWwuZGUNCj4gPj4+IE1hbmFnaW5nIERpcmVj dG9yczogSGFycnkgRGVtYXMsIEplZmZyZXkgU2NobmVpZGVybWFuLCBZaW4gQ2hvbmcNCj4gU29y cmVsbA0KPiA+Pj4gQ2hhaXJwZXJzb24gb2YgdGhlIFN1cGVydmlzb3J5IEJvYXJkOiBOaWNvbGUg TGF1DQo+ID4+PiBSZWdpc3RlcmVkIFNlYXQ6IE11bmljaA0KPiA+Pj4gQ29tbWVyY2lhbCBSZWdp c3RlcjogQW10c2dlcmljaHQgTXVlbmNoZW4gSFJCIDE4NjkyOA0KPiA+Pj4NCj4gPiBDaHJpc3Rp bmENCj4gPiBJbnRlbCBEZXV0c2NobGFuZCBHbWJIDQo+ID4gUmVnaXN0ZXJlZCBBZGRyZXNzOiBE b3JuYWNoZXIgU3RyYXNzZSAxLCA4NTYyMiBGZWxka2lyY2hlbiwgR2VybWFueQ0KPiA+IFRlbDog KzQ5IDg5IDk5MSA0MzAsIHd3dy5pbnRlbC5kZQ0KPiA+IE1hbmFnaW5nIERpcmVjdG9yczogSGFy cnkgRGVtYXMsIEplZmZyZXkgU2NobmVpZGVybWFuLCBZaW4gQ2hvbmcgU29ycmVsbA0KPiA+IENo YWlycGVyc29uIG9mIHRoZSBTdXBlcnZpc29yeSBCb2FyZDogTmljb2xlIExhdQ0KPiA+IFJlZ2lz dGVyZWQgU2VhdDogTXVuaWNoDQo+ID4gQ29tbWVyY2lhbCBSZWdpc3RlcjogQW10c2dlcmljaHQg TXVlbmNoZW4gSFJCIDE4NjkyOA0KPiA+DQo+IA0KPiAtLQ0KPiBDaGVlcnMsDQo+IEd1aW5ldmVy ZSBMYXJzZW4NCj4gSXQvc2hlDQoNCkNocmlzdGluYQ0KDQpJbnRlbCBEZXV0c2NobGFuZCBHbWJI DQpSZWdpc3RlcmVkIEFkZHJlc3M6IERvcm5hY2hlciBTdHJhc3NlIDEsIDg1NjIyIEZlbGRraXJj aGVuLCBHZXJtYW55DQpUZWw6ICs0OSA4OSA5OTEgNDMwLCB3d3cuaW50ZWwuZGUNCk1hbmFnaW5n IERpcmVjdG9yczogSGFycnkgRGVtYXMsIEplZmZyZXkgU2NobmVpZGVybWFuLCBZaW4gQ2hvbmcg U29ycmVsbA0KQ2hhaXJwZXJzb24gb2YgdGhlIFN1cGVydmlzb3J5IEJvYXJkOiBOaWNvbGUgTGF1 DQpSZWdpc3RlcmVkIFNlYXQ6IE11bmljaA0KQ29tbWVyY2lhbCBSZWdpc3RlcjogQW10c2dlcmlj aHQgTXVlbmNoZW4gSFJCIDE4NjkyOAo=