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 35B73C433EF for ; Thu, 7 Apr 2022 03:22:44 +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:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=v8HskydTDi3Lggr09a57e4QJjKICe1HjohG8Afe1c/Q=; b=LWIrh695e8egw0Mjtm31Wh+HqY B9YebuA/Tx4qc1eM4eBkYDIt+MMbKNi3tetmxyKkYagcdsUdk+EZHhow2BBZzWSF5sfEBw0d/LBb/ JN6lnUenxBT3ebEs7dqcSDHXoFZx7fsu4fJnGCCilUM9aKROZ6voUD/AF+G180/kSSIvZkRroiKUh VJVPMNgtv8WsAd+G/PSXi6UqS6uP/tdZ48MU8KbG3UaRsxniDhWw/wzdiY6l4lMsccUgcIpDz30Ct KULmp3bzdtWkObslAqXS9ATSX5os0p/h453BAClUJ3Hul1+kEq0lpCpI2JWtv8POuF2xImk9ezZw1 KgGEEZCQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncIhB-0093NR-Ea; Thu, 07 Apr 2022 03:20:30 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncIcq-0091VS-3P for linux-arm-kernel@lists.infradead.org; Thu, 07 Apr 2022 03:16:02 +0000 Received: by mail-yb1-xb49.google.com with SMTP id h16-20020a056902009000b00628a70584b2so3257880ybs.6 for ; Wed, 06 Apr 2022 20:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=6QY+PPZkM5UJQ/884cqbyYi9s5Db7D9+e+0IVeUY5fQ=; b=nEPxSLtg6u4TgWQt9dabuzaYb492tcGE/akVOfwlqqKDhm1WBbQVTjchieVCMk096+ QxLTwM3kLYao+8DrrUbo8GMwSwC+Pmu86VbFJnpkgMBR2q37Sh0STzsOeUa3QmpYPVEk FvgxylFKoR/boI7JQzm2RECj5DtEgFpoh4W7V6PMF6zksJZOLx/jXPhqtxhg0exMjaLg boVS7UveGqDvF65A/m7yuY6yau4Co94admCY6acoFxNVUB5ONDQ01hHxsRtQXiOBeAGK Gkk/5QYqRfrT5LiMNQP6h08lz+DK33sY+hp7FQGWIr8CNN5LhmglxzRTj4Zcj+tbbx5+ zlJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=6QY+PPZkM5UJQ/884cqbyYi9s5Db7D9+e+0IVeUY5fQ=; b=aJsqHft4LpRd+qIbzdecoGR4Cf67ePYEa7hdz+XvF8aDxpuCCFDuUYLvAa8Dd2EFW0 zaeNMY8k0kf+xZH1WslVeUbFb5GZ8tLAKKUXagPNj64liJjF1QkiynzKPHz+yhg8VZ2x ZKQnL60L8nAEFcgUOUlQAi/9Onwh2cg/yC/J9o3GYH5x5Z44iecz8l6+GkOI8PL8HkoS it5VqClf0EnAu3lf7OOhdD7LkFUZc9N+gBfw8uC5IO3OqhBLo+5DzDl2vz+mWrXSiX2j YZ2rdSUk5ziqayDteoP9qnKA/rXo/gG9NZ7ySYqExnZSmyaElN3J24coNU9D1jmsB7aY OVVg== X-Gm-Message-State: AOAM530Nf/JSkA0MW913SO/ern9RO5twc4J4/cOgoulGt6bM0BGjF6q9 tazTm9EvXf0zO4S3YSHrexQKhqq1Su4= X-Google-Smtp-Source: ABdhPJwR9OjNDn2vZMD26M53z4jjUPTvPaXB7634uHguYxB0WKstJRhyJ2jygpZ+/OqInF6hyJUDfHyP68g= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:9ea2:c755:ae22:6862]) (user=yuzhao job=sendgmr) by 2002:a25:7388:0:b0:63d:9a0f:cc33 with SMTP id o130-20020a257388000000b0063d9a0fcc33mr8066047ybc.415.1649301358643; Wed, 06 Apr 2022 20:15:58 -0700 (PDT) Date: Wed, 6 Apr 2022 21:15:13 -0600 In-Reply-To: <20220407031525.2368067-1-yuzhao@google.com> Message-Id: <20220407031525.2368067-2-yuzhao@google.com> Mime-Version: 1.0 References: <20220407031525.2368067-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.1094.g7c7d902a7c-goog Subject: [PATCH v10 01/14] mm: x86, arm64: add arch_has_hw_pte_young() From: Yu Zhao To: Stephen Rothwell , linux-mm@kvack.org Cc: Andi Kleen , Andrew Morton , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, page-reclaim@google.com, x86@kernel.org, Yu Zhao , Barry Song , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220406_201600_225692_4A4A27D5 X-CRM114-Status: GOOD ( 17.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org U29tZSBhcmNoaXRlY3R1cmVzIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQgaW4g UFRFcywgZS5nLiwKeDg2IGFuZCBhcm02NCB2OC4yLiBPbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG8g bm90IGhhdmUgdGhpcyBjYXBhYmlsaXR5LApjbGVhcmluZyB0aGUgYWNjZXNzZWQgYml0IGluIGEg UFRFIHVzdWFsbHkgdHJpZ2dlcnMgYSBwYWdlIGZhdWx0CmZvbGxvd2luZyB0aGUgVExCIG1pc3Mg b2YgdGhpcyBQVEUgKHRvIGVtdWxhdGUgdGhlIGFjY2Vzc2VkIGJpdCkuCgpCZWluZyBhd2FyZSBv ZiB0aGlzIGNhcGFiaWxpdHkgY2FuIGhlbHAgbWFrZSBiZXR0ZXIgZGVjaXNpb25zLCBlLmcuLAp3 aGV0aGVyIHRvIHNwcmVhZCB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHRvIHJl ZHVjZSBidXJzdHkKcGFnZSBmYXVsdHMgd2hlbiB0cnlpbmcgdG8gY2xlYXIgdGhlIGFjY2Vzc2Vk IGJpdCBpbiBtYW55IFBURXMuCgpOb3RlIHRoYXQgdGhlb3JldGljYWxseSB0aGlzIGNhcGFiaWxp dHkgY2FuIGJlIHVucmVsaWFibGUsIGUuZy4sCmhvdHBsdWdnZWQgQ1BVcyBtaWdodCBiZSBkaWZm ZXJlbnQgZnJvbSBidWlsdGluIG9uZXMuIFRoZXJlZm9yZSBpdApzaG91bGQgbm90IGJlIHVzZWQg aW4gYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGNvZGUgdGhhdCBpbnZvbHZlcwpjb3JyZWN0bmVz cywgZS5nLiwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgVExCIGZsdXNoZXMgYXJlIHJlcXVpcmVkIChp bgpjb21iaW5hdGlvbiB3aXRoIHRoZSBhY2Nlc3NlZCBiaXQpLgoKU2lnbmVkLW9mZi1ieTogWXUg WmhhbyA8eXV6aGFvQGdvb2dsZS5jb20+ClJldmlld2VkLWJ5OiBCYXJyeSBTb25nIDxiYW9odWFA a2VybmVsLm9yZz4KQWNrZWQtYnk6IEJyaWFuIEdlZmZvbiA8YmdlZmZvbkBnb29nbGUuY29tPgpB Y2tlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8aGVmdGlnQGFyY2hsaW51 eC5vcmc+CkFja2VkLWJ5OiBPbGVrc2FuZHIgTmF0YWxlbmtvIDxvbGVrc2FuZHJAbmF0YWxlbmtv Lm5hbWU+CkFja2VkLWJ5OiBTdGV2ZW4gQmFycmV0dCA8c3RldmVuQGxpcXVvcml4Lm5ldD4KQWNr ZWQtYnk6IFN1bGVpbWFuIFNvdWhsYWwgPHN1bGVpbWFuQGdvb2dsZS5jb20+CkFja2VkLWJ5OiBX aWxsIERlYWNvbiA8d2lsbEBrZXJuZWwub3JnPgpUZXN0ZWQtYnk6IERhbmllbCBCeXJuZSA8ZGpi eXJuZUBtdHUuZWR1PgpUZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4K VGVzdGVkLWJ5OiBIb2xnZXIgSG9mZnN0w6R0dGUgPGhvbGdlckBhcHBsaWVkLWFzeW5jaHJvbnku Y29tPgpUZXN0ZWQtYnk6IEtvbnN0YW50aW4gS2hhcmxhbW92IDxIaS1BbmdlbEB5YW5kZXgucnU+ ClRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1PgpUZXN0ZWQt Ynk6IFNvZmlhIFRyaW5oIDxzb2ZpYS50cmluaEBlZGkud29ya3M+ClRlc3RlZC1ieTogVmFpYmhh diBKYWluIDx2YWliaGF2QGxpbnV4LmlibS5jb20+Ci0tLQogYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9wZ3RhYmxlLmggfCAxNCArKy0tLS0tLS0tLS0tLQogYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0 YWJsZS5oICAgfCAgNiArKystLS0KIGluY2x1ZGUvbGludXgvcGd0YWJsZS5oICAgICAgICAgIHwg MTMgKysrKysrKysrKysrKwogbW0vbWVtb3J5LmMgICAgICAgICAgICAgICAgICAgICAgfCAxNCAr LS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAyOCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBi L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDk0ZTE0N2U1NDU2Yy4uODVk NTA5YTA4Y2UzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAor KysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtOTk5LDIzICs5OTksMTMg QEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEsCiAgKiBwYWdlIGFmdGVyIGZvcmsoKSArIENvVyBmb3IgcGZuIG1hcHBpbmdzLiBX ZSBkb24ndCBhbHdheXMgaGF2ZSBhCiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9u IGFybTY0LgogICovCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9mYXVsdHNfb25fb2xkX3B0ZSh2 b2lkKQotewotCVdBUk5fT04ocHJlZW1wdGlibGUoKSk7Ci0KLQlyZXR1cm4gIWNwdV9oYXNfaHdf YWYoKTsKLX0KLSNkZWZpbmUgYXJjaF9mYXVsdHNfb25fb2xkX3B0ZQkJYXJjaF9mYXVsdHNfb25f b2xkX3B0ZQorI2RlZmluZSBhcmNoX2hhc19od19wdGVfeW91bmcJCWNwdV9oYXNfaHdfYWYKIAog LyoKICAqIEV4cGVyaW1lbnRhbGx5LCBpdCdzIGNoZWFwIHRvIHNldCB0aGUgYWNjZXNzIGZsYWcg aW4gaGFyZHdhcmUgYW5kIHdlCiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3Mg YXMgJ29sZCcgdG8gc3RhcnQgd2l0aC4KICAqLwotc3RhdGljIGlubGluZSBib29sIGFyY2hfd2Fu dHNfb2xkX3ByZWZhdWx0ZWRfcHRlKHZvaWQpCi17Ci0JcmV0dXJuICFhcmNoX2ZhdWx0c19vbl9v bGRfcHRlKCk7Ci19Ci0jZGVmaW5lIGFyY2hfd2FudHNfb2xkX3ByZWZhdWx0ZWRfcHRlCWFyY2hf d2FudHNfb2xkX3ByZWZhdWx0ZWRfcHRlCisjZGVmaW5lIGFyY2hfd2FudHNfb2xkX3ByZWZhdWx0 ZWRfcHRlCWNwdV9oYXNfaHdfYWYKIAogc3RhdGljIGlubGluZSBib29sIHB1ZF9zZWN0X3N1cHBv cnRlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5o IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDYyYWIwN2UyNGFlZi4uMDE2 NjA2YTBjZjIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysr IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNDI0LDEwICsxNDI0LDEwIEBA IHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19wZm5fbW9kaWZ5X2NoZWNrKHZvaWQpCiAJcmV0 dXJuIGJvb3RfY3B1X2hhc19idWcoWDg2X0JVR19MMVRGKTsKIH0KIAotI2RlZmluZSBhcmNoX2Zh dWx0c19vbl9vbGRfcHRlIGFyY2hfZmF1bHRzX29uX29sZF9wdGUKLXN0YXRpYyBpbmxpbmUgYm9v bCBhcmNoX2ZhdWx0c19vbl9vbGRfcHRlKHZvaWQpCisjZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95 b3VuZyBhcmNoX2hhc19od19wdGVfeW91bmcKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19o d19wdGVfeW91bmcodm9pZCkKIHsKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7CiB9CiAK ICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0 YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggZjRmNDA3N2I5N2FhLi43OWY2 NGRjZmYwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCisrKyBiL2luY2x1 ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0yNTksNiArMjU5LDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50 IHBtZHBfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAjZW5k aWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAjZW5kaWYKIAorI2lmbmRlZiBh cmNoX2hhc19od19wdGVfeW91bmcKKy8qCisgKiBSZXR1cm4gd2hldGhlciB0aGUgYWNjZXNzZWQg Yml0IGlzIHN1cHBvcnRlZCBvbiB0aGUgbG9jYWwgQ1BVLgorICoKKyAqIFRoaXMgc3R1YiBhc3N1 bWVzIGFjY2Vzc2luZyB0aHJvdWdoIGFuIG9sZCBQVEUgdHJpZ2dlcnMgYSBwYWdlIGZhdWx0Lgor ICogQXJjaGl0ZWN0dXJlcyB0aGF0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3MgYml0IHNo b3VsZCBvdmVyd3JpdGUgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19od19w dGVfeW91bmcodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogI2lmbmRlZiBf X0hBVkVfQVJDSF9QVEVQX0NMRUFSCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9jbGVhcihzdHJ1 Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcHRlX3QgKnB0 ZXApCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDc2ZTNhZjk2 MzlkOS4uNDRhMWVjN2EyY2FjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1v cnkuYwpAQCAtMTIyLDE4ICsxMjIsNiBAQCBpbnQgcmFuZG9taXplX3ZhX3NwYWNlIF9fcmVhZF9t b3N0bHkgPQogCQkJCQkyOwogI2VuZGlmCiAKLSNpZm5kZWYgYXJjaF9mYXVsdHNfb25fb2xkX3B0 ZQotc3RhdGljIGlubGluZSBib29sIGFyY2hfZmF1bHRzX29uX29sZF9wdGUodm9pZCkKLXsKLQkv KgotCSAqIFRob3NlIGFyY2hlcyB3aGljaCBkb24ndCBoYXZlIGh3IGFjY2VzcyBmbGFnIGZlYXR1 cmUgbmVlZCB0bwotCSAqIGltcGxlbWVudCB0aGVpciBvd24gaGVscGVyLiBCeSBkZWZhdWx0LCAi dHJ1ZSIgbWVhbnMgcGFnZWZhdWx0Ci0JICogd2lsbCBiZSBoaXQgb24gb2xkIHB0ZS4KLQkgKi8K LQlyZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiAjaWZuZGVmIGFyY2hfd2FudHNfb2xkX3ByZWZh dWx0ZWRfcHRlCiBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9w dGUodm9pZCkKIHsKQEAgLTI3ODQsNyArMjc3Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb3df dXNlcl9wYWdlKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMsCiAJICogT24gYXJj aGl0ZWN0dXJlcyB3aXRoIHNvZnR3YXJlICJhY2Nlc3NlZCIgYml0cywgd2Ugd291bGQKIAkgKiB0 YWtlIGEgZG91YmxlIHBhZ2UgZmF1bHQsIHNvIG1hcmsgaXQgYWNjZXNzZWQgaGVyZS4KIAkgKi8K LQlpZiAoYXJjaF9mYXVsdHNfb25fb2xkX3B0ZSgpICYmICFwdGVfeW91bmcodm1mLT5vcmlnX3B0 ZSkpIHsKKwlpZiAoIWFyY2hfaGFzX2h3X3B0ZV95b3VuZygpICYmICFwdGVfeW91bmcodm1mLT5v cmlnX3B0ZSkpIHsKIAkJcHRlX3QgZW50cnk7CiAKIAkJdm1mLT5wdGUgPSBwdGVfb2Zmc2V0X21h cF9sb2NrKG1tLCB2bWYtPnBtZCwgYWRkciwgJnZtZi0+cHRsKTsKLS0gCjIuMzUuMS4xMDk0Lmc3 YzdkOTAyYTdjLWdvb2cKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==