From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 03/18] drm: Extract drm_atomic_state_helper.[hc] Date: Tue, 2 Oct 2018 18:40:52 +0300 Message-ID: <20181002154052.GB9144@intel.com> References: <20181002133526.13685-1-daniel.vetter@ffwll.ch> <20181002133526.13685-4-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181002133526.13685-4-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Daniel Vetter , Intel Graphics Development , DRI Development List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBPY3QgMDIsIDIwMTggYXQgMDM6MzU6MTFQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBXZSBhbHJlYWR5IGhhdmUgYSBzZXBhcmF0ZSBvdmVydmlldyBkb2MgZm9yIHRoaXMs IG1ha2VzIHNlbnNlIHRvCj4gdW50YW5nbGUgaXQgZnJvbSB0aGUgb3ZlcmFsbCBhdG9taWMgaGVs cGVycy4KPiAKPiB2MjogUmViYXNlCj4gCj4gdjM6IFJlYmFzZSBtb3JlLgoKSG9wZWZ1bGx5IHRo ZSByZWJhc2VzIGRpZG4ndCBsZWF2ZSBhbnkgY29kZSBjaGFuZ2VzIGJlaGluZC4uLgoKVG9vIGxh enkgdG8gcmVhZCBpbiBmdWxsIGRldGFpbCBzbwpBY2tlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2 aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gCj4gU2lnbmVkLW9mZi1ieTogRGFuaWVs IFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Cj4gLS0tCj4gIERvY3VtZW50YXRpb24v Z3B1L2RybS1rbXMtaGVscGVycy5yc3QgICAgIHwgIDE5ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1f YXRvbWljX2hlbHBlci5jICAgICAgIHwgNTY2IC0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jIHwgNjAxICsrKysrKysrKysrKysr KysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaCAgICAgICAgICAgfCAg NDQgKy0KPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaCAgICAgfCAgODAg KysrCj4gIDYgZmlsZXMgY2hhbmdlZCwgNjk4IGluc2VydGlvbnMoKyksIDYxNSBkZWxldGlvbnMo LSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRl X2hlbHBlci5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fYXRvbWljX3N0 YXRlX2hlbHBlci5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMt aGVscGVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0Cj4gaW5k ZXggZjljZmNkY2RmMDI0Li40YjRkYzIzNmVmNmYgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlv bi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1r bXMtaGVscGVycy5yc3QKPiBAQCAtNTksMTkgKzU5LDI4IEBAIEltcGxlbWVudGluZyBBc3luY2hy b25vdXMgQXRvbWljIENvbW1pdAo+ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWNfaGVscGVyLmMKPiAgICAgOmRvYzogaW1wbGVtZW50aW5nIG5vbmJsb2NraW5nIGNv bW1pdAo+ICAKPiArSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2RybS9kcm1fYXRvbWlj X2hlbHBlci5oCj4gKyAgIDppbnRlcm5hbDoKPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ICsgICA6ZXhwb3J0Ogo+ICsKPiAgQXRvbWlj IFN0YXRlIFJlc2V0IGFuZCBJbml0aWFsaXphdGlvbgo+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gIAo+IC0uLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWNfaGVscGVyLmMKPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1f YXRvbWljX3N0YXRlX2hlbHBlci5jCj4gICAgIDpkb2M6IGF0b21pYyBzdGF0ZSByZXNldCBhbmQg aW5pdGlhbGl6YXRpb24KPiAgCj4gLUhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gK0F0b21pYyBTdGF0ZSBIZWxwZXIgUmVmZXJlbmNlCj4g Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIAo+IC0uLiBrZXJuZWwtZG9jOjogaW5j bHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAo+ICsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9k cm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaAo+ICAgICA6aW50ZXJuYWw6Cj4gIAo+IC0uLiBr ZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiArLi4ga2Vy bmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jCj4gICAg IDpleHBvcnQ6Cj4gIAo+ICBTaW1wbGUgS01TIEhlbHBlciBSZWZlcmVuY2UKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4g aW5kZXggYmM2YTE2YTNjMzZlLi41NzZiYTk4NWUxMzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTM2 LDcgKzM2LDggQEAgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBf aGVscGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKPiAgCQlkcm1fcGxhbmVfaGVscGVyLm8gZHJt X2RwX21zdF90b3BvbG9neS5vIGRybV9hdG9taWNfaGVscGVyLm8gXAo+ICAJCWRybV9rbXNfaGVs cGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8gXAo+ICAJCWRybV9zaW1wbGVf a21zX2hlbHBlci5vIGRybV9tb2Rlc2V0X2hlbHBlci5vIFwKPiAtCQlkcm1fc2NkY19oZWxwZXIu byBkcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5vCj4gKwkJZHJtX3NjZGNfaGVscGVyLm8gZHJt X2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIubyBcCj4gKwkJZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIu bwo+ICAKPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX1BBTkVMX0JSSURHRSkgKz0gYnJp ZGdlL3BhbmVsLm8KPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElP TikgKz0gZHJtX2ZiX2hlbHBlci5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f YXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBp bmRleCA4YzkzZjMzZmU5MmYuLmE1ZWRjODc1NzA1NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljX2hlbHBlci5jCj4gQEAgLTMzODIsNTY5ICszMzgyLDMgQEAgaW50IGRybV9hdG9taWNfaGVs cGVyX3BhZ2VfZmxpcF90YXJnZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJcmV0dXJuIHJl dDsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcF90YXJn ZXQpOwo+IC0KPiAtLyoqCj4gLSAqIERPQzogYXRvbWljIHN0YXRlIHJlc2V0IGFuZCBpbml0aWFs aXphdGlvbgo+IC0gKgo+IC0gKiBCb3RoIHRoZSBkcm0gY29yZSBhbmQgdGhlIGF0b21pYyBoZWxw ZXJzIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGFsd2F5cyB0aGUgZnVsbAo+IC0gKiBhbmQgY29ycmVj dCBhdG9taWMgc29mdHdhcmUgc3RhdGUgZm9yIGFsbCBjb25uZWN0b3JzLCBDUlRDcyBhbmQgcGxh bmVzCj4gLSAqIGF2YWlsYWJsZS4gV2hpY2ggaXMgYSBiaXQgYSBwcm9ibGVtIG9uIGRyaXZlciBs b2FkIGFuZCBhbHNvIGFmdGVyIHN5c3RlbQo+IC0gKiBzdXNwZW5kLiBPbmUgd2F5IHRvIHNvbHZl IHRoaXMgaXMgdG8gaGF2ZSBhIGhhcmR3YXJlIHN0YXRlIHJlYWQtb3V0Cj4gLSAqIGluZnJhc3Ry dWN0dXJlIHdoaWNoIHJlY29uc3RydWN0cyB0aGUgZnVsbCBzb2Z0d2FyZSBzdGF0ZSAoZS5nLiB0 aGUgaTkxNQo+IC0gKiBkcml2ZXIpLgo+IC0gKgo+IC0gKiBUaGUgc2ltcGxlciBzb2x1dGlvbiBp cyB0byBqdXN0IHJlc2V0IHRoZSBzb2Z0d2FyZSBzdGF0ZSB0byBldmVyeXRoaW5nIG9mZiwKPiAt ICogd2hpY2ggaXMgZWFzaWVzdCB0byBkbyBieSBjYWxsaW5nIGRybV9tb2RlX2NvbmZpZ19yZXNl dCgpLiBUbyBmYWNpbGl0YXRlIHRoaXMKPiAtICogdGhlIGF0b21pYyBoZWxwZXJzIHByb3ZpZGUg ZGVmYXVsdCByZXNldCBpbXBsZW1lbnRhdGlvbnMgZm9yIGFsbCBob29rcy4KPiAtICoKPiAtICog T24gdGhlIHVwc2lkZSB0aGUgcHJlY2lzZSBzdGF0ZSB0cmFja2luZyBvZiBhdG9taWMgc2ltcGxp ZmllcyBzeXN0ZW0gc3VzcGVuZAo+IC0gKiBhbmQgcmVzdW1lIGEgbG90LiBGb3IgZHJpdmVycyB1 c2luZyBkcm1fbW9kZV9jb25maWdfcmVzZXQoKSBhIGNvbXBsZXRlIHJlY2lwZQo+IC0gKiBpcyBp bXBsZW1lbnRlZCBpbiBkcm1fYXRvbWljX2hlbHBlcl9zdXNwZW5kKCkgYW5kIGRybV9hdG9taWNf aGVscGVyX3Jlc3VtZSgpLgo+IC0gKiBGb3Igb3RoZXIgZHJpdmVycyB0aGUgYnVpbGRpbmcgYmxv Y2tzIGFyZSBzcGxpdCBvdXQsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgo+IC0gKiBmb3IgdGhlc2Ug ZnVuY3Rpb25zLgo+IC0gKi8KPiAtCj4gLS8qKgo+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9jcnRj X3Jlc2V0IC0gZGVmYXVsdCAmZHJtX2NydGNfZnVuY3MucmVzZXQgaG9vayBmb3IgQ1JUQ3MKPiAt ICogQGNydGM6IGRybSBDUlRDCj4gLSAqCj4gLSAqIFJlc2V0cyB0aGUgYXRvbWljIHN0YXRlIGZv ciBAY3J0YyBieSBmcmVlaW5nIHRoZSBzdGF0ZSBwb2ludGVyICh3aGljaCBtaWdodAo+IC0gKiBi ZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0aW5nIGEgbmV3IGVt cHR5IHN0YXRlIG9iamVjdC4KPiAtICovCj4gLXZvaWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19y ZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCWlmIChjcnRjLT5zdGF0ZSkKPiAt CQlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4g LQo+IC0Ja2ZyZWUoY3J0Yy0+c3RhdGUpOwo+IC0JY3J0Yy0+c3RhdGUgPSBremFsbG9jKHNpemVv ZigqY3J0Yy0+c3RhdGUpLCBHRlBfS0VSTkVMKTsKPiAtCj4gLQlpZiAoY3J0Yy0+c3RhdGUpCj4g LQkJY3J0Yy0+c3RhdGUtPmNydGMgPSBjcnRjOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19yZXNldCk7Cj4gLQo+IC0vKioKPiAtICogX19kcm1fYXRvbWljX2hl bHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSAtIGNvcHkgYXRvbWljIENSVEMgc3RhdGUKPiAtICog QGNydGM6IENSVEMgb2JqZWN0Cj4gLSAqIEBzdGF0ZTogYXRvbWljIENSVEMgc3RhdGUKPiAtICoK PiAtICogQ29waWVzIGF0b21pYyBzdGF0ZSBmcm9tIGEgQ1JUQydzIGN1cnJlbnQgc3RhdGUgYW5k IHJlc2V0cyBpbmZlcnJlZCB2YWx1ZXMuCj4gLSAqIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJz IHRoYXQgc3ViY2xhc3MgdGhlIENSVEMgc3RhdGUuCj4gLSAqLwo+IC12b2lkIF9fZHJtX2F0b21p Y19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0J CQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gLXsKPiAtCW1lbWNweShz dGF0ZSwgY3J0Yy0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKPiAtCj4gLQlpZiAoc3RhdGUtPm1v ZGVfYmxvYikKPiAtCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoc3RhdGUtPm1vZGVfYmxvYik7Cj4g LQlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KQo+IC0JCWRybV9wcm9wZXJ0eV9ibG9iX2dldChzdGF0 ZS0+ZGVnYW1tYV9sdXQpOwo+IC0JaWYgKHN0YXRlLT5jdG0pCj4gLQkJZHJtX3Byb3BlcnR5X2Js b2JfZ2V0KHN0YXRlLT5jdG0pOwo+IC0JaWYgKHN0YXRlLT5nYW1tYV9sdXQpCj4gLQkJZHJtX3By b3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5nYW1tYV9sdXQpOwo+IC0Jc3RhdGUtPm1vZGVfY2hhbmdl ZCA9IGZhbHNlOwo+IC0Jc3RhdGUtPmFjdGl2ZV9jaGFuZ2VkID0gZmFsc2U7Cj4gLQlzdGF0ZS0+ cGxhbmVzX2NoYW5nZWQgPSBmYWxzZTsKPiAtCXN0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgPSBm YWxzZTsKPiAtCXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgPSBmYWxzZTsKPiAtCXN0YXRlLT56 cG9zX2NoYW5nZWQgPSBmYWxzZTsKPiAtCXN0YXRlLT5jb21taXQgPSBOVUxMOwo+IC0Jc3RhdGUt PmV2ZW50ID0gTlVMTDsKPiAtCXN0YXRlLT5wYWdlZmxpcF9mbGFncyA9IDA7Cj4gLX0KPiAtRVhQ T1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKTsKPiAt Cj4gLS8qKgo+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSAtIGRl ZmF1bHQgc3RhdGUgZHVwbGljYXRlIGhvb2sKPiAtICogQGNydGM6IGRybSBDUlRDCj4gLSAqCj4g LSAqIERlZmF1bHQgQ1JUQyBzdGF0ZSBkdXBsaWNhdGUgaG9vayBmb3IgZHJpdmVycyB3aGljaCBk b24ndCBoYXZlIHRoZWlyIG93bgo+IC0gKiBzdWJjbGFzc2VkIENSVEMgc3RhdGUgc3RydWN0dXJl Lgo+IC0gKi8KPiAtc3RydWN0IGRybV9jcnRjX3N0YXRlICoKPiAtZHJtX2F0b21pY19oZWxwZXJf Y3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlOwo+IC0KPiAtCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0 ZSkpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3Rh dGUpLCBHRlBfS0VSTkVMKTsKPiAtCWlmIChzdGF0ZSkKPiAtCQlfX2RybV9hdG9taWNfaGVscGVy X2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsIHN0YXRlKTsKPiAtCj4gLQlyZXR1cm4gc3RhdGU7 Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9z dGF0ZSk7Cj4gLQo+IC0vKioKPiAtICogX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lf c3RhdGUgLSByZWxlYXNlIENSVEMgc3RhdGUKPiAtICogQHN0YXRlOiBDUlRDIHN0YXRlIG9iamVj dCB0byByZWxlYXNlCj4gLSAqCj4gLSAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgc3RvcmVkIGlu IHRoZSBDUlRDIHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkgZnJlZWluZwo+IC0gKiB0aGUgbWVtb3J5 IG9mIHRoZSBDUlRDIHN0YXRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IHN1YmNs YXNzIHRoZQo+IC0gKiBDUlRDIHN0YXRlLgo+IC0gKi8KPiAtdm9pZCBfX2RybV9hdG9taWNfaGVs cGVyX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+IC17 Cj4gLQlpZiAoc3RhdGUtPmNvbW1pdCkgewo+IC0JCS8qCj4gLQkJICogSW4gdGhlIGV2ZW50IHRo YXQgYSBub24tYmxvY2tpbmcgY29tbWl0IHJldHVybnMKPiAtCQkgKiAtRVJFU1RBUlRTWVMgYmVm b3JlIHRoZSBjb21taXRfdGFpbCB3b3JrIGlzIHF1ZXVlZCwgd2Ugd2lsbAo+IC0JCSAqIGhhdmUg YW4gZXh0cmEgcmVmZXJlbmNlIHRvIHRoZSBjb21taXQgb2JqZWN0LiBSZWxlYXNlIGl0LCBpZgo+ IC0JCSAqIHRoZSBldmVudCBoYXMgbm90IGJlZW4gY29uc3VtZWQgYnkgdGhlIHdvcmtlci4KPiAt CQkgKgo+IC0JCSAqIHN0YXRlLT5ldmVudCBtYXkgYmUgZnJlZWQsIHNvIHdlIGNhbid0IGRpcmVj dGx5IGxvb2sgYXQKPiAtCQkgKiBzdGF0ZS0+ZXZlbnQtPmJhc2UuY29tcGxldGlvbi4KPiAtCQkg Ki8KPiAtCQlpZiAoc3RhdGUtPmV2ZW50ICYmIHN0YXRlLT5jb21taXQtPmFib3J0X2NvbXBsZXRp b24pCj4gLQkJCWRybV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cj4gLQo+IC0JCWtm cmVlKHN0YXRlLT5jb21taXQtPmV2ZW50KTsKPiAtCQlzdGF0ZS0+Y29tbWl0LT5ldmVudCA9IE5V TEw7Cj4gLQo+IC0JCWRybV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cj4gLQl9Cj4g LQo+IC0JZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHN0YXRlLT5tb2RlX2Jsb2IpOwo+IC0JZHJtX3By b3BlcnR5X2Jsb2JfcHV0KHN0YXRlLT5kZWdhbW1hX2x1dCk7Cj4gLQlkcm1fcHJvcGVydHlfYmxv Yl9wdXQoc3RhdGUtPmN0bSk7Cj4gLQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPmdhbW1h X2x1dCk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVz dHJveV9zdGF0ZSk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0 cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKPiAtICogQGNydGM6IGRybSBD UlRDCj4gLSAqIEBzdGF0ZTogQ1JUQyBzdGF0ZSBvYmplY3QgdG8gcmVsZWFzZQo+IC0gKgo+IC0g KiBEZWZhdWx0IENSVEMgc3RhdGUgZGVzdHJveSBob29rIGZvciBkcml2ZXJzIHdoaWNoIGRvbid0 IGhhdmUgdGhlaXIgb3duCj4gLSAqIHN1YmNsYXNzZWQgQ1JUQyBzdGF0ZSBzdHJ1Y3R1cmUuCj4g LSAqLwo+IC12b2lkIGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCj4gLQkJCQkJICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ IC17Cj4gLQlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShzdGF0ZSk7Cj4g LQlrZnJlZShzdGF0ZSk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9j cnRjX2Rlc3Ryb3lfc3RhdGUpOwo+IC0KPiAtLyoqCj4gLSAqIF9fZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfcmVzZXQgLSByZXNldHMgcGxhbmVzIHN0YXRlIHRvIGRlZmF1bHQgdmFsdWVzCj4gLSAq IEBwbGFuZTogcGxhbmUgb2JqZWN0LCBtdXN0IG5vdCBiZSBOVUxMCj4gLSAqIEBzdGF0ZTogYXRv bWljIHBsYW5lIHN0YXRlLCBtdXN0IG5vdCBiZSBOVUxMCj4gLSAqCj4gLSAqIEluaXRpYWxpemVz IHBsYW5lIHN0YXRlIHRvIGRlZmF1bHQuIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJzIHRoYXQg c3ViY2xhc3MKPiAtICogdGhlIHBsYW5lIHN0YXRlLgo+IC0gKi8KPiAtdm9pZCBfX2RybV9hdG9t aWNfaGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCQkJICAg ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RhdGUtPnBsYW5lID0g cGxhbmU7Cj4gLQlzdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKPiAtCj4gLQlz dGF0ZS0+YWxwaGEgPSBEUk1fQkxFTkRfQUxQSEFfT1BBUVVFOwo+IC0Jc3RhdGUtPnBpeGVsX2Js ZW5kX21vZGUgPSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSTsKPiAtCj4gLQlwbGFuZS0+c3RhdGUg PSBzdGF0ZTsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf cmVzZXQpOwo+IC0KPiAtLyoqCj4gLSAqIGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0IC0g ZGVmYXVsdCAmZHJtX3BsYW5lX2Z1bmNzLnJlc2V0IGhvb2sgZm9yIHBsYW5lcwo+IC0gKiBAcGxh bmU6IGRybSBwbGFuZQo+IC0gKgo+IC0gKiBSZXNldHMgdGhlIGF0b21pYyBzdGF0ZSBmb3IgQHBs YW5lIGJ5IGZyZWVpbmcgdGhlIHN0YXRlIHBvaW50ZXIgKHdoaWNoIG1pZ2h0Cj4gLSAqIGJlIE5V TEwsIGUuZy4gYXQgZHJpdmVyIGxvYWQgdGltZSkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgZW1wdHkg c3RhdGUgb2JqZWN0Lgo+IC0gKi8KPiAtdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNl dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAtewo+IC0JaWYgKHBsYW5lLT5zdGF0ZSkKPiAt CQlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUtPnN0YXRlKTsK PiAtCj4gLQlrZnJlZShwbGFuZS0+c3RhdGUpOwo+IC0JcGxhbmUtPnN0YXRlID0ga3phbGxvYyhz aXplb2YoKnBsYW5lLT5zdGF0ZSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKHBsYW5lLT5zdGF0ZSkK PiAtCQlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHBsYW5lLCBwbGFuZS0+c3RhdGUp Owo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQpOwo+ IC0KPiAtLyoqCj4gLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRl IC0gY29weSBhdG9taWMgcGxhbmUgc3RhdGUKPiAtICogQHBsYW5lOiBwbGFuZSBvYmplY3QKPiAt ICogQHN0YXRlOiBhdG9taWMgcGxhbmUgc3RhdGUKPiAtICoKPiAtICogQ29waWVzIGF0b21pYyBz dGF0ZSBmcm9tIGEgcGxhbmUncyBjdXJyZW50IHN0YXRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IKPiAt ICogZHJpdmVycyB0aGF0IHN1YmNsYXNzIHRoZSBwbGFuZSBzdGF0ZS4KPiAtICovCj4gLXZvaWQg X19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gLQkJCQkJICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ IC17Cj4gLQltZW1jcHkoc3RhdGUsIHBsYW5lLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOwo+IC0K PiAtCWlmIChzdGF0ZS0+ZmIpCj4gLQkJZHJtX2ZyYW1lYnVmZmVyX2dldChzdGF0ZS0+ZmIpOwo+ IC0KPiAtCXN0YXRlLT5mZW5jZSA9IE5VTEw7Cj4gLQlzdGF0ZS0+Y29tbWl0ID0gTlVMTDsKPiAt fQo+IC1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0 YXRlKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVf c3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0ZSBob29rCj4gLSAqIEBwbGFuZTogZHJtIHBs YW5lCj4gLSAqCj4gLSAqIERlZmF1bHQgcGxhbmUgc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9yIGRy aXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiAtICogc3ViY2xhc3NlZCBwbGFuZSBz dGF0ZSBzdHJ1Y3R1cmUuCj4gLSAqLwo+IC1zdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoKPiAtZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKPiAtCj4gLQlpZiAo V0FSTl9PTighcGxhbmUtPnN0YXRlKSkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlzdGF0ZSA9 IGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKHN0YXRlKQo+IC0J CV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCBzdGF0ZSk7 Cj4gLQo+IC0JcmV0dXJuIHN0YXRlOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19o ZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKTsKPiAtCj4gLS8qKgo+IC0gKiBfX2RybV9hdG9t aWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUgLSByZWxlYXNlIHBsYW5lIHN0YXRlCj4gLSAq IEBzdGF0ZTogcGxhbmUgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKPiAtICoKPiAtICogUmVsZWFz ZXMgYWxsIHJlc291cmNlcyBzdG9yZWQgaW4gdGhlIHBsYW5lIHN0YXRlIHdpdGhvdXQgYWN0dWFs bHkgZnJlZWluZwo+IC0gKiB0aGUgbWVtb3J5IG9mIHRoZSBwbGFuZSBzdGF0ZS4gVGhpcyBpcyB1 c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUKPiAtICogcGxhbmUgc3RhdGUuCj4g LSAqLwo+IC12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0JaWYgKHN0YXRlLT5mYikKPiAtCQlk cm1fZnJhbWVidWZmZXJfcHV0KHN0YXRlLT5mYik7Cj4gLQo+IC0JaWYgKHN0YXRlLT5mZW5jZSkK PiAtCQlkbWFfZmVuY2VfcHV0KHN0YXRlLT5mZW5jZSk7Cj4gLQo+IC0JaWYgKHN0YXRlLT5jb21t aXQpCj4gLQkJZHJtX2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKPiAtfQo+IC1FWFBP UlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSk7Cj4gLQo+ IC0vKioKPiAtICogZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSAtIGRlZmF1 bHQgc3RhdGUgZGVzdHJveSBob29rCj4gLSAqIEBwbGFuZTogZHJtIHBsYW5lCj4gLSAqIEBzdGF0 ZTogcGxhbmUgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKPiAtICoKPiAtICogRGVmYXVsdCBwbGFu ZSBzdGF0ZSBkZXN0cm95IGhvb2sgZm9yIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBv d24KPiAtICogc3ViY2xhc3NlZCBwbGFuZSBzdGF0ZSBzdHJ1Y3R1cmUuCj4gLSAqLwo+IC12b2lk IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gLQkJCQkJICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gLXsKPiAt CV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdGF0ZSk7Cj4gLQlrZnJl ZShzdGF0ZSk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k ZXN0cm95X3N0YXRlKTsKPiAtCj4gLS8qKgo+IC0gKiBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9yZXNldCAtIHJlc2V0IHN0YXRlIG9uIGNvbm5lY3Rvcgo+IC0gKiBAY29ubmVjdG9yOiBk cm0gY29ubmVjdG9yCj4gLSAqIEBjb25uX3N0YXRlOiBjb25uZWN0b3Igc3RhdGUgdG8gYXNzaWdu Cj4gLSAqCj4gLSAqIEluaXRpYWxpemVzIHRoZSBuZXdseSBhbGxvY2F0ZWQgQGNvbm5fc3RhdGUg YW5kIGFzc2lnbnMgaXQgdG8KPiAtICogdGhlICZkcm1fY29uZWN0b3ItPnN0YXRlIHBvaW50ZXIg b2YgQGNvbm5lY3RvciwgdXN1YWxseSByZXF1aXJlZCB3aGVuCj4gLSAqIGluaXRpYWxpemluZyB0 aGUgZHJpdmVycyBvciB3aGVuIGNhbGxlZCBmcm9tIHRoZSAmZHJtX2Nvbm5lY3Rvcl9mdW5jcy5y ZXNldAo+IC0gKiBob29rLgo+IC0gKgo+IC0gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0 aGF0IHN1YmNsYXNzIHRoZSBjb25uZWN0b3Igc3RhdGUuCj4gLSAqLwo+IC12b2lkCj4gLV9fZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gLQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUp Cj4gLXsKPiAtCWlmIChjb25uX3N0YXRlKQo+IC0JCWNvbm5fc3RhdGUtPmNvbm5lY3RvciA9IGNv bm5lY3RvcjsKPiAtCj4gLQljb25uZWN0b3ItPnN0YXRlID0gY29ubl9zdGF0ZTsKPiAtfQo+IC1F WFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0KTsKPiAtCj4g LS8qKgo+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQgLSBkZWZhdWx0ICZk cm1fY29ubmVjdG9yX2Z1bmNzLnJlc2V0IGhvb2sgZm9yIGNvbm5lY3RvcnMKPiAtICogQGNvbm5l Y3RvcjogZHJtIGNvbm5lY3Rvcgo+IC0gKgo+IC0gKiBSZXNldHMgdGhlIGF0b21pYyBzdGF0ZSBm b3IgQGNvbm5lY3RvciBieSBmcmVlaW5nIHRoZSBzdGF0ZSBwb2ludGVyICh3aGljaAo+IC0gKiBt aWdodCBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0aW5nIGEg bmV3IGVtcHR5IHN0YXRlCj4gLSAqIG9iamVjdC4KPiAtICovCj4gLXZvaWQgZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4g LXsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlID0KPiAtCQlremFs bG9jKHNpemVvZigqY29ubl9zdGF0ZSksIEdGUF9LRVJORUwpOwo+IC0KPiAtCWlmIChjb25uZWN0 b3ItPnN0YXRlKQo+IC0JCV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUoY29ubmVjdG9yLT5zdGF0ZSk7Cj4gLQo+IC0Ja2ZyZWUoY29ubmVjdG9yLT5zdGF0ZSk7Cj4g LQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChjb25uZWN0b3IsIGNvbm5fc3Rh dGUpOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jl c2V0KTsKPiAtCj4gLS8qKgo+IC0gKiBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBs aWNhdGVfc3RhdGUgLSBjb3B5IGF0b21pYyBjb25uZWN0b3Igc3RhdGUKPiAtICogQGNvbm5lY3Rv cjogY29ubmVjdG9yIG9iamVjdAo+IC0gKiBAc3RhdGU6IGF0b21pYyBjb25uZWN0b3Igc3RhdGUK PiAtICoKPiAtICogQ29waWVzIGF0b21pYyBzdGF0ZSBmcm9tIGEgY29ubmVjdG9yJ3MgY3VycmVu dCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yCj4gLSAqIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0 aGUgY29ubmVjdG9yIHN0YXRlLgo+IC0gKi8KPiAtdm9pZAo+IC1fX2RybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiAtCQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKQo+IC17Cj4g LQltZW1jcHkoc3RhdGUsIGNvbm5lY3Rvci0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKPiAtCWlm IChzdGF0ZS0+Y3J0YykKPiAtCQlkcm1fY29ubmVjdG9yX2dldChjb25uZWN0b3IpOwo+IC0Jc3Rh dGUtPmNvbW1pdCA9IE5VTEw7Cj4gLQo+IC0JLyogRG9uJ3QgY29weSBvdmVyIGEgd3JpdGViYWNr IGpvYiwgdGhleSBhcmUgdXNlZCBvbmx5IG9uY2UgKi8KPiAtCXN0YXRlLT53cml0ZWJhY2tfam9i ID0gTlVMTDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSAtIGRlZmF1bHQgc3RhdGUgZHVwbGljYXRlIGhvb2sK PiAtICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3Rvcgo+IC0gKgo+IC0gKiBEZWZhdWx0IGNvbm5l Y3RvciBzdGF0ZSBkdXBsaWNhdGUgaG9vayBmb3IgZHJpdmVycyB3aGljaCBkb24ndCBoYXZlIHRo ZWlyIG93bgo+IC0gKiBzdWJjbGFzc2VkIGNvbm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUuCj4gLSAq Lwo+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqCj4gLWRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK PiAtewo+IC0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlOwo+IC0KPiAtCWlmIChX QVJOX09OKCFjb25uZWN0b3ItPnN0YXRlKSkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlzdGF0 ZSA9IGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKHN0YXRlKQo+ IC0JCV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShjb25uZWN0 b3IsIHN0YXRlKTsKPiAtCj4gLQlyZXR1cm4gc3RhdGU7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKTsKPiAtCj4gLS8qKgo+ IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUgLSBkdXBsaWNhdGUgYW4gYXRv bWljIHN0YXRlIG9iamVjdAo+IC0gKiBAZGV2OiBEUk0gZGV2aWNlCj4gLSAqIEBjdHg6IGxvY2sg YWNxdWlzaXRpb24gY29udGV4dAo+IC0gKgo+IC0gKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGN1cnJl bnQgYXRvbWljIHN0YXRlIGJ5IGxvb3Bpbmcgb3ZlciBhbGwgb2JqZWN0cyBhbmQKPiAtICogZHVw bGljYXRpbmcgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZXMuIFRoaXMgaXMgdXNlZCBmb3IgZXhhbXBs ZSBieSBzdXNwZW5kLwo+IC0gKiByZXN1bWUgc3VwcG9ydCBjb2RlIHRvIHNhdmUgdGhlIHN0YXRl IHByaW9yIHRvIHN1c3BlbmQgc3VjaCB0aGF0IGl0IGNhbgo+IC0gKiBiZSByZXN0b3JlZCB1cG9u IHJlc3VtZS4KPiAtICoKPiAtICogTm90ZSB0aGF0IHRoaXMgdHJlYXRzIGF0b21pYyBzdGF0ZSBh cyBwZXJzaXN0ZW50IGJldHdlZW4gc2F2ZSBhbmQgcmVzdG9yZS4KPiAtICogRHJpdmVycyBtdXN0 IG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYW5kIHdvbid0IHJlc3VsdCBpbiBjb25m dXNpb24KPiAtICogb3IgZXJyb25lb3VzIGJlaGF2aW91ci4KPiAtICoKPiAtICogTm90ZSB0aGF0 IGlmIGNhbGxlcnMgaGF2ZW4ndCBhbHJlYWR5IGFjcXVpcmVkIGFsbCBtb2Rlc2V0IGxvY2tzIHRo aXMgbWlnaHQKPiAtICogcmV0dXJuIC1FREVBRExLLCB3aGljaCBtdXN0IGJlIGhhbmRsZWQgYnkg Y2FsbGluZyBkcm1fbW9kZXNldF9iYWNrb2ZmKCkuCj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAq IEEgcG9pbnRlciB0byB0aGUgY29weSBvZiB0aGUgYXRvbWljIHN0YXRlIG9iamVjdCBvbiBzdWNj ZXNzIG9yIGFuCj4gLSAqIEVSUl9QVFIoKS1lbmNvZGVkIGVycm9yIGNvZGUgb24gZmFpbHVyZS4K PiAtICoKPiAtICogU2VlIGFsc286Cj4gLSAqIGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoKSwg ZHJtX2F0b21pY19oZWxwZXJfcmVzdW1lKCkKPiAtICovCj4gLXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICoKPiAtZHJtX2F0b21pY19oZWxwZXJfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gLQkJCQkgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KQo+ IC17Cj4gLQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubjsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0 ZXI7Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKPiAtCWludCBlcnIgPSAwOwo+IC0KPiAtCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxv YyhkZXYpOwo+IC0JaWYgKCFzdGF0ZSkKPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAt Cj4gLQlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Cj4gLQo+IC0JZHJtX2Zvcl9lYWNoX2NydGMo Y3J0YywgZGV2KSB7Cj4gLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0K PiAtCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7 Cj4gLQkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkgewo+IC0JCQllcnIgPSBQVFJfRVJSKGNydGNf c3RhdGUpOwo+IC0JCQlnb3RvIGZyZWU7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWRybV9mb3JfZWFj aF9wbGFuZShwbGFuZSwgZGV2KSB7Cj4gLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGU7Cj4gLQo+IC0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUo c3RhdGUsIHBsYW5lKTsKPiAtCQlpZiAoSVNfRVJSKHBsYW5lX3N0YXRlKSkgewo+IC0JCQllcnIg PSBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKPiAtCQkJZ290byBmcmVlOwo+IC0JCX0KPiAtCX0KPiAt Cj4gLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbihkZXYsICZjb25uX2l0ZXIpOwo+IC0J ZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm4sICZjb25uX2l0ZXIpIHsKPiAtCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiAtCj4gLQkJY29ubl9zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7Cj4gLQkJaWYgKElT X0VSUihjb25uX3N0YXRlKSkgewo+IC0JCQllcnIgPSBQVFJfRVJSKGNvbm5fc3RhdGUpOwo+IC0J CQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Cj4gLQkJCWdvdG8gZnJl ZTsKPiAtCQl9Cj4gLQl9Cj4gLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRl cik7Cj4gLQo+IC0JLyogY2xlYXIgdGhlIGFjcXVpcmUgY29udGV4dCBzbyB0aGF0IGl0IGlzbid0 IGFjY2lkZW50YWxseSByZXVzZWQgKi8KPiAtCXN0YXRlLT5hY3F1aXJlX2N0eCA9IE5VTEw7Cj4g LQo+IC1mcmVlOgo+IC0JaWYgKGVyciA8IDApIHsKPiAtCQlkcm1fYXRvbWljX3N0YXRlX3B1dChz dGF0ZSk7Cj4gLQkJc3RhdGUgPSBFUlJfUFRSKGVycik7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHN0 YXRlOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfZHVwbGljYXRlX3N0 YXRlKTsKPiAtCj4gLS8qKgo+IC0gKiBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0 cm95X3N0YXRlIC0gcmVsZWFzZSBjb25uZWN0b3Igc3RhdGUKPiAtICogQHN0YXRlOiBjb25uZWN0 b3Igc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKPiAtICoKPiAtICogUmVsZWFzZXMgYWxsIHJlc291 cmNlcyBzdG9yZWQgaW4gdGhlIGNvbm5lY3RvciBzdGF0ZSB3aXRob3V0IGFjdHVhbGx5Cj4gLSAq IGZyZWVpbmcgdGhlIG1lbW9yeSBvZiB0aGUgY29ubmVjdG9yIHN0YXRlLiBUaGlzIGlzIHVzZWZ1 bCBmb3IgZHJpdmVycyB0aGF0Cj4gLSAqIHN1YmNsYXNzIHRoZSBjb25uZWN0b3Igc3RhdGUuCj4g LSAqLwo+IC12b2lkCj4gLV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUoc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlpZiAoc3RhdGUt PmNydGMpCj4gLQkJZHJtX2Nvbm5lY3Rvcl9wdXQoc3RhdGUtPmNvbm5lY3Rvcik7Cj4gLQo+IC0J aWYgKHN0YXRlLT5jb21taXQpCj4gLQkJZHJtX2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0 KTsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rl c3Ryb3lfc3RhdGUpOwo+IC0KPiAtLyoqCj4gLSAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKPiAtICogQGNvbm5l Y3RvcjogZHJtIGNvbm5lY3Rvcgo+IC0gKiBAc3RhdGU6IGNvbm5lY3RvciBzdGF0ZSBvYmplY3Qg dG8gcmVsZWFzZQo+IC0gKgo+IC0gKiBEZWZhdWx0IGNvbm5lY3RvciBzdGF0ZSBkZXN0cm95IGhv b2sgZm9yIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiAtICogc3ViY2xhc3Nl ZCBjb25uZWN0b3Igc3RhdGUgc3RydWN0dXJlLgo+IC0gKi8KPiAtdm9pZCBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+IC0JCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKQo+IC17Cj4g LQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0YXRlKTsKPiAt CWtmcmVlKHN0YXRlKTsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kZXN0cm95X3N0YXRlKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1fYXRvbWljX2hlbHBl cl9sZWdhY3lfZ2FtbWFfc2V0IC0gc2V0IHRoZSBsZWdhY3kgZ2FtbWEgY29ycmVjdGlvbiB0YWJs ZQo+IC0gKiBAY3J0YzogQ1JUQyBvYmplY3QKPiAtICogQHJlZDogcmVkIGNvcnJlY3Rpb24gdGFi bGUKPiAtICogQGdyZWVuOiBncmVlbiBjb3JyZWN0aW9uIHRhYmxlCj4gLSAqIEBibHVlOiBncmVl biBjb3JyZWN0aW9uIHRhYmxlCj4gLSAqIEBzaXplOiBzaXplIG9mIHRoZSB0YWJsZXMKPiAtICog QGN0eDogbG9jayBhY3F1aXJlIGNvbnRleHQKPiAtICoKPiAtICogSW1wbGVtZW50cyBzdXBwb3J0 IGZvciBsZWdhY3kgZ2FtbWEgY29ycmVjdGlvbiB0YWJsZSBmb3IgZHJpdmVycwo+IC0gKiB0aGF0 IHN1cHBvcnQgY29sb3IgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSBERUdBTU1BX0xVVC9HQU1NQV9M VVQKPiAtICogcHJvcGVydGllcy4gU2VlIGRybV9jcnRjX2VuYWJsZV9jb2xvcl9tZ210KCkgYW5k IHRoZSBjb250YWluaW5nIGNoYXB0ZXIgZm9yCj4gLSAqIGhvdyB0aGUgYXRvbWljIGNvbG9yIG1h bmFnZW1lbnQgYW5kIGdhbW1hIHRhYmxlcyB3b3JrLgo+IC0gKi8KPiAtaW50IGRybV9hdG9taWNf aGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0JCQkJICAg ICAgIHUxNiAqcmVkLCB1MTYgKmdyZWVuLCB1MTYgKmJsdWUsCj4gLQkJCQkgICAgICAgdWludDMy X3Qgc2l6ZSwKPiAtCQkJCSAgICAgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0 eCkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiAtCXN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiAtCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsKPiAtCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IE5VTEw7Cj4gLQlz dHJ1Y3QgZHJtX2NvbG9yX2x1dCAqYmxvYl9kYXRhOwo+IC0JaW50IGksIHJldCA9IDA7Cj4gLQli b29sIHJlcGxhY2VkOwo+IC0KPiAtCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhjcnRj LT5kZXYpOwo+IC0JaWYgKCFzdGF0ZSkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlibG9i ID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKGRldiwKPiAtCQkJCQlzaXplb2Yoc3RydWN0IGRy bV9jb2xvcl9sdXQpICogc2l6ZSwKPiAtCQkJCQlOVUxMKTsKPiAtCWlmIChJU19FUlIoYmxvYikp IHsKPiAtCQlyZXQgPSBQVFJfRVJSKGJsb2IpOwo+IC0JCWJsb2IgPSBOVUxMOwo+IC0JCWdvdG8g ZmFpbDsKPiAtCX0KPiAtCj4gLQkvKiBQcmVwYXJlIEdBTU1BX0xVVCB3aXRoIHRoZSBsZWdhY3kg dmFsdWVzLiAqLwo+IC0JYmxvYl9kYXRhID0gYmxvYi0+ZGF0YTsKPiAtCWZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspIHsKPiAtCQlibG9iX2RhdGFbaV0ucmVkID0gcmVkW2ldOwo+IC0JCWJsb2Jf ZGF0YVtpXS5ncmVlbiA9IGdyZWVuW2ldOwo+IC0JCWJsb2JfZGF0YVtpXS5ibHVlID0gYmx1ZVtp XTsKPiAtCX0KPiAtCj4gLQlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Cj4gLQljcnRjX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gLQlpZiAoSVNfRVJS KGNydGNfc3RhdGUpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiAtCQlnb3Rv IGZhaWw7Cj4gLQl9Cj4gLQo+IC0JLyogUmVzZXQgREVHQU1NQV9MVVQgYW5kIENUTSBwcm9wZXJ0 aWVzLiAqLwo+IC0JcmVwbGFjZWQgID0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfYmxvYigmY3J0Y19z dGF0ZS0+ZGVnYW1tYV9sdXQsIE5VTEwpOwo+IC0JcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3Jl cGxhY2VfYmxvYigmY3J0Y19zdGF0ZS0+Y3RtLCBOVUxMKTsKPiAtCXJlcGxhY2VkIHw9IGRybV9w cm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmdhbW1hX2x1dCwgYmxvYik7Cj4gLQlj cnRjX3N0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgfD0gcmVwbGFjZWQ7Cj4gLQo+IC0JcmV0ID0g ZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+IC0KPiAtZmFpbDoKPiAtCWRybV9hdG9taWNfc3Rh dGVfcHV0KHN0YXRlKTsKPiAtCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChibG9iKTsKPiAtCXJldHVy biByZXQ7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2Ft bWFfc2V0KTsKPiAtCj4gLS8qKgo+IC0gKiBfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfZHVw bGljYXRlX3N0YXRlIC0gY29weSBhdG9taWMgcHJpdmF0ZSBzdGF0ZQo+IC0gKiBAb2JqOiBDUlRD IG9iamVjdAo+IC0gKiBAc3RhdGU6IG5ldyBwcml2YXRlIG9iamVjdCBzdGF0ZQo+IC0gKgo+IC0g KiBDb3BpZXMgYXRvbWljIHN0YXRlIGZyb20gYSBwcml2YXRlIG9iamVjdHMncyBjdXJyZW50IHN0 YXRlIGFuZCByZXNldHMgaW5mZXJyZWQgdmFsdWVzLgo+IC0gKiBUaGlzIGlzIHVzZWZ1bCBmb3Ig ZHJpdmVycyB0aGF0IHN1YmNsYXNzIHRoZSBwcml2YXRlIHN0YXRlLgo+IC0gKi8KPiAtdm9pZCBf X2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJt X3ByaXZhdGVfb2JqICpvYmosCj4gLQkJCQkJCSAgICAgc3RydWN0IGRybV9wcml2YXRlX3N0YXRl ICpzdGF0ZSkKPiAtewo+IC0JbWVtY3B5KHN0YXRlLCBvYmotPnN0YXRlLCBzaXplb2YoKnN0YXRl KSk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2Jq X2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVs cGVyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uM2JhOTk2 MDY5ZDY5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X3N0YXRlX2hlbHBlci5jCj4gQEAgLTAsMCArMSw2MDEgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChDKSAyMDE4IEludGVsIENvcnAuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZSBpbmNsdWRlZCBpbgo+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERF UihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKPiAr ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCj4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ICsgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqIFJvYiBDbGFyayA8cm9i ZGNsYXJrQGdtYWlsLmNvbT4KPiArICogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZnds bC5jaD4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVy Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGxh bmUuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiArCj4g Ky8qKgo+ICsgKiBET0M6IGF0b21pYyBzdGF0ZSByZXNldCBhbmQgaW5pdGlhbGl6YXRpb24KPiAr ICoKPiArICogQm90aCB0aGUgZHJtIGNvcmUgYW5kIHRoZSBhdG9taWMgaGVscGVycyBhc3N1bWUg dGhhdCB0aGVyZSBpcyBhbHdheXMgdGhlIGZ1bGwKPiArICogYW5kIGNvcnJlY3QgYXRvbWljIHNv ZnR3YXJlIHN0YXRlIGZvciBhbGwgY29ubmVjdG9ycywgQ1JUQ3MgYW5kIHBsYW5lcwo+ICsgKiBh dmFpbGFibGUuIFdoaWNoIGlzIGEgYml0IGEgcHJvYmxlbSBvbiBkcml2ZXIgbG9hZCBhbmQgYWxz byBhZnRlciBzeXN0ZW0KPiArICogc3VzcGVuZC4gT25lIHdheSB0byBzb2x2ZSB0aGlzIGlzIHRv IGhhdmUgYSBoYXJkd2FyZSBzdGF0ZSByZWFkLW91dAo+ICsgKiBpbmZyYXN0cnVjdHVyZSB3aGlj aCByZWNvbnN0cnVjdHMgdGhlIGZ1bGwgc29mdHdhcmUgc3RhdGUgKGUuZy4gdGhlIGk5MTUKPiAr ICogZHJpdmVyKS4KPiArICoKPiArICogVGhlIHNpbXBsZXIgc29sdXRpb24gaXMgdG8ganVzdCBy ZXNldCB0aGUgc29mdHdhcmUgc3RhdGUgdG8gZXZlcnl0aGluZyBvZmYsCj4gKyAqIHdoaWNoIGlz IGVhc2llc3QgdG8gZG8gYnkgY2FsbGluZyBkcm1fbW9kZV9jb25maWdfcmVzZXQoKS4gVG8gZmFj aWxpdGF0ZSB0aGlzCj4gKyAqIHRoZSBhdG9taWMgaGVscGVycyBwcm92aWRlIGRlZmF1bHQgcmVz ZXQgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgaG9va3MuCj4gKyAqCj4gKyAqIE9uIHRoZSB1cHNp ZGUgdGhlIHByZWNpc2Ugc3RhdGUgdHJhY2tpbmcgb2YgYXRvbWljIHNpbXBsaWZpZXMgc3lzdGVt IHN1c3BlbmQKPiArICogYW5kIHJlc3VtZSBhIGxvdC4gRm9yIGRyaXZlcnMgdXNpbmcgZHJtX21v ZGVfY29uZmlnX3Jlc2V0KCkgYSBjb21wbGV0ZSByZWNpcGUKPiArICogaXMgaW1wbGVtZW50ZWQg aW4gZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZCgpIGFuZCBkcm1fYXRvbWljX2hlbHBlcl9yZXN1 bWUoKS4KPiArICogRm9yIG90aGVyIGRyaXZlcnMgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgc3Bs aXQgb3V0LCBzZWUgdGhlIGRvY3VtZW50YXRpb24KPiArICogZm9yIHRoZXNlIGZ1bmN0aW9ucy4K PiArICovCj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCAtIGRl ZmF1bHQgJmRybV9jcnRjX2Z1bmNzLnJlc2V0IGhvb2sgZm9yIENSVENzCj4gKyAqIEBjcnRjOiBk cm0gQ1JUQwo+ICsgKgo+ICsgKiBSZXNldHMgdGhlIGF0b21pYyBzdGF0ZSBmb3IgQGNydGMgYnkg ZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAod2hpY2ggbWlnaHQKPiArICogYmUgTlVMTCwgZS5n LiBhdCBkcml2ZXIgbG9hZCB0aW1lKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBlbXB0eSBzdGF0ZSBv YmplY3QuCj4gKyAqLwo+ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlpZiAoY3J0Yy0+c3RhdGUpCj4gKwkJX19kcm1fYXRv bWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICsKPiArCWtmcmVl KGNydGMtPnN0YXRlKTsKPiArCWNydGMtPnN0YXRlID0ga3phbGxvYyhzaXplb2YoKmNydGMtPnN0 YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gKwo+ICsJaWYgKGNydGMtPnN0YXRlKQo+ICsJCWNydGMtPnN0 YXRlLT5jcnRjID0gY3J0YzsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVy X2NydGNfcmVzZXQpOwo+ICsKPiArLyoqCj4gKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19k dXBsaWNhdGVfc3RhdGUgLSBjb3B5IGF0b21pYyBDUlRDIHN0YXRlCj4gKyAqIEBjcnRjOiBDUlRD IG9iamVjdAo+ICsgKiBAc3RhdGU6IGF0b21pYyBDUlRDIHN0YXRlCj4gKyAqCj4gKyAqIENvcGll cyBhdG9taWMgc3RhdGUgZnJvbSBhIENSVEMncyBjdXJyZW50IHN0YXRlIGFuZCByZXNldHMgaW5m ZXJyZWQgdmFsdWVzLgo+ICsgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IHN1YmNs YXNzIHRoZSBDUlRDIHN0YXRlLgo+ICsgKi8KPiArdm9pZCBfX2RybV9hdG9taWNfaGVscGVyX2Ny dGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCQkgICAgICBz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwltZW1jcHkoc3RhdGUsIGNydGMt PnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7Cj4gKwo+ICsJaWYgKHN0YXRlLT5tb2RlX2Jsb2IpCj4g KwkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5tb2RlX2Jsb2IpOwo+ICsJaWYgKHN0YXRl LT5kZWdhbW1hX2x1dCkKPiArCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoc3RhdGUtPmRlZ2FtbWFf bHV0KTsKPiArCWlmIChzdGF0ZS0+Y3RtKQo+ICsJCWRybV9wcm9wZXJ0eV9ibG9iX2dldChzdGF0 ZS0+Y3RtKTsKPiArCWlmIChzdGF0ZS0+Z2FtbWFfbHV0KQo+ICsJCWRybV9wcm9wZXJ0eV9ibG9i X2dldChzdGF0ZS0+Z2FtbWFfbHV0KTsKPiArCXN0YXRlLT5tb2RlX2NoYW5nZWQgPSBmYWxzZTsK PiArCXN0YXRlLT5hY3RpdmVfY2hhbmdlZCA9IGZhbHNlOwo+ICsJc3RhdGUtPnBsYW5lc19jaGFu Z2VkID0gZmFsc2U7Cj4gKwlzdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkID0gZmFsc2U7Cj4gKwlz dGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkID0gZmFsc2U7Cj4gKwlzdGF0ZS0+enBvc19jaGFuZ2Vk ID0gZmFsc2U7Cj4gKwlzdGF0ZS0+Y29tbWl0ID0gTlVMTDsKPiArCXN0YXRlLT5ldmVudCA9IE5V TEw7Cj4gKwlzdGF0ZS0+cGFnZWZsaXBfZmxhZ3MgPSAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo X19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gKwo+ICsvKioKPiAr ICogZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRl IGR1cGxpY2F0ZSBob29rCj4gKyAqIEBjcnRjOiBkcm0gQ1JUQwo+ICsgKgo+ICsgKiBEZWZhdWx0 IENSVEMgc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9yIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0 aGVpciBvd24KPiArICogc3ViY2xhc3NlZCBDUlRDIHN0YXRlIHN0cnVjdHVyZS4KPiArICovCj4g K3N0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCj4gK2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGlj YXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZTsKPiArCj4gKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQo+ICsJCXJl dHVybiBOVUxMOwo+ICsKPiArCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tF Uk5FTCk7Cj4gKwlpZiAoc3RhdGUpCj4gKwkJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxp Y2F0ZV9zdGF0ZShjcnRjLCBzdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIHN0YXRlOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUpOwo+ICsK PiArLyoqCj4gKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlIC0gcmVs ZWFzZSBDUlRDIHN0YXRlCj4gKyAqIEBzdGF0ZTogQ1JUQyBzdGF0ZSBvYmplY3QgdG8gcmVsZWFz ZQo+ICsgKgo+ICsgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIHN0b3JlZCBpbiB0aGUgQ1JUQyBz dGF0ZSB3aXRob3V0IGFjdHVhbGx5IGZyZWVpbmcKPiArICogdGhlIG1lbW9yeSBvZiB0aGUgQ1JU QyBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUKPiAr ICogQ1JUQyBzdGF0ZS4KPiArICovCj4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rl c3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJaWYgKHN0 YXRlLT5jb21taXQpIHsKPiArCQkvKgo+ICsJCSAqIEluIHRoZSBldmVudCB0aGF0IGEgbm9uLWJs b2NraW5nIGNvbW1pdCByZXR1cm5zCj4gKwkJICogLUVSRVNUQVJUU1lTIGJlZm9yZSB0aGUgY29t bWl0X3RhaWwgd29yayBpcyBxdWV1ZWQsIHdlIHdpbGwKPiArCQkgKiBoYXZlIGFuIGV4dHJhIHJl ZmVyZW5jZSB0byB0aGUgY29tbWl0IG9iamVjdC4gUmVsZWFzZSBpdCwgaWYKPiArCQkgKiB0aGUg ZXZlbnQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIGJ5IHRoZSB3b3JrZXIuCj4gKwkJICoKPiArCQkg KiBzdGF0ZS0+ZXZlbnQgbWF5IGJlIGZyZWVkLCBzbyB3ZSBjYW4ndCBkaXJlY3RseSBsb29rIGF0 Cj4gKwkJICogc3RhdGUtPmV2ZW50LT5iYXNlLmNvbXBsZXRpb24uCj4gKwkJICovCj4gKwkJaWYg KHN0YXRlLT5ldmVudCAmJiBzdGF0ZS0+Y29tbWl0LT5hYm9ydF9jb21wbGV0aW9uKQo+ICsJCQlk cm1fY3J0Y19jb21taXRfcHV0KHN0YXRlLT5jb21taXQpOwo+ICsKPiArCQlrZnJlZShzdGF0ZS0+ Y29tbWl0LT5ldmVudCk7Cj4gKwkJc3RhdGUtPmNvbW1pdC0+ZXZlbnQgPSBOVUxMOwo+ICsKPiAr CQlkcm1fY3J0Y19jb21taXRfcHV0KHN0YXRlLT5jb21taXQpOwo+ICsJfQo+ICsKPiArCWRybV9w cm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+bW9kZV9ibG9iKTsKPiArCWRybV9wcm9wZXJ0eV9ibG9i X3B1dChzdGF0ZS0+ZGVnYW1tYV9sdXQpOwo+ICsJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHN0YXRl LT5jdG0pOwo+ICsJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHN0YXRlLT5nYW1tYV9sdXQpOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUp Owo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSAt IGRlZmF1bHQgc3RhdGUgZGVzdHJveSBob29rCj4gKyAqIEBjcnRjOiBkcm0gQ1JUQwo+ICsgKiBA c3RhdGU6IENSVEMgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKPiArICoKPiArICogRGVmYXVsdCBD UlRDIHN0YXRlIGRlc3Ryb3kgaG9vayBmb3IgZHJpdmVycyB3aGljaCBkb24ndCBoYXZlIHRoZWly IG93bgo+ICsgKiBzdWJjbGFzc2VkIENSVEMgc3RhdGUgc3RydWN0dXJlLgo+ICsgKi8KPiArdm9p ZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpj cnRjLAo+ICsJCQkJCSAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJX19k cm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwo+ICsJa2ZyZWUoc3Rh dGUpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlKTsKPiArCj4gKy8qKgo+ICsgKiBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0 IC0gcmVzZXRzIHBsYW5lcyBzdGF0ZSB0byBkZWZhdWx0IHZhbHVlcwo+ICsgKiBAcGxhbmU6IHBs YW5lIG9iamVjdCwgbXVzdCBub3QgYmUgTlVMTAo+ICsgKiBAc3RhdGU6IGF0b21pYyBwbGFuZSBz dGF0ZSwgbXVzdCBub3QgYmUgTlVMTAo+ICsgKgo+ICsgKiBJbml0aWFsaXplcyBwbGFuZSBzdGF0 ZSB0byBkZWZhdWx0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IHN1YmNsYXNzCj4g KyAqIHRoZSBwbGFuZSBzdGF0ZS4KPiArICovCj4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9w bGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAgICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0YXRlLT5wbGFuZSA9IHBsYW5lOwo+ICsJ c3RhdGUtPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7Cj4gKwo+ICsJc3RhdGUtPmFscGhh ID0gRFJNX0JMRU5EX0FMUEhBX09QQVFVRTsKPiArCXN0YXRlLT5waXhlbF9ibGVuZF9tb2RlID0g RFJNX01PREVfQkxFTkRfUFJFTVVMVEk7Cj4gKwo+ICsJcGxhbmUtPnN0YXRlID0gc3RhdGU7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KTsKPiAr Cj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCAtIGRlZmF1bHQgJmRy bV9wbGFuZV9mdW5jcy5yZXNldCBob29rIGZvciBwbGFuZXMKPiArICogQHBsYW5lOiBkcm0gcGxh bmUKPiArICoKPiArICogUmVzZXRzIHRoZSBhdG9taWMgc3RhdGUgZm9yIEBwbGFuZSBieSBmcmVl aW5nIHRoZSBzdGF0ZSBwb2ludGVyICh3aGljaCBtaWdodAo+ICsgKiBiZSBOVUxMLCBlLmcuIGF0 IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0aW5nIGEgbmV3IGVtcHR5IHN0YXRlIG9iamVj dC4KPiArICovCj4gK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCWlmIChwbGFuZS0+c3RhdGUpCj4gKwkJX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gKwo+ICsJa2Zy ZWUocGxhbmUtPnN0YXRlKTsKPiArCXBsYW5lLT5zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpwbGFu ZS0+c3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChwbGFuZS0+c3RhdGUpCj4gKwkJX19kcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldChwbGFuZSwgcGxhbmUtPnN0YXRlKTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KTsKPiArCj4gKy8qKgo+ ICsgKiBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSAtIGNvcHkgYXRv bWljIHBsYW5lIHN0YXRlCj4gKyAqIEBwbGFuZTogcGxhbmUgb2JqZWN0Cj4gKyAqIEBzdGF0ZTog YXRvbWljIHBsYW5lIHN0YXRlCj4gKyAqCj4gKyAqIENvcGllcyBhdG9taWMgc3RhdGUgZnJvbSBh IHBsYW5lJ3MgY3VycmVudCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yCj4gKyAqIGRyaXZlcnMg dGhhdCBzdWJjbGFzcyB0aGUgcGxhbmUgc3RhdGUuCj4gKyAqLwo+ICt2b2lkIF9fZHJtX2F0b21p Y19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ ICsJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJbWVt Y3B5KHN0YXRlLCBwbGFuZS0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKPiArCj4gKwlpZiAoc3Rh dGUtPmZiKQo+ICsJCWRybV9mcmFtZWJ1ZmZlcl9nZXQoc3RhdGUtPmZiKTsKPiArCj4gKwlzdGF0 ZS0+ZmVuY2UgPSBOVUxMOwo+ICsJc3RhdGUtPmNvbW1pdCA9IE5VTEw7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gKwo+ ICsvKioKPiArICogZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlIC0gZGVm YXVsdCBzdGF0ZSBkdXBsaWNhdGUgaG9vawo+ICsgKiBAcGxhbmU6IGRybSBwbGFuZQo+ICsgKgo+ ICsgKiBEZWZhdWx0IHBsYW5lIHN0YXRlIGR1cGxpY2F0ZSBob29rIGZvciBkcml2ZXJzIHdoaWNo IGRvbid0IGhhdmUgdGhlaXIgb3duCj4gKyAqIHN1YmNsYXNzZWQgcGxhbmUgc3RhdGUgc3RydWN0 dXJlLgo+ICsgKi8KPiArc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCj4gK2RybV9hdG9taWNfaGVs cGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiArewo+ ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIXBs YW5lLT5zdGF0ZSkpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJc3RhdGUgPSBrbWFsbG9jKHNp emVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChzdGF0ZSkKPiArCQlfX2RybV9hdG9t aWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgc3RhdGUpOwo+ICsKPiArCXJl dHVybiBzdGF0ZTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gKwo+ICsvKioKPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9w bGFuZV9kZXN0cm95X3N0YXRlIC0gcmVsZWFzZSBwbGFuZSBzdGF0ZQo+ICsgKiBAc3RhdGU6IHBs YW5lIHN0YXRlIG9iamVjdCB0byByZWxlYXNlCj4gKyAqCj4gKyAqIFJlbGVhc2VzIGFsbCByZXNv dXJjZXMgc3RvcmVkIGluIHRoZSBwbGFuZSBzdGF0ZSB3aXRob3V0IGFjdHVhbGx5IGZyZWVpbmcK PiArICogdGhlIG1lbW9yeSBvZiB0aGUgcGxhbmUgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBk cml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlCj4gKyAqIHBsYW5lIHN0YXRlLgo+ICsgKi8KPiArdm9p ZCBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCWlmIChzdGF0ZS0+ZmIpCj4gKwkJZHJtX2ZyYW1lYnVm ZmVyX3B1dChzdGF0ZS0+ZmIpOwo+ICsKPiArCWlmIChzdGF0ZS0+ZmVuY2UpCj4gKwkJZG1hX2Zl bmNlX3B1dChzdGF0ZS0+ZmVuY2UpOwo+ICsKPiArCWlmIChzdGF0ZS0+Y29tbWl0KQo+ICsJCWRy bV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChf X2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUpOwo+ICsKPiArLyoqCj4gKyAq IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGRl c3Ryb3kgaG9vawo+ICsgKiBAcGxhbmU6IGRybSBwbGFuZQo+ICsgKiBAc3RhdGU6IHBsYW5lIHN0 YXRlIG9iamVjdCB0byByZWxlYXNlCj4gKyAqCj4gKyAqIERlZmF1bHQgcGxhbmUgc3RhdGUgZGVz dHJveSBob29rIGZvciBkcml2ZXJzIHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCj4gKyAqIHN1 YmNsYXNzZWQgcGxhbmUgc3RhdGUgc3RydWN0dXJlLgo+ICsgKi8KPiArdm9pZCBkcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJ CQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlfX2RybV9hdG9t aWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwo+ICsJa2ZyZWUoc3RhdGUpOwo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0 ZSk7Cj4gKwo+ICsvKioKPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQg LSByZXNldCBzdGF0ZSBvbiBjb25uZWN0b3IKPiArICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3Rv cgo+ICsgKiBAY29ubl9zdGF0ZTogY29ubmVjdG9yIHN0YXRlIHRvIGFzc2lnbgo+ICsgKgo+ICsg KiBJbml0aWFsaXplcyB0aGUgbmV3bHkgYWxsb2NhdGVkIEBjb25uX3N0YXRlIGFuZCBhc3NpZ25z IGl0IHRvCj4gKyAqIHRoZSAmZHJtX2NvbmVjdG9yLT5zdGF0ZSBwb2ludGVyIG9mIEBjb25uZWN0 b3IsIHVzdWFsbHkgcmVxdWlyZWQgd2hlbgo+ICsgKiBpbml0aWFsaXppbmcgdGhlIGRyaXZlcnMg b3Igd2hlbiBjYWxsZWQgZnJvbSB0aGUgJmRybV9jb25uZWN0b3JfZnVuY3MucmVzZXQKPiArICog aG9vay4KPiArICoKPiArICogVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFz cyB0aGUgY29ubmVjdG9yIHN0YXRlLgo+ICsgKi8KPiArdm9pZAo+ICtfX2RybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJ CQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ICt7Cj4gKwlp ZiAoY29ubl9zdGF0ZSkKPiArCQljb25uX3N0YXRlLT5jb25uZWN0b3IgPSBjb25uZWN0b3I7Cj4g Kwo+ICsJY29ubmVjdG9yLT5zdGF0ZSA9IGNvbm5fc3RhdGU7Cj4gK30KPiArRVhQT1JUX1NZTUJP TChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCk7Cj4gKwo+ICsvKioKPiArICog ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0IC0gZGVmYXVsdCAmZHJtX2Nvbm5lY3Rv cl9mdW5jcy5yZXNldCBob29rIGZvciBjb25uZWN0b3JzCj4gKyAqIEBjb25uZWN0b3I6IGRybSBj b25uZWN0b3IKPiArICoKPiArICogUmVzZXRzIHRoZSBhdG9taWMgc3RhdGUgZm9yIEBjb25uZWN0 b3IgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAod2hpY2gKPiArICogbWlnaHQgYmUgTlVM TCwgZS5nLiBhdCBkcml2ZXIgbG9hZCB0aW1lKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBlbXB0eSBz dGF0ZQo+ICsgKiBvYmplY3QuCj4gKyAqLwo+ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSA9Cj4gKwkJa3phbGxvYyhzaXplb2Yo KmNvbm5fc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCj4gKwlpZiAoY29ubmVjdG9yLT5zdGF0ZSkK PiArCQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKGNvbm5lY3Rv ci0+c3RhdGUpOwo+ICsKPiArCWtmcmVlKGNvbm5lY3Rvci0+c3RhdGUpOwo+ICsJX19kcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQoY29ubmVjdG9yLCBjb25uX3N0YXRlKTsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCk7Cj4gKwo+ ICsvKioKPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRl IC0gY29weSBhdG9taWMgY29ubmVjdG9yIHN0YXRlCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3Rv ciBvYmplY3QKPiArICogQHN0YXRlOiBhdG9taWMgY29ubmVjdG9yIHN0YXRlCj4gKyAqCj4gKyAq IENvcGllcyBhdG9taWMgc3RhdGUgZnJvbSBhIGNvbm5lY3RvcidzIGN1cnJlbnQgc3RhdGUuIFRo aXMgaXMgdXNlZnVsIGZvcgo+ICsgKiBkcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIGNvbm5lY3Rv ciBzdGF0ZS4KPiArICovCj4gK3ZvaWQKPiArX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCQkJ ICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJbWVtY3B5KHN0 YXRlLCBjb25uZWN0b3ItPnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7Cj4gKwlpZiAoc3RhdGUtPmNy dGMpCj4gKwkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9yKTsKPiArCXN0YXRlLT5jb21taXQg PSBOVUxMOwo+ICsKPiArCS8qIERvbid0IGNvcHkgb3ZlciBhIHdyaXRlYmFjayBqb2IsIHRoZXkg YXJlIHVzZWQgb25seSBvbmNlICovCj4gKwlzdGF0ZS0+d3JpdGViYWNrX2pvYiA9IE5VTEw7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k dXBsaWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0ZSBob29rCj4gKyAqIEBjb25u ZWN0b3I6IGRybSBjb25uZWN0b3IKPiArICoKPiArICogRGVmYXVsdCBjb25uZWN0b3Igc3RhdGUg ZHVwbGljYXRlIGhvb2sgZm9yIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiAr ICogc3ViY2xhc3NlZCBjb25uZWN0b3Igc3RhdGUgc3RydWN0dXJlLgo+ICsgKi8KPiArc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKgo+ICtkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZTsKPiArCj4gKwlpZiAoV0FSTl9PTighY29u bmVjdG9yLT5zdGF0ZSkpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJc3RhdGUgPSBrbWFsbG9j KHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChzdGF0ZSkKPiArCQlfX2RybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoY29ubmVjdG9yLCBzdGF0ZSk7 Cj4gKwo+ICsJcmV0dXJuIHN0YXRlOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0 b21pY19oZWxwZXJfZHVwbGljYXRlX3N0YXRlIC0gZHVwbGljYXRlIGFuIGF0b21pYyBzdGF0ZSBv YmplY3QKPiArICogQGRldjogRFJNIGRldmljZQo+ICsgKiBAY3R4OiBsb2NrIGFjcXVpc2l0aW9u IGNvbnRleHQKPiArICoKPiArICogTWFrZXMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGF0b21pYyBz dGF0ZSBieSBsb29waW5nIG92ZXIgYWxsIG9iamVjdHMgYW5kCj4gKyAqIGR1cGxpY2F0aW5nIHRo ZWlyIHJlc3BlY3RpdmUgc3RhdGVzLiBUaGlzIGlzIHVzZWQgZm9yIGV4YW1wbGUgYnkgc3VzcGVu ZC8KPiArICogcmVzdW1lIHN1cHBvcnQgY29kZSB0byBzYXZlIHRoZSBzdGF0ZSBwcmlvciB0byBz dXNwZW5kIHN1Y2ggdGhhdCBpdCBjYW4KPiArICogYmUgcmVzdG9yZWQgdXBvbiByZXN1bWUuCj4g KyAqCj4gKyAqIE5vdGUgdGhhdCB0aGlzIHRyZWF0cyBhdG9taWMgc3RhdGUgYXMgcGVyc2lzdGVu dCBiZXR3ZWVuIHNhdmUgYW5kIHJlc3RvcmUuCj4gKyAqIERyaXZlcnMgbXVzdCBtYWtlIHN1cmUg dGhhdCB0aGlzIGlzIHBvc3NpYmxlIGFuZCB3b24ndCByZXN1bHQgaW4gY29uZnVzaW9uCj4gKyAq IG9yIGVycm9uZW91cyBiZWhhdmlvdXIuCj4gKyAqCj4gKyAqIE5vdGUgdGhhdCBpZiBjYWxsZXJz IGhhdmVuJ3QgYWxyZWFkeSBhY3F1aXJlZCBhbGwgbW9kZXNldCBsb2NrcyB0aGlzIG1pZ2h0Cj4g KyAqIHJldHVybiAtRURFQURMSywgd2hpY2ggbXVzdCBiZSBoYW5kbGVkIGJ5IGNhbGxpbmcgZHJt X21vZGVzZXRfYmFja29mZigpLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBBIHBvaW50ZXIg dG8gdGhlIGNvcHkgb2YgdGhlIGF0b21pYyBzdGF0ZSBvYmplY3Qgb24gc3VjY2VzcyBvciBhbgo+ ICsgKiBFUlJfUFRSKCktZW5jb2RlZCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqCj4gKyAq IFNlZSBhbHNvOgo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9zdXNwZW5kKCksIGRybV9hdG9taWNf aGVscGVyX3Jlc3VtZSgpCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqCj4gK2Ry bV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICsJCQkJICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiArewo+ICsJc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm47Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOwo+ICsJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlpbnQg ZXJyID0gMDsKPiArCj4gKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKPiAr CWlmICghc3RhdGUpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJc3RhdGUt PmFjcXVpcmVfY3R4ID0gY3R4Owo+ICsKPiArCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRldikg ewo+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCj4gKwkJY3J0Y19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ICsJCWlmIChJ U19FUlIoY3J0Y19zdGF0ZSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiAr CQkJZ290byBmcmVlOwo+ICsJCX0KPiArCX0KPiArCj4gKwlkcm1fZm9yX2VhY2hfcGxhbmUocGxh bmUsIGRldikgewo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ICsK PiArCQlwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFu ZSk7Cj4gKwkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihw bGFuZV9zdGF0ZSk7Cj4gKwkJCWdvdG8gZnJlZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZHJtX2Nv bm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKPiArCWRybV9mb3JfZWFj aF9jb25uZWN0b3JfaXRlcihjb25uLCAmY29ubl9pdGVyKSB7Cj4gKwkJc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gKwo+ICsJCWNvbm5fc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm4pOwo+ICsJCWlmIChJU19FUlIoY29ubl9z dGF0ZSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihjb25uX3N0YXRlKTsKPiArCQkJZHJtX2Nvbm5l Y3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwo+ICsJCQlnb3RvIGZyZWU7Cj4gKwkJfQo+ ICsJfQo+ICsJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwo+ICsKPiAr CS8qIGNsZWFyIHRoZSBhY3F1aXJlIGNvbnRleHQgc28gdGhhdCBpdCBpc24ndCBhY2NpZGVudGFs bHkgcmV1c2VkICovCj4gKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSBOVUxMOwo+ICsKPiArZnJlZToK PiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwo+ICsJ CXN0YXRlID0gRVJSX1BUUihlcnIpOwo+ICsJfQo+ICsKPiArCXJldHVybiBzdGF0ZTsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gKwo+ ICsvKioKPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSAt IHJlbGVhc2UgY29ubmVjdG9yIHN0YXRlCj4gKyAqIEBzdGF0ZTogY29ubmVjdG9yIHN0YXRlIG9i amVjdCB0byByZWxlYXNlCj4gKyAqCj4gKyAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgc3RvcmVk IGluIHRoZSBjb25uZWN0b3Igc3RhdGUgd2l0aG91dCBhY3R1YWxseQo+ICsgKiBmcmVlaW5nIHRo ZSBtZW1vcnkgb2YgdGhlIGNvbm5lY3RvciBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZl cnMgdGhhdAo+ICsgKiBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgo+ICsgKi8KPiArdm9p ZAo+ICtfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJaWYgKHN0YXRlLT5jcnRjKQo+ICsJ CWRybV9jb25uZWN0b3JfcHV0KHN0YXRlLT5jb25uZWN0b3IpOwo+ICsKPiArCWlmIChzdGF0ZS0+ Y29tbWl0KQo+ICsJCWRybV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRl KTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9z dGF0ZSAtIGRlZmF1bHQgc3RhdGUgZGVzdHJveSBob29rCj4gKyAqIEBjb25uZWN0b3I6IGRybSBj b25uZWN0b3IKPiArICogQHN0YXRlOiBjb25uZWN0b3Igc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UK PiArICoKPiArICogRGVmYXVsdCBjb25uZWN0b3Igc3RhdGUgZGVzdHJveSBob29rIGZvciBkcml2 ZXJzIHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCj4gKyAqIHN1YmNsYXNzZWQgY29ubmVjdG9y IHN0YXRlIHN0cnVjdHVyZS4KPiArICovCj4gK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJ CQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJX19kcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdGF0ZSk7Cj4gKwlrZnJlZShzdGF0 ZSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVz dHJveV9zdGF0ZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dh bW1hX3NldCAtIHNldCB0aGUgbGVnYWN5IGdhbW1hIGNvcnJlY3Rpb24gdGFibGUKPiArICogQGNy dGM6IENSVEMgb2JqZWN0Cj4gKyAqIEByZWQ6IHJlZCBjb3JyZWN0aW9uIHRhYmxlCj4gKyAqIEBn cmVlbjogZ3JlZW4gY29ycmVjdGlvbiB0YWJsZQo+ICsgKiBAYmx1ZTogZ3JlZW4gY29ycmVjdGlv biB0YWJsZQo+ICsgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgdGFibGVzCj4gKyAqIEBjdHg6IGxvY2sg YWNxdWlyZSBjb250ZXh0Cj4gKyAqCj4gKyAqIEltcGxlbWVudHMgc3VwcG9ydCBmb3IgbGVnYWN5 IGdhbW1hIGNvcnJlY3Rpb24gdGFibGUgZm9yIGRyaXZlcnMKPiArICogdGhhdCBzdXBwb3J0IGNv bG9yIG1hbmFnZW1lbnQgdGhyb3VnaCB0aGUgREVHQU1NQV9MVVQvR0FNTUFfTFVUCj4gKyAqIHBy b3BlcnRpZXMuIFNlZSBkcm1fY3J0Y19lbmFibGVfY29sb3JfbWdtdCgpIGFuZCB0aGUgY29udGFp bmluZyBjaGFwdGVyIGZvcgo+ICsgKiBob3cgdGhlIGF0b21pYyBjb2xvciBtYW5hZ2VtZW50IGFu ZCBnYW1tYSB0YWJsZXMgd29yay4KPiArICovCj4gK2ludCBkcm1fYXRvbWljX2hlbHBlcl9sZWdh Y3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgICB1MTYgKnJl ZCwgdTE2ICpncmVlbiwgdTE2ICpibHVlLAo+ICsJCQkJICAgICAgIHVpbnQzMl90IHNpemUsCj4g KwkJCQkgICAgICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4g KwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxMOwo+ICsJc3RydWN0IGRybV9j b2xvcl9sdXQgKmJsb2JfZGF0YTsKPiArCWludCBpLCByZXQgPSAwOwo+ICsJYm9vbCByZXBsYWNl ZDsKPiArCj4gKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoY3J0Yy0+ZGV2KTsKPiAr CWlmICghc3RhdGUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJYmxvYiA9IGRybV9wcm9w ZXJ0eV9jcmVhdGVfYmxvYihkZXYsCj4gKwkJCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0 KSAqIHNpemUsCj4gKwkJCQkJTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKGJsb2IpKSB7Cj4gKwkJcmV0 ID0gUFRSX0VSUihibG9iKTsKPiArCQlibG9iID0gTlVMTDsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9 Cj4gKwo+ICsJLyogUHJlcGFyZSBHQU1NQV9MVVQgd2l0aCB0aGUgbGVnYWN5IHZhbHVlcy4gKi8K PiArCWJsb2JfZGF0YSA9IGJsb2ItPmRhdGE7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSB7Cj4gKwkJYmxvYl9kYXRhW2ldLnJlZCA9IHJlZFtpXTsKPiArCQlibG9iX2RhdGFbaV0uZ3Jl ZW4gPSBncmVlbltpXTsKPiArCQlibG9iX2RhdGFbaV0uYmx1ZSA9IGJsdWVbaV07Cj4gKwl9Cj4g Kwo+ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gY3R4Owo+ICsJY3J0Y19zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ICsJaWYgKElTX0VSUihjcnRjX3N0YXRl KSkgewo+ICsJCXJldCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gKwkJZ290byBmYWlsOwo+ICsJ fQo+ICsKPiArCS8qIFJlc2V0IERFR0FNTUFfTFVUIGFuZCBDVE0gcHJvcGVydGllcy4gKi8KPiAr CXJlcGxhY2VkICA9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmRlZ2Ft bWFfbHV0LCBOVUxMKTsKPiArCXJlcGxhY2VkIHw9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2Jsb2Io JmNydGNfc3RhdGUtPmN0bSwgTlVMTCk7Cj4gKwlyZXBsYWNlZCB8PSBkcm1fcHJvcGVydHlfcmVw bGFjZV9ibG9iKCZjcnRjX3N0YXRlLT5nYW1tYV9sdXQsIGJsb2IpOwo+ICsJY3J0Y19zdGF0ZS0+ Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOwo+ICsKPiArCXJldCA9IGRybV9hdG9taWNf Y29tbWl0KHN0YXRlKTsKPiArCj4gK2ZhaWw6Cj4gKwlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0 ZSk7Cj4gKwlkcm1fcHJvcGVydHlfYmxvYl9wdXQoYmxvYik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldCk7Cj4g Kwo+ICsvKioKPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX2R1cGxpY2F0ZV9zdGF0 ZSAtIGNvcHkgYXRvbWljIHByaXZhdGUgc3RhdGUKPiArICogQG9iajogQ1JUQyBvYmplY3QKPiAr ICogQHN0YXRlOiBuZXcgcHJpdmF0ZSBvYmplY3Qgc3RhdGUKPiArICoKPiArICogQ29waWVzIGF0 b21pYyBzdGF0ZSBmcm9tIGEgcHJpdmF0ZSBvYmplY3RzJ3MgY3VycmVudCBzdGF0ZSBhbmQgcmVz ZXRzIGluZmVycmVkIHZhbHVlcy4KPiArICogVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhh dCBzdWJjbGFzcyB0aGUgcHJpdmF0ZSBzdGF0ZS4KPiArICovCj4gK3ZvaWQgX19kcm1fYXRvbWlj X2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29i aiAqb2JqLAo+ICsJCQkJCQkgICAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqc3RhdGUpCj4g K3sKPiArCW1lbWNweShzdGF0ZSwgb2JqLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVf c3RhdGUpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oIGIv aW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAo+IGluZGV4IGU2MGM0ZjBmODgyNy4uMjVj YTAwOTc1NjNlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmgK PiArKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gQEAgLTMxLDYgKzMxLDcg QEAKPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rl c2V0X2hlbHBlcl92dGFibGVzLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRfaGVscGVy Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaD4KPiAgI2luY2x1 ZGUgPGRybS9kcm1fdXRpbC5oPgo+ICAKPiAgc3RydWN0IGRybV9hdG9taWNfc3RhdGU7Cj4gQEAg LTE0NSw0OSArMTQ2LDYgQEAgaW50IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcF90YXJnZXQo Cj4gIAkJCQl1aW50MzJfdCB0YXJnZXQsCj4gIAkJCQlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWly ZV9jdHggKmN0eCk7Cj4gIAo+IC0vKiBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3Igc3RhdGUg aGFuZGxpbmcgKi8KPiAtdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0KHN0cnVjdCBk cm1fY3J0YyAqY3J0Yyk7Cj4gLXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0 ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJCQkJICAgICAgc3RydWN0IGRybV9j cnRjX3N0YXRlICpzdGF0ZSk7Cj4gLXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCj4gLWRybV9hdG9t aWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4g LXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9j cnRjX3N0YXRlICpzdGF0ZSk7Cj4gLXZvaWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQkJCQkgIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUpOwo+IC0KPiAtdm9pZCBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0 KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSk7Cj4gLXZvaWQgZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpOwo+IC12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCQkJCSAgICAgICBzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gLXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKgo+ IC1kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUpOwo+IC12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gLXZvaWQgZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQkJCQkg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKTsKPiAtCj4gLXZvaWQgX19kcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK PiAtCQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpOwo+IC12b2lk IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKTsKPiAtdm9pZAo+IC1fX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBs aWNhdGVfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAtCQkJCQkgICBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOwo+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqCj4gLWRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gLXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICoKPiAtZHJtX2F0b21pY19oZWxwZXJfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gLQkJCQkgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsK PiAtdm9pZAo+IC1fX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSk7Cj4gLXZvaWQgZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiAtCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSk7Cj4gLWludCBk cm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK PiAtCQkJCSAgICAgICB1MTYgKnJlZCwgdTE2ICpncmVlbiwgdTE2ICpibHVlLAo+IC0JCQkJICAg ICAgIHVpbnQzMl90IHNpemUsCj4gLQkJCQkgICAgICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVp cmVfY3R4ICpjdHgpOwo+IC12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKPiAtCQkJCQkJICAgICBz dHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKTsKPiAtCj4gIC8qKgo+ICAgKiBkcm1fYXRv bWljX2NydGNfZm9yX2VhY2hfcGxhbmUgLSBpdGVyYXRlIG92ZXIgcGxhbmVzIGN1cnJlbnRseSBh dHRhY2hlZCB0byBDUlRDCj4gICAqIEBwbGFuZTogdGhlIGxvb3AgY3Vyc29yCj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmggYi9pbmNsdWRlL2RybS9k cm1fYXRvbWljX3N0YXRlX2hlbHBlci5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAuLjViODJjY2ZkYjUwMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRl L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5oCj4gQEAgLTAsMCArMSw4MCBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggSW50ZWwgQ29ycC4KPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP Ugo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAqIE9U SEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICog Um9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+ICsgKiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWwudmV0dGVyQGZmd2xsLmNoPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o Pgo+ICsKPiArc3RydWN0IGRybV9jcnRjOwo+ICtzdHJ1Y3QgZHJtX2NydGNfc3RhdGU7Cj4gK3N0 cnVjdCBkcm1fcGxhbmU7Cj4gK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGU7Cj4gK3N0cnVjdCBkcm1f Y29ubmVjdG9yOwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZTsKPiArc3RydWN0IGRybV9w cml2YXRlX29iajsKPiArc3RydWN0IGRybV9wcml2YXRlX3N0YXRlOwo+ICtzdHJ1Y3QgZHJtX21v ZGVzZXRfYWNxdWlyZV9jdHg7Cj4gK3N0cnVjdCBkcm1fZGV2aWNlOwo+ICsKPiArdm9pZCBkcm1f YXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQg X19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gKwkJCQkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7Cj4gK3N0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCj4gK2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRl X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBl cl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7Cj4gK3Zv aWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPiArCQkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwo+ICsKPiArdm9p ZCBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gK3ZvaWQgZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwo+ICt2 b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAo+ICsJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSk7Cj4gK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKgo+ICtkcm1fYXRvbWljX2hlbHBlcl9wbGFu ZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwo+ICt2b2lkIF9fZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSk7Cj4gK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnN0YXRlKTsKPiArCj4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCQkgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpOwo+ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiArdm9pZAo+ICtf X2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCQkgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqc3RhdGUpOwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqCj4gK2RybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3Rvcik7Cj4gK3N0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKPiArZHJtX2F0b21pY19oZWxw ZXJfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgIHN0cnVj dCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKPiArdm9pZAo+ICtfX2RybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpzdGF0ZSk7Cj4gK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCQkgIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpzdGF0ZSk7Cj4gK2ludCBkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lf Z2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgICB1MTYgKnJlZCwg dTE2ICpncmVlbiwgdTE2ICpibHVlLAo+ICsJCQkJICAgICAgIHVpbnQzMl90IHNpemUsCj4gKwkJ CQkgICAgICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwo+ICt2b2lkIF9f ZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1f cHJpdmF0ZV9vYmogKm9iaiwKPiArCQkJCQkJICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUg KnN0YXRlKTsKPiAtLSAKPiAyLjE5LjAucmMyCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=