From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 6/7] drm/msm: remove msm_prop files Date: Mon, 4 Jun 2018 15:59:12 -0400 Message-ID: <20180604195912.GW3373@art_vandelay> References: <1527103862-13934-1-git-send-email-jsanka@codeaurora.org> <1527103862-13934-7-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yw0-x242.google.com (mail-yw0-x242.google.com [IPv6:2607:f8b0:4002:c05::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 368C76E1C5 for ; Mon, 4 Jun 2018 19:59:15 +0000 (UTC) Received: by mail-yw0-x242.google.com with SMTP id q7-v6so10919658ywd.9 for ; Mon, 04 Jun 2018 12:59:15 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1527103862-13934-7-git-send-email-jsanka@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jeykumar Sankaran Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, hoegsberg@google.com, freedreno@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXkgMjMsIDIwMTggYXQgMTI6MzE6MDFQTSAtMDcwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gUmVtb3ZlIGhhbmQgcm9sbGVkIG1zbSBwcm9wZXJ0eSBjYWNoaW5nIHRvIGhh bmRsZSBEUFUKPiBjdXN0b20gcHJvcGVydGllcy4gVGhpcyBjaGFuZ2UgYWxzbyBjbGVhbnMgdXAg YWxsIGl0cwo+IGRlcGVuZGVuY2llcyB0byBjYWNoZSBhbmQgcmVzdG9yZSByZXNwZWN0aXZlIGRy bQo+IHN0YXRlcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJhbiA8anNhbmth QGNvZGVhdXJvcmEub3JnPgoKUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21p dW0ub3JnPgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgIHwgICAxIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVf cGVyZi5jIHwgICAyIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YyAgICAgIHwgMjM5ICstLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY3J0Yy5oICAgICAgfCAgMTYgLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlci5oICAgfCAgIDIgLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcGxhbmUuYyAgICAgfCAxMjMgKy0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3BsYW5lLmggICAgIHwgIDEyIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2 LmggICAgICAgICAgICAgICAgIHwgIDE2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3By b3AuYyAgICAgICAgICAgICAgICB8IDY4OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmggICAgICAgICAgICAgICAgfCA0MzggLS0tLS0t LS0tLS0tLS0tLQo+ICAxMCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDE1MjkgZGVs ZXRpb25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9w cm9wLmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3Au aAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+IGluZGV4IGQyODk1MDMuLjUzMzExODggMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUKPiBAQCAtNzYsNyArNzYsNiBAQCBtc20teSA6PSBcCj4gIAlkcHVfaW9f dXRpbC5vIFwKPiAgCWRwdV9kYmdfZXZ0bG9nLm8gXAo+ICAJZHB1X3Bvd2VyX2hhbmRsZS5vIFwK PiAtCW1zbV9wcm9wLm8gXAo+ICAJbXNtX2F0b21pYy5vIFwKPiAgCW1zbV9kZWJ1Z2ZzLm8gXAo+ ICAJbXNtX2Rydi5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NvcmVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nv cmVfcGVyZi5jCj4gaW5kZXggYzQ4MjBkZS4uZTRiODJkNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKPiBAQCAtMTksOCArMTksNiBAQAo+ ICAjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KPiAg Cj4gLSNpbmNsdWRlICJtc21fcHJvcC5oIgo+IC0KPiAgI2luY2x1ZGUgImRwdV9rbXMuaCIKPiAg I2luY2x1ZGUgImRwdV90cmFjZS5oIgo+ICAjaW5jbHVkZSAiZHB1X2NydGMuaCIKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBpbmRleCBiMGEzYTMwLi40M2Q5OTg1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCj4gQEAgLTU3 OSwxMCArNTc5LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gIAlpZiAoIWNydGMpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmIChkcHVfY3J0 Yy0+YmxvYl9pbmZvKQo+IC0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChkcHVfY3J0Yy0+YmxvYl9p bmZvKTsKPiAtCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbyk7 Cj4gLQo+ICAJX2RwdV9jcnRjX2RlaW5pdF9ldmVudHMoZHB1X2NydGMpOwo+ICAKPiAgCWRybV9j cnRjX2NsZWFudXAoY3J0Yyk7Cj4gQEAgLTEzOTAsOSArMTM4Niw3IEBAIHN0YXRpYyB2b2lkIGRw dV9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAKPiAgCV9fZHJt X2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0YXRlKTsKPiAgCj4gLQkvKiBkZXN0 cm95IHZhbHVlIGhlbHBlciAqLwo+IC0JbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoJmRwdV9j cnRjLT5wcm9wZXJ0eV9pbmZvLCBjc3RhdGUsCj4gLQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRl KTsKPiArCWtmcmVlKGNzdGF0ZSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgX2RwdV9jcnRjX3dh aXRfZm9yX2ZyYW1lX2RvbmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IEBAIC0xNjQxLDE3ICsx NjM1LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmRwdV9jcnRjX2R1cGxpY2F0 ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAo+ICAJZHB1X2NydGMgPSB0b19kcHVf Y3J0YyhjcnRjKTsKPiAgCW9sZF9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0 ZSk7Cj4gLQljc3RhdGUgPSBtc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvKTsKPiArCWNzdGF0ZSA9IGttZW1kdXAob2xkX2NzdGF0ZSwgc2l6ZW9mKCpvbGRf Y3N0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gIAlpZiAoIWNzdGF0ZSkgewo+ICAJCURQVV9FUlJPUigi ZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKPiAgCQlyZXR1cm4gTlVMTDsKPiAgCX0KPiAg Cj4gLQkvKiBkdXBsaWNhdGUgdmFsdWUgaGVscGVyICovCj4gLQltc21fcHJvcGVydHlfZHVwbGlj YXRlX3N0YXRlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJb2xkX2NzdGF0ZSwgY3N0 YXRlLAo+IC0JCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgY3N0YXRlLT5wcm9wZXJ0eV92YWx1 ZXMpOwo+IC0KPiAgCS8qIGR1cGxpY2F0ZSBiYXNlIGhlbHBlciAqLwo+ICAJX19kcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmY3N0YXRlLT5iYXNlKTsKPiAgCj4g QEAgLTE2ODcsMTcgKzE2NzYsMTIgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfcmVzZXQoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ICAJfQo+ICAKPiAgCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0 Yyk7Cj4gLQljc3RhdGUgPSBtc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvKTsKPiArCWNzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjc3RhdGUpLCBHRlBfS0VS TkVMKTsKPiAgCWlmICghY3N0YXRlKSB7Cj4gIAkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2Nh dGUgc3RhdGVcbiIpOwo+ICAJCXJldHVybjsKPiAgCX0KPiAgCj4gLQkvKiByZXNldCB2YWx1ZSBo ZWxwZXIgKi8KPiAtCW1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSgmZHB1X2NydGMtPnByb3BlcnR5 X2luZm8sIGNzdGF0ZSwKPiAtCQkJJmNzdGF0ZS0+cHJvcGVydHlfc3RhdGUsCj4gLQkJCWNzdGF0 ZS0+cHJvcGVydHlfdmFsdWVzKTsKPiAtCj4gIAlfZHB1X2NydGNfcnBfcmVzZXQoJmNzdGF0ZS0+ cnAsICZkcHVfY3J0Yy0+cnBfbG9jaywKPiAgCQkJJmRwdV9jcnRjLT5ycF9oZWFkKTsKPiAgCj4g QEAgLTIxOTQsMjEyICsyMTc4LDYgQEAgdm9pZCBkcHVfY3J0Y19jYW5jZWxfcGVuZGluZ19mbGlw KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICAJX2RwdV9j cnRjX2NvbXBsZXRlX2ZsaXAoY3J0YywgZmlsZSk7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBkcHVf Y3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMgLSBpbnN0YWxsIGFsbCBkcm0gcHJvcGVydGllcyBmb3Ig Y3J0Ywo+IC0gKiBAY3J0YzogUG9pbnRlciB0byBkcm0gY3J0YyBzdHJ1Y3R1cmUKPiAtICovCj4g LXN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gLQkJCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nKQo+IC17Cj4gLQlzdHJ1 Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiAtCXN0 cnVjdCBkcHVfa21zX2luZm8gKmluZm87Cj4gLQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKPiAt Cj4gLQlEUFVfREVCVUcoIlxuIik7Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFjYXRhbG9nKSB7Cj4g LQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGMgb3IgY2F0YWxvZ1xuIik7Cj4gLQkJcmV0dXJuOwo+ IC0JfQo+IC0KPiAtCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Cj4gLQlkZXYgPSBjcnRj LT5kZXY7Cj4gLQlkcHVfa21zID0gX2RwdV9jcnRjX2dldF9rbXMoY3J0Yyk7Cj4gLQo+IC0JaWYg KCFkcHVfa21zKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKPiAtCQly ZXR1cm47Cj4gLQl9Cj4gLQo+IC0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfa21z X2luZm8pLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghaW5mbykgewo+IC0JCURQVV9FUlJPUigiZmFp bGVkIHRvIGFsbG9jYXRlIGluZm8gbWVtb3J5XG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+ IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sICJj YXBhYmlsaXRpZXMiLAo+IC0JCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCBDUlRDX1BST1BfSU5G Tyk7Cj4gLQo+IC0JZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwo+IC0KPiAtCWRwdV9rbXNfaW5m b19hZGRfa2V5aW50KGluZm8sICJod192ZXJzaW9uIiwgY2F0YWxvZy0+aHd2ZXJzaW9uKTsKPiAt CWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfbGluZXdpZHRoIiwKPiAtCQkJY2F0 YWxvZy0+Y2Fwcy0+bWF4X21peGVyX3dpZHRoKTsKPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50 KGluZm8sICJtYXhfYmxlbmRzdGFnZXMiLAo+IC0JCQljYXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJf YmxlbmRzdGFnZXMpOwo+IC0JaWYgKGNhdGFsb2ctPmNhcHMtPnFzZWVkX3R5cGUgPT0gRFBVX1NT UFBfU0NBTEVSX1FTRUVEMikKPiAtCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicXNl ZWRfdHlwZSIsICJxc2VlZDIiKTsKPiAtCWlmIChjYXRhbG9nLT5jYXBzLT5xc2VlZF90eXBlID09 IERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpCj4gLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5m bywgInFzZWVkX3R5cGUiLCAicXNlZWQzIik7Cj4gLQo+IC0JaWYgKGRwdV9pc19jdXN0b21fY2xp ZW50KCkpIHsKPiAtCQlpZiAoY2F0YWxvZy0+Y2Fwcy0+c21hcnRfZG1hX3JldiA9PSBEUFVfU1NQ UF9TTUFSVF9ETUFfVjEpCj4gLQkJCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sCj4gLQkJ CQkJInNtYXJ0X2RtYV9yZXYiLCAic21hcnRfZG1hX3YxIik7Cj4gLQkJaWYgKGNhdGFsb2ctPmNh cHMtPnNtYXJ0X2RtYV9yZXYgPT0gRFBVX1NTUFBfU01BUlRfRE1BX1YyKQo+IC0JCQlkcHVfa21z X2luZm9fYWRkX2tleXN0cihpbmZvLAo+IC0JCQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2Rt YV92MiIpOwo+IC0JfQo+IC0KPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNf c3JjX3NwbGl0IiwKPiAtCQkJCWNhdGFsb2ctPmNhcHMtPmhhc19zcmNfc3BsaXQpOwo+IC0JaWYg KGNhdGFsb2ctPnBlcmYubWF4X2J3X2xvdykKPiAtCQlkcHVfa21zX2luZm9fYWRkX2tleWludChp bmZvLCAibWF4X2JhbmR3aWR0aF9sb3ciLAo+IC0JCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfbG93 ICogMTAwMExMKTsKPiAtCWlmIChjYXRhbG9nLT5wZXJmLm1heF9id19oaWdoKQo+IC0JCWRwdV9r bXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfYmFuZHdpZHRoX2hpZ2giLAo+IC0JCQkJY2F0 YWxvZy0+cGVyZi5tYXhfYndfaGlnaCAqIDEwMDBMTCk7Cj4gLQlpZiAoY2F0YWxvZy0+cGVyZi5t aW5fY29yZV9pYikKPiAtCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWluX2NvcmVf aWIiLAo+IC0JCQkJY2F0YWxvZy0+cGVyZi5taW5fY29yZV9pYiAqIDEwMDBMTCk7Cj4gLQlpZiAo Y2F0YWxvZy0+cGVyZi5taW5fbGxjY19pYikKPiAtCQlkcHVfa21zX2luZm9fYWRkX2tleWludChp bmZvLCAibWluX2xsY2NfaWIiLAo+IC0JCQkJY2F0YWxvZy0+cGVyZi5taW5fbGxjY19pYiAqIDEw MDBMTCk7Cj4gLQlpZiAoY2F0YWxvZy0+cGVyZi5taW5fZHJhbV9pYikKPiAtCQlkcHVfa21zX2lu Zm9fYWRkX2tleWludChpbmZvLCAibWluX2RyYW1faWIiLAo+IC0JCQkJY2F0YWxvZy0+cGVyZi5t aW5fZHJhbV9pYiAqIDEwMDBMTCk7Cj4gLQlpZiAoZHB1X2ttcy0+cGVyZi5tYXhfY29yZV9jbGtf cmF0ZSkKPiAtCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X21kcF9jbGsiLAo+ IC0JCQkJZHB1X2ttcy0+cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSk7Cj4gLQlkcHVfa21zX2luZm9f YWRkX2tleXN0cihpbmZvLCAiY29yZV9pYl9mZiIsCj4gLQkJCWNhdGFsb2ctPnBlcmYuY29yZV9p Yl9mZik7Cj4gLQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiY29yZV9jbGtfZmYiLAo+ IC0JCQljYXRhbG9nLT5wZXJmLmNvcmVfY2xrX2ZmKTsKPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5 c3RyKGluZm8sICJjb21wX3JhdGlvX3J0IiwKPiAtCQkJY2F0YWxvZy0+cGVyZi5jb21wX3JhdGlv X3J0KTsKPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJjb21wX3JhdGlvX25ydCIs Cj4gLQkJCWNhdGFsb2ctPnBlcmYuY29tcF9yYXRpb19ucnQpOwo+IC0JZHB1X2ttc19pbmZvX2Fk ZF9rZXlpbnQoaW5mbywgImRlc3Rfc2NhbGVfcHJlZmlsbF9saW5lcyIsCj4gLQkJCWNhdGFsb2ct PnBlcmYuZGVzdF9zY2FsZV9wcmVmaWxsX2xpbmVzKTsKPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJ1bmRlcnNpemVkX3ByZWZpbGxfbGluZXMiLAo+IC0JCQljYXRhbG9nLT5wZXJm LnVuZGVyc2l6ZWRfcHJlZmlsbF9saW5lcyk7Cj4gLQlkcHVfa21zX2luZm9fYWRkX2tleWludChp bmZvLCAibWFjcm90aWxlX3ByZWZpbGxfbGluZXMiLAo+IC0JCQljYXRhbG9nLT5wZXJmLm1hY3Jv dGlsZV9wcmVmaWxsX2xpbmVzKTsKPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJ5 dXZfbnYxMl9wcmVmaWxsX2xpbmVzIiwKPiAtCQkJY2F0YWxvZy0+cGVyZi55dXZfbnYxMl9wcmVm aWxsX2xpbmVzKTsKPiAtCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJsaW5lYXJfcHJl ZmlsbF9saW5lcyIsCj4gLQkJCWNhdGFsb2ctPnBlcmYubGluZWFyX3ByZWZpbGxfbGluZXMpOwo+ IC0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImRvd25zY2FsaW5nX3ByZWZpbGxfbGlu ZXMiLAo+IC0JCQljYXRhbG9nLT5wZXJmLmRvd25zY2FsaW5nX3ByZWZpbGxfbGluZXMpOwo+IC0J ZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgInh0cmFfcHJlZmlsbF9saW5lcyIsCj4gLQkJ CWNhdGFsb2ctPnBlcmYueHRyYV9wcmVmaWxsX2xpbmVzKTsKPiAtCWRwdV9rbXNfaW5mb19hZGRf a2V5aW50KGluZm8sICJhbW9ydGl6YWJsZV90aHJlc2hvbGQiLAo+IC0JCQljYXRhbG9nLT5wZXJm LmFtb3J0aXphYmxlX3RocmVzaG9sZCk7Cj4gLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZv LCAibWluX3ByZWZpbGxfbGluZXMiLAo+IC0JCQljYXRhbG9nLT5wZXJmLm1pbl9wcmVmaWxsX2xp bmVzKTsKPiAtCj4gLQltc21fcHJvcGVydHlfc2V0X2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9p bmZvLCAmZHB1X2NydGMtPmJsb2JfaW5mbywKPiAtCQkJaW5mby0+ZGF0YSwgRFBVX0tNU19JTkZP X0RBVEFMRU4oaW5mbyksIENSVENfUFJPUF9JTkZPKTsKPiAtCj4gLQlrZnJlZShpbmZvKTsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9jcnRjX2F0b21pY19zZXRfcHJvcGVydHkgLSBhdG9taWNh bGx5IHNldCBhIGNydGMgZHJtIHByb3BlcnR5Cj4gLSAqIEBjcnRjOiBQb2ludGVyIHRvIGRybSBj cnRjIHN0cnVjdHVyZQo+IC0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNydGMgc3RhdGUgc3Ry dWN0dXJlCj4gLSAqIEBwcm9wZXJ0eTogUG9pbnRlciB0byB0YXJnZXRlZCBkcm0gcHJvcGVydHkK PiAtICogQHZhbDogVXBkYXRlZCBwcm9wZXJ0eSB2YWx1ZQo+IC0gKiBAUmV0dXJuczogWmVybyBv biBzdWNjZXNzCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19zZXRfcHJvcGVy dHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUsCj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gLQkJdWludDY0X3QgdmFs KQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRwdV9jcnRj X3N0YXRlICpjc3RhdGU7Cj4gLQlpbnQgcmV0ID0gLUVJTlZBTDsKPiAtCj4gLQlpZiAoIWNydGMg fHwgIXN0YXRlIHx8ICFwcm9wZXJ0eSkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dChzKVxuIik7Cj4gLQl9IGVsc2Ugewo+IC0JCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 Cj4gLQkJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwo+IC0JCXJldCA9IG1zbV9w cm9wZXJ0eV9hdG9taWNfc2V0KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJCSZjc3Rh dGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlE Uk1fRVJST1IoImZhaWxlZCB0byBzZXQgdGhlIHByb3BlcnR5XG4iKTsKPiAtCj4gLQkJRFBVX0RF QlVHKCJjcnRjJWQgJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsIGNydGMtPmJhc2UuaWQsCj4g LQkJCQlwcm9wZXJ0eS0+bmFtZSwgcHJvcGVydHktPmJhc2UuaWQsIHZhbCwgcmV0KTsKPiAtCX0K PiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2NydGNfc2V0X3By b3BlcnR5IC0gc2V0IGEgY3J0YyBkcm0gcHJvcGVydHkKPiAtICogQGNydGM6IFBvaW50ZXIgdG8g ZHJtIGNydGMgc3RydWN0dXJlCj4gLSAqIEBwcm9wZXJ0eTogUG9pbnRlciB0byB0YXJnZXRlZCBk cm0gcHJvcGVydHkKPiAtICogQHZhbDogVXBkYXRlZCBwcm9wZXJ0eSB2YWx1ZQo+IC0gKiBAUmV0 dXJuczogWmVybyBvbiBzdWNjZXNzCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9jcnRjX3NldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAq cHJvcGVydHksIHVpbnQ2NF90IHZhbCkKPiAtewo+IC0JRFBVX0RFQlVHKCJcbiIpOwo+IC0KPiAt CXJldHVybiBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3BlcnR5KGNydGMsIGNydGMtPnN0YXRlLCBw cm9wZXJ0eSwgdmFsKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9jcnRjX2F0b21pY19nZXRf cHJvcGVydHkgLSByZXRyaWV2ZSBhIGNydGMgZHJtIHByb3BlcnR5Cj4gLSAqIEBjcnRjOiBQb2lu dGVyIHRvIGRybSBjcnRjIHN0cnVjdHVyZQo+IC0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNy dGMgc3RhdGUgc3RydWN0dXJlCj4gLSAqIEBwcm9wZXJ0eTogUG9pbnRlciB0byB0YXJnZXRlZCBk cm0gcHJvcGVydHkKPiAtICogQHZhbDogUG9pbnRlciB0byB2YXJpYWJsZSBmb3IgcmVjZWl2aW5n IHByb3BlcnR5IHZhbHVlCj4gLSAqIEBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKPiAtICovCj4g LXN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gLQkJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiAtCQlzdHJ1 Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiAtCQl1aW50NjRfdCAqdmFsKQo+IC17Cj4gLQlz dHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3Rh dGU7Cj4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gLQlpbnQgaSwgcmV0ID0gLUVJ TlZBTDsKPiAtCWJvb2wgaXNfY21kID0gdHJ1ZTsKPiAtCj4gLQlpZiAoIWNydGMgfHwgIXN0YXRl KSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKPiAtCX0gZWxzZSB7 Cj4gLQkJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiAtCQljc3RhdGUgPSB0b19kcHVf Y3J0Y19zdGF0ZShzdGF0ZSk7Cj4gLQo+IC0JCS8qKgo+IC0JCSAqIHNldCB0aGUgY21kIGZsYWcg b25seSB3aGVuIGFsbCB0aGUgZW5jb2RlcnMgYXR0YWNoZWQKPiAtCQkgKiB0byB0aGUgY3J0YyBh cmUgaW4gY21kIG1vZGUuIENvbnNpZGVyIGFsbCBvdGhlciBjYXNlcwo+IC0JCSAqIGFzIHZpZGVv IG1vZGUuCj4gLQkJICovCj4gLQkJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgY3J0Yy0+ ZGV2KSB7Cj4gLQkJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpCj4gLQkJCQlpc19jbWQgPSBk cHVfZW5jb2Rlcl9jaGVja19tb2RlKGVuY29kZXIsCj4gLQkJCQkJCU1TTV9ESVNQTEFZX0NBUF9D TURfTU9ERSk7Cj4gLQkJfQo+IC0KPiAtCQlpID0gbXNtX3Byb3BlcnR5X2luZGV4KCZkcHVfY3J0 Yy0+cHJvcGVydHlfaW5mbywgcHJvcGVydHkpOwo+IC0JCXJldCA9IG1zbV9wcm9wZXJ0eV9hdG9t aWNfZ2V0KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJCSZjc3RhdGUtPnByb3BlcnR5 X3N0YXRlLAo+IC0JCQkJcHJvcGVydHksIHZhbCk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJRFJNX0VS Uk9SKCJnZXQgcHJvcGVydHkgZmFpbGVkXG4iKTsKPiAtCX0KPiAtCXJldHVybiByZXQ7Cj4gLX0K PiAtCj4gICNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiAgc3RhdGljIGludCBfZHB1X2RlYnVnZnNf c3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQo+ICB7Cj4gQEAgLTI3 NTksOSArMjUzNyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Vhcmx5X3VucmVnaXN0ZXIoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ICAJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9z ZXRfY29uZmlnLAo+ICAJLmRlc3Ryb3kgPSBkcHVfY3J0Y19kZXN0cm95LAo+ICAJLnBhZ2VfZmxp cCA9IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKPiAtCS5zZXRfcHJvcGVydHkgPSBkcHVf Y3J0Y19zZXRfcHJvcGVydHksCj4gLQkuYXRvbWljX3NldF9wcm9wZXJ0eSA9IGRwdV9jcnRjX2F0 b21pY19zZXRfcHJvcGVydHksCj4gLQkuYXRvbWljX2dldF9wcm9wZXJ0eSA9IGRwdV9jcnRjX2F0 b21pY19nZXRfcHJvcGVydHksCj4gIAkucmVzZXQgPSBkcHVfY3J0Y19yZXNldCwKPiAgCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X2NydGNfZHVwbGljYXRlX3N0YXRlLAo+ICAJLmF0b21p Y19kZXN0cm95X3N0YXRlID0gZHB1X2NydGNfZGVzdHJveV9zdGF0ZSwKPiBAQCAtMjkyNCwxNCAr MjY5OSw2IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCQlyZXR1cm4gRVJSX1BUUihyYyk7 Cj4gIAl9Cj4gIAo+IC0JLyogY3JlYXRlIENSVEMgcHJvcGVydGllcyAqLwo+IC0JbXNtX3Byb3Bl cnR5X2luaXQoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAmY3J0Yy0+YmFzZSwgZGV2LAo+IC0J CQlwcml2LT5jcnRjX3Byb3BlcnR5LCBkcHVfY3J0Yy0+cHJvcGVydHlfZGF0YSwKPiAtCQkJQ1JU Q19QUk9QX0NPVU5ULCBDUlRDX1BST1BfQkxPQkNPVU5ULAo+IC0JCQlzaXplb2Yoc3RydWN0IGRw dV9jcnRjX3N0YXRlKSk7Cj4gLQo+IC0JZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKGNydGMs IGttcy0+Y2F0YWxvZyk7Cj4gLQo+ICAJRFBVX0RFQlVHKCIlczogc3VjY2Vzc2Z1bGx5IGluaXRp YWxpemVkIGNydGNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKPiAgCXJldHVybiBjcnRjOwo+ICB9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCj4gaW5kZXggNjYyOGViMy4u Zjc1MjEwMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAo+ IEBAIC0yMiw3ICsyMiw2IEBACj4gICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Cj4gICNpbmNs dWRlIDx1YXBpL2RybS9kcHVfZHJtLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiAt I2luY2x1ZGUgIm1zbV9wcm9wLmgiCj4gICNpbmNsdWRlICJkcHVfa21zLmgiCj4gICNpbmNsdWRl ICJkcHVfY29yZV9wZXJmLmgiCj4gICNpbmNsdWRlICJkcHVfaHdfYmxrLmgiCj4gQEAgLTIwMCwx MCArMTk5LDYgQEAgc3RydWN0IGRwdV9jcnRjIHsKPiAgCXN0cnVjdCBkcm1fcGVuZGluZ192Ymxh bmtfZXZlbnQgKmV2ZW50Owo+ICAJdTMyIHZzeW5jX2NvdW50Owo+ICAKPiAtCXN0cnVjdCBtc21f cHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZvOwo+IC0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRh IHByb3BlcnR5X2RhdGFbQ1JUQ19QUk9QX0NPVU5UXTsKPiAtCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiAqYmxvYl9pbmZvOwo+IC0KPiAgCXN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnIHN0YWdlX2Nm ZzsKPiAgCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKPiAgCj4gQEAgLTMyNCw4ICszMTks NiBAQCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewo+ICAJYm9vbCBpc19wcHNwbGl0Owo+ICAJc3Ry dWN0IGRwdV9yZWN0IGxtX2JvdW5kc1tDUlRDX0RVQUxfTUlYRVJTXTsKPiAgCj4gLQlzdHJ1Y3Qg bXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0YXRlOwo+IC0Jc3RydWN0IG1zbV9wcm9wZXJ0 eV92YWx1ZSBwcm9wZXJ0eV92YWx1ZXNbQ1JUQ19QUk9QX0NPVU5UXTsKPiAgCXVpbnQ2NF90IGlu cHV0X2ZlbmNlX3RpbWVvdXRfbnM7Cj4gIAo+ICAJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1z IG5ld19wZXJmOwo+IEBAIC0zMzYsMTUgKzMyOSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7 Cj4gIAljb250YWluZXJfb2YoeCwgc3RydWN0IGRwdV9jcnRjX3N0YXRlLCBiYXNlKQo+ICAKPiAg LyoqCj4gLSAqIGRwdV9jcnRjX2dldF9wcm9wZXJ0eSAtIHF1ZXJ5IGludGVnZXIgdmFsdWUgb2Yg Y3J0YyBwcm9wZXJ0eQo+IC0gKiBAUzogUG9pbnRlciB0byBjcnRjIHN0YXRlCj4gLSAqIEBYOiBQ cm9wZXJ0eSBpbmRleCwgZnJvbSBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eQo+IC0gKiBSZXR1 cm5zOiBJbnRlZ2VyIHZhbHVlIG9mIHJlcXVlc3RlZCBwcm9wZXJ0eQo+IC0gKi8KPiAtI2RlZmlu ZSBkcHVfY3J0Y19nZXRfcHJvcGVydHkoUywgWCkgXAo+IC0JKChTKSAmJiAoKFgpIDwgQ1JUQ19Q Uk9QX0NPVU5UKSA/ICgoUyktPnByb3BlcnR5X3ZhbHVlc1soWCldLnZhbHVlKSA6IDApCj4gLQo+ IC0vKioKPiAgICogZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoIC0gZ2V0IHRoZSBtaXhlciB3aWR0 aAo+ICAgKiBNaXhlciB3aWR0aCB3aWxsIGJlIHNhbWUgYXMgcGFuZWwgd2lkdGgoLzIgZm9yIHNw bGl0KQo+ICAgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmgKPiBpbmRleCBkODUzYWQ5Li4wMzM5ZGZkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCj4gQEAgLTIwLDggKzIwLDYgQEAKPiAgI2RlZmluZSBf X0RQVV9FTkNPREVSX0hfXwo+ICAKPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+IC0KPiAt I2luY2x1ZGUgIm1zbV9wcm9wLmgiCj4gICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgo+ICAKPiAg I2RlZmluZSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9ET05FCQkJQklUKDApCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBpbmRleCAyODczNWM4Li5mYWY1OTAz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBAQCAt MjAsOSArMjAsOCBAQAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L2RtYS1idWYuaD4KPiAtI2luY2x1ZGUgIm1zbV9wcm9wLmgiCj4gLSNpbmNsdWRl ICJtc21fZHJ2LmgiCj4gIAo+ICsjaW5jbHVkZSAibXNtX2Rydi5oIgo+ICAjaW5jbHVkZSAiZHB1 X2ttcy5oIgo+ICAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKPiAgI2luY2x1ZGUgImRwdV9od19z c3BwLmgiCj4gQEAgLTExOSw5ICsxMTgsNiBAQCBzdHJ1Y3QgZHB1X3BsYW5lIHsKPiAgCj4gIAlj b25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgKnBpcGVfc2JsazsKPiAgCWNoYXIgcGlwZV9u YW1lW0RQVV9OQU1FX1NJWkVdOwo+IC0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvIHByb3BlcnR5 X2luZm87Cj4gLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtQTEFORV9Q Uk9QX0NPVU5UXTsKPiAtCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwo+ICAK PiAgCS8qIGRlYnVnZnMgcmVsYXRlZCBzdHVmZiAqLwo+ICAJc3RydWN0IGRlbnRyeSAqZGVidWdm c19yb290Owo+IEBAIC0xNDAxLDcgKzEzOTcsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3Bw X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAl9Cj4gIAo+ICAJX2Rw dV9wbGFuZV9zZXRfcW9zX3JlbWFwKHBsYW5lKTsKPiAtCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAK PiBAQCAtMTQ4Niw4OSArMTQ4MSw2IEBAIHZvaWQgZHB1X3BsYW5lX3Jlc3RvcmUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUpCj4gIAlkcHVfcGxhbmVfYXRvbWljX3VwZGF0ZShwbGFuZSwgcGxhbmUt PnN0YXRlKTsKPiAgfQo+ICAKPiAtLyogaGVscGVyIHRvIGluc3RhbGwgcHJvcGVydGllcyB3aGlj aCBhcmUgY29tbW9uIHRvIHBsYW5lcyBhbmQgY3J0Y3MgKi8KPiAtc3RhdGljIHZvaWQgX2RwdV9w bGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gLQlzdHJ1 Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nLCB1MzIgbWFzdGVyX3BsYW5lX2lkKQo+IC17Cj4gLQlz dHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKPiAtCWludCB6cG9z X21heCA9IDI1NTsKPiAtCWludCB6cG9zX2RlZiA9IDA7Cj4gLQo+IC0JaWYgKCFwbGFuZSB8fCAh cGRwdSkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7Cj4gLQkJcmV0dXJuOwo+ IC0JfSBlbHNlIGlmICghcGRwdS0+cGlwZV9odyB8fCAhcGRwdS0+cGlwZV9zYmxrKSB7Cj4gLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lLCBwaXBlX2h3ICVkIHBpcGVfc2JsayAlZFxuIiwKPiAt CQkJCXBkcHUtPnBpcGVfaHcgIT0gMCwgcGRwdS0+cGlwZV9zYmxrICE9IDApOwo+IC0JCXJldHVy bjsKPiAtCX0gZWxzZSBpZiAoIWNhdGFsb2cpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgY2F0 YWxvZ1xuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCXBkcHUtPmNhdGFsb2cgPSBjYXRh bG9nOwo+IC0KPiAtCWlmIChkcHVfaXNfY3VzdG9tX2NsaWVudCgpKSB7Cj4gLQkJaWYgKGNhdGFs b2ctPm1peGVyX2NvdW50ICYmCj4gLQkJCQljYXRhbG9nLT5taXhlclswXS5zYmxrLT5tYXhibGVu ZHN0YWdlcykgewo+IC0JCQl6cG9zX21heCA9IGNhdGFsb2ctPm1peGVyWzBdLnNibGstPm1heGJs ZW5kc3RhZ2VzIC0gMTsKPiAtCQkJaWYgKHpwb3NfbWF4ID4gRFBVX1NUQUdFX01BWCAtIERQVV9T VEFHRV8wIC0gMSkKPiAtCQkJCXpwb3NfbWF4ID0gRFBVX1NUQUdFX01BWCAtIERQVV9TVEFHRV8w IC0gMTsKPiAtCQl9Cj4gLQl9IGVsc2UgaWYgKHBsYW5lLT50eXBlICE9IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpIHsKPiAtCQkvKiByZXNlcnZlIHpwb3MgPT0gMCBmb3IgcHJpbWFyeSBwbGFuZXMg Ki8KPiAtCQl6cG9zX2RlZiA9IGRybV9wbGFuZV9pbmRleChwbGFuZSkgKyAxOwo+IC0JfQo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBzdHJ1 Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiAtCQl1aW50NjRfdCB2YWwpCj4gLXsKPiAtCXN0 cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSBwbGFuZSA/IHRvX2RwdV9wbGFuZShwbGFuZSkgOiBOVUxM Owo+IC0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0JaW50IHJldCA9IC1FSU5W QUw7Cj4gLQo+IC0JRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwo+IC0KPiAtCWlmICghcGxh bmUpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwo+IC0JfSBlbHNlIGlmICgh c3RhdGUpIHsKPiAtCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgc3RhdGVcbiIpOwo+ IC0JfSBlbHNlIHsKPiAtCQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwo+IC0J CXJldCA9IG1zbV9wcm9wZXJ0eV9hdG9taWNfc2V0KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAo+IC0J CQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+IC0JfQo+IC0KPiAt CURQVV9ERUJVR19QTEFORShwZHB1LCAiJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsCj4gLQkJ CXByb3BlcnR5LT5uYW1lLCBwcm9wZXJ0eS0+YmFzZS5pZCwgdmFsLCByZXQpOwo+IC0KPiAtCXJl dHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHB1X3BsYW5lX2F0b21pY19nZXRfcHJv cGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gLQkJY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUsCj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2 NF90ICp2YWwpCj4gLXsKPiAtCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSBwbGFuZSA/IHRvX2Rw dV9wbGFuZShwbGFuZSkgOiBOVUxMOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRl Owo+IC0JaW50IHJldCA9IC1FSU5WQUw7Cj4gLQo+IC0JaWYgKCFwbGFuZSkgewo+IC0JCURQVV9F UlJPUigiaW52YWxpZCBwbGFuZVxuIik7Cj4gLQl9IGVsc2UgaWYgKCFzdGF0ZSkgewo+IC0JCURQ VV9FUlJPUigiaW52YWxpZCBzdGF0ZVxuIik7Cj4gLQl9IGVsc2Ugewo+IC0JCURQVV9ERUJVR19Q TEFORShwZHB1LCAiXG4iKTsKPiAtCQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUp Owo+IC0JCXJldCA9IG1zbV9wcm9wZXJ0eV9hdG9taWNfZ2V0KCZwZHB1LT5wcm9wZXJ0eV9pbmZv LAo+IC0JCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+IC0JfQo+ IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9kZXN0 cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X3BsYW5lICpw ZHB1ID0gcGxhbmUgPyB0b19kcHVfcGxhbmUocGxhbmUpIDogTlVMTDsKPiBAQCAtMTU3OCw5ICsx NDkwLDYgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAq cGxhbmUpCj4gIAlpZiAocGRwdSkgewo+ICAJCV9kcHVfcGxhbmVfc2V0X3Fvc19jdHJsKHBsYW5l LCBmYWxzZSwgRFBVX1BMQU5FX1FPU19QQU5JQ19DVFJMKTsKPiAgCj4gLQkJaWYgKHBkcHUtPmJs b2JfaW5mbykKPiAtCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHBkcHUtPmJsb2JfaW5mbyk7Cj4g LQkJbXNtX3Byb3BlcnR5X2Rlc3Ryb3koJnBkcHUtPnByb3BlcnR5X2luZm8pOwo+ICAJCW11dGV4 X2Rlc3Ryb3koJnBkcHUtPmxvY2spOwo+ICAKPiAgCQlkcm1fcGxhbmVfaGVscGVyX2Rpc2FibGUo cGxhbmUpOwo+IEBAIC0xNTk4LDcgKzE1MDcsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVz dHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rl c3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCj4gIHsKPiAtCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7Cj4gIAlzdHJ1 Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gIAo+ICAJaWYgKCFwbGFuZSB8fCAhc3RhdGUp IHsKPiBAQCAtMTYwNywxOCArMTUxNSwxMyBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJv eV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+ IC0JcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Cj4gIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVf c3RhdGUoc3RhdGUpOwo+ICAKPiAtCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsKPiAtCj4g IAkvKiByZW1vdmUgcmVmIGNvdW50IGZvciBmcmFtZSBidWZmZXJzICovCj4gIAlpZiAoc3RhdGUt PmZiKQo+ICAJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoc3RhdGUtPmZiKTsKPiAgCj4gLQkvKiBkZXN0 cm95IHZhbHVlIGhlbHBlciAqLwo+IC0JbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoJnBkcHUt PnByb3BlcnR5X2luZm8sIHBzdGF0ZSwKPiAtCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUpOwo+ ICsJa2ZyZWUocHN0YXRlKTsKPiAgfQo+ICAKPiAgc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKgo+IEBAIC0xNjM4LDcgKzE1NDEsNyBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJv eV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCj4gIAlvbGRfc3RhdGUgPSB0b19k cHVfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiAgCXBkcHUgPSB0b19kcHVfcGxhbmUocGxh bmUpOwo+IC0JcHN0YXRlID0gbXNtX3Byb3BlcnR5X2FsbG9jX3N0YXRlKCZwZHB1LT5wcm9wZXJ0 eV9pbmZvKTsKPiArCXBzdGF0ZSA9IGttZW1kdXAob2xkX3N0YXRlLCBzaXplb2YoKm9sZF9zdGF0 ZSksIEdGUF9LRVJORUwpOwo+ICAJaWYgKCFwc3RhdGUpIHsKPiAgCQlEUFVfRVJST1JfUExBTkUo cGRwdSwgImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0ZVxuIik7Cj4gIAkJcmV0dXJuIE5VTEw7Cj4g QEAgLTE2NDYsMTAgKzE1NDksNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCj4gIAlEUFVfREVCVUdfUExBTkUocGRwdSwg IlxuIik7Cj4gIAo+IC0JLyogZHVwbGljYXRlIHZhbHVlIGhlbHBlciAqLwo+IC0JbXNtX3Byb3Bl cnR5X2R1cGxpY2F0ZV9zdGF0ZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgb2xkX3N0YXRlLCBwc3Rh dGUsCj4gLQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwc3RhdGUtPnByb3BlcnR5X3ZhbHVl cyk7Cj4gLQo+ICAJcHN0YXRlLT5wZW5kaW5nID0gZmFsc2U7Cj4gIAo+ICAJX19kcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZwc3RhdGUtPmJhc2UpOwo+IEBA IC0xNjc2LDE3ICsxNTc1LDEyIEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yZXNldChzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSkKPiAgCQlwbGFuZS0+c3RhdGUgPSAwOwo+ICAJfQo+ICAKPiAtCXBz dGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmcGRwdS0+cHJvcGVydHlfaW5mbyk7Cj4g Kwlwc3RhdGUgPSBremFsbG9jKHNpemVvZigqcHN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gIAlpZiAo IXBzdGF0ZSkgewo+ICAJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGFsbG9jYXRl IHN0YXRlXG4iKTsKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+IC0JLyogcmVzZXQgdmFsdWUgaGVs cGVyICovCj4gLQltc21fcHJvcGVydHlfcmVzZXRfc3RhdGUoJnBkcHUtPnByb3BlcnR5X2luZm8s IHBzdGF0ZSwKPiAtCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsCj4gLQkJCXBzdGF0ZS0+cHJv cGVydHlfdmFsdWVzKTsKPiAtCj4gIAlwc3RhdGUtPmJhc2UucGxhbmUgPSBwbGFuZTsKPiAgCj4g IAlwbGFuZS0+c3RhdGUgPSAmcHN0YXRlLT5iYXNlOwo+IEBAIC0xOTE5LDggKzE4MTMsNiBAQCBz dGF0aWMgdm9pZCBkcHVfcGxhbmVfZWFybHlfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKPiAgCQkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5l LAo+ICAJCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwK PiAgCQkuZGVzdHJveSA9IGRwdV9wbGFuZV9kZXN0cm95LAo+IC0JCS5hdG9taWNfc2V0X3Byb3Bl cnR5ID0gZHB1X3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHksCj4gLQkJLmF0b21pY19nZXRfcHJv cGVydHkgPSBkcHVfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0eSwKPiAgCQkucmVzZXQgPSBkcHVf cGxhbmVfcmVzZXQsCj4gIAkJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcHVfcGxhbmVfZHVw bGljYXRlX3N0YXRlLAo+ICAJCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRwdV9wbGFuZV9kZXN0 cm95X3N0YXRlLAo+IEBAIC0yMDY0LDEzICsxOTU2LDYgQEAgc3RydWN0IGRybV9wbGFuZSAqZHB1 X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCS8qIHN1Y2Nlc3MhIGZpbmFs aXplIGluaXRpYWxpemF0aW9uICovCj4gIAlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmRw dV9wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ICAKPiAtCW1zbV9wcm9wZXJ0eV9pbml0KCZwZHB1LT5w cm9wZXJ0eV9pbmZvLCAmcGxhbmUtPmJhc2UsIGRldiwKPiAtCQkJcHJpdi0+cGxhbmVfcHJvcGVy dHksIHBkcHUtPnByb3BlcnR5X2RhdGEsCj4gLQkJCVBMQU5FX1BST1BfQ09VTlQsIFBMQU5FX1BS T1BfQkxPQkNPVU5ULAo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSkpOwo+IC0K PiAtCV9kcHVfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHBsYW5lLCBrbXMtPmNhdGFsb2csIG1h c3Rlcl9wbGFuZV9pZCk7Cj4gLQo+ICAJLyogc2F2ZSB1c2VyIGZyaWVuZGx5IHBpcGUgbmFtZSBm b3IgbGF0ZXIgKi8KPiAgCXNucHJpbnRmKHBkcHUtPnBpcGVfbmFtZSwgRFBVX05BTUVfU0laRSwg InBsYW5lJXUiLCBwbGFuZS0+YmFzZS5pZCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9wbGFuZS5oCj4gaW5kZXggYTA2YzhiNC4uZjZmZTZkZCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCj4gQEAgLTIxLDcgKzIxLDYgQEAK PiAgCj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiAgCj4gLSNpbmNsdWRlICJtc21fcHJv cC5oIgo+ICAjaW5jbHVkZSAiZHB1X2ttcy5oIgo+ICAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIK PiAgI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCj4gQEAgLTQ0LDggKzQzLDYgQEAKPiAgICovCj4g IHN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgewo+ICAJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBiYXNl Owo+IC0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKPiAtCXN0cnVj dCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW1BMQU5FX1BST1BfQ09VTlRdOwo+ ICAJc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlOwo+ICAJdm9pZCAqaW5wdXRf ZmVuY2U7Cj4gIAllbnVtIGRwdV9zdGFnZSBzdGFnZTsKPiBAQCAtNzQsMTUgKzcxLDYgQEAgc3Ry dWN0IGRwdV9tdWx0aXJlY3RfcGxhbmVfc3RhdGVzIHsKPiAgCWNvbnRhaW5lcl9vZih4LCBzdHJ1 Y3QgZHB1X3BsYW5lX3N0YXRlLCBiYXNlKQo+ICAKPiAgLyoqCj4gLSAqIGRwdV9wbGFuZV9nZXRf cHJvcGVydHkgLSBRdWVyeSBpbnRlZ2VyIHZhbHVlIG9mIHBsYW5lIHByb3BlcnR5Cj4gLSAqIEBT OiBQb2ludGVyIHRvIHBsYW5lIHN0YXRlCj4gLSAqIEBYOiBQcm9wZXJ0eSBpbmRleCwgZnJvbSBl bnVtIG1zbV9tZHBfcGxhbmVfcHJvcGVydHkKPiAtICogUmV0dXJuczogSW50ZWdlciB2YWx1ZSBv ZiByZXF1ZXN0ZWQgcHJvcGVydHkKPiAtICovCj4gLSNkZWZpbmUgZHB1X3BsYW5lX2dldF9wcm9w ZXJ0eShTLCBYKSAoKFMpICYmICgoWCkgPCBQTEFORV9QUk9QX0NPVU5UKSA/IFwKPiAtCSgoUykt PnByb3BlcnR5X3ZhbHVlc1soWCldLnZhbHVlKSA6IDApCj4gLQo+IC0vKioKPiAgICogZHB1X3Bs YW5lX3BpcGUgLSByZXR1cm4gc3NwcCBpZGVudGlmaWVyIGZvciB0aGUgZ2l2ZW4gcGxhbmUKPiAg ICogQHBsYW5lOiAgIFBvaW50ZXIgdG8gRFJNIHBsYW5lIG9iamVjdAo+ICAgKiBSZXR1cm5zOiBz c3BwIGlkZW50aWZpZXIgb2YgdGhlIGdpdmVuIHBsYW5lCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiBp bmRleCA4ZTgwYjRiLi5lZGIzOTVkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiBAQCAtNzcs MjYgKzc3LDEzIEBAIHN0cnVjdCBtc21fZmlsZV9wcml2YXRlIHsKPiAgfTsKPiAgCj4gIGVudW0g bXNtX21kcF9wbGFuZV9wcm9wZXJ0eSB7Cj4gLQkvKiAjIG9mIGJsb2IgcHJvcGVydGllcyAqLwo+ IC0JUExBTkVfUFJPUF9CTE9CQ09VTlQsCj4gLQo+ICAJLyogcmFuZ2UgcHJvcGVydGllcyAqLwo+ IC0JUExBTkVfUFJPUF9aUE9TID0gUExBTkVfUFJPUF9CTE9CQ09VTlQsCj4gKwlQTEFORV9QUk9Q X1pQT1MsCj4gIAo+ICAJLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCj4gIAlQTEFORV9QUk9Q X0NPVU5UCj4gIH07Cj4gIAo+IC1lbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7Cj4gLQlDUlRD X1BST1BfSU5GTywKPiAtCj4gLQkvKiAjIG9mIGJsb2IgcHJvcGVydGllcyAqLwo+IC0JQ1JUQ19Q Uk9QX0JMT0JDT1VOVCwKPiAtCj4gLQkvKiB0b3RhbCAjIG9mIHByb3BlcnRpZXMgKi8KPiAtCUNS VENfUFJPUF9DT1VOVAo+IC19Owo+IC0KPiAgc3RydWN0IG1zbV92YmxhbmtfY3RybCB7Cj4gIAlz dHJ1Y3Qga3RocmVhZF93b3JrIHdvcms7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7 Cj4gQEAgLTM2NCw3ICszNTEsNiBAQCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKPiAgCj4gIAkv KiBQcm9wZXJ0aWVzICovCj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwbGFuZV9wcm9wZXJ0eVtQ TEFORV9QUk9QX0NPVU5UXTsKPiAtCXN0cnVjdCBkcm1fcHJvcGVydHkgKmNydGNfcHJvcGVydHlb Q1JUQ19QUk9QX0NPVU5UXTsKPiAgCj4gIAkvKiBDb2xvciBwcm9jZXNzaW5nIHByb3BlcnRpZXMg Zm9yIHRoZSBjcnRjICovCj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICoqY3BfcHJvcGVydHk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3AuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX3Byb3AuYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDhm MjdjZGUuLjAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmMKPiAr KysgL2Rldi9udWxsCj4gQEAgLTEsNjg4ICswLDAgQEAKPiAtLyogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+IC0gKgo+ IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiAtICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAqLwo+IC0KPiAtI2luY2x1ZGUgIm1zbV9wcm9wLmgi Cj4gLQo+IC12b2lkIG1zbV9wcm9wZXJ0eV9pbml0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAq aW5mbywKPiAtCQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpiYXNlLAo+IC0JCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3BlcnR5X2FycmF5LAo+ IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfZGF0YSAqcHJvcGVydHlfZGF0YSwKPiAtCQl1aW50MzJf dCBwcm9wZXJ0eV9jb3VudCwKPiAtCQl1aW50MzJfdCBibG9iX2NvdW50LAo+IC0JCXVpbnQzMl90 IHN0YXRlX3NpemUpCj4gLXsKPiAtCS8qIHByZXZlbnQgYWNjZXNzIGlmIGFueSBvZiB0aGVzZSBh cmUgTlVMTCAqLwo+IC0JaWYgKCFiYXNlIHx8ICFkZXYgfHwgIXByb3BlcnR5X2FycmF5IHx8ICFw cm9wZXJ0eV9kYXRhKSB7Cj4gLQkJcHJvcGVydHlfY291bnQgPSAwOwo+IC0JCWJsb2JfY291bnQg PSAwOwo+IC0KPiAtCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnRzLCBmb3JjaW5nIHplcm8g cHJvcGVydGllc1xuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCS8qIGNhbid0IGhhdmUg bW9yZSBibG9iIHByb3BlcnRpZXMgdGhhbiB0b3RhbCBwcm9wZXJ0aWVzICovCj4gLQlpZiAoYmxv Yl9jb3VudCA+IHByb3BlcnR5X2NvdW50KSB7Cj4gLQkJYmxvYl9jb3VudCA9IHByb3BlcnR5X2Nv dW50Owo+IC0KPiAtCQlEQkcoIkNhcHBpbmcgbnVtYmVyIG9mIGJsb2IgcHJvcGVydGllcyB0byAl ZCIsIGJsb2JfY291bnQpOwo+IC0JfQo+IC0KPiAtCWlmICghaW5mbykgewo+IC0JCURSTV9FUlJP UigiaW5mbyBwb2ludGVyIGlzIE5VTExcbiIpOwo+IC0JfSBlbHNlIHsKPiAtCQlpbmZvLT5iYXNl ID0gYmFzZTsKPiAtCQlpbmZvLT5kZXYgPSBkZXY7Cj4gLQkJaW5mby0+cHJvcGVydHlfYXJyYXkg PSBwcm9wZXJ0eV9hcnJheTsKPiAtCQlpbmZvLT5wcm9wZXJ0eV9kYXRhID0gcHJvcGVydHlfZGF0 YTsKPiAtCQlpbmZvLT5wcm9wZXJ0eV9jb3VudCA9IHByb3BlcnR5X2NvdW50Owo+IC0JCWluZm8t PmJsb2JfY291bnQgPSBibG9iX2NvdW50Owo+IC0JCWluZm8tPmluc3RhbGxfcmVxdWVzdCA9IDA7 Cj4gLQkJaW5mby0+aW5zdGFsbF9jb3VudCA9IDA7Cj4gLQkJaW5mby0+cmVjZW50X2lkeCA9IDA7 Cj4gLQkJaW5mby0+aXNfYWN0aXZlID0gZmFsc2U7Cj4gLQkJaW5mby0+c3RhdGVfc2l6ZSA9IHN0 YXRlX3NpemU7Cj4gLQkJaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSA9IDA7Cj4gLQkJbXV0ZXhfaW5p dCgmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQo+IC0JCW1lbXNldChwcm9wZXJ0eV9kYXRhLAo+ IC0JCQkJMCwKPiAtCQkJCXNpemVvZihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEpICoKPiAtCQkJ CXByb3BlcnR5X2NvdW50KTsKPiAtCX0KPiAtfQo+IC0KPiAtdm9pZCBtc21fcHJvcGVydHlfZGVz dHJveShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8pCj4gLXsKPiAtCWlmICghaW5mbykK PiAtCQlyZXR1cm47Cj4gLQo+IC0JLyogZnJlZSBzdGF0ZSBjYWNoZSAqLwo+IC0Jd2hpbGUgKGlu Zm8tPnN0YXRlX2NhY2hlX3NpemUgPiAwKQo+IC0JCWtmcmVlKGluZm8tPnN0YXRlX2NhY2hlWy0t KGluZm8tPnN0YXRlX2NhY2hlX3NpemUpXSk7Cj4gLQo+IC0JbXV0ZXhfZGVzdHJveSgmaW5mby0+ cHJvcGVydHlfbG9jayk7Cj4gLX0KPiAtCj4gLWludCBtc21fcHJvcGVydHlfcG9wX2RpcnR5KHN0 cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKPiAtCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0 YXRlICpwcm9wZXJ0eV9zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKPiAt CWludCByYyA9IDA7Cj4gLQo+IC0JaWYgKCFpbmZvIHx8ICFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJv cGVydHlfc3RhdGUtPnZhbHVlcykgewo+IC0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChz KVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JbXV0ZXhfbG9jaygmaW5m by0+cHJvcGVydHlfbG9jayk7Cj4gLQlpZiAobGlzdF9lbXB0eSgmcHJvcGVydHlfc3RhdGUtPmRp cnR5X2xpc3QpKSB7Cj4gLQkJcmMgPSAtRUFHQUlOOwo+IC0JfSBlbHNlIHsKPiAtCQlpdGVtID0g cHJvcGVydHlfc3RhdGUtPmRpcnR5X2xpc3QubmV4dDsKPiAtCQlsaXN0X2RlbF9pbml0KGl0ZW0p Owo+IC0JCXJjID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUs IGRpcnR5X25vZGUpCj4gLQkJCS0gcHJvcGVydHlfc3RhdGUtPnZhbHVlczsKPiAtCQlEUk1fREVC VUdfS01TKCJwcm9wZXJ0eSAlZCBkaXJ0eVxuIiwgcmMpOwo+IC0JfQo+IC0JbXV0ZXhfdW5sb2Nr KCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLS8q Kgo+IC0gKiBfbXNtX3Byb3BlcnR5X3NldF9kaXJ0eV9ub19sb2NrIC0gZmxhZyBnaXZlbiBwcm9w ZXJ0eSBhcyBiZWluZyBkaXJ0eQo+IC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IG11dGV4IHByb3RlY3QgdGhlCj4gLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSBsaW5rZWQgbGlzdC4KPiAtICogQGluZm86 IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Cj4gLSAqIEBwcm9wZXJ0 eV9zdGF0ZTogUG9pbnRlciB0byBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Cj4gLSAq IEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Cj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBfbXNt X3Byb3BlcnR5X3NldF9kaXJ0eV9ub19sb2NrKAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfaW5m byAqaW5mbywKPiAtCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwK PiAtCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCj4gLXsKPiAtCWlmICghaW5mbyB8fCAhcHJvcGVy dHlfc3RhdGUgfHwgIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMgfHwKPiAtCQkJcHJvcGVydHlfaWR4 ID49IGluZm8tPnByb3BlcnR5X2NvdW50KSB7Cj4gLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3Vt ZW50KHMpLCBpZHggJXVcbiIsIHByb3BlcnR5X2lkeCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0K PiAtCS8qIGF2b2lkIHJlLWluc2VydGluZyBpZiBhbHJlYWR5IGRpcnR5ICovCj4gLQlpZiAoIWxp c3RfZW1wdHkoJnByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS5kaXJ0eV9ub2Rl KSkgewo+IC0JCURSTV9ERUJVR19LTVMoInByb3BlcnR5ICV1IGFscmVhZHkgZGlydHlcbiIsIHBy b3BlcnR5X2lkeCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWxpc3RfYWRkX3RhaWwoJnBy b3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS5kaXJ0eV9ub2RlLAo+IC0JCQkmcHJv cGVydHlfc3RhdGUtPmRpcnR5X2xpc3QpOwo+IC19Cj4gLQo+IC0vKioKPiAtICogX21zbV9wcm9w ZXJ0eV9pbnN0YWxsX2ludGVnZXIgLSBpbnN0YWxsIHN0YW5kYXJkIGRybSByYW5nZSBwcm9wZXJ0 eQo+IC0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QK PiAtICogQG5hbWU6IFByb3BlcnR5IG5hbWUKPiAtICogQGZsYWdzOiBPdGhlciBwcm9wZXJ0eSB0 eXBlIGZsYWdzLCBlLmcuIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFCj4gLSAqIEBtaW46IE1pbiBw cm9wZXJ0eSB2YWx1ZQo+IC0gKiBAbWF4OiBNYXggcHJvcGVydHkgdmFsdWUKPiAtICogQGluaXQ6 IERlZmF1bHQgUHJvcGVydHkgdmFsdWUKPiAtICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5k ZXgKPiAtICogQGZvcmNlX2RpcnR5OiBXaGV0aGVyIG9yIG5vdCB0byBmaWx0ZXIgJ2RpcnR5JyBz dGF0dXMgb24gdW5jaGFuZ2VkIHZhbHVlcwo+IC0gKi8KPiAtc3RhdGljIHZvaWQgX21zbV9wcm9w ZXJ0eV9pbnN0YWxsX2ludGVnZXIoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0J CWNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgdWludDY0X3QgbWluLCB1aW50NjRfdCBtYXgs Cj4gLQkJdWludDY0X3QgaW5pdCwgdWludDMyX3QgcHJvcGVydHlfaWR4LCBib29sIGZvcmNlX2Rp cnR5KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICoqcHJvcDsKPiAtCj4gLQlpZiAoIWlu Zm8pCj4gLQkJcmV0dXJuOwo+IC0KPiAtCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0Owo+IC0KPiAt CWlmICghbmFtZSB8fCAocHJvcGVydHlfaWR4ID49IGluZm8tPnByb3BlcnR5X2NvdW50KSkgewo+ IC0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgJXNcbiIsIG5hbWUgPyBuYW1lIDog Im51bGwiKTsKPiAtCX0gZWxzZSB7Cj4gLQkJcHJvcCA9ICZpbmZvLT5wcm9wZXJ0eV9hcnJheVtw cm9wZXJ0eV9pZHhdOwo+IC0JCS8qCj4gLQkJICogUHJvcGVydGllcyBuZWVkIHRvIGJlIGF0dGFj aGVkIHRvIGVhY2ggZHJtIG9iamVjdCB0aGF0Cj4gLQkJICogdXNlcyB0aGVtLCBidXQgb25seSBu ZWVkIHRvIGJlIGNyZWF0ZWQgb25jZQo+IC0JCSAqLwo+IC0JCWlmICgqcHJvcCA9PSAwKSB7Cj4g LQkJCSpwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShpbmZvLT5kZXYsCj4gLQkJCQkJ ZmxhZ3MsIG5hbWUsIG1pbiwgbWF4KTsKPiAtCQkJaWYgKCpwcm9wID09IDApCj4gLQkJCQlEUk1f RVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBmYWlsZWRcbiIsIG5hbWUpOwo+IC0JCX0KPiAtCj4g LQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwo+IC0JCWluZm8tPnByb3BlcnR5X2Rh dGFbcHJvcGVydHlfaWR4XS5kZWZhdWx0X3ZhbHVlID0gaW5pdDsKPiAtCQlpbmZvLT5wcm9wZXJ0 eV9kYXRhW3Byb3BlcnR5X2lkeF0uZm9yY2VfZGlydHkgPSBmb3JjZV9kaXJ0eTsKPiAtCj4gLQkJ LyogYWx3YXlzIGF0dGFjaCBwcm9wZXJ0eSwgaWYgY3JlYXRlZCAqLwo+IC0JCWlmICgqcHJvcCkg ewo+IC0JCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShpbmZvLT5iYXNlLCAqcHJvcCwgaW5p dCk7Cj4gLQkJCSsraW5mby0+aW5zdGFsbF9jb3VudDsKPiAtCQl9Cj4gLQl9Cj4gLX0KPiAtCj4g LXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Uoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZv ICppbmZvLAo+IC0JCWNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgdWludDY0X3QgbWluLCB1 aW50NjRfdCBtYXgsCj4gLQkJdWludDY0X3QgaW5pdCwgdWludDMyX3QgcHJvcGVydHlfaWR4KQo+ IC17Cj4gLQlfbXNtX3Byb3BlcnR5X2luc3RhbGxfaW50ZWdlcihpbmZvLCBuYW1lLCBmbGFncywK PiAtCQkJbWluLCBtYXgsIGluaXQsIHByb3BlcnR5X2lkeCwgZmFsc2UpOwo+IC19Cj4gLQo+IC12 b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxlX3JhbmdlKHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbywKPiAtCQljb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQ2NF90 IG1pbiwgdWludDY0X3QgbWF4LAo+IC0JCXVpbnQ2NF90IGluaXQsIHVpbnQzMl90IHByb3BlcnR5 X2lkeCkKPiAtewo+IC0JX21zbV9wcm9wZXJ0eV9pbnN0YWxsX2ludGVnZXIoaW5mbywgbmFtZSwg ZmxhZ3MsCj4gLQkJCW1pbiwgbWF4LCBpbml0LCBwcm9wZXJ0eV9pZHgsIHRydWUpOwo+IC19Cj4g LQo+IC12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JvdGF0aW9uKHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbywKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgdW5zaWduZWQgaW50 IHJvdGF0aW9uLAo+IC0JCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25zLCB1aW50MzJf dCBwcm9wZXJ0eV9pZHgpCj4gLXsKPiAtCWlmICghaW5mbyB8fCAhcGxhbmUpCj4gLQkJcmV0dXJu Owo+IC0KPiAtCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0Owo+IC0KPiAtCWlmIChwcm9wZXJ0eV9p ZHggPj0gaW5mby0+cHJvcGVydHlfY291bnQpIHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQgcHJv cGVydHkgaW5kZXggJWRcbiIsIHByb3BlcnR5X2lkeCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0K PiAtCWlmIChkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KHBsYW5lLAo+IC0JCQly b3RhdGlvbiwgc3VwcG9ydGVkX3JvdGF0aW9ucykpIHsKPiAtCQlEUk1fRVJST1IoImNyZWF0ZSBy b3RhdGlvbiBwcm9wZXJ0eSBmYWlsZWRcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlp ZiAocGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5KSB7Cj4gLQkJaW5mby0+cHJvcGVydHlfYXJyYXlb cHJvcGVydHlfaWR4XSA9IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eTsKPiAtCj4gLQkJLyogc2F2 ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwo+IC0JCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVy dHlfaWR4XS5kZWZhdWx0X3ZhbHVlID0gcm90YXRpb247Cj4gLQkJaW5mby0+cHJvcGVydHlfZGF0 YVtwcm9wZXJ0eV9pZHhdLmZvcmNlX2RpcnR5ID0gZmFsc2U7Cj4gLQo+IC0JCSsraW5mby0+aW5z dGFsbF9jb3VudDsKPiAtCX0KPiAtfQo+IC0KPiAtdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF9l bnVtKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKPiAtCQljb25zdCBjaGFyICpuYW1l LCBpbnQgZmxhZ3MsIGludCBpc19iaXRtYXNrLAo+IC0JCWNvbnN0IHN0cnVjdCBkcm1fcHJvcF9l bnVtX2xpc3QgKnZhbHVlcywgaW50IG51bV92YWx1ZXMsCj4gLQkJdWludDMyX3QgcHJvcGVydHlf aWR4KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICoqcHJvcDsKPiAtCj4gLQlpZiAoIWlu Zm8pCj4gLQkJcmV0dXJuOwo+IC0KPiAtCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0Owo+IC0KPiAt CWlmICghbmFtZSB8fCAhdmFsdWVzIHx8ICFudW1fdmFsdWVzIHx8Cj4gLQkJCShwcm9wZXJ0eV9p ZHggPj0gaW5mby0+cHJvcGVydHlfY291bnQpKSB7Cj4gLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFy Z3VtZW50KHMpLCAlc1xuIiwgbmFtZSA/IG5hbWUgOiAibnVsbCIpOwo+IC0JfSBlbHNlIHsKPiAt CQlwcm9wID0gJmluZm8tPnByb3BlcnR5X2FycmF5W3Byb3BlcnR5X2lkeF07Cj4gLQkJLyoKPiAt CQkgKiBQcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYXR0YWNoZWQgdG8gZWFjaCBkcm0gb2JqZWN0IHRo YXQKPiAtCQkgKiB1c2VzIHRoZW0sIGJ1dCBvbmx5IG5lZWQgdG8gYmUgY3JlYXRlZCBvbmNlCj4g LQkJICovCj4gLQkJaWYgKCpwcm9wID09IDApIHsKPiAtCQkJLyogJ2JpdG1hc2snIGlzIGEgc3Bl Y2lhbCB0eXBlIG9mICdlbnVtJyAqLwo+IC0JCQlpZiAoaXNfYml0bWFzaykKPiAtCQkJCSpwcm9w ID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9iaXRtYXNrKGluZm8tPmRldiwKPiAtCQkJCQkJRFJNX01P REVfUFJPUF9CSVRNQVNLIHwgZmxhZ3MsCj4gLQkJCQkJCW5hbWUsIHZhbHVlcywgbnVtX3ZhbHVl cywgLTEpOwo+IC0JCQllbHNlCj4gLQkJCQkqcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfZW51 bShpbmZvLT5kZXYsCj4gLQkJCQkJCURSTV9NT0RFX1BST1BfRU5VTSB8IGZsYWdzLAo+IC0JCQkJ CQluYW1lLCB2YWx1ZXMsIG51bV92YWx1ZXMpOwo+IC0JCQlpZiAoKnByb3AgPT0gMCkKPiAtCQkJ CURSTV9FUlJPUigiY3JlYXRlICVzIHByb3BlcnR5IGZhaWxlZFxuIiwgbmFtZSk7Cj4gLQkJfQo+ IC0KPiAtCQkvKiBzYXZlIGluaXQgdmFsdWUgZm9yIGxhdGVyICovCj4gLQkJaW5mby0+cHJvcGVy dHlfZGF0YVtwcm9wZXJ0eV9pZHhdLmRlZmF1bHRfdmFsdWUgPSAwOwo+IC0JCWluZm8tPnByb3Bl cnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IGZhbHNlOwo+IC0KPiAtCQkvKiBz ZWxlY3QgZmlyc3QgZGVmaW5lZCB2YWx1ZSBmb3IgZW51bXMgKi8KPiAtCQlpZiAoIWlzX2JpdG1h c2spCj4gLQkJCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5kZWZhdWx0X3ZhbHVl ID0KPiAtCQkJCXZhbHVlcy0+dHlwZTsKPiAtCj4gLQkJLyogYWx3YXlzIGF0dGFjaCBwcm9wZXJ0 eSwgaWYgY3JlYXRlZCAqLwo+IC0JCWlmICgqcHJvcCkgewo+IC0JCQlkcm1fb2JqZWN0X2F0dGFj aF9wcm9wZXJ0eShpbmZvLT5iYXNlLCAqcHJvcCwKPiAtCQkJCQlpbmZvLT5wcm9wZXJ0eV9kYXRh Cj4gLQkJCQkJW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSk7Cj4gLQkJCSsraW5mby0+aW5z dGFsbF9jb3VudDsKPiAtCQl9Cj4gLQl9Cj4gLX0KPiAtCj4gLXZvaWQgbXNtX3Byb3BlcnR5X2lu c3RhbGxfYmxvYihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCj4gLQkJY29uc3QgY2hh ciAqbmFtZSwgaW50IGZsYWdzLCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCj4gLXsKPiAtCXN0cnVj dCBkcm1fcHJvcGVydHkgKipwcm9wOwo+IC0KPiAtCWlmICghaW5mbykKPiAtCQlyZXR1cm47Cj4g LQo+IC0JKytpbmZvLT5pbnN0YWxsX3JlcXVlc3Q7Cj4gLQo+IC0JaWYgKCFuYW1lIHx8IChwcm9w ZXJ0eV9pZHggPj0gaW5mby0+YmxvYl9jb3VudCkpIHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQg YXJndW1lbnQocyksICVzXG4iLCBuYW1lID8gbmFtZSA6ICJudWxsIik7Cj4gLQl9IGVsc2Ugewo+ IC0JCXByb3AgPSAmaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XTsKPiAtCQkvKgo+ IC0JCSAqIFByb3BlcnRpZXMgbmVlZCB0byBiZSBhdHRhY2hlZCB0byBlYWNoIGRybSBvYmplY3Qg dGhhdAo+IC0JCSAqIHVzZXMgdGhlbSwgYnV0IG9ubHkgbmVlZCB0byBiZSBjcmVhdGVkIG9uY2UK PiAtCQkgKi8KPiAtCQlpZiAoKnByb3AgPT0gMCkgewo+IC0JCQkvKiB1c2UgJ2NyZWF0ZScgZm9y IGJsb2IgcHJvcGVydHkgcGxhY2UgaG9sZGVyICovCj4gLQkJCSpwcm9wID0gZHJtX3Byb3BlcnR5 X2NyZWF0ZShpbmZvLT5kZXYsCj4gLQkJCQkJRFJNX01PREVfUFJPUF9CTE9CIHwgZmxhZ3MsIG5h bWUsIDApOwo+IC0JCQlpZiAoKnByb3AgPT0gMCkKPiAtCQkJCURSTV9FUlJPUigiY3JlYXRlICVz IHByb3BlcnR5IGZhaWxlZFxuIiwgbmFtZSk7Cj4gLQkJfQo+IC0KPiAtCQkvKiBzYXZlIGluaXQg dmFsdWUgZm9yIGxhdGVyICovCj4gLQkJaW5mby0+cHJvcGVydHlfZGF0YVtwcm9wZXJ0eV9pZHhd LmRlZmF1bHRfdmFsdWUgPSAwOwo+IC0JCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4 XS5mb3JjZV9kaXJ0eSA9IHRydWU7Cj4gLQo+IC0JCS8qIGFsd2F5cyBhdHRhY2ggcHJvcGVydHks IGlmIGNyZWF0ZWQgKi8KPiAtCQlpZiAoKnByb3ApIHsKPiAtCQkJZHJtX29iamVjdF9hdHRhY2hf cHJvcGVydHkoaW5mby0+YmFzZSwgKnByb3AsIC0xKTsKPiAtCQkJKytpbmZvLT5pbnN0YWxsX2Nv dW50Owo+IC0JCX0KPiAtCX0KPiAtfQo+IC0KPiAtaW50IG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2dl dF9zdGF0dXMoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKQo+IC17Cj4gLQlpbnQgcmMg PSAtRU5PTUVNOwo+IC0KPiAtCWlmIChpbmZvICYmIChpbmZvLT5pbnN0YWxsX3JlcXVlc3QgPT0g aW5mby0+aW5zdGFsbF9jb3VudCkpCj4gLQkJcmMgPSAwOwo+IC0KPiAtCXJldHVybiByYzsKPiAt fQo+IC0KPiAtaW50IG1zbV9wcm9wZXJ0eV9pbmRleChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g KmluZm8sCj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHkpCj4gLXsKPiAtCXVpbnQz Ml90IGNvdW50Owo+IC0JaW50MzJfdCBpZHg7Cj4gLQlpbnQgcmMgPSAtRUlOVkFMOwo+IC0KPiAt CWlmICghaW5mbyB8fCAhcHJvcGVydHkpIHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1l bnQocylcbiIpOwo+IC0JfSBlbHNlIHsKPiAtCQkvKgo+IC0JCSAqIExpbmVhciBzZWFyY2gsIGJ1 dCBzdGFydCBmcm9tIGxhc3QgZm91bmQgaW5kZXguIFRoaXMgd2lsbAo+IC0JCSAqIGhlbHAgaWYg YW55IHNpbmdsZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyBpbiBhCj4gLQkJ ICogcm93LiBJZGVhbGx5LCB3ZSBjb3VsZCBrZWVwIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHNvcnRl ZCBpbgo+IC0JCSAqIHRoZSBvcmRlciBvZiBtb3N0IHJlY2VudCBhY2Nlc3MsIGJ1dCB0aGF0IG1h eSBiZSBvdmVya2lsbAo+IC0JCSAqIGZvciBub3cuCj4gLQkJICovCj4gLQkJbXV0ZXhfbG9jaygm aW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQkJaWR4ID0gaW5mby0+cmVjZW50X2lkeDsKPiAtCQlj b3VudCA9IGluZm8tPnByb3BlcnR5X2NvdW50Owo+IC0JCXdoaWxlIChjb3VudCkgewo+IC0JCQkt LWNvdW50Owo+IC0KPiAtCQkJLyogc3RvcCBzZWFyY2hpbmcgb24gbWF0Y2ggKi8KPiAtCQkJaWYg KGluZm8tPnByb3BlcnR5X2FycmF5W2lkeF0gPT0gcHJvcGVydHkpIHsKPiAtCQkJCWluZm8tPnJl Y2VudF9pZHggPSBpZHg7Cj4gLQkJCQlyYyA9IGlkeDsKPiAtCQkJCWJyZWFrOwo+IC0JCQl9Cj4g LQo+IC0JCQkvKiBtb3ZlIHRvIG5leHQgdmFsaWQgaW5kZXggKi8KPiAtCQkJaWYgKC0taWR4IDwg MCkKPiAtCQkJCWlkeCA9IGluZm8tPnByb3BlcnR5X2NvdW50IC0gMTsKPiAtCQl9Cj4gLQkJbXV0 ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmM7 Cj4gLX0KPiAtCj4gLWludCBtc21fcHJvcGVydHlfc2V0X2RpcnR5KHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbywKPiAtCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9z dGF0ZSwKPiAtCQlpbnQgcHJvcGVydHlfaWR4KQo+IC17Cj4gLQlpZiAoIWluZm8gfHwgIXByb3Bl cnR5X3N0YXRlIHx8ICFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKSB7Cj4gLQkJRFJNX0VSUk9SKCJp bnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCW11 dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwo+IC0JX21zbV9wcm9wZXJ0eV9zZXRfZGly dHlfbm9fbG9jayhpbmZvLCBwcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHlfaWR4KTsKPiAtCW11dGV4 X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAt aW50IG1zbV9wcm9wZXJ0eV9hdG9taWNfc2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5m bywKPiAtCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKPiAtCQlz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgdmFsKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2I7Cj4gLQlpbnQgcHJvcGVydHlfaWR4LCByYyA9IC1F SU5WQUw7Cj4gLQo+IC0JcHJvcGVydHlfaWR4ID0gbXNtX3Byb3BlcnR5X2luZGV4KGluZm8sIHBy b3BlcnR5KTsKPiAtCWlmICghaW5mbyB8fCAhcHJvcGVydHlfc3RhdGUgfHwKPiAtCQkJKHByb3Bl cnR5X2lkeCA9PSAtRUlOVkFMKSB8fCAhcHJvcGVydHlfc3RhdGUtPnZhbHVlcykgewo+IC0JCURS TV9ERUJVRygiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Cj4gLQl9IGVsc2Ugewo+IC0JCS8qIGV4 dHJhIGhhbmRsaW5nIGZvciBpbmNvbWluZyBwcm9wZXJ0aWVzICovCj4gLQkJbXV0ZXhfbG9jaygm aW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQkJaWYgKChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9E RV9QUk9QX0JMT0IpICYmCj4gLQkJCShwcm9wZXJ0eV9pZHggPCBpbmZvLT5ibG9iX2NvdW50KSkg ewo+IC0JCQkvKiBEUk0gbG9va3VwIGFsc28gdGFrZXMgYSByZWZlcmVuY2UgKi8KPiAtCQkJYmxv YiA9IGRybV9wcm9wZXJ0eV9sb29rdXBfYmxvYihpbmZvLT5kZXYsCj4gLQkJCQkodWludDMyX3Qp dmFsKTsKPiAtCQkJaWYgKCFibG9iKSB7Cj4gLQkJCQlEUk1fRVJST1IoImJsb2Igbm90IGZvdW5k XG4iKTsKPiAtCQkJCXZhbCA9IDA7Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJCQlEQkcoIkJsb2IgJXUg c2F2ZWQiLCBibG9iLT5iYXNlLmlkKTsKPiAtCQkJCXZhbCA9IGJsb2ItPmJhc2UuaWQ7Cj4gLQo+ IC0JCQkJLyogc2F2ZSBibG9iIC0gbmVlZCB0byBjbGVhciBwcmV2aW91cyByZWYgKi8KPiAtCQkJ CWlmIChwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW3Byb3BlcnR5X2lkeF0uYmxvYikKPiAtCQkJCQlk cm1fcHJvcGVydHlfYmxvYl9wdXQoCj4gLQkJCQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbCj4g LQkJCQkJCXByb3BlcnR5X2lkeF0uYmxvYik7Cj4gLQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVz W3Byb3BlcnR5X2lkeF0uYmxvYiA9Cj4gLQkJCQkJYmxvYjsKPiAtCQkJfQo+IC0JCX0KPiAtCj4g LQkJLyogdXBkYXRlIHZhbHVlIGFuZCBmbGFnIGFzIGRpcnR5ICovCj4gLQkJaWYgKHByb3BlcnR5 X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS52YWx1ZSAhPSB2YWwgfHwKPiAtCQkJCWluZm8t PnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSkgewo+IC0JCQlwcm9wZXJ0 eV9zdGF0ZS0+dmFsdWVzW3Byb3BlcnR5X2lkeF0udmFsdWUgPSB2YWw7Cj4gLQkJCV9tc21fcHJv cGVydHlfc2V0X2RpcnR5X25vX2xvY2soaW5mbywgcHJvcGVydHlfc3RhdGUsCj4gLQkJCQkJcHJv cGVydHlfaWR4KTsKPiAtCj4gLQkJCURCRygiJXMgLSAlbGxkIiwgcHJvcGVydHktPm5hbWUsIHZh bCk7Cj4gLQkJfQo+IC0JCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQkJ cmMgPSAwOwo+IC0JfQo+IC0KPiAtCXJldHVybiByYzsKPiAtfQo+IC0KPiAtaW50IG1zbV9wcm9w ZXJ0eV9hdG9taWNfZ2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKPiAtCQlzdHJ1 Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKPiAtCQlzdHJ1Y3QgZHJtX3By b3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKPiAtewo+IC0JaW50IHByb3BlcnR5X2lk eCwgcmMgPSAtRUlOVkFMOwo+IC0KPiAtCXByb3BlcnR5X2lkeCA9IG1zbV9wcm9wZXJ0eV9pbmRl eChpbmZvLCBwcm9wZXJ0eSk7Cj4gLQlpZiAoIWluZm8gfHwgKHByb3BlcnR5X2lkeCA9PSAtRUlO VkFMKSB8fAo+IC0JCQkhcHJvcGVydHlfc3RhdGUtPnZhbHVlcyB8fCAhdmFsKSB7Cj4gLQkJRFJN X0RFQlVHKCJJbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKPiAtCX0gZWxzZSB7Cj4gLQkJbXV0ZXhf bG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQkJKnZhbCA9IHByb3BlcnR5X3N0YXRlLT52 YWx1ZXNbcHJvcGVydHlfaWR4XS52YWx1ZTsKPiAtCQltdXRleF91bmxvY2soJmluZm8tPnByb3Bl cnR5X2xvY2spOwo+IC0JCXJjID0gMDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAt Cj4gLXZvaWQgKm1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2lu Zm8gKmluZm8pCj4gLXsKPiAtCXZvaWQgKnN0YXRlID0gTlVMTDsKPiAtCj4gLQlpZiAoIWluZm8p IHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQgcHJvcGVydHkgaW5mb1xuIik7Cj4gLQkJcmV0dXJu IE5VTEw7Cj4gLQl9Cj4gLQo+IC0JbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4g LQlpZiAoaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSkKPiAtCQlzdGF0ZSA9IGluZm8tPnN0YXRlX2Nh Y2hlWy0tKGluZm8tPnN0YXRlX2NhY2hlX3NpemUpXTsKPiAtCW11dGV4X3VubG9jaygmaW5mby0+ cHJvcGVydHlfbG9jayk7Cj4gLQo+IC0JaWYgKCFzdGF0ZSAmJiBpbmZvLT5zdGF0ZV9zaXplKQo+ IC0JCXN0YXRlID0ga21hbGxvYyhpbmZvLT5zdGF0ZV9zaXplLCBHRlBfS0VSTkVMKTsKPiAtCj4g LQlpZiAoIXN0YXRlKQo+IC0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4i KTsKPiAtCj4gLQlyZXR1cm4gc3RhdGU7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBfbXNtX3Byb3Bl cnR5X2ZyZWVfc3RhdGUgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGZyZWVpbmcgbG9jYWwgc3RhdGUg b2JqZWN0cwo+IC0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBz dHJ1Y3QKPiAtICogQHN0OiBQb2ludGVyIHRvIHN0YXRlIG9iamVjdAo+IC0gKi8KPiAtc3RhdGlj IHZvaWQgX21zbV9wcm9wZXJ0eV9mcmVlX3N0YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAq aW5mbywgdm9pZCAqc3QpCj4gLXsKPiAtCWlmICghaW5mbyB8fCAhc3QpCj4gLQkJcmV0dXJuOwo+ IC0KPiAtCW11dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwo+IC0JaWYgKGluZm8tPnN0 YXRlX2NhY2hlX3NpemUgPCBNU01fUFJPUF9TVEFURV9DQUNIRV9TSVpFKQo+IC0JCWluZm8tPnN0 YXRlX2NhY2hlWyhpbmZvLT5zdGF0ZV9jYWNoZV9zaXplKSsrXSA9IHN0Owo+IC0JZWxzZQo+IC0J CWtmcmVlKHN0KTsKPiAtCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLX0K PiAtCj4gLXZvaWQgbXNtX3Byb3BlcnR5X3Jlc2V0X3N0YXRlKHN0cnVjdCBtc21fcHJvcGVydHlf aW5mbyAqaW5mbywgdm9pZCAqc3RhdGUsCj4gLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAq cHJvcGVydHlfc3RhdGUsCj4gLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAqcHJvcGVydHlf dmFsdWVzKQo+IC17Cj4gLQl1aW50MzJfdCBpOwo+IC0KPiAtCWlmICghaW5mbykgewo+IC0JCURS TV9FUlJPUigiaW52YWxpZCBwcm9wZXJ0eSBpbmZvXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4g LQo+IC0JaWYgKHN0YXRlKQo+IC0JCW1lbXNldChzdGF0ZSwgMCwgaW5mby0+c3RhdGVfc2l6ZSk7 Cj4gLQo+IC0JaWYgKHByb3BlcnR5X3N0YXRlKSB7Cj4gLQkJcHJvcGVydHlfc3RhdGUtPnByb3Bl cnR5X2NvdW50ID0gaW5mby0+cHJvcGVydHlfY291bnQ7Cj4gLQkJcHJvcGVydHlfc3RhdGUtPnZh bHVlcyA9IHByb3BlcnR5X3ZhbHVlczsKPiAtCQlJTklUX0xJU1RfSEVBRCgmcHJvcGVydHlfc3Rh dGUtPmRpcnR5X2xpc3QpOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBBc3NpZ24gZGVmYXVsdCBw cm9wZXJ0eSB2YWx1ZXMuIFRoaXMgaGVscGVyIGlzIG1vc3RseSB1c2VkCj4gLQkgKiB0byBpbml0 aWFsaXplIG5ld2x5IGNyZWF0ZWQgc3RhdGUgb2JqZWN0cy4KPiAtCSAqLwo+IC0JaWYgKHByb3Bl cnR5X3ZhbHVlcykKPiAtCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cHJvcGVydHlfY291bnQ7ICsr aSkgewo+IC0JCQlwcm9wZXJ0eV92YWx1ZXNbaV0udmFsdWUgPQo+IC0JCQkJaW5mby0+cHJvcGVy dHlfZGF0YVtpXS5kZWZhdWx0X3ZhbHVlOwo+IC0JCQlwcm9wZXJ0eV92YWx1ZXNbaV0uYmxvYiA9 IE5VTEw7Cj4gLQkJCUlOSVRfTElTVF9IRUFEKCZwcm9wZXJ0eV92YWx1ZXNbaV0uZGlydHlfbm9k ZSk7Cj4gLQkJfQo+IC19Cj4gLQo+IC12b2lkIG1zbV9wcm9wZXJ0eV9kdXBsaWNhdGVfc3RhdGUo c3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0JCXZvaWQgKm9sZF9zdGF0ZSwgdm9p ZCAqc3RhdGUsCj4gLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUs Cj4gLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAqcHJvcGVydHlfdmFsdWVzKQo+IC17Cj4g LQl1aW50MzJfdCBpOwo+IC0KPiAtCWlmICghaW5mbyB8fCAhb2xkX3N0YXRlIHx8ICFzdGF0ZSkg ewo+IC0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Cj4gLQkJcmV0dXJuOwo+ IC0JfQo+IC0KPiAtCW1lbWNweShzdGF0ZSwgb2xkX3N0YXRlLCBpbmZvLT5zdGF0ZV9zaXplKTsK PiAtCj4gLQlpZiAoIXByb3BlcnR5X3N0YXRlKQo+IC0JCXJldHVybjsKPiAtCj4gLQlJTklUX0xJ U1RfSEVBRCgmcHJvcGVydHlfc3RhdGUtPmRpcnR5X2xpc3QpOwo+IC0JcHJvcGVydHlfc3RhdGUt PnZhbHVlcyA9IHByb3BlcnR5X3ZhbHVlczsKPiAtCj4gLQlpZiAocHJvcGVydHlfc3RhdGUtPnZh bHVlcykKPiAtCQkvKiBhZGQgcmVmIGNvdW50IGZvciBibG9icyBhbmQgaW5pdGlhbGl6ZSBkaXJ0 eSBub2RlcyAqLwo+IC0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wcm9wZXJ0eV9jb3VudDsgKytp KSB7Cj4gLQkJCWlmIChwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJsb2IpCj4gLQkJCQlkcm1f cHJvcGVydHlfYmxvYl9nZXQoCj4gLQkJCQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbaV0uYmxv Yik7Cj4gLQkJCUlOSVRfTElTVF9IRUFEKCZwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmRpcnR5 X25vZGUpOwo+IC0JCX0KPiAtfQo+IC0KPiAtdm9pZCBtc21fcHJvcGVydHlfZGVzdHJveV9zdGF0 ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sIHZvaWQgKnN0YXRlLAo+IC0JCXN0cnVj dCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlKQo+IC17Cj4gLQl1aW50MzJfdCBp Owo+IC0KPiAtCWlmICghaW5mbyB8fCAhc3RhdGUpIHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQg YXJndW1lbnQocylcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCWlmIChwcm9wZXJ0eV9zdGF0 ZSAmJiBwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKSB7Cj4gLQkJLyogcmVtb3ZlIHJlZiBjb3VudCBm b3IgYmxvYnMgKi8KPiAtCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cHJvcGVydHlfY291bnQ7ICsr aSkKPiAtCQkJaWYgKHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbaV0uYmxvYikgewo+IC0JCQkJZHJt X3Byb3BlcnR5X2Jsb2JfcHV0KAo+IC0JCQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJs b2IpOwo+IC0JCQkJcHJvcGVydHlfc3RhdGUtPnZhbHVlc1tpXS5ibG9iID0gTlVMTDsKPiAtCQkJ fQo+IC0JfQo+IC0KPiAtCV9tc21fcHJvcGVydHlfZnJlZV9zdGF0ZShpbmZvLCBzdGF0ZSk7Cj4g LX0KPiAtCj4gLXZvaWQgKm1zbV9wcm9wZXJ0eV9nZXRfYmxvYihzdHJ1Y3QgbXNtX3Byb3BlcnR5 X2luZm8gKmluZm8sCj4gLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3Rh dGUsCj4gLQkJc2l6ZV90ICpieXRlX2xlbiwKPiAtCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCj4g LXsKPiAtCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjsKPiAtCXNpemVfdCBsZW4gPSAw Owo+IC0Jdm9pZCAqcmMgPSAwOwo+IC0KPiAtCWlmICghaW5mbyB8fCAhcHJvcGVydHlfc3RhdGUg fHwgIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMgfHwKPiAtCQkJKHByb3BlcnR5X2lkeCA+PSBpbmZv LT5ibG9iX2NvdW50KSkgewo+IC0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7 Cj4gLQl9IGVsc2Ugewo+IC0JCWJsb2IgPSBwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW3Byb3BlcnR5 X2lkeF0uYmxvYjsKPiAtCQlpZiAoYmxvYikgewo+IC0JCQlsZW4gPSBibG9iLT5sZW5ndGg7Cj4g LQkJCXJjID0gJmJsb2ItPmRhdGE7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWlmIChieXRlX2xlbikK PiAtCQkqYnl0ZV9sZW4gPSBsZW47Cj4gLQo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1pbnQg bXNtX3Byb3BlcnR5X3NldF9ibG9iKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKPiAt CQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKipibG9iX3JlZmVyZW5jZSwKPiAtCQl2b2lkICpi bG9iX2RhdGEsCj4gLQkJc2l6ZV90IGJ5dGVfbGVuLAo+IC0JCXVpbnQzMl90IHByb3BlcnR5X2lk eCkKPiAtewo+IC0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iID0gTlVMTDsKPiAtCWlu dCByYyA9IC1FSU5WQUw7Cj4gLQo+IC0JaWYgKCFpbmZvIHx8ICFibG9iX3JlZmVyZW5jZSB8fCAo cHJvcGVydHlfaWR4ID49IGluZm8tPmJsb2JfY291bnQpKSB7Cj4gLQkJRFJNX0VSUk9SKCJpbnZh bGlkIGFyZ3VtZW50KHMpXG4iKTsKPiAtCX0gZWxzZSB7Cj4gLQkJLyogY3JlYXRlIGJsb2IgKi8K PiAtCQlpZiAoYmxvYl9kYXRhICYmIGJ5dGVfbGVuKSB7Cj4gLQkJCWJsb2IgPSBkcm1fcHJvcGVy dHlfY3JlYXRlX2Jsb2IoaW5mby0+ZGV2LAo+IC0JCQkJCWJ5dGVfbGVuLAo+IC0JCQkJCWJsb2Jf ZGF0YSk7Cj4gLQkJCWlmIChJU19FUlJfT1JfTlVMTChibG9iKSkgewo+IC0JCQkJcmMgPSBQVFJf RVJSKGJsb2IpOwo+IC0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGJsb2IsICVkXG4i LCByYyk7Cj4gLQkJCQlnb3RvIGV4aXQ7Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCS8qIHVwZGF0 ZSBkcm0gb2JqZWN0ICovCj4gLQkJcmMgPSBkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1ZShp bmZvLT5iYXNlLAo+IC0JCQkJaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XSwKPiAt CQkJCWJsb2IgPyBibG9iLT5iYXNlLmlkIDogMCk7Cj4gLQkJaWYgKHJjKSB7Cj4gLQkJCURSTV9F UlJPUigiZmFpbGVkIHRvIHNldCBibG9iIHRvIHByb3BlcnR5XG4iKTsKPiAtCQkJaWYgKGJsb2Ip Cj4gLQkJCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoYmxvYik7Cj4gLQkJCWdvdG8gZXhpdDsKPiAt CQl9Cj4gLQo+IC0JCS8qIHVwZGF0ZSBsb2NhbCByZWZlcmVuY2UgKi8KPiAtCQlpZiAoKmJsb2Jf cmVmZXJlbmNlKQo+IC0JCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoKmJsb2JfcmVmZXJlbmNlKTsK PiAtCQkqYmxvYl9yZWZlcmVuY2UgPSBibG9iOwo+IC0JfQo+IC0KPiAtZXhpdDoKPiAtCXJldHVy biByYzsKPiAtfQo+IC0KPiAtaW50IG1zbV9wcm9wZXJ0eV9zZXRfcHJvcGVydHkoc3RydWN0IG1z bV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnBy b3BlcnR5X3N0YXRlLAo+IC0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCwKPiAtCQl1aW50NjRfdCB2 YWwpCj4gLXsKPiAtCWludCByYyA9IC1FSU5WQUw7Cj4gLQo+IC0JaWYgKCFpbmZvIHx8IChwcm9w ZXJ0eV9pZHggPj0gaW5mby0+cHJvcGVydHlfY291bnQpIHx8Cj4gLQkJCXByb3BlcnR5X2lkeCA8 IGluZm8tPmJsb2JfY291bnQgfHwKPiAtCQkJIXByb3BlcnR5X3N0YXRlIHx8ICFwcm9wZXJ0eV9z dGF0ZS0+dmFsdWVzKSB7Cj4gLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsK PiAtCX0gZWxzZSB7Cj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqZHJtX3Byb3A7Cj4gLQo+IC0J CW11dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwo+IC0KPiAtCQkvKiB1cGRhdGUgY2Fj aGVkIHZhbHVlICovCj4gLQkJcHJvcGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLnZh bHVlID0gdmFsOwo+IC0KPiAtCQkvKiB1cGRhdGUgdGhlIG5ldyBkZWZhdWx0IHZhbHVlIGZvciBp bW11dGFibGVzICovCj4gLQkJZHJtX3Byb3AgPSBpbmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0 eV9pZHhdOwo+IC0JCWlmIChkcm1fcHJvcC0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJM RSkKPiAtCQkJaW5mby0+cHJvcGVydHlfZGF0YVtwcm9wZXJ0eV9pZHhdLmRlZmF1bHRfdmFsdWUg PSB2YWw7Cj4gLQo+IC0JCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Cj4gLQo+ IC0JCS8qIHVwZGF0ZSBkcm0gb2JqZWN0ICovCj4gLQkJcmMgPSBkcm1fb2JqZWN0X3Byb3BlcnR5 X3NldF92YWx1ZShpbmZvLT5iYXNlLCBkcm1fcHJvcCwgdmFsKTsKPiAtCQlpZiAocmMpCj4gLQkJ CURSTV9FUlJPUigiZmFpbGVkIHNldCBwcm9wZXJ0eSB2YWx1ZSwgaWR4ICVkIHJjICVkXG4iLAo+ IC0JCQkJCXByb3BlcnR5X2lkeCwgcmMpOwo+IC0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmM7Cj4g LX0KPiAtCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3AuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3AuaAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDY3ODU5NTUuLjAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9w cm9wLmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsNDM4ICswLDAgQEAKPiAtLyogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk Lgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiAtICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gLSAq Cj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBfTVNN X1BST1BfSF8KPiAtI2RlZmluZSBfTVNNX1BST1BfSF8KPiAtCj4gLSNpbmNsdWRlIDxsaW51eC9s aXN0Lmg+Cj4gLSNpbmNsdWRlICJtc21fZHJ2LmgiCj4gLQo+IC0jZGVmaW5lIE1TTV9QUk9QX1NU QVRFX0NBQ0hFX1NJWkUJMgo+IC0KPiAtLyoqCj4gLSAqIHN0cnVjdCBtc21fcHJvcGVydHlfZGF0 YSAtIG9wYXF1ZSBzdHJ1Y3R1cmUgZm9yIHRyYWNraW5nIHBlcgo+IC0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkcm0tb2JqZWN0IHBlciBwcm9wZXJ0eSBzdHVmZgo+IC0gKiBAZGVmYXVs dF92YWx1ZTogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhpcyBkcm0gb2JqZWN0Cj4gLSAq IEBmb3JjZV9kaXJ0eTogQWx3YXlzIGRpcnR5IHByb3BlcnR5IG9uIGluY29taW5nIHNldHMsIHJh dGhlciB0aGFuIGNoZWNraW5nCj4gLSAqICAgICAgICAgICAgICAgZm9yIG1vZGlmaWVkIHZhbHVl cwo+IC0gKi8KPiAtc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhIHsKPiAtCXVpbnQ2NF90IGRlZmF1 bHRfdmFsdWU7Cj4gLQlib29sIGZvcmNlX2RpcnR5Owo+IC19Owo+IC0KPiAtLyoqCj4gLSAqIHN0 cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgLSBvcGFxdWUgc3RydWN0dXJlIGZvciB0cmFja2luZyBw ZXIKPiAtICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRybS1vYmplY3QgcGVyIHByb3Bl cnR5IHN0dWZmCj4gLSAqIEB2YWx1ZTogQ3VycmVudCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhpcyBk cm0gb2JqZWN0Cj4gLSAqIEBibG9iOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgYmxvYiBkYXRhLCBp ZiBhdmFpbGFibGUKPiAtICogQGRpcnR5X25vZGU6IExpbmtlZCBsaXN0IG5vZGUgdG8gdHJhY2sg aWYgcHJvcGVydHkgaXMgZGlydHkgb3Igbm90Cj4gLSAqLwo+IC1zdHJ1Y3QgbXNtX3Byb3BlcnR5 X3ZhbHVlIHsKPiAtCXVpbnQ2NF90IHZhbHVlOwo+IC0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICpibG9iOwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9ub2RlOwo+IC19Owo+IC0KPiAtLyoq Cj4gLSAqIHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbzogU3RydWN0dXJlIGZvciBwcm9wZXJ0eS9z dGF0ZSBoZWxwZXIgZnVuY3Rpb25zCj4gLSAqIEBiYXNlOiBQb2ludGVyIHRvIGJhc2UgZHJtIG9i amVjdCAocGxhbmUvY3J0Yy9ldGMuKQo+IC0gKiBAZGV2OiBQb2ludGVyIHRvIGRybSBkZXZpY2Ug b2JqZWN0Cj4gLSAqIEBwcm9wZXJ0eV9hcnJheTogUG9pbnRlciB0byBhcnJheSBmb3Igc3Rvcmlu ZyBjcmVhdGVkIHByb3BlcnR5IG9iamVjdHMKPiAtICogQHByb3BlcnR5X2RhdGE6IFBvaW50ZXIg dG8gYXJyYXkgZm9yIHN0b3JpbmcgcHJpdmF0ZSBwcm9wZXJ0eSBkYXRhCj4gLSAqIEBwcm9wZXJ0 eV9jb3VudDogVG90YWwgbnVtYmVyIG9mIHByb3BlcnRpZXMKPiAtICogQGJsb2JfY291bnQ6IFRv dGFsIG51bWJlciBvZiBibG9iIHByb3BlcnRpZXMsIHNob3VsZCBiZSA8PSBjb3VudAo+IC0gKiBA aW5zdGFsbF9yZXF1ZXN0OiBUb3RhbCBudW1iZXIgb2YgcHJvcGVydHkgJ2luc3RhbGwnIHJlcXVl c3RzCj4gLSAqIEBpbnN0YWxsX2NvdW50OiBUb3RhbCBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCAnaW5z dGFsbCcgcmVxdWVzdHMKPiAtICogQHJlY2VudF9pZHg6IEluZGV4IG9mIHByb3BlcnR5IG1vc3Qg cmVjZW50bHkgYWNjZXNzZWQgYnkgc2V0L2dldAo+IC0gKiBAaXNfYWN0aXZlOiBXaGV0aGVyIG9y IG5vdCBkcm0gY29tcG9uZW50IHByb3BlcnRpZXMgYXJlICdhY3RpdmUnCj4gLSAqIEBzdGF0ZV9j YWNoZTogQ2FjaGUgb2YgbG9jYWwgc3RhdGVzLCB0byBwcmV2ZW50IGFsbG9jL2ZyZWUgdGhyYXNo aW5nCj4gLSAqIEBzdGF0ZV9zaXplOiBTaXplIG9mIGxvY2FsIHN0YXRlIHN0cnVjdHVyZXMKPiAt ICogQHN0YXRlX2NhY2hlX3NpemU6IE51bWJlciBvZiBzdGF0ZSBzdHJ1Y3R1cmVzIGN1cnJlbnRs eSBzdG9yZWQgaW4gc3RhdGVfY2FjaGUKPiAtICogQHByb3BlcnR5X2xvY2s6IE11dGV4IHRvIHBy b3RlY3QgbG9jYWwgdmFyaWFibGVzCj4gLSAqLwo+IC1zdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g ewo+IC0Jc3RydWN0IGRybV9tb2RlX29iamVjdCAqYmFzZTsKPiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXY7Cj4gLQo+IC0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3BlcnR5X2FycmF5Owo+IC0J c3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhICpwcm9wZXJ0eV9kYXRhOwo+IC0JdWludDMyX3QgcHJv cGVydHlfY291bnQ7Cj4gLQl1aW50MzJfdCBibG9iX2NvdW50Owo+IC0JdWludDMyX3QgaW5zdGFs bF9yZXF1ZXN0Owo+IC0JdWludDMyX3QgaW5zdGFsbF9jb3VudDsKPiAtCj4gLQlpbnQzMl90IHJl Y2VudF9pZHg7Cj4gLQo+IC0JYm9vbCBpc19hY3RpdmU7Cj4gLQo+IC0Jdm9pZCAqc3RhdGVfY2Fj aGVbTVNNX1BST1BfU1RBVEVfQ0FDSEVfU0laRV07Cj4gLQl1aW50MzJfdCBzdGF0ZV9zaXplOwo+ IC0JaW50MzJfdCBzdGF0ZV9jYWNoZV9zaXplOwo+IC0Jc3RydWN0IG11dGV4IHByb3BlcnR5X2xv Y2s7Cj4gLX07Cj4gLQo+IC0vKioKPiAtICogc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAtIFN0 cnVjdHVyZSBmb3IgbG9jYWwgcHJvcGVydHkgc3RhdGUgaW5mb3JtYXRpb24KPiAtICogQHByb3Bl cnR5X2NvdW50OiBUb3RhbCBudW1iZXIgb2YgcHJvcGVydGllcwo+IC0gKiBAdmFsdWVzOiBQb2lu dGVyIHRvIGFycmF5IG9mIG1zbV9wcm9wZXJ0eV92YWx1ZSBvYmplY3RzCj4gLSAqIEBkaXJ0eV9s aXN0OiBMaXN0IG9mIGFsbCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuICdhdG9taWNfc2V0JyBi dXQgbm90Cj4gLSAqICAgICAgICAgICAgICB5ZXQgY2xlYXJlZCB3aXRoICdtc21fcHJvcGVydHlf cG9wX2RpcnR5Jwo+IC0gKi8KPiAtc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSB7Cj4gLQl1aW50 MzJfdCBwcm9wZXJ0eV9jb3VudDsKPiAtCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgKnZhbHVl czsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgZGlydHlfbGlzdDsKPiAtfTsKPiAtCj4gLS8qKgo+IC0g KiBtc21fcHJvcGVydHlfaW5kZXhfdG9fZHJtX3Byb3BlcnR5IC0gZ2V0IGRybSBwcm9wZXJ0eSBz dHJ1Y3QgZnJvbSBwcm9wIGluZGV4Cj4gLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGlu Zm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAo+ IC0gKiBSZXR1cm5zOiBkcm1fcHJvcGVydHkgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggcHJvcGVy dHkgaW5kZXgKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUKPiAtc3RydWN0IGRybV9wcm9wZXJ0eSAq bXNtX3Byb3BlcnR5X2luZGV4X3RvX2RybV9wcm9wZXJ0eSgKPiAtCQlzdHJ1Y3QgbXNtX3Byb3Bl cnR5X2luZm8gKmluZm8sIHVpbnQzMl90IHByb3BlcnR5X2lkeCkKPiAtewo+IC0JaWYgKCFpbmZv IHx8IHByb3BlcnR5X2lkeCA+PSBpbmZvLT5wcm9wZXJ0eV9jb3VudCkKPiAtCQlyZXR1cm4gTlVM TDsKPiAtCj4gLQlyZXR1cm4gaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XTsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIG1zbV9wcm9wZXJ0eV9nZXRfZGVmYXVsdCAtIHF1ZXJ5IGRlZmF1 bHQgdmFsdWUgb2YgYSBwcm9wZXJ0eQo+IC0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBp bmZvIGNvbnRhaW5lciBzdHJ1Y3QKPiAtICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgK PiAtICogUmV0dXJuczogRGVmYXVsdCB2YWx1ZSBmb3Igc3BlY2lmaWVkIHByb3BlcnR5Cj4gLSAq Lwo+IC1zdGF0aWMgaW5saW5lCj4gLXVpbnQ2NF90IG1zbV9wcm9wZXJ0eV9nZXRfZGVmYXVsdChz dHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCj4gLQkJdWludDMyX3QgcHJvcGVydHlfaWR4 KQo+IC17Cj4gLQl1aW50NjRfdCByYyA9IDA7Cj4gLQo+IC0JaWYgKCFpbmZvKQo+IC0JCXJldHVy biAwOwo+IC0KPiAtCW11dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwo+IC0JaWYgKHBy b3BlcnR5X2lkeCA8IGluZm8tPnByb3BlcnR5X2NvdW50KQo+IC0JCXJjID0gaW5mby0+cHJvcGVy dHlfZGF0YVtwcm9wZXJ0eV9pZHhdLmRlZmF1bHRfdmFsdWU7Cj4gLQltdXRleF91bmxvY2soJmlu Zm8tPnByb3BlcnR5X2xvY2spOwo+IC0KPiAtCXJldHVybiByYzsKPiAtfQo+IC0KPiAtLyoqCj4g LSAqIG1zbV9wcm9wZXJ0eV9zZXRfaXNfYWN0aXZlIC0gc2V0IG92ZXJhbGwgJ2FjdGl2ZScgc3Rh dHVzIGZvciBhbGwgcHJvcGVydGllcwo+IC0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBp bmZvIGNvbnRhaW5lciBzdHJ1Y3QKPiAtICogQGlzX2FjdGl2ZTogTmV3ICdpcyBhY3RpdmUnIHN0 YXR1cwo+IC0gKi8KPiAtc3RhdGljIGlubGluZQo+IC12b2lkIG1zbV9wcm9wZXJ0eV9zZXRfaXNf YWN0aXZlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywgYm9vbCBpc19hY3RpdmUpCj4g LXsKPiAtCWlmIChpbmZvKSB7Cj4gLQkJbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7 Cj4gLQkJaW5mby0+aXNfYWN0aXZlID0gaXNfYWN0aXZlOwo+IC0JCW11dGV4X3VubG9jaygmaW5m by0+cHJvcGVydHlfbG9jayk7Cj4gLQl9Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBtc21fcHJvcGVy dHlfZ2V0X2lzX2FjdGl2ZSAtIHF1ZXJ5IHByb3BlcnR5ICdpcyBhY3RpdmUnIHN0YXR1cwo+IC0g KiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKPiAtICog UmV0dXJuczogQ3VycmVudCAnaXMgYWN0aXZlJ3Mgc3RhdHVzCj4gLSAqLwo+IC1zdGF0aWMgaW5s aW5lCj4gLWJvb2wgbXNtX3Byb3BlcnR5X2dldF9pc19hY3RpdmUoc3RydWN0IG1zbV9wcm9wZXJ0 eV9pbmZvICppbmZvKQo+IC17Cj4gLQlib29sIHJjID0gZmFsc2U7Cj4gLQo+IC0JaWYgKGluZm8p IHsKPiAtCQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKPiAtCQlyYyA9IGluZm8t PmlzX2FjdGl2ZTsKPiAtCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwo+IC0J fQo+IC0KPiAtCXJldHVybiByYzsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIG1zbV9wcm9wZXJ0eV9w b3BfZGlydHkgLSBkZXRlcm1pbmUgbmV4dCBkaXJ0eSBwcm9wZXJ0eSBhbmQgY2xlYXIKPiAtICog ICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyBkaXJ0eSBmbGFnCj4gLSAqIEBpbmZvOiBQb2lu dGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAcHJvcGVydHlfc3Rh dGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3RhdGUgY29udGFpbmVyIHN0cnVjdAo+IC0gKiBSZXR1 cm5zOiBWYWxpZCBtc20gcHJvcGVydHkgaW5kZXggb24gc3VjY2VzcywKPiAtICogICAgICAgICAg LUVBR0FJTiBpZiBubyBkaXJ0eSBwcm9wZXJ0aWVzIGFyZSBhdmFpbGFibGUKPiAtICogICAgICAg ICAgUHJvcGVydHkgaW5kaWNpZXMgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIGFyZSBzaW1p bGFyCj4gLSAqICAgICAgICAgIHRvIHRob3NlIHJldHVybmVkIGJ5IHRoZSBtc21fcHJvcGVydHlf aW5kZXggZnVuY3Rpb24uCj4gLSAqLwo+IC1pbnQgbXNtX3Byb3BlcnR5X3BvcF9kaXJ0eShzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCj4gLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0 ZSAqcHJvcGVydHlfc3RhdGUpOwo+IC0KPiAtLyoqCj4gLSAqIG1zbV9wcm9wZXJ0eV9pbml0IC0g aW5pdGlhbGl6ZSBwcm9wZXJ0eSBpbmZvIHN0cnVjdHVyZQo+IC0gKiBAaW5mbzogUG9pbnRlciB0 byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKPiAtICogQGJhc2U6IFBvaW50ZXIgdG8g YmFzZSBkcm0gb2JqZWN0IChwbGFuZS9jcnRjL2V0Yy4pCj4gLSAqIEBkZXY6IFBvaW50ZXIgdG8g ZHJtIGRldmljZSBvYmplY3QKPiAtICogQHByb3BlcnR5X2FycmF5OiBQb2ludGVyIHRvIGFycmF5 IGZvciBzdG9yaW5nIGNyZWF0ZWQgcHJvcGVydHkgb2JqZWN0cwo+IC0gKiBAcHJvcGVydHlfZGF0 YTogUG9pbnRlciB0byBhcnJheSBmb3Igc3RvcmluZyBwcml2YXRlIHByb3BlcnR5IGRhdGEKPiAt ICogQHByb3BlcnR5X2NvdW50OiBUb3RhbCBudW1iZXIgb2YgcHJvcGVydGllcwo+IC0gKiBAYmxv Yl9jb3VudDogVG90YWwgbnVtYmVyIG9mIGJsb2IgcHJvcGVydGllcywgc2hvdWxkIGJlIDw9IGNv dW50Cj4gLSAqIEBzdGF0ZV9zaXplOiBTaXplIG9mIGxvY2FsIHN0YXRlIG9iamVjdAo+IC0gKi8K PiAtdm9pZCBtc21fcHJvcGVydHlfaW5pdChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8s Cj4gLQkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqYmFzZSwKPiAtCQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+IC0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKipwcm9wZXJ0eV9hcnJheSwKPiAtCQlz dHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgKnByb3BlcnR5X2RhdGEsCj4gLQkJdWludDMyX3QgcHJv cGVydHlfY291bnQsCj4gLQkJdWludDMyX3QgYmxvYl9jb3VudCwKPiAtCQl1aW50MzJfdCBzdGF0 ZV9zaXplKTsKPiAtCj4gLS8qKgo+IC0gKiBtc21fcHJvcGVydHlfZGVzdHJveSAtIGRlc3Ryb3kg aGVscGVyIGluZm8gc3RydWN0dXJlCj4gLSAqCj4gLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3Bl cnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKi8KPiAtdm9pZCBtc21fcHJvcGVydHlfZGVz dHJveShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8pOwo+IC0KPiAtLyoqCj4gLSAqIG1z bV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlIC0gaW5zdGFsbCBzdGFuZGFyZCBkcm0gcmFuZ2UgcHJv cGVydHkKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3Ry dWN0Cj4gLSAqIEBuYW1lOiBQcm9wZXJ0eSBuYW1lCj4gLSAqIEBmbGFnczogT3RoZXIgcHJvcGVy dHkgdHlwZSBmbGFncywgZS5nLiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRQo+IC0gKiBAbWluOiBN aW4gcHJvcGVydHkgdmFsdWUKPiAtICogQG1heDogTWF4IHByb3BlcnR5IHZhbHVlCj4gLSAqIEBp bml0OiBEZWZhdWx0IFByb3BlcnR5IHZhbHVlCj4gLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5 IGluZGV4Cj4gLSAqLwo+IC12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKHN0cnVjdCBt c21fcHJvcGVydHlfaW5mbyAqaW5mbywKPiAtCQljb25zdCBjaGFyICpuYW1lLAo+IC0JCWludCBm bGFncywKPiAtCQl1aW50NjRfdCBtaW4sCj4gLQkJdWludDY0X3QgbWF4LAo+IC0JCXVpbnQ2NF90 IGluaXQsCj4gLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KTsKPiAtCj4gLS8qKgo+IC0gKiBtc21f cHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSAtIGluc3RhbGwgZHJtIHJhbmdlIHByb3Bl cnR5Cj4gLSAqCVRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBtc21fcHJvcGVydHlfaW5zdGFs bF9yYW5nZSwgYnV0IGFzc3VtZXMKPiAtICoJdGhhdCB0aGUgcHJvcGVydHkgaXMgbWVhbnQgZm9y IGhvbGRpbmcgdXNlciBwb2ludGVycyBvciBkZXNjcmlwdG9ycwo+IC0gKgl0aGF0IG1heSByZWZl cmVuY2Ugdm9sYXRpbGUgZGF0YSB3aXRob3V0IGhhdmluZyBhbiB1cGRhdGVkIHZhbHVlLgo+IC0g KiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKPiAtICog QG5hbWU6IFByb3BlcnR5IG5hbWUKPiAtICogQGZsYWdzOiBPdGhlciBwcm9wZXJ0eSB0eXBlIGZs YWdzLCBlLmcuIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFCj4gLSAqIEBtaW46IE1pbiBwcm9wZXJ0 eSB2YWx1ZQo+IC0gKiBAbWF4OiBNYXggcHJvcGVydHkgdmFsdWUKPiAtICogQGluaXQ6IERlZmF1 bHQgUHJvcGVydHkgdmFsdWUKPiAtICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKPiAt ICovCj4gLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfdm9sYXRpbGVfcmFuZ2Uoc3RydWN0IG1z bV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0JCWNvbnN0IGNoYXIgKm5hbWUsCj4gLQkJaW50IGZs YWdzLAo+IC0JCXVpbnQ2NF90IG1pbiwKPiAtCQl1aW50NjRfdCBtYXgsCj4gLQkJdWludDY0X3Qg aW5pdCwKPiAtCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwo+IC0KPiAtLyoqCj4gLSAqIG1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JvdGF0aW9uIC0gaW5zdGFsbCBzdGFuZGFyZCBkcm0gcm90YXRpb24g cHJvcGVydHkKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIg c3RydWN0Cj4gLSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm1fcGxhbmUgd2hpY2ggdGhpcyBwcm9w ZXJ0eSBpcyBpbnN0YWxsZWQgb24KPiAtICogQHJvdGF0aW9uOiBUaGUgZGVmYXVsdCB2YWx1ZSBm b3IgdGhpcyBuZXcgcHJvcGVydHkKPiAtICogQHN1cHBvcnRlZF9yb3RhdGlvbnM6IEJpdG1hc2sg b2Ygc3VwcG9ydGVkIHJvdGF0aW9uIHZhbHVlcyAoc2VlCj4gLSAqICAgICAgICAgICAgICAgICAg ICAgICBkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5IGZvciBtb3JlIGRldGFpbHMp Cj4gLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Cj4gLSAqLwo+IC12b2lkIG1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JvdGF0aW9uKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywK PiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQl1bnNpZ25lZCBpbnQgcm90YXRpb24s Cj4gLQkJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnMsCj4gLQkJdWludDMyX3QgcHJv cGVydHlfaWR4KTsKPiAtCj4gLS8qKgo+IC0gKiBtc21fcHJvcGVydHlfaW5zdGFsbF9lbnVtIC0g aW5zdGFsbCBzdGFuZGFyZCBkcm0gZW51bS9iaXRtYXNrIHByb3BlcnR5Cj4gLSAqIEBpbmZvOiBQ b2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAbmFtZTogUHJv cGVydHkgbmFtZQo+IC0gKiBAZmxhZ3M6IE90aGVyIHByb3BlcnR5IHR5cGUgZmxhZ3MsIGUuZy4g RFJNX01PREVfUFJPUF9JTU1VVEFCTEUKPiAtICogQGlzX2JpdG1hc2s6IFNldCB0byBub24temVy byB0byBjcmVhdGUgYSBiaXRtYXNrIHByb3BlcnR5LCByYXRoZXIgdGhhbiBhbgo+IC0gKiAgICAg ICAgICAgICAgZW51bWVyYXRpb24gb25lCj4gLSAqIEB2YWx1ZXM6IEFycmF5IG9mIGFsbG93YWJs ZSBlbnVtZXJhdGlvbi9iaXRtYXNrIHZhbHVlcwo+IC0gKiBAbnVtX3ZhbHVlczogU2l6ZSBvZiB2 YWx1ZXMgYXJyYXkKPiAtICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKPiAtICovCj4g LXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g KmluZm8sCj4gLQkJY29uc3QgY2hhciAqbmFtZSwKPiAtCQlpbnQgZmxhZ3MsCj4gLQkJaW50IGlz X2JpdG1hc2ssCj4gLQkJY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCAqdmFsdWVzLAo+ IC0JCWludCBudW1fdmFsdWVzLAo+IC0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Cj4gLQo+IC0v KioKPiAtICogbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYiAtIGluc3RhbGwgc3RhbmRhcmQgZHJt IGJsb2IgcHJvcGVydHkKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250 YWluZXIgc3RydWN0Cj4gLSAqIEBuYW1lOiBQcm9wZXJ0eSBuYW1lCj4gLSAqIEBmbGFnczogRXh0 cmEgZmxhZ3MgZm9yIHByb3BlcnR5IGNyZWF0aW9uCj4gLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3Bl cnR5IGluZGV4Cj4gLSAqLwo+IC12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Ioc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0JCWNvbnN0IGNoYXIgKm5hbWUsCj4gLQkJaW50 IGZsYWdzLAo+IC0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Cj4gLQo+IC0vKioKPiAtICogbXNt X3Byb3BlcnR5X2luc3RhbGxfZ2V0X3N0YXR1cyAtIHF1ZXJ5IG92ZXJhbCBzdGF0dXMgb2YgcHJv cGVydHkgYWRkaXRpb25zCj4gLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29u dGFpbmVyIHN0cnVjdAo+IC0gKiBSZXR1cm5zOiBaZXJvIGlmIHByZXZpb3VzIHByb3BlcnR5IGlu c3RhbGwgY2FsbHMgd2VyZSBhbGwgc3VjY2Vzc2Z1bAo+IC0gKi8KPiAtaW50IG1zbV9wcm9wZXJ0 eV9pbnN0YWxsX2dldF9zdGF0dXMoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKTsKPiAt Cj4gLS8qKgo+IC0gKiBtc21fcHJvcGVydHlfaW5kZXggLSBkZXRlcm1pbmUgcHJvcGVydHkgaW5k ZXggZnJvbSBkcm1fcHJvcGVydHkgcHRyCj4gLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5 IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAcHJvcGVydHk6IEluY29taW5nIHByb3BlcnR5 IHBvaW50ZXIKPiAtICogUmV0dXJuczogVmFsaWQgcHJvcGVydHkgaW5kZXgsIG9yIC1FSU5WQUwg b24gZXJyb3IKPiAtICovCj4gLWludCBtc21fcHJvcGVydHlfaW5kZXgoc3RydWN0IG1zbV9wcm9w ZXJ0eV9pbmZvICppbmZvLAo+IC0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5KTsKPiAt Cj4gLS8qKgo+IC0gKiBtc21fcHJvcGVydHlfc2V0X2RpcnR5IC0gZm9yY2libHkgZmxhZyBhIHBy b3BlcnR5IGFzIGRpcnR5Cj4gLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29u dGFpbmVyIHN0cnVjdAo+IC0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkg c3RhdGUgY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRl eAo+IC0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKPiAtICovCj4gLWludCBtc21fcHJvcGVy dHlfc2V0X2RpcnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKPiAtCQlzdHJ1Y3Qg bXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKPiAtCQlpbnQgcHJvcGVydHlfaWR4 KTsKPiAtCj4gLS8qKgo+IC0gKiBtc21fcHJvcGVydHlfYXRvbWljX3NldCAtIGhlbHBlciBmdW5j dGlvbiBmb3IgYXRvbWljIHByb3BlcnR5IHNldCBjYWxsYmFjawo+IC0gKiBAaW5mbzogUG9pbnRl ciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKPiAtICogQHByb3BlcnR5X3N0YXRl OiBQb2ludGVyIHRvIGxvY2FsIHN0YXRlIHN0cnVjdHVyZQo+IC0gKiBAcHJvcGVydHk6IEluY29t aW5nIHByb3BlcnR5IHBvaW50ZXIKPiAtICogQHZhbDogSW5jb21pbmcgcHJvcGVydHkgdmFsdWUK PiAtICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCj4gLSAqLwo+IC1pbnQgbXNtX3Byb3BlcnR5 X2F0b21pY19zZXQoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0JCXN0cnVjdCBt c21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlLAo+IC0JCXN0cnVjdCBkcm1fcHJvcGVy dHkgKnByb3BlcnR5LAo+IC0JCXVpbnQ2NF90IHZhbCk7Cj4gLQo+IC0vKioKPiAtICogbXNtX3By b3BlcnR5X2F0b21pY19nZXQgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGF0b21pYyBwcm9wZXJ0eSBn ZXQgY2FsbGJhY2sKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWlu ZXIgc3RydWN0Cj4gLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBsb2NhbCBzdGF0ZSBz dHJ1Y3R1cmUKPiAtICogQHByb3BlcnR5OiBJbmNvbWluZyBwcm9wZXJ0eSBwb2ludGVyCj4gLSAq IEB2YWw6IFBvaW50ZXIgdG8gdmFyaWFibGUgZm9yIHJlY2VpdmluZyBwcm9wZXJ0eSB2YWx1ZQo+ IC0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKPiAtICovCj4gLWludCBtc21fcHJvcGVydHlf YXRvbWljX2dldChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCj4gLQkJc3RydWN0IG1z bV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0 eSAqcHJvcGVydHksCj4gLQkJdWludDY0X3QgKnZhbCk7Cj4gLQo+IC0vKioKPiAtICogbXNtX3By b3BlcnR5X2FsbG9jX3N0YXRlIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBhbGxvY2F0aW5nIGxvY2Fs IHN0YXRlIG9iamVjdHMKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250 YWluZXIgc3RydWN0Cj4gLSAqLwo+IC12b2lkICptc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUoc3Ry dWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKTsKPiAtCj4gLS8qKgo+IC0gKiBtc21fcHJvcGVy dHlfcmVzZXRfc3RhdGUgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIHN0YXRlIHJlc2V0IGNhbGxiYWNr Cj4gLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+ IC0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gbG9jYWwgc3RhdGUgc3RydWN0dXJlCj4gLSAqIEBwcm9w ZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Cj4g LSAqIEBwcm9wZXJ0eV92YWx1ZXM6IFBvaW50ZXIgdG8gcHJvcGVydHkgdmFsdWVzIGNhY2hlIGFy cmF5Cj4gLSAqLwo+IC12b2lkIG1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZShzdHJ1Y3QgbXNtX3By b3BlcnR5X2luZm8gKmluZm8sIHZvaWQgKnN0YXRlLAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlf c3RhdGUgKnByb3BlcnR5X3N0YXRlLAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgKnBy b3BlcnR5X3ZhbHVlcyk7Cj4gLQo+IC0vKioKPiAtICogbXNtX3Byb3BlcnR5X2R1cGxpY2F0ZV9z dGF0ZSAtIGhlbHBlciBmdW5jdGlvbiBmb3IgZHVwbGljYXRlIHN0YXRlIGNiCj4gLSAqIEBpbmZv OiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAb2xkX3N0 YXRlOiBQb2ludGVyIHRvIG9yaWdpbmFsIHN0YXRlIHN0cnVjdHVyZQo+IC0gKiBAc3RhdGU6IFBv aW50ZXIgdG8gbmV3bHkgY3JlYXRlZCBzdGF0ZSBzdHJ1Y3R1cmUKPiAtICogQHByb3BlcnR5X3N0 YXRlOiBQb2ludGVyIHRvIGRlc3RpbmF0aW9uIHByb3BlcnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1 Y3QKPiAtICogQHByb3BlcnR5X3ZhbHVlczogUG9pbnRlciB0byBwcm9wZXJ0eSB2YWx1ZXMgY2Fj aGUgYXJyYXkKPiAtICovCj4gLXZvaWQgbXNtX3Byb3BlcnR5X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCj4gLQkJdm9pZCAqb2xkX3N0YXRlLAo+IC0JCXZv aWQgKnN0YXRlLAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRl LAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgKnByb3BlcnR5X3ZhbHVlcyk7Cj4gLQo+ IC0vKioKPiAtICogbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUgLSBoZWxwZXIgZnVuY3Rpb24g Zm9yIGRlc3Ryb3kgc3RhdGUgY2IKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5m byBjb250YWluZXIgc3RydWN0Cj4gLSAqIEBzdGF0ZTogUG9pbnRlciB0byBsb2NhbCBzdGF0ZSBz dHJ1Y3R1cmUKPiAtICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3BlcnR5IHN0YXRl IGNvbnRhaW5lciBzdHJ1Y3QKPiAtICovCj4gLXZvaWQgbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3Rh dGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAo+IC0JCXZvaWQgKnN0YXRlLAo+IC0J CXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlKTsKPiAtCj4gLS8qKgo+ IC0gKiBtc21fcHJvcGVydHlfZ2V0X2Jsb2IgLSBvYnRhaW4gY2FjaGVkIGRhdGEgcG9pbnRlciBm b3IgZHJtIGJsb2IgcHJvcGVydHkKPiAtICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5m byBjb250YWluZXIgc3RydWN0Cj4gLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBwcm9w ZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Cj4gLSAqIEBieXRlX2xlbjogT3B0aW9uYWwgcG9p bnRlciB0byB2YXJpYWJsZSBmb3IgYWNjZXB0aW5nIGJsb2Igc2l6ZQo+IC0gKiBAcHJvcGVydHlf aWR4OiBQcm9wZXJ0eSBpbmRleAo+IC0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGJsb2IgZGF0YQo+ IC0gKi8KPiAtdm9pZCAqbXNtX3Byb3BlcnR5X2dldF9ibG9iKHN0cnVjdCBtc21fcHJvcGVydHlf aW5mbyAqaW5mbywKPiAtCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0 ZSwKPiAtCQlzaXplX3QgKmJ5dGVfbGVuLAo+IC0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Cj4g LQo+IC0vKioKPiAtICogbXNtX3Byb3BlcnR5X3NldF9ibG9iIC0gdXBkYXRlIGJsb2IgcHJvcGVy dHkgb24gYSBkcm0gb2JqZWN0Cj4gLSAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYmxvYiBw cm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZHJtIG9iamVjdC4gSXRzCj4gLSAqIGludGVuZGVk IHVzZSBpcyB0byB1cGRhdGUgYmxvYiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQg d2l0aCB0aGUKPiAtICogRFJNX01PREVfUFJPUF9JTU1VVEFCTEUgZmxhZyBzZXQuCj4gLSAqIEBp bmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAYmxv Yl9yZWZlcmVuY2U6IFJlZmVyZW5jZSB0byBhIHBvaW50ZXIgdGhhdCBob2xkcyB0aGUgY3JlYXRl ZCBkYXRhIGJsb2IKPiAtICogQGJsb2JfZGF0YTogUG9pbnRlciB0byBibG9iIGRhdGEKPiAtICog QGJ5dGVfbGVuOiBMZW5ndGggb2YgYmxvYiBkYXRhLCBpbiBieXRlcwo+IC0gKiBAcHJvcGVydHlf aWR4OiBQcm9wZXJ0eSBpbmRleAo+IC0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKPiAtICov Cj4gLWludCBtc21fcHJvcGVydHlfc2V0X2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICpp bmZvLAo+IC0JCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqKmJsb2JfcmVmZXJlbmNlLAo+IC0J CXZvaWQgKmJsb2JfZGF0YSwKPiAtCQlzaXplX3QgYnl0ZV9sZW4sCj4gLQkJdWludDMyX3QgcHJv cGVydHlfaWR4KTsKPiAtCj4gLS8qKgo+IC0gKiBtc21fcHJvcGVydHlfc2V0X3Byb3BlcnR5IC0g dXBkYXRlIHByb3BlcnR5IG9uIGEgZHJtIG9iamVjdAo+IC0gKiBUaGlzIGZ1bmN0aW9uIHVwZGF0 ZXMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBkcm0gb2JqZWN0LiBJdHMKPiAtICog aW50ZW5kZWQgdXNlIGlzIHRvIHVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0 ZWQgd2l0aCB0aGUKPiAtICogRFJNX01PREVfUFJPUF9JTU1VVEFCTEUgZmxhZyBzZXQuCj4gLSAq IE5vdGU6IFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBvbiBhIGJsb2IuCj4gLSAqIEBp bmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAo+IC0gKiBAcHJv cGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3RhdGUgY29udGFpbmVyIHN0cnVjdAo+ IC0gKiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAo+IC0gKiBAdmFsOiB2YWx1ZSBvZiB0 aGUgcHJvcGVydHkgdG8gc2V0Cj4gLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vzcwo+IC0gKi8K PiAtaW50IG1zbV9wcm9wZXJ0eV9zZXRfcHJvcGVydHkoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZv ICppbmZvLAo+IC0JCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlLAo+ IC0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCwKPiAtCQl1aW50NjRfdCB2YWwpOwo+IC0KPiAtI2Vu ZGlmIC8qIF9NU01fUFJPUF9IXyAqLwo+IC0KPiAtLSAKPiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlv biBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAo+IGEg TGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKPiAKCi0tIApTZWFuIFBhdWws IFNvZnR3YXJlIEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK