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 52B85C4345F for ; Mon, 29 Apr 2024 08:03:11 +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: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=BFLyjF2cUf/C9CKcXPIWRmIEKWmeo7vd259B/urvLzE=; b=gH/6pUGge8p+iQ PfFXs9WLktMGPu4rSNC2D0aeGF/wNfhVFZDjTQwDbH+10L5xOlof3RgTG0xOSfIXYm3gmBbO1Xhh6 3V6f5phv1v/Y/GsfeBhCuLwmadFWCso3/7aaosYGVnpVf4XMuztRh53geJFe6tOpBt+7iIuoG78Qm og/CCY2HZxK0PWp/dJeGgBgMx2kFGNcjRMClUZ6xDEFKn5rDtZBR3N3zwU5QL25y638AN9gQDhEHI LTHDxeKvcJ5Ovf1OcnY8s1zZGUivlUVpL9j9/RkWsnc47xCVq5A360W36e0TEJPWTxdEIpURCGDJ4 9Rq7Xf0pmUlV3oHLgDrA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1LyZ-00000001uAC-1FEh; Mon, 29 Apr 2024 08:03:03 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1LyV-00000001u6N-2UZj for linux-riscv@lists.infradead.org; Mon, 29 Apr 2024 08:03:01 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-34aa836b948so690966f8f.3 for ; Mon, 29 Apr 2024 01:02:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1714377767; x=1714982567; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=9lk6J9c7nceHYPPSuxHCl/jFNOuQDl39RqYLkN6g2zo=; b=Cs6KWL/Bi0yhEc7gX3RYTN4iZn8XS80uprieHCp/NkV0KWwUxRUHeIt2KPQBWOe4MI FDZJET0VZBRpJzr16ImLHp6ZVPZ+3xjQklkeJqNhQFbfh11y/smNgJ3goaip1byRLjzU BeYohz3Ud5eGR6WEqjfjkrxhkdOfjyUdw7O++MhQNpA0pAI2sLjvoZH0HOBn9LY+WGUP lGUjdOBQu3rR28rPw2LatZUYoByoAJqVU82FDcD7Mpu0l0hOyCJClW2LtIIjTQEqeZF3 tUk1sXlV9kulZju0E/jtD7g9K7X2tbh0p5EF5swOhzKumOxlvMMG+NmAIxPlpUfYDyzX cU7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714377767; x=1714982567; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9lk6J9c7nceHYPPSuxHCl/jFNOuQDl39RqYLkN6g2zo=; b=TSvAkVzUtW1ThBh59sBcEDGj2kyWV5i7m0Wd4UyrazMUO1PbitW5eMPdxcReCtOGv4 dt1UAEQhrR2fASZzCQ+fP2mj3KRgcB6DHqpuJgUqWWg4loEuLIGHxFK7NsUKVF/gzdcX 8Zc88b+sd+r3rv1z+tQ8ZciWOf3oChW6HyLQHazjSd4sY3SxG+r5NpurgikRRstmj7+H pgusuX2ZxY0n0lR6+DexroFSLIzpeAR5nyCdti65QZ/ZTCsZqMitDvuWo6/z4erqNdOc V3RNCS5WO1YgzyHupRlQDTSDgVumjcsHaWcPRUhlltwI8upkR3olru9MQr4h42SeX1Zl 3jGA== X-Forwarded-Encrypted: i=1; AJvYcCWoG0Dz97OwEKmKdfucdBrlud5cdZZYOznoi8UVt/OQJvDCEWCHpVzqmZS/RPmeIx3zxsMZrvdPosMECVMZgmn2SNjjYr6j5JrJgYuR/uEb X-Gm-Message-State: AOJu0Yzs6Bqns2UzILr6VDjf5QYqQ7cyOXP3ckLwNPZpH2PUvVKD6X+y CMXg1vcxAm0M+Tg0h3poSLOdZW+JIiANhzqb9woI4PV+y3bziRtlI1rsZxZEeqY= X-Google-Smtp-Source: AGHT+IGd/GTek2EtViHRdRFeIXZn3n2LYf5CPBHrEQdxd9jjHLyUtqDgKKXlzgWCD9IG4KWRHuQ70A== X-Received: by 2002:adf:eb88:0:b0:34c:a12:8722 with SMTP id t8-20020adfeb88000000b0034c0a128722mr6358975wrn.1.1714377766520; Mon, 29 Apr 2024 01:02:46 -0700 (PDT) Received: from ?IPV6:2a01:e0a:999:a3a0:2fec:d20:2b60:e334? ([2a01:e0a:999:a3a0:2fec:d20:2b60:e334]) by smtp.gmail.com with ESMTPSA id n8-20020a5d6b88000000b0034c462f920csm8446915wrx.40.2024.04.29.01.02.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Apr 2024 01:02:45 -0700 (PDT) Message-ID: <7b2b8045-b814-4f93-a9ce-4e3d087c8f0e@rivosinc.com> Date: Mon, 29 Apr 2024 10:02:44 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 02/11] riscv: add ISA extensions validation To: Conor Dooley Cc: Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , Albert Ou , Rob Herring , Krzysztof Kozlowski , Anup Patel , Shuah Khan , Atish Patra , linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org References: <20240423124326.2532796-1-cleger@rivosinc.com> <20240423124326.2532796-3-cleger@rivosinc.com> <20240426-smugly-jury-e933a4ef035c@spud> Content-Language: en-US From: =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= In-Reply-To: <20240426-smugly-jury-e933a4ef035c@spud> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240429_010259_731866_B6BE86E6 X-CRM114-Status: GOOD ( 38.68 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpPbiAyNi8wNC8yMDI0IDE2OjIzLCBDb25vciBEb29sZXkgd3JvdGU6Cj4gT24gVHVlLCBBcHIg MjMsIDIwMjQgYXQgMDI6NDM6MTZQTSArMDIwMCwgQ2zDqW1lbnQgTMOpZ2VyIHdyb3RlOgo+PiBT aW5jZSBhIGZldyBleHRlbnNpb25zIChaaWNib20vWmljYm96KSBhbHJlYWR5IG5lZWRzIHZhbGlk YXRpb24gYW5kCj4+IGZ1dHVyZSBvbmVzIHdpbGwgbmVlZCBpdCBhcyB3ZWxsIChaYyopIGFkZCBh IHZhbGlkYXRlKCkgY2FsbGJhY2sgdG8KPj4gc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YS4gVGhp cyByZXF1aXJlIHRvIHJld29yayB0aGUgd2F5IGV4dGVuc2lvbnMgYXJlCj4+IHBhcnNlZCBhbmQg c3BsaXQgaXQgaW4gdHdvIHBoYXNlcy4gRmlyc3QgcGhhc2UgaXMgaXNhIHN0cmluZyBvciBpc2EK Pj4gZXh0ZW5zaW9uIGxpc3QgcGFyc2luZyBhbmQgY29uc2lzdHMgaW4gZW5hYmxpbmcgYWxsIHRo ZSBleHRlbnNpb25zIGluIGEKPj4gdGVtcG9yYXJ5IGJpdG1hc2sgd2l0aG91dCBhbnkgdmFsaWRh dGlvbi4gVGhlIHNlY29uZCBzdGVwICJyZXNvbHZlcyIgdGhlCj4+IGZpbmFsIGlzYSBiaXRtYXAs IGhhbmRsaW5nIHBvdGVudGlhbCBtaXNzaW5nIGRlcGVuZGVuY2llcy4gVGhlIG1lY2hhbmlzbQo+ PiBpcyBxdWl0ZSBzaW1wbGUgYW5kIHNpbXBseSB2YWxpZGF0ZSBlYWNoIGV4dGVuc2lvbiBkZXNj cmliZWQgaW4gdGhlCj4+IHRlbXBvcmFyeSBiaXRtYXAgYmVmb3JlIGVuYWJsaW5nIGl0IGluIHRo ZSBmaW5hbCBpc2EgYml0bWFwLiBUaGlzCj4+IHByb2Nlc3MgdGFrZXMgcGxhY2UgdW50aWwgdGhl IGZpbmFsIGlzYSBiaXRtYXAgcmVhY2hlcyBhIHN0YWJsZSBzdGF0ZS4KPj4gSW4gb3JkZXIgdG8g YXZvaWQgYW55IHBvdGVudGlhbCBpbmZpbml0ZSBsb29waW5nLCBhbGxvdyBsb29waW5nIGEKPj4g bWF4aW11bSBvZiB0aGUgbnVtYmVyIG9mIGV4dGVuc2lvbiB3ZSBoYW5kbGUuIFppY2JveiBhbmQg WmljYm9tCj4+IGV4dGVuc2lvbnMgYXJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIHZhbGlkYXRpb24g bWVjaGFuaXNtLgo+IAo+IFlha25vdywgc2VlaW5nIHRoZSBpbXBsZW10YXRpb24gSSdtIGhhdmlu ZyBzZWNvbmQgdGhvdWdodHMuIEkgdGhpbmsKPiB0aGVyZSdzIHR3byBwcmV0dHkgc2VwYXJhdGUg YWN0aW9ucyBnb2luZyBvbiBoZXJlIC0gdGhlIGZpcnN0IGlzIHRoaW5ncwo+IGxpa2UgWmljYm9t IG9yIFppY2JveiB3aGVyZSB3ZSBhcmUgbG9va2luZyBhdCB0aGUgRFQgdG8gZmluZCBzb21lIGV4 dHJhCj4gcHJvcGVydGllcyB3aGljaCB3ZSBjYW4gZG8gZXhhY3RseSBvbmNlLiBUaGUgb3RoZXIg aXMgdGhlIFpjKiBjYXNlLAo+IHdoZXJlIHdlIGFyZSBtYWtpbmcgc3VyZSB0aGF0IGV4dGVuc2lv bnMgdGhleSBkZXBlbmQgb24gYXJlIGVuYWJsZWQuCj4gSSB1bmRlcnN0YW5kIHRoYXQgdGhlIGxh dHRlciBtYXkgbmVlZCB0byBsb29wLCBidXQgSSBkb24ndCB0aGluayB0aGVyZSdzCj4gYSByZWFz b24gdG8gbG9vcCBpbiB0aGUgWmljYm9tIG9yIFppY2JveiBjYXNlLgoKVGhhdCdzIGEgZ29vZCBw b2ludCwgd2UgY291bGQgcG90ZW50aWFsbHkgYXZvaWQgdGhhdCBieSBzcGVjaWZ5aW5nCmRpZmZl cmVudCByZXR1cm4gdmFsdWVzIGZvciB0aGUgdmFsaWRhdGUgY2FsbGJhY2sgKFNpbWlsYXIgdG8g d2hhdCBpcwpkb25lIGJ5IHBsYXRmb3JtIGRyaXZlciBwcm9iaW5nKToKCi0gMCAtPiBPaywgZW5h YmxlIHRoZSBleHRlbnNpb24KLSAtRURFRkVSIC0+IFRyeSB0byBwcm9iZSBhZ2FpbiBsYXRlcgot IC1FPHdoYXRldmVyPiAtPiBEaXNhYmxlZCB0aGUgZXh0ZW5zaW9uIG9uY2UgZm9yIGFsbCBpbiB0 aGUgb3JpZ2luYWwKSVNBIGJpdG1hcCBzbyB0aGUgY2FsbGJhY2sgd29uJ3QgZ2V0IGNhbGxlZCBh Z2Fpbi4KClRoYXQgd291bGQgYWxzbyBhbGxvd3MgdG8gZ2V0IHJpZCBvZiBhdCBsZWFzdCB0aGUg ZXh0cmEgbG9vcCB0aGF0IGlzCmRvbmUgdG8gdmVyaWZ5IHRoZSBzdGFiaWxpdHkgb2YgdGhlIElT QSBldmVuIGlmIHRoZXJlIHdlcmUgbm8gZGVmZXJlZApwcm9iZWQgZXh0ZW5zaW9ucy4KClRoYW5r cywKCkNsw6ltZW50Cgo+IAo+IFRoYXQgc2FpZCwgSSBkbyBhY3R1YWxseSBsaWtlIHRoZSBpZGVh IG9mIGhhdmluZyBzcGVjaWZpYyBjYWxsYmFja3MgZm9yCj4gZXh0ZW5zaW9ucyB0aGF0IHJlcXVp cmUgdGhlbSwgcmF0aGVyIHRoYW4gY2FsbGluZyBleHRlbnNpb25fY2hlY2soKQo+IHVuY29uZGl0 aW9uYWxseS4KPiAKPiBJJ3ZlIG5vdCByZXZpZXdlZCB0aGUgYWN0dWFsIGNvZGUgaGVyZSBGV0lX LCBqdXN0IHNwZW50IHNvbWUgdGltZQo+IHRoaW5raW5nIGFib3V0IHRoZSBpZGVhLiBJIG1pZ2h0 IGRvIHRoYXQgbGF0ZXIgb24gdGhpcyByZXZpc2lvbiwgb3Igb24KPiBhbm90aGVyLCBkZXBlbmRp bmcgb24gd2hhdCB5b3UgdGhpbmsgb2Ygc3BsaXR0aW5nIHRoZSBaaWNib20gYW5kIFppY2Jvego+ IHR5cGUgZXh0cmEgcHJvcCBjaGVja2luZyBmcm9tIGRlcGVuZGVuY3kgcmVsYXRlZCBzdHVmZiBs aWtlIFpjKi4KPiAKPiBDaGVlcnMsCj4gQ29ub3IuCj4gCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENs w6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4KPj4gLS0tCj4+ICBhcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCB8ICAgMSArCj4+ICBhcmNoL3Jpc2N2L2tlcm5lbC9j cHVmZWF0dXJlLmMgICAgICB8IDIwMSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4+ICAy IGZpbGVzIGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCA4NCBkZWxldGlvbnMoLSkKPj4KPj4g ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9y aXNjdi9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKPj4gaW5kZXggMzQ3ODA1NDQ2MTUxLi4zMjhm ODk1ZjZiOGYgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVy ZS5oCj4+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCj4+IEBAIC03 MCw2ICs3MCw3IEBAIHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgewo+PiAgCWNvbnN0IGNoYXIg KnByb3BlcnR5Owo+PiAgCWNvbnN0IHVuc2lnbmVkIGludCAqc3Vic2V0X2V4dF9pZHM7Cj4+ICAJ Y29uc3QgdW5zaWduZWQgaW50IHN1YnNldF9leHRfc2l6ZTsKPj4gKwlib29sICgqdmFsaWRhdGUp KGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgKmRhdGEsIGNvbnN0IHVuc2lnbmVkIGxv bmcgKmlzYV9iaXRtYXApOwo+PiAgfTsKPj4gIAo+PiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCByaXNj dl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4dFtdOwo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNj di9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jCj4+ IGluZGV4IDExNWJhMDAxZjFiYy4uNmQyMzhjOGRiY2NmIDEwMDY0NAo+PiAtLS0gYS9hcmNoL3Jp c2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMKPj4gKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVh dHVyZS5jCj4+IEBAIC03Miw1MSArNzIsNjIgQEAgYm9vbCBfX3Jpc2N2X2lzYV9leHRlbnNpb25f YXZhaWxhYmxlKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlzYV9iaXRtYXAsIHVuc2lnbmVkIGkKPj4g IH0KPj4gIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUp Owo+PiAgCj4+IC1zdGF0aWMgYm9vbCByaXNjdl9pc2FfZXh0ZW5zaW9uX2NoZWNrKGludCBpZCkK Pj4gK3N0YXRpYyBib29sIHJpc2N2X2lzYV9leHRlbnNpb25fdmFsaWQoaW50IGlkKQo+PiAgewo+ PiAtCXN3aXRjaCAoaWQpIHsKPj4gLQljYXNlIFJJU0NWX0lTQV9FWFRfWklDQk9NOgo+PiAtCQlp ZiAoIXJpc2N2X2Nib21fYmxvY2tfc2l6ZSkgewo+PiAtCQkJcHJfZXJyKCJaaWNib20gZGV0ZWN0 ZWQgaW4gSVNBIHN0cmluZywgZGlzYWJsaW5nIGFzIG5vIGNib20tYmxvY2stc2l6ZSBmb3VuZFxu Iik7Cj4+IC0JCQlyZXR1cm4gZmFsc2U7Cj4+IC0JCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIo cmlzY3ZfY2JvbV9ibG9ja19zaXplKSkgewo+PiAtCQkJcHJfZXJyKCJaaWNib20gZGlzYWJsZWQg YXMgY2JvbS1ibG9jay1zaXplIHByZXNlbnQsIGJ1dCBpcyBub3QgYSBwb3dlci1vZi0yXG4iKTsK Pj4gLQkJCXJldHVybiBmYWxzZTsKPj4gLQkJfQo+PiAtCQlyZXR1cm4gdHJ1ZTsKPj4gLQljYXNl IFJJU0NWX0lTQV9FWFRfWklDQk9aOgo+PiAtCQlpZiAoIXJpc2N2X2Nib3pfYmxvY2tfc2l6ZSkg ewo+PiAtCQkJcHJfZXJyKCJaaWNib3ogZGV0ZWN0ZWQgaW4gSVNBIHN0cmluZywgZGlzYWJsaW5n IGFzIG5vIGNib3otYmxvY2stc2l6ZSBmb3VuZFxuIik7Cj4+IC0JCQlyZXR1cm4gZmFsc2U7Cj4+ IC0JCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIocmlzY3ZfY2Jvel9ibG9ja19zaXplKSkgewo+ PiAtCQkJcHJfZXJyKCJaaWNib3ogZGlzYWJsZWQgYXMgY2Jvei1ibG9jay1zaXplIHByZXNlbnQs IGJ1dCBpcyBub3QgYSBwb3dlci1vZi0yXG4iKTsKPj4gLQkJCXJldHVybiBmYWxzZTsKPj4gLQkJ fQo+PiAtCQlyZXR1cm4gdHJ1ZTsKPj4gLQljYXNlIFJJU0NWX0lTQV9FWFRfSU5WQUxJRDoKPj4g KwlyZXR1cm4gaWQgIT0gUklTQ1ZfSVNBX0VYVF9JTlZBTElEOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgYm9vbCByaXNjdl9leHRfemljYm9tX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCByaXNjdl9pc2Ff ZXh0X2RhdGEgKmRhdGEsCj4+ICsJCQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaXNhX2Jp dG1hcCkKPj4gK3sKPj4gKwlpZiAoIXJpc2N2X2Nib21fYmxvY2tfc2l6ZSkgewo+PiArCQlwcl9l cnJfb25jZSgiWmljYm9tIGRldGVjdGVkIGluIElTQSBzdHJpbmcsIgo+PiArCQkJICAgICJkaXNh YmxpbmcgYXMgbm8gY2JvbS1ibG9jay1zaXplIGZvdW5kXG4iKTsKPj4gKwkJcmV0dXJuIGZhbHNl Owo+PiArCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIocmlzY3ZfY2JvbV9ibG9ja19zaXplKSkg ewo+PiArCQlwcl9lcnJfb25jZSgiWmljYm9tIGRpc2FibGVkIGFzIGNib20tYmxvY2stc2l6ZSBw cmVzZW50LCIKPj4gKwkJCSAgICAiYnV0IGlzIG5vdCBhIHBvd2VyLW9mLTJcbiIpOwo+PiAgCQly ZXR1cm4gZmFsc2U7Cj4+ICAJfQo+PiArCXJldHVybiB0cnVlOwo+PiArfQo+PiAgCj4+ICtzdGF0 aWMgYm9vbCByaXNjdl9leHRfemljYm96X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCByaXNjdl9pc2Ff ZXh0X2RhdGEgKmRhdGEsCj4+ICsJCQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaXNhX2Jp dG1hcCkKPj4gK3sKPj4gKwlpZiAoIXJpc2N2X2Nib3pfYmxvY2tfc2l6ZSkgewo+PiArCQlwcl9l cnJfb25jZSgiWmljYm96IGRldGVjdGVkIGluIElTQSBzdHJpbmcsIgo+PiArCQkJICAgICJkaXNh YmxpbmcgYXMgbm8gY2Jvei1ibG9jay1zaXplIGZvdW5kXG4iKTsKPj4gKwkJcmV0dXJuIGZhbHNl Owo+PiArCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIocmlzY3ZfY2Jvel9ibG9ja19zaXplKSkg ewo+PiArCQlwcl9lcnJfb25jZSgiWmljYm96IGRpc2FibGVkIGFzIGNib3otYmxvY2stc2l6ZSBw cmVzZW50LCIKPj4gKwkJCSAgICAiYnV0IGlzIG5vdCBhIHBvd2VyLW9mLTJcbiIpOwo+PiArCQly ZXR1cm4gZmFsc2U7Cj4+ICsJfQo+PiAgCXJldHVybiB0cnVlOwo+PiAgfQo+PiAgCj4+IC0jZGVm aW5lIF9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCwgX3N1YnNldF9leHRzLCBfc3Vic2V0 X2V4dHNfc2l6ZSkgewlcCj4+IC0JLm5hbWUgPSAjX25hbWUsCQkJCQkJCQlcCj4+IC0JLnByb3Bl cnR5ID0gI19uYW1lLAkJCQkJCQlcCj4+IC0JLmlkID0gX2lkLAkJCQkJCQkJXAo+PiAtCS5zdWJz ZXRfZXh0X2lkcyA9IF9zdWJzZXRfZXh0cywJCQkJCQlcCj4+IC0JLnN1YnNldF9leHRfc2l6ZSA9 IF9zdWJzZXRfZXh0c19zaXplCQkJCQlcCj4+ICsjZGVmaW5lIF9SSVNDVl9JU0FfRVhUX0RBVEEo X25hbWUsIF9pZCwgX3N1YnNldF9leHRzLCBfc3Vic2V0X2V4dHNfc2l6ZSwgX3ZhbGlkYXRlKSB7 CVwKPj4gKwkubmFtZSA9ICNfbmFtZSwJCQkJCQkJCQlcCj4+ICsJLnByb3BlcnR5ID0gI19uYW1l LAkJCQkJCQkJXAo+PiArCS5pZCA9IF9pZCwJCQkJCQkJCQlcCj4+ICsJLnN1YnNldF9leHRfaWRz ID0gX3N1YnNldF9leHRzLAkJCQkJCQlcCj4+ICsJLnN1YnNldF9leHRfc2l6ZSA9IF9zdWJzZXRf ZXh0c19zaXplLAkJCQkJCVwKPj4gKwkudmFsaWRhdGUgPSBfdmFsaWRhdGUJCQkJCQkJCVwKPj4g IH0KPj4gIAo+PiAtI2RlZmluZSBfX1JJU0NWX0lTQV9FWFRfREFUQShfbmFtZSwgX2lkKSBfUklT Q1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQsIE5VTEwsIDApCj4+ICsjZGVmaW5lIF9fUklTQ1Zf SVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQpIF9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCwg TlVMTCwgMCwgTlVMTCkKPj4gIAo+PiAgLyogVXNlZCB0byBkZWNsYXJlIHB1cmUgImxhc3NvIiBl eHRlbnNpb24gKFprIGZvciBpbnN0YW5jZSkgKi8KPj4gICNkZWZpbmUgX19SSVNDVl9JU0FfRVhU X0JVTkRMRShfbmFtZSwgX2J1bmRsZWRfZXh0cykgXAo+PiAtCV9SSVNDVl9JU0FfRVhUX0RBVEEo X25hbWUsIFJJU0NWX0lTQV9FWFRfSU5WQUxJRCwgX2J1bmRsZWRfZXh0cywgQVJSQVlfU0laRShf YnVuZGxlZF9leHRzKSkKPj4gKwlfUklTQ1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBSSVNDVl9JU0Ff RVhUX0lOVkFMSUQsIF9idW5kbGVkX2V4dHMsIFwKPj4gKwkJCSAgICBBUlJBWV9TSVpFKF9idW5k bGVkX2V4dHMpLCBOVUxMKQo+PiAgCj4+ICAvKiBVc2VkIHRvIGRlY2xhcmUgZXh0ZW5zaW9ucyB0 aGF0IGFyZSBhIHN1cGVyc2V0IG9mIG90aGVyIGV4dGVuc2lvbnMgKFp2YmIgZm9yIGluc3RhbmNl KSAqLwo+PiAgI2RlZmluZSBfX1JJU0NWX0lTQV9FWFRfU1VQRVJTRVQoX25hbWUsIF9pZCwgX3N1 Yl9leHRzKSBcCj4+IC0JX1JJU0NWX0lTQV9FWFRfREFUQShfbmFtZSwgX2lkLCBfc3ViX2V4dHMs IEFSUkFZX1NJWkUoX3N1Yl9leHRzKSkKPj4gKwlfUklTQ1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBf aWQsIF9zdWJfZXh0cywgQVJSQVlfU0laRShfc3ViX2V4dHMpLCBOVUxMKQo+PiArI2RlZmluZSBf X1JJU0NWX0lTQV9FWFRfU1VQRVJTRVRfVkFMSURBVEUoX25hbWUsIF9pZCwgX3N1Yl9leHRzLCBf dmFsaWRhdGUpIFwKPj4gKwlfUklTQ1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQsIF9zdWJfZXh0 cywgQVJSQVlfU0laRShfc3ViX2V4dHMpLCBfdmFsaWRhdGUpCj4+ICAKPj4gIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBpbnQgcmlzY3ZfemtfYnVuZGxlZF9leHRzW10gPSB7Cj4+ICAJUklTQ1ZfSVNB X0VYVF9aQktCLAo+PiBAQCAtMjQ3LDggKzI1OCwxMCBAQCBjb25zdCBzdHJ1Y3QgcmlzY3ZfaXNh X2V4dF9kYXRhIHJpc2N2X2lzYV9leHRbXSA9IHsKPj4gIAlfX1JJU0NWX0lTQV9FWFRfREFUQShj LCBSSVNDVl9JU0FfRVhUX2MpLAo+PiAgCV9fUklTQ1ZfSVNBX0VYVF9EQVRBKHYsIFJJU0NWX0lT QV9FWFRfdiksCj4+ICAJX19SSVNDVl9JU0FfRVhUX0RBVEEoaCwgUklTQ1ZfSVNBX0VYVF9oKSwK Pj4gLQlfX1JJU0NWX0lTQV9FWFRfU1VQRVJTRVQoemljYm9tLCBSSVNDVl9JU0FfRVhUX1pJQ0JP TSwgcmlzY3ZfeGxpbnV4ZW52Y2ZnX2V4dHMpLAo+PiAtCV9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNF VCh6aWNib3osIFJJU0NWX0lTQV9FWFRfWklDQk9aLCByaXNjdl94bGludXhlbnZjZmdfZXh0cyks Cj4+ICsJX19SSVNDVl9JU0FfRVhUX1NVUEVSU0VUX1ZBTElEQVRFKHppY2JvbSwgUklTQ1ZfSVNB X0VYVF9aSUNCT00sIHJpc2N2X3hsaW51eGVudmNmZ19leHRzLAo+PiArCQkJCQkgIHJpc2N2X2V4 dF96aWNib21fdmFsaWRhdGUpLAo+PiArCV9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNFVF9WQUxJREFU RSh6aWNib3osIFJJU0NWX0lTQV9FWFRfWklDQk9aLCByaXNjdl94bGludXhlbnZjZmdfZXh0cywK Pj4gKwkJCQkJICByaXNjdl9leHRfemljYm96X3ZhbGlkYXRlKSwKPj4gIAlfX1JJU0NWX0lTQV9F WFRfREFUQSh6aWNudHIsIFJJU0NWX0lTQV9FWFRfWklDTlRSKSwKPj4gIAlfX1JJU0NWX0lTQV9F WFRfREFUQSh6aWNvbmQsIFJJU0NWX0lTQV9FWFRfWklDT05EKSwKPj4gIAlfX1JJU0NWX0lTQV9F WFRfREFUQSh6aWNzciwgUklTQ1ZfSVNBX0VYVF9aSUNTUiksCj4+IEBAIC0zMTAsMzMgKzMyMyw3 MCBAQCBjb25zdCBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRhIHJpc2N2X2lzYV9leHRbXSA9IHsK Pj4gIAo+PiAgY29uc3Qgc2l6ZV90IHJpc2N2X2lzYV9leHRfY291bnQgPSBBUlJBWV9TSVpFKHJp c2N2X2lzYV9leHQpOwo+PiAgCj4+IC1zdGF0aWMgdm9pZCBfX2luaXQgbWF0Y2hfaXNhX2V4dChj b25zdCBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRhICpleHQsIGNvbnN0IGNoYXIgKm5hbWUsCj4+ IC0JCQkJIGNvbnN0IGNoYXIgKm5hbWVfZW5kLCBzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNhaW5m bykKPj4gK3N0YXRpYyB2b2lkIHJpc2N2X2lzYV9zZXRfZXh0KGNvbnN0IHN0cnVjdCByaXNjdl9p c2FfZXh0X2RhdGEgKmV4dCwgdW5zaWduZWQgbG9uZyAqYml0bWFwKQo+PiAgewo+PiAtCWlmICgo bmFtZV9lbmQgLSBuYW1lID09IHN0cmxlbihleHQtPm5hbWUpKSAmJgo+PiAtCSAgICAgIXN0cm5j YXNlY21wKG5hbWUsIGV4dC0+bmFtZSwgbmFtZV9lbmQgLSBuYW1lKSkgewo+PiAtCQkvKgo+PiAt CQkgKiBJZiB0aGlzIGlzIGEgYnVuZGxlLCBlbmFibGUgYWxsIHRoZSBJU0EgZXh0ZW5zaW9ucyB0 aGF0Cj4+IC0JCSAqIGNvbXByaXNlIHRoZSBidW5kbGUuCj4+IC0JCSAqLwo+PiAtCQlpZiAoZXh0 LT5zdWJzZXRfZXh0X3NpemUpIHsKPj4gLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZXh0LT5zdWJz ZXRfZXh0X3NpemU7IGkrKykgewo+PiAtCQkJCWlmIChyaXNjdl9pc2FfZXh0ZW5zaW9uX2NoZWNr KGV4dC0+c3Vic2V0X2V4dF9pZHNbaV0pKQo+PiAtCQkJCQlzZXRfYml0KGV4dC0+c3Vic2V0X2V4 dF9pZHNbaV0sIGlzYWluZm8tPmlzYSk7Cj4+IC0JCQl9Cj4+ICsJLyoKPj4gKwkgKiBUaGlzIGlz IHZhbGlkIGV2ZW4gZm9yIGJ1bmRsZSBleHRlbnNpb25zIHdoaWNoIHVzZXMgdGhlIFJJU0NWX0lT QV9FWFRfSU5WQUxJRCBpZAo+PiArCSAqIChyZWplY3RlZCBieSByaXNjdl9pc2FfZXh0ZW5zaW9u X3ZhbGlkKCkpLgo+PiArCSAqLwo+PiArCWlmIChyaXNjdl9pc2FfZXh0ZW5zaW9uX3ZhbGlkKGV4 dC0+aWQpKQo+PiArCQlzZXRfYml0KGV4dC0+aWQsIGJpdG1hcCk7Cj4+ICsKPj4gKwlmb3IgKGlu dCBpID0gMDsgaSA8IGV4dC0+c3Vic2V0X2V4dF9zaXplOyBpKyspIHsKPj4gKwkJaWYgKHJpc2N2 X2lzYV9leHRlbnNpb25fdmFsaWQoZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSkpCj4+ICsJCQlzZXRf Yml0KGV4dC0+c3Vic2V0X2V4dF9pZHNbaV0sIGJpdG1hcCk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcmVzb2x2ZV9pc2EoY29uc3QgdW5zaWduZWQgbG9u ZyAqaXNhX2JpdG1hcCwgc3RydWN0IHJpc2N2X2lzYWluZm8gKmlzYWluZm8sCj4+ICsJCQkJICAg ICB1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2FwLCB1bnNpZ25lZCBsb25nICppc2EyaHdjYXApCj4+ ICt7Cj4+ICsJY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAqZXh0Owo+PiArCURFQ0xB UkVfQklUTUFQKHByZXZfYml0bWFwLCBSSVNDVl9JU0FfRVhUX01BWCk7Cj4+ICsJaW50IG1heF9s b29wX2NvdW50ID0gcmlzY3ZfaXNhX2V4dF9jb3VudCArIDE7Cj4+ICsKPj4gKwlkbyB7Cj4+ICsJ CWlmIChtYXhfbG9vcF9jb3VudC0tIDwgMCkgewo+PiArCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVh Y2ggYSBzdGFibGUgSVNBIHN0YXRlXG4iKTsKPj4gKwkJCXJldHVybjsKPj4gIAkJfQo+PiArCQlt ZW1jcHkocHJldl9iaXRtYXAsIGlzYWluZm8tPmlzYSwgc2l6ZW9mKHByZXZfYml0bWFwKSk7Cj4+ ICsJCWZvciAoaW50IGkgPSAwOyBpIDwgcmlzY3ZfaXNhX2V4dF9jb3VudDsgaSsrKSB7Cj4+ICsJ CQlleHQgPSAmcmlzY3ZfaXNhX2V4dFtpXTsKPj4gKwo+PiArCQkJLyogQnVuZGxlIGV4dGVuc2lv bnMgaWRzIGFyZSBpbnZhbGlkKi8KPj4gKwkJCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxp ZChleHQtPmlkKSkKPj4gKwkJCQljb250aW51ZTsKPj4gKwo+PiArCQkJaWYgKCF0ZXN0X2JpdChl eHQtPmlkLCBpc2FfYml0bWFwKSB8fCB0ZXN0X2JpdChleHQtPmlkLCBpc2FpbmZvLT5pc2EpKQo+ PiArCQkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCQlpZiAoZXh0LT52YWxpZGF0ZSAmJiAhZXh0LT52 YWxpZGF0ZShleHQsIGlzYWluZm8tPmlzYSkpCj4+ICsJCQkJY29udGludWU7Cj4+ICAKPj4gLQkJ LyoKPj4gLQkJICogVGhpcyBpcyB2YWxpZCBldmVuIGZvciBidW5kbGUgZXh0ZW5zaW9ucyB3aGlj aCB1c2VzIHRoZSBSSVNDVl9JU0FfRVhUX0lOVkFMSUQgaWQKPj4gLQkJICogKHJlamVjdGVkIGJ5 IHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2soKSkuCj4+IC0JCSAqLwo+PiAtCQlpZiAocmlzY3Zf aXNhX2V4dGVuc2lvbl9jaGVjayhleHQtPmlkKSkKPj4gIAkJCXNldF9iaXQoZXh0LT5pZCwgaXNh aW5mby0+aXNhKTsKPj4gKwo+PiArCQkJLyogT25seSBzaW5nbGUgbGV0dGVyIGV4dGVuc2lvbnMg Z2V0IHNldCBpbiBod2NhcCAqLwo+PiArCQkJaWYgKGV4dC0+aWQgPCBSSVNDVl9JU0FfRVhUX0JB U0UpCj4+ICsJCQkJKnRoaXNfaHdjYXAgfD0gaXNhMmh3Y2FwW2V4dC0+aWRdOwo+PiArCQl9Cj4+ ICsJfSB3aGlsZSAobWVtY21wKHByZXZfYml0bWFwLCBpc2FpbmZvLT5pc2EsIHNpemVvZihwcmV2 X2JpdG1hcCkpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19pbml0IG1hdGNoX2lzYV9l eHQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbmFtZV9lbmQsIHVuc2lnbmVkIGxvbmcg KmJpdG1hcCkKPj4gK3sKPj4gKwlmb3IgKGludCBpID0gMDsgaSA8IHJpc2N2X2lzYV9leHRfY291 bnQ7IGkrKykgewo+PiArCQljb25zdCBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRhICpleHQgPSAm cmlzY3ZfaXNhX2V4dFtpXTsKPj4gKwo+PiArCQlpZiAoKG5hbWVfZW5kIC0gbmFtZSA9PSBzdHJs ZW4oZXh0LT5uYW1lKSkgJiYKPj4gKwkJICAgICFzdHJuY2FzZWNtcChuYW1lLCBleHQtPm5hbWUs IG5hbWVfZW5kIC0gbmFtZSkpIHsKPj4gKwkJCXJpc2N2X2lzYV9zZXRfZXh0KGV4dCwgYml0bWFw KTsKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICAJfQo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgdm9p ZCBfX2luaXQgcmlzY3ZfcGFyc2VfaXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2Fw LCBzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNhaW5mbywKPj4gLQkJCQkJICB1bnNpZ25lZCBsb25n ICppc2EyaHdjYXAsIGNvbnN0IGNoYXIgKmlzYSkKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCByaXNj dl9yZXNvbHZlX2lzYV9zdHJpbmcoY29uc3QgY2hhciAqaXNhLCB1bnNpZ25lZCBsb25nICpiaXRt YXApCj4+ICB7Cj4+ICAJLyoKPj4gIAkgKiBGb3IgYWxsIHBvc3NpYmxlIGNwdXMsIHdlIGhhdmUg YWxyZWFkeSB2YWxpZGF0ZWQgaW4KPj4gQEAgLTM0OSw3ICszOTksNyBAQCBzdGF0aWMgdm9pZCBf X2luaXQgcmlzY3ZfcGFyc2VfaXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2FwLCBz dHJ1Y3QgcmlzYwo+PiAgCXdoaWxlICgqaXNhKSB7Cj4+ICAJCWNvbnN0IGNoYXIgKmV4dCA9IGlz YSsrOwo+PiAgCQljb25zdCBjaGFyICpleHRfZW5kID0gaXNhOwo+PiAtCQlib29sIGV4dF9sb25n ID0gZmFsc2UsIGV4dF9lcnIgPSBmYWxzZTsKPj4gKwkJYm9vbCBleHRfZXJyID0gZmFsc2U7Cj4+ ICAKPj4gIAkJc3dpdGNoICgqZXh0KSB7Cj4+ICAJCWNhc2UgJ3MnOgo+PiBAQCAtMzg5LDcgKzQz OSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9wYXJzZV9pc2Ffc3RyaW5nKHVuc2lnbmVk IGxvbmcgKnRoaXNfaHdjYXAsIHN0cnVjdCByaXNjCj4+ICAJCQkgKiBjaGFyYWN0ZXIgaXRzZWxm IHdoaWxlIGVsaW1pbmF0aW5nIHRoZSBleHRlbnNpb25zIHZlcnNpb24gbnVtYmVyLgo+PiAgCQkJ ICogQSBzaW1wbGUgcmUtaW5jcmVtZW50IHNvbHZlcyB0aGlzIHByb2JsZW0uCj4+ICAJCQkgKi8K Pj4gLQkJCWV4dF9sb25nID0gdHJ1ZTsKPj4gIAkJCWZvciAoOyAqaXNhICYmICppc2EgIT0gJ18n OyArK2lzYSkKPj4gIAkJCQlpZiAodW5saWtlbHkoIWlzYWxudW0oKmlzYSkpKQo+PiAgCQkJCQll eHRfZXJyID0gdHJ1ZTsKPj4gQEAgLTQ2OSwxNyArNTE4LDggQEAgc3RhdGljIHZvaWQgX19pbml0 IHJpc2N2X3BhcnNlX2lzYV9zdHJpbmcodW5zaWduZWQgbG9uZyAqdGhpc19od2NhcCwgc3RydWN0 IHJpc2MKPj4gIAo+PiAgCQlpZiAodW5saWtlbHkoZXh0X2VycikpCj4+ICAJCQljb250aW51ZTsK Pj4gLQkJaWYgKCFleHRfbG9uZykgewo+PiAtCQkJaW50IG5yID0gdG9sb3dlcigqZXh0KSAtICdh JzsKPj4gIAo+PiAtCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2sobnIpKSB7Cj4+IC0J CQkJKnRoaXNfaHdjYXAgfD0gaXNhMmh3Y2FwW25yXTsKPj4gLQkJCQlzZXRfYml0KG5yLCBpc2Fp bmZvLT5pc2EpOwo+PiAtCQkJfQo+PiAtCQl9IGVsc2Ugewo+PiAtCQkJZm9yIChpbnQgaSA9IDA7 IGkgPCByaXNjdl9pc2FfZXh0X2NvdW50OyBpKyspCj4+IC0JCQkJbWF0Y2hfaXNhX2V4dCgmcmlz Y3ZfaXNhX2V4dFtpXSwgZXh0LCBleHRfZW5kLCBpc2FpbmZvKTsKPj4gLQkJfQo+PiArCQltYXRj aF9pc2FfZXh0KGV4dCwgZXh0X2VuZCwgYml0bWFwKTsKPj4gIAl9Cj4+ICB9Cj4+ICAKPj4gQEAg LTUwMSw2ICs1NDEsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9t X2lzYV9zdHJpbmcodW5zaWduZWQgbG9uZyAqaXNhMmh3Y2FwKQo+PiAgCWZvcl9lYWNoX3Bvc3Np YmxlX2NwdShjcHUpIHsKPj4gIAkJc3RydWN0IHJpc2N2X2lzYWluZm8gKmlzYWluZm8gPSAmaGFy dF9pc2FbY3B1XTsKPj4gIAkJdW5zaWduZWQgbG9uZyB0aGlzX2h3Y2FwID0gMDsKPj4gKwkJREVD TEFSRV9CSVRNQVAoaXNhX2JpdG1hcCwgUklTQ1ZfSVNBX0VYVF9NQVgpID0geyAwIH07Cj4+ICAK Pj4gIAkJaWYgKGFjcGlfZGlzYWJsZWQpIHsKPj4gIAkJCW5vZGUgPSBvZl9jcHVfZGV2aWNlX25v ZGVfZ2V0KGNwdSk7Cj4+IEBAIC01MjMsNyArNTY0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHJp c2N2X2ZpbGxfaHdjYXBfZnJvbV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcCkK Pj4gIAkJCX0KPj4gIAkJfQo+PiAgCj4+IC0JCXJpc2N2X3BhcnNlX2lzYV9zdHJpbmcoJnRoaXNf aHdjYXAsIGlzYWluZm8sIGlzYTJod2NhcCwgaXNhKTsKPj4gKwkJcmlzY3ZfcmVzb2x2ZV9pc2Ff c3RyaW5nKGlzYSwgaXNhX2JpdG1hcCk7Cj4+ICAKPj4gIAkJLyoKPj4gIAkJICogVGhlc2Ugb25l cyB3ZXJlIGFzIHRoZXkgd2VyZSBwYXJ0IG9mIHRoZSBiYXNlIElTQSB3aGVuIHRoZQo+PiBAQCAt NTMxLDEwICs1NzIsMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJv bV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcCkKPj4gIAkJICogdW5jb25kaXRp b25hbGx5IHdoZXJlIGBpYCBpcyBpbiByaXNjdixpc2Egb24gRFQgc3lzdGVtcy4KPj4gIAkJICov Cj4+ICAJCWlmIChhY3BpX2Rpc2FibGVkKSB7Cj4+IC0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRf WklDU1IsIGlzYWluZm8tPmlzYSk7Cj4+IC0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklGRU5D RUksIGlzYWluZm8tPmlzYSk7Cj4+IC0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklDTlRSLCBp c2FpbmZvLT5pc2EpOwo+PiAtCQkJc2V0X2JpdChSSVNDVl9JU0FfRVhUX1pJSFBNLCBpc2FpbmZv LT5pc2EpOwo+PiArCQkJc2V0X2JpdChSSVNDVl9JU0FfRVhUX1pJQ1NSLCBpc2FfYml0bWFwKTsK Pj4gKwkJCXNldF9iaXQoUklTQ1ZfSVNBX0VYVF9aSUZFTkNFSSwgaXNhX2JpdG1hcCk7Cj4+ICsJ CQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklDTlRSLCBpc2FfYml0bWFwKTsKPj4gKwkJCXNldF9i aXQoUklTQ1ZfSVNBX0VYVF9aSUhQTSwgaXNhX2JpdG1hcCk7Cj4+ICAJCX0KPj4gIAo+PiAgCQkv Kgo+PiBAQCAtNTQ4LDkgKzU4OSwxMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfZmlsbF9o d2NhcF9mcm9tX2lzYV9zdHJpbmcodW5zaWduZWQgbG9uZyAqaXNhMmh3Y2FwKQo+PiAgCQlpZiAo YWNwaV9kaXNhYmxlZCAmJiByaXNjdl9jYWNoZWRfbXZlbmRvcmlkKGNwdSkgPT0gVEhFQURfVkVO RE9SX0lEICYmCj4+ICAJCSAgICByaXNjdl9jYWNoZWRfbWFyY2hpZChjcHUpID09IDB4MCkgewo+ PiAgCQkJdGhpc19od2NhcCAmPSB+aXNhMmh3Y2FwW1JJU0NWX0lTQV9FWFRfdl07Cj4+IC0JCQlj bGVhcl9iaXQoUklTQ1ZfSVNBX0VYVF92LCBpc2FpbmZvLT5pc2EpOwo+PiArCQkJY2xlYXJfYml0 KFJJU0NWX0lTQV9FWFRfdiwgaXNhX2JpdG1hcCk7Cj4+ICAJCX0KPj4gIAo+PiArCQlyaXNjdl9y ZXNvbHZlX2lzYShpc2FfYml0bWFwLCBpc2FpbmZvLCAmdGhpc19od2NhcCwgaXNhMmh3Y2FwKTsK Pj4gKwo+PiAgCQkvKgo+PiAgCQkgKiBBbGwgIm9rYXkiIGhhcnQgc2hvdWxkIGhhdmUgc2FtZSBp c2EuIFNldCBIV0NBUCBiYXNlZCBvbgo+PiAgCQkgKiBjb21tb24gY2FwYWJpbGl0aWVzIG9mIGV2 ZXJ5ICJva2F5IiBoYXJ0LCBpbiBjYXNlIHRoZXkgZG9uJ3QKPj4gQEAgLTU3OSw2ICs2MjIsNyBA QCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9maWxsX2h3Y2FwX2Zyb21fZXh0X2xpc3QodW5zaWdu ZWQgbG9uZyAqaXNhMmh3Y2FwKQo+PiAgCQl1bnNpZ25lZCBsb25nIHRoaXNfaHdjYXAgPSAwOwo+ PiAgCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlOwo+PiAgCQlzdHJ1Y3QgcmlzY3ZfaXNh aW5mbyAqaXNhaW5mbyA9ICZoYXJ0X2lzYVtjcHVdOwo+PiArCQlERUNMQVJFX0JJVE1BUChpc2Ff Yml0bWFwLCBSSVNDVl9JU0FfRVhUX01BWCkgPSB7IDAgfTsKPj4gIAo+PiAgCQljcHVfbm9kZSA9 IG9mX2NwdV9kZXZpY2Vfbm9kZV9nZXQoY3B1KTsKPj4gIAkJaWYgKCFjcHVfbm9kZSkgewo+PiBA QCAtNTk4LDIyICs2NDIsMTEgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9m cm9tX2V4dF9saXN0KHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcCkKPj4gIAkJCQkJCSAgICAgZXh0 LT5wcm9wZXJ0eSkgPCAwKQo+PiAgCQkJCWNvbnRpbnVlOwo+PiAgCj4+IC0JCQlpZiAoZXh0LT5z dWJzZXRfZXh0X3NpemUpIHsKPj4gLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGV4dC0+c3Vic2V0 X2V4dF9zaXplOyBqKyspIHsKPj4gLQkJCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2so ZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSkpCj4+IC0JCQkJCQlzZXRfYml0KGV4dC0+c3Vic2V0X2V4 dF9pZHNbal0sIGlzYWluZm8tPmlzYSk7Cj4+IC0JCQkJfQo+PiAtCQkJfQo+PiAtCj4+IC0JCQlp ZiAocmlzY3ZfaXNhX2V4dGVuc2lvbl9jaGVjayhleHQtPmlkKSkgewo+PiAtCQkJCXNldF9iaXQo ZXh0LT5pZCwgaXNhaW5mby0+aXNhKTsKPj4gLQo+PiAtCQkJCS8qIE9ubHkgc2luZ2xlIGxldHRl ciBleHRlbnNpb25zIGdldCBzZXQgaW4gaHdjYXAgKi8KPj4gLQkJCQlpZiAoc3RybmxlbihyaXNj dl9pc2FfZXh0W2ldLm5hbWUsIDIpID09IDEpCj4+IC0JCQkJCXRoaXNfaHdjYXAgfD0gaXNhMmh3 Y2FwW3Jpc2N2X2lzYV9leHRbaV0uaWRdOwo+PiAtCQkJfQo+PiArCQkJcmlzY3ZfaXNhX3NldF9l eHQoZXh0LCBpc2FfYml0bWFwKTsKPj4gIAkJfQo+PiAgCj4+ICsJCXJpc2N2X3Jlc29sdmVfaXNh KGlzYV9iaXRtYXAsIGlzYWluZm8sICZ0aGlzX2h3Y2FwLCBpc2EyaHdjYXApOwo+PiArCj4+ICAJ CW9mX25vZGVfcHV0KGNwdV9ub2RlKTsKPj4gIAo+PiAgCQkvKgo+PiAtLSAKPj4gMi40My4wCj4+ CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1y aXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==