From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 480AEC47404 for ; Mon, 7 Oct 2019 15:15:24 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 048D02070B for ; Mon, 7 Oct 2019 15:15:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="B2I4jOx1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 048D02070B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iHUiv-0007jY-Sg; Mon, 07 Oct 2019 15:14:57 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iHUiu-0007iQ-QW for xen-devel@lists.xenproject.org; Mon, 07 Oct 2019 15:14:56 +0000 X-Inumbo-ID: 0aaa1c18-e915-11e9-96dc-bc764e2007e4 Received: from mail-qt1-x82b.google.com (unknown [2607:f8b0:4864:20::82b]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 0aaa1c18-e915-11e9-96dc-bc764e2007e4; Mon, 07 Oct 2019 15:13:39 +0000 (UTC) Received: by mail-qt1-x82b.google.com with SMTP id j31so19658410qta.5 for ; Mon, 07 Oct 2019 08:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AEfJbobqG0in6oGM+jKkxBn4BeLDcbpAQhe/LLCwzug=; b=B2I4jOx1kc7mQoMYKlTdQgDxLqQR+JRyt6V9p9LOed76v1X4TZWtEbi9MX53WBBDbN EhpRDJcfenPtzsLauAmRg5oCPlEAvaIxwe2mJHHoTDFthTvAUWIt72FI22njDb4qBuKg /FwYIh8Jx+P5y3fCZF+6Rz39akDHvioyrj1D8iTg9YSIp4sJoIv08kX7m7fiGDpBDdA/ srDNNFAyLUekcGKdYsiGev3/5vHEDkJNiqToyXk+B5gUDFCbggl5nE3zK3PjHTftytt1 t90ArJRk4czSxMRUDwMFO8Qk5XSlbPxgNmGpItWtgHaVrRaNoh102bO5PgulcBtLz9ge mnng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AEfJbobqG0in6oGM+jKkxBn4BeLDcbpAQhe/LLCwzug=; b=FbKSg0OUNaeul+FXT+7nSTLb7D5uWL3WCzhk/XmcMrMnbnn26reapEEBjv7gSVjjqn UYA/8qwJkjRswZT1YMsRpLEm0IiahK/SzdwH4boKE+i0mvWRN/D0LaLLkdkBABU3OhoF 9UATPQkBWWQtMwp3kLsfS9xHb1mNuCK+MMlDHEJigdudiEM/e+J2EVlPMiFnm/0WViJ4 am71wQgxBMc+QlxHhwujmVxrP7T2H0ZUEOuUojQmSNNSz99TwkJHDPExCwPQ9UF64ZIW 9JI4EXTeGZtC5bReaMO4bfsTYuyKv+HOrI9d0mnaTYgCuCTuB+oQBibevjrZQdyVGwkh Sqwg== X-Gm-Message-State: APjAAAUaBg8qohKpmA8b2j3IUQmyZbDbtsaUnvCqeccblNC0s4UJ+Xdd xWV/R4kg8HDy1SiThlpCtPBi66Gc X-Google-Smtp-Source: APXvYqxJUMVKqMFrWl2YetFH1gjYj66zJ7DK62hmVhBz3J9M50ZW7I7Vx0HQwL4fbIyhHfTjAOSb+A== X-Received: by 2002:ac8:38ef:: with SMTP id g44mr30698206qtc.277.1570461218288; Mon, 07 Oct 2019 08:13:38 -0700 (PDT) Received: from five.crux.rad.ainfosec.com (209-217-208-226.northland.net. [209.217.208.226]) by smtp.googlemail.com with ESMTPSA id c185sm8354313qkg.74.2019.10.07.08.13.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Oct 2019 08:13:37 -0700 (PDT) From: Nick Rosbrook To: xen-devel@lists.xenproject.org Date: Mon, 7 Oct 2019 11:13:06 -0400 Message-Id: <5f312a9678baa11816e8b51a25d5b99043f432b0.1570456846.git.rosbrookn@ainfosec.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 19/24] golang/xenlight: begin Go to C type marshaling X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Nick Rosbrook , Ian Jackson , kerriganb@ainfosec.com, George Dunlap , Wei Liu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" RnJvbTogTmljayBSb3Nicm9vayA8cm9zYnJvb2tuQGFpbmZvc2VjLmNvbT4KCkltcGxlbWVudCBj b252ZXJzaW9uIG9mIGJhc2ljIHR5cGUgY29udmVyc2lvbnMgc3VjaCBhcyBzdHJpbmdzCmFuZCBp bnRlZ2VyIHR5cGVzIGluIHRvQyBmdW5jdGlvbnMuCgpTaWduZWQtb2ZmLWJ5OiBOaWNrIFJvc2Jy b29rIDxyb3Nicm9va25AYWluZm9zZWMuY29tPgotLS0KQ2M6IEdlb3JnZSBEdW5sYXAgPGdlb3Jn ZS5kdW5sYXBAY2l0cml4LmNvbT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRy aXguY29tPgpDYzogV2VpIExpdSA8d2xAeGVuLm9yZz4KCiB0b29scy9nb2xhbmcveGVubGlnaHQv Z2VuZ290eXBlcy5weSAgICAgICB8ICAgODAgKysKIHRvb2xzL2dvbGFuZy94ZW5saWdodC94ZW5s aWdodF9oZWxwZXJzLmdvIHwgMTAxMyArKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hh bmdlZCwgMTA5MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxp Z2h0L2dlbmdvdHlwZXMucHkgYi90b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290eXBlcy5weQpp bmRleCAyYjYyMGYwYWU5Li5lY2NjMzM0YjQxIDEwMDY0NAotLS0gYS90b29scy9nb2xhbmcveGVu bGlnaHQvZ2VuZ290eXBlcy5weQorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290eXBl cy5weQpAQCAtMjM3LDYgKzIzNyw5IEBAIGRlZiB4ZW5saWdodF9nb2xhbmdfZ2VuZXJhdGVfaGVs cGVycyhwYXRoID0gTm9uZSwgdHlwZXMgPSBOb25lLCBjb21tZW50ID0gTm9uZSk6CiAKICAgICAg ICAgICAgIGRlbCBoZWxwZXJfZXh0cmFzWzpdCiAKKyAgICAgICAgICAgIGYud3JpdGUoeGVubGln aHRfZ29sYW5nX2RlZmluZV90b19DKHR5KSkKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKKwog ICAgIGdvX2ZtdChwYXRoKQogCiBkZWYgeGVubGlnaHRfZ29sYW5nX2RlZmluZV9mcm9tX0ModHkg PSBOb25lLCB0eXBlbmFtZSA9IE5vbmUsIG5lc3RlZCA9IEZhbHNlKToKQEAgLTQ1Nyw2ICs0NjAs ODMgQEAgZGVmIHhlbmxpZ2h0X2dvbGFuZ19hcnJheV9mcm9tX0ModHkgPSBOb25lKToKIAogICAg IHJldHVybiBzCiAKK2RlZiB4ZW5saWdodF9nb2xhbmdfZGVmaW5lX3RvX0ModHkgPSBOb25lLCB0 eXBlbmFtZSA9IE5vbmUsIG5lc3RlZCA9IEZhbHNlKToKKyAgICBzID0gJycKKworICAgIGdvdHlw ZW5hbWUgPSBjdHlwZW5hbWUgPSAnJworCisgICAgaWYgdHlwZW5hbWUgaXMgbm90IE5vbmU6Cisg ICAgICAgIGdvdHlwZW5hbWUgPSB4ZW5saWdodF9nb2xhbmdfZm10X25hbWUodHlwZW5hbWUpCisg ICAgICAgIGN0eXBlbmFtZSAgPSB0eXBlbmFtZQorICAgIGVsc2U6CisgICAgICAgIGdvdHlwZW5h bWUgPSB4ZW5saWdodF9nb2xhbmdfZm10X25hbWUodHkudHlwZW5hbWUpCisgICAgICAgIGN0eXBl bmFtZSAgPSB0eS50eXBlbmFtZQorCisgICAgaWYgbm90IG5lc3RlZDoKKyAgICAgICAgcyArPSAn ZnVuYyAoeCAqe30pIHRvQygpICh4YyBDLnt9LGVyciBlcnJvcikge3tcbicuZm9ybWF0KGdvdHlw ZW5hbWUsY3R5cGVuYW1lKQorICAgICAgICBzICs9ICdDLnt9KCZ4YylcbicuZm9ybWF0KHR5Lmlu aXRfZm4pCisKKyAgICBmb3IgZiBpbiB0eS5maWVsZHM6CisgICAgICAgIGlmIGYudHlwZS50eXBl bmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZi50eXBlLCBpZGwu QXJyYXkpOgorICAgICAgICAgICAgICAgICMgVE9ETworICAgICAgICAgICAgICAgIGNvbnRpbnVl CisKKyAgICAgICAgICAgIGdvdHlwZW5hbWUgPSB4ZW5saWdodF9nb2xhbmdfZm10X25hbWUoZi50 eXBlLnR5cGVuYW1lKQorICAgICAgICAgICAgY3R5cGVuYW1lICA9IGYudHlwZS50eXBlbmFtZQor ICAgICAgICAgICAgZ29mbmFtZSAgICA9IHhlbmxpZ2h0X2dvbGFuZ19mbXRfbmFtZShmLm5hbWUp CisgICAgICAgICAgICBjZm5hbWUgICAgID0gZi5uYW1lCisKKyAgICAgICAgICAgICMgSW4gY2dv LCBDIG5hbWVzIHRoYXQgY29uZmxpY3Qgd2l0aCBHbyBrZXl3b3JkcyBjYW4gYmUKKyAgICAgICAg ICAgICMgYWNjZXNzZWQgYnkgcHJlcGVuZGluZyBhbiB1bmRlcnNjb3JlIHRvIHRoZSBuYW1lLgor ICAgICAgICAgICAgaWYgY2ZuYW1lIGluIGdvX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIGNm bmFtZSA9ICdfJyArIGNmbmFtZQorCisgICAgICAgICAgICAjIElmIHRoaXMgaXMgbmVzdGVkLCB3 ZSBuZWVkIHRoZSBvdXRlciBuYW1lIHRvby4KKyAgICAgICAgICAgIGlmIG5lc3RlZCBhbmQgdHlw ZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZ29uYW1lID0geGVubGlnaHRfZ29s YW5nX2ZtdF9uYW1lKHR5cGVuYW1lKQorICAgICAgICAgICAgICAgIGdvbmFtZSA9ICd7fS57fScu Zm9ybWF0KGdvbmFtZSwgZ29mbmFtZSkKKyAgICAgICAgICAgICAgICBjbmFtZSAgPSAne30ue30n LmZvcm1hdCh0eXBlbmFtZSwgY2ZuYW1lKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg ICAgICAgIGdvbmFtZSA9IGdvZm5hbWUKKyAgICAgICAgICAgICAgICBjbmFtZSAgPSBjZm5hbWUK KworICAgICAgICAgICAgaXNfY2FzdGFibGUgPSAoZi50eXBlLmpzb25fcGFyc2VfdHlwZSA9PSAn SlNPTl9JTlRFR0VSJyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShm LnR5cGUsIGlkbC5FbnVtZXJhdGlvbikgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dHlwZW5hbWUgaW4gZ29fYnVpbHRpbl90eXBlcykKKworICAgICAgICAgICAgaWYgaXNfY2FzdGFi bGU6CisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIGNnbyBoZWxwZXIgZm9yIGNvbnZlcnRpbmcg QyBzdHJpbmdzLgorICAgICAgICAgICAgICAgIGlmIGdvdHlwZW5hbWUgPT0gJ3N0cmluZyc6Cisg ICAgICAgICAgICAgICAgICAgIHMgKz0gJ3hjLnt9ID0gQy5DU3RyaW5nKHgue30pXG4nLmZvcm1h dChjbmFtZSxnb25hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAg ICAgICAgICBzICs9ICd4Yy57fSA9IEMue30oeC57fSlcbicuZm9ybWF0KGNuYW1lLGN0eXBlbmFt ZSxnb25hbWUpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcyArPSAneGMu e30sIGVyciA9IHgue30udG9DKClcbicuZm9ybWF0KGNuYW1lLGdvbmFtZSkKKyAgICAgICAgICAg ICAgICBzICs9ICdpZiBlcnIgIT0gbmlsIHtcbicKKyAgICAgICAgICAgICAgICBzICs9ICdDLnt9 KCZ4YylcbicuZm9ybWF0KHR5LmRpc3Bvc2VfZm4pCisgICAgICAgICAgICAgICAgcyArPSAncmV0 dXJuIHhjLCBlcnJcbicKKyAgICAgICAgICAgICAgICBzICs9ICd9XG4nCisKKyAgICAgICAgZWxp ZiBpc2luc3RhbmNlKGYudHlwZSwgaWRsLlN0cnVjdCk6CisgICAgICAgICAgICBzICs9IHhlbmxp Z2h0X2dvbGFuZ19kZWZpbmVfdG9fQyhmLnR5cGUsIHR5cGVuYW1lPWYubmFtZSwgbmVzdGVkPVRy dWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGYudHlwZSwgaWRsLktleWVkVW5pb24pOgor ICAgICAgICAgICAgIyBUT0RPCisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigndHlwZSB7fSBub3Qgc3VwcG9ydGVkJy5mb3JtYXQo Zi50eXBlKSkKKworICAgIGlmIG5vdCBuZXN0ZWQ6CisgICAgICAgIHMgKz0gJ3JldHVybiB4Yywg bmlsJworICAgICAgICBzICs9ICd9XG4nCisKKyAgICByZXR1cm4gcworCiBkZWYgeGVubGlnaHRf Z29sYW5nX2ZtdF9uYW1lKG5hbWUsIGV4cG9ydGVkID0gVHJ1ZSk6CiAgICAgIiIiCiAgICAgVGFr ZSBhIGdpdmVuIHR5cGUgbmFtZSBhbmQgcmV0dXJuIGFuCmRpZmYgLS1naXQgYS90b29scy9nb2xh bmcveGVubGlnaHQveGVubGlnaHRfaGVscGVycy5nbyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdodC94 ZW5saWdodF9oZWxwZXJzLmdvCmluZGV4IDJjZGMxYmJkYzkuLjkyZTZhZmNkMTAgMTAwNjQ0Ci0t LSBhL3Rvb2xzL2dvbGFuZy94ZW5saWdodC94ZW5saWdodF9oZWxwZXJzLmdvCisrKyBiL3Rvb2xz L2dvbGFuZy94ZW5saWdodC94ZW5saWdodF9oZWxwZXJzLmdvCkBAIC0xMzAsNiArMTMwLDEzIEBA IGZ1bmMgKHggKklvcG9ydFJhbmdlKSBmcm9tQyh4YyAqQy5saWJ4bF9pb3BvcnRfcmFuZ2UpIGVy cm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKklvcG9ydFJhbmdlKSB0b0MoKSAoeGMg Qy5saWJ4bF9pb3BvcnRfcmFuZ2UsIGVyciBlcnJvcikgeworCUMubGlieGxfaW9wb3J0X3Jhbmdl X2luaXQoJnhjKQorCXhjLmZpcnN0ID0gQy51aW50MzJfdCh4LkZpcnN0KQorCXhjLm51bWJlciA9 IEMudWludDMyX3QoeC5OdW1iZXIpCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqSW9t ZW1SYW5nZSkgZnJvbUMoeGMgKkMubGlieGxfaW9tZW1fcmFuZ2UpIGVycm9yIHsKIAl4LlN0YXJ0 ID0gdWludDY0KHhjLnN0YXJ0KQogCXguTnVtYmVyID0gdWludDY0KHhjLm51bWJlcikKQEAgLTEz NywxMSArMTQ0LDI1IEBAIGZ1bmMgKHggKklvbWVtUmFuZ2UpIGZyb21DKHhjICpDLmxpYnhsX2lv bWVtX3JhbmdlKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpJb21lbVJhbmdl KSB0b0MoKSAoeGMgQy5saWJ4bF9pb21lbV9yYW5nZSwgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9p b21lbV9yYW5nZV9pbml0KCZ4YykKKwl4Yy5zdGFydCA9IEMudWludDY0X3QoeC5TdGFydCkKKwl4 Yy5udW1iZXIgPSBDLnVpbnQ2NF90KHguTnVtYmVyKQorCXhjLmdmbiA9IEMudWludDY0X3QoeC5H Zm4pCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqVmdhSW50ZXJmYWNlSW5mbykgZnJv bUMoeGMgKkMubGlieGxfdmdhX2ludGVyZmFjZV9pbmZvKSBlcnJvciB7CiAJeC5LaW5kID0gVmdh SW50ZXJmYWNlVHlwZSh4Yy5raW5kKQogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqVmdhSW50 ZXJmYWNlSW5mbykgdG9DKCkgKHhjIEMubGlieGxfdmdhX2ludGVyZmFjZV9pbmZvLCBlcnIgZXJy b3IpIHsKKwlDLmxpYnhsX3ZnYV9pbnRlcmZhY2VfaW5mb19pbml0KCZ4YykKKwl4Yy5raW5kID0g Qy5saWJ4bF92Z2FfaW50ZXJmYWNlX3R5cGUoeC5LaW5kKQorCXJldHVybiB4YywgbmlsCit9CisK IGZ1bmMgKHggKlZuY0luZm8pIGZyb21DKHhjICpDLmxpYnhsX3ZuY19pbmZvKSBlcnJvciB7CiAJ dmFyIGRlZmJvb2xFbmFibGUgRGVmYm9vbAogCWlmIGVyciA6PSBkZWZib29sRW5hYmxlLmZyb21D KCZ4Yy5lbmFibGUpOyBlcnIgIT0gbmlsIHsKQEAgLTE1OSw2ICsxODAsMjQgQEAgZnVuYyAoeCAq Vm5jSW5mbykgZnJvbUMoeGMgKkMubGlieGxfdm5jX2luZm8pIGVycm9yIHsKIAlyZXR1cm4gbmls CiB9CiAKK2Z1bmMgKHggKlZuY0luZm8pIHRvQygpICh4YyBDLmxpYnhsX3ZuY19pbmZvLCBlcnIg ZXJyb3IpIHsKKwlDLmxpYnhsX3ZuY19pbmZvX2luaXQoJnhjKQorCXhjLmVuYWJsZSwgZXJyID0g eC5FbmFibGUudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF92bmNfaW5mb19kaXNw b3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMubGlzdGVuID0gQy5DU3RyaW5nKHgu TGlzdGVuKQorCXhjLnBhc3N3ZCA9IEMuQ1N0cmluZyh4LlBhc3N3ZCkKKwl4Yy5kaXNwbGF5ID0g Qy5pbnQoeC5EaXNwbGF5KQorCXhjLmZpbmR1bnVzZWQsIGVyciA9IHguRmluZHVudXNlZC50b0Mo KQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX3ZuY19pbmZvX2Rpc3Bvc2UoJnhjKQorCQly ZXR1cm4geGMsIGVycgorCX0KKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpTcGljZUlu Zm8pIGZyb21DKHhjICpDLmxpYnhsX3NwaWNlX2luZm8pIGVycm9yIHsKIAl2YXIgZGVmYm9vbEVu YWJsZSBEZWZib29sCiAJaWYgZXJyIDo9IGRlZmJvb2xFbmFibGUuZnJvbUMoJnhjLmVuYWJsZSk7 IGVyciAhPSBuaWwgewpAQCAtMTk1LDYgKzIzNCw0MyBAQCBmdW5jICh4ICpTcGljZUluZm8pIGZy b21DKHhjICpDLmxpYnhsX3NwaWNlX2luZm8pIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1 bmMgKHggKlNwaWNlSW5mbykgdG9DKCkgKHhjIEMubGlieGxfc3BpY2VfaW5mbywgZXJyIGVycm9y KSB7CisJQy5saWJ4bF9zcGljZV9pbmZvX2luaXQoJnhjKQorCXhjLmVuYWJsZSwgZXJyID0geC5F bmFibGUudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9zcGljZV9pbmZvX2Rpc3Bv c2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5wb3J0ID0gQy5pbnQoeC5Qb3J0KQor CXhjLnRsc19wb3J0ID0gQy5pbnQoeC5UbHNQb3J0KQorCXhjLmhvc3QgPSBDLkNTdHJpbmcoeC5I b3N0KQorCXhjLmRpc2FibGVfdGlja2V0aW5nLCBlcnIgPSB4LkRpc2FibGVUaWNrZXRpbmcudG9D KCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9zcGljZV9pbmZvX2Rpc3Bvc2UoJnhjKQor CQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5wYXNzd2QgPSBDLkNTdHJpbmcoeC5QYXNzd2QpCisJ eGMuYWdlbnRfbW91c2UsIGVyciA9IHguQWdlbnRNb3VzZS50b0MoKQorCWlmIGVyciAhPSBuaWwg eworCQlDLmxpYnhsX3NwaWNlX2luZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJ fQorCXhjLnZkYWdlbnQsIGVyciA9IHguVmRhZ2VudC50b0MoKQorCWlmIGVyciAhPSBuaWwgewor CQlDLmxpYnhsX3NwaWNlX2luZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQor CXhjLmNsaXBib2FyZF9zaGFyaW5nLCBlcnIgPSB4LkNsaXBib2FyZFNoYXJpbmcudG9DKCkKKwlp ZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9zcGljZV9pbmZvX2Rpc3Bvc2UoJnhjKQorCQlyZXR1 cm4geGMsIGVycgorCX0KKwl4Yy51c2JyZWRpcmVjdGlvbiA9IEMuaW50KHguVXNicmVkaXJlY3Rp b24pCisJeGMuaW1hZ2VfY29tcHJlc3Npb24gPSBDLkNTdHJpbmcoeC5JbWFnZUNvbXByZXNzaW9u KQorCXhjLnN0cmVhbWluZ192aWRlbyA9IEMuQ1N0cmluZyh4LlN0cmVhbWluZ1ZpZGVvKQorCXJl dHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlNkbEluZm8pIGZyb21DKHhjICpDLmxpYnhsX3Nk bF9pbmZvKSBlcnJvciB7CiAJdmFyIGRlZmJvb2xFbmFibGUgRGVmYm9vbAogCWlmIGVyciA6PSBk ZWZib29sRW5hYmxlLmZyb21DKCZ4Yy5lbmFibGUpOyBlcnIgIT0gbmlsIHsKQEAgLTIxMSw2ICsy ODcsMjMgQEAgZnVuYyAoeCAqU2RsSW5mbykgZnJvbUMoeGMgKkMubGlieGxfc2RsX2luZm8pIGVy cm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKlNkbEluZm8pIHRvQygpICh4YyBDLmxp YnhsX3NkbF9pbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3NkbF9pbmZvX2luaXQoJnhjKQor CXhjLmVuYWJsZSwgZXJyID0geC5FbmFibGUudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5s aWJ4bF9zZGxfaW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMub3Bl bmdsLCBlcnIgPSB4Lk9wZW5nbC50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX3Nk bF9pbmZvX2Rpc3Bvc2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5kaXNwbGF5ID0g Qy5DU3RyaW5nKHguRGlzcGxheSkKKwl4Yy54YXV0aG9yaXR5ID0gQy5DU3RyaW5nKHguWGF1dGhv cml0eSkKKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpEb21pbmZvKSBmcm9tQyh4YyAq Qy5saWJ4bF9kb21pbmZvKSBlcnJvciB7CiAJdmFyIHV1aWRVdWlkIFV1aWQKIAlpZiBlcnIgOj0g dXVpZFV1aWQuZnJvbUMoJnhjLnV1aWQpOyBlcnIgIT0gbmlsIHsKQEAgLTI0MCw2ICszMzMsMzYg QEAgZnVuYyAoeCAqRG9taW5mbykgZnJvbUMoeGMgKkMubGlieGxfZG9taW5mbykgZXJyb3Igewog CXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqRG9taW5mbykgdG9DKCkgKHhjIEMubGlieGxfZG9t aW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9kb21pbmZvX2luaXQoJnhjKQorCXhjLnV1aWQs IGVyciA9IHguVXVpZC50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWluZm9f ZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmRvbWlkID0gQy5saWJ4bF9k b21pZCh4LkRvbWlkKQorCXhjLnNzaWRyZWYgPSBDLnVpbnQzMl90KHguU3NpZHJlZikKKwl4Yy5z c2lkX2xhYmVsID0gQy5DU3RyaW5nKHguU3NpZExhYmVsKQorCXhjLnJ1bm5pbmcgPSBDLmJvb2wo eC5SdW5uaW5nKQorCXhjLmJsb2NrZWQgPSBDLmJvb2woeC5CbG9ja2VkKQorCXhjLnBhdXNlZCA9 IEMuYm9vbCh4LlBhdXNlZCkKKwl4Yy5zaHV0ZG93biA9IEMuYm9vbCh4LlNodXRkb3duKQorCXhj LmR5aW5nID0gQy5ib29sKHguRHlpbmcpCisJeGMubmV2ZXJfc3RvcCA9IEMuYm9vbCh4Lk5ldmVy U3RvcCkKKwl4Yy5zaHV0ZG93bl9yZWFzb24gPSBDLmxpYnhsX3NodXRkb3duX3JlYXNvbih4LlNo dXRkb3duUmVhc29uKQorCXhjLm91dHN0YW5kaW5nX21lbWtiID0gQy51aW50NjRfdCh4Lk91dHN0 YW5kaW5nTWVta2IpCisJeGMuY3VycmVudF9tZW1rYiA9IEMudWludDY0X3QoeC5DdXJyZW50TWVt a2IpCisJeGMuc2hhcmVkX21lbWtiID0gQy51aW50NjRfdCh4LlNoYXJlZE1lbWtiKQorCXhjLnBh Z2VkX21lbWtiID0gQy51aW50NjRfdCh4LlBhZ2VkTWVta2IpCisJeGMubWF4X21lbWtiID0gQy51 aW50NjRfdCh4Lk1heE1lbWtiKQorCXhjLmNwdV90aW1lID0gQy51aW50NjRfdCh4LkNwdVRpbWUp CisJeGMudmNwdV9tYXhfaWQgPSBDLnVpbnQzMl90KHguVmNwdU1heElkKQorCXhjLnZjcHVfb25s aW5lID0gQy51aW50MzJfdCh4LlZjcHVPbmxpbmUpCisJeGMuY3B1cG9vbCA9IEMudWludDMyX3Qo eC5DcHVwb29sKQorCXhjLmRvbWFpbl90eXBlID0gQy5saWJ4bF9kb21haW5fdHlwZSh4LkRvbWFp blR5cGUpCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqQ3B1cG9vbGluZm8pIGZyb21D KHhjICpDLmxpYnhsX2NwdXBvb2xpbmZvKSBlcnJvciB7CiAJeC5Qb29saWQgPSB1aW50MzIoeGMu cG9vbGlkKQogCXguUG9vbE5hbWUgPSBDLkdvU3RyaW5nKHhjLnBvb2xfbmFtZSkKQEAgLTI1Myw2 ICszNzYsMjAgQEAgZnVuYyAoeCAqQ3B1cG9vbGluZm8pIGZyb21DKHhjICpDLmxpYnhsX2NwdXBv b2xpbmZvKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpDcHVwb29saW5mbykg dG9DKCkgKHhjIEMubGlieGxfY3B1cG9vbGluZm8sIGVyciBlcnJvcikgeworCUMubGlieGxfY3B1 cG9vbGluZm9faW5pdCgmeGMpCisJeGMucG9vbGlkID0gQy51aW50MzJfdCh4LlBvb2xpZCkKKwl4 Yy5wb29sX25hbWUgPSBDLkNTdHJpbmcoeC5Qb29sTmFtZSkKKwl4Yy5zY2hlZCA9IEMubGlieGxf c2NoZWR1bGVyKHguU2NoZWQpCisJeGMubl9kb20gPSBDLnVpbnQzMl90KHguTkRvbSkKKwl4Yy5j cHVtYXAsIGVyciA9IHguQ3B1bWFwLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxf Y3B1cG9vbGluZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXJldHVybiB4 YywgbmlsCit9CisKIGZ1bmMgKHggKkNoYW5uZWxpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9jaGFu bmVsaW5mbykgZXJyb3IgewogCXguQmFja2VuZCA9IEMuR29TdHJpbmcoeGMuYmFja2VuZCkKIAl4 LkJhY2tlbmRJZCA9IHVpbnQzMih4Yy5iYWNrZW5kX2lkKQpAQCAtMjg2LDYgKzQyMywxOSBAQCBm dW5jICh4ICpDaGFubmVsaW5mb0Nvbm5lY3Rpb25VbmlvblB0eSkgZnJvbUMoeGMgKkMubGlieGxf Y2hhbm5lbGluZm8pIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKkNoYW5uZWxp bmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9jaGFubmVsaW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4 bF9jaGFubmVsaW5mb19pbml0KCZ4YykKKwl4Yy5iYWNrZW5kID0gQy5DU3RyaW5nKHguQmFja2Vu ZCkKKwl4Yy5iYWNrZW5kX2lkID0gQy51aW50MzJfdCh4LkJhY2tlbmRJZCkKKwl4Yy5mcm9udGVu ZCA9IEMuQ1N0cmluZyh4LkZyb250ZW5kKQorCXhjLmZyb250ZW5kX2lkID0gQy51aW50MzJfdCh4 LkZyb250ZW5kSWQpCisJeGMuZGV2aWQgPSBDLmxpYnhsX2RldmlkKHguRGV2aWQpCisJeGMuc3Rh dGUgPSBDLmludCh4LlN0YXRlKQorCXhjLmV2dGNoID0gQy5pbnQoeC5FdnRjaCkKKwl4Yy5ycmVm ID0gQy5pbnQoeC5ScmVmKQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlZtaW5mbykg ZnJvbUMoeGMgKkMubGlieGxfdm1pbmZvKSBlcnJvciB7CiAJdmFyIHV1aWRVdWlkIFV1aWQKIAlp ZiBlcnIgOj0gdXVpZFV1aWQuZnJvbUMoJnhjLnV1aWQpOyBlcnIgIT0gbmlsIHsKQEAgLTI5Niw2 ICs0NDYsMTcgQEAgZnVuYyAoeCAqVm1pbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92bWluZm8pIGVy cm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKlZtaW5mbykgdG9DKCkgKHhjIEMubGli eGxfdm1pbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3ZtaW5mb19pbml0KCZ4YykKKwl4Yy51 dWlkLCBlcnIgPSB4LlV1aWQudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF92bWlu Zm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmRvbWlkID0gQy5saWJ4 bF9kb21pZCh4LkRvbWlkKQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlZlcnNpb25J bmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92ZXJzaW9uX2luZm8pIGVycm9yIHsKIAl4LlhlblZlcnNp b25NYWpvciA9IGludCh4Yy54ZW5fdmVyc2lvbl9tYWpvcikKIAl4LlhlblZlcnNpb25NaW5vciA9 IGludCh4Yy54ZW5fdmVyc2lvbl9taW5vcikKQEAgLTMxMyw2ICs0NzQsMjQgQEAgZnVuYyAoeCAq VmVyc2lvbkluZm8pIGZyb21DKHhjICpDLmxpYnhsX3ZlcnNpb25faW5mbykgZXJyb3IgewogCXJl dHVybiBuaWwKIH0KIAorZnVuYyAoeCAqVmVyc2lvbkluZm8pIHRvQygpICh4YyBDLmxpYnhsX3Zl cnNpb25faW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF92ZXJzaW9uX2luZm9faW5pdCgmeGMp CisJeGMueGVuX3ZlcnNpb25fbWFqb3IgPSBDLmludCh4LlhlblZlcnNpb25NYWpvcikKKwl4Yy54 ZW5fdmVyc2lvbl9taW5vciA9IEMuaW50KHguWGVuVmVyc2lvbk1pbm9yKQorCXhjLnhlbl92ZXJz aW9uX2V4dHJhID0gQy5DU3RyaW5nKHguWGVuVmVyc2lvbkV4dHJhKQorCXhjLmNvbXBpbGVyID0g Qy5DU3RyaW5nKHguQ29tcGlsZXIpCisJeGMuY29tcGlsZV9ieSA9IEMuQ1N0cmluZyh4LkNvbXBp bGVCeSkKKwl4Yy5jb21waWxlX2RvbWFpbiA9IEMuQ1N0cmluZyh4LkNvbXBpbGVEb21haW4pCisJ eGMuY29tcGlsZV9kYXRlID0gQy5DU3RyaW5nKHguQ29tcGlsZURhdGUpCisJeGMuY2FwYWJpbGl0 aWVzID0gQy5DU3RyaW5nKHguQ2FwYWJpbGl0aWVzKQorCXhjLmNoYW5nZXNldCA9IEMuQ1N0cmlu Zyh4LkNoYW5nZXNldCkKKwl4Yy52aXJ0X3N0YXJ0ID0gQy51aW50NjRfdCh4LlZpcnRTdGFydCkK Kwl4Yy5wYWdlc2l6ZSA9IEMuaW50KHguUGFnZXNpemUpCisJeGMuY29tbWFuZGxpbmUgPSBDLkNT dHJpbmcoeC5Db21tYW5kbGluZSkKKwl4Yy5idWlsZF9pZCA9IEMuQ1N0cmluZyh4LkJ1aWxkSWQp CisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqRG9tYWluQ3JlYXRlSW5mbykgZnJvbUMo eGMgKkMubGlieGxfZG9tYWluX2NyZWF0ZV9pbmZvKSBlcnJvciB7CiAJeC5UeXBlID0gRG9tYWlu VHlwZSh4Yy5fdHlwZSkKIAl2YXIgZGVmYm9vbEhhcCBEZWZib29sCkBAIC0zNTgsNiArNTM3LDUy IEBAIGZ1bmMgKHggKkRvbWFpbkNyZWF0ZUluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9j cmVhdGVfaW5mbykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqRG9tYWluQ3Jl YXRlSW5mbykgdG9DKCkgKHhjIEMubGlieGxfZG9tYWluX2NyZWF0ZV9pbmZvLCBlcnIgZXJyb3Ip IHsKKwlDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19pbml0KCZ4YykKKwl4Yy5fdHlwZSA9IEMu bGlieGxfZG9tYWluX3R5cGUoeC5UeXBlKQorCXhjLmhhcCwgZXJyID0geC5IYXAudG9DKCkKKwlp ZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fY3JlYXRlX2luZm9fZGlzcG9zZSgmeGMp CisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLm9vcywgZXJyID0geC5Pb3MudG9DKCkKKwlpZiBl cnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fY3JlYXRlX2luZm9fZGlzcG9zZSgmeGMpCisJ CXJldHVybiB4YywgZXJyCisJfQorCXhjLnNzaWRyZWYgPSBDLnVpbnQzMl90KHguU3NpZHJlZikK Kwl4Yy5zc2lkX2xhYmVsID0gQy5DU3RyaW5nKHguU3NpZExhYmVsKQorCXhjLm5hbWUgPSBDLkNT dHJpbmcoeC5OYW1lKQorCXhjLnV1aWQsIGVyciA9IHguVXVpZC50b0MoKQorCWlmIGVyciAhPSBu aWwgeworCQlDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0dXJu IHhjLCBlcnIKKwl9CisJeGMueHNkYXRhLCBlcnIgPSB4LlhzZGF0YS50b0MoKQorCWlmIGVyciAh PSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0 dXJuIHhjLCBlcnIKKwl9CisJeGMucGxhdGZvcm1kYXRhLCBlcnIgPSB4LlBsYXRmb3JtZGF0YS50 b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19kaXNw b3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMucG9vbGlkID0gQy51aW50MzJfdCh4 LlBvb2xpZCkKKwl4Yy5wb29sX25hbWUgPSBDLkNTdHJpbmcoeC5Qb29sTmFtZSkKKwl4Yy5ydW5f aG90cGx1Z19zY3JpcHRzLCBlcnIgPSB4LlJ1bkhvdHBsdWdTY3JpcHRzLnRvQygpCisJaWYgZXJy ICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX2NyZWF0ZV9pbmZvX2Rpc3Bvc2UoJnhjKQorCQly ZXR1cm4geGMsIGVycgorCX0KKwl4Yy5kcml2ZXJfZG9tYWluLCBlcnIgPSB4LkRyaXZlckRvbWFp bi50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19k aXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJcmV0dXJuIHhjLCBuaWwKK30KKwog ZnVuYyAoeCAqRG9tYWluUmVzdG9yZVBhcmFtcykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX3Jl c3RvcmVfcGFyYW1zKSBlcnJvciB7CiAJeC5DaGVja3BvaW50ZWRTdHJlYW0gPSBpbnQoeGMuY2hl Y2twb2ludGVkX3N0cmVhbSkKIAl4LlN0cmVhbVZlcnNpb24gPSB1aW50MzIoeGMuc3RyZWFtX3Zl cnNpb24pCkBAIC0zNzAsNiArNTk1LDE5IEBAIGZ1bmMgKHggKkRvbWFpblJlc3RvcmVQYXJhbXMp IGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9yZXN0b3JlX3BhcmFtcykgZXJyb3IgewogCXJldHVy biBuaWwKIH0KIAorZnVuYyAoeCAqRG9tYWluUmVzdG9yZVBhcmFtcykgdG9DKCkgKHhjIEMubGli eGxfZG9tYWluX3Jlc3RvcmVfcGFyYW1zLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX2RvbWFpbl9y ZXN0b3JlX3BhcmFtc19pbml0KCZ4YykKKwl4Yy5jaGVja3BvaW50ZWRfc3RyZWFtID0gQy5pbnQo eC5DaGVja3BvaW50ZWRTdHJlYW0pCisJeGMuc3RyZWFtX3ZlcnNpb24gPSBDLnVpbnQzMl90KHgu U3RyZWFtVmVyc2lvbikKKwl4Yy5jb2xvX3Byb3h5X3NjcmlwdCA9IEMuQ1N0cmluZyh4LkNvbG9Q cm94eVNjcmlwdCkKKwl4Yy51c2Vyc3BhY2VfY29sb19wcm94eSwgZXJyID0geC5Vc2Vyc3BhY2VD b2xvUHJveHkudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fcmVzdG9y ZV9wYXJhbXNfZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXJldHVybiB4Yywg bmlsCit9CisKIGZ1bmMgKHggKlNjaGVkUGFyYW1zKSBmcm9tQyh4YyAqQy5saWJ4bF9zY2hlZF9w YXJhbXMpIGVycm9yIHsKIAl4LlZjcHVpZCA9IGludCh4Yy52Y3B1aWQpCiAJeC5XZWlnaHQgPSBp bnQoeGMud2VpZ2h0KQpAQCAtMzgwLDYgKzYxOCwxNyBAQCBmdW5jICh4ICpTY2hlZFBhcmFtcykg ZnJvbUMoeGMgKkMubGlieGxfc2NoZWRfcGFyYW1zKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQog CitmdW5jICh4ICpTY2hlZFBhcmFtcykgdG9DKCkgKHhjIEMubGlieGxfc2NoZWRfcGFyYW1zLCBl cnIgZXJyb3IpIHsKKwlDLmxpYnhsX3NjaGVkX3BhcmFtc19pbml0KCZ4YykKKwl4Yy52Y3B1aWQg PSBDLmludCh4LlZjcHVpZCkKKwl4Yy53ZWlnaHQgPSBDLmludCh4LldlaWdodCkKKwl4Yy5jYXAg PSBDLmludCh4LkNhcCkKKwl4Yy5wZXJpb2QgPSBDLmludCh4LlBlcmlvZCkKKwl4Yy5leHRyYXRp bWUgPSBDLmludCh4LkV4dHJhdGltZSkKKwl4Yy5idWRnZXQgPSBDLmludCh4LkJ1ZGdldCkKKwly ZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpWY3B1U2NoZWRQYXJhbXMpIGZyb21DKHhjICpD LmxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zKSBlcnJvciB7CiAJeC5TY2hlZCA9IFNjaGVkdWxlcih4 Yy5zY2hlZCkKIAludW1WY3B1cyA6PSBpbnQoeGMubnVtX3ZjcHVzKQpAQCAtMzk1LDYgKzY0NCwx MiBAQCBmdW5jICh4ICpWY3B1U2NoZWRQYXJhbXMpIGZyb21DKHhjICpDLmxpYnhsX3ZjcHVfc2No ZWRfcGFyYW1zKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpWY3B1U2NoZWRQ YXJhbXMpIHRvQygpICh4YyBDLmxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zLCBlcnIgZXJyb3IpIHsK KwlDLmxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2luaXQoJnhjKQorCXhjLnNjaGVkID0gQy5saWJ4 bF9zY2hlZHVsZXIoeC5TY2hlZCkKKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpEb21h aW5TY2hlZFBhcmFtcykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX3NjaGVkX3BhcmFtcykgZXJy b3IgewogCXguU2NoZWQgPSBTY2hlZHVsZXIoeGMuc2NoZWQpCiAJeC5XZWlnaHQgPSBpbnQoeGMu d2VpZ2h0KQpAQCAtNDA3LDYgKzY2MiwxOSBAQCBmdW5jICh4ICpEb21haW5TY2hlZFBhcmFtcykg ZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX3NjaGVkX3BhcmFtcykgZXJyb3IgewogCXJldHVybiBu aWwKIH0KIAorZnVuYyAoeCAqRG9tYWluU2NoZWRQYXJhbXMpIHRvQygpICh4YyBDLmxpYnhsX2Rv bWFpbl9zY2hlZF9wYXJhbXMsIGVyciBlcnJvcikgeworCUMubGlieGxfZG9tYWluX3NjaGVkX3Bh cmFtc19pbml0KCZ4YykKKwl4Yy5zY2hlZCA9IEMubGlieGxfc2NoZWR1bGVyKHguU2NoZWQpCisJ eGMud2VpZ2h0ID0gQy5pbnQoeC5XZWlnaHQpCisJeGMuY2FwID0gQy5pbnQoeC5DYXApCisJeGMu cGVyaW9kID0gQy5pbnQoeC5QZXJpb2QpCisJeGMuYnVkZ2V0ID0gQy5pbnQoeC5CdWRnZXQpCisJ eGMuZXh0cmF0aW1lID0gQy5pbnQoeC5FeHRyYXRpbWUpCisJeGMuc2xpY2UgPSBDLmludCh4LlNs aWNlKQorCXhjLmxhdGVuY3kgPSBDLmludCh4LkxhdGVuY3kpCisJcmV0dXJuIHhjLCBuaWwKK30K KwogZnVuYyAoeCAqVm5vZGVJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92bm9kZV9pbmZvKSBlcnJv ciB7CiAJeC5NZW1rYiA9IHVpbnQ2NCh4Yy5tZW1rYikKIAludW1EaXN0YW5jZXMgOj0gaW50KHhj Lm51bV9kaXN0YW5jZXMpCkBAIC00MjQsMTIgKzY5MiwzMSBAQCBmdW5jICh4ICpWbm9kZUluZm8p IGZyb21DKHhjICpDLmxpYnhsX3Zub2RlX2luZm8pIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAK K2Z1bmMgKHggKlZub2RlSW5mbykgdG9DKCkgKHhjIEMubGlieGxfdm5vZGVfaW5mbywgZXJyIGVy cm9yKSB7CisJQy5saWJ4bF92bm9kZV9pbmZvX2luaXQoJnhjKQorCXhjLm1lbWtiID0gQy51aW50 NjRfdCh4Lk1lbWtiKQorCXhjLnBub2RlID0gQy51aW50MzJfdCh4LlBub2RlKQorCXhjLnZjcHVz LCBlcnIgPSB4LlZjcHVzLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfdm5vZGVf aW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJcmV0dXJuIHhjLCBuaWwK K30KKwogZnVuYyAoeCAqUmRtUmVzZXJ2ZSkgZnJvbUMoeGMgKkMubGlieGxfcmRtX3Jlc2VydmUp IGVycm9yIHsKIAl4LlN0cmF0ZWd5ID0gUmRtUmVzZXJ2ZVN0cmF0ZWd5KHhjLnN0cmF0ZWd5KQog CXguUG9saWN5ID0gUmRtUmVzZXJ2ZVBvbGljeSh4Yy5wb2xpY3kpCiAJcmV0dXJuIG5pbAogfQog CitmdW5jICh4ICpSZG1SZXNlcnZlKSB0b0MoKSAoeGMgQy5saWJ4bF9yZG1fcmVzZXJ2ZSwgZXJy IGVycm9yKSB7CisJQy5saWJ4bF9yZG1fcmVzZXJ2ZV9pbml0KCZ4YykKKwl4Yy5zdHJhdGVneSA9 IEMubGlieGxfcmRtX3Jlc2VydmVfc3RyYXRlZ3koeC5TdHJhdGVneSkKKwl4Yy5wb2xpY3kgPSBD LmxpYnhsX3JkbV9yZXNlcnZlX3BvbGljeSh4LlBvbGljeSkKKwlyZXR1cm4geGMsIG5pbAorfQor CiBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWls ZF9pbmZvKSBlcnJvciB7CiAJeC5NYXhWY3B1cyA9IGludCh4Yy5tYXhfdmNwdXMpCiAJdmFyIGJp dG1hcEF2YWlsVmNwdXMgQml0bWFwCkBAIC03NzYsNiArMTA2MywxMjkgQEAgZnVuYyAoeCAqRG9t YWluQnVpbGRJbmZvVHlwZVVuaW9uUHZoKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fYnVpbGRf aW5mbykgZXJyb3IKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKkRvbWFpbkJ1aWxkSW5mbykg dG9DKCkgKHhjIEMubGlieGxfZG9tYWluX2J1aWxkX2luZm8sIGVyciBlcnJvcikgeworCUMubGli eGxfZG9tYWluX2J1aWxkX2luZm9faW5pdCgmeGMpCisJeGMubWF4X3ZjcHVzID0gQy5pbnQoeC5N YXhWY3B1cykKKwl4Yy5hdmFpbF92Y3B1cywgZXJyID0geC5BdmFpbFZjcHVzLnRvQygpCisJaWYg ZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCisJ CXJldHVybiB4YywgZXJyCisJfQorCXhjLmNwdW1hcCwgZXJyID0geC5DcHVtYXAudG9DKCkKKwlp ZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykK KwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMubm9kZW1hcCwgZXJyID0geC5Ob2RlbWFwLnRvQygp CisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgm eGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLm51bWFfcGxhY2VtZW50LCBlcnIgPSB4Lk51 bWFQbGFjZW1lbnQudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVp bGRfaW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMudHNjX21vZGUg PSBDLmxpYnhsX3RzY19tb2RlKHguVHNjTW9kZSkKKwl4Yy5tYXhfbWVta2IgPSBDLnVpbnQ2NF90 KHguTWF4TWVta2IpCisJeGMudGFyZ2V0X21lbWtiID0gQy51aW50NjRfdCh4LlRhcmdldE1lbWti KQorCXhjLnZpZGVvX21lbWtiID0gQy51aW50NjRfdCh4LlZpZGVvTWVta2IpCisJeGMuc2hhZG93 X21lbWtiID0gQy51aW50NjRfdCh4LlNoYWRvd01lbWtiKQorCXhjLnJ0Y190aW1lb2Zmc2V0ID0g Qy51aW50MzJfdCh4LlJ0Y1RpbWVvZmZzZXQpCisJeGMuZXhlY19zc2lkcmVmID0gQy51aW50MzJf dCh4LkV4ZWNTc2lkcmVmKQorCXhjLmV4ZWNfc3NpZF9sYWJlbCA9IEMuQ1N0cmluZyh4LkV4ZWNT c2lkTGFiZWwpCisJeGMubG9jYWx0aW1lLCBlcnIgPSB4LkxvY2FsdGltZS50b0MoKQorCWlmIGVy ciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQorCQly ZXR1cm4geGMsIGVycgorCX0KKwl4Yy5kaXNhYmxlX21pZ3JhdGUsIGVyciA9IHguRGlzYWJsZU1p Z3JhdGUudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5m b19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuY3B1aWQsIGVyciA9IHgu Q3B1aWQudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5m b19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuYmxrZGV2X3N0YXJ0ID0g Qy5DU3RyaW5nKHguQmxrZGV2U3RhcnQpCisJeGMubWF4X2dyYW50X2ZyYW1lcyA9IEMudWludDMy X3QoeC5NYXhHcmFudEZyYW1lcykKKwl4Yy5tYXhfbWFwdHJhY2tfZnJhbWVzID0gQy51aW50MzJf dCh4Lk1heE1hcHRyYWNrRnJhbWVzKQorCXhjLmRldmljZV9tb2RlbF92ZXJzaW9uID0gQy5saWJ4 bF9kZXZpY2VfbW9kZWxfdmVyc2lvbih4LkRldmljZU1vZGVsVmVyc2lvbikKKwl4Yy5kZXZpY2Vf bW9kZWxfc3R1YmRvbWFpbiwgZXJyID0geC5EZXZpY2VNb2RlbFN0dWJkb21haW4udG9DKCkKKwlp ZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykK KwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuZGV2aWNlX21vZGVsID0gQy5DU3RyaW5nKHguRGV2 aWNlTW9kZWwpCisJeGMuZGV2aWNlX21vZGVsX3NzaWRyZWYgPSBDLnVpbnQzMl90KHguRGV2aWNl TW9kZWxTc2lkcmVmKQorCXhjLmRldmljZV9tb2RlbF9zc2lkX2xhYmVsID0gQy5DU3RyaW5nKHgu RGV2aWNlTW9kZWxTc2lkTGFiZWwpCisJeGMuZGV2aWNlX21vZGVsX3VzZXIgPSBDLkNTdHJpbmco eC5EZXZpY2VNb2RlbFVzZXIpCisJeGMuZXh0cmEsIGVyciA9IHguRXh0cmEudG9DKCkKKwlpZiBl cnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKKwkJ cmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuZXh0cmFfcHYsIGVyciA9IHguRXh0cmFQdi50b0MoKQor CWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhj KQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5leHRyYV9odm0sIGVyciA9IHguRXh0cmFIdm0u dG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNw b3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuc2NoZWRfcGFyYW1zLCBlcnIgPSB4 LlNjaGVkUGFyYW1zLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX2J1 aWxkX2luZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmNsYWltX21v ZGUsIGVyciA9IHguQ2xhaW1Nb2RlLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxf ZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhj LmV2ZW50X2NoYW5uZWxzID0gQy51aW50MzJfdCh4LkV2ZW50Q2hhbm5lbHMpCisJeGMua2VybmVs ID0gQy5DU3RyaW5nKHguS2VybmVsKQorCXhjLmNtZGxpbmUgPSBDLkNTdHJpbmcoeC5DbWRsaW5l KQorCXhjLnJhbWRpc2sgPSBDLkNTdHJpbmcoeC5SYW1kaXNrKQorCXhjLmRldmljZV90cmVlID0g Qy5DU3RyaW5nKHguRGV2aWNlVHJlZSkKKwl4Yy5hY3BpLCBlcnIgPSB4LkFjcGkudG9DKCkKKwlp ZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykK KwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuYm9vdGxvYWRlciA9IEMuQ1N0cmluZyh4LkJvb3Rs b2FkZXIpCisJeGMuYm9vdGxvYWRlcl9hcmdzLCBlcnIgPSB4LkJvb3Rsb2FkZXJBcmdzLnRvQygp CisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgm eGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLnRpbWVyX21vZGUgPSBDLmxpYnhsX3RpbWVy X21vZGUoeC5UaW1lck1vZGUpCisJeGMubmVzdGVkX2h2bSwgZXJyID0geC5OZXN0ZWRIdm0udG9D KCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3Nl KCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMuYXBpYywgZXJyID0geC5BcGljLnRvQygp CisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgm eGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmRtX3Jlc3RyaWN0LCBlcnIgPSB4LkRtUmVz dHJpY3QudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5m b19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMudGVlID0gQy5saWJ4bF90 ZWVfdHlwZSh4LlRlZSkKKwl4Yy5hcmNoX2FybS5naWNfdmVyc2lvbiA9IEMubGlieGxfZ2ljX3Zl cnNpb24oeC5BcmNoQXJtLkdpY1ZlcnNpb24pCisJeGMuYXJjaF9hcm0udnVhcnQgPSBDLmxpYnhs X3Z1YXJ0X3R5cGUoeC5BcmNoQXJtLlZ1YXJ0KQorCXhjLmFsdHAybSA9IEMubGlieGxfYWx0cDJt X21vZGUoeC5BbHRwMk0pCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqRGV2aWNlVmZi KSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfdmZiKSBlcnJvciB7CiAJeC5CYWNrZW5kRG9taWQg PSBEb21pZCh4Yy5iYWNrZW5kX2RvbWlkKQogCXguQmFja2VuZERvbW5hbWUgPSBDLkdvU3RyaW5n KHhjLmJhY2tlbmRfZG9tbmFtZSkKQEAgLTc5NCw2ICsxMjA0LDI1IEBAIGZ1bmMgKHggKkRldmlj ZVZmYikgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX3ZmYikgZXJyb3IgewogCXJldHVybiBuaWwK IH0KIAorZnVuYyAoeCAqRGV2aWNlVmZiKSB0b0MoKSAoeGMgQy5saWJ4bF9kZXZpY2VfdmZiLCBl cnIgZXJyb3IpIHsKKwlDLmxpYnhsX2RldmljZV92ZmJfaW5pdCgmeGMpCisJeGMuYmFja2VuZF9k b21pZCA9IEMubGlieGxfZG9taWQoeC5CYWNrZW5kRG9taWQpCisJeGMuYmFja2VuZF9kb21uYW1l ID0gQy5DU3RyaW5nKHguQmFja2VuZERvbW5hbWUpCisJeGMuZGV2aWQgPSBDLmxpYnhsX2Rldmlk KHguRGV2aWQpCisJeGMudm5jLCBlcnIgPSB4LlZuYy50b0MoKQorCWlmIGVyciAhPSBuaWwgewor CQlDLmxpYnhsX2RldmljZV92ZmJfZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQor CXhjLnNkbCwgZXJyID0geC5TZGwudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9k ZXZpY2VfdmZiX2Rpc3Bvc2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5rZXltYXAg PSBDLkNTdHJpbmcoeC5LZXltYXApCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqRGV2 aWNlVmtiKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfdmtiKSBlcnJvciB7CiAJeC5CYWNrZW5k RG9taWQgPSBEb21pZCh4Yy5iYWNrZW5kX2RvbWlkKQogCXguQmFja2VuZERvbW5hbWUgPSBDLkdv U3RyaW5nKHhjLmJhY2tlbmRfZG9tbmFtZSkKQEAgLTgxMyw2ICsxMjQyLDI2IEBAIGZ1bmMgKHgg KkRldmljZVZrYikgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX3ZrYikgZXJyb3IgewogCXJldHVy biBuaWwKIH0KIAorZnVuYyAoeCAqRGV2aWNlVmtiKSB0b0MoKSAoeGMgQy5saWJ4bF9kZXZpY2Vf dmtiLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX2RldmljZV92a2JfaW5pdCgmeGMpCisJeGMuYmFj a2VuZF9kb21pZCA9IEMubGlieGxfZG9taWQoeC5CYWNrZW5kRG9taWQpCisJeGMuYmFja2VuZF9k b21uYW1lID0gQy5DU3RyaW5nKHguQmFja2VuZERvbW5hbWUpCisJeGMuZGV2aWQgPSBDLmxpYnhs X2RldmlkKHguRGV2aWQpCisJeGMuYmFja2VuZF90eXBlID0gQy5saWJ4bF92a2JfYmFja2VuZCh4 LkJhY2tlbmRUeXBlKQorCXhjLnVuaXF1ZV9pZCA9IEMuQ1N0cmluZyh4LlVuaXF1ZUlkKQorCXhj LmZlYXR1cmVfZGlzYWJsZV9rZXlib2FyZCA9IEMuYm9vbCh4LkZlYXR1cmVEaXNhYmxlS2V5Ym9h cmQpCisJeGMuZmVhdHVyZV9kaXNhYmxlX3BvaW50ZXIgPSBDLmJvb2woeC5GZWF0dXJlRGlzYWJs ZVBvaW50ZXIpCisJeGMuZmVhdHVyZV9hYnNfcG9pbnRlciA9IEMuYm9vbCh4LkZlYXR1cmVBYnNQ b2ludGVyKQorCXhjLmZlYXR1cmVfcmF3X3BvaW50ZXIgPSBDLmJvb2woeC5GZWF0dXJlUmF3UG9p bnRlcikKKwl4Yy5mZWF0dXJlX211bHRpX3RvdWNoID0gQy5ib29sKHguRmVhdHVyZU11bHRpVG91 Y2gpCisJeGMud2lkdGggPSBDLnVpbnQzMl90KHguV2lkdGgpCisJeGMuaGVpZ2h0ID0gQy51aW50 MzJfdCh4LkhlaWdodCkKKwl4Yy5tdWx0aV90b3VjaF93aWR0aCA9IEMudWludDMyX3QoeC5NdWx0 aVRvdWNoV2lkdGgpCisJeGMubXVsdGlfdG91Y2hfaGVpZ2h0ID0gQy51aW50MzJfdCh4Lk11bHRp VG91Y2hIZWlnaHQpCisJeGMubXVsdGlfdG91Y2hfbnVtX2NvbnRhY3RzID0gQy51aW50MzJfdCh4 Lk11bHRpVG91Y2hOdW1Db250YWN0cykKKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpE ZXZpY2VEaXNrKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfZGlzaykgZXJyb3IgewogCXguQmFj a2VuZERvbWlkID0gRG9taWQoeGMuYmFja2VuZF9kb21pZCkKIAl4LkJhY2tlbmREb21uYW1lID0g Qy5Hb1N0cmluZyh4Yy5iYWNrZW5kX2RvbW5hbWUpCkBAIC04NDgsNiArMTI5Nyw0MiBAQCBmdW5j ICh4ICpEZXZpY2VEaXNrKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfZGlzaykgZXJyb3Igewog CXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqRGV2aWNlRGlzaykgdG9DKCkgKHhjIEMubGlieGxf ZGV2aWNlX2Rpc2ssIGVyciBlcnJvcikgeworCUMubGlieGxfZGV2aWNlX2Rpc2tfaW5pdCgmeGMp CisJeGMuYmFja2VuZF9kb21pZCA9IEMubGlieGxfZG9taWQoeC5CYWNrZW5kRG9taWQpCisJeGMu YmFja2VuZF9kb21uYW1lID0gQy5DU3RyaW5nKHguQmFja2VuZERvbW5hbWUpCisJeGMucGRldl9w YXRoID0gQy5DU3RyaW5nKHguUGRldlBhdGgpCisJeGMudmRldiA9IEMuQ1N0cmluZyh4LlZkZXYp CisJeGMuYmFja2VuZCA9IEMubGlieGxfZGlza19iYWNrZW5kKHguQmFja2VuZCkKKwl4Yy5mb3Jt YXQgPSBDLmxpYnhsX2Rpc2tfZm9ybWF0KHguRm9ybWF0KQorCXhjLnNjcmlwdCA9IEMuQ1N0cmlu Zyh4LlNjcmlwdCkKKwl4Yy5yZW1vdmFibGUgPSBDLmludCh4LlJlbW92YWJsZSkKKwl4Yy5yZWFk d3JpdGUgPSBDLmludCh4LlJlYWR3cml0ZSkKKwl4Yy5pc19jZHJvbSA9IEMuaW50KHguSXNDZHJv bSkKKwl4Yy5kaXJlY3RfaW9fc2FmZSA9IEMuYm9vbCh4LkRpcmVjdElvU2FmZSkKKwl4Yy5kaXNj YXJkX2VuYWJsZSwgZXJyID0geC5EaXNjYXJkRW5hYmxlLnRvQygpCisJaWYgZXJyICE9IG5pbCB7 CisJCUMubGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJ fQorCXhjLmNvbG9fZW5hYmxlLCBlcnIgPSB4LkNvbG9FbmFibGUudG9DKCkKKwlpZiBlcnIgIT0g bmlsIHsKKwkJQy5saWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBl cnIKKwl9CisJeGMuY29sb19yZXN0b3JlX2VuYWJsZSwgZXJyID0geC5Db2xvUmVzdG9yZUVuYWJs ZS50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RldmljZV9kaXNrX2Rpc3Bvc2Uo JnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5jb2xvX2hvc3QgPSBDLkNTdHJpbmcoeC5D b2xvSG9zdCkKKwl4Yy5jb2xvX3BvcnQgPSBDLmludCh4LkNvbG9Qb3J0KQorCXhjLmNvbG9fZXhw b3J0ID0gQy5DU3RyaW5nKHguQ29sb0V4cG9ydCkKKwl4Yy5hY3RpdmVfZGlzayA9IEMuQ1N0cmlu Zyh4LkFjdGl2ZURpc2spCisJeGMuaGlkZGVuX2Rpc2sgPSBDLkNTdHJpbmcoeC5IaWRkZW5EaXNr KQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkRldmljZU5pYykgZnJvbUMoeGMgKkMu bGlieGxfZGV2aWNlX25pYykgZXJyb3IgewogCXguQmFja2VuZERvbWlkID0gRG9taWQoeGMuYmFj a2VuZF9kb21pZCkKIAl4LkJhY2tlbmREb21uYW1lID0gQy5Hb1N0cmluZyh4Yy5iYWNrZW5kX2Rv bW5hbWUpCkBAIC05MTksNiArMTQwNCw3OCBAQCBmdW5jICh4ICpEZXZpY2VOaWMpIGZyb21DKHhj ICpDLmxpYnhsX2RldmljZV9uaWMpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHgg KkRldmljZU5pYykgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX25pYywgZXJyIGVycm9yKSB7CisJ Qy5saWJ4bF9kZXZpY2VfbmljX2luaXQoJnhjKQorCXhjLmJhY2tlbmRfZG9taWQgPSBDLmxpYnhs X2RvbWlkKHguQmFja2VuZERvbWlkKQorCXhjLmJhY2tlbmRfZG9tbmFtZSA9IEMuQ1N0cmluZyh4 LkJhY2tlbmREb21uYW1lKQorCXhjLmRldmlkID0gQy5saWJ4bF9kZXZpZCh4LkRldmlkKQorCXhj Lm10dSA9IEMuaW50KHguTXR1KQorCXhjLm1vZGVsID0gQy5DU3RyaW5nKHguTW9kZWwpCisJeGMu bWFjLCBlcnIgPSB4Lk1hYy50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2Rldmlj ZV9uaWNfZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmlwID0gQy5DU3Ry aW5nKHguSXApCisJeGMuYnJpZGdlID0gQy5DU3RyaW5nKHguQnJpZGdlKQorCXhjLmlmbmFtZSA9 IEMuQ1N0cmluZyh4LklmbmFtZSkKKwl4Yy5zY3JpcHQgPSBDLkNTdHJpbmcoeC5TY3JpcHQpCisJ eGMubmljdHlwZSA9IEMubGlieGxfbmljX3R5cGUoeC5OaWN0eXBlKQorCXhjLnJhdGVfYnl0ZXNf cGVyX2ludGVydmFsID0gQy51aW50NjRfdCh4LlJhdGVCeXRlc1BlckludGVydmFsKQorCXhjLnJh dGVfaW50ZXJ2YWxfdXNlY3MgPSBDLnVpbnQzMl90KHguUmF0ZUludGVydmFsVXNlY3MpCisJeGMu Z2F0ZXdheWRldiA9IEMuQ1N0cmluZyh4LkdhdGV3YXlkZXYpCisJeGMuY29sb2Z0X2ZvcndhcmRk ZXYgPSBDLkNTdHJpbmcoeC5Db2xvZnRGb3J3YXJkZGV2KQorCXhjLmNvbG9fc29ja19taXJyb3Jf aWQgPSBDLkNTdHJpbmcoeC5Db2xvU29ja01pcnJvcklkKQorCXhjLmNvbG9fc29ja19taXJyb3Jf aXAgPSBDLkNTdHJpbmcoeC5Db2xvU29ja01pcnJvcklwKQorCXhjLmNvbG9fc29ja19taXJyb3Jf cG9ydCA9IEMuQ1N0cmluZyh4LkNvbG9Tb2NrTWlycm9yUG9ydCkKKwl4Yy5jb2xvX3NvY2tfY29t cGFyZV9wcmlfaW5faWQgPSBDLkNTdHJpbmcoeC5Db2xvU29ja0NvbXBhcmVQcmlJbklkKQorCXhj LmNvbG9fc29ja19jb21wYXJlX3ByaV9pbl9pcCA9IEMuQ1N0cmluZyh4LkNvbG9Tb2NrQ29tcGFy ZVByaUluSXApCisJeGMuY29sb19zb2NrX2NvbXBhcmVfcHJpX2luX3BvcnQgPSBDLkNTdHJpbmco eC5Db2xvU29ja0NvbXBhcmVQcmlJblBvcnQpCisJeGMuY29sb19zb2NrX2NvbXBhcmVfc2VjX2lu X2lkID0gQy5DU3RyaW5nKHguQ29sb1NvY2tDb21wYXJlU2VjSW5JZCkKKwl4Yy5jb2xvX3NvY2tf Y29tcGFyZV9zZWNfaW5faXAgPSBDLkNTdHJpbmcoeC5Db2xvU29ja0NvbXBhcmVTZWNJbklwKQor CXhjLmNvbG9fc29ja19jb21wYXJlX3NlY19pbl9wb3J0ID0gQy5DU3RyaW5nKHguQ29sb1NvY2tD b21wYXJlU2VjSW5Qb3J0KQorCXhjLmNvbG9fc29ja19jb21wYXJlX25vdGlmeV9pZCA9IEMuQ1N0 cmluZyh4LkNvbG9Tb2NrQ29tcGFyZU5vdGlmeUlkKQorCXhjLmNvbG9fc29ja19jb21wYXJlX25v dGlmeV9pcCA9IEMuQ1N0cmluZyh4LkNvbG9Tb2NrQ29tcGFyZU5vdGlmeUlwKQorCXhjLmNvbG9f c29ja19jb21wYXJlX25vdGlmeV9wb3J0ID0gQy5DU3RyaW5nKHguQ29sb1NvY2tDb21wYXJlTm90 aWZ5UG9ydCkKKwl4Yy5jb2xvX3NvY2tfcmVkaXJlY3RvcjBfaWQgPSBDLkNTdHJpbmcoeC5Db2xv U29ja1JlZGlyZWN0b3IwSWQpCisJeGMuY29sb19zb2NrX3JlZGlyZWN0b3IwX2lwID0gQy5DU3Ry aW5nKHguQ29sb1NvY2tSZWRpcmVjdG9yMElwKQorCXhjLmNvbG9fc29ja19yZWRpcmVjdG9yMF9w b3J0ID0gQy5DU3RyaW5nKHguQ29sb1NvY2tSZWRpcmVjdG9yMFBvcnQpCisJeGMuY29sb19zb2Nr X3JlZGlyZWN0b3IxX2lkID0gQy5DU3RyaW5nKHguQ29sb1NvY2tSZWRpcmVjdG9yMUlkKQorCXhj LmNvbG9fc29ja19yZWRpcmVjdG9yMV9pcCA9IEMuQ1N0cmluZyh4LkNvbG9Tb2NrUmVkaXJlY3Rv cjFJcCkKKwl4Yy5jb2xvX3NvY2tfcmVkaXJlY3RvcjFfcG9ydCA9IEMuQ1N0cmluZyh4LkNvbG9T b2NrUmVkaXJlY3RvcjFQb3J0KQorCXhjLmNvbG9fc29ja19yZWRpcmVjdG9yMl9pZCA9IEMuQ1N0 cmluZyh4LkNvbG9Tb2NrUmVkaXJlY3RvcjJJZCkKKwl4Yy5jb2xvX3NvY2tfcmVkaXJlY3RvcjJf aXAgPSBDLkNTdHJpbmcoeC5Db2xvU29ja1JlZGlyZWN0b3IySXApCisJeGMuY29sb19zb2NrX3Jl ZGlyZWN0b3IyX3BvcnQgPSBDLkNTdHJpbmcoeC5Db2xvU29ja1JlZGlyZWN0b3IyUG9ydCkKKwl4 Yy5jb2xvX2ZpbHRlcl9taXJyb3JfcXVldWUgPSBDLkNTdHJpbmcoeC5Db2xvRmlsdGVyTWlycm9y UXVldWUpCisJeGMuY29sb19maWx0ZXJfbWlycm9yX291dGRldiA9IEMuQ1N0cmluZyh4LkNvbG9G aWx0ZXJNaXJyb3JPdXRkZXYpCisJeGMuY29sb19maWx0ZXJfcmVkaXJlY3RvcjBfcXVldWUgPSBD LkNTdHJpbmcoeC5Db2xvRmlsdGVyUmVkaXJlY3RvcjBRdWV1ZSkKKwl4Yy5jb2xvX2ZpbHRlcl9y ZWRpcmVjdG9yMF9pbmRldiA9IEMuQ1N0cmluZyh4LkNvbG9GaWx0ZXJSZWRpcmVjdG9yMEluZGV2 KQorCXhjLmNvbG9fZmlsdGVyX3JlZGlyZWN0b3IwX291dGRldiA9IEMuQ1N0cmluZyh4LkNvbG9G aWx0ZXJSZWRpcmVjdG9yME91dGRldikKKwl4Yy5jb2xvX2ZpbHRlcl9yZWRpcmVjdG9yMV9xdWV1 ZSA9IEMuQ1N0cmluZyh4LkNvbG9GaWx0ZXJSZWRpcmVjdG9yMVF1ZXVlKQorCXhjLmNvbG9fZmls dGVyX3JlZGlyZWN0b3IxX2luZGV2ID0gQy5DU3RyaW5nKHguQ29sb0ZpbHRlclJlZGlyZWN0b3Ix SW5kZXYpCisJeGMuY29sb19maWx0ZXJfcmVkaXJlY3RvcjFfb3V0ZGV2ID0gQy5DU3RyaW5nKHgu Q29sb0ZpbHRlclJlZGlyZWN0b3IxT3V0ZGV2KQorCXhjLmNvbG9fY29tcGFyZV9wcmlfaW4gPSBD LkNTdHJpbmcoeC5Db2xvQ29tcGFyZVByaUluKQorCXhjLmNvbG9fY29tcGFyZV9zZWNfaW4gPSBD LkNTdHJpbmcoeC5Db2xvQ29tcGFyZVNlY0luKQorCXhjLmNvbG9fY29tcGFyZV9vdXQgPSBDLkNT dHJpbmcoeC5Db2xvQ29tcGFyZU91dCkKKwl4Yy5jb2xvX2NvbXBhcmVfbm90aWZ5X2RldiA9IEMu Q1N0cmluZyh4LkNvbG9Db21wYXJlTm90aWZ5RGV2KQorCXhjLmNvbG9fc29ja19zZWNfcmVkaXJl Y3RvcjBfaWQgPSBDLkNTdHJpbmcoeC5Db2xvU29ja1NlY1JlZGlyZWN0b3IwSWQpCisJeGMuY29s b19zb2NrX3NlY19yZWRpcmVjdG9yMF9pcCA9IEMuQ1N0cmluZyh4LkNvbG9Tb2NrU2VjUmVkaXJl Y3RvcjBJcCkKKwl4Yy5jb2xvX3NvY2tfc2VjX3JlZGlyZWN0b3IwX3BvcnQgPSBDLkNTdHJpbmco eC5Db2xvU29ja1NlY1JlZGlyZWN0b3IwUG9ydCkKKwl4Yy5jb2xvX3NvY2tfc2VjX3JlZGlyZWN0 b3IxX2lkID0gQy5DU3RyaW5nKHguQ29sb1NvY2tTZWNSZWRpcmVjdG9yMUlkKQorCXhjLmNvbG9f c29ja19zZWNfcmVkaXJlY3RvcjFfaXAgPSBDLkNTdHJpbmcoeC5Db2xvU29ja1NlY1JlZGlyZWN0 b3IxSXApCisJeGMuY29sb19zb2NrX3NlY19yZWRpcmVjdG9yMV9wb3J0ID0gQy5DU3RyaW5nKHgu Q29sb1NvY2tTZWNSZWRpcmVjdG9yMVBvcnQpCisJeGMuY29sb19maWx0ZXJfc2VjX3JlZGlyZWN0 b3IwX3F1ZXVlID0gQy5DU3RyaW5nKHguQ29sb0ZpbHRlclNlY1JlZGlyZWN0b3IwUXVldWUpCisJ eGMuY29sb19maWx0ZXJfc2VjX3JlZGlyZWN0b3IwX2luZGV2ID0gQy5DU3RyaW5nKHguQ29sb0Zp bHRlclNlY1JlZGlyZWN0b3IwSW5kZXYpCisJeGMuY29sb19maWx0ZXJfc2VjX3JlZGlyZWN0b3Iw X291dGRldiA9IEMuQ1N0cmluZyh4LkNvbG9GaWx0ZXJTZWNSZWRpcmVjdG9yME91dGRldikKKwl4 Yy5jb2xvX2ZpbHRlcl9zZWNfcmVkaXJlY3RvcjFfcXVldWUgPSBDLkNTdHJpbmcoeC5Db2xvRmls dGVyU2VjUmVkaXJlY3RvcjFRdWV1ZSkKKwl4Yy5jb2xvX2ZpbHRlcl9zZWNfcmVkaXJlY3RvcjFf aW5kZXYgPSBDLkNTdHJpbmcoeC5Db2xvRmlsdGVyU2VjUmVkaXJlY3RvcjFJbmRldikKKwl4Yy5j b2xvX2ZpbHRlcl9zZWNfcmVkaXJlY3RvcjFfb3V0ZGV2ID0gQy5DU3RyaW5nKHguQ29sb0ZpbHRl clNlY1JlZGlyZWN0b3IxT3V0ZGV2KQorCXhjLmNvbG9fZmlsdGVyX3NlY19yZXdyaXRlcjBfcXVl dWUgPSBDLkNTdHJpbmcoeC5Db2xvRmlsdGVyU2VjUmV3cml0ZXIwUXVldWUpCisJeGMuY29sb19j aGVja3BvaW50X2hvc3QgPSBDLkNTdHJpbmcoeC5Db2xvQ2hlY2twb2ludEhvc3QpCisJeGMuY29s b19jaGVja3BvaW50X3BvcnQgPSBDLkNTdHJpbmcoeC5Db2xvQ2hlY2twb2ludFBvcnQpCisJcmV0 dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqRGV2aWNlUGNpKSBmcm9tQyh4YyAqQy5saWJ4bF9k ZXZpY2VfcGNpKSBlcnJvciB7CiAJeC5GdW5jID0gYnl0ZSh4Yy5fZnVuYykKIAl4LkRldiA9IGJ5 dGUoeGMuZGV2KQpAQCAtOTM0LDYgKzE0OTEsMjIgQEAgZnVuYyAoeCAqRGV2aWNlUGNpKSBmcm9t Qyh4YyAqQy5saWJ4bF9kZXZpY2VfcGNpKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5j ICh4ICpEZXZpY2VQY2kpIHRvQygpICh4YyBDLmxpYnhsX2RldmljZV9wY2ksIGVyciBlcnJvcikg eworCUMubGlieGxfZGV2aWNlX3BjaV9pbml0KCZ4YykKKwl4Yy5fZnVuYyA9IEMudWludDhfdCh4 LkZ1bmMpCisJeGMuZGV2ID0gQy51aW50OF90KHguRGV2KQorCXhjLmJ1cyA9IEMudWludDhfdCh4 LkJ1cykKKwl4Yy5kb21haW4gPSBDLmludCh4LkRvbWFpbikKKwl4Yy52ZGV2Zm4gPSBDLnVpbnQz Ml90KHguVmRldmZuKQorCXhjLnZmdW5jX21hc2sgPSBDLnVpbnQzMl90KHguVmZ1bmNNYXNrKQor CXhjLm1zaXRyYW5zbGF0ZSA9IEMuYm9vbCh4Lk1zaXRyYW5zbGF0ZSkKKwl4Yy5wb3dlcl9tZ210 ID0gQy5ib29sKHguUG93ZXJNZ210KQorCXhjLnBlcm1pc3NpdmUgPSBDLmJvb2woeC5QZXJtaXNz aXZlKQorCXhjLnNlaXplID0gQy5ib29sKHguU2VpemUpCisJeGMucmRtX3BvbGljeSA9IEMubGli eGxfcmRtX3Jlc2VydmVfcG9saWN5KHguUmRtUG9saWN5KQorCXJldHVybiB4YywgbmlsCit9CisK IGZ1bmMgKHggKkRldmljZVJkbSkgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX3JkbSkgZXJyb3Ig ewogCXguU3RhcnQgPSB1aW50NjQoeGMuc3RhcnQpCiAJeC5TaXplID0gdWludDY0KHhjLnNpemUp CkBAIC05NDEsNiArMTUxNCwxNCBAQCBmdW5jICh4ICpEZXZpY2VSZG0pIGZyb21DKHhjICpDLmxp YnhsX2RldmljZV9yZG0pIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKkRldmlj ZVJkbSkgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX3JkbSwgZXJyIGVycm9yKSB7CisJQy5saWJ4 bF9kZXZpY2VfcmRtX2luaXQoJnhjKQorCXhjLnN0YXJ0ID0gQy51aW50NjRfdCh4LlN0YXJ0KQor CXhjLnNpemUgPSBDLnVpbnQ2NF90KHguU2l6ZSkKKwl4Yy5wb2xpY3kgPSBDLmxpYnhsX3JkbV9y ZXNlcnZlX3BvbGljeSh4LlBvbGljeSkKKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpE ZXZpY2VVc2JjdHJsKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfdXNiY3RybCkgZXJyb3Igewog CXguVHlwZSA9IFVzYmN0cmxUeXBlKHhjLl90eXBlKQogCXguRGV2aWQgPSBEZXZpZCh4Yy5kZXZp ZCkKQEAgLTk1MSw2ICsxNTMyLDE3IEBAIGZ1bmMgKHggKkRldmljZVVzYmN0cmwpIGZyb21DKHhj ICpDLmxpYnhsX2RldmljZV91c2JjdHJsKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5j ICh4ICpEZXZpY2VVc2JjdHJsKSB0b0MoKSAoeGMgQy5saWJ4bF9kZXZpY2VfdXNiY3RybCwgZXJy IGVycm9yKSB7CisJQy5saWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KCZ4YykKKwl4Yy5fdHlwZSA9 IEMubGlieGxfdXNiY3RybF90eXBlKHguVHlwZSkKKwl4Yy5kZXZpZCA9IEMubGlieGxfZGV2aWQo eC5EZXZpZCkKKwl4Yy52ZXJzaW9uID0gQy5pbnQoeC5WZXJzaW9uKQorCXhjLnBvcnRzID0gQy5p bnQoeC5Qb3J0cykKKwl4Yy5iYWNrZW5kX2RvbWlkID0gQy5saWJ4bF9kb21pZCh4LkJhY2tlbmRE b21pZCkKKwl4Yy5iYWNrZW5kX2RvbW5hbWUgPSBDLkNTdHJpbmcoeC5CYWNrZW5kRG9tbmFtZSkK KwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpEZXZpY2VVc2JkZXYpIGZyb21DKHhjICpD LmxpYnhsX2RldmljZV91c2JkZXYpIGVycm9yIHsKIAl4LkN0cmwgPSBEZXZpZCh4Yy5jdHJsKQog CXguUG9ydCA9IGludCh4Yy5wb3J0KQpAQCAtOTc5LDExICsxNTcxLDI0IEBAIGZ1bmMgKHggKkRl dmljZVVzYmRldlR5cGVVbmlvbkhvc3RkZXYpIGZyb21DKHhjICpDLmxpYnhsX2RldmljZV91c2Jk ZXYpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKkRldmljZVVzYmRldikgdG9D KCkgKHhjIEMubGlieGxfZGV2aWNlX3VzYmRldiwgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9kZXZp Y2VfdXNiZGV2X2luaXQoJnhjKQorCXhjLmN0cmwgPSBDLmxpYnhsX2RldmlkKHguQ3RybCkKKwl4 Yy5wb3J0ID0gQy5pbnQoeC5Qb3J0KQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkRl dmljZUR0ZGV2KSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfZHRkZXYpIGVycm9yIHsKIAl4LlBh dGggPSBDLkdvU3RyaW5nKHhjLnBhdGgpCiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpEZXZp Y2VEdGRldikgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX2R0ZGV2LCBlcnIgZXJyb3IpIHsKKwlD LmxpYnhsX2RldmljZV9kdGRldl9pbml0KCZ4YykKKwl4Yy5wYXRoID0gQy5DU3RyaW5nKHguUGF0 aCkKKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpEZXZpY2VWdHBtKSBmcm9tQyh4YyAq Qy5saWJ4bF9kZXZpY2VfdnRwbSkgZXJyb3IgewogCXguQmFja2VuZERvbWlkID0gRG9taWQoeGMu YmFja2VuZF9kb21pZCkKIAl4LkJhY2tlbmREb21uYW1lID0gQy5Hb1N0cmluZyh4Yy5iYWNrZW5k X2RvbW5hbWUpCkBAIC05OTYsNiArMTYwMSwxOSBAQCBmdW5jICh4ICpEZXZpY2VWdHBtKSBmcm9t Qyh4YyAqQy5saWJ4bF9kZXZpY2VfdnRwbSkgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVu YyAoeCAqRGV2aWNlVnRwbSkgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX3Z0cG0sIGVyciBlcnJv cikgeworCUMubGlieGxfZGV2aWNlX3Z0cG1faW5pdCgmeGMpCisJeGMuYmFja2VuZF9kb21pZCA9 IEMubGlieGxfZG9taWQoeC5CYWNrZW5kRG9taWQpCisJeGMuYmFja2VuZF9kb21uYW1lID0gQy5D U3RyaW5nKHguQmFja2VuZERvbW5hbWUpCisJeGMuZGV2aWQgPSBDLmxpYnhsX2RldmlkKHguRGV2 aWQpCisJeGMudXVpZCwgZXJyID0geC5VdWlkLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMu bGlieGxfZGV2aWNlX3Z0cG1fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXJl dHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkRldmljZVA5KSBmcm9tQyh4YyAqQy5saWJ4bF9k ZXZpY2VfcDkpIGVycm9yIHsKIAl4LkJhY2tlbmREb21pZCA9IERvbWlkKHhjLmJhY2tlbmRfZG9t aWQpCiAJeC5CYWNrZW5kRG9tbmFtZSA9IEMuR29TdHJpbmcoeGMuYmFja2VuZF9kb21uYW1lKQpA QCAtMTAwNiw2ICsxNjI0LDE3IEBAIGZ1bmMgKHggKkRldmljZVA5KSBmcm9tQyh4YyAqQy5saWJ4 bF9kZXZpY2VfcDkpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKkRldmljZVA5 KSB0b0MoKSAoeGMgQy5saWJ4bF9kZXZpY2VfcDksIGVyciBlcnJvcikgeworCUMubGlieGxfZGV2 aWNlX3A5X2luaXQoJnhjKQorCXhjLmJhY2tlbmRfZG9taWQgPSBDLmxpYnhsX2RvbWlkKHguQmFj a2VuZERvbWlkKQorCXhjLmJhY2tlbmRfZG9tbmFtZSA9IEMuQ1N0cmluZyh4LkJhY2tlbmREb21u YW1lKQorCXhjLnRhZyA9IEMuQ1N0cmluZyh4LlRhZykKKwl4Yy5wYXRoID0gQy5DU3RyaW5nKHgu UGF0aCkKKwl4Yy5zZWN1cml0eV9tb2RlbCA9IEMuQ1N0cmluZyh4LlNlY3VyaXR5TW9kZWwpCisJ eGMuZGV2aWQgPSBDLmxpYnhsX2RldmlkKHguRGV2aWQpCisJcmV0dXJuIHhjLCBuaWwKK30KKwog ZnVuYyAoeCAqRGV2aWNlUHZjYWxsc2lmKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfcHZjYWxs c2lmKSBlcnJvciB7CiAJeC5CYWNrZW5kRG9taWQgPSBEb21pZCh4Yy5iYWNrZW5kX2RvbWlkKQog CXguQmFja2VuZERvbW5hbWUgPSBDLkdvU3RyaW5nKHhjLmJhY2tlbmRfZG9tbmFtZSkKQEAgLTEw MTMsNiArMTY0MiwxNCBAQCBmdW5jICh4ICpEZXZpY2VQdmNhbGxzaWYpIGZyb21DKHhjICpDLmxp YnhsX2RldmljZV9wdmNhbGxzaWYpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHgg KkRldmljZVB2Y2FsbHNpZikgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX3B2Y2FsbHNpZiwgZXJy IGVycm9yKSB7CisJQy5saWJ4bF9kZXZpY2VfcHZjYWxsc2lmX2luaXQoJnhjKQorCXhjLmJhY2tl bmRfZG9taWQgPSBDLmxpYnhsX2RvbWlkKHguQmFja2VuZERvbWlkKQorCXhjLmJhY2tlbmRfZG9t bmFtZSA9IEMuQ1N0cmluZyh4LkJhY2tlbmREb21uYW1lKQorCXhjLmRldmlkID0gQy5saWJ4bF9k ZXZpZCh4LkRldmlkKQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkRldmljZUNoYW5u ZWwpIGZyb21DKHhjICpDLmxpYnhsX2RldmljZV9jaGFubmVsKSBlcnJvciB7CiAJeC5CYWNrZW5k RG9taWQgPSBEb21pZCh4Yy5iYWNrZW5kX2RvbWlkKQogCXguQmFja2VuZERvbW5hbWUgPSBDLkdv U3RyaW5nKHhjLmJhY2tlbmRfZG9tbmFtZSkKQEAgLTEwNDIsNiArMTY3OSwxNSBAQCBmdW5jICh4 ICpEZXZpY2VDaGFubmVsQ29ubmVjdGlvblVuaW9uU29ja2V0KSBmcm9tQyh4YyAqQy5saWJ4bF9k ZXZpY2VfY2hhbm5lbCkgZQogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqRGV2aWNlQ2hhbm5l bCkgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX2NoYW5uZWwsIGVyciBlcnJvcikgeworCUMubGli eGxfZGV2aWNlX2NoYW5uZWxfaW5pdCgmeGMpCisJeGMuYmFja2VuZF9kb21pZCA9IEMubGlieGxf ZG9taWQoeC5CYWNrZW5kRG9taWQpCisJeGMuYmFja2VuZF9kb21uYW1lID0gQy5DU3RyaW5nKHgu QmFja2VuZERvbW5hbWUpCisJeGMuZGV2aWQgPSBDLmxpYnhsX2RldmlkKHguRGV2aWQpCisJeGMu bmFtZSA9IEMuQ1N0cmluZyh4Lk5hbWUpCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAq Q29ubmVjdG9yUGFyYW0pIGZyb21DKHhjICpDLmxpYnhsX2Nvbm5lY3Rvcl9wYXJhbSkgZXJyb3Ig ewogCXguVW5pcXVlSWQgPSBDLkdvU3RyaW5nKHhjLnVuaXF1ZV9pZCkKIAl4LldpZHRoID0gdWlu dDMyKHhjLndpZHRoKQpAQCAtMTA0OSw2ICsxNjk1LDE0IEBAIGZ1bmMgKHggKkNvbm5lY3RvclBh cmFtKSBmcm9tQyh4YyAqQy5saWJ4bF9jb25uZWN0b3JfcGFyYW0pIGVycm9yIHsKIAlyZXR1cm4g bmlsCiB9CiAKK2Z1bmMgKHggKkNvbm5lY3RvclBhcmFtKSB0b0MoKSAoeGMgQy5saWJ4bF9jb25u ZWN0b3JfcGFyYW0sIGVyciBlcnJvcikgeworCUMubGlieGxfY29ubmVjdG9yX3BhcmFtX2luaXQo JnhjKQorCXhjLnVuaXF1ZV9pZCA9IEMuQ1N0cmluZyh4LlVuaXF1ZUlkKQorCXhjLndpZHRoID0g Qy51aW50MzJfdCh4LldpZHRoKQorCXhjLmhlaWdodCA9IEMudWludDMyX3QoeC5IZWlnaHQpCisJ cmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqRGV2aWNlVmRpc3BsKSBmcm9tQyh4YyAqQy5s aWJ4bF9kZXZpY2VfdmRpc3BsKSBlcnJvciB7CiAJeC5CYWNrZW5kRG9taWQgPSBEb21pZCh4Yy5i YWNrZW5kX2RvbWlkKQogCXguQmFja2VuZERvbW5hbWUgPSBDLkdvU3RyaW5nKHhjLmJhY2tlbmRf ZG9tbmFtZSkKQEAgLTEwNjcsNiArMTcyMSwxNSBAQCBmdW5jICh4ICpEZXZpY2VWZGlzcGwpIGZy b21DKHhjICpDLmxpYnhsX2RldmljZV92ZGlzcGwpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAK K2Z1bmMgKHggKkRldmljZVZkaXNwbCkgdG9DKCkgKHhjIEMubGlieGxfZGV2aWNlX3ZkaXNwbCwg ZXJyIGVycm9yKSB7CisJQy5saWJ4bF9kZXZpY2VfdmRpc3BsX2luaXQoJnhjKQorCXhjLmJhY2tl bmRfZG9taWQgPSBDLmxpYnhsX2RvbWlkKHguQmFja2VuZERvbWlkKQorCXhjLmJhY2tlbmRfZG9t bmFtZSA9IEMuQ1N0cmluZyh4LkJhY2tlbmREb21uYW1lKQorCXhjLmRldmlkID0gQy5saWJ4bF9k ZXZpZCh4LkRldmlkKQorCXhjLmJlX2FsbG9jID0gQy5ib29sKHguQmVBbGxvYykKKwlyZXR1cm4g eGMsIG5pbAorfQorCiBmdW5jICh4ICpWc25kUGFyYW1zKSBmcm9tQyh4YyAqQy5saWJ4bF92c25k X3BhcmFtcykgZXJyb3IgewogCW51bVNhbXBsZVJhdGVzIDo9IGludCh4Yy5udW1fc2FtcGxlX3Jh dGVzKQogCWNTYW1wbGVSYXRlcyA6PSAoKlsxIDw8IDI4XUMudWludDMyX3QpKHVuc2FmZS5Qb2lu dGVyKHhjLnNhbXBsZV9yYXRlcykpWzpudW1TYW1wbGVSYXRlczpudW1TYW1wbGVSYXRlc10KQEAg LTEwODYsNiArMTc0OSwxNCBAQCBmdW5jICh4ICpWc25kUGFyYW1zKSBmcm9tQyh4YyAqQy5saWJ4 bF92c25kX3BhcmFtcykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqVnNuZFBh cmFtcykgdG9DKCkgKHhjIEMubGlieGxfdnNuZF9wYXJhbXMsIGVyciBlcnJvcikgeworCUMubGli eGxfdnNuZF9wYXJhbXNfaW5pdCgmeGMpCisJeGMuY2hhbm5lbHNfbWluID0gQy51aW50MzJfdCh4 LkNoYW5uZWxzTWluKQorCXhjLmNoYW5uZWxzX21heCA9IEMudWludDMyX3QoeC5DaGFubmVsc01h eCkKKwl4Yy5idWZmZXJfc2l6ZSA9IEMudWludDMyX3QoeC5CdWZmZXJTaXplKQorCXJldHVybiB4 YywgbmlsCit9CisKIGZ1bmMgKHggKlZzbmRTdHJlYW0pIGZyb21DKHhjICpDLmxpYnhsX3ZzbmRf c3RyZWFtKSBlcnJvciB7CiAJeC5VbmlxdWVJZCA9IEMuR29TdHJpbmcoeGMudW5pcXVlX2lkKQog CXguVHlwZSA9IFZzbmRTdHJlYW1UeXBlKHhjLl90eXBlKQpAQCAtMTA5Nyw2ICsxNzY4LDE4IEBA IGZ1bmMgKHggKlZzbmRTdHJlYW0pIGZyb21DKHhjICpDLmxpYnhsX3ZzbmRfc3RyZWFtKSBlcnJv ciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpWc25kU3RyZWFtKSB0b0MoKSAoeGMgQy5s aWJ4bF92c25kX3N0cmVhbSwgZXJyIGVycm9yKSB7CisJQy5saWJ4bF92c25kX3N0cmVhbV9pbml0 KCZ4YykKKwl4Yy51bmlxdWVfaWQgPSBDLkNTdHJpbmcoeC5VbmlxdWVJZCkKKwl4Yy5fdHlwZSA9 IEMubGlieGxfdnNuZF9zdHJlYW1fdHlwZSh4LlR5cGUpCisJeGMucGFyYW1zLCBlcnIgPSB4LlBh cmFtcy50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX3ZzbmRfc3RyZWFtX2Rpc3Bv c2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwlyZXR1cm4geGMsIG5pbAorfQorCiBmdW5j ICh4ICpWc25kUGNtKSBmcm9tQyh4YyAqQy5saWJ4bF92c25kX3BjbSkgZXJyb3IgewogCXguTmFt ZSA9IEMuR29TdHJpbmcoeGMubmFtZSkKIAl2YXIgdnNuZFBhcmFtc1BhcmFtcyBWc25kUGFyYW1z CkBAIC0xMTE3LDYgKzE4MDAsMTcgQEAgZnVuYyAoeCAqVnNuZFBjbSkgZnJvbUMoeGMgKkMubGli eGxfdnNuZF9wY20pIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKlZzbmRQY20p IHRvQygpICh4YyBDLmxpYnhsX3ZzbmRfcGNtLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3ZzbmRf cGNtX2luaXQoJnhjKQorCXhjLm5hbWUgPSBDLkNTdHJpbmcoeC5OYW1lKQorCXhjLnBhcmFtcywg ZXJyID0geC5QYXJhbXMudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF92c25kX3Bj bV9kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJcmV0dXJuIHhjLCBuaWwKK30K KwogZnVuYyAoeCAqRGV2aWNlVnNuZCkgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNlX3ZzbmQpIGVy cm9yIHsKIAl4LkJhY2tlbmREb21pZCA9IERvbWlkKHhjLmJhY2tlbmRfZG9taWQpCiAJeC5CYWNr ZW5kRG9tbmFtZSA9IEMuR29TdHJpbmcoeGMuYmFja2VuZF9kb21uYW1lKQpAQCAtMTE0MSw2ICsx ODM1LDIxIEBAIGZ1bmMgKHggKkRldmljZVZzbmQpIGZyb21DKHhjICpDLmxpYnhsX2RldmljZV92 c25kKSBlcnJvciB7CiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpEZXZpY2VWc25kKSB0b0Mo KSAoeGMgQy5saWJ4bF9kZXZpY2VfdnNuZCwgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9kZXZpY2Vf dnNuZF9pbml0KCZ4YykKKwl4Yy5iYWNrZW5kX2RvbWlkID0gQy5saWJ4bF9kb21pZCh4LkJhY2tl bmREb21pZCkKKwl4Yy5iYWNrZW5kX2RvbW5hbWUgPSBDLkNTdHJpbmcoeC5CYWNrZW5kRG9tbmFt ZSkKKwl4Yy5kZXZpZCA9IEMubGlieGxfZGV2aWQoeC5EZXZpZCkKKwl4Yy5zaG9ydF9uYW1lID0g Qy5DU3RyaW5nKHguU2hvcnROYW1lKQorCXhjLmxvbmdfbmFtZSA9IEMuQ1N0cmluZyh4LkxvbmdO YW1lKQorCXhjLnBhcmFtcywgZXJyID0geC5QYXJhbXMudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsK KwkJQy5saWJ4bF9kZXZpY2VfdnNuZF9kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9 CisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4YyAq Qy5saWJ4bF9kb21haW5fY29uZmlnKSBlcnJvciB7CiAJdmFyIGRvbWFpbkNyZWF0ZUluZm9DSW5m byBEb21haW5DcmVhdGVJbmZvCiAJaWYgZXJyIDo9IGRvbWFpbkNyZWF0ZUluZm9DSW5mby5mcm9t QygmeGMuY19pbmZvKTsgZXJyICE9IG5pbCB7CkBAIC0xMzEwLDYgKzIwMTksMjYgQEAgZnVuYyAo eCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY29uZmlnKSBlcnJvciB7 CiAJcmV0dXJuIG5pbAogfQogCitmdW5jICh4ICpEb21haW5Db25maWcpIHRvQygpICh4YyBDLmxp YnhsX2RvbWFpbl9jb25maWcsIGVyciBlcnJvcikgeworCUMubGlieGxfZG9tYWluX2NvbmZpZ19p bml0KCZ4YykKKwl4Yy5jX2luZm8sIGVyciA9IHguQ0luZm8udG9DKCkKKwlpZiBlcnIgIT0gbmls IHsKKwkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQlyZXR1cm4geGMsIGVy cgorCX0KKwl4Yy5iX2luZm8sIGVyciA9IHguQkluZm8udG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsK KwkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgor CX0KKwl4Yy5vbl9wb3dlcm9mZiA9IEMubGlieGxfYWN0aW9uX29uX3NodXRkb3duKHguT25Qb3dl cm9mZikKKwl4Yy5vbl9yZWJvb3QgPSBDLmxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93bih4Lk9uUmVi b290KQorCXhjLm9uX3dhdGNoZG9nID0gQy5saWJ4bF9hY3Rpb25fb25fc2h1dGRvd24oeC5Pbldh dGNoZG9nKQorCXhjLm9uX2NyYXNoID0gQy5saWJ4bF9hY3Rpb25fb25fc2h1dGRvd24oeC5PbkNy YXNoKQorCXhjLm9uX3NvZnRfcmVzZXQgPSBDLmxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93bih4Lk9u U29mdFJlc2V0KQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkRpc2tpbmZvKSBmcm9t Qyh4YyAqQy5saWJ4bF9kaXNraW5mbykgZXJyb3IgewogCXguQmFja2VuZCA9IEMuR29TdHJpbmco eGMuYmFja2VuZCkKIAl4LkJhY2tlbmRJZCA9IHVpbnQzMih4Yy5iYWNrZW5kX2lkKQpAQCAtMTMy Miw2ICsyMDUxLDE5IEBAIGZ1bmMgKHggKkRpc2tpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9kaXNr aW5mbykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqRGlza2luZm8pIHRvQygp ICh4YyBDLmxpYnhsX2Rpc2tpbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX2Rpc2tpbmZvX2lu aXQoJnhjKQorCXhjLmJhY2tlbmQgPSBDLkNTdHJpbmcoeC5CYWNrZW5kKQorCXhjLmJhY2tlbmRf aWQgPSBDLnVpbnQzMl90KHguQmFja2VuZElkKQorCXhjLmZyb250ZW5kID0gQy5DU3RyaW5nKHgu RnJvbnRlbmQpCisJeGMuZnJvbnRlbmRfaWQgPSBDLnVpbnQzMl90KHguRnJvbnRlbmRJZCkKKwl4 Yy5kZXZpZCA9IEMubGlieGxfZGV2aWQoeC5EZXZpZCkKKwl4Yy5zdGF0ZSA9IEMuaW50KHguU3Rh dGUpCisJeGMuZXZ0Y2ggPSBDLmludCh4LkV2dGNoKQorCXhjLnJyZWYgPSBDLmludCh4LlJyZWYp CisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqTmljaW5mbykgZnJvbUMoeGMgKkMubGli eGxfbmljaW5mbykgZXJyb3IgewogCXguQmFja2VuZCA9IEMuR29TdHJpbmcoeGMuYmFja2VuZCkK IAl4LkJhY2tlbmRJZCA9IHVpbnQzMih4Yy5iYWNrZW5kX2lkKQpAQCAtMTMzNSw2ICsyMDc3LDIw IEBAIGZ1bmMgKHggKk5pY2luZm8pIGZyb21DKHhjICpDLmxpYnhsX25pY2luZm8pIGVycm9yIHsK IAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKk5pY2luZm8pIHRvQygpICh4YyBDLmxpYnhsX25p Y2luZm8sIGVyciBlcnJvcikgeworCUMubGlieGxfbmljaW5mb19pbml0KCZ4YykKKwl4Yy5iYWNr ZW5kID0gQy5DU3RyaW5nKHguQmFja2VuZCkKKwl4Yy5iYWNrZW5kX2lkID0gQy51aW50MzJfdCh4 LkJhY2tlbmRJZCkKKwl4Yy5mcm9udGVuZCA9IEMuQ1N0cmluZyh4LkZyb250ZW5kKQorCXhjLmZy b250ZW5kX2lkID0gQy51aW50MzJfdCh4LkZyb250ZW5kSWQpCisJeGMuZGV2aWQgPSBDLmxpYnhs X2RldmlkKHguRGV2aWQpCisJeGMuc3RhdGUgPSBDLmludCh4LlN0YXRlKQorCXhjLmV2dGNoID0g Qy5pbnQoeC5FdnRjaCkKKwl4Yy5ycmVmX3R4ID0gQy5pbnQoeC5ScmVmVHgpCisJeGMucnJlZl9y eCA9IEMuaW50KHguUnJlZlJ4KQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlZ0cG1p bmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92dHBtaW5mbykgZXJyb3IgewogCXguQmFja2VuZCA9IEMu R29TdHJpbmcoeGMuYmFja2VuZCkKIAl4LkJhY2tlbmRJZCA9IHVpbnQzMih4Yy5iYWNrZW5kX2lk KQpAQCAtMTM1Miw2ICsyMTA4LDI0IEBAIGZ1bmMgKHggKlZ0cG1pbmZvKSBmcm9tQyh4YyAqQy5s aWJ4bF92dHBtaW5mbykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqVnRwbWlu Zm8pIHRvQygpICh4YyBDLmxpYnhsX3Z0cG1pbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3Z0 cG1pbmZvX2luaXQoJnhjKQorCXhjLmJhY2tlbmQgPSBDLkNTdHJpbmcoeC5CYWNrZW5kKQorCXhj LmJhY2tlbmRfaWQgPSBDLnVpbnQzMl90KHguQmFja2VuZElkKQorCXhjLmZyb250ZW5kID0gQy5D U3RyaW5nKHguRnJvbnRlbmQpCisJeGMuZnJvbnRlbmRfaWQgPSBDLnVpbnQzMl90KHguRnJvbnRl bmRJZCkKKwl4Yy5kZXZpZCA9IEMubGlieGxfZGV2aWQoeC5EZXZpZCkKKwl4Yy5zdGF0ZSA9IEMu aW50KHguU3RhdGUpCisJeGMuZXZ0Y2ggPSBDLmludCh4LkV2dGNoKQorCXhjLnJyZWYgPSBDLmlu dCh4LlJyZWYpCisJeGMudXVpZCwgZXJyID0geC5VdWlkLnRvQygpCisJaWYgZXJyICE9IG5pbCB7 CisJCUMubGlieGxfdnRwbWluZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQor CXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlVzYmN0cmxpbmZvKSBmcm9tQyh4YyAqQy5s aWJ4bF91c2JjdHJsaW5mbykgZXJyb3IgewogCXguVHlwZSA9IFVzYmN0cmxUeXBlKHhjLl90eXBl KQogCXguRGV2aWQgPSBEZXZpZCh4Yy5kZXZpZCkKQEAgLTEzNjgsNiArMjE0MiwyMyBAQCBmdW5j ICh4ICpVc2JjdHJsaW5mbykgZnJvbUMoeGMgKkMubGlieGxfdXNiY3RybGluZm8pIGVycm9yIHsK IAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKlVzYmN0cmxpbmZvKSB0b0MoKSAoeGMgQy5saWJ4 bF91c2JjdHJsaW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF91c2JjdHJsaW5mb19pbml0KCZ4 YykKKwl4Yy5fdHlwZSA9IEMubGlieGxfdXNiY3RybF90eXBlKHguVHlwZSkKKwl4Yy5kZXZpZCA9 IEMubGlieGxfZGV2aWQoeC5EZXZpZCkKKwl4Yy52ZXJzaW9uID0gQy5pbnQoeC5WZXJzaW9uKQor CXhjLnBvcnRzID0gQy5pbnQoeC5Qb3J0cykKKwl4Yy5iYWNrZW5kID0gQy5DU3RyaW5nKHguQmFj a2VuZCkKKwl4Yy5iYWNrZW5kX2lkID0gQy51aW50MzJfdCh4LkJhY2tlbmRJZCkKKwl4Yy5mcm9u dGVuZCA9IEMuQ1N0cmluZyh4LkZyb250ZW5kKQorCXhjLmZyb250ZW5kX2lkID0gQy51aW50MzJf dCh4LkZyb250ZW5kSWQpCisJeGMuc3RhdGUgPSBDLmludCh4LlN0YXRlKQorCXhjLmV2dGNoID0g Qy5pbnQoeC5FdnRjaCkKKwl4Yy5yZWZfdXJiID0gQy5pbnQoeC5SZWZVcmIpCisJeGMucmVmX2Nv bm4gPSBDLmludCh4LlJlZkNvbm4pCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqVmNw dWluZm8pIGZyb21DKHhjICpDLmxpYnhsX3ZjcHVpbmZvKSBlcnJvciB7CiAJeC5WY3B1aWQgPSB1 aW50MzIoeGMudmNwdWlkKQogCXguQ3B1ID0gdWludDMyKHhjLmNwdSkKQEAgLTEzODgsNiArMjE3 OSwyNyBAQCBmdW5jICh4ICpWY3B1aW5mbykgZnJvbUMoeGMgKkMubGlieGxfdmNwdWluZm8pIGVy cm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKlZjcHVpbmZvKSB0b0MoKSAoeGMgQy5s aWJ4bF92Y3B1aW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF92Y3B1aW5mb19pbml0KCZ4YykK Kwl4Yy52Y3B1aWQgPSBDLnVpbnQzMl90KHguVmNwdWlkKQorCXhjLmNwdSA9IEMudWludDMyX3Qo eC5DcHUpCisJeGMub25saW5lID0gQy5ib29sKHguT25saW5lKQorCXhjLmJsb2NrZWQgPSBDLmJv b2woeC5CbG9ja2VkKQorCXhjLnJ1bm5pbmcgPSBDLmJvb2woeC5SdW5uaW5nKQorCXhjLnZjcHVf dGltZSA9IEMudWludDY0X3QoeC5WY3B1VGltZSkKKwl4Yy5jcHVtYXAsIGVyciA9IHguQ3B1bWFw LnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfdmNwdWluZm9fZGlzcG9zZSgmeGMp CisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmNwdW1hcF9zb2Z0LCBlcnIgPSB4LkNwdW1hcFNv ZnQudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF92Y3B1aW5mb19kaXNwb3NlKCZ4 YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAq UGh5c2luZm8pIGZyb21DKHhjICpDLmxpYnhsX3BoeXNpbmZvKSBlcnJvciB7CiAJeC5UaHJlYWRz UGVyQ29yZSA9IHVpbnQzMih4Yy50aHJlYWRzX3Blcl9jb3JlKQogCXguQ29yZXNQZXJTb2NrZXQg PSB1aW50MzIoeGMuY29yZXNfcGVyX3NvY2tldCkKQEAgLTE0MTYsNiArMjIyOCwzNSBAQCBmdW5j ICh4ICpQaHlzaW5mbykgZnJvbUMoeGMgKkMubGlieGxfcGh5c2luZm8pIGVycm9yIHsKIAlyZXR1 cm4gbmlsCiB9CiAKK2Z1bmMgKHggKlBoeXNpbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9waHlzaW5m bywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9waHlzaW5mb19pbml0KCZ4YykKKwl4Yy50aHJlYWRz X3Blcl9jb3JlID0gQy51aW50MzJfdCh4LlRocmVhZHNQZXJDb3JlKQorCXhjLmNvcmVzX3Blcl9z b2NrZXQgPSBDLnVpbnQzMl90KHguQ29yZXNQZXJTb2NrZXQpCisJeGMubWF4X2NwdV9pZCA9IEMu dWludDMyX3QoeC5NYXhDcHVJZCkKKwl4Yy5ucl9jcHVzID0gQy51aW50MzJfdCh4Lk5yQ3B1cykK Kwl4Yy5jcHVfa2h6ID0gQy51aW50MzJfdCh4LkNwdUtoeikKKwl4Yy50b3RhbF9wYWdlcyA9IEMu dWludDY0X3QoeC5Ub3RhbFBhZ2VzKQorCXhjLmZyZWVfcGFnZXMgPSBDLnVpbnQ2NF90KHguRnJl ZVBhZ2VzKQorCXhjLnNjcnViX3BhZ2VzID0gQy51aW50NjRfdCh4LlNjcnViUGFnZXMpCisJeGMu b3V0c3RhbmRpbmdfcGFnZXMgPSBDLnVpbnQ2NF90KHguT3V0c3RhbmRpbmdQYWdlcykKKwl4Yy5z aGFyaW5nX2ZyZWVkX3BhZ2VzID0gQy51aW50NjRfdCh4LlNoYXJpbmdGcmVlZFBhZ2VzKQorCXhj LnNoYXJpbmdfdXNlZF9mcmFtZXMgPSBDLnVpbnQ2NF90KHguU2hhcmluZ1VzZWRGcmFtZXMpCisJ eGMubWF4X3Bvc3NpYmxlX21mbiA9IEMudWludDY0X3QoeC5NYXhQb3NzaWJsZU1mbikKKwl4Yy5u cl9ub2RlcyA9IEMudWludDMyX3QoeC5Ock5vZGVzKQorCXhjLmh3X2NhcCwgZXJyID0geC5Id0Nh cC50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX3BoeXNpbmZvX2Rpc3Bvc2UoJnhj KQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5jYXBfaHZtID0gQy5ib29sKHguQ2FwSHZtKQor CXhjLmNhcF9wdiA9IEMuYm9vbCh4LkNhcFB2KQorCXhjLmNhcF9odm1fZGlyZWN0aW8gPSBDLmJv b2woeC5DYXBIdm1EaXJlY3RpbykKKwl4Yy5jYXBfaGFwID0gQy5ib29sKHguQ2FwSGFwKQorCXhj LmNhcF9zaGFkb3cgPSBDLmJvb2woeC5DYXBTaGFkb3cpCisJeGMuY2FwX2lvbW11X2hhcF9wdF9z aGFyZSA9IEMuYm9vbCh4LkNhcElvbW11SGFwUHRTaGFyZSkKKwlyZXR1cm4geGMsIG5pbAorfQor CiBmdW5jICh4ICpDb25uZWN0b3JpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9jb25uZWN0b3JpbmZv KSBlcnJvciB7CiAJeC5VbmlxdWVJZCA9IEMuR29TdHJpbmcoeGMudW5pcXVlX2lkKQogCXguV2lk dGggPSB1aW50MzIoeGMud2lkdGgpCkBAIC0xNDI3LDYgKzIyNjgsMTggQEAgZnVuYyAoeCAqQ29u bmVjdG9yaW5mbykgZnJvbUMoeGMgKkMubGlieGxfY29ubmVjdG9yaW5mbykgZXJyb3IgewogCXJl dHVybiBuaWwKIH0KIAorZnVuYyAoeCAqQ29ubmVjdG9yaW5mbykgdG9DKCkgKHhjIEMubGlieGxf Y29ubmVjdG9yaW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9jb25uZWN0b3JpbmZvX2luaXQo JnhjKQorCXhjLnVuaXF1ZV9pZCA9IEMuQ1N0cmluZyh4LlVuaXF1ZUlkKQorCXhjLndpZHRoID0g Qy51aW50MzJfdCh4LldpZHRoKQorCXhjLmhlaWdodCA9IEMudWludDMyX3QoeC5IZWlnaHQpCisJ eGMucmVxX2V2dGNoID0gQy5pbnQoeC5SZXFFdnRjaCkKKwl4Yy5yZXFfcnJlZiA9IEMuaW50KHgu UmVxUnJlZikKKwl4Yy5ldnRfZXZ0Y2ggPSBDLmludCh4LkV2dEV2dGNoKQorCXhjLmV2dF9ycmVm ID0gQy5pbnQoeC5FdnRScmVmKQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlZkaXNw bGluZm8pIGZyb21DKHhjICpDLmxpYnhsX3ZkaXNwbGluZm8pIGVycm9yIHsKIAl4LkJhY2tlbmQg PSBDLkdvU3RyaW5nKHhjLmJhY2tlbmQpCiAJeC5CYWNrZW5kSWQgPSB1aW50MzIoeGMuYmFja2Vu ZF9pZCkKQEAgLTE0NDgsMTIgKzIzMDEsMzEgQEAgZnVuYyAoeCAqVmRpc3BsaW5mbykgZnJvbUMo eGMgKkMubGlieGxfdmRpc3BsaW5mbykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAo eCAqVmRpc3BsaW5mbykgdG9DKCkgKHhjIEMubGlieGxfdmRpc3BsaW5mbywgZXJyIGVycm9yKSB7 CisJQy5saWJ4bF92ZGlzcGxpbmZvX2luaXQoJnhjKQorCXhjLmJhY2tlbmQgPSBDLkNTdHJpbmco eC5CYWNrZW5kKQorCXhjLmJhY2tlbmRfaWQgPSBDLnVpbnQzMl90KHguQmFja2VuZElkKQorCXhj LmZyb250ZW5kID0gQy5DU3RyaW5nKHguRnJvbnRlbmQpCisJeGMuZnJvbnRlbmRfaWQgPSBDLnVp bnQzMl90KHguRnJvbnRlbmRJZCkKKwl4Yy5kZXZpZCA9IEMubGlieGxfZGV2aWQoeC5EZXZpZCkK Kwl4Yy5zdGF0ZSA9IEMuaW50KHguU3RhdGUpCisJeGMuYmVfYWxsb2MgPSBDLmJvb2woeC5CZUFs bG9jKQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlN0cmVhbWluZm8pIGZyb21DKHhj ICpDLmxpYnhsX3N0cmVhbWluZm8pIGVycm9yIHsKIAl4LlJlcUV2dGNoID0gaW50KHhjLnJlcV9l dnRjaCkKIAl4LlJlcVJyZWYgPSBpbnQoeGMucmVxX3JyZWYpCiAJcmV0dXJuIG5pbAogfQogCitm dW5jICh4ICpTdHJlYW1pbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9zdHJlYW1pbmZvLCBlcnIgZXJy b3IpIHsKKwlDLmxpYnhsX3N0cmVhbWluZm9faW5pdCgmeGMpCisJeGMucmVxX2V2dGNoID0gQy5p bnQoeC5SZXFFdnRjaCkKKwl4Yy5yZXFfcnJlZiA9IEMuaW50KHguUmVxUnJlZikKKwlyZXR1cm4g eGMsIG5pbAorfQorCiBmdW5jICh4ICpQY21pbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9wY21pbmZv KSBlcnJvciB7CiAJbnVtVnNuZFN0cmVhbXMgOj0gaW50KHhjLm51bV92c25kX3N0cmVhbXMpCiAJ Y1N0cmVhbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3N0cmVhbWluZm8pKHVuc2FmZS5Qb2ludGVy KHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0cmVhbXM6bnVtVnNuZFN0cmVhbXNdCkBAIC0xNDY4LDYg KzIzNDAsMTEgQEAgZnVuYyAoeCAqUGNtaW5mbykgZnJvbUMoeGMgKkMubGlieGxfcGNtaW5mbykg ZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqUGNtaW5mbykgdG9DKCkgKHhjIEMu bGlieGxfcGNtaW5mbywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9wY21pbmZvX2luaXQoJnhjKQor CXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKlZzbmRpbmZvKSBmcm9tQyh4YyAqQy5saWJ4 bF92c25kaW5mbykgZXJyb3IgewogCXguQmFja2VuZCA9IEMuR29TdHJpbmcoeGMuYmFja2VuZCkK IAl4LkJhY2tlbmRJZCA9IHVpbnQzMih4Yy5iYWNrZW5kX2lkKQpAQCAtMTQ4OCw2ICsyMzY1LDE3 IEBAIGZ1bmMgKHggKlZzbmRpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92c25kaW5mbykgZXJyb3Ig ewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqVnNuZGluZm8pIHRvQygpICh4YyBDLmxpYnhs X3ZzbmRpbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3ZzbmRpbmZvX2luaXQoJnhjKQorCXhj LmJhY2tlbmQgPSBDLkNTdHJpbmcoeC5CYWNrZW5kKQorCXhjLmJhY2tlbmRfaWQgPSBDLnVpbnQz Ml90KHguQmFja2VuZElkKQorCXhjLmZyb250ZW5kID0gQy5DU3RyaW5nKHguRnJvbnRlbmQpCisJ eGMuZnJvbnRlbmRfaWQgPSBDLnVpbnQzMl90KHguRnJvbnRlbmRJZCkKKwl4Yy5kZXZpZCA9IEMu bGlieGxfZGV2aWQoeC5EZXZpZCkKKwl4Yy5zdGF0ZSA9IEMuaW50KHguU3RhdGUpCisJcmV0dXJu IHhjLCBuaWwKK30KKwogZnVuYyAoeCAqVmtiaW5mbykgZnJvbUMoeGMgKkMubGlieGxfdmtiaW5m bykgZXJyb3IgewogCXguQmFja2VuZCA9IEMuR29TdHJpbmcoeGMuYmFja2VuZCkKIAl4LkJhY2tl bmRJZCA9IHVpbnQzMih4Yy5iYWNrZW5kX2lkKQpAQCAtMTUwMCw2ICsyMzg4LDE5IEBAIGZ1bmMg KHggKlZrYmluZm8pIGZyb21DKHhjICpDLmxpYnhsX3ZrYmluZm8pIGVycm9yIHsKIAlyZXR1cm4g bmlsCiB9CiAKK2Z1bmMgKHggKlZrYmluZm8pIHRvQygpICh4YyBDLmxpYnhsX3ZrYmluZm8sIGVy ciBlcnJvcikgeworCUMubGlieGxfdmtiaW5mb19pbml0KCZ4YykKKwl4Yy5iYWNrZW5kID0gQy5D U3RyaW5nKHguQmFja2VuZCkKKwl4Yy5iYWNrZW5kX2lkID0gQy51aW50MzJfdCh4LkJhY2tlbmRJ ZCkKKwl4Yy5mcm9udGVuZCA9IEMuQ1N0cmluZyh4LkZyb250ZW5kKQorCXhjLmZyb250ZW5kX2lk ID0gQy51aW50MzJfdCh4LkZyb250ZW5kSWQpCisJeGMuZGV2aWQgPSBDLmxpYnhsX2RldmlkKHgu RGV2aWQpCisJeGMuc3RhdGUgPSBDLmludCh4LlN0YXRlKQorCXhjLmV2dGNoID0gQy5pbnQoeC5F dnRjaCkKKwl4Yy5ycmVmID0gQy5pbnQoeC5ScmVmKQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1 bmMgKHggKk51bWFpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9udW1haW5mbykgZXJyb3IgewogCXgu U2l6ZSA9IHVpbnQ2NCh4Yy5zaXplKQogCXguRnJlZSA9IHVpbnQ2NCh4Yy5mcmVlKQpAQCAtMTUx Miw2ICsyNDEzLDEzIEBAIGZ1bmMgKHggKk51bWFpbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9udW1h aW5mbykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqTnVtYWluZm8pIHRvQygp ICh4YyBDLmxpYnhsX251bWFpbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX251bWFpbmZvX2lu aXQoJnhjKQorCXhjLnNpemUgPSBDLnVpbnQ2NF90KHguU2l6ZSkKKwl4Yy5mcmVlID0gQy51aW50 NjRfdCh4LkZyZWUpCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqQ3B1dG9wb2xvZ3kp IGZyb21DKHhjICpDLmxpYnhsX2NwdXRvcG9sb2d5KSBlcnJvciB7CiAJeC5Db3JlID0gdWludDMy KHhjLmNvcmUpCiAJeC5Tb2NrZXQgPSB1aW50MzIoeGMuc29ja2V0KQpAQCAtMTUxOSw2ICsyNDI3 LDE0IEBAIGZ1bmMgKHggKkNwdXRvcG9sb2d5KSBmcm9tQyh4YyAqQy5saWJ4bF9jcHV0b3BvbG9n eSkgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqQ3B1dG9wb2xvZ3kpIHRvQygp ICh4YyBDLmxpYnhsX2NwdXRvcG9sb2d5LCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX2NwdXRvcG9s b2d5X2luaXQoJnhjKQorCXhjLmNvcmUgPSBDLnVpbnQzMl90KHguQ29yZSkKKwl4Yy5zb2NrZXQg PSBDLnVpbnQzMl90KHguU29ja2V0KQorCXhjLm5vZGUgPSBDLnVpbnQzMl90KHguTm9kZSkKKwly ZXR1cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpQY2l0b3BvbG9neSkgZnJvbUMoeGMgKkMubGli eGxfcGNpdG9wb2xvZ3kpIGVycm9yIHsKIAl4LlNlZyA9IHVpbnQxNih4Yy5zZWcpCiAJeC5CdXMg PSBieXRlKHhjLmJ1cykKQEAgLTE1MjcsNiArMjQ0MywxNSBAQCBmdW5jICh4ICpQY2l0b3BvbG9n eSkgZnJvbUMoeGMgKkMubGlieGxfcGNpdG9wb2xvZ3kpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9 CiAKK2Z1bmMgKHggKlBjaXRvcG9sb2d5KSB0b0MoKSAoeGMgQy5saWJ4bF9wY2l0b3BvbG9neSwg ZXJyIGVycm9yKSB7CisJQy5saWJ4bF9wY2l0b3BvbG9neV9pbml0KCZ4YykKKwl4Yy5zZWcgPSBD LnVpbnQxNl90KHguU2VnKQorCXhjLmJ1cyA9IEMudWludDhfdCh4LkJ1cykKKwl4Yy5kZXZmbiA9 IEMudWludDhfdCh4LkRldmZuKQorCXhjLm5vZGUgPSBDLnVpbnQzMl90KHguTm9kZSkKKwlyZXR1 cm4geGMsIG5pbAorfQorCiBmdW5jICh4ICpTY2hlZENyZWRpdFBhcmFtcykgZnJvbUMoeGMgKkMu bGlieGxfc2NoZWRfY3JlZGl0X3BhcmFtcykgZXJyb3IgewogCXguVHNsaWNlTXMgPSBpbnQoeGMu dHNsaWNlX21zKQogCXguUmF0ZWxpbWl0VXMgPSBpbnQoeGMucmF0ZWxpbWl0X3VzKQpAQCAtMTUz NCwxMSArMjQ1OSwyNSBAQCBmdW5jICh4ICpTY2hlZENyZWRpdFBhcmFtcykgZnJvbUMoeGMgKkMu bGlieGxfc2NoZWRfY3JlZGl0X3BhcmFtcykgZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVu YyAoeCAqU2NoZWRDcmVkaXRQYXJhbXMpIHRvQygpICh4YyBDLmxpYnhsX3NjaGVkX2NyZWRpdF9w YXJhbXMsIGVyciBlcnJvcikgeworCUMubGlieGxfc2NoZWRfY3JlZGl0X3BhcmFtc19pbml0KCZ4 YykKKwl4Yy50c2xpY2VfbXMgPSBDLmludCh4LlRzbGljZU1zKQorCXhjLnJhdGVsaW1pdF91cyA9 IEMuaW50KHguUmF0ZWxpbWl0VXMpCisJeGMudmNwdV9taWdyX2RlbGF5X3VzID0gQy5pbnQoeC5W Y3B1TWlnckRlbGF5VXMpCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqU2NoZWRDcmVk aXQyUGFyYW1zKSBmcm9tQyh4YyAqQy5saWJ4bF9zY2hlZF9jcmVkaXQyX3BhcmFtcykgZXJyb3Ig ewogCXguUmF0ZWxpbWl0VXMgPSBpbnQoeGMucmF0ZWxpbWl0X3VzKQogCXJldHVybiBuaWwKIH0K IAorZnVuYyAoeCAqU2NoZWRDcmVkaXQyUGFyYW1zKSB0b0MoKSAoeGMgQy5saWJ4bF9zY2hlZF9j cmVkaXQyX3BhcmFtcywgZXJyIGVycm9yKSB7CisJQy5saWJ4bF9zY2hlZF9jcmVkaXQyX3BhcmFt c19pbml0KCZ4YykKKwl4Yy5yYXRlbGltaXRfdXMgPSBDLmludCh4LlJhdGVsaW1pdFVzKQorCXJl dHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkRvbWFpblJlbXVzSW5mbykgZnJvbUMoeGMgKkMu bGlieGxfZG9tYWluX3JlbXVzX2luZm8pIGVycm9yIHsKIAl4LkludGVydmFsID0gaW50KHhjLmlu dGVydmFsKQogCXZhciBkZWZib29sQWxsb3dVbnNhZmUgRGVmYm9vbApAQCAtMTU4MCw2ICsyNTE5 LDQ4IEBAIGZ1bmMgKHggKkRvbWFpblJlbXVzSW5mbykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWlu X3JlbXVzX2luZm8pIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMgKHggKkRvbWFpblJl bXVzSW5mbykgdG9DKCkgKHhjIEMubGlieGxfZG9tYWluX3JlbXVzX2luZm8sIGVyciBlcnJvcikg eworCUMubGlieGxfZG9tYWluX3JlbXVzX2luZm9faW5pdCgmeGMpCisJeGMuaW50ZXJ2YWwgPSBD LmludCh4LkludGVydmFsKQorCXhjLmFsbG93X3Vuc2FmZSwgZXJyID0geC5BbGxvd1Vuc2FmZS50 b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9yZW11c19pbmZvX2Rpc3Bv c2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5ibGFja2hvbGUsIGVyciA9IHguQmxh Y2tob2xlLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9tYWluX3JlbXVzX2lu Zm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmNvbXByZXNzaW9uLCBl cnIgPSB4LkNvbXByZXNzaW9uLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZG9t YWluX3JlbXVzX2luZm9fZGlzcG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLm5l dGJ1ZiwgZXJyID0geC5OZXRidWYudG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9k b21haW5fcmVtdXNfaW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMu bmV0YnVmc2NyaXB0ID0gQy5DU3RyaW5nKHguTmV0YnVmc2NyaXB0KQorCXhjLmRpc2tidWYsIGVy ciA9IHguRGlza2J1Zi50b0MoKQorCWlmIGVyciAhPSBuaWwgeworCQlDLmxpYnhsX2RvbWFpbl9y ZW11c19pbmZvX2Rpc3Bvc2UoJnhjKQorCQlyZXR1cm4geGMsIGVycgorCX0KKwl4Yy5jb2xvLCBl cnIgPSB4LkNvbG8udG9DKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJQy5saWJ4bF9kb21haW5fcmVt dXNfaW5mb19kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIKKwl9CisJeGMudXNlcnNwYWNl X2NvbG9fcHJveHksIGVyciA9IHguVXNlcnNwYWNlQ29sb1Byb3h5LnRvQygpCisJaWYgZXJyICE9 IG5pbCB7CisJCUMubGlieGxfZG9tYWluX3JlbXVzX2luZm9fZGlzcG9zZSgmeGMpCisJCXJldHVy biB4YywgZXJyCisJfQorCXJldHVybiB4YywgbmlsCit9CisKIGZ1bmMgKHggKkV2ZW50KSBmcm9t Qyh4YyAqQy5saWJ4bF9ldmVudCkgZXJyb3IgewogCXZhciBldkxpbmtMaW5rIEV2TGluawogCWlm IGVyciA6PSBldkxpbmtMaW5rLmZyb21DKCZ4Yy5saW5rKTsgZXJyICE9IG5pbCB7CkBAIC0xNjUy LDYgKzI2MzMsMjMgQEAgZnVuYyAoeCAqRXZlbnRUeXBlVW5pb25PcGVyYXRpb25Db21wbGV0ZSkg ZnJvbUMoeGMgKkMubGlieGxfZXZlbnQpIGVycm9yIHsKIAlyZXR1cm4gbmlsCiB9CiAKK2Z1bmMg KHggKkV2ZW50KSB0b0MoKSAoeGMgQy5saWJ4bF9ldmVudCwgZXJyIGVycm9yKSB7CisJQy5saWJ4 bF9ldmVudF9pbml0KCZ4YykKKwl4Yy5saW5rLCBlcnIgPSB4LkxpbmsudG9DKCkKKwlpZiBlcnIg IT0gbmlsIHsKKwkJQy5saWJ4bF9ldmVudF9kaXNwb3NlKCZ4YykKKwkJcmV0dXJuIHhjLCBlcnIK Kwl9CisJeGMuZG9taWQgPSBDLmxpYnhsX2RvbWlkKHguRG9taWQpCisJeGMuZG9tdXVpZCwgZXJy ID0geC5Eb211dWlkLnRvQygpCisJaWYgZXJyICE9IG5pbCB7CisJCUMubGlieGxfZXZlbnRfZGlz cG9zZSgmeGMpCisJCXJldHVybiB4YywgZXJyCisJfQorCXhjLmZvcl91c2VyID0gQy51aW50NjRf dCh4LkZvclVzZXIpCisJcmV0dXJuIHhjLCBuaWwKK30KKwogZnVuYyAoeCAqUHNyQ2F0SW5mbykg ZnJvbUMoeGMgKkMubGlieGxfcHNyX2NhdF9pbmZvKSBlcnJvciB7CiAJeC5JZCA9IHVpbnQzMih4 Yy5pZCkKIAl4LkNvc01heCA9IHVpbnQzMih4Yy5jb3NfbWF4KQpAQCAtMTY2MCw2ICsyNjU4LDE1 IEBAIGZ1bmMgKHggKlBzckNhdEluZm8pIGZyb21DKHhjICpDLmxpYnhsX3Bzcl9jYXRfaW5mbykg ZXJyb3IgewogCXJldHVybiBuaWwKIH0KIAorZnVuYyAoeCAqUHNyQ2F0SW5mbykgdG9DKCkgKHhj IEMubGlieGxfcHNyX2NhdF9pbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3Bzcl9jYXRfaW5m b19pbml0KCZ4YykKKwl4Yy5pZCA9IEMudWludDMyX3QoeC5JZCkKKwl4Yy5jb3NfbWF4ID0gQy51 aW50MzJfdCh4LkNvc01heCkKKwl4Yy5jYm1fbGVuID0gQy51aW50MzJfdCh4LkNibUxlbikKKwl4 Yy5jZHBfZW5hYmxlZCA9IEMuYm9vbCh4LkNkcEVuYWJsZWQpCisJcmV0dXJuIHhjLCBuaWwKK30K KwogZnVuYyAoeCAqUHNySHdJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9wc3JfaHdfaW5mbykgZXJy b3IgewogCXguSWQgPSB1aW50MzIoeGMuaWQpCiAJeC5UeXBlID0gUHNyRmVhdFR5cGUoeGMuX3R5 cGUpCkBAIC0xNzA1LDMgKzI3MTIsOSBAQCBmdW5jICh4ICpQc3JId0luZm9UeXBlVW5pb25NYmEp IGZyb21DKHhjICpDLmxpYnhsX3Bzcl9od19pbmZvKSBlcnJvciB7CiAJeC5MaW5lYXIgPSBib29s KHRtcC5saW5lYXIpCiAJcmV0dXJuIG5pbAogfQorCitmdW5jICh4ICpQc3JId0luZm8pIHRvQygp ICh4YyBDLmxpYnhsX3Bzcl9od19pbmZvLCBlcnIgZXJyb3IpIHsKKwlDLmxpYnhsX3Bzcl9od19p bmZvX2luaXQoJnhjKQorCXhjLmlkID0gQy51aW50MzJfdCh4LklkKQorCXJldHVybiB4Yywgbmls Cit9Ci0tIAoyLjE5LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0 Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRl dmVs