From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 2/2] drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+ Date: Tue, 24 Apr 2018 14:57:40 +0200 Message-ID: <20180424125740.GB31310@phenom.ffwll.local> References: <20180419192035.19898-1-eric@anholt.net> <20180419192035.19898-3-eric@anholt.net> <20180420085732.GQ31310@phenom.ffwll.local> <8736zpbg1z.fsf@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <8736zpbg1z.fsf@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: Mark Rutland , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring List-Id: devicetree@vger.kernel.org T24gRnJpLCBBcHIgMjAsIDIwMTggYXQgMDQ6NDI6NDhQTSAtMDcwMCwgRXJpYyBBbmhvbHQgd3Jv dGU6Cj4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cml0ZXM6Cj4gCj4gPiBPbiBU aHUsIEFwciAxOSwgMjAxOCBhdCAxMjoyMDozNVBNIC0wNzAwLCBFcmljIEFuaG9sdCB3cm90ZToK PiA+PiBUaGlzIGRyaXZlciB3aWxsIGJlIHVzZWQgdG8gc3VwcG9ydCBNZXNhIG9uIHRoZSBCcm9h ZGNvbSA3MjY4IGFuZCA3Mjc4Cj4gPj4gcGxhdGZvcm1zLgo+ID4+IAo+ID4+IFYzRCAzLjMgaW50 cm9kdWNlcyBhbiBNTVUsIHdoaWNoIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIENNQSBvciB2YzQn cwo+ID4+IGNvbXBsaWNhdGVkIENML3NoYWRlciB2YWxpZGF0aW9uIHNjaGVtZS4gIFRoaXMgbWFz c2l2ZWx5IGNoYW5nZXMgdGhlCj4gPj4gR0VNIGJlaGF2aW9yLCBzbyBJJ3ZlIGZvcmtlZCBvZmYg dG8gYSBuZXcgZHJpdmVyLgo+ID4+IAo+ID4+IFNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+Cj4gPgo+ID4gUmVhZCB0aHJvdWdoIHRoZSBlbnRpcmUgdGhpbmcsIGln bm9yZWQgdGhlIGh3IGRldGFpbHMsIGJ1dCBkcm9wcGVkIGEgZmV3Cj4gPiBjb21tZW50cyBhbGwg b3Zlci4gV2l0aCB0aG9zZSBhZGRyZXNzZWQgb25lIHdheSBvciBhbm90aGVyIHRoaXMgaGFzIG15 Cj4gPgo+ID4gQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+ Cj4gPgo+ID4gQ2FuIEkgY2FsbCBpbiBhIHJldHVybiBmYXZvdXIgZm9yCj4gPiBodHRwczovL3Bh dGNod29yay5mcmVlZGVza3RvcC5vcmcvc2VyaWVzLzQxMjE5LyA/Cj4gCj4gRG9uZS4KClRoYW5r cyEKCj4gPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0IGIvRG9j dW1lbnRhdGlvbi9ncHUvZHJpdmVycy5yc3QKPiA+PiBpbmRleCBkM2FiNmFiYWU4MzguLmY5ODI1 NThmYzI1ZCAxMDA2NDQKPiA+PiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdAo+ ID4+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0Cj4gPj4gQEAgLTEwLDYgKzEw LDcgQEAgR1BVIERyaXZlciBEb2N1bWVudGF0aW9uCj4gPj4gICAgIHRlZ3JhCj4gPj4gICAgIHRp bnlkcm0KPiA+PiAgICAgdHZlMjAwCj4gPj4gKyAgIHYzZAo+ID4+ICAgICB2YzQKPiA+PiAgICAg YnJpZGdlL2R3LWhkbWkKPiA+PiAgICAgeGVuLWZyb250Cj4gPj4gZGlmZiAtLWdpdCBhL01BSU5U QUlORVJTIGIvTUFJTlRBSU5FUlMKPiA+PiBpbmRleCBiY2EzYzMyZmIxNDEuLjczMTRkNjY4MzNm ZCAxMDA2NDQKPiA+PiAtLS0gYS9NQUlOVEFJTkVSUwo+ID4+ICsrKyBiL01BSU5UQUlORVJTCj4g Pj4gQEAgLTQ3OTUsNiArNDc5NSwxNSBAQCBTOglNYWludGFpbmVkCj4gPj4gIEY6CWRyaXZlcnMv Z3B1L2RybS9vbWFwZHJtLwo+ID4+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGlu Z3MvZGlzcGxheS90aS8KPiA+PiAgCj4gPj4gK0RSTSBEUklWRVJTIEZPUiBWM0QKPiA+PiArTToJ RXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KPiA+PiArVDoJZ2l0IGdpdDovL2dpdGh1Yi5j b20vYW5ob2x0L2xpbnV4Cj4gPgo+ID4gVGhpcyBvbmUgYWxzbyBvZmZpY2lhbD8gSWYgaXQncyBq dXN0IGZvciBub3cgSSdkIGRyb3AgaXQgLi4uCj4gCj4gU3VyZS4KPiAKPiA+PiArLyogUGlucyB0 aGUgc2htZW0gcGFnZXMsIGZpbGxzIGluIHRoZSAucGFnZXMgYW5kIC5zZ3QgZmllbGRzIG9mIHRo ZSBCTywgYW5kIG1hcHMKPiA+PiArICogaXQgZm9yIERNQS4KPiA+PiArICovCj4gPj4gK3N0YXRp YyBpbnQKPiA+PiArdjNkX2JvX2dldF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKPiA+PiArewo+ ID4+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmYm8tPmJhc2U7Cj4gPj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Cj4gPj4gKwlpbnQgbnBhZ2VzID0gb2JqLT5z aXplID4+IFBBR0VfU0hJRlQ7Cj4gPj4gKwlpbnQgcmV0ID0gMDsKPiA+PiArCj4gPj4gKwltdXRl eF9sb2NrKCZiby0+bG9jayk7Cj4gPj4gKwlpZiAoYm8tPnBhZ2VzX3JlZmNvdW50KysgIT0gMCkK PiA+PiArCQlnb3RvIHVubG9jazsKPiA+PiArCj4gPj4gKwlpZiAoIW9iai0+aW1wb3J0X2F0dGFj aCkgewo+ID4+ICsJCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKG9iaik7Cj4gPj4gKwkJ aWYgKElTX0VSUihiby0+cGFnZXMpKSB7Cj4gPj4gKwkJCXJldCA9IFBUUl9FUlIoYm8tPnBhZ2Vz KTsKPiA+PiArCQkJZ290byB1bmxvY2s7Cj4gPj4gKwkJfQo+ID4+ICsKPiA+PiArCQliby0+c2d0 ID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBhZ2VzKTsKPiA+PiArCQlpZiAo SVNfRVJSKGJvLT5zZ3QpKSB7Cj4gPj4gKwkJCXJldCA9IFBUUl9FUlIoYm8tPnNndCk7Cj4gPj4g KwkJCWdvdG8gcHV0X3BhZ2VzOwo+ID4+ICsJCX0KPiA+PiArCX0gZWxzZSB7Cj4gPj4gKwkJYm8t PnBhZ2VzID0ga2NhbGxvYyhucGFnZXMsIHNpemVvZigqYm8tPnBhZ2VzKSwgR0ZQX0tFUk5FTCk7 Cj4gPj4gKwkJaWYgKCFiby0+cGFnZXMpCj4gPj4gKwkJCWdvdG8gcHV0X3BhZ2VzOwo+ID4+ICsK PiA+PiArCQlkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyhiby0+c2d0LCBiby0+cGFn ZXMsCj4gPj4gKwkJCQkJCSBOVUxMLCBucGFnZXMpOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCS8q IE1hcCB0aGUgcGFnZXMgZm9yIHVzZSBieSB0aGUgR1BVLiAqLwo+ID4+ICsJZG1hX21hcF9zZyhk ZXYtPmRldiwgYm8tPnNndC0+c2dsLAo+ID4+ICsJCSAgIGJvLT5zZ3QtPm5lbnRzLCBETUFfQklE SVJFQ1RJT05BTCk7Cj4gPgo+ID4gRm9yIGRtYS1idWYgeW91IGFscmVhZHkgZ2V0IGEgbWFwcGVk IHNndCwgYW5kIHRoZSBpZGVhIGF0IGxlYXN0IGlzIHRvIG5vdAo+ID4gbm9vZGxlIGFyb3VuZCBp biBpbnRlcm5hbHMgbGlrZSBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyBkb2VzIC4u Lgo+ID4gVGhhdCB3YXMganVzdCBhIGhhY2sgRGF2ZSBkaWQgdG8gYXZvaWQgcmV3cml0aW5nIGFs bCBvZiB0dG0sIHdoaWNoIGltbwo+ID4gc2hvdWxkbid0IGJlIGNvcGllZCBhbGwgb3ZlciB0aGUg cGxhY2UgKGJ1dCBpdCBoYXBwZW5zKS4KPiA+Cj4gPiBTaW5jZSB5b3UgaW1tZWRpYXRlbHkgY29u dmVydCB0aGUgcGFnZSBsaXN0IGJhY2sgaW50byBhIG1hcHBlZCBzZyB0YWJsZQo+ID4gaXQncyBh IGJpdCBzaWxseS4KPiA+Cj4gPiBJIGd1ZXNzIGxvbmdlci10ZXJtIHdlIGNvdWxkIHN3aXRjaCB0 aGUgZ2VtIGhlbHBlcnMgdG8ganVzdCB1c2Ugc2cgdGFibGVzCj4gPiBkaXJlY3RseSwgaW5zdGVh ZCBvZiBnb2luZyB0aHJvdWdoIHBhZ2VzIGFycmF5cy4gQnV0IGNvcmUgbW0gZm9sa3MganVzdAo+ ID4gZ290IG5hc3R5IG9uIHVzIGRvaW5nIHRoYXQsIHNvIEknbSBub3Qgc3VyZSB3aGljaCBkaXJl Y3Rpb24gd2Ugc2hvdWxkIGdvCj4gPiBoZXJlIGxvbmdlci10ZXJtLgo+IAo+IEkgbW92ZWQgdGhl IG1hcC91bm1hcCB0byB0aGUgIWltcG9ydCBjYXNlLiAgV2Ugc3RpbGwgbmVlZCB0aGUgcGFnZXMK PiBhcnJheSBmb3IgdjNkX2dlbV9mYXVsdCgpLiAgSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBm b3IgdGhhdCB0aGF0Cj4gaXNuJ3QgYSBsaW5lYXIgd2FsayBvZiB0aGUgc2cgYXQgZmF1bHQgdGlt ZSwgSSdkIGJlIHVwIGZvciB0aGF0LgoKRm9yIHRoZSBpbXBvcnQgbW1hcCBjYXNlLCBkbyB5b3Ug cmVhbGx5IG5lZWQgaXQ/IEZ1bGwgZ2VuZXJpYyBkbWEtYnVmIG1tYXAKcmVxdWlyZXMgdGhhdCB5 b3UgY2FsbCB0aGUgYmVnaW4vZW5kX2NwdV9hY2Nlc3MgY2FsbHMgZm9yIGZsdXNoaW5nLCBzbwp0 aGlzIG1pZ2h0IG5vdCB3b3JrLiBJbiBwcmFjdGljZSB5b3UnbGwgcHJvYmFibHkgb25seSBldmVy IGRlYWwgd2l0aCB3Yy4KCk90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBwdW5jaCB0aHJvdWdoIHRv IHRoZSBkbWFfYnVmLT5tbWFwCmltcGxlbWVudGF0aW9uLiBCaXQgb2Ygdm1hIHNodWZmbGluZyBz aG91bGQgYmUgYWJsZSB0byB0YWtlIGNhcmUgb2YgdGhhdCwKc2VlIGUuZy4gZXh5bm9zX2RybV9n ZW1fbW1hcC4gZXRuYXZpdiBoYXMgc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBnb2luZwp0aHJvdWdo IGl0cyBvd24gdnRhYmxlLgoKTG9va2luZyB0aHJvdWdoIGFsbCB0aGlzIChhbHNvIHRoZSBpbnZl cnNlIG9mIGZvcndhcmRpbmcgYSBkbWFfYnVmIG1tYXAgdG8KdGhlIGdlbSBtbWFwIGNvZGUpIGxv b2tzIGFsbCB2ZXJ5IG11Y2ggcmlwZSBmb3IgcGxlbnR5IG9mIGhlbHBlcnMuIEJ1dCBJJ20Kbm90 IGVudGlyZWx5IHN1cmUgb24gd2hhdCB3ZSBhY3R1YWxseSB3YW50IGhlcmUsIGFuZCBob3cgbXVj aCBkcml2ZXJzIHdhbnQKdG8gYmxpbmRseSBmb3J3YXJkIGV2ZXJ5dGhpbmcgKHdpdGhvdXQgYWxz byBmb3J3YXJkaW5nIHRoZSBiZWdpbi9lbmQKc3R1ZmYpLgoKPiA+PiAraW50IHYzZF9nZW1fZmF1 bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hID0gdm1mLT52bWE7Cj4gPj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9 IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwo+ID4+ICsJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2Rf Ym8ob2JqKTsKPiA+PiArCXVuc2lnbmVkIGxvbmcgcGZuOwo+ID4+ICsJcGdvZmZfdCBwZ29mZjsK PiA+PiArCWludCByZXQ7Cj4gPj4gKwo+ID4+ICsJLyogV2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYg c2luY2UgdGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0OiAqLwo+ID4+ICsJcGdvZmYgPSAodm1mLT5h ZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKPiA+PiArCXBmbiA9IHBhZ2Vf dG9fcGZuKGJvLT5wYWdlc1twZ29mZl0pOwo+ID4KPiA+IEZyZWFrZWQgb3V0IGZvciBhIGJpdCwg dGhlbiBub3RpY2VkIHlvdSdyZSBwaW5uaW5nIGV2ZXJ5dGhpbmcuIFRoYXQgbWFrZXMKPiA+IHRo ZSBiby0+cGFnZXNfcmVmY291bnQgYSBiaXQgY29uZnVzaW5nIHNpbmNlIHRvdGFsbHkgbm90IG5l ZWRlZC4KPiA+Cj4gPiBJIGd1ZXNzIGlmIHlvdSBkbyBoYXZlIGxvbmdlci10ZXJtIHBsYW5zIHRv IHJvbGwgb3V0IGEgc2hyaW5rZXIgSSdkIHB1dCBhdAo+ID4gbGVhc3QgYSBGSVhNRSBoZXJlLgo+ IAo+IFllcCwgbG9uZy10ZXJtIHNocmlua2VyIHBsYW5zLiAgQWRkZWQgYSBub3RlIHRvIHRoZSBr ZXJuZWxkb2MgYWJvdXQgd2h5Cj4gd2UgZG9uJ3Qgc2hyaW5rIHlldC4KPiAKPiA+PiAraW50IHYz ZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ PiArewo+ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmls cCwgdm1hKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJldDsKPiA+PiArCj4gPj4g Kwl2M2Rfc2V0X21tYXBfdm1hX2ZsYWdzKHZtYSk7Cj4gPgo+ID4gSWYgaXQnZCBhY3R1YWxseSB1 bmRlcnN0YW5kIHdoYXQgdGhlc2Ugdm1hIGZsYWcgZnJvYmJlcmllcyBpbiBtb3N0IGRyaXZlcnMK PiA+IGRvIEkgbWlnaHQgY29tZSB1cCB3aXRoIGFuIGlkZWEgaG93IHdlIGNhbiBhdm9pZCB0aGUg Y29weXBhc3RlLiBPaCB3ZWxsLgo+ID4gTWF5YmUgYSBkcm1fZ2VtX21tYXBfd2M/Cj4gCj4gZHJt X2dlbV9tbWFwIHNlZW1zIHRvIGFscmVhZHkgYmUgd2MsIGp1c3Qgd2l0aCBkaWZmZXJlbnQgdm1h IGZsYWdzLiAgSWYKPiB5b3UgZXZlciBmaWd1cmUgb3V0IHRoZSBmbGFnIGZyb2JiaW5nLCBwbGVh c2UgbGV0IG1lIGtub3cuIDooCj4gCj4gPj4gKwo+ID4+ICsJcmV0dXJuIHJldDsKPiA+PiArfQo+ ID4+ICsKPiA+PiAraW50IHYzZF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+PiArewo+ID4+ICsJaW50IHJldDsKPiA+ PiArCj4gPj4gKwlyZXQgPSBkcm1fZ2VtX21tYXBfb2JqKG9iaiwgb2JqLT5zaXplLCB2bWEpOwo+ ID4+ICsJaWYgKHJldCA8IDApCj4gPj4gKwkJcmV0dXJuIHJldDsKPiA+PiArCj4gPj4gKwl2M2Rf c2V0X21tYXBfdm1hX2ZsYWdzKHZtYSk7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIDA7Cj4gPj4gK30K PiA+Cj4gPiBBIHByaW1lIGhlbHBlciB3aGljaCBjaGVja3Mgb3V0IHRoZSBnZW0gbW1hcCBvZmZz ZXQgYW5kIHRoZW4gcmVkaXJlY3RzCj4gPiB3aXRob3V0IGhhdmluZyB0byBkdXBlIGNvZGUgd291 bGQgYmUgbmljZSBJIHRoaW5rLiBHaXZlbiB0aGF0IGV2ZXJ5b25lCj4gPiBrbm93IHNlZW1zIHRv IHdhbnQgdG8gaW1wbGVtZW50IHByaW1lIG1tYXAuCj4gCj4gQWdyZWVkLCBvdGhlciB0aGFuIHRo ZSAid3RmIGRvIHRoZSB2bWEgZmxhZ3MgZG8iIHBhcnQuCj4gCj4gPj4gKwo+ID4+ICt2b2lkICp2 M2RfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiA+PiArewo+ID4+ICsJ V0FSTl9PTkNFKDEsICJub3QgaW1wbGVtZW50ZWQiKTsKPiA+PiArCXJldHVybiBOVUxMOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICt2b2lkIHYzZF9wcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmosIHZvaWQgKnZhZGRyKQo+ID4+ICt7Cj4gPj4gKwkvKiBOb3RoaW5nIHRvIGRvICov Cj4gPj4gK30KPiA+Cj4gPiBJIHRoaW5rIHdlIHNob3VsZCBwYXRjaCBkcm1fcHJpbWUuYyB0byBt YWtlIHRoZXNlIG9wdGlvbmFsLgo+IAo+IERvbmUuCj4gCj4gPj4gKwo+ID4+ICtzdHJ1Y3Qgc2df dGFibGUgKgo+ID4+ICt2M2RfcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmop Owo+ID4+ICsJaW50IG5wYWdlcyA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwo+ID4+ICsKPiA+ PiArCXJldHVybiBkcm1fcHJpbWVfcGFnZXNfdG9fc2coYm8tPnBhZ2VzLCBucGFnZXMpOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgo+ID4+ICt2M2RfcHJpbWVf aW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPj4gKwkJCSAgc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ID4+ICsJCQkgIHN0cnVjdCBzZ190YWJsZSAq c2d0KQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiA+PiArCXN0 cnVjdCB2M2RfYm8gKmJvOwo+ID4+ICsKPiA+PiArCWJvID0gdjNkX2JvX2NyZWF0ZV9zdHJ1Y3Qo ZGV2LCBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7Cj4gPj4gKwlpZiAoSVNfRVJSKGJvKSkKPiA+PiAr CQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKGJvKSk7Cj4gPj4gKwlvYmogPSAmYm8tPmJhc2U7Cj4g Pj4gKwo+ID4+ICsJYm8tPnJlc3YgPSBhdHRhY2gtPmRtYWJ1Zi0+cmVzdjsKPiA+PiArCj4gPj4g Kwliby0+c2d0ID0gc2d0Owo+ID4+ICsJdjNkX2JvX2dldF9wYWdlcyhibyk7Cj4gPj4gKwo+ID4+ ICsJdjNkX21tdV9pbnNlcnRfcHRlcyhibyk7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIG9iajsKPiA+ PiArfQo+ID4KPiA+IEFnYWluLCBtYXliZSBpdCdzIHdvcnRoIGl0IHRvIHB1dCB0aGUgc2d0IHBv aW50ZXIgaW50byB0aGUgY29yZQo+ID4gZHJtX2dlbV9vYmplY3Qgc3RydWN0IGFuZCBzaGFyZSBh IHBpbGUgbW9yZSBvZiB0aGlzIGNvZGUuIER1bm5vLgo+IAo+IEknbSBub3Qgc3VyZSB3aGF0IHdl IHdvdWxkIHJlYWxseSBiZSBhYmxlIHRvIHNoYXJlIGZyb20gdGhhdC4KClNvIHRoZSBzdXBlciBs b2Z0eSBsb25nIHRlcm0gZ29hbCBJIGhhdmUgaXMgdGhhdCB3ZSBzdGFuZGFyZGl6ZSBhbGwgdGhl CmRyaXZlcnMgb24gMSB3YXkgdG8gZ28gdGhyb3VnaCB0aGUgYmFja2luZyBzdG9yYWdlIG1lbW9y eS4gQWthIHNndCAoc2luY2UKeW91IGNhbiBpdGVyYXRlIHBhZ2VzIHdpdGggdGhvc2UgdG9vKS4g SSB0aGluayB0aGF0IHdvdWxkIGFsbG93IHVzIHRvCnN0cmVhbWxpbmUgYSBidW5jaCBvZiB0aGUg Y29kZSBoZXJlLCBhbmQgYXZvaWQgc29tZSBvZiB0aGUgaW1wZW5kZW5jZQptaXNtYXRjaCBiZXR3 ZWVuIGl0ZXJhdGluZyBvdmVyIHBhZ2VzIGFuZCBpdGVyYXRpbmcgb3ZlciBzZyBhbmQgd2hhdGV2 ZXIKZWxzZSB0aGVyZSBpcy4gU28gdGhlIGJlbmVmaXQgd291bGQgYmUgbW9yZSBjb25zaXN0ZW5j eSBhbW9uZyBkcml2ZXJzLCBub3QKbmVjZXNzYXJpbHkgc28gbXVjaCBzaGFyZWQgY29kZS4KCkV4 Y2VwdCBDaHJpc3RvcGggSGVsbHdpZyBhcyBkbWEtbWFwcGluZyBtYWludGFpbmVyIGp1c3Qgc2Fp ZCBpbiBhbm90aGVyCnRocmVhZCAoYWJvdXQgdGhlIHBlZXIycGVlciBzdHVmZiBDaHJpc3RpYW4g S8O2bmlnIGlzIHdvcmtpbmcgb24pIHRoYXQgaGUKdG90YWxseSBkb2Vzbid0IGxpa2UgdXMgYWlt aW5nIHRvIHVzZSBzZ3QgYXMgdGhlIGJlLWFsbC1lbmQtYWxsIG9mIGJhY2tpbmcKc3RvcmFnZSBz dHJ1Y3R1cmVzIGZvciBncHVzLgoKSSBndWVzcyBJJ2xsIGp1c3QgdGFibGUgdGhpcyBpZGVhIHVu dGlsIHNvbWVvbmUgZWxzZSB2b2x1bnRlZXJzIDotKQoKPiA+PiArCj4gPj4gK2ludCB2M2RfY3Jl YXRlX2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gPj4gKwkJ CXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgZHJtX3Yz ZF9jcmVhdGVfYm8gKmFyZ3MgPSBkYXRhOwo+ID4+ICsJc3RydWN0IHYzZF9ibyAqYm8gPSBOVUxM Owo+ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwlibyA9IHYzZF9ib19jcmVhdGUoZGV2LCBm aWxlX3ByaXYsIFBBR0VfQUxJR04oYXJncy0+c2l6ZSkpOwo+ID4+ICsJaWYgKElTX0VSUihibykp Cj4gPj4gKwkJcmV0dXJuIFBUUl9FUlIoYm8pOwo+ID4+ICsKPiA+PiArCWFyZ3MtPm9mZnNldCA9 IGJvLT5ub2RlLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7Cj4gPj4gKwo+ID4+ICsJcmV0ID0gZHJtX2dl bV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgJmJvLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKPiA+ PiArCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZiby0+YmFzZSk7Cj4gPj4g Kwo+ID4+ICsJcmV0dXJuIHJldDsKPiA+PiArfQo+ID4+ICsKPiA+PiAraW50IHYzZF9tbWFwX2Jv X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gPj4gKwkJICAgICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBkcm1fdjNk X21tYXBfYm8gKmFyZ3MgPSBkYXRhOwo+ID4+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1f b2JqOwo+ID4+ICsKPiA+PiArCWdlbV9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZV9w cml2LCBhcmdzLT5oYW5kbGUpOwo+ID4+ICsJaWYgKCFnZW1fb2JqKSB7Cj4gPj4gKwkJRFJNX0RF QlVHKCJGYWlsZWQgdG8gbG9vayB1cCBHRU0gQk8gJWRcbiIsIGFyZ3MtPmhhbmRsZSk7Cj4gPj4g KwkJcmV0dXJuIC1FTk9FTlQ7Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJLyogVGhlIG1tYXAgb2Zm c2V0IHdhcyBzZXQgdXAgYXQgQk8gYWxsb2NhdGlvbiB0aW1lLiAqLwo+ID4KPiA+IHZtYSBub2Rl IG1hbmFnZXIgaGFzIGl0J3Mgb3duIGxvb2tpbmcsIHlvdSBjYW4ganVzdCBjYWxsIHRoaXMgd2hl bmV2ZXIgeW91Cj4gPiB3YW50LiBBbmQgdGhlIG9mZnNldCBpcyBfbm90XyBzZXQgdXAgYXQgY3Jl YXRlIHRpbWUgOi0pCj4gCj4gRG9uZS4KPiAKPiA+PiArCWFyZ3MtPm9mZnNldCA9IGRybV92bWFf bm9kZV9vZmZzZXRfYWRkcigmZ2VtX29iai0+dm1hX25vZGUpOwo+ID4+ICsKPiA+PiArCWRybV9n ZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbV9vYmopOwo+ID4+ICsJcmV0dXJuIDA7 Cj4gPj4gK30KPiA+PiArCj4gPj4gK2ludCB2M2RfZ2V0X2JvX29mZnNldF9pb2N0bChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4+ICsJCQkgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBkcm1fdjNkX2dldF9ib19vZmZzZXQg KmFyZ3MgPSBkYXRhOwo+ID4+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOwo+ID4+ ICsJc3RydWN0IHYzZF9ibyAqYm87Cj4gPj4gKwo+ID4+ICsJZ2VtX29iaiA9IGRybV9nZW1fb2Jq ZWN0X2xvb2t1cChmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7Cj4gPj4gKwlpZiAoIWdlbV9vYmop IHsKPiA+PiArCQlEUk1fREVCVUcoIkZhaWxlZCB0byBsb29rIHVwIEdFTSBCTyAlZFxuIiwgYXJn cy0+aGFuZGxlKTsKPiA+PiArCQlyZXR1cm4gLUVOT0VOVDsKPiA+PiArCX0KPiA+PiArCWJvID0g dG9fdjNkX2JvKGdlbV9vYmopOwo+ID4+ICsKPiA+PiArCWFyZ3MtPm9mZnNldCA9IGJvLT5ub2Rl LnN0YXJ0IDw8IFBBR0VfU0hJRlQ7Cj4gPj4gKwo+ID4+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZl cmVuY2VfdW5sb2NrZWQoZ2VtX29iaik7Cj4gPj4gKwlyZXR1cm4gMDsKPiA+PiArfQo+ID4KPiA+ IEhtLCBob3cgZG9lcyB5b3VyIGh3IHdvcms/IERvIHlvdSBoYXZlIG9uZSBhZGRyZXNzIHNwYWNl IGZvciBldmVyeW9uZSwgYnV0Cj4gPiBjYW4gYmxvY2sgb3V0IGRpZmZlcmVudCByYW5nZXMgdXNp bmcgdGhpcyBHTVAgdGhpbmc/IEhvdyBiaWcgaXMgdGhlCj4gPiBhZGRyZXNzIHNwYWNlIChpLmUu IGRvIHdlIGV4cGVjdCB0byBydW4gb3V0IG9mIGl0KT8KPiA+Cj4gPiBZb3Ugc2VlbSB0byBvbmx5 IGhhdmUgYSAzMiBiaXQgYWRkcmVzcyBzcGFjZSwgZG9lc24ndCBzZWVtIGxpa2UgZ2l2ZW4gdGhh dAo+ID4gdjNkIGxvb2tzIGxpa2UgaXQnbGwgYmUgdGhlIGJyb2FkY29tIGdwdSBkcml2ZXIgZm9y IHBsZW50eSBvZiBmdXR1cmUgaHcuCj4gCj4gVGhlcmUgYXJlIHNvbWUgbm90ZXMgYWJvdXQgaXQg aW4gdjNkX21tdS5jJ3MgZG9jcy4gIFRoZSBNTVUgZ2l2ZXMgeW91IGEKPiA0R0IgYWRkcmVzcyBz cGFjZSB1c2luZyBhIHNpbmdsZS1sZXZlbCBwYWdlIHRhYmxlLCBhbmQgQ01BIGJlaW5nIGEKPiBk dW1wc3RlciBmaXJlIG1lYW5zIHlvdSByZWFsbHkgZG9uJ3Qgd2FudCB0byBhbGxvY2F0ZSB0aG9z ZSA0TUIgcGFnZQo+IHRhYmxlcyBpZiB5b3UgY2FuIGF2b2lkIGl0LCBiZWNhdXNlIGl0IHdpbGwg b2Z0ZW4gZmFpbC4gIFRodXMsIHdlIHB1dAo+IGV2ZXJ5b25lIGluIHRoZSBzYW1lIHRhYmxlLgo+ IAo+IEdNUCBsZXRzIHlvdSByZWFkL3dyaXRlIG1hc2sgYWNjZXNzIG9mIHRob3NlIHZhZGRycyBh dCAxMjhrYiBncmFudWxhcml0eQo+IHVzaW5nIGFuIDhrYiB0YWJsZS4KPiAKPiBUaGUgSFcgZGVz aWduZXJzIHdlcmUgb2YgdGhlIG9waW5pb24gdGhhdCBydW5uaW5nIG91dCBvZiA0Z2IgYWRkcmVz cwo+IHNwYWNlIGFjcm9zcyBhbGwgY2xpZW50cyB3YXMgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVt IGZvciBxdWl0ZSBhIHdoaWxlLgo+IEtlZXAgaW4gbWluZCwgdGhlc2UgYXJlIGJvYXJkcyB3aXRo IDJHQiBvZiBtZW1vcnkgYW5kIG5vIHN3YXAgY3VycmVudGx5Lgo+IE9uY2Ugd2UgZmluZCBzb21l IHVzZWNhc2UgcnVubmluZyBvdXQgb2YgdGhlaXIgNGdiIGFkZHJlc3Mgc3BhY2UsIHdlCj4gY291 bGQgcG90ZW50aWFsbHkgbW92ZSB0aGVtIHRvIHRoZWlyIG93biBhZGRyZXNzIHNwYWNlIGFuZCB0 aGVpciBvd24KPiBwYWdlIHRhYmxlLgoKQWgsIEkgZGlkbid0IHJlYWxpemUgdGhhdCB3ZSBoYXZl IHRoZSBvcHRpb24gdG8gYWxsb2NhdGUgbW9yZSA0RyBhZGRyZXNzCnNwYWNlcy4KCkFuZCBhZ3Jl ZWQgdGhhdCA0RyBmb3IgZ3B1IGFkZHJlc3Mgc3BhY2Ugc2hvdWxkIGJlIHBsZW50eS4gT24gaW50 ZWwgZ2VuNwppcyB0aGUgZmlyc3Qgb25lIHdpdGggd29ya2luZyBwcGd0dCwgYW5kIG9ubHkgMkdC IG9mIHRoYXQuIE9ubHkgYmR3L2dlbjgrCmluY3JlYXNlZCBpdCB0byA0OGIgKHdoaWNoIHJvdWdo bHkgbWF0Y2hlcyB0aGUgdmlydHVhbCBzcGFjZSB5b3UgaGF2ZSBvbgp0aGUgY3B1IHRvbykuIFN0 aWxsLCBhbnYgaGFwcGlseSBzb2Z0LXBpbnMgZXZlcnl0aGluZyAoc28gbm8gdmlydHVhbApldmlj dGlvbnMsIG9ubHkgcGh5c2ljYWwgYm8gdHJhY2tpbmcgbGlrZSB5b3UgY2FuIGRvIGhlcmUgd2l0 aCB0aGlzIGFwaSkuCgpJZiAyR0IgaXMgZmluZSBvbiBpbnRlbCBoc3cgd2l0aCB2aywgSSB0aGlu ayB5b3VyIDRHQiBhcmUgdG90YWxseSBmaW5lIGZvcgp2YzUrLiBJIHdhcyBvbmx5IHJlYWxseSB3 b3JyaWVkIGFib3V0IGhhdmluZyBvbmx5IDRHIGZvciBldmVyeW9uZQp0b2dldGhlciwgYnV0IHRo YXQncyBub3QgdGhlIGNhc2UuCgo+ID4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9k ZXNjIHYzZF9kcm1faW9jdGxzW10gPSB7Cj4gPj4gKwlEUk1fSU9DVExfREVGX0RSVihWM0RfU1VC TUlUX0NMLCB2M2Rfc3VibWl0X2NsX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiA+PiArCURS TV9JT0NUTF9ERUZfRFJWKFYzRF9XQUlUX0JPLCB2M2Rfd2FpdF9ib19pb2N0bCwgRFJNX1JFTkRF Ul9BTExPVyksCj4gPj4gKwlEUk1fSU9DVExfREVGX0RSVihWM0RfQ1JFQVRFX0JPLCB2M2RfY3Jl YXRlX2JvX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiA+PiArCURSTV9JT0NUTF9ERUZfRFJW KFYzRF9NTUFQX0JPLCB2M2RfbW1hcF9ib19pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gPj4g KwlEUk1fSU9DVExfREVGX0RSVihWM0RfR0VUX1BBUkFNLCB2M2RfZ2V0X3BhcmFtX2lvY3RsLCBE Uk1fUkVOREVSX0FMTE9XKSwKPiA+PiArCURSTV9JT0NUTF9ERUZfRFJWKFYzRF9HRVRfQk9fT0ZG U0VULCB2M2RfZ2V0X2JvX29mZnNldF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gPj4gK307 Cj4gPgo+ID4gU28gb24geW91ciAiRG8gSSBuZWVkIERSTV9BVVRIIiBxdWVzdGlvbiAuLi4gaGVj ayBkbyBJIGtub3cgOi0pCj4gPgo+ID4gV2hhdCBzZWVtcyB0byBiZSBzdGFuZGFyZCBwcmFjdGlj ZSBpcyB0byBzcHJpbmtsZSBhIERSTV9BVVRIIG92ZXIgYWxsCj4gPiBEUk1fUkVOREVSX0FMTE9X IGlvY3RscyB3aGljaCBjaGFuZ2Ugc3R1ZmYgKGkuZS4gYWxsIGV4Y2VwdCBHRVRfUEFSQU0pLgo+ ID4gTm90ZSB0aGF0IERSTV9BVVRIIGhhcyBzb21lIHZlcnkgd2VhayBndWFyYW50ZWVzOiBPbmNl IGF1dGhlbnRpY2F0ZWQsCj4gPiBhbHdheXMgYXV0aGVudGljYXRlZC4gVGhlIGF1dGhlbnRpY2F0 aW9uIGRvZXNuJ3QgZm9sbG93IHRoZSBkcm0gbWFzdGVyCj4gPiBhcm91bmQsIHNvIGlmIHlvdSBW VCBzd2l0Y2ggeW91IGNhbiBoYXBwaWx5IHJlYWQgYW55IG90aGVyIHVzZXJzIG1lbW9yeQo+ID4g YWxyZWFkeSwgZXZlbiB3aXRoIERSTV9BVVRILgo+ID4KPiA+IFRoZSBzYW1lIGFwcGxpZXMgZm9y IHJlbmRlciBub2RlcywgZXhjZXB0IG5vIGF1dGhlbnRpY2F0aW9uIHN0ZXAgdG8ganVtcAo+ID4g b3ZlciBmaXJzdC4KPiA+Cj4gPiBXZSBhbHNvIGFscmVhZHkgaGF2ZSBkcml2ZXJzIHdpdGggcmVu ZGVyIG5vZGVzIHdoaWNoIGRvbid0IGhhdmUgZnVsbAo+ID4gcHBndHQsIHNvIGRvZXNuJ3Qgc2Vl bSB0byBob3JyaWJsZSBpZGVhIGVpdGhlciB0byBzdGFydCBvdXQgd2l0aG91dCB0aGF0Cj4gPiBm b3IgdjNkLgo+ID4KPiA+IHRsZHI7IEknZCBzdWdnZXN0IHlvdSBzcHJpbmtsZSBEUk1fQVVUSCBv dmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IEdFVF9QQVJBTSwKPiA+IGlmIG9ubHkgZm9yIGNhcmdvIGN1 bHQgY29uc2lzdGVuY3kgOi0pCj4gCj4gRm9sbG93aW5nIHRoZSBsb2dpYyB0aGF0IG1ha2VzIEdF VF9QQVJBTSAhQVVUSCwgSSBiZWxpZXZlIGFsbCBpb2N0bHMKPiBleGNlcHQgU1VCTUlUX0NMIHdv dWxkIGJlIHBlcmZlY3RseSBmaW5lIC0tIHRoZXkncmUgb25seSBvcGVyYXRpbmcgb24KPiB0aGUg Qk9zIHlvdSBoYXZlIGEgaGFuZGxlIHRvLgo+IAo+IFRhbGtpbmcgd2l0aCBrZWl0aHAgYXQgYnJl YWtmYXN0IGFuZCBkb2luZyBhIGJpdCBvZiB0ZXN0aW5nIGp1c3Qgbm93LCBJCj4gdGhpbmsgZ2V0 dGluZyBteSBHTVAgd29yayBmaW5pc2hlZCB3aWxsIGJlIGVhc2llciB0aGFuIEkgdGhvdWdodCAt LSBWM0QKPiAzLngncyBiaW5uZXIgT09NIHN0YXRlIG1hY2hpbmUgaXMgbXVjaCBuaWNlciB0aGFu IDIueCwgc28gbXkgZGlmZmljdWx0Cj4gc3luY2hyb25pemF0aW9uIHByb2JsZW0gZm9yIEdNUCBz d2l0Y2hpbmcgbWlnaHQgYmUgYSBub24taXNzdWUuICBTdGlsbCwKPiBJJ2QgbGlrZSB0byBwdXJz dWUgdGhlIG1lcmdlIGFueXdheSwgc28gSSd2ZSBmbGFnZ2VkIFNVQk1JVCBhcyBBVVRICj4gKHJl YXNvbmluZyB0aGF0IGlmIElyb25sYWtlIGNhbiBoYXZlIERSSVZFUl9SRU5ERVIsIHYzZCBjYW4g dG9vKS4KClNvdW5kcyByZWFzb25hYmxlLCBoYXMgbXkgYWNrLgoKPiA+PiArCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIGRybSk7Cj4gPj4gKwl2M2QtPmRybSA9IGRybTsKPiA+PiArCWRybS0+ ZGV2X3ByaXZhdGUgPSB2M2Q7Cj4gPgo+ID4gZHJtX2Rldl9pbml0IHBsdXMganVzdCBlbWJlZCBk cm0gaW4gdjNkIGlzIG15IHJlY29tbWVuZGF0aW9uLgo+IAo+IE5vdCBnZXR0aW5nIHRvIHVzZSBk ZXZtX2t6YWxsb2Mgd2l0aCB0aGF0IGlzIHdlaXJkLCBidXQgSSd2ZSBjaGFuZ2VkCj4gb3Zlci4K CldlbGwgIkhvdHBsdWcgaXMgQnJva2VuICh0bSkiLCBidXQgdXNpbmcgZGV2bV9remNhbGxvYyBm b3IgYW55IG9mIHRoZQpkcm0tc2lkZSBzdHJ1Y3R1cmVzIGlzIGEgbm8tZ28gZm9yIGFjdHVhbGx5 IGhvdHBsdWdnYWJsZSBody4gV2hlbiB5b3UKaG90LXVucGx1ZyB0aGVuIHRoZSBzdHJ1Y3QgZGV2 aWNlIGNhbiBhbGwgZGlzYXBwZWFyLCB3aGlsZSB0aGUgc3RydWN0CmRybV9kZXZpY2UgaGFzIGFu IGVudGlyZWx5IGRpZmZlcmVudCBsaWZldGltZSBhbmQga2luZGEgbmVlZHMgdG8gcGVyc2lzdAoo dW50aWwgYWxsIHRoZSB1c2Vyc3BhY2UgaGFuZGxlcyBhbmQgc3R1ZmYgYXJlIGdvbmUpLiBUaGVy ZSdzIHBsZW50eSBvZgpvdGhlciBnYXBzIGFuZCBwaXRmYWxscyB3aXRoIG1ha2luZyB0aGlzIGFs bCBwcm9wZXJseSB3b3JrLCBhbmQgTm9yYWxmIGlzCnNsb3dseSB3b3JraW5nIHRoZW0gZG93biAo Zm9yIHRpbnlkcm0gdW5wbHVnIGZvciBwYW5lbHMpLgoKSSBsb29rZWQgYSBiaXQgaW50byB3aGV0 aGVyIHdlIGNvdWxkIHVzZSBkZXZtXyogaGVscGVycyB0aWVkIHRvIHRoZQpkcm1fZGV2aWNlIGxp ZmV0aW1lLCBidXQgdGhhdCBkaWRuJ3QgbG9vayByZWFsbHkgZG9hYmxlLgoKSW4gcHJhY3RpY2Ug ImRvbid0IGRvIHRoYXQgdGhlbiIgYXBwbGllcywgZXhjZXB0IGZvciB0aGUgZmV3IGRyaXZlcnMg d2hvCmFjdHVhbGx5IGNhbiBiZSBob3QtdW5wbHVnZ2VkLgoKQXNpZGU6IEV2ZW4gbW9yZSBmdW4g aXMgdGhhdCBleHBvcnRlZCBvYmplY3RzIGxpa2UgZG1hX2J1ZiBvciBkbWFfZmVuY2UKYWxzbyBj YW4gb3V0bGl2ZSB5b3VyIHBoeXNpY2FsIGRldmljZSBzdHJ1Y3QsIGFuZCB3b3JzZSwgY2FuIG91 dGxpdmUKZHJtX2RldmljZS4gSG90dW5wbHVnIGF0bSBpbiBkcm0gaXMgbWFkZSBmdWxsIG9mIGZh aWwuCgpBbnl3YXksIG5vdGhpbmcgZm9yIHlvdSB0byBkbywganVzdCB3YW50ZWQgdG8gcHJvdmlk ZSBzb21lIGNvbnRleHQuCgo+ID4+ICsvKioKPiA+PiArICogX3dhaXRfZm9yIC0gbWFnaWMgKHJl Z2lzdGVyKSB3YWl0IG1hY3JvCj4gPj4gKyAqCj4gPj4gKyAqIERvZXMgdGhlIHJpZ2h0IHRoaW5n IGZvciBtb2Rlc2V0IHBhdGhzIHdoZW4gcnVuIHVuZGVyIGtkZ2Igb3Igc2ltaWxhciBhdG9taWMK PiA+PiArICogY29udGV4dHMuIE5vdGUgdGhhdCBpdCdzIGltcG9ydGFudCB0aGF0IHdlIGNoZWNr IHRoZSBjb25kaXRpb24gYWdhaW4gYWZ0ZXIKPiA+PiArICogaGF2aW5nIHRpbWVkIG91dCwgc2lu Y2UgdGhlIHRpbWVvdXQgY291bGQgYmUgZHVlIHRvIHByZWVtcHRpb24gb3Igc2ltaWxhciBhbmQK PiA+PiArICogd2UndmUgbmV2ZXIgaGFkIGEgY2hhbmNlIHRvIGNoZWNrIHRoZSBjb25kaXRpb24g YmVmb3JlIHRoZSB0aW1lb3V0Lgo+ID4+ICsgKi8KPiA+PiArI2RlZmluZSBfd2FpdF9mb3IoQ09O RCwgTVMsIFcpICh7IFwKPiA+PiArCXVuc2lnbmVkIGxvbmcgdGltZW91dF9fID0gamlmZmllcyAr IG1zZWNzX3RvX2ppZmZpZXMoTVMpICsgMTsJXAo+ID4+ICsJaW50IHJldF9fID0gMDsJCQkJCQkJ XAo+ID4+ICsJd2hpbGUgKCEoQ09ORCkpIHsJCQkJCQlcCj4gPj4gKwkJaWYgKHRpbWVfYWZ0ZXIo amlmZmllcywgdGltZW91dF9fKSkgewkJCVwKPiA+PiArCQkJaWYgKCEoQ09ORCkpCQkJCQlcCj4g Pj4gKwkJCQlyZXRfXyA9IC1FVElNRURPVVQ7CQkJXAo+ID4+ICsJCQlicmVhazsJCQkJCQlcCj4g Pj4gKwkJfQkJCQkJCQlcCj4gPj4gKwkJaWYgKFcgJiYgZHJtX2Nhbl9zbGVlcCgpKSAgewkJCQlc Cj4gPgo+ID4gZHJtX2Nhbl9zbGVlcCBjb25zaWRlcmVkIGhhcm1mdWwgLSBpdCBhbGxvd3MgeW91 IHRvIGhhdmUgaHVnZSBidXN5LXNwaW4KPiA+IHdhaXRzIGluIGlycS1vZmYgc2VjdGlvbnMsIHdo aWNoIGlzbid0IGNvb2wuIFNpbmNlIHRoaXMgaXNuJ3QgYSBtb2Rlc2V0Cj4gPiBkcml2ZXIgSSdk IG51a2UgdGhpcy4gaTkxNSBoYWQgYSBidW5jaCBvZiBidWdzIHdoZXJlIHdlJ3ZlIGJ1c3ktc3B1 biBmb3IKPiA+IHRlbnMgb2YgbXNlYyB3aGlsZSBkaXNhYmxpbmcgaXJxcywgYW5kIHNpbmNlIHRo ZSBtYWdpYyBwcmV2ZW50IHRoZSB1c3VhbAo+ID4gbWlnaHRfc2xpcCBzcGxhdCB3ZSBkaWRuJ3Qg bm90aWNlIGZvciBhIGxvbmcgdGltZSA6LS8KPiAKPiBEcm9wcGVkLgo+IAo+IEkgd29uZGVyIGhv dyBtdWNoIHBlcmZvcm1hbmNlIEknbSBsZWF2aW5nIG9uIHRoZSBmbG9vciBieSBtc2xlZXAoKWlu ZyBpbgo+IHRoZXNlIGxvb3BzIGluc3RlYWQgb2YgYnVzeS13YWl0aW5nLCB0aG91Z2guICBUaGVz ZSB1c2FnZXMgc2hvdWxkIGJlCj4gImRvbmUgaW4gYSBmZXcgY3ljbGVzIiBub3QgImRvbmUgaW4g YSBmZXcgbXMiLiAgSG9wZWZ1bGx5IEknbSBqdXN0IG5ldmVyCj4gc2xlZXBpbmcgYXQgYWxsIQoK SW4gaTkxNSB3ZSBoYXZlIHNlcGFyYXRlIG1hY3JvcyBmb3IgdGhlIGNhc2VzIHdoZXJlIHdlIGJ1 c3ktbG9vcCBhbmQKZXhwZWN0IGl0IHRvIGJlIG9ubHkgYSBmZXcgdXNlYyBhdCBtb3N0LiBUaG9z ZSBhbHNvIGhhdmUgYSB0aW1lb3V0IGluCnVzZWNzIChhbmQgb2J2aW91c2x5IGRvbid0IGJvdGhl ciBzbGVlcGluZyBhdCBhbGwpLgoKPiA+PiArc3RhdGljIGJvb2wgdjNkX2ZlbmNlX2VuYWJsZV9z aWduYWxpbmcoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4gPj4gK3sKPiA+PiArCXJldHVybiB0 cnVlOwo+ID4+ICt9Cj4gPgo+ID4gVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCBhbmQgbm90IG5l ZWRlZCB3aGVuIHNpZ25hbGxpbmcgaXMgYWx3YXlzIGVuYWJsZWQKPiA+IGZvciB5b3VyIGZlbmNl cy4KPiAKPiBUaGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0cnVlOgo+IAo+IHZvaWQKPiBkbWFfZmVu Y2VfaW5pdChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwgY29uc3Qgc3RydWN0IGRtYV9mZW5jZV9v cHMgKm9wcywKPiAJICAgICAgIHNwaW5sb2NrX3QgKmxvY2ssIHU2NCBjb250ZXh0LCB1bnNpZ25l ZCBzZXFubykKPiB7Cj4gCUJVR19PTighbG9jayk7Cj4gCUJVR19PTighb3BzIHx8ICFvcHMtPndh aXQgfHwgIW9wcy0+ZW5hYmxlX3NpZ25hbGluZyB8fAo+IAkgICAgICAgIW9wcy0+Z2V0X2RyaXZl cl9uYW1lIHx8ICFvcHMtPmdldF90aW1lbGluZV9uYW1lKTsKCk9vcHMsIHNpbGx5IG1lIG1pc3Jl YWQgdGhlIGNoZWNrIG9mIHRoZSByZXR1cm4gdmFsdWUgb2YgLT5lbmFibGVfc2lnbmFsaW5nCmFz IHRoZSBjaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayBpcyB0aGVyZS4KCldlIGhhdmUgcXVpdGUg YSBwaWxlIG9mIHRyaXZpYWwgLT5lbmFibGVfc2lnbmFsaW5nIGltcGxlbWVudGF0aW9ucywgSQp0 aGluayBJJ20gZ29pbmcgdG8gdHlwZSBhIHNtYWxsIHBhdGNoIHNlcmllcy4KCj4gPj4gK2ludAo+ ID4+ICt2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAo+ID4+ICsJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gPj4gK3sKPiA+PiArCWlu dCByZXQ7Cj4gPj4gKwlzdHJ1Y3QgZHJtX3YzZF93YWl0X2JvICphcmdzID0gZGF0YTsKPiA+PiAr CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsKPiA+PiArCXN0cnVjdCB2M2RfYm8gKmJv Owo+ID4+ICsJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7Cj4gPj4gKwl1bnNpZ25lZCBs b25nIHRpbWVvdXRfamlmZmllcyA9Cj4gPj4gKwkJbnNlY3NfdG9famlmZmllc190aW1lb3V0KGFy Z3MtPnRpbWVvdXRfbnMpOwo+ID4+ICsKPiA+PiArCWlmIChhcmdzLT5wYWQgIT0gMCkKPiA+PiAr CQlyZXR1cm4gLUVJTlZBTDsKPiA+PiArCj4gPj4gKwlnZW1fb2JqID0gZHJtX2dlbV9vYmplY3Rf bG9va3VwKGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKPiA+PiArCWlmICghZ2VtX29iaikgewo+ ID4+ICsJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdzLT5o YW5kbGUpOwo+ID4+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4+ICsJfQo+ID4+ICsJYm8gPSB0b192 M2RfYm8oZ2VtX29iaik7Cj4gPj4gKwo+ID4+ICsJcmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3dh aXRfdGltZW91dF9yY3UoYm8tPnJlc3YsCj4gPj4gKwkJCQkJCSAgdHJ1ZSwgdHJ1ZSwKPiA+PiAr CQkJCQkJICB0aW1lb3V0X2ppZmZpZXMpOwo+ID4+ICsKPiA+PiArCS8qIERlY3JlbWVudCB0aGUg dXNlcidzIHRpbWVvdXQsIGluIGNhc2Ugd2UgZ290IGludGVycnVwdGVkCj4gPj4gKwkgKiBzdWNo IHRoYXQgdGhlIGlvY3RsIHdpbGwgYmUgcmVzdGFydGVkLgo+ID4+ICsJICovCj4gPj4gKwlhcmdz LT50aW1lb3V0X25zIC09IGppZmZpZXNfdG9fbnNlY3MoamlmZmllcyAtIHN0YXJ0KTsKPiA+Cj4g PiBKdXN0IGxlYXJuZWQgdGhhdCBpZiB5b3Ugd2FudCBhY2N1cmFjeSB5b3UgbmVlZCBrdGltZV9n ZXQgYmVmb3JlL2FmdGVyCj4gPiB3YWl0aW5nLCBzaW5jZSB0aGUgZW50aXJlIGppZmZpZXMgdGhp bmcgaXMgdG9vIGluYWNjdXJhdGUgLSBpZiB0aGUgaXJxcwo+ID4gZ2V0cyBkZWxheWVkLCBqaWZm aWVzIGlzbid0IHVwZGF0ZS4gVGhlIG90aGVyIGlzc3VlIGlzIHRoYXQgaWYgeW91IGdldAo+ID4g aW50ZXJydXB0ZWQgdG9vIHF1aWNrbHksIGppZmZpZXMgZG9lc24ndCB1cGRhdGUgYW5kIHlvdSBl bmQgdXAgc2xlZXBpbmcKPiA+IGZvciB3YXkgdG9vIGxvbmcuCj4gPgo+ID4gTm90IHN1cmUgeW91 IGNhcmUgYWJvdXQgdGhhdCBtdWNoIGFjY3VyYWN5IDotKQo+IAo+IFRoYW5rcyBmb3IgdGhlIG5v dGUhICBJJ3ZlIGZpeGVkIGl0IHVwLgo+IAo+IEhvdyBJIHdpc2ggdGhlIHJlc2VydmF0aW9uIHdh cyBpbiB0aGUgR0VNIEJPIGFuZCB3ZSBjb3VsZCBoYXZlIGEgc2hhcmVkCj4gaW9jdGwgdG8gZG8g dGhpcy4KCkhtLCBnb29kIGlkZWEgYWN0dWFsbHkgZm9yIGEgYml0IG9mIHJlZmFjdG9yaW5nLiBX b3VsZCByZW1vdmUgdGhlIG5lZWQgZm9yCnRoZSBnZW1fcHJpbWVfcmVzX29iaiBjYWxsYmFjayB3 aGljaCBvbmx5IGV4aXN0cyB0byBiZWNhdXNlIHRoZSBwb2ludGVyCmlzbid0IGluIGRybV9nZW1f b2JqZWN0LgoKPiAKPiA+PiArLyoqCj4gPj4gKyAqIHN0cnVjdCBkcm1fdjNkX3N1Ym1pdF9jbCAt IGlvY3RsIGFyZ3VtZW50IGZvciBzdWJtaXR0aW5nIGNvbW1hbmRzIHRvIHRoZSAzRAo+ID4+ICsg KiBlbmdpbmUuCj4gPj4gKyAqCj4gPj4gKyAqIFRoaXMgYXNrcyB0aGUga2VybmVsIHRvIGhhdmUg dGhlIEdQVSBleGVjdXRlIGFuIG9wdGlvbmFsIGJpbm5lcgo+ID4+ICsgKiBjb21tYW5kIGxpc3Qs IGFuZCBhIHJlbmRlciBjb21tYW5kIGxpc3QuCj4gPj4gKyAqLwo+ID4+ICtzdHJ1Y3QgZHJtX3Yz ZF9zdWJtaXRfY2wgewo+ID4+ICsJLyogUG9pbnRlciB0byB0aGUgYmlubmVyIGNvbW1hbmQgbGlz dC4KPiA+PiArCSAqCj4gPj4gKwkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzZXQgb2YgY29tbWFuZHMg ZXhlY3V0ZWQsIHdoaWNoIHJ1bnMgdGhlCj4gPj4gKwkgKiBjb29yZGluYXRlIHNoYWRlciB0byBk ZXRlcm1pbmUgd2hlcmUgcHJpbWl0aXZlcyBsYW5kIG9uIHRoZSBzY3JlZW4sCj4gPj4gKwkgKiB0 aGVuIHdyaXRlcyBvdXQgdGhlIHN0YXRlIHVwZGF0ZXMgYW5kIGRyYXcgY2FsbHMgbmVjZXNzYXJ5 IHBlciB0aWxlCj4gPj4gKwkgKiB0byB0aGUgdGlsZSBhbGxvY2F0aW9uIEJPLgo+ID4+ICsJICov Cj4gPj4gKwlfX3UzMiBiY2xfc3RhcnQ7Cj4gPj4gKwo+ID4+ICsJIC8qKiBFbmQgYWRkcmVzcyBv ZiB0aGUgQkNMIChmaXJzdCBieXRlIGFmdGVyIHRoZSBCQ0wpICovCj4gPj4gKwlfX3UzMiBiY2xf ZW5kOwo+ID4+ICsKPiA+PiArCS8qIE9mZnNldCBvZiB0aGUgcmVuZGVyIGNvbW1hbmQgbGlzdC4K PiA+PiArCSAqCj4gPj4gKwkgKiBUaGlzIGlzIHRoZSBzZWNvbmQgc2V0IG9mIGNvbW1hbmRzIGV4 ZWN1dGVkLCB3aGljaCB3aWxsIGVpdGhlcgo+ID4+ICsJICogZXhlY3V0ZSB0aGUgdGlsZXMgdGhh dCBoYXZlIGJlZW4gc2V0IHVwIGJ5IHRoZSBCQ0wsIG9yIGEgZml4ZWQgc2V0Cj4gPj4gKwkgKiBv ZiB0aWxlcyAoaW4gdGhlIGNhc2Ugb2YgUkNMLW9ubHkgYmxpdHMpLgo+ID4+ICsJICovCj4gPj4g KwlfX3UzMiByY2xfc3RhcnQ7Cj4gPj4gKwo+ID4+ICsJIC8qKiBFbmQgYWRkcmVzcyBvZiB0aGUg UkNMIChmaXJzdCBieXRlIGFmdGVyIHRoZSBSQ0wpICovCj4gPj4gKwlfX3UzMiByY2xfZW5kOwo+ ID4+ICsKPiA+PiArCS8qKiBBbiBvcHRpb25hbCBzeW5jIG9iamVjdCB0byB3YWl0IG9uIGJlZm9y ZSBzdGFydGluZyB0aGUgQkNMLiAqLwo+ID4+ICsJX191MzIgaW5fc3luY19iY2w7Cj4gPj4gKwkv KiogQW4gb3B0aW9uYWwgc3luYyBvYmplY3QgdG8gd2FpdCBvbiBiZWZvcmUgc3RhcnRpbmcgdGhl IFJDTC4gKi8KPiA+PiArCV9fdTMyIGluX3N5bmNfcmNsOwo+ID4+ICsJLyoqIEFuIG9wdGlvbmFs IHN5bmMgb2JqZWN0IHRvIHBsYWNlIHRoZSBjb21wbGV0aW9uIGZlbmNlIGluLiAqLwo+ID4+ICsJ X191MzIgb3V0X3N5bmM7Cj4gPj4gKwo+ID4+ICsJLyogT2Zmc2V0IG9mIHRoZSB0aWxlIGFsbG9j IG1lbW9yeQo+ID4+ICsJICoKPiA+PiArCSAqIFRoaXMgaXMgb3B0aW9uYWwgb24gVjNEIDMuMyAo d2hlcmUgdGhlIENMIGNhbiBzZXQgdGhlIHZhbHVlKSBidXQKPiA+PiArCSAqIHJlcXVpcmVkIG9u IFYzRCA0LjEuCj4gPj4gKwkgKi8KPiA+PiArCV9fdTMyIHFtYTsKPiA+PiArCj4gPj4gKwkvKiog U2l6ZSBvZiB0aGUgdGlsZSBhbGxvYyBtZW1vcnkuICovCj4gPj4gKwlfX3UzMiBxbXM7Cj4gPj4g Kwo+ID4+ICsJLyoqIE9mZnNldCBvZiB0aGUgdGlsZSBzdGF0ZSBkYXRhIGFycmF5LiAqLwo+ID4+ ICsJX191MzIgcXRzOwo+ID4+ICsKPiA+PiArCS8qIFBvaW50ZXIgdG8gYSB1MzIgYXJyYXkgb2Yg dGhlIEJPcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBqb2IuCj4gPj4gKwkgKi8KPiA+PiAr CV9fdTY0IGJvX2hhbmRsZXM7Cj4gPj4gKwo+ID4+ICsJLyogTnVtYmVyIG9mIEJPIGhhbmRsZXMg cGFzc2VkIGluIChzaXplIGlzIHRoYXQgdGltZXMgNCkuICovCj4gPj4gKwlfX3UzMiBib19oYW5k bGVfY291bnQ7Cj4gPgo+ID4gSSB0aGluayB5b3Ugd2FudCBhbiBfXzMyIHJlc3YvZmxhZ3MvcGFk IChhbmQgY2hlY2sgaXQncyAwKSBoZXJlLCB0byBhbGlnbiB3aXRoCj4gPiA4Ynl0ZXMuIEJ1dCBJ IGZyZWVseSBhZG1pdCBteSBpb2N0bCBzdHJ1Y3QgbGF5b3V0IGtub3dsZWRnZSBpcyBzb21lIGdv b2QKPiA+IGNhcmdvLWN1bHQgOi0pCj4gCj4gQ2FuIHlvdSBleHBsYWluIHRoZSByZWFzb24gZm9y IHRoYXQ/ICBJIHRob3VnaHQgd2UnZCB0YWxrZWQgYWJvdXQgdGhpcwo+IGJlZm9yZSBhbmQgZGVj aWRlZCB0aGF0IHRoZXJlIHdhcyBubyBuZWVkIHRvIGFsaWduIHN0cnVjdCBzaXplIHRvIDgKPiBi eXRlcywgdW5sZXNzIGl0J3MgYSBzdHJ1Y3QgdGhhdCB3b3VsZCBiZSBzdWJtaXR0ZWQgYXMgYW4g YXJyYXkuCgpIbSByaWdodC4gTGlrZSBJIHNhaWQsIEknbSBqdXN0IGNhcmdvLWN1bHRpbmcgdGhp cy4KClRoZSBvbmx5IGRvd25zaWRlIEkgc2VlIGlzIHRoYXQgbWlzLW1hdGNoZWQgdXNlcnNwYWNl IG1pZ2h0IHplcm8tZXh0ZW5kCnRoZSBzdHJ1Y3QuIEFuZCBpZiB5b3UgaW5pdGlhbGl6ZSBpdCBl eHBsaWNpdGx5IGluc3RlYWQgb2Ygd2l0aCBtZW1zZXQgb3IKPSB7fSwgdGhlbiB5b3UgbWlnaHQg cHV0IGdhcmJhZ2UgaW4gdGhlcmUuIEFuZCBzaW5jZSB0aGUga2VybmVsIGRvZXNuJ3QKc2VlIHRo aXMsIHlvdSBjYW4ndCBoYXZlIGEgY2hlY2sgZm9yIHRoYXQuIExhdGVyIG9uIHlvdSBhZGQgYSBu ZXcgZmllbGQsCndoaWNoIHRoZW4gd29uJ3Qgd29yayBiZWNhdXNlIG9mIG9sZCB1c2Vyc3BhY2Uu CgpCdXQgdGJoIEknbSBwcm9iYWJseSB3cm9uZyBvbiB0aGlzIHRvby4gTm90IHN1cmUgLi4uCgpB bnl3YXksIGFsbCBxdWVzdGlvbnMgSSBoYWQgYW5zd2VyZWQsIHNvIG15IEFjayBob2xkcy4gSSB0 aGluayBzb21lIG9mIHRoZQppZGVhcyB3ZSd2ZSB0b3NzZWQgYXJvdW5kIGhlcmUgZm9yIG1vcmUg cmVmYWN0b3Jpbmcgd291bGQgbWFrZSBncmVhdApUb2RvLnJzdCBlbnRyaWVzLiBJJ2xsIHRocm93 IHRoZW0gYWxsIGludG8gYSBwYXRjaC4KLURhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==