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 91A8CC7EE29 for ; Fri, 9 Jun 2023 19:50:39 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WykxpA7h7BE4r3JA1O9+tJq/twjn7E77v50b/hDimO0=; b=HSowTe+Om/XS6X 5dOtS4S5Rr0KINqvivfYU34/7BOTsxSR2j4qpBZfZA7gwsWypgQLVWY2Bswov2NQxV87wODdNyiSD BjNCi9ezG1SNvS5xf8XwC92n5BKW7qPbyBCfz9+fqi6NdzEvyQ+jEtJp/YnvEqYdYp1vgYk3XgF7/ iXJmdESxSDfEE4NBn1YwQOUdQsgLf2t9vn0dIBjmQau48g81KyU/4oeI5aQny4nakAjLp74x4c1PE AnZPVfSL/Aw3jJhdkZgGvGT83wjp6ElTGYdo/GDh8qQlIiy8ZTu9nkjQfzYoKitlcDlasEB4kCPbY 7U47dkDseApIAHtW4mOA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q7i7k-00E3Ib-2R; Fri, 09 Jun 2023 19:50:16 +0000 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q7i7g-00E3HP-1x for linux-arm-kernel@lists.infradead.org; Fri, 09 Jun 2023 19:50:14 +0000 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 359JmZSR027255; Fri, 9 Jun 2023 19:50:00 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=wJ9YsL7W5/uRql9g9hLhUuvRfqvi5U2DpIzDMRyuY24=; b=bpdhHglfmOl+rUc3Bh1rHXvvRS0RYoiWlPagMs3tJO36HKRwwDYlGjzchA0IRqEL6Ytu mAKREe1enrdhVx41bV7+wy2MNYzB4BBY8kS9HthglrAVE+bfH5XJ44SbtD5ROCFY8DOs v5t+uuGccUk1cewM8zSCXonUUFd/aI/W/M8KoLVHbWR0lb/LYHdnWxcf4AMhQfSwEdNT D8p9O3BnpwoaIhU9PaTB/GpgyHoGY5xTEgYikgXDCq/E8wRIA7AYkDSCanV3RP0z1D09 2aJ7xEruOv6z2vWaGspvSXhkNro6Yd4cY5h7l8UsXjXVn5vje0ZzHstlAjSvv0+RmLAi tQ== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3r3vu4hsbc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 09 Jun 2023 19:49:59 +0000 Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 359JnwPC005250 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 9 Jun 2023 19:49:58 GMT Received: from [10.134.65.165] (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Fri, 9 Jun 2023 12:49:57 -0700 Message-ID: Date: Fri, 9 Jun 2023 12:49:57 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v13 17/24] gunyah: vm_mgr: Add framework for VM Functions Content-Language: en-US To: Alex Elder , Srinivas Kandagatla , Prakruthi Deepak Heragu , Jonathan Corbet CC: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , "Konrad Dybcio" , Arnd Bergmann , "Greg Kroah-Hartman" , Rob Herring , Krzysztof Kozlowski , Bagas Sanjaya , Will Deacon , Andy Gross , Catalin Marinas , Jassi Brar , , , , , References: <20230509204801.2824351-1-quic_eberman@quicinc.com> <20230509204801.2824351-18-quic_eberman@quicinc.com> <3dd82ec0-2a9a-3401-5385-965c624f9f32@linaro.org> From: Elliot Berman In-Reply-To: <3dd82ec0-2a9a-3401-5385-965c624f9f32@linaro.org> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: n9i9EZLoAwf-p1UluZlSCL4RXYHZG_Ok X-Proofpoint-ORIG-GUID: n9i9EZLoAwf-p1UluZlSCL4RXYHZG_Ok X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-09_14,2023-06-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 phishscore=0 priorityscore=1501 clxscore=1015 suspectscore=0 spamscore=0 mlxscore=0 adultscore=0 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306090165 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230609_125012_760741_16A1EF5A X-CRM114-Status: GOOD ( 39.76 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA2LzUvMjAyMyAxMjo0OSBQTSwgQWxleCBFbGRlciB3cm90ZToKPiBPbiA1LzkvMjMgMzo0 NyBQTSwgRWxsaW90IEJlcm1hbiB3cm90ZToKPj4gSW50cm9kdWNlIGEgZnJhbWV3b3JrIGZvciBH dW55YWggdXNlcnNwYWNlIHRvIGluc3RhbGwgVk0gZnVuY3Rpb25zLiBWTQo+PiBmdW5jdGlvbnMg YXJlIG9wdGlvbmFsIGludGVyZmFjZXMgdG8gdGhlIHZpcnR1YWwgbWFjaGluZS4gdkNQVXMsCj4+ IGlvZXZlbnRmcywgYW5kIGlycWZkcyBhcmUgZXhhbXBsZXMgb2Ygc3VjaCBWTSBmdW5jdGlvbnMg YW5kIGFyZQo+IAo+IHMvaW92ZW50ZnMvaW92ZW50ZmRzLwo+IAo+IEFsc28sIHRoZXNlIGFyZW4n dCBqdXN0IGV4YW1wbGVzIG9mIFZNIGZ1bmN0aW9ucywgdGhleSAqYXJlKiB0aGUKPiBWTSBmdW5j dGlvbnMgaW1wbGVtZW50ZWQuCj4gCj4+IGltcGxlbWVudGVkIGluIHN1YnNlcXVlbnQgcGF0Y2hl cy4KPj4KPj4gQSBnZW5lcmljIGZyYW1ld29yayBpcyBpbXBsZW1lbnRlZCBpbnN0ZWFkIG9mIGlu ZGl2aWR1YWwgaW9jdGxzIHRvCj4+IGNyZWF0ZSB2Q1BVcywgaXJxZmRzLCBldGMuLCBpbiBvcmRl ciB0byBzaW1wbGlmeSB0aGUgVk0gbWFuYWdlciBjb3JlCj4+IGltcGxlbWVudGF0aW9uIGFuZCBh bGxvdyBkeW5hbWljIGxvYWRpbmcgb2YgVk0gZnVuY3Rpb24gbW9kdWxlcy4KPiAKPiBUaGlzIGFs c28gYWxsb3dzIHRoZSBzZXQgb2YgVk0gZnVuY3Rpb25zIHRvIGJlIGV4dGVuZGVkIHdpdGhvdXQK PiB1cGRhdGluZyB0aGUgQVBJIChsaWtlIGl0IG9yIG5vdCkuCj4gCj4+Cj4+IFNpZ25lZC1vZmYt Ynk6IEVsbGlvdCBCZXJtYW4gPHF1aWNfZWJlcm1hbkBxdWljaW5jLmNvbT4KPiAKPiBJIGhhdmUg YSBmZXcgbW9yZSBjb21tZW50cywgYnV0IHRoaXMgbG9va3MgcHJldHR5IGdvb2QuCj4gCj4gUmV2 aWV3ZWQtYnk6IEFsZXggRWxkZXIgPGVsZGVyQGxpbmFyby5vcmc+Cj4gCj4+IC0tLQo+PiDCoCBE b2N1bWVudGF0aW9uL3ZpcnQvZ3VueWFoL3ZtLW1hbmFnZXIucnN0IHzCoCAxOCArKwo+PiDCoCBk cml2ZXJzL3ZpcnQvZ3VueWFoL3ZtX21nci5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMjE2 ICsrKysrKysrKysrKysrKysrKysrKystCj4+IMKgIGRyaXZlcnMvdmlydC9ndW55YWgvdm1fbWdy LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArCj4+IMKgIGluY2x1ZGUvbGludXgv Z3VueWFoX3ZtX21nci5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgODcgKysrKysrKysrCj4+ IMKgIGluY2x1ZGUvdWFwaS9saW51eC9ndW55YWguaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHzCoCAxOCArKwo+PiDCoCA1IGZpbGVzIGNoYW5nZWQsIDM0MCBpbnNlcnRpb25zKCspLCAzIGRl bGV0aW9ucygtKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9ndW55YWhf dm1fbWdyLmgKPj4KPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9ndW55YWgvdm0t bWFuYWdlci5yc3QgCj4+IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2d1bnlhaC92bS1tYW5hZ2VyLnJz dAo+PiBpbmRleCA1MGQ4YWU3ZmFiY2QuLjNiNTFiYWI5ZDc5MyAxMDA2NDQKPj4gLS0tIGEvRG9j dW1lbnRhdGlvbi92aXJ0L2d1bnlhaC92bS1tYW5hZ2VyLnJzdAo+PiArKysgYi9Eb2N1bWVudGF0 aW9uL3ZpcnQvZ3VueWFoL3ZtLW1hbmFnZXIucnN0Cj4+IEBAIC0xNyw2ICsxNywyNCBAQCBzaGFy aW5nIHVzZXJzcGFjZSBtZW1vcnkgd2l0aCBhIFZNIGlzIGRvbmUgdmlhIHRoZSAKPj4gYEdIX1ZN X1NFVF9VU0VSX01FTV9SRUdJT05gXwo+PiDCoCBpb2N0bC4gVGhlIFZNIGl0c2VsZiBpcyBjb25m aWd1cmVkIHRvIHVzZSB0aGUgbWVtb3J5IHJlZ2lvbiB2aWEgdGhlCj4+IMKgIGRldmljZXRyZWUu Cj4+ICtHdW55YWggRnVuY3Rpb25zCj4+ICs9PT09PT09PT09PT09PT09Cj4+ICsKPj4gK0NvbXBv bmVudHMgb2YgYSBHdW55YWggVk0ncyBjb25maWd1cmF0aW9uIHRoYXQgbmVlZCBrZXJuZWwgCj4+ IGNvbmZpZ3VyYXRpb24gYXJlCj4+ICtjYWxsZWQgImZ1bmN0aW9ucyIgYW5kIGFyZSBidWlsdCBv biB0b3Agb2YgYSBmcmFtZXdvcmsuIEZ1bmN0aW9ucyBhcmUgCj4+IGlkZW50aWZpZWQKPj4gK2J5 IGEgc3RyaW5nIGFuZCBoYXZlIHNvbWUgYXJndW1lbnQocykgdG8gY29uZmlndXJlIHRoZW0uIFRo ZXkgYXJlIAo+PiB0eXBpY2FsbHkKPj4gK2NyZWF0ZWQgYnkgdGhlIGBHSF9WTV9BRERfRlVOQ1RJ T05gXyBpb2N0bC4KPiAKPiBJcyBhIGZ1bmN0aW9uICp0eXBlKiAoZS5nLiwgVkNQVSBvciBpb2V2 ZW50ZmQpIGlkZW50aWZpZWQgYnkgYSBzdHJpbmc/Cj4gT3IgYSBmdW5jdGlvbiAqaW5zdGFuY2Uq IChlLmcuIGZvdXIgVkNQVXMpP8KgIE9yIGJvdGg/Cj4gCgpBaCwgdGhpcyBzaG91bGQgYmU6CgpG dW5jdGlvbiB0eXBlcyBhcmUgaWRlbnRpZmllZCBieSBhbiBlbnVtIGFuZCBoYXZlIHNvbWUgYXJn dW1lbnQocykuLi4KCj4+ICsKPj4gK0Z1bmN0aW9ucyB0eXBpY2FsbHkgd2lsbCBhbHdheXMgZG8g YXQgbGVhc3Qgb25lIG9mIHRoZXNlIG9wZXJhdGlvbnM6Cj4gCj4gVHlwaWNhbGx5LCBvciBhbHdh eXM/Cj4gCgpIbW0sIEkgZGlkbid0IHdhbnQgdG8gdXNlIGEgbW9yZSBhYnNvbHV0ZSB0ZXJtIGxp a2UgImFsd2F5cyIgc2luY2UgaXQgCmltcGxpZXMgdG8gbWUgdGhhdCB0aGUgZnJhbWV3b3JrIGZv cmNlcyB0aGlzIHNvbWVob3cuIEEgVk0gZnVuY3Rpb24gCndvdWxkbid0IGRvIG11Y2ggaW50ZXJl c3RpbmcgaWYgaXQgd2VyZW4ndCBpbnRlcmFjdGluZyB3aXRoIHRoZSBWTSBhbmQgCnJlc291cmNl IHRpY2tldHMvSU8gaGFuZGxlcnMgYXJlIHRoZSB3YXlzIGZvciBmdW5jdGlvbnMgdG8gaW50ZXJh Y3Qgd2l0aCAKVk1zLgoKSSdsbCB0d2VhayB0aGUgd29yZGluZyBoZXJlLgoKPj4gKwo+PiArMS4g Q3JlYXRlIHJlc291cmNlIHRpY2tldChzKS4gUmVzb3VyY2UgdGlja2V0cyBhbGxvdyBhIGZ1bmN0 aW9uIHRvIAo+PiByZWdpc3Rlcgo+PiArwqDCoCBpdHNlbGYgYXMgdGhlIGNsaWVudCBmb3IgYSBH dW55YWggcmVzb3VyY2UgKGUuZy4gZG9vcmJlbGwgb3IgdkNQVSkgCj4+IGFuZAo+PiArwqDCoCB0 aGUgZnVuY3Rpb24gaXMgZ2l2ZW4gdGhlIHBvaW50ZXIgdG8gdGhlICZzdHJ1Y3QgZ2hfcmVzb3Vy Y2Ugd2hlbiB0aGUKPj4gK8KgwqAgVk0gaXMgc3RhcnRpbmcuCj4+ICsKPiAKPiBXaGF0IEkgdGhp bmsgdGhpcyBtZWFucyBpcyB0aGF0IHRpY2tldHMgYXJlIHVzZWQgdG8gYWxsb3cgZnVuY3Rpb25z Cj4gdG8gYmUgZGVmaW5lZCAqYmVmb3JlKiB0aGUgVk0gaXMgYWN0dWFsbHkgc3RhcnRlZC7CoCBT byBvbmNlIGl0IHN0YXJ0cywKPiB0aGUgZnVuY3Rpb25zIGdldCBhZGRlZC7CoCAoSSBtaWdodCBo YXZlIHRoaXMgc2xpZ2h0bHkgd3JvbmcsIGJ1dCBpbgo+IGFueSBjYXNlIEknbSBub3Qgc3VyZSB0 aGUgYWJvdmUgc2VudGVuY2UgaXMgdmVyeSBjbGVhci4pCj4gCgpJJ20gZ29pbmcgdG8gcmVtb3Zl IHRoZSAiYW5kIHRoZSBmdW5jdGlvbiBpcyBnaXZlbiB0aGUgcG9pbnRlciB0by4uLiIgCnNpbmNl IEkgYWdyZWUgaXQgaXMgYSBiaXQgY29uZnVzaW5nLiBJIHRoaW5rIGl0J2xsIGJlIGNsZWFyZXIg Zm9yIG1lIHRvIApwdXQgaXQgaW4gdGhlIHJlc291cmNlIHRpY2tldCBrZXJuZWxkb2Mgd2hlcmUg dGhlcmUncyBjb250ZXh0IG9mIHRoZSAKcG9wdWxhdGUoKSBjYWxsYmFjayBpbiB0aGUgcmVzb3Vy Y2UgdGlja2V0LiBJJ2xsIG1lbnRpb24gdGhlcmUgdGhhdCB0aGUgCnBvcHVsYXRlKCkgY2FsbGJh Y2sgbWF5IG5vdCBiZSBtYWRlIHVudGlsIHRoZSBWTSBpcyBzdGFydGVkIHdoaWNoIGNvdWxkIApi ZSBhIHdoaWxlLgoKPj4gKzIuIFJlZ2lzdGVyIElPIGhhbmRsZXIocykuIElPIGhhbmRsZXJzIGFs bG93IGEgZnVuY3Rpb24gdG8gaGFuZGxlIAo+PiBzdGFnZS0yIGZhdWx0cwo+PiArwqDCoCBmcm9t IHRoZSB2aXJ0dWFsIG1hY2hpbmUuCj4+ICsKPj4gwqAgU2FtcGxlIFVzZXJzcGFjZSBWTU0KPj4g wqAgPT09PT09PT09PT09PT09PT09PT0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9ndW55 YWgvdm1fbWdyLmMgYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL3ZtX21nci5jCj4+IGluZGV4IGE4MDAw NjFmNTZiZi4uNTY0NjQ0NTFiMjYyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpcnQvZ3VueWFo L3ZtX21nci5jCj4+ICsrKyBiL2RyaXZlcnMvdmlydC9ndW55YWgvdm1fbWdyLmMKPj4gQEAgLTYs MTAgKzYsMTMgQEAKPj4gwqAgI2RlZmluZSBwcl9mbXQoZm10KSAiZ2hfdm1fbWdyOiAiIGZtdAo+ PiDCoCAjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9j b21wYXQuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KPj4gwqAgI2luY2x1ZGUgPGxp bnV4L2d1bnlhaF9yc2NfbWdyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZ3VueWFoX3ZtX21nci5o Pgo+PiDCoCAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgo+PiDCoCAjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgveGFycmF5Lmg+Cj4+IMKgICNpbmNsdWRl IDx1YXBpL2xpbnV4L2d1bnlhaC5oPgo+PiBAQCAtMTcsNiArMjAsMTcyIEBACj4+IMKgIHN0YXRp YyB2b2lkIGdoX3ZtX2ZyZWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKPj4gK3N0YXRpYyBE RUZJTkVfWEFSUkFZKGdoX3ZtX2Z1bmN0aW9ucyk7Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGdoX3Zt X3B1dF9mdW5jdGlvbihzdHJ1Y3QgZ2hfdm1fZnVuY3Rpb24gKmZuKQo+PiArewo+PiArwqDCoMKg IG1vZHVsZV9wdXQoZm4tPm1vZCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZ2hfdm1f ZnVuY3Rpb24gKmdoX3ZtX2dldF9mdW5jdGlvbih1MzIgdHlwZSkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgZ2hfdm1fZnVuY3Rpb24gKmZuOwo+PiArwqDCoMKgIGludCByOwo+PiArCj4+ICvCoMKg wqAgZm4gPSB4YV9sb2FkKCZnaF92bV9mdW5jdGlvbnMsIHR5cGUpOwo+PiArwqDCoMKgIGlmICgh Zm4pIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHIgPSByZXF1ZXN0X21vZHVsZSgiZ2hmdW5jOiVkIiwg dHlwZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIEVSUl9QVFIociA+IDAgPyAtciA6IHIpOwo+IAo+IEFsbW9zdCBhbGwgY2FsbGVy cyBvZiByZXF1ZXN0X21vZHVsZSgpIHNpbXBseSBpZ25vcmUgdGhlCj4gcmV0dXJuIHZhbHVlLsKg IFdoYXQgcG9zaXRpdmUgdmFsdWVzIGFyZSB5b3UgZXhwZWN0aW5nIHRvCj4gc2VlIGhlcmUgKGFu ZCBhcmUgeW91IHN1cmUgdGhleSdyZSBwb3NpdGl2ZSBlcnJubyB2YWx1ZXMpPwo+IAoKSSBjYW4g aWdub3JlIHRoZSByZXR1cm4gdmFsdWUgaGVyZSwgdG9vLCB0byBmb2xsb3cgdGhlIGNvbnZlbnRp b24uCgpJIGhhZCBvYnNlcnZlZCByZXF1ZXN0X21vZHVsZSBjYW4gcmV0dXJuIG1vZHByb2JlJ3Mg ZXhpdCBjb2RlLgoKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgZm4gPSB4YV9sb2FkKCZnaF92bV9m dW5jdGlvbnMsIHR5cGUpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmICghZm4gfHwg IXRyeV9tb2R1bGVfZ2V0KGZuLT5tb2QpKQo+PiArwqDCoMKgwqDCoMKgwqAgZm4gPSBFUlJfUFRS KC1FTk9FTlQpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGZuOwo+PiArfQo+IAo+IC4gLiAuCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==