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 7273B890AA for ; Tue, 23 Apr 2019 13:04:50 +0000 (UTC) From: Simon Ser Date: Tue, 23 Apr 2019 16:04:52 +0300 Message-Id: <20190423130459.31594-2-simon.ser@intel.com> In-Reply-To: <20190423130459.31594-1-simon.ser@intel.com> References: <20190423130459.31594-1-simon.ser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v7 1/8] tests/kms_chamelium: add dp-audio test 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: igt-dev@lists.freedesktop.org List-ID: VGhpcyBuZXcgdGVzdCBlbnN1cmVzIERpc3BsYXlQb3J0IGF1ZGlvIHdvcmtzIGJ5IHVzaW5nIHRo ZSBDaGFtZWxpdW0uCgpJdCBlbmFibGVzIHRoZSBEaXNwbGF5UG9ydCBvdXRwdXQgYW5kIHNlbmRz IGFuIGF1ZGlvIHNpZ25hbCBjb250YWluaW5nIGEgc2V0IG9mCmZyZXF1ZW5jaWVzIHdlIGNob29z ZSB0byBhbGwgSERNSS9EaXNwbGF5UG9ydCBhdWRpbyBkZXZpY2VzLiBJdCBzdGFydHMKcmVjb3Jk aW5nIGF1ZGlvIG9uIHRoZSBDaGFtZWxpdW0gZGV2aWNlIGFuZCB1c2VzIHRoZSBzdHJlYW0gc2Vy dmVyIHRvIHJldHJpZXZlCmNhcHR1cmVkIGF1ZGlvIHBhZ2VzLiBJdCB0aGVuIGNoZWNrcyB0aGF0 IHRoZSBjYXB0dXJlIGF1ZGlvIHNpZ25hbCBjb250YWlucyB0aGUKZnJlcXVlbmNpZXMgd2Ugc2Vu dCwgYW5kIG9ubHkgdGhvc2UsIGJ5IGNvbXB1dGluZyBhIEZGVC4KCkEgbmV3IGxpYnJhcnkgaGFz IGJlZW4gYWRkZWQgdG8gbGliaWd0IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHN0cmVhbSBzZXJ2 ZXIuCkl0IGltcGxlbWVudHMgYSBzaW1wbGUgY3VzdG9tIFRDUCBwcm90b2NvbC4KCkluIGNhc2Ug dGhlIHRlc3QgZmFpbHMsIGEgV0FWIGZpbGUgd2l0aCB0aGUgY2FwdHVyZWQgZGF0YSBpcyBzYXZl ZCBvbiBkaXNrLgoKUmlnaHQgbm93IHRoZSB0ZXN0IGhhcyBhIGZldyBsaW1pdGF0aW9uczoKCi0g T25seSB0aGUgZmlyc3QgY2hhbm5lbCBpcyBjaGVja2VkCi0gSUdUIG9ubHkgZ2VuZXJhdGVzIGF1 ZGlvIHdpdGggYSBzaW5nbGUgc2FtcGxpbmcgcmF0ZSAoNDggS0h6KQotIEF1ZGlvIGRhdGEgaXMg bm90IGNhcHR1cmVkIGluIHJlYWwtdGltZQoKVGhlc2UgbGltaXRhdGlvbnMgd2lsbCBiZSBsaWZ0 ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCgpQdWxzZUF1ZGlvIG11c3Qgbm90IHJ1biBkdXJpbmcgdGhl IHRlc3RzIHNpbmNlIEFMU0EgaXMgdXNlZCBkaXJlY3RseS4gVG8gZW5zdXJlCnRoaXMsIGVkaXQg L2V0Yy9wdWxzZS9jbGllbnQuY29uZiBhbmQgYWRkIGBhdXRvc3Bhd249bm9gLiBUaGVuIHJ1bgpg cHVsc2VhdWRpbyAtLWtpbGxgLgoKVGhpcyBjb21taXQgZGVsZXRlcyB0aGUgZXhpc3RpbmcgYXVk aW8gdGVzdHMuIFRoZXkgd2VyZW4ndCBydW4gYW5kIHJlcXVpcmVkIGFuCmV4b3RpYyBjb25maWd1 cmF0aW9uIChIRE1JIGF1ZGlvIHNwbGl0dGVyLCBkdW1teSBIRE1JIHNpbmsgYW5kIGEgbGluZS1p biBwb3J0Cm9uIHRoZSBEVVQpLgoKVGhpcyBwYXRjaCBhbHNvIGNoYW5nZXMgbGliL2lndF9hdWRp byB0byB1c2UgdWludDE2X3QgaW5zdGVhZCBvZiBzaG9ydC4gVGhlCnJhdGlvbmFsZSBpczoKCi0g VGhlIHN0YW5kYXJkIHNheXMgYSBzaG9ydCBpcyBhdCBsZWFzdCAxNiBiaXQgd2lkZSwgYnV0IGEg c2hvcnQgY2FuIGJlCiAgbGFyZ2VyIChpbiBwcmFjdGljZSBpdCB3b24ndCBoYXBwZW4sIGJ1dCBi ZXR0ZXIgdXNlIHR5cGVzIGNvcnJlY3RseSkKLSBJdCBtYWtlcyBpdCBjbGVhcmVyIHRoYXQgdGhl IGF1ZGlvIGZvcm1hdCBpcyBTMTZfTEUsIHNpbmNlICIxNiIgaXMKICBpbiB0aGUgdHlwZSBuYW1l LgoKVGhpcyBwYXRjaCBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcgQ2hhbWVsZW9uIGJ1Z3M6Cgot IGh0dHBzOi8vY3JidWcuY29tLzk0ODA2MAotIGh0dHBzOi8vY3JidWcuY29tLzk1MDg1NwoKU2ln bmVkLW9mZi1ieTogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgotLS0KIGRvY3MvYXVk aW8udHh0ICAgICAgICAgICAgIHwgIDQ1IC0tLQogZG9jcy9jaGFtZWxpdW0udHh0ICAgICAgICAg fCAgMzQgKystCiBsaWIvaWd0LmggICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWIvaWd0X2Fs c2EuYyAgICAgICAgICAgICB8ICA0MiArKy0KIGxpYi9pZ3RfYWxzYS5oICAgICAgICAgICAgIHwg ICAxICsKIGxpYi9pZ3RfYXVkaW8uYyAgICAgICAgICAgIHwgMzEzICsrKysrKysrKysrKysrLS0t LS0tCiBsaWIvaWd0X2F1ZGlvLmggICAgICAgICAgICB8ICAxMiArLQogbGliL2lndF9hdXguYyAg ICAgICAgICAgICAgfCAgMzEgKysKIGxpYi9pZ3RfYXV4LmggICAgICAgICAgICAgIHwgICAxICsK IGxpYi9pZ3RfY2hhbWVsaXVtLmMgICAgICAgIHwgMTAxICsrKysrKysKIGxpYi9pZ3RfY2hhbWVs aXVtLmggICAgICAgIHwgIDExICsKIGxpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jIHwgNTg5ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3RfY2hhbWVsaXVtX3N0 cmVhbS5oIHwgIDUyICsrKysKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICA1ICstCiBt ZXNvbi5idWlsZCAgICAgICAgICAgICAgICB8ICA1MiArKy0tCiBtZXNvbl9vcHRpb25zLnR4dCAg ICAgICAgICB8ICAgNiAtCiB0ZXN0cy9hdWRpby5jICAgICAgICAgICAgICB8IDE5MyAtLS0tLS0t LS0tLS0KIHRlc3RzL2ttc19jaGFtZWxpdW0uYyAgICAgIHwgMjc2ICsrKysrKysrKysrKysrKyst CiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgOSArLQogMTkgZmlsZXMgY2hhbmdlZCwg MTM4MiBpbnNlcnRpb25zKCspLCAzOTIgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg ZG9jcy9hdWRpby50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2NoYW1lbGl1bV9zdHJl YW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgdGVzdHMvYXVkaW8uYwoKZGlmZiAtLWdpdCBhL2RvY3MvYXVkaW8udHh0 IGIvZG9jcy9hdWRpby50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OGFkNWQx Li4wMDAwMDAwMAotLS0gYS9kb2NzL2F1ZGlvLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICsw LDAgQEAKLUF1ZGlvIFN1cHBvcnQgaW4gSUdUCi09PT09PT09PT09PT09PT09PT09PQotCi1UaGlz IGRvY3VtZW50IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFuZCBpbnN0cnVjdGlvbnMgYWJvdXQgYXVk aW8gc3VwcG9ydCBpbiBJR1QuCi0KLUludHJvZHVjdGlvbgotLS0tLS0tLS0tLS0tCi0KLVRoZSBh dWRpbyB0ZXN0IGlzIGFpbWVkIGF0IHRlc3RpbmcgdGhlIGF1ZGlvIGZlYXR1cmVzIG9mIGRpc3Bs YXkgY29ubmVjdG9ycywKLXN1Y2ggYXMgSERNSS4KLQotVGVzdCBzZXR1cAotLS0tLS0tLS0tLQot Ci1UaGUgc2V0dXAgcmVxdWlyZWQgZm9yIHRoZSBhdWRpbyB0ZXN0IGNvbnNpc3RzIG9mIHVzaW5n IGFuIEhETUktVkdBIGFkYXB0ZXIgd2l0aAotYW4gYXVkaW8tb3V0IDMuNSBtbSBqYWNrIHRvIGV4 dHJhY3QgdGhlIGF1ZGlvIGZyb20gdGhlIEhETUkgaW50ZXJmYWNlLgotVGhlIGF1ZGlvLW91dCBq YWNrIGlzIGNvbm5lY3RlZCBiYWNrIHRvIHRoZSBkZXZpY2UtdW5kZXItdGVzdCdzIGxpbmUtaW4u Ci0KLURlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3Igb2YgdGhlIGFkYXB0ZXIsIGl0IG1heSBiZSBu ZWNlc3NhcnkgdG8gY29ubmVjdCBhCi1naG9zdCBWR0EgZG9uZ2xlIHRvIGl0IChpbiBvcmRlciB0 byBlbXVsYXRlIGEgY29ubmVjdGVkIGRpc3BsYXkpIHRvIGVuYWJsZSB0aGUKLWF1ZGlvIG91dHB1 dC4gVGhlcmUgYXJlIGd1aWRlcyBhdmFpbGFibGUgZGV0YWlsaW5nIGhvdyB0byBidWlsZCB0aGVz ZS4KLQotV2hlbiBleGVjdXRlZCwgdGhlIHRlc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbmQgdGhl IHRlc3QgYXVkaW8gc2lnbmFsIHRvIGFsbAotQUxTQSBhdWRpbyBIRE1JIG91dHB1dHMgYW5kIHJl Y29yZCBmcm9tIHRoZSBzdGFuZGFyZCBBTFNBIGNhcHR1cmUgZGV2aWNlLgotCi1Db25maWd1cmF0 aW9uCi0tLS0tLS0tLS0tLS0tCi0KLUluIG9yZGVyIHRvIGRlcGxveSB0aGUgdGVzdCwgQUxTQSBj b250cm9scyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQgdG8gc2V0IHRoZQotQUxTQSBjYXB0dXJlIHNv dXJjZSB0byBsaW5lLWluLiBPbiBJbnRlbCB4ODYgc3lzdGVtcywgdGhpcyBjYW4gYmUgYWNoaWV2 ZWQKLXdpdGggdGhlIGZvbGxvd2luZyBjYWxscyB0byB0aGUgYW1peGVyIHV0aWxpdHk6Ci0jIGFt aXhlciBzc2V0IExpbmUgMzEgb24KLSMgYW1peGVyIHNzZXQgIklucHV0IFNvdXJjZSIgTGluZQot Ci1JdCBpcyB0aGVuIHVzZWZ1bCB0byBzdG9yZSB0aGUgQUxTQSBzdGF0ZSBwZXJtYW5lbnRseSB3 aXRoIHRoZSBhbHNhY3RsIHV0aWxpdHk6Ci0jIGFsc2FjdGwgc3RvcmUKLQotVGhlc2Ugc2V0dGlu Z3MgY2FuIGJlIHJlc3RvcmVkIHdpdGggdGhlIGFsc2FjdGwgdXRpbGl0eToKLSMgYWxzYWN0bCBy ZXN0b3JlCi0KLUl0IGlzIGRlc2lyYWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgYWxzYS1yZXN0b3Jl IGFuZCBhbHNhLXN0YXRlIHN5c3RlbWQgc2VydmljZXMKLWFyZSBlbmFibGVkIHRvIGRvIHRoaXMg am9iIGF1dG9tYXRpY2FsbHksIGVzcGVjaWFsbHkgaW4gdGhlIGNhc2Ugb2YgYW4KLWF1dG9tYXRl ZCB0ZXN0aW5nIHN5c3RlbToKLSMgc3lzdGVtY3RsIGVuYWJsZSBhbHNhLXJlc3RvcmUKLSMgc3lz dGVtY3RsIGVuYWJsZSBhbHNhLXN0YXRlCmRpZmYgLS1naXQgYS9kb2NzL2NoYW1lbGl1bS50eHQg Yi9kb2NzL2NoYW1lbGl1bS50eHQKaW5kZXggMGNhYmNkYzYuLjVjYzg1ZDZlIDEwMDY0NAotLS0g YS9kb2NzL2NoYW1lbGl1bS50eHQKKysrIGIvZG9jcy9jaGFtZWxpdW0udHh0CkBAIC0xMzksNiAr MTM5LDIzIEBAICQgbWFrZSByZW1vdGUtaW5zdGFsbCBDSEFNRUxFT05fSE9TVD0xOTIuMTY4Ljcy LjEKIAogVGhlIHByb2Nlc3MgcmVxdWlyZXMgdGhlIENoYW1lbGl1bSB0byBiZSBjb25uZWN0ZWQg dG8gdGhlIEludGVybmV0IHRvIHN1Y2NlZWQuCiAKK0F1ZGlvIENhcHR1cmUKKy0tLS0tLS0tLS0t LS0KKworVGhlIENoYW1lbGl1bSBzdXBwb3J0cyBhdWRpbyBjYXB0dXJlLiBJR1QgdGVzdHMgdGFr ZSBhZHZhbnRhZ2Ugb2YgdGhlCitDaGFtZWxpdW0gc3RyZWFtaW5nIHNlcnZlciB0byBkb3dubG9h ZCBhdWRpbyBzYW1wbGVzIGZyb20gdGhlIENoYW1lbGl1bS4KKworSUdUIG5lZWRzIGRpcmVjdCBh Y2Nlc3MgdG8gYXVkaW8gZGV2aWNlcyB0aHJvdWdoIEFMU0EsIHNvIFB1bHNlQXVkaW8gbmVlZHMg dG8KK2JlIHN0b3BwZWQgKG90aGVyd2lzZSBhdWRpbyB0ZXN0cyB3aWxsIGF1dG9tYXRpY2FsbHkg Z2V0IHNraXBwZWQpLiBUbyBtYWtlIHN1cmUKK1B1bHNlQXVkaW8gaXNuJ3QgcnVubmluZzoKKwor LSBFZGl0IC9ldGMvcHVsc2UvY2xpZW50LmNvbmYgYW5kIGFkZCBhdXRvc3Bhd249bm8KKy0gUnVu IGBwdWxzZWF1ZGlvIC0ta2lsbGAgKGlmIGl0IHN1Y2NlZWRzLCBpdCBtZWFucyBQdWxzZUF1ZGlv IHdhcyBydW5uaW5nKQorLSBNYWtlIHN1cmUgYSBERSB0aGF0IGF1dG9tYXRpY2FsbHkgc3Bhd25z IFB1bHNlQXVkaW8gaXNuJ3QgcnVubmluZworCitJbiBjYXNlIGEgdGVzdCBmYWlscywgdGhlIHJh dyBjYXB0dXJlZCBhdWRpbyBmaWxlcyB3aWxsIGJlIGR1bXBlZCBpbiBhIFdBVgorZmlsZS4KKwog Q29udHJpYnV0aW5nIENoYW5nZXMgdG8gdGhlIERhZW1vbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogCkBAIC0xNDYsMTAgKzE2MywxMSBAQCBDb250cmlidXRpb25zIHRvIHRo ZSBDaGFtZWxpdW0gZGFlbW9uLCBqdXN0IGxpa2UgYW55IGNvbnRyaWJ1dGlvbiB0byBDaHJvbWl1 bU9TLAogYXJlIHN1Ym1pdHRlZCBhbmQgcmV2aWV3ZWQgYXQ6IGh0dHBzOi8vY2hyb21pdW0tcmV2 aWV3Lmdvb2dsZXNvdXJjZS5jb20vCiAKIFRoZSBDaHJvbWl1bU9TIHByb2plY3QgcHJvdmlkZXMg YW4gZXh0ZW5zaXZlIGRldmVsb3BlciBndWlkZToKLWh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9j aHJvbWl1bS1vcy9kZXZlbG9wZXItZ3VpZGUgdGhhdCBhc3N1bWVzIHJ1bm5pbmcgd2l0aGluCi10 aGUgQ2hyb21pdW1PUyBidWlsZCBzeXN0ZW0uIFNpbmNlIHRoaXMgaXMgbGlrZWx5IG5vdCB0aGUg Y2FzZSBmb3IgY29udHJpYnV0aW5nCi10byB0aGUgQ2hhbWVsaXVtIGRhZW1vbiwgb25seSB0aGUg cGFydCBhYm91dCB1cGxvYWRpbmcgY2hhbmdlcyBpcyByZWxldmFudDoKLWh0dHBzOi8vd3d3LmNo cm9taXVtLm9yZy9jaHJvbWl1bS1vcy9kZXZlbG9wZXItZ3VpZGUjVE9DLVVwbG9hZC15b3VyLWNo YW5nZXMtYW5kLWdldC1hLWNvZGUtcmV2aWV3CitodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJj ZS5jb20vY2hyb21pdW1vcy9kb2NzLysvbWFzdGVyL2RldmVsb3Blcl9ndWlkZS5tZAorSXQgYXNz dW1lcyBydW5uaW5nIHdpdGhpbiB0aGUgQ2hyb21pdW1PUyBidWlsZCBzeXN0ZW0uIFNpbmNlIHRo aXMgaXMgbGlrZWx5IG5vdAordGhlIGNhc2UgZm9yIGNvbnRyaWJ1dGluZyB0byB0aGUgQ2hhbWVs aXVtIGRhZW1vbiwgb25seSB0aGUgcGFydCBhYm91dAordXBsb2FkaW5nIGNoYW5nZXMgaXMgcmVs ZXZhbnQ6CitodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW1vcy9kb2Nz LysvbWFzdGVyL2RldmVsb3Blcl9ndWlkZS5tZCNVcGxvYWQteW91ci1jaGFuZ2VzLWFuZC1nZXQt YS1jb2RlLXJldmlldwogCiBNb3N0IG9mIHRoZSBwcm9jZXNzIGlzIGFib3V0IHVzaW5nIHRoZSBH ZXJyaXQgd2ViIGludGVyZmFjZSBmb3Igc3VibWl0dGluZyBhbmQKIGhhdmluZyB0aGUgY2hhbmdl IHJldmlld2VkIGFuZCBub3QgZm9yZ2V0dGluZyB0aGUgQ2hhbmdlLUlkLCBURVNUPSBhbmQgQlVH PQpAQCAtMTYyLDcgKzE4MCw3IEBAIFN1cHBvcnQgZm9yIHRoZSBDaGFtZWxpdW0gcGxhdGZvcm0g aW4gSUdUIGlzIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgcGxhY2VzOgogKiBsaWIvaWd0X2NoYW1l bGl1bS5jOiBsaWJyYXJ5IHdpdGggQ2hhbWVsaXVtLXJlbGF0ZWQgaGVscGVycwogKiB0ZXN0cy9r bXNfY2hhbWVsaXVtLmM6IHN1Yi10ZXN0cyB1c2luZyB0aGUgQ2hhbWVsaXVtCiAKLUFzIG9mIGxh dGUgQXVndXN0IDIwMTcsIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZCBieSBJR1Q6 CitBcyBvZiBlYXJseSBBcHJpbCAyMDE5LCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0 ZWQgYnkgSUdUOgogKiBQaXhlbC1ieS1waXhlbCBmcmFtZSBpbnRlZ3JpdHkgdGVzdHMgZm9yIERQ IGFuZCBIRE1JCiAqIEVycm9yLXRyZW5kLWJhc2VkIGZyYW1lIGludGVncml0eSB0ZXN0cyBmb3Ig VkdBCiAqIENSQy1iYXNlZCBmcmFtZSBpbnRlZ3JpdHkgdGVzdHMgZm9yIERQIGFuZCBIRE1JCkBA IC0xNzMsNiArMTkxLDcgQEAgQXMgb2YgbGF0ZSBBdWd1c3QgMjAxNywgdGhlIGZvbGxvd2luZyBm ZWF0dXJlcyBhcmUgdGVzdGVkIGJ5IElHVDoKICAgZWFjaCBpbnRlcmZhY2Ugb3IgY29tYmluZWQK ICogRURJRCBkaXNwbGF5IGlkZW50aWZpZXIgaW50ZWdyaXR5IGNoZWNrIGZvciBhbGwgaW50ZXJm YWNlcwogKiBFRElEIGRpc3BsYXkgaWRlbnRpZmllciBjaGFuZ2UgZHVyaW5nIHN1c3BlbmQgZm9y IGFsbCBpbnRlcmZhY2VzCisqIEF1ZGlvIEZvdXJpZXItYmFzZWQgdGVzdHMgZm9yIERQIGF0IDQ4 S0h6CiAKIEZ1dHVyZSBEZXZlbG9wbWVudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MCw3 ICsxOTksMTAgQEAgRnV0dXJlIERldmVsb3BtZW50cwogV2l0aCB0aGUgY3VycmVudCBnZW5lcmF0 aW9uIG9mIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSwgc3VwcG9ydCBmb3IgdGVzdGluZyBhCiBudW1i ZXIgb2YgYWRkaXRpb25hbCBkaXNwbGF5IGZlYXR1cmVzIGNvdWxkIGJlIGluY2x1ZGVkIGFzIGZ1 dHVyZSBkZXZlbG9wbWVudHMsCiBpbmNsdWRpbmc6Ci0qIEF1ZGlvIGNhcHR1cmUgZnJvbSBIRE1J IGFuZCBEUAorKiBBdWRpbyBjYXB0dXJlIGZyb20gSERNSQorKiBDaGVjayBhbGwgY2hhbm5lbHMg YXJlIGluZGVwZW5kZW50IGZyb20gZWFjaCBvdGhlcgorKiBQbGF5YmFjayB1c2luZyBtb3JlIHRo YW4gMiBjaGFubmVscywgZGlmZmVyZW50IHNhbXBsaW5nIHJhdGVzIGFuZCBkaWZmZXJlbnQKKyAg c2FtcGxlIHNpemVzCiAqIEhpZ2gtYmFuZHdpZHRoIERpZ2l0YWwgQ29udGVudCBQcm90ZWN0aW9u IChIRENQKSBzdHJlYW1pbmcgdG8gdGhlIGRpc3BsYXkKICogUmVtb3RlIGNvbnRyb2wgZm9yd2Fy ZGluZyAoQ0VDKSBzZW50IGZyb20gdGhlIGRpc3BsYXkKICogWVVWIGNvbG9yc3BhY2UgZm9yIEhE TUksIGluc3RlYWQgb2YgUkdCCmRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKaW5k ZXggNjY1NGE2NTkuLjU4NTJkNTU3IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGliL2ln dC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiaWd0X3N0YXRzLmgiCiAjaWZkZWYgSEFW RV9DSEFNRUxJVU0KICNpbmNsdWRlICJpZ3RfY2hhbWVsaXVtLmgiCisjaW5jbHVkZSAiaWd0X2No YW1lbGl1bV9zdHJlYW0uaCIKICNlbmRpZgogI2luY2x1ZGUgImluc3Rkb25lLmgiCiAjaW5jbHVk ZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYWxzYS5jIGIvbGli L2lndF9hbHNhLmMKaW5kZXggYmI2NjgyY2MuLjIyMDg5ODgxIDEwMDY0NAotLS0gYS9saWIvaWd0 X2Fsc2EuYworKysgYi9saWIvaWd0X2Fsc2EuYwpAQCAtMjYsOSArMjYsMTEgQEAKIAogI2luY2x1 ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8YWxzYS9hc291 bmRsaWIuaD4KIAogI2luY2x1ZGUgImlndF9hbHNhLmgiCisjaW5jbHVkZSAiaWd0X2F1eC5oIgog I2luY2x1ZGUgImlndF9jb3JlLmgiCiAKICNkZWZpbmUgSEFORExFU19NQVgJOApAQCAtNjEsNiAr NjMsMjYgQEAgc3RydWN0IGFsc2EgewogCWludCBpbnB1dF9zYW1wbGVzX3RyaWdnZXI7CiB9Owog CisvKioKKyAqIGFsc2FfaGFzX2V4Y2x1c2l2ZV9hY2Nlc3M6CisgKiBDaGVjayB3aGV0aGVyIEFM U0EgaGFzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYXVkaW8gZGV2aWNlcy4gRmFpbHMgaWYKKyAqIFB1 bHNlQXVkaW8gaXMgcnVubmluZy4KKyAqLworYm9vbCBhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNz KHZvaWQpCit7CisJaWYgKGlndF9pc19wcm9jZXNzX3J1bm5pbmcoInB1bHNlYXVkaW8iKSkgewor CQlpZ3Rfd2FybigiYWxzYSBkb2Vzbid0IGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byBhdWRpbyBk ZXZpY2VzXG4iKTsKKwkJaWd0X3dhcm4oIkl0IHNlZW1zIHRoYXQgUHVsc2VBdWRpbyBpcyBydW5u aW5nLiBBdWRpbyB0ZXN0cyAiCisJCQkgIm5lZWQgZGlyZWN0IGFjY2VzcyB0byBhdWRpbyBkZXZp Y2VzLCBzbyBQdWxzZUF1ZGlvICIKKwkJCSAibmVlZHMgdG8gYmUgc3RvcHBlZC4gWW91IGNhbiBk byBzbyBieSBydW5uaW5nICIKKwkJCSAiYHB1bHNlYXVkaW8gLS1raWxsYC4gQWxzbyBtYWtlIHN1 cmUgdG8gYWRkICIKKwkJCSAiYXV0b3NwYXduPW5vIHRvIC9ldGMvcHVsc2UvY2xpZW50LmNvbmZc biIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB2 b2lkIGFsc2FfZXJyb3JfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3Qg Y2hhciAqZnVuY3Rpb24sCiAJCQkgICAgICAgaW50IGVyciwgY29uc3QgY2hhciAqZm10LCAuLi4p CiB7CkBAIC03OCw2ICsxMDAsMTAgQEAgc3RydWN0IGFsc2EgKmFsc2FfaW5pdCh2b2lkKQogewog CXN0cnVjdCBhbHNhICphbHNhOwogCisJaWYgKCFhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzKCkp IHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJYWxzYSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGFs c2EpKTsKIAltZW1zZXQoYWxzYSwgMCwgc2l6ZW9mKHN0cnVjdCBhbHNhKSk7CiAKQEAgLTU1Mywx NiArNTc5LDIwIEBAIGludCBhbHNhX3J1bihzdHJ1Y3QgYWxzYSAqYWxzYSwgaW50IGR1cmF0aW9u X21zKQogCQkJCQlpZiAocmV0IDwgMCkgewogCQkJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhh bmRsZSwKIAkJCQkJCQkJICAgICAgcmV0LCAwKTsKLQkJCQkJCWlmIChyZXQgPCAwKQorCQkJCQkJ aWYgKHJldCA8IDApIHsKKwkJCQkJCQlpZ3RfZGVidWcoInNuZF9wY21fcmVjb3ZlciBhZnRlciBz bmRfcGNtX3dyaXRlaSBmYWlsZWQiKTsKIAkJCQkJCQlnb3RvIGNvbXBsZXRlOworCQkJCQkJfQog CQkJCQl9CiAKIAkJCQkJb3V0cHV0X2NvdW50c1tpXSArPSByZXQ7CiAJCQkJfSBlbHNlIGlmIChv dXRwdXRfY291bnRzW2ldIDwgb3V0cHV0X3RyaWdnZXIgJiYKIAkJCQkJICAgcmV0IDwgMCkgewog CQkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFuZGxlLCByZXQsIDApOwotCQkJCQlpZiAocmV0 IDwgMCkKKwkJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJCWlndF9kZWJ1Zygic25kX3BjbV9yZWNv dmVyIGZhaWxlZCIpOwogCQkJCQkJZ290byBjb21wbGV0ZTsKKwkJCQkJfQogCQkJCX0KIAkJCX0K IApAQCAtNjA5LDE2ICs2MzksMjAgQEAgaW50IGFsc2FfcnVuKHN0cnVjdCBhbHNhICphbHNhLCBp bnQgZHVyYXRpb25fbXMpCiAJCQkJCXJldCA9IDA7CiAJCQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7 CiAJCQkJCXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5kbGUsIHJldCwgMCk7Ci0JCQkJCWlmIChy ZXQgPCAwKQorCQkJCQlpZiAocmV0IDwgMCkgeworCQkJCQkJaWd0X2RlYnVnKCJzbmRfcGNtX3Jl Y292ZXIgYWZ0ZXIgc25kX3BjbV9yZWFkaSBmYWlsZWQiKTsKIAkJCQkJCWdvdG8gY29tcGxldGU7 CisJCQkJCX0KIAkJCQl9CiAKIAkJCQlpbnB1dF9jb3VudCArPSByZXQ7CiAJCQkJaW5wdXRfdG90 YWwgKz0gcmV0OwogCQkJfSBlbHNlIGlmIChpbnB1dF9jb3VudCA8IGlucHV0X3RyaWdnZXIgJiYg cmV0IDwgMCkgewogCQkJCXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5kbGUsIHJldCwgMCk7Ci0J CQkJaWYgKHJldCA8IDApCisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJaWd0X2RlYnVnKCJzbmRf cGNtX3JlY292ZXIgZmFpbGVkIik7CiAJCQkJCWdvdG8gY29tcGxldGU7CisJCQkJfQogCQkJfQog CQl9CiAJfSB3aGlsZSAoIXJlYWNoZWQpOwpkaWZmIC0tZ2l0IGEvbGliL2lndF9hbHNhLmggYi9s aWIvaWd0X2Fsc2EuaAppbmRleCA1MDc5NTEzMC4uNWM4MDRiNDYgMTAwNjQ0Ci0tLSBhL2xpYi9p Z3RfYWxzYS5oCisrKyBiL2xpYi9pZ3RfYWxzYS5oCkBAIC0zMyw2ICszMyw3IEBACiAKIHN0cnVj dCBhbHNhOwogCitib29sIGFsc2FfaGFzX2V4Y2x1c2l2ZV9hY2Nlc3Modm9pZCk7CiBzdHJ1Y3Qg YWxzYSAqYWxzYV9pbml0KHZvaWQpOwogaW50IGFsc2Ffb3Blbl9vdXRwdXQoc3RydWN0IGFsc2Eg KmFsc2EsIGNvbnN0IGNoYXIgKmRldmljZV9uYW1lKTsKIGludCBhbHNhX29wZW5faW5wdXQoc3Ry dWN0IGFsc2EgKmFsc2EsIGNvbnN0IGNoYXIgKmRldmljZV9uYW1lKTsKZGlmZiAtLWdpdCBhL2xp Yi9pZ3RfYXVkaW8uYyBiL2xpYi9pZ3RfYXVkaW8uYwppbmRleCBhMDU5MmQ1My4uNzYyNGY1NjUg MTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfYXVkaW8uYworKysgYi9saWIvaWd0X2F1ZGlvLmMKQEAgLTI2 LDggKzI2LDExIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgPG1hdGguaD4K KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z3NsL2dz bF9mZnRfcmVhbC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KIAog I2luY2x1ZGUgImlndF9hdWRpby5oIgogI2luY2x1ZGUgImlndF9jb3JlLmgiCkBAIC0xMjgsNyAr MTMxLDcgQEAgaW50IGF1ZGlvX3NpZ25hbF9hZGRfZnJlcXVlbmN5KHN0cnVjdCBhdWRpb19zaWdu YWwgKnNpZ25hbCwgaW50IGZyZXF1ZW5jeSkKICAqLwogdm9pZCBhdWRpb19zaWduYWxfc3ludGhl c2l6ZShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwpCiB7Ci0Jc2hvcnQgKnBlcmlvZDsKKwlp bnQxNl90ICpwZXJpb2Q7CiAJZG91YmxlIHZhbHVlOwogCWludCBmcmFtZXM7CiAJaW50IGZyZXE7 CkBAIC0xNDUsOSArMTQ4LDkgQEAgdm9pZCBhdWRpb19zaWduYWxfc3ludGhlc2l6ZShzdHJ1Y3Qg YXVkaW9fc2lnbmFsICpzaWduYWwpCiAKIAkJZm9yIChqID0gMDsgaiA8IGZyYW1lczsgaisrKSB7 CiAJCQl2YWx1ZSA9IDIuMCAqIE1fUEkgKiBmcmVxIC8gc2lnbmFsLT5zYW1wbGluZ19yYXRlICog ajsKLQkJCXZhbHVlID0gc2luKHZhbHVlKSAqIFNIUlRfTUFYIC8gc2lnbmFsLT5mcmVxc19jb3Vu dDsKKwkJCXZhbHVlID0gc2luKHZhbHVlKSAqIElOVDE2X01BWCAvIHNpZ25hbC0+ZnJlcXNfY291 bnQ7CiAKLQkJCXBlcmlvZFtqXSA9IChzaG9ydCkgdmFsdWU7CisJCQlwZXJpb2Rbal0gPSAoaW50 MTZfdCkgdmFsdWU7CiAJCX0KIAogCQlzaWduYWwtPmZyZXFzW2ldLnBlcmlvZCA9IHBlcmlvZDsK QEAgLTE4NiwxNyArMTg5LDE2IEBAIHZvaWQgYXVkaW9fc2lnbmFsX2NsZWFuKHN0cnVjdCBhdWRp b19zaWduYWwgKnNpZ25hbCkKICAqIHNpZ25hbCBkYXRhIChpbiBpbnRlcmxlYXZlZCBTMTZfTEUg Zm9ybWF0KSwgYXQgdGhlIHJlcXVlc3RlZCBzYW1wbGluZyByYXRlCiAgKiBhbmQgbnVtYmVyIG9m IGNoYW5uZWxzLgogICovCi12b2lkIGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWdu YWwgKnNpZ25hbCwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcykKK3ZvaWQgYXVkaW9fc2lnbmFs X2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQxNl90ICpidWZmZXIsIGludCBm cmFtZXMpCiB7Ci0Jc2hvcnQgKmRlc3RpbmF0aW9uOwotCXNob3J0ICpzb3VyY2U7CisJaW50MTZf dCAqZGVzdGluYXRpb24sICpzb3VyY2U7CiAJaW50IHRvdGFsOwogCWludCBmcmVxX2ZyYW1lczsK IAlpbnQgZnJlcV9vZmZzZXQ7CiAJaW50IGNvdW50OwogCWludCBpLCBqLCBrOwogCi0JbWVtc2V0 KGJ1ZmZlciwgMCwgc2l6ZW9mKHNob3J0KSAqIHNpZ25hbC0+Y2hhbm5lbHMgKiBmcmFtZXMpOwor CW1lbXNldChidWZmZXIsIDAsIHNpemVvZihpbnQxNl90KSAqIHNpZ25hbC0+Y2hhbm5lbHMgKiBm cmFtZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykgewog CQl0b3RhbCA9IDA7CkBAIC0yMjksOTcgKzIzMSwyMzYgQEAgdm9pZCBhdWRpb19zaWduYWxfZmls bChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMp CiB9CiAKIC8qKgotICogYXVkaW9fc2lnbmFsX2RldGVjdDoKLSAqIEBzaWduYWw6IFRoZSB0YXJn ZXQgc2lnbmFsIHN0cnVjdHVyZQotICogQGNoYW5uZWxzOiBUaGUgaW5wdXQgZGF0YSdzIG51bWJl ciBvZiBjaGFubmVscwotICogQHNhbXBsaW5nX3JhdGU6IFRoZSBpbnB1dCBkYXRhJ3Mgc2FtcGxp bmcgcmF0ZQotICogQGJ1ZmZlcjogVGhlIGlucHV0IGRhdGEncyBidWZmZXIKLSAqIEBmcmFtZXM6 IFRoZSBpbnB1dCBkYXRhJ3MgbnVtYmVyIG9mIGZyYW1lcwotICoKLSAqIERldGVjdCB0aGF0IHRo ZSBmcmVxdWVuY2llcyBzcGVjaWZpZWQgaW4gQHNpZ25hbCwgYW5kIG9ubHkgdGhvc2UsIGFyZQot ICogcHJlc2VudCBpbiB0aGUgaW5wdXQgZGF0YS4gVGhlIGlucHV0IGRhdGEncyBmb3JtYXQgaXMg cmVxdWlyZWQgdG8gYmUgUzE2X0xFLgorICogQ2hlY2tzIHRoYXQgZnJlcXVlbmNpZXMgc3BlY2lm aWVkIGluIHNpZ25hbCwgYW5kIG9ubHkgdGhvc2UsIGFyZSBpbmNsdWRlZAorICogaW4gdGhlIGlu cHV0IGRhdGEuCiAgKgotICogUmV0dXJuczogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0 aGUgZGV0ZWN0aW9uIHdhcyBzdWNjZXNzZnVsCisgKiBzYW1wbGluZ19yYXRlIGlzIGdpdmVuIGlu IEh6LiBkYXRhX2xlbiBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGRhdGEuCiAgKi8KLWJv b2wgYXVkaW9fc2lnbmFsX2RldGVjdChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludCBj aGFubmVscywKLQkJCSBpbnQgc2FtcGxpbmdfcmF0ZSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1l cykKK2Jvb2wgYXVkaW9fc2lnbmFsX2RldGVjdChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWws IGludCBzYW1wbGluZ19yYXRlLAorCQkJIGRvdWJsZSAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKQog ewotCWRvdWJsZSBkYXRhW2ZyYW1lc107Ci0JaW50IGFtcGxpdHVkZVtmcmFtZXMgLyAyXTsKKwlz aXplX3QgYmluX3Bvd2VyX2xlbiA9IGRhdGFfbGVuIC8gMiArIDE7CisJZG91YmxlIGJpbl9wb3dl cltiaW5fcG93ZXJfbGVuXTsKIAlib29sIGRldGVjdGVkW3NpZ25hbC0+ZnJlcXNfY291bnRdOwot CWludCB0aHJlc2hvbGQ7Ci0JYm9vbCBhYm92ZTsKLQlpbnQgZXJyb3I7Ci0JaW50IGZyZXEgPSAw OwotCWludCBtYXg7Ci0JaW50IGMsIGksIGo7CisJaW50IHJldCwgZnJlcV9hY2N1cmFjeSwgZnJl cSwgbG9jYWxfbWF4X2ZyZXE7CisJZG91YmxlIG1heCwgbG9jYWxfbWF4LCB0aHJlc2hvbGQ7CisJ c2l6ZV90IGksIGo7CisJYm9vbCBhYm92ZSwgc3VjY2VzczsKKworCS8qIEFsbG93ZWQgZXJyb3Ig aW4gSHogZHVlIHRvIEZGVCBzdGVwICovCisJZnJlcV9hY2N1cmFjeSA9IHNhbXBsaW5nX3JhdGUg LyBkYXRhX2xlbjsKKwlpZ3RfZGVidWcoIkFsbG93ZWQgZnJlcS4gZXJyb3I6ICVkIEh6XG4iLCBm cmVxX2FjY3VyYWN5KTsKKworCXJldCA9IGdzbF9mZnRfcmVhbF9yYWRpeDJfdHJhbnNmb3JtKGRh dGEsIDEsIGRhdGFfbGVuKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKworCS8qIENvbXB1dGUg dGhlIHBvd2VyIHJlY2VpdmVkIGJ5IGV2ZXJ5IGJpbiBvZiB0aGUgRkZULCBhbmQgcmVjb3JkIHRo ZQorCSAqIG1heGltdW0gcG93ZXIgcmVjZWl2ZWQgYXMgYSB3YXkgdG8gbm9ybWFsaXplIGFsbCB0 aGUgb3RoZXJzLgorCSAqCisJICogRm9yIGkgPCBkYXRhX2xlbiAvIDIsIHRoZSByZWFsIHBhcnQg b2YgdGhlIGktdGggdGVybSBpcyBzdG9yZWQgYXQKKwkgKiBkYXRhW2ldIGFuZCBpdHMgaW1hZ2lu YXJ5IHBhcnQgaXMgc3RvcmVkIGF0IGRhdGFbZGF0YV9sZW4gLSBpXS4KKwkgKiBpID0gMCBhbmQg aSA9IGRhdGFfbGVuIC8gMiBhcmUgc3BlY2lhbCBjYXNlcywgdGhleSBhcmUgcHVyZWx5IHJlYWwK KwkgKiBzbyB0aGVpciBpbWFnaW5hcnkgcGFydCBpc24ndCBzdG9yZWQuCisJICoKKwkgKiBUaGUg cG93ZXIgaXMgZW5jb2RlZCBhcyB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlciBh bmQgdGhlCisJICogcGhhc2UgaXMgZW5jb2RlZCBhcyBpdHMgYW5nbGUuCisJICovCisJbWF4ID0g MDsKKwliaW5fcG93ZXJbMF0gPSBkYXRhWzBdOworCWZvciAoaSA9IDE7IGkgPCBiaW5fcG93ZXJf bGVuIC0gMTsgaSsrKSB7CisJCWJpbl9wb3dlcltpXSA9IGh5cG90KGRhdGFbaV0sIGRhdGFbZGF0 YV9sZW4gLSBpXSk7CisJCWlmIChiaW5fcG93ZXJbaV0gPiBtYXgpCisJCQltYXggPSBiaW5fcG93 ZXJbaV07CisJfQorCWJpbl9wb3dlcltiaW5fcG93ZXJfbGVuIC0gMV0gPSBkYXRhW2RhdGFfbGVu IC8gMl07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaSsrKQorCQlk ZXRlY3RlZFtpXSA9IGZhbHNlOworCisJLyogRG8gYSBsaW5lYXIgc2VhcmNoIHRocm91Z2ggdGhl IEZGVCBiaW5zJyBwb3dlciB0byBmaW5kIHRoZSB0aGUgbG9jYWwKKwkgKiBtYXhpbXVtcyB0aGF0 IGV4Y2VlZCBoYWxmIG9mIHRoZSBhYnNvbHV0ZSBtYXhpbXVtIHRoYXQgd2UgcHJldmlvdXNseQor CSAqIGNhbGN1bGF0ZWQuCisJICoKKwkgKiBTaW5jZSB0aGUgZnJlcXVlbmNpZXMgbWlnaHQgbm90 IGJlIHBlcmZlY3RseSBhbGlnbmVkIHdpdGggdGhlIGJpbnMgb2YKKwkgKiB0aGUgRkZULCB3ZSBu ZWVkIHRvIGZpbmQgdGhlIGxvY2FsIG1heGltdW0gYWNyb3NzIHNvbWUgY29uc2VjdXRpdmUKKwkg KiBiaW5zLiBPbmNlIHRoZSBwb3dlciByZXR1cm5zIHVuZGVyIHRoZSBwb3dlciB0aHJlc2hvbGQs IHdlIGNvbXBhcmUKKwkgKiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBiaW4gdGhhdCByZWNlaXZlZCB0 aGUgbWF4aW11bSBwb3dlciB0byB0aGUKKwkgKiBleHBlY3RlZCBmcmVxdWVuY2llcy4gSWYgZm91 bmQsIHdlIG1hcmsgdGhpcyBmcmVxdWVuY3kgYXMgc3VjaCwKKwkgKiBvdGhlcndpc2Ugd2Ugd2Fy biB0aGF0IGFuIHVuZXhwZWN0ZWQgZnJlcXVlbmN5IHdhcyBmb3VuZC4KKwkgKi8KKwl0aHJlc2hv bGQgPSBtYXggLyAyOworCXN1Y2Nlc3MgPSB0cnVlOworCWFib3ZlID0gZmFsc2U7CisJbG9jYWxf bWF4ID0gMDsKKwlsb2NhbF9tYXhfZnJlcSA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBiaW5fcG93 ZXJfbGVuOyBpKyspIHsKKwkJZnJlcSA9IHNhbXBsaW5nX3JhdGUgKiBpIC8gZGF0YV9sZW47CisK KwkJaWYgKGJpbl9wb3dlcltpXSA+IHRocmVzaG9sZCkKKwkJCWFib3ZlID0gdHJ1ZTsKKworCQlp ZiAoIWFib3ZlKSB7CisJCQljb250aW51ZTsKKwkJfQogCi0JLyogQWxsb3dlZCBlcnJvciBpbiBI eiBkdWUgdG8gRkZUIHN0ZXAuICovCi0JZXJyb3IgPSBzYW1wbGluZ19yYXRlIC8gZnJhbWVzOwor CQkvKiBJZiB3ZSB3ZXJlIGFib3ZlIHRoZSB0aHJlc2hvbGQgYW5kIHdlJ3JlIG5vdCBhbnltb3Jl LCBpdCdzCisJCSAqIHRpbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHBlYWsgZnJlcXVlbmN5IGlz IGNvcnJlY3Qgb3IKKwkJICogaW52YWxpZC4gKi8KKwkJaWYgKGJpbl9wb3dlcltpXSA8IHRocmVz aG9sZCkgeworCQkJZm9yIChqID0gMDsgaiA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGorKykgewor CQkJCWlmIChzaWduYWwtPmZyZXFzW2pdLmZyZXEgPgorCQkJCSAgICBsb2NhbF9tYXhfZnJlcSAt IGZyZXFfYWNjdXJhY3kgJiYKKwkJCQkgICAgc2lnbmFsLT5mcmVxc1tqXS5mcmVxIDwKKwkJCQkg ICAgbG9jYWxfbWF4X2ZyZXEgKyBmcmVxX2FjY3VyYWN5KSB7CisJCQkJCWRldGVjdGVkW2pdID0g dHJ1ZTsKKwkJCQkJaWd0X2RlYnVnKCJGcmVxdWVuY3kgJWQgZGV0ZWN0ZWRcbiIsCisJCQkJCQkg IGxvY2FsX21heF9mcmVxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCi0JZm9yIChjID0g MDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgaSsrKQot CQkJZGF0YVtpXSA9IChkb3VibGUpIGJ1ZmZlcltpICogY2hhbm5lbHMgKyBjXTsKKwkJCS8qIFdl IGhhdmVuJ3QgZ2VuZXJhdGVkIHRoaXMgZnJlcXVlbmN5LCBidXQgd2UgZGV0ZWN0ZWQKKwkJCSAq IGl0LiAqLworCQkJaWYgKGogPT0gc2lnbmFsLT5mcmVxc19jb3VudCkgeworCQkJCWlndF9kZWJ1 ZygiRGV0ZWN0ZWQgYWRkaXRpb25hbCBmcmVxdWVuY3k6ICVkXG4iLAorCQkJCQkgIGxvY2FsX21h eF9mcmVxKTsKKwkJCQlzdWNjZXNzID0gZmFsc2U7CisJCQl9CiAKLQkJZ3NsX2ZmdF9yZWFsX3Jh ZGl4Ml90cmFuc2Zvcm0oZGF0YSwgMSwgZnJhbWVzKTsKKwkJCWFib3ZlID0gZmFsc2U7CisJCQls b2NhbF9tYXggPSAwOworCQkJbG9jYWxfbWF4X2ZyZXEgPSAtMTsKKwkJfQogCi0JCW1heCA9IDA7 CisJCWlmIChiaW5fcG93ZXJbaV0gPiBsb2NhbF9tYXgpIHsKKwkJCWxvY2FsX21heCA9IGJpbl9w b3dlcltpXTsKKwkJCWxvY2FsX21heF9mcmVxID0gZnJlcTsKKwkJfQorCX0KIAotCQlmb3IgKGkg PSAwOyBpIDwgZnJhbWVzIC8gMjsgaSsrKSB7Ci0JCQlhbXBsaXR1ZGVbaV0gPSBoeXBvdChkYXRh W2ldLCBkYXRhW2ZyYW1lcyAtIGldKTsKLQkJCWlmIChhbXBsaXR1ZGVbaV0gPiBtYXgpCi0JCQkJ bWF4ID0gYW1wbGl0dWRlW2ldOworCS8qIENoZWNrIHRoYXQgYWxsIGZyZXF1ZW5jaWVzIHdlIGdl bmVyYXRlZCBoYXZlIGJlZW4gZGV0ZWN0ZWQuICovCisJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ ZnJlcXNfY291bnQ7IGkrKykgeworCQlpZiAoIWRldGVjdGVkW2ldKSB7CisJCQlpZ3RfZGVidWco Ik1pc3NpbmcgZnJlcXVlbmN5OiAlZFxuIiwKKwkJCQkgIHNpZ25hbC0+ZnJlcXNbaV0uZnJlcSk7 CisJCQlzdWNjZXNzID0gZmFsc2U7CiAJCX0KKwl9CiAKLQkJZm9yIChpID0gMDsgaSA8IHNpZ25h bC0+ZnJlcXNfY291bnQ7IGkrKykKLQkJCWRldGVjdGVkW2ldID0gZmFsc2U7Ci0KLQkJdGhyZXNo b2xkID0gbWF4IC8gMjsKLQkJYWJvdmUgPSBmYWxzZTsKLQkJbWF4ID0gMDsKLQotCQlmb3IgKGkg PSAwOyBpIDwgZnJhbWVzIC8gMjsgaSsrKSB7Ci0JCQlpZiAoYW1wbGl0dWRlW2ldID4gdGhyZXNo b2xkKQotCQkJCWFib3ZlID0gdHJ1ZTsKLQotCQkJaWYgKGFib3ZlKSB7Ci0JCQkJaWYgKGFtcGxp dHVkZVtpXSA8IHRocmVzaG9sZCkgewotCQkJCQlhYm92ZSA9IGZhbHNlOwotCQkJCQltYXggPSAw OwotCi0JCQkJCWZvciAoaiA9IDA7IGogPCBzaWduYWwtPmZyZXFzX2NvdW50OyBqKyspIHsKLQkJ CQkJCWlmIChzaWduYWwtPmZyZXFzW2pdLmZyZXEgPgotCQkJCQkJICAgIGZyZXEgLSBlcnJvciAm JgotCQkJCQkJICAgIHNpZ25hbC0+ZnJlcXNbal0uZnJlcSA8Ci0JCQkJCQkgICAgZnJlcSArIGVy cm9yKSB7Ci0JCQkJCQkJZGV0ZWN0ZWRbal0gPSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJ fQotCQkJCQl9Ci0KLQkJCQkJLyogRGV0ZWN0ZWQgZnJlcXVlbmN5IHdhcyBub3QgZ2VuZXJhdGVk LiAqLwotCQkJCQlpZiAoaiA9PSBzaWduYWwtPmZyZXFzX2NvdW50KSB7Ci0JCQkJCQlpZ3RfZGVi dWcoIkRldGVjdGVkIGFkZGl0aW9uYWwgZnJlcXVlbmN5OiAlZFxuIiwKLQkJCQkJCQkgIGZyZXEp OwotCQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCQl9Ci0JCQkJfQorCXJldHVybiBzdWNjZXNzOwor fQogCi0JCQkJaWYgKGFtcGxpdHVkZVtpXSA+IG1heCkgewotCQkJCQltYXggPSBhbXBsaXR1ZGVb aV07Ci0JCQkJCWZyZXEgPSBzYW1wbGluZ19yYXRlICogaSAvIGZyYW1lczsKLQkJCQl9Ci0JCQl9 Ci0JCX0KKy8qKgorICogRXh0cmFjdHMgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIGEgbXVsdGktY2hh bm5lbCBTMzJfTEUgaW5wdXQgYnVmZmVyLgorICovCitzaXplX3QgYXVkaW9fZXh0cmFjdF9jaGFu bmVsX3MzMl9sZShkb3VibGUgKmRzdCwgc2l6ZV90IGRzdF9jYXAsCisJCQkJICAgIGludDMyX3Qg KnNyYywgc2l6ZV90IHNyY19sZW4sCisJCQkJICAgIGludCBuX2NoYW5uZWxzLCBpbnQgY2hhbm5l bCkKK3sKKwlzaXplX3QgZHN0X2xlbiwgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5m cmVxc19jb3VudDsgaSsrKSB7Ci0JCQlpZiAoIWRldGVjdGVkW2ldKSB7Ci0JCQkJaWd0X2RlYnVn KCJNaXNzaW5nIGZyZXF1ZW5jeTogJWRcbiIsCi0JCQkJCSAgc2lnbmFsLT5mcmVxc1tpXS5mcmVx KTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KKwlpZ3RfYXNzZXJ0KGNoYW5uZWwgPCBu X2NoYW5uZWxzKTsKKwlpZ3RfYXNzZXJ0KHNyY19sZW4gJSBuX2NoYW5uZWxzID09IDApOworCWRz dF9sZW4gPSBzcmNfbGVuIC8gbl9jaGFubmVsczsKKwlpZ3RfYXNzZXJ0KGRzdF9sZW4gPD0gZHN0 X2NhcCk7CisJZm9yIChpID0gMDsgaSA8IGRzdF9sZW47IGkrKykKKwkJZHN0W2ldID0gKGRvdWJs ZSkgc3JjW2kgKiBuX2NoYW5uZWxzICsgY2hhbm5lbF07CisKKwlyZXR1cm4gZHN0X2xlbjsKK30K KworI2RlZmluZSBSSUZGX1RBRyAiUklGRiIKKyNkZWZpbmUgV0FWRV9UQUcgIldBVkUiCisjZGVm aW5lIEZNVF9UQUcgImZtdCAiCisjZGVmaW5lIERBVEFfVEFHICJkYXRhIgorCitzdGF0aWMgdm9p ZAorYXBwZW5kX3RvX2J1ZmZlcihjaGFyICpkc3QsIHNpemVfdCAqaSwgY29uc3Qgdm9pZCAqc3Jj LCBzaXplX3Qgc3JjX3NpemUpCit7CisJbWVtY3B5KCZkc3RbKmldLCBzcmMsIHNyY19zaXplKTsK KwkqaSArPSBzcmNfc2l6ZTsKK30KKworLyoqCisgKiBhdWRpb19jcmVhdGVfd2F2X2ZpbGVfczMy X2xlOgorICogQHF1YWxpZmllcjogdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICh0aGUgdGVzdCBu YW1lIHdpbGwgYmUgcHJlcGVuZGVkLCBhbmQKKyAqIHRoZSBmaWxlIGV4dGVuc2lvbiB3aWxsIGJl IGFwcGVuZGVkKQorICogQHNhbXBsZV9yYXRlOiB0aGUgc2FtcGxlIHJhdGUgaW4gSHoKKyAqIEBj aGFubmVsczogdGhlIG51bWJlciBvZiBjaGFubmVscworICogQHBhdGg6IGlmIG5vbi1OVUxMLCB3 aWxsIGJlIHNldCB0byBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmaWxlIHBhdGggKHRoZQorICogY2Fs bGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlLWluZyBpdCkKKyAqCisgKiBDcmVhdGVzIGEgbmV3 IFdBViBmaWxlLgorICoKKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxl ciBpcyBleHBlY3RlZCB0byB3cml0ZSBTMzJfTEUgUENNIGRhdGEKKyAqIHRvIHRoZSByZXR1cm5l ZCBmaWxlIGRlc2NyaXB0b3IuCisgKgorICogU2VlIGh0dHA6Ly93d3ctbW1zcC5lY2UubWNnaWxs LmNhL0RvY3VtZW50cy9BdWRpb0Zvcm1hdHMvV0FWRS9XQVZFLmh0bWwgZm9yCisgKiBhIFdBViBm aWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqIFJldHVybnM6IGEgZmlsZSBkZXNjcmlw dG9yIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUsIG9yIC0xIG9uIGVycm9yLgorICovCitpbnQg YXVkaW9fY3JlYXRlX3dhdl9maWxlX3MzMl9sZShjb25zdCBjaGFyICpxdWFsaWZpZXIsIHVpbnQz Ml90IHNhbXBsZV9yYXRlLAorCQkJCSB1aW50MTZfdCBjaGFubmVscywgY2hhciAqKnBhdGgpCit7 CisJY2hhciBfcGF0aFtQQVRIX01BWF07CisJY29uc3QgY2hhciAqdGVzdF9uYW1lLCAqc3VidGVz dF9uYW1lOworCWludCBmZDsKKwljaGFyIGhlYWRlcls0NF07CisJc2l6ZV90IGkgPSAwOworCXVp bnQzMl90IGZpbGVfc2l6ZSwgY2h1bmtfc2l6ZSwgYnl0ZV9yYXRlOworCXVpbnQxNl90IGZvcm1h dCwgYmxvY2tfYWxpZ24sIGJpdHNfcGVyX3NhbXBsZTsKKworCXRlc3RfbmFtZSA9IGlndF90ZXN0 X25hbWUoKTsKKwlzdWJ0ZXN0X25hbWUgPSBpZ3Rfc3VidGVzdF9uYW1lKCk7CisKKwlpZ3RfYXNz ZXJ0KGlndF9mcmFtZV9kdW1wX3BhdGgpOworCXNucHJpbnRmKF9wYXRoLCBzaXplb2YoX3BhdGgp LCAiJXMvYXVkaW8tJXMtJXMtJXMud2F2IiwKKwkJIGlndF9mcmFtZV9kdW1wX3BhdGgsIHRlc3Rf bmFtZSwgc3VidGVzdF9uYW1lLCBxdWFsaWZpZXIpOworCisJaWYgKHBhdGgpCisJCSpwYXRoID0g c3RyZHVwKF9wYXRoKTsKKworCWlndF9kZWJ1ZygiRHVtcGluZyAlcyBhdWRpbyB0byAlc1xuIiwg cXVhbGlmaWVyLCBfcGF0aCk7CisJZmQgPSBvcGVuKF9wYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQg fCBPX1RSVU5DKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlndF93YXJuKCJvcGVuIGZhaWxlZDogJXNc biIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBGaWxlIGhlYWRl ciAqLworCWZpbGVfc2l6ZSA9IFVJTlQzMl9NQVg7IC8qIHVua25vd24gZmlsZSBzaXplICovCisJ YXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCBSSUZGX1RBRywgc3RybGVuKFJJRkZfVEFHKSk7 CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmZmlsZV9zaXplLCBzaXplb2YoZmlsZV9z aXplKSk7CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCBXQVZFX1RBRywgc3RybGVuKFdB VkVfVEFHKSk7CisKKwkvKiBGb3JtYXQgY2h1bmsgKi8KKwljaHVua19zaXplID0gMTY7CisJZm9y bWF0ID0gMTsgLyogUENNICovCisJYml0c19wZXJfc2FtcGxlID0gMzI7IC8qIFMzMl9MRSAqLwor CWJ5dGVfcmF0ZSA9IHNhbXBsZV9yYXRlICogY2hhbm5lbHMgKiBiaXRzX3Blcl9zYW1wbGUgLyA4 OworCWJsb2NrX2FsaWduID0gY2hhbm5lbHMgKiBiaXRzX3Blcl9zYW1wbGUgLyA4OworCWFwcGVu ZF90b19idWZmZXIoaGVhZGVyLCAmaSwgRk1UX1RBRywgc3RybGVuKEZNVF9UQUcpKTsKKwlhcHBl bmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZjaHVua19zaXplLCBzaXplb2YoY2h1bmtfc2l6ZSkp OworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkp OworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmNoYW5uZWxzLCBzaXplb2YoY2hhbm5l bHMpKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZzYW1wbGVfcmF0ZSwgc2l6ZW9m KHNhbXBsZV9yYXRlKSk7CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmYnl0ZV9yYXRl LCBzaXplb2YoYnl0ZV9yYXRlKSk7CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmYmxv Y2tfYWxpZ24sIHNpemVvZihibG9ja19hbGlnbikpOworCWFwcGVuZF90b19idWZmZXIoaGVhZGVy LCAmaSwgJmJpdHNfcGVyX3NhbXBsZSwgc2l6ZW9mKGJpdHNfcGVyX3NhbXBsZSkpOworCisJLyog RGF0YSBjaHVuayAqLworCWNodW5rX3NpemUgPSBVSU5UMzJfTUFYOyAvKiB1bmtub3duIGNodW5r IHNpemUgKi8KKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIERBVEFfVEFHLCBzdHJsZW4o REFUQV9UQUcpKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZjaHVua19zaXplLCBz aXplb2YoY2h1bmtfc2l6ZSkpOworCisJaWd0X2Fzc2VydChpID09IHNpemVvZihoZWFkZXIpKTsK KworCWlmICh3cml0ZShmZCwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSkgIT0gc2l6ZW9mKGhlYWRl cikpIHsKKwkJaWd0X3dhcm4oIndyaXRlIGZhaWxlZDogJXMnbiIsIHN0cmVycm9yKGVycm5vKSk7 CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVy biBmZDsKIH0KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXVkaW8uaCBiL2xpYi9pZ3RfYXVkaW8uaApp bmRleCBiM2I2NThhNC4uNGFhNDNlNjkgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfYXVkaW8uaAorKysg Yi9saWIvaWd0X2F1ZGlvLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK IAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KIAogc3RydWN0IGF1 ZGlvX3NpZ25hbDsKIApAQCAtMzcsOCArMzgsMTMgQEAgc3RydWN0IGF1ZGlvX3NpZ25hbCAqYXVk aW9fc2lnbmFsX2luaXQoaW50IGNoYW5uZWxzLCBpbnQgc2FtcGxpbmdfcmF0ZSk7CiBpbnQgYXVk aW9fc2lnbmFsX2FkZF9mcmVxdWVuY3koc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQg ZnJlcXVlbmN5KTsKIHZvaWQgYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoc3RydWN0IGF1ZGlvX3Np Z25hbCAqc2lnbmFsKTsKIHZvaWQgYXVkaW9fc2lnbmFsX2NsZWFuKHN0cnVjdCBhdWRpb19zaWdu YWwgKnNpZ25hbCk7Ci12b2lkIGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwg KnNpZ25hbCwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcyk7Ci1ib29sIGF1ZGlvX3NpZ25hbF9k ZXRlY3Qoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgY2hhbm5lbHMsCi0JCQkgaW50 IHNhbXBsaW5nX3JhdGUsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpOwordm9pZCBhdWRpb19z aWduYWxfZmlsbChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludDE2X3QgKmJ1ZmZlciwg aW50IGZyYW1lcyk7Citib29sIGF1ZGlvX3NpZ25hbF9kZXRlY3Qoc3RydWN0IGF1ZGlvX3NpZ25h bCAqc2lnbmFsLCBpbnQgc2FtcGxpbmdfcmF0ZSwKKwkJCSBkb3VibGUgKmRhdGEsIHNpemVfdCBk YXRhX2xlbik7CitzaXplX3QgYXVkaW9fZXh0cmFjdF9jaGFubmVsX3MzMl9sZShkb3VibGUgKmRz dCwgc2l6ZV90IGRzdF9jYXAsCisJCQkJICAgIGludDMyX3QgKnNyYywgc2l6ZV90IHNyY19sZW4s CisJCQkJICAgIGludCBuX2NoYW5uZWxzLCBpbnQgY2hhbm5lbCk7CitpbnQgYXVkaW9fY3JlYXRl X3dhdl9maWxlX3MzMl9sZShjb25zdCBjaGFyICpxdWFsaWZpZXIsIHVpbnQzMl90IHNhbXBsZV9y YXRlLAorCQkJCSB1aW50MTZfdCBjaGFubmVscywgY2hhciAqKnBhdGgpOwogCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL2xpYi9pZ3RfYXV4LmMgYi9saWIvaWd0X2F1eC5jCmluZGV4IDA1NTI4MzUyLi4z ZGQ2OGQ5NSAxMDA2NDQKLS0tIGEvbGliL2lndF9hdXguYworKysgYi9saWIvaWd0X2F1eC5jCkBA IC0xMjU5LDYgKzEyNTksMzcgQEAgdm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoY29uc3Qg Y2hhciAqbmFtZSwgaW50IHZhbCkKIAlpZ3Rfc2V0X21vZHVsZV9wYXJhbShuYW1lLCBzdHIpOwog fQogCisvKioKKyAqIGlndF9pc19wcm9jZXNzX3J1bm5pbmc6CisgKiBAY29tbTogTmFtZSBvZiBw cm9jZXNzIGluIHRoZSBmb3JtIGZvdW5kIGluIC9wcm9jL3BpZC9jb21tIChsaW1pdGVkIHRvIDE1 CisgKiBjaGFycykKKyAqCisgKiBSZXR1cm5zOiB0cnVlIGluIGNhc2UgdGhlIHByb2Nlc3MgaGFz IGJlZW4gZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNr cyBpbiB0aGUgcHJvY2VzcyB0YWJsZSBmb3IgYW4gZW50cnkgd2l0aCB0aGUgbmFtZSBAY29tbS4K KyAqLworaW50IGlndF9pc19wcm9jZXNzX3J1bm5pbmcoY29uc3QgY2hhciAqY29tbSkKK3sKKwlQ Uk9DVEFCICpwcm9jOworCXByb2NfdCAqcHJvY19pbmZvOworCWJvb2wgZm91bmQgPSBmYWxzZTsK KworCXByb2MgPSBvcGVucHJvYyhQUk9DX0ZJTExDT00gfCBQUk9DX0ZJTExTVEFUKTsKKwlpZ3Rf YXNzZXJ0KHByb2MgIT0gTlVMTCk7CisKKwl3aGlsZSAoKHByb2NfaW5mbyA9IHJlYWRwcm9jKHBy b2MsIE5VTEwpKSkgeworCQlpZiAoIXN0cm5jYXNlY21wKHByb2NfaW5mby0+Y21kLCBjb21tLCBz aXplb2YocHJvY19pbmZvLT5jbWQpKSkgeworCQkJZnJlZXByb2MocHJvY19pbmZvKTsKKwkJCWZv dW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCWZyZWVwcm9jKHByb2NfaW5mbyk7CisJfQor CisJY2xvc2Vwcm9jKHByb2MpOworCXJldHVybiBmb3VuZDsKK30KKwogLyoqCiAgKiBpZ3RfdGVy bWluYXRlX3Byb2Nlc3M6CiAgKiBAc2lnOiBTaWduYWwgdG8gc2VuZApkaWZmIC0tZ2l0IGEvbGli L2lndF9hdXguaCBiL2xpYi9pZ3RfYXV4LmgKaW5kZXggNTUzOTI3OTAuLmRiZDg4YjY3IDEwMDY0 NAotLS0gYS9saWIvaWd0X2F1eC5oCisrKyBiL2xpYi9pZ3RfYXV4LmgKQEAgLTI3OSw2ICsyNzks NyBAQCBib29sIGlndF9hbGxvd191bmxpbWl0ZWRfZmlsZXModm9pZCk7CiB2b2lkIGlndF9zZXRf bW9kdWxlX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCk7CiB2b2lkIGln dF9zZXRfbW9kdWxlX3BhcmFtX2ludChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsKTsKIAoraW50 IGlndF9pc19wcm9jZXNzX3J1bm5pbmcoY29uc3QgY2hhciAqY29tbSk7CiBpbnQgaWd0X3Rlcm1p bmF0ZV9wcm9jZXNzKGludCBzaWcsIGNvbnN0IGNoYXIgKmNvbW0pOwogdm9pZCBpZ3RfbHNvZihj b25zdCBjaGFyICpkcGF0aCk7CiAKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtLmMgYi9s aWIvaWd0X2NoYW1lbGl1bS5jCmluZGV4IDAyY2M5YjJjLi43YzkwMzBkMSAxMDA2NDQKLS0tIGEv bGliL2lndF9jaGFtZWxpdW0uYworKysgYi9saWIvaWd0X2NoYW1lbGl1bS5jCkBAIC0yMTgsNiAr MjE4LDEyIEBAIHZvaWQgY2hhbWVsaXVtX2Rlc3Ryb3lfZnJhbWVfZHVtcChzdHJ1Y3QgY2hhbWVs aXVtX2ZyYW1lX2R1bXAgKmR1bXApCiAJZnJlZShkdW1wKTsKIH0KIAordm9pZCBjaGFtZWxpdW1f ZGVzdHJveV9hdWRpb19maWxlKHN0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSAqYXVkaW9fZmls ZSkKK3sKKwlmcmVlKGF1ZGlvX2ZpbGUtPnBhdGgpOworCWZyZWUoYXVkaW9fZmlsZSk7Cit9CisK IHN0cnVjdCBmc21fbW9uaXRvcl9hcmdzIHsKIAlzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW07 CiAJc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0OwpAQCAtOTI0LDYgKzkzMCwxMDEgQEAgaW50 IGNoYW1lbGl1bV9nZXRfY2FwdHVyZWRfZnJhbWVfY291bnQoc3RydWN0IGNoYW1lbGl1bSAqY2hh bWVsaXVtKQogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogY2hhbWVsaXVtX3N0YXJ0X2NhcHR1 cmluZ19hdWRpbzoKKyAqIEBjaGFtZWxpdW06IHRoZSBDaGFtZWxpdW0gaW5zdGFuY2UKKyAqIEBw b3J0OiB0aGUgcG9ydCB0byBjYXB0dXJlIGF1ZGlvIGZyb20gKGl0IG11c3Qgc3VwcG9ydCBhdWRp bykKKyAqIEBzYXZlX3RvX2ZpbGU6IHdoZXRoZXIgdGhlIGNhcHR1cmVkIGF1ZGlvIGRhdGEgc2hv dWxkIGJlIHNhdmVkIHRvIGEgZmlsZSBvbgorICogdGhlIENoYW1lbGl1bSBkZXZpY2UKKyAqCisg KiBTdGFydHMgY2FwdHVyaW5nIGF1ZGlvIGZyb20gYSBDaGFtZWxpdW0gcG9ydC4gVG8gc3RvcCB0 aGUgY2FwdHVyZSwgdXNlCisgKiAjY2hhbWVsaXVtX3N0b3BfY2FwdHVyaW5nX2F1ZGlvLiBUbyBy ZXRyaWV2ZSB0aGUgYXVkaW8gZGF0YSwgZWl0aGVyIHVzZSB0aGUKKyAqIHN0cmVhbSBzZXJ2ZXIg b3IgZW5hYmxlIEBzYXZlX3RvX2ZpbGUgKHRoZSBsYXR0ZXIgaXMgbWFpbmx5IHVzZWZ1bCBmb3IK KyAqIGRlYnVnZ2luZyBwdXJwb3NlcykuCisgKgorICogSXQgaXNuJ3QgcG9zc2libGUgdG8gY2Fw dHVyZSBhdWRpbyBmcm9tIG11bHRpcGxlIHBvcnRzIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KK3Zv aWQgY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmluZ19hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFt ZWxpdW0sCisJCQkJICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKKwkJCQkgICAgYm9v bCBzYXZlX3RvX2ZpbGUpCit7CisJeG1scnBjX3ZhbHVlICpyZXM7CisKKwlyZXMgPSBjaGFtZWxp dW1fcnBjKGNoYW1lbGl1bSwgcG9ydCwgIlN0YXJ0Q2FwdHVyaW5nQXVkaW8iLCAiKGliKSIsCisJ CQkgICAgcG9ydC0+aWQsIHNhdmVfdG9fZmlsZSk7CisJeG1scnBjX0RFQ1JFRihyZXMpOworfQor CitzdGF0aWMgdm9pZCBhdWRpb19mb3JtYXRfZnJvbV94bWwoc3RydWN0IGNoYW1lbGl1bSAqY2hh bWVsaXVtLAorCQkJCSAgeG1scnBjX3ZhbHVlICpyZXMsIGludCAqcmF0ZSwgaW50ICpjaGFubmVs cykKK3sKKwl4bWxycGNfdmFsdWUgKnJlc190eXBlLCAqcmVzX3JhdGUsICpyZXNfc2FtcGxlX2Zv cm1hdCwgKnJlc19jaGFubmVsOworCWNoYXIgKnR5cGUsICpzYW1wbGVfZm9ybWF0OworCisJeG1s cnBjX3N0cnVjdF9maW5kX3ZhbHVlKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAiZmlsZV90eXBlIiwg JnJlc190eXBlKTsKKwl4bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1bS0+ZW52LCBy ZXMsICJyYXRlIiwgJnJlc19yYXRlKTsKKwl4bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1l bGl1bS0+ZW52LCByZXMsICJzYW1wbGVfZm9ybWF0IiwgJnJlc19zYW1wbGVfZm9ybWF0KTsKKwl4 bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1bS0+ZW52LCByZXMsICJjaGFubmVsIiwg JnJlc19jaGFubmVsKTsKKworCXhtbHJwY19yZWFkX3N0cmluZygmY2hhbWVsaXVtLT5lbnYsIHJl c190eXBlLCAoY29uc3QgY2hhciAqKikgJnR5cGUpOworCWlndF9hc3NlcnQoc3RyY21wKHR5cGUs ICJyYXciKSA9PSAwKTsKKwlmcmVlKHR5cGUpOworCisJeG1scnBjX3JlYWRfc3RyaW5nKCZjaGFt ZWxpdW0tPmVudiwgcmVzX3NhbXBsZV9mb3JtYXQsIChjb25zdCBjaGFyICoqKSAmc2FtcGxlX2Zv cm1hdCk7CisJaWd0X2Fzc2VydChzdHJjbXAoc2FtcGxlX2Zvcm1hdCwgIlMzMl9MRSIpID09IDAp OworCWZyZWUoc2FtcGxlX2Zvcm1hdCk7CisKKwl4bWxycGNfcmVhZF9pbnQoJmNoYW1lbGl1bS0+ ZW52LCByZXNfcmF0ZSwgcmF0ZSk7CisJeG1scnBjX3JlYWRfaW50KCZjaGFtZWxpdW0tPmVudiwg cmVzX2NoYW5uZWwsIGNoYW5uZWxzKTsKKworCXhtbHJwY19ERUNSRUYocmVzX2NoYW5uZWwpOwor CXhtbHJwY19ERUNSRUYocmVzX3NhbXBsZV9mb3JtYXQpOworCXhtbHJwY19ERUNSRUYocmVzX3Jh dGUpOworCXhtbHJwY19ERUNSRUYocmVzX3R5cGUpOworfQorCisvKioKKyAqIGNoYW1lbGl1bV9z dG9wX2NhcHR1cmluZ19hdWRpbzoKKyAqIEBjaGFtZWxpdW06IHRoZSBDaGFtZWxpdW0gaW5zdGFu Y2UKKyAqIEBwb3J0OiB0aGUgcG9ydCBmcm9tIHdoaWNoIGF1ZGlvIGlzIGJlaW5nIGNhcHR1cmVk CisgKgorICogU3RvcHMgY2FwdHVyaW5nIGF1ZGlvIGZyb20gYSBDaGFtZWxpdW0gcG9ydC4gSWYK KyAqICNjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1ZGlvIGhhcyBiZWVuIGNhbGxlZCB3aXRo IEBzYXZlX3RvX2ZpbGUgZW5hYmxlZCwKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSAj Y2hhbWVsaXVtX2F1ZGlvX2ZpbGUgc3RydWN0IGNvbnRhaW5pbmcgZGV0YWlscworICogYWJvdXQg dGhlIGF1ZGlvIGZpbGUuIE9uY2UgdGhlIGNhbGxlciBpcyBkb25lIHdpdGggdGhlIHN0cnVjdCwg dGhleSBzaG91bGQKKyAqIHJlbGVhc2UgaXQgd2l0aCAjY2hhbWVsaXVtX2Rlc3Ryb3lfYXVkaW9f ZmlsZS4KKyAqLworc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICpjaGFtZWxpdW1fc3RvcF9j YXB0dXJpbmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAorCQkJCQkJCSAgICBz dHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpCit7CisJeG1scnBjX3ZhbHVlICpyZXMsICpyZXNf cGF0aCwgKnJlc19wcm9wczsKKwlzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmZpbGUgPSBO VUxMOworCWNoYXIgKnBhdGg7CisKKwlyZXMgPSBjaGFtZWxpdW1fcnBjKGNoYW1lbGl1bSwgTlVM TCwgIlN0b3BDYXB0dXJpbmdBdWRpbyIsICIoaSkiLAorCQkJICAgIHBvcnQtPmlkKTsKKwl4bWxy cGNfYXJyYXlfcmVhZF9pdGVtKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAwLCAmcmVzX3BhdGgpOwor CXhtbHJwY19hcnJheV9yZWFkX2l0ZW0oJmNoYW1lbGl1bS0+ZW52LCByZXMsIDEsICZyZXNfcHJv cHMpOworCisJeG1scnBjX3JlYWRfc3RyaW5nKCZjaGFtZWxpdW0tPmVudiwgcmVzX3BhdGgsIChj b25zdCBjaGFyICoqKSAmcGF0aCk7CisKKwlpZiAoc3RybGVuKHBhdGgpID4gMCkgeworCQlmaWxl ID0gY2FsbG9jKDEsIHNpemVvZigqZmlsZSkpOworCQlmaWxlLT5wYXRoID0gcGF0aDsKKworCQlh dWRpb19mb3JtYXRfZnJvbV94bWwoY2hhbWVsaXVtLCByZXNfcHJvcHMsCisJCQkJICAgICAgJmZp bGUtPnJhdGUsICZmaWxlLT5jaGFubmVscyk7CisJfSBlbHNlIHsKKwkJZnJlZShwYXRoKTsKKwl9 CisKKwl4bWxycGNfREVDUkVGKHJlc19wcm9wcyk7CisJeG1scnBjX0RFQ1JFRihyZXNfcGF0aCk7 CisJeG1scnBjX0RFQ1JFRihyZXMpOworCisJcmV0dXJuIGZpbGU7Cit9CisKIHN0YXRpYyBwaXht YW5faW1hZ2VfdCAqY29udmVydF9mcmFtZV9mb3JtYXQocGl4bWFuX2ltYWdlX3QgKnNyYywKIAkJ CQkJICAgIGludCBmb3JtYXQpCiB7CmRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5oIGIv bGliL2lndF9jaGFtZWxpdW0uaAppbmRleCAyMzNlYWQ4NS4uMDQ3ZjhjNWQgMTAwNjQ0Ci0tLSBh L2xpYi9pZ3RfY2hhbWVsaXVtLmgKKysrIGIvbGliL2lndF9jaGFtZWxpdW0uaApAQCAtNTMsNiAr NTMsMTIgQEAgZW51bSBjaGFtZWxpdW1fY2hlY2sgewogCUNIQU1FTElVTV9DSEVDS19DUkMsCiB9 OwogCitzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgeworCWNoYXIgKnBhdGg7CisJaW50IHJh dGU7IC8qIEh6ICovCisJaW50IGNoYW5uZWxzOworfTsKKwogc3RydWN0IGNoYW1lbGl1bSAqY2hh bWVsaXVtX2luaXQoaW50IGRybV9mZCk7CiB2b2lkIGNoYW1lbGl1bV9kZWluaXQoc3RydWN0IGNo YW1lbGl1bSAqY2hhbWVsaXVtKTsKIHZvaWQgY2hhbWVsaXVtX3Jlc2V0KHN0cnVjdCBjaGFtZWxp dW0gKmNoYW1lbGl1bSk7CkBAIC0xMDAsNiArMTA2LDEwIEBAIHZvaWQgY2hhbWVsaXVtX3N0YXJ0 X2NhcHR1cmUoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAogdm9pZCBjaGFtZWxpdW1fc3Rv cF9jYXB0dXJlKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwgaW50IGZyYW1lX2NvdW50KTsK IHZvaWQgY2hhbWVsaXVtX2NhcHR1cmUoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLCBzdHJ1 Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCiAJCSAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBp bnQgaCwgaW50IGZyYW1lX2NvdW50KTsKK3ZvaWQgY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmluZ19h dWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCisJCQkJICAgIHN0cnVjdCBjaGFtZWxp dW1fcG9ydCAqcG9ydCwgYm9vbCBzYXZlX3RvX2ZpbGUpOworc3RydWN0IGNoYW1lbGl1bV9hdWRp b19maWxlICpjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAq Y2hhbWVsaXVtLAorCQkJCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpOwogaWd0 X2NyY190ICpjaGFtZWxpdW1fcmVhZF9jYXB0dXJlZF9jcmNzKHN0cnVjdCBjaGFtZWxpdW0gKmNo YW1lbGl1bSwKIAkJCQkJaW50ICpmcmFtZV9jb3VudCk7CiBzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1l X2R1bXAgKmNoYW1lbGl1bV9yZWFkX2NhcHR1cmVkX2ZyYW1lKHN0cnVjdCBjaGFtZWxpdW0gKmNo YW1lbGl1bSwKQEAgLTEzMSw1ICsxNDEsNiBAQCB2b2lkIGNoYW1lbGl1bV9hc3NlcnRfZnJhbWVf bWF0Y2hfb3JfZHVtcChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCiB2b2lkIGNoYW1lbGl1 bV9jcm9wX2FuYWxvZ19mcmFtZShzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgKmR1bXAsIGlu dCB3aWR0aCwKIAkJCQkgaW50IGhlaWdodCk7CiB2b2lkIGNoYW1lbGl1bV9kZXN0cm95X2ZyYW1l X2R1bXAoc3RydWN0IGNoYW1lbGl1bV9mcmFtZV9kdW1wICpkdW1wKTsKK3ZvaWQgY2hhbWVsaXVt X2Rlc3Ryb3lfYXVkaW9fZmlsZShzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmF1ZGlvX2Zp bGUpOwogCiAjZW5kaWYgLyogSUdUX0NIQU1FTElVTV9IICovCmRpZmYgLS1naXQgYS9saWIvaWd0 X2NoYW1lbGl1bV9zdHJlYW0uYyBiL2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42OGRkYjIxNwotLS0gL2Rldi9udWxsCisrKyBi L2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jCkBAIC0wLDAgKzEsNTg5IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogU2ltb24gU2VyIDxzaW1vbi5z ZXJAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGFy cGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNs dWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaW5jbHVkZSAiaWd0X2NoYW1lbGl1bV9z dHJlYW0uaCIKKyNpbmNsdWRlICJpZ3RfY29yZS5oIgorI2luY2x1ZGUgImlndF9yYy5oIgorCisj ZGVmaW5lIFNUUkVBTV9QT1JUIDk5OTQKKyNkZWZpbmUgU1RSRUFNX1ZFUlNJT05fTUFKT1IgMQor I2RlZmluZSBTVFJFQU1fVkVSU0lPTl9NSU5PUiAwCisKK2VudW0gc3RyZWFtX2Vycm9yIHsKKwlT VFJFQU1fRVJST1JfTk9ORSA9IDAsCisJU1RSRUFNX0VSUk9SX0NPTU1BTkQgPSAxLAorCVNUUkVB TV9FUlJPUl9BUkdVTUVOVCA9IDIsCisJU1RSRUFNX0VSUk9SX0VYSVNUUyA9IDMsCisJU1RSRUFN X0VSUk9SX1ZJREVPX01FTV9PVkVSRkxPV19TVE9QID0gNCwKKwlTVFJFQU1fRVJST1JfVklERU9f TUVNX09WRVJGTE9XX0RST1AgPSA1LAorCVNUUkVBTV9FUlJPUl9BVURJT19NRU1fT1ZFUkZMT1df U1RPUCA9IDYsCisJU1RSRUFNX0VSUk9SX0FVRElPX01FTV9PVkVSRkxPV19EUk9QID0gNywKKwlT VFJFQU1fRVJST1JfTk9fTUVNID0gOCwKK307CisKK2VudW0gc3RyZWFtX21lc3NhZ2Vfa2luZCB7 CisJU1RSRUFNX01FU1NBR0VfUkVRVUVTVCA9IDAsCisJU1RSRUFNX01FU1NBR0VfUkVTUE9OU0Ug PSAxLAorCVNUUkVBTV9NRVNTQUdFX0RBVEEgPSAyLAorfTsKKworZW51bSBzdHJlYW1fbWVzc2Fn ZV90eXBlIHsKKwlTVFJFQU1fTUVTU0FHRV9SRVNFVCA9IDAsCisJU1RSRUFNX01FU1NBR0VfR0VU X1ZFUlNJT04gPSAxLAorCVNUUkVBTV9NRVNTQUdFX1ZJREVPX1NUUkVBTSA9IDIsCisJU1RSRUFN X01FU1NBR0VfU0hSSU5LX1ZJREVPID0gMywKKwlTVFJFQU1fTUVTU0FHRV9WSURFT19GUkFNRSA9 IDQsCisJU1RSRUFNX01FU1NBR0VfRFVNUF9SRUFMVElNRV9WSURFTyA9IDUsCisJU1RSRUFNX01F U1NBR0VfU1RPUF9EVU1QX1ZJREVPID0gNiwKKwlTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1F X0FVRElPID0gNywKKwlTVFJFQU1fTUVTU0FHRV9TVE9QX0RVTVBfQVVESU8gPSA4LAorfTsKKwor c3RydWN0IGNoYW1lbGl1bV9zdHJlYW0geworCWNoYXIgKmhvc3Q7CisJdW5zaWduZWQgaW50IHBv cnQ7CisKKwlpbnQgZmQ7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyZWFtX2Vycm9yX3N0 cihlbnVtIHN0cmVhbV9lcnJvciBlcnIpCit7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIFNUUkVB TV9FUlJPUl9OT05FOgorCQlyZXR1cm4gIm5vIGVycm9yIjsKKwljYXNlIFNUUkVBTV9FUlJPUl9D T01NQU5EOgorCQlyZXR1cm4gImludmFsaWQgY29tbWFuZCI7CisJY2FzZSBTVFJFQU1fRVJST1Jf QVJHVU1FTlQ6CisJCXJldHVybiAiaW52YWxpZCBhcmd1bWVudHMiOworCWNhc2UgU1RSRUFNX0VS Uk9SX0VYSVNUUzoKKwkJcmV0dXJuICJkdW1wIGFscmVhZHkgc3RhcnRlZCI7CisJY2FzZSBTVFJF QU1fRVJST1JfVklERU9fTUVNX09WRVJGTE9XX1NUT1A6CisJCXJldHVybiAidmlkZW8gZHVtcCBz dG9wcGVkIGFmdGVyIG92ZXJmbG93IjsKKwljYXNlIFNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZF UkZMT1dfRFJPUDoKKwkJcmV0dXJuICJ2aWRlbyBmcmFtZSBkcm9wcGVkIGFmdGVyIG92ZXJmbG93 IjsKKwljYXNlIFNUUkVBTV9FUlJPUl9BVURJT19NRU1fT1ZFUkZMT1dfU1RPUDoKKwkJcmV0dXJu ICJhdWRpbyBkdW1wIHN0b3BwcmVkIGFmdGVyIG92ZXJmbG93IjsKKwljYXNlIFNUUkVBTV9FUlJP Ul9BVURJT19NRU1fT1ZFUkZMT1dfRFJPUDoKKwkJcmV0dXJuICJhdWRpbyBwYWdlIGRyb3BwZWQg YWZ0ZXIgb3ZlcmZsb3ciOworCWNhc2UgU1RSRUFNX0VSUk9SX05PX01FTToKKwkJcmV0dXJuICJv dXQgb2YgbWVtb3J5IjsKKwl9CisJcmV0dXJuICJ1bmtub3duIGVycm9yIjsKK30KKworLyoqCisg KiBUaGUgQ2hhbWVsaXVtIFVSTCBpcyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmls ZS4gV2UgbmVlZCB0byBleHRyYWN0CisgKiB0aGUgaG9zdCB0byBjb25uZWN0IHRvIHRoZSBzdHJl YW0gc2VydmVyLgorICovCitzdGF0aWMgY2hhciAqcGFyc2VfdXJsX2hvc3QoY29uc3QgY2hhciAq dXJsKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByZWZpeFtdID0gImh0dHA6Ly8iOworCWNoYXIg KmNvbG9uOworCisJaWYgKHN0cnN0cih1cmwsIHByZWZpeCkgIT0gdXJsKQorCQlyZXR1cm4gTlVM TDsKKwl1cmwgKz0gc3RybGVuKHByZWZpeCk7CisKKwljb2xvbiA9IHN0cmNocih1cmwsICc6Jyk7 CisJaWYgKCFjb2xvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gc3RybmR1cCh1cmwsIGNv bG9uIC0gdXJsKTsKK30KKworc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWFkX2NvbmZp ZyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQoreworCUdFcnJvciAqZXJyb3IgPSBO VUxMOworCWdjaGFyICpjaGFtZWxpdW1fdXJsOworCisJaWYgKCFpZ3Rfa2V5X2ZpbGUpIHsKKwkJ aWd0X3dhcm4oIk5vIGNvbmZpZ3VyYXRpb24gZmlsZSBhdmFpbGFibGUgZm9yIGNoYW1lbGl1bVxu Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwljaGFtZWxpdW1fdXJsID0gZ19rZXlfZmlsZV9n ZXRfc3RyaW5nKGlndF9rZXlfZmlsZSwgIkNoYW1lbGl1bSIsICJVUkwiLAorCQkJCQkgICAgICAm ZXJyb3IpOworCWlmICghY2hhbWVsaXVtX3VybCkgeworCQlpZ3Rfd2FybigiQ291bGRuJ3QgcmVh ZCBDaGFtZWxpdW0gVVJMIGZyb20gY29uZmlnIGZpbGU6ICVzXG4iLAorCQkJIGVycm9yLT5tZXNz YWdlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWNsaWVudC0+aG9zdCA9IHBhcnNlX3VybF9o b3N0KGNoYW1lbGl1bV91cmwpOworCWlmICghY2xpZW50LT5ob3N0KSB7CisJCWlndF93YXJuKCJJ bnZhbGlkIENoYW1lbGl1bSBVUkwgaW4gY29uZmlnIGZpbGU6ICVzXG4iLAorCQkJIGNoYW1lbGl1 bV91cmwpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWNsaWVudC0+cG9ydCA9IFNUUkVBTV9QT1JU OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fY29u bmVjdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQoreworCWludCByZXQ7CisJY2hh ciBwb3J0X3N0clsxNl07CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzID0ge307CisJc3RydWN0IGFk ZHJpbmZvICpyZXN1bHRzLCAqYWk7CisJc3RydWN0IHRpbWV2YWwgdHYgPSB7fTsKKworCWlndF9k ZWJ1ZygiQ29ubmVjdGluZyB0byBDaGFtZWxpdW0gc3RyZWFtIHNlcnZlcjogdGNwOi8vJXM6JXVc biIsCisJCSAgY2xpZW50LT5ob3N0LCBjbGllbnQtPnBvcnQpOworCisJc25wcmludGYocG9ydF9z dHIsIHNpemVvZihwb3J0X3N0ciksICIldSIsIGNsaWVudC0+cG9ydCk7CisKKwloaW50cy5haV9m YW1pbHkgPSBBRl9VTlNQRUM7CisJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKwly ZXQgPSBnZXRhZGRyaW5mbyhjbGllbnQtPmhvc3QsIHBvcnRfc3RyLCAmaGludHMsICZyZXN1bHRz KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJaWd0X3dhcm4oImdldGFkZHJpbmZvIGZhaWxlZDogJXNc biIsIGdhaV9zdHJlcnJvcihyZXQpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWNsaWVudC0+ ZmQgPSAtMTsKKwlmb3IgKGFpID0gcmVzdWx0czsgYWkgIT0gTlVMTDsgYWkgPSBhaS0+YWlfbmV4 dCkgeworCQljbGllbnQtPmZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlw ZSwKKwkJCQkgICAgYWktPmFpX3Byb3RvY29sKTsKKwkJaWYgKGNsaWVudC0+ZmQgPT0gLTEpCisJ CQljb250aW51ZTsKKworCQlpZiAoY29ubmVjdChjbGllbnQtPmZkLCBhaS0+YWlfYWRkciwgYWkt PmFpX2FkZHJsZW4pID09IC0xKSB7CisJCQljbG9zZShjbGllbnQtPmZkKTsKKwkJCWNsaWVudC0+ ZmQgPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJZnJlZWFkZHJp bmZvKHJlc3VsdHMpOworCisJaWYgKGNsaWVudC0+ZmQgPCAwKSB7CisJCWlndF93YXJuKCJGYWls ZWQgdG8gY29ubmVjdCB0byBDaGFtZWxpdW0gc3RyZWFtIHNlcnZlclxuIik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKiBTZXQgYSByZWFkIGFuZCB3cml0ZSB0aW1lb3V0IG9mIDUgc2Vjb25k cy4gKi8KKwl0di50dl9zZWMgPSA1OworCXNldHNvY2tvcHQoY2xpZW50LT5mZCwgU09MX1NPQ0tF VCwgU09fUkNWVElNRU8sICZ0diwgc2l6ZW9mKHR2KSk7CisJc2V0c29ja29wdChjbGllbnQtPmZk LCBTT0xfU09DS0VULCBTT19TTkRUSU1FTywgJnR2LCBzaXplb2YodHYpKTsKKworCXJldHVybiB0 cnVlOworfQorCitzdGF0aWMgYm9vbCByZWFkX3dob2xlKGludCBmZCwgdm9pZCAqYnVmLCBzaXpl X3QgYnVmX2xlbikKK3sKKwlzc2l6ZV90IHJldDsKKwlzaXplX3QgbiA9IDA7CisJY2hhciAqcHRy OworCisJd2hpbGUgKG4gPCBidWZfbGVuKSB7CisJCXB0ciA9IChjaGFyICopIGJ1ZiArIG47CisJ CXJldCA9IHJlYWQoZmQsIHB0ciwgYnVmX2xlbiAtIG4pOworCQlpZiAocmV0IDwgMCkgeworCQkJ aWd0X3dhcm4oInJlYWQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVy biBmYWxzZTsKKwkJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJaWd0X3dhcm4oInNob3J0IHJl YWRcbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCW4gKz0gcmV0OworCX0KKworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3cml0ZV93aG9sZShpbnQgZmQsIHZvaWQgKmJ1Ziwg c2l6ZV90IGJ1Zl9sZW4pCit7CisJc3NpemVfdCByZXQ7CisJc2l6ZV90IG4gPSAwOworCWNoYXIg KnB0cjsKKworCXdoaWxlIChuIDwgYnVmX2xlbikgeworCQlwdHIgPSAoY2hhciAqKSBidWYgKyBu OworCQlyZXQgPSB3cml0ZShmZCwgcHRyLCBidWZfbGVuIC0gbik7CisJCWlmIChyZXQgPCAwKSB7 CisJCQlpZ3Rfd2Fybigid3JpdGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJ CXJldHVybiBmYWxzZTsKKwkJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJaWd0X3dhcm4oInNo b3J0IHdyaXRlXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQluICs9IHJldDsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVhZF9hbmRfZGlzY2FyZChpbnQgZmQs IHNpemVfdCBsZW4pCit7CisJY2hhciBidWZbMTAyNF07CisJc2l6ZV90IG47CisKKwl3aGlsZSAo bGVuID4gMCkgeworCQluID0gbGVuOworCQlpZiAobiA+IHNpemVvZihidWYpKQorCQkJbiA9IHNp emVvZihidWYpOworCisJCWlmICghcmVhZF93aG9sZShmZCwgYnVmLCBuKSkKKwkJCXJldHVybiBm YWxzZTsKKworCQlsZW4gLT0gbjsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqIFJlYWQg YSBtZXNzYWdlIGhlYWRlciBmcm9tIHRoZSBzb2NrZXQuCisgKgorICogVGhlIGhlYWRlciBpcyBs YWlkIG91dCBhcyBmb2xsb3dzOgorICogLSB1MTY6IG1lc3NhZ2UgdHlwZQorICogLSB1MTY6IGVy cm9yIGNvZGUKKyAqIC0gdTMyOiBtZXNzYWdlIGxlbmd0aAorICovCitzdGF0aWMgYm9vbCBjaGFt ZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQs CisJCQkJCSBlbnVtIHN0cmVhbV9tZXNzYWdlX2tpbmQgKmtpbmQsCisJCQkJCSBlbnVtIHN0cmVh bV9tZXNzYWdlX3R5cGUgKnR5cGUsCisJCQkJCSBlbnVtIHN0cmVhbV9lcnJvciAqZXJyLAorCQkJ CQkgc2l6ZV90ICpsZW4pCit7CisJdWludDE2X3QgX3R5cGU7CisJY2hhciBidWZbOF07CisKKwlp ZiAoIXJlYWRfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBzaXplb2YoYnVmKSkpCisJCXJldHVybiBm YWxzZTsKKworCV90eXBlID0gbnRvaHMoKih1aW50MTZfdCAqKSAmYnVmWzBdKTsKKwkqdHlwZSA9 IF90eXBlICYgMHhGRjsKKwkqa2luZCA9IF90eXBlID4+IDg7CisJKmVyciA9IG50b2hzKCoodWlu dDE2X3QgKikgJmJ1ZlsyXSk7CisJKmxlbiA9IG50b2hsKCoodWludDMyX3QgKikgJmJ1Zls0XSk7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV93cml0 ZV9oZWFkZXIoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKKwkJCQkJICBlbnVtIHN0 cmVhbV9tZXNzYWdlX3R5cGUgdHlwZSwKKwkJCQkJICBlbnVtIHN0cmVhbV9lcnJvciBlcnIsCisJ CQkJCSAgc2l6ZV90IGxlbikKK3sKKwljaGFyIGJ1Zls4XTsKKwl1aW50MTZfdCBfdHlwZTsKKwor CV90eXBlID0gdHlwZSB8IChTVFJFQU1fTUVTU0FHRV9SRVFVRVNUIDw8IDgpOworCisJKih1aW50 MTZfdCAqKSAmYnVmWzBdID0gaHRvbnMoX3R5cGUpOworCSoodWludDE2X3QgKikgJmJ1ZlsyXSA9 IGh0b25zKGVycik7CisJKih1aW50MzJfdCAqKSAmYnVmWzRdID0gaHRvbmwobGVuKTsKKworCXJl dHVybiB3cml0ZV93aG9sZShjbGllbnQtPmZkLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3Rh dGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWFkX3Jlc3BvbnNlKHN0cnVjdCBjaGFtZWxpdW1f c3RyZWFtICpjbGllbnQsCisJCQkJCSAgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLAor CQkJCQkgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQoreworCWVudW0gc3RyZWFtX21lc3Nh Z2Vfa2luZCByZWFkX2tpbmQ7CisJZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHJlYWRfdHlwZTsK KwllbnVtIHN0cmVhbV9lcnJvciByZWFkX2VycjsKKwlzaXplX3QgcmVhZF9sZW47CisKKwlpZiAo IWNoYW1lbGl1bV9zdHJlYW1fcmVhZF9oZWFkZXIoY2xpZW50LCAmcmVhZF9raW5kLCAmcmVhZF90 eXBlLAorCQkJCQkgICZyZWFkX2VyciwgJnJlYWRfbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKHJlYWRfa2luZCAhPSBTVFJFQU1fTUVTU0FHRV9SRVNQT05TRSkgeworCQlpZ3Rfd2Fybigi RXhwZWN0ZWQgYSByZXNwb25zZSwgZ290IGtpbmQgJWRcbiIsIHJlYWRfa2luZCk7CisJCXJldHVy biBmYWxzZTsKKwl9CisJaWYgKHJlYWRfdHlwZSAhPSB0eXBlKSB7CisJCWlndF93YXJuKCJFeHBl Y3RlZCBtZXNzYWdlIHR5cGUgJWQsIGdvdCAlZFxuIiwKKwkJCSB0eXBlLCByZWFkX3R5cGUpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChyZWFkX2VyciAhPSBTVFJFQU1fRVJST1JfTk9ORSkg eworCQlpZ3Rfd2FybigiUmVjZWl2ZWQgZXJyb3I6ICVzICglZClcbiIsCisJCQkgc3RyZWFtX2Vy cm9yX3N0cihyZWFkX2VyciksIHJlYWRfZXJyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAo YnVmX2xlbiAhPSByZWFkX2xlbikgeworCQlpZ3Rfd2FybigiUmVjZWl2ZWQgaW52YWxpZCBtZXNz YWdlIGJvZHkgc2l6ZSAiCisJCQkgIihnb3QgJXp1IGJ5dGVzLCB3YW50ICV6dSBieXRlcylcbiIs CisJCQkgcmVhZF9sZW4sIGJ1Zl9sZW4pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJu IHJlYWRfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBidWZfbGVuKTsKK30KKworc3RhdGljIGJvb2wg Y2hhbWVsaXVtX3N0cmVhbV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpj bGllbnQsCisJCQkJCSAgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLAorCQkJCQkgICB2 b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQoreworCWlmICghY2hhbWVsaXVtX3N0cmVhbV93cml0 ZV9oZWFkZXIoY2xpZW50LCB0eXBlLCBTVFJFQU1fRVJST1JfTk9ORSwKKwkJCQkJICAgYnVmX2xl bikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChidWZfbGVuID09IDApCisJCXJldHVybiB0cnVl OworCisJcmV0dXJuIHdyaXRlX3dob2xlKGNsaWVudC0+ZmQsIGJ1ZiwgYnVmX2xlbik7Cit9CisK K3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fY2FsbChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVh bSAqY2xpZW50LAorCQkJCSAgZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGUsCisJCQkJICB2 b2lkICpyZXFfYnVmLCBzaXplX3QgcmVxX2xlbiwKKwkJCQkgIHZvaWQgKnJlc3BfYnVmLCBzaXpl X3QgcmVzcF9sZW4pCit7CisJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3dyaXRlX3JlcXVlc3QoY2xp ZW50LCB0eXBlLCByZXFfYnVmLCByZXFfbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJu IGNoYW1lbGl1bV9zdHJlYW1fcmVhZF9yZXNwb25zZShjbGllbnQsIHR5cGUsIHJlc3BfYnVmLCBy ZXNwX2xlbik7Cit9CisKK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fY2hlY2tfdmVyc2lv bihzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQoreworCWNoYXIgcmVzcFsyXTsKKwl1 aW50OF90IG1ham9yLCBtaW5vcjsKKworCWlmICghY2hhbWVsaXVtX3N0cmVhbV9jYWxsKGNsaWVu dCwgU1RSRUFNX01FU1NBR0VfR0VUX1ZFUlNJT04sCisJCQkJICAgTlVMTCwgMCwgcmVzcCwgc2l6 ZW9mKHJlc3ApKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbWFqb3IgPSByZXNwWzBdOworCW1pbm9y ID0gcmVzcFsxXTsKKwlpZiAobWFqb3IgIT0gU1RSRUFNX1ZFUlNJT05fTUFKT1IgfHwgbWlub3Ig PCBTVFJFQU1fVkVSU0lPTl9NSU5PUikgeworCQlpZ3Rfd2FybigiVmVyc2lvbiBtaXNtYXRjaCAo d2FudCAlZC4lZCwgZ290ICVkLiVkKVxuIiwKKwkJCSBTVFJFQU1fVkVSU0lPTl9NQUpPUiwgU1RS RUFNX1ZFUlNJT05fTUlOT1IsCisJCQkgbWFqb3IsIG1pbm9yKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGNoYW1lbGl1bV9zdHJlYW1fZHVtcF9y ZWFsdGltZV9hdWRpbzoKKyAqCisgKiBTdGFydHMgYXVkaW8gY2FwdHVyZS4gVGhlIGNhbGxlciBj YW4gdGhlbiBjYWxsCisgKiAjY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1ZGlv IHRvIHJlY2VpdmUgYXVkaW8gcGFnZXMuCisgKi8KK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9kdW1w X3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCisJCQkJCSAg ZW51bSBjaGFtZWxpdW1fc3RyZWFtX3JlYWx0aW1lX21vZGUgbW9kZSkKK3sKKwljaGFyIHJlcVsx XTsKKworCWlndF9kZWJ1ZygiU3RhcnRpbmcgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmVcbiIpOwor CisJcmVxWzBdID0gbW9kZTsKKwlyZXR1cm4gY2hhbWVsaXVtX3N0cmVhbV9jYWxsKGNsaWVudCwg U1RSRUFNX01FU1NBR0VfRFVNUF9SRUFMVElNRV9BVURJTywKKwkJCQkgICAgIHJlcSwgc2l6ZW9m KHJlcSksIE5VTEwsIDApOworfQorCisvKioKKyAqIGNoYW1lbGl1bV9zdHJlYW1fcmVjZWl2ZV9y ZWFsdGltZV9hdWRpbzoKKyAqIEBwYWdlX2NvdW50OiBpZiBub24tTlVMTCwgd2lsbCBiZSBzZXQg dG8gdGhlIGR1bXBlZCBwYWdlIG51bWJlcgorICogQGJ1ZjogbXVzdCBlaXRoZXIgcG9pbnQgdG8g YSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IHJlZ2lvbiBvciBOVUxMCisgKiBAYnVmX2xl bjogbnVtYmVyIG9mIGVsZW1lbnRzIG9mICpAYnVmLCBmb3IgemVybyBpZiBAYnVmIGlzIE5VTEwK KyAqCisgKiBSZWNlaXZlcyBvbmUgYXVkaW8gcGFnZSBmcm9tIHRoZSBzdHJlYW1pbmcgc2VydmVy LgorICoKKyAqIEluICJiZXN0IGVmZm9ydCIgbW9kZSwgc29tZSBwYWdlcyBjYW4gYmUgZHJvcHBl ZC4gVGhpcyBjYW4gYmUgZGV0ZWN0ZWQgdmlhCisgKiB0aGUgcGFnZSBjb3VudC4KKyAqCisgKiBi dWZfbGVuIHdpbGwgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBwYWdlLiBUaGUgY2FsbGVyIGlz IHJlc3BvbnNpYmxlIGZvcgorICogY2FsbGluZyBmcmVlKDMpIG9uICpidWYuCisgKi8KK2Jvb2wg Y2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1f c3RyZWFtICpjbGllbnQsCisJCQkJCSAgICAgc2l6ZV90ICpwYWdlX2NvdW50LAorCQkJCQkgICAg IGludDMyX3QgKipidWYsIHNpemVfdCAqYnVmX2xlbikKK3sKKwllbnVtIHN0cmVhbV9tZXNzYWdl X2tpbmQga2luZDsKKwllbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZTsKKwllbnVtIHN0cmVh bV9lcnJvciBlcnI7CisJc2l6ZV90IGJvZHlfbGVuOworCWNoYXIgcGFnZV9jb3VudF9idWZbNF07 CisJaW50MzJfdCAqcHRyOworCisJd2hpbGUgKHRydWUpIHsKKwkJaWYgKCFjaGFtZWxpdW1fc3Ry ZWFtX3JlYWRfaGVhZGVyKGNsaWVudCwgJmtpbmQsICZ0eXBlLAorCQkJCQkJICAmZXJyLCAmYm9k eV9sZW4pKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChraW5kICE9IFNUUkVBTV9NRVNTQUdF X0RBVEEpIHsKKwkJCWlndF93YXJuKCJFeHBlY3RlZCBhIGRhdGEgbWVzc2FnZSwgZ290IGtpbmQg JWRcbiIsIGtpbmQpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWlmICh0eXBlICE9IFNUUkVB TV9NRVNTQUdFX0RVTVBfUkVBTFRJTUVfQVVESU8pIHsKKwkJCWlndF93YXJuKCJFeHBlY3RlZCBy ZWFsLXRpbWUgYXVkaW8gZHVtcCBtZXNzYWdlLCAiCisJCQkJICJnb3QgdHlwZSAlZFxuIiwgdHlw ZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlpZiAoZXJyID09IFNUUkVBTV9FUlJPUl9O T05FKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKGVyciAhPSBTVFJFQU1fRVJST1JfQVVESU9fTUVN X09WRVJGTE9XX0RST1ApIHsKKwkJCWlndF93YXJuKCJSZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxu IiwKKwkJCQkgc3RyZWFtX2Vycm9yX3N0cihlcnIpLCBlcnIpOworCQkJcmV0dXJuIGZhbHNlOwor CQl9CisKKwkJaWd0X2RlYnVnKCJEcm9wcGVkIGFuIGF1ZGlvIHBhZ2UgYmVjYXVzZSBvZiBhbiBv dmVyZmxvd1xuIik7CisJCWlndF9hc3NlcnQoYm9keV9sZW4gPT0gMCk7CisJfQorCisJaWd0X2Fz c2VydChib2R5X2xlbiA+PSBzaXplb2YocGFnZV9jb3VudF9idWYpKTsKKworCWlmICghcmVhZF93 aG9sZShjbGllbnQtPmZkLCBwYWdlX2NvdW50X2J1Ziwgc2l6ZW9mKHBhZ2VfY291bnRfYnVmKSkp CisJCXJldHVybiBmYWxzZTsKKwlpZiAocGFnZV9jb3VudCkKKwkJKnBhZ2VfY291bnQgPSBudG9o bCgqKHVpbnQzMl90ICopICZwYWdlX2NvdW50X2J1ZlswXSk7CisJYm9keV9sZW4gLT0gc2l6ZW9m KHBhZ2VfY291bnRfYnVmKTsKKworCWlndF9hc3NlcnQoYm9keV9sZW4gJSBzaXplb2YoaW50MzJf dCkgPT0gMCk7CisJaWYgKCpidWZfbGVuICogc2l6ZW9mKGludDMyX3QpICE9IGJvZHlfbGVuKSB7 CisJCXB0ciA9IHJlYWxsb2MoKmJ1ZiwgYm9keV9sZW4pOworCQlpZiAoIXB0cikgeworCQkJaWd0 X3dhcm4oInJlYWxsb2MgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVy biBmYWxzZTsKKwkJfQorCQkqYnVmID0gcHRyOworCQkqYnVmX2xlbiA9IGJvZHlfbGVuIC8gc2l6 ZW9mKGludDMyX3QpOworCX0KKworCXJldHVybiByZWFkX3dob2xlKGNsaWVudC0+ZmQsICpidWYs IGJvZHlfbGVuKTsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fc3RyZWFtX3N0b3BfcmVhbHRpbWVf YXVkaW86CisgKgorICogU3RvcHMgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmUuIFRoaXMgYWxzbyBk cm9wcyBhbnkgYnVmZmVyZWQgYXVkaW8gcGFnZXMuCisgKiBUaGUgY2FsbGVyIHNob3VsZG4ndCBj YWxsICNjaGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8gYWZ0ZXIKKyAqIHN0 b3BwaW5nIGF1ZGlvIGNhcHR1cmUuCisgKi8KK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9zdG9wX3Jl YWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpCit7CisJZW51bSBz dHJlYW1fbWVzc2FnZV9raW5kIGtpbmQ7CisJZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGU7 CisJZW51bSBzdHJlYW1fZXJyb3IgZXJyOworCXNpemVfdCBsZW47CisKKwlpZ3RfZGVidWcoIlN0 b3BwaW5nIHJlYWwtdGltZSBhdWRpbyBjYXB0dXJlXG4iKTsKKworCWlmICghY2hhbWVsaXVtX3N0 cmVhbV93cml0ZV9yZXF1ZXN0KGNsaWVudCwKKwkJCQkJICAgIFNUUkVBTV9NRVNTQUdFX1NUT1Bf RFVNUF9BVURJTywKKwkJCQkJICAgIE5VTEwsIDApKQorCQlyZXR1cm4gZmFsc2U7CisKKwl3aGls ZSAodHJ1ZSkgeworCQlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fcmVhZF9oZWFkZXIoY2xpZW50LCAm a2luZCwgJnR5cGUsCisJCQkJCQkgICZlcnIsICZsZW4pKQorCQkJcmV0dXJuIGZhbHNlOworCisJ CWlmIChraW5kID09IFNUUkVBTV9NRVNTQUdFX1JFU1BPTlNFKQorCQkJYnJlYWs7CisKKwkJaWYg KCFyZWFkX2FuZF9kaXNjYXJkKGNsaWVudC0+ZmQsIGxlbikpCisJCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJaWYgKHR5cGUgIT0gU1RSRUFNX01FU1NBR0VfU1RPUF9EVU1QX0FVRElPKSB7CisJCWln dF93YXJuKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgJWRcbiIsIHR5cGUpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCWlmIChlcnIgIT0gU1RSRUFNX0VSUk9SX05PTkUpIHsKKwkJaWd0X3dhcm4o IlJlY2VpdmVkIGVycm9yOiAlcyAoJWQpXG4iLAorCQkJIHN0cmVhbV9lcnJvcl9zdHIoZXJyKSwg ZXJyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAobGVuICE9IDApIHsKKwkJaWd0X3dhcm4o IkV4cGVjdGVkIGFuIGVtcHR5IHJlc3BvbnNlLCBnb3QgJXp1IGJ5dGVzXG4iLCBsZW4pOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogY2hhbWVsaXVt X3N0cmVhbV9hdWRpb19mb3JtYXQ6CisgKgorICogR2V0cyB0aGUgZm9ybWF0IHVzZWQgZm9yIGF1 ZGlvIHBhZ2VzLgorICoKKyAqIERhdGEgd2lsbCBhbHdheXMgYmUgY2FwdHVyZWQgaW4gcmF3IHBh Z2VzIG9mIFMzMl9MRSBlbGVtZW50cy4gVGhpcyBmdW5jdGlvbgorICogZXhwb3NlcyB0aGUgc2Ft cGxpbmcgcmF0ZSBhbmQgdGhlIG51bWJlciBvZiBjaGFubmVscy4KKyAqLwordm9pZCBjaGFtZWxp dW1fc3RyZWFtX2F1ZGlvX2Zvcm1hdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtLAor CQkJCSAgIGludCAqcmF0ZSwgaW50ICpjaGFubmVscykKK3sKKwkvKiBUT0RPOiB0aGUgQ2hhbWVs aXVtIHN0cmVhbWluZyBzZXJ2ZXIgZG9lc24ndCBleHBvc2UgdGhvc2UgeWV0LgorCSAqIEp1c3Qg aGFyZGNvZGUgdGhlIHZhbHVlcyBmb3Igbm93LiAqLworCSpyYXRlID0gNDgwMDA7CisJKmNoYW5u ZWxzID0gODsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fc3RyZWFtX2luaXQ6CisgKgorICogQ29u bmVjdHMgdG8gdGhlIENoYW1lbGl1bSBzdHJlYW1pbmcgc2VydmVyLgorICovCitzdHJ1Y3QgY2hh bWVsaXVtX3N0cmVhbSAqY2hhbWVsaXVtX3N0cmVhbV9pbml0KHZvaWQpCit7CisJc3RydWN0IGNo YW1lbGl1bV9zdHJlYW0gKmNsaWVudDsKKworCWNsaWVudCA9IGNhbGxvYygxLCBzaXplb2YoKmNs aWVudCkpOworCisJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3JlYWRfY29uZmlnKGNsaWVudCkpCisJ CWdvdG8gZXJyb3JfY2xpZW50OworCWlmICghY2hhbWVsaXVtX3N0cmVhbV9jb25uZWN0KGNsaWVu dCkpCisJCWdvdG8gZXJyb3JfY2xpZW50OworCWlmICghY2hhbWVsaXVtX3N0cmVhbV9jaGVja192 ZXJzaW9uKGNsaWVudCkpCisJCWdvdG8gZXJyb3JfZmQ7CisKKwlyZXR1cm4gY2xpZW50OworCitl cnJvcl9mZDoKKwljbG9zZShjbGllbnQtPmZkKTsKK2Vycm9yX2NsaWVudDoKKwlmcmVlKGNsaWVu dCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgY2hhbWVsaXVtX3N0cmVhbV9kZWluaXQoc3Ry dWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKK3sKKwlpZiAoY2xvc2UoY2xpZW50LT5mZCkg IT0gMCkKKwkJaWd0X3dhcm4oImNsb3NlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 CisJZnJlZShjbGllbnQpOworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFt LmggYi9saWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMC4uZGU0ZTk5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2NoYW1lbGl1 bV9zdHJlYW0uaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKgorICogQXV0aG9yczogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgorICov CisKKyNpZm5kZWYgSUdUX0NIQU1FTElVTV9TVFJFQU1fSAorI2RlZmluZSBJR1RfQ0hBTUVMSVVN X1NUUkVBTV9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKworZW51bSBjaGFtZWxpdW1fc3RyZWFt X3JlYWx0aW1lX21vZGUgeworCUNIQU1FTElVTV9TVFJFQU1fUkVBTFRJTUVfTk9ORSA9IDAsCisJ Lyogc3RvcCBkdW1waW5nIHdoZW4gb3ZlcmZsb3cgKi8KKwlDSEFNRUxJVU1fU1RSRUFNX1JFQUxU SU1FX1NUT1BfV0hFTl9PVkVSRkxPVyA9IDEsCisJLyogZHJvcCBkYXRhIG9uIG92ZXJmbG93ICov CisJQ0hBTUVMSVVNX1NUUkVBTV9SRUFMVElNRV9CRVNUX0VGRk9SVCA9IDIsCit9OworCitzdHJ1 Y3QgY2hhbWVsaXVtX3N0cmVhbTsKKworc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNoYW1lbGl1 bV9zdHJlYW1faW5pdCh2b2lkKTsKK3ZvaWQgY2hhbWVsaXVtX3N0cmVhbV9kZWluaXQoc3RydWN0 IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCk7Citib29sIGNoYW1lbGl1bV9zdHJlYW1fZHVtcF9y ZWFsdGltZV9hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAorCQkJCQkgIGVu dW0gY2hhbWVsaXVtX3N0cmVhbV9yZWFsdGltZV9tb2RlIG1vZGUpOwordm9pZCBjaGFtZWxpdW1f c3RyZWFtX2F1ZGlvX2Zvcm1hdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtLAorCQkJ CSAgIGludCAqcmF0ZSwgaW50ICpjaGFubmVscyk7Citib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVj ZWl2ZV9yZWFsdGltZV9hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAorCQkJ CQkgICAgIHNpemVfdCAqcGFnZV9jb3VudCwKKwkJCQkJICAgICBpbnQzMl90ICoqYnVmLCBzaXpl X3QgKmJ1Zl9sZW4pOworYm9vbCBjaGFtZWxpdW1fc3RyZWFtX3N0b3BfcmVhbHRpbWVfYXVkaW8o c3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv bGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDk3ZjcwMWM3Li5lMGI5Y2Y1 MSAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWlsZApAQCAt OTQsNyArOTQsNyBAQCBpZiB2YWxncmluZC5mb3VuZCgpCiBlbmRpZgogCiBpZiBnc2wuZm91bmQo KQotCWxpYl9kZXBzICs9IFsgZ3NsIF0KKwlsaWJfZGVwcyArPSBnc2wKIAlsaWJfc291cmNlcyAr PSBbICdpZ3RfZnJhbWUuYycsICdpZ3RfYXVkaW8uYycgXQogZW5kaWYKIApAQCAtMTAzLDkgKzEw MywxMCBAQCBpZiBhbHNhLmZvdW5kKCkKIAlsaWJfc291cmNlcyArPSAnaWd0X2Fsc2EuYycKIGVu ZGlmCiAKLWlmIGNoYW1lbGl1bS5mb3VuZCgpCitpZiBjaGFtZWxpdW1fZm91bmQKIAlsaWJfZGVw cyArPSBjaGFtZWxpdW0KIAlsaWJfc291cmNlcyArPSAnaWd0X2NoYW1lbGl1bS5jJworCWxpYl9z b3VyY2VzICs9ICdpZ3RfY2hhbWVsaXVtX3N0cmVhbS5jJwogZW5kaWYKIAogc3JjZGlyID0gam9p bl9wYXRocyhtZXNvbi5zb3VyY2Vfcm9vdCgpLCAndGVzdHMnKQpkaWZmIC0tZ2l0IGEvbWVzb24u YnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCA1NTc0MDBhNS4uYmU2ZGZmOWQgMTAwNjQ0Ci0tLSBh L21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC02NCw4ICs2NCw2IEBAIF9idWlsZF9v dmVybGF5ID0gZmFsc2UKIF9vdmVybGF5X3JlcXVpcmVkID0gZmFsc2UKIF9idWlsZF9tYW4gPSBm YWxzZQogX21hbl9yZXF1aXJlZCA9IGZhbHNlCi1fYnVpbGRfYXVkaW8gPSBmYWxzZQotX2F1ZGlv X3JlcXVpcmVkID0gZmFsc2UKIF9idWlsZF9jaGFtZWxpdW0gPSBmYWxzZQogX2NoYW1lbGl1bV9y ZXF1aXJlZCA9IGZhbHNlCiBfYnVpbGRfZG9jcyA9IGZhbHNlCkBAIC03OSw3ICs3Nyw2IEBAIGJ1 aWxkX292ZXJsYXkgPSBnZXRfb3B0aW9uKCdidWlsZF9vdmVybGF5JykKIG92ZXJsYXlfYmFja2Vu ZHMgPSBnZXRfb3B0aW9uKCdvdmVybGF5X2JhY2tlbmRzJykKIGJ1aWxkX21hbiA9IGdldF9vcHRp b24oJ2J1aWxkX21hbicpCiB3aXRoX3ZhbGdyaW5kID0gZ2V0X29wdGlvbignd2l0aF92YWxncmlu ZCcpCi1idWlsZF9hdWRpbyA9IGdldF9vcHRpb24oJ2J1aWxkX2F1ZGlvJykKIGJ1aWxkX2NoYW1l bGl1bSA9IGdldF9vcHRpb24oJ2J1aWxkX2NoYW1lbGl1bScpCiBidWlsZF9kb2NzID0gZ2V0X29w dGlvbignYnVpbGRfZG9jcycpCiBidWlsZF90ZXN0cyA9IGdldF9vcHRpb24oJ2J1aWxkX3Rlc3Rz JykKQEAgLTkxLDggKzg4LDYgQEAgX2J1aWxkX292ZXJsYXkgPSBidWlsZF9vdmVybGF5ICE9ICdm YWxzZScKIF9vdmVybGF5X3JlcXVpcmVkID0gYnVpbGRfb3ZlcmxheSA9PSAndHJ1ZScKIF9idWls ZF9tYW4gPSBidWlsZF9tYW4gIT0gJ2ZhbHNlJwogX21hbl9yZXF1aXJlZCA9IGJ1aWxkX21hbiA9 PSAndHJ1ZScKLV9idWlsZF9hdWRpbyA9IGJ1aWxkX2F1ZGlvICE9ICdmYWxzZScKLV9hdWRpb19y ZXF1aXJlZCA9IGJ1aWxkX2F1ZGlvID09ICd0cnVlJwogX2J1aWxkX2NoYW1lbGl1bSA9IGJ1aWxk X2NoYW1lbGl1bSAhPSAnZmFsc2UnCiBfY2hhbWVsaXVtX3JlcXVpcmVkID0gYnVpbGRfY2hhbWVs aXVtID09ICd0cnVlJwogX2J1aWxkX2RvY3MgPSBidWlsZF9kb2NzICE9ICdmYWxzZScKQEAgLTE2 NiwyNiArMTYxLDYgQEAgY2Fpcm8gPSBkZXBlbmRlbmN5KCdjYWlybycsIHZlcnNpb24gOiAnPjEu MTIuMCcsIHJlcXVpcmVkIDogdHJ1ZSkKIGxpYnVkZXYgPSBkZXBlbmRlbmN5KCdsaWJ1ZGV2Jywg cmVxdWlyZWQgOiB0cnVlKQogZ2xpYiA9IGRlcGVuZGVuY3koJ2dsaWItMi4wJywgcmVxdWlyZWQg OiB0cnVlKQogCi1nc2wgPSBudWxsX2RlcAotYWxzYSA9IG51bGxfZGVwCi1pZiBfYnVpbGRfYXVk aW8gb3IgX2J1aWxkX2NoYW1lbGl1bQotCWdzbCA9IGRlcGVuZGVuY3koJ2dzbCcsIHJlcXVpcmVk IDogX2F1ZGlvX3JlcXVpcmVkIG9yIF9jaGFtZWxpdW1fcmVxdWlyZWQpCi1lbmRpZgotaWYgX2J1 aWxkX2F1ZGlvCi0JYWxzYSA9IGRlcGVuZGVuY3koJ2Fsc2EnLCByZXF1aXJlZCA6IF9hdWRpb19y ZXF1aXJlZCkKLWVuZGlmCi0KLWF1ZGlvaW5mbyA9ICdObycKLWlmIF9idWlsZF9hdWRpbyBhbmQg YWxzYS5mb3VuZCgpIGFuZCBnc2wuZm91bmQoKQotCWF1ZGlvaW5mbyA9ICdZZXMnCi1lbHNlCi0J aWYgX2F1ZGlvX3JlcXVpcmVkCi0JCWVycm9yKCdDYW5ub3QgYnVpbGQgYXVkaW8gdGVzdCBkdWUg dG8gbWlzc2luZyBkZXBlbmRlbmNpZXMnKQotCWVuZGlmCi0JX2J1aWxkX2F1ZGlvID0gZmFsc2UK LWVuZGlmCi1idWlsZF9pbmZvICs9ICdCdWlsZCBhdWRpbyB0ZXN0OiAnICsgYXVkaW9pbmZvCi0K IHhtbHJwYyA9IGRlcGVuZGVuY3koJ3htbHJwYycsIHJlcXVpcmVkIDogZmFsc2UpCiB4bWxycGNf dXRpbCA9IGRlcGVuZGVuY3koJ3htbHJwY191dGlsJywgcmVxdWlyZWQgOiBmYWxzZSkKIHhtbHJw Y19jbGllbnQgPSBkZXBlbmRlbmN5KCd4bWxycGNfY2xpZW50JywgcmVxdWlyZWQgOiBmYWxzZSkK QEAgLTE5NywyMSArMTcyLDMyIEBAIGlmIG5vdCB4bWxycGMuZm91bmQoKSBhbmQgeG1scnBjX2Nt ZC5mb3VuZCgpCiAKIAlpZiBsaWJzX2NtZC5yZXR1cm5jb2RlKCkgPT0gMCBhbmQgY2ZsYWdzX2Nt ZC5yZXR1cm5jb2RlKCkgPT0gMAogCQl4bWxycGMgPSBkZWNsYXJlX2RlcGVuZGVuY3koY29tcGls ZV9hcmdzOiBjZmxhZ3NfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSwKLQkJCQkJICAgbGlu a19hcmdzIDogbGlic19jbWQuc3Rkb3V0KCkuc3RyaXAoKS5zcGxpdCgpKQorCQkJCQkgICAgbGlu a19hcmdzIDogbGlic19jbWQuc3Rkb3V0KCkuc3RyaXAoKS5zcGxpdCgpKQogCQl4bWxycGNfdXRp bCA9IGRlY2xhcmVfZGVwZW5kZW5jeSgpCiAJCXhtbHJwY19jbGllbnQgPSBkZWNsYXJlX2RlcGVu ZGVuY3koKQogCWVuZGlmCiBlbmRpZgogCitnc2wgPSBudWxsX2RlcAorYWxzYSA9IG51bGxfZGVw CiBjaGFtZWxpdW0gPSBudWxsX2RlcAorY2hhbWVsaXVtX2ZvdW5kID0gZmFsc2UgIyBUT0RPOiB1 c2UgYSBkaXNhYmxlciBvYmplY3QgaW5zdGVhZAogY2hhbWVsaXVtaW5mbyA9ICdObycKLWlmIF9i dWlsZF9jaGFtZWxpdW0gYW5kIGdzbC5mb3VuZCgpIGFuZCB4bWxycGMuZm91bmQoKSBhbmQgeG1s cnBjX3V0aWwuZm91bmQoKSBhbmQgeG1scnBjX2NsaWVudC5mb3VuZCgpCi0JY2hhbWVsaXVtID0g ZGVjbGFyZV9kZXBlbmRlbmN5KGRlcGVuZGVuY2llcyA6IFsgeG1scnBjLAotCQkJCQkJCXhtbHJw Y191dGlsLCB4bWxycGNfY2xpZW50XSkKLQljb25maWcuc2V0KCdIQVZFX0NIQU1FTElVTScsIDEp Ci0JY2hhbWVsaXVtaW5mbyA9ICdZZXMnCi1lbGlmIF9jaGFtZWxpdW1fcmVxdWlyZWQKLQllcnJv cignQ2Fubm90IGJ1aWxkIGNoYW1lbGl1bSB0ZXN0IGR1ZSB0byBtaXNzaW5nIGRlcGVuZGVuY2ll cycpCitpZiBfYnVpbGRfY2hhbWVsaXVtCisJZ3NsID0gZGVwZW5kZW5jeSgnZ3NsJywgcmVxdWly ZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQorCWFsc2EgPSBkZXBlbmRlbmN5KCdhbHNhJywgcmVx dWlyZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQorCWNoYW1lbGl1bSA9IGRlY2xhcmVfZGVwZW5k ZW5jeShkZXBlbmRlbmNpZXMgOiBbCisJCXhtbHJwYywKKwkJeG1scnBjX3V0aWwsCisJCXhtbHJw Y19jbGllbnQsCisJCWdzbCwKKwkJYWxzYSwKKwldLCByZXF1aXJlZCA6IF9jaGFtZWxpdW1fcmVx dWlyZWQpCisJaWYgeG1scnBjLmZvdW5kKCkgYW5kIHhtbHJwY191dGlsLmZvdW5kKCkgYW5kIHht bHJwY19jbGllbnQuZm91bmQoKSBhbmQgZ3NsLmZvdW5kKCkgYW5kIGFsc2EuZm91bmQoKQorCQlj b25maWcuc2V0KCdIQVZFX0NIQU1FTElVTScsIDEpCisJCWNoYW1lbGl1bWluZm8gPSAnWWVzJwor CQljaGFtZWxpdW1fZm91bmQgPSB0cnVlCisJZW5kaWYKIGVuZGlmCiBidWlsZF9pbmZvICs9ICdC dWlsZCBDaGFtZWxpdW0gdGVzdDogJyArIGNoYW1lbGl1bWluZm8KIApkaWZmIC0tZ2l0IGEvbWVz b25fb3B0aW9ucy50eHQgYi9tZXNvbl9vcHRpb25zLnR4dAppbmRleCAwY2QzYjM1MC4uODg4ZWZl NTYgMTAwNjQ0Ci0tLSBhL21lc29uX29wdGlvbnMudHh0CisrKyBiL21lc29uX29wdGlvbnMudHh0 CkBAIC0xMCwxMiArMTAsNiBAQCBvcHRpb24oJ292ZXJsYXlfYmFja2VuZHMnLAogICAgICAgIGNo b2ljZXMgOiBbICdhdXRvJywgJ3gnLCAneHYnIF0sCiAgICAgICAgZGVzY3JpcHRpb24gOiAnT3Zl cmxheSBiYWNrZW5kcyB0byBlbmFibGUnKQogCi1vcHRpb24oJ2J1aWxkX2F1ZGlvJywKLSAgICAg ICB0eXBlIDogJ2NvbWJvJywKLSAgICAgICB2YWx1ZSA6ICdhdXRvJywKLSAgICAgICBjaG9pY2Vz IDogWydhdXRvJywgJ3RydWUnLCAnZmFsc2UnXSwKLSAgICAgICBkZXNjcmlwdGlvbiA6ICdCdWls ZCBhdWRpbyB0ZXN0JykKLQogb3B0aW9uKCdidWlsZF9jaGFtZWxpdW0nLAogICAgICAgIHR5cGUg OiAnY29tYm8nLAogICAgICAgIHZhbHVlIDogJ2F1dG8nLApkaWZmIC0tZ2l0IGEvdGVzdHMvYXVk aW8uYyBiL3Rlc3RzL2F1ZGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MDg3 NmEzLi4wMDAwMDAwMAotLS0gYS90ZXN0cy9hdWRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkz ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoK LSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdh cmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3Jz OgotICogIFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBsaW51eC5pbnRlbC5j b20+Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImlndC5oIgotCi0jZGVm aW5lIFBMQVlCQUNLX0NIQU5ORUxTCTIKLSNkZWZpbmUgUExBWUJBQ0tfRlJBTUVTCQkxMDI0Ci0K LSNkZWZpbmUgQ0FQVFVSRV9TQU1QTEVfUkFURQk0ODAwMAotI2RlZmluZSBDQVBUVVJFX0NIQU5O RUxTCTIKLSNkZWZpbmUgQ0FQVFVSRV9ERVZJQ0VfTkFNRQkiZGVmYXVsdCIKLSNkZWZpbmUgQ0FQ VFVSRV9GUkFNRVMJCTIwNDgKLQotI2RlZmluZSBSVU5fVElNRU9VVAkJMjAwMAotCi1zdHJ1Y3Qg dGVzdF9kYXRhIHsKLQlzdHJ1Y3QgYWxzYSAqYWxzYTsKLQlzdHJ1Y3QgYXVkaW9fc2lnbmFsICpz aWduYWw7Ci0KLQlpbnQgc3RyZWFrOwotfTsKLQotc3RhdGljIGludCBzYW1wbGluZ19yYXRlc1td ID0gewotCTMyMDAwLAotCTQ0MTAwLAotCTQ4MDAwLAotCTg4MjAwLAotCTk2MDAwLAotCTE3NjQw MCwKLQkxOTIwMDAsCi19OwotCi1zdGF0aWMgaW50IHNhbXBsaW5nX3JhdGVzX2NvdW50ID0gc2l6 ZW9mKHNhbXBsaW5nX3JhdGVzKSAvIHNpemVvZihpbnQpOwotCi1zdGF0aWMgaW50IHRlc3RfZnJl cXVlbmNpZXNbXSA9IHsKLQkzMDAsCi0JNjAwLAotCTEyMDAsCi0JODAwMDAsCi0JMTAwMDAsCi19 OwotCi1zdGF0aWMgaW50IHRlc3RfZnJlcXVlbmNpZXNfY291bnQgPSBzaXplb2YodGVzdF9mcmVx dWVuY2llcykgLyBzaXplb2YoaW50KTsKLQotc3RhdGljIGludCBvdXRwdXRfY2FsbGJhY2sodm9p ZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcykKLXsKLQlzdHJ1Y3QgdGVzdF9kYXRh ICp0ZXN0X2RhdGEgPSAoc3RydWN0IHRlc3RfZGF0YSAqKSBkYXRhOwotCi0JYXVkaW9fc2lnbmFs X2ZpbGwodGVzdF9kYXRhLT5zaWduYWwsIGJ1ZmZlciwgZnJhbWVzKTsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IGlucHV0X2NhbGxiYWNrKHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIs IGludCBmcmFtZXMpCi17Ci0Jc3RydWN0IHRlc3RfZGF0YSAqdGVzdF9kYXRhID0gKHN0cnVjdCB0 ZXN0X2RhdGEgKikgZGF0YTsKLQlib29sIGRldGVjdDsKLQotCWRldGVjdCA9IGF1ZGlvX3NpZ25h bF9kZXRlY3QodGVzdF9kYXRhLT5zaWduYWwsIENBUFRVUkVfQ0hBTk5FTFMsCi0JCQkJICAgICBD QVBUVVJFX1NBTVBMRV9SQVRFLCBidWZmZXIsIGZyYW1lcyk7Ci0JaWYgKGRldGVjdCkKLQkJdGVz dF9kYXRhLT5zdHJlYWsrKzsKLQllbHNlCi0JCXRlc3RfZGF0YS0+c3RyZWFrID0gMDsKLQotCS8q IEEgc3RyZWFrIG9mIDMgZ2l2ZXMgY29uZmlkZW5jZSB0aGF0IHRoZSBzaWduYWwgaXMgZ29vZC4g Ki8KLQlpZiAodGVzdF9kYXRhLT5zdHJlYWsgPT0gMykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9pbnRlZ3JpdHkoY29uc3QgY2hhciAqZGV2aWNlX25h bWUpCi17Ci0Jc3RydWN0IHRlc3RfZGF0YSBkYXRhOwotCWludCBzYW1wbGluZ19yYXRlOwotCWJv b2wgcnVuID0gZmFsc2U7Ci0JYm9vbCB0ZXN0OwotCWludCBpLCBqOwotCWludCByZXQ7Ci0KLQlk YXRhLmFsc2EgPSBhbHNhX2luaXQoKTsKLQlpZ3RfYXNzZXJ0KGRhdGEuYWxzYSk7Ci0KLQlyZXQg PSBhbHNhX29wZW5faW5wdXQoZGF0YS5hbHNhLCBDQVBUVVJFX0RFVklDRV9OQU1FKTsKLQlpZ3Rf YXNzZXJ0KHJldCA+PSAwKTsKLQotCWFsc2FfY29uZmlndXJlX2lucHV0KGRhdGEuYWxzYSwgQ0FQ VFVSRV9DSEFOTkVMUywKLQkJCSAgICAgQ0FQVFVSRV9TQU1QTEVfUkFURSk7Ci0KLQlhbHNhX3Jl Z2lzdGVyX2lucHV0X2NhbGxiYWNrKGRhdGEuYWxzYSwgaW5wdXRfY2FsbGJhY2ssICZkYXRhLAot CQkJCSAgICAgQ0FQVFVSRV9GUkFNRVMpOwotCi0JZm9yIChpID0gMDsgaSA8IHNhbXBsaW5nX3Jh dGVzX2NvdW50OyBpKyspIHsKLQkJcmV0ID0gYWxzYV9vcGVuX291dHB1dChkYXRhLmFsc2EsIGRl dmljZV9uYW1lKTsKLQkJaWd0X2Fzc2VydChyZXQgPj0gMCk7Ci0KLQkJc2FtcGxpbmdfcmF0ZSA9 IHNhbXBsaW5nX3JhdGVzW2ldOwotCi0JCXRlc3QgPSBhbHNhX3Rlc3Rfb3V0cHV0X2NvbmZpZ3Vy YXRpb24oZGF0YS5hbHNhLAotCQkJCQkJICAgICAgUExBWUJBQ0tfQ0hBTk5FTFMsCi0JCQkJCQkg ICAgICBzYW1wbGluZ19yYXRlKTsKLQkJaWYgKCF0ZXN0KSB7Ci0JCQlhbHNhX2Nsb3NlX291dHB1 dChkYXRhLmFsc2EpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZ3RfZGVidWcoIlRlc3Rpbmcg d2l0aCBzYW1wbGluZyByYXRlICVkXG4iLCBzYW1wbGluZ19yYXRlKTsKLQotCQlhbHNhX2NvbmZp Z3VyZV9vdXRwdXQoZGF0YS5hbHNhLCBQTEFZQkFDS19DSEFOTkVMUywKLQkJCQkgICAgICAgc2Ft cGxpbmdfcmF0ZSk7Ci0KLQkJZGF0YS5zaWduYWwgPSBhdWRpb19zaWduYWxfaW5pdChQTEFZQkFD S19DSEFOTkVMUywKLQkJCQkJCXNhbXBsaW5nX3JhdGUpOwotCQlpZ3RfYXNzZXJ0KGRhdGEuc2ln bmFsKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgdGVzdF9mcmVxdWVuY2llc19jb3VudDsgaisrKQot CQkJYXVkaW9fc2lnbmFsX2FkZF9mcmVxdWVuY3koZGF0YS5zaWduYWwsCi0JCQkJCQkgICB0ZXN0 X2ZyZXF1ZW5jaWVzW2pdKTsKLQotCQlhdWRpb19zaWduYWxfc3ludGhlc2l6ZShkYXRhLnNpZ25h bCk7Ci0KLQkJYWxzYV9yZWdpc3Rlcl9vdXRwdXRfY2FsbGJhY2soZGF0YS5hbHNhLCBvdXRwdXRf Y2FsbGJhY2ssCi0JCQkJCSAgICAgICZkYXRhLCBQTEFZQkFDS19GUkFNRVMpOwotCi0JCWRhdGEu c3RyZWFrID0gMDsKLQotCQlyZXQgPSBhbHNhX3J1bihkYXRhLmFsc2EsIFJVTl9USU1FT1VUKTsK LQkJaWd0X2Fzc2VydChyZXQgPiAwKTsKLQotCQlhdWRpb19zaWduYWxfY2xlYW4oZGF0YS5zaWdu YWwpOwotCQlmcmVlKGRhdGEuc2lnbmFsKTsKLQotCQlhbHNhX2Nsb3NlX291dHB1dChkYXRhLmFs c2EpOwotCi0JCXJ1biA9IHRydWU7Ci0JfQotCi0JLyogTWFrZSBzdXJlIHdlIHRlc3RlZCBhdCBs ZWFzdCBvbmUgZnJlcXVlbmN5ICovCi0JaWd0X2Fzc2VydChydW4pOwotCi0JYWxzYV9jbG9zZV9p bnB1dChkYXRhLmFsc2EpOwotCWZyZWUoZGF0YS5hbHNhKTsKLX0KLQotc3RhdGljIHZvaWQgdGVz dF9zdXNwZW5kX3Jlc3VtZV9pbnRlZ3JpdHkoY29uc3QgY2hhciAqZGV2aWNlX25hbWUsCi0JCQkJ CSAgZW51bSBpZ3Rfc3VzcGVuZF9zdGF0ZSBzdGF0ZSwKLQkJCQkJICBlbnVtIGlndF9zdXNwZW5k X3Rlc3QgdGVzdCkKLXsKLQl0ZXN0X2ludGVncml0eShkZXZpY2VfbmFtZSk7Ci0KLQlpZ3Rfc3lz dGVtX3N1c3BlbmRfYXV0b3Jlc3VtZShzdGF0ZSwgdGVzdCk7Ci0KLQl0ZXN0X2ludGVncml0eShk ZXZpY2VfbmFtZSk7Ci19Ci0KLWlndF9tYWluCi17Ci0JaWd0X3N1YnRlc3QoImhkbWktaW50ZWdy aXR5IikKLQkJdGVzdF9pbnRlZ3JpdHkoIkhETUkiKTsKLQotCWlndF9zdWJ0ZXN0KCJoZG1pLWlu dGVncml0eS1hZnRlci1zdXNwZW5kIikKLQkJdGVzdF9zdXNwZW5kX3Jlc3VtZV9pbnRlZ3JpdHko IkhETUkiLCBTVVNQRU5EX1NUQVRFX01FTSwKLQkJCQkJICAgICAgU1VTUEVORF9URVNUX05PTkUp OwotCi0JaWd0X3N1YnRlc3QoImhkbWktaW50ZWdyaXR5LWFmdGVyLWhpYmVybmF0ZSIpCi0JCXRl c3Rfc3VzcGVuZF9yZXN1bWVfaW50ZWdyaXR5KCJIRE1JIiwgU1VTUEVORF9TVEFURV9ESVNLLAot CQkJCQkgICAgICBTVVNQRU5EX1RFU1RfREVWSUNFUyk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9r bXNfY2hhbWVsaXVtLmMgYi90ZXN0cy9rbXNfY2hhbWVsaXVtLmMKaW5kZXggMmRjMTA0OWQuLmE3 MTIyNTBhIDEwMDY0NAotLS0gYS90ZXN0cy9rbXNfY2hhbWVsaXVtLmMKKysrIGIvdGVzdHMva21z X2NoYW1lbGl1bS5jCkBAIC00MTMsNyArNDEzLDcgQEAgdGVzdF9zdXNwZW5kX3Jlc3VtZV9lZGlk X2NoYW5nZShkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKIAogc3Rh dGljIGlndF9vdXRwdXRfdCAqCiBwcmVwYXJlX291dHB1dChkYXRhX3QgKmRhdGEsCi0JICAgICAg IHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKKwkgICAgICAgc3RydWN0IGNoYW1lbGl1bV9w b3J0ICpwb3J0LCBib29sIHNldF9lZGlkKQogewogCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAm ZGF0YS0+ZGlzcGxheTsKIAlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKQEAgLTQyOCw3ICs0MjgsOCBA QCBwcmVwYXJlX291dHB1dChkYXRhX3QgKmRhdGEsCiAJLyogVGhlIGNoYW1lbGl1bSdzIGRlZmF1 bHQgRURJRCBoYXMgYSBsb3Qgb2YgcmVzb2x1dGlvbnMsIHdheSBtb3JlIHRoZW4KIAkgKiB3ZSBu ZWVkIHRvIHRlc3QKIAkgKi8KLQljaGFtZWxpdW1fcG9ydF9zZXRfZWRpZChkYXRhLT5jaGFtZWxp dW0sIHBvcnQsIGRhdGEtPmVkaWRfaWQpOworCWlmIChzZXRfZWRpZCkKKwkJY2hhbWVsaXVtX3Bv cnRfc2V0X2VkaWQoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBkYXRhLT5lZGlkX2lkKTsKIAogCWNo YW1lbGl1bV9wbHVnKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCk7CiAJd2FpdF9mb3JfY29ubmVjdG9y KGRhdGEsIHBvcnQsIERSTV9NT0RFX0NPTk5FQ1RFRCk7CkBAIC02MTMsNyArNjE0LDcgQEAgc3Rh dGljIHZvaWQgdGVzdF9kaXNwbGF5X29uZV9tb2RlKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1l bGl1bV9wb3J0ICpwb3J0LAogCiAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7CiAKLQlvdXRwdXQg PSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0KTsKKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChk YXRhLCBwb3J0LCB0cnVlKTsKIAljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVj dG9yKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOwogCXByaW1hcnkgPSBpZ3Rfb3V0cHV0 X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CiAJaWd0X2Fz c2VydChwcmltYXJ5KTsKQEAgLTY0NCw3ICs2NDUsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3Bs YXlfYWxsX21vZGVzKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAog CiAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7CiAKLQlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChk YXRhLCBwb3J0KTsKKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0LCB0cnVlKTsK IAljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVjdG9yKGRhdGEtPmNoYW1lbGl1 bSwgcG9ydCwgZmFsc2UpOwogCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91 dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CiAJaWd0X2Fzc2VydChwcmltYXJ5KTsKQEAg LTY3OSw3ICs2ODAsNyBAQCB0ZXN0X2Rpc3BsYXlfZnJhbWVfZHVtcChkYXRhX3QgKmRhdGEsIHN0 cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKIAogCXJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwog Ci0Jb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7CisJb3V0cHV0ID0gcHJlcGFy ZV9vdXRwdXQoZGF0YSwgcG9ydCwgdHJ1ZSk7CiAJY29ubmVjdG9yID0gY2hhbWVsaXVtX3BvcnRf Z2V0X2Nvbm5lY3RvcihkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNlKTsKIAlwcmltYXJ5ID0g aWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkp OwogCWlndF9hc3NlcnQocHJpbWFyeSk7CkBAIC03MTAsNiArNzExLDI2NiBAQCB0ZXN0X2Rpc3Bs YXlfZnJhbWVfZHVtcChkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkK IAlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwogfQogCisKKy8qIFBsYXliYWNrIHBh cmFtZXRlcnMgY29udHJvbCB0aGUgYXVkaW8gc2lnbmFsIHdlIHN5bnRoZXNpemUgYW5kIHNlbmQg Ki8KKyNkZWZpbmUgUExBWUJBQ0tfQ0hBTk5FTFMgMgorI2RlZmluZSBQTEFZQkFDS19TQU1QTEVT IDEwMjQKKworLyogQ2FwdHVyZSBwYXJlbWV0ZXJzIGNvbnRyb2wgdGhlIGF1ZGlvIHNpZ25hbCB3 ZSByZWNlaXZlICovCisjZGVmaW5lIENBUFRVUkVfU0FNUExFUyAyMDQ4CisKKyNkZWZpbmUgQVVE SU9fRFVSQVRJT04gMjAwMCAvKiBtcyAqLworLyogQSBzdHJlYWsgb2YgMyBnaXZlcyBjb25maWRl bmNlIHRoYXQgdGhlIHNpZ25hbCBpcyBnb29kLiAqLworI2RlZmluZSBNSU5fU1RSRUFLIDMKKwor LyogVE9ETzogQ2hhbWVsaXVtIG9ubHkgc3VwcG9ydHMgNDhLSHogZm9yIG5vdyAqLworc3RhdGlj IGludCBzYW1wbGluZ19yYXRlc1tdID0geworLyoJMzIwMDAsICovCisvKgk0NDEwMCwgKi8KKwk0 ODAwMCwKKy8qCTg4MjAwLCAqLworLyoJOTYwMDAsICovCisvKgkxNzY0MDAsICovCisvKgkxOTIw MDAsICovCit9OworCitzdGF0aWMgaW50IHNhbXBsaW5nX3JhdGVzX2NvdW50ID0gc2l6ZW9mKHNh bXBsaW5nX3JhdGVzKSAvIHNpemVvZihpbnQpOworCitzdGF0aWMgaW50IHRlc3RfZnJlcXVlbmNp ZXNbXSA9IHsKKwkzMDAsCisJNjAwLAorCTEyMDAsCisJODAwMDAsCisJMTAwMDAsCit9OworCitz dGF0aWMgaW50IHRlc3RfZnJlcXVlbmNpZXNfY291bnQgPSBzaXplb2YodGVzdF9mcmVxdWVuY2ll cykgLyBzaXplb2YoaW50KTsKKworc3RhdGljIGludAorb3V0cHV0X2NhbGxiYWNrKHZvaWQgKmRh dGEsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpCit7CisJc3RydWN0IGF1ZGlvX3NpZ25hbCAq c2lnbmFsID0gKHN0cnVjdCBhdWRpb19zaWduYWwgKikgZGF0YTsKKworCWF1ZGlvX3NpZ25hbF9m aWxsKHNpZ25hbCwgYnVmZmVyLCBmcmFtZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBi b29sCitkb190ZXN0X2Rpc3BsYXlfYXVkaW8oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVt X3BvcnQgKnBvcnQsCisJCSAgICAgIHN0cnVjdCBhbHNhICphbHNhLCBpbnQgcGxheWJhY2tfY2hh bm5lbHMsCisJCSAgICAgIGludCBwbGF5YmFja19yYXRlKQoreworCWludCByZXQsIGNhcHR1cmVf cmF0ZSwgY2FwdHVyZV9jaGFubmVscywgbXNlYzsKKwlzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2Zp bGUgKmF1ZGlvX2ZpbGU7CisJc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKnN0cmVhbTsKKwllbnVt IGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBzdHJlYW1fbW9kZTsKKwlzdHJ1Y3QgYXVk aW9fc2lnbmFsICpzaWduYWw7CisJaW50MzJfdCAqcmVjdiwgKmJ1ZjsKKwlkb3VibGUgKmNoYW5u ZWw7CisJc2l6ZV90IGksIHN0cmVhaywgcGFnZV9jb3VudDsKKwlzaXplX3QgcmVjdl9sZW4sIGJ1 Zl9sZW4sIGJ1Zl9jYXAsIGJ1Zl9zaXplLCBjaGFubmVsX2xlbjsKKwlib29sIG9rOworCWNoYXIg ZHVtcF9zdWZmaXhbNjRdOworCWNoYXIgKmR1bXBfcGF0aCA9IE5VTEw7CisJaW50IGR1bXBfZmQg PSAtMTsKKworCWlmICghYWxzYV90ZXN0X291dHB1dF9jb25maWd1cmF0aW9uKGFsc2EsIHBsYXli YWNrX2NoYW5uZWxzLAorCQkJCQkgICAgcGxheWJhY2tfcmF0ZSkpCisJCXJldHVybiBmYWxzZTsK KworCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHBsYXliYWNrIHNhbXBsaW5nIHJhdGUgJWRcbiIs IHBsYXliYWNrX3JhdGUpOworCWFsc2FfY29uZmlndXJlX291dHB1dChhbHNhLCBwbGF5YmFja19j aGFubmVscywgcGxheWJhY2tfcmF0ZSk7CisKKwljaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1 ZGlvKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOworCisJc3RyZWFtID0gY2hhbWVsaXVt X3N0cmVhbV9pbml0KCk7CisJaWd0X2Fzc2VydChzdHJlYW0pOworCisJc3RyZWFtX21vZGUgPSBD SEFNRUxJVU1fU1RSRUFNX1JFQUxUSU1FX1NUT1BfV0hFTl9PVkVSRkxPVzsKKwlvayA9IGNoYW1l bGl1bV9zdHJlYW1fZHVtcF9yZWFsdGltZV9hdWRpbyhzdHJlYW0sIHN0cmVhbV9tb2RlKTsKKwlp Z3RfYXNzZXJ0KG9rKTsKKworCWNoYW1lbGl1bV9zdHJlYW1fYXVkaW9fZm9ybWF0KHN0cmVhbSwg JmNhcHR1cmVfcmF0ZSwgJmNhcHR1cmVfY2hhbm5lbHMpOworCisJaWYgKGlndF9mcmFtZV9kdW1w X2lzX2VuYWJsZWQoKSkgeworCQlzbnByaW50ZihkdW1wX3N1ZmZpeCwgc2l6ZW9mKGR1bXBfc3Vm Zml4KSwgImNhcHR1cmUtJWRjaC0lZCIsCisJCQkgcGxheWJhY2tfY2hhbm5lbHMsIHBsYXliYWNr X3JhdGUpOworCisJCWR1bXBfZmQgPSBhdWRpb19jcmVhdGVfd2F2X2ZpbGVfczMyX2xlKGR1bXBf c3VmZml4LAorCQkJCQkJICAgICAgIGNhcHR1cmVfcmF0ZSwKKwkJCQkJCSAgICAgICBjYXB0dXJl X2NoYW5uZWxzLAorCQkJCQkJICAgICAgICZkdW1wX3BhdGgpOworCQlpZ3RfYXNzZXJ0KGR1bXBf ZmQgPj0gMCk7CisJfQorCisJc2lnbmFsID0gYXVkaW9fc2lnbmFsX2luaXQocGxheWJhY2tfY2hh bm5lbHMsIHBsYXliYWNrX3JhdGUpOworCWlndF9hc3NlcnQoc2lnbmFsKTsKKworCWZvciAoaSA9 IDA7IGkgPCB0ZXN0X2ZyZXF1ZW5jaWVzX2NvdW50OyBpKyspCisJCWF1ZGlvX3NpZ25hbF9hZGRf ZnJlcXVlbmN5KHNpZ25hbCwgdGVzdF9mcmVxdWVuY2llc1tpXSk7CisJYXVkaW9fc2lnbmFsX3N5 bnRoZXNpemUoc2lnbmFsKTsKKworCWFsc2FfcmVnaXN0ZXJfb3V0cHV0X2NhbGxiYWNrKGFsc2Es IG91dHB1dF9jYWxsYmFjaywgc2lnbmFsLAorCQkJCSAgICAgIFBMQVlCQUNLX1NBTVBMRVMpOwor CisJLyogVE9ETzogZGV0ZWN0IHNpZ25hbCBpbiByZWFsLXRpbWUgKi8KKwlyZXQgPSBhbHNhX3J1 bihhbHNhLCBBVURJT19EVVJBVElPTik7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwlhbHNh X2Nsb3NlX291dHB1dChhbHNhKTsKKworCS8qIE5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTI4 LCBiZWNhdXNlIHRoYXQncyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMKKwkgKiB3ZSBnZXQgcGVyIGNo YW5uZWwgZWFjaCB0aW1lIHdlIHJlY2VpdmUgYW4gYXVkaW8gcGFnZSBmcm9tIHRoZQorCSAqIENo YW1lbGl1bSBkZXZpY2UuICovCisJY2hhbm5lbF9sZW4gPSBDQVBUVVJFX1NBTVBMRVM7CisJY2hh bm5lbCA9IG1hbGxvYyhzaXplb2YoZG91YmxlKSAqIGNoYW5uZWxfbGVuKTsKKworCWJ1Zl9jYXAg PSBjYXB0dXJlX2NoYW5uZWxzICogY2hhbm5lbF9sZW47CisJYnVmID0gbWFsbG9jKHNpemVvZihp bnQzMl90KSAqIGJ1Zl9jYXApOworCWJ1Zl9sZW4gPSAwOworCisJcmVjdiA9IE5VTEw7CisJcmVj dl9sZW4gPSAwOworCisJc3RyZWFrID0gMDsKKwltc2VjID0gMDsKKwlpID0gMDsKKwl3aGlsZSAo c3RyZWFrIDwgTUlOX1NUUkVBSyAmJiBtc2VjIDwgQVVESU9fRFVSQVRJT04pIHsKKwkJb2sgPSBj aGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8oc3RyZWFtLAorCQkJCQkJCSAg ICAgJnBhZ2VfY291bnQsCisJCQkJCQkJICAgICAmcmVjdiwgJnJlY3ZfbGVuKTsKKwkJaWd0X2Fz c2VydChvayk7CisKKwkJbWVtY3B5KCZidWZbYnVmX2xlbl0sIHJlY3YsIHJlY3ZfbGVuICogc2l6 ZW9mKGludDMyX3QpKTsKKwkJYnVmX2xlbiArPSByZWN2X2xlbjsKKworCQlpZiAoYnVmX2xlbiA8 IGJ1Zl9jYXApCisJCQljb250aW51ZTsKKwkJaWd0X2Fzc2VydChidWZfbGVuID09IGJ1Zl9jYXAp OworCisJCWlmIChkdW1wX2ZkID49IDApIHsKKwkJCWJ1Zl9zaXplID0gYnVmX2xlbiAqIHNpemVv ZihpbnQzMl90KTsKKwkJCWlndF9hc3NlcnQod3JpdGUoZHVtcF9mZCwgYnVmLCBidWZfc2l6ZSkg PT0gYnVmX3NpemUpOworCQl9CisKKwkJLyogVE9ETzogY2hlY2sgb3RoZXIgY2hhbm5lbHMgdG9v LCBub3QganVzdCB0aGUgZmlyc3Qgb25lICovCisJCWF1ZGlvX2V4dHJhY3RfY2hhbm5lbF9zMzJf bGUoY2hhbm5lbCwgY2hhbm5lbF9sZW4sIGJ1ZiwgYnVmX2xlbiwKKwkJCQkJICAgICBjYXB0dXJl X2NoYW5uZWxzLCAwKTsKKworCQltc2VjID0gaSAqIGNoYW5uZWxfbGVuIC8gKGRvdWJsZSkgY2Fw dHVyZV9yYXRlICogMTAwMDsKKwkJaWd0X2RlYnVnKCJEZXRlY3RpbmcgYXVkaW8gc2lnbmFsLCB0 PSVkIG1zZWNcbiIsIG1zZWMpOworCisJCWlmIChhdWRpb19zaWduYWxfZGV0ZWN0KHNpZ25hbCwg Y2FwdHVyZV9yYXRlLCBjaGFubmVsLAorCQkJCQljaGFubmVsX2xlbikpCisJCQlzdHJlYWsrKzsK KwkJZWxzZQorCQkJc3RyZWFrID0gMDsKKworCQlidWZfbGVuID0gMDsKKwkJaSsrOworCX0KKwor CWlmIChkdW1wX2ZkID49IDApIHsKKwkJY2xvc2UoZHVtcF9mZCk7CisJCWlmIChzdHJlYWsgPT0g TUlOX1NUUkVBSykgeworCQkJLyogVGVzdCBzdWNjZWVkZWQsIG5vIG5lZWQgdG8ga2VlcCB0aGUg Y2FwdHVyZWQgZGF0YSAqLworCQkJdW5saW5rKGR1bXBfcGF0aCk7CisJCX0gZWxzZQorCQkJaWd0 X2RlYnVnKCJTYXZlZCBjYXB0dXJlZCBhdWRpbyBkYXRhIHRvICVzXG4iLCBkdW1wX3BhdGgpOwor CQlmcmVlKGR1bXBfcGF0aCk7CisJfQorCisJZnJlZShyZWN2KTsKKwlmcmVlKGJ1Zik7CisJZnJl ZShjaGFubmVsKTsKKworCW9rID0gY2hhbWVsaXVtX3N0cmVhbV9zdG9wX3JlYWx0aW1lX2F1ZGlv KHN0cmVhbSk7CisJaWd0X2Fzc2VydChvayk7CisKKwlhdWRpb19maWxlID0gY2hhbWVsaXVtX3N0 b3BfY2FwdHVyaW5nX2F1ZGlvKGRhdGEtPmNoYW1lbGl1bSwKKwkJCQkJCSAgICBwb3J0KTsKKwlp ZiAoYXVkaW9fZmlsZSkgeworCQlpZ3RfZGVidWcoIkF1ZGlvIGZpbGUgc2F2ZWQgb24gdGhlIENo YW1lbGl1bSBpbiAlc1xuIiwKKwkJCSAgYXVkaW9fZmlsZS0+cGF0aCk7CisJCWNoYW1lbGl1bV9k ZXN0cm95X2F1ZGlvX2ZpbGUoYXVkaW9fZmlsZSk7CisJfQorCisJYXVkaW9fc2lnbmFsX2NsZWFu KHNpZ25hbCk7CisJZnJlZShzaWduYWwpOworCisJY2hhbWVsaXVtX3N0cmVhbV9kZWluaXQoc3Ry ZWFtKTsKKworCWlndF9hc3NlcnQoc3RyZWFrID09IE1JTl9TVFJFQUspOworCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgdm9pZAordGVzdF9kaXNwbGF5X2F1ZGlvKGRhdGFfdCAqZGF0YSwgc3Ry dWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAorCQkgICBjb25zdCBjaGFyICphdWRpb19kZXZpY2Up Cit7CisJYm9vbCBydW4gPSBmYWxzZTsKKwlzdHJ1Y3QgYWxzYSAqYWxzYTsKKwlpbnQgcmV0Owor CWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCXN0cnVjdCBp Z3RfZmIgZmI7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCWRybU1vZGVDb25uZWN0b3IgKmNv bm5lY3RvcjsKKwlpbnQgZmJfaWQsIGk7CisKKwlpZ3RfcmVxdWlyZShhbHNhX2hhc19leGNsdXNp dmVfYWNjZXNzKCkpOworCisJYWxzYSA9IGFsc2FfaW5pdCgpOworCWlndF9hc3NlcnQoYWxzYSk7 CisKKwlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsKKworCS8qIFVzZSB0aGUgZGVmYXVsdCBDaGFt ZWxpdW0gRURJRCBmb3IgdGhpcyB0ZXN0LCBhcyB0aGUgYmFzZSBJR1QgRURJRAorCSAqIGRvZXNu J3QgYWR2ZXJ0aXNlIGF1ZGlvIHN1cHBvcnQgKHNlZSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8g aW4KKwkgKiB0aGUga2VybmVsIHRyZWUpLiAqLworCW91dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRh dGEsIHBvcnQsIGZhbHNlKTsKKwljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVj dG9yKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOworCXByaW1hcnkgPSBpZ3Rfb3V0cHV0 X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisJaWd0X2Fz c2VydChwcmltYXJ5KTsKKworCS8qIEVuYWJsZSB0aGUgb3V0cHV0IGJlY2F1c2UgdGhlIHJlY2Vp dmVyIHdvbid0IHRyeSB0byByZWNlaXZlIGF1ZGlvIGlmCisJICogaXQgZG9lc24ndCByZWNlaXZl IHZpZGVvLiAqLworCWlndF9hc3NlcnQoY29ubmVjdG9yLT5jb3VudF9tb2RlcyA+IDApOworCW1v ZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1swXTsKKworCWZiX2lkID0gaWd0X2NyZWF0ZV9jb2xvcl9w YXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkJICAgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52 ZGlzcGxheSwKKwkJCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCSAgICBMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FLAorCQkJCQkgICAgMCwgMCwgMCwgJmZiKTsKKwlpZ3RfYXNzZXJ0 KGZiX2lkID4gMCk7CisKKwllbmFibGVfb3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1dCwgbW9kZSwg JmZiKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYW1wbGluZ19yYXRlc19jb3VudDsgaSsrKSB7CisJ CXJldCA9IGFsc2Ffb3Blbl9vdXRwdXQoYWxzYSwgYXVkaW9fZGV2aWNlKTsKKwkJaWd0X2Fzc2Vy dChyZXQgPj0gMCk7CisKKwkJLyogVE9ETzogcGxheWJhY2sgb24gYWxsIDggYXZhaWxhYmxlIGNo YW5uZWxzICovCisJCXJ1biB8PSBkb190ZXN0X2Rpc3BsYXlfYXVkaW8oZGF0YSwgcG9ydCwgYWxz YSwKKwkJCQkJICAgICBQTEFZQkFDS19DSEFOTkVMUywKKwkJCQkJICAgICBzYW1wbGluZ19yYXRl c1tpXSk7CisKKwkJYWxzYV9jbG9zZV9vdXRwdXQoYWxzYSk7CisJfQorCisJLyogTWFrZSBzdXJl IHdlIHRlc3RlZCBhdCBsZWFzdCBvbmUgZnJlcXVlbmN5LiAqLworCWlndF9hc3NlcnQocnVuKTsK KworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZmIpOworCisJZHJtTW9kZUZyZWVDb25u ZWN0b3IoY29ubmVjdG9yKTsKKworCWZyZWUoYWxzYSk7Cit9CisKKwogc3RhdGljIHZvaWQgc2Vs ZWN0X3RpbGVkX21vZGlmaWVyKGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3Qgd2lkdGgsCiAJ CQkJICB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwKIAkJCQkgIHVpbnQ2NF90ICpt b2RpZmllcikKQEAgLTEwMzcsNyArMTI5OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGlzcGxheV9w bGFuZXNfcmFuZG9tKGRhdGFfdCAqZGF0YSwKIAlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsKIAog CS8qIEZpbmQgdGhlIGNvbm5lY3RvciBhbmQgcGlwZS4gKi8KLQlvdXRwdXQgPSBwcmVwYXJlX291 dHB1dChkYXRhLCBwb3J0KTsKKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0LCB0 cnVlKTsKIAogCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CiAKQEAgLTEzMDgs NiArMTU2OSw5IEBAIGlndF9tYWluCiAKIAkJY29ubmVjdG9yX3N1YnRlc3QoImRwLWZyYW1lLWR1 bXAiLCBEaXNwbGF5UG9ydCkKIAkJCXRlc3RfZGlzcGxheV9mcmFtZV9kdW1wKCZkYXRhLCBwb3J0 KTsKKworCQljb25uZWN0b3Jfc3VidGVzdCgiZHAtYXVkaW8iLCBEaXNwbGF5UG9ydCkKKwkJCXRl c3RfZGlzcGxheV9hdWRpbygmZGF0YSwgcG9ydCwgIkhETUkiKTsKIAl9CiAKIAlpZ3Rfc3VidGVz dF9ncm91cCB7CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1 aWxkCmluZGV4IGUzYzhiMDdmLi43MTE5NzliNCAxMDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVp bGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTIzOSwyMCArMjM5LDEzIEBAIGlmIGxpYmRy bV9ub3V2ZWF1LmZvdW5kKCkKIAl0ZXN0X2RlcHMgKz0gbGliZHJtX25vdXZlYXUKIGVuZGlmCiAK LWlmIF9idWlsZF9jaGFtZWxpdW0gYW5kIGNoYW1lbGl1bS5mb3VuZCgpCitpZiBjaGFtZWxpdW1f Zm91bmQKIAl0ZXN0X3Byb2dzICs9IFsKIAkJJ2ttc19jaGFtZWxpdW0nLAogCV0KIAl0ZXN0X2Rl cHMgKz0gY2hhbWVsaXVtCiBlbmRpZgogCi1pZiBfYnVpbGRfYXVkaW8gYW5kIGFsc2EuZm91bmQo KSBhbmQgZ3NsLmZvdW5kKCkKLQl0ZXN0X3Byb2dzICs9IFsKLQkJJ2F1ZGlvJywKLQldCi0JdGVz dF9kZXBzICs9IGFsc2EKLWVuZGlmCi0KIHRlc3RfZXhlY3V0YWJsZXMgPSBbXQogdGVzdF9saXN0 ID0gW10KIAotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=