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=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 9CB08C433FE for ; Wed, 9 Dec 2020 11:07:41 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 81C7D2336F for ; Wed, 9 Dec 2020 11:07:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 81C7D2336F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0376A6E9E7; Wed, 9 Dec 2020 11:07:40 +0000 (UTC) Received: from mail-oi1-x22a.google.com (mail-oi1-x22a.google.com [IPv6:2607:f8b0:4864:20::22a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 60B616E9E7 for ; Wed, 9 Dec 2020 11:07:39 +0000 (UTC) Received: by mail-oi1-x22a.google.com with SMTP id s75so1323868oih.1 for ; Wed, 09 Dec 2020 03:07:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=CyTfWAk56/SuVQiq8xpMAfnwnLeR/YVxFba9T+30VNc=; b=k9KSHzEzL7203X047KsqbqfNOfabsjCEnT4h81EMEk7ZTG9d5dIQw5/OXm109n9S5B /ltIXFBNNE+DZq+zSVS1hjquxgkC7yqR+3buGWeB343xpDxuAPWRtEw9iaxAQfVtw8j3 V1wD9fOG+oBiXJqHcb/fXGY823BuFIeI8bN78= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=CyTfWAk56/SuVQiq8xpMAfnwnLeR/YVxFba9T+30VNc=; b=eZd/HjaQFFO+e1Ddpy9zbakRqMub3qN08IcCuTkFpgxyNpwCunGDFpG+Q+fWSlzSnk Ijc1e1P2N/0dB4NN0C3k/pd8653YlsCX6l0dm+4paQolG3VVZiUFk7p1SU+d83GT9EGj RQjzIAKaiPS4kdr1OzN0hEpfcJPN3MU2+za09rCixmytSVfMaH8SYPuw2GBWPj5QIgtU BGj1LE2MbRNS5ksbiZuAXOsFA2N6x3PqD+3UH7xKTFD/bPSaDrZc5xUjiu7Jw8Mh3x9Z BGlSwyTI8rmQMVM2vXgBPkC0pursxFf7q66w/aawf+GVHFfvnLye4XCZU8b8msL8HHSp mioA== X-Gm-Message-State: AOAM532WW3a7WvPi/xU/VT4kTConxzM3jh3pRGXY6wu5wIJUDm2BgHZS 8z2ErIBiPvnswltlcmJzl0dvPs0hIZvMkgZZtK+ByqjilYc= X-Google-Smtp-Source: ABdhPJxO1LVeYA72XFXEzHmmmXou7FDaoY+lKMucCC7SOGirMK1jZuqlqFq0gvn29hsaY2AK1MTZqPSIzFFk4Wzh7Z0= X-Received: by 2002:aca:4d08:: with SMTP id a8mr1310922oib.128.1607512058348; Wed, 09 Dec 2020 03:07:38 -0800 (PST) MIME-Version: 1.0 References: <20201209042144.2281-1-airlied@gmail.com> <20201209042144.2281-2-airlied@gmail.com> In-Reply-To: <20201209042144.2281-2-airlied@gmail.com> From: Daniel Vetter Date: Wed, 9 Dec 2020 12:07:27 +0100 Message-ID: To: Dave Airlie Subject: Re: [Intel-gfx] [PATCH 1/4] drm/i915: refactor cursor code out of i915_display.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gV2VkLCBEZWMgOSwgMjAyMCBhdCA1OjIxIEFNIERhdmUgQWlybGllIDxhaXJsaWVkQGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+ Cj4gVGhpcyBmaWxlIGlzIGEgbW9uc3RlciwgbGV0J3Mgc3RhcnQgc2ltcGxlLCB0aGUgY3Vyc29y IHBsYW5lIGNvZGUKPiBzZWVtcyBwcmV0dHkgc3RhbmRhbG9uZSwgYW5kIHNwbGl0cyBvdXQgZWFz aWx5IGVub3VnaC4KPgo+IFNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhh dC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAg ICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3Iu YyAgfCA4MTcgKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXkuYyB8IDc5NiArLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmggfCAgMTIgKwo+ICA0IGZpbGVzIGNo YW5nZWQsIDgzNiBpbnNlcnRpb25zKCspLCA3OTAgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jCj4KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IGU1NTc0ZTUwNmE1Yy4uOThhMzViOTM5MDUyIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMTk3LDYgKzE5Nyw3IEBAIGk5MTUteSArPSBcCj4g ICAgICAgICBkaXNwbGF5L2ludGVsX2NvbWJvX3BoeS5vIFwKPiAgICAgICAgIGRpc3BsYXkvaW50 ZWxfY29ubmVjdG9yLm8gXAo+ICAgICAgICAgZGlzcGxheS9pbnRlbF9jc3IubyBcCj4gKyAgICAg ICBkaXNwbGF5L2ludGVsX2N1cnNvci5vIFwKPiAgICAgICAgIGRpc3BsYXkvaW50ZWxfZGlzcGxh eS5vIFwKPiAgICAgICAgIGRpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5vIFwKPiAgICAgICAg IGRpc3BsYXkvaW50ZWxfZHBpb19waHkubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2N1cnNvci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLmQ2OWVhYzA2NzI1NQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jCj4gQEAgLTAsMCArMSw4MTcgQEAKPiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAy MCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfdWFwaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kYW1hZ2VfaGVscGVyLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiArCj4gKyNpbmNsdWRlICJpbnRlbF9hdG9taWMuaCIKPiArI2luY2x1ZGUg ImludGVsX2F0b21pY19wbGFuZS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5o Igo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgo+ICsKPiArI2luY2x1ZGUgImludGVsX2Zy b250YnVmZmVyLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9wbS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf cHNyLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9zcHJpdGUuaCIKPiArCj4gKy8qIEN1cnNvciBmb3Jt YXRzICovCj4gK3N0YXRpYyBjb25zdCB1MzIgaW50ZWxfY3Vyc29yX2Zvcm1hdHNbXSA9IHsKPiAr ICAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdTY0 IGN1cnNvcl9mb3JtYXRfbW9kaWZpZXJzW10gPSB7Cj4gKyAgICAgICBEUk1fRk9STUFUX01PRF9M SU5FQVIsCj4gKyAgICAgICBEUk1fRk9STUFUX01PRF9JTlZBTElECj4gK307Cj4gKwo+ICtzdGF0 aWMgYm9vbAo+ICtuZWVkc19tb2Rlc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpz dGF0ZSkKPiArewo+ICsgICAgICAgcmV0dXJuIGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0 KCZzdGF0ZS0+dWFwaSk7Cj4gK30KCkkgdGhpbmsgdGhpcyBzaG91bGQgYmUgYSBzdGF0aWMgaW5s aW5lIGluIGludGVsX2NyY3QuaCBvciBzb21ldGhpbmc/CkZlZWxzIHdyb25nIHRvIGR1cGxpY2F0 ZSB0aGVtLgoKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZnJvbnRidWZmZXIgKgo+ICt0b19p bnRlbF9mcm9udGJ1ZmZlcihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsgICAg ICAgcmV0dXJuIGZiID8gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5mcm9udGJ1ZmZlciA6IE5V TEw7Cj4gK30KClNhbWUgaGVyZSwgZmJfdG9faW50ZWxfZnJvbnRidWZmZXIgb3Igc28gc29tZXdo ZXJlIGluIGEgaGVhZGVyLgoKT3RoZXJ3aXNlIGxvb2tzIHJlYXNvbmFibGUsIGJ1dCBzZWUgdGhl IGRpc2N1c3Npb24gb24gcGxhbmUgY29kZQpwbGFjZW1lbnQgaW4gZ2VuZXJhbCBpbiB0aGUgbmV4 dCBwYXRjaC4KLURhbmllbAoKPiArCj4gK3N0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX2Jhc2UoY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsgICAgICAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiArICAgICAgICAgICAgICAgdG9f aTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiArICAgICAgIGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsgICAgICAgY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4g KyAgICAgICB1MzIgYmFzZTsKPiArCj4gKyAgICAgICBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdikt PmRpc3BsYXkuY3Vyc29yX25lZWRzX3BoeXNpY2FsKQo+ICsgICAgICAgICAgICAgICBiYXNlID0g c2dfZG1hX2FkZHJlc3Mob2JqLT5tbS5wYWdlcy0+c2dsKTsKPiArICAgICAgIGVsc2UKPiArICAg ICAgICAgICAgICAgYmFzZSA9IGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKTsK PiArCj4gKyAgICAgICByZXR1cm4gYmFzZSArIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5v ZmZzZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArICAgICAgIGlu dCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwo+ICsgICAgICAgaW50IHkgPSBwbGFuZV9z dGF0ZS0+dWFwaS5kc3QueTE7Cj4gKyAgICAgICB1MzIgcG9zID0gMDsKPiArCj4gKyAgICAgICBp ZiAoeCA8IDApIHsKPiArICAgICAgICAgICAgICAgcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBD VVJTT1JfWF9TSElGVDsKPiArICAgICAgICAgICAgICAgeCA9IC14Owo+ICsgICAgICAgfQo+ICsg ICAgICAgcG9zIHw9IHggPDwgQ1VSU09SX1hfU0hJRlQ7Cj4gKwo+ICsgICAgICAgaWYgKHkgPCAw KSB7Cj4gKyAgICAgICAgICAgICAgIHBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1lf U0hJRlQ7Cj4gKyAgICAgICAgICAgICAgIHkgPSAteTsKPiArICAgICAgIH0KPiArICAgICAgIHBv cyB8PSB5IDw8IENVUlNPUl9ZX1NISUZUOwo+ICsKPiArICAgICAgIHJldHVybiBwb3M7Cj4gK30K PiArCj4gK3N0YXRpYyBib29sIGludGVsX2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArICAgICAgIGNvbnN0IHN0cnVjdCBk cm1fbW9kZV9jb25maWcgKmNvbmZpZyA9Cj4gKyAgICAgICAgICAgICAgICZwbGFuZV9zdGF0ZS0+ dWFwaS5wbGFuZS0+ZGV2LT5tb2RlX2NvbmZpZzsKPiArICAgICAgIGludCB3aWR0aCA9IGRybV9y ZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+ICsgICAgICAgaW50IGhlaWdodCA9 IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiArCj4gKyAgICAgICBy ZXR1cm4gd2lkdGggPiAwICYmIHdpZHRoIDw9IGNvbmZpZy0+Y3Vyc29yX3dpZHRoICYmCj4gKyAg ICAgICAgICAgICAgIGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IGNvbmZpZy0+Y3Vyc29yX2hlaWdo dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ICsgICAgICAgICAgICAgICB0b19pOTE1KHBs YW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+ICsgICAgICAgdW5zaWduZWQgaW50IHJvdGF0 aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwo+ICsgICAgICAgaW50IHNyY194LCBzcmNf eTsKPiArICAgICAgIHUzMiBvZmZzZXQ7Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsKPiArICAgICAg IHJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKPiArICAgICAgIGlm IChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgaWYgKCFw bGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiAr Cj4gKyAgICAgICBzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKPiArICAg ICAgIHNyY195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2Owo+ICsKPiArICAgICAg IGludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwgMCk7Cj4g KyAgICAgICBvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNf eCwgJnNyY195LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwbGFuZV9zdGF0ZSwgMCk7Cj4gKwo+ICsgICAgICAgaWYgKHNyY194ICE9IDAgfHwg c3JjX3kgIT0gMCkgewo+ICsgICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyYml0cmFyeSBjdXJzb3IgcGFubmlu ZyBub3Qgc3VwcG9ydGVkXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIFB1dCB0aGUgZmluYWwgY29v cmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKPiArICAgICAgICAqIGNvb3JkaW5hdGUgY2hl Y2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGRy bV9yZWN0X3RyYW5zbGF0ZV90bygmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNyY194IDw8IDE2LCBzcmNfeSA8PCAxNik7Cj4gKwo+ICsgICAg ICAgLyogSUxLKyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KPiArICAgICAg IGlmIChIQVNfR01DSChkZXZfcHJpdikgJiYgcm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgw KSB7Cj4gKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsgICAgICAgICAgICAgICBpbnQgc3JjX3cgPSBkcm1fcmVj dF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKPiArICAgICAgICAgICAgICAg aW50IHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2 Owo+ICsKPiArICAgICAgICAgICAgICAgb2Zmc2V0ICs9IChzcmNfaCAqIHNyY193IC0gMSkgKiBm Yi0+Zm9ybWF0LT5jcHBbMF07Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLm9mZnNldCA9IG9mZnNldDsKPiArICAgICAgIHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS54ID0gc3JjX3g7Cj4gKyAgICAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0ueSA9IHNyY195Owo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGludGVsX2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKPiArICAgICAgIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsK PiArICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fcmVjdCBzcmMgPSBwbGFuZV9zdGF0ZS0+dWFwaS5z cmM7Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3JlY3QgZHN0ID0gcGxhbmVfc3RhdGUtPnVh cGkuZHN0Owo+ICsgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICBpZiAoZmIgJiYgZmItPm1v ZGlmaWVyICE9IERSTV9GT1JNQVRfTU9EX0xJTkVBUikgewo+ICsgICAgICAgICAgICAgICBkcm1f ZGJnX2ttcygmaTkxNS0+ZHJtLCAiY3Vyc29yIGNhbm5vdCBiZSB0aWxlZFxuIik7Cj4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldCA9 IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0 ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUk1f UExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwo+ICsgICAgICAg aWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICAvKiBV c2UgdGhlIHVuY2xpcHBlZCBzcmMvZHN0IHJlY3RhbmdsZXMsIHdoaWNoIHdlIHByb2dyYW0gdG8g aHcgKi8KPiArICAgICAgIHBsYW5lX3N0YXRlLT51YXBpLnNyYyA9IHNyYzsKPiArICAgICAgIHBs YW5lX3N0YXRlLT51YXBpLmRzdCA9IGRzdDsKPiArCj4gKyAgICAgICByZXQgPSBpbnRlbF9jdXJz b3JfY2hlY2tfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gKyAgICAgICBpZiAocmV0KQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAgIGlmICghcGxhbmVfc3RhdGUtPnVh cGkudmlzaWJsZSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAgcmV0 ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKPiArICAg ICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAg cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQKPiAraTg0NV9jdXJzb3Jf bWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gMjA0ODsK PiArfQo+ICsKPiArc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsgICAgICAgdTMyIGNudGwgPSAw Owo+ICsKPiArICAgICAgIGlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCj4gKyAgICAgICAg ICAgICAgIGNudGwgfD0gQ1VSU09SX0dBTU1BX0VOQUJMRTsKPiArCj4gKyAgICAgICByZXR1cm4g Y250bDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGwoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsg ICAgICAgcmV0dXJuIENVUlNPUl9FTkFCTEUgfAo+ICsgICAgICAgICAgICAgICBDVVJTT1JfRk9S TUFUX0FSR0IgfAo+ICsgICAgICAgICAgICAgICBDVVJTT1JfU1RSSURFKHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS5zdHJpZGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpODQ1X2N1cnNv cl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4g K3sKPiArICAgICAgIGludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiA4NDVnLzg2NWcgYXJlIG9ubHkg bGltaXRlZCBieSB0aGUgd2lkdGggb2YgdGhlaXIgY3Vyc29ycywKPiArICAgICAgICAqIHRoZSBo ZWlnaHQgaXMgYXJiaXRyYXJ5IHVwIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIHJlZ2lzdGVyLgo+ ICsgICAgICAgICovCj4gKyAgICAgICByZXR1cm4gaW50ZWxfY3Vyc29yX3NpemVfb2socGxhbmVf c3RhdGUpICYmIElTX0FMSUdORUQod2lkdGgsIDY0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBp ODQ1X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4gK3sKPiArICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+ICsgICAgICAg aW50IHJldDsKPiArCj4gKyAgICAgICByZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiArCj4gKyAgICAgICAvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJz b3IgaWdub3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KPiArICAgICAgIGlmICghZmIpCj4gKyAgICAg ICAgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgICAgIC8qIENoZWNrIGZvciB3aGljaCBjdXJz b3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwo+ICsgICAgICAgaWYgKCFpODQ1X2N1cnNvcl9zaXplX29r KHBsYW5lX3N0YXRlKSkgewo+ICsgICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmaTkxNS0+ZHJt LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBu b3Qgc3VwcG9ydGVkXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKPiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgZHJtX1dBUk5f T04oJmk5MTUtPmRybSwgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJgo+ICsgICAgICAgICAg ICAgICAgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSAhPSBmYi0+cGl0Y2hl c1swXSk7Cj4gKwo+ICsgICAgICAgc3dpdGNoIChmYi0+cGl0Y2hlc1swXSkgewo+ICsgICAgICAg Y2FzZSAyNTY6Cj4gKyAgICAgICBjYXNlIDUxMjoKPiArICAgICAgIGNhc2UgMTAyNDoKPiArICAg ICAgIGNhc2UgMjA0ODoKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0 Ogo+ICsgICAgICAgICAgICAgICAgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkludmFsaWQgY3Vy c29yIHN0cmlkZSAoJXUpXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmItPnBp dGNoZXNbMF0pOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgIH0K PiArCj4gKyAgICAgICBwbGFuZV9zdGF0ZS0+Y3RsID0gaTg0NV9jdXJzb3JfY3RsKGNydGNfc3Rh dGUsIHBsYW5lX3N0YXRlKTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgaTg0NV91cGRhdGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKyAgICAgICBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7 Cj4gKyAgICAgICB1MzIgY250bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBzaXplID0gMDsKPiAr ICAgICAgIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwo+ICsgICAgICAgaWYgKHBsYW5lX3N0 YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpIHsKPiArICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7 Cj4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQo JnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gKwo+ICsgICAgICAgICAgICAgICBjbnRsID0gcGxh bmVfc3RhdGUtPmN0bCB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaTg0NV9jdXJzb3JfY3Rs X2NydGMoY3J0Y19zdGF0ZSk7Cj4gKwo+ICsgICAgICAgICAgICAgICBzaXplID0gKGhlaWdodCA8 PCAxMikgfCB3aWR0aDsKPiArCj4gKyAgICAgICAgICAgICAgIGJhc2UgPSBpbnRlbF9jdXJzb3Jf YmFzZShwbGFuZV9zdGF0ZSk7Cj4gKyAgICAgICAgICAgICAgIHBvcyA9IGludGVsX2N1cnNvcl9w b3NpdGlvbihwbGFuZV9zdGF0ZSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgc3Bpbl9sb2Nr X2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArICAgICAg IC8qIE9uIHRoZXNlIGNoaXBzZXRzIHdlIGNhbiBvbmx5IG1vZGlmeSB0aGUgYmFzZS9zaXplL3N0 cmlkZQo+ICsgICAgICAgICogd2hpbHN0IHRoZSBjdXJzb3IgaXMgZGlzYWJsZWQuCj4gKyAgICAg ICAgKi8KPiArICAgICAgIGlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0gYmFzZSB8fAo+ICsgICAg ICAgICAgIHBsYW5lLT5jdXJzb3Iuc2l6ZSAhPSBzaXplIHx8Cj4gKyAgICAgICAgICAgcGxhbmUt PmN1cnNvci5jbnRsICE9IGNudGwpIHsKPiArICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgMCk7Cj4gKyAgICAgICAgICAgICAgIGludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJCQVNFKFBJUEVfQSksIGJhc2UpOwo+ICsgICAgICAg ICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSU0laRSwgc2l6ZSk7Cj4gKyAg ICAgICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwg cG9zKTsKPiArICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNO VFIoUElQRV9BKSwgY250bCk7Cj4gKwo+ICsgICAgICAgICAgICAgICBwbGFuZS0+Y3Vyc29yLmJh c2UgPSBiYXNlOwo+ICsgICAgICAgICAgICAgICBwbGFuZS0+Y3Vyc29yLnNpemUgPSBzaXplOwo+ ICsgICAgICAgICAgICAgICBwbGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRsOwo+ICsgICAgICAgfSBl bHNlIHsKPiArICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBP UyhQSVBFX0EpLCBwb3MpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpODQ1X2Rpc2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsgICAgICAgaTg0NV91cGRhdGVfY3Vyc29yKHBs YW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaTg0NV9jdXJz b3JfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGlwZSAqcGlwZSkKPiArewo+ICsgICAgICAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5k ZXYpOwo+ICsgICAgICAgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21h aW47Cj4gKyAgICAgICBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArICAgICAgIGJvb2wgcmV0 Owo+ICsKPiArICAgICAgIHBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKFBJUEVfQSk7 Cj4gKyAgICAgICB3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChk ZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPiArICAgICAgIGlmICghd2FrZXJlZikKPiArICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgIHJldCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOwo+ICsKPiArICAgICAg ICpwaXBlID0gUElQRV9BOwo+ICsKPiArICAgICAgIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRl dl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwo+ICsKPiArICAgICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQKPiAraTl4eF9jdXJzb3JfbWF4X3N0cmlk ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgdTMy IHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IHJvdGF0aW9uKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gcGxhbmUtPmJhc2UuZGV2 LT5tb2RlX2NvbmZpZy5jdXJzb3Jfd2lkdGggKiA0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGk5 eHhfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ICsgICAgICAgdTMyIGNu dGwgPSAwOwo+ICsKPiArICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gY250bDsKPiArCj4gKyAgICAgICBpZiAoY3J0Y19zdGF0ZS0+ Z2FtbWFfZW5hYmxlKQo+ICsgICAgICAgICAgICAgICBjbnRsID0gTUNVUlNPUl9HQU1NQV9FTkFC TEU7Cj4gKwo+ICsgICAgICAgaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCj4gKyAgICAgICAg ICAgICAgIGNudGwgfD0gTUNVUlNPUl9QSVBFX0NTQ19FTkFCTEU7Cj4gKwo+ICsgICAgICAgaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPCA1ICYmICFJU19HNFgoZGV2X3ByaXYpKQo+ICsgICAgICAg ICAgICAgICBjbnRsIHw9IE1DVVJTT1JfUElQRV9TRUxFQ1QoY3J0Yy0+cGlwZSk7Cj4gKwo+ICsg ICAgICAgcmV0dXJuIGNudGw7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgaTl4eF9jdXJzb3JfY3Rs KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4g KyAgICAgICAgICAgICAgIHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Cj4g KyAgICAgICB1MzIgY250bCA9IDA7Cj4gKwo+ICsgICAgICAgaWYgKElTX0dFTihkZXZfcHJpdiwg NikgfHwgSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPiArICAgICAgICAgICAgICAgY250bCB8PSBN Q1VSU09SX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwo+ICsKPiArICAgICAgIHN3aXRjaCAoZHJtX3Jl Y3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpIHsKPiArICAgICAgIGNhc2UgNjQ6Cj4g KyAgICAgICAgICAgICAgIGNudGwgfD0gTUNVUlNPUl9NT0RFXzY0X0FSR0JfQVg7Cj4gKyAgICAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSAxMjg6Cj4gKyAgICAgICAgICAgICAgIGNu dGwgfD0gTUNVUlNPUl9NT0RFXzEyOF9BUkdCX0FYOwo+ICsgICAgICAgICAgICAgICBicmVhazsK PiArICAgICAgIGNhc2UgMjU2Ogo+ICsgICAgICAgICAgICAgICBjbnRsIHw9IE1DVVJTT1JfTU9E RV8yNTZfQVJHQl9BWDsKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0 Ogo+ICsgICAgICAgICAgICAgICBNSVNTSU5HX0NBU0UoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCkpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgIH0K PiArCj4gKyAgICAgICBpZiAocGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01PREVfUk9U QVRFXzE4MCkKPiArICAgICAgICAgICAgICAgY250bCB8PSBNQ1VSU09SX1JPVEFURV8xODA7Cj4g Kwo+ICsgICAgICAgcmV0dXJuIGNudGw7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGk5eHhfY3Vy c29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK PiArewo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiArICAg ICAgICAgICAgICAgdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiArICAg ICAgIGludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+ ICsgICAgICAgaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KTsKPiArCj4gKyAgICAgICBpZiAoIWludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRl KSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgIC8qIEN1cnNv ciB3aWR0aCBpcyBsaW1pdGVkIHRvIGEgZmV3IHBvd2VyLW9mLXR3byBzaXplcyAqLwo+ICsgICAg ICAgc3dpdGNoICh3aWR0aCkgewo+ICsgICAgICAgY2FzZSAyNTY6Cj4gKyAgICAgICBjYXNlIDEy ODoKPiArICAgICAgIGNhc2UgNjQ6Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAg ZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIC8qCj4gKyAgICAgICAgKiBJVkIrIGhhdmUgQ1VSX0ZCQ19DVEwgd2hpY2ggYWxs b3dzIGFuIGFyYml0cmFyeSBjdXJzb3IKPiArICAgICAgICAqIGhlaWdodCBmcm9tIDggbGluZXMg dXAgdG8gdGhlIGN1cnNvciB3aWR0aCwgd2hlbiB0aGUKPiArICAgICAgICAqIGN1cnNvciBpcyBu b3Qgcm90YXRlZC4gRXZlcnl0aGluZyBlbHNlIHJlcXVpcmVzIHNxdWFyZQo+ICsgICAgICAgICog Y3Vyc29ycy4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYgKEhBU19DVVJfRkJDKGRldl9wcml2 KSAmJgo+ICsgICAgICAgICAgIHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JP VEFURV8wKSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChoZWlnaHQgPCA4IHx8IGhlaWdodCA+IHdp ZHRoKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAgIH0g ZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChoZWlnaHQgIT0gd2lkdGgpCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJl dHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5eHhfY2hlY2tfY3Vyc29yKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsgICAg ICAgc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRl LT51YXBpLnBsYW5lKTsKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArICAgICAgIGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsgICAgICAgZW51bSBwaXBl IHBpcGUgPSBwbGFuZS0+cGlwZTsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgcmV0 ID0gaW50ZWxfY2hlY2tfY3Vyc29yKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiArICAgICAg IGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgLyog aWYgd2Ugd2FudCB0byB0dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0 ICovCj4gKyAgICAgICBpZiAoIWZiKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArCj4g KyAgICAgICAvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KPiAr ICAgICAgIGlmICghaTl4eF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKPiArICAgICAg ICAgICAgICAgZHJtX2RiZygmZGV2X3ByaXYtPmRybSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9ydGVkXG4iLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KSk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52 aXNpYmxlICYmCj4gKyAgICAgICAgICAgICAgICAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MF0uc3RyaWRlICE9IGZiLT5waXRjaGVzWzBdKTsKPiArCj4gKyAgICAgICBpZiAoZmItPnBpdGNo ZXNbMF0gIT0KPiArICAgICAgICAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KSAqIGZiLT5mb3JtYXQtPmNwcFswXSkgewo+ICsgICAgICAgICAgICAgICBkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQg Y3Vyc29yIHN0cmlkZSAoJXUpIChjdXJzb3Igd2lkdGggJWQpXG4iLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBmYi0+cGl0Y2hlc1swXSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwo+ICsgICAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKgo+ICsgICAg ICAgICogVGhlcmUncyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgY3Vyc29yIG9uIENIViBwaXBl IEMuCj4gKyAgICAgICAgKiBJZiBpdCBzdHJhZGRsZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUgc2Ny ZWVuIHRoZW4KPiArICAgICAgICAqIG1vdmluZyBpdCBhd2F5IGZyb20gdGhlIGVkZ2Ugb3IgZGlz YWJsaW5nIGl0IG9mdGVuCj4gKyAgICAgICAgKiByZXN1bHRzIGluIGEgcGlwZSB1bmRlcnJ1biwg YW5kIG9mdGVuIHRoYXQgY2FuIGxlYWQgdG8KPiArICAgICAgICAqIGRlYWQgcGlwZSAoY29uc3Rh bnQgdW5kZXJydW4gcmVwb3J0ZWQsIGFuZCBpdCBzY2Fucwo+ICsgICAgICAgICogb3V0IGp1c3Qg YSBzb2xpZCBjb2xvcikuIFRvIHJlY292ZXIgZnJvbSB0aGF0LCB0aGUKPiArICAgICAgICAqIGRp c3BsYXkgcG93ZXIgd2VsbCBtdXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFnYWluLgo+ICsgICAg ICAgICogUmVmdXNlIHRoZSBwdXQgdGhlIGN1cnNvciBpbnRvIHRoYXQgY29tcHJvbWlzZWQgcG9z aXRpb24uCj4gKyAgICAgICAgKi8KPiArICAgICAgIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSAmJiBwaXBlID09IFBJUEVfQyAmJgo+ICsgICAgICAgICAgIHBsYW5lX3N0YXRlLT51YXBpLnZp c2libGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxIDwgMCkgewo+ICsgICAgICAgICAgICAg ICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkNIViBjdXJzb3IgQyBub3QgYWxsb3dlZCB0byBzdHJhZGRsZSB0aGUgbGVmdCBzY3JlZW4g ZWRnZVxuIik7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIHBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X2N1cnNvcl9jdGwoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArICAgICAgIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsK PiArICAgICAgIGVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4gKyAgICAgICB1MzIgY250 bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBmYmNfY3RsID0gMDsKPiArICAgICAgIHVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7Cj4gKwo+ICsgICAgICAgaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0 YXRlLT51YXBpLnZpc2libGUpIHsKPiArICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGggPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiArICAgICAgICAgICAgICAg dW5zaWduZWQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3Qp Owo+ICsKPiArICAgICAgICAgICAgICAgY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGk5eHhfY3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+ICsK PiArICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKPiArICAgICAgICAgICAgICAg ICAgICAgICBmYmNfY3RsID0gQ1VSX0ZCQ19DVExfRU4gfCAoaGVpZ2h0IC0gMSk7Cj4gKwo+ICsg ICAgICAgICAgICAgICBiYXNlID0gaW50ZWxfY3Vyc29yX2Jhc2UocGxhbmVfc3RhdGUpOwo+ICsg ICAgICAgICAgICAgICBwb3MgPSBpbnRlbF9jdXJzb3JfcG9zaXRpb24ocGxhbmVfc3RhdGUpOwo+ ICsgICAgICAgfQo+ICsKPiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5j b3JlLmxvY2ssIGlycWZsYWdzKTsKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogT24gc29t ZSBwbGF0Zm9ybXMgd3JpdGluZyBDVVJDTlRSIGZpcnN0IHdpbGwgYWxzbwo+ICsgICAgICAgICog Y2F1c2UgQ1VSUE9TIHRvIGJlIGFybWVkIGJ5IHRoZSBDVVJCQVNFIHdyaXRlLgo+ICsgICAgICAg ICogV2l0aG91dCB0aGUgQ1VSQ05UUiB3cml0ZSB0aGUgQ1VSUE9TIHdyaXRlIHdvdWxkCj4gKyAg ICAgICAgKiBhcm0gaXRzZWxmLiBUaHVzIHdlIGFsd2F5cyB1cGRhdGUgQ1VSQ05UUiBiZWZvcmUK PiArICAgICAgICAqIENVUlBPUy4KPiArICAgICAgICAqCj4gKyAgICAgICAgKiBPbiBvdGhlciBw bGF0Zm9ybXMgQ1VSUE9TIGFsd2F5cyByZXF1aXJlcyB0aGUKPiArICAgICAgICAqIENVUkJBU0Ug d3JpdGUgdG8gYXJtIHRoZSB1cGRhdGUuIEFkZGl0b25hbGx5Cj4gKyAgICAgICAgKiBhIHdyaXRl IHRvIGFueSBvZiB0aGUgY3Vyc29yIHJlZ2lzdGVyIHdpbGwgY2FuY2VsCj4gKyAgICAgICAgKiBh biBhbHJlYWR5IGFybWVkIGN1cnNvciB1cGRhdGUuIFRodXMgbGVhdmluZyBvdXQKPiArICAgICAg ICAqIHRoZSBDVVJCQVNFIHdyaXRlIGFmdGVyIENVUlBPUyBjb3VsZCBsZWFkIHRvIGEKPiArICAg ICAgICAqIGN1cnNvciB0aGF0IGRvZXNuJ3QgYXBwZWFyIHRvIG1vdmUsIG9yIGV2ZW4gY2hhbmdl Cj4gKyAgICAgICAgKiBzaGFwZS4gVGh1cyB3ZSBhbHdheXMgd3JpdGUgQ1VSQkFTRS4KPiArICAg ICAgICAqCj4gKyAgICAgICAgKiBUaGUgb3RoZXIgcmVnaXN0ZXJzIGFyZSBhcm1lZCBieSBieSB0 aGUgQ1VSQkFTRSB3cml0ZQo+ICsgICAgICAgICogZXhjZXB0IHdoZW4gdGhlIHBsYW5lIGlzIGdl dHRpbmcgZW5hYmxlZCBhdCB3aGljaCB0aW1lCj4gKyAgICAgICAgKiB0aGUgQ1VSQ05UUiB3cml0 ZSBhcm1zIHRoZSB1cGRhdGUuCj4gKyAgICAgICAgKi8KPiArCj4gKyAgICAgICBpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA5KQo+ICsgICAgICAgICAgICAgICBza2xfd3JpdGVfY3Vyc29yX3dt KHBsYW5lLCBjcnRjX3N0YXRlKTsKPiArCj4gKyAgICAgICBpZiAoIW5lZWRzX21vZGVzZXQoY3J0 Y19zdGF0ZSkpCj4gKyAgICAgICAgICAgICAgIGludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxf ZmV0Y2gocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAwKTsKPiArCj4gKyAgICAgICBp ZiAocGxhbmUtPmN1cnNvci5iYXNlICE9IGJhc2UgfHwKPiArICAgICAgICAgICBwbGFuZS0+Y3Vy c29yLnNpemUgIT0gZmJjX2N0bCB8fAo+ICsgICAgICAgICAgIHBsYW5lLT5jdXJzb3IuY250bCAh PSBjbnRsKSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCj4g KyAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUl9G QkNfQ1RMKHBpcGUpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZiY19jdGwpOwo+ICsgICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg Q1VSQ05UUihwaXBlKSwgY250bCk7Cj4gKyAgICAgICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDVVJQT1MocGlwZSksIHBvcyk7Cj4gKyAgICAgICAgICAgICAgIGludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKPiArCj4gKyAgICAgICAg ICAgICAgIHBsYW5lLT5jdXJzb3IuYmFzZSA9IGJhc2U7Cj4gKyAgICAgICAgICAgICAgIHBsYW5l LT5jdXJzb3Iuc2l6ZSA9IGZiY19jdGw7Cj4gKyAgICAgICAgICAgICAgIHBsYW5lLT5jdXJzb3Iu Y250bCA9IGNudGw7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICBpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKHBpcGUpLCBwb3MpOwo+ICsgICAgICAgICAgICAg ICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShwaXBlKSwgYmFzZSk7Cj4gKyAg ICAgICB9Cj4gKwo+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVu Y29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5eHhfZGlzYWJs ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ ICt7Cj4gKyAgICAgICBpOXh4X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW51bSBwaXBlICpwaXBlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gKyAgICAgICBlbnVtIGlu dGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKPiArICAgICAgIGludGVsX3dh a2VyZWZfdCB3YWtlcmVmOwo+ICsgICAgICAgYm9vbCByZXQ7Cj4gKyAgICAgICB1MzIgdmFsOwo+ ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBOb3QgMTAwJSBjb3JyZWN0IGZvciBwbGFuZXMg dGhhdCBjYW4gbW92ZSBiZXR3ZWVuIHBpcGVzLAo+ICsgICAgICAgICogYnV0IHRoYXQncyBvbmx5 IHRoZSBjYXNlIGZvciBnZW4yLTMgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkKPiArICAgICAgICAqIGRp c3BsYXkgcG93ZXIgd2VsbHMuCj4gKyAgICAgICAgKi8KPiArICAgICAgIHBvd2VyX2RvbWFpbiA9 IFBPV0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKPiArICAgICAgIHdha2VyZWYgPSBpbnRl bF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOwo+ ICsgICAgICAgaWYgKCF3YWtlcmVmKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4g Kwo+ICsgICAgICAgdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihwbGFuZS0+ cGlwZSkpOwo+ICsKPiArICAgICAgIHJldCA9IHZhbCAmIE1DVVJTT1JfTU9ERTsKPiArCj4gKyAg ICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikpCj4g KyAgICAgICAgICAgICAgICpwaXBlID0gcGxhbmUtPnBpcGU7Cj4gKyAgICAgICBlbHNlCj4gKyAg ICAgICAgICAgICAgICpwaXBlID0gKHZhbCAmIE1DVVJTT1JfUElQRV9TRUxFQ1RfTUFTSykgPj4K PiArICAgICAgICAgICAgICAgICAgICAgICBNQ1VSU09SX1BJUEVfU0VMRUNUX1NISUZUOwo+ICsK PiArICAgICAgIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4s IHdha2VyZWYpOwo+ICsKPiArICAgICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpf cGxhbmUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUz MiBmb3JtYXQsIHU2NCBtb2RpZmllcikKPiArewo+ICsgICAgICAgcmV0dXJuIG1vZGlmaWVyID09 IERSTV9GT1JNQVRfTU9EX0xJTkVBUiAmJgo+ICsgICAgICAgICAgICAgICBmb3JtYXQgPT0gRFJN X0ZPUk1BVF9BUkdCODg4ODsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtpbnRlbF9sZWdhY3lf Y3Vyc29yX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRybV9jcnRjICpfY3J0YywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBjcnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdTMyIHNyY194LCB1MzIgc3JjX3ksCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdTMyIHNyY193LCB1MzIgc3JjX2gsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCj4gK3sKPiArICAgICAg IHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOwo+ICsg ICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKF9jcnRjKTsKPiAr ICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlID0KPiArICAg ICAgICAgICAgICAgdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOwo+ICsg ICAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpuZXdfcGxhbmVfc3RhdGU7Cj4gKyAgICAg ICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9Cj4gKyAgICAgICAgICAgICAg IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gKyAgICAgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGU7Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsK PiArICAgICAgIC8qCj4gKyAgICAgICAgKiBXaGVuIGNydGMgaXMgaW5hY3RpdmUgb3IgdGhlcmUg aXMgYSBtb2Rlc2V0IHBlbmRpbmcsCj4gKyAgICAgICAgKiB3YWl0IGZvciBpdCB0byBjb21wbGV0 ZSBpbiB0aGUgc2xvd3BhdGgKPiArICAgICAgICAqCj4gKyAgICAgICAgKiBGSVhNRSBiaWdqb2lu ZXIgZmFzdHBhdGggd291bGQgYmUgZ29vZAo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAoIWNy dGNfc3RhdGUtPmh3LmFjdGl2ZSB8fCBuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8Cj4gKyAg ICAgICAgICAgY3J0Y19zdGF0ZS0+dXBkYXRlX3BpcGUgfHwgY3J0Y19zdGF0ZS0+Ymlnam9pbmVy KQo+ICsgICAgICAgICAgICAgICBnb3RvIHNsb3c7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAg ICAqIERvbid0IGRvIGFuIGFzeW5jIHVwZGF0ZSBpZiB0aGVyZSBpcyBhbiBvdXRzdGFuZGluZyBj b21taXQgbW9kaWZ5aW5nCj4gKyAgICAgICAgKiB0aGUgcGxhbmUuICBUaGlzIHByZXZlbnRzIG91 ciBhc3luYyB1cGRhdGUncyBjaGFuZ2VzIGZyb20gZ2V0dGluZwo+ICsgICAgICAgICogb3ZlcnJp ZGRlbiBieSBhIHByZXZpb3VzIHN5bmNocm9ub3VzIHVwZGF0ZSdzIHN0YXRlLgo+ICsgICAgICAg ICovCj4gKyAgICAgICBpZiAob2xkX3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdCAmJgo+ICsgICAg ICAgICAgICF0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNv bW1pdC0+aHdfZG9uZSkpCj4gKyAgICAgICAgICAgICAgIGdvdG8gc2xvdzsKPiArCj4gKyAgICAg ICAvKgo+ICsgICAgICAgICogSWYgYW55IHBhcmFtZXRlcnMgY2hhbmdlIHRoYXQgbWF5IGFmZmVj dCB3YXRlcm1hcmtzLAo+ICsgICAgICAgICogdGFrZSB0aGUgc2xvd3BhdGguIE9ubHkgY2hhbmdp bmcgZmIgb3IgcG9zaXRpb24gc2hvdWxkIGJlCj4gKyAgICAgICAgKiBpbiB0aGUgZmFzdHBhdGgu Cj4gKyAgICAgICAgKi8KPiArICAgICAgIGlmIChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0YyAh PSAmY3J0Yy0+YmFzZSB8fAo+ICsgICAgICAgICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNf dyAhPSBzcmNfdyB8fAo+ICsgICAgICAgICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCAh PSBzcmNfaCB8fAo+ICsgICAgICAgICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgIT0g Y3J0Y193IHx8Cj4gKyAgICAgICAgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCAhPSBj cnRjX2ggfHwKPiArICAgICAgICAgICAhb2xkX3BsYW5lX3N0YXRlLT51YXBpLmZiICE9ICFmYikK PiArICAgICAgICAgICAgICAgZ290byBzbG93Owo+ICsKPiArICAgICAgIG5ld19wbGFuZV9zdGF0 ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSgmcGxh bmUtPmJhc2UpKTsKPiArICAgICAgIGlmICghbmV3X3BsYW5lX3N0YXRlKQo+ICsgICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKPiArCj4gKyAgICAgICBuZXdfY3J0Y19zdGF0ZSA9IHRvX2lu dGVsX2NydGNfc3RhdGUoaW50ZWxfY3J0Y19kdXBsaWNhdGVfc3RhdGUoJmNydGMtPmJhc2UpKTsK PiArICAgICAgIGlmICghbmV3X2NydGNfc3RhdGUpIHsKPiArICAgICAgICAgICAgICAgcmV0ID0g LUVOT01FTTsKPiArICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKPiArICAgICAgIH0KPiAr Cj4gKyAgICAgICBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoJm5ld19wbGFuZV9zdGF0ZS0+ dWFwaSwgZmIpOwo+ICsKPiArICAgICAgIG5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfeCA9IHNy Y194Owo+ICsgICAgICAgbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY195ID0gc3JjX3k7Cj4gKyAg ICAgICBuZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX3cgPSBzcmNfdzsKPiArICAgICAgIG5ld19w bGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCA9IHNyY19oOwo+ICsgICAgICAgbmV3X3BsYW5lX3N0YXRl LT51YXBpLmNydGNfeCA9IGNydGNfeDsKPiArICAgICAgIG5ld19wbGFuZV9zdGF0ZS0+dWFwaS5j cnRjX3kgPSBjcnRjX3k7Cj4gKyAgICAgICBuZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ID0g Y3J0Y193Owo+ICsgICAgICAgbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCA9IGNydGNfaDsK PiArCj4gKyAgICAgICBpbnRlbF9wbGFuZV9jb3B5X3VhcGlfdG9faHdfc3RhdGUobmV3X3BsYW5l X3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUsIGNydGMpOwo+ICsKPiArICAgICAgIHJldCA9IGludGVs X3BsYW5lX2F0b21pY19jaGVja193aXRoX3N0YXRlKGNydGNfc3RhdGUsIG5ld19jcnRjX3N0YXRl LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xk X3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAg ICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKPiArCj4gKyAgICAgICByZXQgPSBpbnRlbF9wbGFu ZV9waW5fZmIobmV3X3BsYW5lX3N0YXRlKTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAg ICAgICAgIGdvdG8gb3V0X2ZyZWU7Cj4gKwo+ICsgICAgICAgaW50ZWxfZnJvbnRidWZmZXJfZmx1 c2godG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiksCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPUklHSU5fRkxJUCk7Cj4gKyAgICAgICBpbnRlbF9m cm9udGJ1ZmZlcl90cmFjayh0b19pbnRlbF9mcm9udGJ1ZmZlcihvbGRfcGxhbmVfc3RhdGUtPmh3 LmZiKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2ludGVsX2Zyb250YnVm ZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGxhbmUtPmZyb250YnVmZmVyX2JpdCk7Cj4gKwo+ICsgICAgICAgLyogU3dhcCBwbGFu ZSBzdGF0ZSAqLwo+ICsgICAgICAgcGxhbmUtPmJhc2Uuc3RhdGUgPSAmbmV3X3BsYW5lX3N0YXRl LT51YXBpOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBXZSBjYW5ub3Qgc3dhcCBjcnRj X3N0YXRlIGFzIGl0IG1heSBiZSBpbiB1c2UgYnkgYW4gYXRvbWljIGNvbW1pdCBvcgo+ICsgICAg ICAgICogcGFnZSBmbGlwIHRoYXQncyBydW5uaW5nIHNpbXVsdGFuZW91c2x5LiBJZiB3ZSBzd2Fw IGNydGNfc3RhdGUgYW5kCj4gKyAgICAgICAgKiBkZXN0cm95IHRoZSBvbGQgc3RhdGUsIHdlIHdp bGwgY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSB0aGVyZS4KPiArICAgICAgICAqCj4gKyAgICAgICAg KiBPbmx5IHVwZGF0ZSBhY3RpdmVfcGxhbmVzLCB3aGljaCBpcyBuZWVkZWQgZm9yIG91ciBpbnRl cm5hbAo+ICsgICAgICAgICogYm9va2tlZXBpbmcuIEVpdGhlciB2YWx1ZSB3aWxsIGRvIHRoZSBy aWdodCB0aGluZyB3aGVuIHVwZGF0aW5nCj4gKyAgICAgICAgKiBwbGFuZXMgYXRvbWljYWxseS4g SWYgdGhlIGN1cnNvciB3YXMgcGFydCBvZiB0aGUgYXRvbWljIHVwZGF0ZSB0aGVuCj4gKyAgICAg ICAgKiB3ZSB3b3VsZCBoYXZlIHRha2VuIHRoZSBzbG93cGF0aC4KPiArICAgICAgICAqLwo+ICsg ICAgICAgY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lcyA9IG5ld19jcnRjX3N0YXRlLT5hY3RpdmVf cGxhbmVzOwo+ICsKPiArICAgICAgIGlmIChuZXdfcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkK PiArICAgICAgICAgICAgICAgaW50ZWxfdXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBu ZXdfcGxhbmVfc3RhdGUpOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBpbnRlbF9k aXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlKTsKPiArCj4gKyAgICAgICBpbnRlbF9wbGFu ZV91bnBpbl9mYihvbGRfcGxhbmVfc3RhdGUpOwo+ICsKPiArb3V0X2ZyZWU6Cj4gKyAgICAgICBp ZiAobmV3X2NydGNfc3RhdGUpCj4gKyAgICAgICAgICAgICAgIGludGVsX2NydGNfZGVzdHJveV9z dGF0ZSgmY3J0Yy0+YmFzZSwgJm5ld19jcnRjX3N0YXRlLT51YXBpKTsKPiArICAgICAgIGlmIChy ZXQpCj4gKyAgICAgICAgICAgICAgIGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoJnBsYW5lLT5i YXNlLCAmbmV3X3BsYW5lX3N0YXRlLT51YXBpKTsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAg ICAgICAgaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSgmcGxhbmUtPmJhc2UsICZvbGRfcGxhbmVf c3RhdGUtPnVhcGkpOwo+ICsgICAgICAgcmV0dXJuIHJldDsKPiArCj4gK3Nsb3c6Cj4gKyAgICAg ICByZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lKCZwbGFuZS0+YmFzZSwgJmNy dGMtPmJhc2UsIGZiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oLCBj dHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRl bF9jdXJzb3JfcGxhbmVfZnVuY3MgPSB7Cj4gKyAgICAgICAudXBkYXRlX3BsYW5lID0gaW50ZWxf bGVnYWN5X2N1cnNvcl91cGRhdGUsCj4gKyAgICAgICAuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9t aWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCj4gKyAgICAgICAuZGVzdHJveSA9IGludGVsX3BsYW5l X2Rlc3Ryb3ksCj4gKyAgICAgICAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSwKPiArICAgICAgIC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVs X3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4gKyAgICAgICAuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBp bnRlbF9jdXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaW50 ZWxfcGxhbmUgKgo+ICtpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGlwZSBw aXBlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmUgKmN1cnNvcjsKPiArICAgICAg IGludCByZXQsIHpwb3M7Cj4gKwo+ICsgICAgICAgY3Vyc29yID0gaW50ZWxfcGxhbmVfYWxsb2Mo KTsKPiArICAgICAgIGlmIChJU19FUlIoY3Vyc29yKSkKPiArICAgICAgICAgICAgICAgcmV0dXJu IGN1cnNvcjsKPiArCj4gKyAgICAgICBjdXJzb3ItPnBpcGUgPSBwaXBlOwo+ICsgICAgICAgY3Vy c29yLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsKPiArICAgICAgIGN1 cnNvci0+aWQgPSBQTEFORV9DVVJTT1I7Cj4gKyAgICAgICBjdXJzb3ItPmZyb250YnVmZmVyX2Jp dCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIGN1cnNvci0+aWQpOwo+ICsKPiArICAgICAgIGlm IChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpKSB7Cj4gKyAgICAgICAg ICAgICAgIGN1cnNvci0+bWF4X3N0cmlkZSA9IGk4NDVfY3Vyc29yX21heF9zdHJpZGU7Cj4gKyAg ICAgICAgICAgICAgIGN1cnNvci0+dXBkYXRlX3BsYW5lID0gaTg0NV91cGRhdGVfY3Vyc29yOwo+ ICsgICAgICAgICAgICAgICBjdXJzb3ItPmRpc2FibGVfcGxhbmUgPSBpODQ1X2Rpc2FibGVfY3Vy c29yOwo+ICsgICAgICAgICAgICAgICBjdXJzb3ItPmdldF9od19zdGF0ZSA9IGk4NDVfY3Vyc29y X2dldF9od19zdGF0ZTsKPiArICAgICAgICAgICAgICAgY3Vyc29yLT5jaGVja19wbGFuZSA9IGk4 NDVfY2hlY2tfY3Vyc29yOwo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgY3Vy c29yLT5tYXhfc3RyaWRlID0gaTl4eF9jdXJzb3JfbWF4X3N0cmlkZTsKPiArICAgICAgICAgICAg ICAgY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9jdXJzb3I7Cj4gKyAgICAgICAg ICAgICAgIGN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9jdXJzb3I7Cj4gKyAg ICAgICAgICAgICAgIGN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTl4eF9jdXJzb3JfZ2V0X2h3X3N0 YXRlOwo+ICsgICAgICAgICAgICAgICBjdXJzb3ItPmNoZWNrX3BsYW5lID0gaTl4eF9jaGVja19j dXJzb3I7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgY3Vyc29yLT5jdXJzb3IuYmFzZSA9IH4w Owo+ICsgICAgICAgY3Vyc29yLT5jdXJzb3IuY250bCA9IH4wOwo+ICsKPiArICAgICAgIGlmIChJ U19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpIHx8IEhBU19DVVJfRkJDKGRl dl9wcml2KSkKPiArICAgICAgICAgICAgICAgY3Vyc29yLT5jdXJzb3Iuc2l6ZSA9IH4wOwo+ICsK PiArICAgICAgIHJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwg JmN1cnNvci0+YmFzZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCAmaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludGVsX2N1cnNvcl9mb3JtYXRzLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoaW50ZWxfY3Vyc29yX2Zvcm1hdHMpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl9mb3JtYXRfbW9kaWZp ZXJzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9QTEFORV9U WVBFX0NVUlNPUiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3Vy c29yICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAg ICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA0KQo+ICsgICAgICAgICAgICAgICBkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5 KCZjdXJzb3ItPmJhc2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFJNX01PREVfUk9UQVRFXzAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX01PREVfUk9UQVRFXzAgfAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9NT0RFX1JPVEFU RV8xODApOwo+ICsKPiArICAgICAgIHpwb3MgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5udW1f c3ByaXRlc1twaXBlXSArIDE7Cj4gKyAgICAgICBkcm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRh YmxlX3Byb3BlcnR5KCZjdXJzb3ItPmJhc2UsIHpwb3MpOwo+ICsKPiArICAgICAgIGlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDEyKQo+ICsgICAgICAgICAgICAgICBkcm1fcGxhbmVfZW5hYmxl X2ZiX2RhbWFnZV9jbGlwcygmY3Vyc29yLT5iYXNlKTsKPiArCj4gKyAgICAgICBkcm1fcGxhbmVf aGVscGVyX2FkZCgmY3Vyc29yLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPiAr Cj4gKyAgICAgICByZXR1cm4gY3Vyc29yOwo+ICsKPiArZmFpbDoKPiArICAgICAgIGludGVsX3Bs YW5lX2ZyZWUoY3Vyc29yKTsKPiArCj4gKyAgICAgICByZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRl eCBjNTY3YzBjYWRhN2UuLjBhM2I5Nzg4OTI0OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTEzNywxNiArMTM3LDYgQEAgc3RhdGlj IGNvbnN0IHU2NCBpOXh4X2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsKPiAgICAgICAgIERSTV9GT1JN QVRfTU9EX0lOVkFMSUQKPiAgfTsKPgo+IC0vKiBDdXJzb3IgZm9ybWF0cyAqLwo+IC1zdGF0aWMg Y29uc3QgdTMyIGludGVsX2N1cnNvcl9mb3JtYXRzW10gPSB7Cj4gLSAgICAgICBEUk1fRk9STUFU X0FSR0I4ODg4LAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHU2NCBjdXJzb3JfZm9ybWF0X21v ZGlmaWVyc1tdID0gewo+IC0gICAgICAgRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+IC0gICAgICAg RFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+IC19Owo+IC0KPiAgc3RhdGljIHZvaWQgaTl4eF9jcnRj X2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gIHN0 YXRpYyB2b2lkIGlsa19wY2hfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+IEBA IC0yNTMzLDkgKzI1MjMsOSBAQCBzdGF0aWMgdTMyIGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgICAgICAgcmV0dXJuIG9m ZnNldF9hbGlnbmVkOwo+ICB9Cj4KPiAtc3RhdGljIHUzMiBpbnRlbF9wbGFuZV9jb21wdXRlX2Fs aWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRl LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29s b3JfcGxhbmUpCj4gK3UzMiBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAq eCwgaW50ICp5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGNvbG9yX3BsYW5lKQo+ICB7Cj4gICAgICAgICBzdHJ1Y3Qg aW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUoc3RhdGUtPnVhcGkucGxh bmUpOwo+ICAgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwo+IEBAIC0zMjcyLDcgKzMyNjIsNyBAQCBpbnRlbF9w bGFuZV9yZW1hcF9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAg ICAgICAgIH0KPiAgfQo+Cj4gLXN0YXRpYyBpbnQKPiAraW50Cj4gIGludGVsX3BsYW5lX2NvbXB1 dGVfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIHsKPiAgICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqZmIgPQo+IEBAIC0xMTU0Nyw1Njkg KzExNTM3LDYgQEAgc3RhdGljIGJvb2wgaW50ZWxfY3J0Y19nZXRfcGlwZV9jb25maWcoc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gICAgICAgICByZXR1cm4gdHJ1ZTsKPiAg fQo+Cj4gLXN0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX2Jhc2UoY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0KPiAtICAgICAgICAgICAgICAgdG9faTkxNShwbGFuZV9zdGF0ZS0+ dWFwaS5wbGFuZS0+ZGV2KTsKPiAtICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+IC0gICAgICAgY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gLSAgICAgICB1MzIgYmFzZTsK PiAtCj4gLSAgICAgICBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmRpc3BsYXkuY3Vyc29yX25l ZWRzX3BoeXNpY2FsKQo+IC0gICAgICAgICAgICAgICBiYXNlID0gc2dfZG1hX2FkZHJlc3Mob2Jq LT5tbS5wYWdlcy0+c2dsKTsKPiAtICAgICAgIGVsc2UKPiAtICAgICAgICAgICAgICAgYmFzZSA9 IGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKTsKPiAtCj4gLSAgICAgICByZXR1 cm4gYmFzZSArIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Cj4gLX0KPiAtCj4g LXN0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtICAgICAgIGludCB4ID0gcGxhbmVfc3RhdGUt PnVhcGkuZHN0LngxOwo+IC0gICAgICAgaW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7 Cj4gLSAgICAgICB1MzIgcG9zID0gMDsKPiAtCj4gLSAgICAgICBpZiAoeCA8IDApIHsKPiAtICAg ICAgICAgICAgICAgcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWF9TSElGVDsKPiAt ICAgICAgICAgICAgICAgeCA9IC14Owo+IC0gICAgICAgfQo+IC0gICAgICAgcG9zIHw9IHggPDwg Q1VSU09SX1hfU0hJRlQ7Cj4gLQo+IC0gICAgICAgaWYgKHkgPCAwKSB7Cj4gLSAgICAgICAgICAg ICAgIHBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1lfU0hJRlQ7Cj4gLSAgICAgICAg ICAgICAgIHkgPSAteTsKPiAtICAgICAgIH0KPiAtICAgICAgIHBvcyB8PSB5IDw8IENVUlNPUl9Z X1NISUZUOwo+IC0KPiAtICAgICAgIHJldHVybiBwb3M7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29s IGludGVsX2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4gLXsKPiAtICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNv bmZpZyA9Cj4gLSAgICAgICAgICAgICAgICZwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2LT5t b2RlX2NvbmZpZzsKPiAtICAgICAgIGludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5kc3QpOwo+IC0gICAgICAgaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgm cGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiAtCj4gLSAgICAgICByZXR1cm4gd2lkdGggPiAwICYm IHdpZHRoIDw9IGNvbmZpZy0+Y3Vyc29yX3dpZHRoICYmCj4gLSAgICAgICAgICAgICAgIGhlaWdo dCA+IDAgJiYgaGVpZ2h0IDw9IGNvbmZpZy0+Y3Vyc29yX2hlaWdodDsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQo+IC0gICAgICAgICAgICAgICB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBs YW5lLT5kZXYpOwo+IC0gICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUt Pmh3LnJvdGF0aW9uOwo+IC0gICAgICAgaW50IHNyY194LCBzcmNfeTsKPiAtICAgICAgIHUzMiBv ZmZzZXQ7Cj4gLSAgICAgICBpbnQgcmV0Owo+IC0KPiAtICAgICAgIHJldCA9IGludGVsX3BsYW5l X2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKPiAtICAgICAgIGlmIChyZXQpCj4gLSAgICAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgICAgaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52 aXNpYmxlKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiAtCj4gLSAgICAgICBzcmNfeCA9 IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKPiAtICAgICAgIHNyY195ID0gcGxhbmVf c3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2Owo+IC0KPiAtICAgICAgIGludGVsX2FkZF9mYl9vZmZz ZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwgMCk7Cj4gLSAgICAgICBvZmZzZXQgPSBp bnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNfeCwgJnNyY195LAo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZV9zdGF0 ZSwgMCk7Cj4gLQo+IC0gICAgICAgaWYgKHNyY194ICE9IDAgfHwgc3JjX3kgIT0gMCkgewo+IC0g ICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkFyYml0cmFyeSBjdXJzb3IgcGFubmluZyBub3Qgc3VwcG9ydGVkXG4i KTsKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gLSAgICAgICB9Cj4gLQo+IC0g ICAgICAgLyoKPiAtICAgICAgICAqIFB1dCB0aGUgZmluYWwgY29vcmRpbmF0ZXMgYmFjayBzbyB0 aGF0IHRoZSBzcmMKPiAtICAgICAgICAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSBy aWdodCB2YWx1ZXMuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGRybV9yZWN0X3RyYW5zbGF0ZV90 bygmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNyY194IDw8IDE2LCBzcmNfeSA8PCAxNik7Cj4gLQo+IC0gICAgICAgLyogSUxLKyBkbyB0aGlz IGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KPiAtICAgICAgIGlmIChIQVNfR01DSChkZXZf cHJpdikgJiYgcm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKSB7Cj4gLSAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZi Owo+IC0gICAgICAgICAgICAgICBpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3Rh dGUtPnVhcGkuc3JjKSA+PiAxNjsKPiAtICAgICAgICAgICAgICAgaW50IHNyY19oID0gZHJtX3Jl Y3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2Owo+IC0KPiAtICAgICAgICAg ICAgICAgb2Zmc2V0ICs9IChzcmNfaCAqIHNyY193IC0gMSkgKiBmYi0+Zm9ybWF0LT5jcHBbMF07 Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9m ZnNldCA9IG9mZnNldDsKPiAtICAgICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0g c3JjX3g7Cj4gLSAgICAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHNyY195Owo+ IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGludGVsX2NoZWNr X2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQo+IC17Cj4gLSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5ody5mYjsKPiAtICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiAtICAgICAgIGNvbnN0IHN0 cnVjdCBkcm1fcmVjdCBzcmMgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmM7Cj4gLSAgICAgICBjb25z dCBzdHJ1Y3QgZHJtX3JlY3QgZHN0ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0Owo+IC0gICAgICAg aW50IHJldDsKPiAtCj4gLSAgICAgICBpZiAoZmIgJiYgZmItPm1vZGlmaWVyICE9IERSTV9GT1JN QVRfTU9EX0xJTkVBUikgewo+IC0gICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmaTkxNS0+ZHJt LCAiY3Vyc29yIGNhbm5vdCBiZSB0aWxlZFxuIik7Cj4gLSAgICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHJldCA9IGludGVsX2F0b21pY19wbGFu ZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1ND QUxJTkcsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwo+IC0gICAgICAgaWYgKHJldCkKPiAtICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsKPiAtCj4gLSAgICAgICAvKiBVc2UgdGhlIHVuY2xpcHBlZCBz cmMvZHN0IHJlY3RhbmdsZXMsIHdoaWNoIHdlIHByb2dyYW0gdG8gaHcgKi8KPiAtICAgICAgIHBs YW5lX3N0YXRlLT51YXBpLnNyYyA9IHNyYzsKPiAtICAgICAgIHBsYW5lX3N0YXRlLT51YXBpLmRz dCA9IGRzdDsKPiAtCj4gLSAgICAgICByZXQgPSBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShw bGFuZV9zdGF0ZSk7Cj4gLSAgICAgICBpZiAocmV0KQo+IC0gICAgICAgICAgICAgICByZXR1cm4g cmV0Owo+IC0KPiAtICAgICAgIGlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKPiAtICAg ICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLQo+IC0gICAgICAgcmV0ID0gaW50ZWxfcGxhbmVfY2hl Y2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKPiAtICAgICAgIGlmIChyZXQpCj4gLSAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQKPiAtaTg0NV9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lLAo+IC0gICAgICAgICAgICAgICAgICAgICAgdTMyIHBpeGVsX2Zv cm1hdCwgdTY0IG1vZGlmaWVyLAo+IC0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IHJvdGF0aW9uKQo+IC17Cj4gLSAgICAgICByZXR1cm4gMjA0ODsKPiAtfQo+IC0KPiAtc3RhdGlj IHUzMiBpODQ1X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKPiAtewo+IC0gICAgICAgdTMyIGNudGwgPSAwOwo+IC0KPiAtICAgICAgIGlm IChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCj4gLSAgICAgICAgICAgICAgIGNudGwgfD0gQ1VS U09SX0dBTU1BX0VOQUJMRTsKPiAtCj4gLSAgICAgICByZXR1cm4gY250bDsKPiAtfQo+IC0KPiAt c3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAtewo+IC0gICAgICAgcmV0dXJuIENVUlNP Ul9FTkFCTEUgfAo+IC0gICAgICAgICAgICAgICBDVVJTT1JfRk9STUFUX0FSR0IgfAo+IC0gICAg ICAgICAgICAgICBDVVJTT1JfU1RSSURFKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJp ZGUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9zaXplX29rKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtICAgICAgIGludCB3 aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+IC0KPiAtICAg ICAgIC8qCj4gLSAgICAgICAgKiA4NDVnLzg2NWcgYXJlIG9ubHkgbGltaXRlZCBieSB0aGUgd2lk dGggb2YgdGhlaXIgY3Vyc29ycywKPiAtICAgICAgICAqIHRoZSBoZWlnaHQgaXMgYXJiaXRyYXJ5 IHVwIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIHJlZ2lzdGVyLgo+IC0gICAgICAgICovCj4gLSAg ICAgICByZXR1cm4gaW50ZWxfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpICYmIElTX0FMSUdO RUQod2lkdGgsIDY0KTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpODQ1X2NoZWNrX2N1cnNvcihz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAt ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3 LmZiOwo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBs YW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+IC0gICAgICAgaW50IHJldDsKPiAtCj4gLSAg ICAgICByZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ IC0gICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtCj4gLSAg ICAgICAvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3IgaWdub3JlIHdpZHRoIGFu ZCBoZWlnaHQgKi8KPiAtICAgICAgIGlmICghZmIpCj4gLSAgICAgICAgICAgICAgIHJldHVybiAw Owo+IC0KPiAtICAgICAgIC8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9y dCAqLwo+IC0gICAgICAgaWYgKCFpODQ1X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkgewo+ IC0gICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9ydGVkXG4iLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuZHN0KSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX3JlY3RfaGVpZ2h0 KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgZHJtX1dBUk5fT04oJmk5MTUtPmRybSwgcGxh bmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJgo+IC0gICAgICAgICAgICAgICAgICAgcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSAhPSBmYi0+cGl0Y2hlc1swXSk7Cj4gLQo+IC0gICAg ICAgc3dpdGNoIChmYi0+cGl0Y2hlc1swXSkgewo+IC0gICAgICAgY2FzZSAyNTY6Cj4gLSAgICAg ICBjYXNlIDUxMjoKPiAtICAgICAgIGNhc2UgMTAyNDoKPiAtICAgICAgIGNhc2UgMjA0ODoKPiAt ICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICBkZWZhdWx0Ogo+IC0gICAgICAgICAgICAg ICAgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkludmFsaWQgY3Vyc29yIHN0cmlkZSAoJXUpXG4i LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmItPnBpdGNoZXNbMF0pOwo+IC0gICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBwbGFu ZV9zdGF0ZS0+Y3RsID0gaTg0NV9jdXJzb3JfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsK PiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTg0NV91cGRh dGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gLSAgICAgICB1MzIgY250 bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBzaXplID0gMDsKPiAtICAgICAgIHVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7Cj4gLQo+IC0gICAgICAgaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRl LT51YXBpLnZpc2libGUpIHsKPiAtICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gLSAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBp LmRzdCk7Cj4gLQo+IC0gICAgICAgICAgICAgICBjbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgaTg0NV9jdXJzb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7 Cj4gLQo+IC0gICAgICAgICAgICAgICBzaXplID0gKGhlaWdodCA8PCAxMikgfCB3aWR0aDsKPiAt Cj4gLSAgICAgICAgICAgICAgIGJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7 Cj4gLSAgICAgICAgICAgICAgIHBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0 ZSk7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+IC0KPiAtICAgICAgIC8qIE9uIHRoZXNlIGNoaXBz ZXRzIHdlIGNhbiBvbmx5IG1vZGlmeSB0aGUgYmFzZS9zaXplL3N0cmlkZQo+IC0gICAgICAgICog d2hpbHN0IHRoZSBjdXJzb3IgaXMgZGlzYWJsZWQuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGlm IChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0gYmFzZSB8fAo+IC0gICAgICAgICAgIHBsYW5lLT5jdXJz b3Iuc2l6ZSAhPSBzaXplIHx8Cj4gLSAgICAgICAgICAgcGxhbmUtPmN1cnNvci5jbnRsICE9IGNu dGwpIHsKPiAtICAgICAgICAgICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNO VFIoUElQRV9BKSwgMCk7Cj4gLSAgICAgICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBDVVJCQVNFKFBJUEVfQSksIGJhc2UpOwo+IC0gICAgICAgICAgICAgICBpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgQ1VSU0laRSwgc2l6ZSk7Cj4gLSAgICAgICAgICAgICAgIGludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKPiAtICAgICAgICAg ICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgY250bCk7 Cj4gLQo+IC0gICAgICAgICAgICAgICBwbGFuZS0+Y3Vyc29yLmJhc2UgPSBiYXNlOwo+IC0gICAg ICAgICAgICAgICBwbGFuZS0+Y3Vyc29yLnNpemUgPSBzaXplOwo+IC0gICAgICAgICAgICAgICBw bGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRsOwo+IC0gICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAg ICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBFX0EpLCBwb3MpOwo+ IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpODQ1X2Rp c2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKPiAtewo+IC0gICAgICAgaTg0NV91cGRhdGVfY3Vyc29yKHBsYW5lLCBjcnRjX3N0YXRlLCBO VUxMKTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgaTg0NV9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gcGlwZSAqcGlwZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+IC0gICAgICAgZW51 bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Cj4gLSAgICAgICBpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtICAgICAgIGJvb2wgcmV0Owo+IC0KPiAtICAgICAgIHBv d2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKFBJUEVfQSk7Cj4gLSAgICAgICB3YWtlcmVm ID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9t YWluKTsKPiAtICAgICAgIGlmICghd2FrZXJlZikKPiAtICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwo+IC0KPiAtICAgICAgIHJldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIENVUkNOVFIo UElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOwo+IC0KPiAtICAgICAgICpwaXBlID0gUElQRV9BOwo+ IC0KPiAtICAgICAgIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21h aW4sIHdha2VyZWYpOwo+IC0KPiAtICAgICAgIHJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRp YyB1bnNpZ25lZCBpbnQKPiAtaTl4eF9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lLAo+IC0gICAgICAgICAgICAgICAgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0 IG1vZGlmaWVyLAo+IC0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9u KQo+IC17Cj4gLSAgICAgICByZXR1cm4gcGxhbmUtPmJhc2UuZGV2LT5tb2RlX2NvbmZpZy5jdXJz b3Jfd2lkdGggKiA0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bF9jcnRj KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLSAgICAg ICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFw aS5jcnRjKTsKPiAtICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+IC0gICAgICAgdTMyIGNudGwgPSAwOwo+IC0KPiAtICAg ICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+IC0gICAgICAgICAgICAgICByZXR1 cm4gY250bDsKPiAtCj4gLSAgICAgICBpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQo+IC0g ICAgICAgICAgICAgICBjbnRsID0gTUNVUlNPUl9HQU1NQV9FTkFCTEU7Cj4gLQo+IC0gICAgICAg aWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCj4gLSAgICAgICAgICAgICAgIGNudGwgfD0gTUNV UlNPUl9QSVBFX0NTQ19FTkFCTEU7Cj4gLQo+IC0gICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPCA1ICYmICFJU19HNFgoZGV2X3ByaXYpKQo+IC0gICAgICAgICAgICAgICBjbnRsIHw9IE1D VVJTT1JfUElQRV9TRUxFQ1QoY3J0Yy0+cGlwZSk7Cj4gLQo+IC0gICAgICAgcmV0dXJuIGNudGw7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgaTl4eF9jdXJzb3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtICAgICAg IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gLSAgICAgICAgICAgICAgIHRv X2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Cj4gLSAgICAgICB1MzIgY250bCA9 IDA7Cj4gLQo+IC0gICAgICAgaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwgSVNfSVZZQlJJREdF KGRldl9wcml2KSkKPiAtICAgICAgICAgICAgICAgY250bCB8PSBNQ1VSU09SX1RSSUNLTEVfRkVF RF9ESVNBQkxFOwo+IC0KPiAtICAgICAgIHN3aXRjaCAoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCkpIHsKPiAtICAgICAgIGNhc2UgNjQ6Cj4gLSAgICAgICAgICAgICAgIGNu dGwgfD0gTUNVUlNPUl9NT0RFXzY0X0FSR0JfQVg7Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+ IC0gICAgICAgY2FzZSAxMjg6Cj4gLSAgICAgICAgICAgICAgIGNudGwgfD0gTUNVUlNPUl9NT0RF XzEyOF9BUkdCX0FYOwo+IC0gICAgICAgICAgICAgICBicmVhazsKPiAtICAgICAgIGNhc2UgMjU2 Ogo+IC0gICAgICAgICAgICAgICBjbnRsIHw9IE1DVVJTT1JfTU9ERV8yNTZfQVJHQl9BWDsKPiAt ICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICBkZWZhdWx0Ogo+IC0gICAgICAgICAgICAg ICBNSVNTSU5HX0NBU0UoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwo+ IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBpZiAo cGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkKPiAtICAgICAg ICAgICAgICAgY250bCB8PSBNQ1VSU09SX1JPVEFURV8xODA7Cj4gLQo+IC0gICAgICAgcmV0dXJu IGNudGw7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGk5eHhfY3Vyc29yX3NpemVfb2soY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAtewo+IC0gICAgICAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiAtICAgICAgICAgICAgICAgdG9faTkx NShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiAtICAgICAgIGludCB3aWR0aCA9IGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+IC0gICAgICAgaW50IGhlaWdo dCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiAtCj4gLSAgICAg ICBpZiAoIWludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkKPiAtICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOwo+IC0KPiAtICAgICAgIC8qIEN1cnNvciB3aWR0aCBpcyBsaW1pdGVk IHRvIGEgZmV3IHBvd2VyLW9mLXR3byBzaXplcyAqLwo+IC0gICAgICAgc3dpdGNoICh3aWR0aCkg ewo+IC0gICAgICAgY2FzZSAyNTY6Cj4gLSAgICAgICBjYXNlIDEyODoKPiAtICAgICAgIGNhc2Ug NjQ6Cj4gLSAgICAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgZGVmYXVsdDoKPiAtICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIC8qCj4gLSAg ICAgICAgKiBJVkIrIGhhdmUgQ1VSX0ZCQ19DVEwgd2hpY2ggYWxsb3dzIGFuIGFyYml0cmFyeSBj dXJzb3IKPiAtICAgICAgICAqIGhlaWdodCBmcm9tIDggbGluZXMgdXAgdG8gdGhlIGN1cnNvciB3 aWR0aCwgd2hlbiB0aGUKPiAtICAgICAgICAqIGN1cnNvciBpcyBub3Qgcm90YXRlZC4gRXZlcnl0 aGluZyBlbHNlIHJlcXVpcmVzIHNxdWFyZQo+IC0gICAgICAgICogY3Vyc29ycy4KPiAtICAgICAg ICAqLwo+IC0gICAgICAgaWYgKEhBU19DVVJfRkJDKGRldl9wcml2KSAmJgo+IC0gICAgICAgICAg IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8wKSB7Cj4gLSAgICAg ICAgICAgICAgIGlmIChoZWlnaHQgPCA4IHx8IGhlaWdodCA+IHdpZHRoKQo+IC0gICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiAtICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAg ICAgICAgIGlmIChoZWlnaHQgIT0gd2lkdGgpCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHJldHVybiB0cnVlOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50IGk5eHhfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKPiAt ICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUt PmJhc2UuZGV2KTsKPiAtICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGxhbmVfc3RhdGUtPmh3LmZiOwo+IC0gICAgICAgZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlw ZTsKPiAtICAgICAgIGludCByZXQ7Cj4gLQo+IC0gICAgICAgcmV0ID0gaW50ZWxfY2hlY2tfY3Vy c29yKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiAtICAgICAgIGlmIChyZXQpCj4gLSAgICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgICAgLyogaWYgd2Ugd2FudCB0byB0dXJu IG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCj4gLSAgICAgICBpZiAo IWZiKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiAtCj4gLSAgICAgICAvKiBDaGVjayBm b3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KPiAtICAgICAgIGlmICghaTl4eF9j dXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKPiAtICAgICAgICAgICAgICAgZHJtX2RiZygm ZGV2X3ByaXYtPmRybSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAiQ3Vyc29yIGRpbWVuc2lv biAlZHglZCBub3Qgc3VwcG9ydGVkXG4iLAo+IC0gICAgICAgICAgICAgICAgICAgICAgIGRybV9y ZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAo+IC0gICAgICAgICAgICAgICAgICAg ICAgIGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Cj4gLSAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIGRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmCj4gLSAgICAg ICAgICAgICAgICAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlICE9IGZiLT5w aXRjaGVzWzBdKTsKPiAtCj4gLSAgICAgICBpZiAoZmItPnBpdGNoZXNbMF0gIT0KPiAtICAgICAg ICAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSAqIGZiLT5mb3JtYXQt PmNwcFswXSkgewo+IC0gICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY3Vyc29yIHN0cmlkZSAoJXUp IChjdXJzb3Igd2lkdGggJWQpXG4iLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBmYi0+ cGl0Y2hlc1swXSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogVGhlcmUncyBzb21l dGhpbmcgd3Jvbmcgd2l0aCB0aGUgY3Vyc29yIG9uIENIViBwaXBlIEMuCj4gLSAgICAgICAgKiBJ ZiBpdCBzdHJhZGRsZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUgc2NyZWVuIHRoZW4KPiAtICAgICAg ICAqIG1vdmluZyBpdCBhd2F5IGZyb20gdGhlIGVkZ2Ugb3IgZGlzYWJsaW5nIGl0IG9mdGVuCj4g LSAgICAgICAgKiByZXN1bHRzIGluIGEgcGlwZSB1bmRlcnJ1biwgYW5kIG9mdGVuIHRoYXQgY2Fu IGxlYWQgdG8KPiAtICAgICAgICAqIGRlYWQgcGlwZSAoY29uc3RhbnQgdW5kZXJydW4gcmVwb3J0 ZWQsIGFuZCBpdCBzY2Fucwo+IC0gICAgICAgICogb3V0IGp1c3QgYSBzb2xpZCBjb2xvcikuIFRv IHJlY292ZXIgZnJvbSB0aGF0LCB0aGUKPiAtICAgICAgICAqIGRpc3BsYXkgcG93ZXIgd2VsbCBt dXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFnYWluLgo+IC0gICAgICAgICogUmVmdXNlIHRoZSBw dXQgdGhlIGN1cnNvciBpbnRvIHRoYXQgY29tcHJvbWlzZWQgcG9zaXRpb24uCj4gLSAgICAgICAg Ki8KPiAtICAgICAgIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVf QyAmJgo+IC0gICAgICAgICAgIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYgcGxhbmVfc3Rh dGUtPnVhcGkuZHN0LngxIDwgMCkgewo+IC0gICAgICAgICAgICAgICBkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNIViBjdXJzb3IgQyBu b3QgYWxsb3dlZCB0byBzdHJhZGRsZSB0aGUgbGVmdCBzY3JlZW4gZWRnZVxuIik7Cj4gLSAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHBsYW5l X3N0YXRlLT5jdGwgPSBpOXh4X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOXh4X3VwZGF0 ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiAtICAgICAgIGVudW0gcGlw ZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4gLSAgICAgICB1MzIgY250bCA9IDAsIGJhc2UgPSAwLCBw b3MgPSAwLCBmYmNfY3RsID0gMDsKPiAtICAgICAgIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4g LQo+IC0gICAgICAgaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUp IHsKPiAtICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxh bmVfc3RhdGUtPnVhcGkuZHN0KTsKPiAtICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0ID0g ZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+IC0KPiAtICAgICAgICAg ICAgICAgY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAo+IC0gICAgICAgICAgICAgICAgICAgICAg IGk5eHhfY3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+IC0KPiAtICAgICAgICAgICAgICAg aWYgKHdpZHRoICE9IGhlaWdodCkKPiAtICAgICAgICAgICAgICAgICAgICAgICBmYmNfY3RsID0g Q1VSX0ZCQ19DVExfRU4gfCAoaGVpZ2h0IC0gMSk7Cj4gLQo+IC0gICAgICAgICAgICAgICBiYXNl ID0gaW50ZWxfY3Vyc29yX2Jhc2UocGxhbmVfc3RhdGUpOwo+IC0gICAgICAgICAgICAgICBwb3Mg PSBpbnRlbF9jdXJzb3JfcG9zaXRpb24ocGxhbmVfc3RhdGUpOwo+IC0gICAgICAgfQo+IC0KPiAt ICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdz KTsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogT24gc29tZSBwbGF0Zm9ybXMgd3JpdGlu ZyBDVVJDTlRSIGZpcnN0IHdpbGwgYWxzbwo+IC0gICAgICAgICogY2F1c2UgQ1VSUE9TIHRvIGJl IGFybWVkIGJ5IHRoZSBDVVJCQVNFIHdyaXRlLgo+IC0gICAgICAgICogV2l0aG91dCB0aGUgQ1VS Q05UUiB3cml0ZSB0aGUgQ1VSUE9TIHdyaXRlIHdvdWxkCj4gLSAgICAgICAgKiBhcm0gaXRzZWxm LiBUaHVzIHdlIGFsd2F5cyB1cGRhdGUgQ1VSQ05UUiBiZWZvcmUKPiAtICAgICAgICAqIENVUlBP Uy4KPiAtICAgICAgICAqCj4gLSAgICAgICAgKiBPbiBvdGhlciBwbGF0Zm9ybXMgQ1VSUE9TIGFs d2F5cyByZXF1aXJlcyB0aGUKPiAtICAgICAgICAqIENVUkJBU0Ugd3JpdGUgdG8gYXJtIHRoZSB1 cGRhdGUuIEFkZGl0b25hbGx5Cj4gLSAgICAgICAgKiBhIHdyaXRlIHRvIGFueSBvZiB0aGUgY3Vy c29yIHJlZ2lzdGVyIHdpbGwgY2FuY2VsCj4gLSAgICAgICAgKiBhbiBhbHJlYWR5IGFybWVkIGN1 cnNvciB1cGRhdGUuIFRodXMgbGVhdmluZyBvdXQKPiAtICAgICAgICAqIHRoZSBDVVJCQVNFIHdy aXRlIGFmdGVyIENVUlBPUyBjb3VsZCBsZWFkIHRvIGEKPiAtICAgICAgICAqIGN1cnNvciB0aGF0 IGRvZXNuJ3QgYXBwZWFyIHRvIG1vdmUsIG9yIGV2ZW4gY2hhbmdlCj4gLSAgICAgICAgKiBzaGFw ZS4gVGh1cyB3ZSBhbHdheXMgd3JpdGUgQ1VSQkFTRS4KPiAtICAgICAgICAqCj4gLSAgICAgICAg KiBUaGUgb3RoZXIgcmVnaXN0ZXJzIGFyZSBhcm1lZCBieSBieSB0aGUgQ1VSQkFTRSB3cml0ZQo+ IC0gICAgICAgICogZXhjZXB0IHdoZW4gdGhlIHBsYW5lIGlzIGdldHRpbmcgZW5hYmxlZCBhdCB3 aGljaCB0aW1lCj4gLSAgICAgICAgKiB0aGUgQ1VSQ05UUiB3cml0ZSBhcm1zIHRoZSB1cGRhdGUu Cj4gLSAgICAgICAgKi8KPiAtCj4gLSAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5 KQo+IC0gICAgICAgICAgICAgICBza2xfd3JpdGVfY3Vyc29yX3dtKHBsYW5lLCBjcnRjX3N0YXRl KTsKPiAtCj4gLSAgICAgICBpZiAoIW5lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkpCj4gLSAgICAg ICAgICAgICAgIGludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0Y2gocGxhbmUsIGNydGNf c3RhdGUsIHBsYW5lX3N0YXRlLCAwKTsKPiAtCj4gLSAgICAgICBpZiAocGxhbmUtPmN1cnNvci5i YXNlICE9IGJhc2UgfHwKPiAtICAgICAgICAgICBwbGFuZS0+Y3Vyc29yLnNpemUgIT0gZmJjX2N0 bCB8fAo+IC0gICAgICAgICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBjbnRsKSB7Cj4gLSAgICAg ICAgICAgICAgIGlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUl9GQkNfQ1RMKHBpcGUpLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiY19jdGwpOwo+IC0gICAg ICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihwaXBlKSwgY250 bCk7Cj4gLSAgICAgICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1Mo cGlwZSksIHBvcyk7Cj4gLSAgICAgICAgICAgICAgIGludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKPiAtCj4gLSAgICAgICAgICAgICAgIHBsYW5lLT5jdXJz b3IuYmFzZSA9IGJhc2U7Cj4gLSAgICAgICAgICAgICAgIHBsYW5lLT5jdXJzb3Iuc2l6ZSA9IGZi Y19jdGw7Cj4gLSAgICAgICAgICAgICAgIHBsYW5lLT5jdXJzb3IuY250bCA9IGNudGw7Cj4gLSAg ICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSUE9TKHBpcGUpLCBwb3MpOwo+IC0gICAgICAgICAgICAgICBpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgQ1VSQkFTRShwaXBlKSwgYmFzZSk7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAg ICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFn cyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLSAgICAgICBpOXh4 X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgYm9vbCBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwaXBlICpwaXBl KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gLSAgICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJf ZG9tYWluIHBvd2VyX2RvbWFpbjsKPiAtICAgICAgIGludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ IC0gICAgICAgYm9vbCByZXQ7Cj4gLSAgICAgICB1MzIgdmFsOwo+IC0KPiAtICAgICAgIC8qCj4g LSAgICAgICAgKiBOb3QgMTAwJSBjb3JyZWN0IGZvciBwbGFuZXMgdGhhdCBjYW4gbW92ZSBiZXR3 ZWVuIHBpcGVzLAo+IC0gICAgICAgICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4y LTMgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkKPiAtICAgICAgICAqIGRpc3BsYXkgcG93ZXIgd2VsbHMu Cj4gLSAgICAgICAgKi8KPiAtICAgICAgIHBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBF KHBsYW5lLT5waXBlKTsKPiAtICAgICAgIHdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dl dF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOwo+IC0gICAgICAgaWYgKCF3YWtl cmVmKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLQo+IC0gICAgICAgdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihwbGFuZS0+cGlwZSkpOwo+IC0KPiAtICAg ICAgIHJldCA9IHZhbCAmIE1DVVJTT1JfTU9ERTsKPiAtCj4gLSAgICAgICBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikpCj4gLSAgICAgICAgICAgICAgICpw aXBlID0gcGxhbmUtPnBpcGU7Cj4gLSAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgICpwaXBl ID0gKHZhbCAmIE1DVVJTT1JfUElQRV9TRUxFQ1RfTUFTSykgPj4KPiAtICAgICAgICAgICAgICAg ICAgICAgICBNQ1VSU09SX1BJUEVfU0VMRUNUX1NISUZUOwo+IC0KPiAtICAgICAgIGludGVsX2Rp c3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwo+IC0KPiAt ICAgICAgIHJldHVybiByZXQ7Cj4gLX0KPiAtCj4gIC8qIFZFU0EgNjQweDQ4MHg3Mkh6IG1vZGUg dG8gc2V0IG9uIHRoZSBwaXBlICovCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSBsb2FkX2RldGVjdF9tb2RlID0gewo+ICAgICAgICAgRFJNX01PREUoIjY0MHg0ODAiLCBE Uk1fTU9ERV9UWVBFX0RFRkFVTFQsIDMxNTAwLCA2NDAsIDY2NCwKPiBAQCAtMTY2MjAsNyArMTYw NDcsNyBAQCBzdGF0aWMgdm9pZCBhZGRfcnBzX2Jvb3N0X2FmdGVyX3ZibGFuayhzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gICAgICAgICBhZGRfd2FpdF9xdWV1ZShkcm1fY3J0Y192Ymxhbmtfd2Fp dHF1ZXVlKGNydGMpLCAmd2FpdC0+d2FpdCk7Cj4gIH0KPgo+IC1zdGF0aWMgaW50IGludGVsX3Bs YW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICtpbnQg aW50ZWxfcGxhbmVfcGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Cj4gIHsKPiAgICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFu ZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Cj4gICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gQEAgLTE2NjUwLDcg KzE2MDc3LDcgQEAgc3RhdGljIGludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAgICAgICAgIHJldHVybiAwOwo+ICB9Cj4KPiAtc3Rh dGljIHZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpv bGRfcGxhbmVfc3RhdGUpCj4gK3ZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBpOTE1 X3ZtYSAqdm1hOwo+Cj4gQEAgLTE2ODg2LDEzICsxNjMxMyw2IEBAIHN0YXRpYyBib29sIGk5NjVf cGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAo+ICAg ICAgICAgfQo+ICB9Cj4KPiAtc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX2Zvcm1hdF9tb2Rfc3Vw cG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQo+IC17Cj4g LSAgICAgICByZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSICYmCj4gLSAg ICAgICAgICAgICAgIGZvcm1hdCA9PSBEUk1fRk9STUFUX0FSR0I4ODg4Owo+IC19Cj4gLQo+ICBz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpOTY1X3BsYW5lX2Z1bmNzID0gewo+ ICAgICAgICAgLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK PiAgICAgICAgIC5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu ZSwKPiBAQCAtMTY5MTEsMTQyICsxNjMzMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7Cj4gICAgICAgICAuZm9ybWF0X21vZF9zdXBw b3J0ZWQgPSBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAo+ICB9Owo+Cj4gLXN0YXRp YyBpbnQKPiAtaW50ZWxfbGVnYWN5X2N1cnNvcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqX3Bs YW5lLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqX2NydGMs Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNydGNfeCwgaW50IGNydGNfeSwKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3J0Y193LCB1bnNpZ25lZCBp bnQgY3J0Y19oLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfeCwgdTMyIHNy Y195LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfdywgdTMyIHNyY19oLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0 eCAqY3R4KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50 ZWxfcGxhbmUoX3BsYW5lKTsKPiAtICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9f aW50ZWxfY3J0YyhfY3J0Yyk7Cj4gLSAgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9s ZF9wbGFuZV9zdGF0ZSA9Cj4gLSAgICAgICAgICAgICAgIHRvX2ludGVsX3BsYW5lX3N0YXRlKHBs YW5lLT5iYXNlLnN0YXRlKTsKPiAtICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3 X3BsYW5lX3N0YXRlOwo+IC0gICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUgPQo+IC0gICAgICAgICAgICAgICB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3Rh dGUpOwo+IC0gICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlOwo+ IC0gICAgICAgaW50IHJldDsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogV2hlbiBjcnRj IGlzIGluYWN0aXZlIG9yIHRoZXJlIGlzIGEgbW9kZXNldCBwZW5kaW5nLAo+IC0gICAgICAgICog d2FpdCBmb3IgaXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dwYXRoCj4gLSAgICAgICAgKgo+IC0g ICAgICAgICogRklYTUUgYmlnam9pbmVyIGZhc3RwYXRoIHdvdWxkIGJlIGdvb2QKPiAtICAgICAg ICAqLwo+IC0gICAgICAgaWYgKCFjcnRjX3N0YXRlLT5ody5hY3RpdmUgfHwgbmVlZHNfbW9kZXNl dChjcnRjX3N0YXRlKSB8fAo+IC0gICAgICAgICAgIGNydGNfc3RhdGUtPnVwZGF0ZV9waXBlIHx8 IGNydGNfc3RhdGUtPmJpZ2pvaW5lcikKPiAtICAgICAgICAgICAgICAgZ290byBzbG93Owo+IC0K PiAtICAgICAgIC8qCj4gLSAgICAgICAgKiBEb24ndCBkbyBhbiBhc3luYyB1cGRhdGUgaWYgdGhl cmUgaXMgYW4gb3V0c3RhbmRpbmcgY29tbWl0IG1vZGlmeWluZwo+IC0gICAgICAgICogdGhlIHBs YW5lLiAgVGhpcyBwcmV2ZW50cyBvdXIgYXN5bmMgdXBkYXRlJ3MgY2hhbmdlcyBmcm9tIGdldHRp bmcKPiAtICAgICAgICAqIG92ZXJyaWRkZW4gYnkgYSBwcmV2aW91cyBzeW5jaHJvbm91cyB1cGRh dGUncyBzdGF0ZS4KPiAtICAgICAgICAqLwo+IC0gICAgICAgaWYgKG9sZF9wbGFuZV9zdGF0ZS0+ dWFwaS5jb21taXQgJiYKPiAtICAgICAgICAgICAhdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJm9s ZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQtPmh3X2RvbmUpKQo+IC0gICAgICAgICAgICAgICBn b3RvIHNsb3c7Cj4gLQo+IC0gICAgICAgLyoKPiAtICAgICAgICAqIElmIGFueSBwYXJhbWV0ZXJz IGNoYW5nZSB0aGF0IG1heSBhZmZlY3Qgd2F0ZXJtYXJrcywKPiAtICAgICAgICAqIHRha2UgdGhl IHNsb3dwYXRoLiBPbmx5IGNoYW5naW5nIGZiIG9yIHBvc2l0aW9uIHNob3VsZCBiZQo+IC0gICAg ICAgICogaW4gdGhlIGZhc3RwYXRoLgo+IC0gICAgICAgICovCj4gLSAgICAgICBpZiAob2xkX3Bs YW5lX3N0YXRlLT51YXBpLmNydGMgIT0gJmNydGMtPmJhc2UgfHwKPiAtICAgICAgICAgICBvbGRf cGxhbmVfc3RhdGUtPnVhcGkuc3JjX3cgIT0gc3JjX3cgfHwKPiAtICAgICAgICAgICBvbGRfcGxh bmVfc3RhdGUtPnVhcGkuc3JjX2ggIT0gc3JjX2ggfHwKPiAtICAgICAgICAgICBvbGRfcGxhbmVf c3RhdGUtPnVhcGkuY3J0Y193ICE9IGNydGNfdyB8fAo+IC0gICAgICAgICAgIG9sZF9wbGFuZV9z dGF0ZS0+dWFwaS5jcnRjX2ggIT0gY3J0Y19oIHx8Cj4gLSAgICAgICAgICAgIW9sZF9wbGFuZV9z dGF0ZS0+dWFwaS5mYiAhPSAhZmIpCj4gLSAgICAgICAgICAgICAgIGdvdG8gc2xvdzsKPiAtCj4g LSAgICAgICBuZXdfcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShpbnRlbF9wbGFu ZV9kdXBsaWNhdGVfc3RhdGUoJnBsYW5lLT5iYXNlKSk7Cj4gLSAgICAgICBpZiAoIW5ld19wbGFu ZV9zdGF0ZSkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0gICAgICAg bmV3X2NydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGludGVsX2NydGNfZHVwbGljYXRl X3N0YXRlKCZjcnRjLT5iYXNlKSk7Cj4gLSAgICAgICBpZiAoIW5ld19jcnRjX3N0YXRlKSB7Cj4g LSAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07Cj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0 X2ZyZWU7Cj4gLSAgICAgICB9Cj4gLQo+IC0gICAgICAgZHJtX2F0b21pY19zZXRfZmJfZm9yX3Bs YW5lKCZuZXdfcGxhbmVfc3RhdGUtPnVhcGksIGZiKTsKPiAtCj4gLSAgICAgICBuZXdfcGxhbmVf c3RhdGUtPnVhcGkuc3JjX3ggPSBzcmNfeDsKPiAtICAgICAgIG5ld19wbGFuZV9zdGF0ZS0+dWFw aS5zcmNfeSA9IHNyY195Owo+IC0gICAgICAgbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY193ID0g c3JjX3c7Cj4gLSAgICAgICBuZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX2ggPSBzcmNfaDsKPiAt ICAgICAgIG5ld19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3ggPSBjcnRjX3g7Cj4gLSAgICAgICBu ZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y195ID0gY3J0Y195Owo+IC0gICAgICAgbmV3X3BsYW5l X3N0YXRlLT51YXBpLmNydGNfdyA9IGNydGNfdzsKPiAtICAgICAgIG5ld19wbGFuZV9zdGF0ZS0+ dWFwaS5jcnRjX2ggPSBjcnRjX2g7Cj4gLQo+IC0gICAgICAgaW50ZWxfcGxhbmVfY29weV91YXBp X3RvX2h3X3N0YXRlKG5ld19wbGFuZV9zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlLCBjcnRjKTsKPiAt Cj4gLSAgICAgICByZXQgPSBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2tfd2l0aF9zdGF0ZShjcnRj X3N0YXRlLCBuZXdfY3J0Y19zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9sZF9wbGFuZV9zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKPiAt ICAgICAgIGlmIChyZXQpCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0X2ZyZWU7Cj4gLQo+IC0g ICAgICAgcmV0ID0gaW50ZWxfcGxhbmVfcGluX2ZiKG5ld19wbGFuZV9zdGF0ZSk7Cj4gLSAgICAg ICBpZiAocmV0KQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dF9mcmVlOwo+IC0KPiAtICAgICAg IGludGVsX2Zyb250YnVmZmVyX2ZsdXNoKHRvX2ludGVsX2Zyb250YnVmZmVyKG5ld19wbGFuZV9z dGF0ZS0+aHcuZmIpLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JJR0lOX0ZM SVApOwo+IC0gICAgICAgaW50ZWxfZnJvbnRidWZmZXJfdHJhY2sodG9faW50ZWxfZnJvbnRidWZm ZXIob2xkX3BsYW5lX3N0YXRlLT5ody5mYiksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0b19pbnRlbF9mcm9udGJ1ZmZlcihuZXdfcGxhbmVfc3RhdGUtPmh3LmZiKSwKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQpOwo+IC0K PiAtICAgICAgIC8qIFN3YXAgcGxhbmUgc3RhdGUgKi8KPiAtICAgICAgIHBsYW5lLT5iYXNlLnN0 YXRlID0gJm5ld19wbGFuZV9zdGF0ZS0+dWFwaTsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAg ICogV2UgY2Fubm90IHN3YXAgY3J0Y19zdGF0ZSBhcyBpdCBtYXkgYmUgaW4gdXNlIGJ5IGFuIGF0 b21pYyBjb21taXQgb3IKPiAtICAgICAgICAqIHBhZ2UgZmxpcCB0aGF0J3MgcnVubmluZyBzaW11 bHRhbmVvdXNseS4gSWYgd2Ugc3dhcCBjcnRjX3N0YXRlIGFuZAo+IC0gICAgICAgICogZGVzdHJv eSB0aGUgb2xkIHN0YXRlLCB3ZSB3aWxsIGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUgdGhlcmUuCj4g LSAgICAgICAgKgo+IC0gICAgICAgICogT25seSB1cGRhdGUgYWN0aXZlX3BsYW5lcywgd2hpY2gg aXMgbmVlZGVkIGZvciBvdXIgaW50ZXJuYWwKPiAtICAgICAgICAqIGJvb2trZWVwaW5nLiBFaXRo ZXIgdmFsdWUgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiB1cGRhdGluZwo+IC0gICAgICAg ICogcGxhbmVzIGF0b21pY2FsbHkuIElmIHRoZSBjdXJzb3Igd2FzIHBhcnQgb2YgdGhlIGF0b21p YyB1cGRhdGUgdGhlbgo+IC0gICAgICAgICogd2Ugd291bGQgaGF2ZSB0YWtlbiB0aGUgc2xvd3Bh dGguCj4gLSAgICAgICAgKi8KPiAtICAgICAgIGNydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXMgPSBu ZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lczsKPiAtCj4gLSAgICAgICBpZiAobmV3X3BsYW5l X3N0YXRlLT51YXBpLnZpc2libGUpCj4gLSAgICAgICAgICAgICAgIGludGVsX3VwZGF0ZV9wbGFu ZShwbGFuZSwgY3J0Y19zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKPiAtICAgICAgIGVsc2UKPiAt ICAgICAgICAgICAgICAgaW50ZWxfZGlzYWJsZV9wbGFuZShwbGFuZSwgY3J0Y19zdGF0ZSk7Cj4g LQo+IC0gICAgICAgaW50ZWxfcGxhbmVfdW5waW5fZmIob2xkX3BsYW5lX3N0YXRlKTsKPiAtCj4g LW91dF9mcmVlOgo+IC0gICAgICAgaWYgKG5ld19jcnRjX3N0YXRlKQo+IC0gICAgICAgICAgICAg ICBpbnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsICZuZXdfY3J0Y19zdGF0ZS0+ dWFwaSk7Cj4gLSAgICAgICBpZiAocmV0KQo+IC0gICAgICAgICAgICAgICBpbnRlbF9wbGFuZV9k ZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSk7Cj4gLSAg ICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgIGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoJnBs YW5lLT5iYXNlLCAmb2xkX3BsYW5lX3N0YXRlLT51YXBpKTsKPiAtICAgICAgIHJldHVybiByZXQ7 Cj4gLQo+IC1zbG93Ogo+IC0gICAgICAgcmV0dXJuIGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9w bGFuZSgmcGxhbmUtPmJhc2UsICZjcnRjLT5iYXNlLCBmYiwKPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J0Y194LCBjcnRjX3ksIGNydGNfdywgY3J0Y19o LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfeCwg c3JjX3ksIHNyY193LCBzcmNfaCwgY3R4KTsKPiAtfQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfZnVuY3MgaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzID0gewo+IC0gICAgICAg LnVwZGF0ZV9wbGFuZSA9IGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlLAo+IC0gICAgICAgLmRp c2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+IC0gICAgICAg LmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAo+IC0gICAgICAgLmF0b21pY19kdXBsaWNh dGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gLSAgICAgICAuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAo+IC0gICAgICAgLmZv cm1hdF9tb2Rfc3VwcG9ydGVkID0gaW50ZWxfY3Vyc29yX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAo+ IC19Owo+IC0KPiAgc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfZmJjKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUpCj4gIHsKPiBAQCAtMTcxOTgsNzQgKzE2NDgyLDYg QEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKPiAgICAgICAgIHJldHVybiBFUlJfUFRSKHJldCk7Cj4g IH0KPgo+IC1zdGF0aWMgc3RydWN0IGludGVsX3BsYW5lICoKPiAtaW50ZWxfY3Vyc29yX3BsYW5l X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIHBpcGUgcGlwZSkKPiAtewo+IC0gICAgICAgc3RydWN0IGludGVs X3BsYW5lICpjdXJzb3I7Cj4gLSAgICAgICBpbnQgcmV0LCB6cG9zOwo+IC0KPiAtICAgICAgIGN1 cnNvciA9IGludGVsX3BsYW5lX2FsbG9jKCk7Cj4gLSAgICAgICBpZiAoSVNfRVJSKGN1cnNvcikp Cj4gLSAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Cj4gLQo+IC0gICAgICAgY3Vyc29yLT5w aXBlID0gcGlwZTsKPiAtICAgICAgIGN1cnNvci0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxh bmVfaWQpIHBpcGU7Cj4gLSAgICAgICBjdXJzb3ItPmlkID0gUExBTkVfQ1VSU09SOwo+IC0gICAg ICAgY3Vyc29yLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBjdXJz b3ItPmlkKTsKPiAtCj4gLSAgICAgICBpZiAoSVNfSTg0NUcoZGV2X3ByaXYpIHx8IElTX0k4NjVH KGRldl9wcml2KSkgewo+IC0gICAgICAgICAgICAgICBjdXJzb3ItPm1heF9zdHJpZGUgPSBpODQ1 X2N1cnNvcl9tYXhfc3RyaWRlOwo+IC0gICAgICAgICAgICAgICBjdXJzb3ItPnVwZGF0ZV9wbGFu ZSA9IGk4NDVfdXBkYXRlX2N1cnNvcjsKPiAtICAgICAgICAgICAgICAgY3Vyc29yLT5kaXNhYmxl X3BsYW5lID0gaTg0NV9kaXNhYmxlX2N1cnNvcjsKPiAtICAgICAgICAgICAgICAgY3Vyc29yLT5n ZXRfaHdfc3RhdGUgPSBpODQ1X2N1cnNvcl9nZXRfaHdfc3RhdGU7Cj4gLSAgICAgICAgICAgICAg IGN1cnNvci0+Y2hlY2tfcGxhbmUgPSBpODQ1X2NoZWNrX2N1cnNvcjsKPiAtICAgICAgIH0gZWxz ZSB7Cj4gLSAgICAgICAgICAgICAgIGN1cnNvci0+bWF4X3N0cmlkZSA9IGk5eHhfY3Vyc29yX21h eF9zdHJpZGU7Cj4gLSAgICAgICAgICAgICAgIGN1cnNvci0+dXBkYXRlX3BsYW5lID0gaTl4eF91 cGRhdGVfY3Vyc29yOwo+IC0gICAgICAgICAgICAgICBjdXJzb3ItPmRpc2FibGVfcGxhbmUgPSBp OXh4X2Rpc2FibGVfY3Vyc29yOwo+IC0gICAgICAgICAgICAgICBjdXJzb3ItPmdldF9od19zdGF0 ZSA9IGk5eHhfY3Vyc29yX2dldF9od19zdGF0ZTsKPiAtICAgICAgICAgICAgICAgY3Vyc29yLT5j aGVja19wbGFuZSA9IGk5eHhfY2hlY2tfY3Vyc29yOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAg IGN1cnNvci0+Y3Vyc29yLmJhc2UgPSB+MDsKPiAtICAgICAgIGN1cnNvci0+Y3Vyc29yLmNudGwg PSB+MDsKPiAtCj4gLSAgICAgICBpZiAoSVNfSTg0NUcoZGV2X3ByaXYpIHx8IElTX0k4NjVHKGRl dl9wcml2KSB8fCBIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCj4gLSAgICAgICAgICAgICAgIGN1cnNv ci0+Y3Vyc29yLnNpemUgPSB+MDsKPiAtCj4gLSAgICAgICByZXQgPSBkcm1fdW5pdmVyc2FsX3Bs YW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZjdXJzb3ItPmJhc2UsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwgJmludGVsX2N1cnNvcl9wbGFuZV9mdW5jcywKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9jdXJzb3JfZm9ybWF0 cywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGlu dGVsX2N1cnNvcl9mb3JtYXRzKSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJzb3JfZm9ybWF0X21vZGlmaWVycywKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEUk1fUExBTkVfVFlQRV9DVVJTT1IsCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImN1cnNvciAlYyIsIHBpcGVfbmFtZShwaXBlKSk7Cj4gLSAg ICAgICBpZiAocmV0KQo+IC0gICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gLQo+IC0gICAgICAg aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiAtICAgICAgICAgICAgICAgZHJtX3BsYW5l X2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmY3Vyc29yLT5iYXNlLAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9NT0RFX1JPVEFURV8wLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9N T0RFX1JPVEFURV8wIHwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEUk1fTU9ERV9ST1RBVEVfMTgwKTsKPiAtCj4gLSAgICAgICB6cG9zID0gUlVO VElNRV9JTkZPKGRldl9wcml2KS0+bnVtX3Nwcml0ZXNbcGlwZV0gKyAxOwo+IC0gICAgICAgZHJt X3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmY3Vyc29yLT5iYXNlLCB6cG9z KTsKPiAtCj4gLSAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKPiAtICAgICAg ICAgICAgICAgZHJtX3BsYW5lX2VuYWJsZV9mYl9kYW1hZ2VfY2xpcHMoJmN1cnNvci0+YmFzZSk7 Cj4gLQo+IC0gICAgICAgZHJtX3BsYW5lX2hlbHBlcl9hZGQoJmN1cnNvci0+YmFzZSwgJmludGVs X3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gLQo+IC0gICAgICAgcmV0dXJuIGN1cnNvcjsKPiAtCj4g LWZhaWw6Cj4gLSAgICAgICBpbnRlbF9wbGFuZV9mcmVlKGN1cnNvcik7Cj4gLQo+IC0gICAgICAg cmV0dXJuIEVSUl9QVFIocmV0KTsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBpbnRlbF9jcnRjX2xh dGVfcmVnaXN0ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICB7Cj4gICAgICAgICBpbnRlbF9j cnRjX2RlYnVnZnNfYWRkKGNydGMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5oCj4gaW5kZXggYTU3NzFiZmVjYmE2Li5mMGE1YmY2OTY1NmYgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAo+IEBAIC02 NDcsNiArNjQ3LDE4IEBAIGJvb2wKPiAgaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFu YXIoY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbywKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtb2RpZmllcik7Cj4KPiAraW50IGludGVsX3Bs YW5lX2NvbXB1dGVfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ ICt1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBjb2xvcl9wbGFuZSk7Cj4gK2ludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cj4gK3ZvaWQgaW50ZWxfcGxhbmVfdW5w aW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpOwo+ICsKPiAr LyogY3Vyc29yICovCj4gK3N0cnVjdCBpbnRlbF9wbGFuZSAqCj4gK2ludGVsX2N1cnNvcl9wbGFu ZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBwaXBlIHBpcGUpOwo+ICsKPiAgLyogbW9kZXNldHRpbmcgKi8K PiAgdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpOwo+ICBpbnQgaW50ZWxfbW9kZXNldF9pbml0X25vaXJxKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KTsKPiAtLQo+IDIuMjcuMAo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgoKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVu Z2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK