From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id EB34F89FC0 for ; Wed, 26 Sep 2018 00:51:02 +0000 (UTC) Message-ID: <1537922950.2714.36.camel@intel.com> From: Paulo Zanoni Date: Tue, 25 Sep 2018 17:49:10 -0700 In-Reply-To: <20180925134741.19428-4-ville.syrjala@linux.intel.com> References: <20180925134741.19428-1-ville.syrjala@linux.intel.com> <20180925134741.19428-4-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 4/5] lib/igt_fb: Pass around igt_fb internally List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Ville Syrjala , igt-dev@lists.freedesktop.org List-ID: RW0gVGVyLCAyMDE4LTA5LTI1IMOgcyAxNjo0NyArMDMwMCwgVmlsbGUgU3lyamFsYSBlc2NyZXZl dToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t Pgo+IAo+IEluc3RlYWQgb2YgcGFzc2luZyBhcm91bmQgYSBib2F0bG9hZCBvZiBpbnRlZ2VycyBl dmVyeXdoZXJlIGxldCdzCj4ganVzdCBwYXNzIGFyb3VuZCB0aGUgaWd0X2ZiIHN0cnVjdC4gVGhh dCBvYnZpb3VzbHkgbWVhbnMgd2UgaGF2ZSB0bwo+IHBvcHVsYXRlIGl0IGZpcnN0IHN1ZmZpY2ll bnRseSwgdG8gd2hpY2ggZW5kIHdlJ2xsIGFkZCBhIHNtYWxsCj4gaGVscGVyLgo+IExhdGVyIG9u IHRoZSBzdHJpZGUvc2l6ZSBjYWxjdWxhdGlvbnMgd2lsbCBjb25zdWx0IHRoZSBhbHJlYWR5Cj4g cHJlLXBvcHVsYXRlZCBpZ3RfZmIgYW5kIGZpbGwgaW4gdGhlIHJlc3QgYXMgbmVlZGVkLgo+IAo+ IFRoaXMgbWFrZXMgdGhlIHdob2xlIHRoaW5nIGEgbG90IGxlc3MgZXJyb3IgcHJvbmUgYXMgaXQn cyBpbXBvc3NpYmxlCj4gdG8gYWNjaWRlbnRhbGx5IHBhc3MgdGhlIGFyZ3VtZW50cyBpbiB0aGUg d3Jvbmcgb3JkZXIgd2hlbiB0aGVyZSdzCj4ganVzdCB0aGUgb25lIG9mIHRoZW0sIGFuZCBpdCdz IGEgcG9pbnRlci4KCldoaWxlIEkgY29tcGxldGVseSBhZ3JlZSB3aXRoIHRoZXNlIGFyZ3VtZW50 cywgdGhpcyBjaGFuZ2UgZG9lcyBub3QKY29tZSB3aXRob3V0IGl0cyBvd24gbWlub3IgZG93bnNp ZGVzLiBDb2RlIHRoYXQgZGVhbHMtd2l0aC9pbml0aWFsaXplcwppZ3RfZmJfdCBpcyBub3cgYSBs aXR0bGUgcmlza2llciBkdWUgdG8gdGhlIHRoZSBmYWN0IHRoYXQgdGhlIG9yZGVyCndoaWNoIHRo aW5ncyBhcmUgaW5pdGlhbGl6ZWQgaXMgd2F5IG1vcmUgaW1wb3J0YW50IG5vdy4gQW5kIHdlIGFs c28KbW92ZWQgYSB3aG9sZSBsYXllciBvZiBvdXIgYWJzdHJhY3Rpb25zIHVwLCBidXQgdGhhdCBk aWRuJ3Qgc2VlbSB0byBiZQphIHByb2JsZW0gbm93IHNvIGxldCdzIGhvcGUgaXQgc3RpbGwgd29u J3QgYmUgYSBwcm9ibGVtIGxhdGVyLgoKU3RpbGwsIGEgcG9zaXRpdmUgY2hhbmdlIGV2ZW4gd2hl biBkb3duc2lkZXMgYXJlIGNvbnNpZGVyZWQuCgo+IAo+IHYyOiBSZWJhc2UgZHVlIHRvIHVpbnQ2 NF90IHNpemUKPiAKPiBDYzogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+ Cj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbT4KPiAtLS0KPiAgbGliL2lndF9kcmF3LmMgICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KPiAgbGliL2lndF9mYi5jICAgICAgICAgICAgICAgICAgICAgfCA0MDggKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tCj4gLS0tLS0tLS0tLS0tCj4gIGxpYi9pZ3RfZmIuaCAgICAgICAgICAg ICAgICAgICAgIHwgICA0ICstCj4gIHRlc3RzL2ttc19jY3MuYyAgICAgICAgICAgICAgICAgIHwg ICAyICstCj4gIHRlc3RzL2ttc19mbGlwLmMgICAgICAgICAgICAgICAgIHwgICA0ICstCj4gIHRl c3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jIHwgICA2ICstCj4gIHRlc3RzL3BtX3JwbS5j ICAgICAgICAgICAgICAgICAgIHwgICAyICstCj4gIDcgZmlsZXMgY2hhbmdlZCwgMjA3IGluc2Vy dGlvbnMoKyksIDIyMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9kcmF3 LmMgYi9saWIvaWd0X2RyYXcuYwo+IGluZGV4IGM3ZDU3NzBkY2EyOC4uMDU4MjE0ODBiYzgwIDEw MDY0NAo+IC0tLSBhL2xpYi9pZ3RfZHJhdy5jCj4gKysrIGIvbGliL2lndF9kcmF3LmMKPiBAQCAt NzIwLDcgKzcyMCw3IEBAIHZvaWQgaWd0X2RyYXdfcmVjdF9mYihpbnQgZmQsIGRybV9pbnRlbF9i dWZtZ3IKPiAqYnVmbWdyLAo+ICAJCSAgICAgIGVudW0gaWd0X2RyYXdfbWV0aG9kIG1ldGhvZCwg aW50IHJlY3RfeCwgaW50Cj4gcmVjdF95LAo+ICAJCSAgICAgIGludCByZWN0X3csIGludCByZWN0 X2gsIHVpbnQzMl90IGNvbG9yKQo+ICB7Cj4gLQlpZ3RfZHJhd19yZWN0KGZkLCBidWZtZ3IsIGNv bnRleHQsIGZiLT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgCj4gZmItPnN0cmlkZSwKPiArCWlndF9k cmF3X3JlY3QoZmQsIGJ1Zm1nciwgY29udGV4dCwgZmItPmdlbV9oYW5kbGUsIGZiLT5zaXplLCAK PiBmYi0+c3RyaWRlc1swXSwKPiAgCQkgICAgICBtZXRob2QsIHJlY3RfeCwgcmVjdF95LCByZWN0 X3csIHJlY3RfaCwgY29sb3IsCj4gIAkJICAgICAgaWd0X2RybV9mb3JtYXRfdG9fYnBwKGZiLT5k cm1fZm9ybWF0KSk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9mYi5jIGIvbGliL2lndF9m Yi5jCj4gaW5kZXggM2M2OTc0NTAzMzEzLi4yNjAxOWYwNDIwZGMgMTAwNjQ0Cj4gLS0tIGEvbGli L2lndF9mYi5jCj4gKysrIGIvbGliL2lndF9mYi5jCj4gQEAgLTE5MCw1MCArMTkwLDcyIEBAIHZv aWQgaWd0X2dldF9mYl90aWxlX3NpemUoaW50IGZkLCB1aW50NjRfdAo+IHRpbGluZywgaW50IGZi X2JwcCwKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIHVuc2lnbmVkIGZiX3BsYW5lX3dpZHRoKGNv bnN0IHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QKPiAqZm9ybWF0LAo+IC0JCQkgICAgICAgaW50 IHBsYW5lLCB1bnNpZ25lZCB3aWR0aCkKPiArc3RhdGljIHVuc2lnbmVkIGZiX3BsYW5lX3dpZHRo KGNvbnN0IHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgcGxhbmUpCj4gIHsKPiAtCWlmIChmb3JtYXQt PmRybV9pZCA9PSBEUk1fRk9STUFUX05WMTIgJiYgcGxhbmUgPT0gMSkKPiAtCQlyZXR1cm4gRElW X1JPVU5EX1VQKHdpZHRoLCAyKTsKPiArCWlmIChmYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFU X05WMTIgJiYgcGxhbmUgPT0gMSkKPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKGZiLT53aWR0aCwg Mik7Cj4gIAo+IC0JcmV0dXJuIHdpZHRoOwo+ICsJcmV0dXJuIGZiLT53aWR0aDsKPiAgfQo+ICAK PiAtc3RhdGljIHVuc2lnbmVkIGZiX3BsYW5lX2JwcChjb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nf c3RydWN0Cj4gKmZvcm1hdCwgaW50IHBsYW5lKQo+ICtzdGF0aWMgdW5zaWduZWQgZmJfcGxhbmVf YnBwKGNvbnN0IHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgcGxhbmUpCj4gIHsKPiArCWNvbnN0IHN0 cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCA9Cj4gbG9va3VwX2RybV9mb3JtYXQoZmIt PmRybV9mb3JtYXQpOwo+ICsKPiAgCXJldHVybiBmb3JtYXQtPnBsYW5lX2JwcFtwbGFuZV07Cj4g IH0KPiAgCj4gLXN0YXRpYyB1bnNpZ25lZCBmYl9wbGFuZV9taW5fc3RyaWRlKGNvbnN0IHN0cnVj dCBmb3JtYXRfZGVzY19zdHJ1Y3QKPiAqZm9ybWF0LAo+IC0JCQkJICAgIGludCBwbGFuZSwgdW5z aWduZWQgd2lkdGgpCj4gK3N0YXRpYyB1bnNpZ25lZCBmYl9wbGFuZV9oZWlnaHQoY29uc3Qgc3Ry dWN0IGlndF9mYiAqZmIsIGludCBwbGFuZSkKPiAgewo+IC0JdW5zaWduZWQgY3BwID0gZmJfcGxh bmVfYnBwKGZvcm1hdCwgcGxhbmUpIC8gODsKPiArCWlmIChmYi0+ZHJtX2Zvcm1hdCA9PSBEUk1f Rk9STUFUX05WMTIgJiYgcGxhbmUgPT0gMSkKPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKGZiLT5o ZWlnaHQsIDIpOwo+ICAKPiAtCXJldHVybiBmYl9wbGFuZV93aWR0aChmb3JtYXQsIHdpZHRoLCBw bGFuZSkgKiBjcHA7Cj4gKwlyZXR1cm4gZmItPmhlaWdodDsKPiAgfQo+ICAKPiAtc3RhdGljIHVu c2lnbmVkIGZiX3BsYW5lX2hlaWdodChjb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0Cj4g KmZvcm1hdCwKPiAtCQkJCWludCBwbGFuZSwgdW5zaWduZWQgaGVpZ2h0KQo+ICtzdGF0aWMgaW50 IGZiX251bV9wbGFuZXMoY29uc3Qgc3RydWN0IGlndF9mYiAqZmIpCj4gIHsKPiAtCWlmIChmb3Jt YXQtPmRybV9pZCA9PSBEUk1fRk9STUFUX05WMTIgJiYgcGxhbmUgPT0gMSkKPiAtCQlyZXR1cm4g RElWX1JPVU5EX1VQKGhlaWdodCwgMik7Cj4gKwljb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3Ry dWN0ICpmb3JtYXQgPQo+IGxvb2t1cF9kcm1fZm9ybWF0KGZiLT5kcm1fZm9ybWF0KTsKPiAgCj4g LQlyZXR1cm4gaGVpZ2h0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGZiX251bV9wbGFuZXMoY29u c3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0KQo+IC17Cj4gIAlyZXR1cm4gZm9y bWF0LT5udW1fcGxhbmVzOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdW5zaWduZWQgY2FsY19wbGFuZV9z dHJpZGUoaW50IGZkLAo+IC0JCQkJICBjb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0Cj4g KmZvcm1hdCwKPiAtCQkJCSAgaW50IHdpZHRoLCB1aW50NjRfdCB0aWxpbmcsIGludAo+IHBsYW5l KQo+ICtzdGF0aWMgdm9pZCBmYl9pbml0KHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCSAgICBpbnQg ZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKPiArCQkgICAgdWludDMyX3QgZHJtX2Zvcm1hdCwK PiArCQkgICAgdWludDY0X3QgbW9kaWZpZXIsCj4gKwkJICAgIGVudW0gaWd0X2NvbG9yX2VuY29k aW5nIGNvbG9yX2VuY29kaW5nLAo+ICsJCSAgICBlbnVtIGlndF9jb2xvcl9yYW5nZSBjb2xvcl9y YW5nZSkKPiAgewo+IC0JdWludDMyX3QgbWluX3N0cmlkZSA9IGZiX3BsYW5lX21pbl9zdHJpZGUo Zm9ybWF0LCB3aWR0aCwKPiBwbGFuZSk7Cj4gKwljb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3Ry dWN0ICpmID0KPiBsb29rdXBfZHJtX2Zvcm1hdChkcm1fZm9ybWF0KTsKPiAgCj4gLQlpZiAodGls aW5nICE9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUgJiYKPiAtCSAgICBpbnRlbF9nZW4oaW50 ZWxfZ2V0X2RybV9kZXZpZChmZCkpIDw9IDMpIHsKPiArCWlndF9hc3NlcnRfZihmLCAiRFJNIGZv cm1hdCAlMDh4IG5vdCBmb3VuZFxuIiwgZHJtX2Zvcm1hdCk7Cj4gKwo+ICsJbWVtc2V0KGZiLCAw LCBzaXplb2YoKmZiKSk7Cj4gKwo+ICsJZmItPndpZHRoID0gd2lkdGg7Cj4gKwlmYi0+aGVpZ2h0 ID0gaGVpZ2h0Owo+ICsJZmItPnRpbGluZyA9IG1vZGlmaWVyOwoKU2hvdWxkbid0IHdlIHJlbmFt ZSBmYi0+dGlsaW5nIG5vdz8gKG9mIGNvdXJzZSwgaW4gYSBzZXBhcmF0ZSBwYXRjaCkKCkV2ZXJ5 dGhpbmcgZWxzZSBsb29rcyBjb3JyZWN0LgoKUmV2aWV3ZWQtYnk6IFBhdWxvIFphbm9uaSA8cGF1 bG8uci56YW5vbmlAaW50ZWwuY29tPgoKPiArCWZiLT5kcm1fZm9ybWF0ID0gZHJtX2Zvcm1hdDsK PiArCWZiLT5mZCA9IGZkOwo+ICsJZmItPm51bV9wbGFuZXMgPSBmYl9udW1fcGxhbmVzKGZiKTsK PiArCWZiLT5jb2xvcl9lbmNvZGluZyA9IGNvbG9yX2VuY29kaW5nOwo+ICsJZmItPmNvbG9yX3Jh bmdlID0gY29sb3JfcmFuZ2U7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBmYi0+bnVtX3Bs YW5lczsgaSsrKSB7Cj4gKwkJZmItPnBsYW5lX2JwcFtpXSA9IGZiX3BsYW5lX2JwcChmYiwgaSk7 Cj4gKwkJZmItPnBsYW5lX2hlaWdodFtpXSA9IGZiX3BsYW5lX2hlaWdodChmYiwgaSk7Cj4gKwkJ ZmItPnBsYW5lX3dpZHRoW2ldID0gZmJfcGxhbmVfd2lkdGgoZmIsIGkpOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdWludDMyX3QgY2FsY19wbGFuZV9zdHJpZGUoc3RydWN0IGlndF9mYiAqZmIs IGludCBwbGFuZSkKPiArewo+ICsJdWludDMyX3QgbWluX3N0cmlkZSA9IGZiLT5wbGFuZV93aWR0 aFtwbGFuZV0gKgo+ICsJCShmYi0+cGxhbmVfYnBwW3BsYW5lXSAvIDgpOwo+ICsKPiArCWlmIChm Yi0+dGlsaW5nICE9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUgJiYKPiArCSAgICBpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmYi0+ZmQpKSA8PSAzKSB7Cj4gIAkJdWludDMyX3Qgc3Ry aWRlOwo+ICAKPiAgCQkvKiBSb3VuZCB0aGUgdGlsaW5nIHVwIHRvIHRoZSBuZXh0IHBvd2VyLW9m LXR3byBhbmQKPiB0aGUgcmVnaW9uCj4gQEAgLTI1MSwyMiArMjczLDE5IEBAIHN0YXRpYyB1bnNp Z25lZCBjYWxjX3BsYW5lX3N0cmlkZShpbnQgZmQsCj4gIAl9IGVsc2Ugewo+ICAJCXVuc2lnbmVk IGludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiAgCj4gLQkJaWd0X2dldF9mYl90aWxlX3Np emUoZmQsIHRpbGluZywKPiAtCQkJCSAgICAgZmJfcGxhbmVfYnBwKGZvcm1hdCwgcGxhbmUpLAo+ ICsJCWlndF9nZXRfZmJfdGlsZV9zaXplKGZiLT5mZCwgZmItPnRpbGluZywgZmItCj4gPnBsYW5l X2JwcFtwbGFuZV0sCj4gIAkJCQkgICAgICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwo+ICAK PiAgCQlyZXR1cm4gQUxJR04obWluX3N0cmlkZSwgdGlsZV93aWR0aCk7Cj4gIAl9Cj4gIH0KPiAg Cj4gLXN0YXRpYyB1aW50NjRfdCBjYWxjX3BsYW5lX3NpemUoaW50IGZkLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsCj4gLQkJCQljb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0Cj4gKmZvcm1h dCwKPiAtCQkJCXVpbnQ2NF90IHRpbGluZywgaW50IHBsYW5lLAo+IC0JCQkJdWludDMyX3Qgc3Ry aWRlKQo+ICtzdGF0aWMgdWludDY0X3QgY2FsY19wbGFuZV9zaXplKHN0cnVjdCBpZ3RfZmIgKmZi LCBpbnQgcGxhbmUpCj4gIHsKPiAtCWlmICh0aWxpbmcgIT0gTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSAmJgo+IC0JICAgIGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPD0gMykg ewo+IC0JCXVpbnQ2NF90IG1pbl9zaXplID0gKHVpbnQ2NF90KSBzdHJpZGUgKiBoZWlnaHQ7Cj4g KwlpZiAoZmItPnRpbGluZyAhPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FICYmCj4gKwkgICAg aW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmItPmZkKSkgPD0gMykgewo+ICsJCXVpbnQ2 NF90IG1pbl9zaXplID0gKHVpbnQ2NF90KSBmYi0+c3RyaWRlc1twbGFuZV0gKgo+ICsJCQlmYi0+ cGxhbmVfaGVpZ2h0W3BsYW5lXTsKPiAgCQl1aW50NjRfdCBzaXplOwo+ICAKPiAgCQkvKiBSb3Vu ZCB0aGUgdGlsaW5nIHVwIHRvIHRoZSBuZXh0IHBvd2VyLW9mLXR3byBhbmQKPiB0aGUgcmVnaW9u Cj4gQEAgLTI4NCwzOCArMzAzLDI3IEBAIHN0YXRpYyB1aW50NjRfdCBjYWxjX3BsYW5lX3NpemUo aW50IGZkLCBpbnQKPiB3aWR0aCwgaW50IGhlaWdodCwKPiAgCX0gZWxzZSB7Cj4gIAkJdW5zaWdu ZWQgaW50IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ICAKPiAtCQlpZ3RfZ2V0X2ZiX3RpbGVf c2l6ZShmZCwgdGlsaW5nLAo+IGZiX3BsYW5lX2JwcChmb3JtYXQsIHBsYW5lKSwKPiArCQlpZ3Rf Z2V0X2ZiX3RpbGVfc2l6ZShmYi0+ZmQsIGZiLT50aWxpbmcsIGZiLQo+ID5wbGFuZV9icHBbcGxh bmVdLAo+ICAJCQkJICAgICAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKPiAgCj4gLQkJcmV0 dXJuICh1aW50NjRfdCkgc3RyaWRlICogQUxJR04oaGVpZ2h0LAo+IHRpbGVfaGVpZ2h0KTsKPiAr CQlyZXR1cm4gKHVpbnQ2NF90KSBmYi0+c3RyaWRlc1twbGFuZV0gKgo+ICsJCQlBTElHTihmYi0+ cGxhbmVfaGVpZ2h0W3BsYW5lXSwgdGlsZV9oZWlnaHQpOwo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0 aWMgdWludDY0X3QgY2FsY19mYl9zaXplKGludCBmZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAo+ IC0JCQkgICAgIGNvbnN0IHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QKPiAqZm9ybWF0LAo+IC0J CQkgICAgIHVpbnQ2NF90IHRpbGluZywKPiAtCQkJICAgICB1aW50MzJfdCBzdHJpZGVzWzRdLCB1 aW50MzJfdAo+IG9mZnNldHNbNF0pCj4gK3N0YXRpYyB1aW50NjRfdCBjYWxjX2ZiX3NpemUoc3Ry dWN0IGlndF9mYiAqZmIpCj4gIHsKPiAgCXVpbnQ2NF90IHNpemUgPSAwOwo+ICAJaW50IHBsYW5l Owo+ICAKPiAtCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGZiX251bV9wbGFuZXMoZm9ybWF0KTsg cGxhbmUrKykgewo+IC0JCWlmICghc3RyaWRlc1twbGFuZV0pCj4gLQkJCXN0cmlkZXNbcGxhbmVd ID0gY2FsY19wbGFuZV9zdHJpZGUoZmQsCj4gZm9ybWF0LAo+IC0JCQkJCQkJICAgd2lkdGgsCj4g dGlsaW5nLCBwbGFuZSk7Cj4gKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBmYi0+bnVtX3BsYW5l czsgcGxhbmUrKykgewo+ICsJCS8qIHJlc3BlY3QgdGhlIHN0cmlkZSByZXF1ZXN0ZWQgYnkgdGhl IGNhbGxlciAqLwo+ICsJCWlmICghZmItPnN0cmlkZXNbcGxhbmVdKQo+ICsJCQlmYi0+c3RyaWRl c1twbGFuZV0gPSBjYWxjX3BsYW5lX3N0cmlkZShmYiwKPiBwbGFuZSk7Cj4gIAo+IC0JCWlmIChv ZmZzZXRzKQo+IC0JCQlvZmZzZXRzW3BsYW5lXSA9IHNpemU7Cj4gKwkJZmItPm9mZnNldHNbcGxh bmVdID0gc2l6ZTsKPiAgCj4gLQkJc2l6ZSArPSBjYWxjX3BsYW5lX3NpemUoZmQsIHdpZHRoLCBo ZWlnaHQsCj4gLQkJCQkJZm9ybWF0LCB0aWxpbmcsIHBsYW5lLAo+IC0JCQkJCXN0cmlkZXNbcGxh bmVdKTsKPiAtCX0KPiAtCj4gLQlmb3IgKDsgcGxhbmUgPCBBUlJBWV9TSVpFKGZvcm1hdC0+cGxh bmVfYnBwKTsgcGxhbmUrKykgewo+IC0JCXN0cmlkZXNbcGxhbmVdID0gMDsKPiAtCQlpZiAob2Zm c2V0cykKPiAtCQkJb2Zmc2V0c1twbGFuZV0gPSAwOwo+ICsJCXNpemUgKz0gY2FsY19wbGFuZV9z aXplKGZiLCBwbGFuZSk7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIHNpemU7Cj4gQEAgLTMzNywxMyAr MzQ1LDE3IEBAIHN0YXRpYyB1aW50NjRfdCBjYWxjX2ZiX3NpemUoaW50IGZkLCBpbnQgd2lkdGgs Cj4gaW50IGhlaWdodCwKPiAgdm9pZCBpZ3RfY2FsY19mYl9zaXplKGludCBmZCwgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCB1aW50MzJfdAo+IGRybV9mb3JtYXQsIHVpbnQ2NF90IHRpbGluZywKPiAg CQkgICAgICB1aW50NjRfdCAqc2l6ZV9yZXQsIHVuc2lnbmVkICpzdHJpZGVfcmV0KQo+ICB7Cj4g LQljb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpmb3JtYXQgPQo+IGxvb2t1cF9kcm1f Zm9ybWF0KGRybV9mb3JtYXQpOwo+IC0JdWludDMyX3Qgc3RyaWRlc1s0XSA9IHt9Owo+ICsJc3Ry dWN0IGlndF9mYiBmYjsKPiAgCj4gLQlpZ3RfYXNzZXJ0KGZvcm1hdCk7Cj4gKwlmYl9pbml0KCZm YiwgZmQsIHdpZHRoLCBoZWlnaHQsIGRybV9mb3JtYXQsIHRpbGluZywKPiArCQlJR1RfQ09MT1Jf WUNCQ1JfQlQ3MDksCj4gSUdUX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOwo+ICAKPiAtCSpz aXplX3JldCA9IGNhbGNfZmJfc2l6ZShmZCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0aWxpbmcs Cj4gc3RyaWRlcywgTlVMTCk7Cj4gLQkqc3RyaWRlX3JldCA9IHN0cmlkZXNbMF07Cj4gKwlmYi5z aXplID0gY2FsY19mYl9zaXplKCZmYik7Cj4gKwo+ICsJaWYgKHNpemVfcmV0KQo+ICsJCSpzaXpl X3JldCA9IGZiLnNpemU7Cj4gKwlpZiAoc3RyaWRlX3JldCkKPiArCQkqc3RyaWRlX3JldCA9IGZi LnN0cmlkZXNbMF07Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0zOTksODAgKzQxMSw2NCBAQCB1aW50 NjRfdCBpZ3RfZmJfdGlsaW5nX3RvX21vZCh1aW50NjRfdCB0aWxpbmcpCj4gIH0KPiAgCj4gIC8q IGhlbHBlcnMgdG8gY3JlYXRlIG5pY2UtbG9va2luZyBmcmFtZWJ1ZmZlcnMgKi8KPiAtc3RhdGlj IGludCBjcmVhdGVfYm9fZm9yX2ZiKGludCBmZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAo+IC0J CQkgICAgZW51bSBpZ3RfY29sb3JfZW5jb2RpbmcgY29sb3JfZW5jb2RpbmcsCj4gLQkJCSAgICBl bnVtIGlndF9jb2xvcl9yYW5nZSBjb2xvcl9yYW5nZSwKPiAtCQkJICAgIGNvbnN0IHN0cnVjdCBm b3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCwKPiAtCQkJICAgIHVpbnQ2NF90IHRpbGluZywgdWlu dDY0X3Qgc2l6ZSwgdW5zaWduZWQKPiBzdHJpZGUsCj4gLQkJCSAgICB1aW50NjRfdCAqc2l6ZV9y ZXQsIHVuc2lnbmVkCj4gKnN0cmlkZV9yZXQsCj4gLQkJCSAgICB1aW50MzJfdCBvZmZzZXRzWzRd LCBib29sICppc19kdW1iKQo+ICtzdGF0aWMgaW50IGNyZWF0ZV9ib19mb3JfZmIoc3RydWN0IGln dF9mYiAqZmIpCj4gIHsKPiAtCWludCBibzsKPiArCWludCBmZCA9IGZiLT5mZDsKPiAgCj4gLQlp Z3RfYXNzZXJ0KGZvcm1hdCk7Cj4gKwlpZiAoZmItPnRpbGluZyB8fCBmYi0+c2l6ZSB8fCBmYi0+ c3RyaWRlc1swXSB8fAo+IGlndF9mb3JtYXRfaXNfeXV2KGZiLT5kcm1fZm9ybWF0KSkgewo+ICsJ CXVpbnQ2NF90IHNpemU7Cj4gIAo+IC0JaWYgKG9mZnNldHMpCj4gLQkJbWVtc2V0KG9mZnNldHMs IDAsIEFSUkFZX1NJWkUoZm9ybWF0LT5wbGFuZV9icHApICoKPiBzaXplb2YoKm9mZnNldHMpKTsK PiArCQlzaXplID0gY2FsY19mYl9zaXplKGZiKTsKPiAgCj4gLQlpZiAodGlsaW5nIHx8IHNpemUg fHwgc3RyaWRlIHx8IGlndF9mb3JtYXRfaXNfeXV2KGZvcm1hdC0KPiA+ZHJtX2lkKSkgewo+IC0J CXVpbnQ2NF90IGNhbGN1bGF0ZWRfc2l6ZTsKPiAtCQl1aW50MzJfdCBzdHJpZGVzWzRdID0gewo+ IC0JCQlzdHJpZGUsCj4gLQkJfTsKPiArCQkvKiByZXNwZWN0IHRoZSBzaXplIHJlcXVlc3RlZCBi eSB0aGUgY2FsbGVyICovCj4gKwkJaWYgKGZiLT5zaXplID09IDApCj4gKwkJCWZiLT5zaXplID0g c2l6ZTsKPiAgCj4gLQkJY2FsY3VsYXRlZF9zaXplID0gY2FsY19mYl9zaXplKGZkLCB3aWR0aCwg aGVpZ2h0LAo+IC0JCQkJCSAgICAgICBmb3JtYXQsIHRpbGluZywKPiAtCQkJCQkgICAgICAgc3Ry aWRlcywgb2Zmc2V0cyk7Cj4gLQo+IC0JCWlmIChzdHJpZGUgPT0gMCkKPiAtCQkJc3RyaWRlID0g c3RyaWRlc1swXTsKPiAtCQlpZiAoc2l6ZSA9PSAwKQo+IC0JCQlzaXplID0gY2FsY3VsYXRlZF9z aXplOwo+IC0KPiAtCQlpZiAoaXNfZHVtYikKPiAtCQkJKmlzX2R1bWIgPSBmYWxzZTsKPiArCQlm Yi0+aXNfZHVtYiA9IGZhbHNlOwo+ICAKPiAgCQlpZiAoaXNfaTkxNV9kZXZpY2UoZmQpKSB7Cj4g IAkJCXZvaWQgKnB0cjsKPiAtCQkJYm9vbCBmdWxsX3JhbmdlID0gY29sb3JfcmFuZ2UgPT0KPiBJ R1RfQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRTsKPiArCQkJYm9vbCBmdWxsX3JhbmdlID0gZmItPmNv bG9yX3JhbmdlID09Cj4gSUdUX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0U7Cj4gIAo+IC0JCQlibyA9 IGdlbV9jcmVhdGUoZmQsIHNpemUpOwo+IC0JCQlnZW1fc2V0X3RpbGluZyhmZCwgYm8sCj4gaWd0 X2ZiX21vZF90b190aWxpbmcodGlsaW5nKSwgc3RyaWRlKTsKPiArCQkJZmItPmdlbV9oYW5kbGUg PSBnZW1fY3JlYXRlKGZkLCBmYi0+c2l6ZSk7Cj4gIAo+IC0JCQlnZW1fc2V0X2RvbWFpbihmZCwg Ym8sCj4gKwkJCWdlbV9zZXRfdGlsaW5nKGZkLCBmYi0+Z2VtX2hhbmRsZSwKPiArCQkJCSAgICAg ICBpZ3RfZmJfbW9kX3RvX3RpbGluZyhmYi0KPiA+dGlsaW5nKSwKPiArCQkJCSAgICAgICBmYi0+ c3RyaWRlc1swXSk7Cj4gKwo+ICsJCQlnZW1fc2V0X2RvbWFpbihmZCwgZmItPmdlbV9oYW5kbGUs Cj4gIAkJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwKPiBJOTE1X0dFTV9ET01BSU5fR1RU KTsKPiAgCj4gIAkJCS8qIEVuc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgcHJlYWxsb2NhdGVkICov Cj4gLQkJCXB0ciA9IGdlbV9tbWFwX19ndHQoZmQsIGJvLCBzaXplLCBQUk9UX1JFQUQKPiB8IFBS T1RfV1JJVEUpOwo+ICsJCQlwdHIgPSBnZW1fbW1hcF9fZ3R0KGZkLCBmYi0+Z2VtX2hhbmRsZSwK PiArCQkJCQkgICAgZmItPnNpemUsIFBST1RfUkVBRCB8Cj4gUFJPVF9XUklURSk7Cj4gIAkJCWln dF9hc3NlcnQoKih1aW50MzJfdCAqKXB0ciA9PSAwKTsKPiAgCj4gLQkJCXN3aXRjaCAoZm9ybWF0 LT5kcm1faWQpIHsKPiArCQkJc3dpdGNoIChmYi0+ZHJtX2Zvcm1hdCkgewo+ICAJCQljYXNlIERS TV9GT1JNQVRfTlYxMjoKPiAtCQkJCW1lbXNldChwdHIgKyBvZmZzZXRzWzBdLCBmdWxsX3Jhbmdl Cj4gPyAweDAwIDogMHgxMCwKPiAtCQkJCSAgICAgICBzdHJpZGVzWzBdICogaGVpZ2h0KTsKPiAt CQkJCW1lbXNldChwdHIgKyBvZmZzZXRzWzFdLCAweDgwLAo+IC0JCQkJICAgICAgIHN0cmlkZXNb MV0gKiBoZWlnaHQvMik7Cj4gKwkJCQltZW1zZXQocHRyICsgZmItPm9mZnNldHNbMF0sCj4gKwkJ CQkgICAgICAgZnVsbF9yYW5nZSA/IDB4MDAgOiAweDEwLAo+ICsJCQkJICAgICAgIGZiLT5zdHJp ZGVzWzBdICogZmItCj4gPnBsYW5lX2hlaWdodFswXSk7Cj4gKwkJCQltZW1zZXQocHRyICsgZmIt Pm9mZnNldHNbMV0sCj4gKwkJCQkgICAgICAgMHg4MCwKPiArCQkJCSAgICAgICBmYi0+c3RyaWRl c1sxXSAqIGZiLQo+ID5wbGFuZV9oZWlnaHRbMV0pOwo+ICAJCQkJYnJlYWs7Cj4gIAkJCWNhc2Ug RFJNX0ZPUk1BVF9ZVVlWOgo+ICAJCQljYXNlIERSTV9GT1JNQVRfWVZZVToKPiAtCQkJCXdtZW1z ZXQocHRyLCBmdWxsX3JhbmdlID8gMHg4MDAwODAwMAo+IDogMHg4MDEwODAxMCwKPiAtCQkJCQlz dHJpZGVzWzBdICogaGVpZ2h0IC8KPiBzaXplb2Yod2NoYXJfdCkpOwo+ICsJCQkJd21lbXNldChw dHIgKyBmYi0+b2Zmc2V0c1swXSwKPiArCQkJCQlmdWxsX3JhbmdlID8gMHg4MDAwODAwMCA6Cj4g MHg4MDEwODAxMCwKPiArCQkJCQlmYi0+c3RyaWRlc1swXSAqIGZiLQo+ID5wbGFuZV9oZWlnaHRb MF0gLyBzaXplb2Yod2NoYXJfdCkpOwo+ICAJCQkJYnJlYWs7Cj4gIAkJCWNhc2UgRFJNX0ZPUk1B VF9VWVZZOgo+ICAJCQljYXNlIERSTV9GT1JNQVRfVllVWToKPiAtCQkJCXdtZW1zZXQocHRyLCBm dWxsX3JhbmdlID8gMHgwMDgwMDA4MAo+IDogMHgxMDgwMTA4MCwKPiAtCQkJCQlzdHJpZGVzWzBd ICogaGVpZ2h0IC8KPiBzaXplb2Yod2NoYXJfdCkpOwo+ICsJCQkJd21lbXNldChwdHIgKyBmYi0+ b2Zmc2V0c1swXSwKPiArCQkJCQlmdWxsX3JhbmdlID8gMHgwMDgwMDA4MCA6Cj4gMHgxMDgwMTA4 MCwKPiArCQkJCQlmYi0+c3RyaWRlc1swXSAqIGZiLQo+ID5wbGFuZV9oZWlnaHRbMF0gLyBzaXpl b2Yod2NoYXJfdCkpOwo+ICAJCQkJYnJlYWs7Cj4gIAkJCX0KPiAtCQkJZ2VtX211bm1hcChwdHIs IHNpemUpOwo+ICsJCQlnZW1fbXVubWFwKHB0ciwgZmItPnNpemUpOwo+ICAKPiAtCQkJaWYgKHNp emVfcmV0KQo+IC0JCQkJKnNpemVfcmV0ID0gc2l6ZTsKPiAtCj4gLQkJCWlmIChzdHJpZGVfcmV0 KQo+IC0JCQkJKnN0cmlkZV9yZXQgPSBzdHJpZGVzWzBdOwo+IC0KPiAtCQkJcmV0dXJuIGJvOwo+ ICsJCQlyZXR1cm4gZmItPmdlbV9oYW5kbGU7Cj4gIAkJfSBlbHNlIHsKPiAgCQkJYm9vbCBkcml2 ZXJfaGFzX2dlbV9hcGkgPSBmYWxzZTsKPiAgCj4gQEAgLTQ4MCwxMiArNDc2LDEzIEBAIHN0YXRp YyBpbnQgY3JlYXRlX2JvX2Zvcl9mYihpbnQgZmQsIGludCB3aWR0aCwKPiBpbnQgaGVpZ2h0LAo+ ICAJCQlyZXR1cm4gLUVJTlZBTDsKPiAgCQl9Cj4gIAl9IGVsc2Ugewo+IC0JCWlmIChpc19kdW1i KQo+IC0JCQkqaXNfZHVtYiA9IHRydWU7Cj4gKwkJZmItPmlzX2R1bWIgPSB0cnVlOwo+ICAKPiAt CQlyZXR1cm4ga21zdGVzdF9kdW1iX2NyZWF0ZShmZCwgd2lkdGgsIGhlaWdodCwKPiAtCQkJCQkg ICBmYl9wbGFuZV9icHAoZm9ybWF0LCAwKSwKPiAtCQkJCQkgICBzdHJpZGVfcmV0LCBzaXplX3Jl dCk7Cj4gKwkJZmItPmdlbV9oYW5kbGUgPSBrbXN0ZXN0X2R1bWJfY3JlYXRlKGZkLCBmYi0+d2lk dGgsCj4gZmItPmhlaWdodCwKPiArCQkJCQkJICAgICBmYi0KPiA+cGxhbmVfYnBwWzBdLAo+ICsJ CQkJCQkgICAgICZmYi0KPiA+c3RyaWRlc1swXSwgJmZiLT5zaXplKTsKPiArCj4gKwkJcmV0dXJu IGZiLT5nZW1faGFuZGxlOwo+ICAJfQo+ICB9Cj4gIAo+IEBAIC01MTIsMTEgKzUwOSwyNCBAQCBp bnQgaWd0X2NyZWF0ZV9ib193aXRoX2RpbWVuc2lvbnMoaW50IGZkLCBpbnQKPiB3aWR0aCwgaW50 IGhlaWdodCwKPiAgCQkJCSAgdW5zaWduZWQgc3RyaWRlLCB1aW50NjRfdAo+ICpzaXplX3JldCwK PiAgCQkJCSAgdW5zaWduZWQgKnN0cmlkZV9yZXQsIGJvb2wKPiAqaXNfZHVtYikKPiAgewo+IC0J cmV0dXJuIGNyZWF0ZV9ib19mb3JfZmIoZmQsIHdpZHRoLCBoZWlnaHQsCj4gLQkJCQlJR1RfQ09M T1JfWUNCQ1JfQlQ3MDksCj4gLQkJCQlJR1RfQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSwKPiAt CQkJCWxvb2t1cF9kcm1fZm9ybWF0KGZvcm1hdCksCj4gLQkJCQltb2RpZmllciwgMCwgc3RyaWRl LCBzaXplX3JldCwKPiBzdHJpZGVfcmV0LCBOVUxMLCBpc19kdW1iKTsKPiArCXN0cnVjdCBpZ3Rf ZmIgZmI7Cj4gKwo+ICsJZmJfaW5pdCgmZmIsIGZkLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIG1v ZGlmaWVyLAo+ICsJCUlHVF9DT0xPUl9ZQ0JDUl9CVDcwOSwKPiBJR1RfQ09MT1JfWUNCQ1JfTElN SVRFRF9SQU5HRSk7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBmYi5udW1fcGxhbmVzOyBp KyspCj4gKwkJZmIuc3RyaWRlc1tpXSA9IHN0cmlkZTsKPiArCj4gKwljcmVhdGVfYm9fZm9yX2Zi KCZmYik7Cj4gKwo+ICsJaWYgKHNpemVfcmV0KQo+ICsJCSpzaXplX3JldCA9IGZiLnNpemU7Cj4g KwlpZiAoc3RyaWRlX3JldCkKPiArCQkqc3RyaWRlX3JldCA9IGZiLnN0cmlkZXNbMF07Cj4gKwlp ZiAoaXNfZHVtYikKPiArCQkqaXNfZHVtYiA9IGZiLmlzX2R1bWI7Cj4gKwo+ICsJcmV0dXJuIGZi LmdlbV9oYW5kbGU7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC04NjAsNTIgKzg3MCwzMiBAQCBpZ3Rf Y3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShpbnQgZmQsIGludCB3aWR0aCwKPiBpbnQgaGVpZ2h0LAo+ ICAJLyogRklYTUUgYWxsb3cgdGhlIGNhbGxlciB0byBwYXNzIHRoZXNlIGluICovCj4gIAllbnVt IGlndF9jb2xvcl9lbmNvZGluZyBjb2xvcl9lbmNvZGluZyA9Cj4gSUdUX0NPTE9SX1lDQkNSX0JU NzA5Owo+ICAJZW51bSBpZ3RfY29sb3JfcmFuZ2UgY29sb3JfcmFuZ2UgPQo+IElHVF9DT0xPUl9Z Q0JDUl9MSU1JVEVEX1JBTkdFOwo+IC0JY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAq ZiA9Cj4gbG9va3VwX2RybV9mb3JtYXQoZm9ybWF0KTsKPiAtCXVpbnQzMl90IHBpdGNoZXNbNF07 Cj4gLQl1aW50MzJfdCBmYl9pZDsKPiAtCWludCBpOwo+ICAKPiAtCWlndF9hc3NlcnRfZihmLCAi RFJNIGZvcm1hdCAlMDh4IG5vdCBmb3VuZFxuIiwgZm9ybWF0KTsKPiArCWZiX2luaXQoZmIsIGZk LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRpbGluZywKPiArCQljb2xvcl9lbmNvZGluZywgY29s b3JfcmFuZ2UpOwo+ICAKPiAtCW1lbXNldChmYiwgMCwgc2l6ZW9mKCpmYikpOwo+ICsJZm9yIChp bnQgaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsgaSsrKQo+ICsJCWZiLT5zdHJpZGVzW2ldID0g Ym9fc3RyaWRlOwo+ICsKPiArCWZiLT5zaXplID0gYm9fc2l6ZTsKPiAgCj4gIAlpZ3RfZGVidWco IiVzKHdpZHRoPSVkLCBoZWlnaHQ9JWQsIGZvcm1hdD0weCV4LAo+IHRpbGluZz0weCUiUFJJeDY0 Iiwgc2l6ZT0lIlBSSXU2NCIpXG4iLAo+ICAJCSAgX19mdW5jX18sIHdpZHRoLCBoZWlnaHQsIGZv cm1hdCwgdGlsaW5nLCBib19zaXplKTsKPiAtCWZiLT5nZW1faGFuZGxlID0gY3JlYXRlX2JvX2Zv cl9mYihmZCwgd2lkdGgsIGhlaWdodCwKPiAtCQkJCQkgIGNvbG9yX2VuY29kaW5nLAo+IGNvbG9y X3JhbmdlLAo+IC0JCQkJCSAgZiwgdGlsaW5nLCBib19zaXplLAo+IGJvX3N0cmlkZSwKPiAtCQkJ CQkgICZmYi0+c2l6ZSwgJmZiLT5zdHJpZGUsCj4gLQkJCQkJICBmYi0+b2Zmc2V0cywgJmZiLQo+ ID5pc19kdW1iKTsKPiArCj4gKwljcmVhdGVfYm9fZm9yX2ZiKGZiKTsKPiAgCWlndF9hc3NlcnQo ZmItPmdlbV9oYW5kbGUgPiAwKTsKPiAgCj4gIAlpZ3RfZGVidWcoIiVzKGhhbmRsZT0lZCwgcGl0 Y2g9JWQpXG4iLAo+IC0JCSAgX19mdW5jX18sIGZiLT5nZW1faGFuZGxlLCBmYi0+c3RyaWRlKTsK PiArCQkgIF9fZnVuY19fLCBmYi0+Z2VtX2hhbmRsZSwgZmItPnN0cmlkZXNbMF0pOwo+ICAKPiAt CWZvciAoaSA9IDA7IGkgPCBmYl9udW1fcGxhbmVzKGYpOyBpKyspCj4gLQkJcGl0Y2hlc1tpXSA9 IGZiLT5zdHJpZGU7Cj4gKwlkb19vcl9kaWUoX19rbXNfYWRkZmIoZmItPmZkLCBmYi0+Z2VtX2hh bmRsZSwKPiArCQkJICAgICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAo+ICsJCQkgICAgICBmYi0+ ZHJtX2Zvcm1hdCwgZmItPnRpbGluZywKPiArCQkJICAgICAgZmItPnN0cmlkZXMsIGZiLT5vZmZz ZXRzLCBmYi0KPiA+bnVtX3BsYW5lcywKPiArCQkJICAgICAgTE9DQUxfRFJNX01PREVfRkJfTU9E SUZJRVJTLAo+ICsJCQkgICAgICAmZmItPmZiX2lkKSk7Cj4gIAo+IC0JZG9fb3JfZGllKF9fa21z X2FkZGZiKGZkLCBmYi0+Z2VtX2hhbmRsZSwgd2lkdGgsIGhlaWdodCwKPiAtCQkJICAgICAgZm9y bWF0LCB0aWxpbmcsIHBpdGNoZXMsIGZiLT5vZmZzZXRzLAo+IC0JCQkgICAgICBmYl9udW1fcGxh bmVzKGYpLAo+IC0JCQkgICAgICBMT0NBTF9EUk1fTU9ERV9GQl9NT0RJRklFUlMsICZmYl9pZCkp Owo+IC0KPiAtCWZiLT53aWR0aCA9IHdpZHRoOwo+IC0JZmItPmhlaWdodCA9IGhlaWdodDsKPiAt CWZiLT50aWxpbmcgPSB0aWxpbmc7Cj4gLQlmYi0+ZHJtX2Zvcm1hdCA9IGZvcm1hdDsKPiAtCWZi LT5mYl9pZCA9IGZiX2lkOwo+IC0JZmItPmZkID0gZmQ7Cj4gLQlmYi0+bnVtX3BsYW5lcyA9IGZi X251bV9wbGFuZXMoZik7Cj4gLQlmYi0+Y29sb3JfZW5jb2RpbmcgPSBjb2xvcl9lbmNvZGluZzsK PiAtCWZiLT5jb2xvcl9yYW5nZSA9IGNvbG9yX3JhbmdlOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkg PCBmYl9udW1fcGxhbmVzKGYpOyBpKyspIHsKPiAtCQlmYi0+cGxhbmVfYnBwW2ldID0gZmJfcGxh bmVfYnBwKGYsIGkpOwo+IC0JCWZiLT5wbGFuZV9oZWlnaHRbaV0gPSBmYl9wbGFuZV9oZWlnaHQo ZiwgaGVpZ2h0LCBpKTsKPiAtCQlmYi0+cGxhbmVfd2lkdGhbaV0gPSBmYl9wbGFuZV93aWR0aChm LCB3aWR0aCwgaSk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGZiX2lkOwo+ICsJcmV0dXJuIGZiLT5m Yl9pZDsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTEyMTEsMTIgKzEyMDEsOCBAQCBzdGF0aWMgY2Fp cm9fZm9ybWF0X3QKPiBkcm1fZm9ybWF0X3RvX2NhaXJvKHVpbnQzMl90IGRybV9mb3JtYXQpCj4g IH0KPiAgCj4gIHN0cnVjdCBmYl9ibGl0X2xpbmVhciB7Cj4gLQl1aW50NjRfdCBzaXplOwo+IC0J dWludDMyX3QgaGFuZGxlOwo+IC0JdW5zaWduZWQgaW50IHN0cmlkZTsKPiArCXN0cnVjdCBpZ3Rf ZmIgZmI7Cj4gIAl1aW50OF90ICptYXA7Cj4gLQlib29sIGlzX2R1bWI7Cj4gLQl1aW50MzJfdCBv ZmZzZXRzWzRdOwo+ICB9Owo+ICAKPiAgc3RydWN0IGZiX2JsaXRfdXBsb2FkIHsKPiBAQCAtMTIz MywyNyArMTIxOSwyNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2xpbmVhcl9tYXBwaW5nKHN0cnVjdAo+ IGZiX2JsaXRfdXBsb2FkICpibGl0KQo+ICAJdW5zaWduZWQgaW50IG9ial90aWxpbmcgPSBpZ3Rf ZmJfbW9kX3RvX3RpbGluZyhmYi0+dGlsaW5nKTsKPiAgCWludCBpOwo+ICAKPiAtCWdlbV9tdW5t YXAobGluZWFyLT5tYXAsIGxpbmVhci0+c2l6ZSk7Cj4gLQlnZW1fc2V0X2RvbWFpbihmZCwgbGlu ZWFyLT5oYW5kbGUsCj4gKwlnZW1fbXVubWFwKGxpbmVhci0+bWFwLCBsaW5lYXItPmZiLnNpemUp Owo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPiAgCQkgICAg ICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IGZiLT5u dW1fcGxhbmVzOyBpKyspCj4gIAkJaWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoZmQsCj4gLQkJ CQkJICAgbGluZWFyLT5oYW5kbGUsCj4gLQkJCQkJICAgbGluZWFyLT5vZmZzZXRzW2ldLAo+IC0J CQkJCSAgIGxpbmVhci0+c3RyaWRlLAo+ICsJCQkJCSAgIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwK PiArCQkJCQkgICBsaW5lYXItPmZiLm9mZnNldHNbaV0sCj4gKwkJCQkJICAgbGluZWFyLT5mYi5z dHJpZGVzW2ldLAo+ICAJCQkJCSAgIEk5MTVfVElMSU5HX05PTkUsCj4gIAkJCQkJICAgMCwgMCwg Lyogc3JjX3gsIHNyY195ICovCj4gIAkJCQkJICAgZmItPnBsYW5lX3dpZHRoW2ldLCBmYi0KPiA+ cGxhbmVfaGVpZ2h0W2ldLAo+ICAJCQkJCSAgIGZiLT5wbGFuZV9icHBbaV0sCj4gIAkJCQkJICAg ZmItPmdlbV9oYW5kbGUsCj4gIAkJCQkJICAgZmItPm9mZnNldHNbaV0sCj4gLQkJCQkJICAgZmIt PnN0cmlkZSwKPiArCQkJCQkgICBmYi0+c3RyaWRlc1tpXSwKPiAgCQkJCQkgICBvYmpfdGlsaW5n LAo+ICAJCQkJCSAgIDAsIDAgLyogZHN0X3gsIGRzdF95ICovKTsKPiAgCj4gLQlnZW1fc3luYyhm ZCwgbGluZWFyLT5oYW5kbGUpOwo+IC0JZ2VtX2Nsb3NlKGZkLCBsaW5lYXItPmhhbmRsZSk7Cj4g KwlnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwg bGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZGVzdHJveV9j YWlyb19zdXJmYWNlX19ibGl0KHZvaWQgKmFyZykKPiBAQCAtMTI3Nyw0MiArMTI2Myw0MiBAQCBz dGF0aWMgdm9pZCBzZXR1cF9saW5lYXJfbWFwcGluZyhpbnQgZmQsCj4gc3RydWN0IGlndF9mYiAq ZmIsIHN0cnVjdCBmYl9ibGl0X2xpbmVhCj4gIAkgKiBjYWlybykuIFRoaXMgbGluZWFyIGJvIHdp bGwgYmUgdGhlbiBibGl0dGVkIHRvIGl0cyBmaW5hbAo+ICAJICogZGVzdGluYXRpb24sIHRpbGlu ZyBpdCBhdCB0aGUgc2FtZSB0aW1lLgo+ICAJICovCj4gLQlsaW5lYXItPmhhbmRsZSA9IGNyZWF0 ZV9ib19mb3JfZmIoZmQsIGZiLT53aWR0aCwgZmItPmhlaWdodCwKPiAtCQkJCQkgIGZiLT5jb2xv cl9lbmNvZGluZywgZmItCj4gPmNvbG9yX3JhbmdlLAo+IC0JCQkJCSAgbG9va3VwX2RybV9mb3Jt YXQoZmItCj4gPmRybV9mb3JtYXQpLAo+IC0JCQkJCSAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9O RSwKPiAwLAo+IC0JCQkJCSAgMCwgJmxpbmVhci0+c2l6ZSwKPiAtCQkJCQkgICZsaW5lYXItPnN0 cmlkZSwKPiAtCQkJCQkgIGxpbmVhci0+b2Zmc2V0cywgJmxpbmVhci0KPiA+aXNfZHVtYik7Cj4g IAo+IC0JaWd0X2Fzc2VydChsaW5lYXItPmhhbmRsZSA+IDApOwo+ICsJZmJfaW5pdCgmbGluZWFy LT5mYiwgZmItPmZkLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCj4gKwkJZmItPmRybV9mb3JtYXQs IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJZmItPmNvbG9yX2VuY29kaW5nLCBmYi0+ Y29sb3JfcmFuZ2UpOwo+ICsKPiArCWNyZWF0ZV9ib19mb3JfZmIoJmxpbmVhci0+ZmIpOwo+ICsK PiArCWlndF9hc3NlcnQobGluZWFyLT5mYi5nZW1faGFuZGxlID4gMCk7Cj4gIAo+ICAJLyogQ29w eSBmYiBjb250ZW50IHRvIGxpbmVhciBCTyAqLwo+IC0JZ2VtX3NldF9kb21haW4oZmQsIGxpbmVh ci0+aGFuZGxlLAo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwK PiAgCQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IGZi LT5udW1fcGxhbmVzOyBpKyspCj4gIAkJaWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoZmQsCj4g LQkJCQkJICBmYi0+Z2VtX2hhbmRsZSwKPiAtCQkJCQkgIGZiLT5vZmZzZXRzW2ldLAo+IC0JCQkJ CSAgZmItPnN0cmlkZSwKPiAtCQkJCQkgIG9ial90aWxpbmcsCj4gLQkJCQkJICAwLCAwLCAvKiBz cmNfeCwgc3JjX3kgKi8KPiAtCQkJCQkgIGZiLT5wbGFuZV93aWR0aFtpXSwgZmItCj4gPnBsYW5l X2hlaWdodFtpXSwKPiAtCQkJCQkgIGZiLT5wbGFuZV9icHBbaV0sCj4gLQkJCQkJICBsaW5lYXIt PmhhbmRsZSwgbGluZWFyLQo+ID5vZmZzZXRzW2ldLAo+IC0JCQkJCSAgbGluZWFyLT5zdHJpZGUs Cj4gLQkJCQkJICBJOTE1X1RJTElOR19OT05FLAo+IC0JCQkJCSAgMCwgMCAvKiBkc3RfeCwgZHN0 X3kgKi8pOwo+ICsJCQkJCSAgIGZiLT5nZW1faGFuZGxlLAo+ICsJCQkJCSAgIGZiLT5vZmZzZXRz W2ldLAo+ICsJCQkJCSAgIGZiLT5zdHJpZGVzW2ldLAo+ICsJCQkJCSAgIG9ial90aWxpbmcsCj4g KwkJCQkJICAgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCj4gKwkJCQkJICAgZmItPnBsYW5lX3dp ZHRoW2ldLCBmYi0KPiA+cGxhbmVfaGVpZ2h0W2ldLAo+ICsJCQkJCSAgIGZiLT5wbGFuZV9icHBb aV0sCj4gKwkJCQkJICAgbGluZWFyLT5mYi5nZW1faGFuZGxlLAo+ICsJCQkJCSAgIGxpbmVhci0+ ZmIub2Zmc2V0c1tpXSwKPiArCQkJCQkgICBsaW5lYXItPmZiLnN0cmlkZXNbaV0sCj4gKwkJCQkJ ICAgSTkxNV9USUxJTkdfTk9ORSwKPiArCQkJCQkgICAwLCAwIC8qIGRzdF94LCBkc3RfeSAqLyk7 Cj4gIAo+IC0JZ2VtX3N5bmMoZmQsIGxpbmVhci0+aGFuZGxlKTsKPiArCWdlbV9zeW5jKGZkLCBs aW5lYXItPmZiLmdlbV9oYW5kbGUpOwo+ICAKPiAtCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXIt PmhhbmRsZSwKPiArCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4g IAkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUpOwo+ICAK PiAgCS8qIFNldHVwIGNhaXJvIGNvbnRleHQgKi8KPiAtCWxpbmVhci0+bWFwID0gZ2VtX21tYXBf X2NwdShmZCwgbGluZWFyLT5oYW5kbGUsCj4gLQkJCQkgICAgMCwgbGluZWFyLT5zaXplLCBQUk9U X1JFQUQgfAo+IFBST1RfV1JJVEUpOwo+ICsJbGluZWFyLT5tYXAgPSBnZW1fbW1hcF9fY3B1KGZk LCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4gKwkJCQkgICAgMCwgbGluZWFyLT5mYi5zaXplLCBQ Uk9UX1JFQUQgfAo+IFBST1RfV1JJVEUpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBjcmVhdGVf Y2Fpcm9fc3VyZmFjZV9fYmxpdChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+IEBAIC0xMzMy LDcgKzEzMTgsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fYmxpdChpbnQg ZmQsCj4gc3RydWN0IGlndF9mYiAqZmIpCj4gIAkJY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVf Zm9yX2RhdGEoYmxpdC0KPiA+bGluZWFyLm1hcCwKPiAgCQkJCQkJICAgIGNhaXJvX2Zvcm1hdCwK PiAgCQkJCQkJICAgIGZiLT53aWR0aCwgZmItCj4gPmhlaWdodCwKPiAtCQkJCQkJICAgIGJsaXQt Cj4gPmxpbmVhci5zdHJpZGUpOwo+ICsJCQkJCQkgICAgYmxpdC0KPiA+bGluZWFyLmZiLnN0cmlk ZXNbMF0pOwo+ICAJZmItPmRvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Cj4gIAo+ICAJY2Fp cm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKGZiLT5jYWlyb19zdXJmYWNlLAo+IEBAIC0xMzgyLDcg KzEzNjgsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGludCBmZCwK PiBzdHJ1Y3QgaWd0X2ZiICpmYikKPiAgCWZiLT5jYWlyb19zdXJmYWNlID0KPiAgCQljYWlyb19p bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShwdHIsCj4gIAkJCQkJCSAgICBkcm1fZm9ybWF0 X3RvX2NhCj4gaXJvKGZiLT5kcm1fZm9ybWF0KSwKPiAtCQkJCQkJICAgIGZiLT53aWR0aCwgZmIt Cj4gPmhlaWdodCwgZmItPnN0cmlkZSk7Cj4gKwkJCQkJCSAgICBmYi0+d2lkdGgsIGZiLQo+ID5o ZWlnaHQsIGZiLT5zdHJpZGVzWzBdKTsKPiAgCWZiLT5kb21haW4gPSBJOTE1X0dFTV9ET01BSU5f R1RUOwo+ICAKPiAgCWNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShmYi0+Y2Fpcm9fc3VyZmFj ZSwKPiBAQCAtMTQyNSw4ICsxNDExLDggQEAgc3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3Jn YjI0KHN0cnVjdCBpZ3RfZmIKPiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwo+ICAJ aW50IGksIGo7Cj4gIAljb25zdCB1aW50OF90ICp5LCAqdXY7Cj4gIAl1aW50OF90ICpyZ2IyNCA9 IGJsaXQtPnJnYjI0Lm1hcDsKPiAtCXVuc2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0 LnN0cmlkZSwgcGxhbmFyX3N0cmlkZSA9Cj4gYmxpdC0+YmFzZS5saW5lYXIuc3RyaWRlOwo+IC0J dWludDhfdCAqYnVmID0gbWFsbG9jKGJsaXQtPmJhc2UubGluZWFyLnNpemUpOwo+ICsJdW5zaWdu ZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlLCBwbGFuYXJfc3RyaWRlID0KPiBi bGl0LT5iYXNlLmxpbmVhci5mYi5zdHJpZGVzWzBdOwo+ICsJdWludDhfdCAqYnVmID0gbWFsbG9j KGJsaXQtPmJhc2UubGluZWFyLmZiLnNpemUpOwo+ICAJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3Rf eWNiY3JfdG9fcmdiX21hdHJpeChmYi0KPiA+Y29sb3JfZW5jb2RpbmcsCj4gIAkJCQkJCSAgICBm Yi0KPiA+Y29sb3JfcmFuZ2UpOwo+ICAKPiBAQCAtMTQzNSw5ICsxNDIxLDkgQEAgc3RhdGljIHZv aWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIKPiAqZmIsIHN0cnVjdCBmYl9j b252ZXJ0X2JsaXRfdXBsbwo+ICAJICogaXQncyBmYXN0ZXIgdG8gY29weSB0aGUgd2hvbGUgQk8g dG8gYSB0ZW1wb3JhcnkgYnVmZmVyCj4gYW5kIGNvbnZlcnQKPiAgCSAqIGZyb20gdGhlcmUuCj4g IAkgKi8KPiAtCWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmJhc2UubGluZWFyLm1hcCwg YmxpdC0KPiA+YmFzZS5saW5lYXIuc2l6ZSk7Cj4gLQl5ID0gJmJ1ZltibGl0LT5iYXNlLmxpbmVh ci5vZmZzZXRzWzBdXTsKPiAtCXV2ID0gJmJ1ZltibGl0LT5iYXNlLmxpbmVhci5vZmZzZXRzWzFd XTsKPiArCWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmJhc2UubGluZWFyLm1hcCwgYmxp dC0KPiA+YmFzZS5saW5lYXIuZmIuc2l6ZSk7Cj4gKwl5ID0gJmJ1ZltibGl0LT5iYXNlLmxpbmVh ci5mYi5vZmZzZXRzWzBdXTsKPiArCXV2ID0gJmJ1ZltibGl0LT5iYXNlLmxpbmVhci5mYi5vZmZz ZXRzWzFdXTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgZmItPmhlaWdodCAvIDI7IGkrKykgewo+ ICAJCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKyspIHsKPiBAQCAtMTUzMSwxMSAr MTUxNywxMSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9fcmdiMjQoc3RydWN0Cj4gaWd0 X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIHN0YXRpYyB2b2lkIGNvbnZl cnRfcmdiMjRfdG9fbnYxMihzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0Cj4gZmJfY29udmVydF9i bGl0X3VwbG9hZCAqYmxpdCkKPiAgewo+ICAJaW50IGksIGo7Cj4gLQl1aW50OF90ICp5ID0gJmJs aXQtPmJhc2UubGluZWFyLm1hcFtibGl0LQo+ID5iYXNlLmxpbmVhci5vZmZzZXRzWzBdXTsKPiAt CXVpbnQ4X3QgKnV2ID0gJmJsaXQtPmJhc2UubGluZWFyLm1hcFtibGl0LQo+ID5iYXNlLmxpbmVh ci5vZmZzZXRzWzFdXTsKPiArCXVpbnQ4X3QgKnkgPSAmYmxpdC0+YmFzZS5saW5lYXIubWFwW2Js aXQtCj4gPmJhc2UubGluZWFyLmZiLm9mZnNldHNbMF1dOwo+ICsJdWludDhfdCAqdXYgPSAmYmxp dC0+YmFzZS5saW5lYXIubWFwW2JsaXQtCj4gPmJhc2UubGluZWFyLmZiLm9mZnNldHNbMV1dOwo+ ICAJY29uc3QgdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Cj4gIAl1bnNpZ25lZCBy Z2IyNF9zdHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGU7Cj4gLQl1bnNpZ25lZCBwbGFuYXJfc3Ry aWRlID0gYmxpdC0+YmFzZS5saW5lYXIuc3RyaWRlOwo+ICsJdW5zaWduZWQgcGxhbmFyX3N0cmlk ZSA9IGJsaXQtPmJhc2UubGluZWFyLmZiLnN0cmlkZXNbMF07Cj4gIAlzdHJ1Y3QgaWd0X21hdDQg bSA9IGlndF9yZ2JfdG9feWNiY3JfbWF0cml4KGZiLQo+ID5jb2xvcl9lbmNvZGluZywKPiAgCQkJ CQkJICAgIGZiLQo+ID5jb2xvcl9yYW5nZSk7Cj4gIAo+IEBAIC0xNjYyLDggKzE2NDgsOCBAQCBz dGF0aWMgdm9pZCBjb252ZXJ0X3l1eXZfdG9fcmdiMjQoc3RydWN0IGlndF9mYgo+ICpmYiwgc3Ry dWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIAlpbnQgaSwgajsKPiAgCWNvbnN0IHVpbnQ4X3Qg Knl1eXY7Cj4gIAl1aW50OF90ICpyZ2IyNCA9IGJsaXQtPnJnYjI0Lm1hcDsKPiAtCXVuc2lnbmVk IHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZSwgeXV5dl9zdHJpZGUgPQo+IGJsaXQt PmJhc2UubGluZWFyLnN0cmlkZTsKPiAtCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhibGl0LT5iYXNl LmxpbmVhci5zaXplKTsKPiArCXVuc2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0 cmlkZSwgeXV5dl9zdHJpZGUgPQo+IGJsaXQtPmJhc2UubGluZWFyLmZiLnN0cmlkZXNbMF07Cj4g Kwl1aW50OF90ICpidWYgPSBtYWxsb2MoYmxpdC0+YmFzZS5saW5lYXIuZmIuc2l6ZSk7Cj4gIAlz dHJ1Y3QgaWd0X21hdDQgbSA9IGlndF95Y2Jjcl90b19yZ2JfbWF0cml4KGZiLQo+ID5jb2xvcl9l bmNvZGluZywKPiAgCQkJCQkJICAgIGZiLQo+ID5jb2xvcl9yYW5nZSk7Cj4gIAo+IEBAIC0xNjcy LDcgKzE2NTgsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3l1eXZfdG9fcmdiMjQoc3RydWN0IGln dF9mYgo+ICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIAkgKiBpdCdzIGZhc3Rl ciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBhIHRlbXBvcmFyeSBidWZmZXIKPiBhbmQgY29udmVy dAo+ICAJICogZnJvbSB0aGVyZS4KPiAgCSAqLwo+IC0JaWd0X21lbWNweV9mcm9tX3djKGJ1Ziwg YmxpdC0+YmFzZS5saW5lYXIubWFwLCBibGl0LQo+ID5iYXNlLmxpbmVhci5zaXplKTsKPiArCWln dF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmJhc2UubGluZWFyLm1hcCwgYmxpdC0KPiA+YmFz ZS5saW5lYXIuZmIuc2l6ZSk7Cj4gIAl5dXl2ID0gYnVmOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkg PCBmYi0+aGVpZ2h0OyBpKyspIHsKPiBAQCAtMTcyMiw3ICsxNzA4LDcgQEAgc3RhdGljIHZvaWQg Y29udmVydF9yZ2IyNF90b195dXl2KHN0cnVjdCBpZ3RfZmIKPiAqZmIsIHN0cnVjdCBmYl9jb252 ZXJ0X2JsaXRfdXBsbwo+ICAJdWludDhfdCAqeXV5diA9IGJsaXQtPmJhc2UubGluZWFyLm1hcDsK PiAgCWNvbnN0IHVpbnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdiMjQubWFwOwo+ICAJdW5zaWduZWQg cmdiMjRfc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlOwo+IC0JdW5zaWduZWQgeXV5dl9zdHJp ZGUgPSBibGl0LT5iYXNlLmxpbmVhci5zdHJpZGU7Cj4gKwl1bnNpZ25lZCB5dXl2X3N0cmlkZSA9 IGJsaXQtPmJhc2UubGluZWFyLmZiLnN0cmlkZXNbMF07Cj4gIAlzdHJ1Y3QgaWd0X21hdDQgbSA9 IGlndF9yZ2JfdG9feWNiY3JfbWF0cml4KGZiLQo+ID5jb2xvcl9lbmNvZGluZywKPiAgCQkJCQkJ ICAgIGZiLQo+ID5jb2xvcl9yYW5nZSk7Cj4gIAo+IEBAIC0xNzkxLDcgKzE3NzcsNyBAQCBzdGF0 aWMgdm9pZCBkZXN0cm95X2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQodm9pZAo+ICphcmcpCj4gIAo+ ICAJbXVubWFwKGJsaXQtPnJnYjI0Lm1hcCwgYmxpdC0+cmdiMjQuc2l6ZSk7Cj4gIAo+IC0JaWYg KGJsaXQtPmJhc2UubGluZWFyLmhhbmRsZSkKPiArCWlmIChibGl0LT5iYXNlLmxpbmVhci5mYi5n ZW1faGFuZGxlKQo+ICAJCWZyZWVfbGluZWFyX21hcHBpbmcoJmJsaXQtPmJhc2UpOwo+ICAJZWxz ZQo+ICAJCWdlbV9tdW5tYXAoYmxpdC0+YmFzZS5saW5lYXIubWFwLCBmYi0+c2l6ZSk7Cj4gQEAg LTE4MTcsMTUgKzE4MDMsMTUgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2Nv bnZlcnQoaW50Cj4gZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+ICAJICAgIGZiLT50aWxpbmcgPT0g TE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSB7Cj4gIAkJc2V0dXBfbGluZWFyX21hcHBp bmcoZmQsIGZiLCAmYmxpdC0+YmFzZS5saW5lYXIpOwo+ICAJfSBlbHNlIHsKPiAtCQlibGl0LT5i YXNlLmxpbmVhci5oYW5kbGUgPSAwOwo+ICsJCWJsaXQtPmJhc2UubGluZWFyLmZiLmdlbV9oYW5k bGUgPSAwOwo+ICAJCWdlbV9zZXRfZG9tYWluKGZkLCBmYi0+Z2VtX2hhbmRsZSwKPiAgCQkJICAg ICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsCj4gSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gIAkJYmxp dC0+YmFzZS5saW5lYXIubWFwID0gZ2VtX21tYXBfX2d0dChmZCwgZmItCj4gPmdlbV9oYW5kbGUs IGZiLT5zaXplLAo+ICAJCQkJCQkgICAgICBQUk9UX1JFQUQgfAo+IFBST1RfV1JJVEUpOwo+ICAJ CWlndF9hc3NlcnQoYmxpdC0+YmFzZS5saW5lYXIubWFwKTsKPiAtCQlibGl0LT5iYXNlLmxpbmVh ci5zdHJpZGUgPSBmYi0+c3RyaWRlOwo+IC0JCWJsaXQtPmJhc2UubGluZWFyLnNpemUgPSBmYi0+ c2l6ZTsKPiAtCQltZW1jcHkoYmxpdC0+YmFzZS5saW5lYXIub2Zmc2V0cywgZmItPm9mZnNldHMs Cj4gc2l6ZW9mKGZiLT5vZmZzZXRzKSk7Cj4gKwkJYmxpdC0+YmFzZS5saW5lYXIuZmIuc2l6ZSA9 IGZiLT5zaXplOwo+ICsJCW1lbWNweShibGl0LT5iYXNlLmxpbmVhci5mYi5zdHJpZGVzLCBmYi0+ c3RyaWRlcywKPiBzaXplb2YoZmItPnN0cmlkZXMpKTsKPiArCQltZW1jcHkoYmxpdC0+YmFzZS5s aW5lYXIuZmIub2Zmc2V0cywgZmItPm9mZnNldHMsCj4gc2l6ZW9mKGZiLT5vZmZzZXRzKSk7Cj4g IAl9Cj4gIAo+ICAJLyogQ29udmVydCB0byBsaW5lYXIgcmdiISAqLwo+IGRpZmYgLS1naXQgYS9s aWIvaWd0X2ZiLmggYi9saWIvaWd0X2ZiLmgKPiBpbmRleCAyMzQzZmU1MDVmMjguLjM1YmYzMDdh OTMwYiAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2ZiLmgKPiArKysgYi9saWIvaWd0X2ZiLmgKPiBA QCAtNDcsMTIgKzQ3LDEyIEBACj4gICAqIEBkcm1fZm9ybWF0OiBEUk0gRk9VUkNDIGNvZGUKPiAg ICogQHdpZHRoOiB3aWR0aCBpbiBwaXhlbHMKPiAgICogQGhlaWdodDogaGVpZ2h0IGluIHBpeGVs cwo+IC0gKiBAc3RyaWRlOiBsaW5lIHN0cmlkZSBpbiBieXRlcwo+ICAgKiBAdGlsaW5nOiB0aWxp bmcgbW9kZSBhcyBhIERSTSBmcmFtZWJ1ZmZlciBtb2RpZmllcgo+ICAgKiBAc2l6ZTogc2l6ZSBp biBieXRlcyBvZiB0aGUgdW5kZXJseWluZyBiYWNraW5nIHN0b3JhZ2UKPiAgICogQGNhaXJvX3N1 cmZhY2U6IG9wdGlvbmFsbHkgYXR0YWNoZWQgY2Fpcm8gZHJhd2luZyBzdXJmYWNlCj4gICAqIEBk b21haW46IGN1cnJlbnQgZG9tYWluIGZvciBjYWNoZSBmbHVzaGluZyB0cmFja2luZyBvbiBpOTE1 LmtvCj4gICAqIEBudW1fcGxhbmVzOiBBbW91bnQgb2YgcGxhbmVzIG9uIHRoaXMgZmIuID4xIGZv ciBwbGFuYXIgZm9ybWF0cy4KPiArICogQHN0cmlkZXM6IGxpbmUgc3RyaWRlIGZvciBlYWNoIHBs YW5lIGluIGJ5dGVzCj4gICAqIEBvZmZzZXRzOiBPZmZzZXQgZm9yIGVhY2ggcGxhbmUgaW4gYnl0 ZXMuCj4gICAqIEBwbGFuZV9icHA6IFRoZSBicHAgZm9yIGVhY2ggcGxhbmUuCj4gICAqIEBwbGFu ZV93aWR0aDogVGhlIHdpZHRoIGZvciBlYWNoIHBsYW5lLgo+IEBAIC03MCwxMiArNzAsMTIgQEAg dHlwZWRlZiBzdHJ1Y3QgaWd0X2ZiIHsKPiAgCWludCBoZWlnaHQ7Cj4gIAllbnVtIGlndF9jb2xv cl9lbmNvZGluZyBjb2xvcl9lbmNvZGluZzsKPiAgCWVudW0gaWd0X2NvbG9yX3JhbmdlIGNvbG9y X3JhbmdlOwo+IC0JdW5zaWduZWQgaW50IHN0cmlkZTsKPiAgCXVpbnQ2NF90IHRpbGluZzsKPiAg CXVpbnQ2NF90IHNpemU7Cj4gIAljYWlyb19zdXJmYWNlX3QgKmNhaXJvX3N1cmZhY2U7Cj4gIAl1 bnNpZ25lZCBpbnQgZG9tYWluOwo+ICAJdW5zaWduZWQgaW50IG51bV9wbGFuZXM7Cj4gKwl1aW50 MzJfdCBzdHJpZGVzWzRdOwo+ICAJdWludDMyX3Qgb2Zmc2V0c1s0XTsKPiAgCXVuc2lnbmVkIGlu dCBwbGFuZV9icHBbNF07Cj4gIAl1bnNpZ25lZCBpbnQgcGxhbmVfd2lkdGhbNF07Cj4gZGlmZiAt LWdpdCBhL3Rlc3RzL2ttc19jY3MuYyBiL3Rlc3RzL2ttc19jY3MuYwo+IGluZGV4IGUxZWU1ODgw MWFjMy4uZTAzZjk0N2VhZTExIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19jY3MuYwo+ICsrKyBi L3Rlc3RzL2ttc19jY3MuYwo+IEBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJh dGVfZmIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiBpZ3RfZmIgKmZiLAo+ICAJZmItPmRybV9mb3Jt YXQgPSBmLnBpeGVsX2Zvcm1hdDsKPiAgCWZiLT53aWR0aCA9IGYud2lkdGg7Cj4gIAlmYi0+aGVp Z2h0ID0gZi5oZWlnaHQ7Cj4gLQlmYi0+c3RyaWRlID0gZi5waXRjaGVzWzBdOwo+ICsJZmItPnN0 cmlkZXNbMF0gPSBmLnBpdGNoZXNbMF07Cj4gIAlmYi0+dGlsaW5nID0gZi5tb2RpZmllclswXTsK PiAgCWZiLT5zaXplID0gc2l6ZVswXTsKPiAgCWZiLT5jYWlyb19zdXJmYWNlID0gTlVMTDsKPiBk aWZmIC0tZ2l0IGEvdGVzdHMva21zX2ZsaXAuYyBiL3Rlc3RzL2ttc19mbGlwLmMKPiBpbmRleCAz OTNkNjkwYWI1MzUuLmY3ZDA4YTYwYWVlYSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNfZmxpcC5j Cj4gKysrIGIvdGVzdHMva21zX2ZsaXAuYwo+IEBAIC01OTIsNyArNTkyLDcgQEAgc3RhdGljIHZv aWQgcmVjcmVhdGVfZmIoc3RydWN0IHRlc3Rfb3V0cHV0ICpvKQo+ICAJaWd0X2Fzc2VydChyKTsK PiAgCj4gIAlkb19vcl9kaWUoZHJtTW9kZUFkZEZCKGRybV9mZCwgby0+ZmJfd2lkdGgsIG8tPmZi X2hlaWdodCwgby0KPiA+ZGVwdGgsCj4gLQkJCSAgICAgICBvLT5icHAsIGZiX2luZm8tPnN0cmlk ZSwKPiArCQkJICAgICAgIG8tPmJwcCwgZmJfaW5mby0+c3RyaWRlc1swXSwKPiAgCQkJICAgICAg IHItPmhhbmRsZSwgJm5ld19mYl9pZCkpOwo+ICAKPiAgCWdlbV9jbG9zZShkcm1fZmQsIHItPmhh bmRsZSk7Cj4gQEAgLTYxMiw3ICs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzZXRfeV90aWxpbmcoc3Ry dWN0IHRlc3Rfb3V0cHV0ICpvLAo+IGludCBmYl9pZHgpCj4gIAlyID0gZHJtTW9kZUdldEZCKGRy bV9mZCwgZmJfaW5mby0+ZmJfaWQpOwo+ICAJaWd0X2Fzc2VydChyKTsKPiAgCS8qIE5ld2VyIGtl cm5lbHMgZG9uJ3QgYWxsb3cgc3VjaCBzaGVuYWdpYW5zIGFueSBtb3JlLCBzbwo+IHNraXAgdGhl IHRlc3QuICovCj4gLQlpZ3RfcmVxdWlyZShfX2dlbV9zZXRfdGlsaW5nKGRybV9mZCwgci0+aGFu ZGxlLAo+IEk5MTVfVElMSU5HX1ksIGZiX2luZm8tPnN0cmlkZSkgPT0gMCk7Cj4gKwlpZ3RfcmVx dWlyZShfX2dlbV9zZXRfdGlsaW5nKGRybV9mZCwgci0+aGFuZGxlLAo+IEk5MTVfVElMSU5HX1ks IGZiX2luZm8tPnN0cmlkZXNbMF0pID09IDApOwo+ICAJZ2VtX2Nsb3NlKGRybV9mZCwgci0+aGFu ZGxlKTsKPiAgCWRybUZyZWUocik7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2Zyb250 YnVmZmVyX3RyYWNraW5nLmMKPiBiL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCj4g aW5kZXggMWJjZTY3NjA4MWI0Li4yNjVjMzEzYTM4ODYgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21z X2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiArKysgYi90ZXN0cy9rbXNfZnJvbnRidWZmZXJfdHJh Y2tpbmcuYwo+IEBAIC0xMTU3LDcgKzExNTcsNyBAQCBzdGF0aWMgdm9pZCBzdGFydF9idXN5X3Ro cmVhZChzdHJ1Y3QgaWd0X2ZiCj4gKmZiKQo+ICAJYnVzeV90aHJlYWQuc3RvcCA9IGZhbHNlOwo+ ICAJYnVzeV90aHJlYWQuaGFuZGxlID0gZmItPmdlbV9oYW5kbGU7Cj4gIAlidXN5X3RocmVhZC5z aXplID0gZmItPnNpemU7Cj4gLQlidXN5X3RocmVhZC5zdHJpZGUgPSBmYi0+c3RyaWRlOwo+ICsJ YnVzeV90aHJlYWQuc3RyaWRlID0gZmItPnN0cmlkZXNbMF07Cj4gIAlidXN5X3RocmVhZC53aWR0 aCA9IGZiLT53aWR0aDsKPiAgCWJ1c3lfdGhyZWFkLmhlaWdodCA9IGZiLT5oZWlnaHQ7Cj4gIAli dXN5X3RocmVhZC5jb2xvciA9IHBpY2tfY29sb3IoZmIsIENPTE9SX1BSSU1fQkcpOwo+IEBAIC0y ODU5LDcgKzI4NTksNyBAQCBzdGF0aWMgdm9pZCBiYWRzdHJpZGVfc3VidGVzdChjb25zdCBzdHJ1 Y3QKPiB0ZXN0X21vZGUgKnQpCj4gIAo+ICAJY3JlYXRlX2ZiKHQtPmZvcm1hdCwgcGFyYW1zLT5w cmltYXJ5LmZiLT53aWR0aCArIDQwOTYsCj4gcGFyYW1zLT5wcmltYXJ5LmZiLT5oZWlnaHQsCj4g IAkJICBvcHQudGlsaW5nLCB0LT5wbGFuZSwgJndpZGVfZmIpOwo+IC0JaWd0X2Fzc2VydCh3aWRl X2ZiLnN0cmlkZSA+IDE2Mzg0KTsKPiArCWlndF9hc3NlcnQod2lkZV9mYi5zdHJpZGVzWzBdID4g MTYzODQpOwo+ICAKPiAgCWZpbGxfZmIoJndpZGVfZmIsIENPTE9SX1BSSU1fQkcpOwo+ICAKPiBA QCAtMjkyOCw3ICsyOTI4LDcgQEAgc3RhdGljIHZvaWQgc3RyaWRlY2hhbmdlX3N1YnRlc3QoY29u c3Qgc3RydWN0Cj4gdGVzdF9tb2RlICp0KQo+ICAJCSAgb3B0LnRpbGluZywgdC0+cGxhbmUsICZu ZXdfZmIpOwo+ICAJZmlsbF9mYigmbmV3X2ZiLCBDT0xPUl9QUklNX0JHKTsKPiAgCj4gLQlpZ3Rf YXNzZXJ0KG9sZF9mYi0+c3RyaWRlICE9IG5ld19mYi5zdHJpZGUpOwo+ICsJaWd0X2Fzc2VydChv bGRfZmItPnN0cmlkZXNbMF0gIT0gbmV3X2ZiLnN0cmlkZXNbMF0pOwo+ICAKPiAgCS8qIFdlIGNh bid0IGFzc2VydCB0aGF0IEZCQyB3aWxsIGJlIGVuYWJsZWQgc2luY2UgdGhlcmUgbWF5Cj4gbm90 IGJlCj4gIAkgKiBlbm91Z2ggc3BhY2UgZm9yIHRoZSBDRkIsIGJ1dCB3ZSBjYW4gY2hlY2sgdGhl IENSQy4gKi8KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvcG1fcnBtLmMgYi90ZXN0cy9wbV9ycG0uYwo+ IGluZGV4IGMyNGZkOTViYjBmMy4uMmQ2YzViNDljOWQ1IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL3Bt X3JwbS5jCj4gKysrIGIvdGVzdHMvcG1fcnBtLmMKPiBAQCAtMTU0Nyw3ICsxNTQ3LDcgQEAgc3Rh dGljIHZvaWQgY3Vyc29yX3N1YnRlc3QoYm9vbCBkcG1zKQo+ICAJICogaG9wZWZ1bGx5IGl0IGhh cyBzb21lIGZlbmNlcyBhcm91bmQgaXQuICovCj4gIAlyYyA9IGRybU1vZGVSbUZCKGRybV9mZCwg Y3Vyc29yX2ZiMy5mYl9pZCk7Cj4gIAlpZ3RfYXNzZXJ0X2VxKHJjLCAwKTsKPiAtCWdlbV9zZXRf dGlsaW5nKGRybV9mZCwgY3Vyc29yX2ZiMy5nZW1faGFuZGxlLCBmYWxzZSwKPiBjdXJzb3JfZmIz LnN0cmlkZSk7Cj4gKwlnZW1fc2V0X3RpbGluZyhkcm1fZmQsIGN1cnNvcl9mYjMuZ2VtX2hhbmRs ZSwgZmFsc2UsCj4gY3Vyc29yX2ZiMy5zdHJpZGVzWzBdKTsKPiAgCWlndF9hc3NlcnQod2FpdF9m b3Jfc3VzcGVuZGVkKCkpOwo+ICAKPiAgCXJjID0gZHJtTW9kZVNldEN1cnNvcihkcm1fZmQsIGNy dGNfaWQsCj4gY3Vyc29yX2ZiMy5nZW1faGFuZGxlLApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2lndC1kZXYK