From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B9E9BC624C6 for ; Mon, 31 Aug 2026 13:38:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=fc6iGnEJOKthJ1Dmi0j0kt8+AjMC2/Fmq1COtjuc4K4=; b=fLtOX6QHybq4Jt u4EaG0dEvdhpQfOEWsnP7NvuBRL9xL2Cvh2ALfU1gyxujonNAsO0yylDUOguw0B93OJN4PAAJiveH o8cN3JUN3GM+ffXFnKjMGoznHYFogHzdNxF4g+m/ldZcZF2YtS+zX2DDHVBS9uMVi+SJkWMhgOT01 6Ff3NSFIQZIFSSCyyvTrudheYBh7kBwaj3K0/K8mARdJEd7xHEMTD+f/RtDYYAYOm2FxfXKfyhjhD jWTgKf/5b5fkZEE0MIbDpreoCfR1evKHTG4Jcte4OXhiydbVYzeejZA3gPyqX6tMSvl8VkRNkMHC/ ZqhrBClU82V4IY11Wnww==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x12D1-00000009Rbg-1tMt; Mon, 31 Aug 2026 13:37:59 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x12Cz-00000009Rb3-2Fbz; Mon, 31 Aug 2026 13:37:57 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id BEC9260237; Mon, 31 Aug 2026 13:37:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D91401F000E9; Mon, 31 Aug 2026 13:37:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788183476; bh=7omeuAaScmWAEKQyvgrvSICA5UGv4oMV1eMMTqvJPYY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=jI+ndjq7u3ZUMSoMFriKK50SK0rT+OqOQG/T58vyVFih+C+S6/B0wpPNops+cc5kX 4L06Yb7ErsT70j9AVo/XIdgejxHoD0n0tCMhk2aDYpOgw91PdJfC0x20z31ywcm06F RSAW8XlXXfXnkaKVRgVDC1JA7+5KKjqbf3JRiZnTW7o3DMtzkERNxNrSlHqfrWMx3B /dqqK8oPF7xqi2lk9EvoiCF4KIgfYfHmW6VwONB0CjskAzlklKxEWe7G3zgEayNbci R2v5l42XXA+DHPE1/DTYV5oUtmRkYs7wuJ1e0iw9UJNN3p+b3apMjKyNVvEJmIw+RR HUO/HTJWcCJzQ== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Hans Zhang <18255117159@163.com>, Manivannan Sadhasivam , Bjorn Helgaas , Sasha Levin , shawn.lin@rock-chips.com, lpieralisi@kernel.org, kwilczynski@kernel.org, heiko@sntech.de, linux-pci@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-5.10] PCI: rockchip: Protect root bus removal with rescan lock Date: Mon, 31 Aug 2026 09:22:27 -0400 Message-ID: <20260831133314.4125787-119-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831133314.4125787-1-sashal@kernel.org> References: <20260831133314.4125787-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.48 X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org RnJvbTogSGFucyBaaGFuZyA8MTgyNTUxMTcxNTlAMTYzLmNvbT4KClsgVXBzdHJlYW0gY29tbWl0 IDBiZDk2MTE1ODdiYjQ5NGMzMzU2NmQ4MjVmZTM0YjI3MDVlNGIxNjcgXQoKSG9sZCB0aGUgcGNp X3Jlc2Nhbl9yZW1vdmVfbG9jayBsb2NrIHdoaWxlIHN0b3BwaW5nIGFuZCByZW1vdmluZyBhIHJv b3QgYnVzCnRvIGF2b2lkIHJhY2luZyB3aXRoIGNvbmN1cnJlbnQgcmVzY2FuIG9yIGhvdHBsdWcg b3BlcmF0aW9ucyB0cmlnZ2VyZWQgdmlhCnN5c2ZzLiAgU3VjaCByYWNlcyBtYXkgbGVhZCB0byB1 c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb3Igc3lzdGVtIGNyYXNoZXMuCgpTaWduZWQtb2ZmLWJ5OiBI YW5zIFpoYW5nIDwxODI1NTExNzE1OUAxNjMuY29tPgpTaWduZWQtb2ZmLWJ5OiBNYW5pdmFubmFu IFNhZGhhc2l2YW0gPG1hbmlAa2VybmVsLm9yZz4KW2JoZWxnYWFzOiBjb21taXQgbG9nXQpTaWdu ZWQtb2ZmLWJ5OiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPgpMaW5rOiBodHRw czovL3BhdGNoLm1zZ2lkLmxpbmsvMjAyNjA1MjExNjE4MjIuMTMyOTk2LTgtMTgyNTUxMTcxNTlA MTYzLmNvbQpTaWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZpbiA8c2FzaGFsQGtlcm5lbC5vcmc+Ci0t LQoKTExNIEdlbmVyYXRlZCBleHBsYW5hdGlvbnMsIG1heSBiZSBjb21wbGV0ZWx5IGJvZ3VzOgoK IyMgUGhhc2UgMTogQ29tbWl0IE1lc3NhZ2UgRm9yZW5zaWNzCgojIyMgU3RlcCAxLjE6IFBhcnNl IHRoZSBTdWJqZWN0IExpbmUKKipSZWNvcmQ6KiogYFtQQ0k6IHJvY2tjaGlwXSBbUHJvdGVjdF0g UHJvdGVjdCByb290IGJ1cyByZW1vdmFsIHdpdGgKcmVzY2FuIGxvY2tgIOKAlCBzdWJzeXN0ZW0g aXMgUm9ja2NoaXAgUENJZSBob3N0IGNvbnRyb2xsZXI7IGFjdGlvbiBpcwpzeW5jaHJvbml6YXRp b24vcHJvdGVjdGlvbiAoYnVnIGZpeCkuCgojIyMgU3RlcCAxLjI6IFBhcnNlIEFsbCBDb21taXQg TWVzc2FnZSBUYWdzCioqUmVjb3JkOioqCi0gKipGaXhlczoqKiBub25lCi0gKipSZXBvcnRlZC1i eToqKiBub25lCi0gKipUZXN0ZWQtYnk6Kiogbm9uZQotICoqUmV2aWV3ZWQtYnk6Kiogbm9uZQot ICoqQWNrZWQtYnk6Kiogbm9uZQotICoqTGluazoqKgogIGBodHRwczovL3BhdGNoLm1zZ2lkLmxp bmsvMjAyNjA1MjExNjE4MjIuMTMyOTk2LTgtMTgyNTUxMTcxNTlAMTYzLmNvbWAKLSAqKkNjOiBz dGFibGU6Kiogbm9uZQotICoqU2lnbmVkLW9mZi1ieToqKiBIYW5zIFpoYW5nLCBNYW5pdmFubmFu IFNhZGhhc2l2YW0sIEJqb3JuIEhlbGdhYXMKICAoaWdub3JlIHBpcGVsaW5lLWFkZGVkIFNPQnMg cGVyIGluc3RydWN0aW9ucykKCk5vdGFibGU6IFNpZ25lZC1vZmYtYnkgZnJvbSBQQ0kgbWFpbnRh aW5lciBCam9ybiBIZWxnYWFzLiBObyBzeXpib3Qgb3IKdXNlciBidWcgcmVwb3J0cy4KCiMjIyBT dGVwIDEuMzogQW5hbHl6ZSBDb21taXQgQm9keQoqKlJlY29yZDoqKgotICoqQnVnOioqIGByb2Nr Y2hpcF9wY2llX3JlbW92ZSgpYCB0ZWFycyBkb3duIHRoZSByb290IGJ1cyB3aXRob3V0CiAgaG9s ZGluZyB0aGUgZ2xvYmFsIFBDSSByZXNjYW4vcmVtb3ZlIG11dGV4LCBhbGxvd2luZyBjb25jdXJy ZW50IHN5c2ZzLQogIGRyaXZlbiByZXNjYW4gb3IgaG90cGx1ZyB0byBvcGVyYXRlIG9uIHRoZSBz YW1lIGJ1cyBoaWVyYXJjaHkuCi0gKipTeW1wdG9tOioqIFVzZS1hZnRlci1mcmVlIG9yIHN5c3Rl bSBjcmFzaC4KLSAqKlJvb3QgY2F1c2U6KiogTWlzc2luZyBgcGNpX2xvY2tfcmVzY2FuX3JlbW92 ZSgpYCAvCiAgYHBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpYCBhcm91bmQgYHBjaV9zdG9wX3Jv b3RfYnVzKClgICsKICBgcGNpX3JlbW92ZV9yb290X2J1cygpYC4KLSAqKlZlcnNpb24gaW5mbzoq KiBOb25lIGluIGNvbW1pdCBtZXNzYWdlLgoKIyMjIFN0ZXAgMS40OiBEZXRlY3QgSGlkZGVuIEJ1 ZyBGaXhlcwoqKlJlY29yZDoqKiBOb3QgZGlzZ3Vpc2VkIOKAlCBleHBsaWNpdGx5IGEgcmFjZS1j b25kaXRpb24gLyBjcmFzaCBmaXgsIG5vdApjbGVhbnVwIG9yIG9wdGltaXphdGlvbi4KCi0tLQoK IyMgUGhhc2UgMjogRGlmZiBBbmFseXNpcwoKIyMjIFN0ZXAgMi4xOiBJbnZlbnRvcnkgdGhlIENo YW5nZXMKKipSZWNvcmQ6KioKLSAqKkZpbGVzOioqIGBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3Bj aWUtcm9ja2NoaXAtaG9zdC5jYCAoKzIgbGluZXMpCi0gKipGdW5jdGlvbnM6KiogYHJvY2tjaGlw X3BjaWVfcmVtb3ZlKClgCi0gKipTY29wZToqKiBTaW5nbGUtZmlsZSwgc3VyZ2ljYWwgZml4ICgy IGxpbmVzIGFkZGVkKQoKIyMjIFN0ZXAgMi4yOiBDb2RlIEZsb3cgQ2hhbmdlCioqUmVjb3JkOioq Ci0gKipIdW5rIChyZW1vdmUgcGF0aCk6KiogQmVmb3JlIOKAlCBgcGNpX3N0b3Bfcm9vdF9idXMo KWAgYW5kCiAgYHBjaV9yZW1vdmVfcm9vdF9idXMoKWAgcnVuIHVubG9ja2VkLiBBZnRlciDigJQg c2FtZSBjYWxscyB3cmFwcGVkIGluCiAgYHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKWAgLyBgcGNp X3VubG9ja19yZXNjYW5fcmVtb3ZlKClgLiBBZmZlY3RzCiAgZHJpdmVyIHJlbW92ZSAvIG1vZHVs ZS11bmJpbmQgcGF0aCBvbmx5LgoKIyMjIFN0ZXAgMi4zOiBJZGVudGlmeSBCdWcgTWVjaGFuaXNt CioqUmVjb3JkOioqICoqQ2F0ZWdvcnk6KiogU3luY2hyb25pemF0aW9uIC8gcmFjZSBjb25kaXRp b24uCioqTWVjaGFuaXNtOioqIENvbmN1cnJlbnQgc3lzZnMgUENJIHJlc2NhbiAoYC9zeXMvYnVz L3BjaS9yZXNjYW5gLCBwZXItCmRldmljZSBgcmVzY2FuYCwgYHJlbW92ZWApIG9yIGhvdHBsdWcg Y2FuIHdhbGsvbW9kaWZ5IHRoZSBidXMgZGV2aWNlCmxpc3Qgd2hpbGUgYHJvY2tjaGlwX3BjaWVf cmVtb3ZlKClgIGlzIHRlYXJpbmcgaXQgZG93biB3aXRob3V0IHRoZQpnbG9iYWwgbXV0ZXggdGhh dCBzeXNmcyBwYXRocyBhbHJlYWR5IGhvbGQuCgojIyMgU3RlcCAyLjQ6IEFzc2VzcyBGaXggUXVh bGl0eQoqKlJlY29yZDoqKiBPYnZpb3VzbHkgY29ycmVjdCDigJQgbWF0Y2hlcyB0aGUgZXN0YWJs aXNoZWQgcGF0dGVybiBpbgpgcGNpX2hvc3RfY29tbW9uX3JlbW92ZSgpYCwgYG10a19wY2llX3Jl bW92ZSgpYCwgYG12ZWJ1YCBhbmQgYGFhcmR2YXJrYApyZW1vdmUgcGF0aHMuIE1pbmltYWwsIG5v IEFQSSBjaGFuZ2VzLiAqKlJlZ3Jlc3Npb24gcmlzazoqKiBWZXJ5IGxvdzsKbXV0ZXggaXMgdGhl IHNhbWUgb25lIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGZvciB0aGlzIHB1cnBvc2UuCgotLS0KCiMj IFBoYXNlIDM6IEdpdCBIaXN0b3J5IEludmVzdGlnYXRpb24KCiMjIyBTdGVwIDMuMTogQmxhbWUg Q2hhbmdlZCBMaW5lcwoqKlJlY29yZDoqKiBgcGNpX3N0b3Bfcm9vdF9idXMoKWAgLyBgcGNpX3Jl bW92ZV9yb290X2J1cygpYCBpbgpgcm9ja2NoaXBfcGNpZV9yZW1vdmUoKWAgaW50cm9kdWNlZCBi eSBSb2IgSGVycmluZyAoMjAyMC0wNS0yMiwgY29tbWl0CmBmNDczMTgyYzc1MjRkZGApLiBSZW1v dmUgZnVuY3Rpb24gaXRzZWxmIGRhdGVzIHRvIFNoYXduIExpbgooMjAxOC0wNS0wOSkuIERyaXZl ciBhZGRlZCAyMDE2IChgZTc3Zjg0N2RmNTRjNmApLiBCdWcgaGFzIGJlZW4gcHJlc2VudApzaW5j ZSB0aGUgc3RvcC9yZW1vdmUgY2FsbHMgd2VyZSBhZGRlZCB3aXRob3V0IGxvY2tpbmcuCgojIyMg U3RlcCAzLjI6IEZvbGxvdyBGaXhlczogVGFnCioqUmVjb3JkOioqIE5vIGBGaXhlczpgIHRhZyBw cmVzZW50IOKAlCBOL0EuCgojIyMgU3RlcCAzLjM6IEZpbGUgSGlzdG9yeSBmb3IgUmVsYXRlZCBD aGFuZ2VzCioqUmVjb3JkOioqIFBhcnQgb2YgYSA5LXBhdGNoIHNlcmllcyAiW1BBVENIIDAvOV0g UENJOiBjb250cm9sbGVyOiBBZGQKbWlzc2luZyByZXNjYW4gbG9jayBhcm91bmQgcm9vdCBidXMg cmVtb3ZhbCIgKGxvY2FsIG1ib3gpLiBFYWNoIHBhdGNoIGlzCmluZGVwZW5kZW50IHBlciBjb3Zl ciBsZXR0ZXIuIGBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKClgIGluZnJhc3RydWN0dXJlCmFkZGVk IGluIDIwMTQgKGA5ZDE2OTQ3Yjc1ODMxYCkuIGBwY2lfaG9zdF9jb21tb25fcmVtb3ZlKClgIGhh cyB1c2VkIHRoZQpsb2NrIHNpbmNlIDIwMTggKGAwMWZjYjdmNzc3YTlmYCkuIEZpeCBpcyAqKm5v dCoqIHlldCBtZXJnZWQgaW4gdGhpcwp0cmVlIChncmVwIHNob3dzIG5vIGxvY2sgaW4gcm9ja2No aXAgcmVtb3ZlOyBgZ2l0IGxvZyAtLWdyZXBgIGZvcgpzdWJqZWN0IHJldHVybmVkIGVtcHR5KS4K CiMjIyBTdGVwIDMuNDogQXV0aG9yJ3MgT3RoZXIgQ29tbWl0cwoqKlJlY29yZDoqKiBIYW5zIFpo YW5nIGlzIGFuIGFjdGl2ZSBQQ0kgY29udHJpYnV0b3IgKGNhZGVuY2UsIGR3YwpjYXBhYmlsaXR5 LXNlYXJjaCBzZXJpZXMsIGV0Yy4pLiBOb3QgdGhlIFJvY2tjaGlwIGRyaXZlciBhdXRob3I7IGZp eGluZwphIGNyb3NzLWRyaXZlciBzeW5jaHJvbml6YXRpb24gZ2FwLgoKIyMjIFN0ZXAgMy41OiBQ cmVyZXF1aXNpdGVzCioqUmVjb3JkOioqIE5vIGRlcGVuZGVuY2llcy4gYHBjaV9sb2NrX3Jlc2Nh bl9yZW1vdmUoKWAgLwpgcGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKClgIGV4aXN0IGluIHRoaXMg dHJlZSAoc2luY2UgMjAxNCkuIERyaXZlcgppbmNsdWRlcyBgLi4vcGNpLmhgIOKGkiBgPGxpbnV4 L3BjaS5oPmAsIHNvIG5vIG5ldyBpbmNsdWRlcyBuZWVkZWQuClN0YW5kYWxvbmUsIGFwcGxpZXMg Y2xlYW5seS4KCi0tLQoKIyMgUGhhc2UgNDogTWFpbGluZyBMaXN0IGFuZCBFeHRlcm5hbCBSZXNl YXJjaAoKIyMjIFN0ZXAgNC4xOiBPcmlnaW5hbCBQYXRjaCBEaXNjdXNzaW9uCioqUmVjb3JkOioq IGBiNCBkaWdgIGNvdWxkIG5vdCBiZSBydW4gb24gYW4gdW5tZXJnZWQgY29tbWl0IGhhc2guIFVz ZWQKbG9jYWwgbWJveCBgMjAyNjA1MjJfMTgyNTUxMTcxNTlfcGNpX2NvbnRyb2xsZXJfYWRkX21p c3NpbmdfcmVzY2FuX2xvY2tfCmFyb3VuZF9yb290X2J1c19yZW1vdmFsLm1ieGAuIENvdmVyIGxl dHRlciBleHBsYWlucyByYWNlIHdpdGggc3lzZnMKcmVzY2FuL2hvdHBsdWcg4oaSIFVBRi9jcmFz aC4gUmVmZXJlbmNlcyBzYXNoaWtvLWJvdCByZXZpZXcgZmxhZ2dpbmcgdGhlCnNhbWUgcGF0dGVy biBpbiBjYWRlbmNlIGNvZGUuICoqTm8gcmV2aWV3IHJlcGxpZXMqKiBpbiB0aGUgbWJveCAocGF0 Y2hlcwpvbmx5KS4gV2ViRmV0Y2ggb2YgbG9yZSBVUkwgYmxvY2tlZCBieSBib3QgcHJvdGVjdGlv bi4KCiMjIyBTdGVwIDQuMjogUmV2aWV3ZXJzCioqUmVjb3JkOioqIENvdmVyIGxldHRlciBvbmx5 OyBubyBSZXZpZXdlZC1ieS9BY2tlZC1ieSBpbiB0aHJlYWQuIENvbW1pdApoYXMgU09CIGZyb20g TWFuaXZhbm5hbiBTYWRoYXNpdmFtIGFuZCBCam9ybiBIZWxnYWFzIChQQ0kgbWFpbnRhaW5lciku CgojIyMgU3RlcCA0LjM6IEJ1ZyBSZXBvcnQKKipSZWNvcmQ6KiogTm8gZXh0ZXJuYWwgYnVnIHJl cG9ydCwgc3l6Ym90LCBvciBLQVNBTiB0cmFjZS4gSXNzdWUKaWRlbnRpZmllZCBieSBjb2RlIHJl dmlldyAvIGJvdCByZXZpZXcgb2YgdGhlIHBhdHRlcm4uCgojIyMgU3RlcCA0LjQ6IFJlbGF0ZWQg UGF0Y2hlcwoqKlJlY29yZDoqKiA5LXBhdGNoIHNlcmllcyBmb3IgY2FkZW5jZSwgZHdjLCBhbHRl cmEsIGJyY21zdGIsIGlwcm9jLAptZWRpYXRlaywgcm9ja2NoaXAsIHZtZCwgcGxkYS4gRWFjaCBp bmRlcGVuZGVudC4gUm9ja2NoaXAgaXMgcGF0Y2ggNy85LgoKIyMjIFN0ZXAgNC41OiBTdGFibGUg TWFpbGluZyBMaXN0CioqUmVjb3JkOioqIE5vIHN0YWJsZS1saXN0IGRpc2N1c3Npb24gZm91bmQg aW4gYXZhaWxhYmxlIHNvdXJjZXMuCgotLS0KCiMjIFBoYXNlIDU6IENvZGUgU2VtYW50aWMgQW5h bHlzaXMKCiMjIyBTdGVwIDUuMTogS2V5IEZ1bmN0aW9ucwoqKlJlY29yZDoqKiBgcm9ja2NoaXBf cGNpZV9yZW1vdmUoKWAg4oCUIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuCgojIyMgU3RlcCA1LjI6 IFRyYWNlIENhbGxlcnMKKipSZWNvcmQ6KiogQ2FsbGVkIHZpYSBgLnJlbW92ZSA9IHJvY2tjaGlw X3BjaWVfcmVtb3ZlYCBpbgpgcm9ja2NoaXBfcGNpZV9kcml2ZXJgLCByZWdpc3RlcmVkIHdpdGgg YG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoKWAuClRyaWdnZXJzIG9uIHBsYXRmb3JtIGRldmljZSBy ZW1vdmFsOiBtb2R1bGUgdW5sb2FkIChgcm1tb2RgIGlmIGJ1aWx0IGFzCm1vZHVsZSksIGRyaXZl ciB1bmJpbmQsIG9yIHBsYXRmb3JtIHRlYXJkb3duLgoKIyMjIFN0ZXAgNS4zOiBUcmFjZSBDYWxs ZWVzCioqUmVjb3JkOioqIGBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKClgLCBgcGNpX3N0b3Bfcm9v dF9idXMoKWAsCmBwY2lfcmVtb3ZlX3Jvb3RfYnVzKClgLCBgcGNpX3VubG9ja19yZXNjYW5fcmVt b3ZlKClgLCB0aGVuCmBpcnFfZG9tYWluX3JlbW92ZSgpYCwgY2xvY2svcmVndWxhdG9yIGNsZWFu dXAuCgojIyMgU3RlcCA1LjQ6IENhbGwgQ2hhaW4gLyBSZWFjaGFiaWxpdHkKKipSZWNvcmQ6Kiog UmFjZSBpcyBiZXR3ZWVuIGByb2NrY2hpcF9wY2llX3JlbW92ZSgpYCBhbmQgc3lzZnMgcGF0aHMg aW4KYHBjaS1zeXNmcy5jYCAoYHJlc2Nhbl9zdG9yZWAsIGBkZXZfcmVzY2FuX3N0b3JlYCwgYHJl bW92ZV9zdG9yZWAsCmBidXNfcmVzY2FuX3N0b3JlYCkg4oCUIGFsbCBob2xkIGBwY2lfbG9ja19y ZXNjYW5fcmVtb3ZlKClgLiBBbiBhZG1pbgp3cml0aW5nIHRvIGAvc3lzL2J1cy9wY2kvcmVzY2Fu YCAob3IgcGVyLWJ1cy9kZXZpY2UgcmVzY2FuL3JlbW92ZSkgd2hpbGUKdGhlIGRyaXZlciBpcyBi ZWluZyByZW1vdmVkIGNhbiBoaXQgdGhlIHJhY2UuIFJlYWNoYWJsZSBvbiBhbnkgUm9ja2NoaXAK c3lzdGVtIHdpdGggYENPTkZJR19QQ0lFX1JPQ0tDSElQX0hPU1RgLgoKIyMjIFN0ZXAgNS41OiBT aW1pbGFyIFBhdHRlcm5zCioqUmVjb3JkOioqIENvbnRyb2xsZXJzICoqd2l0aCoqIGxvY2s6IGBw Y2ktaG9zdC1jb21tb24uY2AsIGBwY2llLQptZWRpYXRlay1nZW4zLmNgLCBgcGNpLW12ZWJ1LmNg LCBgcGNpLWFhcmR2YXJrLmNgLCBgcGNpLWh5cGVydi5jYC4KQ29udHJvbGxlcnMgKip3aXRob3V0 KiogbG9jayAoc2FtZSBidWcgY2xhc3MpOiByb2NrY2hpcCwgY2FkZW5jZSwgZHdjLAphbHRlcmEs IGJyY21zdGIsIGlwcm9jLCBtZWRpYXRlayAobm9uLWdlbjMpLCB2bWQsIHBsZGEsIHRlZ3JhLCBl dGMuClJvY2tjaGlwIGlzIGEgY2xlYXIgb3ZlcnNpZ2h0IHJlbGF0aXZlIHRvIHRoZSBjb21tb24g cGF0dGVybi4KCi0tLQoKIyMgUGhhc2UgNjogQ3Jvc3MtUmVmZXJlbmNlIEFnYWluc3QgTG9jYWwg VHJlZQoKIyMjIFN0ZXAgNi4xOiBEb2VzIEJ1Z2d5IENvZGUgRXhpc3Q/CioqUmVjb3JkOioqICoq WWVzLioqIFRyZWUgaXMgKip2Ni4xOC40NCoqIChgZ2l0IGRlc2NyaWJlIEhFQURgIOKGkgpgdjYu MTguNDQtMS1nMjczNmMzMmRhOThiOWAsIGBtYWtlIGtlcm5lbHZlcnNpb25gIOKGkiBgNi4xOC40 NGApLgpgcm9ja2NoaXBfcGNpZV9yZW1vdmUoKWAgYXQgbGluZXMgMTAxNeKAkzEwMTYgY2FsbHMg YHBjaV9zdG9wX3Jvb3RfYnVzKClgCi8gYHBjaV9yZW1vdmVfcm9vdF9idXMoKWAgKip3aXRob3V0 KiogdGhlIGxvY2suIERyaXZlciBwcmVzZW50IHNpbmNlCnY0LjggZXJhOyBidWcgc2luY2UgfjIw MjAuCgojIyMgU3RlcCA2LjI6IEJhY2twb3J0IENvbXBsaWNhdGlvbnMKKipSZWNvcmQ6KiogKipD bGVhbiBhcHBseSoqIOKAlCAyLWxpbmUgYWRkaXRpb24sIG5vIHN0cnVjdHVyYWwgY2hhbmdlcywg bm8KY29uZmxpY3RzIGV4cGVjdGVkLgoKIyMjIFN0ZXAgNi4zOiBSZWxhdGVkIEZpeGVzIEFscmVh ZHkgUHJlc2VudD8KKipSZWNvcmQ6KiogTm8gZXF1aXZhbGVudCBmaXggaW4gdGhpcyB0cmVlLiBg Z2l0IGxvZyAtLWdyZXA9IlByb3RlY3QKcm9vdCBidXMgcmVtb3ZhbCJgIHJldHVybmVkIGVtcHR5 LiBNZWRpYXRlay1nZW4zLCBtdmVidSwgYWFyZHZhcmssIHBjaS0KaG9zdC1jb21tb24gYWxyZWFk eSBoYXZlIHRoZSBsb2NrOyByb2NrY2hpcCBkb2VzIG5vdC4KCi0tLQoKIyMgUGhhc2UgNzogU3Vi c3lzdGVtIGFuZCBNYWludGFpbmVyIENvbnRleHQKCiMjIyBTdGVwIDcuMTogU3Vic3lzdGVtIENy aXRpY2FsaXR5CioqUmVjb3JkOioqICoqZHJpdmVycy9wY2kvY29udHJvbGxlcioqIOKAlCBJTVBP UlRBTlQuIFBDSSBjb3JlIGFmZmVjdHMKZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBhbGwgZG93bnN0 cmVhbSBQQ0kgZGV2aWNlcyBvbiBSb2NrY2hpcCBTb0NzCihSSzMzOTksIFJLMzU2OCwgZXRjLiku CgojIyMgU3RlcCA3LjI6IFN1YnN5c3RlbSBBY3Rpdml0eQoqKlJlY29yZDoqKiBBY3RpdmVseSBt YWludGFpbmVkOyByZWNlbnQgcm9ja2NoaXAgY29tbWl0cyBpbiB0aGlzIHRyZWUKKGxpbmsgc3Bl ZWQsIGVycm9yIGxvZ2dpbmcsIHJlc2V0IHRpbWluZykuCgotLS0KCiMjIFBoYXNlIDg6IEltcGFj dCBhbmQgUmlzayBBc3Nlc3NtZW50CgojIyMgU3RlcCA4LjE6IFdobyBJcyBBZmZlY3RlZAoqKlJl Y29yZDoqKiBVc2VycyBvZiBSb2NrY2hpcCBTb0NzIHdpdGggYENPTkZJR19QQ0lFX1JPQ0tDSElQ X0hPU1RgCihkZXBlbmRzIG9uIGBBUkNIX1JPQ0tDSElQYCkuIEVtYmVkZGVkL0FSTSBib2FyZHMg dXNpbmcgdGhlIGxlZ2FjeQpSb2NrY2hpcCBBWEkgUENJZSBob3N0IGNvbnRyb2xsZXIuCgojIyMg U3RlcCA4LjI6IFRyaWdnZXIgQ29uZGl0aW9ucwoqKlJlY29yZDoqKiBEcml2ZXIgcmVtb3ZlL3Vu YmluZCBjb25jdXJyZW50IHdpdGggUENJIHN5c2ZzIHJlc2NhbiBvcgpyZW1vdmUgKHR5cGljYWxs eSByb290KS4gVW5jb21tb24gaW4gc3RlYWR5IHN0YXRlIGJ1dCByZWFsaXN0aWMgZHVyaW5nCm1v ZHVsZSByZWxvYWQsIGRyaXZlciB1bmJpbmQgdGVzdGluZywgb3IgYWRtaW4gc3lzZnMgb3BlcmF0 aW9ucy4KUmVxdWlyZXMgcHJpdmlsZWdlcyBmb3Igc3lzZnMgd3JpdGVzOyByZW1vdmUgcGF0aCBj YW4gYmUgdHJpZ2dlcmVkIGJ5Cm1vZHVsZSB1bmxvYWQgb3IgZGV2aWNlIHVuYmluZC4KCiMjIyBT dGVwIDguMzogRmFpbHVyZSBNb2RlIFNldmVyaXR5CioqUmVjb3JkOioqIFVBRiAvIGtlcm5lbCBj cmFzaCDigJQgKipISUdIKiogKHBvdGVudGlhbCAqKkNSSVRJQ0FMKioKZGVwZW5kaW5nIG9uIGV4 cGxvaXRhYmlsaXR5IG9mIHRoZSBmcmVlZCBQQ0kgc3RydWN0dXJlcykuCgojIyMgU3RlcCA4LjQ6 IFJpc2stQmVuZWZpdAoqKlJlY29yZDoqKiAqKkJlbmVmaXQ6KiogSElHSCDigJQgcHJldmVudHMg cmVhbCBjcmFzaGVzIG9uIGEgbG9uZy1zdGFuZGluZwpjb2RlIHBhdGguICoqUmlzazoqKiBWRVJZ IExPVyDigJQgMi1saW5lIGFkZGl0aW9uIHVzaW5nIGV4aXN0aW5nLCB3ZWxsLQp0ZXN0ZWQgQVBJ LCBtYXRjaGluZyBtdWx0aXBsZSBwZWVyIGRyaXZlcnMuICoqUmF0aW86KiogU3Ryb25nbHkgZmF2 b3JzCmJhY2twb3J0LgoKLS0tCgojIyBQaGFzZSA5OiBGaW5hbCBTeW50aGVzaXMKCiMjIyBTdGVw IDkuMTogRXZpZGVuY2UgU3VtbWFyeQoKKipGT1IgYmFja3BvcnQ6KioKLSBSZWFsIHN5bmNocm9u aXphdGlvbiBidWcgd2l0aCBkb2N1bWVudGVkIGNyYXNoL1VBRiBjb25zZXF1ZW5jZQotIE1hdGNo ZXMgUENJIGNvcmUgZG9jdW1lbnRhdGlvbjogcmVzY2FuL3JlbW92ZSBtdXN0IHJ1biB1bmRlcgog IGBwY2lfcmVzY2FuX3JlbW92ZV9sb2NrYCAoY29tbWVudCBpbiBgcHJvYmUuY2AgbGluZXMgMzUz NuKAkzM1MzgpCi0gUGVlciBkcml2ZXJzIGFscmVhZHkgdXNlIHRoaXMgcGF0dGVybjsgcm9ja2No aXAgaXMgYW4gb3V0bGllcgotIDItbGluZSwgb2J2aW91c2x5IGNvcnJlY3QgZml4Ci0gQnVnZ3kg Y29kZSBjb25maXJtZWQgcHJlc2VudCBpbiB2Ni4xOC40NCB0cmVlCi0gRHJpdmVyIGhhcyBiZWVu IGluIHByb2R1Y3Rpb24ga2VybmVscyBmb3IgeWVhcnMKLSBTaWduZWQtb2ZmLWJ5IFBDSSBtYWlu dGFpbmVyCgoqKkFHQUlOU1QgYmFja3BvcnQ6KioKLSBObyB1c2VyLXJlcG9ydGVkIGNyYXNoIG9y IHN5emJvdCByZXByb2R1Y2VyICh0aGVvcmV0aWNhbC9jb2RlLXJldmlldwogIGZpbmRpbmcpCi0g UGFydCBvZiBhIDktcGF0Y2ggc2VyaWVzIChidXQgZWFjaCBwYXRjaCBpcyBpbmRlcGVuZGVudCkK CioqVW5yZXNvbHZlZDoqKiBObyBydW50aW1lIGNyYXNoIHJlcG9ydDsgbG9yZSB0aHJlYWQgcmV2 aWV3IGRpc2N1c3Npb24KdW5hdmFpbGFibGUgKGJvdC1ibG9ja2VkKS4KCiMjIyBTdGVwIDkuMjog U3RhYmxlIFJ1bGVzIENoZWNrbGlzdAoxLiBPYnZpb3VzbHkgY29ycmVjdCBhbmQgdGVzdGVkPyAq KlBBU1MqKiDigJQgcGF0dGVybiBwcm92ZW4gYWNyb3NzCiAgIG11bHRpcGxlIGRyaXZlcnM7IG5v IFRlc3RlZC1ieSBidXQgY2hhbmdlIGlzIHRyaXZpYWwuCjIuIEZpeGVzIGEgcmVhbCBidWc/ICoq UEFTUyoqIOKAlCBtaXNzaW5nIG11dGV4IG9uIGEgZG9jdW1lbnRlZC1yZXF1aXJlZAogICBjb2Rl IHBhdGguCjMuIEltcG9ydGFudCBpc3N1ZT8gKipQQVNTKiog4oCUIFVBRi9zeXN0ZW0gY3Jhc2gu CjQuIFNtYWxsIGFuZCBjb250YWluZWQ/ICoqUEFTUyoqIOKAlCAyIGxpbmVzLCBvbmUgZnVuY3Rp b24uCjUuIE5vIG5ldyBmZWF0dXJlcy9BUElzPyAqKlBBU1MqKiDigJQgc3luY2hyb25pemF0aW9u IG9ubHkuCjYuIENhbiBhcHBseSB0byBsb2NhbCB0cmVlPyAqKlBBU1MqKiDigJQgQVBJcyBhbmQg YnVnZ3kgY29kZSBib3RoIHByZXNlbnQuCgojIyMgU3RlcCA5LjM6IEV4Y2VwdGlvbiBDYXRlZ29y aWVzCioqUmVjb3JkOioqIE5vbmUgKG5vdCBkZXZpY2UgSUQsIHF1aXJrLCBEVCwgYnVpbGQsIG9y IGRvY3MpLiBTdGFuZGFyZApidWcgZml4LgoKIyMjIFN0ZXAgOS40OiBEZWNpc2lvbiBSYXRpb25h bGUKClRoaXMgY29tbWl0IGNsb3NlcyBhIGxvbmctc3RhbmRpbmcgcmFjZSBpbiBgcm9ja2NoaXBf cGNpZV9yZW1vdmUoKWAKd2hlcmUgcm9vdCBidXMgdGVhcmRvd24gd2FzIG5vdCBzZXJpYWxpemVk IGFnYWluc3Qgc3lzZnMgUENJCnJlc2Nhbi9yZW1vdmUgb3BlcmF0aW9ucy4gVGhlIFBDSSBjb3Jl IGhhcyByZXF1aXJlZCB0aGlzIG11dGV4IHNpbmNlCjIwMTQsIGFuZCB0aGUgZ2VuZXJpYyBob3N0 LWNvbW1vbiByZW1vdmUgcGF0aCBoYXMgdXNlZCBpdCBzaW5jZSAyMDE4LgpSb2NrY2hpcCB3YXMg c2ltcGx5IG1pc3NlZC4gVGhlIGZpeCBpcyBtaW5pbWFsLCBmb2xsb3dzIGVzdGFibGlzaGVkCmNv bnZlbnRpb24sIGFuZCBwcmV2ZW50cyBjcmFzaGVzIG9uIFJvY2tjaGlwIHBsYXRmb3JtcyBkdXJp bmcgZHJpdmVyCnJlbW92YWwgY29uY3VycmVudCB3aXRoIFBDSSBzeXNmcyBvcGVyYXRpb25zLiBG b3IgdGhlIHY2LjE4LjQ0IHRyZWUKYmVpbmcgZXZhbHVhdGVkLCB0aGUgYnVnZ3kgY29kZSBpcyBw cmVzZW50IGFuZCB0aGUgZml4IGFwcGxpZXMgY2xlYW5seS4KCi0tLQoKIyMgVmVyaWZpY2F0aW9u CgotICoqW1BoYXNlIDFdKiogUGFyc2VkIHN1YmplY3QsIHRhZ3MsIGJvZHk7IG5vIEZpeGVzOi9S ZXBvcnRlZC1ieS9zeXpib3QKLSAqKltQaGFzZSAyXSoqIERpZmY6ICsyIGxpbmVzIGluIGByb2Nr Y2hpcF9wY2llX3JlbW92ZSgpYCB3cmFwcGluZwogIHN0b3AvcmVtb3ZlIHdpdGggbG9jawotICoq W1BoYXNlIDNdKiogYGdpdCBkZXNjcmliZSBIRUFEYCDihpIgdjYuMTguNDQ7IGBnaXQgYmxhbWVg IOKGkgogIHN0b3AvcmVtb3ZlIGFkZGVkIGY0NzMxODJjICgyMDIwKTsgZHJpdmVyIHNpbmNlIGU3 N2Y4NDdkZjU0YzYgKDIwMTYpCi0gKipbUGhhc2UgM10qKiBgZ2l0IHNob3cgOWQxNjk0N2I3NTgz MWAg4oaSIGxvY2sgQVBJIGFkZGVkIDIwMTQ7IGBnaXQKICBibGFtZSBwY2ktaG9zdC1jb21tb24u Y2Ag4oaSIGxvY2sgaW4gcmVtb3ZlIHNpbmNlIDAxZmNiN2Y3NzdhOWYgKDIwMTgpCi0gKipbUGhh c2UgM10qKiBgZ2l0IGxvZyAtLWdyZXA9IlByb3RlY3Qgcm9vdCBidXMgcmVtb3ZhbCJgIOKGkiBl bXB0eSAobm90CiAgbWVyZ2VkKQotICoqW1BoYXNlIDRdKiogUmVhZCBsb2NhbCBtYm94IGNvdmVy ICsgcGF0Y2ggNy85OyA5IGluZGVwZW5kZW50CiAgcGF0Y2hlczsgc2FzaGlrby1ib3QgcmFjZSBj b21tZW50IHZlcmlmaWVkCi0gKipbUGhhc2UgNF0qKiBXZWJGZXRjaCBsb3JlIFVSTCDihpIgYmxv Y2tlZDsgYjQgZGlnIG9uIHVubWVyZ2VkIGNvbW1pdCDihpIKICBOL0EKLSAqKltQaGFzZSA1XSoq IGBncmVwIHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUgZHJpdmVycy9wY2kvY29udHJvbGxlci9gIOKG kgogIHJvY2tjaGlwIGFic2VudDsgbXZlYnUvYWFyZHZhcmsvbWVkaWF0ZWstZ2VuMy9oeXBlcnYg cHJlc2VudAotICoqW1BoYXNlIDVdKiogUmVhZCBgcGNpLXN5c2ZzLmNgIHJlc2Nhbi9yZW1vdmUg c3RvcmVzIOKAlCBhbGwgaG9sZCBsb2NrCi0gKipbUGhhc2UgNV0qKiBSZWFkIGBwcm9iZS5jOjM1 MzYtMzU1MmAg4oCUIGRvY3VtZW50cyBsb2NrIHJlcXVpcmVtZW50Ci0gKipbUGhhc2UgNl0qKiBS ZWFkIGByb2NrY2hpcF9wY2llX3JlbW92ZSgpYCBsaW5lcyAxMDA54oCTMTAxNiDigJQgYnVnZ3kK ICBjb2RlIGNvbmZpcm1lZCBpbiB0cmVlCi0gKipbUGhhc2UgNl0qKiBgS2NvbmZpZ2Ag4oaSIGBQ Q0lFX1JPQ0tDSElQX0hPU1RgIHRyaXN0YXRlLAogIGBBUkNIX1JPQ0tDSElQYAotICoqW1BoYXNl IDhdKiogUmFjZSBiZXR3ZWVuIHJlbW92ZSBhbmQgc3lzZnMgcmVzY2FuIOKGkiBVQUYvY3Jhc2gg cGVyCiAgY29tbWl0IG1lc3NhZ2UgYW5kIFBDSSBjb3JlIGRlc2lnbgoKKipZRVMqKlRoZSBiYWNr Z3JvdW5kIGNoZWNrcyBmaW5pc2hlZCBhbmQgbWF0Y2ggd2hhdCB0aGUgYW5hbHlzaXMKYWxyZWFk eSBhc3N1bWVkOgoKLSAqKlNlYXJjaCBmb3IgY29tbWl0IGluIHRyZWU6KiogYGI0IGRpZ2Agb24g SEVBRCBkaWRu4oCZdCBtYXRjaCB0aGlzCiAgcGF0Y2g7IGBnaXQgbG9nIC0tZ3JlcGAgZm9yIHRo ZSBzdWJqZWN0IGFsc28gZm91bmQgbm90aGluZy4gVGhlIGZpeAogIGlzbuKAmXQgaW4gdGhpcyB0 cmVlIHlldC4KLSAqKkNoZWNrIGlmIGZpeCBhbHJlYWR5IG1lcmdlZDoqKiBgZ2l0IGxvZyAtLWdy ZXA9InJvY2tjaGlwLipyZXNjYW4KICBsb2NrImAgYW5kIGAtLWdyZXA9IlByb3RlY3Qgcm9vdCBi dXMgcmVtb3ZhbCJgIGJvdGggcmV0dXJuZWQgZW1wdHkg4oCUCiAgY29uZmlybWVkIG5vdCBtZXJn ZWQgaW4gdjYuMTguNDQuCgoqKlZlcmRpY3Qgc3RhbmRzOiBZRVMqKiDigJQgYmFja3BvcnQgdGhl IDItbGluZSBgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpYAp3cmFwIGluIGByb2NrY2hpcF9wY2ll X3JlbW92ZSgpYCB0byBjbG9zZSB0aGUgc3lzZnMgcmVzY2FuL3JlbW92ZSByYWNlLgoKIGRyaXZl cnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1yb2NrY2hpcC1ob3N0LmMgfCAyICsrCiAxIGZpbGUgY2hh bmdlZCwgMiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9wY2llLXJvY2tjaGlwLWhvc3QuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1yb2Nr Y2hpcC1ob3N0LmMKaW5kZXggZWUxODIyY2EwMWRiMy4uZDIwM2M0ODc2ZDMwNCAxMDA2NDQKLS0t IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYworKysgYi9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtaG9zdC5jCkBAIC0xMDEyLDggKzEwMTIs MTAgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfcGNpZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGNpZSAqcm9ja2NoaXAgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKIAlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2UgPSBwY2lfaG9zdF9i cmlkZ2VfZnJvbV9wcml2KHJvY2tjaGlwKTsKIAorCXBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsK IAlwY2lfc3RvcF9yb290X2J1cyhicmlkZ2UtPmJ1cyk7CiAJcGNpX3JlbW92ZV9yb290X2J1cyhi cmlkZ2UtPmJ1cyk7CisJcGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7CiAJaXJxX2RvbWFpbl9y ZW1vdmUocm9ja2NoaXAtPmlycV9kb21haW4pOwogCiAJcm9ja2NoaXBfcGNpZV9kZWluaXRfcGh5 cyhyb2NrY2hpcCk7Ci0tIAoyLjUzLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2No aXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==