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 0D3A1FF513A for ; Wed, 8 Apr 2026 02:53:58 +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:To:Subject:Cc: 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=0FALS3011A6GfC3FthSWI9x2JSdfEsTzkKWwKgpBbps=; b=aJauSlaI8tBlUc j67ON8Y9gBdsp1iRmwa05JowXYqkhzG6kXCgEx8i80g90Vmgpt0booQ00SF6omDDxOtNQ0+vzF7XI ylJvt+POgwj3zojQnl22HNr1D5I5onyavIKfms0wAJaJG7nVGFYa2eY6xoSZonmiM8gH4K3ssYIF2 HoJ1tqjd3v4EoFOD0qvbMgVPLwYxnFtVony4vQBp2iwi2y/ivQV32OCuIOXcXM0t68SMi9NmRZ2oz 5zRGEGSfmQVuiGIQVCrfJJ0R5hSwjk1A7bAUYtDhkdX1phXc4+iRZYr7SsDzuil4lFBRIm/YOoII/ jtgwaY/gZ/cLHY2z4KHw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wAJ3F-000000089zv-1j9A; Wed, 08 Apr 2026 02:53:57 +0000 Received: from mail-m478512573.xmail.ntesmail.com ([47.85.125.73]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wAJ3A-000000089zW-1r83; Wed, 08 Apr 2026 02:53:56 +0000 Received: from [172.16.12.17] (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 39e20ca6b; Wed, 8 Apr 2026 10:53:43 +0800 (GMT+08:00) Message-ID: Date: Wed, 8 Apr 2026 10:53:42 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.13.1 Cc: shawn.lin@rock-chips.com, linux-rockchip@lists.infradead.org, Heiko Stuebner , Neil Armstrong , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] phy: rockchip: naneng-combphy: Consolidate SSC configuration To: Vinod Koul , linux-phy@lists.infradead.org References: <1772696450-139583-1-git-send-email-shawn.lin@rock-chips.com> <6159826d-0f79-a204-a446-d863644abbb0@rock-chips.com> From: Shawn Lin In-Reply-To: <6159826d-0f79-a204-a446-d863644abbb0@rock-chips.com> X-HM-Tid: 0a9d6b02908309cckunm3d36b83c38ea46 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZQk1NGVZMTkhIQx9JSE1MSEJWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=C9rlPLt548aiFYZ6T4KTTt59Ip2LD/hAXdZgTYfhiP3gv+f7//bLLoGI+eVzP3JWhIiVUR6iMHF22V1UjnXLAwbaTxTbyKV/dzdLdW7em1Wfbk/tXBpKHP3DE1N0fPo7uNVJpnYbdsrk6DlLKDlEdk6Db0m3ZjFjzeJm4SeajJg=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=iUVNdXVYzKmZYVQFKhSD6IlO5Ku6zzmSXDxmhEKEoBU=; h=date:mime-version:subject:message-id:from; X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260407_195354_431186_78290F75 X-CRM114-Status: GOOD ( 17.95 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list 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-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org SGkgVmlub2QgYW5kIGxpbnV4LXBoeSBmb2xrcwoK5ZyoIDIwMjYvMDMvMjUg5pif5pyf5LiJIDE1 OjExLCBTaGF3biBMaW4g5YaZ6YGTOgo+IEhpIFZpbm9kCj4gCj4g5ZyoIDIwMjYvMDMvMDUg5pif 5pyf5ZubIDE1OjQwLCBTaGF3biBMaW4g5YaZ6YGTOgo+PiBUaGUgUENJZSBTU0MgY29uZmlndXJh dGlvbiBmb3IgdGhlIFJLMzU4OCBhbmQgUkszNTc2IFNvQ3MgcmVxdWlyZWQKPj4gYWRkaXRpb25h bCB0dW5pbmcgd2hpY2ggaXMgbWlzc2luZy4gV2hlbiBhZGRpbmcgdGhlc2Ugc2FtZSBTU0MKPj4g Y29uZmlndXJhdGlvbnMgZm9yIGJvdGggb2YgdGhlc2UgdHdvIFNvQ3MsIGFzIHdlbGwgYXMgdXBj b21pbmcKPj4gcGxhdGZvcm1zLCBpdCdzIG9idmlvdXMgdGhlIFNTQyBzZXR1cCBjb2RlIHdhcyBs YXJnZWx5IGR1cGxpY2F0ZWQKPj4gYWNyb3NzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1 cmF0aW9uIGZ1bmN0aW9ucy4gVGhpcyBiZWNvbWVzCj4+IGhhcmRlciB0byBtYWludGFpbiBhcyBt b3JlIHBsYXRmb3JtcyBhcmUgYWRkZWQuCj4+Cj4+IFNvIGV4dHJhY3QgdGhlIGNvbW1vbiBTU0Mg bG9naWMgaW50byBhIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb24sCj4+IHJrX2NvbWJwaHlfY29tbW9u X2NmZ19zc2MoKS4gVGhpcyBjbGVhbnMgdXAgdGhlIHBlci1wbGF0Zm9ybSBkcml2ZXJzCj4+IGFu ZCBjZW50cmFsaXplcyB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBhcyBwb3NzaWJsZS4KPj4K PiAKPiBHZW50bGUgcGluZy4uLgo+IAoKSSBzYXcgdGhlcmUgYXJlIGxvdHMgb2YgcGVuZGluZyBw aHkgcGF0Y2hlcyB3YWl0aW5nIGluIHF1ZXVlLCBwaW5naW5nIApmb3IgcmV2aWV3aW5nLCBidXQg YW5kIHRoZSBsaW51eC1waHkgWzFdIGhhc24ndCB1cGRhdGVkIGZvciBxdWl0ZSBhIGxvbmcKdGlt ZS4gSXQncyBsYXRjIC1SQzcgbm93LCBJIHRoaW5rIHRoaXMgcGF0Y2ggd2lsbCBtaXNzIHRoaXMg bWVyZ2UKd2luZG93cyB3aXRob3V0IHN1cnByaXNlLiBCdXQgd2hhdCdzIHRoZSBwbGFuIGZvciB0 aGlzPwoKWzFdIApodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dp dC92a291bC9waHkuZ2l0L2xvZy8/aD1uZXh0Cgo+PiBTaWduZWQtb2ZmLWJ5OiBTaGF3biBMaW4g PHNoYXduLmxpbkByb2NrLWNoaXBzLmNvbT4KPj4KPj4gLS0tCj4+Cj4+IENoYW5nZXMgaW4gdjI6 Cj4+IC0gcmV3b3JrIHRvIGNvbnNvbGlkYXRlIG1vcmUgY29uZmlndXJhdGlvbgo+PiAtIHJld29y ZCB0aGUgY29tbWl0IG1lc3NhZ2UKPj4KPj4gwqAgZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJv Y2tjaGlwLW5hbmVuZy1jb21icGh5LmMgfCAxNzMgCj4+ICsrKysrKysrKy0tLS0tLS0tLS0tLQo+ PiDCoCAxIGZpbGUgY2hhbmdlZCwgNzMgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQo+ Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVu Zy1jb21icGh5LmMgCj4+IGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVu Zy1jb21icGh5LmMKPj4gaW5kZXggYjYwZDZiZi4uMmIwZjE1MiAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKPj4gKysrIGIv ZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKPj4gQEAg LTEyMSw2ICsxMjEsNyBAQAo+PiDCoCAjZGVmaW5lIFJLMzU2OF9QSFlSRUczMl9TU0NfT0ZGU0VU XzUwMFBQTcKgwqDCoCAxCj4+IMKgICNkZWZpbmUgUkszNTY4X1BIWVJFRzMzwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDB4ODAKPj4gKyNkZWZpbmUgUkszNTY4X1BIWVJFRzMzX1BMTF9T U0NfQ1RSTMKgwqDCoMKgwqDCoMKgIEJJVCg1KQo+PiDCoCAjZGVmaW5lIFJLMzU2OF9QSFlSRUcz M19QTExfS1ZDT19NQVNLwqDCoMKgwqDCoMKgwqAgR0VOTUFTSyg0LCAyKQo+PiDCoCAjZGVmaW5l IFJLMzU2OF9QSFlSRUczM19QTExfS1ZDT19TSElGVMKgwqDCoMKgwqDCoMKgIDIKPj4gwqAgI2Rl ZmluZSBSSzM1NjhfUEhZUkVHMzNfUExMX0tWQ09fVkFMVUXCoMKgwqDCoMKgwqDCoCAyCj4+IEBA IC00NDYsNiArNDQ3LDc0IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wcm9iZShzdHJ1 Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VS Ul9PUl9aRVJPKHBoeV9wcm92aWRlcik7Cj4+IMKgIH0KPj4gK3N0YXRpYyB2b2lkIHJrX2NvbWJw aHlfY29tbW9uX2NmZ19zc2Moc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAKPj4gKnByaXYs IHVuc2lnbmVkIGxvbmcgcmF0ZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wID0gcHJpdi0+ZGV2LT5vZl9ub2RlOwo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoIXByaXYtPmVuYWJsZV9zc2MpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ ICsKPj4gK8KgwqDCoCAvKiBTZXQgU1NDIGRvd253YXJkIHNwcmVhZCBzcGVjdHJ1bSBmb3IgUENJ ZSBhbmQgVVNCMyAqLwo+PiArwqDCoMKgIGlmIChwcml2LT50eXBlID09IFBIWV9UWVBFX1BDSUUg fHwgcHJpdi0+dHlwZSA9PSBQSFlfVFlQRV9VU0IzKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwg PSBGSUVMRF9QUkVQKFJLMzU2OF9QSFlSRUczMl9TU0NfTUFTSywgCj4+IFJLMzU2OF9QSFlSRUcz Ml9TU0NfRE9XTldBUkQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcm9ja2NoaXBfY29tYnBoeV91cGRh dGVsKHByaXYsIFJLMzU2OF9QSFlSRUczMl9TU0NfTUFTSywgdmFsLCAKPj4gUkszNTY4X1BIWVJF RzMyKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKiBTZXQgU1NDIGRvd253YXJkIHNw cmVhZCBzcGVjdHJ1bSArNTAwcHBtIGZvciBTQVRBIGluIDEwME1IeiAqLwo+PiArwqDCoMKgIGlm IChwcml2LT50eXBlID09IFBIWV9UWVBFX1NBVEEgJiYgcmF0ZSA9PSBSRUZfQ0xPQ0tfMTAwTUh6 KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgPSBGSUVMRF9QUkVQKFJLMzU2OF9QSFlSRUczMl9T U0NfRElSX01BU0ssCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSSzM1Njhf UEhZUkVHMzJfU1NDX0RPV05XQVJEKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8PSBGSUVMRF9Q UkVQKFJLMzU2OF9QSFlSRUczMl9TU0NfT0ZGU0VUX01BU0ssCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFJLMzU2OF9QSFlSRUczMl9TU0NfT0ZGU0VUXzUwMFBQTSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21icGh5X3VwZGF0ZWwocHJpdiwgUkszNTY4X1BI WVJFRzMyX1NTQ19NQVNLLCB2YWwsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFJLMzU2OF9QSFlSRUczMik7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAg LyogRW5hYmxlIFNTQyAqLwo+PiArwqDCoMKgIHZhbCA9IHJlYWRsKHByaXYtPm1taW8gKyBSSzM1 NjhfUEhZUkVHOCk7Cj4+ICvCoMKgwqAgdmFsIHw9IFJLMzU2OF9QSFlSRUc4X1NTQ19FTjsKPj4g K8KgwqDCoCB3cml0ZWwodmFsLCBwcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzgpOwo+PiArCj4+ ICvCoMKgwqAgLyogU29tZSBTb0NzIG5lZWQgdHVuaW5nIFBDSWUgU1NDIGluc3RlYWQgb2YgZGVm YXVsdCAKPj4gY29uZmlndXJhdGlvbiBpbiAyNE1IeiAqLwo+PiArwqDCoMKgIGlmICghb2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUobnAsIAo+PiAicm9ja2NoaXAscmszNTg4LW5hbmVuZy1jb21icGh5 IikgJiYKPj4gK8KgwqDCoMKgwqDCoMKgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInJv Y2tjaGlwLHJrMzU3Ni1uYW5lbmctY29tYnBoeSIpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+PiArCj4+ICvCoMKgwqAgLyogUExMIGNvbnRyb2wgU1NDIG1vZHVsZSBwZXJpb2Qgc2hvdWxk IGJlIHNldCBpZiBuZWVkIHR1bmluZyAqLwo+PiArwqDCoMKgIHZhbCA9IHJlYWRsKHByaXYtPm1t aW8gKyBSSzM1NjhfUEhZUkVHMzMpOwo+PiArwqDCoMKgIHZhbCB8PSBSSzM1NjhfUEhZUkVHMzNf UExMX1NTQ19DVFJMOwo+PiArwqDCoMKgIHdyaXRlbCh2YWwsIHByaXYtPm1taW8gKyBSSzM1Njhf UEhZUkVHMzMpOwo+PiArCj4+ICvCoMKgwqAgaWYgKHByaXYtPnR5cGUgPT0gUEhZX1RZUEVfUENJ RSAmJiByYXRlID09IFJFRl9DTE9DS18yNE1Ieikgewo+PiArwqDCoMKgwqDCoMKgwqAgLyogU2V0 IFBMTCBsb29wIGRpdmlkZXIgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbCgweDAwLCBwcml2 LT5tbWlvICsgUkszNTc2X1BIWVJFRzE3KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbChSSzM1 NjhfUEhZUkVHMThfUExMX0xPT1AsIHByaXYtPm1taW8gKyBSSzM1NjhfUEhZUkVHMTgpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBTZXQgdXAgcnhfcGNrIGludmVydCBhbmQgcnggbXNiIHRv IGRpc2FibGUgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbCgweDAwLCBwcml2LT5tbWlvICsg UkszNTg4X1BIWVJFRzI3KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKg wqDCoMKgwqAgKiBTZXQgdXAgU1UgYWRqdXN0IHNpZ25hbDoKPj4gK8KgwqDCoMKgwqDCoMKgwqAg KiBzdV90cmltWzc6MF0swqDCoCBQTEwgS1ZDTyBhZGp1c3QgYml0c1syOjBdIHRvIG1pbgo+PiAr wqDCoMKgwqDCoMKgwqDCoCAqIHN1X3RyaW1bMTU6OF0swqAgUExMIExQRiBSMSBhZHVqc3QgYml0 c1s5OjddPTMnYjEwMQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHN1X3RyaW1bMjM6MTZdLCBDS1JD ViBhZGp1c3QKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBzdV90cmltWzMxOjI0XSwgQ0tEUlYgYWRq dXN0Cj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwoMHg5 MCwgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxMSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0 ZWwoMHgwMiwgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxMik7Cj4+ICvCoMKgwqDCoMKgwqDC oCB3cml0ZWwoMHgwOCwgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxMyk7Cj4+ICvCoMKgwqDC oMKgwqDCoCB3cml0ZWwoMHg1NywgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxNCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCB3cml0ZWwoMHg0MCwgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxNSk7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbChSSzM1NjhfUEhZUkVHMTZfU1NDX0NOVF9W QUxVRSwgcHJpdi0+bW1pbyArIAo+PiBSSzM1NjhfUEhZUkVHMTYpOwo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoCB2YWwgPSBGSUVMRF9QUkVQKFJLMzU2OF9QSFlSRUczM19QTExfS1ZDT19NQVNLLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkszNTc2X1BIWVJFRzMzX1BMTF9L VkNPX1ZBTFVFKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbCh2YWwsIHByaXYtPm1taW8gKyBS SzM1NjhfUEhZUkVHMzMpOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgaW50 IHJrMzUyOF9jb21icGh5X2NmZyhzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2KQo+ PiDCoCB7Cj4+IMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2Zn ICpjZmcgPSBwcml2LT5jZmctPmdyZmNmZzsKPj4gQEAgLTYwMCwyMSArNjY5LDEyIEBAIHN0YXRp YyBpbnQgcmszNTYyX2NvbWJwaHlfY2ZnKHN0cnVjdCAKPj4gcm9ja2NoaXBfY29tYnBoeV9wcml2 ICpwcml2KQo+PiDCoMKgwqDCoMKgIHN3aXRjaCAocHJpdi0+dHlwZSkgewo+PiDCoMKgwqDCoMKg IGNhc2UgUEhZX1RZUEVfUENJRToKPj4gLcKgwqDCoMKgwqDCoMKgIC8qIFNldCBTU0MgZG93bndh cmQgc3ByZWFkIHNwZWN0cnVtICovCj4+IC3CoMKgwqDCoMKgwqDCoCB2YWwgPSBSSzM1NjhfUEhZ UkVHMzJfU1NDX0RPV05XQVJEIDw8IAo+PiBSSzM1NjhfUEhZUkVHMzJfU1NDX0RJUl9TSElGVDsK Pj4gLcKgwqDCoMKgwqDCoMKgIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChwcml2LCBSSzM1Njhf UEhZUkVHMzJfU1NDX01BU0ssIHZhbCwgCj4+IFJLMzU2OF9QSFlSRUczMik7Cj4+IC0KPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0+cGh5X2dy ZiwgCj4+ICZjZmctPmNvbjBfZm9yX3BjaWUsIHRydWUpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LT5waHlfZ3JmLCAKPj4gJmNmZy0+Y29u MV9mb3JfcGNpZSwgdHJ1ZSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21icGh5 X3BhcmFtX3dyaXRlKHByaXYtPnBoeV9ncmYsIAo+PiAmY2ZnLT5jb24yX2Zvcl9wY2llLCB0cnVl KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJp di0+cGh5X2dyZiwgCj4+ICZjZmctPmNvbjNfZm9yX3BjaWUsIHRydWUpOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgY2FzZSBQSFlfVFlQRV9VU0IzOgo+PiAtwqDC oMKgwqDCoMKgwqAgLyogU2V0IFNTQyBkb3dud2FyZCBzcHJlYWQgc3BlY3RydW0gKi8KPj4gLcKg wqDCoMKgwqDCoMKgIHZhbCA9IFJLMzU2OF9QSFlSRUczMl9TU0NfRE9XTldBUkQgPDwgCj4+IFJL MzU2OF9QSFlSRUczMl9TU0NfRElSX1NISUZUOwo+PiAtwqDCoMKgwqDCoMKgwqAgcm9ja2NoaXBf Y29tYnBoeV91cGRhdGVsKHByaXYsIFJLMzU2OF9QSFlSRUczMl9TU0NfTUFTSywgdmFsLAo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSSzM1NjhfUEhZUkVHMzIp Owo+PiAtCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBFbmFibGUgYWRhcHRpdmUgQ1RMRSBmb3Ig VVNCMy4wIFJ4ICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21icGh5X3VwZGF0 ZWwocHJpdiwgUkszNTY4X1BIWVJFRzE1X0NUTEVfRU4sCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJLMzU2OF9QSFlSRUcxNV9DVExFX0VOLCBSSzM1Njhf UEhZUkVHMTUpOwo+PiBAQCAtNzA2LDExICs3NjYsNyBAQCBzdGF0aWMgaW50IHJrMzU2Ml9jb21i cGh5X2NmZyhzdHJ1Y3QgCj4+IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdikKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqAgaWYgKHByaXYtPmVuYWJs ZV9zc2MpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHZhbCA9IHJlYWRsKHByaXYtPm1taW8gKyBSSzM1 NjhfUEhZUkVHOCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCB2YWwgfD0gUkszNTY4X1BIWVJFRzhfU1ND X0VOOwo+PiAtwqDCoMKgwqDCoMKgwqAgd3JpdGVsKHZhbCwgcHJpdi0+bW1pbyArIFJLMzU2OF9Q SFlSRUc4KTsKPj4gLcKgwqDCoCB9Cj4+ICvCoMKgwqAgcmtfY29tYnBoeV9jb21tb25fY2ZnX3Nz Yyhwcml2LCByYXRlKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiBAQCAtNzU1 LDExICs4MTEsNiBAQCBzdGF0aWMgaW50IHJrMzU2OF9jb21icGh5X2NmZyhzdHJ1Y3QgCj4+IHJv Y2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdikKPj4gwqDCoMKgwqDCoCBzd2l0Y2ggKHByaXYtPnR5 cGUpIHsKPj4gwqDCoMKgwqDCoCBjYXNlIFBIWV9UWVBFX1BDSUU6Cj4+IC3CoMKgwqDCoMKgwqDC oCAvKiBTZXQgU1NDIGRvd253YXJkIHNwcmVhZCBzcGVjdHJ1bS4gKi8KPj4gLcKgwqDCoMKgwqDC oMKgIHZhbCA9IFJLMzU2OF9QSFlSRUczMl9TU0NfRE9XTldBUkQgPDwgCj4+IFJLMzU2OF9QSFlS RUczMl9TU0NfRElSX1NISUZUOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21i cGh5X3VwZGF0ZWwocHJpdiwgUkszNTY4X1BIWVJFRzMyX1NTQ19NQVNLLCB2YWwsIAo+PiBSSzM1 NjhfUEhZUkVHMzIpOwo+PiAtCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21icGh5 X3BhcmFtX3dyaXRlKHByaXYtPnBoeV9ncmYsIAo+PiAmY2ZnLT5jb24wX2Zvcl9wY2llLCB0cnVl KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJp di0+cGh5X2dyZiwgCj4+ICZjZmctPmNvbjFfZm9yX3BjaWUsIHRydWUpOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgcm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LT5waHlfZ3JmLCAKPj4g JmNmZy0+Y29uMl9mb3JfcGNpZSwgdHJ1ZSk7Cj4+IEBAIC03NjcsMTAgKzgxOCw2IEBAIHN0YXRp YyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCAKPj4gcm9ja2NoaXBfY29tYnBoeV9wcml2 ICpwcml2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgY2FzZSBQ SFlfVFlQRV9VU0IzOgo+PiAtwqDCoMKgwqDCoMKgwqAgLyogU2V0IFNTQyBkb3dud2FyZCBzcHJl YWQgc3BlY3RydW0uICovCj4+IC3CoMKgwqDCoMKgwqDCoCB2YWwgPSBSSzM1NjhfUEhZUkVHMzJf U1NDX0RPV05XQVJEIDw8IAo+PiBSSzM1NjhfUEhZUkVHMzJfU1NDX0RJUl9TSElGVCwKPj4gLcKg wqDCoMKgwqDCoMKgIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChwcml2LCBSSzM1NjhfUEhZUkVH MzJfU1NDX01BU0ssIHZhbCwgCj4+IFJLMzU2OF9QSFlSRUczMik7Cj4+IC0KPj4gwqDCoMKgwqDC oMKgwqDCoMKgIC8qIEVuYWJsZSBhZGFwdGl2ZSBDVExFIGZvciBVU0IzLjAgUnguICovCj4+IMKg wqDCoMKgwqDCoMKgwqDCoCB2YWwgPSByZWFkbChwcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzE1 KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCB8PSBSSzM1NjhfUEhZUkVHMTVfQ1RMRV9FTjsK Pj4gQEAgLTg4MCwxMyArOTI3LDYgQEAgc3RhdGljIGludCByazM1NjhfY29tYnBoeV9jZmcoc3Ry dWN0IAo+PiByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHdyaXRlbChSSzM1NjhfUEhZUkVHMThfUExMX0xPT1AsIHByaXYtPm1taW8gKyAK Pj4gUkszNTY4X1BIWVJFRzE4KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVs KFJLMzU2OF9QSFlSRUcxMV9TVV9UUklNXzBfNywgcHJpdi0+bW1pbyArIAo+PiBSSzM1NjhfUEhZ UkVHMTEpOwo+PiAtwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChwcml2LT50eXBlID09IFBIWV9U WVBFX1NBVEEpIHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogZG93bndhcmQgc3ByZWFk IHNwZWN0cnVtICs1MDBwcG0gKi8KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsID0gUksz NTY4X1BIWVJFRzMyX1NTQ19ET1dOV0FSRCA8PCAKPj4gUkszNTY4X1BIWVJFRzMyX1NTQ19ESVJf U0hJRlQ7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCB8PSBSSzM1NjhfUEhZUkVHMzJf U1NDX09GRlNFVF81MDBQUE0gPDwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBSSzM1NjhfUEhZUkVHMzJfU1NDX09GRlNFVF9TSElGVDsKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHByaXYsIFJLMzU2OF9QSFlSRUczMl9T U0NfTUFTSywgCj4+IHZhbCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBSSzM1NjhfUEhZUkVHMzIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IEBAIC05MDksMTEgKzk0OSw3IEBAIHN0YXRp YyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCAKPj4gcm9ja2NoaXBfY29tYnBoeV9wcml2 ICpwcml2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIH0KPj4gLcKgwqDC oCBpZiAocHJpdi0+ZW5hYmxlX3NzYykgewo+PiAtwqDCoMKgwqDCoMKgwqAgdmFsID0gcmVhZGwo cHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUc4KTsKPj4gLcKgwqDCoMKgwqDCoMKgIHZhbCB8PSBS SzM1NjhfUEhZUkVHOF9TU0NfRU47Cj4+IC3CoMKgwqDCoMKgwqDCoCB3cml0ZWwodmFsLCBwcml2 LT5tbWlvICsgUkszNTY4X1BIWVJFRzgpOwo+PiAtwqDCoMKgIH0KPj4gK8KgwqDCoCBya19jb21i cGh5X2NvbW1vbl9jZmdfc3NjKHByaXYsIHJhdGUpOwo+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+ PiDCoCB9Cj4+IEBAIC05NzIsMTAgKzEwMDgsNiBAQCBzdGF0aWMgaW50IHJrMzU3Nl9jb21icGh5 X2NmZyhzdHJ1Y3QgCj4+IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJpdikKPj4gwqDCoMKgwqDC oCBzd2l0Y2ggKHByaXYtPnR5cGUpIHsKPj4gwqDCoMKgwqDCoCBjYXNlIFBIWV9UWVBFX1BDSUU6 Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBTZXQgU1NDIGRvd253YXJkIHNwcmVhZCBzcGVjdHJ1bSAq Lwo+PiAtwqDCoMKgwqDCoMKgwqAgdmFsID0gRklFTERfUFJFUChSSzM1NjhfUEhZUkVHMzJfU1ND X01BU0ssIAo+PiBSSzM1NjhfUEhZUkVHMzJfU1NDX0RPV05XQVJEKTsKPj4gLcKgwqDCoMKgwqDC oMKgIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChwcml2LCBSSzM1NjhfUEhZUkVHMzJfU1NDX01B U0ssIHZhbCwgCj4+IFJLMzU2OF9QSFlSRUczMik7Cj4+IC0KPj4gwqDCoMKgwqDCoMKgwqDCoMKg IHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0+cGh5X2dyZiwgCj4+ICZjZmctPmNv bjBfZm9yX3BjaWUsIHRydWUpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcm9ja2NoaXBfY29tYnBo eV9wYXJhbV93cml0ZShwcml2LT5waHlfZ3JmLCAKPj4gJmNmZy0+Y29uMV9mb3JfcGNpZSwgdHJ1 ZSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHBy aXYtPnBoeV9ncmYsIAo+PiAmY2ZnLT5jb24yX2Zvcl9wY2llLCB0cnVlKTsKPj4gQEAgLTk4Mywx MCArMTAxNSw2IEBAIHN0YXRpYyBpbnQgcmszNTc2X2NvbWJwaHlfY2ZnKHN0cnVjdCAKPj4gcm9j a2NoaXBfY29tYnBoeV9wcml2ICpwcml2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ IMKgwqDCoMKgwqAgY2FzZSBQSFlfVFlQRV9VU0IzOgo+PiAtwqDCoMKgwqDCoMKgwqAgLyogU2V0 IFNTQyBkb3dud2FyZCBzcHJlYWQgc3BlY3RydW0gKi8KPj4gLcKgwqDCoMKgwqDCoMKgIHZhbCA9 IEZJRUxEX1BSRVAoUkszNTY4X1BIWVJFRzMyX1NTQ19NQVNLLCAKPj4gUkszNTY4X1BIWVJFRzMy X1NTQ19ET1dOV0FSRCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCByb2NrY2hpcF9jb21icGh5X3VwZGF0 ZWwocHJpdiwgUkszNTY4X1BIWVJFRzMyX1NTQ19NQVNLLCB2YWwsIAo+PiBSSzM1NjhfUEhZUkVH MzIpOwo+PiAtCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBFbmFibGUgYWRhcHRpdmUgQ1RMRSBm b3IgVVNCMy4wIFJ4ICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgPSByZWFkbChwcml2LT5t bWlvICsgUkszNTY4X1BIWVJFRzE1KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCB8PSBSSzM1 NjhfUEhZUkVHMTVfQ1RMRV9FTjsKPj4gQEAgLTExMTAsMTQgKzExMzgsNiBAQCBzdGF0aWMgaW50 IHJrMzU3Nl9jb21icGh5X2NmZyhzdHJ1Y3QgCj4+IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiAqcHJp dikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKDB4ODgsIHByaXYtPm1taW8g KyBSSzM1NjhfUEhZUkVHMTMpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0ZWwo MHg1NiwgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxNCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB9IGVsc2UgaWYgKHByaXYtPnR5cGUgPT0gUEhZX1RZUEVfU0FUQSkgewo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBkb3dud2FyZCBzcHJlYWQgc3BlY3RydW0gKzUwMHBwbSAqLwo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgPSBGSUVMRF9QUkVQKFJLMzU2OF9QSFlSRUczMl9T U0NfRElSX01BU0ssCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFJLMzU2OF9QSFlSRUczMl9TU0NfRE9XTldBUkQpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB2YWwgfD0gRklFTERfUFJFUChSSzM1NjhfUEhZUkVHMzJfU1NDX09GRlNFVF9NQVNLLAo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJLMzU2OF9QSFlSRUcz Ml9TU0NfT0ZGU0VUXzUwMFBQTSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJvY2tjaGlw X2NvbWJwaHlfdXBkYXRlbChwcml2LCBSSzM1NjhfUEhZUkVHMzJfU1NDX01BU0ssIAo+PiB2YWws Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUksz NTY4X1BIWVJFRzMyKTsKPj4gLQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBzc2Mg cHBtIGFkanVzdCB0byAzNTAwcHBtICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJv Y2tjaGlwX2NvbWJwaHlfdXBkYXRlbChwcml2LCAKPj4gUkszNTc2X1BIWVJFRzEwX1NTQ19QQ01f TUFTSywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBSSzM1NzZfUEhZUkVHMTBfU1NDX1BDTV8zNTAwUFBNLAo+PiBAQCAtMTE1NiwzOSArMTE3 Niw3IEBAIHN0YXRpYyBpbnQgcmszNTc2X2NvbWJwaHlfY2ZnKHN0cnVjdCAKPj4gcm9ja2NoaXBf Y29tYnBoeV9wcml2ICpwcml2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKg IH0KPj4gLcKgwqDCoCBpZiAocHJpdi0+ZW5hYmxlX3NzYykgewo+PiAtwqDCoMKgwqDCoMKgwqAg dmFsID0gcmVhZGwocHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUc4KTsKPj4gLcKgwqDCoMKgwqDC oMKgIHZhbCB8PSBSSzM1NjhfUEhZUkVHOF9TU0NfRU47Cj4+IC3CoMKgwqDCoMKgwqDCoCB3cml0 ZWwodmFsLCBwcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzgpOwo+PiAtCj4+IC3CoMKgwqDCoMKg wqDCoCBpZiAocHJpdi0+dHlwZSA9PSBQSFlfVFlQRV9QQ0lFICYmIHJhdGUgPT0gUkVGX0NMT0NL XzI0TUh6KSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFNldCBQTEwgbG9vcCBkaXZp ZGVyICovCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdyaXRlbCgweDAwLCBwcml2LT5tbWlv ICsgUkszNTc2X1BIWVJFRzE3KTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKFJL MzU2OF9QSFlSRUcxOF9QTExfTE9PUCwgcHJpdi0+bW1pbyArIAo+PiBSSzM1NjhfUEhZUkVHMTgp Owo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFNldCB1cCByeF9wY2sgaW52ZXJ0 IGFuZCByeCBtc2IgdG8gZGlzYWJsZSAqLwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0 ZWwoMHgwMCwgcHJpdi0+bW1pbyArIFJLMzU4OF9QSFlSRUcyNyk7Cj4+IC0KPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyoKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFNldCB1cCBT VSBhZGp1c3Qgc2lnbmFsOgo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc3VfdHJpbVs3 OjBdLMKgwqAgUExMIEtWQ08gYWRqdXN0IGJpdHNbMjowXSB0byBtaW4KPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIHN1X3RyaW1bMTU6OF0swqAgUExMIExQRiBSMSBhZHVqc3QgYml0c1s5 OjddPTMnYjEwMQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc3VfdHJpbVsyMzoxNl0s IENLUkNWIGFkanVzdAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc3VfdHJpbVszMToy NF0sIENLRFJWIGFkanVzdAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHdyaXRlbCgweDkwLCBwcml2LT5tbWlvICsgUkszNTY4X1BIWVJF RzExKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKDB4MDIsIHByaXYtPm1taW8g KyBSSzM1NjhfUEhZUkVHMTIpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0ZWwoMHgw OCwgcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxMyk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHdyaXRlbCgweDU3LCBwcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzE0KTsKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKDB4NDAsIHByaXYtPm1taW8gKyBSSzM1NjhfUEhZUkVH MTUpOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdyaXRlbChSSzM1NjhfUEhZUkVH MTZfU1NDX0NOVF9WQUxVRSwgcHJpdi0+bW1pbyArIAo+PiBSSzM1NjhfUEhZUkVHMTYpOwo+PiAt Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCA9IEZJRUxEX1BSRVAoUkszNTY4X1BIWVJF RzMzX1BMTF9LVkNPX01BU0ssCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFJLMzU3Nl9QSFlSRUczM19QTExfS1ZDT19WQUxVRSk7Cj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHdyaXRlbCh2YWwsIHByaXYtPm1taW8gKyBSSzM1NjhfUEhZUkVHMzMpOwo+PiAt wqDCoMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIH0KPj4gK8KgwqDCoCBya19jb21icGh5X2NvbW1v bl9jZmdfc3NjKHByaXYsIHJhdGUpOwo+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+ IEBAIC0xMjU1LDEwICsxMjQzLDYgQEAgc3RhdGljIGludCByazM1ODhfY29tYnBoeV9jZmcoc3Ry dWN0IAo+PiByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCBjYXNlIFBIWV9U WVBFX1VTQjM6Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBTZXQgU1NDIGRvd253YXJkIHNwcmVhZCBz cGVjdHJ1bSAqLwo+PiAtwqDCoMKgwqDCoMKgwqAgdmFsID0gUkszNTY4X1BIWVJFRzMyX1NTQ19E T1dOV0FSRCA8PCAKPj4gUkszNTY4X1BIWVJFRzMyX1NTQ19ESVJfU0hJRlQ7Cj4+IC3CoMKgwqDC oMKgwqDCoCByb2NrY2hpcF9jb21icGh5X3VwZGF0ZWwocHJpdiwgUkszNTY4X1BIWVJFRzMyX1NT Q19NQVNLLCB2YWwsIAo+PiBSSzM1NjhfUEhZUkVHMzIpOwo+PiAtCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBFbmFibGUgYWRhcHRpdmUgQ1RMRSBmb3IgVVNCMy4wIFJ4LiAqLwo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgdmFsID0gcmVhZGwocHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxNSk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgfD0gUkszNTY4X1BIWVJFRzE1X0NUTEVfRU47Cj4+IEBA IC0xMzQzLDEzICsxMzI3LDYgQEAgc3RhdGljIGludCByazM1ODhfY29tYnBoeV9jZmcoc3RydWN0 IAo+PiByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIFNldCB1cCBzdV90cmltOsKgICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHdyaXRlbChSSzM1NjhfUEhZUkVHMTFfU1VfVFJJTV8wXzcsIHByaXYtPm1taW8gKyAKPj4g UkszNTY4X1BIWVJFRzExKTsKPj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAocHJpdi0+dHlw ZSA9PSBQSFlfVFlQRV9TQVRBKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGRvd253 YXJkIHNwcmVhZCBzcGVjdHJ1bSArNTAwcHBtICovCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHZhbCA9IFJLMzU2OF9QSFlSRUczMl9TU0NfRE9XTldBUkQgPDwgCj4+IFJLMzU2OF9QSFlSRUcz Ml9TU0NfRElSX1NISUZUOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgfD0gUkszNTY4 X1BIWVJFRzMyX1NTQ19PRkZTRVRfNTAwUFBNIDw8Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgUkszNTY4X1BIWVJFRzMyX1NTQ19PRkZTRVRfU0hJRlQ7Cj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChwcml2LCBSSzM1Njhf UEhZUkVHMzJfU1NDX01BU0ssIAo+PiB2YWwsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkszNTY4X1BIWVJFRzMyKTsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiDCoMKgwqDCoMKgIGRlZmF1 bHQ6Cj4+IEBAIC0xMzcxLDExICsxMzQ4LDcgQEAgc3RhdGljIGludCByazM1ODhfY29tYnBoeV9j Zmcoc3RydWN0IAo+PiByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIGlmIChwcml2LT5lbmFibGVfc3Nj KSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCB2YWwgPSByZWFkbChwcml2LT5tbWlvICsgUkszNTY4X1BI WVJFRzgpOwo+PiAtwqDCoMKgwqDCoMKgwqAgdmFsIHw9IFJLMzU2OF9QSFlSRUc4X1NTQ19FTjsK Pj4gLcKgwqDCoMKgwqDCoMKgIHdyaXRlbCh2YWwsIHByaXYtPm1taW8gKyBSSzM1NjhfUEhZUkVH OCk7Cj4+IC3CoMKgwqAgfQo+PiArwqDCoMKgIHJrX2NvbWJwaHlfY29tbW9uX2NmZ19zc2MocHJp diwgcmF0ZSk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIH0KPiAKCi0tIApsaW51eC1w aHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=