From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v5 04/28] libxc: introduce a domain loader for HVM guest firmware Date: Fri, 21 Aug 2015 18:53:17 +0200 Message-ID: <1440176021-18910-5-git-send-email-roger.pau@citrix.com> References: <1440176021-18910-1-git-send-email-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.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZSpZf-0007gT-3I for xen-devel@lists.xenproject.org; Fri, 21 Aug 2015 16:53:51 +0000 In-Reply-To: <1440176021-18910-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGEgdmVyeSBzaW1wbGUgKGFuZCBkdW1teSkgZG9tYWluIGxvYWRlciB0byBiZSB1 c2VkIHRvIGxvYWQgdGhlCmZpcm13YXJlIChodm1sb2FkZXIpIGludG8gSFZNIGd1ZXN0cy4gU2lu Y2UgaG12bG9hZGVyIGlzIGp1c3QgYSAzMmJpdCBlbGYKZXhlY3V0YWJsZSB0aGUgbG9hZGVyIGlz IGZhaXJseSBzaW1wbGUuCgpTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5w YXVAY2l0cml4LmNvbT4KUmV2aWV3ZWQtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIz QGNpdHJpeC5jb20+CkFja2VkLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgpDYzog SWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBTdGVmYW5vIFN0YWJl bGxpbmkgPHN0ZWZhbm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPgpDYzogSWFuIENhbXBiZWxs IDxpYW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5j b20+Ci0tLQpDaGFuZ2VzIHNpbmNlIHYzOgogLSBzL19fRlVOQ1RJT05fXy9fX2Z1bmNfXy9nCiAt IEZpeCBzdHlsZSBlcnJvcnMgaW4geGNfZG9tX2h2bWxvYWRlci5jLgogLSBBZGQgQW5kcmV3IENv b3BlciBSZXZpZXdlZC1ieS4KIC0gQWRkIFdlaSBBY2tlZC1ieS4KLS0tCiB0b29scy9saWJ4Yy9N YWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogdG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20uaCAg IHwgICA4ICsrCiB0b29scy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMgfCAzMTMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL3hlbi9saWJlbGYu aCAgICAgICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDMyMyBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGMveGNfZG9tX2h2bWxvYWRlci5jCgpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGMvTWFrZWZpbGUgYi90b29scy9saWJ4Yy9NYWtlZmlsZQppbmRleCBhMGY4 OTliLi5iYWFhZGQ2IDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9NYWtlZmlsZQorKysgYi90b29s cy9saWJ4Yy9NYWtlZmlsZQpAQCAtODQsNiArODQsNyBAQCBHVUVTVF9TUkNTLXkgICAgICAgICAg ICAgICAgICs9IHhjX2RvbV9jb3JlLmMgeGNfZG9tX2Jvb3QuYwogR1VFU1RfU1JDUy15ICAgICAg ICAgICAgICAgICArPSB4Y19kb21fZWxmbG9hZGVyLmMKIEdVRVNUX1NSQ1MtJChDT05GSUdfWDg2 KSAgICAgKz0geGNfZG9tX2J6aW1hZ2Vsb2FkZXIuYwogR1VFU1RfU1JDUy0kKENPTkZJR19YODYp ICAgICArPSB4Y19kb21fZGVjb21wcmVzc19sejQuYworR1VFU1RfU1JDUy0kKENPTkZJR19YODYp ICAgICArPSB4Y19kb21faHZtbG9hZGVyLmMKIEdVRVNUX1NSQ1MtJChDT05GSUdfQVJNKSAgICAg Kz0geGNfZG9tX2FybXppbWFnZWxvYWRlci5jCiBHVUVTVF9TUkNTLXkgICAgICAgICAgICAgICAg ICs9IHhjX2RvbV9iaW5sb2FkZXIuYwogR1VFU1RfU1JDUy15ICAgICAgICAgICAgICAgICArPSB4 Y19kb21fY29tcGF0X2xpbnV4LmMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGNf ZG9tLmggYi90b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oCmluZGV4IGJjNTVlYzkuLjAyZDlk NWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGNfZG9tLmgKKysrIGIvdG9vbHMv bGlieGMvaW5jbHVkZS94Y19kb20uaApAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRl IDx4ZW4vbGliZWxmL2xpYmVsZi5oPgorI2luY2x1ZGUgPHhlbmd1ZXN0Lmg+CiAKICNkZWZpbmUg SU5WQUxJRF9QMk1fRU5UUlkgICAoKHhlbl9wZm5fdCktMSkKIApAQCAtMTg1LDYgKzE4NiwxMyBA QCBzdHJ1Y3QgeGNfZG9tX2ltYWdlIHsKICAgICAgICAgWENfRE9NX1BWX0NPTlRBSU5FUiwKICAg ICAgICAgWENfRE9NX0hWTV9DT05UQUlORVIsCiAgICAgfSBjb250YWluZXJfdHlwZTsKKworICAg IC8qIEhWTSBzcGVjaWZpYyBmaWVsZHMuICovCisgICAgLyogRXh0cmEgQUNQSSB0YWJsZXMgcGFz c2VkIHRvIEhWTUxPQURFUiAqLworICAgIHN0cnVjdCB4Y19odm1fZmlybXdhcmVfbW9kdWxlIGFj cGlfbW9kdWxlOworCisgICAgLyogRXh0cmEgU01CSU9TIHN0cnVjdHVyZXMgcGFzc2VkIHRvIEhW TUxPQURFUiAqLworICAgIHN0cnVjdCB4Y19odm1fZmlybXdhcmVfbW9kdWxlIHNtYmlvc19tb2R1 bGU7CiB9OwogCiAvKiAtLS0gcGx1Z2dhYmxlIGtlcm5lbCBsb2FkZXIgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfZG9t X2h2bWxvYWRlci5jIGIvdG9vbHMvbGlieGMveGNfZG9tX2h2bWxvYWRlci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTNiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29s cy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiBYZW4g ZG9tYWluIGJ1aWxkZXIgLS0gSFZNIHNwZWNpZmljIGJpdHMuCisgKgorICogUGFyc2UgYW5kIGxv YWQgRUxGIGZpcm13YXJlIGltYWdlcyBmb3IgSFZNIGRvbWFpbnMuCisgKgorICogVGhpcyBsaWJy YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgbGlicmFyeSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw LTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1 ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAieGdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInhjX2Rv bS5oIgorI2luY2x1ZGUgInhjX2JpdG9wcy5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8q IHBhcnNlIGVsZiBiaW5hcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworCitzdGF0aWMgZWxmX25lZ2Vycm5vdmFsIGNoZWNrX2VsZl9r ZXJuZWwoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tLCBib29sIHZlcmJvc2UpCit7CisgICAgaWYg KCBkb20tPmtlcm5lbF9ibG9iID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYgKCB2ZXJib3Nl ICkKKyAgICAgICAgICAgIHhjX2RvbV9wYW5pYyhkb20tPnhjaCwgWENfSU5URVJOQUxfRVJST1Is CisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBubyBrZXJuZWwgaW1hZ2UgbG9hZGVkIiwg X19mdW5jX18pOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoICFl bGZfaXNfZWxmYmluYXJ5KGRvbS0+a2VybmVsX2Jsb2IsIGRvbS0+a2VybmVsX3NpemUpICkKKyAg ICB7CisgICAgICAgIGlmICggdmVyYm9zZSApCisgICAgICAgICAgICB4Y19kb21fcGFuaWMoZG9t LT54Y2gsIFhDX0lOVkFMSURfS0VSTkVMLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlczog a2VybmVsIGlzIG5vdCBhbiBFTEYgaW1hZ2UiLCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiAt RUlOVkFMOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGVsZl9uZWdlcnJub3Zh bCB4Y19kb21fcHJvYmVfaHZtX2tlcm5lbChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCit7Cisg ICAgc3RydWN0IGVsZl9iaW5hcnkgZWxmOworICAgIGludCByYzsKKworICAgIC8qIFRoaXMgbG9h ZGVyIGlzIGRlc2lnbmVkIGZvciBIVk0gZ3Vlc3QgZmlybXdhcmUuICovCisgICAgaWYgKCBkb20t PmNvbnRhaW5lcl90eXBlICE9IFhDX0RPTV9IVk1fQ09OVEFJTkVSICkKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisKKyAgICByYyA9IGNoZWNrX2VsZl9rZXJuZWwoZG9tLCAwKTsKKyAgICBpZiAo IHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGVsZl9pbml0KCZlbGYs IGRvbS0+a2VybmVsX2Jsb2IsIGRvbS0+a2VybmVsX3NpemUpOworICAgIGlmICggcmMgIT0gMCAp CisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBjaGVjayB0 aGF0IHRoZXJlIGFyZSBubyBYZW4gRUxGTk9URVMsIG9yCisgICAgICogZWxzZSB3ZSBtaWdodCBi ZSB0cnlpbmcgdG8gbG9hZCBhIFBWIGtlcm5lbC4KKyAgICAgKi8KKyAgICBlbGZfcGFyc2VfYmlu YXJ5KCZlbGYpOworICAgIHJjID0gZWxmX3hlbl9wYXJzZSgmZWxmLCAmZG9tLT5wYXJtcyk7Cisg ICAgaWYgKCByYyA9PSAwICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGVsZl9lcnJvcnN0YXR1cyB4Y19kb21fcGFyc2VfaHZtX2tlcm5lbChz dHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCisgICAgLyoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHNv bWV0aW1lcyByZXR1cm5zIC0xIGZvciBlcnJvciBhbmQgc29tZXRpbWVzCisgICAgICogYW4gZXJy bm8gdmFsdWUuICA/IT8hCisgICAgICovCit7CisgICAgc3RydWN0IGVsZl9iaW5hcnkgKmVsZjsK KyAgICBlbGZfZXJyb3JzdGF0dXMgcmM7CisKKyAgICByYyA9IGNoZWNrX2VsZl9rZXJuZWwoZG9t LCAxKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBlbGYg PSB4Y19kb21fbWFsbG9jKGRvbSwgc2l6ZW9mKCplbGYpKTsKKyAgICBpZiAoIGVsZiA9PSBOVUxM ICkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGRvbS0+cHJpdmF0ZV9sb2FkZXIgPSBlbGY7Cisg ICAgcmMgPSBlbGZfaW5pdChlbGYsIGRvbS0+a2VybmVsX2Jsb2IsIGRvbS0+a2VybmVsX3NpemUp OworICAgIHhjX2VsZl9zZXRfbG9nZmlsZShkb20tPnhjaCwgZWxmLCAxKTsKKyAgICBpZiAoIHJj ICE9IDAgKQorICAgIHsKKyAgICAgICAgeGNfZG9tX3BhbmljKGRvbS0+eGNoLCBYQ19JTlZBTElE X0tFUk5FTCwgIiVzOiBjb3JydXB0ZWQgRUxGIGltYWdlIiwKKyAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIGlmICggIWVsZl8z MmJpdChlbGYpICkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wYW5pYyhkb20tPnhjaCwgWENfSU5W QUxJRF9LRVJORUwsICIlczogRUxGIGltYWdlIGlzIG5vdCAzMmJpdCIsCisgICAgICAgICAgICAg ICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IC8qIHBhcnNlIGJpbmFyeSBhbmQgZ2V0IHhlbiBtZXRhIGluZm8gKi8KKyAgICBlbGZfcGFyc2Vf YmluYXJ5KGVsZik7CisKKyAgICAvKiBmaW5kIGtlcm5lbCBzZWdtZW50ICovCisgICAgZG9tLT5r ZXJuZWxfc2VnLnZzdGFydCA9IGVsZi0+cHN0YXJ0OworICAgIGRvbS0+a2VybmVsX3NlZy52ZW5k ICAgPSBlbGYtPnBlbmQ7CisKKyAgICBkb20tPmd1ZXN0X3R5cGUgPSAiaHZtLTMuMC14ODZfMzIi OworCisgICAgaWYgKCBlbGZfY2hlY2tfYnJva2VuKGVsZikgKQorICAgICAgICBET01QUklOVEYo IiVzOiBFTEYgYnJva2VuOiAlcyIsIF9fZnVuY19fLCBlbGZfY2hlY2tfYnJva2VuKGVsZikpOwor CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG1vZHVsZXNfaW5pdChzdHJ1Y3QgeGNf ZG9tX2ltYWdlICpkb20sCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2ZW5kLCBz dHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg Km1zdGFydF9vdXQsIHVpbnQ2NF90ICptZW5kX291dCkKK3sKKyNkZWZpbmUgTU9EVUxFX0FMSUdO IDFVTCA8PCA3CisjZGVmaW5lIE1CX0FMSUdOICAgICAxVUwgPDwgMjAKKyNkZWZpbmUgTUtBTElH Tih4LCBhKSAoKCh1aW50NjRfdCkoeCkgKyAoYSkgLSAxKSAmIH4odWludDY0X3QpKChhKSAtIDEp KQorICAgIHVpbnQ2NF90IHRvdGFsX2xlbiA9IDAsIG9mZnNldDEgPSAwOworCisgICAgaWYgKCBk b20tPmFjcGlfbW9kdWxlLmxlbmd0aCA9PSAwICYmIGRvbS0+c21iaW9zX21vZHVsZS5sZW5ndGgg PT0gMCApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogRmluZCB0aGUgdG90YWwgbGVuZ3Ro IGZvciB0aGUgZmlybXdhcmUgbW9kdWxlcyB3aXRoIGEgcmVhc29uYWJsZSBsYXJnZQorICAgICAq IGFsaWdubWVudCBzaXplIHRvIGFsaWduIGVhY2ggdGhlIG1vZHVsZXMuCisgICAgICovCisgICAg dG90YWxfbGVuID0gTUtBTElHTihkb20tPmFjcGlfbW9kdWxlLmxlbmd0aCwgTU9EVUxFX0FMSUdO KTsKKyAgICBvZmZzZXQxID0gdG90YWxfbGVuOworICAgIHRvdGFsX2xlbiArPSBNS0FMSUdOKGRv bS0+c21iaW9zX21vZHVsZS5sZW5ndGgsIE1PRFVMRV9BTElHTik7CisKKyAgICAvKiBXYW50IHRv IHBsYWNlIHRoZSBtb2R1bGVzIDFNYitjaGFuZ2UgYmVoaW5kIHRoZSBsb2FkZXIgaW1hZ2UuICov CisgICAgKm1zdGFydF9vdXQgPSBNS0FMSUdOKGVsZi0+cGVuZCwgTUJfQUxJR04pICsgKE1CX0FM SUdOKTsKKyAgICAqbWVuZF9vdXQgPSAqbXN0YXJ0X291dCArIHRvdGFsX2xlbjsKKworICAgIGlm ICggKm1lbmRfb3V0ID4gdmVuZCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICggZG9t LT5hY3BpX21vZHVsZS5sZW5ndGggIT0gMCApCisgICAgICAgIGRvbS0+YWNwaV9tb2R1bGUuZ3Vl c3RfYWRkcl9vdXQgPSAqbXN0YXJ0X291dDsKKyAgICBpZiAoIGRvbS0+c21iaW9zX21vZHVsZS5s ZW5ndGggIT0gMCApCisgICAgICAgIGRvbS0+c21iaW9zX21vZHVsZS5ndWVzdF9hZGRyX291dCA9 ICptc3RhcnRfb3V0ICsgb2Zmc2V0MTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGxvYWRtb2R1bGVzKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwKKyAgICAgICAgICAgICAgICAg ICAgICAgdWludDY0X3QgbXN0YXJ0LCB1aW50NjRfdCBtZW5kLAorICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBkb21pZCkKK3sKKyAgICBwcml2Y21kX21tYXBfZW50cnlfdCAqZW50cmll cyA9IE5VTEw7CisgICAgdW5zaWduZWQgbG9uZyBwZm5fc3RhcnQ7CisgICAgdW5zaWduZWQgbG9u ZyBwZm5fZW5kOworICAgIHNpemVfdCBwYWdlczsKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQ4 X3QgKmRlc3Q7CisgICAgaW50IHJjID0gLTE7CisgICAgeGNfaW50ZXJmYWNlICp4Y2ggPSBkb20t PnhjaDsKKworICAgIGlmICggbXN0YXJ0ID09IDAgfHwgbWVuZCA9PSAwICkKKyAgICAgICAgcmV0 dXJuIDA7CisKKyAgICBwZm5fc3RhcnQgPSAodW5zaWduZWQgbG9uZykobXN0YXJ0ID4+IFBBR0Vf U0hJRlQpOworICAgIHBmbl9lbmQgPSAodW5zaWduZWQgbG9uZykoKG1lbmQgKyBQQUdFX1NJWkUg LSAxKSA+PiBQQUdFX1NISUZUKTsKKyAgICBwYWdlcyA9IHBmbl9lbmQgLSBwZm5fc3RhcnQ7CisK KyAgICAvKiBNYXAgYWRkcmVzcyBzcGFjZSBmb3IgbW9kdWxlIGxpc3QuICovCisgICAgZW50cmll cyA9IGNhbGxvYyhwYWdlcywgc2l6ZW9mKHByaXZjbWRfbW1hcF9lbnRyeV90KSk7CisgICAgaWYg KCBlbnRyaWVzID09IE5VTEwgKQorICAgICAgICBnb3RvIGVycm9yX291dDsKKworICAgIGZvciAo IGkgPSAwOyBpIDwgcGFnZXM7IGkrKyApCisgICAgICAgIGVudHJpZXNbaV0ubWZuID0gKG1zdGFy dCA+PiBQQUdFX1NISUZUKSArIGk7CisKKyAgICBkZXN0ID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2Vz KAorICAgICAgICB4Y2gsIGRvbWlkLCBwYWdlcyA8PCBQQUdFX1NISUZULCBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFLCAxIDw8IFBBR0VfU0hJRlQsCisgICAgICAgIGVudHJpZXMsIHBhZ2VzKTsKKyAg ICBpZiAoIGRlc3QgPT0gTlVMTCApCisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworCisgICAgLyog WmVybyB0aGUgcmFuZ2Ugc28gcGFkZGluZyBpcyBjbGVhciBiZXR3ZWVuIG1vZHVsZXMgKi8KKyAg ICBtZW1zZXQoZGVzdCwgMCwgcGFnZXMgPDwgUEFHRV9TSElGVCk7CisKKyAgICAvKiBMb2FkIG1v ZHVsZXMgaW50byByYW5nZSAqLworICAgIGlmICggZG9tLT5hY3BpX21vZHVsZS5sZW5ndGggIT0g MCApCisgICAgeworICAgICAgICBtZW1jcHkoZGVzdCwKKyAgICAgICAgICAgICAgIGRvbS0+YWNw aV9tb2R1bGUuZGF0YSwKKyAgICAgICAgICAgICAgIGRvbS0+YWNwaV9tb2R1bGUubGVuZ3RoKTsK KyAgICB9CisgICAgaWYgKCBkb20tPnNtYmlvc19tb2R1bGUubGVuZ3RoICE9IDAgKQorICAgIHsK KyAgICAgICAgbWVtY3B5KGRlc3QgKyAoZG9tLT5zbWJpb3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0 IC0gbXN0YXJ0KSwKKyAgICAgICAgICAgICAgIGRvbS0+c21iaW9zX21vZHVsZS5kYXRhLAorICAg ICAgICAgICAgICAgZG9tLT5zbWJpb3NfbW9kdWxlLmxlbmd0aCk7CisgICAgfQorCisgICAgbXVu bWFwKGRlc3QsIHBhZ2VzIDw8IFBBR0VfU0hJRlQpOworICAgIHJjID0gMDsKKworIGVycm9yX291 dDoKKyAgICBmcmVlKGVudHJpZXMpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgZWxm X2Vycm9yc3RhdHVzIHhjX2RvbV9sb2FkX2h2bV9rZXJuZWwoc3RydWN0IHhjX2RvbV9pbWFnZSAq ZG9tKQoreworICAgIHN0cnVjdCBlbGZfYmluYXJ5ICplbGYgPSBkb20tPnByaXZhdGVfbG9hZGVy OworICAgIHByaXZjbWRfbW1hcF9lbnRyeV90ICplbnRyaWVzID0gTlVMTDsKKyAgICBzaXplX3Qg cGFnZXMgPSAoZWxmLT5wZW5kIC0gZWxmLT5wc3RhcnQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdF X1NISUZUOworICAgIGVsZl9lcnJvcnN0YXR1cyByYzsKKyAgICB1aW50NjRfdCBtX3N0YXJ0ID0g MCwgbV9lbmQgPSAwOworICAgIGludCBpOworCisgICAgLyogTWFwIGFkZHJlc3Mgc3BhY2UgZm9y IGluaXRpYWwgZWxmIGltYWdlLiAqLworICAgIGVudHJpZXMgPSBjYWxsb2MocGFnZXMsIHNpemVv Zihwcml2Y21kX21tYXBfZW50cnlfdCkpOworICAgIGlmICggZW50cmllcyA9PSBOVUxMICkKKyAg ICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IHBhZ2VzOyBpKysg KQorICAgICAgICBlbnRyaWVzW2ldLm1mbiA9IChlbGYtPnBzdGFydCA+PiBQQUdFX1NISUZUKSAr IGk7CisKKyAgICBlbGYtPmRlc3RfYmFzZSA9IHhjX21hcF9mb3JlaWduX3JhbmdlcygKKyAgICAg ICAgZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9taWQsIHBhZ2VzIDw8IFBBR0VfU0hJRlQsCisgICAg ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIDEgPDwgUEFHRV9TSElGVCwKKyAgICAgICAgZW50 cmllcywgcGFnZXMpOworICAgIGlmICggZWxmLT5kZXN0X2Jhc2UgPT0gTlVMTCApCisgICAgewor ICAgICAgICBET01QUklOVEYoIiVzOiB1bmFibGUgdG8gbWFwIGd1ZXN0IG1lbW9yeSBzcGFjZSIs IF9fZnVuY19fKTsKKyAgICAgICAgcmMgPSAtRUZBVUxUOworICAgICAgICBnb3RvIGVycm9yOwor ICAgIH0KKworICAgIGVsZi0+ZGVzdF9zaXplID0gcGFnZXMgKiBYQ19ET01fUEFHRV9TSVpFKGRv bSk7CisKKyAgICByYyA9IGVsZl9sb2FkX2JpbmFyeShlbGYpOworICAgIGlmICggcmMgPCAwICkK KyAgICB7CisgICAgICAgIERPTVBSSU5URigiJXM6IGZhaWxlZCB0byBsb2FkIGVsZiBiaW5hcnki LCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBtdW5tYXAoZWxm LT5kZXN0X2Jhc2UsIGVsZi0+ZGVzdF9zaXplKTsKKworICAgIHJjID0gbW9kdWxlc19pbml0KGRv bSwgZG9tLT50b3RhbF9wYWdlcyA8PCBQQUdFX1NISUZULCBlbGYsICZtX3N0YXJ0LAorICAgICAg ICAgICAgICAgICAgICAgICZtX2VuZCk7CisgICAgaWYgKCByYyAhPSAwICkKKyAgICB7CisgICAg ICAgIERPTVBSSU5URigiJXM6IGluc3VmZmljaWVudCBzcGFjZSB0byBsb2FkIG1vZHVsZXMuIiwg X19mdW5jX18pOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgcmMgPSBsb2FkbW9k dWxlcyhkb20sIG1fc3RhcnQsIG1fZW5kLCBkb20tPmd1ZXN0X2RvbWlkKTsKKyAgICBpZiAoIHJj ICE9IDAgKQorICAgIHsKKyAgICAgICAgRE9NUFJJTlRGKCIlczogdW5hYmxlIHRvIGxvYWQgbW9k dWxlcy4iLCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBkb20t PnBhcm1zLnBoeXNfZW50cnkgPSBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9lbnRyeSk7CisK KyAgICBmcmVlKGVudHJpZXMpOworICAgIHJldHVybiAwOworCisgZXJyb3I6CisgICAgYXNzZXJ0 KHJjICE9IDApOworICAgIGZyZWUoZW50cmllcyk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHhjX2RvbV9sb2FkZXIgaHZtX2xvYWRlciA9IHsK KyAgICAubmFtZSA9ICJIVk0tZ2VuZXJpYyIsCisgICAgLnByb2JlID0geGNfZG9tX3Byb2JlX2h2 bV9rZXJuZWwsCisgICAgLnBhcnNlciA9IHhjX2RvbV9wYXJzZV9odm1fa2VybmVsLAorICAgIC5s b2FkZXIgPSB4Y19kb21fbG9hZF9odm1fa2VybmVsLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0 IHJlZ2lzdGVyX2xvYWRlcih2b2lkKQoreworICAgIHhjX2RvbV9yZWdpc3Rlcl9sb2FkZXIoJmh2 bV9sb2FkZXIpOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICog Yy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDog NAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hl bi9pbmNsdWRlL3hlbi9saWJlbGYuaCBiL3hlbi9pbmNsdWRlL3hlbi9saWJlbGYuaAppbmRleCA2 MzkzMDQwLi4wM2Q0NDllIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vbGliZWxmLmgKKysr IGIveGVuL2luY2x1ZGUveGVuL2xpYmVsZi5oCkBAIC00MjQsNiArNDI0LDcgQEAgc3RydWN0IGVs Zl9kb21fcGFybXMgewogICAgIHVpbnQ2NF90IGVsZl9wYWRkcl9vZmZzZXQ7CiAgICAgdWludDMy X3QgZl9zdXBwb3J0ZWRbWEVORkVBVF9OUl9TVUJNQVBTXTsKICAgICB1aW50MzJfdCBmX3JlcXVp cmVkW1hFTkZFQVRfTlJfU1VCTUFQU107CisgICAgdWludDMyX3QgcGh5c19lbnRyeTsKIAogICAg IC8qIGNhbGN1bGF0ZWQgKi8KICAgICB1aW50NjRfdCB2aXJ0X29mZnNldDsKLS0gCjEuOS41IChB cHBsZSBHaXQtNTAuMykKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=