From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 5/5] drm/msm: Add A6XX device support Date: Mon, 11 Jun 2018 12:26:04 -0600 Message-ID: <20180611182604.30467-6-jcrouse@codeaurora.org> References: <20180611182604.30467-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180611182604.30467-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBBNlhYIGZhbWlseSBvZiBBZHJlbm8gR1BVcy4gVGhlIGJpZ2dl c3QgYWRkaXRpb24KaXMgdGhlIEdNVSAoR3JhcGhpY3MgTWFuYWdlbWVudCBVbml0KSB3aGljaCB0 YWtlcyBvdmVyIG1vc3Qgb2YgdGhlCnBvd2VyIG1hbmFnZW1lbnQgb2YgdGhlIEdQVSBpdHNlbGYg YnV0IGluIGEgaXJvbmljIHR3aXN0IG9mIGZhdGUKbmVlZHMgYSBnb29kbHkgYW1vdW50IG9mIG1h bmFnZW1lbnQgaXRzZWxmLiBBZGQgc3VwcG9ydCBmb3IgdGhlCkE2WFggY29yZSBjb2RlLCB0aGUg R01VIGFuZCB0aGUgSEZJIChoYXJkd2FyZSBmaXJtd2FyZSBpbnRlcmZhY2UpCnF1ZXVlIHRoYXQg dGhlIENQVSB1c2VzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEdNVS4KClNpZ25lZC1vZmYtYnk6 IEpvcmRhbiBDcm91c2UgPGpjcm91c2VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAgMyArCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dtdS5jICAgICAgfCAxMTcyICsrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oICAgICAgfCAgMTYyICsrKwogZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYyAgICAgIHwgIDgwNyArKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaCAgICAgIHwgICA2MCAr CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5jICAgICAgfCAgNDM1ICsrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5oICAgICAgfCAgMTI3ICsr KwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jIHwgICAxMiArCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMgICAgfCAgICAyICstCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmggICAgfCAgICA0ICsKIGRyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2dwdS5jICAgICAgICAgICAgICB8ICAgIDIgKy0KIDExIGZpbGVzIGNo YW5nZWQsIDI3ODQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9N YWtlZmlsZQppbmRleCBjZDQwYzA1MGIyZDcuLjRhZmZjNjY1YzBkZSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2Vm aWxlCkBAIC0xMCw2ICsxMCw5IEBAIG1zbS15IDo9IFwKIAlhZHJlbm8vYTV4eF9ncHUubyBcCiAJ YWRyZW5vL2E1eHhfcG93ZXIubyBcCiAJYWRyZW5vL2E1eHhfcHJlZW1wdC5vIFwKKwlhZHJlbm8v YTZ4eF9ncHUubyBcCisJYWRyZW5vL2E2eHhfZ211Lm8gXAorCWFkcmVuby9hNnh4X2hmaS5vIFwK IAloZG1pL2hkbWkubyBcCiAJaGRtaS9oZG1pX2F1ZGlvLm8gXAogCWhkbWkvaGRtaV9icmlkZ2Uu byBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjllY2Q3YWZlNjMyMQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmMKQEAgLTAsMCArMSwxMTcyIEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyogQ29weXJpZ2h0IChjKSAyMDE3 LTIwMTggVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisKKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRl IDxsaW51eC9wbV9vcHAuaD4KKyNpbmNsdWRlIDxzb2MvcWNvbS9jbWQtZGIuaD4KKworI2luY2x1 ZGUgImE2eHhfZ3B1LmgiCisjaW5jbHVkZSAiYTZ4eF9nbXUueG1sLmgiCisKK3N0YXRpYyBpcnFy ZXR1cm5fdCBhNnh4X2dtdV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYTZ4 eF9nbXUgKmdtdSA9IGRhdGE7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGdtdV9yZWFkKGdt dSwgUkVHX0E2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX1NUQVRVUyk7CisJZ211X3dyaXRlKGdt dSwgUkVHX0E2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX0NMUiwgc3RhdHVzKTsKKworCWlmIChz dGF0dXMgJiBBNlhYX0dNVV9BT19IT1NUX0lOVEVSUlVQVF9TVEFUVVNfV0RPR19CSVRFKSB7CisJ CWRldl9lcnJfcmF0ZWxpbWl0ZWQoZ211LT5kZXYsICJHTVUgd2F0Y2hkb2cgZXhwaXJlZFxuIik7 CisKKwkJLyogVGVtcG9yYXJ5IHVudGlsIHdlIGNhbiByZWNvdmVyIHNhZmVseSAqLworCQlCVUco KTsKKwl9CisKKwlpZiAoc3RhdHVzICYgIEE2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX1NUQVRV U19IT1NUX0FIQl9CVVNfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZ211LT5kZXYsICJH TVUgQUhCIGJ1cyBlcnJvclxuIik7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9HTVVfQU9fSE9TVF9J TlRFUlJVUFRfU1RBVFVTX0ZFTkNFX0VSUikKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChnbXUtPmRl diwgIkdNVSBmZW5jZSBlcnJvcjogMHgleFxuIiwKKwkJCWdtdV9yZWFkKGdtdSwgUkVHX0E2WFhf R01VX0FIQl9GRU5DRV9TVEFUVVMpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3Rh dGljIGlycXJldHVybl90IGE2eHhfaGZpX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0 cnVjdCBhNnh4X2dtdSAqZ211ID0gZGF0YTsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gZ211 X3JlYWQoZ211LCBSRUdfQTZYWF9HTVVfR01VMkhPU1RfSU5UUl9JTkZPKTsKKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9HTVVfR01VMkhPU1RfSU5UUl9DTFIsIHN0YXR1cyk7CisKKwlpZiAoc3Rh dHVzICYgQTZYWF9HTVVfR01VMkhPU1RfSU5UUl9JTkZPX01TR1EpCisJCXRhc2tsZXRfc2NoZWR1 bGUoJmdtdS0+aGZpX3Rhc2tsZXQpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfR01VX0dNVTJIT1NU X0lOVFJfSU5GT19DTTNfRkFVTFQpIHsKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChnbXUtPmRldiwg IkdNVSBmaXJtd2FyZSBmYXVsdFxuIik7CisKKwkJLyogVGVtcG9yYXJ5IHVudGlsIHdlIGNhbiBy ZWNvdmVyIHNhZmVseSAqLworCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9 CisKKy8qIENoZWNrIHRvIHNlZSBpZiB0aGUgR1ggcmFpbCBpcyBzdGlsbCBwb3dlcmVkICovCitz dGF0aWMgYm9vbCBhNnh4X2dtdV9neF9pc19vbihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwl1 MzIgdmFsID0gZ211X3JlYWQoZ211LCBSRUdfQTZYWF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRV Uyk7CisKKwlyZXR1cm4gISh2YWwgJgorCQkoQTZYWF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRV U19HWF9ITV9HRFNDX1BPV0VSX09GRiB8CisJCUE2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFU VVNfR1hfSE1fQ0xLX09GRikpOworfQorCitzdGF0aWMgYm9vbCBhNnh4X2dtdV9jaGVja19pZGxl X2xldmVsKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCXUzMiB2YWw7CisJaW50IGxvY2FsID0g Z211LT5pZGxlX2xldmVsOworCisJLyogU1BUUCBhbmQgSUZQQyBib3RoIHJlcG9ydCBhcyBJRlBD ICovCisJaWYgKGdtdS0+aWRsZV9sZXZlbCA9PSBHTVVfSURMRV9TVEFURV9TUFRQKQorCQlsb2Nh bCA9IEdNVV9JRExFX1NUQVRFX0lGUEM7CisKKwl2YWwgPSBnbXVfcmVhZChnbXUsIFJFR19BNlhY X0dQVV9HTVVfQ1hfR01VX1JQTUhfUE9XRVJfU1RBVEUpOworCisJaWYgKHZhbCA9PSBsb2NhbCkg eworCQlpZiAoZ211LT5pZGxlX2xldmVsICE9IEdNVV9JRExFX1NUQVRFX0lGUEMgfHwKKwkJCSFh Nnh4X2dtdV9neF9pc19vbihnbXUpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZh bHNlOworfQorCisvKiBXYWl0IGZvciB0aGUgR01VIHRvIGdldCB0byBpdHMgbW9zdCBpZGxlIHN0 YXRlICovCitpbnQgYTZ4eF9nbXVfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhf Z3B1KQoreworCXN0cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisKKwlyZXR1 cm4gc3Bpbl91bnRpbChhNnh4X2dtdV9jaGVja19pZGxlX2xldmVsKGdtdSkpOworfQorCitzdGF0 aWMgaW50IGE2eHhfZ211X3N0YXJ0KHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCByZXQ7 CisJdTMyIHZhbDsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9DTTNfU1lTUkVTRVQs IDEpOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9DTTNfU1lTUkVTRVQsIDApOworCisJ cmV0ID0gZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX0dNVV9DTTNfRldfSU5JVF9SRVNV TFQsIHZhbCwKKwkJdmFsID09IDB4YmFiZWZhY2UsIDEwMCwgMTAwMDApOworCisJaWYgKHJldCkK KwkJZGV2X2VycihnbXUtPmRldiwgIkdNVSBmaXJtd2FyZSBpbml0YWxpemF0aW9uIHRpbWVkIG91 dFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGE2eHhfZ211X2hmaV9zdGFy dChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlnbXVf cm13KGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NUX0lOVFJfTUFTSywKKwkJQTZYWF9HTVVfR01V MkhPU1RfSU5UUl9JTkZPX01TR1EsIDApOworCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01V X0hGSV9DVFJMX0lOSVQsIDEpOworCisJcmV0ID0gZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19B NlhYX0dNVV9IRklfQ1RSTF9TVEFUVVMsIHZhbCwKKwkJdmFsICYgMSwgMTAwLCAxMDAwMCk7CisJ aWYgKHJldCkKKwkJZGV2X2VycihnbXUtPmRldiwgIlVuYWJsZSB0byBzdGFydCB0aGUgSEZJIHF1 ZXVlc1xuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBUcmlnZ2VyIGEgT09CIChvdXQgb2Yg YmFuZCkgcmVxdWVzdCB0byB0aGUgR01VICovCitpbnQgYTZ4eF9nbXVfc2V0X29vYihzdHJ1Y3Qg YTZ4eF9nbXUgKmdtdSwgZW51bSBhNnh4X2dtdV9vb2Jfc3RhdGUgc3RhdGUpCit7CisJaW50IHJl dDsKKwl1MzIgdmFsOworCWludCByZXF1ZXN0LCBhY2s7CisJY29uc3QgY2hhciAqbmFtZTsKKwor CXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEdNVV9PT0JfR1BVX1NFVDoKKwkJcmVxdWVzdCA9IEdN VV9PT0JfR1BVX1NFVF9SRVFVRVNUOworCQlhY2sgPSBHTVVfT09CX0dQVV9TRVRfQUNLOworCQlu YW1lID0gIkdQVV9TRVQiOworCQlicmVhazsKKwljYXNlIEdNVV9PT0JfQk9PVF9TTFVNQkVSOgor CQlyZXF1ZXN0ID0gR01VX09PQl9CT09UX1NMVU1CRVJfUkVRVUVTVDsKKwkJYWNrID0gR01VX09P Ql9CT09UX1NMVU1CRVJfQUNLOworCQluYW1lID0gIkJPT1RfU0xVTUJFUiI7CisJCWJyZWFrOwor CWNhc2UgR01VX09PQl9EQ1ZTX1NFVDoKKwkJcmVxdWVzdCA9IEdNVV9PT0JfRENWU19SRVFVRVNU OworCQlhY2sgPSBHTVVfT09CX0RDVlNfQUNLOworCQluYW1lID0gIkdQVV9EQ1ZTIjsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVHJpZ2dlciB0aGUg ZXF1ZXN0ZWQgT09CIG9wZXJhdGlvbiAqLworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9I T1NUMkdNVV9JTlRSX1NFVCwgMSA8PCByZXF1ZXN0KTsKKworCS8qIFdhaXQgZm9yIHRoZSBhY2tu b3dsZWRnZSBpbnRlcnJ1cHQgKi8KKwlyZXQgPSBnbXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2 WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GTywgdmFsLAorCQl2YWwgJiAoMSA8PCBhY2spLCAxMDAs IDEwMDAwKTsKKworCWlmIChyZXQpCisJCWRldl9lcnIoZ211LT5kZXYsCisJCQkiVGltZW91dCB3 YWl0aW5nIGZvciBHTVUgT09CIHNldCAlczogMHgleFxuIiwKKwkJCQluYW1lLAorCQkJCWdtdV9y ZWFkKGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GTykpOworCisJLyogQ2xlYXIg dGhlIGFja25vd2xlZGdlIGludGVycnVwdCAqLworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dN VV9HTVUySE9TVF9JTlRSX0NMUiwgMSA8PCBhY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyog Q2xlYXIgYSBwZW5kaW5nIE9PQiBzdGF0ZSBpbiB0aGUgR01VICovCit2b2lkIGE2eHhfZ211X2Ns ZWFyX29vYihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgZW51bSBhNnh4X2dtdV9vb2Jfc3RhdGUgc3Rh dGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgR01VX09PQl9HUFVfU0VUOgorCQlnbXVf d3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfSE9TVDJHTVVfSU5UUl9TRVQsCisJCQkxIDw8IEdNVV9P T0JfR1BVX1NFVF9DTEVBUik7CisJCWJyZWFrOworCWNhc2UgR01VX09PQl9CT09UX1NMVU1CRVI6 CisJCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9IT1NUMkdNVV9JTlRSX1NFVCwKKwkJCTEg PDwgR01VX09PQl9CT09UX1NMVU1CRVJfQ0xFQVIpOworCQlicmVhazsKKwljYXNlIEdNVV9PT0Jf RENWU19TRVQ6CisJCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9IT1NUMkdNVV9JTlRSX1NF VCwKKwkJCTEgPDwgR01VX09PQl9EQ1ZTX0NMRUFSKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBF bmFibGUgQ1BVIGNvbnRyb2wgb2YgU1BUUCBwb3dlciBwb3dlciBjb2xsYXBzZSAqLworc3RhdGlj IGludCBhNnh4X3NwdHByYWNfZW5hYmxlKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCBy ZXQ7CisJdTMyIHZhbDsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9HWF9TUFRQUkFD X1BPV0VSX0NPTlRST0wsIDB4Nzc4MDAwKTsKKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211 LCBSRUdfQTZYWF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRVUywgdmFsLAorCQkodmFsICYgMHgz OCkgPT0gMHgyOCwgMSwgMTAwKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycihnbXUtPmRldiwg IlVuYWJsZSB0byBwb3dlciBvbiBTUFRQUkFDOiAweCV4XG4iLAorCQkJZ211X3JlYWQoZ211LCBS RUdfQTZYWF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRVUykpOworCX0KKworCXJldHVybiAwOwor fQorCisvKiBEaXNhYmxlIENQVSBjb250cm9sIG9mIFNQVFAgcG93ZXIgcG93ZXIgY29sbGFwc2Ug Ki8KK3N0YXRpYyB2b2lkIGE2eHhfc3B0cHJhY19kaXNhYmxlKHN0cnVjdCBhNnh4X2dtdSAqZ211 KQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKworCS8qIE1ha2Ugc3VyZSByZXRlbnRpb24gaXMg b24gKi8KKwlnbXVfcm13KGdtdSwgUkVHX0E2WFhfR1BVX0NDX0dYX0dEU0NSLCAwLCAoMSA8PCAx MSkpOworCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0dYX1NQVFBSQUNfUE9XRVJfQ09O VFJPTCwgMHg3NzgwMDEpOworCisJcmV0ID0gZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhY X0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RBVFVTLCB2YWwsCisJCSh2YWwgJiAweDA0KSwgMTAwLCAx MDAwMCk7CisKKwlpZiAocmV0KQorCQlkZXZfZXJyKGdtdS0+ZGV2LCAiZmFpbGVkIHRvIHBvd2Vy IG9mZiBTUFRQUkFDOiAweCV4XG4iLAorCQkJZ211X3JlYWQoZ211LCBSRUdfQTZYWF9HTVVfU1BU UFJBQ19QV1JfQ0xLX1NUQVRVUykpOworfQorCisvKiBMZXQgdGhlIEdNVSBrbm93IHdlIGFyZSBz dGFydGluZyBhIGJvb3Qgc2VxdWVuY2UgKi8KK3N0YXRpYyBpbnQgYTZ4eF9nbXVfZ2Z4X3JhaWxf b24oc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJdTMyIHZvdGU7CisKKwkvKiBMZXQgdGhlIEdN VSBrbm93IHdlIGFyZSBnZXR0aW5nIHJlYWR5IGZvciBib290ICovCisJZ211X3dyaXRlKGdtdSwg UkVHX0E2WFhfR01VX0JPT1RfU0xVTUJFUl9PUFRJT04sIDApOworCisJLyogQ2hvb3NlIHRoZSAi ZGVmYXVsdCIgcG93ZXIgbGV2ZWwgYXMgdGhlIGhpZ2hlc3QgYXZhaWxhYmxlICovCisJdm90ZSA9 IGdtdS0+Z3hfYXJjX3ZvdGVzW2dtdS0+bnJfZ3B1X2ZyZXFzIC0gMV07CisKKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9HTVVfR1hfVk9URV9JRFgsIHZvdGUgJiAweGZmKTsKKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9HTVVfTVhfVk9URV9JRFgsICh2b3RlID4+IDgpICYgMHhmZik7CisKKwkv KiBMZXQgdGhlIEdNVSBrbm93IHRoZSBib290IHNlcXVlbmNlIGhhcyBzdGFydGVkICovCisJcmV0 dXJuIGE2eHhfZ211X3NldF9vb2IoZ211LCBHTVVfT09CX0JPT1RfU0xVTUJFUik7Cit9CisKKy8q IExldCB0aGUgR01VIGtub3cgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZ28gaW50byBzbHVtYmVyICov CitzdGF0aWMgaW50IGE2eHhfZ211X25vdGlmeV9zbHVtYmVyKHN0cnVjdCBhNnh4X2dtdSAqZ211 KQoreworCWludCByZXQ7CisKKwkvKiBEaXNhYmxlIHRoZSBwb3dlciBjb3VudGVyIHNvIHRoZSBH TVUgaXNuJ3QgYnVzeSAqLworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9DWF9HTVVfUE9X RVJfQ09VTlRFUl9FTkFCTEUsIDApOworCisJLyogRGlzYWJsZSBTUFRQX1BDIGlmIHRoZSBDUFUg aXMgcmVzcG9uc2libGUgZm9yIGl0ICovCisJaWYgKGdtdS0+aWRsZV9sZXZlbCA8IEdNVV9JRExF X1NUQVRFX1NQVFApCisJCWE2eHhfc3B0cHJhY19kaXNhYmxlKGdtdSk7CisKKwkvKiBUZWxsIHRo ZSBHTVUgdG8gZ2V0IHJlYWR5IHRvIHNsdW1iZXIgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HTVVfQk9PVF9TTFVNQkVSX09QVElPTiwgMSk7CisKKwlyZXQgPSBhNnh4X2dtdV9zZXRfb29i KGdtdSwgR01VX09PQl9CT09UX1NMVU1CRVIpOworCWE2eHhfZ211X2NsZWFyX29vYihnbXUsIEdN VV9PT0JfQk9PVF9TTFVNQkVSKTsKKworCWlmICghcmV0KSB7CisJCS8qIENoZWNrIHRvIHNlZSBp ZiB0aGUgR01VIHJlYWxseSBkaWQgc2x1bWJlciAqLworCQlpZiAoZ211X3JlYWQoZ211LCBSRUdf QTZYWF9HUFVfR01VX0NYX0dNVV9SUE1IX1BPV0VSX1NUQVRFKQorCQkJIT0gMHgwZikgeworCQkJ ZGV2X2VycihnbXUtPmRldiwgIlRoZSBHTVUgZGlkIG5vdCBnbyBpbnRvIHNsdW1iZXJcbiIpOwor CQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCS8qIFB1dCBmZW5jZSBpbnRvIGFsbG93 IG1vZGUgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQU9fQUhCX0ZFTkNFX0NUUkws IDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9ycG1oX3N0YXJ0KHN0cnVj dCBhNnh4X2dtdSAqZ211KQoreworCWludCByZXQ7CisJdTMyIHZhbDsKKworCWdtdV93cml0ZShn bXUsIFJFR19BNlhYX0dNVV9SU0NDX0NPTlRST0xfUkVRLCAxIDw8IDEpOworCS8qIFdhaXQgZm9y IHRoZSByZWdpc3RlciB0byBmaW5pc2ggcG9zdGluZyAqLworCXdtYigpOworCisJcmV0ID0gZ211 X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX0dNVV9SU0NDX0NPTlRST0xfQUNLLCB2YWwsCisJ CXZhbCAmICgxIDw8IDEpLCAxMDAsIDEwMDAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ211 LT5kZXYsICJVbmFibGUgdG8gcG93ZXIgb24gdGhlIEdQVSBSU0NcbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9SU0NDX1NFUV9C VVNZX0RSVjAsIHZhbCwKKwkJIXZhbCwgMTAwLCAxMDAwMCk7CisKKwlpZiAoIXJldCkgeworCQln bXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfUlNDQ19DT05UUk9MX1JFUSwgMCk7CisKKwkJLyog UmUtZW5hYmxlIHRoZSBwb3dlciBjb3VudGVyICovCisJCWdtdV93cml0ZShnbXUsIFJFR19BNlhY X0dNVV9DWF9HTVVfUE9XRVJfQ09VTlRFUl9FTkFCTEUsIDEpOworCQlyZXR1cm4gMDsKKwl9CisK KwlkZXZfZXJyKGdtdS0+ZGV2LCAiR1BVIFJTQyBzZXF1ZW5jZSBzdHVjayB3aGlsZSB3YWtpbmcg dXAgdGhlIEdQVVxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9ycG1o X3N0b3Aoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJaW50IHJldDsKKwl1MzIgdmFsOworCisJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1JTQ0NfQ09OVFJPTF9SRVEsIDEpOworCisJcmV0 ID0gZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX0dQVV9SU0NDX1JTQ19TVEFUVVMwX0RS VjAsCisJCXZhbCwgdmFsICYgKDEgPDwgMTYpLCAxMDAsIDEwMDAwKTsKKwlpZiAocmV0KQorCQlk ZXZfZXJyKGdtdS0+ZGV2LCAiVW5hYmxlIHRvIHBvd2VyIG9mZiB0aGUgR1BVIFJTQ1xuIik7CisK KwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfUlNDQ19DT05UUk9MX1JFUSwgMCk7Cit9CisK K3N0YXRpYyB2b2lkIGE2eHhfZ211X3JwbWhfaW5pdChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sK KwkvKiBEaXNhYmxlIFNERSBjbG9jayBnYXRpbmcgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HUFVfUlNDQ19SU0NfU1RBVFVTMF9EUlYwLCBCSVQoMjQpKTsKKworCS8qIFNldHVwIFJTQyBQ REMgaGFuZHNoYWtlIGZvciBzbGVlcCBhbmQgd2FrZXVwICovCisJZ211X3dyaXRlKGdtdSwgUkVH X0E2WFhfUlNDQ19QRENfU0xBVkVfSURfRFJWMCwgMSk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2 WFhfUlNDQ19ISURERU5fVENTX0NNRDBfREFUQSwgMCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2 WFhfUlNDQ19ISURERU5fVENTX0NNRDBfQUREUiwgMCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2 WFhfUlNDQ19ISURERU5fVENTX0NNRDBfREFUQSArIDIsIDApOworCWdtdV93cml0ZShnbXUsIFJF R19BNlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0FERFIgKyAyLCAwKTsKKwlnbXVfd3JpdGUoZ211 LCBSRUdfQTZYWF9SU0NDX0hJRERFTl9UQ1NfQ01EMF9EQVRBICsgNCwgMHg4MDAwMDAwMCk7CisJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19ISURERU5fVENTX0NNRDBfQUREUiArIDQsIDAp OworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfT1ZFUlJJREVfU1RBUlRfQUREUiwgMCk7 CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19QRENfU0VRX1NUQVJUX0FERFIsIDB4NDUy MCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19QRENfTUFUQ0hfVkFMVUVfTE8sIDB4 NDUxMCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19QRENfTUFUQ0hfVkFMVUVfSEks IDB4NDUxNCk7CisKKwkvKiBMb2FkIFJTQyBzZXF1ZW5jZXIgdUNvZGUgZm9yIHNsZWVwIGFuZCB3 YWtldXAgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9SU0NDX1NFUV9NRU1fMF9EUlYwLCAw eGE3YTUwNmEwKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9SU0NDX1NFUV9NRU1fMF9EUlYw ICsgMSwgMHhhMWU2YTZlNyk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19TRVFfTUVN XzBfRFJWMCArIDIsIDB4YTJlMDgxZTEpOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0Nf U0VRX01FTV8wX0RSVjAgKyAzLCAweGU5YTk4MmUyKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9SU0NDX1NFUV9NRU1fMF9EUlYwICsgNCwgMHgwMDIwZThhOCk7CisKKwkvKiBMb2FkIFBEQyBz ZXF1ZW5jZXIgdUNvZGUgZm9yIHBvd2VyIHVwIGFuZCBwb3dlciBkb3duIHNlcXVlbmNlICovCisJ cGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9TRVFfTUVNXzAsIDB4ZmViZWExZTEpOwor CXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfU0VRX01FTV8wICsgMSwgMHhhNWE0YTNh Mik7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9TRVFfTUVNXzAgKyAyLCAweDgz ODJhNmUwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1NFUV9NRU1fMCArIDMs IDB4YmNlM2UyODQpOworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfU0VRX01FTV8w ICsgNCwgMHgwMDIwODFmYyk7CisKKwkvKiBTZXQgVENTIGNvbW1hbmRzIHVzZWQgYnkgUERDIHNl cXVlbmNlIGZvciBsb3cgcG93ZXIgbW9kZXMgKi8KKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9Q RENfR1BVX1RDUzFfQ01EX0VOQUJMRV9CQU5LLCA3KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZY WF9QRENfR1BVX1RDUzFfQ01EX1dBSVRfRk9SX0NNUExfQkFOSywgMCk7CisJcGRjX3dyaXRlKGdt dSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NPTlRST0wsIDApOworCXBkY193cml0ZShnbXUsIFJF R19BNlhYX1BEQ19HUFVfVENTMV9DTUQwX01TR0lELCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211 LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9BRERSLCAweDMwMDEwKTsKKwlwZGNfd3JpdGUo Z211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9EQVRBLCAxKTsKKwlwZGNfd3JpdGUoZ211 LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9NU0dJRCArIDQsIDB4MTAxMDgpOworCXBkY193 cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfVENTMV9DTUQwX0FERFIgKyA0LCAweDMwMDAwKTsK KwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9EQVRBICsgNCwgMHgw KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9NU0dJRCArIDgs IDB4MTAxMDgpOworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfVENTMV9DTUQwX0FE RFIgKyA4LCAweDMwMDgwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFf Q01EMF9EQVRBICsgOCwgMHgwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RD UzNfQ01EX0VOQUJMRV9CQU5LLCA3KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BV X1RDUzNfQ01EX1dBSVRfRk9SX0NNUExfQkFOSywgMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2 WFhfUERDX0dQVV9UQ1MzX0NPTlRST0wsIDApOworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BE Q19HUFVfVENTM19DTUQwX01TR0lELCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZY WF9QRENfR1BVX1RDUzNfQ01EMF9BRERSLCAweDMwMDEwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdf QTZYWF9QRENfR1BVX1RDUzNfQ01EMF9EQVRBLCAyKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZY WF9QRENfR1BVX1RDUzNfQ01EMF9NU0dJRCArIDQsIDB4MTAxMDgpOworCXBkY193cml0ZShnbXUs IFJFR19BNlhYX1BEQ19HUFVfVENTM19DTUQwX0FERFIgKyA0LCAweDMwMDAwKTsKKwlwZGNfd3Jp dGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9EQVRBICsgNCwgMHgzKTsKKwlwZGNf d3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9NU0dJRCArIDgsIDB4MTAxMDgp OworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfVENTM19DTUQwX0FERFIgKyA4LCAw eDMwMDgwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9EQVRB ICsgOCwgMHgzKTsKKworCS8qIFNldHVwIEdQVSBQREMgKi8KKwlwZGNfd3JpdGUoZ211LCBSRUdf QTZYWF9QRENfR1BVX1NFUV9TVEFSVF9BRERSLCAwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZY WF9QRENfR1BVX0VOQUJMRV9QREMsIDB4ODAwMDAwMDEpOworCisJLyogZW5zdXJlIG5vIHdyaXRl cyBoYXBwZW4gYmVmb3JlIHRoZSB1Q29kZSBpcyBmdWxseSB3cml0dGVuICovCisJd21iKCk7Cit9 CisKKy8qCisgKiBUaGUgbG93ZXN0IDE2IGJpdHMgb2YgdGhpcyB2YWx1ZSBhcmUgdGhlIG51bWJl ciBvZiBYTyBjbG9jayBjeWNsZXMgZm9yIG1haW4KKyAqIGh5c3RlcmVzaXMgd2hpY2ggaXMgc2V0 IGF0IDB4MTY4MCBjeWNsZXMgKDMwMCB1cykuICBUaGUgaGlnaGVyIDE2IGJpdHMgYXJlCisgKiBm b3IgdGhlIHNob3J0ZXIgaHlzdGVyZXNpcyB0aGF0IGhhcHBlbnMgYWZ0ZXIgbWFpbiAtIHRoaXMg aXMgMHhhICguNSB1cykKKyAqLworCisjZGVmaW5lIEdNVV9QV1JfQ09MX0hZU1QgMHgwMDBhMTY4 MAorCisvKiBTZXQgdXAgdGhlIGlkbGUgc3RhdGUgZm9yIHRoZSBHTVUgKi8KK3N0YXRpYyB2b2lk IGE2eHhfZ211X3Bvd2VyX2NvbmZpZyhzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwkvKiBEaXNh YmxlIEdNVSBXQi9SQiBidWZmZXIgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfU1lT X0JVU19DT05GSUcsIDB4MSk7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfUFdSX0NP TF9JTlRFUl9GUkFNRV9DVFJMLCAweDljNDA0MDApOworCisJc3dpdGNoIChnbXUtPmlkbGVfbGV2 ZWwpIHsKKwljYXNlIEdNVV9JRExFX1NUQVRFX0lGUEM6CisJCWdtdV93cml0ZShnbXUsIFJFR19B NlhYX0dNVV9QV1JfQ09MX0lOVEVSX0ZSQU1FX0hZU1QsCisJCQlHTVVfUFdSX0NPTF9IWVNUKTsK KwkJZ211X3JtdyhnbXUsIFJFR19BNlhYX0dNVV9QV1JfQ09MX0lOVEVSX0ZSQU1FX0NUUkwsIDAs CisJCQlBNlhYX0dNVV9QV1JfQ09MX0lOVEVSX0ZSQU1FX0NUUkxfSUZQQ19FTkFCTEUgfAorCQkJ QTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9DVFJMX0hNX1BPV0VSX0NPTExBUFNFX0VOQUJM RSk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgR01VX0lETEVfU1RBVEVfU1BUUDoKKwkJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1BXUl9DT0xfU1BUUFJBQ19IWVNULAorCQkJR01V X1BXUl9DT0xfSFlTVCk7CisJCWdtdV9ybXcoZ211LCBSRUdfQTZYWF9HTVVfUFdSX0NPTF9JTlRF Ul9GUkFNRV9DVFJMLCAwLAorCQkJQTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9DVFJMX0lG UENfRU5BQkxFIHwKKwkJCUE2WFhfR01VX1BXUl9DT0xfSU5URVJfRlJBTUVfQ1RSTF9TUFRQUkFD X1BPV0VSX0NPTlRST0xfRU5BQkxFKTsKKwl9CisKKwkvKiBFbmFibGUgUlBNaCBHUFUgY2xpZW50 ICovCisJZ211X3JtdyhnbXUsIFJFR19BNlhYX0dNVV9SUE1IX0NUUkwsIDAsCisJCUE2WFhfR01V X1JQTUhfQ1RSTF9SUE1IX0lOVEVSRkFDRV9FTkFCTEUgfAorCQlBNlhYX0dNVV9SUE1IX0NUUkxf TExDX1ZPVEVfRU5BQkxFIHwKKwkJQTZYWF9HTVVfUlBNSF9DVFJMX0REUl9WT1RFX0VOQUJMRSB8 CisJCUE2WFhfR01VX1JQTUhfQ1RSTF9NWF9WT1RFX0VOQUJMRSB8CisJCUE2WFhfR01VX1JQTUhf Q1RSTF9DWF9WT1RFX0VOQUJMRSB8CisJCUE2WFhfR01VX1JQTUhfQ1RSTF9HRlhfVk9URV9FTkFC TEUpOworfQorCitzdGF0aWMgaW50IGE2eHhfZ211X2Z3X3N0YXJ0KHN0cnVjdCBhNnh4X2dtdSAq Z211LCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJc3RhdGljIGJvb2wgcnBtaF9pbml0OworCXN0 cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSBjb250YWluZXJfb2YoZ211LCBzdHJ1Y3QgYTZ4eF9n cHUsIGdtdSk7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSAmYTZ4eF9ncHUtPmJh c2U7CisJaW50IGksIHJldDsKKwl1MzIgY2hpcGlkOworCXUzMiAqaW1hZ2U7CisKKwlpZiAoc3Rh dGUgPT0gR01VX1dBUk1fQk9PVCkgeworCQlyZXQgPSBhNnh4X3JwbWhfc3RhcnQoZ211KTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJaWYgKFdBUk4oIWFkcmVub19n cHUtPmZ3W0FEUkVOT19GV19HTVVdLCAiR01VIGZpcm13YXJlIGlzIG5vdCBsb2FkZWRcbiIpKQor CQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJLyogU2FuaXR5IGNoZWNrIHRoZSBzaXplIG9mIHRoZSBm aXJtd2FyZSB0aGF0IHdhcyBsb2FkZWQgKi8KKwkJaWYgKGFkcmVub19ncHUtPmZ3W0FEUkVOT19G V19HTVVdLT5zaXplID4gMHg4MDAwKSB7CisJCQlkZXZfZXJyKGdtdS0+ZGV2LAorCQkJCSJHTVUg ZmlybXdhcmUgaXMgYmlnZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSByZWdpb25cbiIpOworCQkJcmV0 dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBUdXJuIG9uIHJlZ2lzdGVyIHJldGVudGlvbiAqLwor CQlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfR0VORVJBTF83LCAxKTsKKworCQkvKiBXZSBv bmx5IG5lZWQgdG8gbG9hZCB0aGUgUlBNaCBtaWNyb2NvZGUgb25jZSAqLworCQlpZiAoIXJwbWhf aW5pdCkgeworCQkJYTZ4eF9nbXVfcnBtaF9pbml0KGdtdSk7CisJCQlycG1oX2luaXQgPSB0cnVl OworCQl9IGVsc2UgaWYgKHN0YXRlICE9IEdNVV9SRVNFVCkgeworCQkJcmV0ID0gYTZ4eF9ycG1o X3N0YXJ0KGdtdSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlpbWFn ZSA9ICh1MzIgKikgYWRyZW5vX2dwdS0+ZndbQURSRU5PX0ZXX0dNVV0tPmRhdGE7CisKKwkJZm9y IChpID0gMDsgaSA8IGFkcmVub19ncHUtPmZ3W0FEUkVOT19GV19HTVVdLT5zaXplID4+IDI7IGkr KykKKwkJCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9DTTNfSVRDTV9TVEFSVCArIGksCisJ CQkJaW1hZ2VbaV0pOworCX0KKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9DTTNfRldf SU5JVF9SRVNVTFQsIDApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9DTTNfQk9PVF9D T05GSUcsIDB4MDIpOworCisJLyogV3JpdGUgdGhlIGlvdmEgb2YgdGhlIEhGSSB0YWJsZSAqLwor CWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9IRklfUVRCTF9BRERSLCBnbXUtPmhmaS0+aW92 YSk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0hGSV9RVEJMX0lORk8sIDEpOworCisJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0FIQl9GRU5DRV9SQU5HRV8wLAorCQkoMSA8PCAz MSkgfCAoMHhhIDw8IDE4KSB8ICgweGEwKSk7CisKKwljaGlwaWQgPSBhZHJlbm9fZ3B1LT5yZXYu Y29yZSA8PCAyNDsKKwljaGlwaWQgfD0gYWRyZW5vX2dwdS0+cmV2Lm1ham9yIDw8IDE2OworCWNo aXBpZCB8PSBhZHJlbm9fZ3B1LT5yZXYubWlub3IgPDwgMTI7CisJY2hpcGlkIHw9IGFkcmVub19n cHUtPnJldi5wYXRjaGlkIDw8IDg7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfSEZJ X1NGUl9BRERSLCBjaGlwaWQpOworCisJLyogU2V0IHVwIHRoZSBsb3dlc3QgaWRsZSBsZXZlbCBv biB0aGUgR01VICovCisJYTZ4eF9nbXVfcG93ZXJfY29uZmlnKGdtdSk7CisKKwlyZXQgPSBhNnh4 X2dtdV9zdGFydChnbXUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhNnh4 X2dtdV9nZnhfcmFpbF9vbihnbXUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBF bmFibGUgU1BUUF9QQyBpZiB0aGUgQ1BVIGlzIHJlc3BvbnNpYmxlIGZvciBpdCAqLworCWlmIChn bXUtPmlkbGVfbGV2ZWwgPCBHTVVfSURMRV9TVEFURV9TUFRQKSB7CisJCXJldCA9IGE2eHhfc3B0 cHJhY19lbmFibGUoZ211KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gYTZ4eF9nbXVfaGZpX3N0YXJ0KGdtdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRoaXMgd21iKCkgaGVyZT8gKi8KKwl3bWIoKTsKKworCXJl dHVybiAwOworfQorCisjZGVmaW5lIEE2WFhfSEZJX0lSUV9NQVNLIFwKKwkoQTZYWF9HTVVfR01V MkhPU1RfSU5UUl9JTkZPX01TR1EgfCBcCisJIEE2WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GT19D TTNfRkFVTFQpCisKKyNkZWZpbmUgQTZYWF9HTVVfSVJRX01BU0sgXAorCShBNlhYX0dNVV9BT19I T1NUX0lOVEVSUlVQVF9TVEFUVVNfV0RPR19CSVRFIHwgXAorCSBBNlhYX0dNVV9BT19IT1NUX0lO VEVSUlVQVF9TVEFUVVNfSE9TVF9BSEJfQlVTX0VSUk9SIHwgXAorCSBBNlhYX0dNVV9BT19IT1NU X0lOVEVSUlVQVF9TVEFUVVNfRkVOQ0VfRVJSKQorCitzdGF0aWMgdm9pZCBhNnh4X2dtdV9pcnFf ZW5hYmxlKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWdtdV93cml0ZShnbXUsIFJFR19BNlhY X0dNVV9BT19IT1NUX0lOVEVSUlVQVF9DTFIsIH4wKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HTVVfR01VMkhPU1RfSU5UUl9DTFIsIH4wKTsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhY X0dNVV9BT19IT1NUX0lOVEVSUlVQVF9NQVNLLAorCQl+QTZYWF9HTVVfSVJRX01BU0spOworCWdt dV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX01BU0ssCisJCX5BNlhYX0hG SV9JUlFfTUFTSyk7CisKKwllbmFibGVfaXJxKGdtdS0+Z211X2lycSk7CisJZW5hYmxlX2lycShn bXUtPmhmaV9pcnEpOworfQorCitzdGF0aWMgdm9pZCBhNnh4X2dtdV9pcnFfZGlzYWJsZShzdHJ1 Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlkaXNhYmxlX2lycShnbXUtPmdtdV9pcnEpOworCWRpc2Fi bGVfaXJxKGdtdS0+aGZpX2lycSk7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQU9f SE9TVF9JTlRFUlJVUFRfTUFTSywgfjApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9H TVUySE9TVF9JTlRSX01BU0ssIH4wKTsKK30KKworaW50IGE2eHhfZ211X3Jlc2V0KHN0cnVjdCBh Nnh4X2dwdSAqYTZ4eF9ncHUpCit7CisJc3RydWN0IGE2eHhfZ211ICpnbXUgPSAmYTZ4eF9ncHUt PmdtdTsKKwlpbnQgcmV0OworCXUzMiB2YWw7CisKKwkvKiBGbHVzaCBhbGwgdGhlIHF1ZXVlcyAq LworCWE2eHhfaGZpX3N0b3AoZ211KTsKKworCS8qIFN0b3AgdGhlIGludGVycnVwdHMgKi8KKwlh Nnh4X2dtdV9pcnFfZGlzYWJsZShnbXUpOworCisJLyogRm9yY2Ugb2ZmIFNQVFAgaW4gY2FzZSB0 aGUgR01VIGlzIG1hbmFnaW5nIGl0ICovCisJYTZ4eF9zcHRwcmFjX2Rpc2FibGUoZ211KTsKKwor CS8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgUlBNaCB2b3RlcyAqLworCWdt dV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9SU0NDX1RDUzBfRFJWMF9TVEFUVVMsIHZhbCwK KwkJKHZhbCAmIDEpLCAxMDAsIDEwMDAwKTsKKwlnbXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2 WFhfUlNDQ19UQ1MxX0RSVjBfU1RBVFVTLCB2YWwsCisJCSh2YWwgJiAxKSwgMTAwLCAxMDAwMCk7 CisJZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX1JTQ0NfVENTMl9EUlYwX1NUQVRVUywg dmFsLAorCQkodmFsICYgMSksIDEwMCwgMTAwMDApOworCWdtdV9wb2xsX3RpbWVvdXQoZ211LCBS RUdfQTZYWF9SU0NDX1RDUzNfRFJWMF9TVEFUVVMsIHZhbCwKKwkJKHZhbCAmIDEpLCAxMDAsIDEw MDApOworCisJLyogRm9yY2Ugb2ZmIHRoZSBHWCBHU0RDICovCisJcmVndWxhdG9yX2ZvcmNlX2Rp c2FibGUoZ211LT5neCk7CisKKwkvKiBEaXNhYmxlIHRoZSByZXNvdXJjZXMgKi8KKwljbGtfYnVs a19kaXNhYmxlX3VucHJlcGFyZShnbXUtPm5yX2Nsb2NrcywgZ211LT5jbG9ja3MpOworCXBtX3J1 bnRpbWVfcHV0X3N5bmMoZ211LT5kZXYpOworCisJLyogUmUtZW5hYmxlIHRoZSByZXNvdXJjZXMg Ki8KKwlwbV9ydW50aW1lX2dldF9zeW5jKGdtdS0+ZGV2KTsKKworCS8qIFVzZSBhIGtub3duIHJh dGUgdG8gYnJpbmcgdXAgdGhlIEdNVSAqLworCWNsa19zZXRfcmF0ZShnbXUtPmNvcmVfY2xrLCAy MDAwMDAwMDApOworCWNsa19idWxrX3ByZXBhcmVfZW5hYmxlKGdtdS0+bnJfY2xvY2tzLCBnbXUt PmNsb2Nrcyk7CisKKwlhNnh4X2dtdV9pcnFfZW5hYmxlKGdtdSk7CisKKwlyZXQgPSBhNnh4X2dt dV9md19zdGFydChnbXUsIEdNVV9SRVNFVCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGE2eHhfaGZp X3N0YXJ0KGdtdSwgR01VX0NPTERfQk9PVCk7CisKKwlpZiAocmV0KQorCQlhNnh4X2dtdV9jbGVh cl9vb2IoZ211LCBHTVVfT09CX0JPT1RfU0xVTUJFUik7CisKKwlyZXR1cm4gcmV0OworfQorCitp bnQgYTZ4eF9nbXVfcmVzdW1lKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpCit7CisJc3RydWN0 IGE2eHhfZ211ICpnbXUgPSAmYTZ4eF9ncHUtPmdtdTsKKwlpbnQgc3RhdHVzLCByZXQ7CisKKwlp ZiAoV0FSTighZ211LT5tbWlvLCAiVGhlIEdNVSBpcyBub3Qgc2V0IHVwIHlldFxuIikpCisJCXJl dHVybiAwOworCisJLyogVHVybiBvbiB0aGUgcmVzb3VyY2VzICovCisJcG1fcnVudGltZV9nZXRf c3luYyhnbXUtPmRldik7CisKKwkvKiBVc2UgYSBrbm93biByYXRlIHRvIGJyaW5nIHVwIHRoZSBH TVUgKi8KKwljbGtfc2V0X3JhdGUoZ211LT5jb3JlX2NsaywgMjAwMDAwMDAwKTsKKwljbGtfYnVs a19wcmVwYXJlX2VuYWJsZShnbXUtPm5yX2Nsb2NrcywgZ211LT5jbG9ja3MpOworCisJYTZ4eF9n bXVfaXJxX2VuYWJsZShnbXUpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBkb2luZyBh IGNvbGQgb3Igd2FybSBib290ICovCisJc3RhdHVzID0gZ211X3JlYWQoZ211LCBSRUdfQTZYWF9H TVVfR0VORVJBTF83KSA9PSAxID8KKwkJR01VX1dBUk1fQk9PVCA6IEdNVV9DT0xEX0JPT1Q7CisK KwlyZXQgPSBhNnh4X2dtdV9md19zdGFydChnbXUsIHN0YXR1cyk7CisJaWYgKHJldCkKKwkJZ290 byBvdXQ7CisKKwlyZXQgPSBhNnh4X2hmaV9zdGFydChnbXUsIHN0YXR1cyk7CisKK291dDoKKwkv KiBNYWtlIHN1cmUgdG8gdHVybiBvZmYgdGhlIGJvb3QgT09CIHJlcXVlc3Qgb24gZXJyb3IgKi8K KwlpZiAocmV0KQorCQlhNnh4X2dtdV9jbGVhcl9vb2IoZ211LCBHTVVfT09CX0JPT1RfU0xVTUJF Uik7CisKKwlyZXR1cm4gcmV0OworfQorCitib29sIGE2eHhfZ211X2lzaWRsZShzdHJ1Y3QgYTZ4 eF9nbXUgKmdtdSkKK3sKKwl1MzIgcmVnOworCisJaWYgKCFnbXUtPm1taW8pCisJCXJldHVybiB0 cnVlOworCisJcmVnID0gZ211X3JlYWQoZ211LCBSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9C VVNZX1NUQVRVUyk7CisKKwlpZiAocmVnICYgIEE2WFhfR1BVX0dNVV9BT19HUFVfQ1hfQlVTWV9T VEFUVVNfR1BVQlVTWUlHTkFIQikKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9 CisKK2ludCBhNnh4X2dtdV9zdG9wKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpCit7CisJc3Ry dWN0IGE2eHhfZ211ICpnbXUgPSAmYTZ4eF9ncHUtPmdtdTsKKwl1MzIgdmFsOworCisJLyoKKwkg KiBUaGUgR01VIG1heSBzdGlsbCBiZSBpbiBzbHVtYmVyIHVubGVzcyB0aGUgR1BVIHN0YXJ0ZWQg c28gY2hlY2sgYW5kCisJICogc2tpcCBwdXR0aW5nIGl0IGJhY2sgaW50byBzbHVtYmVyIGlmIHNv CisJICovCisJdmFsID0gZ211X3JlYWQoZ211LCBSRUdfQTZYWF9HUFVfR01VX0NYX0dNVV9SUE1I X1BPV0VSX1NUQVRFKTsKKworCWlmICh2YWwgIT0gMHhmKSB7CisJCWludCByZXQgPSBhNnh4X2dt dV93YWl0X2Zvcl9pZGxlKGE2eHhfZ3B1KTsKKworCQkvKiBUZW1wb3JhcnkgdW50aWwgd2UgY2Fu IHJlY292ZXIgc2FmZWx5ICovCisJCUJVR19PTihyZXQpOworCisJCS8qIHRlbGwgdGhlIEdNVSB3 ZSB3YW50IHRvIHNsdW1iZXIgKi8KKwkJYTZ4eF9nbXVfbm90aWZ5X3NsdW1iZXIoZ211KTsKKwor CQlyZXQgPSBnbXVfcG9sbF90aW1lb3V0KGdtdSwKKwkJCVJFR19BNlhYX0dQVV9HTVVfQU9fR1BV X0NYX0JVU1lfU1RBVFVTLCB2YWwsCisJCQkhKHZhbCAmIEE2WFhfR1BVX0dNVV9BT19HUFVfQ1hf QlVTWV9TVEFUVVNfR1BVQlVTWUlHTkFIQiksCisJCQkxMDAsIDEwMDAwKTsKKworCQkvKgorCQkg KiBMZXQgdGhlIHVzZXIga25vdyB3ZSBmYWlsZWQgdG8gc2x1bWJlciBidXQgZG9uJ3Qgd29ycnkg dG9vCisJCSAqIG11Y2ggYmVjYXVzZSB3ZSBhcmUgcG93ZXJpbmcgZG93biBhbnl3YXkKKwkJICov CisKKwkJaWYgKHJldCkKKwkJCWRldl9lcnIoZ211LT5kZXYsCisJCQkJIlVuYWJsZSB0byBzbHVt YmVyIEdNVTogc3RhdHVzID0gMCV4LzAleFxuIiwKKwkJCQlnbXVfcmVhZChnbXUsIFJFR19BNlhY X0dQVV9HTVVfQU9fR1BVX0NYX0JVU1lfU1RBVFVTKSwKKwkJCQlnbXVfcmVhZChnbXUsIFJFR19B NlhYX0dQVV9HTVVfQU9fR1BVX0NYX0JVU1lfU1RBVFVTMikpOworCX0KKworCS8qIFR1cm4gb2Zm IEhGSSAqLworCWE2eHhfaGZpX3N0b3AoZ211KTsKKworCS8qIFN0b3AgdGhlIGludGVycnVwdHMg YW5kIG1hc2sgdGhlIGhhcmR3YXJlICovCisJYTZ4eF9nbXVfaXJxX2Rpc2FibGUoZ211KTsKKwor CS8qIFRlbGwgUlBNaCB0byBwb3dlciBvZmYgdGhlIEdQVSAqLworCWE2eHhfcnBtaF9zdG9wKGdt dSk7CisKKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShnbXUtPm5yX2Nsb2NrcywgZ211LT5j bG9ja3MpOworCisJcG1fcnVudGltZV9wdXRfc3luYyhnbXUtPmRldik7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgYTZ4eF9nbXVfbWVtb3J5X2ZyZWUoc3RydWN0IGE2eHhfZ211ICpn bXUsIHN0cnVjdCBhNnh4X2dtdV9ibyAqYm8pCit7CisJaW50IGNvdW50LCBpOworCXU2NCBpb3Zh OworCisJaWYgKElTX0VSUl9PUl9OVUxMKGJvKSkKKwkJcmV0dXJuOworCisJY291bnQgPSBiby0+ c2l6ZSA+PiBQQUdFX1NISUZUOworCWlvdmEgPSBiby0+aW92YTsKKworCWZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrLCBpb3ZhICs9IFBBR0VfU0laRSkgeworCQlpb21tdV91bm1hcChnbXUtPmRv bWFpbiwgaW92YSwgUEFHRV9TSVpFKTsKKwkJX19mcmVlX3BhZ2VzKGJvLT5wYWdlc1tpXSwgMCk7 CisJfQorCisJa2ZyZWUoYm8tPnBhZ2VzKTsKKwlrZnJlZShibyk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgYTZ4eF9nbXVfYm8gKmE2eHhfZ211X21lbW9yeV9hbGxvYyhzdHJ1Y3QgYTZ4eF9nbXUgKmdt dSwKKwkJc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGE2eHhfZ211X2JvICpibzsKKwlpbnQgcmV0 LCBjb3VudCwgaTsKKworCWJvID0ga3phbGxvYyhzaXplb2YoKmJvKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFibykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwliby0+c2l6ZSA9IFBBR0Vf QUxJR04oc2l6ZSk7CisKKwljb3VudCA9IGJvLT5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwliby0+ cGFnZXMgPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwp OworCWlmICghYm8tPnBhZ2VzKSB7CisJCWtmcmVlKGJvKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJYm8tPnBhZ2Vz W2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFiby0+cGFnZXNbaV0pCisJCQln b3RvIGVycjsKKwl9CisKKwliby0+aW92YSA9IGdtdS0+dW5jYWNoZWRfaW92YV9iYXNlOworCisJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcmV0ID0gaW9tbXVfbWFwKGdtdS0+ZG9t YWluLAorCQkJYm8tPmlvdmEgKyAoUEFHRV9TSVpFICogaSksCisJCQlwYWdlX3RvX3BoeXMoYm8t PnBhZ2VzW2ldKSwgUEFHRV9TSVpFLAorCQkJSU9NTVVfUkVBRCB8IElPTU1VX1dSSVRFKTsKKwor CQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGdtdS0+ZGV2LCAiVW5hYmxlIHRvIG1hcCBHTVUgYnVm ZmVyIG9iamVjdFxuIik7CisKKwkJCWZvciAoaSA9IGkgLSAxIDsgaSA+PSAwOyBpLS0pCisJCQkJ aW9tbXVfdW5tYXAoZ211LT5kb21haW4sCisJCQkJCWJvLT5pb3ZhICsgKFBBR0VfU0laRSAqIGkp LAorCQkJCQlQQUdFX1NJWkUpOworCisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWJvLT52aXJ0 ID0gdm1hcChiby0+cGFnZXMsIGNvdW50LCBWTV9JT1JFTUFQLAorCQlwZ3Byb3Rfd3JpdGVjb21i aW5lKFBBR0VfS0VSTkVMKSk7CisJaWYgKCFiby0+dmlydCkKKwkJZ290byBlcnI7CisKKwkvKiBB bGlnbiBmdXR1cmUgSU9WQSBhZGRyZXNzZXMgb24gMU1CIGJvdW5kYXJpZXMgKi8KKwlnbXUtPnVu Y2FjaGVkX2lvdmFfYmFzZSArPSBBTElHTihzaXplLCBTWl8xTSk7CisKKwlyZXR1cm4gYm87CisK K2VycjoKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoYm8tPnBhZ2VzW2ld KQorCQkJX19mcmVlX3BhZ2VzKGJvLT5wYWdlc1tpXSwgMCk7CisJfQorCisJa2ZyZWUoYm8tPnBh Z2VzKTsKKwlrZnJlZShibyk7CisKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KKworc3Rh dGljIGludCBhNnh4X2dtdV9tZW1vcnlfcHJvYmUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJ aW50IHJldDsKKworCS8qCisJICogVGhlIEdNVSBhZGRyZXNzIHNwYWNlIGlzIGhhcmRjb2RlZCB0 byB0cmVhdCB0aGUgcmFuZ2UKKwkgKiAweDYwMDAwMDAwIC0gMHg4MDAwMDAwMCBhcyB1bi1jYWNo ZWQgbWVtb3J5LiBBbGwgYnVmZmVycyBzaGFyZWQKKwkgKiBiZXR3ZWVuIHRoZSBHTVUgYW5kIHRo ZSBDUFUgd2lsbCBsaXZlIGluIHRoaXMgc3BhY2UKKwkgKi8KKwlnbXUtPnVuY2FjaGVkX2lvdmFf YmFzZSA9IDB4NjAwMDAwMDA7CisKKworCWdtdS0+ZG9tYWluID0gaW9tbXVfZG9tYWluX2FsbG9j KCZwbGF0Zm9ybV9idXNfdHlwZSk7CisJaWYgKCFnbXUtPmRvbWFpbikKKwkJcmV0dXJuIC1FTk9E RVY7CisKKwlyZXQgPSBpb21tdV9hdHRhY2hfZGV2aWNlKGdtdS0+ZG9tYWluLCBnbXUtPmRldik7 CisKKwlpZiAocmV0KSB7CisJCWlvbW11X2RvbWFpbl9mcmVlKGdtdS0+ZG9tYWluKTsKKwkJZ211 LT5kb21haW4gPSBOVUxMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIEdldCB0aGUgbGlz dCBvZiBSUE1oIHZvbHRhZ2UgbGV2ZWxzIGZyb20gY21kLWRiICovCitzdGF0aWMgaW50IGE2eHhf Z211X3JwbWhfYXJjX2NtZHMoY29uc3QgY2hhciAqaWQsIHZvaWQgKnZhbHMsIGludCBzaXplKQor eworCXUzMiBsZW4gPSBjbWRfZGJfcmVhZF9hdXhfZGF0YV9sZW4oaWQpOworCisJaWYgKCFsZW4p CisJCXJldHVybiAwOworCisJaWYgKFdBUk5fT04obGVuID4gc2l6ZSkpCisJCXJldHVybiAtRUlO VkFMOworCisJY21kX2RiX3JlYWRfYXV4X2RhdGEoaWQsIHZhbHMsIGxlbik7CisKKwkvKgorCSAq IFRoZSBkYXRhIGNvbWVzIGJhY2sgYXMgYW4gYXJyYXkgb2YgdW5zaWduZWQgc2hvcnRzIHNvIGFk anVzdCB0aGUKKwkgKiBjb3VudCBhY2NvcmRpbmdseQorCSAqLworCXJldHVybiBsZW4gPj4gMTsK K30KKworLyogUmV0dXJuIHRoZSAnYXJjLWxldmVsJyBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeSAq Lworc3RhdGljIHUzMiBhNnh4X2dtdV9nZXRfYXJjX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwg dW5zaWduZWQgbG9uZyBmcmVxKQoreworCXN0cnVjdCBkZXZfcG1fb3BwICpvcHA7CisJc3RydWN0 IGRldmljZV9ub2RlICpucDsKKwl1MzIgdmFsID0gMDsKKworCWlmICghZnJlcSkKKwkJcmV0dXJu IDA7CisKKwlvcHAgID0gZGV2X3BtX29wcF9maW5kX2ZyZXFfZXhhY3QoZGV2LCBmcmVxLCB0cnVl KTsKKwlpZiAoSVNfRVJSKG9wcCkpCisJCXJldHVybiAwOworCisJbnAgPSBkZXZfcG1fb3BwX2dl dF9vZl9ub2RlKG9wcCk7CisKKwlpZiAobnApIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAs ICJxY29tLGxldmVsIiwgJnZhbCk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisKKwlkZXZfcG1f b3BwX3B1dChvcHApOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9y cG1oX2FyY192b3Rlc19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICp2b3RlcywKKwkJdW5z aWduZWQgbG9uZyAqZnJlcXMsIGludCBmcmVxc19jb3VudCwKKwkJdTE2ICpwcmksIGludCBwcmlf Y291bnQsCisJCXUxNiAqc2VjLCBpbnQgc2VjX2NvdW50KQoreworCWludCBpLCBqOworCisJLyog Q29uc3RydWN0IGEgdm90ZSBmb3IgZWFjaCBmcmVxdWVuY3kgKi8KKwlmb3IgKGkgPSAwOyBpIDwg ZnJlcXNfY291bnQ7IGkrKykgeworCQl1OCBwaW5kZXggPSAwLCBzaW5kZXggPSAwOworCQl1MzIg bGV2ZWwgPSBhNnh4X2dtdV9nZXRfYXJjX2xldmVsKGRldiwgZnJlcXNbaV0pOworCisJCS8qIEdl dCB0aGUgcHJpbWFyeSBpbmRleCB0aGF0IG1hdGNoZXMgdGhlIGFyYyBsZXZlbCAqLworCQlmb3Ig KGogPSAwOyBqIDwgcHJpX2NvdW50OyBqKyspIHsKKwkJCWlmIChwcmlbal0gPj0gbGV2ZWwpIHsK KwkJCQlwaW5kZXggPSBqOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGogPT0gcHJp X2NvdW50KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiTGV2ZWwgJXUgbm90IGZvdW5kIGluIGlu IHRoZSBSUE1oIGxpc3RcbiIsCisJCQkJCWxldmVsKTsKKwkJCWRldl9lcnIoZGV2LCAiQXZhaWxh YmxlIGxldmVsczpcbiIpOworCQkJZm9yIChqID0gMDsgaiA8IHByaV9jb3VudDsgaisrKQorCQkJ CWRldl9lcnIoZGV2LCAiICAldVxuIiwgcHJpW2pdKTsKKworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0KKworCQkvKgorCQkgKiBMb29rIGZvciBhIGxldmVsIGluIGluIHRoZSBzZWNvbmRhcnkgbGlz dCB0aGF0IG1hdGNoZXMuIElmCisJCSAqIG5vdGhpbmcgZml0cywgdXNlIHRoZSBtYXhpbXVtCisJ CSAqLworCQlzaW5kZXggPSBzZWNfY291bnQgLSAxOworCisJCWZvciAoaiA9IDA7IGogPCBzZWNf Y291bnQgLSAxOyBqKyspIHsKKwkJCWlmIChzZWNbal0gPj0gbGV2ZWwpIHsKKwkJCQlzaW5kZXgg PSBqOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogQ29uc3RydWN0IHRoZSB2b3RlICov CisJCXZvdGVzW2ldID0gKChwcmlbcGluZGV4XSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShzaW5k ZXggPDwgOCkgfCBwaW5kZXg7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgR01V IHZvdGVzIHdpdGggdGhlIFJQTWggZm9yIGl0c2VsZiBhbmQgb24gYmVoYWxmIG9mIHRoZSBHUFUg YnV0IHdlIG5lZWQKKyAqIHRvIGNvbnN0cnVjdCB0aGUgbGlzdCBvZiB2b3RlcyBvbiB0aGUgQ1BV IGFuZCBzZW5kIGl0IG92ZXIuIFF1ZXJ5IHRoZSBSUE1oCisgKiB2b2x0YWdlIGxldmVscyBhbmQg YnVpbGQgdGhlIHZvdGVzCisgKi8KKworc3RhdGljIGludCBhNnh4X2dtdV9ycG1oX3ZvdGVzX2lu aXQoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9 IGNvbnRhaW5lcl9vZihnbXUsIHN0cnVjdCBhNnh4X2dwdSwgZ211KTsKKwlzdHJ1Y3QgYWRyZW5v X2dwdSAqYWRyZW5vX2dwdSA9ICZhNnh4X2dwdS0+YmFzZTsKKwlzdHJ1Y3QgbXNtX2dwdSAqZ3B1 ID0gJmFkcmVub19ncHUtPmJhc2U7CisKKwl1MTYgZ3hbMTZdLCBjeFsxNl0sIG14WzE2XTsKKwl1 MzIgZ3hjb3VudCwgY3hjb3VudCwgbXhjb3VudDsKKwlpbnQgcmV0OworCisJLyogR2V0IHRoZSBs aXN0IG9mIGF2YWlsYWJsZSB2b2x0YWdlIGxldmVscyBmb3IgZWFjaCBjb21wb25lbnQgKi8KKwln eGNvdW50ID0gYTZ4eF9nbXVfcnBtaF9hcmNfY21kcygiZ2Z4Lmx2bCIsIGd4LCBzaXplb2YoZ3gp KTsKKwljeGNvdW50ID0gYTZ4eF9nbXVfcnBtaF9hcmNfY21kcygiY3gubHZsIiwgY3gsIHNpemVv ZihjeCkpOworCW14Y291bnQgPSBhNnh4X2dtdV9ycG1oX2FyY19jbWRzKCJteC5sdmwiLCBteCwg c2l6ZW9mKG14KSk7CisKKwkvKiBCdWlsZCB0aGUgR1ggdm90ZXMgKi8KKwlyZXQgPSBhNnh4X2dt dV9ycG1oX2FyY192b3Rlc19pbml0KCZncHUtPnBkZXYtPmRldiwgZ211LT5neF9hcmNfdm90ZXMs CisJCWdtdS0+Z3B1X2ZyZXFzLCBnbXUtPm5yX2dwdV9mcmVxcywKKwkJZ3gsIGd4Y291bnQsIG14 LCBteGNvdW50KTsKKworCS8qIEJ1aWxkIHRoZSBDWCB2b3RlcyAqLworCXJldCB8PSBhNnh4X2dt dV9ycG1oX2FyY192b3Rlc19pbml0KGdtdS0+ZGV2LCBnbXUtPmN4X2FyY192b3RlcywKKwkJZ211 LT5nbXVfZnJlcXMsIGdtdS0+bnJfZ211X2ZyZXFzLAorCQljeCwgY3hjb3VudCwgbXgsIG14Y291 bnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9idWlsZF9mcmVx X3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqZnJlcXMsCisJCXUzMiBz aXplKQoreworCWludCBjb3VudCA9IGRldl9wbV9vcHBfZ2V0X29wcF9jb3VudChkZXYpOworCXN0 cnVjdCBkZXZfcG1fb3BwICpvcHA7CisJaW50IGksIGluZGV4ID0gMDsKKwl1bnNpZ25lZCBsb25n IGZyZXEgPSAxOworCisJLyoKKwkgKiBUaGUgT1BQIHRhYmxlIGRvZXNuJ3QgY29udGFpbiB0aGUg Im9mZiIgZnJlcXVlbmN5IGxldmVsIHNvIHdlIG5lZWQgdG8KKwkgKiBhZGQgMSB0byB0aGUgdGFi bGUgc2l6ZSB0byBhY2NvdW50IGZvciBpdAorCSAqLworCisJaWYgKFdBUk4oY291bnQgKyAxID4g c2l6ZSwKKwkJIlRoZSBHTVUgZnJlcXVlbmN5IHRhYmxlIGlzIGJlaW5nIHRydW5jYXRlZFxuIikp CisJCWNvdW50ID0gc2l6ZSAtIDE7CisKKwkvKiBTZXQgdGhlICJvZmYiIGZyZXF1ZW5jeSAqLwor CWZyZXFzW2luZGV4KytdID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJ CW9wcCA9IGRldl9wbV9vcHBfZmluZF9mcmVxX2NlaWwoZGV2LCAmZnJlcSk7CisJCWlmIChJU19F UlIob3BwKSkKKwkJCWJyZWFrOworCisJCWRldl9wbV9vcHBfcHV0KG9wcCk7CisJCWZyZXFzW2lu ZGV4KytdID0gZnJlcSsrOworCX0KKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIGludCBh Nnh4X2dtdV9wd3JsZXZlbHNfcHJvYmUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0 IGE2eHhfZ3B1ICphNnh4X2dwdSA9IGNvbnRhaW5lcl9vZihnbXUsIHN0cnVjdCBhNnh4X2dwdSwg Z211KTsKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9ICZhNnh4X2dwdS0+YmFzZTsK KwlzdHJ1Y3QgbXNtX2dwdSAqZ3B1ID0gJmFkcmVub19ncHUtPmJhc2U7CisKKwlpbnQgcmV0ID0g MDsKKworCS8qCisJICogVGhlIEdNVSBoYW5kbGVzIGl0cyBvd24gZnJlcXVlbmN5IHN3aXRjaGlu ZyBzbyBidWlsZCBhIGxpc3Qgb2YKKwkgKiBhdmFpbGFibGUgZnJlcXVlbmNpZXMgdG8gc2VuZCBk dXJpbmcgaW5pdGFsaXphdGlvbgorCSAqLworCXJldCA9IGRldl9wbV9vcHBfb2ZfYWRkX3RhYmxl KGdtdS0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ211LT5kZXYsICJVbmFibGUgdG8g c2V0IHRoZSBPUFAgdGFibGUgZm9yIHRoZSBHTVVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWdtdS0+bnJfZ211X2ZyZXFzID0gYTZ4eF9nbXVfYnVpbGRfZnJlcV90YWJsZShnbXUtPmRldiwK KwkJZ211LT5nbXVfZnJlcXMsIEFSUkFZX1NJWkUoZ211LT5nbXVfZnJlcXMpKTsKKworCS8qCisJ ICogVGhlIEdNVSBhbHNvIGhhbmRsZXMgR1BVIGZyZXF1ZW5jeSBzd2l0Y2hpbmcgc28gYnVpbGQg YSBsaXN0CisJICogZnJvbSB0aGUgR1BVIE9QUCB0YWJsZQorCSAqLworCWdtdS0+bnJfZ3B1X2Zy ZXFzID0gYTZ4eF9nbXVfYnVpbGRfZnJlcV90YWJsZSgmZ3B1LT5wZGV2LT5kZXYsCisJCWdtdS0+ Z3B1X2ZyZXFzLCBBUlJBWV9TSVpFKGdtdS0+Z3B1X2ZyZXFzKSk7CisKKwkvKiBCdWlsZCB0aGUg bGlzdCBvZiBSUE1oIHZvdGVzIHRoYXQgd2UnbGwgc2VuZCB0byB0aGUgR01VICovCisJcmV0dXJu IGE2eHhfZ211X3JwbWhfdm90ZXNfaW5pdChnbXUpOworfQorCitzdGF0aWMgaW50IGE2eHhfZ211 X2Nsb2Nrc19wcm9iZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQgcmV0ID0gbXNtX2Ns a19idWxrX2dldChnbXUtPmRldiwgJmdtdS0+Y2xvY2tzKTsKKworCWlmIChyZXQgPCAxKQorCQly ZXR1cm4gcmV0OworCisJZ211LT5ucl9jbG9ja3MgPSByZXQ7CisKKwlnbXUtPmNvcmVfY2xrID0g bXNtX2Nsa19idWxrX2dldF9jbG9jayhnbXUtPmNsb2NrcywKKwkJZ211LT5ucl9jbG9ja3MsICJn bXUiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICphNnh4X2dtdV9n ZXRfbW1pbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQljb25zdCBjaGFyICpuYW1l KQoreworCXZvaWQgX19pb21lbSAqcmV0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJSU9SRVNPVVJDRV9NRU0sIG5hbWUpOwor CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGZpbmQgdGhl ICVzIHJlZ2lzdGVyc1xuIiwgbmFtZSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0K KworCXJldCA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9z aXplKHJlcykpOworCWlmICghcmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0 byBtYXAgdGhlICVzIHJlZ2lzdGVyc1xuIiwgbmFtZSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfZ2V0X2ly cShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJ Y29uc3QgY2hhciAqbmFtZSwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQoreworCWludCBpcnEsIHJl dDsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIG5hbWUpOworCisJcmV0 ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGhhbmRsZXIsIElSUUZfVFJJR0dF Ul9ISUdILAorCQluYW1lLCBnbXUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiVW5hYmxlIHRvIGdldCBpbnRlcnJ1cHQgJXNcbiIsIG5hbWUpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWRpc2FibGVfaXJxKGlycSk7CisKKwlyZXR1cm4gaXJxOworfQorCit2b2lkIGE2eHhf Z211X3JlbW92ZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1KQoreworCXN0cnVjdCBhNnh4X2dt dSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisKKwlpZiAoSVNfRVJSX09SX05VTEwoZ211LT5tbWlv KSkKKwkJcmV0dXJuOworCisJcG1fcnVudGltZV9kaXNhYmxlKGdtdS0+ZGV2KTsKKwlhNnh4X2dt dV9zdG9wKGE2eHhfZ3B1KTsKKworCWE2eHhfZ211X2lycV9kaXNhYmxlKGdtdSk7CisJYTZ4eF9n bXVfbWVtb3J5X2ZyZWUoZ211LCBnbXUtPmhmaSk7CisKKwlpb21tdV9kZXRhY2hfZGV2aWNlKGdt dS0+ZG9tYWluLCBnbXUtPmRldik7CisKKwlpb21tdV9kb21haW5fZnJlZShnbXUtPmRvbWFpbik7 Cit9CisKK2ludCBhNnh4X2dtdV9wcm9iZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1LCBzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGE2eHhfZ211ICpnbXUgPSAmYTZ4eF9n cHUtPmdtdTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gb2ZfZmluZF9kZXZpY2Vf Ynlfbm9kZShub2RlKTsKKwlpbnQgcmV0OworCisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT0RF VjsKKworCWdtdS0+ZGV2ID0gJnBkZXYtPmRldjsKKworCW9mX2RtYV9jb25maWd1cmUoZ211LT5k ZXYsIG5vZGUpOworCisJLyogRm93IG5vdywgZG9uJ3QgZG8gYW55dGhpbmcgZmFuY3kgdW50aWwg d2UgZ2V0IG91ciBmZWV0IHVuZGVyIHVzICovCisJZ211LT5pZGxlX2xldmVsID0gR01VX0lETEVf U1RBVEVfQUNUSVZFOworCisJcG1fcnVudGltZV9lbmFibGUoZ211LT5kZXYpOworCWdtdS0+Z3gg PSBkZXZtX3JlZ3VsYXRvcl9nZXQoZ211LT5kZXYsICJ2ZGQiKTsKKworCS8qIEdldCB0aGUgbGlz dCBvZiBjbG9ja3MgKi8KKwlyZXQgPSBhNnh4X2dtdV9jbG9ja3NfcHJvYmUoZ211KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IHVwIHRoZSBJT01NVSBjb250ZXh0IGJhbmsg Ki8KKwlyZXQgPSBhNnh4X2dtdV9tZW1vcnlfcHJvYmUoZ211KTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBmb3IgdGhlIEhGSSBxdWV1ZXMgKi8K KwlnbXUtPmhmaSA9IGE2eHhfZ211X21lbW9yeV9hbGxvYyhnbXUsIFNaXzE2Syk7CisJaWYgKElT X0VSUihnbXUtPmhmaSkpCisJCWdvdG8gZXJyOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0 aGUgR01VIGRlYnVnIHJlZ2lvbiAqLworCWdtdS0+ZGVidWcgPSBhNnh4X2dtdV9tZW1vcnlfYWxs b2MoZ211LCBTWl8xNkspOworCWlmIChJU19FUlIoZ211LT5kZWJ1ZykpCisJCWdvdG8gZXJyOwor CisJLyogTWFwIHRoZSBHTVUgcmVnaXN0ZXJzICovCisJZ211LT5tbWlvID0gYTZ4eF9nbXVfZ2V0 X21taW8ocGRldiwgImdtdSIpOworCisJLyogTWFwIHRoZSBHUFUgcG93ZXIgZG9tYWluIGNvbnRy b2xsZXIgcmVnaXN0ZXJzICovCisJZ211LT5wZGNfbW1pbyA9IGE2eHhfZ211X2dldF9tbWlvKHBk ZXYsICJnbXVfcGRjIik7CisKKwlpZiAoSVNfRVJSKGdtdS0+bW1pbykgfHwgSVNfRVJSKGdtdS0+ cGRjX21taW8pKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgSEZJIGFuZCBHTVUgaW50ZXJy dXB0cyAqLworCWdtdS0+aGZpX2lycSA9IGE2eHhfZ211X2dldF9pcnEoZ211LCBwZGV2LCAiaGZp IiwgYTZ4eF9oZmlfaXJxKTsKKwlnbXUtPmdtdV9pcnEgPSBhNnh4X2dtdV9nZXRfaXJxKGdtdSwg cGRldiwgImdtdSIsIGE2eHhfZ211X2lycSk7CisKKwlpZiAoZ211LT5oZmlfaXJxIDwgMCB8fCBn bXUtPmdtdV9pcnEgPCAwKQorCQlnb3RvIGVycjsKKworCS8qIFNldCB1cCBhIHRhc2tsZXQgdG8g aGFuZGxlIEdNVSBIRkkgcmVzcG9uc2VzICovCisJdGFza2xldF9pbml0KCZnbXUtPmhmaV90YXNr bGV0LCBhNnh4X2hmaV90YXNrLCAodW5zaWduZWQgbG9uZykgZ211KTsKKworCS8qIEdldCB0aGUg cG93ZXIgbGV2ZWxzIGZvciB0aGUgR01VIGFuZCBHUFUgKi8KKwlhNnh4X2dtdV9wd3JsZXZlbHNf cHJvYmUoZ211KTsKKworCS8qIFNldCB1cCB0aGUgSEZJIHF1ZXVlcyAqLworCWE2eHhfaGZpX2lu aXQoZ211KTsKKworCXJldHVybiAwOworZXJyOgorCWE2eHhfZ211X21lbW9yeV9mcmVlKGdtdSwg Z211LT5oZmkpOworCisJaWYgKGdtdS0+ZG9tYWluKSB7CisJCWlvbW11X2RldGFjaF9kZXZpY2Uo Z211LT5kb21haW4sIGdtdS0+ZGV2KTsKKworCQlpb21tdV9kb21haW5fZnJlZShnbXUtPmRvbWFp bik7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9nbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ5YTM4NmMx ODc5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhf Z211LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICovCisKKyNpZm5kZWYgX0E2WFhfR01VX0hfCisjZGVmaW5lIF9BNlhY X0dNVV9IXworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSAibXNtX2Ry di5oIgorI2luY2x1ZGUgImE2eHhfaGZpLmgiCisKK3N0cnVjdCBhNnh4X2dtdV9ibyB7CisJdm9p ZCAqdmlydDsKKwlzaXplX3Qgc2l6ZTsKKwl1NjQgaW92YTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2Vz OworfTsKKworLyoKKyAqIFRoZXNlIGRlZmluZSB0aGUgZGlmZmVyZW50IEdNVSB3YWtlIHVwIG9w dGlvbnMgLSB0aGVzZSBkZWZpbmUgaG93IGJvdGggdGhlCisgKiBDUFUgYW5kIHRoZSBHTVUgYnJp bmcgdXAgdGhlIGhhcmR3YXJlCisgKi8KKworLyogVEhlIEdNVSBoYXMgYWxyZWFkeSBiZWVuIGJv b3RlZCBhbmQgdGhlIHJlbnRlbnRpb24gcmVnaXN0ZXJzIGFyZSBhY3RpdmUgKi8KKyNkZWZpbmUg R01VX1dBUk1fQk9PVCAwCisKKy8qIHRoZSBHTVUgaXMgY29taW5nIHVwIGZvciB0aGUgZmlyc3Qg dGltZSBvciBiYWNrIGZyb20gYSBwb3dlciBjb2xsYXBzZSAqLworI2RlZmluZSBHTVVfQ09MRF9C T09UIDEKKworLyogVGhlIEdNVSBpcyBiZWluZyBzb2Z0IHJlc2V0IGFmdGVyIGEgZmF1bHQgKi8K KyNkZWZpbmUgR01VX1JFU0VUIDIKKworLyoKKyAqIFRoZXNlIGRlZmluZSB0aGUgbGV2ZWwgb2Yg Y29udHJvbCB0aGF0IHRoZSBHTVUgaGFzIC0gdGhlIGhpZ2hlciB0aGUgbnVtYmVyCisgKiB0aGUg bW9yZSB0aGluZ3MgdGhhdCB0aGUgR01VIGhhcmR3YXJlIGNvbnRyb2xzIG9uIGl0cyBvd24uCisg Ki8KKworLyogVGhlIEdNVSBkb2VzIG5vdCBkbyBhbnkgaWRsZSBzdGF0ZSBtYW5hZ2VtZW50ICov CisjZGVmaW5lIEdNVV9JRExFX1NUQVRFX0FDVElWRSAwCisKKy8qIFRoZSBHTVUgbWFuYWdlcyBT UFRQIHBvd2VyIGNvbGxhcHNlICovCisjZGVmaW5lIEdNVV9JRExFX1NUQVRFX1NQVFAgMgorCisv KiBUaGUgR01VIGRvZXMgYXV0b21hdGljIElGUEMgKGludHJhLWZyYW1lIHBvd2VyIGNvbGxhcHNl KSAqLworI2RlZmluZSBHTVVfSURMRV9TVEFURV9JRlBDIDMKKworc3RydWN0IGE2eHhfZ211IHsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwl2b2lkICogX19pb21lbSBtbWlvOworCXZvaWQgKiBf X2lvbWVtIHBkY19tbWlvOworCisJaW50IGhmaV9pcnE7CisJaW50IGdtdV9pcnE7CisKKwlzdHJ1 Y3QgcmVndWxhdG9yICpneDsKKworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKKwl1NjQg dW5jYWNoZWRfaW92YV9iYXNlOworCisJaW50IGlkbGVfbGV2ZWw7CisKKwlzdHJ1Y3QgYTZ4eF9n bXVfYm8gKmhmaTsKKwlzdHJ1Y3QgYTZ4eF9nbXVfYm8gKmRlYnVnOworCisJaW50IG5yX2Nsb2Nr czsKKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xvY2tzOworCXN0cnVjdCBjbGsgKmNvcmVfY2xr OworCisJaW50IG5yX2dwdV9mcmVxczsKKwl1bnNpZ25lZCBsb25nIGdwdV9mcmVxc1sxNl07CisJ dTMyIGd4X2FyY192b3Rlc1sxNl07CisKKwlpbnQgbnJfZ211X2ZyZXFzOworCXVuc2lnbmVkIGxv bmcgZ211X2ZyZXFzWzRdOworCXUzMiBjeF9hcmNfdm90ZXNbNF07CisKKwlzdHJ1Y3QgYTZ4eF9o ZmlfcXVldWUgcXVldWVzWzJdOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGhmaV90YXNrbGV0 OworfTsKKworc3RhdGljIGlubGluZSB1MzIgZ211X3JlYWQoc3RydWN0IGE2eHhfZ211ICpnbXUs IHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIG1zbV9yZWFkbChnbXUtPm1taW8gKyAob2Zmc2V0IDw8 IDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdtdV93cml0ZShzdHJ1Y3QgYTZ4eF9nbXUg KmdtdSwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCXJldHVybiBtc21fd3JpdGVsKHZhbHVl LCBnbXUtPm1taW8gKyAob2Zmc2V0IDw8IDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBk Y193cml0ZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQorewor CXJldHVybiBtc21fd3JpdGVsKHZhbHVlLCBnbXUtPnBkY19tbWlvICsgKG9mZnNldCA8PCAyKSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnbXVfcm13KHN0cnVjdCBhNnh4X2dtdSAqZ211LCB1 MzIgcmVnLCB1MzIgbWFzaywgdTMyIG9yKQoreworCXUzMiB2YWwgPSBnbXVfcmVhZChnbXUsIHJl Zyk7CisKKwl2YWwgJj0gfm1hc2s7CisKKwlnbXVfd3JpdGUoZ211LCByZWcsIHZhbCB8IG9yKTsK K30KKworI2RlZmluZSBnbXVfcG9sbF90aW1lb3V0KGdtdSwgYWRkciwgdmFsLCBjb25kLCBpbnRl cnZhbCwgdGltZW91dCkgXAorCXJlYWRsX3BvbGxfdGltZW91dCgoZ211KS0+bW1pbyArICgoYWRk cikgPDwgMiksIHZhbCwgY29uZCwgXAorCQlpbnRlcnZhbCwgdGltZW91dCkKKworLyoKKyAqIFRo ZXNlIGFyZSB0aGUgYXZhaWxhYmxlIE9PQiAob3V0IG9mIGJhbmQgcmVxdWVzdHMpIHRvIHRoZSBH TVUgd2hlcmUgIm91dCBvZgorICogYmFuZCIgbWVhbnMgdGhhdCB0aGUgQ1BVIHRhbGtzIHRvIHRo ZSBHTVUgZGlyZWN0bHkgYW5kIG5vdCB0aHJvdWdoIEhGSS4KKyAqIE5vcm1hbGx5IHRoaXMgd29y a3MgYnkgd3JpdGluZyBhIElUQ00vRFRDTSByZWdpc3RlciBhbmQgdGhlbiB0cmlnZ2VyaW5nIGEK KyAqIGludGVycnVwdCAodGhlICJyZXF1ZXN0IiBiaXQpIGFuZCB3YWl0aW5nIGZvciBhbiBhY2tu b3dsZWRnbWVudCAodGhlICJhY2siCisgKiBiaXQpLiBUaGUgc3RhdGUgaXMgY2xlYXJlZCBieSB3 cml0aW5nIHRoZSAiY2xlYXInIGJpdCB0byB0aGUgR01VIGludGVycnVwdC4KKyAqCisgKiBUaGVz ZSBhcmUgdXNlZCB0byBmb3JjZSB0aGUgR01VL0dQVSB0byBzdGF5IG9uIGR1cmluZyBhIGNyaXRp Y2FsIHNlcXVlbmNlIG9yCisgKiBmb3IgaGFyZHdhcmUgd29ya2Fyb3VuZHMuCisgKi8KKworZW51 bSBhNnh4X2dtdV9vb2Jfc3RhdGUgeworCUdNVV9PT0JfQk9PVF9TTFVNQkVSID0gMCwKKwlHTVVf T09CX0dQVV9TRVQsCisJR01VX09PQl9EQ1ZTX1NFVCwKK307CisKKy8qIFRoZXNlIGFyZSB0aGUg aW50ZXJydXB0IC8gYWNrIGJpdHMgZm9yIGVhY2ggT09CIHJlcXVlc3QgdGhhdCBhcmUgc2V0Cisg KiBpbiBhNnh4X2dtdV9zZXRfb29iIGFuZCBhNnh4X2NsZWFyX29vYgorICovCisKKy8qCisgKiBM ZXQgdGhlIEdNVSBrbm93IHRoYXQgYSBib290IG9yIHNsdW1iZXIgb3BlcmF0aW9uIGhhcyBzdGFy dGVkLiBUaGUgdmFsdWUgaW4KKyAqIFJFR19BNlhYX0dNVV9CT09UX1NMVU1CRVJfT1BUSU9OIGxl dHMgdGhlIEdNVSBrbm93IHdoaWNoIG9wZXJhdGlvbiB3ZSBhcmUKKyAqIGRvaW5nCisgKi8KKyNk ZWZpbmUgR01VX09PQl9CT09UX1NMVU1CRVJfUkVRVUVTVAkyMgorI2RlZmluZSBHTVVfT09CX0JP T1RfU0xVTUJFUl9BQ0sJMzAKKyNkZWZpbmUgR01VX09PQl9CT09UX1NMVU1CRVJfQ0xFQVIJMzAK KworLyoKKyAqIFNldCBhIG5ldyBwb3dlciBsZXZlbCBmb3IgdGhlIEdQVSB3aGVuIHRoZSBDUFUg aXMgZG9pbmcgZnJlcXVlbmN5IHNjYWxpbmcKKyAqLworI2RlZmluZSBHTVVfT09CX0RDVlNfUkVR VUVTVAkyMworI2RlZmluZSBHTVVfT09CX0RDVlNfQUNLCTMxCisjZGVmaW5lIEdNVV9PT0JfRENW U19DTEVBUgkzMQorCisvKgorICogTGV0IHRoZSBHTVUga25vdyB0byBub3QgdHVybiBvZmYgYW55 IEdQVSByZWdpc3RlcnMgd2hpbGUgdGhlIENQVSBpcyBpbiBhCisgKiBjcml0aWNhbCBzZWN0aW9u CisgKi8KKyNkZWZpbmUgR01VX09PQl9HUFVfU0VUX1JFUVVFU1QJMTYKKyNkZWZpbmUgR01VX09P Ql9HUFVfU0VUX0FDSwkyNAorI2RlZmluZSBHTVVfT09CX0dQVV9TRVRfQ0xFQVIJMjQKKworCit2 b2lkIGE2eHhfaGZpX2luaXQoc3RydWN0IGE2eHhfZ211ICpnbXUpOworaW50IGE2eHhfaGZpX3N0 YXJ0KHN0cnVjdCBhNnh4X2dtdSAqZ211LCBpbnQgYm9vdF9zdGF0ZSk7Cit2b2lkIGE2eHhfaGZp X3N0b3Aoc3RydWN0IGE2eHhfZ211ICpnbXUpOworCit2b2lkIGE2eHhfaGZpX3Rhc2sodW5zaWdu ZWQgbG9uZyBkYXRhKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hNnh4X2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzYjg1ZWJjZTg4ZAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMK QEAgLTAsMCArMSw4MDcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisv KiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4gKi8KKworCisjaW5jbHVkZSAibXNtX2dlbS5oIgorI2luY2x1ZGUgIm1zbV9t bXUuaCIKKyNpbmNsdWRlICJhNnh4X2dwdS5oIgorI2luY2x1ZGUgImE2eHhfZ211LnhtbC5oIgor CitzdGF0aWMgaW5saW5lIGJvb2wgX2E2eHhfY2hlY2tfaWRsZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1 KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUp OworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsK KworCS8qIENoZWNrIHRoYXQgdGhlIEdNVSBpcyBpZGxlICovCisJaWYgKCFhNnh4X2dtdV9pc2lk bGUoJmE2eHhfZ3B1LT5nbXUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDaGVjayB0aGEgdGhl IENYIG1hc3RlciBpcyBpZGxlICovCisJaWYgKGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9T VEFUVVMpICYKKwkJCX5BNlhYX1JCQk1fU1RBVFVTX0NQX0FIQl9CVVNZX0NYX01BU1RFUikKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuICEoZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX0lO VF8wX1NUQVRVUykgJgorCQlBNlhYX1JCQk1fSU5UXzBfTUFTS19SQkJNX0hBTkdfREVURUNUKTsK K30KKworYm9vbCBhNnh4X2lkbGUoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9yaW5n YnVmZmVyICpyaW5nKQoreworCS8qIHdhaXQgZm9yIENQIHRvIGRyYWluIHJpbmdidWZmZXI6ICov CisJaWYgKCFhZHJlbm9faWRsZShncHUsIHJpbmcpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo c3Bpbl91bnRpbChfYTZ4eF9jaGVja19pZGxlKGdwdSkpKSB7CisJCURSTV9FUlJPUigiJXM6ICVw czogdGltZW91dCB3YWl0aW5nIGZvciBHUFUgdG8gaWRsZTogc3RhdHVzICU4LjhYIGlycSAlOC44 WCBycHRyL3dwdHIgJWQvJWRcbiIsCisJCQlncHUtPm5hbWUsIF9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9TVEFUVVMpLAorCQkJZ3B1 X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX0lOVF8wX1NUQVRVUyksCisJCQlncHVfcmVhZChncHUs IFJFR19BNlhYX0NQX1JCX1JQVFIpLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9SQl9X UFRSKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IHZvaWQgYTZ4eF9mbHVzaChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZm ZXIgKnJpbmcpCit7CisJdWludDMyX3Qgd3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKworCS8qIENvcHkgdGhlIHNo YWRvdyB0byB0aGUgYWN0dWFsIHJlZ2lzdGVyICovCisJcmluZy0+Y3VyID0gcmluZy0+bmV4dDsK KworCS8qIE1ha2Ugc3VyZSB0byB3cmFwIHdwdHIgaWYgd2UgbmVlZCB0byAqLworCXdwdHIgPSBn ZXRfd3B0cihyaW5nKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZs YWdzKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHBvc3RlZCBiZWZvcmUgbWFraW5n IGEgZGVjaXNpb24gKi8KKwltYigpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUkJf V1BUUiwgd3B0cik7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc3VibWl0KHN0cnVjdCBtc21fZ3B1 ICpncHUsIHN0cnVjdCBtc21fZ2VtX3N1Ym1pdCAqc3VibWl0LAorCXN0cnVjdCBtc21fZmlsZV9w cml2YXRlICpjdHgpCit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGdwdS0+ZGV2 LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcgPSBzdWJtaXQtPnJp bmc7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBJbnZhbGlkYXRlIENDVSBkZXB0aCBhbmQgY29s b3IgKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9FVkVOVF9XUklURSwgMSk7CisJT1VUX1JJTkcocmlu ZywgUENfQ0NVX0lOVkFMSURBVEVfREVQVEgpOworCisJT1VUX1BLVDcocmluZywgQ1BfRVZFTlRf V1JJVEUsIDEpOworCU9VVF9SSU5HKHJpbmcsIFBDX0NDVV9JTlZBTElEQVRFX0NPTE9SKTsKKwor CS8qIFN1Ym1pdCB0aGUgY29tbWFuZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9j bWRzOyBpKyspIHsKKwkJc3dpdGNoIChzdWJtaXQtPmNtZFtpXS50eXBlKSB7CisJCWNhc2UgTVNN X1NVQk1JVF9DTURfSUJfVEFSR0VUX0JVRjoKKwkJCWJyZWFrOworCQljYXNlIE1TTV9TVUJNSVRf Q01EX0NUWF9SRVNUT1JFX0JVRjoKKwkJCWlmIChwcml2LT5sYXN0Y3R4ID09IGN0eCkKKwkJCQli cmVhazsKKwkJY2FzZSBNU01fU1VCTUlUX0NNRF9CVUY6CisJCQlPVVRfUEtUNyhyaW5nLCBDUF9J TkRJUkVDVF9CVUZGRVJfUEZFLCAzKTsKKwkJCU9VVF9SSU5HKHJpbmcsIGxvd2VyXzMyX2JpdHMo c3VibWl0LT5jbWRbaV0uaW92YSkpOworCQkJT1VUX1JJTkcocmluZywgdXBwZXJfMzJfYml0cyhz dWJtaXQtPmNtZFtpXS5pb3ZhKSk7CisJCQlPVVRfUklORyhyaW5nLCBzdWJtaXQtPmNtZFtpXS5z aXplKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogV3JpdGUgdGhlIGZlbmNlIHRvIHRoZSBz Y3JhdGNoIHJlZ2lzdGVyICovCisJT1VUX1BLVDQocmluZywgUkVHX0E2WFhfQ1BfU0NSQVRDSF9S RUcoMiksIDEpOworCU9VVF9SSU5HKHJpbmcsIHN1Ym1pdC0+c2Vxbm8pOworCisJLyoKKwkgKiBF eGVjdXRlIGEgQ0FDSEVfRkxVU0hfVFMgZXZlbnQuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUK KwkgKiB0aW1lc3RhbXAgaXMgd3JpdHRlbiB0byB0aGUgbWVtb3J5IGFuZCB0aGVuIHRyaWdnZXJz IHRoZSBpbnRlcnJ1cHQKKwkgKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9FVkVOVF9XUklURSwgNCk7 CisJT1VUX1JJTkcocmluZywgQ0FDSEVfRkxVU0hfVFMgfCAoMSA8PCAzMSkpOworCU9VVF9SSU5H KHJpbmcsIGxvd2VyXzMyX2JpdHMocmJtZW1wdHIocmluZywgZmVuY2UpKSk7CisJT1VUX1JJTkco cmluZywgdXBwZXJfMzJfYml0cyhyYm1lbXB0cihyaW5nLCBmZW5jZSkpKTsKKwlPVVRfUklORyhy aW5nLCBzdWJtaXQtPnNlcW5vKTsKKworCWE2eHhfZmx1c2goZ3B1LCByaW5nKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIG9mZnNldDsKKwl1MzIgdmFsdWU7Cit9IGE2eHhfaHdj Z1tdID0geworCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfU1AwLCAweDIyMjIyMjIyfSwKKwl7 UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1NQMSwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JC Qk1fQ0xPQ0tfQ05UTF9TUDIsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NO VExfU1AzLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9TUDAsIDB4 MDIwMjIyMjB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1NQMSwgMHgwMjAyMjIyMH0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfU1AyLCAweDAyMDIyMjIwfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMMl9TUDMsIDB4MDIwMjIyMjB9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0RFTEFZX1NQMCwgMHgwMDAwMDA4MH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlf U1AxLCAweDAwMDAwMDgwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9TUDIsIDB4MDAw MDAwODB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1NQMywgMHgwMDAwMDA4MH0sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9TUDAsIDB4MDAwMGYzY2Z9LAorCXtSRUdfQTZYWF9S QkJNX0NMT0NLX0hZU1RfU1AxLCAweDAwMDBmM2NmfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19I WVNUX1NQMiwgMHgwMDAwZjNjZn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9TUDMsIDB4 MDAwMGYzY2Z9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfVFAwLCAweDAyMjIyMjIyfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1RQMSwgMHgwMjIyMjIyMn0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfQ05UTF9UUDIsIDB4MDIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0NOVExfVFAzLCAweDAyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9UUDAs IDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1RQMSwgMHgyMjIyMjIy Mn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfVFAyLCAweDIyMjIyMjIyfSwKKwl7UkVH X0E2WFhfUkJCTV9DTE9DS19DTlRMMl9UUDMsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJN X0NMT0NLX0NOVEwzX1RQMCwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05U TDNfVFAxLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMM19UUDIsIDB4 MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwzX1RQMywgMHgyMjIyMjIyMn0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDRfVFAwLCAweDAwMDIyMjIyfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMNF9UUDEsIDB4MDAwMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0NOVEw0X1RQMiwgMHgwMDAyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDRf VFAzLCAweDAwMDIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1RQMCwgMHg3Nzc3 Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9UUDEsIDB4Nzc3Nzc3Nzd9LAorCXtS RUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVFAyLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19IWVNUX1RQMywgMHg3Nzc3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlT VDJfVFAwLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUMl9UUDEsIDB4 Nzc3Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1QyX1RQMiwgMHg3Nzc3Nzc3N30s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDJfVFAzLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19IWVNUM19UUDAsIDB4Nzc3Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0hZU1QzX1RQMSwgMHg3Nzc3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDNf VFAyLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUM19UUDMsIDB4Nzc3 Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1Q0X1RQMCwgMHgwMDA3Nzc3N30sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDRfVFAxLCAweDAwMDc3Nzc3fSwKKwl7UkVHX0E2WFhf UkJCTV9DTE9DS19IWVNUNF9UUDIsIDB4MDAwNzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0hZU1Q0X1RQMywgMHgwMDA3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfVFAw LCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9UUDEsIDB4MTExMTEx MTF9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1RQMiwgMHgxMTExMTExMX0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfVFAzLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19ERUxBWTJfVFAwLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19E RUxBWTJfVFAxLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTJfVFAy LCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTJfVFAzLCAweDExMTEx MTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTNfVFAwLCAweDExMTExMTExfSwKKwl7 UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTNfVFAxLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhf UkJCTV9DTE9DS19ERUxBWTNfVFAyLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9D S19ERUxBWTNfVFAzLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRf VFAwLCAweDAwMDExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRfVFAxLCAweDAw MDExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRfVFAyLCAweDAwMDExMTExfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRfVFAzLCAweDAwMDExMTExfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMX1VDSEUsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0NOVEwyX1VDSEUsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwz X1VDSEUsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEw0X1VDSEUsIDB4 MDAyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVUNIRSwgMHgwMDAwMDAwNH0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfVUNIRSwgMHgwMDAwMDAwMn0sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfQ05UTF9SQjAsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0NOVExfUkIxLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1JC MiwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9SQjMsIDB4MjIyMjIy MjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1JCMCwgMHgwMDAwMjIyMn0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfUkIxLCAweDAwMDAyMjIyfSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19DTlRMMl9SQjIsIDB4MDAwMDIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NO VEwyX1JCMywgMHgwMDAwMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9DQ1UwLCAw eDAwMDAyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX0NDVTEsIDB4MDAwMDIyMjB9 LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfQ0NVMiwgMHgwMDAwMjIyMH0sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfQ05UTF9DQ1UzLCAweDAwMDAyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19IWVNUX1JCX0NDVTAsIDB4MDAwNDBmMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZ U1RfUkJfQ0NVMSwgMHgwMDA0MGYwMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9SQl9D Q1UyLCAweDAwMDQwZjAwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1JCX0NDVTMsIDB4 MDAwNDBmMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfUkFDLCAweDA1MDIyMDIyfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9SQUMsIDB4MDAwMDU1NTV9LAorCXtSRUdfQTZY WF9SQkJNX0NMT0NLX0RFTEFZX1JBQywgMHgwMDAwMDAxMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xP Q0tfSFlTVF9SQUMsIDB4MDA0NDUwNDR9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfVFNF X1JBU19SQkJNLCAweDA0MjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19NT0RFX0dQQywg MHgwMDIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfTU9ERV9WRkQsIDB4MDAwMDIyMjJ9 LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVFNFX1JBU19SQkJNLCAweDAwMDAwMDAwfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX0dQQywgMHgwNDEwNDAwNH0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfSFlTVF9WRkQsIDB4MDAwMDAwMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0RFTEFZX0hMU1EsIDB4MDAwMDAwMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1RT RV9SQVNfUkJCTSwgMHgwMDAwNDAwMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfR1BD LCAweDAwMDAwMjAwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9WRkQsIDB4MDAwMDIy MjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX0hMU1FfMiwgMHgwMDAwMDAwMn0sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfTU9ERV9ITFNRLCAweDAwMDAyMjIyfSwKKwl7UkVHX0E2WFhf UkJCTV9DTE9DS19DTlRMX0dNVV9HWCwgMHgwMDAwMDIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xP Q0tfREVMQVlfR01VX0dYLCAweDAwMDAwMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNU X0dNVV9HWCwgMHgwMDAwMDU1NX0KK307CisKK3N0YXRpYyB2b2lkIGE2eHhfc2V0X2h3Y2coc3Ry dWN0IG1zbV9ncHUgKmdwdSwgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRy ZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1 ID0gdG9fYTZ4eF9ncHUoYWRyZW5vX2dwdSk7CisJc3RydWN0IGE2eHhfZ211ICpnbXUgPSAmYTZ4 eF9ncHUtPmdtdTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsOworCisJdmFsID0gZ3B1X3Jl YWQoZ3B1LCBSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwpOworCisJLyogRG9uJ3QgcmUtcHJvZ3Jh bSB0aGUgcmVnaXN0ZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgY29ycmVjdCAqLworCWlmICgoIXN0 YXRlICYmICF2YWwpIHx8IChzdGF0ZSAmJiAodmFsID09IDB4OGFhOGFhMDIpKSkKKwkJcmV0dXJu OworCisJLyogRGlzYWJsZSBTUCBjbG9jayBiZWZvcmUgcHJvZ3JhbW1pbmcgSFdDRyByZWdpc3Rl cnMgKi8KKwlnbXVfcm13KGdtdSwgUkVHX0E2WFhfR1BVX0dNVV9HWF9TUFRQUkFDX0NMT0NLX0NP TlRST0wsIDEsIDApOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9od2NnKTsg aSsrKQorCQlncHVfd3JpdGUoZ3B1LCBhNnh4X2h3Y2dbaV0ub2Zmc2V0LAorCQkJc3RhdGUgPyBh Nnh4X2h3Y2dbaV0udmFsdWUgOiAwKTsKKworCS8qIEVuYWJsZSBTUCBjbG9jayAqLworCWdtdV9y bXcoZ211LCBSRUdfQTZYWF9HUFVfR01VX0dYX1NQVFBSQUNfQ0xPQ0tfQ09OVFJPTCwgMCwgMSk7 CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwsIHN0YXRlID8gMHg4 YWE4YWEwMiA6IDApOworfQorCitzdGF0aWMgaW50IGE2eHhfY3BfaW5pdChzdHJ1Y3QgbXNtX2dw dSAqZ3B1KQoreworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZyA9IGdwdS0+cmJbMF07CisK KwlPVVRfUEtUNyhyaW5nLCBDUF9NRV9JTklULCA4KTsKKworCU9VVF9SSU5HKHJpbmcsIDB4MDAw MDAwMmYpOworCisJLyogRW5hYmxlIG11bHRpcGxlIGhhcmR3YXJlIGNvbnRleHRzICovCisJT1VU X1JJTkcocmluZywgMHgwMDAwMDAwMyk7CisKKwkvKiBFbmFibGUgZXJyb3IgZGV0ZWN0aW9uICov CisJT1VUX1JJTkcocmluZywgMHgyMDAwMDAwMCk7CisKKwkvKiBEb24ndCBlbmFibGUgaGVhZGVy IGR1bXAgKi8KKwlPVVRfUklORyhyaW5nLCAweDAwMDAwMDAwKTsKKwlPVVRfUklORyhyaW5nLCAw eDAwMDAwMDAwKTsKKworCS8qIE5vIHdvcmthcm91bmRzIGVuYWJsZWQgKi8KKwlPVVRfUklORyhy aW5nLCAweDAwMDAwMDAwKTsKKworCS8qIFBhZCByZXN0IG9mIHRoZSBjbWRzIHdpdGggMCdzICov CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAw MCk7CisKKwlhNnh4X2ZsdXNoKGdwdSwgcmluZyk7CisJcmV0dXJuIGE2eHhfaWRsZShncHUsIHJp bmcpID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF91Y29kZV9pbml0KHN0cnVj dCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19h ZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1 KGFkcmVub19ncHUpOworCisJaWYgKCFhNnh4X2dwdS0+c3FlX2JvKSB7CisJCWE2eHhfZ3B1LT5z cWVfYm8gPSBhZHJlbm9fZndfY3JlYXRlX2JvKGdwdSwKKwkJCWFkcmVub19ncHUtPmZ3W0FEUkVO T19GV19TUUVdLCAmYTZ4eF9ncHUtPnNxZV9pb3ZhKTsKKworCQlpZiAoSVNfRVJSKGE2eHhfZ3B1 LT5zcWVfYm8pKSB7CisJCQlpbnQgcmV0ID0gUFRSX0VSUihhNnh4X2dwdS0+c3FlX2JvKTsKKwor CQkJYTZ4eF9ncHUtPnNxZV9ibyA9IE5VTEw7CisJCQlEUk1fREVWX0VSUk9SKCZncHUtPnBkZXYt PmRldiwKKwkJCQkiQ291bGQgbm90IGFsbG9jYXRlIFNRRSB1Y29kZTogJWRcbiIsIHJldCk7CisK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlncHVfd3JpdGU2NChncHUsIFJFR19BNlhYX0NQ X1NRRV9JTlNUUl9CQVNFX0xPLAorCQlSRUdfQTZYWF9DUF9TUUVfSU5TVFJfQkFTRV9ISSwgYTZ4 eF9ncHUtPnNxZV9pb3ZhKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIEE2WFhfSU5UX01B U0sgKEE2WFhfUkJCTV9JTlRfMF9NQVNLX0NQX0FIQl9FUlJPUiB8IFwKKwkgIEE2WFhfUkJCTV9J TlRfMF9NQVNLX1JCQk1fQVRCX0FTWU5DRklGT19PVkVSRkxPVyB8IFwKKwkgIEE2WFhfUkJCTV9J TlRfMF9NQVNLX0NQX0hXX0VSUk9SIHwgXAorCSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfSUIy IHwgXAorCSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfSUIxIHwgXAorCSAgQTZYWF9SQkJNX0lO VF8wX01BU0tfQ1BfUkIgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9DQUNIRV9GTFVT SF9UUyB8IFwKKwkgIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1JCQk1fQVRCX0JVU19PVkVSRkxPVyB8 IFwKKwkgIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1JCQk1fSEFOR19ERVRFQ1QgfCBcCisJICBBNlhY X1JCQk1fSU5UXzBfTUFTS19VQ0hFX09PQl9BQ0NFU1MgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBf TUFTS19VQ0hFX1RSQVBfSU5UUikKKworc3RhdGljIGludCBhNnh4X2h3X2luaXQoc3RydWN0IG1z bV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVu b19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gdG9fYTZ4eF9ncHUoYWRy ZW5vX2dwdSk7CisJaW50IHJldDsKKworCS8qIE1ha2Ugc3VyZSB0aGUgR01VIGtlZXBzIHRoZSBH UFUgb24gd2hpbGUgd2Ugc2V0IGl0IHVwICovCisJYTZ4eF9nbXVfc2V0X29vYigmYTZ4eF9ncHUt PmdtdSwgR01VX09PQl9HUFVfU0VUKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1f U0VDVklEX1RTQl9DTlRMLCAwKTsKKworCS8qCisJICogRGlzYWJsZSB0aGUgdHJ1c3RlZCBtZW1v cnkgcmFuZ2UgLSB3ZSBkb24ndCBhY3R1YWxseSBzdXBwb3J0ZWQgc2VjdXJlCisJICogbWVtb3J5 IHJlbmRlcmluZyBhdCB0aGlzIHBvaW50IGluIHRpbWUgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmxv Y2sgb2ZmCisJICogcGFydCBvZiB0aGUgdmlydHVhbCBtZW1vcnkgc3BhY2UuCisJICovCisJZ3B1 X3dyaXRlNjQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfVFJVU1RFRF9CQVNFX0xPLAor CQlSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfVFJVU1RFRF9CQVNFX0hJLCAweDAwMDAwMDAwKTsK KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfVFJVU1RFRF9TSVpFLCAw eDAwMDAwMDAwKTsKKworCS8qIGVuYWJsZSBoYXJkd2FyZSBjbG9ja2dhdGluZyAqLworCWE2eHhf c2V0X2h3Y2coZ3B1LCB0cnVlKTsKKworCS8qIFZCSUYgc3RhcnQgKi8KKwlncHVfd3JpdGUoZ3B1 LCBSRUdfQTZYWF9WQklGX0dBVEVfT0ZGX1dSUkVRX0VOLCAweDAwMDAwMDA5KTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1ZCSUZfQ0xJRU5UX1FPU19DTlRMLCAweDMpOworCisJLyog TWFrZSBhbGwgYmxvY2tzIGNvbnRyaWJ1dGUgdG8gdGhlIEdQVSBCVVNZIHBlcmYgY291bnRlciAq LworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1fUEVSRkNUUl9HUFVfQlVTWV9NQVNLRUQs IDB4ZmZmZmZmZmYpOworCisJLyogRGlzYWJsZSBMMiBieXBhc3MgaW4gdGhlIFVDSEUgKi8KKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9VQ0hFX1dSSVRFX1JBTkdFX01BWF9MTywgMHhmZmZmZmZj MCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9XUklURV9SQU5HRV9NQVhfSEksIDB4 MDAwMWZmZmYpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1VDSEVfVFJBUF9CQVNFX0xPLCAw eGZmZmZmMDAwKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9VQ0hFX1RSQVBfQkFTRV9ISSwg MHgwMDAxZmZmZik7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9XUklURV9USFJVX0JB U0VfTE8sIDB4ZmZmZmYwMDApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1VDSEVfV1JJVEVf VEhSVV9CQVNFX0hJLCAweDAwMDFmZmZmKTsKKworCS8qIFNldCB0aGUgR01FTSBWQSByYW5nZSBb MHgxMDAwMDA6MHgxMDAwMDAgKyBncHUtPmdtZW0gLSAxXSAqLworCWdwdV93cml0ZTY0KGdwdSwg UkVHX0E2WFhfVUNIRV9HTUVNX1JBTkdFX01JTl9MTywKKwkJUkVHX0E2WFhfVUNIRV9HTUVNX1JB TkdFX01JTl9ISSwgMHgwMDEwMDAwMCk7CisKKwlncHVfd3JpdGU2NChncHUsIFJFR19BNlhYX1VD SEVfR01FTV9SQU5HRV9NQVhfTE8sCisJCVJFR19BNlhYX1VDSEVfR01FTV9SQU5HRV9NQVhfSEks CisJCTB4MDAxMDAwMDAgKyBhZHJlbm9fZ3B1LT5nbWVtIC0gMSk7CisKKwlncHVfd3JpdGUoZ3B1 LCBSRUdfQTZYWF9VQ0hFX0ZJTFRFUl9DTlRMLCAweDgwNCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfVUNIRV9DQUNIRV9XQVlTLCAweDQpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfUk9RX1RIUkVTSE9MRFNfMiwgMHgwMTAwMDBjMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2 WFhfQ1BfUk9RX1RIUkVTSE9MRFNfMSwgMHg4MDQwMzYyYyk7CisKKwkvKiBTZXR0aW5nIHRoZSBt ZW0gcG9vbCBzaXplICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfTUVNX1BPT0xfU0la RSwgMTI4KTsKKworCS8qIFNldHRpbmcgdGhlIHByaW1GaWZvIHRocmVzaG9sZHMgZGVmYXVsdCB2 YWx1ZXMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9QQ19EQkdfRUNPX0NOVEwsICgweDMw MCA8PCAxMSkpOworCisJLyogU2V0IHRoZSBBSEIgZGVmYXVsdCBzbGF2ZSByZXNwb25zZSB0byAi RVJST1IiICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfQUhCX0NOVEwsIDB4MSk7CisK KwkvKiBUdXJuIG9uIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfUkJCTV9QRVJGQ1RSX0NOVEwsIDB4MSk7CisKKwkvKiBTZWxlY3QgQ1AwIHRvIGFsd2F5 cyBjb3VudCBjeWNsZXMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QRVJGQ1RSX0NQ X1NFTF8wLCBQRVJGX0NQX0FMV0FZU19DT1VOVCk7CisKKwkvKiBGSVhNRTogbm90IHN1cmUgaWYg dGhpcyBzaG91bGQgbGl2ZSBoZXJlIG9yIGluIGE2eHhfZ211LmMgKi8KKwlnbXVfd3JpdGUoJmE2 eHhfZ3B1LT5nbXUsICBSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX01BU0ssCisJCTB4 ZmYwMDAwMDApOworCWdtdV9ybXcoJmE2eHhfZ3B1LT5nbXUsIFJFR19BNlhYX0dNVV9DWF9HTVVf UE9XRVJfQ09VTlRFUl9TRUxFQ1RfMCwKKwkJMHhmZiwgMHgyMCk7CisJZ211X3dyaXRlKCZhNnh4 X2dwdS0+Z211LCBSRUdfQTZYWF9HTVVfQ1hfR01VX1BPV0VSX0NPVU5URVJfRU5BQkxFLAorCQkw eDAxKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCX05DX01PREVfQ05UTCwgMiA8PCAx KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9UUEwxX05DX01PREVfQ05UTCwgMiA8PCAxKTsK KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9TUF9OQ19NT0RFX0NOVEwsIDIgPDwgMSk7CisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9NT0RFX0NOVEwsIDIgPDwgMjEpOworCisJLyogRW5h YmxlIGZhdWx0IGRldGVjdGlvbiAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1fSU5U RVJGQUNFX0hBTkdfSU5UX0NOVEwsCisJCSgxIDw8IDMwKSB8IDB4MWZmZmZmKTsKKworCWdwdV93 cml0ZShncHUsIFJFR19BNlhYX1VDSEVfQ0xJRU5UX1BGLCAxKTsKKworCS8qIFByb3RlY3QgcmVn aXN0ZXJzIGZyb20gdGhlIENQICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVD VF9DTlRMLCAweDAwMDAwMDAzKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RF Q1QoMCksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg2MDAsIDB4NTEpKTsKKwlncHVfd3JpdGUo Z3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDEpLCBBNlhYX1BST1RFQ1RfUlcoMHhhZTUwLCAweDIp KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDIpLCBBNlhYX1BST1RFQ1Rf UlcoMHg5NjI0LCAweDEzKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCgz KSwgQTZYWF9QUk9URUNUX1JXKDB4ODYzMCwgMHg4KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2 WFhfQ1BfUFJPVEVDVCg0KSwgQTZYWF9QUk9URUNUX1JXKDB4OWU3MCwgMHgxKSk7CisJZ3B1X3dy aXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCg1KSwgQTZYWF9QUk9URUNUX1JXKDB4OWU3OCwg MHgxODcpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDYpLCBBNlhYX1BS T1RFQ1RfUlcoMHhmMDAwLCAweDgxMCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BS T1RFQ1QoNyksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHhmYzAwLCAweDMpKTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDgpLCBBNlhYX1BST1RFQ1RfUlcoMHg1MGUsIDB4 MCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoOSksIEE2WFhfUFJPVEVD VF9SRE9OTFkoMHg1MGYsIDB4MCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RF Q1QoMTApLCBBNlhYX1BST1RFQ1RfUlcoMHg1MTAsIDB4MCkpOworCWdwdV93cml0ZShncHUsIFJF R19BNlhYX0NQX1BST1RFQ1QoMTEpLAorCQlBNlhYX1BST1RFQ1RfUkRPTkxZKDB4MCwgMHg0Zjkp KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDEyKSwKKwkJQTZYWF9QUk9U RUNUX1JET05MWSgweDUwMSwgMHhhKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJP VEVDVCgxMyksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg1MTEsIDB4NDQpKTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE0KSwgQTZYWF9QUk9URUNUX1JXKDB4ZTAwLCAw eGUpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE1KSwgQTZYWF9QUk9U RUNUX1JXKDB4OGUwMCwgMHgwKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVD VCgxNiksIEE2WFhfUFJPVEVDVF9SVygweDhlNTAsIDB4ZikpOworCWdwdV93cml0ZShncHUsIFJF R19BNlhYX0NQX1BST1RFQ1QoMTcpLCBBNlhYX1BST1RFQ1RfUlcoMHhiZTAyLCAweDApKTsKKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE4KSwKKwkJQTZYWF9QUk9URUNUX1JX KDB4YmUyMCwgMHgxMWYzKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCgx OSksIEE2WFhfUFJPVEVDVF9SVygweDgwMCwgMHg4MikpOworCWdwdV93cml0ZShncHUsIFJFR19B NlhYX0NQX1BST1RFQ1QoMjApLCBBNlhYX1BST1RFQ1RfUlcoMHg4YTAsIDB4OCkpOworCWdwdV93 cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMjEpLCBBNlhYX1BST1RFQ1RfUlcoMHg4YWIs IDB4MTkpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDIyKSwgQTZYWF9Q Uk9URUNUX1JXKDB4OTAwLCAweDRkKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJP VEVDVCgyMyksIEE2WFhfUFJPVEVDVF9SVygweDk4ZCwgMHg3NikpOworCWdwdV93cml0ZShncHUs IFJFR19BNlhYX0NQX1BST1RFQ1QoMjQpLAorCQkJQTZYWF9QUk9URUNUX1JET05MWSgweDhkMCwg MHgyMykpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMjUpLAorCQkJQTZY WF9QUk9URUNUX1JET05MWSgweDk4MCwgMHg0KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfUFJPVEVDVCgyNiksIEE2WFhfUFJPVEVDVF9SVygweGE2MzAsIDB4MCkpOworCisJLyogRW5h YmxlIGludGVycnVwdHMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX0lOVF8wX01B U0ssIEE2WFhfSU5UX01BU0spOworCisJcmV0ID0gYWRyZW5vX2h3X2luaXQoZ3B1KTsKKwlpZiAo cmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGE2eHhfdWNvZGVfaW5pdChncHUpOworCWlmIChy ZXQpCisJCWdvdG8gb3V0OworCisJLyogQWx3YXlzIGNvbWUgdXAgb24gcmIgMCAqLworCWE2eHhf Z3B1LT5jdXJfcmluZyA9IGdwdS0+cmJbMF07CisKKwkvKiBFbmFibGUgdGhlIFNRRV90byBzdGFy dCB0aGUgQ1AgZW5naW5lICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfU1FFX0NOVEws IDEpOworCisJcmV0ID0gYTZ4eF9jcF9pbml0KGdwdSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7 CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UUlVTVF9DTlRMLCAweDAp OworCitvdXQ6CisJLyoKKwkgKiBUZWxsIHRoZSBHTVUgdGhhdCB3ZSBhcmUgZG9uZSB0b3VjaGlu ZyB0aGUgR1BVIGFuZCBpdCBjYW4gc3RhcnQgcG93ZXIKKwkgKiBtYW5hZ2VtZW50CisJICovCisJ YTZ4eF9nbXVfY2xlYXJfb29iKCZhNnh4X2dwdS0+Z211LCBHTVVfT09CX0dQVV9TRVQpOworCisJ LyogVGFrZSB0aGUgR01VIG91dCBvZiBpdHMgc3BlY2lhbCBib290IG1vZGUgKi8KKwlhNnh4X2dt dV9jbGVhcl9vb2IoJmE2eHhfZ3B1LT5nbXUsIEdNVV9PT0JfQk9PVF9TTFVNQkVSKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZHVtcChzdHJ1Y3QgbXNtX2dwdSAqZ3B1 KQoreworCWRldl9pbmZvKCZncHUtPnBkZXYtPmRldiwgInN0YXR1czogICAlMDh4XG4iLAorCQkJ Z3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NUQVRVUykpOworCWFkcmVub19kdW1wKGdwdSk7 Cit9CisKKyNkZWZpbmUgVkJJRl9SRVNFVF9BQ0tfVElNRU9VVAkxMDAKKyNkZWZpbmUgVkJJRl9S RVNFVF9BQ0tfTUFTSwkweDAwZjAKKworc3RhdGljIHZvaWQgYTZ4eF9yZWNvdmVyKHN0cnVjdCBt c21fZ3B1ICpncHUpCit7CisJaW50IGk7CisKKwlhZHJlbm9fZHVtcF9pbmZvKGdwdSk7CisKKwlm b3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkZXZfaW5mbygmZ3B1LT5wZGV2LT5kZXYsICJDUF9T Q1JBVENIX1JFRyVkOiAldVxuIiwgaSwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfU0NS QVRDSF9SRUcoaSkpKTsKKworCWlmIChoYW5nX2RlYnVnKQorCQlhNnh4X2R1bXAoZ3B1KTsKKwor CWdwdS0+ZnVuY3MtPnBtX3N1c3BlbmQoZ3B1KTsKKwlncHUtPmZ1bmNzLT5wbV9yZXN1bWUoZ3B1 KTsKKworCW1zbV9ncHVfaHdfaW5pdChncHUpOworfQorCitzdGF0aWMgaW50IGE2eHhfZmF1bHRf aGFuZGxlcih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgaW92YSwgaW50IGZsYWdzKQoreworCXN0 cnVjdCBtc21fZ3B1ICpncHUgPSBhcmc7CisKKwlwcl93YXJuX3JhdGVsaW1pdGVkKCIqKiogZ3B1 IGZhdWx0OiBpb3ZhPSUwOGx4LCBmbGFncz0lZCAoJXUsJXUsJXUsJXUpXG4iLAorCQkJaW92YSwg ZmxhZ3MsCisJCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX1NDUkFUQ0hfUkVHKDQpKSwKKwkJ CWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfU0NSQVRDSF9SRUcoNSkpLAorCQkJZ3B1X3JlYWQo Z3B1LCBSRUdfQTZYWF9DUF9TQ1JBVENIX1JFRyg2KSksCisJCQlncHVfcmVhZChncHUsIFJFR19B NlhYX0NQX1NDUkFUQ0hfUkVHKDcpKSk7CisKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworc3RhdGlj IHZvaWQgYTZ4eF9jcF9od19lcnJfaXJxKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJdTMyIHN0 YXR1cyA9IGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfSU5URVJSVVBUX1NUQVRVUyk7CisKKwlp ZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRfQ1BfT1BDT0RFX0VSUk9SKSB7CisJCXUzMiB2YWw7CisK KwkJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfU1FFX1NUQVRfQUREUiwgMSk7CisJCXZhbCA9 IGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfU1FFX1NUQVRfREFUQSk7CisJCWRldl9lcnJfcmF0 ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LAorCQkJIkNQIHwgb3Bjb2RlIGVycm9yIHwgcG9zc2li bGUgb3Bjb2RlPTB4JTguOFhcbiIsCisJCQl2YWwpOworCX0KKworCWlmIChzdGF0dXMgJiBBNlhY X0NQX0lOVF9DUF9VQ09ERV9FUlJPUikKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCgmZ3B1LT5wZGV2 LT5kZXYsCisJCQkiQ1AgdWNvZGUgZXJyb3IgaW50ZXJydXB0XG4iKTsKKworCWlmIChzdGF0dXMg JiBBNlhYX0NQX0lOVF9DUF9IV19GQVVMVF9FUlJPUikKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCgm Z3B1LT5wZGV2LT5kZXYsICJDUCB8IEhXIGZhdWx0IHwgc3RhdHVzPTB4JTguOFhcbiIsCisJCQln cHVfcmVhZChncHUsIFJFR19BNlhYX0NQX0hXX0ZBVUxUKSk7CisKKwlpZiAoc3RhdHVzICYgQTZY WF9DUF9JTlRfQ1BfUkVHSVNURVJfUFJPVEVDVElPTl9FUlJPUikgeworCQl1MzIgdmFsID0gZ3B1 X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUX1NUQVRVUyk7CisKKwkJZGV2X2Vycl9yYXRl bGltaXRlZCgmZ3B1LT5wZGV2LT5kZXYsCisJCQkiQ1AgfCBwcm90ZWN0ZWQgbW9kZSBlcnJvciB8 ICVzIHwgYWRkcj0weCU4LjhYIHwgc3RhdHVzPTB4JTguOFhcbiIsCisJCQl2YWwgJiAoMSA8PCAy MCkgPyAiUkVBRCIgOiAiV1JJVEUiLAorCQkJKHZhbCAmIDB4M2ZmZmYpLCB2YWwpOworCX0KKwor CWlmIChzdGF0dXMgJiBBNlhYX0NQX0lOVF9DUF9BSEJfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxp bWl0ZWQoJmdwdS0+cGRldi0+ZGV2LCAiQ1AgQUhCIGVycm9yIGludGVycnVwdFxuIik7CisKKwlp ZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRfQ1BfVlNEX1BBUklUWV9FUlJPUikKKwkJZGV2X2Vycl9y YXRlbGltaXRlZCgmZ3B1LT5wZGV2LT5kZXYsICJDUCBWU0QgZGVjb2RlciBwYXJpdHkgZXJyb3Jc biIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfQ1BfSU5UX0NQX0lMTEVHQUxfSU5TVFJfRVJST1Ip CisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LCAiQ1AgaWxsZWdhbCBpbnN0 cnVjdGlvbiBlcnJvclxuIik7CisKK30KKworc3RhdGljIHZvaWQgYTZ4eF9mYXVsdF9kZXRlY3Rf aXJxKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGdw dS0+ZGV2OworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZyA9IGdwdS0+ZnVuY3MtPmFjdGl2ZV9yaW5n KGdwdSk7CisKKwlEUk1fREVWX0VSUk9SKCZncHUtPnBkZXYtPmRldiwKKwkJImdwdSBmYXVsdCBy aW5nICVkIGZlbmNlICV4IHN0YXR1cyAlOC44WCByYiAlNC40eC8lNC40eCBpYjEgJTE2LjE2bGxY LyU0LjR4IGliMiAlMTYuMTZsbFgvJTQuNHhcbiIsCisJCXJpbmcgPyByaW5nLT5pZCA6IC0xLCBy aW5nID8gcmluZy0+c2Vxbm8gOiAwLAorCQlncHVfcmVhZChncHUsIFJFR19BNlhYX1JCQk1fU1RB VFVTKSwKKwkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9SQl9SUFRSKSwKKwkJZ3B1X3JlYWQo Z3B1LCBSRUdfQTZYWF9DUF9SQl9XUFRSKSwKKwkJZ3B1X3JlYWQ2NChncHUsIFJFR19BNlhYX0NQ X0lCMV9CQVNFLCBSRUdfQTZYWF9DUF9JQjFfQkFTRV9ISSksCisJCWdwdV9yZWFkKGdwdSwgUkVH X0E2WFhfQ1BfSUIxX1JFTV9TSVpFKSwKKwkJZ3B1X3JlYWQ2NChncHUsIFJFR19BNlhYX0NQX0lC Ml9CQVNFLCBSRUdfQTZYWF9DUF9JQjJfQkFTRV9ISSksCisJCWdwdV9yZWFkKGdwdSwgUkVHX0E2 WFhfQ1BfSUIyX1JFTV9TSVpFKSk7CisKKwkvKiBUdXJuIG9mZiB0aGUgaGFuZ2NoZWNrIHRpbWVy IHRvIGtlZXAgaXQgZnJvbSBib3RoZXJpbmcgdXMgKi8KKwlkZWxfdGltZXIoJmdwdS0+aGFuZ2No ZWNrX3RpbWVyKTsKKworCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZncHUtPnJlY292ZXJfd29yayk7 Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhNnh4X2lycShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQor eworCXUzMiBzdGF0dXMgPSBncHVfcmVhZChncHUsIFJFR19BNlhYX1JCQk1fSU5UXzBfU1RBVFVT KTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1fSU5UX0NMRUFSX0NNRCwgc3RhdHVz KTsKKworCWlmIChzdGF0dXMgJiBBNlhYX1JCQk1fSU5UXzBfTUFTS19SQkJNX0hBTkdfREVURUNU KQorCQlhNnh4X2ZhdWx0X2RldGVjdF9pcnEoZ3B1KTsKKworCWlmIChzdGF0dXMgJiBBNlhYX1JC Qk1fSU5UXzBfTUFTS19DUF9BSEJfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+ cGRldi0+ZGV2LCAiQ1AgfCBBSEIgYnVzIGVycm9yXG4iKTsKKworCWlmIChzdGF0dXMgJiBBNlhY X1JCQk1fSU5UXzBfTUFTS19DUF9IV19FUlJPUikKKwkJYTZ4eF9jcF9od19lcnJfaXJxKGdwdSk7 CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfUkJCTV9BVEJfQVNZTkNGSUZP X09WRVJGTE9XKQorCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUtPnBkZXYtPmRldiwgIlJCQk0g fCBBVEIgQVNZTkMgb3ZlcmZsb3dcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9JTlRf MF9NQVNLX1JCQk1fQVRCX0JVU19PVkVSRkxPVykKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCgmZ3B1 LT5wZGV2LT5kZXYsICJSQkJNIHwgQVRCIGJ1cyBvdmVyZmxvd1xuIik7CisKKwlpZiAoc3RhdHVz ICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfVUNIRV9PT0JfQUNDRVNTKQorCQlkZXZfZXJyX3JhdGVs aW1pdGVkKCZncHUtPnBkZXYtPmRldiwgIlVDSEUgfCBPdXQgb2YgYm91bmRzIGFjY2Vzc1xuIik7 CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQ0FDSEVfRkxVU0hfVFMp CisJCW1zbV9ncHVfcmV0aXJlKGdwdSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0 YXRpYyBjb25zdCB1MzIgYTZ4eF9yZWdpc3Rlcl9vZmZzZXRzW1JFR19BRFJFTk9fUkVHSVNURVJf TUFYXSA9IHsKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JCX0JBU0UsIFJFR19B NlhYX0NQX1JCX0JBU0UpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfQkFT RV9ISSwgUkVHX0E2WFhfQ1BfUkJfQkFTRV9ISSksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FE UkVOT19DUF9SQl9SUFRSX0FERFIsCisJCVJFR19BNlhYX0NQX1JCX1JQVFJfQUREUl9MTyksCisJ UkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9SQl9SUFRSX0FERFJfSEksCisJCVJFR19B NlhYX0NQX1JCX1JQVFJfQUREUl9ISSksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19D UF9SQl9SUFRSLCBSRUdfQTZYWF9DUF9SQl9SUFRSKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdf QURSRU5PX0NQX1JCX1dQVFIsIFJFR19BNlhYX0NQX1JCX1dQVFIpLAorCVJFR19BRFJFTk9fREVG SU5FKFJFR19BRFJFTk9fQ1BfUkJfQ05UTCwgUkVHX0E2WFhfQ1BfUkJfQ05UTCksCit9OworCitz dGF0aWMgY29uc3QgdTMyIGE2eHhfcmVnaXN0ZXJzW10gPSB7CisJMHgwMDAwLCAweDAwMDIsIDB4 MDAxMCwgMHgwMDEwLCAweDAwMTIsIDB4MDAxMiwgMHgwMDE4LCAweDAwMWIsCisJMHgwMDFlLCAw eDAwMzIsIDB4MDAzOCwgMHgwMDNjLCAweDAwNDIsIDB4MDA0MiwgMHgwMDQ0LCAweDAwNDQsCisJ MHgwMDQ3LCAweDAwNDcsIDB4MDA1NiwgMHgwMDU2LCAweDAwYWQsIDB4MDBhZSwgMHgwMGIwLCAw eDAwZmIsCisJMHgwMTAwLCAweDAxMWQsIDB4MDIwMCwgMHgwMjBkLCAweDAyMTAsIDB4MDIxMywg MHgwMjE4LCAweDAyM2QsCisJMHgwNDAwLCAweDA0ZjksIDB4MDUwMCwgMHgwNTAwLCAweDA1MDUs IDB4MDUwYiwgMHgwNTBlLCAweDA1MTEsCisJMHgwNTMzLCAweDA1MzMsIDB4MDU0MCwgMHgwNTU1 LCAweDA4MDAsIDB4MDgwOCwgMHgwODEwLCAweDA4MTMsCisJMHgwODIwLCAweDA4MjEsIDB4MDgy MywgMHgwODI3LCAweDA4MzAsIDB4MDgzMywgMHgwODQwLCAweDA4NDMsCisJMHgwODRmLCAweDA4 NmYsIDB4MDg4MCwgMHgwODhhLCAweDA4YTAsIDB4MDhhYiwgMHgwOGMwLCAweDA4YzQsCisJMHgw OGQwLCAweDA4ZGQsIDB4MDhmMCwgMHgwOGYzLCAweDA5MDAsIDB4MDkwMywgMHgwOTA4LCAweDA5 MTEsCisJMHgwOTI4LCAweDA5M2UsIDB4MDk0MiwgMHgwOTRkLCAweDA5ODAsIDB4MDk4NCwgMHgw OThkLCAweDA5OTYsCisJMHgwOTk4LCAweDA5OWUsIDB4MDlhMCwgMHgwOWE2LCAweDA5YTgsIDB4 MDlhZSwgMHgwOWIwLCAweDA5YjEsCisJMHgwOWMyLCAweDA5YzgsIDB4MGEwMCwgMHgwYTAzLCAw eDBjMDAsIDB4MGMwNCwgMHgwYzA2LCAweDBjMDYsCisJMHgwYzEwLCAweDBjZDksIDB4MGUwMCwg MHgwZTBlLCAweDBlMTAsIDB4MGUxMywgMHgwZTE3LCAweDBlMTksCisJMHgwZTFjLCAweDBlMmIs IDB4MGUzMCwgMHgwZTMyLCAweDBlMzgsIDB4MGUzOSwgMHg4NjAwLCAweDg2MDEsCisJMHg4NjEw LCAweDg2MWIsIDB4ODYyMCwgMHg4NjIwLCAweDg2MjgsIDB4ODYyYiwgMHg4NjMwLCAweDg2Mzcs CisJMHg4ZTAxLCAweDhlMDEsIDB4OGUwNCwgMHg4ZTA1LCAweDhlMDcsIDB4OGUwOCwgMHg4ZTBj LCAweDhlMGMsCisJMHg4ZTEwLCAweDhlMWMsIDB4OGUyMCwgMHg4ZTI1LCAweDhlMjgsIDB4OGUy OCwgMHg4ZTJjLCAweDhlMmYsCisJMHg4ZTNiLCAweDhlM2UsIDB4OGU0MCwgMHg4ZTQzLCAweDhl NTAsIDB4OGU1ZSwgMHg4ZTcwLCAweDhlNzcsCisJMHg5NjAwLCAweDk2MDQsIDB4OTYyNCwgMHg5 NjM3LCAweDllMDAsIDB4OWUwMSwgMHg5ZTAzLCAweDllMGUsCisJMHg5ZTExLCAweDllMTYsIDB4 OWUxOSwgMHg5ZTE5LCAweDllMWMsIDB4OWUxYywgMHg5ZTIwLCAweDllMjMsCisJMHg5ZTMwLCAw eDllMzEsIDB4OWUzNCwgMHg5ZTM0LCAweDllNzAsIDB4OWU3MiwgMHg5ZTc4LCAweDllNzksCisJ MHg5ZTgwLCAweDlmZmYsIDB4YTYwMCwgMHhhNjAxLCAweGE2MDMsIDB4YTYwMywgMHhhNjBhLCAw eGE2MGEsCisJMHhhNjEwLCAweGE2MTcsIDB4YTYzMCwgMHhhNjMwLAorCX4wCit9OworCitzdGF0 aWMgaW50IGE2eHhfcG1fcmVzdW1lKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFk cmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhf Z3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCWludCByZXQ7CisKKwly ZXQgPSBhNnh4X2dtdV9yZXN1bWUoYTZ4eF9ncHUpOworCisJZ3B1LT5uZWVkc19od19pbml0ID0g dHJ1ZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9wbV9zdXNwZW5kKHN0 cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0 b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhf Z3B1KGFkcmVub19ncHUpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIEdNVSBpcyBpZGxlIGJl Zm9yZSBjb250aW51aW5nIChiZWNhdXNlIHNvbWUgdHJhbnNpdGlvbnMKKwkgKiBtYXkgdXNlIFZC SUYKKwkgKi8KKwlhNnh4X2dtdV93YWl0X2Zvcl9pZGxlKGE2eHhfZ3B1KTsKKworCS8qIENsZWFy IHRoZSBWQklGIHBpcGUgYmVmb3JlIHNodXR0aW5nIGRvd24gKi8KKwkvKiBGSVhNRTogVGhpcyBh Y2Nlc3NlcyB0aGUgR1BVIC0gZG8gd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgb24/ICovCisJ Z3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVkJJRl9YSU5fSEFMVF9DVFJMMCwgMHhmKTsKKwlzcGlu X3VudGlsKChncHVfcmVhZChncHUsIFJFR19BNlhYX1ZCSUZfWElOX0hBTFRfQ1RSTDEpICYgMHhm KSA9PSAweGYpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1ZCSUZfWElOX0hBTFRfQ1RSTDAs IDApOworCisJcmV0dXJuIGE2eHhfZ211X3N0b3AoYTZ4eF9ncHUpOworfQorCitzdGF0aWMgaW50 IGE2eHhfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1aW50NjRfdCAqdmFsdWUp Cit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7 CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOwor CisJLyogRm9yY2UgdGhlIEdQVSBwb3dlciBvbiBzbyB3ZSBjYW4gcmVhZCB0aGlzIHJlZ2lzdGVy ICovCisJYTZ4eF9nbXVfc2V0X29vYigmYTZ4eF9ncHUtPmdtdSwgR01VX09PQl9HUFVfU0VUKTsK KworCSp2YWx1ZSA9IGdwdV9yZWFkNjQoZ3B1LCBSRUdfQTZYWF9SQkJNX1BFUkZDVFJfQ1BfMF9M TywKKwkJUkVHX0E2WFhfUkJCTV9QRVJGQ1RSX0NQXzBfSEkpOworCisJYTZ4eF9nbXVfY2xlYXJf b29iKCZhNnh4X2dwdS0+Z211LCBHTVVfT09CX0dQVV9TRVQpOworCXJldHVybiAwOworfQorCisj aWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgdm9pZCBhNnh4X3Nob3coc3RydWN0IG1zbV9n cHUgKmdwdSwgc3RydWN0IHNlcV9maWxlICptKQoreworCWdwdS0+ZnVuY3MtPnBtX3Jlc3VtZShn cHUpOworCisJc2VxX3ByaW50ZihtLCAic3RhdHVzOiAgICUwOHhcbiIsCisJCQlncHVfcmVhZChn cHUsIFJFR19BNlhYX1JCQk1fU1RBVFVTKSk7CisJZ3B1LT5mdW5jcy0+cG1fc3VzcGVuZChncHUp OworCisJYWRyZW5vX3Nob3coZ3B1LCBtKTsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG1z bV9yaW5nYnVmZmVyICphNnh4X2FjdGl2ZV9yaW5nKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJ c3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3Ry dWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCisJcmV0 dXJuIGE2eHhfZ3B1LT5jdXJfcmluZzsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9kZXN0cm95KHN0 cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0 b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhf Z3B1KGFkcmVub19ncHUpOworCisJaWYgKGE2eHhfZ3B1LT5zcWVfYm8pIHsKKwkJaWYgKGE2eHhf Z3B1LT5zcWVfaW92YSkKKwkJCW1zbV9nZW1fcHV0X2lvdmEoYTZ4eF9ncHUtPnNxZV9ibywgZ3B1 LT5hc3BhY2UpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChhNnh4X2dw dS0+c3FlX2JvKTsKKwl9CisKKwlhNnh4X2dtdV9yZW1vdmUoYTZ4eF9ncHUpOworCisJYWRyZW5v X2dwdV9jbGVhbnVwKGFkcmVub19ncHUpOworCWtmcmVlKGE2eHhfZ3B1KTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1bmNzID0geworCS5iYXNlID0geworCQku Z2V0X3BhcmFtID0gYWRyZW5vX2dldF9wYXJhbSwKKwkJLmh3X2luaXQgPSBhNnh4X2h3X2luaXQs CisJCS5wbV9zdXNwZW5kID0gYTZ4eF9wbV9zdXNwZW5kLAorCQkucG1fcmVzdW1lID0gYTZ4eF9w bV9yZXN1bWUsCisJCS5yZWNvdmVyID0gYTZ4eF9yZWNvdmVyLAorCQkuc3VibWl0ID0gYTZ4eF9z dWJtaXQsCisJCS5mbHVzaCA9IGE2eHhfZmx1c2gsCisJCS5hY3RpdmVfcmluZyA9IGE2eHhfYWN0 aXZlX3JpbmcsCisJCS5pcnEgPSBhNnh4X2lycSwKKwkJLmRlc3Ryb3kgPSBhNnh4X2Rlc3Ryb3ks CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJCS5zaG93ID0gYTZ4eF9zaG93LAorI2VuZGlmCisJ fSwKKwkuZ2V0X3RpbWVzdGFtcCA9IGE2eHhfZ2V0X3RpbWVzdGFtcCwKK307CisKK3N0cnVjdCBt c21fZ3B1ICphNnh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiA9IHByaXYtPmdwdV9wZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1OworCXN0cnVjdCBhZHJlbm9fZ3B1ICph ZHJlbm9fZ3B1OworCXN0cnVjdCBtc21fZ3B1ICpncHU7CisJaW50IHJldDsKKworCWE2eHhfZ3B1 ID0ga3phbGxvYyhzaXplb2YoKmE2eHhfZ3B1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhNnh4X2dw dSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhZHJlbm9fZ3B1ID0gJmE2eHhfZ3B1 LT5iYXNlOworCWdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNlOworCisJYWRyZW5vX2dwdS0+cmVnaXN0 ZXJzID0gYTZ4eF9yZWdpc3RlcnM7CisJYWRyZW5vX2dwdS0+cmVnX29mZnNldHMgPSBhNnh4X3Jl Z2lzdGVyX29mZnNldHM7CisKKwlyZXQgPSBhZHJlbm9fZ3B1X2luaXQoZGV2LCBwZGV2LCBhZHJl bm9fZ3B1LCAmZnVuY3MsIDEpOworCWlmIChyZXQpIHsKKwkJYTZ4eF9kZXN0cm95KCYoYTZ4eF9n cHUtPmJhc2UuYmFzZSkpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCS8qIENoZWNr IGlmIHRoZXJlIGlzIGEgR01VIHBoYW5kbGUgYW5kIHNldCBpdCB1cCAqLworCW5vZGUgPSBvZl9w YXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAiZ211IiwgMCk7CisKKwkvKiBGSVhNRTog SG93IGRvIHdlIGdyYWNlZnVsbHkgaGFuZGxlIHRoaXM/ICovCisJQlVHX09OKCFub2RlKTsKKwor CXJldCA9IGE2eHhfZ211X3Byb2JlKGE2eHhfZ3B1LCBub2RlKTsKKwlpZiAocmV0KSB7CisJCWE2 eHhfZGVzdHJveSgmKGE2eHhfZ3B1LT5iYXNlLmJhc2UpKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0 KTsKKwl9CisKKwlpZiAoZ3B1LT5hc3BhY2UpCisJCW1zbV9tbXVfc2V0X2ZhdWx0X2hhbmRsZXIo Z3B1LT5hc3BhY2UtPm1tdSwgZ3B1LAorCQkJCWE2eHhfZmF1bHRfaGFuZGxlcik7CisKKwlyZXR1 cm4gZ3B1OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9n cHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZDY5ZTViMGU2OTIKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5oCkBAIC0wLDAgKzEsNjAg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQg KGMpIDIwMTcgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisK KyNpZm5kZWYgX19BNlhYX0dQVV9IX18KKyNkZWZpbmUgX19BNlhYX0dQVV9IX18KKworCisjaW5j bHVkZSAiYWRyZW5vX2dwdS5oIgorI2luY2x1ZGUgImE2eHgueG1sLmgiCisKKyNpbmNsdWRlICJh Nnh4X2dtdS5oIgorCitleHRlcm4gYm9vbCBoYW5nX2RlYnVnOworCitzdHJ1Y3QgYTZ4eF9ncHUg eworCXN0cnVjdCBhZHJlbm9fZ3B1IGJhc2U7CisKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnNx ZV9ibzsKKwl1aW50NjRfdCBzcWVfaW92YTsKKworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqY3Vy X3Jpbmc7CisKKwlzdHJ1Y3QgYTZ4eF9nbXUgZ211OworfTsKKworI2RlZmluZSB0b19hNnh4X2dw dSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGE2eHhfZ3B1LCBiYXNlKQorCisvKgorICogR2l2 ZW4gYSByZWdpc3RlciBhbmQgYSBjb3VudCwgcmV0dXJuIGEgdmFsdWUgdG8gcHJvZ3JhbSBpbnRv CisgKiBSRUdfQ1BfUFJPVEVDVF9SRUcobikgLSB0aGlzIHdpbGwgYmxvY2sgYm90aCByZWFkcyBh bmQgd3JpdGVzIGZvciBfbGVuCisgKiByZWdpc3RlcnMgc3RhcnRpbmcgYXQgX3JlZy4KKyAqLwor I2RlZmluZSBBNlhYX1BST1RFQ1RfUlcoX3JlZywgX2xlbikgXAorCSgoMSA8PCAzMSkgfCBcCisJ KCgoX2xlbikgJiAweDNGRkYpIDw8IDE4KSB8ICgoX3JlZykgJiAweDNGRkZGKSkKKworLyoKKyAq IFNhbWUgYXMgYWJvdmUsIGJ1dCBhbGxvdyByZWFkcyBvdmVyIHRoZSByYW5nZS4gRm9yIGFyZWFz IG9mIG1peGVkIHVzZSAoc3VjaAorICogYXMgcGVyZm9ybWFuY2UgY291bnRlcnMpIHRoaXMgYWxs b3dzIHVzIHRvIHByb3RlY3QgYSBtdWNoIGxhcmdlciByYW5nZSB3aXRoIGEKKyAqIHNpbmdsZSBy ZWdpc3RlcgorICovCisjZGVmaW5lIEE2WFhfUFJPVEVDVF9SRE9OTFkoX3JlZywgX2xlbikgXAor CSgoKChfbGVuKSAmIDB4M0ZGRikgPDwgMTgpIHwgKChfcmVnKSAmIDB4M0ZGRkYpKQorCisKK2lu dCBhNnh4X2dtdV9yZXN1bWUoc3RydWN0IGE2eHhfZ3B1ICpncHUpOworaW50IGE2eHhfZ211X3N0 b3Aoc3RydWN0IGE2eHhfZ3B1ICpncHUpOworCitpbnQgYTZ4eF9nbXVfd2FpdF9mb3JfaWRsZShz dHJ1Y3QgYTZ4eF9ncHUgKmdwdSk7CisKK2ludCBhNnh4X2dtdV9yZXNldChzdHJ1Y3QgYTZ4eF9n cHUgKmE2eHhfZ3B1KTsKK2Jvb2wgYTZ4eF9nbXVfaXNpZGxlKHN0cnVjdCBhNnh4X2dtdSAqZ211 KTsKKworaW50IGE2eHhfZ211X3NldF9vb2Ioc3RydWN0IGE2eHhfZ211ICpnbXUsIGVudW0gYTZ4 eF9nbXVfb29iX3N0YXRlIHN0YXRlKTsKK3ZvaWQgYTZ4eF9nbXVfY2xlYXJfb29iKHN0cnVjdCBh Nnh4X2dtdSAqZ211LCBlbnVtIGE2eHhfZ211X29vYl9zdGF0ZSBzdGF0ZSk7CisKK2ludCBhNnh4 X2dtdV9wcm9iZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUg Km5vZGUpOwordm9pZCBhNnh4X2dtdV9yZW1vdmUoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSk7 CisKKyNlbmRpZiAvKiBfX0E2WFhfR1BVX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2 eHhfaGZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yMjFlYWFm YzhiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4 X2hmaS5jCkBAIC0wLDAgKzEsNDM1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAorLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTggVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cisj aW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNp bmNsdWRlICJhNnh4X2dtdS5oIgorI2luY2x1ZGUgImE2eHhfZ211LnhtbC5oIgorCisjZGVmaW5l IEhGSV9NU0dfSUQodmFsKSBbdmFsXSA9ICN2YWwKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBhNnh4X2hmaV9tc2dfaWRbXSA9IHsKKwlIRklfTVNHX0lEKEhGSV9IMkZfTVNHX0lOSVQpLAor CUhGSV9NU0dfSUQoSEZJX0gyRl9NU0dfRldfVkVSU0lPTiksCisJSEZJX01TR19JRChIRklfSDJG X01TR19CV19UQUJMRSksCisJSEZJX01TR19JRChIRklfSDJGX01TR19QRVJGX1RBQkxFKSwKKwlI RklfTVNHX0lEKEhGSV9IMkZfTVNHX1RFU1QpLAorfTsKKworc3RhdGljIGludCBhNnh4X2hmaV9x dWV1ZV9yZWFkKHN0cnVjdCBhNnh4X2hmaV9xdWV1ZSAqcXVldWUsIHUzMiAqZGF0YSwKKwkJdTMy IGR3b3JkcykKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyICpoZWFkZXIgPSBxdWV1 ZS0+aGVhZGVyOworCXUzMiBpLCBoZHIsIGluZGV4ID0gaGVhZGVyLT5yZWFkX2luZGV4OworCisJ aWYgKGhlYWRlci0+cmVhZF9pbmRleCA9PSBoZWFkZXItPndyaXRlX2luZGV4KSB7CisJCWhlYWRl ci0+cnhfcmVxdWVzdCA9IDE7CisJCXJldHVybiAwOworCX0KKworCWhkciA9IHF1ZXVlLT5kYXRh W2luZGV4XTsKKworCS8qCisJICogSWYgd2UgYXJlIHRvIGFzc3VtZSB0aGF0IHRoZSBHTVUgZmly bXdhcmUgaXMgaW4gZmFjdCBhIHJhdGlvbmFsIGFjdG9yCisJICogYW5kIGlzIHByb2dyYW1tZWQg dG8gbm90IHNlbmQgdXMgYSBsYXJnZXIgcmVzcG9uc2UgdGhhbiB3ZSBleHBlY3QKKwkgKiB0aGVu IHdlIGNhbiBhbHNvIGFzc3VtZSB0aGF0IGlmIHRoZSBoZWFkZXIgc2l6ZSBpcyB1bmV4cGVjdGVk bHkgbGFyZ2UKKwkgKiB0aGF0IGl0IGlzIGR1ZSB0byBtZW1vcnkgY29ycnVwdGlvbiBhbmQvb3Ig aGFyZHdhcmUgZmFpbHVyZS4gSW4gdGhpcworCSAqIGNhc2UgdGhlIG9ubHkgcmVhc29uYWJsZSBj b3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIEJVRygpIHRvIGhlbHAgaGFyZGVuCisJICogdGhlIGZhaWx1 cmUuCisJICovCisKKwlCVUdfT04oSEZJX0hFQURFUl9TSVpFKGhkcikgPiBkd29yZHMpOworCisJ Zm9yIChpID0gMDsgaSA8IEhGSV9IRUFERVJfU0laRShoZHIpOyBpKyspIHsKKwkJZGF0YVtpXSA9 IHF1ZXVlLT5kYXRhW2luZGV4XTsKKwkJaW5kZXggPSAoaW5kZXggKyAxKSAlIGhlYWRlci0+c2l6 ZTsKKwl9CisKKwloZWFkZXItPnJlYWRfaW5kZXggPSBpbmRleDsKKwlyZXR1cm4gSEZJX0hFQURF Ul9TSVpFKGhkcik7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfcXVldWVfd3JpdGUoc3RydWN0 IGE2eHhfZ211ICpnbXUsCisJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSwgdTMyICpkYXRh LCB1MzIgZHdvcmRzKQoreworCXN0cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIgKmhlYWRlciA9 IHF1ZXVlLT5oZWFkZXI7CisJdTMyIGksIHNwYWNlLCBpbmRleCA9IGhlYWRlci0+d3JpdGVfaW5k ZXg7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5sb2NrKTsKKworCXNwYWNlID0gQ0lSQ19TUEFDRSho ZWFkZXItPndyaXRlX2luZGV4LCBoZWFkZXItPnJlYWRfaW5kZXgsCisJCWhlYWRlci0+c2l6ZSk7 CisJaWYgKHNwYWNlIDwgZHdvcmRzKSB7CisJCWhlYWRlci0+ZHJvcHBlZCsrOworCQlzcGluX3Vu bG9jaygmcXVldWUtPmxvY2spOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgZHdvcmRzOyBpKyspIHsKKwkJcXVldWUtPmRhdGFbaW5kZXhdID0gZGF0YVtpXTsKKwkJ aW5kZXggPSAoaW5kZXggKyAxKSAlIGhlYWRlci0+c2l6ZTsKKwl9CisKKwloZWFkZXItPndyaXRl X2luZGV4ID0gaW5kZXg7CisJc3Bpbl91bmxvY2soJnF1ZXVlLT5sb2NrKTsKKworCWdtdV93cml0 ZShnbXUsIFJFR19BNlhYX0dNVV9IT1NUMkdNVV9JTlRSX1NFVCwgMHgwMSk7CisJcmV0dXJuIDA7 Cit9CisKK3N0cnVjdCBhNnh4X2hmaV9yZXNwb25zZSB7CisJdTMyIGlkOworCXUzMiBzZXFudW07 CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOwor CisJdTMyIGVycm9yOworCXUzMiBwYXlsb2FkWzE2XTsKK307CisKKy8qCisgKiBJbmNvbWluZyBI RkkgYWNrIG1lc3NhZ2VzIGNhbiBjb21lIGluIG91dCBvZiBvcmRlciBzbyB3ZSBuZWVkIHRvIHN0 b3JlIGFsbAorICogdGhlIHBlbmRpbmcgbWVzc2FnZXMgb24gYSBsaXN0IHVudGlsIHRoZXkgYXJl IGhhbmRsZWQuCisgKi8KK3N0YXRpYyBzcGlubG9ja190IGhmaV9hY2tfbG9jayA9IF9fU1BJTl9M T0NLX1VOTE9DS0VEKG1lc3NhZ2VfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGhmaV9hY2tfbGlz dCk7CisKK3N0YXRpYyB2b2lkIGE2eHhfaGZpX2hhbmRsZV9hY2soc3RydWN0IGE2eHhfZ211ICpn bXUsCisJCXN0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9uc2UgKm1zZykKK3sKKwlzdHJ1Y3QgYTZ4 eF9oZmlfcmVzcG9uc2UgKnJlc3A7CisJdTMyIGlkLCBzZXFudW07CisKKwkvKiBtc2ctPnJldF9o ZWFkZXIgY29udGFpbnMgdGhlIGhlYWRlciBvZiB0aGUgbWVzc2FnZSBiZWluZyBhY2tlZCAqLwor CWlkID0gSEZJX0hFQURFUl9JRChtc2ctPnJldF9oZWFkZXIpOworCXNlcW51bSA9IEhGSV9IRUFE RVJfU0VRTlVNKG1zZy0+cmV0X2hlYWRlcik7CisKKwlzcGluX2xvY2soJmhmaV9hY2tfbG9jayk7 CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXNwLCAmaGZpX2Fja19saXN0LCBub2RlKSB7CisJCWlm IChyZXNwLT5pZCA9PSBpZCAmJiByZXNwLT5zZXFudW0gPT0gc2VxbnVtKSB7CisJCQlyZXNwLT5l cnJvciA9IG1zZy0+ZXJyb3I7CisJCQltZW1jcHkocmVzcC0+cGF5bG9hZCwgbXNnLT5wYXlsb2Fk LAorCQkJCXNpemVvZihyZXNwLT5wYXlsb2FkKSk7CisKKwkJCWNvbXBsZXRlKCZyZXNwLT5jb21w bGV0ZSk7CisJCQlzcGluX3VubG9jaygmaGZpX2Fja19sb2NrKTsKKwkJCXJldHVybjsKKwkJfQor CX0KKwlzcGluX3VubG9jaygmaGZpX2Fja19sb2NrKTsKKworCWRldl9lcnIoZ211LT5kZXYsICJO b2JvZHkgd2FzIHdhaXRpbmcgZm9yIEhGSSBtZXNzYWdlICVkXG4iLCBzZXFudW0pOworfQorCitz dGF0aWMgdm9pZCBhNnh4X2hmaV9oYW5kbGVfZXJyb3Ioc3RydWN0IGE2eHhfZ211ICpnbXUsCisJ CXN0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9uc2UgKm1zZykKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlf bXNnX2Vycm9yICplcnJvciA9IChzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2Vycm9yICopIG1zZzsKKwor CWRldl9lcnIoZ211LT5kZXYsICJHTVUgZmlybXdhcmUgZXJyb3IgJWRcbiIsIGVycm9yLT5jb2Rl KTsKK30KKwordm9pZCBhNnh4X2hmaV90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1 Y3QgYTZ4eF9nbXUgKmdtdSA9IChzdHJ1Y3QgYTZ4eF9nbXUgKikgZGF0YTsKKwlzdHJ1Y3QgYTZ4 eF9oZmlfcXVldWUgKnF1ZXVlID0gJmdtdS0+cXVldWVzW0hGSV9SRVNQT05TRV9RVUVVRV07CisJ c3RydWN0IGE2eHhfaGZpX21zZ19yZXNwb25zZSByZXNwOworCisJZm9yICg7OykgeworCQl1MzIg aWQ7CisJCWludCByZXQgPSBhNnh4X2hmaV9xdWV1ZV9yZWFkKHF1ZXVlLCAodTMyICopICZyZXNw LAorCQkJc2l6ZW9mKHJlc3ApID4+IDIpOworCisJCS8qIFJldHVybnMgdGhlIG51bWJlciBvZiBi eXRlcyBjb3BpZWQgb3IgbmVnYXRpdmUgb24gZXJyb3IgKi8KKwkJaWYgKHJldCA8PSAwKSB7CisJ CQlpZiAocmV0IDwgMCkKKwkJCQlkZXZfZXJyKGdtdS0+ZGV2LAorCQkJCQkiVW5hYmxlIHRvIHJl YWQgdGhlIEhGSSBtZXNzYWdlIHF1ZXVlXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWQgPSBI RklfSEVBREVSX0lEKHJlc3AuaGVhZGVyKTsKKworCQlpZiAoaWQgPT0gSEZJX0YySF9NU0dfQUNL KQorCQkJYTZ4eF9oZmlfaGFuZGxlX2FjayhnbXUsICZyZXNwKTsKKwkJZWxzZSBpZiAoaWQgPT0g SEZJX0YySF9NU0dfRVJST1IpCisJCQlhNnh4X2hmaV9oYW5kbGVfZXJyb3IoZ211LCAmcmVzcCk7 CisJfQorfQorCitzdGF0aWMgaW50IGE2eHhfaGZpX3NlbmRfbXNnKHN0cnVjdCBhNnh4X2dtdSAq Z211LCBpbnQgaWQsCisJCXZvaWQgKmRhdGEsIHUzMiBzaXplLCB1MzIgKnBheWxvYWQsIHUzMiBw YXlsb2FkX3NpemUpCit7CisJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSA9ICZnbXUtPnF1 ZXVlc1tIRklfQ09NTUFORF9RVUVVRV07CisJc3RydWN0IGE2eHhfaGZpX3Jlc3BvbnNlIHJlc3Ag PSB7IDAgfTsKKwlpbnQgcmV0LCBkd29yZHMgPSBzaXplID4+IDI7CisJdTMyIHNlcW51bTsKKwor CXNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKCZxdWV1ZS0+c2VxbnVtKSAlIDB4ZmZmOworCisJ LyogRmlyc3QgZHdvcmQgb2YgdGhlIG1lc3NhZ2UgaXMgdGhlIG1lc3NhZ2UgaGVhZGVyIC0gZmls bCBpdCBpbiAqLworCSooKHUzMiAqKSBkYXRhKSA9IChzZXFudW0gPDwgMjApIHwgKEhGSV9NU0df Q01EIDw8IDE2KSB8CisJCShkd29yZHMgPDwgOCkgfCBpZDsKKworCWluaXRfY29tcGxldGlvbigm cmVzcC5jb21wbGV0ZSk7CisJcmVzcC5pZCA9IGlkOworCXJlc3Auc2VxbnVtID0gc2VxbnVtOwor CisJc3Bpbl9sb2NrX2JoKCZoZmlfYWNrX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJlc3Aubm9k ZSwgJmhmaV9hY2tfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmhmaV9hY2tfbG9jayk7CisKKwly ZXQgPSBhNnh4X2hmaV9xdWV1ZV93cml0ZShnbXUsIHF1ZXVlLCBkYXRhLCBkd29yZHMpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihnbXUtPmRldiwgIlVuYWJsZSB0byBzZW5kIG1lc3NhZ2UgJXMg aWQgJWRcbiIsCisJCQlhNnh4X2hmaV9tc2dfaWRbaWRdLCBzZXFudW0pOworCQlnb3RvIG91dDsK Kwl9CisKKwkvKiBXYWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlIHJlc3BvbnNlICovCisJcmV0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZXNwLmNvbXBsZXRlLAorCQltc2Vjc190 b19qaWZmaWVzKDUwMDApKTsKKwlpZiAoIXJldCkgeworCQlkZXZfZXJyKGdtdS0+ZGV2LAorCQkJ Ik1lc3NhZ2UgJXMgaWQgJWQgdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlXG4iLAorCQkJ YTZ4eF9oZmlfbXNnX2lkW2lkXSwgc2VxbnVtKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9IGVs c2UKKwkJcmV0ID0gMDsKKworb3V0OgorCXNwaW5fbG9ja19iaCgmaGZpX2Fja19sb2NrKTsKKwls aXN0X2RlbCgmcmVzcC5ub2RlKTsKKwlzcGluX3VubG9ja19iaCgmaGZpX2Fja19sb2NrKTsKKwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocmVzcC5lcnJvcikgeworCQlkZXZfZXJy KGdtdS0+ZGV2LCAiTWVzc2FnZSAlcyBpZCAlZCByZXR1cm5lZCBlcnJvciAlZFxuIiwKKwkJCWE2 eHhfaGZpX21zZ19pZFtpZF0sIHNlcW51bSwgcmVzcC5lcnJvcik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWlmIChwYXlsb2FkICYmIHBheWxvYWRfc2l6ZSkgeworCQlpbnQgY29weSA9IG1p bl90KHUzMiwgcGF5bG9hZF9zaXplLCBzaXplb2YocmVzcC5wYXlsb2FkKSk7CisKKwkJbWVtY3B5 KHBheWxvYWQsIHJlc3AucGF5bG9hZCwgY29weSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgYTZ4eF9oZmlfc2VuZF9nbXVfaW5pdChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgaW50 IGJvb3Rfc3RhdGUpCit7CisJc3RydWN0IGE2eHhfaGZpX21zZ19nbXVfaW5pdF9jbWQgbXNnID0g eyAwIH07CisKKwltc2cuZGJnX2J1ZmZlcl9hZGRyID0gKHUzMikgZ211LT5kZWJ1Zy0+aW92YTsK Kwltc2cuZGJnX2J1ZmZlcl9zaXplID0gKHUzMikgZ211LT5kZWJ1Zy0+c2l6ZTsKKwltc2cuYm9v dF9zdGF0ZSA9IGJvb3Rfc3RhdGU7CisKKwlyZXR1cm4gYTZ4eF9oZmlfc2VuZF9tc2coZ211LCBI RklfSDJGX01TR19JTklULCAmbXNnLCBzaXplb2YobXNnKSwKKwkJTlVMTCwgMCk7Cit9CisKK3N0 YXRpYyBpbnQgYTZ4eF9oZmlfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGE2eHhfZ211ICpnbXUsIHUz MiAqdmVyc2lvbikKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2Z3X3ZlcnNpb24gbXNnID0geyAw IH07CisKKwkvKiBDdXJyZW50bHkgc3VwcG9ydGluZyB2ZXJzaW9uIDEuMSAqLworCW1zZy5zdXBw b3J0ZWRfdmVyc2lvbiA9ICgxIDw8IDI4KSB8ICgxIDw8IDE2KTsKKworCXJldHVybiBhNnh4X2hm aV9zZW5kX21zZyhnbXUsIEhGSV9IMkZfTVNHX0ZXX1ZFUlNJT04sICZtc2csIHNpemVvZihtc2cp LAorCQl2ZXJzaW9uLCBzaXplb2YoKnZlcnNpb24pKTsKK30KKworc3RhdGljIGludCBhNnh4X2hm aV9zZW5kX3BlcmZfdGFibGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0IGE2eHhf aGZpX21zZ19wZXJmX3RhYmxlIG1zZyA9IHsgMCB9OworCWludCBpOworCisJbXNnLm51bV9ncHVf bGV2ZWxzID0gZ211LT5ucl9ncHVfZnJlcXM7CisJbXNnLm51bV9nbXVfbGV2ZWxzID0gZ211LT5u cl9nbXVfZnJlcXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ211LT5ucl9ncHVfZnJlcXM7IGkrKykg eworCQltc2cuZ3hfdm90ZXNbaV0udm90ZSA9IGdtdS0+Z3hfYXJjX3ZvdGVzW2ldOworCQltc2cu Z3hfdm90ZXNbaV0udm90ZSA9IGdtdS0+Z3B1X2ZyZXFzW2ldIC8gMTAwMDsKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgZ211LT5ucl9nbXVfZnJlcXM7IGkrKykgeworCQltc2cuY3hfdm90ZXNbaV0u dm90ZSA9IGdtdS0+Y3hfYXJjX3ZvdGVzW2ldOworCQltc2cuY3hfdm90ZXNbaV0udm90ZSA9IGdt dS0+Z211X2ZyZXFzW2ldIC8gMTAwMDsKKwl9CisKKwlyZXR1cm4gYTZ4eF9oZmlfc2VuZF9tc2co Z211LCBIRklfSDJGX01TR19QRVJGX1RBQkxFLCAmbXNnLCBzaXplb2YobXNnKSwKKwkJTlVMTCwg MCk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfc2VuZF9id190YWJsZShzdHJ1Y3QgYTZ4eF9n bXUgKmdtdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2J3X3RhYmxlIG1zZyA9IHsgMCB9Owor CisJLyoKKwkgKiBUaGUgc2RtODQ1IEdNVSBkb2Vzbid0IGRvIGJ1cyBmcmVxdWVuY3kgc2NhbGlu ZyBvbiBpdHMgb3duIGJ1dCBpdAorCSAqIGRvZXMgbmVlZCBhdCBsZWFzdCBvbmUgZW50cnkgaW4g dGhlIGxpc3QgYmVjYXVzZSBpdCBtaWdodCBiZSBhY2Nlc3NlZAorCSAqIHdoZW4gdGhlIEdNVSBp cyBzaHV0dGluZyBkb3duLiBTZW5kIGEgc2luZ2xlICJvZmYiIGVudHJ5LgorCSAqLworCisJbXNn LmJ3X2xldmVsX251bSA9IDE7CisKKwltc2cuZGRyX2NtZHNfbnVtID0gMzsKKwltc2cuZGRyX3dh aXRfYml0bWFzayA9IDB4MDc7CisKKwltc2cuZGRyX2NtZHNfYWRkcnNbMF0gPSAweDUwMDAwOwor CW1zZy5kZHJfY21kc19hZGRyc1sxXSA9IDB4NTAwNWM7CisJbXNnLmRkcl9jbWRzX2FkZHJzWzJd ID0gMHg1MDAwYzsKKworCW1zZy5kZHJfY21kc19kYXRhWzBdWzBdID0gIDB4NDAwMDAwMDA7CisJ bXNnLmRkcl9jbWRzX2RhdGFbMF1bMV0gPSAgMHg0MDAwMDAwMDsKKwltc2cuZGRyX2NtZHNfZGF0 YVswXVsyXSA9ICAweDQwMDAwMDAwOworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIENYIChDTk9D KSB2b3Rlcy4gIFRoaXMgaXMgdXNlZCBidXQgdGhlIHZhbHVlcyBmb3IgdGhlCisJICogc2RtODQ1 IEdNVSBhcmUga25vd24gYW5kIGZpeGVkIHNvIHdlIGNhbiBoYXJkIGNvZGUgdGhlbS4KKwkgKi8K KworCW1zZy5jbm9jX2NtZHNfbnVtID0gMzsKKwltc2cuY25vY193YWl0X2JpdG1hc2sgPSAweDA1 OworCisJbXNnLmNub2NfY21kc19hZGRyc1swXSA9IDB4NTAwMzQ7CisJbXNnLmNub2NfY21kc19h ZGRyc1sxXSA9IDB4NTAwN2M7CisJbXNnLmNub2NfY21kc19hZGRyc1syXSA9IDB4NTAwNGM7CisK Kwltc2cuY25vY19jbWRzX2RhdGFbMF1bMF0gPSAgMHg0MDAwMDAwMDsKKwltc2cuY25vY19jbWRz X2RhdGFbMF1bMV0gPSAgMHgwMDAwMDAwMDsKKwltc2cuY25vY19jbWRzX2RhdGFbMF1bMl0gPSAg MHg0MDAwMDAwMDsKKworCW1zZy5jbm9jX2NtZHNfZGF0YVsxXVswXSA9ICAweDYwMDAwMDAxOwor CW1zZy5jbm9jX2NtZHNfZGF0YVsxXVsxXSA9ICAweDIwMDAwMDAxOworCW1zZy5jbm9jX2NtZHNf ZGF0YVsxXVsyXSA9ICAweDYwMDAwMDAxOworCisJcmV0dXJuIGE2eHhfaGZpX3NlbmRfbXNnKGdt dSwgSEZJX0gyRl9NU0dfQldfVEFCTEUsICZtc2csIHNpemVvZihtc2cpLAorCQlOVUxMLCAwKTsK K30KKworc3RhdGljIGludCBhNnh4X2hmaV9zZW5kX3Rlc3Qoc3RydWN0IGE2eHhfZ211ICpnbXUp Cit7CisJc3RydWN0IGE2eHhfaGZpX21zZ190ZXN0IG1zZyA9IHsgMCB9OworCisJcmV0dXJuIGE2 eHhfaGZpX3NlbmRfbXNnKGdtdSwgSEZJX0gyRl9NU0dfVEVTVCwgJm1zZywgc2l6ZW9mKG1zZyks CisJCU5VTEwsIDApOworfQorCitpbnQgYTZ4eF9oZmlfc3RhcnQoc3RydWN0IGE2eHhfZ211ICpn bXUsIGludCBib290X3N0YXRlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhNnh4X2hmaV9zZW5k X2dtdV9pbml0KGdtdSwgYm9vdF9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IGE2eHhfaGZpX2dldF9md192ZXJzaW9uKGdtdSwgTlVMTCk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCS8qCisJICogV2UgaGF2ZSB0byBnZXQgZXhjaGFuZ2UgdmVyc2lvbiBu dW1iZXJzIHBlciB0aGUgc2VxdWVuY2UgYnV0IGF0IHRoaXMKKwkgKiBwb2ludCB0aCBrZXJuZWwg ZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBrbm93IHRoZSBleGFjdCB2ZXJzaW9uIG9mCisJICogdGhl IEdNVSBmaXJtd2FyZQorCSAqLworCisJcmV0ID0gYTZ4eF9oZmlfc2VuZF9wZXJmX3RhYmxlKGdt dSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGE2eHhfaGZpX3NlbmRfYndf dGFibGUoZ211KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBMZXQgdGhl IEdNVSBrbm93IHRoYXQgdGhlcmUgd29uJ3QgYmUgYW55IG1vcmUgSEZJIG1lc3NhZ2VzIHVudGls IG5leHQKKwkgKiBib290CisJICovCisJYTZ4eF9oZmlfc2VuZF90ZXN0KGdtdSk7CisKKwlyZXR1 cm4gMDsKK30KKwordm9pZCBhNnh4X2hmaV9zdG9wKHN0cnVjdCBhNnh4X2dtdSAqZ211KQorewor CWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ211LT5xdWV1ZXMpOyBpKysp IHsKKwkJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSA9ICZnbXUtPnF1ZXVlc1tpXTsKKwor CQlpZiAoIXF1ZXVlLT5oZWFkZXIpCisJCQljb250aW51ZTsKKworCQlpZiAocXVldWUtPmhlYWRl ci0+cmVhZF9pbmRleCAhPSBxdWV1ZS0+aGVhZGVyLT53cml0ZV9pbmRleCkKKwkJCWRldl9lcnIo Z211LT5kZXYsICJIRkkgcXVldWUgJWQgaXMgbm90IGVtcHR5XG4iLCBpKTsKKworCQlxdWV1ZS0+ aGVhZGVyLT5yZWFkX2luZGV4ID0gMDsKKwkJcXVldWUtPmhlYWRlci0+d3JpdGVfaW5kZXggPSAw OworCX0KK30KKworc3RhdGljIHZvaWQgYTZ4eF9oZmlfcXVldWVfaW5pdChzdHJ1Y3QgYTZ4eF9o ZmlfcXVldWUgKnF1ZXVlLAorCQlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyICpoZWFkZXIs IHZvaWQgKnZpcnQsIHU2NCBpb3ZhLAorCQl1MzIgaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJnF1 ZXVlLT5sb2NrKTsKKwlxdWV1ZS0+aGVhZGVyID0gaGVhZGVyOworCXF1ZXVlLT5kYXRhID0gdmly dDsKKwlhdG9taWNfc2V0KCZxdWV1ZS0+c2VxbnVtLCAwKTsKKworCS8qIFNldCB1cCB0aGUgc2hh cmVkIG1lbW9yeSBoZWFkZXIgKi8KKwloZWFkZXItPmlvdmEgPSBpb3ZhOworCWhlYWRlci0+dHlw ZSA9ICAxMCA8PCA4IHwgaWQ7CisJaGVhZGVyLT5zdGF0dXMgPSAxOworCWhlYWRlci0+c2l6ZSA9 IFNaXzRLID4+IDI7CisJaGVhZGVyLT5tc2dfc2l6ZSA9IDA7CisJaGVhZGVyLT5kcm9wcGVkID0g MDsKKwloZWFkZXItPnJ4X3dhdGVybWFyayA9IDE7CisJaGVhZGVyLT50eF93YXRlcm1hcmsgPSAx OworCWhlYWRlci0+cnhfcmVxdWVzdCA9IDE7CisJaGVhZGVyLT50eF9yZXF1ZXN0ID0gMDsKKwlo ZWFkZXItPnJlYWRfaW5kZXggPSAwOworCWhlYWRlci0+d3JpdGVfaW5kZXggPSAwOworfQorCit2 b2lkIGE2eHhfaGZpX2luaXQoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0IGE2eHhf Z211X2JvICpoZmkgPSBnbXUtPmhmaTsKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfdGFibGVfaGVh ZGVyICp0YWJsZSA9IGhmaS0+dmlydDsKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyICpo ZWFkZXJzID0gaGZpLT52aXJ0ICsgc2l6ZW9mKCp0YWJsZSk7CisJdTY0IG9mZnNldDsKKwlpbnQg dGFibGVfc2l6ZTsKKworCS8qCisJICogVGhlIHRhYmxlIHNpemUgaXMgdGhlIHNpemUgb2YgdGhl IHRhYmxlIGhlYWRlciBwbHVzIGFsbCBvZiB0aGUgcXVldWUKKwkgKiBoZWFkZXJzCisJICovCisJ dGFibGVfc2l6ZSA9IHNpemVvZigqdGFibGUpOworCXRhYmxlX3NpemUgKz0gKEFSUkFZX1NJWkUo Z211LT5xdWV1ZXMpICoKKwkJc2l6ZW9mKHN0cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIpKTsK KworCXRhYmxlLT52ZXJzaW9uID0gMDsKKwl0YWJsZS0+c2l6ZSA9IHRhYmxlX3NpemU7CisJLyog Rmlyc3QgcXVldWUgaGVhZGVyIGlzIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRhYmxl IGhlYWRlciAqLworCXRhYmxlLT5xaGRyMF9vZmZzZXQgPSBzaXplb2YoKnRhYmxlKSA+PiAyOwor CXRhYmxlLT5xaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGE2eHhfaGZpX3F1ZXVlX2hlYWRlcikg Pj4gMjsKKwl0YWJsZS0+bnVtX3F1ZXVlcyA9IEFSUkFZX1NJWkUoZ211LT5xdWV1ZXMpOworCXRh YmxlLT5hY3RpdmVfcXVldWVzID0gQVJSQVlfU0laRShnbXUtPnF1ZXVlcyk7CisKKwkvKiBDb21t YW5kIHF1ZXVlICovCisJb2Zmc2V0ID0gU1pfNEs7CisJYTZ4eF9oZmlfcXVldWVfaW5pdCgmZ211 LT5xdWV1ZXNbMF0sICZoZWFkZXJzWzBdLCBoZmktPnZpcnQgKyBvZmZzZXQsCisJCWhmaS0+aW92 YSArIG9mZnNldCwgMCk7CisKKwkvKiBHTVUgcmVzcG9uc2UgcXVldWUgKi8KKwlvZmZzZXQgKz0g U1pfNEs7CisJYTZ4eF9oZmlfcXVldWVfaW5pdCgmZ211LT5xdWV1ZXNbMV0sICZoZWFkZXJzWzFd LCBoZmktPnZpcnQgKyBvZmZzZXQsCisJCWhmaS0+aW92YSArIG9mZnNldCwgNCk7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjYwZDEzMTlmYTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisKKyNpZm5kZWYgX0E2WFhf SEZJX0hfCisjZGVmaW5lIF9BNlhYX0hGSV9IXworCitzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfdGFi bGVfaGVhZGVyIHsKKwl1MzIgdmVyc2lvbjsKKwl1MzIgc2l6ZTsJCS8qIFNpemUgb2YgdGhlIHF1 ZXVlIHRhYmxlIGluIGR3b3JkcyAqLworCXUzMiBxaGRyMF9vZmZzZXQ7CS8qIE9mZnNldCBvZiB0 aGUgZmlyc3QgcXVldWUgaGVhZGVyICovCisJdTMyIHFoZHJfc2l6ZTsJCS8qIFNpemUgb2YgdGhl IHF1ZXVlIGhlYWRlcnMgKi8KKwl1MzIgbnVtX3F1ZXVlczsJCS8qIE51bWJlciBvZiB0b3RhbCBx dWV1ZXMgKi8KKwl1MzIgYWN0aXZlX3F1ZXVlczsJLyogTnVtYmVyIG9mIGFjdGl2ZSBxdWV1ZXMg Ki8KK307CisKK3N0cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIgeworCXUzMiBzdGF0dXM7CisJ dTMyIGlvdmE7CisJdTMyIHR5cGU7CisJdTMyIHNpemU7CisJdTMyIG1zZ19zaXplOworCXUzMiBk cm9wcGVkOworCXUzMiByeF93YXRlcm1hcms7CisJdTMyIHR4X3dhdGVybWFyazsKKwl1MzIgcnhf cmVxdWVzdDsKKwl1MzIgdHhfcmVxdWVzdDsKKwl1MzIgcmVhZF9pbmRleDsKKwl1MzIgd3JpdGVf aW5kZXg7Cit9OworCitzdHJ1Y3QgYTZ4eF9oZmlfcXVldWUgeworCXN0cnVjdCBhNnh4X2hmaV9x dWV1ZV9oZWFkZXIgKmhlYWRlcjsKKwlzcGlubG9ja190IGxvY2s7CisJdTMyICpkYXRhOworCWF0 b21pY190IHNlcW51bTsKK307CisKKy8qIFRoaXMgaXMgdGhlIG91dGdvaW5nIHF1ZXVlIHRvIHRo ZSBHTVUgKi8KKyNkZWZpbmUgSEZJX0NPTU1BTkRfUVVFVUUgMAorCisvKiBUSGlzIGlzIHRoZSBp bmNvbWluZyByZXNwb25zZSBxdWV1ZSBmcm9tIHRoZSBHTVUgKi8KKyNkZWZpbmUgSEZJX1JFU1BP TlNFX1FVRVVFIDEKKworI2RlZmluZSBIRklfSEVBREVSX0lEKG1zZykgKChtc2cpICYgMHhmZikK KyNkZWZpbmUgSEZJX0hFQURFUl9TSVpFKG1zZykgKCgobXNnKSA+PiA4KSAmIDB4ZmYpCisjZGVm aW5lIEhGSV9IRUFERVJfU0VRTlVNKG1zZykgKCgobXNnKSA+PiAyMCkgJiAweGZmZikKKworLyog RklYTUU6IERvIHdlIG5lZWQgdGhpcyBvciBjYW4gd2UgdXNlIEFSUkFZX1NJWkU/ICovCisjZGVm aW5lIEhGSV9SRVNQT05TRV9QQVlMT0FEX1NJWkUgMTYKKworLyogSEZJIG1lc3NhZ2UgdHlwZXMg Ki8KKworI2RlZmluZSBIRklfTVNHX0NNRCAwCisjZGVmaW5lIEhGSV9NU0dfQUNLIDIKKworI2Rl ZmluZSBIRklfRjJIX01TR19BQ0sgMTI2CisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9uc2Ug eworCXUzMiBoZWFkZXI7CisJdTMyIHJldF9oZWFkZXI7CisJdTMyIGVycm9yOworCXUzMiBwYXls b2FkW0hGSV9SRVNQT05TRV9QQVlMT0FEX1NJWkVdOworfTsKKworI2RlZmluZSBIRklfRjJIX01T R19FUlJPUiAxMDAKKworc3RydWN0IGE2eHhfaGZpX21zZ19lcnJvciB7CisJdTMyIGhlYWRlcjsK Kwl1MzIgY29kZTsKKwl1MzIgcGF5bG9hZFsyXTsKK307CisKKyNkZWZpbmUgSEZJX0gyRl9NU0df SU5JVCAwCisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfZ211X2luaXRfY21kIHsKKwl1MzIgaGVhZGVy OworCXUzMiBzZWdfaWQ7CisJdTMyIGRiZ19idWZmZXJfYWRkcjsKKwl1MzIgZGJnX2J1ZmZlcl9z aXplOworCXUzMiBib290X3N0YXRlOworfTsKKworI2RlZmluZSBIRklfSDJGX01TR19GV19WRVJT SU9OIDEKKworc3RydWN0IGE2eHhfaGZpX21zZ19md192ZXJzaW9uIHsKKwl1MzIgaGVhZGVyOwor CXUzMiBzdXBwb3J0ZWRfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgSEZJX0gyRl9NU0dfUEVSRl9U QUJMRSA0CisKK3N0cnVjdCBwZXJmX2xldmVsIHsKKwl1MzIgdm90ZTsKKwl1MzIgZnJlcTsKK307 CisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfcGVyZl90YWJsZSB7CisJdTMyIGhlYWRlcjsKKwl1MzIg bnVtX2dwdV9sZXZlbHM7CisJdTMyIG51bV9nbXVfbGV2ZWxzOworCisJc3RydWN0IHBlcmZfbGV2 ZWwgZ3hfdm90ZXNbMTZdOworCXN0cnVjdCBwZXJmX2xldmVsIGN4X3ZvdGVzWzRdOworfTsKKwor I2RlZmluZSBIRklfSDJGX01TR19CV19UQUJMRSAzCisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfYndf dGFibGUgeworCXUzMiBoZWFkZXI7CisJdTMyIGJ3X2xldmVsX251bTsKKwl1MzIgY25vY19jbWRz X251bTsKKwl1MzIgZGRyX2NtZHNfbnVtOworCXUzMiBjbm9jX3dhaXRfYml0bWFzazsKKwl1MzIg ZGRyX3dhaXRfYml0bWFzazsKKwl1MzIgY25vY19jbWRzX2FkZHJzWzZdOworCXUzMiBjbm9jX2Nt ZHNfZGF0YVsyXVs2XTsKKwl1MzIgZGRyX2NtZHNfYWRkcnNbOF07CisJdTMyIGRkcl9jbWRzX2Rh dGFbMTZdWzhdOworfTsKKworI2RlZmluZSBIRklfSDJGX01TR19URVNUIDUKKworc3RydWN0IGE2 eHhfaGZpX21zZ190ZXN0IHsKKwl1MzIgaGVhZGVyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMKaW5kZXggZDcwZTdkMTQ1ZGFlLi5hNmE5 NzIxZDgyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19k ZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMK QEAgLTExMSw2ICsxMTEsMTYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9faW5mbyBncHVs aXN0W10gPSB7CiAJCQlBRFJFTk9fUVVJUktfRkFVTFRfREVURUNUX01BU0ssCiAJCS5pbml0ID0g YTV4eF9ncHVfaW5pdCwKIAkJLnphcGZ3ID0gImE1MzBfemFwLm1kdCIsCisJfSwgeworCQkucmV2 ID0gQURSRU5PX1JFVig2LCAzLCAwLCBBTllfSUQpLAorCQkucmV2biA9IDYzMCwKKwkJLm5hbWUg PSAiQTYzMCIsCisJCS5mdyA9IHsKKwkJCVtBRFJFTk9fRldfU1FFXSA9ICJhNjMwX3NxZS5mdyIs CisJCQlbQURSRU5PX0ZXX0dNVV0gPSAiYTYzMF9nbXUuYmluIiwKKwkJfSwKKwkJLmdtZW0gPSBT Wl8xTSwKKwkJLmluaXQgPSBhNnh4X2dwdV9pbml0LAogCX0sCiB9OwogCkBAIC0xMjcsNiArMTM3 LDggQEAgTU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E1MzBfemFwLm1kdCIpOwogTU9EVUxFX0ZJUk1X QVJFKCJxY29tL2E1MzBfemFwLmIwMCIpOwogTU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E1MzBfemFw LmIwMSIpOwogTU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E1MzBfemFwLmIwMiIpOworTU9EVUxFX0ZJ Uk1XQVJFKCJxY29tL2E2MzBfc3FlLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoInFjb20vYTYzMF9n bXUuYmluIik7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBfcmV2X21hdGNoKHVpbnQ4X3QgZW50cnks IHVpbnQ4X3QgaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h ZHJlbm9fZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMKaW5k ZXggYmNiZjlmMmEyOWY5Li5hZTY5M2MyOGQ2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vYWRyZW5vL2FkcmVub19ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVu by9hZHJlbm9fZ3B1LmMKQEAgLTEzOCw3ICsxMzgsNyBAQCBhZHJlbm9fcmVxdWVzdF9mdyhzdHJ1 Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSwgY29uc3QgY2hhciAqZnduYW1lKQogCXJldHVybiBF UlJfUFRSKC1FTk9FTlQpOwogfQogCi1zdGF0aWMgaW50IGFkcmVub19sb2FkX2Z3KHN0cnVjdCBh ZHJlbm9fZ3B1ICphZHJlbm9fZ3B1KQoraW50IGFkcmVub19sb2FkX2Z3KHN0cnVjdCBhZHJlbm9f Z3B1ICphZHJlbm9fZ3B1KQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h ZHJlbm9fZ3B1LmgKaW5kZXggYmM5ZWMyN2U5ZWQ4Li4zZTBjMDNkMmU5MWEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKQEAgLTUwLDcgKzUwLDkgQEAgZW51bSBhZHJl bm9fcmVncyB7CiAKIGVudW0gewogCUFEUkVOT19GV19QTTQgPSAwLAorCUFEUkVOT19GV19TUUUg PSAwLCAvKiBhNnh4ICovCiAJQURSRU5PX0ZXX1BGUCA9IDEsCisJQURSRU5PX0ZXX0dNVSA9IDEs IC8qIGE2eHggKi8KIAlBRFJFTk9fRldfR1BNVSA9IDIsCiAJQURSRU5PX0ZXX01BWCwKIH07CkBA IC0yMjcsNiArMjI5LDcgQEAgaW50IGFkcmVub19ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQlzdHJ1Y3QgYWRyZW5vX2dwdSAq Z3B1LCBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyAqZnVuY3MsCiAJCWludCBucl9yaW5n cyk7CiB2b2lkIGFkcmVub19ncHVfY2xlYW51cChzdHJ1Y3QgYWRyZW5vX2dwdSAqZ3B1KTsKK2lu dCBhZHJlbm9fbG9hZF9mdyhzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSk7CiAKIAogLyog cmluZ2J1ZmZlciBoZWxwZXJzICh0aGUgcGFydHMgdGhhdCBhcmUgYWRyZW5vIHNwZWNpZmljKSAq LwpAQCAtMzI5LDYgKzMzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZHJlbm9fZ3B1X3dyaXRl KHN0cnVjdCBhZHJlbm9fZ3B1ICpncHUsCiBzdHJ1Y3QgbXNtX2dwdSAqYTN4eF9ncHVfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHN0cnVjdCBtc21fZ3B1ICphNHh4X2dwdV9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogc3RydWN0IG1zbV9ncHUgKmE1eHhfZ3B1X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7CitzdHJ1Y3QgbXNtX2dwdSAqYTZ4eF9ncHVfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogc3RhdGljIGlubGluZSB2b2lkIGFkcmVub19ncHVfd3Jp dGU2NChzdHJ1Y3QgYWRyZW5vX2dwdSAqZ3B1LAogCQllbnVtIGFkcmVub19yZWdzIGxvLCBlbnVt IGFkcmVub19yZWdzIGhpLCB1NjQgZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMKaW5kZXggZDRkNWE2 OGU0NjhkLi5iNjZkNDVjNDE0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCkBAIC04Nyw3ICs4Nyw3 IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2ZnJlcV9kZXZfcHJvZmlsZSBtc21fZGV2ZnJlcV9wcm9maWxl ID0gewogc3RhdGljIHZvaWQgbXNtX2RldmZyZXFfaW5pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQog ewogCS8qIFdlIG5lZWQgdGFyZ2V0IHN1cHBvcnQgdG8gZG8gZGV2ZnJlcSAqLwotCWlmICghZ3B1 LT5mdW5jcy0+Z3B1X2J1c3kpCisJaWYgKCFncHUtPmZ1bmNzLT5ncHVfYnVzeSB8fCAhZ3B1LT5j b3JlX2NsaykKIAkJcmV0dXJuOwogCiAJbXNtX2RldmZyZXFfcHJvZmlsZS5pbml0aWFsX2ZyZXEg PSBncHUtPmZhc3RfcmF0ZTsKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZnJlZWRyZW5vCg==