From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v5 9/9] xen/x86: setup PVHv2 Dom0 ACPI tables Date: Thu, 19 Jan 2017 17:29:41 +0000 Message-ID: <20170119172941.65642-10-roger.pau@citrix.com> References: <20170119172941.65642-1-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cUGXG-00067E-4e for xen-devel@lists.xenproject.org; Thu, 19 Jan 2017 17:30:06 +0000 In-Reply-To: <20170119172941.65642-1-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , boris.ostrovsky@oracle.com, Roger Pau Monne , Jan Beulich , konrad.wilk@oracle.com List-Id: xen-devel@lists.xenproject.org Q3JlYXRlIGEgbmV3IE1BRFQgdGFibGUgdGhhdCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZXhwb3Nl ZCB0byB0aGUgZ3Vlc3QuIEEKbmV3IFhTRFQgdGFibGUgaXMgYWxzbyBjcmVhdGVkLCBpbiBvcmRl ciB0byBmaWx0ZXIgdGhlIHRhYmxlcyB0aGF0IHdlIHdhbnQKdG8gZXhwb3NlIHRvIHRoZSBndWVz dCwgcGx1cyB0aGUgWGVuIGNyYWZ0ZWQgTUFEVC4gVGhpcyBpbiB0dXJuIHJlcXVpcmVzIFhlbgp0 byBhbHNvIGNyZWF0ZSBhIG5ldyBSU0RQIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9pbnQgdG8gdGhl IGN1c3RvbSBYU0RULgoKQWxzbywgcmVnaW9ucyBtYXJrZWQgYXMgRTgyMF9BQ1BJIG9yIEU4MjBf TlZTIGFyZSBpZGVudGl0eSBtYXBwZWQgaW50byBEb20wCnAybSwgcGx1cyBhbnkgdG9wLWxldmVs IEFDUEkgdGFibGVzIHRoYXQgc2hvdWxkIGJlIGFjY2Vzc2libGUgdG8gRG9tMCBhbmQKcmVzaWRl IGluIHJlc2VydmVkIHJlZ2lvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZSBtZW1vcnkg bWFwcyBkb24ndApwcm9wZXJseSBhY2NvdW50IGZvciBhbGwgdGhlIG1lbW9yeSB1c2VkIGJ5IEFD UEksIHNvIGl0J3MgY29tbW9uIHRvIGZpbmQgQUNQSQp0YWJsZXMgaW4gcmVzZXJ2ZWQgcmVnaW9u cy4KClNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29t PgotLS0KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29w ZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY0OgogLSBz L2h2bS9wdmguCiAtIFVzZSBodm1fY29weV90b19ndWVzdF9waHlzX3ZjcHUuCiAtIERvbid0IGFs bG9jYXRlIHVwIHRvIEU4MjBNQVggZW50cmllcyBmb3IgdGhlIERvbTAgbWVtb3J5IG1hcCBhbmQg aW5zdGVhZAogICBhbGxvdyBwdmhfYWRkX21lbV9yYW5nZSB0byBkeW5hbWljYWxseSBncm93IHRo ZSBtZW1vcnkgbWFwLgogLSBBZGQgYSBjb21tZW50IGFib3V0IHRoZSBsYWNrIG9mIHgyQVBJQyBN QURUIGVudHJpZXMuCiAtIENoYW5nZSBhY3BpX2ludHJfb3ZlcnJpZGVzIHRvIHVuc2lnbmVkIGlu dCBhbmQgdGhlIG1heCBpdGVyYXRvciBib3VuZCB0bwogICBVSU5UX01BWC4KIC0gU2V0IHRoZSBN QURUIHZlcnNpb24gYXMgdGhlIG1pbmltdW0gdmVyc2lvbiBiZXR3ZWVuIHRoZSBoYXJkd2FyZSB2 YWx1ZSBhbmQKICAgb3VyIHN1cHBvcnRlZCB2ZXJzaW9uICg0KS4KIC0gU2V0IHRoZSBNQURUIElP IEFQSUMgSUQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvbWFpbiB2aW9hcGljLT5pZC4K IC0gVXNlIHZvaWQgKiB3aGVuIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycy4KIC0gRml4IGluZGVu dGF0aW9uIG9mIG5yX3BhZ2VzIGFuZCB1c2UgUEZOX1VQIGluc3RlYWQgb2YgRElWX1JPVU5EX1VQ LgogLSBDaGFuZ2Ugd29yZGluZyBvZiB0aGUgcHZoX2FjcGlfdGFibGVfYWxsb3dlZCBlcnJvciBt ZXNzYWdlLgogLSBNYWtlIGogdW5zaWduZWQgaW4gcHZoX3NldHVwX2FjcGlfeHNkdC4KIC0gTW92 ZSBpbml0aWFsaXphdGlvbiBvZiBsb2NhbCB2YXJpYWJsZXMgd2l0aCBkZWNsYXJhdGlvbnMgaW4K ICAgcHZoX3NldHVwX2FjcGlfeHNkdC4KIC0gUmV3b3JkIHRoZSBjb21tZW50IGFib3V0IHRoZSBh bGxvY2F0ZWQgc2l6ZSBvZiB0aGUgeHNkdCBjdXN0b20gdGFibGUuCiAtIEZpeCBsaW5lIHNwbGl0 dGluZy4KIC0gQWRkIGEgY29tbWVudCByZWdhcmRpbmcgdGhlIGxheWVyaW5nIHZpb2xhdGlvbiBj YXVzZWQgYnkgdGhlIHVzYWdlIG9mCiAgIGFjcGlfdGJfY2hlY2tzdW0uCiAtIFBhc3MgSU8gQVBJ QyBOTUkgc291cmNlcyBmb3VuZCBpbiB0aGUgTUFEVCB0byBEb20wLgogLSBDcmVhdGUgeDJBUElD IGVudHJpZXMgaWYgdGhlIG5hdGl2ZSBNQURUIGFsc28gY29udGFpbnMgdGhlbS4KIC0gcy9hY3Bp X2ludHJfb3ZlcnJyaWRlcy9hY3BpX2ludHJfb3ZlcnJpZGVzLy4KIC0gTWFrZSBzdXJlIHRoZSBN QURUIGlzIHByb3Blcmx5IG1hcHBlZCBpbnRvIERvbTAsIG9yIGVsc2UgRG9tMCBtaWdodCBub3Qg YmUKICAgYWJsZSB0byBhY2Nlc3MgdGhlIG91dHB1dCBvZiB0aGUgX01BVCBtZXRob2QgZGVwZW5k aW5nIG9uIHRoZQogICBpbXBsZW1lbnRhdGlvbi4KIC0gR2V0IHRoZSBmaXJzdCBBQ1BJIHByb2Nl c3NvciBJRCBhbmQgdXNlIHRoYXQgYXMgdGhlIGJhc2UgcHJvY2Vzc29yIElEIG9mIHRoZQogICBj cmFmdGVkIE1BRFQuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGxvY2FsL3gyIEFQSUMgTk1JIGVudHJp ZXMgbWF0Y2ggd2l0aCB0aGUKICAgbG9jYWwveDIgQVBJQyBvYmplY3RzLgoKQ2hhbmdlcyBzaW5j ZSB2MzoKIC0gVXNlIGh2bV9jb3B5X3RvX3BoeXMgaW4gb3JkZXIgdG8gY29weSB0aGUgdGFibGVz IHRvIERvbTAgbWVtb3J5LgogLSBSZXR1cm4gRUVYSVNUIGZvciBvdmVybGFwaW5nIHJhbmdlcyBp biBodm1fYWRkX21lbV9yYW5nZS4KIC0gcy9vdi9vdnIvIGZvciBpbnRlcnJ1cHQgb3ZlcnJpZGUg cGFyc2luZyBmdW5jdGlvbnMuCiAtIENvbnN0aWZ5IGludHIgbG9jYWwgdmFyaWFibGUgaW4gYWNw aV9zZXRfaW50cl9vdnIuCiAtIFVzZSBzdHJ1Y3R1cmUgYXNpZ25lbWVudCBmb3IgdHlwZSBzYWZl dHkuCiAtIFBlcmZvcm0gc2l6ZW9mIHVzaW5nIGxvY2FsIHZhcmlhYmxlcyBpbiBodm1fc2V0dXBf YWNwaV9tYWR0LgogLSBNYW51YWxseSBzZXQgcmV2aXNpb24gb2YgY3JhZnRlZC9tb2RpZmllZCB0 YWJsZXMuCiAtIE9ubHkgbWFwIHRhYmxlcyB0byBndWVzdCB0aGF0IHJlc2lkZSBpbiByZXNlcnZl ZCBvciBBQ1BJIG1lbW9yeSByZWdpb25zLgogLSBDb3B5IHRoZSBSU0RQIE9FTSBzaWduYXR1cmUg dG8gdGhlIGNyYWZ0ZWQgUlNEUC4KIC0gUGFpciBjYWxscyB0byBhY3BpX29zX21hcF9tZW1vcnkv YWNwaV9vc191bm1hcF9tZW1vcnkuCiAtIEFkZCBtZW1vcnkgcmVnaW9ucyBmb3IgYWxsb3dlZCBB Q1BJIHRhYmxlcyB0byB0aGUgbWVtb3J5IG1hcCBhbmQgdGhlbgogICBwZXJmb3JtIHRoZSBpZGVu dGl0eSBtYXBwaW5ncy4gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNhbGwgbW9kaWZ5X2lkZW50aXR5 X21taW8KICAgbXVsdGlwbGUgdGltZXMuCiAtIEFkZCBhIEZJWE1FIGNvbW1lbnQgcmVnYXJkaW5n IHRoZSBsYWNrIG9mIG11bHRpcGxlIHZJTy1BUElDcy4KCkNoYW5nZXMgc2luY2UgdjI6CiAtIENv bXBsZXRlbHkgcmV3b3JrZWQuCi0tLQogeGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jIHwgNTE3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hh bmdlZCwgNTE3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZG9tYWlu X2J1aWxkLmMgYi94ZW4vYXJjaC94ODYvZG9tYWluX2J1aWxkLmMKaW5kZXggY2E1ZDM5My4uMzMz MWYzYiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jCisrKyBiL3hlbi9h cmNoL3g4Ni9kb21haW5fYnVpbGQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPHhlbi9s aWJlbGYuaD4KICNpbmNsdWRlIDx4ZW4vcGZuLmg+CiAjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vz cy5oPgorI2luY2x1ZGUgPHhlbi9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL3JlZ3MuaD4KICNpbmNs dWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0zOCw2ICszOSw4IEBA CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaHBldC5oPgogCisjaW5j bHVkZSA8YWNwaS9hY3RhYmxlcy5oPgorCiAjaW5jbHVkZSA8cHVibGljL3ZlcnNpb24uaD4KICNp bmNsdWRlIDxwdWJsaWMvYXJjaC14ODYvaHZtL3N0YXJ0X2luZm8uaD4KICNpbmNsdWRlIDxwdWJs aWMvaHZtL2h2bV9pbmZvX3RhYmxlLmg+CkBAIC01MCw2ICs1MywxNCBAQCBzdGF0aWMgbG9uZyBf X2luaXRkYXRhIGRvbTBfbWF4X25ycGFnZXMgPSBMT05HX01BWDsKIC8qIFNpemUgb2YgdGhlIFZN ODYgVFNTIGZvciB2aXJ0dWFsIDgwODYgbW9kZSB0byB1c2UuICovCiAjZGVmaW5lIEhWTV9WTTg2 X1RTU19TSVpFICAgMTI4CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBhY3BpX2lu dHJfb3ZlcnJpZGVzOworc3RhdGljIHN0cnVjdCBhY3BpX21hZHRfaW50ZXJydXB0X292ZXJyaWRl IF9faW5pdGRhdGEgKmludHNyY292cjsKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRh IGFjcGlfbm1pX3NvdXJjZXM7CitzdGF0aWMgc3RydWN0IGFjcGlfbWFkdF9ubWlfc291cmNlIF9f aW5pdGRhdGEgKm5taXNyYzsKKworc3RhdGljIGJvb2wgX19pbml0ZGF0YSBhY3BpX3gyYXBpYzsK KwogLyoKICAqIGRvbTBfbWVtPVttaW46PG1pbl9hbXQ+LF1bbWF4OjxtYXhfYW10PixdWzxhbXQ+ XQogICogCkBAIC0xODEyLDYgKzE4MjMsNTggQEAgc3RhdGljIGludCBfX2luaXQgcHZoX3N0ZWFs X3JhbShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIHNpemUsCiAgICAgcmV0dXJuIC1F Tk9NRU07CiB9CiAKKy8qIE5COiBtZW1vcnkgbWFwIG11c3QgYmUgc29ydGVkIGF0IGFsbCB0aW1l cyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gKi8KK3N0YXRpYyBpbnQgX19pbml0IHB2aF9h ZGRfbWVtX3JhbmdlKHN0cnVjdCBkb21haW4gKmQsIHVpbnQ2NF90IHMsIHVpbnQ2NF90IGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSkKK3sK KyAgICBzdHJ1Y3QgZTgyMGVudHJ5ICptYXA7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBm b3IgKCBpID0gMDsgaSA8IGQtPmFyY2gubnJfZTgyMDsgaSsrICkKKyAgICB7CisgICAgICAgIHVp bnQ2NF90IHJzID0gZC0+YXJjaC5lODIwW2ldLmFkZHI7CisgICAgICAgIHVpbnQ2NF90IHJlID0g cnMgKyBkLT5hcmNoLmU4MjBbaV0uc2l6ZTsKKworICAgICAgICBpZiAoIHJzID09IGUgJiYgZC0+ YXJjaC5lODIwW2ldLnR5cGUgPT0gdHlwZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGQtPmFy Y2guZTgyMFtpXS5hZGRyID0gczsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisK KyAgICAgICAgaWYgKCByZSA9PSBzICYmIGQtPmFyY2guZTgyMFtpXS50eXBlID09IHR5cGUgJiYK KyAgICAgICAgICAgICAoaSArIDEgPT0gZC0+YXJjaC5ucl9lODIwIHx8IGQtPmFyY2guZTgyMFtp ICsgMV0uYWRkciA+PSBlKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGQtPmFyY2guZTgyMFtp XS5zaXplICs9IGUgLSBzOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAg ICAgICBpZiAoIHJzID49IGUgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCBy ZSA+IHMgKQorICAgICAgICAgICAgcmV0dXJuIC1FRVhJU1Q7CisgICAgfQorCisgICAgbWFwID0g eHphbGxvY19hcnJheShzdHJ1Y3QgZTgyMGVudHJ5LCBkLT5hcmNoLm5yX2U4MjAgKyAxKTsKKyAg ICBpZiAoICFtYXAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKFhFTkxPR19XQVJOSU5HICJFODIw OiBvdXQgb2YgbWVtb3J5IHRvIGFkZCByZWdpb25cbiIpOworICAgICAgICByZXR1cm4gLUVOT01F TTsKKyAgICB9CisKKyAgICBtZW1jcHkobWFwLCBkLT5hcmNoLmU4MjAsIGkgKiBzaXplb2YoKmQt PmFyY2guZTgyMCkpOworICAgIG1lbWNweShtYXAgKyBpICsgMSwgZC0+YXJjaC5lODIwICsgaSwK KyAgICAgICAgICAgKGQtPmFyY2gubnJfZTgyMCAtIGkpICogc2l6ZW9mKCpkLT5hcmNoLmU4MjAp KTsKKyAgICBtYXBbaV0uYWRkciA9IHM7CisgICAgbWFwW2ldLnNpemUgPSBlIC0gczsKKyAgICBt YXBbaV0udHlwZSA9IHR5cGU7CisgICAgeGZyZWUoZC0+YXJjaC5lODIwKTsKKyAgICBkLT5hcmNo LmU4MjAgPSBtYXA7CisgICAgZC0+YXJjaC5ucl9lODIwKys7CisKKyAgICByZXR1cm4gMDsKK30K Kwogc3RhdGljIGludCBfX2luaXQgcHZoX3NldHVwX3ZteF9yZWFsbW9kZV9oZWxwZXJzKHN0cnVj dCBkb21haW4gKmQpCiB7CiAgICAgcDJtX3R5cGVfdCBwMm10OwpAQCAtMjE0Nyw2ICsyMjEwLDQ1 MyBAQCBzdGF0aWMgaW50IF9faW5pdCBwdmhfc2V0dXBfY3B1cyhzdHJ1Y3QgZG9tYWluICpkLCBw YWRkcl90IGVudHJ5LAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhY3Bp X2NvdW50X2ludHJfb3ZyKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5k KQoreworCisgICAgYWNwaV9pbnRyX292ZXJyaWRlcysrOworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IF9faW5pdCBhY3BpX3NldF9pbnRyX292cihzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9o ZWFkZXIgKmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgIGNvbnN0IHN0cnVjdCBhY3BpX21hZHRfaW50ZXJy dXB0X292ZXJyaWRlICppbnRyID0KKyAgICAgICAgY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0 IGFjcGlfbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUsIGhlYWRlcik7CisKKyAgICAqaW50c3Jjb3Zy ID0gKmludHI7CisgICAgaW50c3Jjb3ZyKys7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBfX2luaXQgYWNwaV9jb3VudF9ubWlfc3JjKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRl ciAqaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGxvbmcgZW5kKQoreworCisgICAgYWNwaV9ubWlfc291cmNlcysrOworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3NldF9ubWlfc3JjKHN0cnVjdCBhY3Bp X3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKyAgICBjb25zdCBzdHJ1Y3QgYWNwaV9t YWR0X25taV9zb3VyY2UgKnNyYyA9CisgICAgICAgIGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVj dCBhY3BpX21hZHRfbm1pX3NvdXJjZSwgaGVhZGVyKTsKKworICAgICpubWlzcmMgPSAqc3JjOwor ICAgIG5taXNyYysrOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFj cGlfY2hlY2tfeDJhcGljKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQp Cit7CisKKyAgICBhY3BpX3gyYXBpYyA9IHRydWU7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgX19pbml0IHB2aF9zZXR1cF9hY3BpX21hZHQoc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJf dCAqYWRkcikKK3sKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0ICptYWR0OworICAgIHN0cnVj dCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGU7CisgICAgc3RydWN0IGFjcGlfbWFkdF9pb19hcGlj ICppb19hcGljOworICAgIHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfYXBpYyAqbG9jYWxfYXBpYzsK KyAgICBzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpYyAqeDJhcGljOworICAgIGFjcGlfc3Rh dHVzIHN0YXR1czsKKyAgICB1bnNpZ25lZCBsb25nIHNpemU7CisgICAgdW5zaWduZWQgaW50IGks IG1heF92Y3B1czsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBDb3VudCBudW1iZXIgb2YgaW50ZXJy dXB0IG92ZXJyaWRlcyBpbiB0aGUgTUFEVC4gKi8KKyAgICBhY3BpX3RhYmxlX3BhcnNlX21hZHQo QUNQSV9NQURUX1RZUEVfSU5URVJSVVBUX09WRVJSSURFLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBhY3BpX2NvdW50X2ludHJfb3ZyLCBVSU5UX01BWCk7CisKKyAgICAvKiBDb3VudCBudW1i ZXIgb2YgTk1JIHNvdXJjZXMgaW4gdGhlIE1BRFQuICovCisgICAgYWNwaV90YWJsZV9wYXJzZV9t YWR0KEFDUElfTUFEVF9UWVBFX05NSV9TT1VSQ0UsIGFjcGlfY291bnRfbm1pX3NyYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgVUlOVF9NQVgpOworCisgICAgLyogQ2hlY2sgaWYgdGhlcmUg YXJlIHgyQVBJQyBlbnRyaWVzLiAqLworICAgIGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01B RFRfVFlQRV9MT0NBTF9YMkFQSUMsIGFjcGlfY2hlY2tfeDJhcGljLCAxKTsKKworICAgIG1heF92 Y3B1cyA9IGRvbTBfbWF4X3ZjcHVzKCk7CisgICAgLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRo ZSBjcmFmdGVkIE1BRFQuICovCisgICAgc2l6ZSA9IHNpemVvZigqbWFkdCk7CisgICAgc2l6ZSAr PSBzaXplb2YoKmlvX2FwaWMpOworICAgIC8qCisgICAgICogVGhlIEFQSUMgSUQgZmllbGQgb2Yg dGhlIGxvY2FsIEFQSUMgc3RydWN0IGlzIG9ubHkgMWJ5dGUsIHNvIHdlIG5lZWQKKyAgICAgKiB0 byBsaW1pdCB0aGUgbnVtYmVyIG9mIGxvY2FsIEFQSUMgZW50cmllcyB0byAxMjggYmVjYXVzZSB3 ZSBvbmx5IHVzZQorICAgICAqIGV2ZW4gbnVtYmVycyBhcyBBUElDIElEcy4KKyAgICAgKi8KKyAg ICBzaXplICs9IHNpemVvZigqbG9jYWxfYXBpYykgKgorICAgICAgICAgICAgbWluKG1heF92Y3B1 cywgMVUgPDwgKHNpemVvZihsb2NhbF9hcGljLT5pZCkgKiA4KSk7CisgICAgc2l6ZSArPSBzaXpl b2YoKmludHNyY292cikgKiBhY3BpX2ludHJfb3ZlcnJpZGVzOworICAgIHNpemUgKz0gc2l6ZW9m KCpubWlzcmMpICogYWNwaV9ubWlfc291cmNlczsKKyAgICBzaXplICs9IGFjcGlfeDJhcGljID8g c2l6ZW9mKCp4MmFwaWMpICogZG9tMF9tYXhfdmNwdXMoKSA6IDA7CisKKyAgICBtYWR0ID0geHph bGxvY19ieXRlcyhzaXplKTsKKyAgICBpZiAoICFtYWR0ICkKKyAgICB7CisgICAgICAgIHByaW50 aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgTUFEVCB0YWJsZVxuIik7CisgICAgICAg IHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIC8qIENvcHkgdGhlIG5hdGl2ZSBNQURUIHRh YmxlIGhlYWRlci4gKi8KKyAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURU LCAwLCAmdGFibGUpOworICAgIGlmICggIUFDUElfU1VDQ0VTUyhzdGF0dXMpICkKKyAgICB7Cisg ICAgICAgIHByaW50aygiRmFpbGVkIHRvIGdldCBNQURUIEFDUEkgdGFibGUsIGFib3J0aW5nLlxu Iik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAgICBtYWR0LT5oZWFkZXIgPSAq dGFibGU7CisgICAgbWFkdC0+YWRkcmVzcyA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisgICAg LyoKKyAgICAgKiBOQjogdGhpcyBpcyBjdXJyZW50bHkgc2V0IHRvIDQsIHdoaWNoIGlzIHRoZSBy ZXZpc2lvbiBpbiB0aGUgQUNQSQorICAgICAqIHNwZWMgNi4xLiBTYWRseSBBQ1BJQ0EgZG9lc24n dCBwcm92aWRlIHJldmlzaW9uIG51bWJlcnMgZm9yIHRoZQorICAgICAqIHRhYmxlcyBkZXNjcmli ZWQgaW4gdGhlIGhlYWRlcnMuCisgICAgICovCisgICAgbWFkdC0+aGVhZGVyLnJldmlzaW9uID0g bWluX3QodW5zaWduZWQgY2hhciwgdGFibGUtPnJldmlzaW9uLCA0KTsKKworICAgIC8qCisgICAg ICogU2V0dXAgdGhlIElPIEFQSUMgZW50cnkuCisgICAgICogRklYTUU6IHRoZSBjdXJyZW50IHZJ Ty1BUElDIGNvZGUganVzdCBzdXBwb3J0cyBvbmUgSU8tQVBJQyBpbnN0YW5jZQorICAgICAqIHBl ciBkb21haW4uIFRoaXMgbXVzdCBiZSBmaXhlZCBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBzYW1l IGFtb3VudCBvZgorICAgICAqIElPIEFQSUNzIGFzIGF2YWlsYWJsZSBvbiBiYXJlIG1ldGFsLCBh bmQgd2l0aCB0aGUgc2FtZSBJRHMgYXMgZm91bmQgaW4KKyAgICAgKiB0aGUgbmF0aXZlIElPIEFQ SUMgTUFEVCBlbnRyaWVzLgorICAgICAqLworICAgIGlmICggbnJfaW9hcGljcyA+IDEgKQorICAg ICAgICBwcmludGsoIldBUk5JTkc6IGZvdW5kICVkIElPIEFQSUNzLCBEb20wIHdpbGwgb25seSBo YXZlIGFjY2VzcyB0byAxIGVtdWxhdGVkIElPIEFQSUNcbiIsCisgICAgICAgICAgICAgICBucl9p b2FwaWNzKTsKKyAgICBpb19hcGljID0gKHN0cnVjdCBhY3BpX21hZHRfaW9fYXBpYyAqKShtYWR0 ICsgMSk7CisgICAgaW9fYXBpYy0+aGVhZGVyLnR5cGUgPSBBQ1BJX01BRFRfVFlQRV9JT19BUElD OworICAgIGlvX2FwaWMtPmhlYWRlci5sZW5ndGggPSBzaXplb2YoKmlvX2FwaWMpOworICAgIGlv X2FwaWMtPmlkID0gZG9tYWluX3Zpb2FwaWMoZCktPmlkOworICAgIGlvX2FwaWMtPmFkZHJlc3Mg PSBWSU9BUElDX0RFRkFVTFRfQkFTRV9BRERSRVNTOworCisgICAgbG9jYWxfYXBpYyA9IChzdHJ1 Y3QgYWNwaV9tYWR0X2xvY2FsX2FwaWMgKikoaW9fYXBpYyArIDEpOworICAgIGZvciAoIGkgPSAw OyBpIDwgbWluKG1heF92Y3B1cywgMVUgPDwgKHNpemVvZihsb2NhbF9hcGljLT5pZCkgKiA4KSk7 IGkrKyApCisgICAgeworICAgICAgICBsb2NhbF9hcGljLT5oZWFkZXIudHlwZSA9IEFDUElfTUFE VF9UWVBFX0xPQ0FMX0FQSUM7CisgICAgICAgIGxvY2FsX2FwaWMtPmhlYWRlci5sZW5ndGggPSBz aXplb2YoKmxvY2FsX2FwaWMpOworICAgICAgICBsb2NhbF9hcGljLT5wcm9jZXNzb3JfaWQgPSBp OworICAgICAgICBsb2NhbF9hcGljLT5pZCA9IGkgKiAyOworICAgICAgICBsb2NhbF9hcGljLT5s YXBpY19mbGFncyA9IEFDUElfTUFEVF9FTkFCTEVEOworICAgICAgICBsb2NhbF9hcGljKys7Cisg ICAgfQorCisgICAgLyogU2V0dXAgaW50ZXJydXB0IG92ZXJyaWRlcy4gKi8KKyAgICBpbnRzcmNv dnIgPSAoc3RydWN0IGFjcGlfbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUgKilsb2NhbF9hcGljOwor ICAgIGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01BRFRfVFlQRV9JTlRFUlJVUFRfT1ZFUlJJ REUsIGFjcGlfc2V0X2ludHJfb3ZyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2lu dHJfb3ZlcnJpZGVzKTsKKworICAgIC8qIFNldHVwIE5NSSBzb3VyY2VzLiAqLworICAgIG5taXNy YyA9IChzdHJ1Y3QgYWNwaV9tYWR0X25taV9zb3VyY2UgKilpbnRzcmNvdnI7CisgICAgYWNwaV90 YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX05NSV9TT1VSQ0UsIGFjcGlfc2V0X25taV9z cmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfbm1pX3NvdXJjZXMpOworCisgICAg LyoKKyAgICAgKiBOQjogeDJBUElDIGVudHJpZXMgd2lsbCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRo ZXJlIGFyZSBhbHNvIHByZXNlbnQKKyAgICAgKiBvbiB0aGUgbmF0aXZlIE1BRFQuCisgICAgICov CisgICAgeDJhcGljID0gKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICopbm1pc3JjOwor ICAgIGZvciAoIGkgPSAwOyBhY3BpX3gyYXBpYyAmJiBpIDwgZG9tMF9tYXhfdmNwdXMoKTsgaSsr ICkKKyAgICB7CisgICAgICAgIHgyYXBpYy0+aGVhZGVyLnR5cGUgPSBBQ1BJX01BRFRfVFlQRV9M T0NBTF9YMkFQSUM7CisgICAgICAgIHgyYXBpYy0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZigqeDJh cGljKTsKKyAgICAgICAgeDJhcGljLT51aWQgPSBpOworICAgICAgICB4MmFwaWMtPmxvY2FsX2Fw aWNfaWQgPSBpICogMjsKKyAgICAgICAgeDJhcGljLT5sYXBpY19mbGFncyA9IEFDUElfTUFEVF9F TkFCTEVEOworICAgICAgICB4MmFwaWMrKzsKKyAgICB9CisKKyAgICBBU1NFUlQoKCh2b2lkICop eDJhcGljIC0gKHZvaWQgKiltYWR0KSA9PSBzaXplKTsKKyAgICBtYWR0LT5oZWFkZXIubGVuZ3Ro ID0gc2l6ZTsKKyAgICAvKgorICAgICAqIENhbGxpbmcgYWNwaV90Yl9jaGVja3N1bSBoZXJlIGlz IGEgbGF5ZXJpbmcgdmlvbGF0aW9uLCBidXQKKyAgICAgKiBpbnRyb2R1Y2luZyBhIHdyYXBwZXIg Zm9yIHN1Y2ggc2ltcGxlIHVzYWdlIHNlZW1zIG92ZXJraWxsLgorICAgICAqLworICAgIG1hZHQt PmhlYWRlci5jaGVja3N1bSAtPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIG1h ZHQpLCBzaXplKTsKKworICAgIC8qIFBsYWNlIHRoZSBuZXcgTUFEVCBpbiBndWVzdCBtZW1vcnkg c3BhY2UuICovCisgICAgaWYgKCBwdmhfc3RlYWxfcmFtKGQsIHNpemUsIEdCKDQpLCBhZGRyKSAp CisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBmaW5kIGFsbG9jYXRlIGd1ZXN0IFJB TSBmb3IgTUFEVFxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIC8q IE1hcmsgdGhpcyByZWdpb24gYXMgRTgyMF9BQ1BJLiAqLworICAgIGlmICggcHZoX2FkZF9tZW1f cmFuZ2UoZCwgKmFkZHIsICphZGRyICsgc2l6ZSwgRTgyMF9BQ1BJKSApCisgICAgICAgIHByaW50 aygiVW5hYmxlIHRvIGFkZCBNQURUIHJlZ2lvbiB0byBtZW1vcnkgbWFwXG4iKTsKKworICAgIHJj ID0gaHZtX2NvcHlfdG9fZ3Vlc3RfcGh5c192Y3B1KCphZGRyLCBtYWR0LCBzaXplLCBkLT52Y3B1 WzBdKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGNv cHkgTUFEVCBpbnRvIGd1ZXN0IG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9 CisgICAgeGZyZWUobWFkdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgX19p bml0IGFjcGlfbWVtb3J5X2Jhbm5lZCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICB1 bnNpZ25lZCBsb25nIG1mbiwgbnJfcGFnZXMsIGk7CisKKyAgICBtZm4gPSBQRk5fRE9XTihhZGRy ZXNzKTsKKyAgICBucl9wYWdlcyA9IFBGTl9VUCgoYWRkcmVzcyAmIH5QQUdFX01BU0spICsgc2l6 ZSk7CisgICAgZm9yICggaSA9IDAgOyBpIDwgbnJfcGFnZXM7IGkrKyApCisgICAgICAgIGlmICgg IXBhZ2VfaXNfcmFtX3R5cGUobWZuICsgaSwgUkFNX1RZUEVfUkVTRVJWRUQpICYmCisgICAgICAg ICAgICAgIXBhZ2VfaXNfcmFtX3R5cGUobWZuICsgaSwgUkFNX1RZUEVfQUNQSSkgKQorICAgICAg ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29s IF9faW5pdCBwdmhfYWNwaV90YWJsZV9hbGxvd2VkKGNvbnN0IGNoYXIgKnNpZykKK3sKKyAgICBz dGF0aWMgY29uc3QgY2hhciBfX2luaXQgYmFubmVkX3RhYmxlc1tdW0FDUElfTkFNRV9TSVpFXSA9 IHsKKyAgICAgICAgQUNQSV9TSUdfSFBFVCwgQUNQSV9TSUdfU0xJVCwgQUNQSV9TSUdfU1JBVCwg QUNQSV9TSUdfTVBTVCwKKyAgICAgICAgQUNQSV9TSUdfUE1UVCwgQUNQSV9TSUdfTUFEVCwgQUNQ SV9TSUdfRE1BUn07CisgICAgaW50IGk7CisKKyAgICBmb3IgKCBpID0gMCA7IGkgPCBBUlJBWV9T SVpFKGJhbm5lZF90YWJsZXMpOyBpKysgKQorICAgICAgICBpZiAoIHN0cm5jbXAoc2lnLCBiYW5u ZWRfdGFibGVzW2ldLCBBQ1BJX05BTUVfU0laRSkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisKKyAgICAvKiBNYWtlIHN1cmUgdGFibGUgZG9lc24ndCByZXNpZGUgaW4gYSBSQU0g cmVnaW9uLiAqLworICAgIGlmICggYWNwaV9tZW1vcnlfYmFubmVkKGFjcGlfZ2JsX3Jvb3RfdGFi bGVfbGlzdC50YWJsZXNbaV0uYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh Y3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLmxlbmd0aCkgKQorICAgIHsKKyAgICAg ICAgcHJpbnRrKCJTa2lwcGluZyB0YWJsZSAlLjRzIGJlY2F1c2UgcmVzaWRlcyBpbiBhIG5vbi1B Q1BJLCBub24tcmVzZXJ2ZWQgcmVnaW9uXG4iLAorICAgICAgICAgICAgICAgc2lnKTsKKyAgICAg ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg aW50IF9faW5pdCBwdmhfc2V0dXBfYWNwaV94c2R0KHN0cnVjdCBkb21haW4gKmQsIHBhZGRyX3Qg bWFkdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkcl90 ICphZGRyKQoreworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3hzZHQgKnhzZHQ7CisgICAgc3RydWN0 IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpy c2RwOworICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHNpemVvZigqeHNkdCk7CisgICAgdW5zaWdu ZWQgaW50IGksIGosIG51bV90YWJsZXMgPSAwOworICAgIHBhZGRyX3QgeHNkdF9wYWRkcjsKKyAg ICBpbnQgcmM7CisKKyAgICAvKgorICAgICAqIFJlc3RvcmUgb3JpZ2luYWwgRE1BUiB0YWJsZSBz aWduYXR1cmUsIHdlIGFyZSBnb2luZyB0byBmaWx0ZXIgaXQKKyAgICAgKiBmcm9tIHRoZSBuZXcg WFNEVCB0aGF0IGlzIHByZXNlbnRlZCB0byB0aGUgZ3Vlc3QsIHNvIGl0IG5vIGxvbmdlcgorICAg ICAqIG1ha2VzIHNlbnNlIHRvIGhhdmUgaXQncyBzaWduYXR1cmUgemFwcGVkLgorICAgICAqLwor ICAgIGFjcGlfZG1hcl9yZWluc3RhdGUoKTsKKworICAgIC8qIENvdW50IHRoZSBudW1iZXIgb2Yg dGFibGVzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgWFNEVC4gKi8KKyAgICBmb3IoIGkgPSAw OyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyBpKysgKQorICAgIHsKKyAgICAg ICAgY29uc3QgY2hhciAqc2lnID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5z aWduYXR1cmUuYXNjaWk7CisKKyAgICAgICAgaWYgKCBwdmhfYWNwaV90YWJsZV9hbGxvd2VkKHNp ZykgKQorICAgICAgICAgICAgbnVtX3RhYmxlcysrOworICAgIH0KKworICAgIC8qCisgICAgICog Tm8gbmVlZCB0byBhZGQgb3Igc3VidHJhY3QgYW55dGhpbmcgYmVjYXVzZSBzdHJ1Y3QgYWNwaV90 YWJsZV94c2R0CisgICAgICogaW5jbHVkZXMgb25lIGFycmF5IHNsb3QgYWxyZWFkeSwgYW5kIHdl IGhhdmUgZmlsdGVyZWQgb3V0IHRoZSBvcmlnaW5hbAorICAgICAqIE1BRFQgYW5kIHdlIGFyZSBn b2luZyB0byBhZGQgYSBjdXN0b20gYnVpbHQgTUFEVC4KKyAgICAgKi8KKyAgICBzaXplICs9IG51 bV90YWJsZXMgKiBzaXplb2YoeHNkdC0+dGFibGVfb2Zmc2V0X2VudHJ5WzBdKTsKKworICAgIHhz ZHQgPSB4emFsbG9jX2J5dGVzKHNpemUpOworICAgIGlmICggIXhzZHQgKQorICAgIHsKKyAgICAg ICAgcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBYU0RUIHRhYmxlXG4iKTsK KyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisgICAgLyogQ29weSB0aGUgbmF0aXZl IFhTRFQgdGFibGUgaGVhZGVyLiAqLworICAgIHJzZHAgPSBhY3BpX29zX21hcF9tZW1vcnkoYWNw aV9vc19nZXRfcm9vdF9wb2ludGVyKCksIHNpemVvZigqcnNkcCkpOworICAgIGlmICggIXJzZHAg KQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gbWFwIFJTRFBcbiIpOworICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgeHNkdF9wYWRkciA9IHJzZHAtPnhzZHRfcGh5 c2ljYWxfYWRkcmVzczsKKyAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwLCBzaXplb2YoKnJz ZHApKTsKKyAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeSh4c2R0X3BhZGRyLCBzaXplb2Yo KnRhYmxlKSk7CisgICAgaWYgKCAhdGFibGUgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFi bGUgdG8gbWFwIFhTRFRcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAg eHNkdC0+aGVhZGVyID0gKnRhYmxlOworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBz aXplb2YoKnRhYmxlKSk7CisKKyAgICAvKiBBZGQgdGhlIGN1c3RvbSBNQURULiAqLworICAgIHhz ZHQtPnRhYmxlX29mZnNldF9lbnRyeVswXSA9IG1hZHRfYWRkcjsKKworICAgIC8qIENvcHkgdGhl IGFkZHJlc3NlcyBvZiB0aGUgcmVzdCBvZiB0aGUgYWxsb3dlZCB0YWJsZXMuICovCisgICAgZm9y KCBpID0gMCwgaiA9IDE7IGkgPCBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuY291bnQ7IGkrKyAp CisgICAgeworICAgICAgICBjb25zdCBjaGFyICpzaWcgPSBhY3BpX2dibF9yb290X3RhYmxlX2xp c3QudGFibGVzW2ldLnNpZ25hdHVyZS5hc2NpaTsKKworICAgICAgICBpZiAoIHB2aF9hY3BpX3Rh YmxlX2FsbG93ZWQoc2lnKSApCisgICAgICAgICAgICB4c2R0LT50YWJsZV9vZmZzZXRfZW50cnlb aisrXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZ2JsX3Jvb3RfdGFi bGVfbGlzdC50YWJsZXNbaV0uYWRkcmVzczsKKyAgICB9CisKKyAgICB4c2R0LT5oZWFkZXIucmV2 aXNpb24gPSAxOworICAgIHhzZHQtPmhlYWRlci5sZW5ndGggPSBzaXplOworICAgIC8qCisgICAg ICogQ2FsbGluZyBhY3BpX3RiX2NoZWNrc3VtIGhlcmUgaXMgYSBsYXllcmluZyB2aW9sYXRpb24s IGJ1dAorICAgICAqIGludHJvZHVjaW5nIGEgd3JhcHBlciBmb3Igc3VjaCBzaW1wbGUgdXNhZ2Ug c2VlbXMgb3ZlcmtpbGwuCisgICAgICovCisgICAgeHNkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGFj cGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgeHNkdCksIHNpemUpOworCisgICAgLyog UGxhY2UgdGhlIG5ldyBYU0RUIGluIGd1ZXN0IG1lbW9yeSBzcGFjZS4gKi8KKyAgICBpZiAoIHB2 aF9zdGVhbF9yYW0oZCwgc2l6ZSwgR0IoNCksIGFkZHIpICkKKyAgICB7CisgICAgICAgIHByaW50 aygiVW5hYmxlIHRvIGZpbmQgZ3Vlc3QgUkFNIGZvciBYU0RUXG4iKTsKKyAgICAgICAgcmV0dXJu IC1FTk9NRU07CisgICAgfQorCisgICAgLyogTWFyayB0aGlzIHJlZ2lvbiBhcyBFODIwX0FDUEku ICovCisgICAgaWYgKCBwdmhfYWRkX21lbV9yYW5nZShkLCAqYWRkciwgKmFkZHIgKyBzaXplLCBF ODIwX0FDUEkpICkKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gYWRkIFhTRFQgcmVnaW9uIHRv IG1lbW9yeSBtYXBcbiIpOworCisgICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlzX3ZjcHUo KmFkZHIsIHhzZHQsIHNpemUsIGQtPnZjcHVbMF0pOworICAgIGlmICggcmMgKQorICAgIHsKKyAg ICAgICAgcHJpbnRrKCJVbmFibGUgdG8gY29weSBYU0RUIGludG8gZ3Vlc3QgbWVtb3J5XG4iKTsK KyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgICB4ZnJlZSh4c2R0KTsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwdmhfc2V0dXBfYWNwaShzdHJ1Y3QgZG9tYWlu ICpkLCBwYWRkcl90IHN0YXJ0X2luZm8pCit7CisgICAgc3RydWN0IGFjcGlfdGFibGVfcnNkcCBy c2RwLCAqbmF0aXZlX3JzZHA7CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIG5yX3BhZ2VzOworICAg IHBhZGRyX3QgbWFkdF9wYWRkciwgeHNkdF9wYWRkciwgcnNkcF9wYWRkcjsKKyAgICB1bnNpZ25l ZCBpbnQgaTsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBTY2FuIHRvcC1sZXZlbCB0YWJsZXMgYW5k IGFkZCB0aGVpciByZWdpb25zIHRvIHRoZSBndWVzdCBtZW1vcnkgbWFwLiAqLworICAgIGZvcigg aSA9IDA7IGkgPCBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuY291bnQ7IGkrKyApCisgICAgewor ICAgICAgICBjb25zdCBjaGFyICpzaWcgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVz W2ldLnNpZ25hdHVyZS5hc2NpaTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gYWNwaV9n Ymxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5hZGRyZXNzOworICAgICAgICB1bnNpZ25lZCBs b25nIHNpemUgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLmxlbmd0aDsKKwor ICAgICAgICAvKgorICAgICAgICAgKiBNYWtlIHN1cmUgdGhlIG9yaWdpbmFsIE1BRFQgaXMgYWxz byBtYXBwZWQsIHNvIHRoYXQgRG9tMCBjYW4KKyAgICAgICAgICogcHJvcGVybHkgYWNjZXNzIHRo ZSBkYXRhIHJldHVybmVkIGJ5IF9NQVQgbWV0aG9kcyBpbiBjYXNlIGl0J3MKKyAgICAgICAgICog cmUtdXNpbmcgTUFEVCBtZW1vcnkuCisgICAgICAgICAqLworICAgICAgICBpZiAoIHB2aF9hY3Bp X3RhYmxlX2FsbG93ZWQoc2lnKSB8fAorICAgICAgICAgICAgIChzdHJuY21wKHNpZywgQUNQSV9T SUdfTUFEVCwgQUNQSV9OQU1FX1NJWkUpID09IDAgJiYKKyAgICAgICAgICAgICAhYWNwaV9tZW1v cnlfYmFubmVkKGFkZHIsIHNpemUpKSApCisgICAgICAgICAgICAgcHZoX2FkZF9tZW1fcmFuZ2Uo ZCwgYWRkciwgYWRkciArIHNpemUsIEU4MjBfQUNQSSk7CisgICAgfQorCisgICAgLyogSWRlbnRp dHkgbWFwIEFDUEkgZTgyMCByZWdpb25zLiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgZC0+YXJj aC5ucl9lODIwOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCBkLT5hcmNoLmU4MjBbaV0udHlw ZSAhPSBFODIwX0FDUEkgJiYKKyAgICAgICAgICAgICBkLT5hcmNoLmU4MjBbaV0udHlwZSAhPSBF ODIwX05WUyApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBwZm4gPSBQRk5fRE9X TihkLT5hcmNoLmU4MjBbaV0uYWRkcik7CisgICAgICAgIG5yX3BhZ2VzID0gUEZOX1VQKChkLT5h cmNoLmU4MjBbaV0uYWRkciAmIH5QQUdFX01BU0spICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZC0+YXJjaC5lODIwW2ldLnNpemUpOworCisgICAgICAgIHJjID0gbW9kaWZ5X2lkZW50aXR5 X21taW8oZCwgcGZuLCBucl9wYWdlcywgdHJ1ZSk7CisgICAgICAgIGlmICggcmMgKQorICAgICAg ICB7CisgICAgICAgICAgICBwcmludGsoIkZhaWxlZCB0byBtYXAgQUNQSSByZWdpb24gWyUjbHgs ICUjbHgpIGludG8gRG9tMCBtZW1vcnkgbWFwXG4iLAorICAgICAgICAgICAgICAgICAgIHBmbiwg cGZuICsgbnJfcGFnZXMpOworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAg fQorCisgICAgcmMgPSBwdmhfc2V0dXBfYWNwaV9tYWR0KGQsICZtYWR0X3BhZGRyKTsKKyAgICBp ZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBwdmhfc2V0dXBfYWNwaV94 c2R0KGQsIG1hZHRfcGFkZHIsICZ4c2R0X3BhZGRyKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAg cmV0dXJuIHJjOworCisgICAgLyogQ3JhZnQgYSBjdXN0b20gUlNEUC4gKi8KKyAgICBtZW1zZXQo JnJzZHAsIDAsIHNpemVvZihyc2RwKSk7CisgICAgbWVtY3B5KHJzZHAuc2lnbmF0dXJlLCBBQ1BJ X1NJR19SU0RQLCBzaXplb2YocnNkcC5zaWduYXR1cmUpKTsKKyAgICBuYXRpdmVfcnNkcCA9IGFj cGlfb3NfbWFwX21lbW9yeShhY3BpX29zX2dldF9yb290X3BvaW50ZXIoKSwgc2l6ZW9mKHJzZHAp KTsKKyAgICBtZW1jcHkocnNkcC5vZW1faWQsIG5hdGl2ZV9yc2RwLT5vZW1faWQsIHNpemVvZihy c2RwLm9lbV9pZCkpOworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KG5hdGl2ZV9yc2RwLCBzaXpl b2YocnNkcCkpOworICAgIHJzZHAucmV2aXNpb24gPSAyOworICAgIHJzZHAueHNkdF9waHlzaWNh bF9hZGRyZXNzID0geHNkdF9wYWRkcjsKKyAgICByc2RwLnJzZHRfcGh5c2ljYWxfYWRkcmVzcyA9 IDA7CisgICAgcnNkcC5sZW5ndGggPSBzaXplb2YocnNkcCk7CisgICAgLyoKKyAgICAgKiBDYWxs aW5nIGFjcGlfdGJfY2hlY2tzdW0gaGVyZSBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbiwgYnV0Cisg ICAgICogaW50cm9kdWNpbmcgYSB3cmFwcGVyIGZvciBzdWNoIHNpbXBsZSB1c2FnZSBzZWVtcyBv dmVya2lsbC4KKyAgICAgKi8KKyAgICByc2RwLmNoZWNrc3VtIC09IGFjcGlfdGJfY2hlY2tzdW0o QUNQSV9DQVNUX1BUUih1OCwgJnJzZHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBQ1BJX1JTRFBfUkVWMF9TSVpFKTsKKyAgICByc2RwLmV4dGVuZGVkX2NoZWNrc3Vt IC09IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgJnJzZHApLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocnNkcCkpOworCisg ICAgLyoKKyAgICAgKiBQbGFjZSB0aGUgbmV3IFJTRFAgaW4gZ3Vlc3QgbWVtb3J5IHNwYWNlLgor ICAgICAqCisgICAgICogTkI6IHRoaXMgUlNEUCBpcyBub3QgZ29pbmcgdG8gcmVwbGFjZSB0aGUg b3JpZ2luYWwgUlNEUCwgd2hpY2gKKyAgICAgKiBzaG91bGQgc3RpbGwgYmUgYWNjZXNzaWJsZSB0 byB0aGUgZ3Vlc3QuIEhvd2V2ZXIgdGhhdCBSU0RQIGlzCisgICAgICogZ29pbmcgdG8gcG9pbnQg dG8gdGhlIG5hdGl2ZSBSU0RULCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgICAqLworICAg IGlmICggcHZoX3N0ZWFsX3JhbShkLCBzaXplb2YocnNkcCksIEdCKDQpLCAmcnNkcF9wYWRkcikg KQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgZ3Vlc3QgUkFNIGZv ciBSU0RQXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisgICAgLyogTWFy ayB0aGlzIHJlZ2lvbiBhcyBFODIwX0FDUEkuICovCisgICAgaWYgKCBwdmhfYWRkX21lbV9yYW5n ZShkLCByc2RwX3BhZGRyLCByc2RwX3BhZGRyICsgc2l6ZW9mKHJzZHApLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgRTgyMF9BQ1BJKSApCisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGFk ZCBSU0RQIHJlZ2lvbiB0byBtZW1vcnkgbWFwXG4iKTsKKworICAgIC8qIENvcHkgUlNEUCBpbnRv IGd1ZXN0IG1lbW9yeS4gKi8KKyAgICByYyA9IGh2bV9jb3B5X3RvX2d1ZXN0X3BoeXNfdmNwdShy c2RwX3BhZGRyLCAmcnNkcCwgc2l6ZW9mKHJzZHApLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGQtPnZjcHVbMF0pOworICAgIGlmICggcmMgKQorICAgIHsKKyAgICAgICAg cHJpbnRrKCJVbmFibGUgdG8gY29weSBSU0RQIGludG8gZ3Vlc3QgbWVtb3J5XG4iKTsKKyAgICAg ICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIC8qIENvcHkgUlNEUCBhZGRyZXNzIHRvIHN0YXJ0 X2luZm8uICovCisgICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlzX3ZjcHUoc3RhcnRfaW5m byArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0 IGh2bV9zdGFydF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJzZHBfcGFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZyc2RwX3BhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZigoKHN0cnVjdCBodm1fc3RhcnRfaW5mbyAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCktPnJzZHBfcGFkZHIpLCBkLT52Y3B1WzBdKTsKKyAgICBpZiAo IHJjICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGNvcHkgUlNEUCBpbnRvIGd1 ZXN0IG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKwogc3RhdGljIGludCBfX2luaXQgY29uc3RydWN0X2RvbTBfcHZoKHN0cnVjdCBkb21h aW4gKmQsIGNvbnN0IG1vZHVsZV90ICppbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGltYWdlX2hlYWRyb29tLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV90ICppbml0cmQsCkBAIC0yMTgyLDYgKzI2OTIs MTMgQEAgc3RhdGljIGludCBfX2luaXQgY29uc3RydWN0X2RvbTBfcHZoKHN0cnVjdCBkb21haW4g KmQsIGNvbnN0IG1vZHVsZV90ICppbWFnZSwKICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIAor ICAgIHJjID0gcHZoX3NldHVwX2FjcGkoZCwgc3RhcnRfaW5mbyk7CisgICAgaWYgKCByYyApCisg ICAgeworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBzZXR1cCBEb20wIEFDUEkgdGFibGVzOiAl ZFxuIiwgcmMpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCiAgICAgY2xlYXJfYml0KF9W UEZfZG93biwgJmQtPnZjcHVbMF0tPnBhdXNlX2ZsYWdzKTsKIAogICAgIHJldHVybiAwOwotLSAK Mi4xMC4xIChBcHBsZSBHaXQtNzgpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==