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 X-Spam-Level: X-Spam-Status: No, score=-15.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9B8FAC433DB for ; Wed, 27 Jan 2021 09:42:57 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 14B0620771 for ; Wed, 27 Jan 2021 09:42:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 14B0620771 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=hisilicon.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=a5Zf3Xd28JXBKU8JNEj9+QyI5uClpB7opGt0hb4r1pQ=; b=Y9IjYRYdXLQtLDP2F4ilPWpQW woLha7lythLiBbFlfjAkZw7zJTNZiIM3J3emRXpBkwyz3v6ERFVvebXP9pSGKf0mztEcBkDxVst8K 66ZkMGkkOGuelqSkm2Lk7vGcrKFak12dAKaI+Z2vGxJRsTt9kWkHsI3JpNYpAlWeS6sxXOjonXL5U pWyTcsXBiXoeTjK/3YIeQyVYT2O3ggXpHtThP8lg1ZXnWSokVuSYoFzKAMZ+dP6DRuGV2dhNYIzT+ ANMWLyvOLNEfi7y88+Bu+KBZSgAhtZ0qGeugkGzGWaGM8mN51+gij7cWnVr/vPOmJZbepkFXpiIAr VffeuqYRQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4gOR-0006XQ-Nq; Wed, 27 Jan 2021 08:41:39 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4gOO-0006Wx-4J for linux-arm-kernel@lists.infradead.org; Wed, 27 Jan 2021 08:41:37 +0000 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DQcVm51B8zjF1V; Wed, 27 Jan 2021 16:40:16 +0800 (CST) Received: from [10.67.77.175] (10.67.77.175) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.498.0; Wed, 27 Jan 2021 16:41:20 +0800 Subject: Re: [PATCH 7/8] drivers/perf: hisi: Add support for HiSilicon PA PMU driver To: John Garry , References: <1609395576-32775-1-git-send-email-zhangshaokun@hisilicon.com> <1609395576-32775-8-git-send-email-zhangshaokun@hisilicon.com> <75d54612-c393-1355-8c21-36daa659b4fc@huawei.com> From: Shaokun Zhang Message-ID: Date: Wed, 27 Jan 2021 16:41:20 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1 MIME-Version: 1.0 In-Reply-To: <75d54612-c393-1355-8c21-36daa659b4fc@huawei.com> X-Originating-IP: [10.67.77.175] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210127_034136_663264_64E3B1B1 X-CRM114-Status: GOOD ( 30.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Qi Liu , Will Deacon , Jonathan Cameron 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 SGkgSm9obiwKCuWcqCAyMDIxLzEvMjYgMjA6NDUsIEpvaG4gR2Fycnkg5YaZ6YGTOgo+IE9uIDMx LzEyLzIwMjAgMDY6MTksIFNoYW9rdW4gWmhhbmcgd3JvdGU6Cj4+IE9uIEhpU2lsaWNvbiBIaXAw OSBwbGF0Zm9ybSwgdGhlcmUgaXMgYSBQQSAoUHJvdG9jb2wgQWRhcHRlcikgbW9kdWxlIG9uCj4+ IGVhY2ggY2hpcCBTSUNMIChTdXBlciBJL08gQ2x1c3Rlcikgd2hpY2ggaW5jb3Jwb3JhdGVzIHRo cmVlIEh5ZHJhIGludGVyZmFjZQo+PiBhbmQgZmFjaWxpdGF0ZXMgdGhlIGNhY2hlIGNvaGVyZW5j eSBiZXR3ZWVuIHRoZSBkaWVzIG9uIHRoZSBjaGlwLiBXaGlsZSBQQQo+PiB1bmNvcmUgUE1VIG1v ZGVsIGlzIHRoZSBzYW1lIGFzIG90aGVyIEhpcDA5IFBNVSBtb2R1bGVzIGFuZCBtYW55IFBNVSBl dmVudHMKPj4gYXJlIHN1cHBvcnRlZC4gTGV0J3Mgc3VwcG9ydCB0aGUgUE1VIGRyaXZlciB1c2lu ZyB0aGUgSGlTaWxpY29uIHVuY29yZSBQTVUKPj4gZnJhbWV3b3JrLgo+Pgo+PiBDYzogTWFyayBS dXRsYW5kIDxtYXJrLnJ1dGxhbmRAYXJtLmNvbT4KPj4gQ2M6IFdpbGwgRGVhY29uIDx3aWxsQGtl cm5lbC5vcmc+Cj4+IENjOiBKb2huIEdhcnJ5IDxqb2huLmdhcnJ5QGh1YXdlaS5jb20+Cj4+IENj OiBKb25hdGhhbiBDYW1lcm9uIDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+Cj4+IENvLWRl dmVsb3BlZC1ieTogUWkgTGl1IDxsaXVxaTExNUBodWF3ZWkuY29tPgo+PiBTaWduZWQtb2ZmLWJ5 OiBRaSBMaXUgPGxpdXFpMTE1QGh1YXdlaS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFNoYW9rdW4g WmhhbmcgPHpoYW5nc2hhb2t1bkBoaXNpbGljb24uY29tPgo+IAo+IG5pdDogcGxlYXNlIHN0b3Ag dXNpbmcgaW5saW5lIHdoZW4gbm90IG5lZWRlZAoKT2ssCgo+IAo+IEFwYXJ0IGZyb20gbWlub3Ig Y29tbWVudHMsIGJlbG93Ogo+IFJldmlld2VkLWJ5OiBKb2huIEdhcnJ5IDxqb2huLmdhcnJ5QGh1 YXdlaS5jb20+Cj4gCj4gbm90ZTogd2UgZG8gaW50ZXJuYWwgcmV2aWV3LCBidXQgdGFncyBub3Qg Z2l2ZW4gLSBtYXliZSB3ZSBzaG91bGQgaW4gZnV0dXJlLi4uCgpTdXJlLCB3aWxsIGRvIHRoaXMg aW4gdGhlIG5leHQgdmVyc2lvbi4KCj4gCj4+IC0tLQo+PiDCoCBkcml2ZXJzL3BlcmYvaGlzaWxp Y29uL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKy0KPj4gwqAgZHJp dmVycy9wZXJmL2hpc2lsaWNvbi9oaXNpX3VuY29yZV9wYV9wbXUuYyB8IDQ5OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4+IMKgIGluY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5owqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4gwqAgMyBmaWxlcyBjaGFu Z2VkLCA1MDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+PiDCoCBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9oaXNpX3VuY29yZV9wYV9wbXUuYwo+Pgo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9NYWtlZmlsZSBiL2RyaXZlcnMvcGVy Zi9oaXNpbGljb24vTWFrZWZpbGUKPj4gaW5kZXggNjYwMGE5ZDQ1ZGQ4Li43NjQzYzlmOTNlMzYg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcGVyZi9oaXNpbGljb24vTWFrZWZpbGUKPj4gKysrIGIv ZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9NYWtlZmlsZQo+PiBAQCAtMSwzICsxLDQgQEAKPj4gwqAg IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4+IMKgIG9iai0kKENPTkZJ R19ISVNJX1BNVSkgKz0gaGlzaV91bmNvcmVfcG11Lm8gaGlzaV91bmNvcmVfbDNjX3BtdS5vIFwK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhpc2lfdW5jb3JlX2hoYV9wbXUubyBoaXNp X3VuY29yZV9kZHJjX3BtdS5vIGhpc2lfdW5jb3JlX3NsbGNfcG11Lm8KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGhpc2lfdW5jb3JlX2hoYV9wbXUubyBoaXNpX3VuY29yZV9kZHJjX3Bt dS5vIGhpc2lfdW5jb3JlX3NsbGNfcG11Lm8gXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaGlzaV91bmNvcmVfcGFfcG11Lm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9oaXNp bGljb24vaGlzaV91bmNvcmVfcGFfcG11LmMKPj4gYi9kcml2ZXJzL3BlcmYvaGlzaWxpY29uL2hp c2lfdW5jb3JlX3BhX3BtdS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAwMDAwMC4uZWVjMTJmNWRhZjcxCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9w ZXJmL2hpc2lsaWNvbi9oaXNpX3VuY29yZV9wYV9wbXUuYwo+PiBAQCAtMCwwICsxLDQ5OCBAQAo+ PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+PiArLyoKPj4gKyAq IEhpU2lsaWNvbiBQQSB1bmNvcmUgSGFyZHdhcmUgZXZlbnQgY291bnRlcnMgc3VwcG9ydAo+PiAr ICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBIaVNpbGljb24gTGltaXRlZAo+PiArICogQXV0 aG9yOiBTaGFva3VuIFpoYW5nIDx6aGFuZ3NoYW9rdW5AaGlzaWxpY29uLmNvbT4KPj4gKyAqCj4+ ICsgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIHVuY29yZSBQTVVzIGxpa2UgYXJtLWNjaSBh bmQgYXJtLWNjbi4KPj4gKyAqLwo+PiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9jcHVob3RwbHVnLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgo+PiArCj4+ICsjaW5jbHVkZSAiaGlzaV91bmNvcmVf cG11LmgiCj4+ICsKPj4gKy8qIFBBIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KPj4gKyNkZWZpbmUg UEFfUEVSRl9DVFJMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFDMDAKPiAKPiBuaXQ6IGdlbmVy YWxseSBsb3dlciBjYXNlIHVzZWQgZm9yIGhleCwgYnV0IG5vdCBzbyBpbXBvcnRhbnQKCk9rLAoK PiAKPj4gKyNkZWZpbmUgUEFfRVZFTlRfQ1RSTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxQzA0 Cj4+ICsjZGVmaW5lIFBBX1RUX0NUUkzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MUMwOAo+PiAr I2RlZmluZSBQQV9UR1RJRF9DVFJMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFDMTQKPj4gKyNk ZWZpbmUgUEFfU1JDSURfQ1RSTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxQzE4Cj4+ICsjZGVm aW5lIFBBX0lOVF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFDNzAKPj4gKyNkZWZpbmUg UEFfSU5UX1NUQVRVU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxQzc4Cj4+ICsjZGVmaW5lIFBB X0lOVF9DTEVBUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxQzdDCj4+ICsjZGVmaW5lIFBBX0VW RU5UX1RZUEUwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFDODAKPj4gKyNkZWZpbmUgUEFfUE1V X1ZFUlNJT07CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MUNGMAo+PiArI2RlZmluZSBQQV9FVkVO VF9DTlQwX0zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MUQwMAo+PiArCj4gCj4gLi4uCj4gCj4+ ICsKPj4gK3N0YXRpYyBpbnQgaGlzaV9wYV9wbXVfaW5pdF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGhpc2lfcG11ICpwYV9wbXUpCj4+ICt7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICog VXNlIHRoZSBTQ0NMX0lEIGFuZCB0aGUgaW5kZXggSUQgdG8gaWRlbnRpZnkgdGhlIFBBIFBNVSwK Pj4gK8KgwqDCoMKgICogd2hpbGUgU0NDTF9JRCBpcyB0aGUgbmVhcnN0IFNDQ0xfSUQgZnJvbSB0 aGlzIFNJQ0wuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmIChkZXZpY2VfcHJvcGVydHlf cmVhZF91MzIoJnBkZXYtPmRldiwgImhpc2lsaWNvbixzY2wtaWQiLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcGFfcG11LT5zY2NsX2lkKSkgewo+IAo+IGht bW0uLi4gSSBkbyB3b25kZXIgaWYgd2Ugc2hvdWxkIG1ha2UgaXQgY2xlYXJlciBpbiB0aGUgZHJp dmVyIHRoYXQgdGhpcyBpcyB0aGUgU0lDTC4gSSBrbm93IEkKClRoaXMgaXMgdXNlZCB0byBjaGVj ayB0aGUgY3B1IGNvcmUgaW4gU0NDTCBhZmZpbml0eSB3aGVuIG9ubGluZS9vZmZsaW5lIGNwdSBj b3JlLgpCdXQgZm9yIFBNVSBuYW1lLCB3ZSBzaG93IGl0IHVzaW5nIFNJQ0wgYXMgZm9sbG93LgoK PiBtZW50aW9uZWQgdGhpcyBiZWZvcmUtLXNvcnJ5Cj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZf ZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVhZCBzY2NsLWlkIVxuIik7Cj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZGV2 aWNlX3Byb3BlcnR5X3JlYWRfdTMyKCZwZGV2LT5kZXYsICJoaXNpbGljb24saWR4LWlkIiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBhX3BtdS0+aW5kZXhf aWQpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVh ZCBpZHgtaWQhXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgIHBhX3BtdS0+Y2NsX2lkID0gLTE7Cj4+ICsKPj4gK8KgwqDC oCBwYV9wbXUtPmJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7 Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihwYV9wbXUtPmJhc2UpKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgcGFfcG11IHJlc291cmNl LlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihwYV9wbXUtPmJhc2UpOwo+ PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHBhX3BtdS0+aWRlbnRpZmllciA9IHJlYWRsKHBh X3BtdS0+YmFzZSArIFBBX1BNVV9WRVJTSU9OKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+ PiArfQo+PiArCj4gCj4gLi4uCj4gCj4+ICtzdGF0aWMgaW50IGhpc2lfcGFfcG11X3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGhpc2lf cG11ICpwYV9wbXU7Cj4+ICvCoMKgwqAgY2hhciAqbmFtZTsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+ PiArCj4+ICvCoMKgwqAgcGFfcG11ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigq cGFfcG11KSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKCFwYV9wbXUpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGhpc2lfcGFfcG11 X2Rldl9wcm9iZShwZGV2LCBwYV9wbXUpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFBBIGlzIGF0 dGFjaGVkIGluIFNJQ0wgYW5kIHRoZSBDUFUgY29yZSBpcyBjaG9zZW4gdG8gbWFuYWdlIHRoaXMK Pj4gK8KgwqDCoMKgICogUE1VIHdoaWNoIGlzIHRoZSBuZWFyZXN0IFNDQ0wsCj4gCj4gZG8gd2Ug cmVhbGx5IG5lZWQgdG8gZG8gdGhpcz8gQ2FuIGFueSBDUFUgaW4gdGhhdCBjaGlwIGRvIGl0PwoK QW55IENQVSBjb3JlIGNhbiBkbyB0aGlzLCBidXQgSSB0aGluayBpdCdzIGJldHRlciB0byBjaG9v c2UgdGhlIG5lYXJlc3QgU0NDTCdzCkNQVSBjb3JlIHRvIGRvIHRoaXMgdGhhdCB3ZSBjYW4gYXZv aWQgY3Jvc3MgU0NDTCBvcGVyYXRpb25zLgoKPiAKPj4gd2hpbGUgaXRzIFNDQ0xfSUQgaXMgZ3Jl YXRlciB0aGFuCj4+ICvCoMKgwqDCoCAqIG9uZSB3aXRoIHRoZSBTSUNMX0lELgo+PiArwqDCoMKg wqAgKi8KPj4gK8KgwqDCoCBuYW1lID0gZGV2bV9rYXNwcmludGYoJnBkZXYtPmRldiwgR0ZQX0tF Uk5FTCwgImhpc2lfc2ljbCV1X3BhJXUiLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwYV9wbXUtPnNjY2xfaWQgLSAxLCBwYV9wbXUtPmluZGV4X2lkKTsKPj4gK8KgwqDC oCBpZiAoIW5hbWUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byBhbGxvY2F0ZSBuYW1lIGZvciBQTVVcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FTk9NRU07Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0ID0gY3B1aHBfc3Rh dGVfYWRkX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfQVJNX0hJU0lfUEFfT05MSU5FLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBhX3BtdS0+bm9kZSk7 Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycigmcGRldi0+ ZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgaG90cGx1Z1xuIiwgcmV0KTsKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcGFfcG11LT5w bXUgPSAoc3RydWN0IHBtdSkgewo+PiArwqDCoMKgwqDCoMKgwqAgLm1vZHVsZcKgwqDCoMKgwqDC oMKgID0gVEhJU19NT0RVTEUsCj4+ICvCoMKgwqDCoMKgwqDCoCAudGFza19jdHhfbnLCoMKgwqAg PSBwZXJmX2ludmFsaWRfY29udGV4dCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5ldmVudF9pbml0wqDC oMKgID0gaGlzaV91bmNvcmVfcG11X2V2ZW50X2luaXQsCj4+ICvCoMKgwqDCoMKgwqDCoCAucG11 X2VuYWJsZcKgwqDCoCA9IGhpc2lfdW5jb3JlX3BtdV9lbmFibGUsCj4+ICvCoMKgwqDCoMKgwqDC oCAucG11X2Rpc2FibGXCoMKgwqAgPSBoaXNpX3VuY29yZV9wbXVfZGlzYWJsZSwKPj4gK8KgwqDC oMKgwqDCoMKgIC5hZGTCoMKgwqDCoMKgwqDCoCA9IGhpc2lfdW5jb3JlX3BtdV9hZGQsCj4+ICvC oMKgwqDCoMKgwqDCoCAuZGVswqDCoMKgwqDCoMKgwqAgPSBoaXNpX3VuY29yZV9wbXVfZGVsLAo+ PiArwqDCoMKgwqDCoMKgwqAgLnN0YXJ0wqDCoMKgwqDCoMKgwqAgPSBoaXNpX3VuY29yZV9wbXVf c3RhcnQsCj4+ICvCoMKgwqDCoMKgwqDCoCAuc3RvcMKgwqDCoMKgwqDCoMKgID0gaGlzaV91bmNv cmVfcG11X3N0b3AsCj4+ICvCoMKgwqDCoMKgwqDCoCAucmVhZMKgwqDCoMKgwqDCoMKgID0gaGlz aV91bmNvcmVfcG11X3JlYWQsCj4+ICvCoMKgwqDCoMKgwqDCoCAuYXR0cl9ncm91cHPCoMKgwqAg PSBwYV9wbXUtPnBtdV9ldmVudHMuYXR0cl9ncm91cHMsCj4+ICvCoMKgwqDCoMKgwqDCoCAuY2Fw YWJpbGl0aWVzwqDCoMKgID0gUEVSRl9QTVVfQ0FQX05PX0VYQ0xVREUsCj4+ICvCoMKgwqAgfTsK Pj4gKwo+PiArwqDCoMKgIHJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZwYV9wbXUtPnBtdSwgbmFt ZSwgLTEpOwo+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIo cGFfcG11LT5kZXYsICJQTVUgcmVnaXN0ZXIgZmFpbGVkLCByZXQgPSAlZFxuIiwgcmV0KTsKPj4g K8KgwqDCoMKgwqDCoMKgIGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9BUF9QRVJG X0FSTV9ISVNJX1BBX09OTElORSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJnBhX3BtdS0+bm9kZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpcnFfc2V0 X2FmZmluaXR5X2hpbnQocGFfcG11LT5pcnEsIE5VTEwpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBhX3BtdSk7Cj4gCj4gYXMgYmVmb3Jl CgpBcG9sb2dpZXMgYW5kIHdpbGwgZml4IHRoaXMuCgo+IAo+PiArwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaGlzaV9wYV9wbXVfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGhpc2lfcG11ICpwYV9w bXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4gKwo+PiArwqDCoMKgIHBlcmZfcG11 X3VucmVnaXN0ZXIoJnBhX3BtdS0+cG11KTsKPj4gK8KgwqDCoCBjcHVocF9zdGF0ZV9yZW1vdmVf aW5zdGFuY2Vfbm9jYWxscyhDUFVIUF9BUF9QRVJGX0FSTV9ISVNJX1BBX09OTElORSwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBhX3BtdS0+bm9k ZSk7Cj4+ICvCoMKgwqAgaXJxX3NldF9hZmZpbml0eV9oaW50KHBhX3BtdS0+aXJxLCBOVUxMKTsK Pj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBoaXNpX3BhX3BtdV9kcml2ZXIgPSB7Cj4+ICvCoMKgwqAgLmRyaXZlciA9 IHsKPj4gK8KgwqDCoMKgwqDCoMKgIC5uYW1lID0gImhpc2lfcGFfcG11IiwKPj4gK8KgwqDCoMKg wqDCoMKgIC5hY3BpX21hdGNoX3RhYmxlID0gaGlzaV9wYV9wbXVfYWNwaV9tYXRjaCwKPiAKPiBz b21lIHNtYWxsIGNvbW1lbnRzIG9uIGVhcmxpZXIgcGF0Y2ggcmV2aWV3cyBhcHBseSBoZXJlCj4g CgpPaywKCj4+ICvCoMKgwqAgfSwKPj4gK8KgwqDCoCAucHJvYmUgPSBoaXNpX3BhX3BtdV9wcm9i ZSwKPj4gK8KgwqDCoCAucmVtb3ZlID0gaGlzaV9wYV9wbXVfcmVtb3ZlLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGludCBfX2luaXQgaGlzaV9wYV9wbXVfbW9kdWxlX2luaXQodm9pZCkKPj4gK3sK Pj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgcmV0ID0gY3B1aHBfc2V0dXBfc3Rh dGVfbXVsdGkoQ1BVSFBfQVBfUEVSRl9BUk1fSElTSV9QQV9PTkxJTkUsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkFQX1BFUkZfQVJNX0hJU0lfUEFfT05M SU5FIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoaXNp X3VuY29yZV9wbXVfb25saW5lX2NwdSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBoaXNpX3VuY29yZV9wbXVfb2ZmbGluZV9jcHUpOwo+PiArwqDCoMKgIGlm IChyZXQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiUEEgUE1VOiBjcHVocCBzdGF0ZSBz ZXR1cCBmYWlsZWQsIHJldCA9ICVkXG4iLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJf cmVnaXN0ZXIoJmhpc2lfcGFfcG11X2RyaXZlcik7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8Kg wqDCoMKgwqDCoMKgIGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX0FSTV9I SVNJX1BBX09OTElORSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArbW9k dWxlX2luaXQoaGlzaV9wYV9wbXVfbW9kdWxlX2luaXQpOwo+PiArCj4+ICtzdGF0aWMgdm9pZCBf X2V4aXQgaGlzaV9wYV9wbXVfbW9kdWxlX2V4aXQodm9pZCkKPj4gK3sKPj4gK8KgwqDCoCBwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGlzaV9wYV9wbXVfZHJpdmVyKTsKPj4gK8KgwqDCoCBj cHVocF9yZW1vdmVfbXVsdGlfc3RhdGUoQ1BVSFBfQVBfUEVSRl9BUk1fSElTSV9QQV9PTkxJTkUp Owo+PiArfQo+PiArbW9kdWxlX2V4aXQoaGlzaV9wYV9wbXVfbW9kdWxlX2V4aXQpOwo+PiArCj4+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIkhpU2lsaWNvbiBQQSB1bmNvcmUgUE1VIGRyaXZlciIpOwo+ IAo+IG5pdCBtYXliZSBoYXZlICJQQSAoUHJvdG9jb2wgQWRhcHRlcikiCj4gCgpTdXJlLAoKVGhh bmtzLApTaGFva3VuCgoKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4gK01PRFVMRV9B VVRIT1IoIlNoYW9rdW4gWmhhbmcgPHpoYW5nc2hhb2t1bkBoaXNpbGljb24uY29tPiIpOwo+PiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L2Nw dWhvdHBsdWcuaAo+PiBpbmRleCBiNWUwNGY5YjY4ZjEuLjM3ZjU5MWVkODBkMCAxMDA2NDQKPj4g LS0tIGEvaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmgKPj4gKysrIGIvaW5jbHVkZS9saW51eC9j cHVob3RwbHVnLmgKPj4gQEAgLTE3NCw2ICsxNzQsNyBAQCBlbnVtIGNwdWhwX3N0YXRlIHsKPj4g wqDCoMKgwqDCoCBDUFVIUF9BUF9QRVJGX0FSTV9ISVNJX0REUkNfT05MSU5FLAo+PiDCoMKgwqDC oMKgIENQVUhQX0FQX1BFUkZfQVJNX0hJU0lfSEhBX09OTElORSwKPj4gwqDCoMKgwqDCoCBDUFVI UF9BUF9QRVJGX0FSTV9ISVNJX0wzX09OTElORSwKPj4gK8KgwqDCoCBDUFVIUF9BUF9QRVJGX0FS TV9ISVNJX1BBX09OTElORSwKPj4gwqDCoMKgwqDCoCBDUFVIUF9BUF9QRVJGX0FSTV9ISVNJX1NM TENfT05MSU5FLAo+PiDCoMKgwqDCoMKgIENQVUhQX0FQX1BFUkZfQVJNX0wyWDBfT05MSU5FLAo+ PiDCoMKgwqDCoMKgIENQVUhQX0FQX1BFUkZfQVJNX1FDT01fTDJfT05MSU5FLAo+Pgo+IAo+IC4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK