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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 2D9D6C4338F for ; Mon, 9 Aug 2021 17:10:06 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D14A161019 for ; Mon, 9 Aug 2021 17:10:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D14A161019 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2n6UYYQtbzi/JRR1KOCR9F8LG1rBpMtC45eo6r4C6oE=; b=M3bfV/aWZrj7Hh 60hrKSseWGkXdFFHmLTbFIVeOAy9KzCnKbM+f9+xvbDqLCO517nV+8rVW6VZejaFzn3rtomap/EMB 082vSAbM8OTXI+v6746WrQK1eEWk46NwMkdjVueJRj8hIsFNK3s9F7vKf67qTYmv7x7bZl5T8PVg8 MTffsusmLuOCFbQha1aqaze2mTwQkuT1oOBXKxFWM31IOrnvVjtGfsofJjKqm/Eo2SZ5v5fitIGT6 HtXQ9iXtQxzi7Wq4xOVxnsTC6/Yrkx6yFgwYFslLXcuJ2LfREPpo6g1fX+ywsFmx/wzKLrQS26/yv AxSMwpzckFia7EWbF2pw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mD8kf-001XbF-4z; Mon, 09 Aug 2021 17:07:49 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mD8kX-001XYp-Du; Mon, 09 Aug 2021 17:07:46 +0000 Received: by mail-wr1-x429.google.com with SMTP id h14so22349569wrx.10; Mon, 09 Aug 2021 10:07:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=u/iMXyMsrZswhj0w5GPgRYfRsJgtvFGpf6A8D0/DDKA=; b=u8LoE6/2bze1I6wGz+6LCcAZGCndB+s2TMRi3pw+a/oOl2Kf0s6LWhe3tY/Q0UNcSF gKvlejIkWpaEZhaOCHh4u9x2h2/P6MtjUqEDOryEFuPSeDXb3xAp/7/MWZcuF/X6rauA xx5rgXoEOF/NNefQ/WMAKzK7J15kZKHgdtVAKEoI7B4zI40n4TGGKkIRiyT7HfnB6msT zd10mlZ9bDHJWkSPYdzRM0Q/n17LccSrx5KF5vwuh8DWNhBgLLTtDdxrxLeonUxW9CA5 2JlYUqGriGgZKrKVOed6BfO0tZU1icfhH4CkppwSpM9snUA3krLioCzTsRS0ko6K62Kl r2OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=u/iMXyMsrZswhj0w5GPgRYfRsJgtvFGpf6A8D0/DDKA=; b=Newz/nLIh2D+4yj2CkwcB98l1Uwihg/u6m0BpicaPUQi2CM4mRDqfBh5fzv0qF1zoh gcPAjXO7qIrLSEVj0e7nIoqMruf0C1QO2IMkMbkt2fZVhCdkVb/Fke6z6eEOLOu7/syE +awnryXjehtM0HGh7nIgb4pyhSqC6F8hg64LEsVgOBvUr9sLj4dCG9H8pDulcT1A4bCZ EKTJ9HymrOF4Uoawf8/FHMX5t7kSCEa5vv/MXZpTLMGJvJEE3baYaRMgg1D2cklD8dz5 BXCx1rKrZZ/+yEo6l5y3iMvQZJyUt27RfQTG2a+n6nERrCTGBoupV7klEEX+85yjVLyp YCbw== X-Gm-Message-State: AOAM5304DAP8MF/77g3YRf86M8uNqgzPi5iyxRGwE8dIur8MYnjpQ97Q KNVVQe7ZC7iojWtYSprkM8A= X-Google-Smtp-Source: ABdhPJzlXn8Phmm4LS+ideuFcw5FKoY/nSLD1lydLYp5WE4Bwu5Lju0bAJjbgR/fEZoV+4NfO5RD5w== X-Received: by 2002:adf:aa98:: with SMTP id h24mr3143539wrc.366.1628528858114; Mon, 09 Aug 2021 10:07:38 -0700 (PDT) Received: from kista.localnet (cpe-86-58-46-198.static.triera.net. [86.58.46.198]) by smtp.gmail.com with ESMTPSA id k186sm83874wme.45.2021.08.09.10.07.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 10:07:37 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, Andrzej Pietrasiewicz Cc: Andrzej Pietrasiewicz , Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Mauro Carvalho Chehab , Nicolas Dufresne , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com Subject: Re: [PATCH v3 09/10] media: hantro: Support VP9 on the G2 core Date: Mon, 09 Aug 2021 19:07:35 +0200 Message-ID: <1771240.sZXMzDhkfG@kista> In-Reply-To: <20210805144246.11998-10-andrzej.p@collabora.com> References: <20210805144246.11998-1-andrzej.p@collabora.com> <20210805144246.11998-10-andrzej.p@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210809_100741_536640_879CAD6A X-CRM114-Status: GOOD ( 32.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQW5kcnplaiEKCkRuZSDEjWV0cnRlaywgMDUuIGF2Z3VzdCAyMDIxIG9iIDE2OjQyOjQ1IENF U1QgamUgQW5kcnplaiBQaWV0cmFzaWV3aWN6IApuYXBpc2FsKGEpOgo+IFZlcmlTaWxpY29uIEhh bnRybyBHMiBjb3JlIHN1cHBvcnRzIFZQOSBjb2RlYy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRy emVqIFBpZXRyYXNpZXdpY3ogPGFuZHJ6ZWoucEBjb2xsYWJvcmEuY29tPgo+IC0tLQo+ICBkcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL0tjb25maWcgICAgICAgICAgfCAgIDEgKwo+ICBkcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlICAgICAgICAgfCAgIDYgKy0KPiAgZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm8uaCAgICAgICAgIHwgIDI2ICsKPiAgZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZHJ2LmMgICAgIHwgIDE4ICstCj4gIGRy aXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaCB8ICA5NyArKwo+ICAu Li4vc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYyAgfCA5NzggKysrKysr KysrKysrKysrKysrCj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3Lmgg ICAgICB8ICA2NyArKwo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192NGwy LmMgICAgfCAgIDYgKwo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDku YyAgICAgfCAyNDAgKysrKysKPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9f dnA5LmggICAgIHwgMTAzICsrCj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaW14OG1f dnB1X2h3LmMgICB8ICAyMiArLQo+ICAxMSBmaWxlcyBjaGFuZ2VkLCAxNTYwIGluc2VydGlvbnMo KyksIDQgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv bWVkaWEvaGFudHJvL2hhbnRyb19nMl92cDlfZGVjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5jCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaAoKPHNuaXA+Cgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl92cDlf ZGVjLmMgYi9kcml2ZXJzLwpzdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfdnA5X2RlYy5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQ1YTdiZTRhNDNm YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hh bnRyb19nMl92cDlfZGVjLmMKPiBAQCAtMCwwICsxLDk3OCBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBIYW50cm8gVlA5IGNvZGVjIGRyaXZlcgo+ ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQ29sbGFib3JhIEx0ZC4KPiArICovCj4gKyNp bmNsdWRlICJtZWRpYS92aWRlb2J1ZjItY29yZS5oIgo+ICsjaW5jbHVkZSAibWVkaWEvdmlkZW9i dWYyLWRtYS1jb250aWcuaCIKPiArI2luY2x1ZGUgIm1lZGlhL3ZpZGVvYnVmMi12NGwyLmgiCj4g KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4K PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVtMm1lbS5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRs Mi12cDkuaD4KPiArCj4gKyNpbmNsdWRlICJoYW50cm8uaCIKPiArI2luY2x1ZGUgImhhbnRyb192 cDkuaCIKPiArI2luY2x1ZGUgImhhbnRyb19nMl9yZWdzLmgiCj4gKwo+ICsjZGVmaW5lIEcyX0FM SUdOIDE2Cj4gKwo+ICtlbnVtIGhhbnRyb19yZWZfZnJhbWVzIHsKPiArCUlOVFJBX0ZSQU1FID0g MCwKPiArCUxBU1RfRlJBTUUgPSAxLAo+ICsJR09MREVOX0ZSQU1FID0gMiwKPiArCUFMVFJFRl9G UkFNRSA9IDMsCj4gKwlNQVhfUkVGX0ZSQU1FUyA9IDQKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQg c3RhcnRfcHJlcGFyZV9ydW4oc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IAp2 NGwyX2N0cmxfdnA5X2ZyYW1lICoqZGVjX3BhcmFtcykKPiArewo+ICsJY29uc3Qgc3RydWN0IHY0 bDJfY3RybF92cDlfY29tcHJlc3NlZF9oZHJfcHJvYnMgKnByb2JfdXBkYXRlczsKPiArCXN0cnVj dCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3Ry dWN0IHY0bDJfY3RybCAqY3RybDsKPiArCXVuc2lnbmVkIGludCBmY3R4X2lkeDsKPiArCj4gKwkv KiB2NGwyLXNwZWNpZmljIHN0dWZmICovCj4gKwloYW50cm9fc3RhcnRfcHJlcGFyZV9ydW4oY3R4 KTsKPiArCj4gKwljdHJsID0gdjRsMl9jdHJsX2ZpbmQoJmN0eC0+Y3RybF9oYW5kbGVyLCAKVjRM Ml9DSURfU1RBVEVMRVNTX1ZQOV9GUkFNRSk7Cj4gKwlpZiAoV0FSTl9PTighY3RybCkpCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkqZGVjX3BhcmFtcyA9IGN0cmwtPnBfY3VyLnA7Cj4gKwo+ICsJ Y3RybCA9IHY0bDJfY3RybF9maW5kKCZjdHgtPmN0cmxfaGFuZGxlciwgClY0TDJfQ0lEX1NUQVRF TEVTU19WUDlfQ09NUFJFU1NFRF9IRFJfUFJPQlMpOwo+ICsJaWYgKFdBUk5fT04oIWN0cmwpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJcHJvYl91cGRhdGVzID0gY3RybC0+cF9jdXIucDsKPiAr Cj4gKwkvKgo+ICsJICogdnA5IHN0dWZmCj4gKwkgKgo+ICsJICogYnkgdGhpcyBwb2ludCB0aGUg dXNlcnNwYWNlIGhhcyBkb25lIGFsbCBwYXJ0cyBvZiA2LjIgCnVuY29tcHJlc3NlZF9oZWFkZXIo KQo+ICsJICogZXhjZXB0IHRoaXMgZnJhZ21lbnQ6Cj4gKwkgKiBpZiAoIEZyYW1lSXNJbnRyYSB8 fCBlcnJvcl9yZXNpbGllbnRfbW9kZSApIHsKPiArCSAqCXNldHVwX3Bhc3RfaW5kZXBlbmRlbmNl ICggKQo+ICsJICoJaWYgKCBmcmFtZV90eXBlID09IEtFWV9GUkFNRSB8fCBlcnJvcl9yZXNpbGll bnRfbW9kZSA9PSAKMSB8fAo+ICsJICoJICAgICByZXNldF9mcmFtZV9jb250ZXh0ID09IDMgKSB7 Cj4gKwkgKgkJZm9yICggaSA9IDA7IGkgPCA0OyBpICsrICkgewo+ICsJICoJCQlzYXZlX3Byb2Jz KCBpICkKPiArCSAqCQl9Cj4gKwkgKgl9IGVsc2UgaWYgKCByZXNldF9mcmFtZV9jb250ZXh0ID09 IDIgKSB7Cj4gKwkgKgkJc2F2ZV9wcm9icyggZnJhbWVfY29udGV4dF9pZHggKQo+ICsJICoJfQo+ ICsJICoJZnJhbWVfY29udGV4dF9pZHggPSAwCj4gKwkgKiB9Cj4gKwkgKi8KPiArCWZjdHhfaWR4 ID0gdjRsMl92cDlfcmVzZXRfZnJhbWVfY3R4KCpkZWNfcGFyYW1zLCB2cDlfY3R4LQo+ZnJhbWVf Y29udGV4dCk7Cj4gKwl2cDlfY3R4LT5jdXIuZnJhbWVfY29udGV4dF9pZHggPSBmY3R4X2lkeDsK PiArCj4gKwkvKiA2LjEgZnJhbWUoc3opOiBsb2FkX3Byb2JzKCkgYW5kIGxvYWRfcHJvYnMyKCkg Ki8KPiArCXZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlcyA9IHZwOV9jdHgtPmZyYW1lX2NvbnRl eHRbZmN0eF9pZHhdOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgdXNlcnNwYWNlIGhhcyBhbHNvIHBl cmZvcm1lZCA2LjMgY29tcHJlc3NlZF9oZWFkZXIoKSwgYnV0IApoYW5kbGluZyB0aGUKPiArCSAq IHByb2JzIGluIGEgc3BlY2lhbCB3YXkuIEFsbCBwcm9icyB3aGljaCBuZWVkIHVwZGF0aW5nLCBl eGNlcHQgCk1WLXJlbGF0ZWQsCj4gKwkgKiBoYXZlIGJlZW4gcmVhZCBmcm9tIHRoZSBiaXRzdHJl YW0gYW5kIHRyYW5zbGF0ZWQgdGhyb3VnaCAKaW52X21hcF90YWJsZVtdLAo+ICsJICogYnV0IG5v IDYuMy42IGludl9yZWNlbnRlcl9ub25uZWcodiwgbSkgaGFzIGJlZW4gcGVyZm9ybWVkLiBUaGUg CnZhbHVlcyBwYXNzZWQKPiArCSAqIGJ5IHVzZXJzcGFjZSBhcmUgZWl0aGVyIHRyYW5zbGF0ZWQg dmFsdWVzICh0aGVyZSBhcmUgbm8gMCB2YWx1ZXMgCmluCj4gKwkgKiBpbnZfbWFwX3RhYmxlW10p LCBvciB6ZXJvIHRvIGluZGljYXRlIG5vIHVwZGF0ZS4gQWxsIE1WLXJlbGF0ZWQgCnByb2JzIHdo aWNoIG5lZWQKPiArCSAqIHVwZGF0aW5nIGhhdmUgYmVlbiByZWFkIGZyb20gdGhlIGJpdHN0cmVh bSBhbmQgKG12X3Byb2IgPDwgMSkgfCAKMSBoYXMgYmVlbgo+ICsJICogcGVyZm9ybWVkLiBUaGUg dmFsdWVzIHBhc3NlZCBieSB1c2Vyc3BhY2UgYXJlIGVpdGhlciBuZXcgdmFsdWVzCj4gKwkgKiB0 byByZXBsYWNlIG9sZCBvbmVzICh0aGUgYWJvdmUgbWVudGlvbmVkIHNoaWZ0IGFuZCBiaXR3aXNl IG9yIApuZXZlciByZXN1bHQgaW4KPiArCSAqIGEgemVybykgb3IgemVybyB0byBpbmRpY2F0ZSBu byB1cGRhdGUuCj4gKwkgKiBmd191cGRhdGVfcHJvYnMoKSBwZXJmb3JtcyBhY3R1YWwgcHJvYnMg dXBkYXRlcyBvciBsZWF2ZXMgcHJvYnMgCmFzLWlzCj4gKwkgKiBmb3IgdmFsdWVzIGZvciB3aGlj aCBhIHplcm8gd2FzIHBhc3NlZCBmcm9tIHVzZXJzcGFjZS4KPiArCSAqLwo+ICsJdjRsMl92cDlf ZndfdXBkYXRlX3Byb2JzKCZ2cDlfY3R4LT5wcm9iYWJpbGl0eV90YWJsZXMsIApwcm9iX3VwZGF0 ZXMsICpkZWNfcGFyYW1zKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHNp emVfdCBjaHJvbWFfb2Zmc2V0KGNvbnN0IHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsCj4gKwkJCSAg ICBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAKKmRlY19wYXJhbXMpCj4gK3sKPiAr CWludCBieXRlc19wZXJfcGl4ZWwgPSBkZWNfcGFyYW1zLT5iaXRfZGVwdGggPT0gOCA/IDEgOiAy Owo+ICsKPiArCXJldHVybiBjdHgtPnNyY19mbXQud2lkdGggKiBjdHgtPnNyY19mbXQuaGVpZ2h0 ICogYnl0ZXNfcGVyX3BpeGVsOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc2l6ZV90IG12X29mZnNldChj b25zdCBzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJs X3ZwOV9mcmFtZSAqZGVjX3BhcmFtcykKPiArewo+ICsJc2l6ZV90IGNyX29mZnNldCA9IGNocm9t YV9vZmZzZXQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCj4gKwlyZXR1cm4gQUxJR04oKGNyX29mZnNl dCAqIDMpIC8gMiwgRzJfQUxJR04pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGhhbnRyb19k ZWNvZGVkX2J1ZmZlciAqCj4gK2dldF9yZWZfYnVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHN0 cnVjdCB2YjJfdjRsMl9idWZmZXIgKmRzdCwgdTY0IAp0aW1lc3RhbXApCj4gK3sKPiArCXN0cnVj dCB2NGwyX20ybV9jdHggKm0ybV9jdHggPSBjdHgtPmZoLm0ybV9jdHg7Cj4gKwlzdHJ1Y3QgdmIy X3F1ZXVlICpjYXBfcSA9ICZtMm1fY3R4LT5jYXBfcV9jdHgucTsKPiArCWludCBidWZfaWR4Owo+ ICsKPiArCS8qCj4gKwkgKiBJZiBhIHJlZiBpcyB1bnVzZWQgb3IgaW52YWxpZCwgYWRkcmVzcyBv ZiBjdXJyZW50IGRlc3RpbmF0aW9uCj4gKwkgKiBidWZmZXIgaXMgcmV0dXJuZWQuCj4gKwkgKi8K PiArCWJ1Zl9pZHggPSB2YjJfZmluZF90aW1lc3RhbXAoY2FwX3EsIHRpbWVzdGFtcCwgMCk7Cj4g KwlpZiAoYnVmX2lkeCA8IDApCj4gKwkJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9idWYo JmRzdC0+dmIyX2J1Zik7Cj4gKwo+ICsJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9idWYo dmIyX2dldF9idWZmZXIoY2FwX3EsIGJ1Zl9pZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dXBkYXRlX2RlY19idWZfaW5mbyhzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWYsCj4g KwkJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAKKmRlY19wYXJhbXMpCj4gK3sK PiArCWJ1Zi0+dnA5LndpZHRoID0gZGVjX3BhcmFtcy0+ZnJhbWVfd2lkdGhfbWludXNfMSArIDE7 Cj4gKwlidWYtPnZwOS5oZWlnaHQgPSBkZWNfcGFyYW1zLT5mcmFtZV9oZWlnaHRfbWludXNfMSAr IDE7Cj4gKwlidWYtPnZwOS5iaXRfZGVwdGggPSBkZWNfcGFyYW1zLT5iaXRfZGVwdGg7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9jdHhfY3VyX2luZm8oc3RydWN0IGhhbnRyb192cDlf ZGVjX2h3X2N0eCAqdnA5X2N0eCwKPiArCQkJCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIg KmJ1ZiwKPiArCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lIAoqZGVjX3BhcmFt cykKPiArewo+ICsJdnA5X2N0eC0+Y3VyLnZhbGlkID0gdHJ1ZTsKPiArCXZwOV9jdHgtPmN1ci5y ZWZlcmVuY2VfbW9kZSA9IGRlY19wYXJhbXMtPnJlZmVyZW5jZV9tb2RlOwo+ICsJdnA5X2N0eC0+ Y3VyLnR4X21vZGUgPSBkZWNfcGFyYW1zLT50eF9tb2RlOwo+ICsJdnA5X2N0eC0+Y3VyLmludGVy cG9sYXRpb25fZmlsdGVyID0gZGVjX3BhcmFtcy0+aW50ZXJwb2xhdGlvbl9maWx0ZXI7Cj4gKwl2 cDlfY3R4LT5jdXIuZmxhZ3MgPSBkZWNfcGFyYW1zLT5mbGFnczsKPiArCXZwOV9jdHgtPmN1ci50 aW1lc3RhbXAgPSBidWYtPmJhc2UudmIudmIyX2J1Zi50aW1lc3RhbXA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGNvbmZpZ19vdXRwdXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJICBz dHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3QsCj4gKwkJCSAgY29uc3Qgc3RydWN0IHY0 bDJfY3RybF92cDlfZnJhbWUgCipkZWNfcGFyYW1zKQo+ICt7Cj4gKwlkbWFfYWRkcl90IGx1bWFf YWRkciwgY2hyb21hX2FkZHIsIG12X2FkZHI7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJmcyX291dF9kaXMsIDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcy X291dHB1dF9mb3JtYXQsIDApOwo+ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29udGlnX3Bs YW5lX2RtYV9hZGRyKCZkc3QtPmJhc2UudmIudmIyX2J1ZiwgCjApOwo+ICsJaGFudHJvX3dyaXRl X2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfRFNULCBsdW1hX2FkZHIpOwo+ICsKPiArCWNocm9tYV9h ZGRyID0gbHVtYV9hZGRyICsgY2hyb21hX29mZnNldChjdHgsIGRlY19wYXJhbXMpOwo+ICsJaGFu dHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfRFNUX0NIUiwgY2hyb21hX2FkZHIpOwo+ ICsKPiArCW12X2FkZHIgPSBsdW1hX2FkZHIgKyBtdl9vZmZzZXQoY3R4LCBkZWNfcGFyYW1zKTsK PiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBHMl9BRERSX0RTVF9NViwgbXZfYWRkcik7 Cj4gK30KPiArCj4gK3N0cnVjdCBoYW50cm9fdnA5X3JlZl9yZWcgewo+ICsJY29uc3Qgc3RydWN0 IGhhbnRyb19yZWcgd2lkdGg7Cj4gKwljb25zdCBzdHJ1Y3QgaGFudHJvX3JlZyBoZWlnaHQ7Cj4g Kwljb25zdCBzdHJ1Y3QgaGFudHJvX3JlZyBob3Jfc2NhbGU7Cj4gKwljb25zdCBzdHJ1Y3QgaGFu dHJvX3JlZyB2ZXJfc2NhbGU7Cj4gKwl1MzIgeV9iYXNlOwo+ICsJdTMyIGNfYmFzZTsKPiArfTsK PiArCj4gK3N0YXRpYyB2b2lkIGNvbmZpZ19yZWYoc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiAr CQkgICAgICAgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0LAo+ICsJCSAgICAgICBj b25zdCBzdHJ1Y3QgaGFudHJvX3ZwOV9yZWZfcmVnICpyZWZfcmVnLAo+ICsJCSAgICAgICBjb25z dCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3BhcmFtcywKPiArCQkgICAgICAgdTY0 IHJlZl90cykKPiArewo+ICsJc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqYnVmOwo+ICsJ ZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRyOwo+ICsJdTMyIHJlZncsIHJlZmg7Cj4g Kwo+ICsJYnVmID0gZ2V0X3JlZl9idWYoY3R4LCAmZHN0LT5iYXNlLnZiLCByZWZfdHMpOwo+ICsJ cmVmdyA9IGJ1Zi0+dnA5LndpZHRoOwo+ICsJcmVmaCA9IGJ1Zi0+dnA5LmhlaWdodDsKPiArCj4g KwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+d2lkdGgsIHJlZncpOwo+ICsJ aGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnJlZl9yZWctPmhlaWdodCwgcmVmaCk7Cj4gKwo+ ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnJlZl9yZWctPmhvcl9zY2FsZSwgKHJlZncg PDwgMTQpIC8gZHN0LQo+dnA5LndpZHRoKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYs ICZyZWZfcmVnLT52ZXJfc2NhbGUsIChyZWZoIDw8IDE0KSAvIGRzdC0KPnZwOS5oZWlnaHQpOwo+ ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZidWYtPmJh c2UudmIudmIyX2J1ZiwgCjApOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIHJlZl9y ZWctPnlfYmFzZSwgbHVtYV9hZGRyKTsKPiArCj4gKwljaHJvbWFfYWRkciA9IGx1bWFfYWRkciAr IGNocm9tYV9vZmZzZXQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0 eC0+ZGV2LCByZWZfcmVnLT5jX2Jhc2UsIGNocm9tYV9hZGRyKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgY29uZmlnX3JlZl9yZWdpc3RlcnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJ CSBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAKKmRlY19wYXJhbXMsCj4gKwkJCQkg c3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0LAo+ICsJCQkJIHN0cnVjdCBoYW50cm9f ZGVjb2RlZF9idWZmZXIgCiptdl9yZWYpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFu dHJvX3ZwOV9yZWZfcmVnIHJlZl9yZWdzW10gPSB7Cj4gKwkJewo+ICsJCQkvKiBMYXN0ICovCj4g KwkJCS53aWR0aCA9IHZwOV9scmVmX3dpZHRoLAo+ICsJCQkuaGVpZ2h0ID0gdnA5X2xyZWZfaGVp Z2h0LAo+ICsJCQkuaG9yX3NjYWxlID0gdnA5X2xyZWZfaG9yX3NjYWxlLAo+ICsJCQkudmVyX3Nj YWxlID0gdnA5X2xyZWZfdmVyX3NjYWxlLAo+ICsJCQkueV9iYXNlID0gRzJfUkVHX0FERFJfUkVG KDApLAo+ICsJCQkuY19iYXNlID0gRzJfUkVHX0NIUl9SRUYoMCksCj4gKwkJfSwgewo+ICsJCQkv KiBHb2xkZW4gKi8KPiArCQkJLndpZHRoID0gdnA5X2dyZWZfd2lkdGgsCj4gKwkJCS5oZWlnaHQg PSB2cDlfZ3JlZl9oZWlnaHQsCj4gKwkJCS5ob3Jfc2NhbGUgPSB2cDlfZ3JlZl9ob3Jfc2NhbGUs Cj4gKwkJCS52ZXJfc2NhbGUgPSB2cDlfZ3JlZl92ZXJfc2NhbGUsCj4gKwkJCS55X2Jhc2UgPSBH Ml9SRUdfQUREUl9SRUYoNCksCj4gKwkJCS5jX2Jhc2UgPSBHMl9SRUdfQ0hSX1JFRig0KSwKPiAr CQl9LCB7Cj4gKwkJCS8qIEFsdHJlZiAqLwo+ICsJCQkud2lkdGggPSB2cDlfYXJlZl93aWR0aCwK PiArCQkJLmhlaWdodCA9IHZwOV9hcmVmX2hlaWdodCwKPiArCQkJLmhvcl9zY2FsZSA9IHZwOV9h cmVmX2hvcl9zY2FsZSwKPiArCQkJLnZlcl9zY2FsZSA9IHZwOV9hcmVmX3Zlcl9zY2FsZSwKPiAr CQkJLnlfYmFzZSA9IEcyX1JFR19BRERSX1JFRig1KSwKPiArCQkJLmNfYmFzZSA9IEcyX1JFR19D SFJfUkVGKDUpLAo+ICsJCX0sCj4gKwl9Owo+ICsJZG1hX2FkZHJfdCBtdl9hZGRyOwo+ICsKPiAr CWNvbmZpZ19yZWYoY3R4LCBkc3QsICZyZWZfcmVnc1swXSwgZGVjX3BhcmFtcywgZGVjX3BhcmFt cy0KPmxhc3RfZnJhbWVfdHMpOwo+ICsJY29uZmlnX3JlZihjdHgsIGRzdCwgJnJlZl9yZWdzWzFd LCBkZWNfcGFyYW1zLCBkZWNfcGFyYW1zLQo+Z29sZGVuX2ZyYW1lX3RzKTsKPiArCWNvbmZpZ19y ZWYoY3R4LCBkc3QsICZyZWZfcmVnc1syXSwgZGVjX3BhcmFtcywgZGVjX3BhcmFtcy0KPmFsdF9m cmFtZV90cyk7Cj4gKwo+ICsJbXZfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRy KCZtdl9yZWYtPmJhc2UudmIudmIyX2J1ZiwgCjApICsKPiArCQkgIG12X29mZnNldChjdHgsIGRl Y19wYXJhbXMpOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1JFR19ETVZfUkVG KDApLCBtdl9hZGRyKTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2xh c3Rfc2lnbl9iaWFzLAo+ICsJCQkgZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3NpZ25fYmlhcyAmIApW NEwyX1ZQOV9TSUdOX0JJQVNfTEFTVCA/IDEgOiAwKTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRl KGN0eC0+ZGV2LCAmdnA5X2dyZWZfc2lnbl9iaWFzLAo+ICsJCQkgZGVjX3BhcmFtcy0+cmVmX2Zy YW1lX3NpZ25fYmlhcyAmIApWNEwyX1ZQOV9TSUdOX0JJQVNfR09MREVOID8gMSA6IDApOwo+ICsK PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfYXJlZl9zaWduX2JpYXMsCj4gKwkJ CSBkZWNfcGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgClY0TDJfVlA5X1NJR05fQklBU19B TFQgPyAxIDogMCk7CgpOb3Qgc3VyZSBpZiBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGJ1dCBWNEwy X1ZQOV9TSUdOX0JJQVNfTEFTVCwgClY0TDJfVlA5X1NJR05fQklBU19HT0xERU4gYW5kIFY0TDJf VlA5X1NJR05fQklBU19BTFQgYXJlIGRlZmluZWQgaW4gb3JkaW5hcnkgCmVudW0gaW4gcGF0Y2gg NSwgd2l0aG91dCBhbnkgdmFsdWUsIHNvIHRoZXkgd291bGQgaGF2ZSB2YWx1ZXMgMCwgMSBhbmQg Mi4KCkkgZ3Vlc3MgeW91IGFjdHVhbGx5IHdhbnQgKDEgPDwgMCksICgxIDw8IDEpIGFuZCAoMSA8 PCAyKSBpbiBwYXRjaCA1LiBTZWNvbmQgCmFuZCB0aGlyZCBmbGFnIHN0aWxsIHdvcmsgYnkgY2hh bmNlIGFuZCBmaXJzdCBmbGFnIGlzIGFsd2F5cyBhcHBsaWVkLgoKQmVzdCByZWdhcmRzLApKZXJu ZWoKCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZWNvbXB1dGVfdGlsZV9pbmZvKHVuc2lnbmVk IHNob3J0ICp0aWxlX2luZm8sIHVuc2lnbmVkIGludCAKdGlsZXMsIHVuc2lnbmVkIGludCBzYnMp Cj4gK3sKPiArCWludCBpOwo+ICsJdW5zaWduZWQgaW50IGFjY3VtdWxhdGVkID0gMDsKPiArCXVu c2lnbmVkIGludCBuZXh0X2FjY3VtdWxhdGVkOwo+ICsKPiArCWZvciAoaSA9IDE7IGkgPD0gdGls ZXM7ICsraSkgewo+ICsJCW5leHRfYWNjdW11bGF0ZWQgPSBpICogc2JzIC8gdGlsZXM7Cj4gKwkJ KnRpbGVfaW5mbysrID0gbmV4dF9hY2N1bXVsYXRlZCAtIGFjY3VtdWxhdGVkOwo+ICsJCWFjY3Vt dWxhdGVkID0gbmV4dF9hY2N1bXVsYXRlZDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQK PiArcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCSAg ICAgICB1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25lZCBpbnQgdGlsZV9jLAo+ICsJCSAgICAg ICB1bnNpZ25lZCBpbnQgc2JzX3IsIHVuc2lnbmVkIGludCBzYnNfYykKPiArewo+ICsJc3RydWN0 IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ICsJ cmVjb21wdXRlX3RpbGVfaW5mbyh2cDlfY3R4LT50aWxlX3JfaW5mbywgdGlsZV9yLCBzYnNfcik7 Cj4gKwlyZWNvbXB1dGVfdGlsZV9pbmZvKHZwOV9jdHgtPnRpbGVfY19pbmZvLCB0aWxlX2MsIHNi c19jKTsKPiArCj4gKwl2cDlfY3R4LT5sYXN0X3RpbGVfciA9IHRpbGVfcjsKPiArCXZwOV9jdHgt Pmxhc3RfdGlsZV9jID0gdGlsZV9jOwo+ICsJdnA5X2N0eC0+bGFzdF9zYnNfciA9IHNic19yOwo+ ICsJdnA5X2N0eC0+bGFzdF9zYnNfYyA9IHNic19jOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBmaXJzdF90aWxlX3Jvdyh1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25l ZCBpbnQgCnNic19yKQo+ICt7Cj4gKwlpZiAodGlsZV9yID09IHNic19yICsgMSkKPiArCQlyZXR1 cm4gMTsKPiArCj4gKwlpZiAodGlsZV9yID09IHNic19yICsgMikKPiArCQlyZXR1cm4gMjsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArZmlsbF90aWxlX2luZm8o c3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCSAgICAgICB1bnNpZ25lZCBpbnQgdGlsZV9yLCB1 bnNpZ25lZCBpbnQgdGlsZV9jLAo+ICsJICAgICAgIHVuc2lnbmVkIGludCBzYnNfciwgdW5zaWdu ZWQgaW50IHNic19jLAo+ICsJICAgICAgIHVuc2lnbmVkIHNob3J0ICp0aWxlX21lbSkKPiArewo+ ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7 Cj4gKwl1bnNpZ25lZCBpbnQgaSwgajsKPiArCWJvb2wgZmlyc3QgPSB0cnVlOwo+ICsKPiArCWZv ciAoaSA9IGZpcnN0X3RpbGVfcm93KHRpbGVfciwgc2JzX3IpOyBpIDwgdGlsZV9yOyArK2kpIHsK PiArCQl1bnNpZ25lZCBzaG9ydCByX2luZm8gPSB2cDlfY3R4LT50aWxlX3JfaW5mb1tpXTsKPiAr Cj4gKwkJaWYgKGZpcnN0KSB7Cj4gKwkJCWlmIChpID4gMCkKPiArCQkJCXJfaW5mbyArPSB2cDlf Y3R4LT50aWxlX3JfaW5mb1swXTsKPiArCQkJaWYgKGkgPT0gMikKPiArCQkJCXJfaW5mbyArPSB2 cDlfY3R4LT50aWxlX3JfaW5mb1sxXTsKPiArCQkJZmlyc3QgPSBmYWxzZTsKPiArCQl9Cj4gKwkJ Zm9yIChqID0gMDsgaiA8IHRpbGVfYzsgKytqKSB7Cj4gKwkJCSp0aWxlX21lbSsrID0gdnA5X2N0 eC0+dGlsZV9jX2luZm9bal07Cj4gKwkJCSp0aWxlX21lbSsrID0gcl9pbmZvOwo+ICsJCX0KPiAr CX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmlnX3RpbGVzKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgsCj4gKwkgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNf cGFyYW1zLAo+ICsJICAgICBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3QpCj4gK3sK PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVj Owo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICptaXNjID0gJnZwOV9jdHgtPm1pc2M7Cj4gKwlz dHJ1Y3QgaGFudHJvX2F1eF9idWYgKnRpbGVfZWRnZSA9ICZ2cDlfY3R4LT50aWxlX2VkZ2U7Cj4g KwlkbWFfYWRkcl90IGFkZHI7Cj4gKwl1bnNpZ25lZCBzaG9ydCAqdGlsZV9tZW07Cj4gKwo+ICsJ YWRkciA9IG1pc2MtPmRtYSArIHZwOV9jdHgtPnRpbGVfaW5mb19vZmZzZXQ7Cj4gKwloYW50cm9f d3JpdGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9USUxFX1NJWkUsIGFkZHIpOwo+ICsKPiArCXRp bGVfbWVtID0gbWlzYy0+Y3B1ICsgdnA5X2N0eC0+dGlsZV9pbmZvX29mZnNldDsKPiArCWlmIChk ZWNfcGFyYW1zLT50aWxlX2NvbHNfbG9nMiB8fCBkZWNfcGFyYW1zLT50aWxlX3Jvd3NfbG9nMikg ewo+ICsJCXVuc2lnbmVkIGludCB0aWxlX3IgPSAoMSA8PCBkZWNfcGFyYW1zLT50aWxlX3Jvd3Nf bG9nMik7Cj4gKwkJdW5zaWduZWQgaW50IHRpbGVfYyA9ICgxIDw8IGRlY19wYXJhbXMtPnRpbGVf Y29sc19sb2cyKTsKPiArCQl1bnNpZ25lZCBpbnQgc2JzX3IgPSBoYW50cm9fdnA5X251bV9zYnMo ZHN0LQo+dnA5LmhlaWdodCk7Cj4gKwkJdW5zaWduZWQgaW50IHNic19jID0gaGFudHJvX3ZwOV9u dW1fc2JzKGRzdC0+dnA5LndpZHRoKTsKPiArCj4gKwkJaWYgKHRpbGVfciAhPSB2cDlfY3R4LT5s YXN0X3RpbGVfciB8fCB0aWxlX2MgIT0gdnA5X2N0eC0KPmxhc3RfdGlsZV9jIHx8Cj4gKwkJICAg IHNic19yICE9IHZwOV9jdHgtPmxhc3Rfc2JzX3IgfHwgc2JzX2MgIT0gdnA5X2N0eC0KPmxhc3Rf c2JzX2MpCj4gKwkJCXJlY29tcHV0ZV90aWxlX3JjX2luZm8oY3R4LCB0aWxlX3IsIHRpbGVfYywg CnNic19yLCBzYnNfYyk7Cj4gKwo+ICsJCWZpbGxfdGlsZV9pbmZvKGN0eCwgdGlsZV9yLCB0aWxl X2MsIHNic19yLCBzYnNfYywgCnRpbGVfbWVtKTsKPiArCj4gKwkJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJmcyX3RpbGVfZSwgMSk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JmcyX251bV90aWxlX2NvbHMsIHRpbGVfYyk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJmcyX251bV90aWxlX3Jvd3MsIHRpbGVfcik7Cj4gKwo+ICsJCWFkZHIgPSB0aWxlX2VkZ2Ut PmRtYTsKPiArCQloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfVElMRV9GSUxURVIsIGFk ZHIpOwo+ICsKPiArCQlhZGRyID0gdGlsZV9lZGdlLT5kbWEgKyB2cDlfY3R4LT5ic2RfY3RybF9v ZmZzZXQ7Cj4gKwkJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1RJTEVfQlNELCBhZGRy KTsKPiArCX0gZWxzZSB7Cj4gKwkJdGlsZV9tZW1bMF0gPSBoYW50cm9fdnA5X251bV9zYnMoZHN0 LT52cDkud2lkdGgpOwo+ICsJCXRpbGVfbWVtWzFdID0gaGFudHJvX3ZwOV9udW1fc2JzKGRzdC0+ dnA5LmhlaWdodCk7Cj4gKwo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl90aWxl X2UsIDApOwo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9udW1fdGlsZV9jb2xz LCAxKTsKPiArCQloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbnVtX3RpbGVfcm93cywg MSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3VwZGF0ZV9mZWF0X2FuZF9mbGFn KHN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHgsCj4gKwkJICAgICBjb25zdCBz dHJ1Y3QgdjRsMl92cDlfc2VnbWVudGF0aW9uICpzZWcsCj4gKwkJICAgICBlbnVtIHY0bDJfdnA5 X3NlZ21lbnRfZmVhdHVyZSBmZWF0dXJlLAo+ICsJCSAgICAgdW5zaWduZWQgaW50IHNlZ2lkKQo+ ICt7Cj4gKwl1OCBtYXNrID0gVjRMMl9WUDlfU0VHTUVOVF9GRUFUVVJFX0VOQUJMRUQoZmVhdHVy ZSk7Cj4gKwo+ICsJdnA5X2N0eC0+ZmVhdHVyZV9kYXRhW3NlZ2lkXVtmZWF0dXJlXSA9IHNlZy0+ ZmVhdHVyZV9kYXRhW3NlZ2lkXQpbZmVhdHVyZV07Cj4gKwl2cDlfY3R4LT5mZWF0dXJlX2VuYWJs ZWRbc2VnaWRdICY9IH5tYXNrOwo+ICsJdnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkW3NlZ2lkXSB8 PSAoc2VnLT5mZWF0dXJlX2VuYWJsZWRbc2VnaWRdICYgCm1hc2spOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHMxNiBjbGlwMyhzMTYgeCwgczE2IHksIHMxNiB6KQo+ICt7Cj4gKwlyZXR1cm4g KHogPCB4KSA/IHggOiAoeiA+IHkpID8geSA6IHo7Cj4gK30KPiArCj4gK3N0YXRpYyBzMTYgZmVh dF92YWxfY2xpcDMoczE2IGZlYXRfdmFsLCBzMTYgZmVhdHVyZV9kYXRhLCBib29sIGFic29sdXRl LCB1OCAKY2xpcCkKPiArewo+ICsJaWYgKGFic29sdXRlKQo+ICsJCXJldHVybiBmZWF0dXJlX2Rh dGE7Cj4gKwo+ICsJcmV0dXJuIGNsaXAzKDAsIDI1NSwgZmVhdF92YWwgKyBmZWF0dXJlX2RhdGEp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfc2VnbWVudChzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4LCBjb25zdCBzdHJ1Y3QgCnY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4g K3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlf ZGVjOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfdnA5X3NlZ21lbnRhdGlvbiAqc2VnOwo+ICsJczE2 IGZlYXRfdmFsOwo+ICsJdW5zaWduZWQgY2hhciBmZWF0X2lkOwo+ICsJdW5zaWduZWQgaW50IHNl Z2lkOwo+ICsJYm9vbCBzZWdtZW50X2VuYWJsZWQsIGFic29sdXRlLCB1cGRhdGVfZGF0YTsKPiAr Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19yZWcgc2VnX3JlZ3NbOF1bVjRMMl9WUDlf U0VHX0xWTF9NQVhdID0gCnsKPiArCQl7IHZwOV9xdWFudF9zZWcwLCB2cDlfZmlsdF9sZXZlbF9z ZWcwLCB2cDlfcmVmcGljX3NlZzAsIAp2cDlfc2tpcF9zZWcwIH0sCj4gKwkJeyB2cDlfcXVhbnRf c2VnMSwgdnA5X2ZpbHRfbGV2ZWxfc2VnMSwgdnA5X3JlZnBpY19zZWcxLCAKdnA5X3NraXBfc2Vn MSB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzIsIHZwOV9maWx0X2xldmVsX3NlZzIsIHZwOV9yZWZw aWNfc2VnMiwgCnZwOV9za2lwX3NlZzIgfSwKPiArCQl7IHZwOV9xdWFudF9zZWczLCB2cDlfZmls dF9sZXZlbF9zZWczLCB2cDlfcmVmcGljX3NlZzMsIAp2cDlfc2tpcF9zZWczIH0sCj4gKwkJeyB2 cDlfcXVhbnRfc2VnNCwgdnA5X2ZpbHRfbGV2ZWxfc2VnNCwgdnA5X3JlZnBpY19zZWc0LCAKdnA5 X3NraXBfc2VnNCB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzUsIHZwOV9maWx0X2xldmVsX3NlZzUs IHZwOV9yZWZwaWNfc2VnNSwgCnZwOV9za2lwX3NlZzUgfSwKPiArCQl7IHZwOV9xdWFudF9zZWc2 LCB2cDlfZmlsdF9sZXZlbF9zZWc2LCB2cDlfcmVmcGljX3NlZzYsIAp2cDlfc2tpcF9zZWc2IH0s Cj4gKwkJeyB2cDlfcXVhbnRfc2VnNywgdnA5X2ZpbHRfbGV2ZWxfc2VnNywgdnA5X3JlZnBpY19z ZWc3LCAKdnA5X3NraXBfc2VnNyB9LAo+ICsJfTsKPiArCj4gKwlzZWdtZW50X2VuYWJsZWQgPSAh IShkZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiAKVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfRU5B QkxFRCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3NlZ21lbnRfZSwgc2Vn bWVudF9lbmFibGVkKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfc2VnbWVu dF91cGRfZSwKPiArCQkJICEhKGRlY19wYXJhbXMtPnNlZy5mbGFncyAmIApWNEwyX1ZQOV9TRUdN RU5UQVRJT05fRkxBR19VUERBVEVfTUFQKSk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmdnA5X3NlZ21lbnRfdGVtcF91cGRfZSwKPiArCQkJICEhKGRlY19wYXJhbXMtPnNlZy5mbGFn cyAmIApWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxBR19URU1QT1JBTF9VUERBVEUpKTsKPiArCj4g KwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsJYWJzb2x1dGUgPSAhIShzZWctPmZsYWdzICYg ClY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX0FCU19PUl9ERUxUQV9VUERBVEUpOwo+ICsJdXBk YXRlX2RhdGEgPSAhIShzZWctPmZsYWdzICYgClY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX1VQ REFURV9EQVRBKTsKPiArCj4gKwlmb3IgKHNlZ2lkID0gMDsgc2VnaWQgPCA4OyArK3NlZ2lkKSB7 Cj4gKwkJLyogUXVhbnRpemVyIHNlZ21lbnQgZmVhdHVyZSAqLwo+ICsJCWZlYXRfaWQgPSBWNEwy X1ZQOV9TRUdfTFZMX0FMVF9ROwo+ICsJCWZlYXRfdmFsID0gZGVjX3BhcmFtcy0+cXVhbnQuYmFz ZV9xX2lkeDsKPiArCQlpZiAoc2VnbWVudF9lbmFibGVkKSB7Cj4gKwkJCWlmICh1cGRhdGVfZGF0 YSkKPiArCQkJCXVwZGF0ZV9mZWF0X2FuZF9mbGFnKHZwOV9jdHgsIHNlZywgCmZlYXRfaWQsIHNl Z2lkKTsKPiArCQkJaWYgKHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0eC0KPmZlYXR1 cmVfZW5hYmxlZCwgZmVhdF9pZCwgc2VnaWQpKQo+ICsJCQkJZmVhdF92YWwgPSAKZmVhdF92YWxf Y2xpcDMoZmVhdF92YWwsCj4gKwkJCQkJCQkgIAp2cDlfY3R4LT5mZWF0dXJlX2RhdGFbc2VnaWRd W2ZlYXRfaWRdLAo+ICsJCQkJCQkJICAKYWJzb2x1dGUsIDI1NSk7Cj4gKwkJfQo+ICsJCWhhbnRy b19yZWdfd3JpdGUoY3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIApmZWF0X3Zh bCk7Cj4gKwo+ICsJCS8qIExvb3AgZmlsdGVyIHNlZ21lbnQgZmVhdHVyZSAqLwo+ICsJCWZlYXRf aWQgPSBWNEwyX1ZQOV9TRUdfTFZMX0FMVF9MOwo+ICsJCWZlYXRfdmFsID0gZGVjX3BhcmFtcy0+ bGYubGV2ZWw7Cj4gKwkJaWYgKHNlZ21lbnRfZW5hYmxlZCkgewo+ICsJCQlpZiAodXBkYXRlX2Rh dGEpCj4gKwkJCQl1cGRhdGVfZmVhdF9hbmRfZmxhZyh2cDlfY3R4LCBzZWcsIApmZWF0X2lkLCBz ZWdpZCk7Cj4gKwkJCWlmICh2NGwyX3ZwOV9zZWdfZmVhdF9lbmFibGVkKHZwOV9jdHgtCj5mZWF0 dXJlX2VuYWJsZWQsIGZlYXRfaWQsIHNlZ2lkKSkKPiArCQkJCWZlYXRfdmFsID0gCmZlYXRfdmFs X2NsaXAzKGZlYXRfdmFsLAo+ICsJCQkJCQkJICAKdnA5X2N0eC0+ZmVhdHVyZV9kYXRhW3NlZ2lk XVtmZWF0X2lkXSwKPiArCQkJCQkJCSAgCmFic29sdXRlLCA2Myk7Cj4gKwkJfQo+ICsJCWhhbnRy b19yZWdfd3JpdGUoY3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIApmZWF0X3Zh bCk7Cj4gKwo+ICsJCS8qIFJlZmVyZW5jZSBmcmFtZSBzZWdtZW50IGZlYXR1cmUgKi8KPiArCQlm ZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9SRUZfRlJBTUU7Cj4gKwkJZmVhdF92YWwgPSAwOwo+ ICsJCWlmIChzZWdtZW50X2VuYWJsZWQpIHsKPiArCQkJaWYgKHVwZGF0ZV9kYXRhKQo+ICsJCQkJ dXBkYXRlX2ZlYXRfYW5kX2ZsYWcodnA5X2N0eCwgc2VnLCAKZmVhdF9pZCwgc2VnaWQpOwo+ICsJ CQlpZiAoIShkZWNfcGFyYW1zLT5mbGFncyAmIApWNEwyX1ZQOV9GUkFNRV9GTEFHX0tFWV9GUkFN RSkgJiYKPiArCQkJICAgIHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0eC0KPmZlYXR1 cmVfZW5hYmxlZCwgZmVhdF9pZCwgc2VnaWQpKQo+ICsJCQkJZmVhdF92YWwgPSB2cDlfY3R4LQo+ ZmVhdHVyZV9kYXRhW3NlZ2lkXVtmZWF0X2lkXSArIDE7Cj4gKwkJfQo+ICsJCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIApmZWF0X3ZhbCk7Cj4g Kwo+ICsJCS8qIFNraXAgc2VnbWVudCBmZWF0dXJlICovCj4gKwkJZmVhdF9pZCA9IFY0TDJfVlA5 X1NFR19MVkxfU0tJUDsKPiArCQlmZWF0X3ZhbCA9IDA7Cj4gKwkJaWYgKHNlZ21lbnRfZW5hYmxl ZCkgewo+ICsJCQlpZiAodXBkYXRlX2RhdGEpCj4gKwkJCQl1cGRhdGVfZmVhdF9hbmRfZmxhZyh2 cDlfY3R4LCBzZWcsIApmZWF0X2lkLCBzZWdpZCk7Cj4gKwkJCWZlYXRfdmFsID0gdjRsMl92cDlf c2VnX2ZlYXRfZW5hYmxlZCh2cDlfY3R4LQo+ZmVhdHVyZV9lbmFibGVkLAo+ICsJCQkJCQkJICAg ICAKZmVhdF9pZCwgc2VnaWQpID8gMSA6IDA7Cj4gKwkJfQo+ICsJCWhhbnRyb19yZWdfd3JpdGUo Y3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIApmZWF0X3ZhbCk7Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGNvbmZpZ19sb29wX2ZpbHRlcihzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4LCBjb25zdCBzdHJ1Y3QgCnY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4g K3sKPiArCWJvb2wgZCA9IGRlY19wYXJhbXMtPmxmLmZsYWdzICYgClY0TDJfVlA5X0xPT1BfRklM VEVSX0ZMQUdfREVMVEFfRU5BQkxFRDsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmdnA5X2ZpbHRfbGV2ZWwsIGRlY19wYXJhbXMtPmxmLmxldmVsKTsKPiArCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZnMl9vdXRfZmlsdGVyaW5nX2RpcywgZGVjX3BhcmFtcy0KPmxmLmxl dmVsID09IDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9maWx0X3NoYXJw bmVzcywgZGVjX3BhcmFtcy0KPmxmLnNoYXJwbmVzcyk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJnZwOV9maWx0X3JlZl9hZGpfMCwgZCA/IGRlY19wYXJhbXMtCj5sZi5yZWZf ZGVsdGFzWzBdIDogMCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2ZpbHRf cmVmX2Fkal8xLCBkID8gZGVjX3BhcmFtcy0KPmxmLnJlZl9kZWx0YXNbMV0gOiAwKTsKPiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9yZWZfYWRqXzIsIGQgPyBkZWNfcGFy YW1zLQo+bGYucmVmX2RlbHRhc1syXSA6IDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJnZwOV9maWx0X3JlZl9hZGpfMywgZCA/IGRlY19wYXJhbXMtCj5sZi5yZWZfZGVsdGFzWzNd IDogMCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2ZpbHRfbWJfYWRqXzAs IGQgPyBkZWNfcGFyYW1zLQo+bGYubW9kZV9kZWx0YXNbMF0gOiAwKTsKPiArCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9tYl9hZGpfMSwgZCA/IGRlY19wYXJhbXMtCj5sZi5t b2RlX2RlbHRhc1sxXSA6IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfcGljdHVy ZV9kaW1lbnNpb25zKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHN0cnVjdCAKaGFudHJvX2RlY29k ZWRfYnVmZmVyICpkc3QpCj4gK3sKPiArCXUzMiBwaWNfd180eDQsIHBpY19oXzR4NDsKPiArCj4g KwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfcGljX3dpZHRoX2luX2NicywgKGRzdC0+ dnA5LndpZHRoICsgCjcpIC8gOCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJf cGljX2hlaWdodF9pbl9jYnMsIChkc3QtPnZwOS5oZWlnaHQgCisgNykgLyA4KTsKPiArCXBpY193 XzR4NCA9IHJvdW5kdXAoZHN0LT52cDkud2lkdGgsIDgpID4+IDI7Cj4gKwlwaWNfaF80eDQgPSBy b3VuZHVwKGRzdC0+dnA5LmhlaWdodCwgOCkgPj4gMjsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4 LT5kZXYsICZnMl9waWNfd2lkdGhfNHg0LCBwaWNfd180eDQpOwo+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJmcyX3BpY19oZWlnaHRfNHg0LCBwaWNfaF80eDQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZAo+ICtjb25maWdfYml0X2RlcHRoKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNv bnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lIAoqZGVjX3BhcmFtcykKPiArewo+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2JpdF9kZXB0aF95X21pbnVzOCwgZGVjX3BhcmFt cy0KPmJpdF9kZXB0aCAtIDgpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2Jp dF9kZXB0aF9jX21pbnVzOCwgZGVjX3BhcmFtcy0KPmJpdF9kZXB0aCAtIDgpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfbG9zc2xlc3MoY29uc3Qgc3RydWN0IHY0bDJfdnA5X3F1 YW50aXphdGlvbiAqcXVhbnQpCj4gK3sKPiArCXJldHVybiBxdWFudC0+YmFzZV9xX2lkeCA9PSAw ICYmIHF1YW50LT5kZWx0YV9xX3V2X2FjID09IDAgJiYKPiArCSAgICAgICBxdWFudC0+ZGVsdGFf cV91dl9kYyA9PSAwICYmIHF1YW50LT5kZWx0YV9xX3lfZGMgPT0gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQKPiArY29uZmlnX3F1YW50KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0 cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lIAoqZGVjX3BhcmFtcykKPiArewo+ICsJaGFudHJvX3Jl Z193cml0ZShjdHgtPmRldiwgJnZwOV9xcF9kZWx0YV95X2RjLCBkZWNfcGFyYW1zLQo+cXVhbnQu ZGVsdGFfcV95X2RjKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfcXBfZGVs dGFfY2hfZGMsIGRlY19wYXJhbXMtCj5xdWFudC5kZWx0YV9xX3V2X2RjKTsKPiArCWhhbnRyb19y ZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfcXBfZGVsdGFfY2hfYWMsIGRlY19wYXJhbXMtCj5xdWFu dC5kZWx0YV9xX3V2X2FjKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbG9z c2xlc3NfZSwgCmlzX2xvc3NsZXNzKCZkZWNfcGFyYW1zLT5xdWFudCkpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdTMyCj4gK2hhbnRyb19pbnRlcnBfZmlsdGVyX2Zyb21fdjRsMihlbnVtIHY0bDJfdnA5 X2ludGVycG9sYXRpb25fZmlsdGVyIAppbnRlcnBvbGF0aW9uX2ZpbHRlcikKPiArewo+ICsJc3dp dGNoIChpbnRlcnBvbGF0aW9uX2ZpbHRlcikgewo+ICsJY2FzZSBWNEwyX1ZQOV9JTlRFUlBfRklM VEVSX0VJR0hUVEFQOgo+ICsJCXJldHVybiAweDE7Cj4gKwljYXNlIFY0TDJfVlA5X0lOVEVSUF9G SUxURVJfRUlHSFRUQVBfU01PT1RIOgo+ICsJCXJldHVybiAwOwo+ICsJY2FzZSBWNEwyX1ZQOV9J TlRFUlBfRklMVEVSX0VJR0hUVEFQX1NIQVJQOgo+ICsJCXJldHVybiAweDI7Cj4gKwljYXNlIFY0 TDJfVlA5X0lOVEVSUF9GSUxURVJfQklMSU5FQVI6Cj4gKwkJcmV0dXJuIDB4MzsKPiArCWNhc2Ug VjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9TV0lUQ0hBQkxFOgo+ICsJCXJldHVybiAweDQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2NvbmZpZ19vdGhl cnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJh bWUgCipkZWNfcGFyYW1zLAo+ICsJICAgICAgYm9vbCBpbnRyYV9vbmx5LCBib29sIHJlc29sdXRp b25fY2hhbmdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4 ID0gJmN0eC0+dnA5X2RlYzsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJf aWRyX3BpY19lLCBpbnRyYV9vbmx5KTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmdnA5X3RyYW5zZm9ybV9tb2RlLCBkZWNfcGFyYW1zLQo+dHhfbW9kZSk7Cj4gKwo+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9tY29tcF9maWx0X3R5cGUsIGludHJhX29ubHkg Pwo+ICsJCTAgOiBoYW50cm9faW50ZXJwX2ZpbHRlcl9mcm9tX3Y0bDIoZGVjX3BhcmFtcy0KPmlu dGVycG9sYXRpb25fZmlsdGVyKSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JnZwOV9oaWdoX3ByZWNfbXZfZSwKPiArCQkJICEhKGRlY19wYXJhbXMtPmZsYWdzICYgClY0TDJf VlA5X0ZSQU1FX0ZMQUdfQUxMT1dfSElHSF9QUkVDX01WKSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193 cml0ZShjdHgtPmRldiwgJnZwOV9jb21wX3ByZWRfbW9kZSwgZGVjX3BhcmFtcy0KPnJlZmVyZW5j ZV9tb2RlKTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfdGVtcG9yX212 cF9lLAo+ICsJCQkgIShkZWNfcGFyYW1zLT5mbGFncyAmIApWNEwyX1ZQOV9GUkFNRV9GTEFHX0VS Uk9SX1JFU0lMSUVOVCkgJiYKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiAKVjRMMl9WUDlf RlJBTUVfRkxBR19LRVlfRlJBTUUpICYmCj4gKwkJCSAhKHZwOV9jdHgtPmxhc3QuZmxhZ3MgJiAK VjRMMl9WUDlfRlJBTUVfRkxBR19LRVlfRlJBTUUpICYmCj4gKwkJCSAhKGRlY19wYXJhbXMtPmZs YWdzICYgClY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkgJiYKPiArCQkJICFyZXNvbHV0 aW9uX2NoYW5nZSAmJgo+ICsJCQkgdnA5X2N0eC0+bGFzdC5mbGFncyAmIApWNEwyX1ZQOV9GUkFN RV9GTEFHX1NIT1dfRlJBTUUKPiArCSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJmcyX3dyaXRlX212c19lLAo+ICsJCQkgIShkZWNfcGFyYW1zLT5mbGFncyAmIApWNEwyX1ZQ OV9GUkFNRV9GTEFHX0tFWV9GUkFNRSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25m aWdfY29tcG91bmRfcmVmZXJlbmNlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsCj4gKwkJCSAgY29u c3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgCipkZWNfcGFyYW1zKQo+ICt7Cj4gKwl1MzIg Y29tcF9maXhlZF9yZWYsIGNvbXBfdmFyX3JlZlsyXTsKPiArCWJvb2wgbGFzdF9yZWZfZnJhbWVf c2lnbl9iaWFzOwo+ICsJYm9vbCBnb2xkZW5fcmVmX2ZyYW1lX3NpZ25fYmlhczsKPiArCWJvb2wg YWx0X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4gKwlib29sIGNvbXBfcmVmX2FsbG93ZWQgPSAwOwo+ ICsKPiArCWNvbXBfZml4ZWRfcmVmID0gMDsKPiArCWNvbXBfdmFyX3JlZlswXSA9IDA7Cj4gKwlj b21wX3Zhcl9yZWZbMV0gPSAwOwo+ICsKPiArCWxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhcyA9IGRl Y19wYXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiAKVjRMMl9WUDlfU0lHTl9CSUFTX0xBU1Q7 Cj4gKwlnb2xkZW5fcmVmX2ZyYW1lX3NpZ25fYmlhcyA9IGRlY19wYXJhbXMtPnJlZl9mcmFtZV9z aWduX2JpYXMgJiAKVjRMMl9WUDlfU0lHTl9CSUFTX0dPTERFTjsKPiArCWFsdF9yZWZfZnJhbWVf c2lnbl9iaWFzID0gZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3NpZ25fYmlhcyAmIApWNEwyX1ZQOV9T SUdOX0JJQVNfQUxUOwo+ICsKPiArCS8qIDYuMy4xMiBGcmFtZSByZWZlcmVuY2UgbW9kZSBzeW50 YXggKi8KPiArCWNvbXBfcmVmX2FsbG93ZWQgfD0gZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMg IT0gCmxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhczsKPiArCWNvbXBfcmVmX2FsbG93ZWQgfD0gYWx0 X3JlZl9mcmFtZV9zaWduX2JpYXMgIT0gCmxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhczsKPiArCj4g KwlpZiAoY29tcF9yZWZfYWxsb3dlZCkgewo+ICsJCWlmIChsYXN0X3JlZl9mcmFtZV9zaWduX2Jp YXMgPT0KPiArCQkgICAgZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMpIHsKPiArCQkJY29tcF9m aXhlZF9yZWYgPSBBTFRSRUZfRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlswXSA9IExBU1RfRlJB TUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlsxXSA9IEdPTERFTl9GUkFNRTsKPiArCQl9IGVsc2UgaWYg KGxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhcyA9PQo+ICsJCQkgICBhbHRfcmVmX2ZyYW1lX3NpZ25f Ymlhcykgewo+ICsJCQljb21wX2ZpeGVkX3JlZiA9IEdPTERFTl9GUkFNRTsKPiArCQkJY29tcF92 YXJfcmVmWzBdID0gTEFTVF9GUkFNRTsKPiArCQkJY29tcF92YXJfcmVmWzFdID0gQUxUUkVGX0ZS QU1FOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWNvbXBfZml4ZWRfcmVmID0gTEFTVF9GUkFNRTsKPiAr CQkJY29tcF92YXJfcmVmWzBdID0gR09MREVOX0ZSQU1FOwo+ICsJCQljb21wX3Zhcl9yZWZbMV0g PSBBTFRSRUZfRlJBTUU7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4 LT5kZXYsICZ2cDlfY29tcF9wcmVkX2ZpeGVkX3JlZiwgY29tcF9maXhlZF9yZWYpOwo+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9jb21wX3ByZWRfdmFyX3JlZjAsIApjb21wX3Zh cl9yZWZbMF0pOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9jb21wX3ByZWRf dmFyX3JlZjEsIApjb21wX3Zhcl9yZWZbMV0pOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIElOTkVSX0xP T1AgXAo+ICtkbyB7CQkJCQkJCQkKCVwKPiArCWZvciAobSA9IDA7IG0gPCBBUlJBWV9TSVpFKGFk YXB0aXZlLT5jb2VmWzBdWzBdWzBdWzBdKTsgKyttKSB7CVwKPiArCQltZW1jcHkoYWRhcHRpdmUt PmNvZWZbaV1bal1ba11bbF1bbV0sCQkJClwKPiArCQkgICAgICAgcHJvYnMtPmNvZWZbaV1bal1b a11bbF1bbV0sCQkJClwKPiArCQkgICAgICAgc2l6ZW9mKHByb2JzLT5jb2VmW2ldW2pdW2tdW2xd W21dKSk7CQkKXAo+ICsJCQkJCQkJCQoJXAo+ICsJCWFkYXB0aXZlLT5jb2VmW2ldW2pdW2tdW2xd W21dWzNdID0gMDsJCQkKXAo+ICsJfQkJCQkJCQkKCVwKPiArfSB3aGlsZSAoMCkKPiArCj4gK3N0 YXRpYyB2b2lkIGNvbmZpZ19wcm9icyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBzdHJ1 Y3QgCnY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50 cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhh bnRyb19hdXhfYnVmICptaXNjID0gJnZwOV9jdHgtPm1pc2M7Cj4gKwlzdHJ1Y3QgaGFudHJvX2cy X2FsbF9wcm9icyAqYWxsX3Byb2JzID0gbWlzYy0+Y3B1Owo+ICsJc3RydWN0IGhhbnRyb19nMl9w cm9icyAqYWRhcHRpdmU7Cj4gKwlzdHJ1Y3QgaGFudHJvX2cyX212X3Byb2JzICptdjsKPiArCWNv bnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gKnNlZyA9ICZkZWNfcGFyYW1zLT5zZWc7 Cj4gKwljb25zdCBzdHJ1Y3QgdjRsMl92cDlfZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0 eC0KPnByb2JhYmlsaXR5X3RhYmxlczsKPiArCWludCBpLCBqLCBrLCBsLCBtOwo+ICsKPiArCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbF9wcm9icy0+a2ZfeV9tb2RlX3Byb2IpOyArK2kp Cj4gKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYWxsX3Byb2JzLQo+a2ZfeV9tb2RlX3By b2JbMF0pOyArK2opIHsKPiArCQkJbWVtY3B5KGFsbF9wcm9icy0+a2ZfeV9tb2RlX3Byb2JbaV1b al0sCj4gKwkJCSAgICAgICB2NGwyX3ZwOV9rZl95X21vZGVfcHJvYltpXVtqXSwKPiArCQkJICAg ICAgIEFSUkFZX1NJWkUoYWxsX3Byb2JzLQo+a2ZfeV9tb2RlX3Byb2JbaV1bal0pKTsKPiArCj4g KwkJCWFsbF9wcm9icy0+a2ZfeV9tb2RlX3Byb2JfdGFpbFtpXVtqXVswXSA9Cj4gKwkJCQl2NGwy X3ZwOV9rZl95X21vZGVfcHJvYltpXVtqXVs4XTsKPiArCQl9Cj4gKwo+ICsJbWVtY3B5KGFsbF9w cm9icy0+bWJfc2VnbWVudF90cmVlX3Byb2JzLCBzZWctPnRyZWVfcHJvYnMsCj4gKwkgICAgICAg c2l6ZW9mKGFsbF9wcm9icy0+bWJfc2VnbWVudF90cmVlX3Byb2JzKSk7Cj4gKwo+ICsJbWVtY3B5 KGFsbF9wcm9icy0+c2VnbWVudF9wcmVkX3Byb2JzLCBzZWctPnByZWRfcHJvYnMsCj4gKwkgICAg ICAgc2l6ZW9mKGFsbF9wcm9icy0+c2VnbWVudF9wcmVkX3Byb2JzKSk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsX3Byb2JzLT5rZl91dl9tb2RlX3Byb2IpOyArK2kpIHsK PiArCQltZW1jcHkoYWxsX3Byb2JzLT5rZl91dl9tb2RlX3Byb2JbaV0sIAp2NGwyX3ZwOV9rZl91 dl9tb2RlX3Byb2JbaV0sCj4gKwkJICAgICAgIEFSUkFZX1NJWkUoYWxsX3Byb2JzLT5rZl91dl9t b2RlX3Byb2JbaV0pKTsKPiArCj4gKwkJYWxsX3Byb2JzLT5rZl91dl9tb2RlX3Byb2JfdGFpbFtp XVswXSA9IAp2NGwyX3ZwOV9rZl91dl9tb2RlX3Byb2JbaV1bOF07Cj4gKwl9Cj4gKwo+ICsJYWRh cHRpdmUgPSAmYWxsX3Byb2JzLT5wcm9iczsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShhZGFwdGl2ZS0+aW50ZXJfbW9kZSk7ICsraSkgewo+ICsJCW1lbWNweShhZGFwdGl2ZS0+ aW50ZXJfbW9kZVtpXSwgcHJvYnMtPmludGVyX21vZGVbaV0sCj4gKwkJICAgICAgIHNpemVvZihw cm9icy0+aW50ZXJfbW9kZSkpOwo+ICsKPiArCQlhZGFwdGl2ZS0+aW50ZXJfbW9kZVtpXVszXSA9 IDA7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KGFkYXB0aXZlLT5pc19pbnRlciwgcHJvYnMtPmlzX2lu dGVyLCBzaXplb2YoYWRhcHRpdmUtCj5pc19pbnRlcikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGFkYXB0aXZlLT51dl9tb2RlKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0 aXZlLT51dl9tb2RlW2ldLCBwcm9icy0+dXZfbW9kZVtpXSwKPiArCQkgICAgICAgc2l6ZW9mKGFk YXB0aXZlLT51dl9tb2RlW2ldKSk7Cj4gKwkJYWRhcHRpdmUtPnV2X21vZGVfdGFpbFtpXVswXSA9 IHByb2JzLT51dl9tb2RlW2ldWzhdOwo+ICsJfQo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+dHg4 LCBwcm9icy0+dHg4LCBzaXplb2YoYWRhcHRpdmUtPnR4OCkpOwo+ICsJbWVtY3B5KGFkYXB0aXZl LT50eDE2LCBwcm9icy0+dHgxNiwgc2l6ZW9mKGFkYXB0aXZlLT50eDE2KSk7Cj4gKwltZW1jcHko YWRhcHRpdmUtPnR4MzIsIHByb2JzLT50eDMyLCBzaXplb2YoYWRhcHRpdmUtPnR4MzIpKTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+eV9tb2RlKTsgKytpKSB7 Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT55X21vZGVbaV0sIHByb2JzLT55X21vZGVbaV0sCj4gKwkJ ICAgICAgIEFSUkFZX1NJWkUoYWRhcHRpdmUtPnlfbW9kZVtpXSkpOwo+ICsKPiArCQlhZGFwdGl2 ZS0+eV9tb2RlX3RhaWxbaV1bMF0gPSBwcm9icy0+eV9tb2RlW2ldWzhdOwo+ICsJfQo+ICsKPiAr CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMF0pOyArK2kp IHsKPiArCQltZW1jcHkoYWRhcHRpdmUtPnBhcnRpdGlvblswXVtpXSwgCnY0bDJfdnA5X2tmX3Bh cnRpdGlvbl9wcm9ic1tpXSwKPiArCQkgICAgICAgc2l6ZW9mKHY0bDJfdnA5X2tmX3BhcnRpdGlv bl9wcm9ic1tpXSkpOwo+ICsKPiArCQlhZGFwdGl2ZS0+cGFydGl0aW9uWzBdW2ldWzNdID0gMDsK PiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+cGFydGl0 aW9uWzFdKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT5wYXJ0aXRpb25bMV1baV0sIHBy b2JzLT5wYXJ0aXRpb25baV0sCj4gKwkJICAgICAgIHNpemVvZihwcm9icy0+cGFydGl0aW9uW2ld KSk7Cj4gKwo+ICsJCWFkYXB0aXZlLT5wYXJ0aXRpb25bMV1baV1bM10gPSAwOwo+ICsJfQo+ICsK PiArCW1lbWNweShhZGFwdGl2ZS0+aW50ZXJwX2ZpbHRlciwgcHJvYnMtPmludGVycF9maWx0ZXIs Cj4gKwkgICAgICAgc2l6ZW9mKGFkYXB0aXZlLT5pbnRlcnBfZmlsdGVyKSk7Cj4gKwo+ICsJbWVt Y3B5KGFkYXB0aXZlLT5jb21wX21vZGUsIHByb2JzLT5jb21wX21vZGUsIHNpemVvZihhZGFwdGl2 ZS0KPmNvbXBfbW9kZSkpOwo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+c2tpcCwgcHJvYnMtPnNr aXAsIHNpemVvZihhZGFwdGl2ZS0+c2tpcCkpOwo+ICsKPiArCW12ID0gJmFkYXB0aXZlLT5tdjsK PiArCj4gKwltZW1jcHkobXYtPmpvaW50LCBwcm9icy0+bXYuam9pbnQsIHNpemVvZihtdi0+am9p bnQpKTsKPiArCW1lbWNweShtdi0+c2lnbiwgcHJvYnMtPm12LnNpZ24sIHNpemVvZihtdi0+c2ln bikpOwo+ICsJbWVtY3B5KG12LT5jbGFzczBfYml0LCBwcm9icy0+bXYuY2xhc3MwX2JpdCwgc2l6 ZW9mKG12LQo+Y2xhc3MwX2JpdCkpOwo+ICsJbWVtY3B5KG12LT5mciwgcHJvYnMtPm12LmZyLCBz aXplb2YobXYtPmZyKSk7Cj4gKwltZW1jcHkobXYtPmNsYXNzMF9ocCwgcHJvYnMtPm12LmNsYXNz MF9ocCwgc2l6ZW9mKG12LT5jbGFzczBfaHApKTsKPiArCW1lbWNweShtdi0+aHAsIHByb2JzLT5t di5ocCwgc2l6ZW9mKG12LT5ocCkpOwo+ICsJbWVtY3B5KG12LT5jbGFzc2VzLCBwcm9icy0+bXYu Y2xhc3Nlcywgc2l6ZW9mKG12LT5jbGFzc2VzKSk7Cj4gKwltZW1jcHkobXYtPmNsYXNzMF9mciwg cHJvYnMtPm12LmNsYXNzMF9mciwgc2l6ZW9mKG12LT5jbGFzczBfZnIpKTsKPiArCW1lbWNweSht di0+Yml0cywgcHJvYnMtPm12LmJpdHMsIHNpemVvZihtdi0+Yml0cykpOwo+ICsKPiArCW1lbWNw eShhZGFwdGl2ZS0+c2luZ2xlX3JlZiwgcHJvYnMtPnNpbmdsZV9yZWYsIHNpemVvZihhZGFwdGl2 ZS0KPnNpbmdsZV9yZWYpKTsKPiArCj4gKwltZW1jcHkoYWRhcHRpdmUtPmNvbXBfcmVmLCBwcm9i cy0+Y29tcF9yZWYsIHNpemVvZihhZGFwdGl2ZS0KPmNvbXBfcmVmKSk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmNvZWYpOyArK2kpCj4gKwkJZm9yIChqID0g MDsgaiA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmNvZWZbMF0pOyArK2opCj4gKwkJCWZvciAoayA9 IDA7IGsgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5jb2VmWzBdClswXSk7ICsraykKPiArCQkJCWZv ciAobCA9IDA7IGwgPCAKQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29lZlswXVswXVswXSk7ICsrbCkK PiArCQkJCQlJTk5FUl9MT09QOwo+ICsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBW UDlfQUREUl9QUk9CUywgbWlzYy0+ZG1hKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29uZmln X2NvdW50cyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX3Zw OV9kZWNfaHdfY3R4ICp2cDlfZGVjID0gJmN0eC0+dnA5X2RlYzsKPiArCXN0cnVjdCBoYW50cm9f YXV4X2J1ZiAqbWlzYyA9ICZ2cDlfZGVjLT5taXNjOwo+ICsJZG1hX2FkZHJfdCBhZGRyID0gbWlz Yy0+ZG1hICsgdnA5X2RlYy0+Y3R4X2NvdW50ZXJzX29mZnNldDsKPiArCj4gKwloYW50cm9fd3Jp dGVfYWRkcihjdHgtPmRldiwgVlA5X0FERFJfQ1RSLCBhZGRyKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgY29uZmlnX3NlZ19tYXAoc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJICAgY29u c3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgCipkZWNfcGFyYW1zLAo+ICsJCQkgICBib29s IGludHJhX29ubHksIGJvb2wgdXBkYXRlX21hcCkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlf ZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F1 eF9idWYgKnNlZ21lbnRfbWFwID0gJnZwOV9jdHgtPnNlZ21lbnRfbWFwOwo+ICsJZG1hX2FkZHJf dCBhZGRyOwo+ICsKPiArCWlmIChpbnRyYV9vbmx5IHx8Cj4gKwkgICAgKGRlY19wYXJhbXMtPmZs YWdzICYgVjRMMl9WUDlfRlJBTUVfRkxBR19FUlJPUl9SRVNJTElFTlQpKSB7Cj4gKwkJbWVtc2V0 KHNlZ21lbnRfbWFwLT5jcHUsIDAsIHNlZ21lbnRfbWFwLT5zaXplKTsKPiArCQltZW1zZXQodnA5 X2N0eC0+ZmVhdHVyZV9kYXRhLCAwLCBzaXplb2YodnA5X2N0eC0KPmZlYXR1cmVfZGF0YSkpOwo+ ICsJCW1lbXNldCh2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWQsIDAsIHNpemVvZih2cDlfY3R4LQo+ ZmVhdHVyZV9lbmFibGVkKSk7Cj4gKwl9Cj4gKwo+ICsJYWRkciA9IHNlZ21lbnRfbWFwLT5kbWEg KyB2cDlfY3R4LT5hY3RpdmVfc2VnbWVudCAqIHZwOV9jdHgtCj5zZWdtZW50X21hcF9zaXplOwo+ ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1NFR01FTlRfUkVBRCwgYWRk cik7Cj4gKwo+ICsJYWRkciA9IHNlZ21lbnRfbWFwLT5kbWEgKyAoMSAtIHZwOV9jdHgtPmFjdGl2 ZV9zZWdtZW50KSAqIHZwOV9jdHgtCj5zZWdtZW50X21hcF9zaXplOwo+ICsJaGFudHJvX3dyaXRl X2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1NFR01FTlRfV1JJVEUsIGFkZHIpOwo+ICsKPiArCWlm ICh1cGRhdGVfbWFwKQo+ICsJCXZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50ID0gMSAtIHZwOV9jdHgt PmFjdGl2ZV9zZWdtZW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25maWdfc291cmNl KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1l IAoqZGVjX3BhcmFtcywKPiArCSAgICAgIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiMl9zcmMp Cj4gK3sKPiArCWRtYV9hZGRyX3Qgc3RyZWFtX2Jhc2UsIHRtcF9hZGRyOwo+ICsJdW5zaWduZWQg aW50IGhlYWRyZXNfc2l6ZTsKPiArCXUzMiBzcmNfbGVuLCBzdGFydF9iaXQsIHNyY19idWZfbGVu Owo+ICsKPiArCWhlYWRyZXNfc2l6ZSA9IGRlY19wYXJhbXMtPnVuY29tcHJlc3NlZF9oZWFkZXJf c2l6ZQo+ICsJCSAgICAgKyBkZWNfcGFyYW1zLT5jb21wcmVzc2VkX2hlYWRlcl9zaXplOwo+ICsK PiArCXN0cmVhbV9iYXNlID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJnZiMl9zcmMt PnZiMl9idWYsIDApOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfU1RS LCBzdHJlYW1fYmFzZSk7Cj4gKwo+ICsJdG1wX2FkZHIgPSBzdHJlYW1fYmFzZSArIGhlYWRyZXNf c2l6ZTsKPiArCXN0YXJ0X2JpdCA9ICh0bXBfYWRkciAmIDB4ZikgKiA4Owo+ICsJaGFudHJvX3Jl Z193cml0ZShjdHgtPmRldiwgJmcyX3N0YXJ0X2JpdCwgc3RhcnRfYml0KTsKPiArCj4gKwlzcmNf bGVuID0gdmIyX2dldF9wbGFuZV9wYXlsb2FkKCZ2YjJfc3JjLT52YjJfYnVmLCAwKTsKPiArCXNy Y19sZW4gKz0gc3RhcnRfYml0IC8gOCAtIGhlYWRyZXNfc2l6ZTsKPiArCWhhbnRyb19yZWdfd3Jp dGUoY3R4LT5kZXYsICZnMl9zdHJlYW1fbGVuLCBzcmNfbGVuKTsKPiArCj4gKwl0bXBfYWRkciAm PSB+MHhmOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3N0cm1fc3RhcnRfb2Zm c2V0LCB0bXBfYWRkciAtIApzdHJlYW1fYmFzZSk7Cj4gKwlzcmNfYnVmX2xlbiA9IHZiMl9wbGFu ZV9zaXplKCZ2YjJfc3JjLT52YjJfYnVmLCAwKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5k ZXYsICZnMl9zdHJtX2J1ZmZlcl9sZW4sIHNyY19idWZfbGVuKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQKPiArY29uZmlnX3JlZ2lzdGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAKKmRlY19wYXJhbXMsCj4gKwkJIHN0cnVjdCB2YjJf djRsMl9idWZmZXIgKnZiMl9zcmMsIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgCip2YjJfZHN0KQo+ ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3QsICpsYXN0LCAqbXZfcmVm Owo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9k ZWM7Cj4gKwljb25zdCBzdHJ1Y3QgdjRsMl92cDlfc2VnbWVudGF0aW9uICpzZWc7Cj4gKwlib29s IGludHJhX29ubHksIHJlc29sdXRpb25fY2hhbmdlOwo+ICsKPiArCS8qIHZwOSBzdHVmZiAqLwo+ ICsJZHN0ID0gdmIyX3RvX2hhbnRyb19kZWNvZGVkX2J1ZigmdmIyX2RzdC0+dmIyX2J1Zik7Cj4g Kwo+ICsJaWYgKHZwOV9jdHgtPmxhc3QudmFsaWQpCj4gKwkJbGFzdCA9IGdldF9yZWZfYnVmKGN0 eCwgJmRzdC0+YmFzZS52YiwgdnA5X2N0eC0KPmxhc3QudGltZXN0YW1wKTsKPiArCWVsc2UKPiAr CQlsYXN0ID0gZHN0Owo+ICsKPiArCXVwZGF0ZV9kZWNfYnVmX2luZm8oZHN0LCBkZWNfcGFyYW1z KTsKPiArCXVwZGF0ZV9jdHhfY3VyX2luZm8odnA5X2N0eCwgZHN0LCBkZWNfcGFyYW1zKTsKPiAr CXNlZyA9ICZkZWNfcGFyYW1zLT5zZWc7Cj4gKwo+ICsJaW50cmFfb25seSA9ICEhKGRlY19wYXJh bXMtPmZsYWdzICYKPiArCQkJKFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FIHwKPiArCQkJ VjRMMl9WUDlfRlJBTUVfRkxBR19JTlRSQV9PTkxZKSk7Cj4gKwo+ICsJaWYgKCFpbnRyYV9vbmx5 ICYmCj4gKwkgICAgIShkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJS T1JfUkVTSUxJRU5UKSAmJgo+ICsJICAgIHZwOV9jdHgtPmxhc3QudmFsaWQpCj4gKwkJbXZfcmVm ID0gbGFzdDsKPiArCWVsc2UKPiArCQltdl9yZWYgPSBkc3Q7Cj4gKwo+ICsJcmVzb2x1dGlvbl9j aGFuZ2UgPSBkc3QtPnZwOS53aWR0aCAhPSBsYXN0LT52cDkud2lkdGggfHwKPiArCQkJICAgIGRz dC0+dnA5LmhlaWdodCAhPSBsYXN0LT52cDkuaGVpZ2h0Owo+ICsKPiArCS8qIGNvbmZpZ3VyZSBi YXNpYyByZWdpc3RlcnMgKi8KPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9tb2Rl LCBWUDlfREVDX01PREUpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3N0cm1f c3dhcCwgMHhmKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9kaXJtdl9zd2Fw LCAweGYpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2NvbXByZXNzX3N3YXAs IDB4Zik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfYnVzd2lkdGgsIEJVU19X SURUSF8xMjgpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX21heF9idXJzdCwg MTYpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2FwZl90aHJlc2hvbGQsIDgp Owo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3JlZl9jb21wcmVzc19ieXBhc3Ms IDEpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2Nsa19nYXRlX2UsIDEpOwo+ ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX21heF9jYl9zaXplLCA2KTsKPiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9taW5fY2Jfc2l6ZSwgMyk7Cj4gKwo+ICsJY29u ZmlnX291dHB1dChjdHgsIGRzdCwgZGVjX3BhcmFtcyk7Cj4gKwo+ICsJaWYgKCFpbnRyYV9vbmx5 KQo+ICsJCWNvbmZpZ19yZWZfcmVnaXN0ZXJzKGN0eCwgZGVjX3BhcmFtcywgZHN0LCBtdl9yZWYp Owo+ICsKPiArCWNvbmZpZ190aWxlcyhjdHgsIGRlY19wYXJhbXMsIGRzdCk7Cj4gKwljb25maWdf c2VnbWVudChjdHgsIGRlY19wYXJhbXMpOwo+ICsJY29uZmlnX2xvb3BfZmlsdGVyKGN0eCwgZGVj X3BhcmFtcyk7Cj4gKwljb25maWdfcGljdHVyZV9kaW1lbnNpb25zKGN0eCwgZHN0KTsKPiArCWNv bmZpZ19iaXRfZGVwdGgoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19xdWFudChjdHgsIGRl Y19wYXJhbXMpOwo+ICsJY29uZmlnX290aGVycyhjdHgsIGRlY19wYXJhbXMsIGludHJhX29ubHks IHJlc29sdXRpb25fY2hhbmdlKTsKPiArCWNvbmZpZ19jb21wb3VuZF9yZWZlcmVuY2UoY3R4LCBk ZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19wcm9icyhjdHgsIGRlY19wYXJhbXMpOwo+ICsJY29uZmln X2NvdW50cyhjdHgpOwo+ICsJY29uZmlnX3NlZ19tYXAoY3R4LCBkZWNfcGFyYW1zLCBpbnRyYV9v bmx5LAo+ICsJCSAgICAgICBzZWctPmZsYWdzICYgClY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFH X1VQREFURV9NQVApOwo+ICsJY29uZmlnX3NvdXJjZShjdHgsIGRlY19wYXJhbXMsIHZiMl9zcmMp Owo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNvZGVf cGFyYW1zOwo+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqc3JjOwo+ICsJc3RydWN0IHZiMl92 NGwyX2J1ZmZlciAqZHN0Owo+ICsJaW50IHJldDsKPiArCj4gKwloYW50cm9fZzJfY2hlY2tfaWRs ZShjdHgtPmRldik7Cj4gKwo+ICsJcmV0ID0gc3RhcnRfcHJlcGFyZV9ydW4oY3R4LCAmZGVjb2Rl X3BhcmFtcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJaGFudHJvX2VuZF9wcmVwYXJlX3J1bihjdHgp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJc3JjID0gaGFudHJvX2dldF9zcmNfYnVm KGN0eCk7Cj4gKwlkc3QgPSBoYW50cm9fZ2V0X2RzdF9idWYoY3R4KTsKPiArCj4gKwljb25maWdf cmVnaXN0ZXJzKGN0eCwgZGVjb2RlX3BhcmFtcywgc3JjLCBkc3QpOwo+ICsKPiArCWhhbnRyb19l bmRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwl2ZHB1X3dyaXRlKGN0eC0+ZGV2LCBHMl9SRUdf SU5URVJSVVBUX0RFQ19FLCBHMl9SRUdfSU5URVJSVVBUKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArI2RlZmluZSBjb3B5X3R4X2FuZF9za2lwKHAxLCBwMikJCQkJXAo+ICtkbyB7CQkJ CQkJCQkKXAo+ICsJbWVtY3B5KChwMSktPnR4OCwgKHAyKS0+dHg4LCBzaXplb2YoKHAxKS0+dHg4 KSk7CVwKPiArCW1lbWNweSgocDEpLT50eDE2LCAocDIpLT50eDE2LCBzaXplb2YoKHAxKS0+dHgx NikpOwlcCj4gKwltZW1jcHkoKHAxKS0+dHgzMiwgKHAyKS0+dHgzMiwgc2l6ZW9mKChwMSktPnR4 MzIpKTsJXAo+ICsJbWVtY3B5KChwMSktPnNraXAsIChwMiktPnNraXAsIHNpemVvZigocDEpLT5z a2lwKSk7CVwKPiArfSB3aGlsZSAoMCkKPiArCj4gK3ZvaWQgaGFudHJvX2cyX3ZwOV9kZWNfZG9u ZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNf aHdfY3R4ICp2cDlfY3R4ID0gJmN0eC0+dnA5X2RlYzsKPiArCXVuc2lnbmVkIGludCBmY3R4X2lk eDsKPiArCj4gKwlpZiAoISh2cDlfY3R4LT5jdXIuZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFH X1JFRlJFU0hfRlJBTUVfQ1RYKSkKPiArCQlnb3RvIG91dF91cGRhdGVfbGFzdDsKPiArCj4gKwlm Y3R4X2lkeCA9IHZwOV9jdHgtPmN1ci5mcmFtZV9jb250ZXh0X2lkeDsKPiArCj4gKwlpZiAoISh2 cDlfY3R4LT5jdXIuZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFHX1BBUkFMTEVMX0RFQ19NT0RF KSkgewo+ICsJCS8qIGVycm9yX3Jlc2lsaWVudF9tb2RlID09IDAgJiYgCmZyYW1lX3BhcmFsbGVs X2RlY29kaW5nX21vZGUgPT0gMCAqLwo+ICsJCXN0cnVjdCB2NGwyX3ZwOV9mcmFtZV9jb250ZXh0 ICpwcm9icyA9ICZ2cDlfY3R4LQo+cHJvYmFiaWxpdHlfdGFibGVzOwo+ICsJCWJvb2wgZnJhbWVf aXNfaW50cmEgPSB2cDlfY3R4LT5jdXIuZmxhZ3MgJgo+ICsJCSAgICAoVjRMMl9WUDlfRlJBTUVf RkxBR19LRVlfRlJBTUUgfCAKVjRMMl9WUDlfRlJBTUVfRkxBR19JTlRSQV9PTkxZKTsKPiArCQlz dHJ1Y3QgdHhfYW5kX3NraXAgewo+ICsJCQl1OCB0eDhbMl1bMV07Cj4gKwkJCXU4IHR4MTZbMl1b Ml07Cj4gKwkJCXU4IHR4MzJbMl1bM107Cj4gKwkJCXU4IHNraXBbM107Cj4gKwkJfSBfdHhfc2tp cCwgKnR4X3NraXAgPSAmX3R4X3NraXA7Cj4gKwkJc3RydWN0IHY0bDJfdnA5X2ZyYW1lX3N5bWJv bF9jb3VudHMgKmNvdW50czsKPiArCQlzdHJ1Y3Qgc3ltYm9sX2NvdW50cyAqaGFudHJvX2NudHM7 Cj4gKwkJdTMyIHR4MTZwWzJdWzRdOwo+ICsJCWludCBpOwo+ICsKPiArCQkvKiBidWZmZXIgdGhl IGZvcndhcmQtdXBkYXRlZCBUWCBhbmQgc2tpcCBwcm9icyAqLwo+ICsJCWlmIChmcmFtZV9pc19p bnRyYSkKPiArCQkJY29weV90eF9hbmRfc2tpcCh0eF9za2lwLCBwcm9icyk7Cj4gKwo+ICsJCS8q IDYuMS4yIHJlZnJlc2hfcHJvYnMoKTogbG9hZF9wcm9icygpIGFuZCBsb2FkX3Byb2JzMigpIAoq Lwo+ICsJCSpwcm9icyA9IHZwOV9jdHgtPmZyYW1lX2NvbnRleHRbZmN0eF9pZHhdOwo+ICsKPiAr CQkvKiBpZiBGcmFtZUlzSW50cmEgdGhlbiB1bmRvIHRoZSBlZmZlY3Qgb2YgbG9hZF9wcm9iczIo KSAKKi8KPiArCQlpZiAoZnJhbWVfaXNfaW50cmEpCj4gKwkJCWNvcHlfdHhfYW5kX3NraXAocHJv YnMsIHR4X3NraXApOwo+ICsKPiArCQljb3VudHMgPSAmdnA5X2N0eC0+Y250czsKPiArCQloYW50 cm9fY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0KPmN0eF9jb3VudGVyc19vZmZz ZXQ7Cj4gKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHgxNnApOyArK2kpIHsKPiArCQkJ bWVtY3B5KHR4MTZwW2ldLAo+ICsJCQkgICAgICAgaGFudHJvX2NudHMtPnR4MTZ4MTZfY291bnRb aV0sCj4gKwkJCSAgICAgICBzaXplb2YoaGFudHJvX2NudHMtCj50eDE2eDE2X2NvdW50WzBdKSk7 Cj4gKwkJCXR4MTZwW2ldWzNdID0gMDsKPiArCQl9Cj4gKwkJY291bnRzLT50eDE2cCA9ICZ0eDE2 cDsKPiArCj4gKwkJdjRsMl92cDlfYWRhcHRfY29lZl9wcm9icyhwcm9icywgY291bnRzLAo+ICsJ CQkJCSAgIXZwOV9jdHgtPmxhc3QudmFsaWQgCnx8Cj4gKwkJCQkJICB2cDlfY3R4LT5sYXN0LmZs YWdzICYgClY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FLAo+ICsJCQkJCSAgZnJhbWVfaXNf aW50cmEpOwo+ICsKPiArCQlpZiAoIWZyYW1lX2lzX2ludHJhKSB7Cj4gKwkJCS8qIGxvYWRfcHJv YnMyKCkgYWxyZWFkeSBkb25lICovCj4gKwkJCXUzMiBtdl9tb2RlWzddWzRdOwo+ICsKPiArCQkJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXZfbW9kZSk7ICsraSkgewo+ICsJCQkJbXZfbW9k ZVtpXVswXSA9IGhhbnRyb19jbnRzLQo+aW50ZXJfbW9kZV9jb3VudHNbaV1bMV1bMF07Cj4gKwkJ CQltdl9tb2RlW2ldWzFdID0gaGFudHJvX2NudHMtCj5pbnRlcl9tb2RlX2NvdW50c1tpXVsyXVsw XTsKPiArCQkJCW12X21vZGVbaV1bMl0gPSBoYW50cm9fY250cy0KPmludGVyX21vZGVfY291bnRz W2ldWzBdWzBdOwo+ICsJCQkJbXZfbW9kZVtpXVszXSA9IGhhbnRyb19jbnRzLQo+aW50ZXJfbW9k ZV9jb3VudHNbaV1bMl1bMV07Cj4gKwkJCX0KPiArCQkJY291bnRzLT5tdl9tb2RlID0gJm12X21v ZGU7Cj4gKwkJCXY0bDJfdnA5X2FkYXB0X25vbmNvZWZfcHJvYnMoJnZwOV9jdHgtCj5wcm9iYWJp bGl0eV90YWJsZXMsIGNvdW50cywKPiArCQkJCQkJICAgICAKdnA5X2N0eC0+Y3VyLnJlZmVyZW5j ZV9tb2RlLAo+ICsJCQkJCQkgICAgIAp2cDlfY3R4LT5jdXIuaW50ZXJwb2xhdGlvbl9maWx0ZXIs Cj4gKwkJCQkJCSAgICAgCnZwOV9jdHgtPmN1ci50eF9tb2RlLCB2cDlfY3R4LT5jdXIuZmxhZ3Mp Owo+ICsJCX0KPiArCX0KPiArCj4gKwl2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhfaWR4XSA9 IHZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlczsKPiArCj4gK291dF91cGRhdGVfbGFzdDoKPiAr CXZwOV9jdHgtPmxhc3QgPSB2cDlfY3R4LT5jdXI7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaCBiL2RyaXZlcnMvc3RhZ2luZy8KbWVk aWEvaGFudHJvL2hhbnRyb19ody5oCj4gaW5kZXggNDJiM2YzOTYxZjc1Li4yOTYxZDM5OWZkNjAg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaAo+ ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmgKPiBAQCAtMTIs NiArMTIsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gICNpbmNsdWRlIDxs aW51eC92NGwyLWNvbnRyb2xzLmg+Cj4gICNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Cj4g KyNpbmNsdWRlIDxtZWRpYS92NGwyLXZwOS5oPgo+ICAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYy LWNvcmUuaD4KPiAgCj4gICNkZWZpbmUgREVDXzgxOTBfQUxJR05fTUFTSwkweDA3VQo+IEBAIC0x NjEsNiArMTYyLDUwIEBAIHN0cnVjdCBoYW50cm9fdnA4X2RlY19od19jdHggewo+ICAJc3RydWN0 IGhhbnRyb19hdXhfYnVmIHByb2JfdGJsOwo+ICB9Owo+ICAKPiArc3RydWN0IGhhbnRyb192cDlf ZnJhbWVfaW5mbyB7Cj4gKwl1MzIgdmFsaWQgOiAxOwo+ICsJdTMyIGZyYW1lX2NvbnRleHRfaWR4 IDogMjsKPiArCXUzMiByZWZlcmVuY2VfbW9kZSA6IDI7Cj4gKwl1MzIgdHhfbW9kZSA6IDM7Cj4g Kwl1MzIgaW50ZXJwb2xhdGlvbl9maWx0ZXIgOiAzOwo+ICsJdTMyIGZsYWdzOwo+ICsJdTY0IHRp bWVzdGFtcDsKPiArfTsKPiArCj4gKyNkZWZpbmUgTUFYX1NCX0NPTFMJNjQKPiArI2RlZmluZSBN QVhfU0JfUk9XUwkzNAo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBoYW50cm9fdnA5X2RlY19od19j dHgKPiArICoKPiArICovCj4gK3N0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggewo+ICsJc3Ry dWN0IGhhbnRyb19hdXhfYnVmIHRpbGVfZWRnZTsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiBz ZWdtZW50X21hcDsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiBtaXNjOwo+ICsJc3RydWN0IHY0 bDJfdnA5X2ZyYW1lX3N5bWJvbF9jb3VudHMgY250czsKPiArCXN0cnVjdCB2NGwyX3ZwOV9mcmFt ZV9jb250ZXh0IHByb2JhYmlsaXR5X3RhYmxlczsKPiArCXN0cnVjdCB2NGwyX3ZwOV9mcmFtZV9j b250ZXh0IGZyYW1lX2NvbnRleHRbNF07Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9mcmFtZV9pbmZv IGN1cjsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2ZyYW1lX2luZm8gbGFzdDsKPiArCj4gKwl1bnNp Z25lZCBpbnQgYnNkX2N0cmxfb2Zmc2V0Owo+ICsJdW5zaWduZWQgaW50IHNlZ21lbnRfbWFwX3Np emU7Cj4gKwl1bnNpZ25lZCBpbnQgY3R4X2NvdW50ZXJzX29mZnNldDsKPiArCXVuc2lnbmVkIGlu dCB0aWxlX2luZm9fb2Zmc2V0Owo+ICsKPiArCXVuc2lnbmVkIHNob3J0IHRpbGVfcl9pbmZvW01B WF9TQl9ST1dTXTsKPiArCXVuc2lnbmVkIHNob3J0IHRpbGVfY19pbmZvW01BWF9TQl9DT0xTXTsK PiArCXVuc2lnbmVkIGludCBsYXN0X3RpbGVfcjsKPiArCXVuc2lnbmVkIGludCBsYXN0X3RpbGVf YzsKPiArCXVuc2lnbmVkIGludCBsYXN0X3Nic19yOwo+ICsJdW5zaWduZWQgaW50IGxhc3Rfc2Jz X2M7Cj4gKwo+ICsJdW5zaWduZWQgaW50IGFjdGl2ZV9zZWdtZW50Owo+ICsJdTggZmVhdHVyZV9l bmFibGVkWzhdOwo+ICsJczE2IGZlYXR1cmVfZGF0YVs4XVs0XTsKPiArfTsKPiArCj4gIC8qKgo+ ICAgKiBzdHJ1Y3QgaGFudHJvX3Bvc3Rwcm9jX2N0eAo+ICAgKgo+IEBAIC0yNjcsNiArMzEyLDI0 IEBAIHZvaWQgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVzZWQoc3RydWN0IGhhbnRyb19jdHgg CipjdHgpOwo+ICBzaXplX3QgaGFudHJvX2hldmNfY2hyb21hX29mZnNldChjb25zdCBzdHJ1Y3Qg djRsMl9jdHJsX2hldmNfc3BzICpzcHMpOwo+ICBzaXplX3QgaGFudHJvX2hldmNfbW90aW9uX3Zl Y3RvcnNfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgCipzcHMpOwo+ICAK PiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoYW50cm9fdnA5X251bV9zYnModW5zaWdu ZWQgc2hvcnQgZGltZW5zaW9uKQo+ICt7Cj4gKwlyZXR1cm4gKGRpbWVuc2lvbiArIDYzKSAvIDY0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdAo+ICtoYW50cm9fdnA5X212X3NpemUo dW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQo+ICt7Cj4gKwlpbnQgbnVt X2N0YnM7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZXJlIGNhbiBiZSB1cCB0byAoQ1RCcyB4IDY0KSBu dW1iZXIgb2YgYmxvY2tzLAo+ICsJICogYW5kIHRoZSBtb3Rpb24gdmVjdG9yIGZvciBlYWNoIGJs b2NrIG5lZWRzIDE2IGJ5dGVzLgo+ICsJICovCj4gKwludW1fY3RicyA9IGhhbnRyb192cDlfbnVt X3Nicyh3aWR0aCkgKiBoYW50cm9fdnA5X251bV9zYnMoaGVpZ2h0KTsKPiArCXJldHVybiAobnVt X2N0YnMgKiA2NCkgKiAxNjsKPiArfQo+ICsKPiAgc3RhdGljIGlubGluZSBzaXplX3QKPiAgaGFu dHJvX2gyNjRfbXZfc2l6ZSh1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQp Cj4gIHsKPiBAQCAtMzA4LDYgKzM3MSwxMCBAQCB2b2lkIGhhbnRyb192cDhfZGVjX2V4aXQoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gIHZvaWQgaGFudHJvX3ZwOF9wcm9iX3VwZGF0ZShzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDhf ZnJhbWUgKmhkcik7Cj4gIAo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgpOwo+ICt2b2lkIGhhbnRyb19nMl92cDlfZGVjX2RvbmUoc3RydWN0IGhhbnRy b19jdHggKmN0eCk7Cj4gK2ludCBoYW50cm9fdnA5X2RlY19pbml0KHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpOwo+ICt2b2lkIGhhbnRyb192cDlfZGVjX2V4aXQoc3RydWN0IGhhbnRyb19jdHggKmN0 eCk7Cj4gIHZvaWQgaGFudHJvX2cyX2NoZWNrX2lkbGUoc3RydWN0IGhhbnRyb19kZXYgKnZwdSk7 Cj4gIAo+ICAjZW5kaWYgLyogSEFOVFJPX0hXX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy8KbWVk aWEvaGFudHJvL2hhbnRyb192NGwyLmMKPiBpbmRleCBkMWYwNjBjNTVmZWQuLmU0YjA2NDViYTZm YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192NGwy LmMKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192NGwyLmMKPiBA QCAtMjk5LDYgKzI5OSwxMSBAQCBzdGF0aWMgaW50IGhhbnRyb190cnlfZm10KGNvbnN0IHN0cnVj dCBoYW50cm9fY3R4ICpjdHgsCj4gIAkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSAr PQo+ICAJCQkJaGFudHJvX2gyNjRfbXZfc2l6ZShwaXhfbXAtCj53aWR0aCwKPiAgCQkJCQkJICAg IHBpeF9tcC0KPmhlaWdodCk7Cj4gKwkJZWxzZSBpZiAoY3R4LT52cHVfc3JjX2ZtdC0+Zm91cmNj ID09IApWNEwyX1BJWF9GTVRfVlA5X0ZSQU1FICYmCj4gKwkJCSAhaGFudHJvX25lZWRzX3Bvc3Rw cm9jKGN0eCwgZm10KSkKPiArCQkJcGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlICs9Cj4g KwkJCQloYW50cm9fdnA5X212X3NpemUocGl4X21wLT53aWR0aCwKPiArCQkJCQkJICAgcGl4X21w LQo+aGVpZ2h0KTsKPiAgCX0gZWxzZSBpZiAoIXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFn ZSkgewo+ICAJCS8qCj4gIAkJICogRm9yIGNvZGVkIGZvcm1hdHMgdGhlIGFwcGxpY2F0aW9uIGNh biBzcGVjaWZ5Cj4gQEAgLTQwNyw2ICs0MTIsNyBAQCBoYW50cm9fdXBkYXRlX3JlcXVpcmVzX3Jl cXVlc3Qoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgCnUzMiBmb3VyY2MpCj4gIAljYXNlIFY0TDJf UElYX0ZNVF9WUDhfRlJBTUU6Cj4gIAljYXNlIFY0TDJfUElYX0ZNVF9IMjY0X1NMSUNFOgo+ICAJ Y2FzZSBWNEwyX1BJWF9GTVRfSEVWQ19TTElDRToKPiArCWNhc2UgVjRMMl9QSVhfRk1UX1ZQOV9G UkFNRToKPiAgCQljdHgtPmZoLm0ybV9jdHgtPm91dF9xX2N0eC5xLnJlcXVpcmVzX3JlcXVlc3Rz ID0gdHJ1ZTsKPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5jIGIvZHJpdmVycy9zdGFnaW5nLwptZWRp YS9oYW50cm8vaGFudHJvX3ZwOS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLjU2NmNkMzc2YzA5Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuYwo+IEBAIC0wLDAgKzEsMjQwIEBACj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIEhhbnRybyBWUDkg Y29kZWMgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMSBDb2xsYWJvcmEgTHRk Lgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bWVk aWEvdjRsMi1tZW0ybWVtLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaGFudHJvLmgiCj4gKyNpbmNsdWRl ICJoYW50cm9faHcuaCIKPiArI2luY2x1ZGUgImhhbnRyb192cDkuaCIKPiArCj4gKyNkZWZpbmUg UE9XMih4KSAoMSA8PCAoeCkpCj4gKwo+ICsjZGVmaW5lIE1BWF9MT0cyX1RJTEVfQ09MVU1OUyA2 Cj4gKyNkZWZpbmUgTUFYX05VTV9USUxFX0NPTFMgUE9XMihNQVhfTE9HMl9USUxFX0NPTFVNTlMp Cj4gKyNkZWZpbmUgTUFYX1RJTEVfQ09MUyAyMAo+ICsjZGVmaW5lIE1BWF9USUxFX1JPV1MgMjIK PiArCj4gK3N0YXRpYyBzaXplX3QgaGFudHJvX3ZwOV90aWxlX2ZpbHRlcl9zaXplKHVuc2lnbmVk IGludCBoZWlnaHQpCj4gK3sKPiArCXUzMiBoLCBoZWlnaHQzMiwgc2l6ZTsKPiArCj4gKwloID0g cm91bmR1cChoZWlnaHQsIDgpOwo+ICsKPiArCWhlaWdodDMyID0gcm91bmR1cChoLCA2NCk7Cj4g KwlzaXplID0gMjQgKiBoZWlnaHQzMiAqIChNQVhfTlVNX1RJTEVfQ09MUyAtIDEpOyAvKiBsdW1h OiA4LCBjaHJvbWE6IAo4ICsgOCAqLwo+ICsKPiArCXJldHVybiBzaXplOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc2l6ZV90IGhhbnRyb192cDlfYnNkX2NvbnRyb2xfc2l6ZSh1bnNpZ25lZCBpbnQgaGVp Z2h0KQo+ICt7Cj4gKwl1MzIgaCwgaGVpZ2h0MzI7Cj4gKwo+ICsJaCA9IHJvdW5kdXAoaGVpZ2h0 LCA4KTsKPiArCWhlaWdodDMyID0gcm91bmR1cChoLCA2NCk7Cj4gKwo+ICsJcmV0dXJuIDE2ICog KGhlaWdodDMyIC8gNCkgKiAoTUFYX05VTV9USUxFX0NPTFMgLSAxKTsKPiArfQo+ICsKPiArc3Rh dGljIHNpemVfdCBoYW50cm9fdnA5X3NlZ21lbnRfbWFwX3NpemUodW5zaWduZWQgaW50IHdpZHRo LCB1bnNpZ25lZCBpbnQgCmhlaWdodCkKPiArewo+ICsJdTMyIHcsIGg7Cj4gKwlpbnQgbnVtX2N0 YnM7Cj4gKwo+ICsJdyA9IHJvdW5kdXAod2lkdGgsIDgpOwo+ICsJaCA9IHJvdW5kdXAoaGVpZ2h0 LCA4KTsKPiArCW51bV9jdGJzID0gKCh3ICsgNjMpIC8gNjQpICogKChoICsgNjMpIC8gNjQpOwo+ ICsKPiArCXJldHVybiBudW1fY3RicyAqIDMyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNp emVfdCBoYW50cm9fdnA5X3Byb2JfdGFiX3NpemUodm9pZCkKPiArewo+ICsJcmV0dXJuIHJvdW5k dXAoc2l6ZW9mKHN0cnVjdCBoYW50cm9fZzJfYWxsX3Byb2JzKSwgMTYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lIHNpemVfdCBoYW50cm9fdnA5X2NvdW50X3RhYl9zaXplKHZvaWQpCj4gK3sK PiArCXJldHVybiByb3VuZHVwKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX2NvdW50cyksIDE2KTsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSBzaXplX3QgaGFudHJvX3ZwOV90aWxlX2luZm9fc2l6ZSh2 b2lkKQo+ICt7Cj4gKwlyZXR1cm4gcm91bmR1cCgoTUFYX1RJTEVfQ09MUyAqIE1BWF9USUxFX1JP V1MgKiA0ICogc2l6ZW9mKHUxNikgKyAKMTUgKyAxNikgJiB+MHhmLCAxNik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkICpnZXRfY29lZmZzX2FycihzdHJ1Y3Qgc3ltYm9sX2NvdW50cyAqY250cywg aW50IGksIGludCBqLCBpbnQgaywgCmludCBsLCBpbnQgbSkKPiArewo+ICsJaWYgKGkgPT0gMCkK PiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmc1tqXVtrXVtsXVttXTsKPiArCj4gKwlpZiAo aSA9PSAxKQo+ICsJCXJldHVybiAmY250cy0+Y291bnRfY29lZmZzOHg4W2pdW2tdW2xdW21dOwo+ ICsKPiArCWlmIChpID09IDIpCj4gKwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnMxNngxNltq XVtrXVtsXVttXTsKPiArCj4gKwlpZiAoaSA9PSAzKQo+ICsJCXJldHVybiAmY250cy0+Y291bnRf Y29lZmZzMzJ4MzJbal1ba11bbF1bbV07Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkICpnZXRfZW9iczEoc3RydWN0IHN5bWJvbF9jb3VudHMgKmNudHMsIGludCBp LCBpbnQgaiwgaW50IGssIGludCAKbCwgaW50IG0pCj4gK3sKPiArCWlmIChpID09IDApCj4gKwkJ cmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnNbal1ba11bbF1bbV1bM107Cj4gKwo+ICsJaWYgKGkg PT0gMSkKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczh4OFtqXVtrXVtsXVttXVszXTsK PiArCj4gKwlpZiAoaSA9PSAyKQo+ICsJCXJldHVybiAmY250cy0+Y291bnRfY29lZmZzMTZ4MTZb al1ba11bbF1bbV1bM107Cj4gKwo+ICsJaWYgKGkgPT0gMykKPiArCQlyZXR1cm4gJmNudHMtPmNv dW50X2NvZWZmczMyeDMyW2pdW2tdW2xdW21dWzNdOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9 Cj4gKwo+ICsjZGVmaW5lIElOTkVSX0xPT1AgXAo+ICsJZG8gewkJCQkJCQkKCQkJXAo+ICsJCWZv ciAobSA9IDA7IG0gPCBBUlJBWV9TSVpFKHZwOV9jdHgtPmNudHMuY29lZmZbaV1bMF1bMF0KWzBd KTsgKyttKSB7CVwKPiArCQkJdnA5X2N0eC0+Y250cy5jb2VmZltpXVtqXVtrXVtsXVttXSA9CQkK CQlcCj4gKwkJCQlnZXRfY29lZmZzX2FycihjbnRzLCBpLCBqLCBrLCBsLCAKbSk7CQkJXAo+ICsJ CQl2cDlfY3R4LT5jbnRzLmVvYltpXVtqXVtrXVtsXVttXVswXSA9CQkKCQlcCj4gKwkJCQkmY250 cy0+Y291bnRfZW9ic1tpXVtqXVtrXVtsXVttXTsJCgkJXAo+ICsJCQl2cDlfY3R4LT5jbnRzLmVv YltpXVtqXVtrXVtsXVttXVsxXSA9CQkKCQlcCj4gKwkJCQlnZXRfZW9iczEoY250cywgaSwgaiwg aywgbCwgbSk7CQoJCQlcCj4gKwkJfQkJCQkJCQoJCQlcCj4gKwl9IHdoaWxlICgwKQo+ICsKPiAr c3RhdGljIHZvaWQgaW5pdF92NGwyX3ZwOV9jb3VudF90Ymwoc3RydWN0IGhhbnRyb19jdHggKmN0 eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgt PnZwOV9kZWM7Cj4gKwlzdHJ1Y3Qgc3ltYm9sX2NvdW50cyAqY250cyA9IHZwOV9jdHgtPm1pc2Mu Y3B1ICsgdnA5X2N0eC0KPmN0eF9jb3VudGVyc19vZmZzZXQ7Cj4gKwlpbnQgaSwgaiwgaywgbCwg bTsKPiArCj4gKwl2cDlfY3R4LT5jbnRzLnBhcnRpdGlvbiA9ICZjbnRzLT5wYXJ0aXRpb25fY291 bnRzOwo+ICsJdnA5X2N0eC0+Y250cy5za2lwID0gJmNudHMtPm1ic2tpcF9jb3VudDsKPiArCXZw OV9jdHgtPmNudHMuaW50cmFfaW50ZXIgPSAmY250cy0+aW50cmFfaW50ZXJfY291bnQ7Cj4gKwl2 cDlfY3R4LT5jbnRzLnR4MzJwID0gJmNudHMtPnR4MzJ4MzJfY291bnQ7Cj4gKwkvKgo+ICsJICog ZzIgaGFyZHdhcmUgdXNlcyB0eDE2eDE2X2NvdW50WzJdWzNdLCB3aGlsZSB0aGUgYXBpCj4gKwkg KiBleHBlY3RzIHR4MTZwWzJdWzRdLCBzbyB0aGlzIG11c3QgYmUgZXhwbGljaXRseSBjb3BpZWQK PiArCSAqIGludG8gdnA5X2N0eC0+Y250cy50eDE2cCB3aGVuIHBhc3NpbmcgdGhlIGRhdGEgdG8g dGhlCj4gKwkgKiB2cDkgbGlicmFyeSBmdW5jdGlvbgo+ICsJICovCj4gKwl2cDlfY3R4LT5jbnRz LnR4OHAgPSAmY250cy0+dHg4eDhfY291bnQ7Cj4gKwo+ICsJdnA5X2N0eC0+Y250cy55X21vZGUg PSAmY250cy0+c2JfeW1vZGVfY291bnRzOwo+ICsJdnA5X2N0eC0+Y250cy51dl9tb2RlID0gJmNu dHMtPnV2X21vZGVfY291bnRzOwo+ICsJdnA5X2N0eC0+Y250cy5jb21wID0gJmNudHMtPmNvbXBf aW50ZXJfY291bnQ7Cj4gKwl2cDlfY3R4LT5jbnRzLmNvbXBfcmVmID0gJmNudHMtPmNvbXBfcmVm X2NvdW50Owo+ICsJdnA5X2N0eC0+Y250cy5zaW5nbGVfcmVmID0gJmNudHMtPnNpbmdsZV9yZWZf Y291bnQ7Cj4gKwl2cDlfY3R4LT5jbnRzLmZpbHRlciA9ICZjbnRzLT5zd2l0Y2hhYmxlX2ludGVy cF9jb3VudHM7Cj4gKwl2cDlfY3R4LT5jbnRzLm12X2pvaW50ID0gJmNudHMtPm12X2NvdW50cy5q b2ludHM7Cj4gKwl2cDlfY3R4LT5jbnRzLnNpZ24gPSAmY250cy0+bXZfY291bnRzLnNpZ247Cj4g Kwl2cDlfY3R4LT5jbnRzLmNsYXNzZXMgPSAmY250cy0+bXZfY291bnRzLmNsYXNzZXM7Cj4gKwl2 cDlfY3R4LT5jbnRzLmNsYXNzMCA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3MwOwo+ICsJdnA5X2N0 eC0+Y250cy5iaXRzID0gJmNudHMtPm12X2NvdW50cy5iaXRzOwo+ICsJdnA5X2N0eC0+Y250cy5j bGFzczBfZnAgPSAmY250cy0+bXZfY291bnRzLmNsYXNzMF9mcDsKPiArCXZwOV9jdHgtPmNudHMu ZnAgPSAmY250cy0+bXZfY291bnRzLmZwOwo+ICsJdnA5X2N0eC0+Y250cy5jbGFzczBfaHAgPSAm Y250cy0+bXZfY291bnRzLmNsYXNzMF9ocDsKPiArCXZwOV9jdHgtPmNudHMuaHAgPSAmY250cy0+ bXZfY291bnRzLmhwOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwOV9jdHgt PmNudHMuY29lZmYpOyArK2kpCj4gKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUodnA5X2N0 eC0+Y250cy5jb2VmZltpXSk7ICsraikKPiArCQkJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUo dnA5X2N0eC0KPmNudHMuY29lZmZbaV1bMF0pOyArK2spCj4gKwkJCQlmb3IgKGwgPSAwOyBsIDwg CkFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5jb2VmZltpXVswXVswXSk7ICsrbCkKPiArCQkJCQlJ Tk5FUl9MT09QOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX3ZwOV9kZWNfaW5pdChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7 Cj4gKwljb25zdCBzdHJ1Y3QgaGFudHJvX3ZhcmlhbnQgKnZhcmlhbnQgPSB2cHUtPnZhcmlhbnQ7 Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfZGVjID0gJmN0eC0+dnA5X2Rl YzsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqdGlsZV9lZGdlID0gJnZwOV9kZWMtPnRpbGVf ZWRnZTsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqc2VnbWVudF9tYXAgPSAmdnA5X2RlYy0+ c2VnbWVudF9tYXA7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5X2RlYy0+ bWlzYzsKPiArCXUzMiBpLCBtYXhfd2lkdGgsIG1heF9oZWlnaHQsIHNpemU7Cj4gKwo+ICsJaWYg KHZhcmlhbnQtPm51bV9kZWNfZm10cyA8IDEpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IHZhcmlhbnQtPm51bV9kZWNfZm10czsgKytpKQo+ICsJCWlmICh2YXJp YW50LT5kZWNfZm10c1tpXS5mb3VyY2MgPT0gClY0TDJfUElYX0ZNVF9WUDlfRlJBTUUpCj4gKwkJ CWJyZWFrOwo+ICsKPiArCWlmIChpID09IHZhcmlhbnQtPm51bV9kZWNfZm10cykKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwltYXhfd2lkdGggPSB2cHUtPnZhcmlhbnQtPmRlY19mbXRzW2ld LmZybXNpemUubWF4X3dpZHRoOwo+ICsJbWF4X2hlaWdodCA9IHZwdS0+dmFyaWFudC0+ZGVjX2Zt dHNbaV0uZnJtc2l6ZS5tYXhfaGVpZ2h0Owo+ICsKPiArCXNpemUgPSBoYW50cm9fdnA5X3RpbGVf ZmlsdGVyX3NpemUobWF4X2hlaWdodCk7Cj4gKwl2cDlfZGVjLT5ic2RfY3RybF9vZmZzZXQgPSBz aXplOwo+ICsJc2l6ZSArPSBoYW50cm9fdnA5X2JzZF9jb250cm9sX3NpemUobWF4X2hlaWdodCk7 Cj4gKwo+ICsJdGlsZV9lZGdlLT5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsIHNp emUsICZ0aWxlX2VkZ2UtCj5kbWEsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF0aWxlX2VkZ2UtPmNw dSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl0aWxlX2VkZ2UtPnNpemUgPSBzaXplOwo+ ICsJbWVtc2V0KHRpbGVfZWRnZS0+Y3B1LCAwLCBzaXplKTsKPiArCj4gKwlzaXplID0gaGFudHJv X3ZwOV9zZWdtZW50X21hcF9zaXplKG1heF93aWR0aCwgbWF4X2hlaWdodCk7Cj4gKwl2cDlfZGVj LT5zZWdtZW50X21hcF9zaXplID0gc2l6ZTsKPiArCXNpemUgKj0gMjsgLyogd2UgbmVlZCB0d28g YXJlYXMgb2YgdGhpcyBzaXplLCB1c2VkIGFsdGVybmF0ZWx5ICovCj4gKwo+ICsJc2VnbWVudF9t YXAtPmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwgc2l6ZSwgJnNlZ21lbnRfbWFw LQo+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc2VnbWVudF9tYXAtPmNwdSkKPiArCQlnb3Rv IGVycl9zZWdtZW50X21hcDsKPiArCj4gKwlzZWdtZW50X21hcC0+c2l6ZSA9IHNpemU7Cj4gKwlt ZW1zZXQoc2VnbWVudF9tYXAtPmNwdSwgMCwgc2l6ZSk7Cj4gKwo+ICsJc2l6ZSA9IGhhbnRyb192 cDlfcHJvYl90YWJfc2l6ZSgpOwo+ICsJdnA5X2RlYy0+Y3R4X2NvdW50ZXJzX29mZnNldCA9IHNp emU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlfY291bnRfdGFiX3NpemUoKTsKPiArCXZwOV9kZWMt PnRpbGVfaW5mb19vZmZzZXQgPSBzaXplOwo+ICsJc2l6ZSArPSBoYW50cm9fdnA5X3RpbGVfaW5m b19zaXplKCk7Cj4gKwo+ICsJbWlzYy0+Y3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2 LCBzaXplLCAmbWlzYy0+ZG1hLCAKR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW1pc2MtPmNwdSkKPiAr CQlnb3RvIGVycl9taXNjOwo+ICsKPiArCW1pc2MtPnNpemUgPSBzaXplOwo+ICsJbWVtc2V0KG1p c2MtPmNwdSwgMCwgc2l6ZSk7Cj4gKwo+ICsJaW5pdF92NGwyX3ZwOV9jb3VudF90YmwoY3R4KTsK PiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9taXNjOgo+ICsJZG1hX2ZyZWVfY29oZXJlbnQo dnB1LT5kZXYsIHNlZ21lbnRfbWFwLT5zaXplLCBzZWdtZW50X21hcC0+Y3B1LCAKc2VnbWVudF9t YXAtPmRtYSk7Cj4gKwo+ICtlcnJfc2VnbWVudF9tYXA6Cj4gKwlkbWFfZnJlZV9jb2hlcmVudCh2 cHUtPmRldiwgdGlsZV9lZGdlLT5zaXplLCB0aWxlX2VkZ2UtPmNwdSwgCnRpbGVfZWRnZS0+ZG1h KTsKPiArCj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiArdm9pZCBoYW50cm9fdnA5X2Rl Y19leGl0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGV2 ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9k ZWMgPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICp0aWxlX2VkZ2Ug PSAmdnA5X2RlYy0+dGlsZV9lZGdlOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50 X21hcCA9ICZ2cDlfZGVjLT5zZWdtZW50X21hcDsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAq bWlzYyA9ICZ2cDlfZGVjLT5taXNjOwo+ICsKPiArCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2 LCBtaXNjLT5zaXplLCBtaXNjLT5jcHUsIG1pc2MtPmRtYSk7Cj4gKwlkbWFfZnJlZV9jb2hlcmVu dCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNlZ21lbnRfbWFwLT5jcHUsIApzZWdtZW50 X21hcC0+ZG1hKTsKPiArCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCB0aWxlX2VkZ2UtPnNp emUsIHRpbGVfZWRnZS0+Y3B1LCAKdGlsZV9lZGdlLT5kbWEpOwo+ICt9Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oIGIvZHJpdmVycy9zdGFn aW5nLwptZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLmM3ZjRiZDNmZjhkZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaAo+IEBAIC0wLDAgKzEsMTAz IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8qCj4gKyAq IEhhbnRybyBWUDkgY29kZWMgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMSBD b2xsYWJvcmEgTHRkLgo+ICsgKi8KPiArCj4gK3N0cnVjdCBoYW50cm9fZzJfbXZfcHJvYnMgewo+ ICsJdTggam9pbnRbM107Cj4gKwl1OCBzaWduWzJdOwo+ICsJdTggY2xhc3MwX2JpdFsyXVsxXTsK PiArCXU4IGZyWzJdWzNdOwo+ICsJdTggY2xhc3MwX2hwWzJdOwo+ICsJdTggaHBbMl07Cj4gKwl1 OCBjbGFzc2VzWzJdWzEwXTsKPiArCXU4IGNsYXNzMF9mclsyXVsyXVszXTsKPiArCXU4IGJpdHNb Ml1bMTBdOwo+ICt9Owo+ICsKPiArc3RydWN0IGhhbnRyb19nMl9wcm9icyB7Cj4gKwl1OCBpbnRl cl9tb2RlWzddWzRdOwo+ICsJdTggaXNfaW50ZXJbNF07Cj4gKwl1OCB1dl9tb2RlWzEwXVs4XTsK PiArCXU4IHR4OFsyXVsxXTsKPiArCXU4IHR4MTZbMl1bMl07Cj4gKwl1OCB0eDMyWzJdWzNdOwo+ ICsJdTggeV9tb2RlX3RhaWxbNF1bMV07Cj4gKwl1OCB5X21vZGVbNF1bOF07Cj4gKwl1OCBwYXJ0 aXRpb25bMl1bMTZdWzRdOyAvKiBba2V5ZnJhbWVdW11bXSwgW2ludGVyXVtdW10gKi8KPiArCXU4 IHV2X21vZGVfdGFpbFsxMF1bMV07Cj4gKwl1OCBpbnRlcnBfZmlsdGVyWzRdWzJdOwo+ICsJdTgg Y29tcF9tb2RlWzVdOwo+ICsJdTggc2tpcFszXTsKPiArCj4gKwl1OCBwYWQxWzFdOwo+ICsKPiAr CXN0cnVjdCBoYW50cm9fZzJfbXZfcHJvYnMgbXY7Cj4gKwo+ICsJdTggc2luZ2xlX3JlZls1XVsy XTsKPiArCXU4IGNvbXBfcmVmWzVdOwo+ICsKPiArCXU4IHBhZDJbMTddOwo+ICsKPiArCXU4IGNv ZWZbNF1bMl1bMl1bNl1bNl1bNF07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaGFudHJvX2cyX2FsbF9w cm9icyB7Cj4gKwl1OCBrZl95X21vZGVfcHJvYlsxMF1bMTBdWzhdOwo+ICsKPiArCXU4IGtmX3lf bW9kZV9wcm9iX3RhaWxbMTBdWzEwXVsxXTsKPiArCXU4IHJlZl9wcmVkX3Byb2JzWzNdOwo+ICsJ dTggbWJfc2VnbWVudF90cmVlX3Byb2JzWzddOwo+ICsJdTggc2VnbWVudF9wcmVkX3Byb2JzWzNd Owo+ICsJdTggcmVmX3Njb3Jlc1s0XTsKPiArCXU4IHByb2JfY29tcHByZWRbMl07Cj4gKwo+ICsJ dTggcGFkMVs5XTsKPiArCj4gKwl1OCBrZl91dl9tb2RlX3Byb2JbMTBdWzhdOwo+ICsJdTgga2Zf dXZfbW9kZV9wcm9iX3RhaWxbMTBdWzFdOwo+ICsKPiArCXU4IHBhZDJbNl07Cj4gKwo+ICsJc3Ry dWN0IGhhbnRyb19nMl9wcm9icyBwcm9iczsKPiArfTsKPiArCj4gK3N0cnVjdCBtdl9jb3VudHMg ewo+ICsJdTMyIGpvaW50c1s0XTsKPiArCXUzMiBzaWduWzJdWzJdOwo+ICsJdTMyIGNsYXNzZXNb Ml1bMTFdOwo+ICsJdTMyIGNsYXNzMFsyXVsyXTsKPiArCXUzMiBiaXRzWzJdWzEwXVsyXTsKPiAr CXUzMiBjbGFzczBfZnBbMl1bMl1bNF07Cj4gKwl1MzIgZnBbMl1bNF07Cj4gKwl1MzIgY2xhc3Mw X2hwWzJdWzJdOwo+ICsJdTMyIGhwWzJdWzJdOwo+ICt9Owo+ICsKPiArc3RydWN0IHN5bWJvbF9j b3VudHMgewo+ICsJdTMyIGludGVyX21vZGVfY291bnRzWzddWzNdWzJdOwo+ICsJdTMyIHNiX3lt b2RlX2NvdW50c1s0XVsxMF07Cj4gKwl1MzIgdXZfbW9kZV9jb3VudHNbMTBdWzEwXTsKPiArCXUz MiBwYXJ0aXRpb25fY291bnRzWzE2XVs0XTsKPiArCXUzMiBzd2l0Y2hhYmxlX2ludGVycF9jb3Vu dHNbNF1bM107Cj4gKwl1MzIgaW50cmFfaW50ZXJfY291bnRbNF1bMl07Cj4gKwl1MzIgY29tcF9p bnRlcl9jb3VudFs1XVsyXTsKPiArCXUzMiBzaW5nbGVfcmVmX2NvdW50WzVdWzJdWzJdOwo+ICsJ dTMyIGNvbXBfcmVmX2NvdW50WzVdWzJdOwo+ICsJdTMyIHR4MzJ4MzJfY291bnRbMl1bNF07Cj4g Kwl1MzIgdHgxNngxNl9jb3VudFsyXVszXTsKPiArCXUzMiB0eDh4OF9jb3VudFsyXVsyXTsKPiAr CXUzMiBtYnNraXBfY291bnRbM11bMl07Cj4gKwo+ICsJc3RydWN0IG12X2NvdW50cyBtdl9jb3Vu dHM7Cj4gKwo+ICsJdTMyIGNvdW50X2NvZWZmc1syXVsyXVs2XVs2XVs0XTsKPiArCXUzMiBjb3Vu dF9jb2VmZnM4eDhbMl1bMl1bNl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29lZmZzMTZ4MTZbMl1b Ml1bNl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29lZmZzMzJ4MzJbMl1bMl1bNl1bNl1bNF07Cj4g Kwo+ICsJdTMyIGNvdW50X2VvYnNbNF1bMl1bMl1bNl1bNl07Cj4gK307Cj4gKwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jIGIvZHJpdmVy cy9zdGFnaW5nLwptZWRpYS9oYW50cm8vaW14OG1fdnB1X2h3LmMKPiBpbmRleCBhNDBiMTYxZTU5 NTYuLjQ1NWExMDdmZmIwMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFu dHJvL2lteDhtX3ZwdV9ody5jCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9p bXg4bV92cHVfaHcuYwo+IEBAIC0xNTAsNiArMTUwLDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aGFudHJvX2ZtdCBpbXg4bV92cHVfZzJfZGVjX2ZtdHNbXSAKPSB7Cj4gIAkJCS5zdGVwX2hlaWdo dCA9IE1CX0RJTSwKPiAgCQl9LAo+ICAJfSwKPiArCXsKPiArCQkuZm91cmNjID0gVjRMMl9QSVhf Rk1UX1ZQOV9GUkFNRSwKPiArCQkuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX1ZQOV9ERUMsCj4g KwkJLm1heF9kZXB0aCA9IDIsCj4gKwkJLmZybXNpemUgPSB7Cj4gKwkJCS5taW5fd2lkdGggPSA0 OCwKPiArCQkJLm1heF93aWR0aCA9IDM4NDAsCj4gKwkJCS5zdGVwX3dpZHRoID0gTUJfRElNLAo+ ICsJCQkubWluX2hlaWdodCA9IDQ4LAo+ICsJCQkubWF4X2hlaWdodCA9IDIxNjAsCj4gKwkJCS5z dGVwX2hlaWdodCA9IE1CX0RJTSwKPiArCQl9LAo+ICsJfSwKPiAgfTsKPiAgCj4gIHN0YXRpYyBp cnFyZXR1cm5fdCBpbXg4bV92cHVfZzFfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPiBAQCAt MjQxLDYgKzI1NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19jb2RlY19vcHMgCmlt eDhtcV92cHVfZzJfY29kZWNfb3BzW10gPSB7Cj4gIAkJLmluaXQgPSBoYW50cm9faGV2Y19kZWNf aW5pdCwKPiAgCQkuZXhpdCA9IGhhbnRyb19oZXZjX2RlY19leGl0LAo+ICAJfSwKPiArCVtIQU5U Uk9fTU9ERV9WUDlfREVDXSA9IHsKPiArCQkucnVuID0gaGFudHJvX2cyX3ZwOV9kZWNfcnVuLAo+ ICsJCS5kb25lID0gaGFudHJvX2cyX3ZwOV9kZWNfZG9uZSwKPiArCQkucmVzZXQgPSBpbXg4bV92 cHVfZzJfcmVzZXQsCj4gKwkJLmluaXQgPSBoYW50cm9fdnA5X2RlY19pbml0LAo+ICsJCS5leGl0 ID0gaGFudHJvX3ZwOV9kZWNfZXhpdCwKPiArCX0sCj4gIH07Cj4gIAo+ICAvKgo+IEBAIC0yODEs NyArMzAxLDcgQEAgY29uc3Qgc3RydWN0IGhhbnRyb192YXJpYW50IGlteDhtcV92cHVfZzJfdmFy aWFudCA9IHsKPiAgCS5kZWNfb2Zmc2V0ID0gMHgwLAo+ICAJLmRlY19mbXRzID0gaW14OG1fdnB1 X2cyX2RlY19mbXRzLAo+ICAJLm51bV9kZWNfZm10cyA9IEFSUkFZX1NJWkUoaW14OG1fdnB1X2cy X2RlY19mbXRzKSwKPiAtCS5jb2RlYyA9IEhBTlRST19IRVZDX0RFQ09ERVIsCj4gKwkuY29kZWMg PSBIQU5UUk9fSEVWQ19ERUNPREVSIHwgSEFOVFJPX1ZQOV9ERUNPREVSLAo+ICAJLmNvZGVjX29w cyA9IGlteDhtcV92cHVfZzJfY29kZWNfb3BzLAo+ICAJLmluaXQgPSBpbXg4bXFfdnB1X2h3X2lu aXQsCj4gIAkucnVudGltZV9yZXN1bWUgPSBpbXg4bXFfcnVudGltZV9yZXN1bWUsCj4gLS0gCj4g Mi4xNy4xCj4gCj4gCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK