From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: Re: [RFC v5 02/12] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Thu, 05 Nov 2015 15:55:36 +0100 Message-ID: <1446735336.3894.102.camel@pengutronix.de> References: <1446637509-6418-1-git-send-email-p.zabel@pengutronix.de> <1446637509-6418-3-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Kurtz Cc: Mark Rutland , "open list:OPEN FIRMWARE AND..." , Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , dri-devel , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , Sasha Hauer List-Id: linux-mediatek@lists.infradead.org SGkgRGFuaWVsLAoKQW0gRG9ubmVyc3RhZywgZGVuIDA1LjExLjIwMTUsIDAyOjQ5ICswODAwIHNj aHJpZWIgRGFuaWVsIEt1cnR6Ogo+IEhpIFBoaWxpcHAsCj4gCj4gQSBidW5jaCBvZiByZXZpZXcg Y29tbWVudHMgaW5saW5lLgoKQSBidW5jaCBpbmRlZWQuIFRoYW5rIHlvdSBmb3IgdGhlIGZlZWRi YWNrLgoKPiBPbiBXZWQsIE5vdiA0LCAyMDE1IGF0IDc6NDQgUE0sIFBoaWxpcHAgWmFiZWwgPHAu emFiZWxAcGVuZ3V0cm9uaXguZGU+IHdyb3RlOgpbLi4uXQo+ID4gK3N0cnVjdCBtdGtfZHJtX2Ny dGMgewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2NydGMgICAgICAgICAgICAgICAgICAgICAgICAg YmFzZTsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBpcGU7Cj4gCj4gVGhlcmUgaXMgb25lIHBpcGUgdG9vIG1hbnkgOi0pCj4gSSB0aGluayB0aGlz IG9uZSBpcyBub3QgdXNlZC4iCj4gCj4gPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmFibGVkOwo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2NydGNfZGRw X2NvbnRleHQgICAgICAgICAgICAgKmN0eDsKPiAKPiBJIHRoaW5rIHlvdSBzaG91bGQgYmUgYWJs ZSB0byBqdXN0IGVtYmVkIHRoZSAibXRrX2NydGNfZGRwX2NvbnRleHQiCj4gcmlnaHQgaW50byBt dGtfZHJtX2NydGMuCj4gT3IgbWF5YmUganVzdCBnZXQgcmlkIG9mIG10a19jcnRjX2RkcF9jb250 ZXh0IGNvbXBsZXRlbHkgYW5kIGp1c3QgdXNlCj4gbXRrX2RybV9jcnRjIGV2ZXl3aGVyZS4KCkkn bGwgY29tYmluZSB0aGVtIGFuZCBnZXQgcmlkIG9mIHRoZSBzdXBlcmZsdW91cyBwaXBlLgoKWy4u Ll0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2RybV9j cnRjICpjcnRjKQo+ID4gK3sKWy4uLl0KPiA+ICsgICAgICAgLyogZGlzcF9tdGNtb3MgKi8KPiA+ ICsgICAgICAgcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhkcm0tPmRldik7Cj4gPiArICAgICAg IGlmIChyZXQgPCAwKQo+ID4gKyAgICAgICAgICAgICAgIERSTV9FUlJPUigiRmFpbGVkIHRvIGVu YWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfZGRw X2Nsb2NrX29uKGN0eC0+bXV0ZXhfZGV2KTsKPiA+ICsgICAgICAgbXRrX2NydGNfZGRwX3Bvd2Vy X29uKGN0eCk7Cj4gCj4gZ2V0X3N5bmMoKSwgY2xvY2tfb24oKSBhbmQgZGRwX3Bvd2VyX29uKCkg cmVhbGx5IGNhbiBmYWlsOyB3ZSBhcmUganVzdAo+IGlnbm9yaW5nIGVycm9ycyBoZXJlLgo+IFNp bmNlIHRoZXkgY2FuIGZhaWwsIHNob3VsZG4ndCB0aGV5IGJlIG1vdmVkIG91dCBvZiB0aGUgYXRv bWljCj4gIi0+ZW5hYmxlKCkiIHBhdGggaW50byB0aGUgLT5jaGVjaygpIHBhdGggdGhhdCBpcyBh bGxvd2VkIHRvIGZhaWw/CgpZb3Ugc3VnZ2VzdCBJIG1vdmUgdGhlbSBpbnRvIGF0b21pY19jaGVj az8KClRvIG1lIGl0IHNvdW5kcyBsaWtlIHRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBj aGVjaywgYnV0IGZyb20gdGhlCmRybV9tb2RlX2NvbmZpZ19mdW5jcyBhdG9taWNfY29tbWl0IGNh bGxiYWNrLCByaWdodCBhZnRlciBjYWxsaW5nIApkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3Bs YW5lcy4gQnV0IHRoZXJlIGlzIG5vIHByZXBhcmUgZXF1aXZhbGVudCB0bwpkcm1fYXRvbWljX2hl bHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzLgoKPiA+ICsKPiA+ICsgICAgICAgRFJNX0lORk8o Im1lZGlhdGVrX2RkcF9kZHBfcGF0aF9zZXR1cFxuIik7Cj4gPiArICAgICAgIGZvciAoaSA9IDA7 IGkgPCAoY3R4LT5kZHBfY29tcF9uciAtIDEpOyBpKyspIHsKPiAKPiBuaXQ6IHRoZSBpbm5lciAo KSBhcmUgbm90IG5lY2Vzc2FyeS4KCldpbGwgcmVtb3ZlIHRob3NlLgoKPiA+ICsgICAgICAgICAg ICAgICBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgoY3R4LT5jb25maWdfcmVncywgY3R4LT5waXBl LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmRkcF9j b21wW2ldLmZ1bmNzLT5jb21wX2lkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjdHgtPmRkcF9jb21wW2krMV0uZnVuY3MtPmNvbXBfaWQpOwo+ID4gKyAgICAg ICAgICAgICAgIG10a19kZHBfYWRkX2NvbXBfdG9fbXV0ZXgoY3R4LT5tdXRleF9kZXYsIGN0eC0+ cGlwZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ ZGRwX2NvbXBbaV0uZnVuY3MtPmNvbXBfaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdHgtPmRkcF9jb21wW2krMV0uZnVuY3MtPmNvbXBfaWQpOwo+ID4g KyAgICAgICB9Cj4gCj4gRG8geW91IHJlYWxseSBoYXZlIHRvIGRvIHRoaXMgaGVyZSBpbiB0aGUg ZW5hYmxlIHBhdGg/ICBUaGlzIGxvb2tzCj4gbGlrZSBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUg ZG9uZSBpbiBiaW5kKCk/Cj4gCj4gUGVyaGFwcyBhbGwgd2UgcmVhbGx5IG5lZWQgaGVyZSBpcyB0 byB3YWxrIHRoZSBwYXRoIGFuZCB3cml0ZSB0bwo+IERJU1BfUkVHX01VVEVYX0VOIGF0IHRoZSBl bmQgb2YgbXRrX2RkcF9hZGRfY29tcF90b19tdXRleCgpLgo+IEJ5IHRoZSB3YXksIHdoZXJlIGFy ZSB0aG9zZSBiaXRzIGNsZWFyZWQgaW4gdGhlIGRpc2FibGUgcGF0aD8KCkRpc2FibGluZyBvciBj aGFuZ2luZyB0aGUgcGF0aCBpcyBub3QgaW1wbGVtZW50ZWQsIHRoZSBjdXJyZW50bHkgc3RhdGlj CnNldHVwIGNvdWxkIHdlbGwgYmUgbW92ZWQgaW50byBiaW5kKCkuCgpbLi4uXQo+ID4gK3N0YXRp YyB2b2lkIG10a19jcnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJtX2NydGMgKmNydGMpCj4g PiArewpbLi4uXQo+ID4gKyAgICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKPiAK PiBXaHkgc3luYz8KCkkgY2FuIHRoaW5rIG9mIG5vIHJlYXNvbiwgd2lsbCB1c2UgdGhlIGFzeW5j IHZlcnNpb24gaGVyZS4KClsuLi5dCj4gPiArc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rpc2Fi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19k cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKPiA+ICsgICAgICAgc3RydWN0 IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsK PiA+ICsKPiA+ICsgICAgICAgRFJNX0lORk8oIm10a19kcm1fY3J0Y19kaXNhYmxlICVkXG4iLCBj cnRjLT5iYXNlLmlkKTsKPiA+ICsgICAgICAgaWYgKFdBUk5fT04oIW10a19jcnRjLT5lbmFibGVk KSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgICAgIG10a19jcnRj X2RkcF9od19maW5pKG10a19jcnRjKTsKPiA+ICsgICAgICAgbXRrX2NydGMtPmRvX2ZsdXNoID0g ZmFsc2U7Cj4gPiArICAgICAgIGlmIChzdGF0ZS0+ZXZlbnQpCj4gPiArICAgICAgICAgICAgICAg bXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAobXRrX2NydGMpOwo+IAo+IEl0IGlzIGEgYml0 IGF3a3dhcmQgdG8gc2VuZCB0aGUgcGFnZSBmbGlwIGV2ZW50IGJlZm9yZSB0aGUgYWN0dWFsIHBh Z2UKPiBmbGlwIGhhcyBjb21wbGV0ZWQgKGluIHRoaXMgY2FzZSwgZm9yIGEgcGFnZSBmbGlwIHRo YXQgeW91IGFyZQo+IGNhbmNlbGluZyBieSBkaXNhYmxpbmcgdGhlIGNydGMpLgo+IFdvdWxkIGl0 IGJlIGJldHRlciB0byB3YWl0IGZvciB2YmxhbmsgaGVyZSBpbiBjcnRjX2Rpc2FibGUgaW5zdGVh ZD8KClllcywgSSB3aWxsIHdhaXQgZm9yIHZibGFuayBoZXJlIGluc3RlYWQuCgpbLi4uXQo+ID4g K3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpj cnRjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10 a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiA+ ICsKPiA+ICsgICAgICAgaWYgKHN0YXRlLT5iYXNlLmV2ZW50KSB7Cj4gPiArICAgICAgICAgICAg ICAgc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKPiA+ICsg ICAgICAgICAgICAgICBXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgIT0gMCk7Cj4g PiArICAgICAgICAgICAgICAgc3RhdGUtPmV2ZW50ID0gc3RhdGUtPmJhc2UuZXZlbnQ7Cj4gPiAr ICAgICAgICAgICAgICAgc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOwo+IAo+IEhtbS4gV2h5IGFy ZSB3ZSAic3RlYWxpbmciIGV2ZW50IGZyb20gZHJtX2NydGNfc3RhdGUgYW5kIGhhbmRpbmcgaXQK PiBvdmVyIHRvIHRoZSB3cmFwcGVyIG10a19jcnRjX3N0YXRlPwo+IFdvbid0IHdlIHN0aWxsIGJl IGFibGUgdG8gcmV0cmlldmUgc3RhdGUtPmJhc2UuZXZlbnQgbGF0ZXIgd2hlbiB3ZQo+IG5lZWQg aXQgaW4gdGhlIG10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwPwoKSG1tLCBnb29kIHBvaW50 LiBJJ2xsIHRyeSB0aGF0LgoKWy4uLl0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaXJx KHN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4KQo+IAo+ID09PiBTbywgdGhpcyBpcyB0 aGUgcGFydCBvZiB0aGUgZHJpdmVyIHRoYXQgbWFrZXMgbWUgdGhlIG1vc3QgbmVydm91cy4KPiBX aHkgYXJlIHdlIHdyaXRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZSByZWdpc3RlcnMgaW4gdGhlICp2 YmxhbmsKPiBpbnRlcnJ1cHQgaGFuZGxlcio/IQo+IEV2ZXJ5IG90aGVyIGRpc3BsYXkgY29udHJv bGxlciB0aGF0IEkndmUgZXZlciBzZWVuIGhhcyBzaGFkb3cKPiByZWdpc3RlcnMgdGhhdCBhcmUg dXNlZCB0byBzdGFnZSBhIHBhZ2UgZmxpcCBhdCB0aGUgbmV4dCB2YmxhbmsuCj4gQXJlIHlvdSBz dXJlIHRoaXMgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXM/Cj4KPiBJbiBhbnkgY2FzZSwg aG93IGRvIHdlIGdldCB0aGF0IGZpcnN0IGludGVycnVwdCBpbiB3aGljaCB0byBhcHBseSB0aGUg cmVnaXN0ZXI/CgpJJ2xsIHRyeSB0byByZXdvcmsgdGhpcyB1c2luZyB0aGUgRElTUF9NVVRFWCB0 byB0cmlnZ2VyIHJlZ2lzdGVyIHVwZGF0ZXMKb24gU09GLgoKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gY3R4LT5jcnRjOwo+ID4gKyAgICAgICBzdHJ1 Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmY3R4LT5kZHBfY29tcFswXTsKPiAKPiBkZHBfY29tcFsw XSBoZXJlIGxvb2tzIGEgYml0IGxpa2UgYmxhY2sgbWFnaWMuICAiVGhlIDB0aCBjb21wb25lbnQg aXMKPiBhbHdheXMgdGhlIG92bCIuCj4gUGVyaGFwcyBtYWtlIGFuIGV4cGxpY2l0bHkgbmFtZWQg Im92bCIgZmllbGQgZm9yIG10a19jcnRjX2RkcF9jb250ZXh0LgoKT2suCgo+ID4gKyAgICAgICBz dHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUobXRrX2NydGMt PmJhc2Uuc3RhdGUpOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICsgICAg ICAgaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgewo+ID4gKyAgICAgICAgICAgICAgIHN0YXRl LT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IG92bC0+ZnVuY3MtPmNvbXBfbGF5ZXJfb2ZmKG92bC0+cmVncywgaSk7Cj4gCj4gV2h5IGRvIHlv dSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBsYXllcnMgYmVmb3JlIHNldHRpbmcgbW9kZT8KCkkgYW0g bm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkuIEl0IHNlZW1zIHRvIHdvcmsgd2l0aG91dC4K Cj4gPiArICAgICAgICAgICAgICAgb3ZsLT5mdW5jcy0+Y29tcF9jb25maWcob3ZsLT5yZWdzLCBz dGF0ZS0+cGVuZGluZ193aWR0aCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdodCwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX3Zy ZWZyZXNoKTsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwg T1ZMX0xBWUVSX05SOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgICBpZiAoc3RhdGUtPnBlbmRp bmdfb3ZsX2NvbmZpZ1tpXSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0 ZS0+cGVuZGluZ19vdmxfZW5hYmxlW2ldKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvdmwtPmZ1bmNzLT5jb21wX2xheWVyX29mZihvdmwtPnJlZ3MsIGkpOwo+ID4gKwo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgb3ZsLT5mdW5jcy0+Y29tcF9sYXllcl9jb25maWcob3Zs LT5yZWdzLCBpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXRlLT5wZW5kaW5nX292bF9hZGRyW2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX292bF9waXRjaFtpXSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cGVuZGluZ19vdmxfZm9ybWF0W2ld LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wZW5k aW5nX292bF94W2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRlLT5wZW5kaW5nX292bF95W2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX292bF9zaXplW2ldKTsKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+cGVuZGluZ19vdmxfZW5hYmxlW2ldKQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmwtPmZ1bmNzLT5jb21wX2xheWVyX29u KG92bC0+cmVncywgaSk7Cj4gPiArICAgICAgICAgICAgICAgfQo+IAo+IEknZCBtb3ZlIHRoaXMg YWxsIGFsbCB3aXRoIGFuIG10a19wbGFuZSBmdW5jdGlvbiwgYW5kIGxldCBlYWNoCj4gbXRrX3Bs YW5lIHN0b3JlIGl0cyBvd24gcGVuZGluZyBzdGF0ZS4KCk9rLgoKWy4uLl0KPiA+ICtzdGF0aWMg aW50IG10a19jcnRjX2RkcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLAo+ID4gKyAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCj4gPiArewpbLi4uXQo+ID4g KyAgICAgICBmb3IgKHpwb3MgPSAwOyB6cG9zIDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKPiA+ ICsgICAgICAgICAgICAgICB0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklN QVJZIDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHpwb3MgPT0gMSkgPyBE Uk1fUExBTkVfVFlQRV9DVVJTT1IgOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKPiA+ICsgICAgICAgICAg ICAgICByZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmY3R4LT5wbGFuZXNbenBvc10sCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgY3R4LT5waXBlLCB0eXBlLCB6 cG9zLCBPVkxfTEFZRVJfTlIpOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIHVucHJlcGFyZTsKPiA+ICsgICAgICAgfQo+IAo+IEkg dGhpbmsgeW91IHNob3VsZCBqdXN0IGxldCBtdGtfZHJtX2NydGNfY3JlYXRlKCkgY3JlYXRlICYg aW5pdCBpdHMgb3duIHBsYW5lcy4KPiBDdXJyZW50bHksIGl0cyBvdmVybGF5IHBsYW5lcyBhcmUg dW5hc3NpZ25lZC4KPiBGdXJ0aGVybW9yZSwgdGhlIGNydGMgY29udGV4dCBkb2Vzbid0IHJlYWxs eSBuZWVkIGFuIGFycmF5IG9mIHBsYW5lcyBhdCBhbGwuCj4gSXQgb25seSByZWFsbHkgdXNlcyB0 aGUgYXJyYXkgdG8ga25vdyB3aGljaCBwbGFuZXMgdG8gdXBkYXRlIGR1cmluZwo+IHRoZSB2Ymxh bmsgaXJxLgo+IEJ1dCwgdGhhdCBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBhbHJlYWR5IHByZXNl bnQgaW4gdGhlIGF0b21pYyBzdGF0ZQo+IHRvIGJlIGFwcGxpZWQgaXRzZWxmLgoKCgpbLi4uXQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmI2OTYwNjYKPiA+IC0tLSAvZGV2L251bGwKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAo+ID4gQEAgLTAs MCArMSw1NiBAQApbLi4uXQo+ID4gK3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7Cj4gPiArICAgICAg IHN0cnVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2NydGNfc3RhdGUgYmFzZTsKPiA+ ICsgICAgICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7Cj4gPiArCj4g PiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgcGVuZGluZ191cGRhdGU7 Cj4gPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ19uZWVk c192Ymxhbms7Cj4gPiArCj4gPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGVuZGluZ19jb25maWc7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAg ICAgICAgcGVuZGluZ193aWR0aDsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAg ICAgICAgICBwZW5kaW5nX2hlaWdodDsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAg ICAgICAgICAgICBwZW5kaW5nX3ZyZWZyZXNoOwo+ID4gKwo+ID4gKyAgICAgICBib29sICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3ZsX2NvbmZpZ1tPVkxfTEFZRVJfTlJdOwo+ ID4gKyAgICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3ZsX2Vu YWJsZVtPVkxfTEFZRVJfTlJdOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAg ICAgICAgIHBlbmRpbmdfb3ZsX2FkZHJbT1ZMX0xBWUVSX05SXTsKPiA+ICsgICAgICAgdW5zaWdu ZWQgaW50ICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX292bF9waXRjaFtPVkxfTEFZRVJfTlJd Owo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3Zs X2Zvcm1hdFtPVkxfTEFZRVJfTlJdOwo+ID4gKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBlbmRpbmdfb3ZsX3hbT1ZMX0xBWUVSX05SXTsKPiA+ICsgICAgICAgaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX292bF95W09WTF9MQVlFUl9OUl07Cj4g PiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgcGVuZGluZ19vdmxfc2l6 ZVtPVkxfTEFZRVJfTlJdOwo+ID4gKyAgICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBlbmRpbmdfb3ZsX2RpcnR5W09WTF9MQVlFUl9OUl07Cj4gCj4gQWxsIG9mIHRoZXNlIE9W TF9MQVlFUl9OUiBsZW5ndGggYXJyYXlzIGxvb2sgbGlrZSBtdGtfcGxhbmVfc3RhdGUgdG8gbWUu Cj4gSSB0aGluayB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGFuZCB3cmFwIGRybV9w bGFuZV9zdGF0ZS4KCgoKWy4uLl0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5jCj4gPiBAQCAtMCwwICsxLDIxOCBAQApbLi4uXQo+ID4gKyNkZWZpbmUgRElT UF9SRUdfTVVURVhfRU4obikgICAoMHgyMCArIDB4MjAgKiBuKQo+ID4gKyNkZWZpbmUgRElTUF9S RUdfTVVURVhfUlNUKG4pICAoMHgyOCArIDB4MjAgKiBuKQo+ID4gKyNkZWZpbmUgRElTUF9SRUdf TVVURVhfTU9EKG4pICAoMHgyYyArIDB4MjAgKiBuKQo+ID4gKyNkZWZpbmUgRElTUF9SRUdfTVVU RVhfU09GKG4pICAoMHgzMCArIDB4MjAgKiBuKQo+IAo+IFRoZSBuIHNob3VsZCBiZSBpbiBwYXJl bnMgaGVyZS4KCk9rLgoKWy4uLl0KPiA+ICt2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2 b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLCB1bnNpZ25lZCBpbnQgcGlwZSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCj4KPiBX aHkgcGFzcyBwaXBlIGlmIHdlIGRvbid0IHVzZSBpdD8KCkxlZnRvdmVyIGZyb20gYmVmb3JlIHRo ZSBzcGxpdCBvZiBtdGtfZGRwX2FkZF90b19wYXRoL211dGV4LgoKWy4uLl0KPiA+ICsgICAgICAg aWYgKHZhbHVlKSB7Cj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZyA9IHJlYWRs KGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICB3 cml0ZWwocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwo+IAo+IEFsbW9zdCBhbGwgb2YgdGhlIHdy aXRlbCgpIGluIHRoaXMgcGF0Y2ggY2FuIHJlYWxseSBiZSB3cml0ZWxfcmVsYXhlZCgpLgo+IFRo ZSBvbmx5IG9uZXMgdGhhdCBuZWVkIHdyaXRlbCgpIGFyZSB3aGVuIHlvdSByZWFsbHkgbmVlZCBh IGJhcnJpZXIuCgpPay4KCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwX2NvbXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rk cF9jb21wLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4yZjNi MzJiCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5jCj4gPiBAQCAtMCwwICsxLDQyNCBAQApbLi4uXQo+ID4gK3N0YXRp YyB2b2lkIG10a19vdmxfY29uZmlnKHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UsCj4gPiArICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJl ZnJlc2gpCj4gPiArewo+ID4gKyAgICAgICBpZiAodyAhPSAwICYmIGggIT0gMCkKPiA+ICsgICAg ICAgICAgICAgICB3cml0ZWwoaCA8PCAxNiB8IHcsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JP SV9TSVpFKTsKPiAKPiBTaG91bGQgeW91IGp1c3Qgd3JpdGUgMCB0byBESVNQX1JFR19PVkxfUk9J X1NJWkUgaWYgdyBvciBoIGFyZSAwPwoKQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCB3aWR0aCBhbmQg aGVpZ2h0IG11c3QgYmUgYXQgbGVhc3QgMS4KQnV0IG9mIGNvdXJzZSBJIHNob3VsZCBjaGVjayB0 aGlzIGVhcmxpZXIuCgpbLi4uXQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3ZsX2ZtdF9jb252 ZXJ0KHVuc2lnbmVkIGludCBmbXQpCj4gCj4gcmV0dXJuIGludCBzbyB0aGUgZXJyb3IgY29kZSBz dGF5cyBuZWdhdGl2ZT8KCkknbGwganVzdCByZXR1cm4gUkdCODg4IG9uIGVycm9yLgoKWy4uLl0K PiA+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyh2b2lkIF9faW9tZW0gKm92bF9i YXNlLCB1bnNpZ25lZCBpbnQgaWR4LAo+ID4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBh ZGRyLCB1bnNpZ25lZCBpbnQgcGl0Y2gsIHVuc2lnbmVkIGludCBmbXQsCj4gPiArICAgICAgICAg ICAgICAgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgc2l6ZSkKPiA+ICt7Cj4gPiArICAgICAg IHVuc2lnbmVkIGludCByZWc7Cj4gPiArCj4gPiArICAgICAgIHJlZyA9IGhhc19yYl9zd2FwcGVk KGZtdCkgPDwgMjQgfCBvdmxfZm10X2NvbnZlcnQoZm10KSA8PCAxMjsKPiAKPiBvdmxfZm10X2Nv bnZlcnQoKSBjYW4gcmV0dXJuIDwgMCBmb3IgdW5zdXBwb3J0ZWQgZm10Lgo+IEJ1dCwgcGVyaGFw cyB3ZSBjYW4gcmVtb3ZlIHRoYXQgY2hlY2ssIHNpbmNlIGl0IHNob3VsZCBhY3R1YWxseQo+IGFs cmVhZHkgYmUgZ3VhcmFudGVlZCBieSB0aGUgZHJtIGNvcmUgdGhhdCBhIHBsYW5lIGlzIG9ubHkg ZXZlciBhc2tlZAo+IHRvIGRpc3BsYXkgYW4gRkIgd2l0aCBhIGZvcm1hdCB0aGF0IHRoZSBwbGFu ZSBhZHZlcnRpc2VzLgoKRXhhY3RseS4gSWYgc29tZXRoaW5nIHVuc3VwcG9ydGVkIGdldHMgdGhy b3VnaCBoZXJlLCBpdCdzIGEgYnVnLgoKWy4uLl0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10 a19kZHBfY29tcF9mdW5jcyBkZHBfY29sb3IwID0gewo+ID4gKyAgICAgICAuY29tcF9pZCA9IERE UF9DT01QT05FTlRfQ09MT1IwLAo+ID4gKyAgICAgICAuY29tcF9wb3dlcl9vbiA9IG10a19jb2xv cl9zdGFydCwKPiAKPiBGb3IgY29uc2lzdGVuY3ksIGNhbiB5b3UgbmFtZSBhbGwgb2YgdGhlICIq X3N0YXJ0KCkiIGZ1bmN0aW9ucwo+ICIqX3Bvd2VyX29uIiwgb3IgY2hhbmdlIHRoZSAuY29tcF9w b3dlcl9vbiB0byAuY29tcF9zdGFydC4KPiBBY3R1YWxseSwganVzdCBkcm9wIHRoZSAiY29tcF8i IGZyb20gYWxsIG9mIHRoZSBmaWVsZHMgb2YKPiBtdGtfZGRwX2NvbXBfZnVuY3MsIHNpbmNlIGl0 IGlzIHJlZHVuZGFudC4KCkknZCBjaGFuZ2UgdGhlbSBhbGwgdG8gLmVuYWJsZS8uZGlzYWJsZS4K Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX292bDEgPSB7 Cj4gPiArICAgICAgIC5jb21wX2lkID0gRERQX0NPTVBPTkVOVF9PVkwxLAo+ID4gKyAgICAgICAu Y29tcF9jb25maWcgPSBtdGtfb3ZsX2NvbmZpZywKPiA+ICsgICAgICAgLmNvbXBfcG93ZXJfb24g PSBtdGtfb3ZsX3N0YXJ0LAo+ID4gKyAgICAgICAuY29tcF9lbmFibGVfdmJsYW5rID0gbXRrX292 bF9lbmFibGVfdmJsYW5rLAo+ID4gKyAgICAgICAuY29tcF9kaXNhYmxlX3ZibGFuayA9IG10a19v dmxfZGlzYWJsZV92YmxhbmssCj4gPiArICAgICAgIC5jb21wX2NsZWFyX3ZibGFuayA9IG10a19v dmxfY2xlYXJfdmJsYW5rLAo+ID4gKyAgICAgICAuY29tcF9sYXllcl9vbiA9IG10a19vdmxfbGF5 ZXJfb24sCj4gPiArICAgICAgIC5jb21wX2xheWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAo+ ID4gKyAgICAgICAuY29tcF9sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKPiA+ ICt9Owo+IAo+IFRoZSBjYWxsYmFjayBkdXBsaWNhdGlvbiBoZXJlIHN1Z2dlc3RzIHRoZSBjb21w b25lbnQgbW9kZWwgY2FuIGJlIHJlZmluZWQgYSBiaXQuCj4gSSB0aGluayB5b3UgcHJvYmFibHkg d2FudCBhIHNpbmdsZSBvbmUgb2YgdGhlc2U6Cj4KPiBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19k ZHBfY29tcF9mdW5jcyBkZHBfb3ZsID0gewo+ICAgICAgICAuY29uZmlnID0gbXRrX292bF9jb25m aWcsCj4gICAgICAgIC5zdGFydCA9IG10a19vdmxfc3RhcnQsCj4gICAgICAgIC5lbmFibGVfdmJs YW5rID0gbXRrX292bF9lbmFibGVfdmJsYW5rLAo+ICAgICAgICAuZGlzYWJsZV92YmxhbmsgPSBt dGtfb3ZsX2Rpc2FibGVfdmJsYW5rLAo+ICAgICAgICAuY2xlYXJfdmJsYW5rID0gbXRrX292bF9j bGVhcl92YmxhbmssCj4gICAgICAgIC5sYXllcl9vbiA9IG10a19vdmxfbGF5ZXJfb24sCj4gICAg ICAgIC5sYXllcl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKPiAgICAgICAgLmxheWVyX2NvbmZp ZyA9IG10a19vdmxfbGF5ZXJfY29uZmlnLAo+IH07CgpZZXMsIHRoZSBuZXh0IHZlcnNpb24gd2ls bCBkcm9wIC5jb21wX2lkIGZyb20gdGhlIGZ1bmNzLgoKPiBhbmQgdGhlbiB0byB1c2UgaXQgZm9y IGJvdGggb3ZsJ3MuICBNYXliZSBzb21ldGhpbmcgbGlrZSB0aGlzOgo+IAo+IHN0YXRpYyBjb25z dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Rlc2MgZGRwX292bDAgPSB7Cj4gICAuaWQgPSBERFBfQ09N UE9ORU5UX09WTDAsCj4gICAub3BzID0gZGRwX292bAo+IH07Cj4gCj4gc3RhdGljIGNvbnN0IHN0 cnVjdCBtdGtfZGRwX2NvbXBfZGVzYyBkZHBfb3ZsMSA9IHsKPiAgIC5pZCA9IEREUF9DT01QT05F TlRfT1ZMMSwKPiAgIC5vcHMgPSBkZHBfb3ZsCj4gfTsKClRoZXNlIHdpbGwgbm90IGJlIG5lY2Vz c2FyeSwgSSdsbCBzdG9yZSB0aGUgaWQgaW4gbXRrX2RkcF9jb21wLgoKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAuLmFlM2E2ZTgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKPiA+IEBAIC0wLDAg KzEsODYgQEAKWy4uLl0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfYXRvbWljX2NvbXBsZXRlKHN0cnVj dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArICAgICAg IHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07Cj4gPiArCj4gPiArICAgICAg IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRybSwgc3RhdGUpOwo+ ID4gKyAgICAgICBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUpOwo+ ID4gKyAgICAgICBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwg c3RhdGUpOwo+ID4gKyAgICAgICBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRy bSwgc3RhdGUpOwo+IAo+IFdoeSB3YWl0IGZvciB2YmxhbmsgaGVyZT8KPiBBcmUgeW91IHN1cmUg d2Ugd2FpdGVkIGxvbmcgZW5vdWdoIGhlcmU/Cj4gVGhpcyB3aWxsIHJldHVybiBhZnRlciB0aGUg dmVyeSBuZXh0IHZibGFuay4KPiBIb3dldmVyLCB3aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgbmV3 IHN0YXRlIHdhcyByZWFsbHkgdHJhbnNmZXJyZWQgdG8KPiB0aGUgaGFyZHdhcmUgaW4gdGltZT8K CkknbGwgY2hlY2sgb3V0IGhvdyB0byB1c2UgdGhlIERJU1BfTVVURVggZm9yIHRoaXMuIEl0IGhh cyBhbiBpbnRlcnJ1cHQKdG8gc2lnbmFsIHdoZW4gdGhlIHJlZ2lzdGVyIHNldHRpbmdzIHdlcmUg YXBwbGllZC4KClsuLi5dCj4gPiArc3RhdGljIGludCBtdGtfYXRvbWljX2NvbW1pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgYXN5bmMpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw cml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ ICsgICAgICAgcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0 ZSk7Cj4gPiArICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK PiA+ICsKPiA+ICsgICAgICAgbXV0ZXhfbG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwo+ID4g KyAgICAgICBmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7Cj4gPiArCj4gPiArICAg ICAgIGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0ZSk7Cj4gPiArCj4gPiAr ICAgICAgIGlmIChhc3luYykKPiA+ICsgICAgICAgICAgICAgICBtdGtfYXRvbWljX3NjaGVkdWxl KHByaXZhdGUsIHN0YXRlKTsKPiA+ICsgICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgICAgIG10 a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOwo+ID4gKwo+ID4gKyAgICAgICBtdXRl eF91bmxvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKPiAKPiBXaGF0IGRvZXMgdGhpcyBsb2Nr IGRvPwo+IEFGQUlDVCwgaXQgb25seSBlbnN1cmVzIHRoYXQgdGhlIHNlY29uZCBoYWxmIG9mIG10 a19hdG9taWNfY29tbWl0KCkKPiBjYW5ub3QgZXhlY3V0ZSB0d2ljZSBhdCB0aGUgc2FtZSB0aW1l Lgo+IEhvd2V2ZXIsIEkgZXhwZWN0IHNpbXVsdGFuZW91cyBjYWxscyB0byBhdG9taWNfY29tbWl0 KCkgc2hvdWxkIGFscmVhZHkKPiBiZSBwcm9oaWJpdGVkIGJ5IHRoZSBkcm0gY29yZT8KCkkgZG9u J3Qgc2VlIGl0LiBEUk1fSU9DVExfTU9ERV9BVE9NSUMgaXMgdW5sb2NrZWQsIGFuZApkcm1fbW9k ZV9hdG9taWNfaW9jdGwgb25seSBjYWxscyBkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQgYnV0IGRv ZXNuJ3QKZ2V0IGFueSBsb2NrIGJlZm9yZSBjYWxsaW5nIGRybV9hdG9taWNfKGFzeW5jXyljb21t aXQuCgpbLi4uXQo+ID4gK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp dmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXY7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArICAgICAgIGludCBpOwo+ID4gKwo+ ID4gKyAgICAgICBwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9u b2RlKTsKPiA+ICsgICAgICAgaWYgKCFwZGV2KSB7Cj4gPiArICAgICAgICAgICAgICAgZGV2X2Vy cihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4iLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKPiA+ ICsgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiA+ICsgICAgICAgfQo+ID4gKyAg ICAgICBwcml2YXRlLT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2Owo+ID4gKwo+ID4gKyAgICAgICBm b3IgKGkgPSAwOyBpIDwgTUFYX0NSVEM7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGlmICgh cHJpdmF0ZS0+bGFyYl9ub2RlW2ldKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUo cHJpdmF0ZS0+bGFyYl9ub2RlW2ldKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAoIXBkZXYpIHsK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZv ciBsYXJiIGRldmljZSAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpdmF0ZS0+bGFyYl9ub2RlW2ldLT5mdWxsX25hbWUpOwo+IAo+IE5pdDogZGV2X3dhcm4oKSBw ZXJoYXBzPwoKT2suCgpbLi4uXQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NSVEM7 IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGlmICghcHJpdmF0ZS0+bGFyYl9kZXZbaV0pCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg ICByZXQgPSBtdGtfc21pX2xhcmJfZ2V0KHByaXZhdGUtPmxhcmJfZGV2W2ldKTsKPiAKPiBIbW0u IHRoaXMgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgZG9uZSBieSBhIGNydGMgZnVuY3Rpb24sIGFu ZCwgb25seQo+IGZvciBDUlRDcyB0aGF0IGFyZSBhY3R1YWxseSBnb2luZyB0byBiZSB1c2VkLgoK WWVzLCBJIHN1cHBvc2UgdGhlc2Ugc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGlsZSB0aGUgcmVz cGVjdGl2ZSBETUEKY29tcG9uZW50cyAoT1ZMLCBSRE1BLCBXRE1BKSBhcmUgYWN0aXZlLgpJIHRo aW5rIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aGlzIHdvdWxkIGJlIGluIHRoZSBjb21wb25lbnQn cyAuZW5hYmxlCihvciBhIG5ldyAucHJlcGFyZSBpZiBuZWNlc3NhcnkpLgoKPiA+ICsgICAgICAg ICAgICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1Io IkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycl9sYXJiX2dldDsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7Cj4gPiAr ICAgICAgIGRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwo+ID4gKwo+ID4gKyAgICAgICByZXR1 cm4gMDsKPiA+ICsKPiA+ICtlcnJfbGFyYl9nZXQ6Cj4gPiArICAgICAgIGZvciAoaSA9IGkgLSAx OyBpID49IDA7IGktLSkKPiA+ICsgICAgICAgICAgICAgICBtdGtfc21pX2xhcmJfcHV0KHByaXZh dGUtPmxhcmJfZGV2W2ldKTsKPiA+ICsgICAgICAgZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRy bSk7Cj4gCj4gTm90IGRybV9rbXNfaGVscGVyX3BvbGxfZmluaSgpLgoKT2suCgpbLi4uXQo+ID4g K3N0YXRpYyB2b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ ID4gK3sKPiAKPiBwdXQgdGhlIGxhcmJzPwoKT2ssIHVubGVzcyBJIG1vdmUgdGhlbSBlbHNld2hl cmUuCgo+ID4gKyAgICAgICBkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiA+ICsKPiA+ ICsgICAgICAgZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gCj4gdW5iaW5kX2FsbCA/CgpPay4K ClsuLi5dCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0gewo+ ID4gKyAgICAgICAuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VN LAo+IAo+IHwgRFJJVkVSX0FUT01JQyA/CgpZZXMuCgpbLi4uXQo+ID4gK3N0YXRpYyBpbnQgbXRr X2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKWy4uLl0KPiA+ ICsgICAgICAgLyogSXRlcmF0ZSBvdmVyIHNpYmxpbmcgRElTUCBmdW5jdGlvbiBibG9ja3MgKi8K PiA+ICsgICAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwg bm9kZSkgewo+ID4gKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9m X2lkOwo+ID4gKyAgICAgICAgICAgICAgIGVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBl Owo+ID4gKyAgICAgICAgICAgICAgIGludCBjb21wX2lkOwo+ID4gKwo+ID4gKyAgICAgICAgICAg ICAgIG9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKPiA+ ICsgICAgICAgICAgICAgICBpZiAoIW9mX2lkKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgY29tcF90eXBlID0gKGVudW0gbXRr X2RkcF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgaWYg KGNvbXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgICAgfQo+IAo+IEknZCBt b3ZlIHRoZSBNVVRFWCBjaGVjayBhZnRlciAiaXNfYXZhaWxhYmxlKCkiLCB0byBjYXRjaCB0aGUg b2RkIGNhc2UKPiB3aGVyZSB0aGUgTVVURVggbm9kZSBpcyBkaXNhYmxlZCAoaXQgd2lsbCBzdGls bCBiZSBOVUxMLCBhbmQgZmFpbAo+IGJlbG93KS4KCk9rLgoKPiA+ICsKPiA+ICsgICAgICAgICAg ICAgICBpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVz XG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5mdWxsX25hbWUp Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0 X2lkKG5vZGUsIGNvbXBfdHlwZSk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKGNvbXBfaWQgPCAw KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfaW5mbyhkZXYsICJTa2lwcGluZyB1 bmtub3duIGNvbXBvbmVudCAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vZGUtPmZ1bGxfbmFtZSk7Cj4gCj4gZGV2X3dhcm4oKQoKT2suCgpbLi4uXQo+ID4gKyAg ICAgICAgICAgICAgIGlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfT1ZMKSB7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKPiA+ICsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIGxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9k ZSwgIm1lZGlhdGVrLGxhcmIiLCAwKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChs YXJiX25vZGUgJiYgbnVtX2xhcmJzIDwgTUFYX0NSVEMpCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByaXZhdGUtPmxhcmJfbm9kZVtudW1fbGFyYnMrK10gPSBsYXJiX25vZGU7 Cj4gCj4gSXQgZmVlbHMgbGlrZSB0aGUgbGFyYl9ub2RlcyBzaG91bGQgYmUgaGFuZGxlZCBkaXJl Y3RseSBieSB0aGUgb3ZsIGRyaXZlci4KClllcy4gQW5kIHRoZSByZG1hL3dkbWEsIHByb2JhYmx5 LiBGb3IgdGhhdCBJJ2QgbGlrZSB0byBzcGxpdCB0aGUgb3ZsCmRyaXZlciBmcm9tIHRoZSBjcnRj IGltcGxlbWVudGF0aW9uLgoKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ ICsKPiA+ICsgICAgICAgaWYgKCFwcml2YXRlLT5tdXRleF9ub2RlKSB7Cj4gPiArICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOwo+ IAo+IENsZWFudXA6Cj4gICBvZl9ub2RlX3B1dCgpIGFueSBub2RlcyBhbHJlYWR5IGluIGNvbXBf bm9kZVtdCj4gICBBbnl0aGluZyB0byBjbGVhbiBhZnRlciBjb21wb25lbnRfbWF0Y2hfYWRkKCk/ Cj4gICBvZl9ub2RlX3B1dCgpIGxhcmJfbm9kZXM/CgoKWy4uLl0KPiA+ICtzdGF0aWMgaW50IG10 a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKyAg ICAgICBjb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOwo+ID4g KyAgICAgICBwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gCj4gQ2xlYW51cDoKPiAg IG9mX25vZGVfcHV0KCkgYW55IG5vZGVzIGFscmVhZHkgaW4gY29tcF9ub2RlW10KCk9rLgoKPiAg IEFueXRoaW5nIHRvIGNsZWFuIGFmdGVyIGNvbXBvbmVudF9tYXRjaF9hZGQoKT8KCk5vLCB0aGF0 IGp1c3QgY2FsbHMgZGV2bV9rbWFsbG9jIGludGVybmFsbHkuCgo+ICAgb2Zfbm9kZV9wdXQoKSBs YXJiX25vZGVzPwoKT2suCgpbLi4uXQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZHJ2LmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi41ZTUxMjhl Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kcnYuaAo+ID4gQEAgLTAsMCArMSw2MSBAQApbLi4uXQo+ID4gK3N0cnVjdCBtdGtfZHJt X3ByaXZhdGUgewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOwo+ IAo+IE5vdCB1c2VkPwoKV2lsbCBkcm9wLCB0aGlzIGJlbG9uZ3MgaW50byBhIHNlcGFyYXRlIGZi X2hlbHBlciBwYXRjaCAobm90IHBhcnQgb2YKdGhpcyBzZXJpZXMpLgoKPiA+ICsgICAgICAgc3Ry dWN0IGRybV9kZXZpY2UgKmRybTsKPiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICog Y3JlYXRlZCBjcnRjIG9iamVjdCB3b3VsZCBiZSBjb250YWluZWQgYXQgdGhpcyBhcnJheSBhbmQK PiA+ICsgICAgICAgICogdGhpcyBhcnJheSBpcyB1c2VkIHRvIGJlIGF3YXJlIG9mIHdoaWNoIGNy dGMgZGlkIGl0IHJlcXVlc3QgdmJsYW5rLgo+IAo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGNv bW1lbnQuCgpJJ2xsIGp1c3QgZHJvcCBpdC4gVGhpcyBhcnJheSBvZiBwb2ludGVycyBpcyBuZWVk ZWQgdG8gdHJhbnNsYXRlIGZyb20KcGlwZSBudW1iZXIgdG8gc3RydWN0IG10a19kcm1fY3J0YyBp biBjcnRjX2VuYWJsZS9kaXNhYmxlX3ZibGFuay4KCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAg ICBzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwbGFuZV96cG9zX3Byb3BlcnR5Owo+IAo+IE5vdCB1c2VkLgoKV2lsbCBkcm9w LCB0aGlzIGJlbG9uZ3MgaW50byBhIHNlcGFyYXRlIHpwb3MgcHJvcGVydHkgcGF0Y2ggKG5vdCBw YXJ0IG9mCnRoaXMgc2VyaWVzKS4KCj4gPiArICAgICAgIHVuc2lnbmVkIGludCBwaXBlOwo+IAo+ IHdoYXQgcGlwZSBpcyB0aGlzPwoKVGhhdCBzaG91bGQgYmUgcmVuYW1lZCB0byBudW1fcGlwZXMu Cgo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZVtNQVhfQ1JUQ107Cj4g PiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmxhcmJfZGV2W01BWF9DUlRDXTsKPiA+ICsgICAgICAg c3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOwo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNl ICptdXRleF9kZXY7Cj4gPiArICAgICAgIHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3M7Cj4gPiAr ICAgICAgIHVuc2lnbmVkIGludCBwYXRoX2xlbltNQVhfQ1JUQ107Cj4gPiArICAgICAgIGNvbnN0 IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoW01BWF9DUlRDXTsKPiAKPiBIYXZpbmcgNSBhcnJh eXMgb2YgbGVuZ3RoIE1BWF9DUlRDIHN1Z2dlc3RzIHlvdSByZWFsbHkgd2FudCBvbmUgdG8KPiBj b21iaW5lIHRoZXNlIGZpZWxkcyBpbnRvIGEgc3RydWN0LCBhbmQgaGF2ZSBhbiBNQVhfQ1JUQyBh cnJheSBvZiB0aGUKPiBzdHJ1Y3QuCj4gSW4gZmFjdCwgdGhpcyBzdHJ1Y3Qgc291bmRzIGxpa2Ug aXQgc2hvdWxkIGJlICJtdGtfY3J0YyIsIHdoaWNoIHdyYXBzCj4gYSBkcm1fY3J0Yy4KClRoZSBs YXJiX25vZGUvZGV2IHNob3VsZCBiZSBtb3ZlZCBpbnRvIERNQSBjb21wb25lbnQgZHJpdmVycywg YnV0IGEKc3RhdGljIHBhdGggaW5kZWVkIGN1cnJlbnRseSBtYXBzIGRpcmVjdGx5IHRvIGEgY3J0 Yy4KClsuLi5dCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5kZmE5MzFiCj4gPiAtLS0gL2Rldi9u dWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCj4gPiBA QCAtMCwwICsxLDE1MSBAQApbLi4uXQo+ID4gK3N0cnVjdCBtdGtfZHJtX2ZiIHsKPiA+ICsgICAg ICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAgYmFzZTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9n ZW1fb2JqZWN0ICAgKmdlbV9vYmpbTUFYX0ZCX09CSl07Cj4gCj4gTml0OiBUaGUgZGlzcGxheSBj b250cm9sbGVyIGRyaXZlciBkb2VzIG5vdCBoYW5kbGUgbXVsdGktYnVmZmVyIGZvcm1hdHMuCj4g U28sIG1heWJlIGp1c3QgYWRkIHRoZSBhcnJheSBsYXRlciB3aGVuIGl0IGRvZXMuCj4gQXJndWFi bHksIGZvciBub3cgaXQgaXMganVzdCBhZGRpbmcgY29tcGxleGl0eSB3aXRoIG5vIGJlbmVmaXQu CgpPay4KClsuLi5dCj4gPiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2Zi X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fbW9k ZV9mYl9jbWQyICpjbWQpCj4gPiArewo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgaHN1YiwgdnN1 YiwgaTsKPiA+ICsgICAgICAgc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKPiA+ICsgICAgICAg c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1bTUFYX0ZCX09CSl07Cj4gPiArICAgICAgIGludCBl cnI7Cj4gPiArCj4gPiArICAgICAgIGhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNh bXBsaW5nKGNtZC0+cGl4ZWxfZm9ybWF0KTsKPiA+ICsgICAgICAgdnN1YiA9IGRybV9mb3JtYXRf dmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoY21kLT5waXhlbF9mb3JtYXQpOwo+IAo+IG5pdDogYmxh bmsgbGluZSBoZXJlIHdvdWxkIGhlbHAgcmVhZGFiaWxpdHkuCj4KPiA+ICsgICAgICAgZm9yIChp ID0gMDsgaSA8IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhjbWQtPnBpeGVsX2Zvcm1hdCk7IGkrKykg ewoKT2suCgpbLi4uXQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uOWNlNzMwNwo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaAo+ ID4gQEAgLTAsMCArMSwyOSBAQAo+ID4gK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1f Z2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQo+IAo+IHN0YXRpYz8KPiBC dXQgYWN0dWFsbHksIGp1c3QgZm9sZGluZyB0aGlzIGRpcmVjdGx5IGludG8gbXRrX2RybV9nZW1f Y3JlYXRlKCkKPiB3b3VsZCBtYWtlIHRoZSBjb2RlIGZsb3cgY2xlYXJlciwgc2luY2UgdGhpcyBm dW5jdGlvbiBoYXMgbm8KPiBjb3JyZXNwb25kaW5nIF9maW5pKCkuCgpZZXMuCgpbLi4uXQo+ID4g K3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBhbGxvY19rbWFwKQo+IAo+IHN0YXRpYz8KCkl0IGlz IHJlZmVyZW5jZWQgZnJvbSBtdGtfZHJtX2Rydi5jCgpbLi4uXQo+ID4gK3ZvaWQgbXRrX2RybV9n ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gPiArewo+ID4gKyAg ICAgICBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2Jq KTsKPiA+ICsKPiA+ICsgICAgICAgZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7Cj4gPiAr Cj4gPiArICAgICAgIC8qIHJlbGVhc2UgZmlsZSBwb2ludGVyIHRvIGdlbSBvYmplY3QuICovCj4g PiArICAgICAgIGRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKPiAKPiBkcm1fZ2VtX29iamVj dF9yZWxlYXNlIGNhbGxzIGRybV9nZW1fZnJlZV9tbWFwX29mZnNldCgpLgoKT2suCgo+ID4gKwo+ ID4gKyAgICAgICBkbWFfZnJlZV9hdHRycyhvYmotPmRldi0+ZGV2LCBvYmotPnNpemUsIG10a19n ZW0tPmNvb2tpZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIs ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwo+IAo+IEkgdGhpbmsgeW91IHdhbnQgdG8gZG8gdGhpcyBi ZWZvcmUgY2FsbGluZyBkcm1fZ2VtX29iamVjdF9yZWxlYXNlLgoKV2h5PwoKWy4uLl0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaCBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggMDAwMDAwMC4uZmI3OTUzZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKPiA+IEBAIC0wLDAgKzEsNTYg QEAKWy4uLl0KPiA+ICtzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqIHsKPiA+ICsgICAgICAgc3RydWN0 IGRybV9nZW1fb2JqZWN0ICAgYmFzZTsKPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICAgICAgICAg ICAgKmNvb2tpZTsKPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICAgICAgICAgICAgKmt2YWRkcjsK PiAKPiBJcyBrdmFkZHIgcmVhbGx5IF9faW9tZW0/CgpObywgYW5kIG5laXRoZXIgaXMgY29va2ll LgoKWy4uLl0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjNhODg0M2MKPiA+IC0tLSAv ZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5l LmMKPiA+IEBAIC0wLDAgKzEsMTY3IEBAClsuLi5dCj4gPiArc3RhdGljIHZvaWQgbXRrX3BsYW5l X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUp Cj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHBsYW5l LT5zdGF0ZTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOwo+ID4g KyAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0YzsKPiA+ICsgICAgICAg c3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7Cj4g PiArICAgICAgIHN0cnVjdCBkcm1fcmVjdCBkZXN0ID0gewo+ID4gKyAgICAgICAgICAgICAgIC54 MSA9IHN0YXRlLT5jcnRjX3gsCj4gPiArICAgICAgICAgICAgICAgLnkxID0gc3RhdGUtPmNydGNf eSwKPiA+ICsgICAgICAgICAgICAgICAueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNf dywKPiA+ICsgICAgICAgICAgICAgICAueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNf aCwKPiA+ICsgICAgICAgfTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAs IH07Cj4gPiArCj4gPiArICAgICAgIGlmICghY3J0YykKPiA+ICsgICAgICAgICAgICAgICByZXR1 cm47Cj4gPiArCj4gPiArICAgICAgIGNsaXAueDIgPSBzdGF0ZS0+Y3J0Yy0+c3RhdGUtPm1vZGUu aGRpc3BsYXk7Cj4gPiArICAgICAgIGNsaXAueTIgPSBzdGF0ZS0+Y3J0Yy0+c3RhdGUtPm1vZGUu dmRpc3BsYXk7Cj4gPiArICAgICAgIGRybV9yZWN0X2ludGVyc2VjdCgmZGVzdCwgJmNsaXApOwo+ ID4gKyAgICAgICBtdGtfcGxhbmUtPmRpc3Bfc2l6ZSA9IChkZXN0LnkyIC0gZGVzdC55MSkgPDwg MTYgfCAoZGVzdC54MiAtIGRlc3QueDEpOwo+ID4gKwo+ID4gKyAgICAgICBwbGFuZS0+ZmIgPSBz dGF0ZS0+ZmI7Cj4gCj4gVGhpcyBkb2Vzbid0IGxvb2sgcmlnaHQuICBUaGUgZHJtIGNvcmUgc2hv dWxkIGJlIGRvaW5nIHRoaXMgZm9yIHVzLgo+IFdoeSBkbyB5b3UgbmVlZCB0aGlzIGhlcmU/Cj4g Cj4gSSByZWFsbHkgdGhpbmsgd2Ugd2FudCB0byBiZSB1c2luZyBhICJzdHJ1Y3QgbXRrX3BsYW5l X3N0YXRlIiB3aGljaAo+IHdyYXBzIGEgZHJtX3BsYW5lX3N0YXRlIGFuZCBhY2N1bXVsYXRlcyBv dXIgb3ZsIHNwZWNpZmljIGNoYW5nZXMuCj4gRHVyaW5nIGluaXQsIHdoZW4gY3JlYXRpbmcgY3J0 Y3MgJiBwbGFuZXMsIHdlIHNob3VsZCB0ZWxsIGVhY2ggcGxhbmUKPiBpdHMgaWQsIGFuZCB3aGlj aCBvdmwgaXQgc2hvdWxkIHVzZS4KPiBUaGUgbXRrX3BsYW5lIGNvZGUgY2FuIHRoZW4gcHJvdmlk ZSBhIGZ1bmN0aW9uIGZvciB0aGUgdmJsYW5rIGlycSB0bwo+IGFwcGx5IG10a19wbGFuZSdzIHBl bmRpbmcgc3RhdGUuCgpJIGFncmVlLgoKPiA+ICsKPiA+ICsgICAgICAgZ2VtX29iaiA9IG10a19m Yl9nZXRfZ2VtX29iaihzdGF0ZS0+ZmIsIDApOwo+ID4gKyAgICAgICBtdGtfcGxhbmUtPmZsaXBf b2JqID0gdG9fbXRrX2dlbV9vYmooZ2VtX29iaik7Cj4gCj4gV2UgZG8gbm90IG5lZWQgdG8gc3Rv cmUgImZsaXBfb2JqIi4KPiBXZSBvbmx5IHVzZSBpdCB0d2ljZSwgKzMgYW5kICs1IGxpbmVzIGRv d24gZnJvbSBoZXJlLgo+IEFsc28sIHRoaXMgZG9lc24ndCBsb29rIHNhZmUuICBXaGF0IGlmIHN0 YXRlLT5mYiBpcyBOVUxMPwoKU2luY2Ugd2UgaW1wbGVtZW50IGF0b21pY19kaXNhYmxlLCBhdG9t aWNfdXBkYXRlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKd2l0aCBzdGF0ZS0+ZmIgPT0gTlVMTC4K Cj4gSXQgd29ya3MgYmVjYXVzZSB0b19tdGtfZ2VtX29iaihOVUxMKSA9PSBOVUxMLCBidXQgaXQg cmVsaWVzIG9uIGFuCj4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0gZ2VtX29iai5i YXNlIGlzIGF0IG9mZnNldCAwLgo+IAo+ID4gKyAgICAgICBtdGtfcGxhbmUtPmNydGMgPSBjcnRj Owo+IAo+IFRoaXMgaXNuJ3QgdXNlZCwgZWl0aGVyLgoKV2lsbCBkcm9wLgoKWy4uLl0KPiA+ICtz dGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kcm1f cGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7Cj4gPiArICAgICAgIHN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IG9sZF9zdGF0ZS0+Y3J0YzsKPiA+ICsKPiA+ICsgICAgICAgaWYg KCFjcnRjKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICsKPiA+ICsgICAgICAgbXRr X2RybV9jcnRjX3BsYW5lX2NvbmZpZyhjcnRjLCBtdGtfcGxhbmUtPmlkeCwgZmFsc2UsIDApOwo+ ID4gKwo+ID4gKyAgICAgICBtdGtfZHJtX2NydGNfY29tbWl0KGNydGMpOwo+IAo+IFdoeSB0aGlz IGhlcmU/ICBXb24ndCB0aGlzIGhhcHBlbiBkdXJpbmcgbXRrX2RybV9jcnRjX2F0b21pY19mbHVz aD8KCkJlY2F1c2UgdGhhdCBqdXN0IG1hcmtzIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UgaW4gcGVu ZGluZ19vdmxfY29uZmlnLAp3aGljaCB5b3UgYWxyZWFkeSBzdWdnZXN0ZWQgcmlnaHRmdWxseSBi ZWxvbmdzIGluIG10a19wbGFuZV9zdGF0ZS4gSSdsbApmaXggdGhhdC4KClsuLi5dCj4gPiAraW50 IG10a19wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3Bs YW5lICptdGtfcGxhbmUsCj4gPiArICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3Nz aWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAo+ID4gKyAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCB6cG9zLCB1bnNpZ25lZCBpbnQgbWF4X3BsYW5lKQo+IAo+IG1heF9w bGFuZSBpcyBub3QgdXNlZC4KPiAKPiBPay4uLiBlbm91Z2ggZm9yIHRvZGF5IDotKS4KClRoaXMg aXMgYWxzbyBwYXJ0IG9mIHRoZSB6cG9zIHByb3BlcnR5IHBhdGNoLCBJJ2xsIGRyb3AgaXQuCgpy ZWdhcmRzClBoaWxpcHAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==