From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yaodong Li Subject: Re: [PATCH 1/2] drm/i915: implemented dynamic WOPCM partition. Date: Mon, 6 Nov 2017 12:22:53 -0800 Message-ID: References: <1509754718-27734-1-git-send-email-yaodong.li@intel.com> <8ff1140f-b98a-dd44-47c1-ab3c438ceef8@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 55C106E3DE for ; Mon, 6 Nov 2017 20:23:35 +0000 (UTC) In-Reply-To: <8ff1140f-b98a-dd44-47c1-ab3c438ceef8@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Sagar Arun Kamble , intel-gfx@lists.freedesktop.org Cc: Sujaritha Sundaresan List-Id: intel-gfx@lists.freedesktop.org T24gMTEvMDYvMjAxNyAxMjoxNiBBTSwgU2FnYXIgQXJ1biBLYW1ibGUgd3JvdGU6Cj4gUGxlYXNl IHVwZGF0ZSB0aGUgc3ViamVjdCB0byAiSW1wbGVtZW50IGR5bmFtaWMgV09QQ00gcGFydGl0aW9u aW5nIgo+IEFsc28sIGNvbW1pdCBkZXNjcmlwdGlvbiBzaG91bGQgYmUgd3JpdHRlbiBpbiBwcmVz ZW50IHRlbnNlIGZvcm0uCldpbGwgdXBkYXRlIGl0IGluIHYyLgo+Cj4gT24gMTEvNC8yMDE3IDU6 NDggQU0sIEphY2tpZSBMaSB3cm90ZToKPj4gU3RhdGljIFdPUENNIHBhcnRpdGlvbmluZyB3b3Vs ZCBsZWFkIHRvIEd1QyBsb2FkaW5nIGZhaWx1cmUKPj4gaWYgdGhlIEd1Qy9IdUMgZmlybXdhcmUg c2l6ZSBleGNlZWRlZCBjdXJyZW50IHN0YXRpYyA1MTJLQgo+PiBwYXJ0aXRpb24gYm91bmRhcnku Cj4+Cj4+IFRoaXMgcGF0Y2ggZW5hYmxlZCB0aGUgZHluYW1pY2FsIGNhbGN1bGF0aW9uIG9mIHRo ZSBXT1BDTSBhcGVydHVyZQo+PiB1c2VkIGJ5IEd1Qy9IdUMgZmlybXdhcmUuIEd1QyBXT1BDTSBv ZmZzZXQgd2FzIHNldCB0bwo+PiBIdUMgc2l6ZSArIHJlc2VydmVkIFdPUENNIHNpemUuIEd1QyBX T1BDTSBzaXplIHdhcyBzZXQgdG8KPj4gdG90YWwgV09QQ00gc2l6ZSAtIEd1QyBXT1BDTSBvZmZz ZXQgLSBSQzZDVFggc2l6ZS4KPiBDb3VsZCB5b3UgdGVsbCBicmllZmx5IGhlcmUgd2hhdCBpcyBi ZWluZyBkb25lIHRvIHdvcGNtIG9mZnNldCBhbmQgCj4gc2l6ZSBpbiB0aGlzIHBhdGNoLgpXaWxs IHVwZGF0ZSB0aGUgZGVzY3JpcHRpb24gaW4gdjIuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEphY2tp ZSBMaSA8eWFvZG9uZy5saUBpbnRlbC5jb20+Cj4+IENjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNo YWwud2FqZGVjemtvQGludGVsLmNvbT4KPj4gQ2M6IFNhZ2FyIEFydW4gS2FtYmxlIDxzYWdhci5h LmthbWJsZUBpbnRlbC5jb20+Cj4+IENjOiBTdWphcml0aGEgU3VuZGFyZXNhbiA8c3VqYXJpdGhh LnN1bmRhcmVzYW5AaW50ZWwuY29tPgo+PiBDYzogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFu aWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KPj4gQ2M6IEpvaG4gU3BvdHN3b29kIDxqb2hu LmEuc3BvdHN3b29kQGludGVsLmNvbT4KPj4gQ2M6IE9zY2FyIE1hdGVvIDxvc2Nhci5tYXRlb0Bp bnRlbC5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jwqDC oMKgwqDCoMKgwqDCoCB8wqAgMTUgKysrKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5owqDCoMKgwqDCoMKgwqDCoCB8wqAgMTMgKysrKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgfMKgwqAgNCArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2d1Y19yZWcuaMKgwqDCoMKgIHzCoCAxOCArKysrLQo+PiDCoCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWMuY8KgwqDCoMKgwqDCoMKgIHzCoCA0NiArKysrKysrKysrLS0K Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmjCoMKgwqDCoMKgwqDCoCB8wqAg MTggKy0tLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmPCoMKgwqDCoMKg wqDCoCB8wqDCoCAzICstCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmPCoMKg wqDCoMKgwqDCoMKgIHwgMTI4IAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jwqDCoMKgwqDCoCB8wqAgMTIg KystCj4+IMKgIDkgZmlsZXMgY2hhbmdlZCwgMjIzIGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9u cygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+IGluZGV4IGU3ZTllMDYuLjE5 NTA5ZmQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+PiBAQCAtNjIzLDYgKzYyMywx NSBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9maW5pKHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4+IMKgwqDCoMKgwqAgV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYt PmNvbnRleHRzLmxpc3QpKTsKPj4gwqAgfQo+PiDCoCArc3RhdGljIHZvaWQgaTkxNV93b3BjbV9p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgaW50ZWxfd29wY21faW5mbyAqd29wY20gPSAmZGV2X3ByaXYtPndvcGNtOwo+PiArCj4+ ICvCoMKgwqAgd29wY20tPnNpemUgPSBXT1BDTV9ERUZBVUxUX1NJWkU7Cj4+ICsKPj4gK8KgwqDC oCBEUk1fREVCVUdfRFJJVkVSKCJXT1BDTSBzaXplOiAlZEtCXG4iLCB3b3BjbS0+c2l6ZSA+PiAx MCk7Cj4+ICt9Cj4+ICsKPj4gwqAgc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4+IEBAIC02NzAsNiArNjc5LDEy IEBAIHN0YXRpYyBpbnQgaTkxNV9sb2FkX21vZGVzZXRfaW5pdChzdHJ1Y3QgCj4+IGRybV9kZXZp Y2UgKmRldikKPj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byBjbGVhbnVwX2lycTsKPj4gwqAgK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBHZXQgdGhlIHdv cGNtIG1lbW9yeSBpbmZvLgo+PiArwqDCoMKgwqAgKiBOT1RFOiB0aGlzIG5lZWQgdG8gYmUgY2Fs bGVkIGJlZm9yZSBpbml0IEZXLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpOTE1X3dvcGNt X2luaXQoZGV2X3ByaXYpOwo+PiArCj4gSSB0aGluayB0aGlzIGNhbGwgbWlnaHQgYmUgYmV0dGVy IGlmIGRvbmUgZnJvbSAKPiBpOTE1X2RyaXZlcl9pbml0X2h3LT5pOTE1X2dndHRfcHJvYmVfaHct PipfZ21jaF9wcm9iZSBhZnRlcgo+IGdlbV9pbml0X3N0b2xlbiBhcyB0aGlzIGlzIHBhcnQgb2Yg c3RvbGVuIG1lbW9yeS4gTWlnaHQgaGVscCAKPiBwZXJmb3JtaW5nIGFueSB2YWxpZGF0aW9uIHcu ci50IHN0b2xlbiBtZW1vcnkgYWxsb2MuCkkgYW0gcGxhbmluZyB0aGUgcmV1c2UgdGhlIGluZm8g ZnJvbSBzdG9sZW4gaW5pdCB0byBjcmVhdGUgdGhlIApkZXNjcmlwdGlvbiBpbiBhIHNlcGFyYXRl IHBhdGNoLiBMaWtlbHksIEkgd2lsbCBtb3ZlIGl0CnJpZ2h0IGFmdGVyIGdlbV9pbml0X3N0b2xl biwgb3IgbWFrZSBpdCBhcyBhIHBhcnQgb2Ygc3RvbGVuIGluaXQsIG9yIApldmVuIGRyb3AgdGhp cyBkYXRhIHN0cnVjdHVyZSBjb21wbGV0ZWx5Lgo+PiDCoMKgwqDCoMKgIGludGVsX3VjX2luaXRf ZncoZGV2X3ByaXYpOwo+PiDCoCDCoMKgwqDCoMKgIHJldCA9IGk5MTVfZ2VtX2luaXQoZGV2X3By aXYpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IGluZGV4IDcyYmI1YjUuLjYxY2Qy OTAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBAQCAtMjIzNSw2ICsyMjM1LDE2 IEBAIHN0cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSB7Cj4+IMKgwqDCoMKgwqAgdTggdm9sdGFnZV9s ZXZlbDsKPj4gwqAgfTsKPj4gwqAgK3N0cnVjdCBpbnRlbF93b3BjbV9pbmZvIHsKPj4gK8KgwqDC oCB1MzIgc2l6ZTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBpbnRlbF93b3BjbV9wYXJ0aXRpb24g ewo+PiArwqDCoMKgIHUzMiBndWNfd29wY21fb2Zmc2V0Owo+PiArwqDCoMKgIHUzMiBndWNfd29w Y21fc2l6ZTsKPj4gK8KgwqDCoCB1MzIgZ3VjX3dvcGNtX3RvcDsKPj4gK307Cj4+ICsKPiAqX3Bh cnRpdGlvbiBjYW4gYmVjb21lIHBhcnQgb2YgKl9pbmZvLiBUaGlzIGNhbiBiZSBuYW1lZCBhcyAK PiBpbnRlbF9ndWNfd29wY21fcGFydGl0aW9uIGFuZCBkcm9wICJndWNfIiBwcmVmaXggZnJvbSB2 YXJpYWJsZSBuYW1lcy4KaW50ZWxfd29wY21faW5mbyB3YXMgdXNlZCBmb3IgZGVzY3JpcHRpb24g b2Ygb3ZlcmFsbCB3b3BjbSBpbmZvIHdoaWxlIAppbnRlbF93b3BjbV9wYXJ0aXRpb24gaXMgYWJv dXQgaG93IHdlIGRvIHRoZSBwYXJ0aXRpb24gYW5kIGl0J3MgZ3VjCnJlbGF0ZWQuIEkgYWdyZWUg dGhhdCB3ZSBjYW4gcmVuYW1lIGl0IHRvIGludGVsX2d1Y193b3BjbV9wYXJ0aXRpb24gYW5kIApy ZW1vdmUgImd1Y18iIHByZWZpeC4gYnV0IEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2Uga2VlcCB0aGVt IGFzCnNlcGFyYXRlZCBzdHJ1Y3R1cmVzIHNpbmNlIGludGVsX3dvcGNtX2luZm8gd2lsbCBiZSB1 cGRhdGVkIHRvIHJldXNlIAppbmZvIGZyb20gc3RvbGVuIGluaXQuCj4+IMKgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2RldmljZSBkcm07Cj4+IMKg IEBAIC0yMjU4LDYgKzIyNjgsOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4+IMKgwqDC oMKgwqAgc3RydWN0IGludGVsX2h1YyBodWM7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2d1 YyBndWM7Cj4+IMKgICvCoMKgwqAgc3RydWN0IGludGVsX3dvcGNtX2luZm8gd29wY207Cj4+ICvC oMKgwqAgc3RydWN0IGludGVsX3dvcGNtX3BhcnRpdGlvbiB3b3BjbV9wYXJ0aXRpb247Cj4+ICsK Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY3NyIGNzcjsKPj4gwqAgwqDCoMKgwqDCoCBzdHJ1 Y3QgaW50ZWxfZ21idXMgZ21idXNbR01CVVNfTlVNX1BJTlNdOwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIAo+PiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+PiBpbmRleCAxMGFmZmIzLi43MzQ3ZmQ3IDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+IEBAIC0zMTIsMTIg KzMxMiwxMiBAQCBfX2NyZWF0ZV9od19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+ PiAqZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqAgY3R4LT5kZXNjX3RlbXBsYXRlID0KPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGRlZmF1bHRfZGVzY190ZW1wbGF0ZShkZXZfcHJpdiwgZGV2X3ByaXYtPm1t LmFsaWFzaW5nX3BwZ3R0KTsKPj4gwqAgLcKgwqDCoCAvKiBHdUMgcmVxdWlyZXMgdGhlIHJpbmcg dG8gYmUgcGxhY2VkIGFib3ZlIEdVQ19XT1BDTV9UT1AuIElmIAo+PiBHdUMgaXMgbm90Cj4+ICvC oMKgwqAgLyogR3VDIHJlcXVpcmVzIHRoZSByaW5nIHRvIGJlIHBsYWNlZCBhYm92ZSBndWMgd29w Y20gdG9wLiBJZiAKPj4gR3VDIGlzIG5vdAo+PiDCoMKgwqDCoMKgwqAgKiBwcmVzZW50IG9yIG5v dCBpbiB1c2Ugd2Ugc3RpbGwgbmVlZCBhIHNtYWxsIGJpYXMgYXMgcmluZyAKPj4gd3JhcGFyb3Vu ZAo+PiDCoMKgwqDCoMKgwqAgKiBhdCBvZmZzZXQgMCBzb21ldGltZXMgaGFuZ3MuIE5vIGlkZWEg d2h5Lgo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDCoCBpZiAoSEFTX0dVQyhkZXZfcHJp dikgJiYgaTkxNV9tb2RwYXJhbXMuZW5hYmxlX2d1Y19sb2FkaW5nKQo+PiAtwqDCoMKgwqDCoMKg wqAgY3R4LT5nZ3R0X29mZnNldF9iaWFzID0gR1VDX1dPUENNX1RPUDsKPj4gK8KgwqDCoMKgwqDC oMKgIGN0eC0+Z2d0dF9vZmZzZXRfYmlhcyA9IGludGVsX2d1Y193b3BjbV90b3AoZGV2X3ByaXYp Owo+PiDCoMKgwqDCoMKgIGVsc2UKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+Z2d0dF9vZmZz ZXRfYmlhcyA9IEk5MTVfR1RUX1BBR0VfU0laRTsKPj4gwqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3VjX3JlZy5oCj4+IGluZGV4IDM1Y2Y5OTEuLmQzMDk4ODQgMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3VjX3JlZy5oCj4+IEBAIC02NywxNyArNjcsMjcgQEAKPj4gwqAgI2RlZmlu ZSBETUFfR1VDX1dPUENNX09GRlNFVMKgwqDCoMKgwqDCoMKgIF9NTUlPKDB4YzM0MCkKPj4gwqAg I2RlZmluZcKgwqAgSFVDX0xPQURJTkdfQUdFTlRfVkNSwqDCoMKgwqDCoMKgwqDCoMKgICgwPDwx KQo+PiDCoCAjZGVmaW5lwqDCoCBIVUNfTE9BRElOR19BR0VOVF9HVUPCoMKgwqDCoMKgwqDCoMKg wqAgKDE8PDEpCj4+IC0jZGVmaW5lwqDCoCBHVUNfV09QQ01fT0ZGU0VUX1ZBTFVFwqDCoMKgwqDC oCAweDgwMDAwwqDCoMKgIC8qIDUxMktCICovCj4+IMKgICNkZWZpbmUgR1VDX01BWF9JRExFX0NP VU5UwqDCoMKgwqDCoMKgwqAgX01NSU8oMHhDM0U0KQo+PiDCoCDCoCAjZGVmaW5lIEhVQ19TVEFU VVMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9NTUlPKDB4RDNCMCkKPj4gwqAgI2RlZmluZcKg wqAgSFVDX0ZXX1ZFUklGSUVEwqDCoMKgwqDCoMKgICgxPDw3KQo+PiDCoCDCoCAvKiBEZWZpbmVz IFdPUENNIHNwYWNlIGF2YWlsYWJsZSB0byBHdUMgZmlybXdhcmUgKi8KPiBXT1BDTSBtZW1vcnkg bWFwIGhlcmUgaW4gdGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBoZWxwZnVsLgp3ZSBjaGVjayBv biB0aGlzOikKPj4gKy8qIGRlZmF1bHQgV09QQ00gc2l6ZSAxTUIgKi8KPj4gKyNkZWZpbmUgV09Q Q01fREVGQVVMVF9TSVpFwqDCoMKgwqDCoMKgwqAgKDB4MSA8PCAyMCkKPj4gKy8qIHJlc2VydmVk IFdPUENNIHNpemUgMTZLQiAqLwo+PiArI2RlZmluZSBXT1BDTV9SRVNFUlZFRF9TSVpFwqDCoMKg wqDCoMKgwqAgKDB4NDAwMCkKPj4gKy8qIEdVQyBXT1BDTSBPZmZzZXQgbmVlZCB0byBiZSAxNktC IGFsaWduZWQgKi8KPj4gKyNkZWZpbmUgV09QQ01fT0ZGU0VUX0FMSUdOTUVOVMKgwqDCoMKgwqDC oMKgICgweDQwMDApCj4+ICsvKiA4S0Igc3RhY2sgcmVzZXJ2ZWQgZm9yIEd1QyBGVyovCj4+ICsj ZGVmaW5lIEdVQ19XT1BDTV9TVEFDS19SRVNFUlZFRMKgwqDCoCAoMHgyMDAwKQo+PiArLyogMjRL QiBXT1BDTSByZXNlcnZlZCBmb3IgUkM2IENUWCBvbiBCWFQgKi8KPj4gKyNkZWZpbmUgQlhUX1dP UENNX1JDNl9SRVNFUlZFRMKgwqDCoMKgwqDCoMKgICgweDYwMDApCj4+ICsKPj4gKyNkZWZpbmUg R0VOOV9HVUNfV09QQ01fREVMVEHCoMKgwqDCoMKgwqDCoCA0Cj4+ICsjZGVmaW5lIEdFTjlfR1VD X1dPUENNX09GRlNFVMKgwqDCoMKgwqDCoMKgICgweDI0MDAwKQo+PiArCj4+IMKgICNkZWZpbmUg R1VDX1dPUENNX1NJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9NTUlPKDB4YzA1MCkKPj4gLS8q IEd1QyBhZGRyZXNzZXMgYmVsb3cgR1VDX1dPUENNX1RPUCBkb24ndCBtYXAgdGhyb3VnaCB0aGUg R1RUICovCj4+IC0jZGVmaW5lwqDCoCBHVUNfV09QQ01fVE9QwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKDB4ODAgPDwgMTIpwqDCoMKgIC8qIDUxMktCICovCj4+IC0jZGVmaW5lwqDCoCBCWFRf R1VDX1dPUENNX1JDNl9SRVNFUlZFRMKgwqDCoMKgwqAgKDB4MTAgPDwgMTIpIC8qIDY0S0LCoCAq Lwo+PiDCoCDCoCAvKiBHdUMgYWRkcmVzc2VzIGFib3ZlIEdVQ19HR1RUX1RPUCBhbHNvIGRvbid0 IG1hcCB0aHJvdWdoIHRoZSAKPj4gR1RUICovCj4+IMKgICNkZWZpbmUgR1VDX0dHVFRfVE9QwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAweEZFRTAwMDAwCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWMuYwo+PiBpbmRleCA5Njc4NjMwLi4wZWZjZmI0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWMuYwo+PiBAQCAtMzM3LDcgKzMzNyw3IEBAIGludCBpbnRlbF9ndWNfcmVzdW1lKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYpCj4+IMKgwqAgKiBUaGlzIGlzIGEgd3Jh cHBlciB0byBjcmVhdGUgYW4gb2JqZWN0IGZvciB1c2Ugd2l0aCB0aGUgR3VDLiBJbiAKPj4gb3Jk ZXIgdG8KPj4gwqDCoCAqIHVzZSBpdCBpbnNpZGUgdGhlIEd1QywgYW4gb2JqZWN0IG5lZWRzIHRv IGJlIHBpbm5lZCBsaWZldGltZSwgc28gCj4+IHdlIGFsbG9jYXRlCj4+IMKgwqAgKiBib3RoIHNv bWUgYmFja2luZyBzdG9yYWdlIGFuZCBhIHJhbmdlIGluc2lkZSB0aGUgR2xvYmFsIEdUVC4gV2Ug Cj4+IG11c3QgcGluCj4+IC0gKiBpdCBpbiB0aGUgR0dUVCBzb21ld2hlcmUgb3RoZXIgdGhhbiB0 aGFuIFswLCBHVUNfV09QQ01fVE9QKSAKPj4gYmVjYXVzZSB0aGF0Cj4+ICsgKiBpdCBpbiB0aGUg R0dUVCBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGFuIFswLCBndWMgd29wY21fdG9wKSAKPj4gYmVj YXVzZSB0aGF0Cj4+IMKgwqAgKiByYW5nZSBpcyByZXNlcnZlZCBpbnNpZGUgR3VDLgo+PiDCoMKg ICoKPj4gwqDCoCAqIFJldHVybjrCoMKgwqAgQSBpOTE1X3ZtYSBpZiBzdWNjZXNzZnVsLCBvdGhl cndpc2UgYW4gRVJSX1BUUi4KPj4gQEAgLTM1OCw3ICszNTgsOCBAQCBzdHJ1Y3QgaTkxNV92bWEg KmludGVsX2d1Y19hbGxvY2F0ZV92bWEoc3RydWN0IAo+PiBpbnRlbF9ndWMgKmd1YywgdTMyIHNp emUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsKPj4gwqAgwqDCoMKgwqDCoCByZXQg PSBpOTE1X3ZtYV9waW4odm1hLCAwLCBQQUdFX1NJWkUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFBJTl9HTE9CQUwgfCBQSU5fT0ZGU0VUX0JJQVMgfCBHVUNfV09QQ01fVE9QKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUElOX0dMT0JBTCB8IFBJTl9PRkZTRVRf QklBUyB8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2d1Y193b3BjbV90 b3AoZGV2X3ByaXYpKTsKPj4gwqDCoMKgwqDCoCBpZiAocmV0KSB7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCB2bWEgPSBFUlJfUFRSKHJldCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsK Pj4gQEAgLTM3MywxMSArMzc0LDQyIEBAIHN0cnVjdCBpOTE1X3ZtYSAqaW50ZWxfZ3VjX2FsbG9j YXRlX3ZtYShzdHJ1Y3QgCj4+IGludGVsX2d1YyAqZ3VjLCB1MzIgc2l6ZSkKPj4gwqAgwqAgdTMy IGludGVsX2d1Y193b3BjbV9zaXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK Pj4gwqAgewo+PiAtwqDCoMKgIHUzMiB3b3BjbV9zaXplID0gR1VDX1dPUENNX1RPUDsKPj4gK8Kg wqDCoCBzdHJ1Y3QgaW50ZWxfd29wY21fcGFydGl0aW9uICp3cCA9ICZkZXZfcHJpdi0+d29wY21f cGFydGl0aW9uOwo+PiDCoCAtwqDCoMKgIC8qIE9uIEJYVCwgdGhlIHRvcCBvZiBXT1BDTSBpcyBy ZXNlcnZlZCBmb3IgUkM2IGNvbnRleHQgKi8KPj4gLcKgwqDCoCBpZiAoSVNfR0VOOV9MUChkZXZf cHJpdikpCj4+IC3CoMKgwqDCoMKgwqDCoCB3b3BjbV9zaXplIC09IEJYVF9HVUNfV09QQ01fUkM2 X1JFU0VSVkVEOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oIXdwLT5ndWNfd29wY21fc2l6ZSk7Cj4+ IMKgIC3CoMKgwqAgcmV0dXJuIHdvcGNtX3NpemU7Cj4+ICvCoMKgwqAgcmV0dXJuIHdwLT5ndWNf d29wY21fc2l6ZTsKPj4gK30KPj4gKwo+PiArdTMyIGludGVsX2d1Y193b3BjbV90b3Aoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRl bF93b3BjbV9wYXJ0aXRpb24gKndwID0gJmRldl9wcml2LT53b3BjbV9wYXJ0aXRpb247Cj4+ICsK Pj4gK8KgwqDCoCBHRU1fQlVHX09OKCFkZXZfcHJpdi0+d29wY20uc2l6ZSk7Cj4+ICsKPj4gK8Kg wqDCoCByZXR1cm4gd3AtPmd1Y193b3BjbV90b3AgPyB3cC0+Z3VjX3dvcGNtX3RvcCA6IAo+PiBk ZXZfcHJpdi0+d29wY20uc2l6ZTsKPj4gK30KPj4gKwo+PiArdTMyIGludGVsX2d1Y193b3BjbV9v ZmZzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiArewo+PiArwqDCoMKg IHN0cnVjdCBpbnRlbF93b3BjbV9wYXJ0aXRpb24gKndwID0gJmRldl9wcml2LT53b3BjbV9wYXJ0 aXRpb247Cj4+ICsKPj4gK8KgwqDCoCBHRU1fQlVHX09OKCF3cC0+Z3VjX3dvcGNtX3NpemUpOwo+ PiArCj4+ICvCoMKgwqAgcmV0dXJuIHdwLT5ndWNfd29wY21fb2Zmc2V0Owo+PiArfQo+PiArCj4+ ICsvKgo+PiArICogR3VDIGRvZXMgbm90IGFsbG93IGFueSBnZnggR0dUVCBhZGRyZXNzIHRoYXQg ZmFsbHMgaW50byByYW5nZSBbMCwgCj4+IFdPUENNX1RPUCksCj4gY2hhbmdlIFdPUENNX1RPUApU aGFua3MuIHdpbGwgdXBkYXRlIGl0Lgo+PiArICogd2hpY2ggaXMgcmVzZXJ2ZWQgZm9yIEJvb3Qg Uk9NLCBTUkFNIGFuZCBXT1BDTS4gQWxsIGdmeCBvYmplY3RzCj4+ICsgKiB1c2VkIGJ5IEd1QyBp cyBwaW5uZWQgd2l0aCBQSU5fT0ZGU0VUX0JJQVMgYWxvbmcgd2l0aCB0b3Agb2YgV09QQ00uCj4+ ICsgKi8KPj4gK3UzMiBndWNfZ2d0dF9vZmZzZXQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gVGhp cyBtb3ZlIGNhbiBiZSBpbiBhIHNlcGFyYXRlIHBhdGNoLiBJbnN0ZWFkLCBJIHRoaW5rIGFsbCBh Ym92ZSAKPiBmdW5jdGlvbnMgbmVlZCB0byBiZSBtb3ZlZCB0byBpbnRlbF9ndWMuYy4KSSB0aGlu ayBpdCdzIGNsZWFyIGVub3VnaCB0byBtYWtlIHRoaXMgbW92ZSBhcyBwYXJ0IG9mIHRoaXMgcGF0 Y2ggc2luY2UgCnRoZSByZWFzb24gZm9yIHRoaXMgbW92ZSBpcyBiZWNhdXNlIHdlCmFyZSBub3cg dXNpbmcgYSBkeW5hbWljIGNhbGN1bGF0ZWQgd29wY20gdG9wIGluc3RlYWQgb2YgYSBzdGF0aWMg V09QQ01fVE9QLgpBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBpbnRlbF9ndWMuYyBub3cuCj4+ ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdm1hLT52 bS0+aTkxNTsKPj4gK8KgwqDCoCB1MzIgb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh2bWEpOwo+ PiArCj4+ICvCoMKgwqAgR0VNX0JVR19PTihvZmZzZXQgPCBpbnRlbF9ndWNfd29wY21fdG9wKGRl dl9wcml2KSk7Cj4+ICvCoMKgwqAgR0VNX0JVR19PTihyYW5nZV9vdmVyZmxvd3NfdCh1NjQsIG9m ZnNldCwgdm1hLT5zaXplLCAKPj4gR1VDX0dHVFRfVE9QKSk7Cj4+ICvCoMKgwqAgcmV0dXJuIG9m ZnNldDsKPj4gwqAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf Z3VjLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPj4gaW5kZXggNjA3 ZTAyNS4uMTQ5M2RlMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf Z3VjLmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPj4gQEAgLTEw MCwyMSArMTAwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGludGVsX2d1Y19ub3RpZnkoc3RydWN0 IAo+PiBpbnRlbF9ndWMgKmd1YykKPj4gwqDCoMKgwqDCoCBndWMtPm5vdGlmeShndWMpOwo+PiDC oCB9Cj4+IMKgIC0vKgo+PiAtICogR3VDIGRvZXMgbm90IGFsbG93IGFueSBnZnggR0dUVCBhZGRy ZXNzIHRoYXQgZmFsbHMgaW50byByYW5nZSBbMCwgCj4+IFdPUENNX1RPUCksCj4+IC0gKiB3aGlj aCBpcyByZXNlcnZlZCBmb3IgQm9vdCBST00sIFNSQU0gYW5kIFdPUENNLiBDdXJyZW50bHkgdGhp cyAKPj4gdG9wIGFkZHJlc3MgaXMKPj4gLSAqIDUxMksuIEluIG9yZGVyIHRvIGV4Y2x1ZGUgMC01 MTJLIGFkZHJlc3Mgc3BhY2UgZnJvbSBHR1RULCBhbGwgZ2Z4IAo+PiBvYmplY3RzCj4+IC0gKiB1 c2VkIGJ5IEd1QyBpcyBwaW5uZWQgd2l0aCBQSU5fT0ZGU0VUX0JJQVMgYWxvbmcgd2l0aCBzaXpl IG9mIFdPUENNLgo+PiAtICovCj4+IC1zdGF0aWMgaW5saW5lIHUzMiBndWNfZ2d0dF9vZmZzZXQo c3RydWN0IGk5MTVfdm1hICp2bWEpCj4+IC17Cj4+IC3CoMKgwqAgdTMyIG9mZnNldCA9IGk5MTVf Z2d0dF9vZmZzZXQodm1hKTsKPj4gLQo+PiAtwqDCoMKgIEdFTV9CVUdfT04ob2Zmc2V0IDwgR1VD X1dPUENNX1RPUCk7Cj4+IC3CoMKgwqAgR0VNX0JVR19PTihyYW5nZV9vdmVyZmxvd3NfdCh1NjQs IG9mZnNldCwgdm1hLT5zaXplLCAKPj4gR1VDX0dHVFRfVE9QKSk7Cj4+IC0KPj4gLcKgwqDCoCBy ZXR1cm4gb2Zmc2V0Owo+PiAtfQo+PiDCoCDCoCB2b2lkIGludGVsX2d1Y19pbml0X2Vhcmx5KHN0 cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cj4+IMKgIHZvaWQgaW50ZWxfZ3VjX2luaXRfc2VuZF9yZWdz KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cj4+IEBAIC0xMjcsNSArMTEyLDggQEAgaW50IGludGVs X2d1Y19zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYpOwo+PiDC oCBpbnQgaW50ZWxfZ3VjX3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owo+PiDCoCBzdHJ1Y3QgaTkxNV92bWEgKmludGVsX2d1Y19hbGxvY2F0ZV92bWEoc3RydWN0IGlu dGVsX2d1YyAqZ3VjLCB1MzIgCj4+IHNpemUpOwo+PiDCoCB1MzIgaW50ZWxfZ3VjX3dvcGNtX3Np emUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPj4gK3UzMiBpbnRlbF9ndWNf d29wY21fdG9wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4+ICt1MzIgaW50 ZWxfZ3VjX3dvcGNtX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ PiArdTMyIGd1Y19nZ3R0X29mZnNldChzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7Cj4+IMKgIMKgICNl bmRpZgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKPj4gaW5kZXggOThkMTcyNS4uYTk4 NWFhNSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKPj4gQEAgLTIwMiw3ICsyMDIs OCBAQCB2b2lkIGludGVsX2h1Y19hdXRoKHN0cnVjdCBpbnRlbF9odWMgKmh1YykKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybjsKPj4gwqAgwqDCoMKgwqDCoCB2bWEgPSBpOTE1X2dlbV9vYmpl Y3RfZ2d0dF9waW4oaHVjLT5mdy5vYmosIE5VTEwsIDAsIDAsCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgUElOX09GRlNFVF9CSUFTIHwgR1VDX1dPUENNX1RPUCk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUElOX09GRlNFVF9CSUFTIHwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9ndWNfd29wY21fdG9wKGk5MTUpKTsKPj4gwqDC oMKgwqDCoCBpZiAoSVNfRVJSKHZtYSkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJP UigiZmFpbGVkIHRvIHBpbiBodWMgZncgb2JqZWN0ICVkXG4iLAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChpbnQpUFRSX0VSUih2bWEpKTsKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdWMuYwo+PiBpbmRleCBhZWMyOTU0Li44M2IyNTE2IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3VjLmMKPj4gQEAgLTg2LDYgKzg2LDEyNSBAQCB2b2lkIGludGVsX3VjX2luaXRfZWFy bHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZfcHJpdikKPj4gwqDCoMKgwqDCoCBp bnRlbF9ndWNfaW5pdF9lYXJseSgmZGV2X3ByaXYtPmd1Yyk7Cj4+IMKgIH0KPj4gwqAgK3N0YXRp YyB1MzIgcmM2X2NvbnRleHRfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4+ICt7Cj4+ICvCoMKgwqAgLyogT24gQlhULCB0aGUgdG9wIG9mIFdPUENNIGlzIHJlc2VydmVk IGZvciBSQzYgY29udGV4dCAqLwo+PiArwqDCoMKgIGlmIChJU19HRU45X0xQKGRldl9wcml2KSkK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBCWFRfV09QQ01fUkM2X1JFU0VSVkVEOwo+PiArCj4+ ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZG9fd29wY21fcGFy dGl0aW9uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gK8KgwqDCoCB1MzIg b2Zmc2V0LCB1MzIgcmVzZXJ2ZWRfc2l6ZSkKPiBBbGlnbm1lbnQgaXNzdWUuIHBhcmFtZXRlcnMg c2hvdWxkIG1hdGNoIHRoZSBvcGVuIGJyYWNlcyBzcGFjaW5nIAo+IGFib3ZlLiBDYW4gdXNlIGNo ZWNrcGF0Y2ggdG8gc3BvdCBzdWNoIGlzc3Vlcy4KVGhpcyBwYXRjaCBoYXMgYmVlbiBjaGVjayB3 aXRoIGNoZWNrcGF0Y2ggc2NyaXB0LiBIb3dldmVyLCBpZiB0aGF0J3MgdGhlIApjb252ZW50aW9u LCBJIHdpbGwgbW9kaWZ5IHRoZSBjb2RlIHRvIGZvbGxvdyBpdDopCj4KPj4gK3sKPj4gK8KgwqDC oCBzdHJ1Y3QgaW50ZWxfd29wY21fcGFydGl0aW9uICp3cCA9ICZkZXZfcHJpdi0+d29wY21fcGFy dGl0aW9uOwo+PiArwqDCoMKgIHUzMiBhbGlnbmVkX29mZnNldCA9IEFMSUdOKG9mZnNldCwgV09Q Q01fT0ZGU0VUX0FMSUdOTUVOVCk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAob2Zmc2V0ID49IGRldl9w cml2LT53b3BjbS5zaXplKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FMkJJRzsKPj4gKwo+ PiArwqDCoMKgIGlmIChyZXNlcnZlZF9zaXplID49IGRldl9wcml2LT53b3BjbS5zaXplKQo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FMkJJRzsKPj4gKwo+PiArwqDCoMKgIGlmICgoYWxpZ25l ZF9vZmZzZXQgKyByZXNlcnZlZF9zaXplKSA+PSBkZXZfcHJpdi0+d29wY20uc2l6ZSkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRTJCSUc7Cj4+ICsKPj4gK8KgwqDCoCB3cC0+Z3VjX3dvcGNt X29mZnNldCA9IGFsaWduZWRfb2Zmc2V0Owo+PiArwqDCoMKgIHdwLT5ndWNfd29wY21fdG9wID0g ZGV2X3ByaXYtPndvcGNtLnNpemUgLSB3cC0+Z3VjX3dvcGNtX29mZnNldDsKPj4gK8KgwqDCoCB3 cC0+Z3VjX3dvcGNtX3NpemUgPSB3cC0+Z3VjX3dvcGNtX3RvcCAtIHJlc2VydmVkX3NpemU7Cj4+ ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBpbnRlbF91 Y19pbml0X3dvcGNtX3BhcnRpdGlvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmRldl9w cml2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF93b3BjbV9wYXJ0aXRpb24gKndwID0g JmRldl9wcml2LT53b3BjbV9wYXJ0aXRpb247Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX3VjX2Z3 ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5mdzsKPj4gK8KgwqDCoCBzdHJ1Y3QgaW50ZWxfdWNf ZncgKmh1Y19mdyA9ICZkZXZfcHJpdi0+aHVjLmZ3Owo+PiArwqDCoMKgIHNpemVfdCBodWNfc2l6 ZSwgZ3VjX3NpemU7Cj4+ICvCoMKgwqAgdTMyIG9mZnNldDsKPj4gK8KgwqDCoCB1MzIgcmVzZXJ2 ZWQ7Cj4+ICvCoMKgwqAgdTMyIHdvcGNtX2Jhc2U7Cj4+ICvCoMKgwqAgdTMyIGRlbHRhOwo+PiAr wqDCoMKgIGludCBlcnI7Cj4+ICsKPj4gK8KgwqDCoCAvKlJldHVybiBpZiBXT1BDTSBwYXJ0aXRp b24gaGFzIGJlZW4gaW5pdGlhbGl6ZWQqLwo+PiArwqDCoMKgIGlmICh3cC0+Z3VjX3dvcGNtX3Np emUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArwqDCoMKgIEdFTV9CVUdf T04oIWRldl9wcml2LT53b3BjbS5zaXplKTsKPj4gKwo+PiArwqDCoMKgIC8qTm8gbmVlZCB0byBk byBwYXJ0aXRpb24gaWYgZmFpbGVkIHRvIGZldGNoIGJvdGggR3VDIGFuZCBIdUMgRlcqLwo+PiAr wqDCoMKgIGlmIChndWNfZnctPmZldGNoX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJNV0FSRV9TVUND RVNTICYmCj4+ICvCoMKgwqDCoMKgwqDCoCBodWNfZnctPmZldGNoX3N0YXR1cyAhPSBJTlRFTF9V Q19GSVJNV0FSRV9TVUNDRVNTKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU87Cj4+ICsK Pj4gK8KgwqDCoCBodWNfc2l6ZSA9IDA7Cj4+ICvCoMKgwqAgZ3VjX3NpemUgPSAwOwo+PiArwqDC oMKgIG9mZnNldCA9IFdPUENNX1JFU0VSVkVEX1NJWkU7Cj4+ICvCoMKgwqAgcmVzZXJ2ZWQgPSBy YzZfY29udGV4dF9zaXplKGRldl9wcml2KTsKPj4gKwo+PiArwqDCoMKgIGlmIChodWNfZnctPmZl dGNoX3N0YXR1cyA9PSBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTKQo+PiArwqDCoMKgwqDCoMKg wqAgaHVjX3NpemUgPSBodWNfZnctPmhlYWRlcl9zaXplICsgaHVjX2Z3LT51Y29kZV9zaXplOwo+ PiArCj4+ICvCoMKgwqAgZXJyID0gZG9fd29wY21fcGFydGl0aW9uKGRldl9wcml2LCBvZmZzZXQg KyBodWNfc2l6ZSwgcmVzZXJ2ZWQpOwo+PiArwqDCoMKgIGlmIChlcnIpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIGlmICghaHVjX3NpemUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gcHRf ZG9uZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLypwYXJ0aXRpb24gZmFpbGVkIHdpdGggSHVD IEZXLCBibG9jayBIdUMgbG9hZGluZyovCj4+ICvCoMKgwqDCoMKgwqDCoCBodWNfc2l6ZSA9IDA7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qcGFydGl0aW9uIHdpdGhvdXQgbG9hZGluZyBIdUMg RlcqLwo+PiArwqDCoMKgwqDCoMKgwqAgZXJyID0gZG9fd29wY21fcGFydGl0aW9uKGRldl9wcml2 LCBvZmZzZXQsIHJlc2VydmVkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChlcnIpCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gcHRfZG9uZTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8Kg wqDCoCAvKgo+PiArwqDCoMKgwqAgKiBDaGVjayBoYXJkd2FyZSByZXN0cmljdGlvbiBvbiBHZW45 Cj4+ICvCoMKgwqDCoCAqIEd1QyBXT1BDTSBzaXplIGlzIGF0IGxlYXN0IDQgYnl0ZXMgbGFyZ2Vy IHRoYW4gR3VDIFdPUENNIGJhc2UgCj4+IGR1ZQo+PiArwqDCoMKgwqAgKiB0byBoYXJkd2FyZSBs aW1pdGF0aW9uIG9uIEdlbjkuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmIChJU19HRU45 KGRldl9wcml2KSkgewo+PiArwqDCoMKgwqDCoMKgwqAgd29wY21fYmFzZSA9IHdwLT5ndWNfd29w Y21fb2Zmc2V0ICsgR0VOOV9HVUNfV09QQ01fT0ZGU0VUOwo+IFNob3VsZCB0aGlzIEdFTjlfR1VD X1dPUENNX09GRlNFVCBiZSBhZGRlZCB0byAib2Zmc2V0IiBwcmlvciB0byAKPiBjYWxsaW5nIGRv X3dvcGNtX3BhcnRpdGlvbj8KPiBUaGVuIGl0IHdpbGwgdXBkYXRlIHdwLT5ndWNfd29wY21fb2Zm c2V0IGZvciBHZW45IGFzIHdlbGwuIE9yIHRoYXQgCj4gdXBkYXRlIGlzIG5vdCBuZWVkZWQ/ClRo aXMgY2hlY2sgaXMgb25seSBmb3IgZ2VuOSBhbmQgaXQncyBvbmx5IGZvciB2YWxpZGF0aW5nIHdo ZXRoZXIgdGhlIGd1YyAKc2l6ZSBjb3VsZCBtZWV0IGhhcmR3YXJlCnJlcXVpcmVtZW50LiB3ZSBk b24ndCBuZWVkIHRvIGluY2x1ZGUgdGhpcyBvZmZzZXQgaW4gZ3VjX3dvcGNtX29mZnNldC4KPj4g K8KgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseSh3b3BjbV9iYXNlID4gd3AtPmd1Y193b3BjbV9z aXplKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBwdF9kb25lOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoCBkZWx0YSA9IHdwLT5ndWNfd29wY21fc2l6ZSAtIHdvcGNtX2Jhc2U7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkoZGVsdGEgPCBHRU45X0dVQ19XT1BDTV9ERUxU QSkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gcHRfZG9uZTsKPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZ3VjX2Z3LT5mZXRjaF9zdGF0dXMgPT0gSU5URUxfVUNfRklS TVdBUkVfU1VDQ0VTUykgewo+PiArwqDCoMKgwqDCoMKgwqAgZ3VjX3NpemUgPSBndWNfZnctPmhl YWRlcl9zaXplICsgZ3VjX2Z3LT51Y29kZV9zaXplOwo+PiArwqDCoMKgwqDCoMKgwqAgLypuZWVk IDhLIHN0YWNrIGZvciBHdUMqLwo+PiArwqDCoMKgwqDCoMKgwqAgZ3VjX3NpemUgKz0gR1VDX1dP UENNX1NUQUNLX1JFU0VSVkVEOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmIChndWNf c2l6ZSA+IHdwLT5ndWNfd29wY21fc2l6ZSkKPj4gK8KgwqDCoMKgwqDCoMKgIGd1Y19zaXplID0g MDsKPj4gKwo+PiArcHRfZG9uZToKPj4gK8KgwqDCoCBpZiAoIWh1Y19zaXplKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoCBEUk1fRVJST1IoIkh1QyBmaXJtd2FyZSBpcyB0b28gbGFyZ2UgdG8gZml0IGlu IFdPUENNXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGludGVsX3VjX2Z3X2ZpbmkoaHVjX2Z3KTsK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWd1Y19zaXplKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBEUk1fRVJST1IoIkd1QyBmaXJtd2FyZSBpcyB0b28gbGFyZ2UgdG8gZml0IGluIFdP UENNXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGludGVsX3VjX2Z3X2ZpbmkoZ3VjX2Z3KTsKPj4g K8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJHdUMgV09QQ00gb2Zm c2V0ICVkS0IsIHNpemUgJWRLQiwgdG9wICVkS0JcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoCB3cC0+ Z3VjX3dvcGNtX29mZnNldCA+PiAxMCwKPj4gK8KgwqDCoMKgwqDCoMKgIHdwLT5ndWNfd29wY21f c2l6ZSA+PiAxMCwKPj4gK8KgwqDCoMKgwqDCoMKgIHdwLT5ndWNfd29wY21fdG9wID4+IDEwKTsK Pj4gKwo+PiArwqDCoMKgIHJldHVybiBlcnI7Cj4+ICt9Cj4+ICsKPj4gwqAgdm9pZCBpbnRlbF91 Y19pbml0X2Z3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgewo+PiDC oMKgwqDCoMKgIGludGVsX3VjX2Z3X2ZldGNoKGRldl9wcml2LCAmZGV2X3ByaXYtPmh1Yy5mdyk7 Cj4+IEBAIC0xNTcsNiArMjc2LDExIEBAIGludCBpbnRlbF91Y19pbml0X2h3KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYpCj4+IMKgwqDCoMKgwqAgaWYgKCFpOTE1X21vZHBh cmFtcy5lbmFibGVfZ3VjX2xvYWRpbmcpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4gwqAgK8KgwqDCoCAvKmluaXQgV09QQ00gcGFydGl0aW9uKi8KPj4gK8KgwqDCoCByZXQgPSBp bnRlbF91Y19pbml0X3dvcGNtX3BhcnRpdGlvbihkZXZfcHJpdik7Cj4+ICvCoMKgwqAgaWYgKHJl dCkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX3dvcGNtOwo+PiArCj4+IMKgwqDCoMKgwqAg Z3VjX2Rpc2FibGVfY29tbXVuaWNhdGlvbihndWMpOwo+PiDCoMKgwqDCoMKgIGdlbjlfcmVzZXRf Z3VjX2ludGVycnVwdHMoZGV2X3ByaXYpOwo+PiDCoCBAQCAtMTc2LDcgKzMwMCw3IEBAIGludCBp bnRlbF91Y19pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYpCj4+ IMKgwqDCoMKgwqAgLyogaW5pdCBXT1BDTSAqLwo+PiDCoMKgwqDCoMKgIEk5MTVfV1JJVEUoR1VD X1dPUENNX1NJWkUsIGludGVsX2d1Y193b3BjbV9zaXplKGRldl9wcml2KSk7Cj4+IMKgwqDCoMKg wqAgSTkxNV9XUklURShETUFfR1VDX1dPUENNX09GRlNFVCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgIEdVQ19XT1BDTV9PRkZTRVRfVkFMVUUgfCBIVUNfTE9BRElOR19BR0VOVF9HVUMpOwo+PiAr wqDCoMKgwqDCoMKgwqAgaW50ZWxfZ3VjX3dvcGNtX29mZnNldChkZXZfcHJpdikgfCBIVUNfTE9B RElOR19BR0VOVF9HVUMpOwo+PiDCoCDCoMKgwqDCoMKgIC8qIFdhRW5hYmxldUtlcm5lbEhlYWRl clZhbGlkRml4OnNrbCAqLwo+PiDCoMKgwqDCoMKgIC8qIFdhRW5hYmxlR3VDQm9vdEhhc2hDaGVj a05vdFNldDpza2wsYnh0LGtibCAqLwo+PiBAQCAtMjQ5LDcgKzM3Myw3IEBAIGludCBpbnRlbF91 Y19pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYpCj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBpOTE1X2d1Y19zdWJtaXNzaW9uX2ZpbmkoZGV2X3ByaXYpOwo+PiDCoCBl cnJfZ3VjOgo+PiDCoMKgwqDCoMKgIGk5MTVfZ2d0dF9kaXNhYmxlX2d1YyhkZXZfcHJpdik7Cj4+ IC0KPj4gK2Vycl93b3BjbToKPj4gwqDCoMKgwqDCoCBpZiAoaTkxNV9tb2RwYXJhbXMuZW5hYmxl X2d1Y19sb2FkaW5nID4gMSB8fAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9tb2RwYXJhbXMu ZW5hYmxlX2d1Y19zdWJtaXNzaW9uID4gMSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VS Uk9SKCJHdUMgaW5pdCBmYWlsZWQuIEZpcm13YXJlIGxvYWRpbmcgZGlzYWJsZWQuXG4iKTsKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMgCj4+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuYwo+PiBpbmRleCA5NzM4ODhlLi5hZWZiYTEz IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMKPj4gQEAgLTk1LDkgKzk1LDEz IEBAIHZvaWQgaW50ZWxfdWNfZndfZmV0Y2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpk ZXZfcHJpdiwKPj4gwqDCoMKgwqDCoCB1Y19mdy0+dWNvZGVfb2Zmc2V0ID0gdWNfZnctPmhlYWRl cl9vZmZzZXQgKyB1Y19mdy0+aGVhZGVyX3NpemU7Cj4+IMKgwqDCoMKgwqAgdWNfZnctPnVjb2Rl X3NpemUgPSAoY3NzLT5zaXplX2R3IC0gY3NzLT5oZWFkZXJfc2l6ZV9kdykgKiAKPj4gc2l6ZW9m KHUzMik7Cj4+IMKgIC3CoMKgwqAgLyogSGVhZGVyIGFuZCB1Q29kZSB3aWxsIGJlIGxvYWRlZCB0 byBXT1BDTSAqLwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIEhlYWRlciBhbmQgdUNvZGUg d2lsbCBiZSBsb2FkZWQgdG8gV09QQ00KPj4gK8KgwqDCoMKgICogT25seSBjaGVjayB0aGUgc2l6 ZSBhZ2FpbnN0IHRoZSBvdmVyYWxsIGF2YWlsYWJsZSBXT1BDTSBoZXJlLiAKPj4gV2lsbAo+PiAr wqDCoMKgwqAgKiBjb250aW51ZSB0byBjaGVjayB0aGUgc2l6ZSBkdXJpbmcgV09QQ00gcGFydGl0 aW9uIGNhbGN1bGF0aW9uLgo+PiArwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDCoCBzaXplID0gdWNf ZnctPmhlYWRlcl9zaXplICsgdWNfZnctPnVjb2RlX3NpemU7Cj4+IC3CoMKgwqAgaWYgKHNpemUg PiBpbnRlbF9ndWNfd29wY21fc2l6ZShkZXZfcHJpdikpIHsKPj4gK8KgwqDCoCBpZiAoc2l6ZSA+ IGRldl9wcml2LT53b3BjbS5zaXplKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fV0FSTigi JXM6IEZpcm13YXJlIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gV09QQ01cbiIsCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfdWNfZndfdHlwZV9yZXByKHVjX2Z3LT50eXBlKSk7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSAtRTJCSUc7Cj4+IEBAIC0yMDcsNiArMjExLDcg QEAgaW50IGludGVsX3VjX2Z3X3VwbG9hZChzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgKCp4ZmVyKShzdHJ1Y3QgaW50ZWxf dWNfZncgKnVjX2Z3LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBpOTE1X3ZtYSAqdm1hKSkKPj4gwqAgewo+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gdG9faTkxNSh1Y19mdy0+b2JqLT5iYXNlLmRldik7Cj4+IMKgwqDC oMKgwqAgc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4+IMKgwqDCoMKgwqAgaW50IGVycjsKPj4gwqAg QEAgLTIzMCw3ICsyMzUsOCBAQCBpbnQgaW50ZWxfdWNfZndfdXBsb2FkKHN0cnVjdCBpbnRlbF91 Y19mdyAqdWNfZncsCj4+IMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgIHZtYSA9IGk5MTVf Z2VtX29iamVjdF9nZ3R0X3Bpbih1Y19mdy0+b2JqLCBOVUxMLCAwLCAwLAo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUElOX09GRlNFVF9CSUFTIHwgR1VD X1dPUENNX1RPUCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBQSU5fT0ZGU0VUX0JJQVMgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaW50ZWxfZ3VjX3dvcGNtX3RvcChpOTE1KSk7Cj4+IMKgwqDCoMKgwqAg aWYgKElTX0VSUih2bWEpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKHZt YSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBnZ3R0LXBp biBlcnI9JWRcbiIsCj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=