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.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, 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 10C2EC2D0CE for ; Fri, 27 Dec 2019 16:33:20 +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 BE774208C4 for ; Fri, 27 Dec 2019 16:33:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="TMu174C3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BE774208C4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.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 1iksXk-0001ae-3b; Fri, 27 Dec 2019 16:32:52 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iksXi-0001Zw-SK for xen-devel@lists.xenproject.org; Fri, 27 Dec 2019 16:32:50 +0000 X-Inumbo-ID: 7c0b4c24-28c6-11ea-88e7-bc764e2007e4 Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 7c0b4c24-28c6-11ea-88e7-bc764e2007e4; Fri, 27 Dec 2019 16:32:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1577464354; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=vVYV7l/aggm56HVpKvyilf4GVbelPknCs9UiZ16Z7qg=; b=TMu174C3KfbpNd0anaqO9tEYOkI/dC0d0+2LxE5V3+uRIyph2TVwcshZ firI72a5MLlw8RqCn7yNiDw86moZ7gHfalc0xT1+tTDGC0Cud1NOg2vjt yFZkDp8fDk3gRHfYdmHHcx417ZAanrzROVHNEAqLilD3guUfhGonvWWee o=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=george.dunlap@citrix.com; spf=Pass smtp.mailfrom=George.Dunlap@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of george.dunlap@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="george.dunlap@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of George.Dunlap@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="George.Dunlap@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 5fyPRwcyK9lcZtHXPQD0t7Xs4XyrYBtNn3BqJvatbWJdab7M3LFwBT3DJIjiU3mFP6DC7LiMLw 4c6fhuboVDHQoB+EkcrSDs7vZTFSsnMOfkRv7kSAe0JIOo0We5PsCof9798by1ETPWDxkLgMhG Xqk4/jdx6I6BmYJEMbH/gK3eGxkvD5jHLgFT1cStSt+twdEZz/5NXklzkm1dXBjFkmEdwb6D63 mhtZ9VOz4ID3Zm0Js9X5ZbXtmRoJuw0cLItAlnFWqvojXpdE+NlNbAkCF0TTiIPN3BAEqPzUGd L1Q= X-SBRS: 2.7 X-MesageID: 10626140 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.69,363,1571716800"; d="scan'208";a="10626140" From: George Dunlap To: Date: Fri, 27 Dec 2019 16:32:16 +0000 Message-ID: <20191227163224.4113837-1-george.dunlap@citrix.com> X-Mailer: git-send-email 2.24.0 MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 1/9] golang/xenlight: Don't try to marshall zero-length arrays 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 , George Dunlap Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VGhlIGN1cnJlbnQgZnJvbUMgYXJyYXkgY29kZSB3aWxsIGRvIHRoZSAibWFnaWMiIGNhc3Rpbmcg YW5kCm1hcnRpYWxsaW5nIGV2ZW4gd2hlbiBudW1fZm9vIHZhcmlhYmxlIGlzIDAuICBHbyBjcmFz aGVzIHdoZW4gZG9pbmcKdGhlIGNhc3QuCgpGdXJ0aGVybW9yZSwgdGhlIGN1cnJlbnQgdG9DIGFy cmF5IGNvZGUgd2lsbCBjb252ZXJ0IGEgbmlsIHNsaWNlIGludG8KYSB6ZXJvLWxlbmd0aCBtYWxs b2MuICBUaGUgcmVzdWx0aW5nIHBvaW50ZXIgaXMgbm9uLU5VTEwsIGFuZCBjb25mdXNlcwpsaWJ4 bC4KCk9ubHkgZG8gYXJyYXkgbWFyc2hhbGxpbmcgaWYgdGhlIG51bWJlciBvZiBlbGVtZW50cyBp cyBub24temVybzsKb3RoZXJ3aXNlLCBsZWF2ZSB0aGUgdGFyZ2V0IHBvaW50ZXIgZW1wdHkgKG5p bCBmb3IgR28gc2xpY2VzLCBOVUxMIGZvcgpDIGFycmF5cykuCgpUaGUgdG9DIGhhbGYgb2YgdGhp cyBzaG91bGQgYmUgZm9sZGVkIGludG8gImdvbGFuZy94ZW5saWdodDoKaW1wbGVtZW50IGFycmF5 IEdvIHRvIEMgbWFyc2hhbGluZyIuCgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9y Z2UuZHVubGFwQGNpdHJpeC5jb20+Ci0tLQpDQzogTmljayBSb3Nicm9vayA8cm9zYnJvb2tuQGFp bmZvc2VjLmNvbT4KLS0tCiB0b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290eXBlcy5weSAgfCAg IDEzICstCiB0b29scy9nb2xhbmcveGVubGlnaHQvaGVscGVycy5nZW4uZ28gfCAxMjMyICsrKysr KysrKysrKysrLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDY3MSBpbnNlcnRpb25zKCsp LCA1NzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2dl bmdvdHlwZXMucHkgYi90b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290eXBlcy5weQppbmRleCBh OTcyNzU0ZDM2Li41MzYzY2EwNjJkIDEwMDY0NAotLS0gYS90b29scy9nb2xhbmcveGVubGlnaHQv Z2VuZ290eXBlcy5weQorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvZ2VuZ290eXBlcy5weQpA QCAtNDE5LDcgKzQxOSw4IEBAIGRlZiB4ZW5saWdodF9nb2xhbmdfYXJyYXlfZnJvbV9DKHR5ID0g Tm9uZSk6CiAgICAgY2xlbnZhciAgICA9IHR5LnR5cGUubGVudmFyLm5hbWUKICAgICBnb2xlbnZh ciAgID0geGVubGlnaHRfZ29sYW5nX2ZtdF9uYW1lKGNsZW52YXIsZXhwb3J0ZWQ9RmFsc2UpCiAK LSAgICBzICs9ICd7fSA6PSBpbnQoeGMue30pXG4nLmZvcm1hdChnb2xlbnZhciwgY2xlbnZhcikK KyAgICBzICs9ICd4Lnt9ID0gbmlsXG4nLmZvcm1hdChnb25hbWUpCisgICAgcyArPSAnaWYge30g Oj0gaW50KHhjLnt9KTsge30gPiAwIHt7XG4nLmZvcm1hdChnb2xlbnZhciwgY2xlbnZhciwgZ29s ZW52YXIpCiAgICAgcyArPSAne30gOj0gJy5mb3JtYXQoY3NsaWNlKQogICAgIHMgKz0nKCpbMTw8 MjhdQy57fSkodW5zYWZlLlBvaW50ZXIoeGMue30pKVs6e306e31dXG4nLmZvcm1hdChjdHlwZW5h bWUsIGNuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdvbGVudmFyLCBnb2xlbnZhcikKQEAgLTQzMyw3ICs0MzQsNyBA QCBkZWYgeGVubGlnaHRfZ29sYW5nX2FycmF5X2Zyb21fQyh0eSA9IE5vbmUpOgogICAgICAgICBz ICs9ICdpZiBlcnIgOj0geC57fVtpXS5mcm9tQygmdik7IGVyciAhPSBuaWwge3tcbicuZm9ybWF0 KGdvbmFtZSkKICAgICAgICAgcyArPSAncmV0dXJuIGVyciB9XG4nCiAKLSAgICBzICs9ICd9XG4n CisgICAgcyArPSAnfVxufVxuJwogCiAgICAgcmV0dXJuIHMKIApAQCAtNTk5LDcgKzYwMCw3IEBA IGRlZiB4ZW5saWdodF9nb2xhbmdfYXJyYXlfdG9fQyh0eSA9IE5vbmUsIGRpc3Bvc2VfZm4gPSAn Jyk6CiAKICAgICBpc19lbnVtID0gaXNpbnN0YW5jZSh0eS50eXBlLmVsZW1fdHlwZSxpZGwuRW51 bWVyYXRpb24pCiAgICAgaWYgZ290eXBlbmFtZSBpbiBnb19idWlsdGluX3R5cGVzIG9yIGlzX2Vu dW06Ci0gICAgICAgIHMgKz0gJ3t9IDo9IGxlbih4Lnt9KVxuJy5mb3JtYXQoZ29sZW52YXIsZ29u YW1lKQorICAgICAgICBzICs9ICdpZiB7fSA6PSBsZW4oeC57fSk7IHt9ID4gMCB7e1xuJy5mb3Jt YXQoZ29sZW52YXIsZ29uYW1lLCBnb2xlbnZhcikKICAgICAgICAgcyArPSAneGMue30gPSAoKkMu e30pKEMubWFsbG9jKEMuc2l6ZV90KHt9Knt9KSkpXG4nLmZvcm1hdChjbmFtZSxjdHlwZW5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ29sZW52YXIsZ29sZW52YXIpCiAgICAgICAgIHMgKz0gJ3hjLnt9ID0gQy5p bnQoe30pXG4nLmZvcm1hdChjbGVudmFyLGdvbGVudmFyKQpAQCAtNjA4LDExICs2MDksMTEgQEAg ZGVmIHhlbmxpZ2h0X2dvbGFuZ19hcnJheV90b19DKHR5ID0gTm9uZSwgZGlzcG9zZV9mbiA9ICcn KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb2xlbnZhcixnb2xlbnZhcikKICAgICAgICAgcyArPSAnZm9yIGks diA6PSByYW5nZSB4Lnt9IHt7XG4nLmZvcm1hdChnb25hbWUpCiAgICAgICAgIHMgKz0gJ2N7fVtp XSA9IEMue30odilcbicuZm9ybWF0KGdvbmFtZSxjdHlwZW5hbWUpCi0gICAgICAgIHMgKz0gJ31c bicKKyAgICAgICAgcyArPSAnfVxufVxuJwogCiAgICAgICAgIHJldHVybiBzCiAKLSAgICBzICs9 ICd7fSA6PSBsZW4oeC57fSlcbicuZm9ybWF0KGdvbGVudmFyLGdvbmFtZSkKKyAgICBzICs9ICdp ZiB7fSA6PSBsZW4oeC57fSk7IHt9ID4gMCB7e1xuJy5mb3JtYXQoZ29sZW52YXIsZ29uYW1lLCBn b2xlbnZhcikKICAgICBzICs9ICd4Yy57fSA9ICgqQy57fSkoQy5tYWxsb2MoQy51bG9uZyh7fSkq Qy5zaXplb2Zfe30pKVxuJy5mb3JtYXQoY25hbWUsY3R5cGVuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvbGVu dmFyLGN0eXBlbmFtZSkKICAgICBzICs9ICd4Yy57fSA9IEMuaW50KHt9KVxuJy5mb3JtYXQoY2xl bnZhcixnb2xlbnZhcikKQEAgLTYyNSw3ICs2MjYsNyBAQCBkZWYgeGVubGlnaHRfZ29sYW5nX2Fy cmF5X3RvX0ModHkgPSBOb25lLCBkaXNwb3NlX2ZuID0gJycpOgogICAgIHMgKz0gJ0Mue30oJnhj KVxuJy5mb3JtYXQoZGlzcG9zZV9mbikKICAgICBzICs9ICdyZXR1cm4geGMsZXJyXG59XG4nCiAg ICAgcyArPSAnY3t9W2ldID0gdG1wXG4nLmZvcm1hdChnb25hbWUpCi0gICAgcyArPSAnfVxuJwor ICAgIHMgKz0gJ31cbn1cbicKIAogICAgIHJldHVybiBzCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2dv bGFuZy94ZW5saWdodC9oZWxwZXJzLmdlbi5nbyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdodC9oZWxw ZXJzLmdlbi5nbwppbmRleCAzZTU4OGRkMWMyLi42MWNkNzM1OTVlIDEwMDY0NAotLS0gYS90b29s cy9nb2xhbmcveGVubGlnaHQvaGVscGVycy5nZW4uZ28KKysrIGIvdG9vbHMvZ29sYW5nL3hlbmxp Z2h0L2hlbHBlcnMuZ2VuLmdvCkBAIC01MjgsMTIgKzUyOCwxNCBAQCBmdW5jICh4ICpTY2hlZFBh cmFtcykgdG9DKCkgKHhjIEMubGlieGxfc2NoZWRfcGFyYW1zLCBlcnIgZXJyb3IpIHsKIAogZnVu YyAoeCAqVmNwdVNjaGVkUGFyYW1zKSBmcm9tQyh4YyAqQy5saWJ4bF92Y3B1X3NjaGVkX3BhcmFt cykgZXJyb3IgewogCXguU2NoZWQgPSBTY2hlZHVsZXIoeGMuc2NoZWQpCi0JbnVtVmNwdXMgOj0g aW50KHhjLm51bV92Y3B1cykKLQljVmNwdXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3NjaGVkX3Bh cmFtcykodW5zYWZlLlBvaW50ZXIoeGMudmNwdXMpKVs6bnVtVmNwdXM6bnVtVmNwdXNdCi0JeC5W Y3B1cyA9IG1ha2UoW11TY2hlZFBhcmFtcywgbnVtVmNwdXMpCi0JZm9yIGksIHYgOj0gcmFuZ2Ug Y1ZjcHVzIHsKLQkJaWYgZXJyIDo9IHguVmNwdXNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsK LQkJCXJldHVybiBlcnIKKwl4LlZjcHVzID0gbmlsCisJaWYgbnVtVmNwdXMgOj0gaW50KHhjLm51 bV92Y3B1cyk7IG51bVZjcHVzID4gMCB7CisJCWNWY3B1cyA6PSAoKlsxIDw8IDI4XUMubGlieGxf c2NoZWRfcGFyYW1zKSh1bnNhZmUuUG9pbnRlcih4Yy52Y3B1cykpWzpudW1WY3B1czpudW1WY3B1 c10KKwkJeC5WY3B1cyA9IG1ha2UoW11TY2hlZFBhcmFtcywgbnVtVmNwdXMpCisJCWZvciBpLCB2 IDo9IHJhbmdlIGNWY3B1cyB7CisJCQlpZiBlcnIgOj0geC5WY3B1c1tpXS5mcm9tQygmdik7IGVy ciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtNTQzLDE3ICs1 NDUsMTggQEAgZnVuYyAoeCAqVmNwdVNjaGVkUGFyYW1zKSBmcm9tQyh4YyAqQy5saWJ4bF92Y3B1 X3NjaGVkX3BhcmFtcykgZXJyb3IgewogZnVuYyAoeCAqVmNwdVNjaGVkUGFyYW1zKSB0b0MoKSAo eGMgQy5saWJ4bF92Y3B1X3NjaGVkX3BhcmFtcywgZXJyIGVycm9yKSB7CiAJQy5saWJ4bF92Y3B1 X3NjaGVkX3BhcmFtc19pbml0KCZ4YykKIAl4Yy5zY2hlZCA9IEMubGlieGxfc2NoZWR1bGVyKHgu U2NoZWQpCi0JbnVtVmNwdXMgOj0gbGVuKHguVmNwdXMpCi0JeGMudmNwdXMgPSAoKkMubGlieGxf c2NoZWRfcGFyYW1zKShDLm1hbGxvYyhDLnVsb25nKG51bVZjcHVzKSAqIEMuc2l6ZW9mX2xpYnhs X3NjaGVkX3BhcmFtcykpCi0JeGMubnVtX3ZjcHVzID0gQy5pbnQobnVtVmNwdXMpCi0JY1ZjcHVz IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9zY2hlZF9wYXJhbXMpKHVuc2FmZS5Qb2ludGVyKHhjLnZj cHVzKSlbOm51bVZjcHVzOm51bVZjcHVzXQotCWZvciBpLCB2IDo9IHJhbmdlIHguVmNwdXMgewot CQl0bXAsIGVyciA6PSB2LnRvQygpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJQy5saWJ4bF92Y3B1 X3NjaGVkX3BhcmFtc19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJaWYgbnVtVmNw dXMgOj0gbGVuKHguVmNwdXMpOyBudW1WY3B1cyA+IDAgeworCQl4Yy52Y3B1cyA9ICgqQy5saWJ4 bF9zY2hlZF9wYXJhbXMpKEMubWFsbG9jKEMudWxvbmcobnVtVmNwdXMpICogQy5zaXplb2ZfbGli eGxfc2NoZWRfcGFyYW1zKSkKKwkJeGMubnVtX3ZjcHVzID0gQy5pbnQobnVtVmNwdXMpCisJCWNW Y3B1cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfc2NoZWRfcGFyYW1zKSh1bnNhZmUuUG9pbnRlcih4 Yy52Y3B1cykpWzpudW1WY3B1czpudW1WY3B1c10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5WY3B1 cyB7CisJCQl0bXAsIGVyciA6PSB2LnRvQygpCisJCQlpZiBlcnIgIT0gbmlsIHsKKwkJCQlDLmxp YnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2Rpc3Bvc2UoJnhjKQorCQkJCXJldHVybiB4YywgZXJyCisJ CQl9CisJCQljVmNwdXNbaV0gPSB0bXAKIAkJfQotCQljVmNwdXNbaV0gPSB0bXAKIAl9CiAJcmV0 dXJuIHhjLCBuaWwKIH0KQEAgLTU4NiwxMSArNTg5LDEzIEBAIGZ1bmMgKHggKkRvbWFpblNjaGVk UGFyYW1zKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21haW5fc2NoZWRfcGFyYW1zLCBlcnIgZXJyb3Ip IHsKIAogZnVuYyAoeCAqVm5vZGVJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92bm9kZV9pbmZvKSBl cnJvciB7CiAJeC5NZW1rYiA9IHVpbnQ2NCh4Yy5tZW1rYikKLQludW1EaXN0YW5jZXMgOj0gaW50 KHhjLm51bV9kaXN0YW5jZXMpCi0JY0Rpc3RhbmNlcyA6PSAoKlsxIDw8IDI4XUMudWludDMyX3Qp KHVuc2FmZS5Qb2ludGVyKHhjLmRpc3RhbmNlcykpWzpudW1EaXN0YW5jZXM6bnVtRGlzdGFuY2Vz XQotCXguRGlzdGFuY2VzID0gbWFrZShbXXVpbnQzMiwgbnVtRGlzdGFuY2VzKQotCWZvciBpLCB2 IDo9IHJhbmdlIGNEaXN0YW5jZXMgewotCQl4LkRpc3RhbmNlc1tpXSA9IHVpbnQzMih2KQorCXgu RGlzdGFuY2VzID0gbmlsCisJaWYgbnVtRGlzdGFuY2VzIDo9IGludCh4Yy5udW1fZGlzdGFuY2Vz KTsgbnVtRGlzdGFuY2VzID4gMCB7CisJCWNEaXN0YW5jZXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQz Ml90KSh1bnNhZmUuUG9pbnRlcih4Yy5kaXN0YW5jZXMpKVs6bnVtRGlzdGFuY2VzOm51bURpc3Rh bmNlc10KKwkJeC5EaXN0YW5jZXMgPSBtYWtlKFtddWludDMyLCBudW1EaXN0YW5jZXMpCisJCWZv ciBpLCB2IDo9IHJhbmdlIGNEaXN0YW5jZXMgeworCQkJeC5EaXN0YW5jZXNbaV0gPSB1aW50MzIo dikKKwkJfQogCX0KIAl4LlBub2RlID0gdWludDMyKHhjLnBub2RlKQogCWlmIGVyciA6PSB4LlZj cHVzLmZyb21DKCZ4Yy52Y3B1cyk7IGVyciAhPSBuaWwgewpAQCAtNjAzLDEyICs2MDgsMTMgQEAg ZnVuYyAoeCAqVm5vZGVJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF92bm9kZV9pbmZvKSBlcnJvciB7 CiBmdW5jICh4ICpWbm9kZUluZm8pIHRvQygpICh4YyBDLmxpYnhsX3Zub2RlX2luZm8sIGVyciBl cnJvcikgewogCUMubGlieGxfdm5vZGVfaW5mb19pbml0KCZ4YykKIAl4Yy5tZW1rYiA9IEMudWlu dDY0X3QoeC5NZW1rYikKLQludW1EaXN0YW5jZXMgOj0gbGVuKHguRGlzdGFuY2VzKQotCXhjLmRp c3RhbmNlcyA9ICgqQy51aW50MzJfdCkoQy5tYWxsb2MoQy5zaXplX3QobnVtRGlzdGFuY2VzICog bnVtRGlzdGFuY2VzKSkpCi0JeGMubnVtX2Rpc3RhbmNlcyA9IEMuaW50KG51bURpc3RhbmNlcykK LQljRGlzdGFuY2VzIDo9ICgqWzEgPDwgMjhdQy51aW50MzJfdCkodW5zYWZlLlBvaW50ZXIoeGMu ZGlzdGFuY2VzKSlbOm51bURpc3RhbmNlczpudW1EaXN0YW5jZXNdCi0JZm9yIGksIHYgOj0gcmFu Z2UgeC5EaXN0YW5jZXMgewotCQljRGlzdGFuY2VzW2ldID0gQy51aW50MzJfdCh2KQorCWlmIG51 bURpc3RhbmNlcyA6PSBsZW4oeC5EaXN0YW5jZXMpOyBudW1EaXN0YW5jZXMgPiAwIHsKKwkJeGMu ZGlzdGFuY2VzID0gKCpDLnVpbnQzMl90KShDLm1hbGxvYyhDLnNpemVfdChudW1EaXN0YW5jZXMg KiBudW1EaXN0YW5jZXMpKSkKKwkJeGMubnVtX2Rpc3RhbmNlcyA9IEMuaW50KG51bURpc3RhbmNl cykKKwkJY0Rpc3RhbmNlcyA6PSAoKlsxIDw8IDI4XUMudWludDMyX3QpKHVuc2FmZS5Qb2ludGVy KHhjLmRpc3RhbmNlcykpWzpudW1EaXN0YW5jZXM6bnVtRGlzdGFuY2VzXQorCQlmb3IgaSwgdiA6 PSByYW5nZSB4LkRpc3RhbmNlcyB7CisJCQljRGlzdGFuY2VzW2ldID0gQy51aW50MzJfdCh2KQor CQl9CiAJfQogCXhjLnBub2RlID0gQy51aW50MzJfdCh4LlBub2RlKQogCXhjLnZjcHVzLCBlcnIg PSB4LlZjcHVzLnRvQygpCkBAIC02NDQsMjAgKzY1MCwyNCBAQCBmdW5jICh4ICpEb21haW5CdWls ZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvKSBlcnJvciB7CiAJaWYg ZXJyIDo9IHguTm9kZW1hcC5mcm9tQygmeGMubm9kZW1hcCk7IGVyciAhPSBuaWwgewogCQlyZXR1 cm4gZXJyCiAJfQotCW51bVZjcHVIYXJkQWZmaW5pdHkgOj0gaW50KHhjLm51bV92Y3B1X2hhcmRf YWZmaW5pdHkpCi0JY1ZjcHVIYXJkQWZmaW5pdHkgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2JpdG1h cCkodW5zYWZlLlBvaW50ZXIoeGMudmNwdV9oYXJkX2FmZmluaXR5KSlbOm51bVZjcHVIYXJkQWZm aW5pdHk6bnVtVmNwdUhhcmRBZmZpbml0eV0KLQl4LlZjcHVIYXJkQWZmaW5pdHkgPSBtYWtlKFtd Qml0bWFwLCBudW1WY3B1SGFyZEFmZmluaXR5KQotCWZvciBpLCB2IDo9IHJhbmdlIGNWY3B1SGFy ZEFmZmluaXR5IHsKLQkJaWYgZXJyIDo9IHguVmNwdUhhcmRBZmZpbml0eVtpXS5mcm9tQygmdik7 IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguVmNwdUhhcmRBZmZpbml0eSA9IG5pbAor CWlmIG51bVZjcHVIYXJkQWZmaW5pdHkgOj0gaW50KHhjLm51bV92Y3B1X2hhcmRfYWZmaW5pdHkp OyBudW1WY3B1SGFyZEFmZmluaXR5ID4gMCB7CisJCWNWY3B1SGFyZEFmZmluaXR5IDo9ICgqWzEg PDwgMjhdQy5saWJ4bF9iaXRtYXApKHVuc2FmZS5Qb2ludGVyKHhjLnZjcHVfaGFyZF9hZmZpbml0 eSkpWzpudW1WY3B1SGFyZEFmZmluaXR5Om51bVZjcHVIYXJkQWZmaW5pdHldCisJCXguVmNwdUhh cmRBZmZpbml0eSA9IG1ha2UoW11CaXRtYXAsIG51bVZjcHVIYXJkQWZmaW5pdHkpCisJCWZvciBp LCB2IDo9IHJhbmdlIGNWY3B1SGFyZEFmZmluaXR5IHsKKwkJCWlmIGVyciA6PSB4LlZjcHVIYXJk QWZmaW5pdHlbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9 CiAJCX0KIAl9Ci0JbnVtVmNwdVNvZnRBZmZpbml0eSA6PSBpbnQoeGMubnVtX3ZjcHVfc29mdF9h ZmZpbml0eSkKLQljVmNwdVNvZnRBZmZpbml0eSA6PSAoKlsxIDw8IDI4XUMubGlieGxfYml0bWFw KSh1bnNhZmUuUG9pbnRlcih4Yy52Y3B1X3NvZnRfYWZmaW5pdHkpKVs6bnVtVmNwdVNvZnRBZmZp bml0eTpudW1WY3B1U29mdEFmZmluaXR5XQotCXguVmNwdVNvZnRBZmZpbml0eSA9IG1ha2UoW11C aXRtYXAsIG51bVZjcHVTb2Z0QWZmaW5pdHkpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1ZjcHVTb2Z0 QWZmaW5pdHkgewotCQlpZiBlcnIgOj0geC5WY3B1U29mdEFmZmluaXR5W2ldLmZyb21DKCZ2KTsg ZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5WY3B1U29mdEFmZmluaXR5ID0gbmlsCisJ aWYgbnVtVmNwdVNvZnRBZmZpbml0eSA6PSBpbnQoeGMubnVtX3ZjcHVfc29mdF9hZmZpbml0eSk7 IG51bVZjcHVTb2Z0QWZmaW5pdHkgPiAwIHsKKwkJY1ZjcHVTb2Z0QWZmaW5pdHkgOj0gKCpbMSA8 PCAyOF1DLmxpYnhsX2JpdG1hcCkodW5zYWZlLlBvaW50ZXIoeGMudmNwdV9zb2Z0X2FmZmluaXR5 KSlbOm51bVZjcHVTb2Z0QWZmaW5pdHk6bnVtVmNwdVNvZnRBZmZpbml0eV0KKwkJeC5WY3B1U29m dEFmZmluaXR5ID0gbWFrZShbXUJpdG1hcCwgbnVtVmNwdVNvZnRBZmZpbml0eSkKKwkJZm9yIGks IHYgOj0gcmFuZ2UgY1ZjcHVTb2Z0QWZmaW5pdHkgeworCQkJaWYgZXJyIDo9IHguVmNwdVNvZnRB ZmZpbml0eVtpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0K IAkJfQogCX0KIAlpZiBlcnIgOj0geC5OdW1hUGxhY2VtZW50LmZyb21DKCZ4Yy5udW1hX3BsYWNl bWVudCk7IGVyciAhPSBuaWwgewpAQCAtNjgyLDEyICs2OTIsMTQgQEAgZnVuYyAoeCAqRG9tYWlu QnVpbGRJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbykgZXJyb3Igewog CQlyZXR1cm4gZXJyCiAJfQogCXguQmxrZGV2U3RhcnQgPSBDLkdvU3RyaW5nKHhjLmJsa2Rldl9z dGFydCkKLQludW1WbnVtYU5vZGVzIDo9IGludCh4Yy5udW1fdm51bWFfbm9kZXMpCi0JY1ZudW1h Tm9kZXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3Zub2RlX2luZm8pKHVuc2FmZS5Qb2ludGVyKHhj LnZudW1hX25vZGVzKSlbOm51bVZudW1hTm9kZXM6bnVtVm51bWFOb2Rlc10KLQl4LlZudW1hTm9k ZXMgPSBtYWtlKFtdVm5vZGVJbmZvLCBudW1WbnVtYU5vZGVzKQotCWZvciBpLCB2IDo9IHJhbmdl IGNWbnVtYU5vZGVzIHsKLQkJaWYgZXJyIDo9IHguVm51bWFOb2Rlc1tpXS5mcm9tQygmdik7IGVy ciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguVm51bWFOb2RlcyA9IG5pbAorCWlmIG51bVZu dW1hTm9kZXMgOj0gaW50KHhjLm51bV92bnVtYV9ub2Rlcyk7IG51bVZudW1hTm9kZXMgPiAwIHsK KwkJY1ZudW1hTm9kZXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3Zub2RlX2luZm8pKHVuc2FmZS5Q b2ludGVyKHhjLnZudW1hX25vZGVzKSlbOm51bVZudW1hTm9kZXM6bnVtVm51bWFOb2Rlc10KKwkJ eC5WbnVtYU5vZGVzID0gbWFrZShbXVZub2RlSW5mbywgbnVtVm51bWFOb2RlcykKKwkJZm9yIGks IHYgOj0gcmFuZ2UgY1ZudW1hTm9kZXMgeworCQkJaWYgZXJyIDo9IHguVm51bWFOb2Rlc1tpXS5m cm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIAl4 Lk1heEdyYW50RnJhbWVzID0gdWludDMyKHhjLm1heF9ncmFudF9mcmFtZXMpCkBAIC03MTIsMjYg KzcyNCwzMiBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIGZyb21DKHhjICpDLmxpYnhsX2Rv bWFpbl9idWlsZF9pbmZvKSBlcnJvciB7CiAJaWYgZXJyIDo9IHguU2NoZWRQYXJhbXMuZnJvbUMo JnhjLnNjaGVkX3BhcmFtcyk7IGVyciAhPSBuaWwgewogCQlyZXR1cm4gZXJyCiAJfQotCW51bUlv cG9ydHMgOj0gaW50KHhjLm51bV9pb3BvcnRzKQotCWNJb3BvcnRzIDo9ICgqWzEgPDwgMjhdQy5s aWJ4bF9pb3BvcnRfcmFuZ2UpKHVuc2FmZS5Qb2ludGVyKHhjLmlvcG9ydHMpKVs6bnVtSW9wb3J0 czpudW1Jb3BvcnRzXQotCXguSW9wb3J0cyA9IG1ha2UoW11Jb3BvcnRSYW5nZSwgbnVtSW9wb3J0 cykKLQlmb3IgaSwgdiA6PSByYW5nZSBjSW9wb3J0cyB7Ci0JCWlmIGVyciA6PSB4LklvcG9ydHNb aV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LklvcG9ydHMgPSBu aWwKKwlpZiBudW1Jb3BvcnRzIDo9IGludCh4Yy5udW1faW9wb3J0cyk7IG51bUlvcG9ydHMgPiAw IHsKKwkJY0lvcG9ydHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2lvcG9ydF9yYW5nZSkodW5zYWZl LlBvaW50ZXIoeGMuaW9wb3J0cykpWzpudW1Jb3BvcnRzOm51bUlvcG9ydHNdCisJCXguSW9wb3J0 cyA9IG1ha2UoW11Jb3BvcnRSYW5nZSwgbnVtSW9wb3J0cykKKwkJZm9yIGksIHYgOj0gcmFuZ2Ug Y0lvcG9ydHMgeworCQkJaWYgZXJyIDo9IHguSW9wb3J0c1tpXS5mcm9tQygmdik7IGVyciAhPSBu aWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KLQludW1JcnFzIDo9IGludCh4Yy5u dW1faXJxcykKLQljSXJxcyA6PSAoKlsxIDw8IDI4XUMudWludDMyX3QpKHVuc2FmZS5Qb2ludGVy KHhjLmlycXMpKVs6bnVtSXJxczpudW1JcnFzXQotCXguSXJxcyA9IG1ha2UoW111aW50MzIsIG51 bUlycXMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY0lycXMgewotCQl4LklycXNbaV0gPSB1aW50MzIo dikKKwl4LklycXMgPSBuaWwKKwlpZiBudW1JcnFzIDo9IGludCh4Yy5udW1faXJxcyk7IG51bUly cXMgPiAwIHsKKwkJY0lycXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1bnNhZmUuUG9pbnRl cih4Yy5pcnFzKSlbOm51bUlycXM6bnVtSXJxc10KKwkJeC5JcnFzID0gbWFrZShbXXVpbnQzMiwg bnVtSXJxcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY0lycXMgeworCQkJeC5JcnFzW2ldID0gdWlu dDMyKHYpCisJCX0KIAl9Ci0JbnVtSW9tZW0gOj0gaW50KHhjLm51bV9pb21lbSkKLQljSW9tZW0g Oj0gKCpbMSA8PCAyOF1DLmxpYnhsX2lvbWVtX3JhbmdlKSh1bnNhZmUuUG9pbnRlcih4Yy5pb21l bSkpWzpudW1Jb21lbTpudW1Jb21lbV0KLQl4LklvbWVtID0gbWFrZShbXUlvbWVtUmFuZ2UsIG51 bUlvbWVtKQotCWZvciBpLCB2IDo9IHJhbmdlIGNJb21lbSB7Ci0JCWlmIGVyciA6PSB4LklvbWVt W2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5Jb21lbSA9IG5p bAorCWlmIG51bUlvbWVtIDo9IGludCh4Yy5udW1faW9tZW0pOyBudW1Jb21lbSA+IDAgeworCQlj SW9tZW0gOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2lvbWVtX3JhbmdlKSh1bnNhZmUuUG9pbnRlcih4 Yy5pb21lbSkpWzpudW1Jb21lbTpudW1Jb21lbV0KKwkJeC5Jb21lbSA9IG1ha2UoW11Jb21lbVJh bmdlLCBudW1Jb21lbSkKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY0lvbWVtIHsKKwkJCWlmIGVyciA6 PSB4LklvbWVtW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJ fQogCQl9CiAJfQogCWlmIGVyciA6PSB4LkNsYWltTW9kZS5mcm9tQygmeGMuY2xhaW1fbW9kZSk7 IGVyciAhPSBuaWwgewpAQCAtNzYyLDE4ICs3ODAsMTggQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJ bmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbykgZXJyb3IgewogCXguVGVl ID0gVGVlVHlwZSh4Yy50ZWUpCiAJeC5UeXBlID0gRG9tYWluVHlwZSh4Yy5fdHlwZSkKIAlzd2l0 Y2ggeC5UeXBlIHsKLQljYXNlIERvbWFpblR5cGVQdjoKLQkJdmFyIHR5cGVQdiBEb21haW5CdWls ZEluZm9UeXBlVW5pb25QdgotCQlpZiBlcnIgOj0gdHlwZVB2LmZyb21DKHhjKTsgZXJyICE9IG5p bCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQkJeC5UeXBlVW5pb24gPSB0eXBlUHYKIAljYXNlIERv bWFpblR5cGVIdm06CiAJCXZhciB0eXBlSHZtIERvbWFpbkJ1aWxkSW5mb1R5cGVVbmlvbkh2bQog CQlpZiBlcnIgOj0gdHlwZUh2bS5mcm9tQyh4Yyk7IGVyciAhPSBuaWwgewogCQkJcmV0dXJuIGVy cgogCQl9CiAJCXguVHlwZVVuaW9uID0gdHlwZUh2bQorCWNhc2UgRG9tYWluVHlwZVB2OgorCQl2 YXIgdHlwZVB2IERvbWFpbkJ1aWxkSW5mb1R5cGVVbmlvblB2CisJCWlmIGVyciA6PSB0eXBlUHYu ZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBlcnIKKwkJfQorCQl4LlR5cGVVbmlv biA9IHR5cGVQdgogCWNhc2UgRG9tYWluVHlwZVB2aDoKIAkJdmFyIHR5cGVQdmggRG9tYWluQnVp bGRJbmZvVHlwZVVuaW9uUHZoCiAJCWlmIGVyciA6PSB0eXBlUHZoLmZyb21DKHhjKTsgZXJyICE9 IG5pbCB7CkBAIC05NTMsMjkgKzk3MSwzMSBAQCBmdW5jICh4ICpEb21haW5CdWlsZEluZm8pIHRv QygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBlcnIgZXJyb3IpIHsKIAkJQy5saWJ4 bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKIAkJcmV0dXJuIHhjLCBlcnIKIAl9Ci0J bnVtVmNwdUhhcmRBZmZpbml0eSA6PSBsZW4oeC5WY3B1SGFyZEFmZmluaXR5KQotCXhjLnZjcHVf aGFyZF9hZmZpbml0eSA9ICgqQy5saWJ4bF9iaXRtYXApKEMubWFsbG9jKEMudWxvbmcobnVtVmNw dUhhcmRBZmZpbml0eSkgKiBDLnNpemVvZl9saWJ4bF9iaXRtYXApKQotCXhjLm51bV92Y3B1X2hh cmRfYWZmaW5pdHkgPSBDLmludChudW1WY3B1SGFyZEFmZmluaXR5KQotCWNWY3B1SGFyZEFmZmlu aXR5IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9iaXRtYXApKHVuc2FmZS5Qb2ludGVyKHhjLnZjcHVf aGFyZF9hZmZpbml0eSkpWzpudW1WY3B1SGFyZEFmZmluaXR5Om51bVZjcHVIYXJkQWZmaW5pdHld Ci0JZm9yIGksIHYgOj0gcmFuZ2UgeC5WY3B1SGFyZEFmZmluaXR5IHsKLQkJdG1wLCBlcnIgOj0g di50b0MoKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9f ZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNWY3B1SGFyZEFmZmluaXR5 W2ldID0gdG1wCi0JfQotCW51bVZjcHVTb2Z0QWZmaW5pdHkgOj0gbGVuKHguVmNwdVNvZnRBZmZp bml0eSkKLQl4Yy52Y3B1X3NvZnRfYWZmaW5pdHkgPSAoKkMubGlieGxfYml0bWFwKShDLm1hbGxv YyhDLnVsb25nKG51bVZjcHVTb2Z0QWZmaW5pdHkpICogQy5zaXplb2ZfbGlieGxfYml0bWFwKSkK LQl4Yy5udW1fdmNwdV9zb2Z0X2FmZmluaXR5ID0gQy5pbnQobnVtVmNwdVNvZnRBZmZpbml0eSkK LQljVmNwdVNvZnRBZmZpbml0eSA6PSAoKlsxIDw8IDI4XUMubGlieGxfYml0bWFwKSh1bnNhZmUu UG9pbnRlcih4Yy52Y3B1X3NvZnRfYWZmaW5pdHkpKVs6bnVtVmNwdVNvZnRBZmZpbml0eTpudW1W Y3B1U29mdEFmZmluaXR5XQotCWZvciBpLCB2IDo9IHJhbmdlIHguVmNwdVNvZnRBZmZpbml0eSB7 Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2Rv bWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKKwlpZiBudW1W Y3B1SGFyZEFmZmluaXR5IDo9IGxlbih4LlZjcHVIYXJkQWZmaW5pdHkpOyBudW1WY3B1SGFyZEFm ZmluaXR5ID4gMCB7CisJCXhjLnZjcHVfaGFyZF9hZmZpbml0eSA9ICgqQy5saWJ4bF9iaXRtYXAp KEMubWFsbG9jKEMudWxvbmcobnVtVmNwdUhhcmRBZmZpbml0eSkgKiBDLnNpemVvZl9saWJ4bF9i aXRtYXApKQorCQl4Yy5udW1fdmNwdV9oYXJkX2FmZmluaXR5ID0gQy5pbnQobnVtVmNwdUhhcmRB ZmZpbml0eSkKKwkJY1ZjcHVIYXJkQWZmaW5pdHkgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2JpdG1h cCkodW5zYWZlLlBvaW50ZXIoeGMudmNwdV9oYXJkX2FmZmluaXR5KSlbOm51bVZjcHVIYXJkQWZm aW5pdHk6bnVtVmNwdUhhcmRBZmZpbml0eV0KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5WY3B1SGFy ZEFmZmluaXR5IHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgewor CQkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMpCisJCQkJcmV0dXJuIHhj LCBlcnIKKwkJCX0KKwkJCWNWY3B1SGFyZEFmZmluaXR5W2ldID0gdG1wCisJCX0KKwl9CisJaWYg bnVtVmNwdVNvZnRBZmZpbml0eSA6PSBsZW4oeC5WY3B1U29mdEFmZmluaXR5KTsgbnVtVmNwdVNv ZnRBZmZpbml0eSA+IDAgeworCQl4Yy52Y3B1X3NvZnRfYWZmaW5pdHkgPSAoKkMubGlieGxfYml0 bWFwKShDLm1hbGxvYyhDLnVsb25nKG51bVZjcHVTb2Z0QWZmaW5pdHkpICogQy5zaXplb2ZfbGli eGxfYml0bWFwKSkKKwkJeGMubnVtX3ZjcHVfc29mdF9hZmZpbml0eSA9IEMuaW50KG51bVZjcHVT b2Z0QWZmaW5pdHkpCisJCWNWY3B1U29mdEFmZmluaXR5IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9i aXRtYXApKHVuc2FmZS5Qb2ludGVyKHhjLnZjcHVfc29mdF9hZmZpbml0eSkpWzpudW1WY3B1U29m dEFmZmluaXR5Om51bVZjcHVTb2Z0QWZmaW5pdHldCisJCWZvciBpLCB2IDo9IHJhbmdlIHguVmNw dVNvZnRBZmZpbml0eSB7CisJCQl0bXAsIGVyciA6PSB2LnRvQygpCisJCQlpZiBlcnIgIT0gbmls IHsKKwkJCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQorCQkJCXJldHVy biB4YywgZXJyCisJCQl9CisJCQljVmNwdVNvZnRBZmZpbml0eVtpXSA9IHRtcAogCQl9Ci0JCWNW Y3B1U29mdEFmZmluaXR5W2ldID0gdG1wCiAJfQogCXhjLm51bWFfcGxhY2VtZW50LCBlcnIgPSB4 Lk51bWFQbGFjZW1lbnQudG9DKCkKIAlpZiBlcnIgIT0gbmlsIHsKQEAgLTEwMDcsMTcgKzEwMjcs MTggQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF9kb21haW5f YnVpbGRfaW5mbywgZXJyIGVycm9yKSB7CiAJCXJldHVybiB4YywgZXJyCiAJfQogCXhjLmJsa2Rl dl9zdGFydCA9IEMuQ1N0cmluZyh4LkJsa2RldlN0YXJ0KQotCW51bVZudW1hTm9kZXMgOj0gbGVu KHguVm51bWFOb2RlcykKLQl4Yy52bnVtYV9ub2RlcyA9ICgqQy5saWJ4bF92bm9kZV9pbmZvKShD Lm1hbGxvYyhDLnVsb25nKG51bVZudW1hTm9kZXMpICogQy5zaXplb2ZfbGlieGxfdm5vZGVfaW5m bykpCi0JeGMubnVtX3ZudW1hX25vZGVzID0gQy5pbnQobnVtVm51bWFOb2RlcykKLQljVm51bWFO b2RlcyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdm5vZGVfaW5mbykodW5zYWZlLlBvaW50ZXIoeGMu dm51bWFfbm9kZXMpKVs6bnVtVm51bWFOb2RlczpudW1WbnVtYU5vZGVzXQotCWZvciBpLCB2IDo9 IHJhbmdlIHguVm51bWFOb2RlcyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9 IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0 dXJuIHhjLCBlcnIKKwlpZiBudW1WbnVtYU5vZGVzIDo9IGxlbih4LlZudW1hTm9kZXMpOyBudW1W bnVtYU5vZGVzID4gMCB7CisJCXhjLnZudW1hX25vZGVzID0gKCpDLmxpYnhsX3Zub2RlX2luZm8p KEMubWFsbG9jKEMudWxvbmcobnVtVm51bWFOb2RlcykgKiBDLnNpemVvZl9saWJ4bF92bm9kZV9p bmZvKSkKKwkJeGMubnVtX3ZudW1hX25vZGVzID0gQy5pbnQobnVtVm51bWFOb2RlcykKKwkJY1Zu dW1hTm9kZXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3Zub2RlX2luZm8pKHVuc2FmZS5Qb2ludGVy KHhjLnZudW1hX25vZGVzKSlbOm51bVZudW1hTm9kZXM6bnVtVm51bWFOb2Rlc10KKwkJZm9yIGks IHYgOj0gcmFuZ2UgeC5WbnVtYU5vZGVzIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJCWlm IGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgmeGMp CisJCQkJcmV0dXJuIHhjLCBlcnIKKwkJCX0KKwkJCWNWbnVtYU5vZGVzW2ldID0gdG1wCiAJCX0K LQkJY1ZudW1hTm9kZXNbaV0gPSB0bXAKIAl9CiAJeGMubWF4X2dyYW50X2ZyYW1lcyA9IEMudWlu dDMyX3QoeC5NYXhHcmFudEZyYW1lcykKIAl4Yy5tYXhfbWFwdHJhY2tfZnJhbWVzID0gQy51aW50 MzJfdCh4Lk1heE1hcHRyYWNrRnJhbWVzKQpAQCAtMTA1MSwzNiArMTA3MiwzOSBAQCBmdW5jICh4 ICpEb21haW5CdWlsZEluZm8pIHRvQygpICh4YyBDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvLCBl cnIgZXJyb3IpIHsKIAkJQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mb19kaXNwb3NlKCZ4YykKIAkJ cmV0dXJuIHhjLCBlcnIKIAl9Ci0JbnVtSW9wb3J0cyA6PSBsZW4oeC5Jb3BvcnRzKQotCXhjLmlv cG9ydHMgPSAoKkMubGlieGxfaW9wb3J0X3JhbmdlKShDLm1hbGxvYyhDLnVsb25nKG51bUlvcG9y dHMpICogQy5zaXplb2ZfbGlieGxfaW9wb3J0X3JhbmdlKSkKLQl4Yy5udW1faW9wb3J0cyA9IEMu aW50KG51bUlvcG9ydHMpCi0JY0lvcG9ydHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2lvcG9ydF9y YW5nZSkodW5zYWZlLlBvaW50ZXIoeGMuaW9wb3J0cykpWzpudW1Jb3BvcnRzOm51bUlvcG9ydHNd Ci0JZm9yIGksIHYgOj0gcmFuZ2UgeC5Jb3BvcnRzIHsKLQkJdG1wLCBlcnIgOj0gdi50b0MoKQot CQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9zZSgm eGMpCi0JCQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNJb3BvcnRzW2ldID0gdG1wCi0JfQotCW51 bUlycXMgOj0gbGVuKHguSXJxcykKLQl4Yy5pcnFzID0gKCpDLnVpbnQzMl90KShDLm1hbGxvYyhD LnNpemVfdChudW1JcnFzICogbnVtSXJxcykpKQotCXhjLm51bV9pcnFzID0gQy5pbnQobnVtSXJx cykKLQljSXJxcyA6PSAoKlsxIDw8IDI4XUMudWludDMyX3QpKHVuc2FmZS5Qb2ludGVyKHhjLmly cXMpKVs6bnVtSXJxczpudW1JcnFzXQotCWZvciBpLCB2IDo9IHJhbmdlIHguSXJxcyB7Ci0JCWNJ cnFzW2ldID0gQy51aW50MzJfdCh2KQotCX0KLQludW1Jb21lbSA6PSBsZW4oeC5Jb21lbSkKLQl4 Yy5pb21lbSA9ICgqQy5saWJ4bF9pb21lbV9yYW5nZSkoQy5tYWxsb2MoQy51bG9uZyhudW1Jb21l bSkgKiBDLnNpemVvZl9saWJ4bF9pb21lbV9yYW5nZSkpCi0JeGMubnVtX2lvbWVtID0gQy5pbnQo bnVtSW9tZW0pCi0JY0lvbWVtIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9pb21lbV9yYW5nZSkodW5z YWZlLlBvaW50ZXIoeGMuaW9tZW0pKVs6bnVtSW9tZW06bnVtSW9tZW1dCi0JZm9yIGksIHYgOj0g cmFuZ2UgeC5Jb21lbSB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9IG5pbCB7 Ci0JCQlDLmxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhj LCBlcnIKKwlpZiBudW1Jb3BvcnRzIDo9IGxlbih4LklvcG9ydHMpOyBudW1Jb3BvcnRzID4gMCB7 CisJCXhjLmlvcG9ydHMgPSAoKkMubGlieGxfaW9wb3J0X3JhbmdlKShDLm1hbGxvYyhDLnVsb25n KG51bUlvcG9ydHMpICogQy5zaXplb2ZfbGlieGxfaW9wb3J0X3JhbmdlKSkKKwkJeGMubnVtX2lv cG9ydHMgPSBDLmludChudW1Jb3BvcnRzKQorCQljSW9wb3J0cyA6PSAoKlsxIDw8IDI4XUMubGli eGxfaW9wb3J0X3JhbmdlKSh1bnNhZmUuUG9pbnRlcih4Yy5pb3BvcnRzKSlbOm51bUlvcG9ydHM6 bnVtSW9wb3J0c10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5Jb3BvcnRzIHsKKwkJCXRtcCwgZXJy IDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2J1aWxk X2luZm9fZGlzcG9zZSgmeGMpCisJCQkJcmV0dXJuIHhjLCBlcnIKKwkJCX0KKwkJCWNJb3BvcnRz W2ldID0gdG1wCisJCX0KKwl9CisJaWYgbnVtSXJxcyA6PSBsZW4oeC5JcnFzKTsgbnVtSXJxcyA+ IDAgeworCQl4Yy5pcnFzID0gKCpDLnVpbnQzMl90KShDLm1hbGxvYyhDLnNpemVfdChudW1JcnFz ICogbnVtSXJxcykpKQorCQl4Yy5udW1faXJxcyA9IEMuaW50KG51bUlycXMpCisJCWNJcnFzIDo9 ICgqWzEgPDwgMjhdQy51aW50MzJfdCkodW5zYWZlLlBvaW50ZXIoeGMuaXJxcykpWzpudW1JcnFz Om51bUlycXNdCisJCWZvciBpLCB2IDo9IHJhbmdlIHguSXJxcyB7CisJCQljSXJxc1tpXSA9IEMu dWludDMyX3QodikKKwkJfQorCX0KKwlpZiBudW1Jb21lbSA6PSBsZW4oeC5Jb21lbSk7IG51bUlv bWVtID4gMCB7CisJCXhjLmlvbWVtID0gKCpDLmxpYnhsX2lvbWVtX3JhbmdlKShDLm1hbGxvYyhD LnVsb25nKG51bUlvbWVtKSAqIEMuc2l6ZW9mX2xpYnhsX2lvbWVtX3JhbmdlKSkKKwkJeGMubnVt X2lvbWVtID0gQy5pbnQobnVtSW9tZW0pCisJCWNJb21lbSA6PSAoKlsxIDw8IDI4XUMubGlieGxf aW9tZW1fcmFuZ2UpKHVuc2FmZS5Qb2ludGVyKHhjLmlvbWVtKSlbOm51bUlvbWVtOm51bUlvbWVt XQorCQlmb3IgaSwgdiA6PSByYW5nZSB4LklvbWVtIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkK KwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2J1aWxkX2luZm9fZGlzcG9z ZSgmeGMpCisJCQkJcmV0dXJuIHhjLCBlcnIKKwkJCX0KKwkJCWNJb21lbVtpXSA9IHRtcAogCQl9 Ci0JCWNJb21lbVtpXSA9IHRtcAogCX0KIAl4Yy5jbGFpbV9tb2RlLCBlcnIgPSB4LkNsYWltTW9k ZS50b0MoKQogCWlmIGVyciAhPSBuaWwgewpAQCAtMTg4OSwxMiArMTkxMywxNCBAQCBmdW5jICh4 ICpEZXZpY2VWZGlzcGwpIGZyb21DKHhjICpDLmxpYnhsX2RldmljZV92ZGlzcGwpIGVycm9yIHsK IAl4LkJhY2tlbmREb21uYW1lID0gQy5Hb1N0cmluZyh4Yy5iYWNrZW5kX2RvbW5hbWUpCiAJeC5E ZXZpZCA9IERldmlkKHhjLmRldmlkKQogCXguQmVBbGxvYyA9IGJvb2woeGMuYmVfYWxsb2MpCi0J bnVtQ29ubmVjdG9ycyA6PSBpbnQoeGMubnVtX2Nvbm5lY3RvcnMpCi0JY0Nvbm5lY3RvcnMgOj0g KCpbMSA8PCAyOF1DLmxpYnhsX2Nvbm5lY3Rvcl9wYXJhbSkodW5zYWZlLlBvaW50ZXIoeGMuY29u bmVjdG9ycykpWzpudW1Db25uZWN0b3JzOm51bUNvbm5lY3RvcnNdCi0JeC5Db25uZWN0b3JzID0g bWFrZShbXUNvbm5lY3RvclBhcmFtLCBudW1Db25uZWN0b3JzKQotCWZvciBpLCB2IDo9IHJhbmdl IGNDb25uZWN0b3JzIHsKLQkJaWYgZXJyIDo9IHguQ29ubmVjdG9yc1tpXS5mcm9tQygmdik7IGVy ciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguQ29ubmVjdG9ycyA9IG5pbAorCWlmIG51bUNv bm5lY3RvcnMgOj0gaW50KHhjLm51bV9jb25uZWN0b3JzKTsgbnVtQ29ubmVjdG9ycyA+IDAgewor CQljQ29ubmVjdG9ycyA6PSAoKlsxIDw8IDI4XUMubGlieGxfY29ubmVjdG9yX3BhcmFtKSh1bnNh ZmUuUG9pbnRlcih4Yy5jb25uZWN0b3JzKSlbOm51bUNvbm5lY3RvcnM6bnVtQ29ubmVjdG9yc10K KwkJeC5Db25uZWN0b3JzID0gbWFrZShbXUNvbm5lY3RvclBhcmFtLCBudW1Db25uZWN0b3JzKQor CQlmb3IgaSwgdiA6PSByYW5nZSBjQ29ubmVjdG9ycyB7CisJCQlpZiBlcnIgOj0geC5Db25uZWN0 b3JzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9 CiAJfQogCkBAIC0xOTA3LDMzICsxOTMzLDM4IEBAIGZ1bmMgKHggKkRldmljZVZkaXNwbCkgdG9D KCkgKHhjIEMubGlieGxfZGV2aWNlX3ZkaXNwbCwgZXJyIGVycm9yKSB7CiAJeGMuYmFja2VuZF9k b21uYW1lID0gQy5DU3RyaW5nKHguQmFja2VuZERvbW5hbWUpCiAJeGMuZGV2aWQgPSBDLmxpYnhs X2RldmlkKHguRGV2aWQpCiAJeGMuYmVfYWxsb2MgPSBDLmJvb2woeC5CZUFsbG9jKQotCW51bUNv bm5lY3RvcnMgOj0gbGVuKHguQ29ubmVjdG9ycykKLQl4Yy5jb25uZWN0b3JzID0gKCpDLmxpYnhs X2Nvbm5lY3Rvcl9wYXJhbSkoQy5tYWxsb2MoQy51bG9uZyhudW1Db25uZWN0b3JzKSAqIEMuc2l6 ZW9mX2xpYnhsX2Nvbm5lY3Rvcl9wYXJhbSkpCi0JeGMubnVtX2Nvbm5lY3RvcnMgPSBDLmludChu dW1Db25uZWN0b3JzKQotCWNDb25uZWN0b3JzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9jb25uZWN0 b3JfcGFyYW0pKHVuc2FmZS5Qb2ludGVyKHhjLmNvbm5lY3RvcnMpKVs6bnVtQ29ubmVjdG9yczpu dW1Db25uZWN0b3JzXQotCWZvciBpLCB2IDo9IHJhbmdlIHguQ29ubmVjdG9ycyB7Ci0JCXRtcCwg ZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2RldmljZV92ZGlz cGxfZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgorCWlmIG51bUNvbm5lY3RvcnMgOj0g bGVuKHguQ29ubmVjdG9ycyk7IG51bUNvbm5lY3RvcnMgPiAwIHsKKwkJeGMuY29ubmVjdG9ycyA9 ICgqQy5saWJ4bF9jb25uZWN0b3JfcGFyYW0pKEMubWFsbG9jKEMudWxvbmcobnVtQ29ubmVjdG9y cykgKiBDLnNpemVvZl9saWJ4bF9jb25uZWN0b3JfcGFyYW0pKQorCQl4Yy5udW1fY29ubmVjdG9y cyA9IEMuaW50KG51bUNvbm5lY3RvcnMpCisJCWNDb25uZWN0b3JzIDo9ICgqWzEgPDwgMjhdQy5s aWJ4bF9jb25uZWN0b3JfcGFyYW0pKHVuc2FmZS5Qb2ludGVyKHhjLmNvbm5lY3RvcnMpKVs6bnVt Q29ubmVjdG9yczpudW1Db25uZWN0b3JzXQorCQlmb3IgaSwgdiA6PSByYW5nZSB4LkNvbm5lY3Rv cnMgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJQy5s aWJ4bF9kZXZpY2VfdmRpc3BsX2Rpc3Bvc2UoJnhjKQorCQkJCXJldHVybiB4YywgZXJyCisJCQl9 CisJCQljQ29ubmVjdG9yc1tpXSA9IHRtcAogCQl9Ci0JCWNDb25uZWN0b3JzW2ldID0gdG1wCiAJ fQogCXJldHVybiB4YywgbmlsCiB9CiAKIGZ1bmMgKHggKlZzbmRQYXJhbXMpIGZyb21DKHhjICpD LmxpYnhsX3ZzbmRfcGFyYW1zKSBlcnJvciB7Ci0JbnVtU2FtcGxlUmF0ZXMgOj0gaW50KHhjLm51 bV9zYW1wbGVfcmF0ZXMpCi0JY1NhbXBsZVJhdGVzIDo9ICgqWzEgPDwgMjhdQy51aW50MzJfdCko dW5zYWZlLlBvaW50ZXIoeGMuc2FtcGxlX3JhdGVzKSlbOm51bVNhbXBsZVJhdGVzOm51bVNhbXBs ZVJhdGVzXQotCXguU2FtcGxlUmF0ZXMgPSBtYWtlKFtddWludDMyLCBudW1TYW1wbGVSYXRlcykK LQlmb3IgaSwgdiA6PSByYW5nZSBjU2FtcGxlUmF0ZXMgewotCQl4LlNhbXBsZVJhdGVzW2ldID0g dWludDMyKHYpCi0JfQotCW51bVNhbXBsZUZvcm1hdHMgOj0gaW50KHhjLm51bV9zYW1wbGVfZm9y bWF0cykKLQljU2FtcGxlRm9ybWF0cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdnNuZF9wY21fZm9y bWF0KSh1bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVfZm9ybWF0cykpWzpudW1TYW1wbGVGb3JtYXRz Om51bVNhbXBsZUZvcm1hdHNdCi0JeC5TYW1wbGVGb3JtYXRzID0gbWFrZShbXVZzbmRQY21Gb3Jt YXQsIG51bVNhbXBsZUZvcm1hdHMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1NhbXBsZUZvcm1hdHMg ewotCQl4LlNhbXBsZUZvcm1hdHNbaV0gPSBWc25kUGNtRm9ybWF0KHYpCisJeC5TYW1wbGVSYXRl cyA9IG5pbAorCWlmIG51bVNhbXBsZVJhdGVzIDo9IGludCh4Yy5udW1fc2FtcGxlX3JhdGVzKTsg bnVtU2FtcGxlUmF0ZXMgPiAwIHsKKwkJY1NhbXBsZVJhdGVzIDo9ICgqWzEgPDwgMjhdQy51aW50 MzJfdCkodW5zYWZlLlBvaW50ZXIoeGMuc2FtcGxlX3JhdGVzKSlbOm51bVNhbXBsZVJhdGVzOm51 bVNhbXBsZVJhdGVzXQorCQl4LlNhbXBsZVJhdGVzID0gbWFrZShbXXVpbnQzMiwgbnVtU2FtcGxl UmF0ZXMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNTYW1wbGVSYXRlcyB7CisJCQl4LlNhbXBsZVJh dGVzW2ldID0gdWludDMyKHYpCisJCX0KKwl9CisJeC5TYW1wbGVGb3JtYXRzID0gbmlsCisJaWYg bnVtU2FtcGxlRm9ybWF0cyA6PSBpbnQoeGMubnVtX3NhbXBsZV9mb3JtYXRzKTsgbnVtU2FtcGxl Rm9ybWF0cyA+IDAgeworCQljU2FtcGxlRm9ybWF0cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdnNu ZF9wY21fZm9ybWF0KSh1bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVfZm9ybWF0cykpWzpudW1TYW1w bGVGb3JtYXRzOm51bVNhbXBsZUZvcm1hdHNdCisJCXguU2FtcGxlRm9ybWF0cyA9IG1ha2UoW11W c25kUGNtRm9ybWF0LCBudW1TYW1wbGVGb3JtYXRzKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjU2Ft cGxlRm9ybWF0cyB7CisJCQl4LlNhbXBsZUZvcm1hdHNbaV0gPSBWc25kUGNtRm9ybWF0KHYpCisJ CX0KIAl9CiAJeC5DaGFubmVsc01pbiA9IHVpbnQzMih4Yy5jaGFubmVsc19taW4pCiAJeC5DaGFu bmVsc01heCA9IHVpbnQzMih4Yy5jaGFubmVsc19tYXgpCkBAIC0xOTQ0LDE5ICsxOTc1LDIxIEBA IGZ1bmMgKHggKlZzbmRQYXJhbXMpIGZyb21DKHhjICpDLmxpYnhsX3ZzbmRfcGFyYW1zKSBlcnJv ciB7CiAKIGZ1bmMgKHggKlZzbmRQYXJhbXMpIHRvQygpICh4YyBDLmxpYnhsX3ZzbmRfcGFyYW1z LCBlcnIgZXJyb3IpIHsKIAlDLmxpYnhsX3ZzbmRfcGFyYW1zX2luaXQoJnhjKQotCW51bVNhbXBs ZVJhdGVzIDo9IGxlbih4LlNhbXBsZVJhdGVzKQotCXhjLnNhbXBsZV9yYXRlcyA9ICgqQy51aW50 MzJfdCkoQy5tYWxsb2MoQy5zaXplX3QobnVtU2FtcGxlUmF0ZXMgKiBudW1TYW1wbGVSYXRlcykp KQotCXhjLm51bV9zYW1wbGVfcmF0ZXMgPSBDLmludChudW1TYW1wbGVSYXRlcykKLQljU2FtcGxl UmF0ZXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVf cmF0ZXMpKVs6bnVtU2FtcGxlUmF0ZXM6bnVtU2FtcGxlUmF0ZXNdCi0JZm9yIGksIHYgOj0gcmFu Z2UgeC5TYW1wbGVSYXRlcyB7Ci0JCWNTYW1wbGVSYXRlc1tpXSA9IEMudWludDMyX3QodikKLQl9 Ci0JbnVtU2FtcGxlRm9ybWF0cyA6PSBsZW4oeC5TYW1wbGVGb3JtYXRzKQotCXhjLnNhbXBsZV9m b3JtYXRzID0gKCpDLmxpYnhsX3ZzbmRfcGNtX2Zvcm1hdCkoQy5tYWxsb2MoQy5zaXplX3QobnVt U2FtcGxlRm9ybWF0cyAqIG51bVNhbXBsZUZvcm1hdHMpKSkKLQl4Yy5udW1fc2FtcGxlX2Zvcm1h dHMgPSBDLmludChudW1TYW1wbGVGb3JtYXRzKQotCWNTYW1wbGVGb3JtYXRzIDo9ICgqWzEgPDwg MjhdQy5saWJ4bF92c25kX3BjbV9mb3JtYXQpKHVuc2FmZS5Qb2ludGVyKHhjLnNhbXBsZV9mb3Jt YXRzKSlbOm51bVNhbXBsZUZvcm1hdHM6bnVtU2FtcGxlRm9ybWF0c10KLQlmb3IgaSwgdiA6PSBy YW5nZSB4LlNhbXBsZUZvcm1hdHMgewotCQljU2FtcGxlRm9ybWF0c1tpXSA9IEMubGlieGxfdnNu ZF9wY21fZm9ybWF0KHYpCisJaWYgbnVtU2FtcGxlUmF0ZXMgOj0gbGVuKHguU2FtcGxlUmF0ZXMp OyBudW1TYW1wbGVSYXRlcyA+IDAgeworCQl4Yy5zYW1wbGVfcmF0ZXMgPSAoKkMudWludDMyX3Qp KEMubWFsbG9jKEMuc2l6ZV90KG51bVNhbXBsZVJhdGVzICogbnVtU2FtcGxlUmF0ZXMpKSkKKwkJ eGMubnVtX3NhbXBsZV9yYXRlcyA9IEMuaW50KG51bVNhbXBsZVJhdGVzKQorCQljU2FtcGxlUmF0 ZXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVfcmF0 ZXMpKVs6bnVtU2FtcGxlUmF0ZXM6bnVtU2FtcGxlUmF0ZXNdCisJCWZvciBpLCB2IDo9IHJhbmdl IHguU2FtcGxlUmF0ZXMgeworCQkJY1NhbXBsZVJhdGVzW2ldID0gQy51aW50MzJfdCh2KQorCQl9 CisJfQorCWlmIG51bVNhbXBsZUZvcm1hdHMgOj0gbGVuKHguU2FtcGxlRm9ybWF0cyk7IG51bVNh bXBsZUZvcm1hdHMgPiAwIHsKKwkJeGMuc2FtcGxlX2Zvcm1hdHMgPSAoKkMubGlieGxfdnNuZF9w Y21fZm9ybWF0KShDLm1hbGxvYyhDLnNpemVfdChudW1TYW1wbGVGb3JtYXRzICogbnVtU2FtcGxl Rm9ybWF0cykpKQorCQl4Yy5udW1fc2FtcGxlX2Zvcm1hdHMgPSBDLmludChudW1TYW1wbGVGb3Jt YXRzKQorCQljU2FtcGxlRm9ybWF0cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdnNuZF9wY21fZm9y bWF0KSh1bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVfZm9ybWF0cykpWzpudW1TYW1wbGVGb3JtYXRz Om51bVNhbXBsZUZvcm1hdHNdCisJCWZvciBpLCB2IDo9IHJhbmdlIHguU2FtcGxlRm9ybWF0cyB7 CisJCQljU2FtcGxlRm9ybWF0c1tpXSA9IEMubGlieGxfdnNuZF9wY21fZm9ybWF0KHYpCisJCX0K IAl9CiAJeGMuY2hhbm5lbHNfbWluID0gQy51aW50MzJfdCh4LkNoYW5uZWxzTWluKQogCXhjLmNo YW5uZWxzX21heCA9IEMudWludDMyX3QoeC5DaGFubmVsc01heCkKQEAgLTE5OTEsMTIgKzIwMjQs MTQgQEAgZnVuYyAoeCAqVnNuZFBjbSkgZnJvbUMoeGMgKkMubGlieGxfdnNuZF9wY20pIGVycm9y IHsKIAlpZiBlcnIgOj0geC5QYXJhbXMuZnJvbUMoJnhjLnBhcmFtcyk7IGVyciAhPSBuaWwgewog CQlyZXR1cm4gZXJyCiAJfQotCW51bVZzbmRTdHJlYW1zIDo9IGludCh4Yy5udW1fdnNuZF9zdHJl YW1zKQotCWNTdHJlYW1zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3N0cmVhbSkodW5zYWZl LlBvaW50ZXIoeGMuc3RyZWFtcykpWzpudW1Wc25kU3RyZWFtczpudW1Wc25kU3RyZWFtc10KLQl4 LlN0cmVhbXMgPSBtYWtlKFtdVnNuZFN0cmVhbSwgbnVtVnNuZFN0cmVhbXMpCi0JZm9yIGksIHYg Oj0gcmFuZ2UgY1N0cmVhbXMgewotCQlpZiBlcnIgOj0geC5TdHJlYW1zW2ldLmZyb21DKCZ2KTsg ZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5TdHJlYW1zID0gbmlsCisJaWYgbnVtVnNu ZFN0cmVhbXMgOj0gaW50KHhjLm51bV92c25kX3N0cmVhbXMpOyBudW1Wc25kU3RyZWFtcyA+IDAg eworCQljU3RyZWFtcyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdnNuZF9zdHJlYW0pKHVuc2FmZS5Q b2ludGVyKHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0cmVhbXM6bnVtVnNuZFN0cmVhbXNdCisJCXgu U3RyZWFtcyA9IG1ha2UoW11Wc25kU3RyZWFtLCBudW1Wc25kU3RyZWFtcykKKwkJZm9yIGksIHYg Oj0gcmFuZ2UgY1N0cmVhbXMgeworCQkJaWYgZXJyIDo9IHguU3RyZWFtc1tpXS5mcm9tQygmdik7 IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtMjAxMSwx NyArMjA0NiwxOCBAQCBmdW5jICh4ICpWc25kUGNtKSB0b0MoKSAoeGMgQy5saWJ4bF92c25kX3Bj bSwgZXJyIGVycm9yKSB7CiAJCUMubGlieGxfdnNuZF9wY21fZGlzcG9zZSgmeGMpCiAJCXJldHVy biB4YywgZXJyCiAJfQotCW51bVZzbmRTdHJlYW1zIDo9IGxlbih4LlN0cmVhbXMpCi0JeGMuc3Ry ZWFtcyA9ICgqQy5saWJ4bF92c25kX3N0cmVhbSkoQy5tYWxsb2MoQy51bG9uZyhudW1Wc25kU3Ry ZWFtcykgKiBDLnNpemVvZl9saWJ4bF92c25kX3N0cmVhbSkpCi0JeGMubnVtX3ZzbmRfc3RyZWFt cyA9IEMuaW50KG51bVZzbmRTdHJlYW1zKQotCWNTdHJlYW1zIDo9ICgqWzEgPDwgMjhdQy5saWJ4 bF92c25kX3N0cmVhbSkodW5zYWZlLlBvaW50ZXIoeGMuc3RyZWFtcykpWzpudW1Wc25kU3RyZWFt czpudW1Wc25kU3RyZWFtc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LlN0cmVhbXMgewotCQl0bXAs IGVyciA6PSB2LnRvQygpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJQy5saWJ4bF92c25kX3BjbV9k aXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJaWYgbnVtVnNuZFN0cmVhbXMgOj0gbGVu KHguU3RyZWFtcyk7IG51bVZzbmRTdHJlYW1zID4gMCB7CisJCXhjLnN0cmVhbXMgPSAoKkMubGli eGxfdnNuZF9zdHJlYW0pKEMubWFsbG9jKEMudWxvbmcobnVtVnNuZFN0cmVhbXMpICogQy5zaXpl b2ZfbGlieGxfdnNuZF9zdHJlYW0pKQorCQl4Yy5udW1fdnNuZF9zdHJlYW1zID0gQy5pbnQobnVt VnNuZFN0cmVhbXMpCisJCWNTdHJlYW1zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3N0cmVh bSkodW5zYWZlLlBvaW50ZXIoeGMuc3RyZWFtcykpWzpudW1Wc25kU3RyZWFtczpudW1Wc25kU3Ry ZWFtc10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5TdHJlYW1zIHsKKwkJCXRtcCwgZXJyIDo9IHYu dG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfdnNuZF9wY21fZGlzcG9zZSgm eGMpCisJCQkJcmV0dXJuIHhjLCBlcnIKKwkJCX0KKwkJCWNTdHJlYW1zW2ldID0gdG1wCiAJCX0K LQkJY1N0cmVhbXNbaV0gPSB0bXAKIAl9CiAJcmV0dXJuIHhjLCBuaWwKIH0KQEAgLTIwMzUsMTIg KzIwNzEsMTQgQEAgZnVuYyAoeCAqRGV2aWNlVnNuZCkgZnJvbUMoeGMgKkMubGlieGxfZGV2aWNl X3ZzbmQpIGVycm9yIHsKIAlpZiBlcnIgOj0geC5QYXJhbXMuZnJvbUMoJnhjLnBhcmFtcyk7IGVy ciAhPSBuaWwgewogCQlyZXR1cm4gZXJyCiAJfQotCW51bVZzbmRQY21zIDo9IGludCh4Yy5udW1f dnNuZF9wY21zKQotCWNQY21zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3BjbSkodW5zYWZl LlBvaW50ZXIoeGMucGNtcykpWzpudW1Wc25kUGNtczpudW1Wc25kUGNtc10KLQl4LlBjbXMgPSBt YWtlKFtdVnNuZFBjbSwgbnVtVnNuZFBjbXMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1BjbXMgewot CQlpZiBlcnIgOj0geC5QY21zW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4g ZXJyCisJeC5QY21zID0gbmlsCisJaWYgbnVtVnNuZFBjbXMgOj0gaW50KHhjLm51bV92c25kX3Bj bXMpOyBudW1Wc25kUGNtcyA+IDAgeworCQljUGNtcyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdnNu ZF9wY20pKHVuc2FmZS5Qb2ludGVyKHhjLnBjbXMpKVs6bnVtVnNuZFBjbXM6bnVtVnNuZFBjbXNd CisJCXguUGNtcyA9IG1ha2UoW11Wc25kUGNtLCBudW1Wc25kUGNtcykKKwkJZm9yIGksIHYgOj0g cmFuZ2UgY1BjbXMgeworCQkJaWYgZXJyIDo9IHguUGNtc1tpXS5mcm9tQygmdik7IGVyciAhPSBu aWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtMjA1OSwxNyArMjA5Nywx OCBAQCBmdW5jICh4ICpEZXZpY2VWc25kKSB0b0MoKSAoeGMgQy5saWJ4bF9kZXZpY2VfdnNuZCwg ZXJyIGVycm9yKSB7CiAJCUMubGlieGxfZGV2aWNlX3ZzbmRfZGlzcG9zZSgmeGMpCiAJCXJldHVy biB4YywgZXJyCiAJfQotCW51bVZzbmRQY21zIDo9IGxlbih4LlBjbXMpCi0JeGMucGNtcyA9ICgq Qy5saWJ4bF92c25kX3BjbSkoQy5tYWxsb2MoQy51bG9uZyhudW1Wc25kUGNtcykgKiBDLnNpemVv Zl9saWJ4bF92c25kX3BjbSkpCi0JeGMubnVtX3ZzbmRfcGNtcyA9IEMuaW50KG51bVZzbmRQY21z KQotCWNQY21zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3BjbSkodW5zYWZlLlBvaW50ZXIo eGMucGNtcykpWzpudW1Wc25kUGNtczpudW1Wc25kUGNtc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4 LlBjbXMgewotCQl0bXAsIGVyciA6PSB2LnRvQygpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJQy5s aWJ4bF9kZXZpY2VfdnNuZF9kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCisJaWYgbnVt VnNuZFBjbXMgOj0gbGVuKHguUGNtcyk7IG51bVZzbmRQY21zID4gMCB7CisJCXhjLnBjbXMgPSAo KkMubGlieGxfdnNuZF9wY20pKEMubWFsbG9jKEMudWxvbmcobnVtVnNuZFBjbXMpICogQy5zaXpl b2ZfbGlieGxfdnNuZF9wY20pKQorCQl4Yy5udW1fdnNuZF9wY21zID0gQy5pbnQobnVtVnNuZFBj bXMpCisJCWNQY21zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3BjbSkodW5zYWZlLlBvaW50 ZXIoeGMucGNtcykpWzpudW1Wc25kUGNtczpudW1Wc25kUGNtc10KKwkJZm9yIGksIHYgOj0gcmFu Z2UgeC5QY21zIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgewor CQkJCUMubGlieGxfZGV2aWNlX3ZzbmRfZGlzcG9zZSgmeGMpCisJCQkJcmV0dXJuIHhjLCBlcnIK KwkJCX0KKwkJCWNQY21zW2ldID0gdG1wCiAJCX0KLQkJY1BjbXNbaV0gPSB0bXAKIAl9CiAJcmV0 dXJuIHhjLCBuaWwKIH0KQEAgLTIwODEsMTI0ICsyMTIwLDE1NCBAQCBmdW5jICh4ICpEb21haW5D b25maWcpIGZyb21DKHhjICpDLmxpYnhsX2RvbWFpbl9jb25maWcpIGVycm9yIHsKIAlpZiBlcnIg Oj0geC5CSW5mby5mcm9tQygmeGMuYl9pbmZvKTsgZXJyICE9IG5pbCB7CiAJCXJldHVybiBlcnIK IAl9Ci0JbnVtRGlza3MgOj0gaW50KHhjLm51bV9kaXNrcykKLQljRGlza3MgOj0gKCpbMSA8PCAy OF1DLmxpYnhsX2RldmljZV9kaXNrKSh1bnNhZmUuUG9pbnRlcih4Yy5kaXNrcykpWzpudW1EaXNr czpudW1EaXNrc10KLQl4LkRpc2tzID0gbWFrZShbXURldmljZURpc2ssIG51bURpc2tzKQotCWZv ciBpLCB2IDo9IHJhbmdlIGNEaXNrcyB7Ci0JCWlmIGVyciA6PSB4LkRpc2tzW2ldLmZyb21DKCZ2 KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtTmljcyA6PSBpbnQo eGMubnVtX25pY3MpCi0JY05pY3MgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9uaWMpKHVu c2FmZS5Qb2ludGVyKHhjLm5pY3MpKVs6bnVtTmljczpudW1OaWNzXQotCXguTmljcyA9IG1ha2Uo W11EZXZpY2VOaWMsIG51bU5pY3MpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY05pY3MgewotCQlpZiBl cnIgOj0geC5OaWNzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0J CX0KLQl9Ci0JbnVtUGNpZGV2cyA6PSBpbnQoeGMubnVtX3BjaWRldnMpCi0JY1BjaWRldnMgOj0g KCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wY2kpKHVuc2FmZS5Qb2ludGVyKHhjLnBjaWRldnMp KVs6bnVtUGNpZGV2czpudW1QY2lkZXZzXQotCXguUGNpZGV2cyA9IG1ha2UoW11EZXZpY2VQY2ks IG51bVBjaWRldnMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1BjaWRldnMgewotCQlpZiBlcnIgOj0g eC5QY2lkZXZzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0K LQl9Ci0JbnVtUmRtcyA6PSBpbnQoeGMubnVtX3JkbXMpCi0JY1JkbXMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX2RldmljZV9yZG0pKHVuc2FmZS5Qb2ludGVyKHhjLnJkbXMpKVs6bnVtUmRtczpudW1S ZG1zXQotCXguUmRtcyA9IG1ha2UoW11EZXZpY2VSZG0sIG51bVJkbXMpCi0JZm9yIGksIHYgOj0g cmFuZ2UgY1JkbXMgewotCQlpZiBlcnIgOj0geC5SZG1zW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5p bCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtRHRkZXZzIDo9IGludCh4Yy5udW1fZHRk ZXZzKQotCWNEdGRldnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9kdGRldikodW5zYWZl LlBvaW50ZXIoeGMuZHRkZXZzKSlbOm51bUR0ZGV2czpudW1EdGRldnNdCi0JeC5EdGRldnMgPSBt YWtlKFtdRGV2aWNlRHRkZXYsIG51bUR0ZGV2cykKLQlmb3IgaSwgdiA6PSByYW5nZSBjRHRkZXZz IHsKLQkJaWYgZXJyIDo9IHguRHRkZXZzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQly ZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtVmZicyA6PSBpbnQoeGMubnVtX3ZmYnMpCi0JY1ZmYnMg Oj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92ZmIpKHVuc2FmZS5Qb2ludGVyKHhjLnZmYnMp KVs6bnVtVmZiczpudW1WZmJzXQotCXguVmZicyA9IG1ha2UoW11EZXZpY2VWZmIsIG51bVZmYnMp Ci0JZm9yIGksIHYgOj0gcmFuZ2UgY1ZmYnMgewotCQlpZiBlcnIgOj0geC5WZmJzW2ldLmZyb21D KCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtVmticyA6PSBp bnQoeGMubnVtX3ZrYnMpCi0JY1ZrYnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92a2Ip KHVuc2FmZS5Qb2ludGVyKHhjLnZrYnMpKVs6bnVtVmticzpudW1Wa2JzXQotCXguVmticyA9IG1h a2UoW11EZXZpY2VWa2IsIG51bVZrYnMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1ZrYnMgewotCQlp ZiBlcnIgOj0geC5Wa2JzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJy Ci0JCX0KLQl9Ci0JbnVtVnRwbXMgOj0gaW50KHhjLm51bV92dHBtcykKLQljVnRwbXMgOj0gKCpb MSA8PCAyOF1DLmxpYnhsX2RldmljZV92dHBtKSh1bnNhZmUuUG9pbnRlcih4Yy52dHBtcykpWzpu dW1WdHBtczpudW1WdHBtc10KLQl4LlZ0cG1zID0gbWFrZShbXURldmljZVZ0cG0sIG51bVZ0cG1z KQotCWZvciBpLCB2IDo9IHJhbmdlIGNWdHBtcyB7Ci0JCWlmIGVyciA6PSB4LlZ0cG1zW2ldLmZy b21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtUDlTIDo9 IGludCh4Yy5udW1fcDlzKQotCWNQOVMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wOSko dW5zYWZlLlBvaW50ZXIoeGMucDlzKSlbOm51bVA5UzpudW1QOVNdCi0JeC5QOVMgPSBtYWtlKFtd RGV2aWNlUDksIG51bVA5UykKLQlmb3IgaSwgdiA6PSByYW5nZSBjUDlTIHsKLQkJaWYgZXJyIDo9 IHguUDlTW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9 Ci0JbnVtUHZjYWxsc2lmcyA6PSBpbnQoeGMubnVtX3B2Y2FsbHNpZnMpCi0JY1B2Y2FsbHNpZnMg Oj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wdmNhbGxzaWYpKHVuc2FmZS5Qb2ludGVyKHhj LnB2Y2FsbHNpZnMpKVs6bnVtUHZjYWxsc2lmczpudW1QdmNhbGxzaWZzXQotCXguUHZjYWxsc2lm cyA9IG1ha2UoW11EZXZpY2VQdmNhbGxzaWYsIG51bVB2Y2FsbHNpZnMpCi0JZm9yIGksIHYgOj0g cmFuZ2UgY1B2Y2FsbHNpZnMgewotCQlpZiBlcnIgOj0geC5QdmNhbGxzaWZzW2ldLmZyb21DKCZ2 KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtVmRpc3BscyA6PSBp bnQoeGMubnVtX3ZkaXNwbHMpCi0JY1ZkaXNwbHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rldmlj ZV92ZGlzcGwpKHVuc2FmZS5Qb2ludGVyKHhjLnZkaXNwbHMpKVs6bnVtVmRpc3BsczpudW1WZGlz cGxzXQotCXguVmRpc3BscyA9IG1ha2UoW11EZXZpY2VWZGlzcGwsIG51bVZkaXNwbHMpCi0JZm9y IGksIHYgOj0gcmFuZ2UgY1ZkaXNwbHMgewotCQlpZiBlcnIgOj0geC5WZGlzcGxzW2ldLmZyb21D KCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtVnNuZHMgOj0g aW50KHhjLm51bV92c25kcykKLQljVnNuZHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92 c25kKSh1bnNhZmUuUG9pbnRlcih4Yy52c25kcykpWzpudW1Wc25kczpudW1Wc25kc10KLQl4LlZz bmRzID0gbWFrZShbXURldmljZVZzbmQsIG51bVZzbmRzKQotCWZvciBpLCB2IDo9IHJhbmdlIGNW c25kcyB7Ci0JCWlmIGVyciA6PSB4LlZzbmRzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0J CQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtQ2hhbm5lbHMgOj0gaW50KHhjLm51bV9jaGFubmVs cykKLQljQ2hhbm5lbHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9jaGFubmVsKSh1bnNh ZmUuUG9pbnRlcih4Yy5jaGFubmVscykpWzpudW1DaGFubmVsczpudW1DaGFubmVsc10KLQl4LkNo YW5uZWxzID0gbWFrZShbXURldmljZUNoYW5uZWwsIG51bUNoYW5uZWxzKQotCWZvciBpLCB2IDo9 IHJhbmdlIGNDaGFubmVscyB7Ci0JCWlmIGVyciA6PSB4LkNoYW5uZWxzW2ldLmZyb21DKCZ2KTsg ZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVtVXNiY3RybHMgOj0gaW50 KHhjLm51bV91c2JjdHJscykKLQljVXNiY3RybHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rldmlj ZV91c2JjdHJsKSh1bnNhZmUuUG9pbnRlcih4Yy51c2JjdHJscykpWzpudW1Vc2JjdHJsczpudW1V c2JjdHJsc10KLQl4LlVzYmN0cmxzID0gbWFrZShbXURldmljZVVzYmN0cmwsIG51bVVzYmN0cmxz KQotCWZvciBpLCB2IDo9IHJhbmdlIGNVc2JjdHJscyB7Ci0JCWlmIGVyciA6PSB4LlVzYmN0cmxz W2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JbnVt VXNiZGV2cyA6PSBpbnQoeGMubnVtX3VzYmRldnMpCi0JY1VzYmRldnMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX2RldmljZV91c2JkZXYpKHVuc2FmZS5Qb2ludGVyKHhjLnVzYmRldnMpKVs6bnVtVXNi ZGV2czpudW1Vc2JkZXZzXQotCXguVXNiZGV2cyA9IG1ha2UoW11EZXZpY2VVc2JkZXYsIG51bVVz YmRldnMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1VzYmRldnMgewotCQlpZiBlcnIgOj0geC5Vc2Jk ZXZzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5EaXNrcyA9 IG5pbAorCWlmIG51bURpc2tzIDo9IGludCh4Yy5udW1fZGlza3MpOyBudW1EaXNrcyA+IDAgewor CQljRGlza3MgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9kaXNrKSh1bnNhZmUuUG9pbnRl cih4Yy5kaXNrcykpWzpudW1EaXNrczpudW1EaXNrc10KKwkJeC5EaXNrcyA9IG1ha2UoW11EZXZp Y2VEaXNrLCBudW1EaXNrcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY0Rpc2tzIHsKKwkJCWlmIGVy ciA6PSB4LkRpc2tzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgor CQkJfQorCQl9CisJfQorCXguTmljcyA9IG5pbAorCWlmIG51bU5pY3MgOj0gaW50KHhjLm51bV9u aWNzKTsgbnVtTmljcyA+IDAgeworCQljTmljcyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNl X25pYykodW5zYWZlLlBvaW50ZXIoeGMubmljcykpWzpudW1OaWNzOm51bU5pY3NdCisJCXguTmlj cyA9IG1ha2UoW11EZXZpY2VOaWMsIG51bU5pY3MpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNOaWNz IHsKKwkJCWlmIGVyciA6PSB4Lk5pY3NbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQly ZXR1cm4gZXJyCisJCQl9CisJCX0KKwl9CisJeC5QY2lkZXZzID0gbmlsCisJaWYgbnVtUGNpZGV2 cyA6PSBpbnQoeGMubnVtX3BjaWRldnMpOyBudW1QY2lkZXZzID4gMCB7CisJCWNQY2lkZXZzIDo9 ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfcGNpKSh1bnNhZmUuUG9pbnRlcih4Yy5wY2lkZXZz KSlbOm51bVBjaWRldnM6bnVtUGNpZGV2c10KKwkJeC5QY2lkZXZzID0gbWFrZShbXURldmljZVBj aSwgbnVtUGNpZGV2cykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1BjaWRldnMgeworCQkJaWYgZXJy IDo9IHguUGNpZGV2c1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIK KwkJCX0KKwkJfQorCX0KKwl4LlJkbXMgPSBuaWwKKwlpZiBudW1SZG1zIDo9IGludCh4Yy5udW1f cmRtcyk7IG51bVJkbXMgPiAwIHsKKwkJY1JkbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rldmlj ZV9yZG0pKHVuc2FmZS5Qb2ludGVyKHhjLnJkbXMpKVs6bnVtUmRtczpudW1SZG1zXQorCQl4LlJk bXMgPSBtYWtlKFtdRGV2aWNlUmRtLCBudW1SZG1zKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjUmRt cyB7CisJCQlpZiBlcnIgOj0geC5SZG1zW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJ cmV0dXJuIGVycgorCQkJfQorCQl9CisJfQorCXguRHRkZXZzID0gbmlsCisJaWYgbnVtRHRkZXZz IDo9IGludCh4Yy5udW1fZHRkZXZzKTsgbnVtRHRkZXZzID4gMCB7CisJCWNEdGRldnMgOj0gKCpb MSA8PCAyOF1DLmxpYnhsX2RldmljZV9kdGRldikodW5zYWZlLlBvaW50ZXIoeGMuZHRkZXZzKSlb Om51bUR0ZGV2czpudW1EdGRldnNdCisJCXguRHRkZXZzID0gbWFrZShbXURldmljZUR0ZGV2LCBu dW1EdGRldnMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNEdGRldnMgeworCQkJaWYgZXJyIDo9IHgu RHRkZXZzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQor CQl9CisJfQorCXguVmZicyA9IG5pbAorCWlmIG51bVZmYnMgOj0gaW50KHhjLm51bV92ZmJzKTsg bnVtVmZicyA+IDAgeworCQljVmZicyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX3ZmYiko dW5zYWZlLlBvaW50ZXIoeGMudmZicykpWzpudW1WZmJzOm51bVZmYnNdCisJCXguVmZicyA9IG1h a2UoW11EZXZpY2VWZmIsIG51bVZmYnMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNWZmJzIHsKKwkJ CWlmIGVyciA6PSB4LlZmYnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4g ZXJyCisJCQl9CisJCX0KKwl9CisJeC5Wa2JzID0gbmlsCisJaWYgbnVtVmticyA6PSBpbnQoeGMu bnVtX3ZrYnMpOyBudW1Wa2JzID4gMCB7CisJCWNWa2JzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9k ZXZpY2VfdmtiKSh1bnNhZmUuUG9pbnRlcih4Yy52a2JzKSlbOm51bVZrYnM6bnVtVmtic10KKwkJ eC5Wa2JzID0gbWFrZShbXURldmljZVZrYiwgbnVtVmticykKKwkJZm9yIGksIHYgOj0gcmFuZ2Ug Y1ZrYnMgeworCQkJaWYgZXJyIDo9IHguVmtic1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewor CQkJCXJldHVybiBlcnIKKwkJCX0KKwkJfQorCX0KKwl4LlZ0cG1zID0gbmlsCisJaWYgbnVtVnRw bXMgOj0gaW50KHhjLm51bV92dHBtcyk7IG51bVZ0cG1zID4gMCB7CisJCWNWdHBtcyA6PSAoKlsx IDw8IDI4XUMubGlieGxfZGV2aWNlX3Z0cG0pKHVuc2FmZS5Qb2ludGVyKHhjLnZ0cG1zKSlbOm51 bVZ0cG1zOm51bVZ0cG1zXQorCQl4LlZ0cG1zID0gbWFrZShbXURldmljZVZ0cG0sIG51bVZ0cG1z KQorCQlmb3IgaSwgdiA6PSByYW5nZSBjVnRwbXMgeworCQkJaWYgZXJyIDo9IHguVnRwbXNbaV0u ZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CisJCX0KKwl9CisJ eC5QOVMgPSBuaWwKKwlpZiBudW1QOVMgOj0gaW50KHhjLm51bV9wOXMpOyBudW1QOVMgPiAwIHsK KwkJY1A5UyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX3A5KSh1bnNhZmUuUG9pbnRlcih4 Yy5wOXMpKVs6bnVtUDlTOm51bVA5U10KKwkJeC5QOVMgPSBtYWtlKFtdRGV2aWNlUDksIG51bVA5 UykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1A5UyB7CisJCQlpZiBlcnIgOj0geC5QOVNbaV0uZnJv bUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CisJCX0KKwl9CisJeC5Q dmNhbGxzaWZzID0gbmlsCisJaWYgbnVtUHZjYWxsc2lmcyA6PSBpbnQoeGMubnVtX3B2Y2FsbHNp ZnMpOyBudW1QdmNhbGxzaWZzID4gMCB7CisJCWNQdmNhbGxzaWZzIDo9ICgqWzEgPDwgMjhdQy5s aWJ4bF9kZXZpY2VfcHZjYWxsc2lmKSh1bnNhZmUuUG9pbnRlcih4Yy5wdmNhbGxzaWZzKSlbOm51 bVB2Y2FsbHNpZnM6bnVtUHZjYWxsc2lmc10KKwkJeC5QdmNhbGxzaWZzID0gbWFrZShbXURldmlj ZVB2Y2FsbHNpZiwgbnVtUHZjYWxsc2lmcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1B2Y2FsbHNp ZnMgeworCQkJaWYgZXJyIDo9IHguUHZjYWxsc2lmc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwg eworCQkJCXJldHVybiBlcnIKKwkJCX0KKwkJfQorCX0KKwl4LlZkaXNwbHMgPSBuaWwKKwlpZiBu dW1WZGlzcGxzIDo9IGludCh4Yy5udW1fdmRpc3Bscyk7IG51bVZkaXNwbHMgPiAwIHsKKwkJY1Zk aXNwbHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92ZGlzcGwpKHVuc2FmZS5Qb2ludGVy KHhjLnZkaXNwbHMpKVs6bnVtVmRpc3BsczpudW1WZGlzcGxzXQorCQl4LlZkaXNwbHMgPSBtYWtl KFtdRGV2aWNlVmRpc3BsLCBudW1WZGlzcGxzKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjVmRpc3Bs cyB7CisJCQlpZiBlcnIgOj0geC5WZGlzcGxzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJ CQkJcmV0dXJuIGVycgorCQkJfQorCQl9CisJfQorCXguVnNuZHMgPSBuaWwKKwlpZiBudW1Wc25k cyA6PSBpbnQoeGMubnVtX3ZzbmRzKTsgbnVtVnNuZHMgPiAwIHsKKwkJY1ZzbmRzIDo9ICgqWzEg PDwgMjhdQy5saWJ4bF9kZXZpY2VfdnNuZCkodW5zYWZlLlBvaW50ZXIoeGMudnNuZHMpKVs6bnVt VnNuZHM6bnVtVnNuZHNdCisJCXguVnNuZHMgPSBtYWtlKFtdRGV2aWNlVnNuZCwgbnVtVnNuZHMp CisJCWZvciBpLCB2IDo9IHJhbmdlIGNWc25kcyB7CisJCQlpZiBlcnIgOj0geC5Wc25kc1tpXS5m cm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KKwkJfQorCX0KKwl4 LkNoYW5uZWxzID0gbmlsCisJaWYgbnVtQ2hhbm5lbHMgOj0gaW50KHhjLm51bV9jaGFubmVscyk7 IG51bUNoYW5uZWxzID4gMCB7CisJCWNDaGFubmVscyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2 aWNlX2NoYW5uZWwpKHVuc2FmZS5Qb2ludGVyKHhjLmNoYW5uZWxzKSlbOm51bUNoYW5uZWxzOm51 bUNoYW5uZWxzXQorCQl4LkNoYW5uZWxzID0gbWFrZShbXURldmljZUNoYW5uZWwsIG51bUNoYW5u ZWxzKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjQ2hhbm5lbHMgeworCQkJaWYgZXJyIDo9IHguQ2hh bm5lbHNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CisJ CX0KKwl9CisJeC5Vc2JjdHJscyA9IG5pbAorCWlmIG51bVVzYmN0cmxzIDo9IGludCh4Yy5udW1f dXNiY3RybHMpOyBudW1Vc2JjdHJscyA+IDAgeworCQljVXNiY3RybHMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX2RldmljZV91c2JjdHJsKSh1bnNhZmUuUG9pbnRlcih4Yy51c2JjdHJscykpWzpudW1V c2JjdHJsczpudW1Vc2JjdHJsc10KKwkJeC5Vc2JjdHJscyA9IG1ha2UoW11EZXZpY2VVc2JjdHJs LCBudW1Vc2JjdHJscykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1VzYmN0cmxzIHsKKwkJCWlmIGVy ciA6PSB4LlVzYmN0cmxzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVy cgorCQkJfQorCQl9CisJfQorCXguVXNiZGV2cyA9IG5pbAorCWlmIG51bVVzYmRldnMgOj0gaW50 KHhjLm51bV91c2JkZXZzKTsgbnVtVXNiZGV2cyA+IDAgeworCQljVXNiZGV2cyA6PSAoKlsxIDw8 IDI4XUMubGlieGxfZGV2aWNlX3VzYmRldikodW5zYWZlLlBvaW50ZXIoeGMudXNiZGV2cykpWzpu dW1Vc2JkZXZzOm51bVVzYmRldnNdCisJCXguVXNiZGV2cyA9IG1ha2UoW11EZXZpY2VVc2JkZXYs IG51bVVzYmRldnMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNVc2JkZXZzIHsKKwkJCWlmIGVyciA6 PSB4LlVzYmRldnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJ CQl9CiAJCX0KIAl9CiAJeC5PblBvd2Vyb2ZmID0gQWN0aW9uT25TaHV0ZG93bih4Yy5vbl9wb3dl cm9mZikKQEAgLTIyMjIsMTg1ICsyMjkxLDIwMCBAQCBmdW5jICh4ICpEb21haW5Db25maWcpIHRv QygpICh4YyBDLmxpYnhsX2RvbWFpbl9jb25maWcsIGVyciBlcnJvcikgewogCQlDLmxpYnhsX2Rv bWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCiAJCXJldHVybiB4YywgZXJyCiAJfQotCW51bURpc2tz IDo9IGxlbih4LkRpc2tzKQotCXhjLmRpc2tzID0gKCpDLmxpYnhsX2RldmljZV9kaXNrKShDLm1h bGxvYyhDLnVsb25nKG51bURpc2tzKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9kaXNrKSkKLQl4 Yy5udW1fZGlza3MgPSBDLmludChudW1EaXNrcykKLQljRGlza3MgOj0gKCpbMSA8PCAyOF1DLmxp YnhsX2RldmljZV9kaXNrKSh1bnNhZmUuUG9pbnRlcih4Yy5kaXNrcykpWzpudW1EaXNrczpudW1E aXNrc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LkRpc2tzIHsKLQkJdG1wLCBlcnIgOj0gdi50b0Mo KQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZ4 YykKLQkJCXJldHVybiB4YywgZXJyCi0JCX0KLQkJY0Rpc2tzW2ldID0gdG1wCi0JfQotCW51bU5p Y3MgOj0gbGVuKHguTmljcykKLQl4Yy5uaWNzID0gKCpDLmxpYnhsX2RldmljZV9uaWMpKEMubWFs bG9jKEMudWxvbmcobnVtTmljcykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2VfbmljKSkKLQl4Yy5u dW1fbmljcyA9IEMuaW50KG51bU5pY3MpCi0JY05pY3MgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rl dmljZV9uaWMpKHVuc2FmZS5Qb2ludGVyKHhjLm5pY3MpKVs6bnVtTmljczpudW1OaWNzXQotCWZv ciBpLCB2IDo9IHJhbmdlIHguTmljcyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJy ICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCi0JCQlyZXR1 cm4geGMsIGVycgotCQl9Ci0JCWNOaWNzW2ldID0gdG1wCi0JfQotCW51bVBjaWRldnMgOj0gbGVu KHguUGNpZGV2cykKLQl4Yy5wY2lkZXZzID0gKCpDLmxpYnhsX2RldmljZV9wY2kpKEMubWFsbG9j KEMudWxvbmcobnVtUGNpZGV2cykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2VfcGNpKSkKLQl4Yy5u dW1fcGNpZGV2cyA9IEMuaW50KG51bVBjaWRldnMpCi0JY1BjaWRldnMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX2RldmljZV9wY2kpKHVuc2FmZS5Qb2ludGVyKHhjLnBjaWRldnMpKVs6bnVtUGNpZGV2 czpudW1QY2lkZXZzXQotCWZvciBpLCB2IDo9IHJhbmdlIHguUGNpZGV2cyB7Ci0JCXRtcCwgZXJy IDo9IHYudG9DKCkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdf ZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNQY2lkZXZzW2ldID0gdG1w Ci0JfQotCW51bVJkbXMgOj0gbGVuKHguUmRtcykKLQl4Yy5yZG1zID0gKCpDLmxpYnhsX2Rldmlj ZV9yZG0pKEMubWFsbG9jKEMudWxvbmcobnVtUmRtcykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2Vf cmRtKSkKLQl4Yy5udW1fcmRtcyA9IEMuaW50KG51bVJkbXMpCi0JY1JkbXMgOj0gKCpbMSA8PCAy OF1DLmxpYnhsX2RldmljZV9yZG0pKHVuc2FmZS5Qb2ludGVyKHhjLnJkbXMpKVs6bnVtUmRtczpu dW1SZG1zXQotCWZvciBpLCB2IDo9IHJhbmdlIHguUmRtcyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9D KCkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgm eGMpCi0JCQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNSZG1zW2ldID0gdG1wCi0JfQotCW51bUR0 ZGV2cyA6PSBsZW4oeC5EdGRldnMpCi0JeGMuZHRkZXZzID0gKCpDLmxpYnhsX2RldmljZV9kdGRl dikoQy5tYWxsb2MoQy51bG9uZyhudW1EdGRldnMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX2R0 ZGV2KSkKLQl4Yy5udW1fZHRkZXZzID0gQy5pbnQobnVtRHRkZXZzKQotCWNEdGRldnMgOj0gKCpb MSA8PCAyOF1DLmxpYnhsX2RldmljZV9kdGRldikodW5zYWZlLlBvaW50ZXIoeGMuZHRkZXZzKSlb Om51bUR0ZGV2czpudW1EdGRldnNdCi0JZm9yIGksIHYgOj0gcmFuZ2UgeC5EdGRldnMgewotCQl0 bXAsIGVyciA6PSB2LnRvQygpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJQy5saWJ4bF9kb21haW5f Y29uZmlnX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKLQkJfQotCQljRHRkZXZzW2ld ID0gdG1wCi0JfQotCW51bVZmYnMgOj0gbGVuKHguVmZicykKLQl4Yy52ZmJzID0gKCpDLmxpYnhs X2RldmljZV92ZmIpKEMubWFsbG9jKEMudWxvbmcobnVtVmZicykgKiBDLnNpemVvZl9saWJ4bF9k ZXZpY2VfdmZiKSkKLQl4Yy5udW1fdmZicyA9IEMuaW50KG51bVZmYnMpCi0JY1ZmYnMgOj0gKCpb MSA8PCAyOF1DLmxpYnhsX2RldmljZV92ZmIpKHVuc2FmZS5Qb2ludGVyKHhjLnZmYnMpKVs6bnVt VmZiczpudW1WZmJzXQotCWZvciBpLCB2IDo9IHJhbmdlIHguVmZicyB7Ci0JCXRtcCwgZXJyIDo9 IHYudG9DKCkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlz cG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNWZmJzW2ldID0gdG1wCi0JfQot CW51bVZrYnMgOj0gbGVuKHguVmticykKLQl4Yy52a2JzID0gKCpDLmxpYnhsX2RldmljZV92a2Ip KEMubWFsbG9jKEMudWxvbmcobnVtVmticykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2VfdmtiKSkK LQl4Yy5udW1fdmticyA9IEMuaW50KG51bVZrYnMpCi0JY1ZrYnMgOj0gKCpbMSA8PCAyOF1DLmxp YnhsX2RldmljZV92a2IpKHVuc2FmZS5Qb2ludGVyKHhjLnZrYnMpKVs6bnVtVmticzpudW1Wa2Jz XQotCWZvciBpLCB2IDo9IHJhbmdlIHguVmticyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJ aWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCi0J CQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNWa2JzW2ldID0gdG1wCi0JfQotCW51bVZ0cG1zIDo9 IGxlbih4LlZ0cG1zKQotCXhjLnZ0cG1zID0gKCpDLmxpYnhsX2RldmljZV92dHBtKShDLm1hbGxv YyhDLnVsb25nKG51bVZ0cG1zKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV92dHBtKSkKLQl4Yy5u dW1fdnRwbXMgPSBDLmludChudW1WdHBtcykKLQljVnRwbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhs X2RldmljZV92dHBtKSh1bnNhZmUuUG9pbnRlcih4Yy52dHBtcykpWzpudW1WdHBtczpudW1WdHBt c10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LlZ0cG1zIHsKLQkJdG1wLCBlcnIgOj0gdi50b0MoKQot CQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZ4YykK LQkJCXJldHVybiB4YywgZXJyCi0JCX0KLQkJY1Z0cG1zW2ldID0gdG1wCi0JfQotCW51bVA5UyA6 PSBsZW4oeC5QOVMpCi0JeGMucDlzID0gKCpDLmxpYnhsX2RldmljZV9wOSkoQy5tYWxsb2MoQy51 bG9uZyhudW1QOVMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX3A5KSkKLQl4Yy5udW1fcDlzID0g Qy5pbnQobnVtUDlTKQotCWNQOVMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wOSkodW5z YWZlLlBvaW50ZXIoeGMucDlzKSlbOm51bVA5UzpudW1QOVNdCi0JZm9yIGksIHYgOj0gcmFuZ2Ug eC5QOVMgewotCQl0bXAsIGVyciA6PSB2LnRvQygpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJQy5s aWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQotCQkJcmV0dXJuIHhjLCBlcnIKLQkJfQot CQljUDlTW2ldID0gdG1wCi0JfQotCW51bVB2Y2FsbHNpZnMgOj0gbGVuKHguUHZjYWxsc2lmcykK LQl4Yy5wdmNhbGxzaWZzID0gKCpDLmxpYnhsX2RldmljZV9wdmNhbGxzaWYpKEMubWFsbG9jKEMu dWxvbmcobnVtUHZjYWxsc2lmcykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2VfcHZjYWxsc2lmKSkK LQl4Yy5udW1fcHZjYWxsc2lmcyA9IEMuaW50KG51bVB2Y2FsbHNpZnMpCi0JY1B2Y2FsbHNpZnMg Oj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wdmNhbGxzaWYpKHVuc2FmZS5Qb2ludGVyKHhj LnB2Y2FsbHNpZnMpKVs6bnVtUHZjYWxsc2lmczpudW1QdmNhbGxzaWZzXQotCWZvciBpLCB2IDo9 IHJhbmdlIHguUHZjYWxsc2lmcyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9 IG5pbCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4g eGMsIGVycgotCQl9Ci0JCWNQdmNhbGxzaWZzW2ldID0gdG1wCi0JfQotCW51bVZkaXNwbHMgOj0g bGVuKHguVmRpc3BscykKLQl4Yy52ZGlzcGxzID0gKCpDLmxpYnhsX2RldmljZV92ZGlzcGwpKEMu bWFsbG9jKEMudWxvbmcobnVtVmRpc3BscykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2VfdmRpc3Bs KSkKLQl4Yy5udW1fdmRpc3BscyA9IEMuaW50KG51bVZkaXNwbHMpCi0JY1ZkaXNwbHMgOj0gKCpb MSA8PCAyOF1DLmxpYnhsX2RldmljZV92ZGlzcGwpKHVuc2FmZS5Qb2ludGVyKHhjLnZkaXNwbHMp KVs6bnVtVmRpc3BsczpudW1WZGlzcGxzXQotCWZvciBpLCB2IDo9IHJhbmdlIHguVmRpc3BscyB7 Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX2Rv bWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMsIGVycgotCQl9Ci0JCWNWZGlz cGxzW2ldID0gdG1wCi0JfQotCW51bVZzbmRzIDo9IGxlbih4LlZzbmRzKQotCXhjLnZzbmRzID0g KCpDLmxpYnhsX2RldmljZV92c25kKShDLm1hbGxvYyhDLnVsb25nKG51bVZzbmRzKSAqIEMuc2l6 ZW9mX2xpYnhsX2RldmljZV92c25kKSkKLQl4Yy5udW1fdnNuZHMgPSBDLmludChudW1Wc25kcykK LQljVnNuZHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92c25kKSh1bnNhZmUuUG9pbnRl cih4Yy52c25kcykpWzpudW1Wc25kczpudW1Wc25kc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LlZz bmRzIHsKLQkJdG1wLCBlcnIgOj0gdi50b0MoKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGli eGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCi0JCX0KLQkJ Y1ZzbmRzW2ldID0gdG1wCi0JfQotCW51bUNoYW5uZWxzIDo9IGxlbih4LkNoYW5uZWxzKQotCXhj LmNoYW5uZWxzID0gKCpDLmxpYnhsX2RldmljZV9jaGFubmVsKShDLm1hbGxvYyhDLnVsb25nKG51 bUNoYW5uZWxzKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9jaGFubmVsKSkKLQl4Yy5udW1fY2hh bm5lbHMgPSBDLmludChudW1DaGFubmVscykKLQljQ2hhbm5lbHMgOj0gKCpbMSA8PCAyOF1DLmxp YnhsX2RldmljZV9jaGFubmVsKSh1bnNhZmUuUG9pbnRlcih4Yy5jaGFubmVscykpWzpudW1DaGFu bmVsczpudW1DaGFubmVsc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LkNoYW5uZWxzIHsKLQkJdG1w LCBlcnIgOj0gdi50b0MoKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGlieGxfZG9tYWluX2Nv bmZpZ19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCi0JCX0KLQkJY0NoYW5uZWxzW2ld ID0gdG1wCi0JfQotCW51bVVzYmN0cmxzIDo9IGxlbih4LlVzYmN0cmxzKQotCXhjLnVzYmN0cmxz ID0gKCpDLmxpYnhsX2RldmljZV91c2JjdHJsKShDLm1hbGxvYyhDLnVsb25nKG51bVVzYmN0cmxz KSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV91c2JjdHJsKSkKLQl4Yy5udW1fdXNiY3RybHMgPSBD LmludChudW1Vc2JjdHJscykKLQljVXNiY3RybHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rldmlj ZV91c2JjdHJsKSh1bnNhZmUuUG9pbnRlcih4Yy51c2JjdHJscykpWzpudW1Vc2JjdHJsczpudW1V c2JjdHJsc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LlVzYmN0cmxzIHsKLQkJdG1wLCBlcnIgOj0g di50b0MoKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCUMubGlieGxfZG9tYWluX2NvbmZpZ19kaXNw b3NlKCZ4YykKLQkJCXJldHVybiB4YywgZXJyCi0JCX0KLQkJY1VzYmN0cmxzW2ldID0gdG1wCi0J fQotCW51bVVzYmRldnMgOj0gbGVuKHguVXNiZGV2cykKLQl4Yy51c2JkZXZzID0gKCpDLmxpYnhs X2RldmljZV91c2JkZXYpKEMubWFsbG9jKEMudWxvbmcobnVtVXNiZGV2cykgKiBDLnNpemVvZl9s aWJ4bF9kZXZpY2VfdXNiZGV2KSkKLQl4Yy5udW1fdXNiZGV2cyA9IEMuaW50KG51bVVzYmRldnMp Ci0JY1VzYmRldnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV91c2JkZXYpKHVuc2FmZS5Q b2ludGVyKHhjLnVzYmRldnMpKVs6bnVtVXNiZGV2czpudW1Vc2JkZXZzXQotCWZvciBpLCB2IDo9 IHJhbmdlIHguVXNiZGV2cyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkKLQkJaWYgZXJyICE9IG5p bCB7Ci0JCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCi0JCQlyZXR1cm4geGMs IGVycgorCWlmIG51bURpc2tzIDo9IGxlbih4LkRpc2tzKTsgbnVtRGlza3MgPiAwIHsKKwkJeGMu ZGlza3MgPSAoKkMubGlieGxfZGV2aWNlX2Rpc2spKEMubWFsbG9jKEMudWxvbmcobnVtRGlza3Mp ICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX2Rpc2spKQorCQl4Yy5udW1fZGlza3MgPSBDLmludChu dW1EaXNrcykKKwkJY0Rpc2tzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfZGlzaykodW5z YWZlLlBvaW50ZXIoeGMuZGlza3MpKVs6bnVtRGlza3M6bnVtRGlza3NdCisJCWZvciBpLCB2IDo9 IHJhbmdlIHguRGlza3MgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQorCQkJaWYgZXJyICE9IG5p bCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQkJCXJldHVybiB4 YywgZXJyCisJCQl9CisJCQljRGlza3NbaV0gPSB0bXAKKwkJfQorCX0KKwlpZiBudW1OaWNzIDo9 IGxlbih4Lk5pY3MpOyBudW1OaWNzID4gMCB7CisJCXhjLm5pY3MgPSAoKkMubGlieGxfZGV2aWNl X25pYykoQy5tYWxsb2MoQy51bG9uZyhudW1OaWNzKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9u aWMpKQorCQl4Yy5udW1fbmljcyA9IEMuaW50KG51bU5pY3MpCisJCWNOaWNzIDo9ICgqWzEgPDwg MjhdQy5saWJ4bF9kZXZpY2VfbmljKSh1bnNhZmUuUG9pbnRlcih4Yy5uaWNzKSlbOm51bU5pY3M6 bnVtTmljc10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5OaWNzIHsKKwkJCXRtcCwgZXJyIDo9IHYu dG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2NvbmZpZ19kaXNw b3NlKCZ4YykKKwkJCQlyZXR1cm4geGMsIGVycgorCQkJfQorCQkJY05pY3NbaV0gPSB0bXAKKwkJ fQorCX0KKwlpZiBudW1QY2lkZXZzIDo9IGxlbih4LlBjaWRldnMpOyBudW1QY2lkZXZzID4gMCB7 CisJCXhjLnBjaWRldnMgPSAoKkMubGlieGxfZGV2aWNlX3BjaSkoQy5tYWxsb2MoQy51bG9uZyhu dW1QY2lkZXZzKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9wY2kpKQorCQl4Yy5udW1fcGNpZGV2 cyA9IEMuaW50KG51bVBjaWRldnMpCisJCWNQY2lkZXZzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9k ZXZpY2VfcGNpKSh1bnNhZmUuUG9pbnRlcih4Yy5wY2lkZXZzKSlbOm51bVBjaWRldnM6bnVtUGNp ZGV2c10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5QY2lkZXZzIHsKKwkJCXRtcCwgZXJyIDo9IHYu dG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2NvbmZpZ19kaXNw b3NlKCZ4YykKKwkJCQlyZXR1cm4geGMsIGVycgorCQkJfQorCQkJY1BjaWRldnNbaV0gPSB0bXAK KwkJfQorCX0KKwlpZiBudW1SZG1zIDo9IGxlbih4LlJkbXMpOyBudW1SZG1zID4gMCB7CisJCXhj LnJkbXMgPSAoKkMubGlieGxfZGV2aWNlX3JkbSkoQy5tYWxsb2MoQy51bG9uZyhudW1SZG1zKSAq IEMuc2l6ZW9mX2xpYnhsX2RldmljZV9yZG0pKQorCQl4Yy5udW1fcmRtcyA9IEMuaW50KG51bVJk bXMpCisJCWNSZG1zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfcmRtKSh1bnNhZmUuUG9p bnRlcih4Yy5yZG1zKSlbOm51bVJkbXM6bnVtUmRtc10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5S ZG1zIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMu bGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZ4YykKKwkJCQlyZXR1cm4geGMsIGVycgorCQkJ fQorCQkJY1JkbXNbaV0gPSB0bXAKKwkJfQorCX0KKwlpZiBudW1EdGRldnMgOj0gbGVuKHguRHRk ZXZzKTsgbnVtRHRkZXZzID4gMCB7CisJCXhjLmR0ZGV2cyA9ICgqQy5saWJ4bF9kZXZpY2VfZHRk ZXYpKEMubWFsbG9jKEMudWxvbmcobnVtRHRkZXZzKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9k dGRldikpCisJCXhjLm51bV9kdGRldnMgPSBDLmludChudW1EdGRldnMpCisJCWNEdGRldnMgOj0g KCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9kdGRldikodW5zYWZlLlBvaW50ZXIoeGMuZHRkZXZz KSlbOm51bUR0ZGV2czpudW1EdGRldnNdCisJCWZvciBpLCB2IDo9IHJhbmdlIHguRHRkZXZzIHsK KwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxf ZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZ4YykKKwkJCQlyZXR1cm4geGMsIGVycgorCQkJfQorCQkJ Y0R0ZGV2c1tpXSA9IHRtcAorCQl9CisJfQorCWlmIG51bVZmYnMgOj0gbGVuKHguVmZicyk7IG51 bVZmYnMgPiAwIHsKKwkJeGMudmZicyA9ICgqQy5saWJ4bF9kZXZpY2VfdmZiKShDLm1hbGxvYyhD LnVsb25nKG51bVZmYnMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX3ZmYikpCisJCXhjLm51bV92 ZmJzID0gQy5pbnQobnVtVmZicykKKwkJY1ZmYnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rldmlj ZV92ZmIpKHVuc2FmZS5Qb2ludGVyKHhjLnZmYnMpKVs6bnVtVmZiczpudW1WZmJzXQorCQlmb3Ig aSwgdiA6PSByYW5nZSB4LlZmYnMgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQorCQkJaWYgZXJy ICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQkJCXJl dHVybiB4YywgZXJyCisJCQl9CisJCQljVmZic1tpXSA9IHRtcAorCQl9CisJfQorCWlmIG51bVZr YnMgOj0gbGVuKHguVmticyk7IG51bVZrYnMgPiAwIHsKKwkJeGMudmticyA9ICgqQy5saWJ4bF9k ZXZpY2VfdmtiKShDLm1hbGxvYyhDLnVsb25nKG51bVZrYnMpICogQy5zaXplb2ZfbGlieGxfZGV2 aWNlX3ZrYikpCisJCXhjLm51bV92a2JzID0gQy5pbnQobnVtVmticykKKwkJY1ZrYnMgOj0gKCpb MSA8PCAyOF1DLmxpYnhsX2RldmljZV92a2IpKHVuc2FmZS5Qb2ludGVyKHhjLnZrYnMpKVs6bnVt VmticzpudW1Wa2JzXQorCQlmb3IgaSwgdiA6PSByYW5nZSB4LlZrYnMgeworCQkJdG1wLCBlcnIg Oj0gdi50b0MoKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmln X2Rpc3Bvc2UoJnhjKQorCQkJCXJldHVybiB4YywgZXJyCisJCQl9CisJCQljVmtic1tpXSA9IHRt cAorCQl9CisJfQorCWlmIG51bVZ0cG1zIDo9IGxlbih4LlZ0cG1zKTsgbnVtVnRwbXMgPiAwIHsK KwkJeGMudnRwbXMgPSAoKkMubGlieGxfZGV2aWNlX3Z0cG0pKEMubWFsbG9jKEMudWxvbmcobnVt VnRwbXMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX3Z0cG0pKQorCQl4Yy5udW1fdnRwbXMgPSBD LmludChudW1WdHBtcykKKwkJY1Z0cG1zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfdnRw bSkodW5zYWZlLlBvaW50ZXIoeGMudnRwbXMpKVs6bnVtVnRwbXM6bnVtVnRwbXNdCisJCWZvciBp LCB2IDo9IHJhbmdlIHguVnRwbXMgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQorCQkJaWYgZXJy ICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQkJCXJl dHVybiB4YywgZXJyCisJCQl9CisJCQljVnRwbXNbaV0gPSB0bXAKKwkJfQorCX0KKwlpZiBudW1Q OVMgOj0gbGVuKHguUDlTKTsgbnVtUDlTID4gMCB7CisJCXhjLnA5cyA9ICgqQy5saWJ4bF9kZXZp Y2VfcDkpKEMubWFsbG9jKEMudWxvbmcobnVtUDlTKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9w OSkpCisJCXhjLm51bV9wOXMgPSBDLmludChudW1QOVMpCisJCWNQOVMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX2RldmljZV9wOSkodW5zYWZlLlBvaW50ZXIoeGMucDlzKSlbOm51bVA5UzpudW1QOVNd CisJCWZvciBpLCB2IDo9IHJhbmdlIHguUDlTIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJ CWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZ4YykK KwkJCQlyZXR1cm4geGMsIGVycgorCQkJfQorCQkJY1A5U1tpXSA9IHRtcAorCQl9CisJfQorCWlm IG51bVB2Y2FsbHNpZnMgOj0gbGVuKHguUHZjYWxsc2lmcyk7IG51bVB2Y2FsbHNpZnMgPiAwIHsK KwkJeGMucHZjYWxsc2lmcyA9ICgqQy5saWJ4bF9kZXZpY2VfcHZjYWxsc2lmKShDLm1hbGxvYyhD LnVsb25nKG51bVB2Y2FsbHNpZnMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX3B2Y2FsbHNpZikp CisJCXhjLm51bV9wdmNhbGxzaWZzID0gQy5pbnQobnVtUHZjYWxsc2lmcykKKwkJY1B2Y2FsbHNp ZnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wdmNhbGxzaWYpKHVuc2FmZS5Qb2ludGVy KHhjLnB2Y2FsbHNpZnMpKVs6bnVtUHZjYWxsc2lmczpudW1QdmNhbGxzaWZzXQorCQlmb3IgaSwg diA6PSByYW5nZSB4LlB2Y2FsbHNpZnMgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQorCQkJaWYg ZXJyICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQkJ CXJldHVybiB4YywgZXJyCisJCQl9CisJCQljUHZjYWxsc2lmc1tpXSA9IHRtcAorCQl9CisJfQor CWlmIG51bVZkaXNwbHMgOj0gbGVuKHguVmRpc3Bscyk7IG51bVZkaXNwbHMgPiAwIHsKKwkJeGMu dmRpc3BscyA9ICgqQy5saWJ4bF9kZXZpY2VfdmRpc3BsKShDLm1hbGxvYyhDLnVsb25nKG51bVZk aXNwbHMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX3ZkaXNwbCkpCisJCXhjLm51bV92ZGlzcGxz ID0gQy5pbnQobnVtVmRpc3BscykKKwkJY1ZkaXNwbHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Rl dmljZV92ZGlzcGwpKHVuc2FmZS5Qb2ludGVyKHhjLnZkaXNwbHMpKVs6bnVtVmRpc3BsczpudW1W ZGlzcGxzXQorCQlmb3IgaSwgdiA6PSByYW5nZSB4LlZkaXNwbHMgeworCQkJdG1wLCBlcnIgOj0g di50b0MoKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rp c3Bvc2UoJnhjKQorCQkJCXJldHVybiB4YywgZXJyCisJCQl9CisJCQljVmRpc3Bsc1tpXSA9IHRt cAorCQl9CisJfQorCWlmIG51bVZzbmRzIDo9IGxlbih4LlZzbmRzKTsgbnVtVnNuZHMgPiAwIHsK KwkJeGMudnNuZHMgPSAoKkMubGlieGxfZGV2aWNlX3ZzbmQpKEMubWFsbG9jKEMudWxvbmcobnVt VnNuZHMpICogQy5zaXplb2ZfbGlieGxfZGV2aWNlX3ZzbmQpKQorCQl4Yy5udW1fdnNuZHMgPSBD LmludChudW1Wc25kcykKKwkJY1ZzbmRzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfdnNu ZCkodW5zYWZlLlBvaW50ZXIoeGMudnNuZHMpKVs6bnVtVnNuZHM6bnVtVnNuZHNdCisJCWZvciBp LCB2IDo9IHJhbmdlIHguVnNuZHMgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQorCQkJaWYgZXJy ICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhjKQorCQkJCXJl dHVybiB4YywgZXJyCisJCQl9CisJCQljVnNuZHNbaV0gPSB0bXAKKwkJfQorCX0KKwlpZiBudW1D aGFubmVscyA6PSBsZW4oeC5DaGFubmVscyk7IG51bUNoYW5uZWxzID4gMCB7CisJCXhjLmNoYW5u ZWxzID0gKCpDLmxpYnhsX2RldmljZV9jaGFubmVsKShDLm1hbGxvYyhDLnVsb25nKG51bUNoYW5u ZWxzKSAqIEMuc2l6ZW9mX2xpYnhsX2RldmljZV9jaGFubmVsKSkKKwkJeGMubnVtX2NoYW5uZWxz ID0gQy5pbnQobnVtQ2hhbm5lbHMpCisJCWNDaGFubmVscyA6PSAoKlsxIDw8IDI4XUMubGlieGxf ZGV2aWNlX2NoYW5uZWwpKHVuc2FmZS5Qb2ludGVyKHhjLmNoYW5uZWxzKSlbOm51bUNoYW5uZWxz Om51bUNoYW5uZWxzXQorCQlmb3IgaSwgdiA6PSByYW5nZSB4LkNoYW5uZWxzIHsKKwkJCXRtcCwg ZXJyIDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfZG9tYWluX2Nv bmZpZ19kaXNwb3NlKCZ4YykKKwkJCQlyZXR1cm4geGMsIGVycgorCQkJfQorCQkJY0NoYW5uZWxz W2ldID0gdG1wCisJCX0KKwl9CisJaWYgbnVtVXNiY3RybHMgOj0gbGVuKHguVXNiY3RybHMpOyBu dW1Vc2JjdHJscyA+IDAgeworCQl4Yy51c2JjdHJscyA9ICgqQy5saWJ4bF9kZXZpY2VfdXNiY3Ry bCkoQy5tYWxsb2MoQy51bG9uZyhudW1Vc2JjdHJscykgKiBDLnNpemVvZl9saWJ4bF9kZXZpY2Vf dXNiY3RybCkpCisJCXhjLm51bV91c2JjdHJscyA9IEMuaW50KG51bVVzYmN0cmxzKQorCQljVXNi Y3RybHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV91c2JjdHJsKSh1bnNhZmUuUG9pbnRl cih4Yy51c2JjdHJscykpWzpudW1Vc2JjdHJsczpudW1Vc2JjdHJsc10KKwkJZm9yIGksIHYgOj0g cmFuZ2UgeC5Vc2JjdHJscyB7CisJCQl0bXAsIGVyciA6PSB2LnRvQygpCisJCQlpZiBlcnIgIT0g bmlsIHsKKwkJCQlDLmxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmeGMpCisJCQkJcmV0dXJu IHhjLCBlcnIKKwkJCX0KKwkJCWNVc2JjdHJsc1tpXSA9IHRtcAorCQl9CisJfQorCWlmIG51bVVz YmRldnMgOj0gbGVuKHguVXNiZGV2cyk7IG51bVVzYmRldnMgPiAwIHsKKwkJeGMudXNiZGV2cyA9 ICgqQy5saWJ4bF9kZXZpY2VfdXNiZGV2KShDLm1hbGxvYyhDLnVsb25nKG51bVVzYmRldnMpICog Qy5zaXplb2ZfbGlieGxfZGV2aWNlX3VzYmRldikpCisJCXhjLm51bV91c2JkZXZzID0gQy5pbnQo bnVtVXNiZGV2cykKKwkJY1VzYmRldnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV91c2Jk ZXYpKHVuc2FmZS5Qb2ludGVyKHhjLnVzYmRldnMpKVs6bnVtVXNiZGV2czpudW1Vc2JkZXZzXQor CQlmb3IgaSwgdiA6PSByYW5nZSB4LlVzYmRldnMgeworCQkJdG1wLCBlcnIgOj0gdi50b0MoKQor CQkJaWYgZXJyICE9IG5pbCB7CisJCQkJQy5saWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJnhj KQorCQkJCXJldHVybiB4YywgZXJyCisJCQl9CisJCQljVXNiZGV2c1tpXSA9IHRtcAogCQl9Ci0J CWNVc2JkZXZzW2ldID0gdG1wCiAJfQogCXhjLm9uX3Bvd2Vyb2ZmID0gQy5saWJ4bF9hY3Rpb25f b25fc2h1dGRvd24oeC5PblBvd2Vyb2ZmKQogCXhjLm9uX3JlYm9vdCA9IEMubGlieGxfYWN0aW9u X29uX3NodXRkb3duKHguT25SZWJvb3QpCkBAIC0yNjU4LDEyICsyNzQyLDE0IEBAIGZ1bmMgKHgg KlZkaXNwbGluZm8pIGZyb21DKHhjICpDLmxpYnhsX3ZkaXNwbGluZm8pIGVycm9yIHsKIAl4LkRl dmlkID0gRGV2aWQoeGMuZGV2aWQpCiAJeC5TdGF0ZSA9IGludCh4Yy5zdGF0ZSkKIAl4LkJlQWxs b2MgPSBib29sKHhjLmJlX2FsbG9jKQotCW51bUNvbm5lY3RvcnMgOj0gaW50KHhjLm51bV9jb25u ZWN0b3JzKQotCWNDb25uZWN0b3JzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9jb25uZWN0b3JpbmZv KSh1bnNhZmUuUG9pbnRlcih4Yy5jb25uZWN0b3JzKSlbOm51bUNvbm5lY3RvcnM6bnVtQ29ubmVj dG9yc10KLQl4LkNvbm5lY3RvcnMgPSBtYWtlKFtdQ29ubmVjdG9yaW5mbywgbnVtQ29ubmVjdG9y cykKLQlmb3IgaSwgdiA6PSByYW5nZSBjQ29ubmVjdG9ycyB7Ci0JCWlmIGVyciA6PSB4LkNvbm5l Y3RvcnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LkNvbm5l Y3RvcnMgPSBuaWwKKwlpZiBudW1Db25uZWN0b3JzIDo9IGludCh4Yy5udW1fY29ubmVjdG9ycyk7 IG51bUNvbm5lY3RvcnMgPiAwIHsKKwkJY0Nvbm5lY3RvcnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhs X2Nvbm5lY3RvcmluZm8pKHVuc2FmZS5Qb2ludGVyKHhjLmNvbm5lY3RvcnMpKVs6bnVtQ29ubmVj dG9yczpudW1Db25uZWN0b3JzXQorCQl4LkNvbm5lY3RvcnMgPSBtYWtlKFtdQ29ubmVjdG9yaW5m bywgbnVtQ29ubmVjdG9ycykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY0Nvbm5lY3RvcnMgeworCQkJ aWYgZXJyIDo9IHguQ29ubmVjdG9yc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJl dHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtMjY3OSwxNyArMjc2NSwxOCBAQCBmdW5jICh4 ICpWZGlzcGxpbmZvKSB0b0MoKSAoeGMgQy5saWJ4bF92ZGlzcGxpbmZvLCBlcnIgZXJyb3IpIHsK IAl4Yy5kZXZpZCA9IEMubGlieGxfZGV2aWQoeC5EZXZpZCkKIAl4Yy5zdGF0ZSA9IEMuaW50KHgu U3RhdGUpCiAJeGMuYmVfYWxsb2MgPSBDLmJvb2woeC5CZUFsbG9jKQotCW51bUNvbm5lY3RvcnMg Oj0gbGVuKHguQ29ubmVjdG9ycykKLQl4Yy5jb25uZWN0b3JzID0gKCpDLmxpYnhsX2Nvbm5lY3Rv cmluZm8pKEMubWFsbG9jKEMudWxvbmcobnVtQ29ubmVjdG9ycykgKiBDLnNpemVvZl9saWJ4bF9j b25uZWN0b3JpbmZvKSkKLQl4Yy5udW1fY29ubmVjdG9ycyA9IEMuaW50KG51bUNvbm5lY3RvcnMp Ci0JY0Nvbm5lY3RvcnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Nvbm5lY3RvcmluZm8pKHVuc2Fm ZS5Qb2ludGVyKHhjLmNvbm5lY3RvcnMpKVs6bnVtQ29ubmVjdG9yczpudW1Db25uZWN0b3JzXQot CWZvciBpLCB2IDo9IHJhbmdlIHguQ29ubmVjdG9ycyB7Ci0JCXRtcCwgZXJyIDo9IHYudG9DKCkK LQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlDLmxpYnhsX3ZkaXNwbGluZm9fZGlzcG9zZSgmeGMpCi0J CQlyZXR1cm4geGMsIGVycgorCWlmIG51bUNvbm5lY3RvcnMgOj0gbGVuKHguQ29ubmVjdG9ycyk7 IG51bUNvbm5lY3RvcnMgPiAwIHsKKwkJeGMuY29ubmVjdG9ycyA9ICgqQy5saWJ4bF9jb25uZWN0 b3JpbmZvKShDLm1hbGxvYyhDLnVsb25nKG51bUNvbm5lY3RvcnMpICogQy5zaXplb2ZfbGlieGxf Y29ubmVjdG9yaW5mbykpCisJCXhjLm51bV9jb25uZWN0b3JzID0gQy5pbnQobnVtQ29ubmVjdG9y cykKKwkJY0Nvbm5lY3RvcnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Nvbm5lY3RvcmluZm8pKHVu c2FmZS5Qb2ludGVyKHhjLmNvbm5lY3RvcnMpKVs6bnVtQ29ubmVjdG9yczpudW1Db25uZWN0b3Jz XQorCQlmb3IgaSwgdiA6PSByYW5nZSB4LkNvbm5lY3RvcnMgeworCQkJdG1wLCBlcnIgOj0gdi50 b0MoKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJQy5saWJ4bF92ZGlzcGxpbmZvX2Rpc3Bvc2Uo JnhjKQorCQkJCXJldHVybiB4YywgZXJyCisJCQl9CisJCQljQ29ubmVjdG9yc1tpXSA9IHRtcAog CQl9Ci0JCWNDb25uZWN0b3JzW2ldID0gdG1wCiAJfQogCXJldHVybiB4YywgbmlsCiB9CkBAIC0y NzA5LDEyICsyNzk2LDE0IEBAIGZ1bmMgKHggKlN0cmVhbWluZm8pIHRvQygpICh4YyBDLmxpYnhs X3N0cmVhbWluZm8sIGVyciBlcnJvcikgewogfQogCiBmdW5jICh4ICpQY21pbmZvKSBmcm9tQyh4 YyAqQy5saWJ4bF9wY21pbmZvKSBlcnJvciB7Ci0JbnVtVnNuZFN0cmVhbXMgOj0gaW50KHhjLm51 bV92c25kX3N0cmVhbXMpCi0JY1N0cmVhbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3N0cmVhbWlu Zm8pKHVuc2FmZS5Qb2ludGVyKHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0cmVhbXM6bnVtVnNuZFN0 cmVhbXNdCi0JeC5TdHJlYW1zID0gbWFrZShbXVN0cmVhbWluZm8sIG51bVZzbmRTdHJlYW1zKQot CWZvciBpLCB2IDo9IHJhbmdlIGNTdHJlYW1zIHsKLQkJaWYgZXJyIDo9IHguU3RyZWFtc1tpXS5m cm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguU3RyZWFtcyA9IG5pbAor CWlmIG51bVZzbmRTdHJlYW1zIDo9IGludCh4Yy5udW1fdnNuZF9zdHJlYW1zKTsgbnVtVnNuZFN0 cmVhbXMgPiAwIHsKKwkJY1N0cmVhbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3N0cmVhbWluZm8p KHVuc2FmZS5Qb2ludGVyKHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0cmVhbXM6bnVtVnNuZFN0cmVh bXNdCisJCXguU3RyZWFtcyA9IG1ha2UoW11TdHJlYW1pbmZvLCBudW1Wc25kU3RyZWFtcykKKwkJ Zm9yIGksIHYgOj0gcmFuZ2UgY1N0cmVhbXMgeworCQkJaWYgZXJyIDo9IHguU3RyZWFtc1tpXS5m cm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApA QCAtMjcyMywxNyArMjgxMiwxOCBAQCBmdW5jICh4ICpQY21pbmZvKSBmcm9tQyh4YyAqQy5saWJ4 bF9wY21pbmZvKSBlcnJvciB7CiAKIGZ1bmMgKHggKlBjbWluZm8pIHRvQygpICh4YyBDLmxpYnhs X3BjbWluZm8sIGVyciBlcnJvcikgewogCUMubGlieGxfcGNtaW5mb19pbml0KCZ4YykKLQludW1W c25kU3RyZWFtcyA6PSBsZW4oeC5TdHJlYW1zKQotCXhjLnN0cmVhbXMgPSAoKkMubGlieGxfc3Ry ZWFtaW5mbykoQy5tYWxsb2MoQy51bG9uZyhudW1Wc25kU3RyZWFtcykgKiBDLnNpemVvZl9saWJ4 bF9zdHJlYW1pbmZvKSkKLQl4Yy5udW1fdnNuZF9zdHJlYW1zID0gQy5pbnQobnVtVnNuZFN0cmVh bXMpCi0JY1N0cmVhbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3N0cmVhbWluZm8pKHVuc2FmZS5Q b2ludGVyKHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0cmVhbXM6bnVtVnNuZFN0cmVhbXNdCi0JZm9y IGksIHYgOj0gcmFuZ2UgeC5TdHJlYW1zIHsKLQkJdG1wLCBlcnIgOj0gdi50b0MoKQotCQlpZiBl cnIgIT0gbmlsIHsKLQkJCUMubGlieGxfcGNtaW5mb19kaXNwb3NlKCZ4YykKLQkJCXJldHVybiB4 YywgZXJyCisJaWYgbnVtVnNuZFN0cmVhbXMgOj0gbGVuKHguU3RyZWFtcyk7IG51bVZzbmRTdHJl YW1zID4gMCB7CisJCXhjLnN0cmVhbXMgPSAoKkMubGlieGxfc3RyZWFtaW5mbykoQy5tYWxsb2Mo Qy51bG9uZyhudW1Wc25kU3RyZWFtcykgKiBDLnNpemVvZl9saWJ4bF9zdHJlYW1pbmZvKSkKKwkJ eGMubnVtX3ZzbmRfc3RyZWFtcyA9IEMuaW50KG51bVZzbmRTdHJlYW1zKQorCQljU3RyZWFtcyA6 PSAoKlsxIDw8IDI4XUMubGlieGxfc3RyZWFtaW5mbykodW5zYWZlLlBvaW50ZXIoeGMuc3RyZWFt cykpWzpudW1Wc25kU3RyZWFtczpudW1Wc25kU3RyZWFtc10KKwkJZm9yIGksIHYgOj0gcmFuZ2Ug eC5TdHJlYW1zIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9DKCkKKwkJCWlmIGVyciAhPSBuaWwgewor CQkJCUMubGlieGxfcGNtaW5mb19kaXNwb3NlKCZ4YykKKwkJCQlyZXR1cm4geGMsIGVycgorCQkJ fQorCQkJY1N0cmVhbXNbaV0gPSB0bXAKIAkJfQotCQljU3RyZWFtc1tpXSA9IHRtcAogCX0KIAly ZXR1cm4geGMsIG5pbAogfQpAQCAtMjc0NSwxMiArMjgzNSwxNCBAQCBmdW5jICh4ICpWc25kaW5m bykgZnJvbUMoeGMgKkMubGlieGxfdnNuZGluZm8pIGVycm9yIHsKIAl4LkZyb250ZW5kSWQgPSB1 aW50MzIoeGMuZnJvbnRlbmRfaWQpCiAJeC5EZXZpZCA9IERldmlkKHhjLmRldmlkKQogCXguU3Rh dGUgPSBpbnQoeGMuc3RhdGUpCi0JbnVtVnNuZFBjbXMgOj0gaW50KHhjLm51bV92c25kX3BjbXMp Ci0JY1BjbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3BjbWluZm8pKHVuc2FmZS5Qb2ludGVyKHhj LnBjbXMpKVs6bnVtVnNuZFBjbXM6bnVtVnNuZFBjbXNdCi0JeC5QY21zID0gbWFrZShbXVBjbWlu Zm8sIG51bVZzbmRQY21zKQotCWZvciBpLCB2IDo9IHJhbmdlIGNQY21zIHsKLQkJaWYgZXJyIDo9 IHguUGNtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguUGNt cyA9IG5pbAorCWlmIG51bVZzbmRQY21zIDo9IGludCh4Yy5udW1fdnNuZF9wY21zKTsgbnVtVnNu ZFBjbXMgPiAwIHsKKwkJY1BjbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3BjbWluZm8pKHVuc2Fm ZS5Qb2ludGVyKHhjLnBjbXMpKVs6bnVtVnNuZFBjbXM6bnVtVnNuZFBjbXNdCisJCXguUGNtcyA9 IG1ha2UoW11QY21pbmZvLCBudW1Wc25kUGNtcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1BjbXMg eworCQkJaWYgZXJyIDo9IHguUGNtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJl dHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtMjc2NSwxNyArMjg1NywxOCBAQCBmdW5jICh4 ICpWc25kaW5mbykgdG9DKCkgKHhjIEMubGlieGxfdnNuZGluZm8sIGVyciBlcnJvcikgewogCXhj LmZyb250ZW5kX2lkID0gQy51aW50MzJfdCh4LkZyb250ZW5kSWQpCiAJeGMuZGV2aWQgPSBDLmxp YnhsX2RldmlkKHguRGV2aWQpCiAJeGMuc3RhdGUgPSBDLmludCh4LlN0YXRlKQotCW51bVZzbmRQ Y21zIDo9IGxlbih4LlBjbXMpCi0JeGMucGNtcyA9ICgqQy5saWJ4bF9wY21pbmZvKShDLm1hbGxv YyhDLnVsb25nKG51bVZzbmRQY21zKSAqIEMuc2l6ZW9mX2xpYnhsX3BjbWluZm8pKQotCXhjLm51 bV92c25kX3BjbXMgPSBDLmludChudW1Wc25kUGNtcykKLQljUGNtcyA6PSAoKlsxIDw8IDI4XUMu bGlieGxfcGNtaW5mbykodW5zYWZlLlBvaW50ZXIoeGMucGNtcykpWzpudW1Wc25kUGNtczpudW1W c25kUGNtc10KLQlmb3IgaSwgdiA6PSByYW5nZSB4LlBjbXMgewotCQl0bXAsIGVyciA6PSB2LnRv QygpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJQy5saWJ4bF92c25kaW5mb19kaXNwb3NlKCZ4YykK LQkJCXJldHVybiB4YywgZXJyCisJaWYgbnVtVnNuZFBjbXMgOj0gbGVuKHguUGNtcyk7IG51bVZz bmRQY21zID4gMCB7CisJCXhjLnBjbXMgPSAoKkMubGlieGxfcGNtaW5mbykoQy5tYWxsb2MoQy51 bG9uZyhudW1Wc25kUGNtcykgKiBDLnNpemVvZl9saWJ4bF9wY21pbmZvKSkKKwkJeGMubnVtX3Zz bmRfcGNtcyA9IEMuaW50KG51bVZzbmRQY21zKQorCQljUGNtcyA6PSAoKlsxIDw8IDI4XUMubGli eGxfcGNtaW5mbykodW5zYWZlLlBvaW50ZXIoeGMucGNtcykpWzpudW1Wc25kUGNtczpudW1Wc25k UGNtc10KKwkJZm9yIGksIHYgOj0gcmFuZ2UgeC5QY21zIHsKKwkJCXRtcCwgZXJyIDo9IHYudG9D KCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCUMubGlieGxfdnNuZGluZm9fZGlzcG9zZSgmeGMp CisJCQkJcmV0dXJuIHhjLCBlcnIKKwkJCX0KKwkJCWNQY21zW2ldID0gdG1wCiAJCX0KLQkJY1Bj bXNbaV0gPSB0bXAKIAl9CiAJcmV0dXJuIHhjLCBuaWwKIH0KQEAgLTI4MDksMTEgKzI5MDIsMTMg QEAgZnVuYyAoeCAqVmtiaW5mbykgdG9DKCkgKHhjIEMubGlieGxfdmtiaW5mbywgZXJyIGVycm9y KSB7CiBmdW5jICh4ICpOdW1haW5mbykgZnJvbUMoeGMgKkMubGlieGxfbnVtYWluZm8pIGVycm9y IHsKIAl4LlNpemUgPSB1aW50NjQoeGMuc2l6ZSkKIAl4LkZyZWUgPSB1aW50NjQoeGMuZnJlZSkK LQludW1EaXN0cyA6PSBpbnQoeGMubnVtX2Rpc3RzKQotCWNEaXN0cyA6PSAoKlsxIDw8IDI4XUMu dWludDMyX3QpKHVuc2FmZS5Qb2ludGVyKHhjLmRpc3RzKSlbOm51bURpc3RzOm51bURpc3RzXQot CXguRGlzdHMgPSBtYWtlKFtddWludDMyLCBudW1EaXN0cykKLQlmb3IgaSwgdiA6PSByYW5nZSBj RGlzdHMgewotCQl4LkRpc3RzW2ldID0gdWludDMyKHYpCisJeC5EaXN0cyA9IG5pbAorCWlmIG51 bURpc3RzIDo9IGludCh4Yy5udW1fZGlzdHMpOyBudW1EaXN0cyA+IDAgeworCQljRGlzdHMgOj0g KCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1bnNhZmUuUG9pbnRlcih4Yy5kaXN0cykpWzpudW1EaXN0 czpudW1EaXN0c10KKwkJeC5EaXN0cyA9IG1ha2UoW111aW50MzIsIG51bURpc3RzKQorCQlmb3Ig aSwgdiA6PSByYW5nZSBjRGlzdHMgeworCQkJeC5EaXN0c1tpXSA9IHVpbnQzMih2KQorCQl9CiAJ fQogCiAJcmV0dXJuIG5pbApAQCAtMjgyMywxMiArMjkxOCwxMyBAQCBmdW5jICh4ICpOdW1haW5m bykgdG9DKCkgKHhjIEMubGlieGxfbnVtYWluZm8sIGVyciBlcnJvcikgewogCUMubGlieGxfbnVt YWluZm9faW5pdCgmeGMpCiAJeGMuc2l6ZSA9IEMudWludDY0X3QoeC5TaXplKQogCXhjLmZyZWUg PSBDLnVpbnQ2NF90KHguRnJlZSkKLQludW1EaXN0cyA6PSBsZW4oeC5EaXN0cykKLQl4Yy5kaXN0 cyA9ICgqQy51aW50MzJfdCkoQy5tYWxsb2MoQy5zaXplX3QobnVtRGlzdHMgKiBudW1EaXN0cykp KQotCXhjLm51bV9kaXN0cyA9IEMuaW50KG51bURpc3RzKQotCWNEaXN0cyA6PSAoKlsxIDw8IDI4 XUMudWludDMyX3QpKHVuc2FmZS5Qb2ludGVyKHhjLmRpc3RzKSlbOm51bURpc3RzOm51bURpc3Rz XQotCWZvciBpLCB2IDo9IHJhbmdlIHguRGlzdHMgewotCQljRGlzdHNbaV0gPSBDLnVpbnQzMl90 KHYpCisJaWYgbnVtRGlzdHMgOj0gbGVuKHguRGlzdHMpOyBudW1EaXN0cyA+IDAgeworCQl4Yy5k aXN0cyA9ICgqQy51aW50MzJfdCkoQy5tYWxsb2MoQy5zaXplX3QobnVtRGlzdHMgKiBudW1EaXN0 cykpKQorCQl4Yy5udW1fZGlzdHMgPSBDLmludChudW1EaXN0cykKKwkJY0Rpc3RzIDo9ICgqWzEg PDwgMjhdQy51aW50MzJfdCkodW5zYWZlLlBvaW50ZXIoeGMuZGlzdHMpKVs6bnVtRGlzdHM6bnVt RGlzdHNdCisJCWZvciBpLCB2IDo9IHJhbmdlIHguRGlzdHMgeworCQkJY0Rpc3RzW2ldID0gQy51 aW50MzJfdCh2KQorCQl9CiAJfQogCXJldHVybiB4YywgbmlsCiB9CkBAIC0yOTc2LDEyICszMDcy LDYgQEAgZnVuYyAoeCAqRXZlbnQpIGZyb21DKHhjICpDLmxpYnhsX2V2ZW50KSBlcnJvciB7CiAJ eC5Gb3JVc2VyID0gdWludDY0KHhjLmZvcl91c2VyKQogCXguVHlwZSA9IEV2ZW50VHlwZSh4Yy5f dHlwZSkKIAlzd2l0Y2ggeC5UeXBlIHsKLQljYXNlIEV2ZW50VHlwZU9wZXJhdGlvbkNvbXBsZXRl OgotCQl2YXIgdHlwZU9wZXJhdGlvbkNvbXBsZXRlIEV2ZW50VHlwZVVuaW9uT3BlcmF0aW9uQ29t cGxldGUKLQkJaWYgZXJyIDo9IHR5cGVPcGVyYXRpb25Db21wbGV0ZS5mcm9tQyh4Yyk7IGVyciAh PSBuaWwgewotCQkJcmV0dXJuIGVycgotCQl9Ci0JCXguVHlwZVVuaW9uID0gdHlwZU9wZXJhdGlv bkNvbXBsZXRlCiAJY2FzZSBFdmVudFR5cGVEb21haW5TaHV0ZG93bjoKIAkJdmFyIHR5cGVEb21h aW5TaHV0ZG93biBFdmVudFR5cGVVbmlvbkRvbWFpblNodXRkb3duCiAJCWlmIGVyciA6PSB0eXBl RG9tYWluU2h1dGRvd24uZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKQEAgLTI5OTQsNiArMzA4NCwx MiBAQCBmdW5jICh4ICpFdmVudCkgZnJvbUMoeGMgKkMubGlieGxfZXZlbnQpIGVycm9yIHsKIAkJ CXJldHVybiBlcnIKIAkJfQogCQl4LlR5cGVVbmlvbiA9IHR5cGVEaXNrRWplY3QKKwljYXNlIEV2 ZW50VHlwZU9wZXJhdGlvbkNvbXBsZXRlOgorCQl2YXIgdHlwZU9wZXJhdGlvbkNvbXBsZXRlIEV2 ZW50VHlwZVVuaW9uT3BlcmF0aW9uQ29tcGxldGUKKwkJaWYgZXJyIDo9IHR5cGVPcGVyYXRpb25D b21wbGV0ZS5mcm9tQyh4Yyk7IGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGVycgorCQl9CisJCXgu VHlwZVVuaW9uID0gdHlwZU9wZXJhdGlvbkNvbXBsZXRlCiAJZGVmYXVsdDoKIAkJcmV0dXJuIGZt dC5FcnJvcmYoImludmFsaWQgdW5pb24ga2V5ICcldiciLCB4LlR5cGUpCiAJfQpAQCAtMzExMywx OCArMzIwOSwxOCBAQCBmdW5jICh4ICpQc3JId0luZm8pIGZyb21DKHhjICpDLmxpYnhsX3Bzcl9o d19pbmZvKSBlcnJvciB7CiAJeC5JZCA9IHVpbnQzMih4Yy5pZCkKIAl4LlR5cGUgPSBQc3JGZWF0 VHlwZSh4Yy5fdHlwZSkKIAlzd2l0Y2ggeC5UeXBlIHsKLQljYXNlIFBzckZlYXRUeXBlTWJhOgot CQl2YXIgdHlwZU1iYSBQc3JId0luZm9UeXBlVW5pb25NYmEKLQkJaWYgZXJyIDo9IHR5cGVNYmEu ZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKLQkJfQotCQl4LlR5cGVVbmlv biA9IHR5cGVNYmEKIAljYXNlIFBzckZlYXRUeXBlQ2F0OgogCQl2YXIgdHlwZUNhdCBQc3JId0lu Zm9UeXBlVW5pb25DYXQKIAkJaWYgZXJyIDo9IHR5cGVDYXQuZnJvbUMoeGMpOyBlcnIgIT0gbmls IHsKIAkJCXJldHVybiBlcnIKIAkJfQogCQl4LlR5cGVVbmlvbiA9IHR5cGVDYXQKKwljYXNlIFBz ckZlYXRUeXBlTWJhOgorCQl2YXIgdHlwZU1iYSBQc3JId0luZm9UeXBlVW5pb25NYmEKKwkJaWYg ZXJyIDo9IHR5cGVNYmEuZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBlcnIKKwkJ fQorCQl4LlR5cGVVbmlvbiA9IHR5cGVNYmEKIAlkZWZhdWx0OgogCQlyZXR1cm4gZm10LkVycm9y ZigiaW52YWxpZCB1bmlvbiBrZXkgJyV2JyIsIHguVHlwZSkKIAl9Ci0tIAoyLjI0LjAKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs