From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id IBvaJlpeXGcchxUAWB0awg (envelope-from ) for ; Fri, 13 Dec 2024 11:18:34 -0500 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=E4qxAGZN; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 9A8091E0BB; Fri, 13 Dec 2024 11:18:34 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.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 autolearn=unavailable autolearn_force=no version=4.0.0 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 F18971E092 for ; Fri, 13 Dec 2024 11:18:31 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9F0EE3858C66 for ; Fri, 13 Dec 2024 16:18:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F0EE3858C66 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=E4qxAGZN Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by sourceware.org (Postfix) with ESMTPS id DD0E03858C32 for ; Fri, 13 Dec 2024 16:01:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DD0E03858C32 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 DD0E03858C32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.16 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1734105695; cv=none; b=JzvXxsCq5ntbO3dLkxop3QyQ8ZmjQFTrMreQgCkOXlagKO2dhOgXKxOlPFPZXBOOXpkduHAoq5xRkdjLv2Dh2iDzUYcutRFFgriuFRr0l3p+yELckjWRrAYE8EOTQppRYvaUtDqMmBXh0N0R08Fm1TgDPREQ2d4d7rXDxdItFdc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1734105695; c=relaxed/simple; bh=PA7nWUgnQcHRIfJJYCB2jz0+EFUDJaTqqJXJuPUgOZ0=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=Z9yX9+HDTT37dlYpXOJ5H/vu8+vKn0mqRVdmvhXbvrcAZKidwgiNFoXiTlZSGisq0mkIS//od2RbrNFQ1zUMzkKTPdMceVTmpZwdYQjEawt7wRyELBE2PnphCjdA89ky2zmskMkH494KIifRxQZDKDE6Ejz+yi56rkZentSEz/Y= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DD0E03858C32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1734105690; x=1765641690; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=PA7nWUgnQcHRIfJJYCB2jz0+EFUDJaTqqJXJuPUgOZ0=; b=E4qxAGZN246R02/qG7/S4EFjAEb4Ho9KxTptGf8zay870Q0KQS4wj7mw Ie1cBboEJukBxZkUI82OkASuyScrwA1ZFHe8D9GRqqdQmqHbUCDLxOVy3 a+eIXy1dPFKBrU/L1RwUWSLOtqbXEJq3rgd++cBo5S0OWU6/ZKLO5tly+ CO4iwfD5m9uYgMjghmWxfn4Gct5vW4/Q2/q8IB/Vqes3+BIUa5qoAboqN J4d54DeZ/4FdOVKm5mWBOiPVEAZfPOoyv+6svshgh0B3+evkG4MeJP4H2 GrZu6cw22Rkca1gHRtbjvL1Yg4fu8QPy9i+MON6Apd9JrjAuw6At4H8Sr w==; X-CSE-ConnectionGUID: H0AKQT4NRzGzD2IeljiXpw== X-CSE-MsgGUID: wgfKfdH0S+GdfQoWytPy6Q== X-IronPort-AV: E=McAfee;i="6700,10204,11285"; a="22149461" X-IronPort-AV: E=Sophos;i="6.12,231,1728975600"; d="scan'208";a="22149461" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2024 08:01:24 -0800 X-CSE-ConnectionGUID: PeiDA/3vQD6DRcUiV1eqYA== X-CSE-MsgGUID: xXEbB/rcQKyz/iQqbTYR2Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,231,1728975600"; d="scan'208";a="101411925" Received: from gkldtt-dev-004.igk.intel.com (HELO localhost) ([10.123.221.202]) by fmviesa004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2024 08:01:22 -0800 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org, Markus Metzger Subject: [PATCH v2 06/47] gdb, intelgt: add the target-dependent definitions for the Intel GT architecture Date: Fri, 13 Dec 2024 16:59:23 +0100 Message-Id: <20241213-upstream-intelgt-mvp-v2-6-5c4caeb7b33d@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241213-upstream-intelgt-mvp-v2-0-5c4caeb7b33d@intel.com> References: <20241213-upstream-intelgt-mvp-v2-0-5c4caeb7b33d@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.2 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 SW50cm9kdWNlIGdkYi9pbnRlbGd0LXRkZXAuYyBmb3IgdGhlIEludGVsIEdUIHRhcmdldC4gIFRo ZSB0YXJnZXQgaXMKZGVmaW5lZCBpbiBhIGZ1dHVyZSBwYXRjaCBhcyBhIGdkYnNlcnZlciBsb3cg dGFyZ2V0IGltcGxlbWVudGF0aW9uLgoKT3RoZXIgdGhhbiwgZm9yIGV4YW1wbGUsIFg4Ni02NCwg SW50ZWxHVCBkb2VzIG5vdCBoYXZlIGEgZGVkaWNhdGVkCmJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24u ICBJbnN0ZWFkLCBpdCBoYXMgYSBicmVha3BvaW50IGJpdCBpbiBlYWNoCmluc3RydWN0aW9uLiAg SGVuY2UsIGFueSBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBhcyBhIGJyZWFrcG9pbnQKaW5zdHJ1 Y3Rpb24uCgpJdCBmdXJ0aGVyIHN1cHBvcnRzIGlnbm9yaW5nIGJyZWFrcG9pbnRzIGZvciBzdGVw cGluZyBvdmVyIG9yIHJlc3VtaW5nCmZyb20gYSBicmVha3BvaW50LiAgVGhpcyBvbmx5IHdvcmtz LCBvZiBjb3Vyc2UsIGlmIHdlIHVzZSBicmVha3BvaW50CmJpdHMgaW5zaWRlIHRoZSBvcmlnaW5h bCBpbnN0cnVjdGlvbiByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQgd2l0aCBhCmZpeGVkIGJyZWFr cG9pbnQgaW5zdHJ1Y3Rpb24uCgpBZGQgZ2RiYXJjaCBtZXRob2RzIGZvciBpbnNlcnRpbmcgYW5k IHJlbW92aW5nIG1lbW9yeSBicmVha3BvaW50cyBieQpzZXR0aW5nIGFuZCBjbGVhcmluZyB0aG9z ZSBicmVha3BvaW50IGJpdHMuCgpXZSBkZWZpbmUgb25lIHBzZXVkby1yZWdpc3RlciwgJGZyYW1l ZGVzYywgdGhhdCBwcm92aWRlcyBhIHR5cGUgYWxpYXMKZm9yIHRoZSBmcmFtZSBkZXNjcmlwdG9y IHJlZ2lzdGVyIGluIEdSRiwgcmVwcmVzZW50aW5nIGl0IGFzIGEgc3RydWN0LgoKVGhlIHZhbHVl IG9mIHRoZSAkcGMgcmVnaXN0ZXIgaXMgdGhlICRpcCByZWdpc3Rlciwgd2hpY2ggaXMgcHJvdmlk ZWQKaW4gJGNyMC4yLCBvZmZzZXQgYnkgJGlzYWJhc2UuCgpBIHRyYW5zbGF0aW9uIGZ1bmN0aW9u IHRvIG1hcCB0aGUgZGV2aWNlX2lkIHRvIGEgZ2VuX3ZlcnNpb24gaXMKcHJvdmlkZWQuICBUaGlz IHdpbGwgYmUgdXNlZnVsIGluIHZhcmlvdXMgcGxhY2VzLCBpbiBwYXJ0aWN1bGFyIHRvCmdlbmVy YXRlIHRoZSBjb3JyZWN0IGRpc2Fzc2VtYmx5LgoKQ28tYXV0aG9yZWQtYnk6IE1hcmt1cyBNZXR6 Z2VyIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IE5hdGFsaWEg U2FpYXBvdmEgPG5hdGFsaWEuc2FpYXBvdmFAaW50ZWwuY29tPgpDby1hdXRob3JlZC1ieTogTWlo YWlscyBTdHJhc3VucyA8bWloYWlscy5zdHJhc3Vuc0BpbnRlbC5jb20+CkNvLWF1dGhvcmVkLWJ5 OiBNb2hhbWVkIEJvdWhhb3VlbCA8bW9oYW1lZC5ib3VoYW91ZWxAaW50ZWwuY29tPgotLS0KIGdk Yi9NYWtlZmlsZS5pbiAgICB8ICAgMSArCiBnZGIvY29uZmlndXJlLnRndCAgfCAgIDUgKwogZ2Ri L2ludGVsZ3QtdGRlcC5jIHwgOTgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBnZGIvcmVnY2FjaGUuYyAgICAgfCAgIDYgKy0KIDQgZmlsZXMg Y2hhbmdlZCwgOTkxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9n ZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KaW5kZXggODJlMDM1ZmEwMmEyOWVjMDcz YzNhOTA5Mzk3YWNhNzVkODJlNGE4OS4uMDUyODBjNzc4N2U0NjdiMmNiN2IwNjNkODkzYjFjMzk0 YjUwNmMxMiAxMDA2NDQKLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKyBiL2dkYi9NYWtlZmlsZS5p bgpAQCAtNzU3LDYgKzc1Nyw3IEBAIEFMTF82NF9UQVJHRVRfT0JTID0gXAogCWlhNjQtbGludXgt dGRlcC5vIFwKIAlpYTY0LXRkZXAubyBcCiAJaWE2NC12bXMtdGRlcC5vIFwKKwlpbnRlbGd0LXRk ZXAubyBcCiAJbG9vbmdhcmNoLWxpbnV4LXRkZXAubyBcCiAJbG9vbmdhcmNoLXRkZXAubyBcCiAJ bWlwcy1mYnNkLXRkZXAubyBcCmRpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLnRndCBiL2dkYi9j b25maWd1cmUudGd0CmluZGV4IGY3YjllMzJjYmE5NzY3MWEyYjJkNTljMDU0ZWIyZmY5NmVmOTE5 ZGUuLmEwOTBmZTc4YzVlZTUzZjNiMTA3OThkYWU5ZTBiNDRmMzM5YjRmYmIgMTAwNjQ0Ci0tLSBh L2dkYi9jb25maWd1cmUudGd0CisrKyBiL2dkYi9jb25maWd1cmUudGd0CkBAIC0zNTIsNiArMzUy LDExIEBAIGlhNjQtKi0qdm1zKikKIAlnZGJfdGFyZ2V0X29icz0iaWE2NC12bXMtdGRlcC5vIgog CTs7CiAKK2ludGVsZ3QtKi1lbGYpCisJIyBUYXJnZXQ6IEludGVsKFIpIEdyYXBoaWNzIFRlY2hu b2xvZ3kgZ3JhcGhpY3MgcHJvY2Vzc29yCisJZ2RiX3RhcmdldF9vYnM9ImludGVsZ3QtdGRlcC5v IGFyY2gvaW50ZWxndC5vIgorCTs7CisKIGlxMjAwMC0qLSopCiAJZ2RiX3RhcmdldF9vYnM9Imlx MjAwMC10ZGVwLm8iCiAJOzsKZGlmZiAtLWdpdCBhL2dkYi9pbnRlbGd0LXRkZXAuYyBiL2dkYi9p bnRlbGd0LXRkZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2MzNTliZjM1NWM1NzcxZGIzOGI4ZDIxM2Y2Njgx YTA0M2MyYjMzCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2ludGVsZ3QtdGRlcC5jCkBAIC0wLDAg KzEsOTgwIEBACisvKiBUYXJnZXQtZGVwZW5kZW50IGNvZGUgZm9yIHRoZSBJbnRlbChSKSBHcmFw aGljcyBUZWNobm9sb2d5IGFyY2hpdGVjdHVyZS4KKworICAgQ29weXJpZ2h0IChDKSAyMDE5LTIw MjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImFy Y2gtdXRpbHMuaCIKKyNpbmNsdWRlICJhcmNoL2ludGVsZ3QuaCIKKyNpbmNsdWRlICJjbGkvY2xp LWNtZHMuaCIKKyNpbmNsdWRlICJkd2FyZjIvZnJhbWUuaCIKKyNpbmNsdWRlICJmcmFtZS11bndp bmQuaCIKKyNpbmNsdWRlICJnZGJzdXBwb3J0L2dkYl9vYnN0YWNrLmgiCisjaW5jbHVkZSAiZ2Ri dHlwZXMuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRp b25zLmgiCisjaW5jbHVkZSAidmFsdWUuaCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNs dWRlICJpbmZlcmlvci5oIgorI2luY2x1ZGUgInVzZXItcmVncy5oIgorI2luY2x1ZGUgPGFsZ29y aXRobT4KKworLyogR2xvYmFsIGRlYnVnIGZsYWcuICAqLworc3RhdGljIGJvb2wgaW50ZWxndF9k ZWJ1ZyA9IGZhbHNlOworCisvKiBQcmludCBhbiAiaW50ZWxndCIgZGVidWcgc3RhdGVtZW50LiAg Ki8KKworI2RlZmluZSBpbnRlbGd0X2RlYnVnX3ByaW50ZihmbXQsIC4uLikgXAorICBkZWJ1Z19w cmVmaXhlZF9wcmludGZfY29uZCAoaW50ZWxndF9kZWJ1ZywgImludGVsZ3QiLCBmbXQsICMjX19W QV9BUkdTX18pCisKKy8qIFJlZ251bSBwYWlyIGRlc2NyaWJpbmcgdGhlIGFzc2lnbmVkIHJlZ251 bSByYW5nZSBmb3IgYSBzaW5nbGUKKyAgIHJlZ3NldC4gIFNUQVJUIGlzIGluY2x1c2l2ZSwgRU5E IGlzIGV4Y2x1c2l2ZS4gICovCisKK3N0cnVjdCByZWdudW1fcmFuZ2UKK3sKKyAgaW50IHN0YXJ0 OworICBpbnQgZW5kOworfTsKKworLyogVGhlIGVuY29kaW5nIGZvciBYRSB2ZXJzaW9uIGVudW1l cmF0ZXMgZm9sbG93cyB0aGlzIHBhdHRlcm4sIHdoaWNoIGlzCisgICBhbGlnbmVkIHdpdGggdGhl IElHQSBlbmNvZGluZy4gICovCisKKyNkZWZpbmUgWEVfVkVSU0lPTihNQUosIE1JTikgKCgoTUFK KSA8PCAyNCkgfCAoTUlOKSkKKworLyogU3VwcG9ydGVkIEdEQiBHRU4gcGxhdGZvcm1zLiAgKi8K KworZW51bSB4ZV92ZXJzaW9uCit7CisgIFhFX0lOVkFMSUQgPSAwLAorICBYRV9IUCA9IFhFX1ZF UlNJT04gKDEsIDEpLAorICBYRV9IUEcgPSBYRV9WRVJTSU9OICgxLCAyKSwKKyAgWEVfSFBDID0g WEVfVkVSU0lPTiAoMSwgNCksCisgIFhFMiA9IFhFX1ZFUlNJT04gKDIsIDApLAorfTsKKworLyog SGVscGVyIGZ1bmN0aW9ucyB0byByZXF1ZXN0IGFuZCB0cmFuc2xhdGUgdGhlIGRldmljZSBpZC92 ZXJzaW9uLiAgKi8KKworW1ttYXliZV91bnVzZWRdXSBzdGF0aWMgeGVfdmVyc2lvbiBnZXRfeGVf dmVyc2lvbiAodW5zaWduZWQgaW50IGRldmljZV9pZCk7CisKKy8qIERhdGEgc3BlY2lmaWMgZm9y IHRoaXMgYXJjaGl0ZWN0dXJlLiAgKi8KKworc3RydWN0IGludGVsZ3RfZ2RiYXJjaF90ZGVwIDog Z2RiYXJjaF90ZGVwX2Jhc2UKK3sKKyAgLyogJHIwIEdSRiByZWdpc3RlciBudW1iZXIuICAqLwor ICBpbnQgcjBfcmVnbnVtID0gLTE7CisKKyAgLyogJGNlIHJlZ2lzdGVyIG51bWJlciBpbiB0aGUg cmVnY2FjaGUuICAqLworICBpbnQgY2VfcmVnbnVtID0gLTE7CisKKyAgLyogUmVnaXN0ZXIgbnVt YmVyIGZvciB0aGUgR1JGIGNvbnRhaW5pbmcgZnVuY3Rpb24gcmV0dXJuIHZhbHVlLiAgKi8KKyAg aW50IHJldHZhbF9yZWdudW0gPSAtMTsKKworICAvKiBSZWdpc3RlciBudW1iZXIgZm9yIHRoZSBj b250cm9sIHJlZ2lzdGVyLiAgKi8KKyAgaW50IGNyMF9yZWdudW0gPSAtMTsKKworICAvKiBSZWdp c3RlciBudW1iZXIgZm9yIHRoZSBzdGF0ZSByZWdpc3Rlci4gICovCisgIGludCBzcjBfcmVnbnVt ID0gLTE7CisKKyAgLyogUmVnaXN0ZXIgbnVtYmVyIGZvciB0aGUgaW5zdHJ1Y3Rpb24gYmFzZSB2 aXJ0dWFsIHJlZ2lzdGVyLiAgKi8KKyAgaW50IGlzYWJhc2VfcmVnbnVtID0gLTE7CisKKyAgLyog UmVnaXN0ZXIgbnVtYmVyIGZvciB0aGUgZ2VuZXJhbCBzdGF0ZSBiYXNlIFNCQSByZWdpc3Rlci4g ICovCisgIGludCBnZW5zdGJhc2VfcmVnbnVtID0gLTE7CisKKyAgLyogUmVnaXN0ZXIgbnVtYmVy IGZvciB0aGUgREJHMCByZWdpc3Rlci4gICovCisgIGludCBkYmcwX3JlZ251bSA9IC0xOworCisg IC8qIEFzc2lnbmVkIHJlZ251bSByYW5nZXMgZm9yIERXQVJGIHJlZ3NldHMuICAqLworICByZWdu dW1fcmFuZ2UgcmVnc2V0X3Jhbmdlc1tpbnRlbGd0OjpSRUdTRVRfQ09VTlRdOworCisgIC8qIEVu YWJsZWQgcHNldWRvLXJlZ2lzdGVycyBmb3IgdGhlIGN1cnJlbnQgdGFyZ2V0IGRlc2NyaXB0aW9u LiAgKi8KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVuYWJsZWRfcHNldWRvX3JlZ3M7CisK KyAgLyogQ2FjaGVkICRmcmFtZWRlc2MgcHNldWRvLXJlZ2lzdGVyIHR5cGUuICAqLworICB0eXBl ICpmcmFtZWRlc2NfdHlwZSA9IG51bGxwdHI7CisKKyAgLyogSW5pdGlhbGl6ZSByYW5nZXMgdG8g LTEgYXMgIm5vdC15ZXQtc2V0IiBpbmRpY2F0b3IuICAqLworICBpbnRlbGd0X2dkYmFyY2hfdGRl cCAoKQorICB7CisgICAgbWVtc2V0ICgmcmVnc2V0X3JhbmdlcywgLTEsIHNpemVvZiByZWdzZXRf cmFuZ2VzKTsKKyAgfQorCisgIC8qIFJldHVybiByZWdudW0gd2hlcmUgZnJhbWUgZGVzY3JpcHRv cnMgYXJlIHN0b3JlZC4gICovCisgIGludCBmcmFtZWRlc2NfYmFzZV9yZWdudW0gKCkKKyAgewor ICAgIC8qIEZvciBFTV9JTlRFTEdUIGZyYW1lIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgYXQgTUFY X0dSRiAtIDEuICAqLworICAgIGdkYl9hc3NlcnQgKHJlZ3NldF9yYW5nZXNbaW50ZWxndDo6UkVH U0VUX0dSRl0uZW5kID4gMSk7CisgICAgcmV0dXJuIHJlZ3NldF9yYW5nZXNbaW50ZWxndDo6UkVH U0VUX0dSRl0uZW5kIC0gMTsKKyAgfQorfTsKKworLyogVGhlICdyZWdpc3Rlcl90eXBlJyBnZGJh cmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyB0eXBlICoKK2ludGVsZ3RfcmVnaXN0ZXJfdHlwZSAo Z2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ25vKQoreworICB0eXBlICp0eXAgPSB0ZGVzY19yZWdp c3Rlcl90eXBlIChnZGJhcmNoLCByZWdubyk7CisgIHJldHVybiB0eXA7Cit9CisKKy8qIFJlYWQg cGFydCBvZiBSRUdOVU0gYXQgT0ZGU0VUIGludG8gQlVGRkVSLiAgVGhlIGxlbmd0aCBvZiBkYXRh IHRvCisgICByZWFkIGlzIFNJWkUuICBDb25zaWRlciB1c2luZyB0aGlzIGhlbHBlciBmdW5jdGlv biB3aGVuIHJlYWRpbmcKKyAgIHN1YnJlZ2lzdGVycyBvZiBDUjAsIFNSMCwgYW5kIFIwLiAgKi8K Kworc3RhdGljIHZvaWQKK2ludGVsZ3RfcmVhZF9yZWdpc3Rlcl9wYXJ0IChyZWFkYWJsZV9yZWdj YWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0sCisJCQkgICAgc2l6ZV90IG9mZnNldCwKKwkJCSAg ICBnZGI6OmFycmF5X3ZpZXc8Z2RiX2J5dGU+IGJ1ZmZlciwKKwkJCSAgICBjb25zdCBjaGFyICpl cnJvcl9tZXNzYWdlKQoreworICBpZiAocmVnbnVtID09IC0xKQorICAgIGVycm9yIChfKCIlcyAg VW5leHBlY3RlZCByZWcgbnVtICctMScuIiksIGVycm9yX21lc3NhZ2UpOworCisgIGdkYmFyY2gg KmFyY2ggPSByZWdjYWNoZS0+YXJjaCAoKTsKKyAgY29uc3QgY2hhciAqcmVnbmFtZSA9IGdkYmFy Y2hfcmVnaXN0ZXJfbmFtZSAoYXJjaCwgcmVnbnVtKTsKKyAgaW50IHJlZ3NpemUgPSByZWdpc3Rl cl9zaXplIChhcmNoLCByZWdudW0pOworCisgIGlmIChvZmZzZXQgKyBidWZmZXIuc2l6ZSAoKSA+ IHJlZ3NpemUpCisgICAgZXJyb3IgKF8oIiVzWyV6dTolenVdIGlzIG91dHNpZGUgdGhlIHJhbmdl IG9mICVzWyVkOjBdLiIpLAorCSAgIHJlZ25hbWUsIChvZmZzZXQgKyBidWZmZXIuc2l6ZSAoKSAt IDEpLCBvZmZzZXQsCisJICAgcmVnbmFtZSwgKHJlZ3NpemUgLSAxKSk7CisKKyAgcmVnaXN0ZXJf c3RhdHVzIHJlZ19zdGF0dXMKKyAgICA9IHJlZ2NhY2hlLT5jb29rZWRfcmVhZF9wYXJ0IChyZWdu dW0sIG9mZnNldCwgYnVmZmVyKTsKKworICBpZiAocmVnX3N0YXR1cyA9PSBSRUdfVU5BVkFJTEFC TEUpCisgICAgdGhyb3dfZXJyb3IgKE5PVF9BVkFJTEFCTEVfRVJST1IsCisJCSBfKCIlcyAgUmVn aXN0ZXIgJXMgKCVkKSBpcyBub3QgYXZhaWxhYmxlLiIpLAorCQkgZXJyb3JfbWVzc2FnZSwgcmVn bmFtZSwgcmVnbnVtKTsKKworICBpZiAocmVnX3N0YXR1cyA9PSBSRUdfVU5LTk9XTikKKyAgICBl cnJvciAoXygiJXMgIFJlZ2lzdGVyICVzICglZCkgaXMgdW5rbm93bi4iKSwgZXJyb3JfbWVzc2Fn ZSwKKwkgICByZWduYW1lLCByZWdudW0pOworfQorCitzdGF0aWMgaW50CitpbnRlbGd0X3BzZXVk b19yZWdpc3Rlcl9udW0gKGdkYmFyY2ggKmFyY2gsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBD b252ZXJ0IGEgRFdBUkYgcmVnaXN0ZXIgbnVtYmVyIHRvIGEgR0RCIHJlZ2lzdGVyIG51bWJlci4g IFRoaXMKKyAgIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSByZWdpc3RlciBsaXN0aW5nIGluIHRoZSB0 YXJnZXQgZGVzY3JpcHRpb24gdG8KKyAgIGJlIGluIHRoZSBzYW1lIG9yZGVyIGluIGVhY2ggcmVn c2V0IGFzIHRoZSBpbnRlbmRlZCBEV0FSRiBudW1iZXJpbmcKKyAgIG9yZGVyLiAgQ3VycmVudGx5 IHRoaXMgYWx3YXlzIGhvbGRzIHRydWUgd2hlbiBnZGJzZXJ2ZXIgZ2VuZXJhdGVzCisgICB0aGUg dGFyZ2V0IGRlc2NyaXB0aW9uLiAgKi8KKworc3RhdGljIGludAoraW50ZWxndF9kd2FyZl9yZWdf dG9fcmVnbnVtIChnZGJhcmNoICpnZGJhcmNoLCBpbnQgbnVtKQoreworICBjb25zdGV4cHIgaW50 IGlwID0gMDsKKyAgY29uc3RleHByIGludCBjZSA9IDE7CisKKyAgLyogUmVnaXN0ZXIgc2V0cyBm b2xsb3cgdGhpcyBmb3JtYXQ6IFtTVEFSVCwgRU5EKSwgd2hlcmUgU1RBUlQgaXMKKyAgICAgaW5j bHVzaXZlIGFuZCBFTkQgaXMgZXhjbHVzaXZlLiAgKi8KKyAgY29uc3RleHByIHJlZ251bV9yYW5n ZSBkd2FyZl9udW1zW2ludGVsZ3Q6OlJFR1NFVF9DT1VOVF0gPSB7CisgICAgW2ludGVsZ3Q6OlJF R1NFVF9TQkFdID0geyA1LCAxMiB9LAorICAgIFtpbnRlbGd0OjpSRUdTRVRfR1JGXSA9IHsgMTYs IDI3MiB9LAorICAgIFtpbnRlbGd0OjpSRUdTRVRfQUREUl0gPSB7IDI3MiwgMjg4IH0sCisgICAg W2ludGVsZ3Q6OlJFR1NFVF9GTEFHXSA9IHsgMjg4LCAzMDQgfSwKKyAgICBbaW50ZWxndDo6UkVH U0VUX0FDQ10gPSB7IDMwNCwgMzIwIH0sCisgICAgW2ludGVsZ3Q6OlJFR1NFVF9NTUVdID0geyAz MjAsIDMzNiB9LAorICB9OworCisgIC8qIE51bWJlciBvZiBTQkEgcmVnaXN0ZXJzLiAgKi8KKyAg Y29uc3RleHByIHNpemVfdCBzYmFfZHdhcmZfbGVuID0gZHdhcmZfbnVtc1tpbnRlbGd0OjpSRUdT RVRfU0JBXS5lbmQKKyAgICAtIGR3YXJmX251bXNbaW50ZWxndDo6UkVHU0VUX1NCQV0uc3RhcnQ7 CisKKyAgLyogTWFwIHRoZSBEV0FSRiByZWdpc3RlciBudW1iZXJzIG9mIFNCQSByZWdpc3RlcnMg dG8gdGhlaXIgbmFtZXMuCisgICAgIEJhc2UgbnVtYmVyIGlzIGR3YXJmX251bXNbaW50ZWxndDo6 UkVHU0VUX1NCQV0uc3RhcnQuICAqLworICBjb25zdGV4cHIgY29uc3QgY2hhciogc2JhX2R3YXJm X3JlZ19vcmRlcltzYmFfZHdhcmZfbGVuXSB7CisgICAgImJ0YmFzZSIsCisgICAgInNjcmJhc2Ui LAorICAgICJnZW5zdGJhc2UiLAorICAgICJzdXN0YmFzZSIsCisgICAgImJsc3VzdGJhc2UiLAor ICAgICJibHNhc3RiYXNlIiwKKyAgICAic2NyYmFzZTIiCisgIH07CisKKyAgaW50ZWxndF9nZGJh cmNoX3RkZXAgKmRhdGEKKyAgICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFyY2hfdGRlcD4g KGdkYmFyY2gpOworCisgIGlmIChudW0gPT0gaXApCisgICAgcmV0dXJuIGludGVsZ3RfcHNldWRv X3JlZ2lzdGVyX251bSAoZ2RiYXJjaCwgImlwIik7CisgIGlmIChudW0gPT0gY2UpCisgICAgcmV0 dXJuIGRhdGEtPmNlX3JlZ251bTsKKworICBmb3IgKGludCByZWdzZXQgPSAwOyByZWdzZXQgPCBp bnRlbGd0OjpSRUdTRVRfQ09VTlQ7ICsrcmVnc2V0KQorICAgIGlmIChudW0gPj0gZHdhcmZfbnVt c1tyZWdzZXRdLnN0YXJ0ICYmIG51bSA8IGR3YXJmX251bXNbcmVnc2V0XS5lbmQpCisgICAgICB7 CisJaWYgKHJlZ3NldCA9PSBpbnRlbGd0OjpSRUdTRVRfU0JBKQorCSAgeworCSAgICAvKiBGb3Ig U0JBIHJlZ2lzdGVycyB3ZSBmaXJzdCBmaW5kIG91dCB0aGUgbmFtZSBvZiB0aGUgcmVnaXN0ZXIK KwkgICAgICAgb3V0IG9mIERXQVJGIHJlZ2lzdGVyIG51bWJlciBhbmQgdGhlbiBmaW5kIHRoZSBy ZWdpc3RlciBudW1iZXIKKwkgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZS4gICovCisJ ICAgIGludCBzYmFfbnVtID0gbnVtIC0gZHdhcmZfbnVtc1tpbnRlbGd0OjpSRUdTRVRfU0JBXS5z dGFydDsKKwkgICAgY29uc3QgY2hhciogbmFtZSA9IHNiYV9kd2FyZl9yZWdfb3JkZXIgW3NiYV9u dW1dOworCisJICAgIHJldHVybiB1c2VyX3JlZ19tYXBfbmFtZV90b19yZWdudW0gKGdkYmFyY2gs IG5hbWUsIC0xKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGludCBjYW5kaWRhdGUgPSBkYXRh LT5yZWdzZXRfcmFuZ2VzW3JlZ3NldF0uc3RhcnQgKyBudW0KKwkgICAgICAtIGR3YXJmX251bXNb cmVnc2V0XS5zdGFydDsKKworCSAgICBpZiAoY2FuZGlkYXRlIDwgZGF0YS0+cmVnc2V0X3Jhbmdl c1tyZWdzZXRdLmVuZCkKKwkgICAgICByZXR1cm4gY2FuZGlkYXRlOworCSAgfQorICAgICAgfQor CisgIHJldHVybiAtMTsKK30KKworLyogUmV0dXJuIHRoZSBQQyBvZiB0aGUgZmlyc3QgcmVhbCBp bnN0cnVjdGlvbi4gICovCisKK3N0YXRpYyBDT1JFX0FERFIKK2ludGVsZ3Rfc2tpcF9wcm9sb2d1 ZSAoZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHN0YXJ0X3BjKQoreworICBpbnRlbGd0X2Rl YnVnX3ByaW50ZiAoInN0YXJ0X3BjOiAlcyIsIHBhZGRyZXNzIChnZGJhcmNoLCBzdGFydF9wYykp OworICBDT1JFX0FERFIgZnVuY19hZGRyOworCisgIGlmIChmaW5kX3BjX3BhcnRpYWxfZnVuY3Rp b24gKHN0YXJ0X3BjLCBudWxscHRyLCAmZnVuY19hZGRyLCBudWxscHRyKSkKKyAgICB7CisgICAg ICBDT1JFX0FERFIgcG9zdF9wcm9sb2d1ZV9wYworICAgICAgID0gc2tpcF9wcm9sb2d1ZV91c2lu Z19zYWwgKGdkYmFyY2gsIGZ1bmNfYWRkcik7CisKKyAgICAgIGludGVsZ3RfZGVidWdfcHJpbnRm ICgicG9zdCBwcm9sb2d1ZSBwYzogJXMiLAorCQkJICAgIHBhZGRyZXNzIChnZGJhcmNoLCBwb3N0 X3Byb2xvZ3VlX3BjKSk7CisKKyAgICAgIGlmIChwb3N0X3Byb2xvZ3VlX3BjICE9IDApCisgICAg ICAgcmV0dXJuIHN0ZDo6bWF4IChzdGFydF9wYywgcG9zdF9wcm9sb2d1ZV9wYyk7CisgICAgfQor CisgIC8qIENvdWxkIG5vdCBmaW5kIHRoZSBlbmQgb2YgcHJvbG9ndWUgdXNpbmcgU0FMLiAgKi8K KyAgcmV0dXJuIHN0YXJ0X3BjOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZGJhcmNoJ3Mg cmV0dXJuX3ZhbHVlIG1ldGhvZC4gICovCisKK3N0YXRpYyBlbnVtIHJldHVybl92YWx1ZV9jb252 ZW50aW9uCitpbnRlbGd0X3JldHVybl92YWx1ZV9hc192YWx1ZSAoZ2RiYXJjaCAqZ2RiYXJjaCwg dmFsdWUgKmZ1bmN0aW9uLAorCQkJICAgICAgIHR5cGUgKnZhbHR5cGUsIHJlZ2NhY2hlICpyZWdj YWNoZSwKKwkJCSAgICAgICB2YWx1ZSAqKnJlYWRfdmFsdWUsIGNvbnN0IGdkYl9ieXRlICp3cml0 ZWJ1ZikKK3sKKyAgZ2RiX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludGVsZ3RfcmV0dXJuX3ZhbHVl X2FzX3ZhbHVlIGlzIHRvIGJlICIKKwkJCSAgImltcGxlbWVudGVkIGxhdGVyLiIpOworfQorCisv KiBDYWxsYmFjayBmdW5jdGlvbiB0byB1bndpbmQgdGhlICRmcmFtZWRlc2MgcmVnaXN0ZXIuICAq LworCitzdGF0aWMgdmFsdWUgKgoraW50ZWxndF9kd2FyZjJfcHJldl9mcmFtZWRlc2MgKGNvbnN0 IGZyYW1lX2luZm9fcHRyICZ0aGlzX2ZyYW1lLAorCQkJICAgICAgIHZvaWQgKip0aGlzX2NhY2hl LCBpbnQgcmVnbnVtKQoreworICBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRo aXNfZnJhbWUpOworICBpbnRlbGd0X2dkYmFyY2hfdGRlcCAqZGF0YQorICAgID0gZ2RiYXJjaF90 ZGVwPGludGVsZ3RfZ2RiYXJjaF90ZGVwPiAoZ2RiYXJjaCk7CisKKyAgaW50IGFjdHVhbF9yZWdu dW0gPSBkYXRhLT5mcmFtZWRlc2NfYmFzZV9yZWdudW0gKCk7CisKKyAgLyogVW53aW5kIHRoZSBh Y3R1YWwgR1JGIHJlZ2lzdGVyLiAgKi8KKyAgcmV0dXJuIGZyYW1lX3Vud2luZF9yZWdpc3Rlcl92 YWx1ZSAodGhpc19mcmFtZSwgYWN0dWFsX3JlZ251bSk7Cit9CisKKy8qIEFyY2hpdGVjdHVyZS1z cGVjaWZpYyByZWdpc3RlciBzdGF0ZSBpbml0aWFsaXphdGlvbi4gICovCisKK3N0YXRpYyB2b2lk CitpbnRlbGd0X2luaXRfcmVnIChnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLCBkd2FyZjJf ZnJhbWVfc3RhdGVfcmVnICpyZWcsCisJCSAgY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJh bWUpCit7CisgIGludCBpcF9yZWdudW0gPSBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9udW0gKGdk YmFyY2gsICJpcCIpOworICBpbnQgZnJhbWVkZXNjX3JlZ251bSA9IGludGVsZ3RfcHNldWRvX3Jl Z2lzdGVyX251bSAoZ2RiYXJjaCwgImZyYW1lZGVzYyIpOworCisgIGlmIChyZWdudW0gPT0gaXBf cmVnbnVtKQorICAgIHJlZy0+aG93ID0gRFdBUkYyX0ZSQU1FX1JFR19SQTsKKyAgZWxzZSBpZiAo cmVnbnVtID09IGdkYmFyY2hfc3BfcmVnbnVtIChnZGJhcmNoKSkKKyAgICByZWctPmhvdyA9IERX QVJGMl9GUkFNRV9SRUdfQ0ZBOworICAvKiBXZSB1c2Ugc3BlY2lhbCBmdW5jdGlvbnMgdG8gdW53 aW5kIHRoZSAkZnJhbWVkZXNjIHJlZ2lzdGVyLiAgKi8KKyAgZWxzZSBpZiAocmVnbnVtID09IGZy YW1lZGVzY19yZWdudW0pCisgICAgeworICAgICAgcmVnLT5ob3cgPSBEV0FSRjJfRlJBTUVfUkVH X0ZOOworICAgICAgcmVnLT5sb2MuZm4gPSBpbnRlbGd0X2R3YXJmMl9wcmV2X2ZyYW1lZGVzYzsK KyAgICB9Cit9CisKKy8qIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUg b2YgdGhlIElTQUJBU0UgcmVnaXN0ZXIuICAqLworCitzdGF0aWMgQ09SRV9BRERSCitpbnRlbGd0 X2dldF9pc2FiYXNlIChyZWFkYWJsZV9yZWdjYWNoZSAqcmVnY2FjaGUpCit7CisgIGdkYmFyY2gg KmdkYmFyY2ggPSByZWdjYWNoZS0+YXJjaCAoKTsKKyAgaW50ZWxndF9nZGJhcmNoX3RkZXAgKmRh dGEKKyAgICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFyY2hfdGRlcD4gKGdkYmFyY2gpOwor ICBnZGJfYXNzZXJ0IChkYXRhLT5pc2FiYXNlX3JlZ251bSAhPSAtMSk7CisKKyAgdWludDY0X3Qg aXNhYmFzZSA9IDA7CisgIGlmIChyZWdjYWNoZS0+Y29va2VkX3JlYWQgKGRhdGEtPmlzYWJhc2Vf cmVnbnVtLCAmaXNhYmFzZSkgIT0gUkVHX1ZBTElEKQorICAgIHRocm93X2Vycm9yIChOT1RfQVZB SUxBQkxFX0VSUk9SLAorCQkgXygiUmVnaXN0ZXIgJWQgKGlzYWJhc2UpIGlzIG5vdCBhdmFpbGFi bGUiKSwKKwkJIGRhdGEtPmlzYWJhc2VfcmVnbnVtKTsKKyAgcmV0dXJuIGlzYWJhc2U7Cit9CisK Ky8qIFRoZSAndW53aW5kX3BjJyBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBDT1JFX0FE RFIKK2ludGVsZ3RfdW53aW5kX3BjIChnZGJhcmNoICpnZGJhcmNoLCBjb25zdCBmcmFtZV9pbmZv X3B0ciAmbmV4dF9mcmFtZSkKK3sKKyAgLyogVXNlIGlwIHJlZ2lzdGVyIGhlcmUsIGFzIElHQyB1 c2VzIDMyYml0IHZhbHVlcyAocGMgaXMgNjRiaXQpLiAgKi8KKyAgaW50IGlwX3JlZ251bSA9IGlu dGVsZ3RfcHNldWRvX3JlZ2lzdGVyX251bSAoZ2RiYXJjaCwgImlwIik7CisgIENPUkVfQUREUiBw cmV2X2lwID0gZnJhbWVfdW53aW5kX3JlZ2lzdGVyX3Vuc2lnbmVkIChuZXh0X2ZyYW1lLAorCQkJ CQkJICAgICAgaXBfcmVnbnVtKTsKKyAgaW50ZWxndF9kZWJ1Z19wcmludGYgKCJwcmV2X2lwOiAl cyIsIHBhZGRyZXNzIChnZGJhcmNoLCBwcmV2X2lwKSk7CisKKyAgLyogUHJvZ3JhbSBjb3VudGVy IGlzICRpcCArICRpc2FiYXNlLiAgUmVhZCBkaXJlY3RseSBmcm9tIHRoZQorICAgICByZWdjYWNo ZSBpbnN0ZWFkIG9mIHVud2luZGluZywgYXMgdGhlIGZyYW1lIHVud2luZCBpbmZvIG1heQorICAg ICBzaW1wbHkgYmUgdW5hdmFpbGFibGUuICBUaGUgaXNhYmFzZSByZWdpc3RlciBkb2VzIG5vdCBj aGFuZ2UKKyAgICAgZHVyaW5nIGtlcm5lbCBleGVjdXRpb24sIHNvIHRoaXMgbXVzdCBiZSBzYWZl LiAgKi8KKyAgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0X3RocmVhZF9yZWdjYWNoZSAoaW5mZXJp b3JfdGhyZWFkICgpKTsKKyAgQ09SRV9BRERSIGlzYWJhc2UgPSBpbnRlbGd0X2dldF9pc2FiYXNl IChyZWdjYWNoZSk7CisKKyAgcmV0dXJuIGlzYWJhc2UgKyBwcmV2X2lwOworfQorCisvKiBGcmFt ZSB1bndpbmRpbmcuICAqLworCitzdGF0aWMgdm9pZAoraW50ZWxndF9mcmFtZV90aGlzX2lkIChj b25zdCBmcmFtZV9pbmZvX3B0ciAmdGhpc19mcmFtZSwKKwkJICAgICAgIHZvaWQgKip0aGlzX3By b2xvZ3VlX2NhY2hlLCBmcmFtZV9pZCAqdGhpc19pZCkKK3sKKyAgLyogRklYTUU6IEFzc2VtYmx5 LWxldmVsIHVud2luZGluZyBmb3IgaW50ZWxndCBpcyBub3QgYXZhaWxhYmxlIGF0CisgICAgIHRo ZSBtb21lbnQuICBTdG9wIGF0IHRoZSBmaXJzdCBmcmFtZS4gICovCisgICp0aGlzX2lkID0gb3V0 ZXJfZnJhbWVfaWQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIGludGVs Z3RfdW53aW5kZXIgPQorICB7CisgICAgImludGVsZ3QgcHJvbG9ndWUiLAorICAgIE5PUk1BTF9G UkFNRSwJCQkvKiB0eXBlICovCisgICAgZGVmYXVsdF9mcmFtZV91bndpbmRfc3RvcF9yZWFzb24s CS8qIHN0b3BfcmVhc29uICovCisgICAgaW50ZWxndF9mcmFtZV90aGlzX2lkLAkJLyogdGhpc19p ZCAqLworICAgIG51bGxwdHIsCQkJCS8qIHByZXZfcmVnaXN0ZXIgKi8KKyAgICBudWxscHRyLAkJ CQkvKiB1bndpbmRfZGF0YSAqLworICAgIGRlZmF1bHRfZnJhbWVfc25pZmZlciwJCS8qIHNuaWZm ZXIgKi8KKyAgICBudWxscHRyLAkJCQkvKiBkZWFsbG9jX2NhY2hlICovCisgIH07CisKKworLyog VGhlIG1lbW9yeV9pbnNlcnRfYnJlYWtwb2ludCBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRp YyBpbnQKK2ludGVsZ3RfbWVtb3J5X2luc2VydF9icmVha3BvaW50IChnZGJhcmNoICpnZGJhcmNo LCBicF90YXJnZXRfaW5mbyAqYnApCit7CisgIGludGVsZ3RfZGVidWdfcHJpbnRmICgicmVxIGlw OiAlcyIsIHBhZGRyZXNzIChnZGJhcmNoLAorCQkJCQkJYnAtPnJlcXN0ZF9hZGRyZXNzKSk7CisK KyAgLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgaW4gdGhlIGJyZWFrcG9pbnQu ICAqLworICBzdGF0aWNfYXNzZXJ0IChpbnRlbGd0OjpNQVhfSU5TVF9MRU5HVEggPD0gQlJFQUtQ T0lOVF9NQVgpOworCisgIGdkYl9ieXRlIGluc3RbaW50ZWxndDo6TUFYX0lOU1RfTEVOR1RIXTsK KyAgaW50IGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoYnAtPnJlcXN0ZF9hZGRyZXNzLCBpbnN0 LAorCQkJCWludGVsZ3Q6Ok1BWF9JTlNUX0xFTkdUSCk7CisgIGlmIChlcnIgIT0gMCkKKyAgICB7 CisgICAgICAvKiBXZSBjb3VsZCBmYWxsIGJhY2sgdG8gcmVhZGluZyBhIGZ1bGwgYW5kIHRoZW4g YSBjb21wYWN0ZWQKKwkgaW5zdHJ1Y3Rpb24gYnV0IEkgdGhpbmsgd2Ugc2hvdWxkIHJhdGhlciBh bGxvdyBzaG9ydCByZWFkcyB0aGFuCisJIGhhdmluZyB0aGUgY2FsbGVyIHRyeSBzbWFsbGVyIGFu ZCBzbWFsbGVyIHNpemVzLiAgKi8KKyAgICAgIGludGVsZ3RfZGVidWdfcHJpbnRmICgiRmFpbGVk IHRvIHJlYWQgbWVtb3J5IGF0ICVzICglcykuIiwKKwkJCSAgICBwYWRkcmVzcyAoZ2RiYXJjaCwg YnAtPnJlcXN0ZF9hZGRyZXNzKSwKKwkJCSAgICBzdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1 cm4gZXJyOworICAgIH0KKworICBicC0+cGxhY2VkX2FkZHJlc3MgPSBicC0+cmVxc3RkX2FkZHJl c3M7CisgIGJwLT5zaGFkb3dfbGVuID0gaW50ZWxndDo6aW5zdF9sZW5ndGggKGluc3QpOworCisg IC8qIE1ha2UgYSBjb3B5IGJlZm9yZSB3ZSBzZXQgdGhlIGJyZWFrcG9pbnQgc28gd2UgY2FuIHJl c3RvcmUgdGhlCisgICAgIG9yaWdpbmFsIGluc3RydWN0aW9uIHdoZW4gcmVtb3ZpbmcgdGhlIGJy ZWFrcG9pbnQgYWdhaW4uCisKKyAgICAgVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0 IGl0IHNhdmVzIG9uZSB0YXJnZXQgYWNjZXNzLiAgKi8KKyAgbWVtY3B5IChicC0+c2hhZG93X2Nv bnRlbnRzLCBpbnN0LCBicC0+c2hhZG93X2xlbik7CisKKyAgY29uc3QgYm9vbCBhbHJlYWR5ID0g aW50ZWxndDo6c2V0X2JyZWFrcG9pbnQgKGluc3QpOworICBpZiAoYWxyZWFkeSkKKyAgICB7Cisg ICAgICAvKiBXYXJuIGlmIHRoZSBicmVha3BvaW50IGJpdCBpcyBhbHJlYWR5IHNldC4KKworCSBU aGVyZSBpcyBzdGlsbCBhIGJyZWFrcG9pbnQsIHByb2JhYmx5IGhhcmQtY29kZWQsIGFuZCBpdCBz aG91bGQKKwkgc3RpbGwgdHJpZ2dlciBhbmQgd2UncmUgc3RpbGwgYWJsZSB0byBzdGVwIG92ZXIg aXQuICBJdCdzIGp1c3QKKwkgbm90IG91ciBicmVha3BvaW50LiAgKi8KKyAgICAgIHdhcm5pbmcg KF8oIlVzaW5nIHBlcm1hbmVudCBicmVha3BvaW50IGF0ICVzLiIpLAorCSAgICAgICBwYWRkcmVz cyAoZ2RiYXJjaCwgYnAtPnBsYWNlZF9hZGRyZXNzKSk7CisKKyAgICAgIC8qIFRoZXJlJ3Mgbm8g bmVlZCB0byB3cml0ZSB0aGUgdW5tb2RpZmllZCBpbnN0cnVjdGlvbiBiYWNrLiAgKi8KKyAgICAg IHJldHVybiAwOworICAgIH0KKworICBlcnIgPSB0YXJnZXRfd3JpdGVfcmF3X21lbW9yeSAoYnAt PnBsYWNlZF9hZGRyZXNzLCBpbnN0LCBicC0+c2hhZG93X2xlbik7CisgIGlmIChlcnIgIT0gMCkK KyAgICBpbnRlbGd0X2RlYnVnX3ByaW50ZiAoIkZhaWxlZCB0byBpbnNlcnQgYnJlYWtwb2ludCBh dCAlcyAoJXMpLiIsCisJCQkgIHBhZGRyZXNzIChnZGJhcmNoLCBicC0+cGxhY2VkX2FkZHJlc3Mp LAorCQkJICBzdHJlcnJvciAoZXJyKSk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogVGhlIG1l bW9yeV9yZW1vdmVfYnJlYWtwb2ludCBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBpbnQK K2ludGVsZ3RfbWVtb3J5X3JlbW92ZV9icmVha3BvaW50IChnZGJhcmNoICpnZGJhcmNoLCBzdHJ1 Y3QgYnBfdGFyZ2V0X2luZm8gKmJwKQoreworICBpbnRlbGd0X2RlYnVnX3ByaW50ZiAoInJlcSBp cDogJXMsIHBsYWNlZCBpcDogJXMiLAorCQkJcGFkZHJlc3MgKGdkYmFyY2gsIGJwLT5yZXFzdGRf YWRkcmVzcyksCisJCQlwYWRkcmVzcyAoZ2RiYXJjaCwgYnAtPnBsYWNlZF9hZGRyZXNzKSk7CisK KyAgLyogV2FybiBpZiB3ZSdyZSBpbnNlcnRpbmcgYSBwZXJtYW5lbnQgYnJlYWtwb2ludC4gICov CisgIGlmIChpbnRlbGd0OjpoYXNfYnJlYWtwb2ludCAoYnAtPnNoYWRvd19jb250ZW50cykpCisg ICAgd2FybmluZyAoXygiUmUtaW5zZXJ0aW5nIHBlcm1hbmVudCBicmVha3BvaW50IGF0ICVzLiIp LAorCSAgICAgcGFkZHJlc3MgKGdkYmFyY2gsIGJwLT5wbGFjZWRfYWRkcmVzcykpOworCisgIC8q IFNlZSBjb21tZW50IGluIG1lbS1icmVhay5jIG9uIHdyaXRlX2luZmVyaW9yX21lbW9yeS4gICov CisgIGludCBlcnIgPSB0YXJnZXRfd3JpdGVfcmF3X21lbW9yeSAoYnAtPnBsYWNlZF9hZGRyZXNz LCBicC0+c2hhZG93X2NvbnRlbnRzLAorCQkJCSAgICAgYnAtPnNoYWRvd19sZW4pOworICBpZiAo ZXJyICE9IDApCisgICAgaW50ZWxndF9kZWJ1Z19wcmludGYgKCJGYWlsZWQgdG8gcmVtb3ZlIGJy ZWFrcG9pbnQgYXQgJXMgKCVzKS4iLAorCQkJICBwYWRkcmVzcyAoZ2RiYXJjaCwgYnAtPnBsYWNl ZF9hZGRyZXNzKSwKKwkJCSAgc3RyZXJyb3IgKGVycikpOworCisgIHJldHVybiBlcnI7Cit9CisK Ky8qIFRoZSBwcm9ncmFtX2JyZWFrcG9pbnRfaGVyZV9wIGdkYmFyY2ggbWV0aG9kLiAgKi8KKwor c3RhdGljIGJvb2wKK2ludGVsZ3RfcHJvZ3JhbV9icmVha3BvaW50X2hlcmVfcCAoZ2RiYXJjaCAq Z2RiYXJjaCwgQ09SRV9BRERSIHBjKQoreworICBpbnRlbGd0X2RlYnVnX3ByaW50ZiAoInBjOiAl cyIsIHBhZGRyZXNzIChnZGJhcmNoLCBwYykpOworCisgIGdkYl9ieXRlIGluc3RbaW50ZWxndDo6 TUFYX0lOU1RfTEVOR1RIXTsKKyAgaW50IGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAocGMsIGlu c3QsIGludGVsZ3Q6Ok1BWF9JTlNUX0xFTkdUSCk7CisgIGlmIChlcnIgIT0gMCkKKyAgICB7Cisg ICAgICAvKiBXZSBjb3VsZCBmYWxsIGJhY2sgdG8gcmVhZGluZyBhIGZ1bGwgYW5kIHRoZW4gYSBj b21wYWN0ZWQKKwkgaW5zdHJ1Y3Rpb24gYnV0IEkgdGhpbmsgd2Ugc2hvdWxkIHJhdGhlciBhbGxv dyBzaG9ydCByZWFkcyB0aGFuCisJIGhhdmluZyB0aGUgY2FsbGVyIHRyeSBzbWFsbGVyIGFuZCBz bWFsbGVyIHNpemVzLiAgKi8KKyAgICAgIGludGVsZ3RfZGVidWdfcHJpbnRmICgiRmFpbGVkIHRv IHJlYWQgbWVtb3J5IGF0ICVzICglcykuIiwKKwkJCSAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgcGMp LCBzdHJlcnJvciAoZXJyKSk7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICBjb25zdCBi b29sIGlzX2JrcHQgPSBpbnRlbGd0OjpoYXNfYnJlYWtwb2ludCAoaW5zdCk7CisKKyAgaW50ZWxn dF9kZWJ1Z19wcmludGYgKCIlc2JyZWFrcG9pbnQgZm91bmQuIiwgaXNfYmtwdCA/ICIiIDogIm5v ICIpOworCisgIHJldHVybiBpc19ia3B0OworfQorCisvKiBUaGUgJ2JyZWFrcG9pbnRfa2luZF9m cm9tX3BjJyBnZGJhcmNoIG1ldGhvZC4KKyAgIFRoaXMgaXMgYSByZXF1aXJlZCBnZGJhcmNoIGZ1 bmN0aW9uLiAgKi8KKworc3RhdGljIGludAoraW50ZWxndF9icmVha3BvaW50X2tpbmRfZnJvbV9w YyAoZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSICpwY3B0cikKK3sKKyAgaW50ZWxndF9kZWJ1 Z19wcmludGYgKCIqcGNwdHI6ICVzIiwgcGFkZHJlc3MgKGdkYmFyY2gsICpwY3B0cikpOworCisg IHJldHVybiBpbnRlbGd0OjpCUF9JTlNUUlVDVElPTjsKK30KKworLyogVGhlICdzd19icmVha3Bv aW50X2Zyb21fa2luZCcgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgY29uc3QgZ2RiX2J5 dGUgKgoraW50ZWxndF9zd19icmVha3BvaW50X2Zyb21fa2luZCAoZ2RiYXJjaCAqZ2RiYXJjaCwg aW50IGtpbmQsIGludCAqc2l6ZSkKK3sKKyAgaW50ZWxndF9kZWJ1Z19wcmludGYgKCJraW5kOiAl ZCIsIGtpbmQpOworCisgIC8qIFdlIGRvIG5vdCBzdXBwb3J0IGJyZWFrcG9pbnQgaW5zdHJ1Y3Rp b25zLgorCisgICAgIFdlIHVzZSBicmVha3BvaW50IGJpdHMgaW4gaW5zdHJ1Y3Rpb25zLCBpbnN0 ZWFkLiAgU2VlCisgICAgIGludGVsZ3RfbWVtb3J5X2luc2VydF9icmVha3BvaW50LiAgKi8KKyAg KnNpemUgPSAwOworICByZXR1cm4gbnVsbHB0cjsKK30KKworLyogUHJpbnQgb25lIGluc3RydWN0 aW9uIGZyb20gTUVNQUREUiBvbiBJTkZPLT5TVFJFQU0uICAqLworCitzdGF0aWMgaW50CitpbnRl bGd0X3ByaW50X2luc24gKGJmZF92bWEgbWVtYWRkciwgc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8g KmluZm8pCit7CisgIC8qIERpc2Fzc2VtYmxlciBpcyB0byBiZSBhZGRlZCBpbiBhIGxhdGVyIHBh dGNoLiAgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGxvb2sg dXAgdGhlIHBzZXVkby1yZWdpc3RlciBudW1iZXIgYnkgbmFtZS4gIEV4YWN0CisgICBhbW91bnQg b2YgcHNldWRvLXJlZ2lzdGVycyBtYXkgZGlmZmVyIGFuZCB0aHVzIGZpeGVkIGNvbnN0YW50cyBj YW4ndCBiZQorICAgdXNlZCBmb3IgdGhpcy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVsZ3RfcHNl dWRvX3JlZ2lzdGVyX251bSAoZ2RiYXJjaCAqYXJjaCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAg aW50ZWxndF9nZGJhcmNoX3RkZXAgKmRhdGEKKyAgICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dk YmFyY2hfdGRlcD4gKGFyY2gpOworICBhdXRvIGl0ZXIgPSBzdGQ6OmZpbmQgKGRhdGEtPmVuYWJs ZWRfcHNldWRvX3JlZ3MuYmVnaW4gKCksCisJCQkgZGF0YS0+ZW5hYmxlZF9wc2V1ZG9fcmVncy5l bmQgKCksIG5hbWUpOworICBnZGJfYXNzZXJ0IChpdGVyICE9IGRhdGEtPmVuYWJsZWRfcHNldWRv X3JlZ3MuZW5kICgpKTsKKyAgcmV0dXJuIGdkYmFyY2hfbnVtX3JlZ3MgKGFyY2gpICsgKGl0ZXIg LSBkYXRhLT5lbmFibGVkX3BzZXVkb19yZWdzLmJlZ2luICgpKTsKK30KKworLyogVGhlICJyZWFk X3BjIiBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBDT1JFX0FERFIKK2ludGVsZ3RfcmVh ZF9wYyAocmVhZGFibGVfcmVnY2FjaGUgKnJlZ2NhY2hlKQoreworICBnZGJhcmNoICphcmNoID0g cmVnY2FjaGUtPmFyY2ggKCk7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhCisgICAgPSBn ZGJhcmNoX3RkZXA8aW50ZWxndF9nZGJhcmNoX3RkZXA+IChhcmNoKTsKKworICAvKiBJbnN0cnVj dGlvbiBwb2ludGVyIGlzIHN0b3JlZCBpbiBDUjAuMi4gICovCisgIHVpbnQzMl90IGlwOworICBp bnRlbGd0X3JlYWRfcmVnaXN0ZXJfcGFydCAocmVnY2FjaGUsIGRhdGEtPmNyMF9yZWdudW0sCisJ CQkgICAgICBzaXplb2YgKHVpbnQzMl90KSAqIDIsCisJCQkgICAgICBnZGI6Om1ha2VfYXJyYXlf dmlldyAoKGdkYl9ieXRlICopICZpcCwKKwkJCQkJCSAgICBzaXplb2YgKHVpbnQzMl90KSksCisJ CQkgICAgICBfKCJDYW5ub3QgY29tcHV0ZSBQQy4iKSk7CisKKyAgLyogUHJvZ3JhbSBjb3VudGVy IGlzICRpcCArICRpc2FiYXNlLiAgKi8KKyAgQ09SRV9BRERSIGlzYWJhc2UgPSBpbnRlbGd0X2dl dF9pc2FiYXNlIChyZWdjYWNoZSk7CisgIHJldHVybiBpc2FiYXNlICsgaXA7Cit9CisKKy8qIFRo ZSAid3JpdGVfcGMiIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVsZ3Rf d3JpdGVfcGMgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBwYykKK3sKKyAg Z2RiYXJjaCAqYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOworICAvKiBQcm9ncmFtIGNvdW50ZXIg aXMgJGlwICsgJGlzYWJhc2UsIGNhbiBvbmx5IG1vZGlmeSAkaXAuICBOZWVkCisgICAgIHRvIGVu c3VyZSB0aGF0IHRoZSBuZXcgdmFsdWUgZml0cyB3aXRoaW4gJGlwIG1vZGlmaWNhdGlvbiByYW5n ZQorICAgICBhbmQgcHJvcGFnYXRlIHRoZSB3cml0ZSBhY2NvcmRpbmdseS4gICovCisgIENPUkVf QUREUiBpc2FiYXNlID0gaW50ZWxndF9nZXRfaXNhYmFzZSAocmVnY2FjaGUpOworICBpZiAocGMg PCBpc2FiYXNlIHx8IHBjID4gaXNhYmFzZSArIFVJTlQzMl9NQVgpCisgICAgZXJyb3IgKCJDYW4n dCB1cGRhdGUgJHBjIHRvIHZhbHVlICVzLCBvdXQgb2YgcmFuZ2UiLAorCSAgIHBhZGRyZXNzIChh cmNoLCBwYykpOworCisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhCisgICAgPSBnZGJhcmNo X3RkZXA8aW50ZWxndF9nZGJhcmNoX3RkZXA+IChhcmNoKTsKKworICAvKiBJbnN0cnVjdGlvbiBw b2ludGVyIGlzIHN0b3JlZCBpbiBDUjAuMi4gICovCisgIHVpbnQzMl90IGlwID0gcGMgLSBpc2Fi YXNlOworICByZWdjYWNoZS0+Y29va2VkX3dyaXRlX3BhcnQgKGRhdGEtPmNyMF9yZWdudW0sIHNp emVvZiAodWludDMyX3QpICogMiwKKwkJCSAgICAgICBnZGI6Om1ha2VfYXJyYXlfdmlldyAoKGdk Yl9ieXRlICopICZpcCwKKwkJCQkJCSAgICAgc2l6ZW9mICh1aW50MzJfdCkpKTsKK30KKworLyog UmV0dXJuIHRoZSBuYW1lIG9mIHBzZXVkby1yZWdpc3RlciBSRUdOVU0uICAqLworCitzdGF0aWMg Y29uc3QgY2hhciAqCitpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9uYW1lIChnZGJhcmNoICphcmNo LCBpbnQgcmVnbnVtKQoreworICBpbnRlbGd0X2dkYmFyY2hfdGRlcCAqZGF0YQorICAgID0gZ2Ri YXJjaF90ZGVwPGludGVsZ3RfZ2RiYXJjaF90ZGVwPiAoYXJjaCk7CisgIGludCBiYXNlX251bSA9 IGdkYmFyY2hfbnVtX3JlZ3MgKGFyY2gpOworICBpZiAocmVnbnVtIDwgYmFzZV9udW0KKyAgICAg IHx8IHJlZ251bSA+PSBiYXNlX251bSArIGRhdGEtPmVuYWJsZWRfcHNldWRvX3JlZ3Muc2l6ZSAo KSkKKyAgICBlcnJvciAoIkludmFsaWQgcHNldWRvLXJlZ2lzdGVyIHJlZ251bSAlZCIsIHJlZ251 bSk7CisgIHJldHVybiBkYXRhLT5lbmFibGVkX3BzZXVkb19yZWdzW3JlZ251bSAtIGJhc2VfbnVt XS5jX3N0ciAoKTsKK30KKworLyogUmV0dXJuIHRoZSBHREIgdHlwZSBvYmplY3QgZm9yIHRoZSAi c3RhbmRhcmQiIGRhdGEgdHlwZSBvZiBkYXRhIGluCisgICBwc2V1ZG8tcmVnaXN0ZXIgUkVHTlVN LiAgKi8KKworc3RhdGljIHR5cGUgKgoraW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJfdHlwZSAoZ2Ri YXJjaCAqYXJjaCwgaW50IHJlZ251bSkKK3sKKyAgY29uc3QgY2hhciAqbmFtZSA9IGludGVsZ3Rf cHNldWRvX3JlZ2lzdGVyX25hbWUgKGFyY2gsIHJlZ251bSk7CisgIGNvbnN0IHN0cnVjdCBidWls dGluX3R5cGUgKmJ0ID0gYnVpbHRpbl90eXBlIChhcmNoKTsKKyAgaW50ZWxndF9nZGJhcmNoX3Rk ZXAgKmRhdGEKKyAgICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFyY2hfdGRlcD4gKGFyY2gp OworCisgIGlmIChzdHJjbXAgKG5hbWUsICJmcmFtZWRlc2MiKSA9PSAwKQorICAgIHsKKyAgICAg IGlmIChkYXRhLT5mcmFtZWRlc2NfdHlwZSAhPSBudWxscHRyKQorCXJldHVybiBkYXRhLT5mcmFt ZWRlc2NfdHlwZTsKKyAgICAgIHR5cGUgKmZyYW1lID0gYXJjaF9jb21wb3NpdGVfdHlwZSAoYXJj aCwgImZyYW1lX2Rlc2MiLCBUWVBFX0NPREVfU1RSVUNUKTsKKyAgICAgIGFwcGVuZF9jb21wb3Np dGVfdHlwZV9maWVsZCAoZnJhbWUsICJyZXR1cm5faXAiLCBidC0+YnVpbHRpbl91aW50MzIpOwor ICAgICAgYXBwZW5kX2NvbXBvc2l0ZV90eXBlX2ZpZWxkIChmcmFtZSwgInJldHVybl9jYWxsbWFz ayIsCisJCQkJICAgYnQtPmJ1aWx0aW5fdWludDMyKTsKKyAgICAgIGFwcGVuZF9jb21wb3NpdGVf dHlwZV9maWVsZCAoZnJhbWUsICJiZV9zcCIsIGJ0LT5idWlsdGluX3VpbnQzMik7CisgICAgICBh cHBlbmRfY29tcG9zaXRlX3R5cGVfZmllbGQgKGZyYW1lLCAiYmVfZnAiLCBidC0+YnVpbHRpbl91 aW50MzIpOworICAgICAgYXBwZW5kX2NvbXBvc2l0ZV90eXBlX2ZpZWxkIChmcmFtZSwgImZlX2Zw IiwgYnQtPmJ1aWx0aW5fdWludDY0KTsKKyAgICAgIGFwcGVuZF9jb21wb3NpdGVfdHlwZV9maWVs ZCAoZnJhbWUsICJmZV9zcCIsIGJ0LT5idWlsdGluX3VpbnQ2NCk7CisgICAgICBkYXRhLT5mcmFt ZWRlc2NfdHlwZSA9IGZyYW1lOworICAgICAgcmV0dXJuIGZyYW1lOworICAgIH0KKyAgZWxzZSBp ZiAoc3RyY21wIChuYW1lLCAiaXAiKSA9PSAwKQorICAgIHJldHVybiBidC0+YnVpbHRpbl91aW50 MzI7CisKKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKKy8qIFJlYWQgdGhlIHZhbHVlIG9mIGEgcHNl dWRvLXJlZ2lzdGVyIFJFR05VTS4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgoraW50ZWxn dF9wc2V1ZG9fcmVnaXN0ZXJfcmVhZF92YWx1ZSAoZ2RiYXJjaCAqYXJjaCwKKwkJCQkgICAgY29u c3QgZnJhbWVfaW5mb19wdHIgJm5leHRfZnJhbWUsCisJCQkJICAgIGludCBwc2V1ZG9fcmVnbnVt KQoreworICBjb25zdCBjaGFyICpuYW1lID0gaW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJfbmFtZSAo YXJjaCwgcHNldWRvX3JlZ251bSk7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhCisgICAg PSBnZGJhcmNoX3RkZXA8aW50ZWxndF9nZGJhcmNoX3RkZXA+IChhcmNoKTsKKworICBpZiAoc3Ry Y21wIChuYW1lLCAiZnJhbWVkZXNjIikgPT0gMCkKKyAgICB7CisgICAgICBpbnQgZ3JmX251bSA9 IGRhdGEtPmZyYW1lZGVzY19iYXNlX3JlZ251bSAoKTsKKyAgICAgIHJldHVybiBwc2V1ZG9fZnJv bV9yYXdfcGFydCAobmV4dF9mcmFtZSwgcHNldWRvX3JlZ251bSwgZ3JmX251bSwgMCk7CisgICAg fQorICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJpcCIpID09IDApCisgICAgeworICAgICAgaW50 IHJlZ3NpemUgPSByZWdpc3Rlcl9zaXplIChhcmNoLCBwc2V1ZG9fcmVnbnVtKTsKKyAgICAgIC8q IEluc3RydWN0aW9uIHBvaW50ZXIgaXMgc3RvcmVkIGluIENSMC4yLiAgKi8KKyAgICAgIGdkYl9h c3NlcnQgKGRhdGEtPmNyMF9yZWdudW0gIT0gLTEpOworICAgICAgLyogQ1IwIGVsZW1lbnRzIGFy ZSA0IGJ5dGUgd2lkZS4gICovCisgICAgICBnZGJfYXNzZXJ0IChyZWdzaXplICsgOCA8PSByZWdp c3Rlcl9zaXplIChhcmNoLCBkYXRhLT5jcjBfcmVnbnVtKSk7CisKKyAgICAgIHJldHVybiBwc2V1 ZG9fZnJvbV9yYXdfcGFydCAobmV4dF9mcmFtZSwgcHNldWRvX3JlZ251bSwKKwkJCQkgICBkYXRh LT5jcjBfcmVnbnVtLCA4KTsKKyAgICB9CisKKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKKy8qIFdy aXRlIHRoZSB2YWx1ZSBvZiBhIHBzZXVkby1yZWdpc3RlciBSRUdOVU0uICAqLworCitzdGF0aWMg dm9pZAoraW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJfd3JpdGUgKGdkYmFyY2ggKmFyY2gsCisJCQkg ICAgICAgY29uc3QgZnJhbWVfaW5mb19wdHIgJm5leHRfZnJhbWUsCisJCQkgICAgICAgaW50IHBz ZXVkb19yZWdudW0sCisJCQkgICAgICAgZ2RiOjphcnJheV92aWV3PGNvbnN0IGdkYl9ieXRlPiBi dWYpCit7CisgIGNvbnN0IGNoYXIgKm5hbWUgPSBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9uYW1l IChhcmNoLCBwc2V1ZG9fcmVnbnVtKTsKKyAgaW50ZWxndF9nZGJhcmNoX3RkZXAgKmRhdGEKKyAg ICA9IGdkYmFyY2hfdGRlcDxpbnRlbGd0X2dkYmFyY2hfdGRlcD4gKGFyY2gpOworCisgIGlmIChz dHJjbXAgKG5hbWUsICJmcmFtZWRlc2MiKSA9PSAwKQorICAgIHsKKyAgICAgIGludCBncmZfbnVt ID0gZGF0YS0+ZnJhbWVkZXNjX2Jhc2VfcmVnbnVtICgpOworICAgICAgaW50IGdyZl9zaXplID0g cmVnaXN0ZXJfc2l6ZSAoYXJjaCwgZ3JmX251bSk7CisgICAgICBpbnQgZGVzY19zaXplID0gcmVn aXN0ZXJfc2l6ZSAoYXJjaCwgcHNldWRvX3JlZ251bSk7CisgICAgICBnZGJfYXNzZXJ0IChncmZf c2l6ZSA+PSBkZXNjX3NpemUpOworICAgICAgcHNldWRvX3RvX3Jhd19wYXJ0IChuZXh0X2ZyYW1l LCBidWYsIGdyZl9udW0sIDApOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiaXAi KSA9PSAwKQorICAgIHsKKyAgICAgIC8qIEluc3RydWN0aW9uIHBvaW50ZXIgaXMgc3RvcmVkIGlu IENSMC4yLiAgKi8KKyAgICAgIGdkYl9hc3NlcnQgKGRhdGEtPmNyMF9yZWdudW0gIT0gLTEpOwor ICAgICAgaW50IGNyMF9zaXplID0gcmVnaXN0ZXJfc2l6ZSAoYXJjaCwgZGF0YS0+Y3IwX3JlZ251 bSk7CisKKyAgICAgIC8qIENSMCBlbGVtZW50cyBhcmUgNCBieXRlIHdpZGUuICAqLworICAgICAg aW50IHJlZ19zaXplID0gcmVnaXN0ZXJfc2l6ZSAoYXJjaCwgcHNldWRvX3JlZ251bSk7CisgICAg ICBnZGJfYXNzZXJ0IChyZWdfc2l6ZSArIDggPD0gY3IwX3NpemUpOworICAgICAgcHNldWRvX3Rv X3Jhd19wYXJ0IChuZXh0X2ZyYW1lLCBidWYsIGRhdGEtPmNyMF9yZWdudW0sIDgpOworICAgIH0K KyAgZWxzZQorICAgIGVycm9yICgiUHNldWRvLXJlZ2lzdGVyICVzIGlzIHJlYWQtb25seSIsIG5h bWUpOworfQorCisvKiBDYWxsZWQgYnkgdGRlc2NfdXNlX3JlZ2lzdGVycyBlYWNoIHRpbWUgYSBu ZXcgcmVnbnVtCisgICBpcyBhc3NpZ25lZC4gIFVzZWQgdG8gdHJhY2sgZG93biBhc3NpZ25lZCBu dW1iZXJzIGZvcgorICAgYW55IGltcG9ydGFudCByZWdudW1zLiAgKi8KKworc3RhdGljIGludAor aW50ZWxndF91bmtub3duX3JlZ2lzdGVyX2NiIChnZGJhcmNoICphcmNoLCB0ZGVzY19mZWF0dXJl ICpmZWF0dXJlLAorCQkJICAgICBjb25zdCBjaGFyICpyZWdfbmFtZSwgaW50IHBvc3NpYmxlX3Jl Z251bSkKK3sKKyAgaW50ZWxndF9nZGJhcmNoX3RkZXAgKmRhdGEKKyAgICA9IGdkYmFyY2hfdGRl cDxpbnRlbGd0X2dkYmFyY2hfdGRlcD4gKGFyY2gpOworCisgIC8qIEZpcnN0LCBjaGVjayBpZiB0 aGlzIGEgYmVnaW5uaW5nIG9mIGEgbm90IHlldCB0cmFja2VkIHJlZ3NldAorICAgICBhc3NpZ25t ZW50LiAgKi8KKworICBmb3IgKGludCByZWdzZXQgPSAwOyByZWdzZXQgPCBpbnRlbGd0OjpSRUdT RVRfQ09VTlQ7ICsrcmVnc2V0KQorICAgIHsKKyAgICAgIGlmIChkYXRhLT5yZWdzZXRfcmFuZ2Vz W3JlZ3NldF0uc3RhcnQgPT0gLTEKKwkgICYmIGZlYXR1cmUtPm5hbWUgPT0gaW50ZWxndDo6RFdB UkZfUkVHU0VUX0ZFQVRVUkVTW3JlZ3NldF0pCisJeworCSAgZGF0YS0+cmVnc2V0X3Jhbmdlc1ty ZWdzZXRdLnN0YXJ0ID0gcG9zc2libGVfcmVnbnVtOworCSAgZGF0YS0+cmVnc2V0X3Jhbmdlc1ty ZWdzZXRdLmVuZAorCSAgICAgID0gZmVhdHVyZS0+cmVnaXN0ZXJzLnNpemUgKCkgKyBwb3NzaWJs ZV9yZWdudW07CisJICBicmVhazsKKwl9CisgICAgfQorCisgIC8qIFNlY29uZCwgY2hlY2sgaWYg aXQgaXMgYW55IHNwZWNpZmljIGluZGl2aWR1YWwgcmVnaXN0ZXIgdGhhdAorICAgICBuZWVkcyB0 byBiZSB0cmFja2VkLiAgKi8KKworICBpZiAoc3RyY21wICgicjAiLCByZWdfbmFtZSkgPT0gMCkK KyAgICBkYXRhLT5yMF9yZWdudW0gPSBwb3NzaWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNt cCAoInIyNiIsIHJlZ19uYW1lKSA9PSAwKQorICAgIGRhdGEtPnJldHZhbF9yZWdudW0gPSBwb3Nz aWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoImNyMCIsIHJlZ19uYW1lKSA9PSAwKQor ICAgIGRhdGEtPmNyMF9yZWdudW0gPSBwb3NzaWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNt cCAoInNyMCIsIHJlZ19uYW1lKSA9PSAwKQorICAgIGRhdGEtPnNyMF9yZWdudW0gPSBwb3NzaWJs ZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoImlzYWJhc2UiLCByZWdfbmFtZSkgPT0gMCkK KyAgICBkYXRhLT5pc2FiYXNlX3JlZ251bSA9IHBvc3NpYmxlX3JlZ251bTsKKyAgZWxzZSBpZiAo c3RyY21wICgiY2UiLCByZWdfbmFtZSkgPT0gMCkKKyAgICBkYXRhLT5jZV9yZWdudW0gPSBwb3Nz aWJsZV9yZWdudW07CisgIGVsc2UgaWYgKHN0cmNtcCAoImdlbnN0YmFzZSIsIHJlZ19uYW1lKSA9 PSAwKQorICAgIGRhdGEtPmdlbnN0YmFzZV9yZWdudW0gPSBwb3NzaWJsZV9yZWdudW07CisgIGVs c2UgaWYgKHN0cmNtcCAoImRiZzAiLCByZWdfbmFtZSkgPT0gMCkKKyAgICBkYXRhLT5kYmcwX3Jl Z251bSA9IHBvc3NpYmxlX3JlZ251bTsKKworICByZXR1cm4gcG9zc2libGVfcmVnbnVtOworfQor CisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gdHJhbnNsYXRlIHRoZSBkZXZpY2UgaWQgdG8gYSBkZXZp Y2UgdmVyc2lvbi4gICovCisKK3N0YXRpYyB4ZV92ZXJzaW9uCitnZXRfeGVfdmVyc2lvbiAodW5z aWduZWQgaW50IGRldmljZV9pZCkKK3sKKyAgeGVfdmVyc2lvbiBkZXZpY2VfeGVfdmVyc2lvbiA9 IFhFX0lOVkFMSUQ7CisgIHN3aXRjaCAoZGV2aWNlX2lkKQorICAgIHsKKyAgICAgIGNhc2UgMHg0 RjgwOgorICAgICAgY2FzZSAweDRGODE6CisgICAgICBjYXNlIDB4NEY4MjoKKyAgICAgIGNhc2Ug MHg0RjgzOgorICAgICAgY2FzZSAweDRGODQ6CisgICAgICBjYXNlIDB4NEY4NToKKyAgICAgIGNh c2UgMHg0Rjg2OgorICAgICAgY2FzZSAweDRGODc6CisgICAgICBjYXNlIDB4NEY4ODoKKyAgICAg IGNhc2UgMHg1NjkwOgorICAgICAgY2FzZSAweDU2OTE6CisgICAgICBjYXNlIDB4NTY5MjoKKyAg ICAgIGNhc2UgMHg1NjkzOgorICAgICAgY2FzZSAweDU2OTQ6CisgICAgICBjYXNlIDB4NTY5NToK KyAgICAgIGNhc2UgMHg1Njk2OgorICAgICAgY2FzZSAweDU2OTc6CisgICAgICBjYXNlIDB4NTY5 ODoKKyAgICAgIGNhc2UgMHg1NkEwOgorICAgICAgY2FzZSAweDU2QTE6CisgICAgICBjYXNlIDB4 NTZBMjoKKyAgICAgIGNhc2UgMHg1NkEzOgorICAgICAgY2FzZSAweDU2QTQ6CisgICAgICBjYXNl IDB4NTZBNToKKyAgICAgIGNhc2UgMHg1NkE2OgorICAgICAgY2FzZSAweDU2QTc6CisgICAgICBj YXNlIDB4NTZBODoKKyAgICAgIGNhc2UgMHg1NkE5OgorICAgICAgY2FzZSAweDU2QjA6CisgICAg ICBjYXNlIDB4NTZCMToKKyAgICAgIGNhc2UgMHg1NkIyOgorICAgICAgY2FzZSAweDU2QjM6Cisg ICAgICBjYXNlIDB4NTZCQToKKyAgICAgIGNhc2UgMHg1NkJCOgorICAgICAgY2FzZSAweDU2QkM6 CisgICAgICBjYXNlIDB4NTZCRDoKKyAgICAgIGNhc2UgMHg1NkMwOgorICAgICAgY2FzZSAweDU2 QzE6CisgICAgICBjYXNlIDB4NTZDMjoKKyAgICAgIGNhc2UgMHg1NkNGOgorICAgICAgY2FzZSAw eDdENDA6CisgICAgICBjYXNlIDB4N0Q0NToKKyAgICAgIGNhc2UgMHg3RDY3OgorICAgICAgY2Fz ZSAweDdENDE6CisgICAgICBjYXNlIDB4N0Q1NToKKyAgICAgIGNhc2UgMHg3REQ1OgorCWRldmlj ZV94ZV92ZXJzaW9uID0gWEVfSFBHOworCWJyZWFrOworCisgICAgICBjYXNlIDB4MDIwMToKKyAg ICAgIGNhc2UgMHgwMjAyOgorICAgICAgY2FzZSAweDAyMDM6CisgICAgICBjYXNlIDB4MDIwNDoK KyAgICAgIGNhc2UgMHgwMjA1OgorICAgICAgY2FzZSAweDAyMDY6CisgICAgICBjYXNlIDB4MDIw NzoKKyAgICAgIGNhc2UgMHgwMjA4OgorICAgICAgY2FzZSAweDAyMDk6CisgICAgICBjYXNlIDB4 MDIwQToKKyAgICAgIGNhc2UgMHgwMjBCOgorICAgICAgY2FzZSAweDAyMEM6CisgICAgICBjYXNl IDB4MDIwRDoKKyAgICAgIGNhc2UgMHgwMjBFOgorICAgICAgY2FzZSAweDAyMEY6CisgICAgICBj YXNlIDB4MDIxMDoKKwlkZXZpY2VfeGVfdmVyc2lvbiA9IFhFX0hQOworCWJyZWFrOworCisgICAg ICBjYXNlIDB4MEJEMDoKKyAgICAgIGNhc2UgMHgwQkQ0OgorICAgICAgY2FzZSAweDBCRDU6Cisg ICAgICBjYXNlIDB4MEJENjoKKyAgICAgIGNhc2UgMHgwQkQ3OgorICAgICAgY2FzZSAweDBCRDg6 CisgICAgICBjYXNlIDB4MEJEOToKKyAgICAgIGNhc2UgMHgwQkRBOgorICAgICAgY2FzZSAweDBC REI6CisgICAgICBjYXNlIDB4MEI2OToKKyAgICAgIGNhc2UgMHgwQjZFOgorCWRldmljZV94ZV92 ZXJzaW9uID0gWEVfSFBDOworCWJyZWFrOworCisgICAgICBjYXNlIDB4NjQyMDoKKyAgICAgIGNh c2UgMHg2NEEwOgorICAgICAgY2FzZSAweDY0QjA6CisgICAgICBjYXNlIDB4RTIwMjoKKyAgICAg IGNhc2UgMHhFMjBCOgorICAgICAgY2FzZSAweEUyMEM6CisgICAgICBjYXNlIDB4RTIwRDoKKyAg ICAgIGNhc2UgMHhFMjEyOgorCWRldmljZV94ZV92ZXJzaW9uID0gWEUyOworCWJyZWFrOworICAg IH0KKworICByZXR1cm4gZGV2aWNlX3hlX3ZlcnNpb247Cit9CisKKy8qIEFyY2hpdGVjdHVyZSBp bml0aWFsaXphdGlvbi4gICovCisKK3N0YXRpYyBnZGJhcmNoICoKK2ludGVsZ3RfZ2RiYXJjaF9p bml0IChnZGJhcmNoX2luZm8gaW5mbywgZ2RiYXJjaF9saXN0ICphcmNoZXMpCit7CisgIC8qIElm IHRoZXJlIGlzIGFscmVhZHkgYSBjYW5kaWRhdGUsIHVzZSBpdC4gICovCisgIGFyY2hlcyA9IGdk YmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7CisgIGlmIChhcmNoZXMg IT0gbnVsbHB0cikKKyAgICByZXR1cm4gYXJjaGVzLT5nZGJhcmNoOworCisgIGNvbnN0IHRhcmdl dF9kZXNjICp0ZGVzYyA9IGluZm8udGFyZ2V0X2Rlc2M7CisgIGdkYmFyY2ggKmdkYmFyY2gKKyAg ICA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLAorCQkgICAgIGdkYmFyY2hfdGRlcF91cCAobmV3IGlu dGVsZ3RfZ2RiYXJjaF90ZGVwKSk7CisgIGludGVsZ3RfZ2RiYXJjaF90ZGVwICpkYXRhCisgICAg PSBnZGJhcmNoX3RkZXA8aW50ZWxndF9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKKworICAvKiBJ bml0aWFsaXplIHJlZ2lzdGVyIGluZm8uICAqLworICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2Ri YXJjaCwgMCk7CisgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gsIHRkZXNjX3Jl Z2lzdGVyX25hbWUpOworCisgIGlmICh0ZGVzY19oYXNfcmVnaXN0ZXJzICh0ZGVzYykpCisgICAg eworICAgICAgdGRlc2NfYXJjaF9kYXRhX3VwIHRkZXNjX2RhdGEgPSB0ZGVzY19kYXRhX2FsbG9j ICgpOworCisgICAgICAvKiBGaXJzdCBhc3NpZ24gcmVnaXN0ZXIgbnVtYmVycyB0byBhbGwgcmVn aXN0ZXJzLiAgVGhlCisJIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcmVjb3JkIGFueSByZWxldmFu dCBtZXRhZGF0YQorCSBhYm91dCBpdCBpbiB0aGUgaW50ZWxndF9nZGJhcmNoX2RhdGEgaW5zdGFu Y2UgdG8gYmUKKwkgaW5zcGVjdGVkIGFmdGVyLiAgKi8KKworICAgICAgdGRlc2NfdXNlX3JlZ2lz dGVycyAoZ2RiYXJjaCwgdGRlc2MsIHN0ZDo6bW92ZSAodGRlc2NfZGF0YSksCisJCQkgICBpbnRl bGd0X3Vua25vd25fcmVnaXN0ZXJfY2IpOworCisgICAgICAvKiBOb3cgY2hlY2sgdGhlIGNvbGxl Y3RlZCBtZXRhZGF0YSB0byBlbnN1cmUgdGhhdCBhbGwKKwkgbWFuZGF0b3J5IHBpZWNlcyBhcmUg aW4gcGxhY2UuICAqLworCisgICAgICBpZiAoZGF0YS0+Y2VfcmVnbnVtID09IC0xKQorCWVycm9y ICgiRGVidWdnaW5nIHJlcXVpcmVzICRjZSBwcm92aWRlZCBieSB0aGUgdGFyZ2V0Iik7CisgICAg ICBpZiAoZGF0YS0+cmV0dmFsX3JlZ251bSA9PSAtMSkKKwllcnJvciAoIkRlYnVnZ2luZyByZXF1 aXJlcyByZXR1cm4gdmFsdWUgcmVnaXN0ZXIgdG8gYmUgcHJvdmlkZWQgYnkgIgorCSAgICAgICAi dGhlIHRhcmdldCIpOworICAgICAgaWYgKGRhdGEtPmNyMF9yZWdudW0gPT0gLTEpCisJZXJyb3Ig KCJEZWJ1Z2dpbmcgcmVxdWlyZXMgY29udHJvbCByZWdpc3RlciB0byBiZSBwcm92aWRlZCBieSAi CisJICAgICAgICJ0aGUgdGFyZ2V0Iik7CisgICAgICBpZiAoZGF0YS0+c3IwX3JlZ251bSA9PSAt MSkKKwllcnJvciAoIkRlYnVnZ2luZyByZXF1aXJlcyBzdGF0ZSByZWdpc3RlciB0byBiZSBwcm92 aWRlZCBieSAiCisJICAgICAgICJ0aGUgdGFyZ2V0Iik7CisKKyAgICAgIC8qIFVuY29uZGl0aW9u YWxseSBlbmFibGVkIHBzZXVkby1yZWdpc3RlcnM6ICAqLworICAgICAgZGF0YS0+ZW5hYmxlZF9w c2V1ZG9fcmVncy5wdXNoX2JhY2sgKCJpcCIpOworICAgICAgZGF0YS0+ZW5hYmxlZF9wc2V1ZG9f cmVncy5wdXNoX2JhY2sgKCJmcmFtZWRlc2MiKTsKKworICAgICAgc2V0X2dkYmFyY2hfbnVtX3Bz ZXVkb19yZWdzIChnZGJhcmNoLCBkYXRhLT5lbmFibGVkX3BzZXVkb19yZWdzLnNpemUgKCkpOwor ICAgICAgc2V0X2dkYmFyY2hfcHNldWRvX3JlZ2lzdGVyX3JlYWRfdmFsdWUgKAorCSAgZ2RiYXJj aCwgaW50ZWxndF9wc2V1ZG9fcmVnaXN0ZXJfcmVhZF92YWx1ZSk7CisgICAgICBzZXRfZ2RiYXJj aF9wc2V1ZG9fcmVnaXN0ZXJfd3JpdGUgKGdkYmFyY2gsCisJCQkJCSBpbnRlbGd0X3BzZXVkb19y ZWdpc3Rlcl93cml0ZSk7CisgICAgICBzZXRfdGRlc2NfcHNldWRvX3JlZ2lzdGVyX3R5cGUgKGdk YmFyY2gsIGludGVsZ3RfcHNldWRvX3JlZ2lzdGVyX3R5cGUpOworICAgICAgc2V0X3RkZXNjX3Bz ZXVkb19yZWdpc3Rlcl9uYW1lIChnZGJhcmNoLCBpbnRlbGd0X3BzZXVkb19yZWdpc3Rlcl9uYW1l KTsKKyAgICAgIHNldF9nZGJhcmNoX3JlYWRfcGMgKGdkYmFyY2gsIGludGVsZ3RfcmVhZF9wYyk7 CisgICAgICBzZXRfZ2RiYXJjaF93cml0ZV9wYyAoZ2RiYXJjaCwgaW50ZWxndF93cml0ZV9wYyk7 CisgICAgfQorCisgIC8qIFBvcHVsYXRlIGdkYmFyY2ggZmllbGRzLiAgKi8KKyAgc2V0X2dkYmFy Y2hfcHRyX2JpdCAoZ2RiYXJjaCwgNjQpOworICBzZXRfZ2RiYXJjaF9hZGRyX2JpdCAoZ2RiYXJj aCwgNjQpOworICBzZXRfZ2RiYXJjaF9sb25nX2JpdCAoZ2RiYXJjaCwgNjQpOworCisgIHNldF9n ZGJhcmNoX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIGludGVsZ3RfcmVnaXN0ZXJfdHlwZSk7Cisg IHNldF9nZGJhcmNoX2R3YXJmMl9yZWdfdG9fcmVnbnVtIChnZGJhcmNoLCBpbnRlbGd0X2R3YXJm X3JlZ190b19yZWdudW0pOworCisgIHNldF9nZGJhcmNoX3NraXBfcHJvbG9ndWUgKGdkYmFyY2gs IGludGVsZ3Rfc2tpcF9wcm9sb2d1ZSk7CisgIHNldF9nZGJhcmNoX2lubmVyX3RoYW4gKGdkYmFy Y2gsIGNvcmVfYWRkcl9ncmVhdGVydGhhbik7CisgIHNldF9nZGJhcmNoX3Vud2luZF9wYyAoZ2Ri YXJjaCwgaW50ZWxndF91bndpbmRfcGMpOworICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2Ri YXJjaCk7CisgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZpbnRlbGd0 X3Vud2luZGVyKTsKKworICBzZXRfZ2RiYXJjaF9yZXR1cm5fdmFsdWVfYXNfdmFsdWUgKGdkYmFy Y2gsIGludGVsZ3RfcmV0dXJuX3ZhbHVlX2FzX3ZhbHVlKTsKKworICBzZXRfZ2RiYXJjaF9tZW1v cnlfaW5zZXJ0X2JyZWFrcG9pbnQgKGdkYmFyY2gsCisJCQkJCWludGVsZ3RfbWVtb3J5X2luc2Vy dF9icmVha3BvaW50KTsKKyAgc2V0X2dkYmFyY2hfbWVtb3J5X3JlbW92ZV9icmVha3BvaW50IChn ZGJhcmNoLAorCQkJCQlpbnRlbGd0X21lbW9yeV9yZW1vdmVfYnJlYWtwb2ludCk7CisgIHNldF9n ZGJhcmNoX3Byb2dyYW1fYnJlYWtwb2ludF9oZXJlX3AgKGdkYmFyY2gsCisJCQkJCSBpbnRlbGd0 X3Byb2dyYW1fYnJlYWtwb2ludF9oZXJlX3ApOworICBzZXRfZ2RiYXJjaF9icmVha3BvaW50X2tp bmRfZnJvbV9wYyAoZ2RiYXJjaCwKKwkJCQkgICAgICAgaW50ZWxndF9icmVha3BvaW50X2tpbmRf ZnJvbV9wYyk7CisgIHNldF9nZGJhcmNoX3N3X2JyZWFrcG9pbnRfZnJvbV9raW5kIChnZGJhcmNo LAorCQkJCSAgICAgICBpbnRlbGd0X3N3X2JyZWFrcG9pbnRfZnJvbV9raW5kKTsKKyAgZHdhcmYy X2ZyYW1lX3NldF9pbml0X3JlZyAoZ2RiYXJjaCwgaW50ZWxndF9pbml0X3JlZyk7CisKKyAgLyog RGlzYXNzZW1ibHkuICAqLworICBzZXRfZ2RiYXJjaF9wcmludF9pbnNuIChnZGJhcmNoLCBpbnRl bGd0X3ByaW50X2luc24pOworCisgIHJldHVybiBnZGJhcmNoOworfQorCisvKiBEdW1wIHRoZSB0 YXJnZXQgc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuICAqLworCitzdGF0aWMg dm9pZAoraW50ZWxndF9kdW1wX3RkZXAgKGdkYmFyY2ggKmdkYmFyY2gsIHVpX2ZpbGUgKmZpbGUp Cit7CisgIC8qIEltcGxlbWVudCB0YXJnZXQtc3BlY2lmaWMgcHJpbnQgb3V0cHV0IGlmIGFuZAor ICAgICB3aGVuIGdkYmFyY2hfdGRlcCBpcyBkZWZpbmVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4g ICovCit9CisKK3N0YXRpYyB2b2lkCitzaG93X2ludGVsZ3RfZGVidWcgKHVpX2ZpbGUgKmZpbGUs IGludCBmcm9tX3R0eSwKKwkJICAgIGNtZF9saXN0X2VsZW1lbnQgKmMsIGNvbnN0IGNoYXIgKnZh bHVlKQoreworICBnZGJfcHJpbnRmIChmaWxlLCBfKCJJbnRlbChSKSBHcmFwaGljcyBUZWNobm9s b2d5IGRlYnVnZ2luZyBpcyAiCisJCSAgICAgICIlcy5cbiIpLCB2YWx1ZSk7Cit9CisKK3ZvaWQg X2luaXRpYWxpemVfaW50ZWxndF90ZGVwICgpOwordm9pZAorX2luaXRpYWxpemVfaW50ZWxndF90 ZGVwICgpCit7CisgIGdkYmFyY2hfcmVnaXN0ZXIgKGJmZF9hcmNoX2ludGVsZ3QsIGludGVsZ3Rf Z2RiYXJjaF9pbml0LAorCQkgICAgaW50ZWxndF9kdW1wX3RkZXApOworCisgIC8qIERlYnVnZ2lu ZyBmbGFnLiAgKi8KKyAgYWRkX3NldHNob3dfYm9vbGVhbl9jbWQgKCJpbnRlbGd0IiwgY2xhc3Nf bWFpbnRlbmFuY2UsICZpbnRlbGd0X2RlYnVnLAorCQkJICAgXygiU2V0IEludGVsKFIpIEdyYXBo aWNzIFRlY2hub2xvZ3kgZGVidWdnaW5nLiIpLAorCQkJICAgXygiU2hvdyBJbnRlbChSKSBHcmFw aGljcyBUZWNobm9sb2d5IGRlYnVnZ2luZy4iKSwKKwkJCSAgIF8oIldoZW4gb24sIEludGVsKFIp IEdyYXBoaWNzIFRlY2hub2xvZ3kgIgorCQkJICAgICAiZGVidWdnaW5nIGlzIGVuYWJsZWQuIiks CisJCQkgICBudWxscHRyLAorCQkJICAgc2hvd19pbnRlbGd0X2RlYnVnLAorCQkJICAgJnNldGRl YnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3JlZ2NhY2hlLmMg Yi9nZGIvcmVnY2FjaGUuYwppbmRleCBmMmM0MDNiODhkMGM1ODM1MmQwZTExZDNlMmMyYzkyY2Uy YjBjNDBkLi4wNGQxOWFkNDNkZDBiYzcxNmNhNjMwNmNjZmU0YmU2ZDhhZmM0OThkIDEwMDY0NAot LS0gYS9nZGIvcmVnY2FjaGUuYworKysgYi9nZGIvcmVnY2FjaGUuYwpAQCAtMTkyNiw5ICsxOTI2 LDEzIEBAIHNlbGZ0ZXN0X3NraXBhcmNoIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKICAgICAg ICBTdGFjayBiYWNrdHJhY2Ugd2lsbCBub3Qgd29yay4KICAgICAgV2UgY291bGQgaW5zdGVhZCBj YXB0dXJlIHRoZSBvdXRwdXQgYW5kIHRoZW4gZmlsdGVyIG91dCB0aGUgd2FybmluZywgYnV0CiAg ICAgIHRoYXQgc2VlbXMgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3b3J0aC4gICovCisgIC8qIFRo ZSAnaW50ZWxndCcgYXJjaCBwb3B1bGF0ZXMgdGhlIHJlZ2lzdGVyIHNldHMgZHluYW1pY2FsbHkg YmFzZWQgb24KKyAgICAgd2hhdCB0aGUgdGFyZ2V0IHJlcG9ydHMuICBXaXRoIG5vIHRhcmdldCBk ZXNjcmlwdGlvbiwgdGhlIHJlZ2lzdGVyCisgICAgIGZpbGUgaXMgZW1wdHkuICAqLwogICByZXR1 cm4gKHN0cmNtcCAobmFtZSwgIm02OGhjMTEiKSA9PSAwCiAJICB8fCBzdHJjbXAgKG5hbWUsICJt NjhoYzEyIikgPT0gMAotCSAgfHwgc3RyY21wIChuYW1lLCAibTY4aGMxMjpIQ1MxMiIpID09IDAp OworCSAgfHwgc3RyY21wIChuYW1lLCAibTY4aGMxMjpIQ1MxMiIpID09IDAKKwkgIHx8IHN0cmNt cCAobmFtZSwgImludGVsZ3QiKSA9PSAwKTsKIH0KIAogLyogVGVzdCByZWdjYWNoZTo6Y29va2Vk X3JlYWQgZ2V0cyByZWdpc3RlcnMgZnJvbSByYXcgcmVnaXN0ZXJzIGFuZAoKLS0gCjIuMzQuMQoK SW50ZWwgRGV1dHNjaGxhbmQgR21iSA0KUmVnaXN0ZXJlZCBBZGRyZXNzOiBBbSBDYW1wZW9uIDEw LCA4NTU3OSBOZXViaWJlcmcsIEdlcm1hbnkNClRlbDogKzQ5IDg5IDk5IDg4NTMtMCwgd3d3Lmlu dGVsLmRlDQpNYW5hZ2luZyBEaXJlY3RvcnM6IFNlYW4gRmVubmVsbHksIEplZmZyZXkgU2NobmVp ZGVybWFuLCBUaWZmYW55IERvb24gU2lsdmENCkNoYWlycGVyc29uIG9mIHRoZSBTdXBlcnZpc29y eSBCb2FyZDogTmljb2xlIExhdQ0KUmVnaXN0ZXJlZCBPZmZpY2U6IE11bmljaA0KQ29tbWVyY2lh bCBSZWdpc3RlcjogQW10c2dlcmljaHQgTXVlbmNoZW4gSFJCIDE4NjkyOAo=