From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v13 09/23] x86: refactor psr: L3 CAT: set value: assemble features value array. Date: Thu, 6 Jul 2017 09:53:02 +0800 Message-ID: <1499305996-19029-10-git-send-email-yi.y.sun@linux.intel.com> References: <1499305996-19029-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dSwCK-0000sb-HU for xen-devel@lists.xenproject.org; Thu, 06 Jul 2017 02:07:16 +0000 In-Reply-To: <1499305996-19029-1-git-send-email-yi.y.sun@linux.intel.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: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T25seSBjYW4gb25lIENPUyBJRCBiZSB1c2VkIGJ5IG9uZSBkb21haW4gYXQgb25lIHRpbWUuIFRo YXQgbWVhbnMgYWxsIGVuYWJsZWQKZmVhdHVyZXMnIENPUyByZWdpc3RlcnMgYXQgdGhpcyBDT1Mg SUQgYXJlIHZhbGlkIGZvciB0aGlzIGRvbWFpbiBhdCB0aGF0IHRpbWUuCgpXaGVuIHVzZXIgdXBk YXRlcyBhIGZlYXR1cmUncyB2YWx1ZSwgd2UgbmVlZCBtYWtlIHN1cmUgYWxsIG90aGVyIGZlYXR1 cmVzJwp2YWx1ZXMgYXJlIG5vdCBhZmZlY3RlZC4gU28sIHdlIGZpcnN0bHkgbmVlZCBnYXRoZXIg YW4gYXJyYXkgd2hpY2ggY29udGFpbnMKYWxsIGZlYXR1cmVzIGN1cnJlbnQgdmFsdWVzIGFuZCBy ZXBsYWNlIHRoZSBzZXR0aW5nIGZlYXR1cmUncyB2YWx1ZSBpbiBhcnJheQp0byBuZXcgdmFsdWUu CgpUaGVuLCB3ZSBjYW4gdHJ5IHRvIGZpbmQgaWYgdGhlcmUgaXMgYSBDT1MgSUQgb24gd2hpY2gg YWxsIGZlYXR1cmVzJyBDT1MKcmVnaXN0ZXJzIHZhbHVlcyBhcmUgc2FtZSBhcyB0aGUgYXJyYXku IElmIHdlIGNhbiBmaW5kLCB3ZSBqdXN0IHVzZSB0aGlzIENPUwpJRC4gSWYgZmFpbCB0byBmaW5k LCB3ZSBuZWVkIHBpY2sgYSBuZXcgQ09TIElELgoKVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHZhbHVl IGFycmF5IGFzc2VtYmxpbmcgZmxvdy4KClNpZ25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5zdW5A bGludXguaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2Uu Y29tPgotLS0KdjEzOgogICAgLSByZW1vdmUgYW4gdW5uZWNlc3NhcnkgYmxhbmsgbGluZS4KICAg ICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0gYWRkIGEgbmV3IGZ1bmN0aW9uICdz a2lwX3ByaW9yX2ZlYXR1cmVzKCknIHRvIHNraXAgdmFsdWUgYXJyYXkgYWNjb3JkaW5nCiAgICAg IHRvIGZlYXR1cmUgdHlwZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgaW4gbGF0ZXIgcGF0 Y2hlcyB0b28uCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCnYxMjoKICAgIC0gdXNl ICdBUlJBWV9TSVpFJyB0byBjYWxjdWxhdGUgYXJyYXkgYm91bmRhcnkuCiAgICAgIChzdWdnZXN0 ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHVzZSAnQVNTRVJUX1VOUkVBQ0hBQkxFKCknIHRvIHJl Y29yZCBidWcgYW5kIHJldHVybiBlcnJvciBjb2RlIGlmIGZlYXQKICAgICAgZXhpc3QgYnV0IHBy b3BzIGRvZXMgbm90IGV4aXN0LgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAg LSByZXR1cm4gMCBvbmx5IHdoZW4gdmFsdWUgaXMgc2V0IGluICdpbnNlcnRfdmFsX2ludG9fYXJy YXknLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQp2MTE6CiAgICAtIGNoYW5nZXMg YWJvdXQgJ2ZlYXRfcHJvcHMnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAg LSBjaGFuZ2VzIGFib3V0ICdnZXRfdmFsJy4gSXQgaXMgcmVwbGFjZWQgYnkgZ2VuZXJpYyBjb2Rl cy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKdjEwOgogICAgLSByZW1vdmUgJ2dl dF9vbGRfdmFsJyB0byBkaXJlY3RseSBjYWxsICdnZXRfdmFsJyB0byBnZXQgbmVlZGVkIHZhbC4K ICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0gbW92ZSAncHNyX2NoZWNrX2Ni bScgaW50byAnaW5zZXJ0X3ZhbF90b19hcnJheScuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJl dWxpY2gpCiAgICAtIGNoYW5nZSB0eXBlIG9mICdjYm0nIGluICdwc3JfY2hlY2tfY2JtJyB0byAn dW5zaWduZWQgbG9uZycuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHJl bW92ZSAnc2V0X25ld192YWwnIGFzIGl0IGNhbiBiZSBoYW5kbGVkIGluIGdlbmVyaWMgcHJvY2Vz cy4KICAgIC0gY2hhbmdlcyByZWxhdGVkIHRvICdmZWF0X3Byb3BzJy4KICAgICAgKHN1Z2dlc3Rl ZCBieSBKYW4gQmV1bGljaCkKICAgIC0gYWRqdXN0IGZsb3cgaW4gJ2dhdGhlcl92YWxfYXJyYXkn IHRvIGF2b2lkIGFycmF5IGNyb3NzLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQog ICAgLSBhZGp1c3QgZmxvdyBpbiAnaW5zZXJ0X3ZhbF90b19hcnJheScgdG8gYXZvaWQgYXJyYXkg Y3Jvc3MuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCnY5OgogICAgLSBhZGQgY29t bWVudHMgYWJvdXQgYm91bmRhcnkgY2hlY2tpbmcuCiAgICAgIChzdWdnZXN0ZWQgYnkgV2VpIExp dSkKICAgIC0gcmVuYW1lICdhc3NlbWJsZV92YWxfYXJyYXknIHRvICdjb21iaW5lX3ZhbF9hcnJh eScgaW4gcGVydmlvdXMgcGF0Y2guCiAgICAgIChzdWdnZXN0ZWQgYnkgV2VpIExpdSkKICAgIC0g cmVuYW1lICdsM19jYXRfZ2V0X2Nvc19udW0nIHRvICdjYXRfZ2V0X2Nvc19udW0nIHRvIGNvdmVy IGFsbCBMMy9MMiBDQVQKICAgICAgZmVhdHVyZXMuCiAgICAgIChzdWdnZXN0ZWQgYnkgUm9nZXIg UGF1KQogICAgLSByZW5hbWUgJ2wzX2NhdF9nZXRfb2xkX3ZhbCcgdG8gJ2NhdF9nZXRfb2xkX3Zh bCcgdG8gY292ZXIgYWxsIEwzL0wyIENBVAogICAgICBmZWF0dXJlcyBhbmQgcmV1c2UgY2F0X2dl dF92YWwgaW4gaXQuCiAgICAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1KQogICAgLSByZXBsYWNl IGZlYXR1cmUgbGlzdCBoYW5kbGluZyB0byBmZWF0dXJlIGFycmF5IGhhbmRsaW5nLgogICAgICAo c3VnZ2VzdGVkIGJ5IFJvZ2VyIFBhdSkKICAgIC0gbW9kaWZ5IHBhdGNoIHRpdGxlIHRvIGluZGlj YXRlICdMMyBDQVQnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSByZXBs YWNlICdtJyB0byAnbmV3X3ZhbCcuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAg ICAtIG1vdmUgY29zIGNoZWNrIG91dHNpZGUgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgIChzdWdn ZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHJlbW92ZSAnZ2V0X2Nvc19udW0nIGNhbGxiYWNr IGZ1bmN0aW9uLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBjaGFuZ2Vz IGFib3V0ICd1aW50NjRfdCcgdG8gJ3VpbnQzMl90Jy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4g QmV1bGljaCkKdjY6CiAgICAtIGNoYW5nZSAnYXNzZW1ibGVfdmFsX2FycmF5JyB0byAnY29tYmlu ZV92YWxfYXJyYXknLgogICAgICAoc3VnZ2VzdGVkIGJ5IEtvbnJhZCBSemVzenV0ZWsgV2lsaykK ICAgIC0gY2hlY2sgcmV0dXJuIHZhbHVlIG9mICdnZXRfb2xkX3ZhbCcuCiAgICAgIChzdWdnZXN0 ZWQgYnkgS29ucmFkIFJ6ZXN6dXRlayBXaWxrKQogICAgLSByZXBsYWNlIHNvbWUgJ0VJTlZBTCcg dG8gJ0VOT1NQQycuCiAgICAgIChzdWdnZXN0ZWQgYnkgS29ucmFkIFJ6ZXN6dXRlayBXaWxrKQp2 NToKICAgIC0gbW9kaWZ5IGNvbW1lbnRzIGFjY29yZGluZyB0byBjaGFuZ2VzIG9mIGNvZGVzLgog ICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBjaGFuZ2UgJ2Jvb2xfdCcgdG8g J2Jvb2wnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBtb2RpZnkgcmV0 dXJuIHZhbHVlIG9mIGNhbGxiYWNrIGZ1bmN0aW9ucyBiZWNhdXNlIHdlIGRvIG5vdCBuZWVkIHRo ZW0KICAgICAgdG8gcmV0dXJuIG51bWJlciBvZiBlbnRyaWVzIHRoZSBmZWF0dXJlIHVzZXMuIElu IGNhbGxlciwgd2UgY2FsbAogICAgICAnZ2V0X2Nvc19udW0nIHRvIGdldCB0aGUgbnVtYmVyIG9m IGVudHJpZXMgdGhlIGZlYXR1cmUgdXNlcy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGlj aCkKICAgIC0gbW9kaWZ5IHZhcmlhYmxlcyBuYW1lcyB0byBtYWtlIHRoZW0gYmV0dGVyLCBlLmcu ICdmZWF0X3RtcCcgdG8gJ2ZlYXQnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQp2 NDoKICAgIC0gY3JlYXRlIHRoaXMgcGF0Y2ggdG8gbWFrZSBjb2RlcyBlYXNpZXIgdG8gdW5kZXJz dGFuZC4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKLS0tCiB4ZW4vYXJjaC94ODYv cHNyLmMgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHNyLmMgYi94ZW4vYXJjaC94ODYvcHNyLmMK aW5kZXggNWFhMWJjYy4uODRhOGUzMCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3Bzci5jCisr KyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwpAQCAtMjEwLDYgKzIxMCwyOSBAQCBzdGF0aWMgZW51bSBw c3JfZmVhdF90eXBlIHBzcl9jYm1fdHlwZV90b19mZWF0X3R5cGUoZW51bSBjYm1fdHlwZSB0eXBl KQogICAgIHJldHVybiBmZWF0X3R5cGU7CiB9CiAKK3N0YXRpYyBib29sIHBzcl9jaGVja19jYm0o dW5zaWduZWQgaW50IGNibV9sZW4sIHVuc2lnbmVkIGxvbmcgY2JtKQoreworICAgIHVuc2lnbmVk IGludCBmaXJzdF9iaXQsIHplcm9fYml0OworCisgICAgLyogU2V0IGJpdHMgc2hvdWxkIG9ubHkg aW4gdGhlIHJhbmdlIG9mIFswLCBjYm1fbGVuXS4gKi8KKyAgICBpZiAoIGNibSAmICh+MHVsIDw8 IGNibV9sZW4pICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLyogQXQgbGVhc3Qgb25l IGJpdCBuZWVkIHRvIGJlIHNldC4gKi8KKyAgICBpZiAoIGNibSA9PSAwICkKKyAgICAgICAgcmV0 dXJuIGZhbHNlOworCisgICAgZmlyc3RfYml0ID0gZmluZF9maXJzdF9iaXQoJmNibSwgY2JtX2xl bik7CisgICAgemVyb19iaXQgPSBmaW5kX25leHRfemVyb19iaXQoJmNibSwgY2JtX2xlbiwgZmly c3RfYml0KTsKKworICAgIC8qIFNldCBiaXRzIHNob3VsZCBiZSBjb250aWd1b3VzLiAqLworICAg IGlmICggemVyb19iaXQgPCBjYm1fbGVuICYmCisgICAgICAgICBmaW5kX25leHRfYml0KCZjYm0s IGNibV9sZW4sIHplcm9fYml0KSA8IGNibV9sZW4gKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLyogQ0FUIGNvbW1vbiBmdW5jdGlvbnMgaW1wbGVtZW50 YXRpb24uICovCiBzdGF0aWMgaW50IGNhdF9pbml0X2ZlYXR1cmUoY29uc3Qgc3RydWN0IGNwdWlk X2xlYWYgKnJlZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZlYXRfbm9k ZSAqZmVhdCwKQEAgLTYwMSw3ICs2MjQsMTQgQEAgaW50IHBzcl9nZXRfdmFsKHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCiAvKiBTZXQgdmFsdWUgZnVuY3Rpb25zICovCiBz dGF0aWMgdW5zaWduZWQgaW50IGdldF9jb3NfbnVtKHZvaWQpCiB7Ci0gICAgcmV0dXJuIDA7Cisg ICAgdW5zaWduZWQgaW50IG51bSA9IDAsIGk7CisKKyAgICAvKiBHZXQgYWxsIGZlYXR1cmVzIHRv dGFsIGFtb3VudC4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVhdF9wcm9w cyk7IGkrKyApCisgICAgICAgIGlmICggZmVhdF9wcm9wc1tpXSApCisgICAgICAgICAgICBudW0g Kz0gZmVhdF9wcm9wc1tpXS0+Y29zX251bTsKKworICAgIHJldHVybiBudW07CiB9CiAKIHN0YXRp YyBpbnQgZ2F0aGVyX3ZhbF9hcnJheSh1aW50MzJfdCB2YWxbXSwKQEAgLTYwOSw3ICs2MzksNjkg QEAgc3RhdGljIGludCBnYXRoZXJfdmFsX2FycmF5KHVpbnQzMl90IHZhbFtdLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCiB7Ci0gICAg cmV0dXJuIC1FSU5WQUw7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoICF2YWwgKQor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIC8qIEdldCBhbGwgZmVhdHVyZXMgY3VycmVu dCB2YWx1ZXMgYWNjb3JkaW5nIHRvIG9sZF9jb3MuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGluZm8tPmZlYXR1cmVzKTsgaSsrICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk IGludCBjb3MgPSBvbGRfY29zLCBqOworICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9ub2RlICpm ZWF0ID0gaW5mby0+ZmVhdHVyZXNbaV07CisgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X3Byb3Bz ICpwcm9wcyA9IGZlYXRfcHJvcHNbaV07CisKKyAgICAgICAgaWYgKCAhZmVhdCApCisgICAgICAg ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoICFwcm9wcyApCisgICAgICAgIHsKKyAgICAg ICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7 CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGFycmF5X2xlbiA8IHByb3BzLT5jb3NfbnVtICkK KyAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOworCisgICAgICAgIC8qCisgICAgICAgICAqIElm IG9sZF9jb3MgZXhjZWVkcyBjdXJyZW50IGZlYXR1cmUncyBjb3NfbWF4LCB3ZSBzaG91bGQgZ2V0 CisgICAgICAgICAqIGRlZmF1bHQgdmFsdWUuIFNvIGFzc2lnbiBjb3MgdG8gMCB3aGljaCBzdG9y ZXMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggY29zID4gZmVhdC0+ Y29zX21heCApCisgICAgICAgICAgICBjb3MgPSAwOworCisgICAgICAgIC8qIFZhbHVlIGdldHRp bmcgb3JkZXIgaXMgc2FtZSBhcyBmZWF0dXJlIGFycmF5LiAqLworICAgICAgICBmb3IgKCBqID0g MDsgaiA8IHByb3BzLT5jb3NfbnVtOyBqKysgKQorICAgICAgICAgICAgdmFsW2pdID0gZmVhdC0+ Y29zX3JlZ192YWxbY29zICogcHJvcHMtPmNvc19udW0gKyBqXTsKKworICAgICAgICBhcnJheV9s ZW4gLT0gcHJvcHMtPmNvc19udW07CisgICAgICAgIHZhbCArPSBwcm9wcy0+Y29zX251bTsKKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2lwX3ByaW9yX2ZlYXR1cmVz KHVpbnQzMl90ICoqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCAqYXJyYXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHNy X2ZlYXRfdHlwZSBmZWF0X3R5cGUpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3Ig KCBpID0gMDsgaSA8IGZlYXRfdHlwZTsgaSsrICkKKyAgICB7CisgICAgICAgIGNvbnN0IHN0cnVj dCBmZWF0X3Byb3BzICogcHJvcHMgPSBmZWF0X3Byb3BzW2ldOworCisgICAgICAgIGlmICggIXBy b3BzICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggKmFycmF5X2xlbiA8 PSBwcm9wcy0+Y29zX251bSApCisgICAgICAgICAgICByZXR1cm4gLUVOT1NQQzsKKworICAgICAg ICAqYXJyYXlfbGVuIC09IHByb3BzLT5jb3NfbnVtOworICAgICAgICAqdmFsICs9IHByb3BzLT5j b3NfbnVtOworICAgIH0KKworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGluc2VydF92 YWxfaW50b19hcnJheSh1aW50MzJfdCB2YWxbXSwKQEAgLTYxOSw2ICs3MTEsNDQgQEAgc3RhdGlj IGludCBpbnNlcnRfdmFsX2ludG9fYXJyYXkodWludDMyX3QgdmFsW10sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIGNibV90eXBlIHR5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXdfdmFsKQogeworICAgIGNvbnN0IHN0cnVjdCBm ZWF0X25vZGUgKmZlYXQ7CisgICAgY29uc3Qgc3RydWN0IGZlYXRfcHJvcHMgKnByb3BzOworICAg IHVuc2lnbmVkIGludCBpOworICAgIGludCByZXQ7CisKKyAgICBBU1NFUlQoZmVhdF90eXBlIDwg RkVBVF9UWVBFX05VTSk7CisKKyAgICByZXQgPSBza2lwX3ByaW9yX2ZlYXR1cmVzKCZ2YWwsICZh cnJheV9sZW4sIGZlYXRfdHlwZSk7CisgICAgaWYgKCByZXQgKQorICAgICAgICByZXR1cm4gcmV0 OworCisgICAgZmVhdCA9IGluZm8tPmZlYXR1cmVzW2ZlYXRfdHlwZV07CisgICAgaWYgKCAhZmVh dCApCisgICAgICAgIHJldHVybiAtRU5PRU5UOworCisgICAgcHJvcHMgPSBmZWF0X3Byb3BzW2Zl YXRfdHlwZV07CisgICAgaWYgKCAhcHJvcHMgKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOUkVB Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgIH0KKworICAgIGlmICggYXJy YXlfbGVuIDwgcHJvcHMtPmNvc19udW0gKQorICAgICAgICByZXR1cm4gLUVOT1NQQzsKKworICAg IGlmICggIXBzcl9jaGVja19jYm0oZmVhdC0+Y2JtX2xlbiwgbmV3X3ZhbCkgKQorICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKKworICAgIC8qIFZhbHVlIHNldHRpbmcgcG9zaXRpb24gaXMgc2FtZSBh cyBmZWF0dXJlIGFycmF5LiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgcHJvcHMtPmNvc19udW07 IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHR5cGUgPT0gcHJvcHMtPnR5cGVbaV0gKQorICAg ICAgICB7CisgICAgICAgICAgICB2YWxbaV0gPSBuZXdfdmFsOworICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gLUVJTlZBTDsKIH0KIAotLSAKMS45 LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMu eGVuLm9yZy94ZW4tZGV2ZWwK