From mboxrd@z Thu Jan 1 00:00:00 1970 From: dougtrav@icloud.com Subject: [PATCH] build: sync Kconfig with Linux v4.17 Date: Thu, 21 Jun 2018 10:10:52 +0800 Message-ID: <20180621021052.27070-1-dougtrav@icloud.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fVp4h-0007LY-7d for xen-devel@lists.xenproject.org; Thu, 21 Jun 2018 02:11:51 +0000 Received: from process-dkim-sign-daemon.pv33p00im-asmtp001.me.com by pv33p00im-asmtp001.me.com (Oracle Communications Messaging Server 8.0.1.2.20170607 64bit (built Jun 7 2017)) id <0PAN00N00HKRHE00@pv33p00im-asmtp001.me.com> for xen-devel@lists.xenproject.org; Thu, 21 Jun 2018 02:11:07 +0000 (GMT) List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Doug Goldstein , Tim Deegan , Julien Grall , Jan Beulich , Ian Jackson , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org RnJvbTogRG91ZyBHb2xkc3RlaW4gPGNhcmRvZUBjYXJkb2UuY29tPgoKRnJvbTogRG91ZyBHb2xk c3RlaW4gPGNhcmRvZUBjYXJkb2UuY29tPgoKSW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgYW5k IGRpcmVjdG9yaWVzIGZyb20gdGhlIExpbnV4IHY0LjE3IHRhZwooY29tbWl0IGlkIDI5ZGNlYTg4 Nzc5Yzg1NmM3ZGM5MjA0MGEwYzAxMjMzMjYzMTAxZDQpOgotIHNjcmlwdHMva2NvbmZpZy8gLT4g eGVuL3Rvb2xzL2tjb25maWcvCi0gc2NyaXB0cy9NYWtlZmlsZS5ob3N0IC0+IHhlbi90b29scy9r Y29uZmlnL01ha2VmaWxlLmhvc3QKLSBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlneywtbGFu Z3VhZ2V9LnR4dCAtPgogIGRvY3MvbWlzYy9rY29uZmlney1sYW5ndWFnZX0udHh0Ci0gaW5jbHVk ZS9saW51eC9rY29uZmlnLmggLT4geGVuL2luY2x1ZGUveGVuL2tjb25maWcuaAoKUHVsbGVkIGlu IHBhcnRzIG9mIHNjcmlwdHMvTWFrZWZpbGUubGliIGludG8KeGVuL3Rvb2xzL2tjb25maWcvTWFr ZWZpbGUua2NvbmZpZwoKU2lkZSBlZmZlY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgdGhhdCBmbGV4IGFu ZCBiaXNvbiBhcmUgcmVxdWlyZWQgdG8gYnVpbGQKS2NvbmZpZy4gTGludXggaGFzIHN3aXRjaGVk IGZyb20gc2hpcHBpbmcgdGhlIHByZS1nZW5lcmF0ZWQgZmlsZXMgdG8KYWx3YXlzIGdlbmVyYXRp bmcgdGhlbSB3aXRoIGZsZXggYW5kIGJpc29uLgoKU2lnbmVkLW9mZi1ieTogRG91ZyBHb2xkc3Rl aW4gPGNhcmRvZUBjYXJkb2UuY29tPgotLS0KU28gdGhpcyBtYWtlcyBmbGV4ICYgYmlzb24gcmVx dWlyZWQgdG8gYnVpbGQgS2NvbmZpZyB3aGljaCBtZWFucyB0bwpidWlsZCB0aGUgaHlwZXJ2aXNv ciBub3cgdGhlc2UgYXJlIHJlcXVpcmVkLiBUaGVzZSBhcmUgYWxyZWFkeQpkb2N1bWVudGVkIGlu IHRoZSBSRUFETUUgYXMgcmVxdWlyZWQgYnV0IHRoYXQgd2FzIHByZXZpb3VzbHkganVzdCBmb3IK dGhlIHRvb2xzdGFjay4gU2luY2UgdGhlc2UgYXJlIEdOVSB1dGlsaXRpZXMgSSB3b3VsZCBhc2sg dGhhdCBub24tTGludXgKZm9sa3MgKGUuZy4gUm9nZXIpCgpDQzogQW5kcmV3IENvb3BlciA8YW5k cmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ0M6IEdlb3JnZSBEdW5sYXAgPEdlb3JnZS5EdW5sYXBA ZXUuY2l0cml4LmNvbT4KQ0M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29t PgpDQzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDQzogSnVsaWVuIEdyYWxsIDxq dWxpZW4uZ3JhbGxAYXJtLmNvbT4KQ0M6IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndp bGtAb3JhY2xlLmNvbT4KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVs Lm9yZz4KQ0M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDQzogV2VpIExpdSA8d2VpLmxpdTJA Y2l0cml4LmNvbT4KQ0M6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgot LS0KIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr CiBkb2NzL21pc2Mva2NvbmZpZy1sYW5ndWFnZS50eHQgICAgICAgICAgICAgICB8ICAyOTUgKyst CiBkb2NzL21pc2Mva2NvbmZpZy50eHQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0K IHhlbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQog eGVuL2luY2x1ZGUveGVuL2tjb25maWcuaCAgICAgICAgICAgICAgICAgICAgfCAgIDY0ICstCiB4 ZW4vdG9vbHMva2NvbmZpZy8uZ2l0aWdub3JlICAgICAgICAgICAgICAgICB8ICAgIDUgLQogeGVu L3Rvb2xzL2tjb25maWcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgMTExICstCiB4ZW4v dG9vbHMva2NvbmZpZy9NYWtlZmlsZS5ob3N0ICAgICAgICAgICAgICB8ICAgNjIgKy0KIHhlbi90 b29scy9rY29uZmlnL01ha2VmaWxlLmtjb25maWcgICAgICAgICAgIHwgICAyOCArCiB4ZW4vdG9v bHMva2NvbmZpZy9jaGVjay5zaCAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogeGVuL3Rvb2xz L2tjb25maWcvY29uZi5jICAgICAgICAgICAgICAgICAgICAgfCAgMTE3ICstCiB4ZW4vdG9vbHMv a2NvbmZpZy9jb25mZGF0YS5jICAgICAgICAgICAgICAgICB8ICAgMjYgKy0KIHhlbi90b29scy9r Y29uZmlnL2V4cHIuYyAgICAgICAgICAgICAgICAgICAgIHwgIDE5NSArLQogeGVuL3Rvb2xzL2tj b25maWcvZXhwci5oICAgICAgICAgICAgICAgICAgICAgfCAgIDk1ICstCiB4ZW4vdG9vbHMva2Nv bmZpZy9nY29uZi5jICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHhlbi90b29scy9rY29u ZmlnL2tjb25mX2lkLmMgICAgICAgICAgICAgICAgIHwgICA1MyArCiB4ZW4vdG9vbHMva2NvbmZp Zy9reGdldHRleHQuYyAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHhlbi90b29scy9rY29uZmln L2xpc3QuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiB4ZW4vdG9vbHMva2NvbmZpZy9s a2MuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIHhlbi90b29scy9rY29uZmlnL2xr Y19wcm90by5oICAgICAgICAgICAgICAgIHwgICAgMyArLQogeGVuL3Rvb2xzL2tjb25maWcvbHhk aWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggfCAgICA0ICstCiB4ZW4vdG9vbHMva2NvbmZpZy9tY29u Zi5jICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHhlbi90b29scy9rY29uZmlnL21lbnUu YyAgICAgICAgICAgICAgICAgICAgIHwgIDI0NCArKy0KIHhlbi90b29scy9rY29uZmlnL21lcmdl X2NvbmZpZy5zaCAgICAgICAgICAgIHwgICAxOCArLQogeGVuL3Rvb2xzL2tjb25maWcvbmNvbmYu YyAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCiB4ZW4vdG9vbHMva2NvbmZpZy9uY29uZi5n dWkuYyAgICAgICAgICAgICAgICB8ICAgMjIgKy0KIHhlbi90b29scy9rY29uZmlnL25jb25mLmgg ICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQogeGVuL3Rvb2xzL2tjb25maWcvcWNvbmYuY2Mg ICAgICAgICAgICAgICAgICAgfCAgNzA1ICsrKy0tLS0KIHhlbi90b29scy9rY29uZmlnL3Fjb25m LmggICAgICAgICAgICAgICAgICAgIHwgIDE1MCArLQogeGVuL3Rvb2xzL2tjb25maWcvc3RyZWFt bGluZV9jb25maWcucGwgICAgICAgfCAgIDQ3ICstCiB4ZW4vdG9vbHMva2NvbmZpZy9zeW1ib2wu YyAgICAgICAgICAgICAgICAgICB8ICAxMTggKy0KIHhlbi90b29scy9rY29uZmlnL3V0aWwuYyAg ICAgICAgICAgICAgICAgICAgIHwgICAyNiArLQogeGVuL3Rvb2xzL2tjb25maWcvemNvbmYuZ3Bl cmYgICAgICAgICAgICAgICAgfCAgIDQ5IC0KIHhlbi90b29scy9rY29uZmlnL3pjb25mLmhhc2gu Y19zaGlwcGVkICAgICAgIHwgIDI5MyAtLS0KIHhlbi90b29scy9rY29uZmlnL3pjb25mLmwgICAg ICAgICAgICAgICAgICAgIHwgICA3OCArLQogeGVuL3Rvb2xzL2tjb25maWcvemNvbmYubGV4LmNf c2hpcHBlZCAgICAgICAgfCAyNDczIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL3Rvb2xz L2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCAgICAgICAgfCAyNTgwIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiB4ZW4vdG9vbHMva2NvbmZpZy96Y29uZi55ICAgICAgICAgICAgICAgICAg ICB8ICAxMzggKy0KIDM4IGZpbGVzIGNoYW5nZWQsIDE4MzIgaW5zZXJ0aW9ucygrKSwgNjIwNyBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vdG9vbHMva2NvbmZpZy9rY29uZl9p ZC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgeGVuL3Rvb2xzL2tjb25maWcvemNvbmYuZ3BlcmYKIGRl bGV0ZSBtb2RlIDEwMDY0NCB4ZW4vdG9vbHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAog ZGVsZXRlIG1vZGUgMTAwNjQ0IHhlbi90b29scy9rY29uZmlnL3pjb25mLmxleC5jX3NoaXBwZWQK IGRlbGV0ZSBtb2RlIDEwMDY0NCB4ZW4vdG9vbHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVk CgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggNzAwNDM0OWQ1YS4u NzM5ZjYzYjlkZSAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0z MjUsNiArMzI1LDggQEAgeGVuL3Rlc3QvbGl2ZXBhdGNoL3hlbl9ub3AubGl2ZXBhdGNoCiB4ZW4v dGVzdC9saXZlcGF0Y2gveGVuX3JlcGxhY2Vfd29ybGQubGl2ZXBhdGNoCiB4ZW4vdG9vbHMva2Nv bmZpZy8udG1wX2d0a2NoZWNrCiB4ZW4vdG9vbHMva2NvbmZpZy8udG1wX3F0Y2hlY2sKK3hlbi90 b29scy9rY29uZmlnL3pjb25mLmxleC5jCit4ZW4vdG9vbHMva2NvbmZpZy96Y29uZi50YWIuYwog eGVuL3Rvb2xzL3N5bWJvbHMKIHhlbi94c20vZmxhc2svaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmlu Zy5oCiB4ZW4veHNtL2ZsYXNrL2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApkaWZmIC0tZ2l0IGEv ZG9jcy9taXNjL2tjb25maWctbGFuZ3VhZ2UudHh0IGIvZG9jcy9taXNjL2tjb25maWctbGFuZ3Vh Z2UudHh0CmluZGV4IDM1MGY3MzNiZjIuLmY1Yjk0OTNmMDQgMTAwNjQ0Ci0tLSBhL2RvY3MvbWlz Yy9rY29uZmlnLWxhbmd1YWdlLnR4dAorKysgYi9kb2NzL21pc2Mva2NvbmZpZy1sYW5ndWFnZS50 eHQKQEAgLTc3LDYgKzc3LDI3IEBAIGFwcGxpY2FibGUgZXZlcnl3aGVyZSAoc2VlIHN5bnRheCku CiAgIE9wdGlvbmFsbHksIGRlcGVuZGVuY2llcyBvbmx5IGZvciB0aGlzIGRlZmF1bHQgdmFsdWUg Y2FuIGJlIGFkZGVkIHdpdGgKICAgImlmIi4KIAorIFRoZSBkZWZhdWx0IHZhbHVlIGRlbGliZXJh dGVseSBkZWZhdWx0cyB0byAnbicgaW4gb3JkZXIgdG8gYXZvaWQgYmxvYXRpbmcgdGhlCisgYnVp bGQuIFdpdGggZmV3IGV4Y2VwdGlvbnMsIG5ldyBjb25maWcgb3B0aW9ucyBzaG91bGQgbm90IGNo YW5nZSB0aGlzLiBUaGUKKyBpbnRlbnQgaXMgZm9yICJtYWtlIG9sZGNvbmZpZyIgdG8gYWRkIGFz IGxpdHRsZSBhcyBwb3NzaWJsZSB0byB0aGUgY29uZmlnIGZyb20KKyByZWxlYXNlIHRvIHJlbGVh c2UuCisKKyBOb3RlOgorCVRoaW5ncyB0aGF0IG1lcml0ICJkZWZhdWx0IHkvbSIgaW5jbHVkZToK KworCWEpIEEgbmV3IEtjb25maWcgb3B0aW9uIGZvciBzb21ldGhpbmcgdGhhdCB1c2VkIHRvIGFs d2F5cyBiZSBidWlsdAorCSAgIHNob3VsZCBiZSAiZGVmYXVsdCB5Ii4KKworCWIpIEEgbmV3IGdh dGVrZWVwaW5nIEtjb25maWcgb3B0aW9uIHRoYXQgaGlkZXMvc2hvd3Mgb3RoZXIgS2NvbmZpZwor CSAgIG9wdGlvbnMgKGJ1dCBkb2VzIG5vdCBnZW5lcmF0ZSBhbnkgY29kZSBvZiBpdHMgb3duKSwg c2hvdWxkIGJlCisJICAgImRlZmF1bHQgeSIgc28gcGVvcGxlIHdpbGwgc2VlIHRob3NlIG90aGVy IG9wdGlvbnMuCisKKwljKSBTdWItZHJpdmVyIGJlaGF2aW9yIG9yIHNpbWlsYXIgb3B0aW9ucyBm b3IgYSBkcml2ZXIgdGhhdCBpcworCSAgICJkZWZhdWx0IG4iLiBUaGlzIGFsbG93cyB5b3UgdG8g cHJvdmlkZSBzYW5lIGRlZmF1bHRzLgorCisJZCkgSGFyZHdhcmUgb3IgaW5mcmFzdHJ1Y3R1cmUg dGhhdCBldmVyeWJvZHkgZXhwZWN0cywgc3VjaCBhcyBDT05GSUdfTkVUCisJICAgb3IgQ09ORklH X0JMT0NLLiBUaGVzZSBhcmUgcmFyZSBleGNlcHRpb25zLgorCiAtIHR5cGUgZGVmaW5pdGlvbiAr IGRlZmF1bHQgdmFsdWU6CiAJImRlZl9ib29sIi8iZGVmX3RyaXN0YXRlIiA8ZXhwcj4gWyJpZiIg PGV4cHI+XQogICBUaGlzIGlzIGEgc2hvcnRoYW5kIG5vdGF0aW9uIGZvciBhIHR5cGUgZGVmaW5p dGlvbiBwbHVzIGEgdmFsdWUuCkBAIC0xMTMsNiArMTM0LDM0IEBAIGFwcGxpY2FibGUgZXZlcnl3 aGVyZSAoc2VlIHN5bnRheCkuCiAJVGhhdCB3aWxsIGxpbWl0IHRoZSB1c2VmdWxuZXNzIGJ1dCBv biB0aGUgb3RoZXIgaGFuZCBhdm9pZAogCXRoZSBpbGxlZ2FsIGNvbmZpZ3VyYXRpb25zIGFsbCBv dmVyLgogCistIHdlYWsgcmV2ZXJzZSBkZXBlbmRlbmNpZXM6ICJpbXBseSIgPHN5bWJvbD4gWyJp ZiIgPGV4cHI+XQorICBUaGlzIGlzIHNpbWlsYXIgdG8gInNlbGVjdCIgYXMgaXQgZW5mb3JjZXMg YSBsb3dlciBsaW1pdCBvbiBhbm90aGVyCisgIHN5bWJvbCBleGNlcHQgdGhhdCB0aGUgImltcGxp ZWQiIHN5bWJvbCdzIHZhbHVlIG1heSBzdGlsbCBiZSBzZXQgdG8gbgorICBmcm9tIGEgZGlyZWN0 IGRlcGVuZGVuY3kgb3Igd2l0aCBhIHZpc2libGUgcHJvbXB0LgorCisgIEdpdmVuIHRoZSBmb2xs b3dpbmcgZXhhbXBsZToKKworICBjb25maWcgRk9PCisJdHJpc3RhdGUKKwlpbXBseSBCQVoKKwor ICBjb25maWcgQkFaCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIEJBUgorCisgIFRoZSBmb2xsb3dp bmcgdmFsdWVzIGFyZSBwb3NzaWJsZToKKworCUZPTwkJQkFSCQlCQVoncyBkZWZhdWx0CWNob2lj ZSBmb3IgQkFaCisJLS0tCQktLS0JCS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0KKwluCQl5 CQluCQlOL20veQorCW0JCXkJCW0JCU0veS9uCisJeQkJeQkJeQkJWS9uCisJeQkJbgkJKgkJTgor CisgIFRoaXMgaXMgdXNlZnVsIGUuZy4gd2l0aCBtdWx0aXBsZSBkcml2ZXJzIHRoYXQgd2FudCB0 byBpbmRpY2F0ZSB0aGVpcgorICBhYmlsaXR5IHRvIGhvb2sgaW50byBhIHNlY29uZGFyeSBzdWJz eXN0ZW0gd2hpbGUgYWxsb3dpbmcgdGhlIHVzZXIgdG8KKyAgY29uZmlndXJlIHRoYXQgc3Vic3lz dGVtIG91dCB3aXRob3V0IGFsc28gaGF2aW5nIHRvIHVuc2V0IHRoZXNlIGRyaXZlcnMuCisKIC0g bGltaXRpbmcgbWVudSBkaXNwbGF5OiAidmlzaWJsZSBpZiIgPGV4cHI+CiAgIFRoaXMgYXR0cmli dXRlIGlzIG9ubHkgYXBwbGljYWJsZSB0byBtZW51IGJsb2NrcywgaWYgdGhlIGNvbmRpdGlvbiBp cwogICBmYWxzZSwgdGhlIG1lbnUgYmxvY2sgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlciAo dGhlIHN5bWJvbHMKQEAgLTE3MiwxMCArMjIxLDE0IEBAIG1vZHVsZSBzdGF0ZS4gRGVwZW5kZW5j eSBleHByZXNzaW9ucyBoYXZlIHRoZSBmb2xsb3dpbmcgc3ludGF4OgogPGV4cHI+IDo6PSA8c3lt Ym9sPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCiAgICAgICAgICAgIDxzeW1ib2w+ ICc9JyA8c3ltYm9sPiAgICAgICAgICAgICAgICAoMikKICAgICAgICAgICAgPHN5bWJvbD4gJyE9 JyA8c3ltYm9sPiAgICAgICAgICAgICAgICgzKQotICAgICAgICAgICAnKCcgPGV4cHI+ICcpJyAg ICAgICAgICAgICAgICAgICAgICAgKDQpCi0gICAgICAgICAgICchJyA8ZXhwcj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAoNSkKLSAgICAgICAgICAgPGV4cHI+ICcmJicgPGV4cHI+ICAgICAg ICAgICAgICAgICAgICg2KQotICAgICAgICAgICA8ZXhwcj4gJ3x8JyA8ZXhwcj4gICAgICAgICAg ICAgICAgICAgKDcpCisgICAgICAgICAgIDxzeW1ib2wxPiAnPCcgPHN5bWJvbDI+ICAgICAgICAg ICAgICAoNCkKKyAgICAgICAgICAgPHN5bWJvbDE+ICc+JyA8c3ltYm9sMj4gICAgICAgICAgICAg ICg0KQorICAgICAgICAgICA8c3ltYm9sMT4gJzw9JyA8c3ltYm9sMj4gICAgICAgICAgICAgKDQp CisgICAgICAgICAgIDxzeW1ib2wxPiAnPj0nIDxzeW1ib2wyPiAgICAgICAgICAgICAoNCkKKyAg ICAgICAgICAgJygnIDxleHByPiAnKScgICAgICAgICAgICAgICAgICAgICAgICg1KQorICAgICAg ICAgICAnIScgPGV4cHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCisgICAgICAgICAg IDxleHByPiAnJiYnIDxleHByPiAgICAgICAgICAgICAgICAgICAoNykKKyAgICAgICAgICAgPGV4 cHI+ICd8fCcgPGV4cHI+ICAgICAgICAgICAgICAgICAgICg4KQogCiBFeHByZXNzaW9ucyBhcmUg bGlzdGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgcHJlY2VkZW5jZS4gCiAKQEAgLTE4NiwxMCAr MjM5LDEzIEBAIEV4cHJlc3Npb25zIGFyZSBsaXN0ZWQgaW4gZGVjcmVhc2luZyBvcmRlciBvZiBw cmVjZWRlbmNlLgogICAgIG90aGVyd2lzZSAnbicuCiAoMykgSWYgdGhlIHZhbHVlcyBvZiBib3Ro IHN5bWJvbHMgYXJlIGVxdWFsLCBpdCByZXR1cm5zICduJywKICAgICBvdGhlcndpc2UgJ3knLgot KDQpIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiBVc2VkIHRvIG92ZXJyaWRl IHByZWNlZGVuY2UuCi0oNSkgUmV0dXJucyB0aGUgcmVzdWx0IG9mICgyLS9leHByLykuCi0oNikg UmV0dXJucyB0aGUgcmVzdWx0IG9mIG1pbigvZXhwci8sIC9leHByLykuCi0oNykgUmV0dXJucyB0 aGUgcmVzdWx0IG9mIG1heCgvZXhwci8sIC9leHByLykuCisoNCkgSWYgdmFsdWUgb2YgPHN5bWJv bDE+IGlzIHJlc3BlY3RpdmVseSBsb3dlciwgZ3JlYXRlciwgbG93ZXItb3ItZXF1YWwsCisgICAg b3IgZ3JlYXRlci1vci1lcXVhbCB0aGFuIHZhbHVlIG9mIDxzeW1ib2wyPiwgaXQgcmV0dXJucyAn eScsCisgICAgb3RoZXJ3aXNlICduJy4KKyg1KSBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZXhw cmVzc2lvbi4gVXNlZCB0byBvdmVycmlkZSBwcmVjZWRlbmNlLgorKDYpIFJldHVybnMgdGhlIHJl c3VsdCBvZiAoMi0vZXhwci8pLgorKDcpIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtaW4oL2V4cHIv LCAvZXhwci8pLgorKDgpIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtYXgoL2V4cHIvLCAvZXhwci8p LgogCiBBbiBleHByZXNzaW9uIGNhbiBoYXZlIGEgdmFsdWUgb2YgJ24nLCAnbScgb3IgJ3knIChv ciAwLCAxLCAyCiByZXNwZWN0aXZlbHkgZm9yIGNhbGN1bGF0aW9ucykuIEEgbWVudSBlbnRyeSBi ZWNvbWVzIHZpc2libGUgd2hlbiBpdHMKQEAgLTI0MSw5ICsyOTcsOCBAQCBjb21tZW50ICJtb2R1 bGUgc3VwcG9ydCBkaXNhYmxlZCIKIAlkZXBlbmRzIG9uICFNT0RVTEVTCiAKIE1PRFZFUlNJT05T IGRpcmVjdGx5IGRlcGVuZHMgb24gTU9EVUxFUywgdGhpcyBtZWFucyBpdCdzIG9ubHkgdmlzaWJs ZSBpZgotTU9EVUxFUyBpcyBkaWZmZXJlbnQgZnJvbSAnbicuIFRoZSBjb21tZW50IG9uIHRoZSBv dGhlciBoYW5kIGlzIGFsd2F5cwotdmlzaWJsZSB3aGVuIE1PRFVMRVMgaXMgdmlzaWJsZSAodGhl IChlbXB0eSkgZGVwZW5kZW5jeSBvZiBNT0RVTEVTIGlzCi1hbHNvIHBhcnQgb2YgdGhlIGNvbW1l bnQgZGVwZW5kZW5jaWVzKS4KK01PRFVMRVMgaXMgZGlmZmVyZW50IGZyb20gJ24nLiBUaGUgY29t bWVudCBvbiB0aGUgb3RoZXIgaGFuZCBpcyBvbmx5Cit2aXNpYmxlIHdoZW4gTU9EVUxFUyBpcyBz ZXQgdG8gJ24nLgogCiAKIEtjb25maWcgc3ludGF4CkBAIC0yNzUsNyArMzMwLDQ0IEBAIG1lbnVj b25maWc6CiAKIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgc2ltcGxlIGNvbmZpZyBlbnRyeSBhYm92 ZSwgYnV0IGl0IGFsc28gZ2l2ZXMgYQogaGludCB0byBmcm9udCBlbmRzLCB0aGF0IGFsbCBzdWJv cHRpb25zIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgYQotc2VwYXJhdGUgbGlzdCBvZiBvcHRpb25z Lgorc2VwYXJhdGUgbGlzdCBvZiBvcHRpb25zLiBUbyBtYWtlIHN1cmUgYWxsIHRoZSBzdWJvcHRp b25zIHdpbGwgcmVhbGx5CitzaG93IHVwIHVuZGVyIHRoZSBtZW51Y29uZmlnIGVudHJ5IGFuZCBu b3Qgb3V0c2lkZSBvZiBpdCwgZXZlcnkgaXRlbQorZnJvbSB0aGUgPGNvbmZpZyBvcHRpb25zPiBs aXN0IG11c3QgZGVwZW5kIG9uIHRoZSBtZW51Y29uZmlnIHN5bWJvbC4KK0luIHByYWN0aWNlLCB0 aGlzIGlzIGFjaGlldmVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgbmV4dCB0d28gY29uc3RydWN0czoK KworKDEpOgorbWVudWNvbmZpZyBNCitpZiBNCisgICAgY29uZmlnIEMxCisgICAgY29uZmlnIEMy CitlbmRpZgorCisoMik6CittZW51Y29uZmlnIE0KK2NvbmZpZyBDMQorICAgIGRlcGVuZHMgb24g TQorY29uZmlnIEMyCisgICAgZGVwZW5kcyBvbiBNCisKK0luIHRoZSBmb2xsb3dpbmcgZXhhbXBs ZXMgKDMpIGFuZCAoNCksIEMxIGFuZCBDMiBzdGlsbCBoYXZlIHRoZSBNCitkZXBlbmRlbmN5LCBi dXQgd2lsbCBub3QgYXBwZWFyIHVuZGVyIG1lbnVjb25maWcgTSBhbnltb3JlLCBiZWNhdXNlCitv ZiBDMCwgd2hpY2ggZG9lc24ndCBkZXBlbmQgb24gTToKKworKDMpOgorbWVudWNvbmZpZyBNCisg ICAgY29uZmlnIEMwCitpZiBNCisgICAgY29uZmlnIEMxCisgICAgY29uZmlnIEMyCitlbmRpZgor CisoNCk6CittZW51Y29uZmlnIE0KK2NvbmZpZyBDMAorY29uZmlnIEMxCisgICAgZGVwZW5kcyBv biBNCitjb25maWcgQzIKKyAgICBkZXBlbmRzIG9uIE0KIAogY2hvaWNlczoKIApAQCAtMjg1LDEy ICszNzcsMTcgQEAgY2hvaWNlczoKIAkiZW5kY2hvaWNlIgogCiBUaGlzIGRlZmluZXMgYSBjaG9p Y2UgZ3JvdXAgYW5kIGFjY2VwdHMgYW55IG9mIHRoZSBhYm92ZSBhdHRyaWJ1dGVzIGFzCi1vcHRp b25zLiBBIGNob2ljZSBjYW4gb25seSBiZSBvZiB0eXBlIGJvb2wgb3IgdHJpc3RhdGUsIHdoaWxl IGEgYm9vbGVhbgotY2hvaWNlIG9ubHkgYWxsb3dzIGEgc2luZ2xlIGNvbmZpZyBlbnRyeSB0byBi ZSBzZWxlY3RlZCwgYSB0cmlzdGF0ZQotY2hvaWNlIGFsc28gYWxsb3dzIGFueSBudW1iZXIgb2Yg Y29uZmlnIGVudHJpZXMgdG8gYmUgc2V0IHRvICdtJy4gVGhpcwotY2FuIGJlIHVzZWQgaWYgbXVs dGlwbGUgZHJpdmVycyBmb3IgYSBzaW5nbGUgaGFyZHdhcmUgZXhpc3RzIGFuZCBvbmx5IGEKLXNp bmdsZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkL2xvYWRlZCBpbnRvIHRoZSBrZXJuZWwsIGJ1dCBh bGwgZHJpdmVycwotY2FuIGJlIGNvbXBpbGVkIGFzIG1vZHVsZXMuCitvcHRpb25zLiBBIGNob2lj ZSBjYW4gb25seSBiZSBvZiB0eXBlIGJvb2wgb3IgdHJpc3RhdGUuICBJZiBubyB0eXBlIGlzCitz cGVjaWZpZWQgZm9yIGEgY2hvaWNlLCBpdCdzIHR5cGUgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRo ZSB0eXBlIG9mCit0aGUgZmlyc3QgY2hvaWNlIGVsZW1lbnQgaW4gdGhlIGdyb3VwIG9yIHJlbWFp biB1bmtub3duIGlmIG5vbmUgb2YgdGhlCitjaG9pY2UgZWxlbWVudHMgaGF2ZSBhIHR5cGUgc3Bl Y2lmaWVkLCBhcyB3ZWxsLgorCitXaGlsZSBhIGJvb2xlYW4gY2hvaWNlIG9ubHkgYWxsb3dzIGEg c2luZ2xlIGNvbmZpZyBlbnRyeSB0byBiZQorc2VsZWN0ZWQsIGEgdHJpc3RhdGUgY2hvaWNlIGFs c28gYWxsb3dzIGFueSBudW1iZXIgb2YgY29uZmlnIGVudHJpZXMKK3RvIGJlIHNldCB0byAnbScu IFRoaXMgY2FuIGJlIHVzZWQgaWYgbXVsdGlwbGUgZHJpdmVycyBmb3IgYSBzaW5nbGUKK2hhcmR3 YXJlIGV4aXN0cyBhbmQgb25seSBhIHNpbmdsZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkL2xvYWRl ZCBpbnRvCit0aGUga2VybmVsLCBidXQgYWxsIGRyaXZlcnMgY2FuIGJlIGNvbXBpbGVkIGFzIG1v ZHVsZXMuCisKIEEgY2hvaWNlIGFjY2VwdHMgYW5vdGhlciBvcHRpb24gIm9wdGlvbmFsIiwgd2hp Y2ggYWxsb3dzIHRvIHNldCB0aGUKIGNob2ljZSB0byAnbicgYW5kIG5vIGVudHJ5IG5lZWRzIHRv IGJlIHNlbGVjdGVkLgogSWYgbm8gW3N5bWJvbF0gaXMgYXNzb2NpYXRlZCB3aXRoIGEgY2hvaWNl LCB0aGVuIHlvdSBjYW4gbm90IGhhdmUgbXVsdGlwbGUKQEAgLTM5MywzICs0OTAsMTY1IEBAIGNv bmZpZyBGT08KIAlkZXBlbmRzIG9uIEJBUiAmJiBtCiAKIGxpbWl0cyBGT08gdG8gbW9kdWxlICg9 bSkgb3IgZGlzYWJsZWQgKD1uKS4KKworS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1p dGF0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5 b3UndmUgaGl0IHRoZSBLY29uZmlnIGVycm9yOiAicmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0 ZWQiIHlvdSd2ZSBydW4KK2ludG8gYSByZWN1cnNpdmUgZGVwZW5kZW5jeSBpc3N1ZSB3aXRoIEtj b25maWcsIGEgcmVjdXJzaXZlIGRlcGVuZGVuY3kgY2FuIGJlCitzdW1tYXJpemVkIGFzIGEgY2ly Y3VsYXIgZGVwZW5kZW5jeS4gVGhlIGtjb25maWcgdG9vbHMgbmVlZCB0byBlbnN1cmUgdGhhdAor S2NvbmZpZyBmaWxlcyBjb21wbHkgd2l0aCBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiByZXF1aXJl bWVudHMuIEluIG9yZGVyIHRvIGRvCit0aGF0IGtjb25maWcgbXVzdCBkZXRlcm1pbmUgdGhlIHZh bHVlcyB0aGF0IGFyZSBwb3NzaWJsZSBmb3IgYWxsIEtjb25maWcKK3N5bWJvbHMsIHRoaXMgaXMg Y3VycmVudGx5IG5vdCBwb3NzaWJsZSBpZiB0aGVyZSBpcyBhIGNpcmN1bGFyIHJlbGF0aW9uCiti ZXR3ZWVuIHR3byBvciBtb3JlIEtjb25maWcgc3ltYm9scy4gRm9yIG1vcmUgZGV0YWlscyByZWZl ciB0byB0aGUgIlNpbXBsZQorS2NvbmZpZyByZWN1cnNpdmUgaXNzdWUiIHN1YnNlY3Rpb24gYmVs b3cuIEtjb25maWcgZG9lcyBub3QgZG8gcmVjdXJzaXZlCitkZXBlbmRlbmN5IHJlc29sdXRpb247 IHRoaXMgaGFzIGEgZmV3IGltcGxpY2F0aW9ucyBmb3IgS2NvbmZpZyBmaWxlIHdyaXRlcnMuCitX ZSdsbCBmaXJzdCBleHBsYWluIHdoeSB0aGlzIGlzc3VlcyBleGlzdHMgYW5kIHRoZW4gcHJvdmlk ZSBhbiBleGFtcGxlCit0ZWNobmljYWwgbGltaXRhdGlvbiB3aGljaCB0aGlzIGJyaW5ncyB1cG9u IEtjb25maWcgZGV2ZWxvcGVycy4gRWFnZXIKK2RldmVsb3BlcnMgd2lzaGluZyB0byB0cnkgdG8g YWRkcmVzcyB0aGlzIGxpbWl0YXRpb24gc2hvdWxkIHJlYWQgdGhlIG5leHQKK3N1YnNlY3Rpb25z LgorCitTaW1wbGUgS2NvbmZpZyByZWN1cnNpdmUgaXNzdWUKK35+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fgorCitSZWFkOiBEb2N1bWVudGF0aW9uL2tidWlsZC9LY29uZmlnLnJlY3Vyc2lv bi1pc3N1ZS0wMQorCitUZXN0IHdpdGg6CisKK21ha2UgS0JVSUxEX0tDT05GSUc9RG9jdW1lbnRh dGlvbi9rYnVpbGQvS2NvbmZpZy5yZWN1cnNpb24taXNzdWUtMDEgYWxsbm9jb25maWcKKworQ3Vt dWxhdGl2ZSBLY29uZmlnIHJlY3Vyc2l2ZSBpc3N1ZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fgorCitSZWFkOiBEb2N1bWVudGF0aW9uL2tidWlsZC9LY29uZmlnLnJlY3Vyc2lv bi1pc3N1ZS0wMgorCitUZXN0IHdpdGg6CisKK21ha2UgS0JVSUxEX0tDT05GSUc9RG9jdW1lbnRh dGlvbi9rYnVpbGQvS2NvbmZpZy5yZWN1cnNpb24taXNzdWUtMDIgYWxsbm9jb25maWcKKworUHJh Y3RpY2FsIHNvbHV0aW9ucyB0byBrY29uZmlnIHJlY3Vyc2l2ZSBpc3N1ZQorfn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitEZXZlbG9wZXJzIHdobyBydW4g aW50byB0aGUgcmVjdXJzaXZlIEtjb25maWcgaXNzdWUgaGF2ZSB0aHJlZSBvcHRpb25zCithdCB0 aGVpciBkaXNwb3NhbC4gV2UgZG9jdW1lbnQgdGhlbSBiZWxvdyBhbmQgYWxzbyBwcm92aWRlIGEg bGlzdCBvZgoraGlzdG9yaWNhbCBpc3N1ZXMgcmVzb2x2ZWQgdGhyb3VnaCB0aGVzZSBkaWZmZXJl bnQgc29sdXRpb25zLgorCisgIGEpIFJlbW92ZSBhbnkgc3VwZXJmbHVvdXMgInNlbGVjdCBGT08i IG9yICJkZXBlbmRzIG9uIEZPTyIKKyAgYikgTWF0Y2ggZGVwZW5kZW5jeSBzZW1hbnRpY3M6CisJ YjEpIFN3YXAgYWxsICJzZWxlY3QgRk9PIiB0byAiZGVwZW5kcyBvbiBGT08iIG9yLAorCWIyKSBT d2FwIGFsbCAiZGVwZW5kcyBvbiBGT08iIHRvICJzZWxlY3QgRk9PIgorICBjKSBDb25zaWRlciB0 aGUgdXNlIG9mICJpbXBseSIgaW5zdGVhZCBvZiAic2VsZWN0IgorCitUaGUgcmVzb2x1dGlvbiB0 byBhKSBjYW4gYmUgdGVzdGVkIHdpdGggdGhlIHNhbXBsZSBLY29uZmlnIGZpbGUKK0RvY3VtZW50 YXRpb24va2J1aWxkL0tjb25maWcucmVjdXJzaW9uLWlzc3VlLTAxIHRocm91Z2ggdGhlIHJlbW92 YWwKK29mIHRoZSAic2VsZWN0IENPUkUiIGZyb20gQ09SRV9CRUxMX0FfQURWQU5DRUQgYXMgdGhh dCBpcyBpbXBsaWNpdCBhbHJlYWR5CitzaW5jZSBDT1JFX0JFTExfQSBkZXBlbmRzIG9uIENPUkUu IEF0IHRpbWVzIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gcmVtb3ZlCitzb21lIGRlcGVuZGVu Y3kgY3JpdGVyaWEsIGZvciBzdWNoIGNhc2VzIHlvdSBjYW4gd29yayB3aXRoIHNvbHV0aW9uIGIp LgorCitUaGUgdHdvIGRpZmZlcmVudCByZXNvbHV0aW9ucyBmb3IgYikgY2FuIGJlIHRlc3RlZCBp biB0aGUgc2FtcGxlIEtjb25maWcgZmlsZQorRG9jdW1lbnRhdGlvbi9rYnVpbGQvS2NvbmZpZy5y ZWN1cnNpb24taXNzdWUtMDIuCisKK0JlbG93IGlzIGEgbGlzdCBvZiBleGFtcGxlcyBvZiBwcmlv ciBmaXhlcyBmb3IgdGhlc2UgdHlwZXMgb2YgcmVjdXJzaXZlIGlzc3VlczsKK2FsbCBlcnJvcnMg YXBwZWFyIHRvIGludm9sdmUgb25lIG9yIG1vcmUgc2VsZWN0J3MgYW5kIG9uZSBvciBtb3JlICJk ZXBlbmRzIG9uIi4KKworY29tbWl0ICAgICAgICAgIGZpeAorPT09PT09ICAgICAgICAgID09PQor MDZiNzE4YzAxMjA4ICAgIHNlbGVjdCBBIC0+IGRlcGVuZHMgb24gQQorYzIyZWFjZmU4MmY5ICAg IGRlcGVuZHMgb24gQSAtPiBkZXBlbmRzIG9uIEIKKzZhOTFlODU0NDQyYyAgICBzZWxlY3QgQSAt PiBkZXBlbmRzIG9uIEEKKzExOGM1NjVhOGYyZSAgICBzZWxlY3QgQSAtPiBzZWxlY3QgQgorZjAw NGU1NTk0NzA1ICAgIHNlbGVjdCBBIC0+IGRlcGVuZHMgb24gQQorYzc4NjFmMzdiNGM2ICAgIGRl cGVuZHMgb24gQSAtPiAobnVsbCkKKzgwYzY5OTE1ZTVmYiAgICBzZWxlY3QgQSAtPiAobnVsbCkg ICAgICAgICAgICAgICgxKQorYzIyMThlMjZjMGQwICAgIHNlbGVjdCBBIC0+IGRlcGVuZHMgb24g QSAgICAgICAgKDEpCitkNmFlOTlkMDRlMWMgICAgc2VsZWN0IEEgLT4gZGVwZW5kcyBvbiBBCis5 NWNhMTljZjhjYmYgICAgc2VsZWN0IEEgLT4gZGVwZW5kcyBvbiBBCis4ZjA1N2Q3YmNhNTQgICAg ZGVwZW5kcyBvbiBBIC0+IChudWxsKQorOGYwNTdkN2JjYTU0ICAgIGRlcGVuZHMgb24gQSAtPiBz ZWxlY3QgQQorYTA3MDFmMDQ4NDZlICAgIHNlbGVjdCBBIC0+IGRlcGVuZHMgb24gQQorMGM4Yjky ZjdmMjU5ICAgIGRlcGVuZHMgb24gQSAtPiAobnVsbCkKK2U0ZTllMDU0MDkyOCAgICBzZWxlY3Qg QSAtPiBkZXBlbmRzIG9uIEEgICAgICAgICgyKQorNzQ1M2VhODg2ZTg3ICAgIGRlcGVuZHMgb24g QSA+IChudWxsKSAgICAgICAgICAgKDEpCis3YjFmZmY3ZTRmZGYgICAgc2VsZWN0IEEgLT4gZGVw ZW5kcyBvbiBBCis4NmM3NDdkMmE0ZjAgICAgc2VsZWN0IEEgLT4gZGVwZW5kcyBvbiBBCitkOWY5 YWI1MWU1NWUgICAgc2VsZWN0IEEgLT4gZGVwZW5kcyBvbiBBCiswYzUxYTRkOGFiZDYgICAgZGVw ZW5kcyBvbiBBIC0+IHNlbGVjdCBBICAgICAgICAoMykKK2U5ODA2MmVkNmRjNCAgICBzZWxlY3Qg QSAtPiBkZXBlbmRzIG9uIEEgICAgICAgICgzKQorOTFlNWQyODRhN2YxICAgIHNlbGVjdCBBIC0+ IChudWxsKQorCisoMSkgUGFydGlhbCAob3Igbm8pIHF1b3RlIG9mIGVycm9yLgorKDIpIFRoYXQg c2VlbXMgdG8gYmUgdGhlIGdpc3Qgb2YgdGhhdCBmaXguCisoMykgU2FtZSBlcnJvci4KKworRnV0 dXJlIGtjb25maWcgd29yaworfn5+fn5+fn5+fn5+fn5+fn5+fgorCitXb3JrIG9uIGtjb25maWcg aXMgd2VsY29tZWQgb24gYm90aCBhcmVhcyBvZiBjbGFyaWZ5aW5nIHNlbWFudGljcyBhbmQgb24K K2V2YWx1YXRpbmcgdGhlIHVzZSBvZiBhIGZ1bGwgU0FUIHNvbHZlciBmb3IgaXQuIEEgZnVsbCBT QVQgc29sdmVyIGNhbiBiZQorZGVzaXJhYmxlIHRvIGVuYWJsZSBtb3JlIGNvbXBsZXggZGVwZW5k ZW5jeSBtYXBwaW5ncyBhbmQgLyBvciBxdWVyaWVzLAorZm9yIGluc3RhbmNlIG9uIHBvc3NpYmxl IHVzZSBjYXNlIGZvciBhIFNBVCBzb2x2ZXIgY291bGQgYmUgdGhhdCBvZiBoYW5kbGluZwordGhl IGN1cnJlbnQga25vd24gcmVjdXJzaXZlIGRlcGVuZGVuY3kgaXNzdWVzLiBJdCBpcyBub3Qga25v d24gaWYgdGhpcyB3b3VsZAorYWRkcmVzcyBzdWNoIGlzc3VlcyBidXQgc3VjaCBldmFsdWF0aW9u IGlzIGRlc2lyYWJsZS4gSWYgc3VwcG9ydCBmb3IgYSBmdWxsIFNBVAorc29sdmVyIHByb3ZlcyB0 b28gY29tcGxleCBvciB0aGF0IGl0IGNhbm5vdCBhZGRyZXNzIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5 IGlzc3VlcworS2NvbmZpZyBzaG91bGQgaGF2ZSBhdCBsZWFzdCBjbGVhciBhbmQgd2VsbCBkZWZp bmVkIHNlbWFudGljcyB3aGljaCBhbHNvCithZGRyZXNzZXMgYW5kIGRvY3VtZW50cyBsaW1pdGF0 aW9ucyBvciByZXF1aXJlbWVudHMgc3VjaCBhcyB0aGUgb25lcyBkZWFsaW5nCit3aXRoIHJlY3Vy c2l2ZSBkZXBlbmRlbmNpZXMuCisKK0Z1cnRoZXIgd29yayBvbiBib3RoIG9mIHRoZXNlIGFyZWFz IGlzIHdlbGNvbWVkIG9uIEtjb25maWcuIFdlIGVsYWJvcmF0ZQorb24gYm90aCBvZiB0aGVzZSBp biB0aGUgbmV4dCB0d28gc3Vic2VjdGlvbnMuCisKK1NlbWFudGljcyBvZiBLY29uZmlnCit+fn5+ fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgdXNlIG9mIEtjb25maWcgaXMgYnJvYWQsIExpbnV4IGlz IG5vdyBvbmx5IG9uZSBvZiBLY29uZmlnJ3MgdXNlcnM6CitvbmUgc3R1ZHkgaGFzIGNvbXBsZXRl ZCBhIGJyb2FkIGFuYWx5c2lzIG9mIEtjb25maWcgdXNlIGluIDEyIHByb2plY3RzIFswXS4KK0Rl c3BpdGUgaXRzIHdpZGVzcHJlYWQgdXNlLCBhbmQgYWx0aG91Z2ggdGhpcyBkb2N1bWVudCBkb2Vz IGEgcmVhc29uYWJsZSBqb2IKK2luIGRvY3VtZW50aW5nIGJhc2ljIEtjb25maWcgc3ludGF4IGEg bW9yZSBwcmVjaXNlIGRlZmluaXRpb24gb2YgS2NvbmZpZworc2VtYW50aWNzIGlzIHdlbGNvbWVk LiBPbmUgcHJvamVjdCBkZWR1Y2VkIEtjb25maWcgc2VtYW50aWNzIHRocm91Z2gKK3RoZSB1c2Ug b2YgdGhlIHhjb25maWcgY29uZmlndXJhdG9yIFsxXS4gV29yayBzaG91bGQgYmUgZG9uZSB0byBj b25maXJtIGlmCit0aGUgZGVkdWNlZCBzZW1hbnRpY3MgbWF0Y2hlcyBvdXIgaW50ZW5kZWQgS2Nv bmZpZyBkZXNpZ24gZ29hbHMuCisKK0hhdmluZyB3ZWxsIGRlZmluZWQgc2VtYW50aWNzIGNhbiBi ZSB1c2VmdWwgZm9yIHRvb2xzIGZvciBwcmFjdGljYWwKK2V2YWx1YXRpb24gb2YgZGVwZW5lbmNp ZXMsIGZvciBpbnN0YW5jZSBvbmUgc3VjaCB1c2Uga25vd24gY2FzZSB3YXMgd29yayB0bworZXhw cmVzcyBpbiBib29sZWFuIGFic3RyYWN0aW9uIG9mIHRoZSBpbmZlcnJlZCBzZW1hbnRpY3Mgb2Yg S2NvbmZpZyB0bwordHJhbnNsYXRlIEtjb25maWcgbG9naWMgaW50byBib29sZWFuIGZvcm11bGFz IGFuZCBydW4gYSBTQVQgc29sdmVyIG9uIHRoaXMgdG8KK2ZpbmQgZGVhZCBjb2RlIC8gZmVhdHVy ZXMgKGFsd2F5cyBpbmFjdGl2ZSksIDExNCBkZWFkIGZlYXR1cmVzIHdlcmUgZm91bmQgaW4KK0xp bnV4IHVzaW5nIHRoaXMgbWV0aG9kb2xvZ3kgWzFdIChTZWN0aW9uIDg6IFRocmVhdHMgdG8gdmFs aWRpdHkpLgorCitDb25maXJtaW5nIHRoaXMgY291bGQgcHJvdmUgdXNlZnVsIGFzIEtjb25maWcg c3RhbmRzIGFzIG9uZSBvZiB0aGUgdGhlIGxlYWRpbmcKK2luZHVzdHJpYWwgdmFyaWFiaWxpdHkg bW9kZWxpbmcgbGFuZ3VhZ2VzIFsxXSBbMl0uIEl0cyBzdHVkeSB3b3VsZCBoZWxwCitldmFsdWF0 ZSBwcmFjdGljYWwgdXNlcyBvZiBzdWNoIGxhbmd1YWdlcywgdGhlaXIgdXNlIHdhcyBvbmx5IHRo ZW9yZXRpY2FsCithbmQgcmVhbCB3b3JsZCByZXF1aXJlbWVudHMgd2VyZSBub3Qgd2VsbCB1bmRl cnN0b29kLiBBcyBpdCBzdGFuZHMgdGhvdWdoCitvbmx5IHJldmVyc2UgZW5naW5lZXJpbmcgdGVj aG5pcXVlcyBoYXZlIGJlZW4gdXNlZCB0byBkZWR1Y2Ugc2VtYW50aWNzIGZyb20KK3ZhcmlhYmls aXR5IG1vZGVsaW5nIGxhbmd1YWdlcyBzdWNoIGFzIEtjb25maWcgWzNdLgorCitbMF0gaHR0cDov L3d3dy5lbmcudXdhdGVybG9vLmNhL35zaHNoZS9rY29uZmlnX3NlbWFudGljcy5wZGYKK1sxXSBo dHRwOi8vZ3NkLnV3YXRlcmxvby5jYS9zaXRlcy9kZWZhdWx0L2ZpbGVzL3ZtLTIwMTMtYmVyZ2Vy LnBkZgorWzJdIGh0dHA6Ly9nc2QudXdhdGVybG9vLmNhL3NpdGVzL2RlZmF1bHQvZmlsZXMvYXNl MjQxLWJlcmdlcl8wLnBkZgorWzNdIGh0dHA6Ly9nc2QudXdhdGVybG9vLmNhL3NpdGVzL2RlZmF1 bHQvZmlsZXMvaWNzZTIwMTEucGRmCisKK0Z1bGwgU0FUIHNvbHZlciBmb3IgS2NvbmZpZworfn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FsdGhvdWdoIFNBVCBzb2x2ZXJzIFswXSBoYXZl bid0IHlldCBiZWVuIHVzZWQgYnkgS2NvbmZpZyBkaXJlY3RseSwgYXMgbm90ZWQgaW4KK3RoZSBw cmV2aW91cyBzdWJzZWN0aW9uLCB3b3JrIGhhcyBiZWVuIGRvbmUgaG93ZXZlciB0byBleHByZXNz IGluIGJvb2xlYW4KK2Fic3RyYWN0aW9uIHRoZSBpbmZlcnJlZCBzZW1hbnRpY3Mgb2YgS2NvbmZp ZyB0byB0cmFuc2xhdGUgS2NvbmZpZyBsb2dpYyBpbnRvCitib29sZWFuIGZvcm11bGFzIGFuZCBy dW4gYSBTQVQgc29sdmVyIG9uIGl0IFsxXS4gQW5vdGhlciBrbm93biByZWxhdGVkIHByb2plY3QK K2lzIENBRE9TIFsyXSAoZm9ybWVyIFZBTU9TIFszXSkgYW5kIHRoZSB0b29scywgbWFpbmx5IHVu ZGVydGFrZXIgWzRdLCB3aGljaCBoYXMKK2JlZW4gaW50cm9kdWNlZCBmaXJzdCB3aXRoIFs1XS4g IFRoZSBiYXNpYyBjb25jZXB0IG9mIHVuZGVydGFrZXIgaXMgdG8gZXhyYWN0Cit2YXJpYWJpbGl0 eSBtb2RlbHMgZnJvbSBLY29uZmlnLCBhbmQgcHV0IHRoZW0gdG9nZXRoZXIgd2l0aCBhIHByb3Bv c2l0aW9uYWwKK2Zvcm11bGEgZXh0cmFjdGVkIGZyb20gQ1BQICNpZmRlZnMgYW5kIGJ1aWxkLXJ1 bGVzIGludG8gYSBTQVQgc29sdmVyIGluIG9yZGVyCit0byBmaW5kIGRlYWQgY29kZSwgZGVhZCBm aWxlcywgYW5kIGRlYWQgc3ltYm9scy4gSWYgdXNpbmcgYSBTQVQgc29sdmVyIGlzCitkZXNpcmFi bGUgb24gS2NvbmZpZyBvbmUgYXBwcm9hY2ggd291bGQgYmUgdG8gZXZhbHVhdGUgcmVwdXJwb3Np bmcgc3VjaCBlZmZvcnRzCitzb21laG93IG9uIEtjb25maWcuIFRoZXJlIGlzIGVub3VnaCBpbnRl cmVzdCBmcm9tIG1lbnRvcnMgb2YgZXhpc3RpbmcgcHJvamVjdHMKK3RvIG5vdCBvbmx5IGhlbHAg YWR2aXNlIGhvdyB0byBpbnRlZ3JhdGUgdGhpcyB3b3JrIHVwc3RyZWFtIGJ1dCBhbHNvIGhlbHAK K21haW50YWluIGl0IGxvbmcgdGVybS4gSW50ZXJlc3RlZCBkZXZlbG9wZXJzIHNob3VsZCB2aXNp dDoKKworaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbFByb2plY3RzL2tjb25maWctc2F0 CisKK1swXSBodHRwOi8vd3d3LmNzLmNvcm5lbGwuZWR1L35zYWJoYXIvY2hhcHRlcnMvU0FUU29s dmVycy1LUi1IYW5kYm9vay5wZGYKK1sxXSBodHRwOi8vZ3NkLnV3YXRlcmxvby5jYS9zaXRlcy9k ZWZhdWx0L2ZpbGVzL3ZtLTIwMTMtYmVyZ2VyLnBkZgorWzJdIGh0dHBzOi8vY2Fkb3MuY3MuZmF1 LmRlCitbM10gaHR0cHM6Ly92YW1vcy5jcy5mYXUuZGUKK1s0XSBodHRwczovL3VuZGVydGFrZXIu Y3MuZmF1LmRlCitbNV0gaHR0cHM6Ly93d3c0LmNzLmZhdS5kZS9QdWJsaWNhdGlvbnMvMjAxMS90 YXJ0bGVyXzExX2V1cm9zeXMucGRmCmRpZmYgLS1naXQgYS9kb2NzL21pc2Mva2NvbmZpZy50eHQg Yi9kb2NzL21pc2Mva2NvbmZpZy50eHQKaW5kZXggYmJjOTljMGMxMC4uNzIzMzExOGYzYSAxMDA2 NDQKLS0tIGEvZG9jcy9taXNjL2tjb25maWcudHh0CisrKyBiL2RvY3MvbWlzYy9rY29uZmlnLnR4 dApAQCAtMTE5LDcgKzExOSw3IEBAIEV4YW1wbGVzOgogCQkxNSUgb2YgdHJpc3RhdGVzIHdpbGwg YmUgc2V0IHRvICd5JywgMTUlIHRvICdtJywgNzAlIHRvICduJwogCiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1F bnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yICdzaWxlbnRvbGRjb25maWcnCitFbnZpcm9ubWVudCB2 YXJpYWJsZXMgZm9yICdzeW5jY29uZmlnJwogCiBLQ09ORklHX05PU0lMRU5UVVBEQVRFCiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0 IGEveGVuL01ha2VmaWxlIGIveGVuL01ha2VmaWxlCmluZGV4IDYwODY3ZTMxYTQuLjQ5Y2E4NTA1 ZjcgMTAwNjQ0Ci0tLSBhL3hlbi9NYWtlZmlsZQorKysgYi94ZW4vTWFrZWZpbGUKQEAgLTI1MSwx MyArMjUxLDEzIEBAIEZPUkNFOgogCiBrY29uZmlnIDo9IHNpbGVudG9sZGNvbmZpZyBvbGRjb25m aWcgY29uZmlnIG1lbnVjb25maWcgZGVmY29uZmlnIFwKIAluY29uZmlnIHhjb25maWcgZ2NvbmZp ZyBzYXZlZGVmY29uZmlnIGxpc3RuZXdjb25maWcgb2xkZGVmY29uZmlnIFwKLQlyYW5kY29uZmln CisJcmFuZGNvbmZpZyBzeW5jY29uZmlnCiAuUEhPTlk6ICQoa2NvbmZpZykKICQoa2NvbmZpZyk6 CiAJJChNQUtFKSAtZiAkKEJBU0VESVIpL3Rvb2xzL2tjb25maWcvTWFrZWZpbGUua2NvbmZpZyBB UkNIPSQoQVJDSCkgU1JDQVJDSD0kKFNSQ0FSQ0gpIEhPU1RDQz0iJChIT1NUQ0MpIiBIT1NUQ1hY PSIkKEhPU1RDWFgpIiAkQAogCiBpbmNsdWRlL2NvbmZpZy8lLmNvbmY6IGluY2x1ZGUvY29uZmln L2F1dG8uY29uZi5jbWQgJChLQ09ORklHX0NPTkZJRykKLQkkKE1BS0UpIC1mICQoQkFTRURJUikv dG9vbHMva2NvbmZpZy9NYWtlZmlsZS5rY29uZmlnIEFSQ0g9JChBUkNIKSBTUkNBUkNIPSQoU1JD QVJDSCkgSE9TVENDPSIkKEhPU1RDQykiIEhPU1RDWFg9IiQoSE9TVENYWCkiIHNpbGVudG9sZGNv bmZpZworCSQoTUFLRSkgLWYgJChCQVNFRElSKS90b29scy9rY29uZmlnL01ha2VmaWxlLmtjb25m aWcgQVJDSD0kKEFSQ0gpIFNSQ0FSQ0g9JChTUkNBUkNIKSBIT1NUQ0M9IiQoSE9TVENDKSIgSE9T VENYWD0iJChIT1NUQ1hYKSIgc3luY2NvbmZpZwogCiAjIEFsbG93IHBlb3BsZSB0byBqdXN0IHJ1 biBgbWFrZWAgYXMgYmVmb3JlIGFuZCBub3QgZm9yY2UgdGhlbSB0byBjb25maWd1cmUKICQoS0NP TkZJR19DT05GSUcpOgpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL2tjb25maWcuaCBiL3hl bi9pbmNsdWRlL3hlbi9rY29uZmlnLmgKaW5kZXggNGQ1OGM1YmIzYy4uY2M4ZmExMDljZiAxMDA2 NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL2tjb25maWcuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4v a2NvbmZpZy5oCkBAIC0xLDExICsxLDMzIEBACi0jaWZuZGVmIF9fWEVOX0tDT05GSUdfSAotI2Rl ZmluZSBfX1hFTl9LQ09ORklHX0gKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w ICovCisjaWZuZGVmIF9fTElOVVhfS0NPTkZJR19ICisjZGVmaW5lIF9fTElOVVhfS0NPTkZJR19I CiAKICNpbmNsdWRlIDxnZW5lcmF0ZWQvYXV0b2NvbmYuaD4KIAorI2lmZGVmIENPTkZJR19DUFVf QklHX0VORElBTgorI2RlZmluZSBfX0JJR19FTkRJQU4gNDMyMQorI2Vsc2UKKyNkZWZpbmUgX19M SVRUTEVfRU5ESUFOIDEyMzQKKyNlbmRpZgorCisjZGVmaW5lIF9fQVJHX1BMQUNFSE9MREVSXzEg MCwKKyNkZWZpbmUgX190YWtlX3NlY29uZF9hcmcoX19pZ25vcmVkLCB2YWwsIC4uLikgdmFsCisK Ky8qCisgKiBUaGUgdXNlIG9mICImJiIgLyAifHwiIGlzIGxpbWl0ZWQgaW4gY2VydGFpbiBleHBy ZXNzaW9ucy4KKyAqIFRoZSBmb2xsb3dpbmcgZW5hYmxlIHRvIGNhbGN1bGF0ZSAiYW5kIiAvICJv ciIgd2l0aCBtYWNybyBleHBhbnNpb24gb25seS4KKyAqLworI2RlZmluZSBfX2FuZCh4LCB5KQkJ CV9fX2FuZCh4LCB5KQorI2RlZmluZSBfX19hbmQoeCwgeSkJCQlfX19fYW5kKF9fQVJHX1BMQUNF SE9MREVSXyMjeCwgeSkKKyNkZWZpbmUgX19fX2FuZChhcmcxX29yX2p1bmssIHkpCV9fdGFrZV9z ZWNvbmRfYXJnKGFyZzFfb3JfanVuayB5LCAwKQorCisjZGVmaW5lIF9fb3IoeCwgeSkJCQlfX19v cih4LCB5KQorI2RlZmluZSBfX19vcih4LCB5KQkJCV9fX19vcihfX0FSR19QTEFDRUhPTERFUl8j I3gsIHkpCisjZGVmaW5lIF9fX19vcihhcmcxX29yX2p1bmssIHkpCQlfX3Rha2Vfc2Vjb25kX2Fy ZyhhcmcxX29yX2p1bmsgMSwgeSkKKwogLyoKICAqIEhlbHBlciBtYWNyb3MgdG8gdXNlIENPTkZJ R18gb3B0aW9ucyBpbiBDL0NQUCBleHByZXNzaW9ucy4gTm90ZSB0aGF0Ci0gKiB0aGVzZSBvbmx5 IHdvcmsgd2l0aCBib29sZWFuIG9wdGlvbi4KKyAqIHRoZXNlIG9ubHkgd29yayB3aXRoIGJvb2xl YW4gYW5kIHRyaXN0YXRlIG9wdGlvbnMuCiAgKi8KIAogLyoKQEAgLTE2LDE2ICszOCwzNiBAQAog ICogV2hlbiBDT05GSUdfQk9PR0VSIGlzIG5vdCBkZWZpbmVkLCB3ZSBnZW5lcmF0ZSBhICguLi4g MSwgMCkgcGFpciwgYW5kIHdoZW4KICAqIHRoZSBsYXN0IHN0ZXAgY2hlcnJ5IHBpY2tzIHRoZSAy bmQgYXJnLCB3ZSBnZXQgYSB6ZXJvLgogICovCi0jZGVmaW5lIF9fQVJHX1BMQUNFSE9MREVSXzEg MCwKLSNkZWZpbmUgY29uZmlnX2VuYWJsZWQoY2ZnKSBfY29uZmlnX2VuYWJsZWQoY2ZnKQotI2Rl ZmluZSBfY29uZmlnX2VuYWJsZWQodmFsdWUpIF9fY29uZmlnX2VuYWJsZWQoX19BUkdfUExBQ0VI T0xERVJfIyN2YWx1ZSkKLSNkZWZpbmUgX19jb25maWdfZW5hYmxlZChhcmcxX29yX2p1bmspIF9f X2NvbmZpZ19lbmFibGVkKGFyZzFfb3JfanVuayAxLCAwKQotI2RlZmluZSBfX19jb25maWdfZW5h YmxlZChfX2lnbm9yZWQsIHZhbCwgLi4uKSB2YWwKKyNkZWZpbmUgX19pc19kZWZpbmVkKHgpCQkJ X19faXNfZGVmaW5lZCh4KQorI2RlZmluZSBfX19pc19kZWZpbmVkKHZhbCkJCV9fX19pc19kZWZp bmVkKF9fQVJHX1BMQUNFSE9MREVSXyMjdmFsKQorI2RlZmluZSBfX19faXNfZGVmaW5lZChhcmcx X29yX2p1bmspCV9fdGFrZV9zZWNvbmRfYXJnKGFyZzFfb3JfanVuayAxLCAwKQogCiAvKgotICog SVNfRU5BQkxFRChDT05GSUdfRk9PKSBldmFsdWF0ZXMgdG8gMSBpZiBDT05GSUdfRk9PIGlzIHNl dCB0byAneScsIDAKKyAqIElTX0JVSUxUSU4oQ09ORklHX0ZPTykgZXZhbHVhdGVzIHRvIDEgaWYg Q09ORklHX0ZPTyBpcyBzZXQgdG8gJ3knLCAwCisgKiBvdGhlcndpc2UuIEZvciBib29sZWFuIG9w dGlvbnMsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICogSVNfRU5BQkxFRChDT05GSUdfRk9PKS4K KyAqLworI2RlZmluZSBJU19CVUlMVElOKG9wdGlvbikgX19pc19kZWZpbmVkKG9wdGlvbikKKwor LyoKKyAqIElTX01PRFVMRShDT05GSUdfRk9PKSBldmFsdWF0ZXMgdG8gMSBpZiBDT05GSUdfRk9P IGlzIHNldCB0byAnbScsIDAKICAqIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBJU19FTkFCTEVE KG9wdGlvbikgY29uZmlnX2VuYWJsZWQob3B0aW9uKQorI2RlZmluZSBJU19NT0RVTEUob3B0aW9u KSBfX2lzX2RlZmluZWQob3B0aW9uIyNfTU9EVUxFKQorCisvKgorICogSVNfUkVBQ0hBQkxFKENP TkZJR19GT08pIGV2YWx1YXRlcyB0byAxIGlmIHRoZSBjdXJyZW50bHkgY29tcGlsZWQKKyAqIGNv ZGUgY2FuIGNhbGwgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGNvZGUgY29tcGlsZWQgYmFzZWQgb24g Q09ORklHX0ZPTy4KKyAqIFRoaXMgaXMgc2ltaWxhciB0byBJU19FTkFCTEVEKCksIGJ1dCByZXR1 cm5zIGZhbHNlIHdoZW4gaW52b2tlZCBmcm9tCisgKiBidWlsdC1pbiBjb2RlIHdoZW4gQ09ORklH X0ZPTyBpcyBzZXQgdG8gJ20nLgorICovCisjZGVmaW5lIElTX1JFQUNIQUJMRShvcHRpb24pIF9f b3IoSVNfQlVJTFRJTihvcHRpb24pLCBcCisJCQkJX19hbmQoSVNfTU9EVUxFKG9wdGlvbiksIF9f aXNfZGVmaW5lZChNT0RVTEUpKSkKKworLyoKKyAqIElTX0VOQUJMRUQoQ09ORklHX0ZPTykgZXZh bHVhdGVzIHRvIDEgaWYgQ09ORklHX0ZPTyBpcyBzZXQgdG8gJ3knIG9yICdtJywKKyAqIDAgb3Ro ZXJ3aXNlLgorICovCisjZGVmaW5lIElTX0VOQUJMRUQob3B0aW9uKSBfX29yKElTX0JVSUxUSU4o b3B0aW9uKSwgSVNfTU9EVUxFKG9wdGlvbikpCiAKLSNlbmRpZiAvKiBfX1hFTl9LQ09ORklHX0gg Ki8KKyNlbmRpZiAvKiBfX0xJTlVYX0tDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xz L2tjb25maWcvLmdpdGlnbm9yZSBiL3hlbi90b29scy9rY29uZmlnLy5naXRpZ25vcmUKaW5kZXgg YmU2MDNjNGZlZi4uMmRhNTc5ZWRjYiAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvLmdp dGlnbm9yZQorKysgYi94ZW4vdG9vbHMva2NvbmZpZy8uZ2l0aWdub3JlCkBAIC0xLDExICsxLDYg QEAKICMKICMgR2VuZXJhdGVkIGZpbGVzCiAjCi1jb25maWcqCi0qLmxleC5jCi0qLnRhYi5jCi0q LnRhYi5oCi16Y29uZi5oYXNoLmMKICoubW9jCiBnY29uZi5nbGFkZS5oCiAqLnBvdApkaWZmIC0t Z2l0IGEveGVuL3Rvb2xzL2tjb25maWcvTWFrZWZpbGUgYi94ZW4vdG9vbHMva2NvbmZpZy9NYWtl ZmlsZQppbmRleCBhY2VhYWVkMDk4Li41ZGVmODc3OWQ3IDEwMDY0NAotLS0gYS94ZW4vdG9vbHMv a2NvbmZpZy9NYWtlZmlsZQorKysgYi94ZW4vdG9vbHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtMSw4 ICsxLDkgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CiAjIEtlcm5lbCBjb25maWd1cmF0aW9uIHRhcmdldHMKICMgVGhlc2UgdGFyZ2V0 cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQogCi1QSE9OWSArPSB4Y29uZmlnIGdj b25maWcgbWVudWNvbmZpZyBjb25maWcgc2lsZW50b2xkY29uZmlnIHVwZGF0ZS1wby1jb25maWcg XAorUEhPTlkgKz0geGNvbmZpZyBnY29uZmlnIG1lbnVjb25maWcgY29uZmlnIHN5bmNjb25maWcg dXBkYXRlLXBvLWNvbmZpZyBcCiAJbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcKIAogaWZk ZWYgS0JVSUxEX0tDT05GSUcKQEAgLTMzLDIyICszNCwyNCBAQCBjb25maWc6ICQob2JqKS9jb25m CiBuY29uZmlnOiAkKG9iaikvbmNvbmYKIAkkPCAkKHNpbGVudCkgJChLY29uZmlnKQogCi1zaWxl bnRvbGRjb25maWc6ICQob2JqKS9jb25mCisjIFRoaXMgaGFzIGJlY29tZSBhbiBpbnRlcm5hbCBp bXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIGlzIG5vdyBkZXByZWNhdGVkCisjIGZvciBleHRlcm5h bCB1c2UuCitzeW5jY29uZmlnOiAkKG9iaikvY29uZgogCSQoUSlta2RpciAtcCBpbmNsdWRlL2Nv bmZpZyBpbmNsdWRlL2dlbmVyYXRlZAogCSQ8ICQoc2lsZW50KSAtLSRAICQoS2NvbmZpZykKIAot bG9jYWx5ZXNjb25maWcgbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5w bCAkKG9iaikvY29uZgorbG9jYWx5ZXNjb25maWcgbG9jYWxtb2Rjb25maWc6ICQob2JqKS9jb25m CiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvY29uZmlnIGluY2x1ZGUvZ2VuZXJhdGVkCi0JJChRKXBl cmwgJDwgLS0kQCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlwZXJs ICQoc3JjdHJlZSkvJChzcmMpL3N0cmVhbWxpbmVfY29uZmlnLnBsIC0tJEAgJChzcmN0cmVlKSAk KEtjb25maWcpID4gLnRtcC5jb25maWcKIAkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJ CQlcCiAJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJCVwKIAkJCShtdiAtZiAuY29u ZmlnIC5jb25maWcub2xkLjE7CQkJXAogCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJ XAotCQkJICQob2JqKS9jb25mICQoc2lsZW50KSAtLXNpbGVudG9sZGNvbmZpZyAkKEtjb25maWcp OyBcCisJCQkgJDwgJChzaWxlbnQpIC0tb2xkY29uZmlnICQoS2NvbmZpZyk7CQlcCiAJCQkgbXYg LWYgLmNvbmZpZy5vbGQuMSAuY29uZmlnLm9sZCkJCVwKIAllbHNlCQkJCQkJCQlcCiAJCQltdiAt ZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJCVwKLQkJCSQob2JqKS9jb25mICQoc2lsZW50KSAtLXNp bGVudG9sZGNvbmZpZyAkKEtjb25maWcpOyBcCisJCQkkPCAkKHNpbGVudCkgLS1vbGRjb25maWcg JChLY29uZmlnKTsJCVwKIAlmaQogCSQoUSlybSAtZiAudG1wLmNvbmZpZwogCkBAIC04MywxMiAr ODYsMjEgQEAgUEhPTlkgKz0gJChzaW1wbGUtdGFyZ2V0cykKICQoc2ltcGxlLXRhcmdldHMpOiAk KG9iaikvY29uZgogCSQ8ICQoc2lsZW50KSAtLSRAICQoS2NvbmZpZykKIAotUEhPTlkgKz0gb2xk bm9jb25maWcgc2F2ZWRlZmNvbmZpZyBkZWZjb25maWcKK1BIT05ZICs9IG9sZG5vY29uZmlnIHNp bGVudG9sZGNvbmZpZyBzYXZlZGVmY29uZmlnIGRlZmNvbmZpZwogCiAjIG9sZG5vY29uZmlnIGlz IGFuIGFsaWFzIG9mIG9sZGRlZmNvbmZpZywgYmVjYXVzZSBwZW9wbGUgYWxyZWFkeSBhcmUgZGVw ZW5kZW50CiAjIG9uIGl0cyBiZWhhdmlvciAoc2V0cyBuZXcgc3ltYm9scyB0byB0aGVpciBkZWZh dWx0IHZhbHVlIGJ1dCBub3QgJ24nKSB3aXRoIHRoZQogIyBjb3VudGVyLWludHVpdGl2ZSBuYW1l Lgogb2xkbm9jb25maWc6IG9sZGRlZmNvbmZpZworCUBlY2hvICIgIFdBUk5JTkc6IFwib2xkbm9j b25maWdcIiB0YXJnZXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIExpbnV4IDQuMTkiCisJQGVjaG8g IiAgICAgICAgICAgIFBsZWFzZSB1c2UgXCJvbGRkZWZjb25maWdcIiBpbnN0ZWFkLCB3aGljaCBp cyBhbiBhbGlhcy4iCisKKyMgV2UgZG8gbm90IGV4cGVjdCBtYW51YWwgaW52b2tjYXRpb24gb2Yg InNpbGVudG9sZGNvZmlnIiAob3IgInN5bmNjb25maWciKS4KK3NpbGVudG9sZGNvbmZpZzogc3lu Y2NvbmZpZworCUBlY2hvICIgIFdBUk5JTkc6IFwic2lsZW50b2xkY29uZmlnXCIgaGFzIGJlZW4g cmVuYW1lZCB0byBcInN5bmNjb25maWdcIiIKKwlAZWNobyAiICAgICAgICAgICAgYW5kIGlzIG5v dyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIgorCUBlY2hvICIgICAgICAgICAg ICBXaGF0IHlvdSB3YW50IGlzIHByb2JhYmx5IFwib2xkY29uZmlnXCIuIgorCUBlY2hvICIgICAg ICAgICAgICBcInNpbGVudG9sZGNvbmZpZ1wiIHdpbGwgYmUgcmVtb3ZlZCBhZnRlciBMaW51eCA0 LjE5IgogCiBzYXZlZGVmY29uZmlnOiAkKG9iaikvY29uZgogCSQ8ICQoc2lsZW50KSAtLSRAPWRl ZmNvbmZpZyAkKEtjb25maWcpCkBAIC05Nyw4ICsxMDksMTMgQEAgZGVmY29uZmlnOiAkKG9iaikv Y29uZgogaWZlcSAoJChLQlVJTERfREVGQ09ORklHKSwpCiAJJDwgJChzaWxlbnQpIC0tZGVmY29u ZmlnICQoS2NvbmZpZykKIGVsc2UKK2lmbmVxICgkKHdpbGRjYXJkICQoc3JjdHJlZSkvYXJjaC8k KFNSQ0FSQ0gpL2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSksKQogCUAkKGtlY2hvKSAiKioq IERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERfREVGQ09ORklHKSci CiAJJChRKSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZpZz1hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8k KEtCVUlMRF9ERUZDT05GSUcpICQoS2NvbmZpZykKK2Vsc2UKKwlAJChrZWNobykgIioqKiBEZWZh dWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gdGFyZ2V0ICckKEtCVUlMRF9ERUZDT05GSUcp JyIKKwkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlICQoS0JVSUxEX0RFRkNPTkZJ RykKK2VuZGlmCiBlbmRpZgogCiAlX2RlZmNvbmZpZzogJChvYmopL2NvbmYKQEAgLTEyMyw2ICsx NDAsMTQgQEAgUEhPTlkgKz0gdGlueWNvbmZpZwogdGlueWNvbmZpZzoKIAkkKFEpJChNQUtFKSAt ZiAkKHNyY3RyZWUpL01ha2VmaWxlIGFsbG5vY29uZmlnIHRpbnkuY29uZmlnCiAKKyMgQ0hFQ0s6 IC1vIGNhY2hlX2Rpcj08cGF0aD4gd29ya2luZz8KK1BIT05ZICs9IHRlc3Rjb25maWcKK3Rlc3Rj b25maWc6ICQob2JqKS9jb25mCisJJChQWVRIT04zKSAtQiAtbSBweXRlc3QgJChzcmN0cmVlKS8k KHNyYykvdGVzdHMgXAorCS1vIGNhY2hlX2Rpcj0kKGFic3BhdGggJChvYmopL3Rlc3RzLy5jYWNo ZSkgXAorCSQoaWYgJChmaW5kc3RyaW5nIDEsJChLQlVJTERfVkVSQk9TRSkpLC0tY2FwdHVyZT1u bykKK2NsZWFuLWRpcnMgKz0gdGVzdHMvLmNhY2hlCisKICMgSGVscCB0ZXh0IHVzZWQgYnkgbWFr ZSBoZWxwCiBoZWxwOgogCUBlY2hvICAnICBjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZp ZyB1dGlsaXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW0nCkBAIC0xMzQsNyArMTU5LDYgQEAg aGVscDoKIAlAZWNobyAgJyAgb2xkY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRp bGlzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlJwogCUBlY2hvICAnICBsb2NhbG1vZGNv bmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgZGlzYWJsaW5nIG1vZHVsZXMgbm90IGxvYWRl ZCcKIAlAZWNobyAgJyAgbG9jYWx5ZXNjb25maWcgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIGNv bnZlcnRpbmcgbG9jYWwgbW9kcyB0byBjb3JlJwotCUBlY2hvICAnICBzaWxlbnRvbGRjb25maWcg LSBTYW1lIGFzIG9sZGNvbmZpZywgYnV0IHF1aWV0bHksIGFkZGl0aW9uYWxseSB1cGRhdGUgZGVw cycKIAlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBmcm9t IEFSQ0ggc3VwcGxpZWQgZGVmY29uZmlnJwogCUBlY2hvICAnICBzYXZlZGVmY29uZmlnICAgLSBT YXZlIGN1cnJlbnQgY29uZmlnIGFzIC4vZGVmY29uZmlnIChtaW5pbWFsIGNvbmZpZyknCiAJQGVj aG8gICcgIGFsbG5vY29uZmlnCSAgLSBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBh bnN3ZXJlZCB3aXRoIG5vJwpAQCAtMTQzLDggKzE2Nyw4IEBAIGhlbHA6CiAJQGVjaG8gICcgIGFs bGRlZmNvbmZpZyAgICAtIE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVs dCcKIAlAZWNobyAgJyAgcmFuZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3 ZXIgdG8gYWxsIG9wdGlvbnMnCiAJQGVjaG8gICcgIGxpc3RuZXdjb25maWcgICAtIExpc3QgbmV3 IG9wdGlvbnMnCi0JQGVjaG8gICcgIG9sZGRlZmNvbmZpZwkgIC0gU2FtZSBhcyBzaWxlbnRvbGRj b25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhlaXInCi0JQGVjaG8gICcgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQgdmFsdWUnCisJQGVjaG8gICcgIG9sZGRlZmNvbmZpZwkgIC0gU2Ft ZSBhcyBvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhlaXInCisJQGVjaG8gICcg ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgd2l0aG91dCBwcm9tcHRpbmcnCiAJQGVj aG8gICcgIGt2bWNvbmZpZwkgIC0gRW5hYmxlIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3Iga3ZtIGd1 ZXN0IGtlcm5lbCBzdXBwb3J0JwogCUBlY2hvICAnICB4ZW5jb25maWcgICAgICAgLSBFbmFibGUg YWRkaXRpb25hbCBvcHRpb25zIGZvciB4ZW4gZG9tMCBhbmQgZ3Vlc3Qga2VybmVsIHN1cHBvcnQn CiAJQGVjaG8gICcgIHRpbnljb25maWcJICAtIENvbmZpZ3VyZSB0aGUgdGluaWVzdCBwb3NzaWJs ZSBrZXJuZWwnCkBAIC0xODMsMTMgKzIwNywxNCBAQCBnY29uZi1vYmpzCTo9IGdjb25mLm8gemNv bmYudGFiLm8KIAogaG9zdHByb2dzLXkgOj0gY29uZiBuY29uZiBtY29uZiBreGdldHRleHQgcWNv bmYgZ2NvbmYKIAordGFyZ2V0cwkJKz0gemNvbmYubGV4LmMKIGNsZWFuLWZpbGVzCTo9IHFjb25m Lm1vYyAudG1wX3F0Y2hlY2sgLnRtcF9ndGtjaGVjawotY2xlYW4tZmlsZXMJKz0gemNvbmYudGFi LmMgemNvbmYubGV4LmMgemNvbmYuaGFzaC5jIGdjb25mLmdsYWRlLmgKK2NsZWFuLWZpbGVzCSs9 IGdjb25mLmdsYWRlLmgKIGNsZWFuLWZpbGVzICAgICArPSBjb25maWcucG90IGxpbnV4LnBvdAog CiAjIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgcmVxdWlyZWQgbmN1cnNlcyBzdHVmZiBpbnN0YWxs ZWQgZm9yIGx4ZGlhbG9nIChtZW51Y29uZmlnKQogUEhPTlkgKz0gJChvYmopL2RvY2hlY2tseGRp YWxvZwotJChhZGRwcmVmaXggJChvYmopLywkKGx4ZGlhbG9nKSk6ICQob2JqKS9kb2NoZWNrbHhk aWFsb2cKKyQoYWRkcHJlZml4ICQob2JqKS8sIG1jb25mLm8gJChseGRpYWxvZykpOiAkKG9iaikv ZG9jaGVja2x4ZGlhbG9nCiAkKG9iaikvZG9jaGVja2x4ZGlhbG9nOgogCSQoUSkkKENPTkZJR19T SEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNoZWNrICQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB R1MpICQoSE9TVExPQURMSUJFU19tY29uZikKIApAQCAtMTk3LDE0ICsyMjIsMTIgQEAgYWx3YXlz IDo9IGRvY2hlY2tseGRpYWxvZwogCiAjIEFkZCBlbnZpcm9ubWVudCBzcGVjaWZpYyBmbGFncwog SE9TVF9FWFRSQUNGTEFHUyArPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpLyQo c3JjKS9jaGVjay5zaCAkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSkKK0hPU1RfRVhUUkFDWFhGTEFH UyArPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpLyQoc3JjKS9jaGVjay5zaCAk KEhPU1RDWFgpICQoSE9TVENYWEZMQUdTKSkKIAogIyBnZW5lcmF0ZWQgZmlsZXMgc2VlbSB0byBu ZWVkIHRoaXMgdG8gZmluZCBsb2NhbCBpbmNsdWRlIGZpbGVzCiBIT1NUQ0ZMQUdTX3pjb25mLmxl eC5vCTo9IC1JJChzcmMpCiBIT1NUQ0ZMQUdTX3pjb25mLnRhYi5vCTo9IC1JJChzcmMpCiAKLUxF WF9QUkVGSVhfemNvbmYJOj0gemNvbmYKLVlBQ0NfUFJFRklYX3pjb25mCTo9IHpjb25mCi0KIEhP U1RMT0FETElCRVNfcWNvbmYJPSAkKEtDX1FUX0xJQlMpCiBIT1NUQ1hYRkxBR1NfcWNvbmYubwk9 ICQoS0NfUVRfQ0ZMQUdTKQogCkBAIC0yMjYsNDkgKzI0OSwyMSBAQCAkKG9iaikvLnRtcF9xdGNo ZWNrOiAkKHNyYykvTWFrZWZpbGUKIAogIyBRdCBuZWVkcyBzb21lIGV4dHJhIGVmZm9ydC4uLgog JChvYmopLy50bXBfcXRjaGVjazoKLQlAc2V0IC1lOyAkKGtlY2hvKSAiICBDSEVDSyAgIHF0Ijsg ZGlyPSIiOyBwa2c9IiI7IFwKLQlpZiAhIHBrZy1jb25maWcgLS1leGlzdHMgUXRDb3JlIDI+IC9k ZXYvbnVsbDsgdGhlbiBcCi0JICAgIGVjaG8gIiogVW5hYmxlIHRvIGZpbmQgdGhlIFF0NCB0b29s IHFtYWtlLiBUcnlpbmcgdG8gdXNlIFF0MyI7IFwKLQkgICAgcGtnLWNvbmZpZyAtLWV4aXN0cyBx dCAyPiAvZGV2L251bGwgJiYgcGtnPXF0OyBcCi0JICAgIHBrZy1jb25maWcgLS1leGlzdHMgcXQt bXQgMj4gL2Rldi9udWxsICYmIHBrZz1xdC1tdDsgXAotCSAgICBpZiBbIC1uICIkJHBrZyIgXTsg dGhlbiBcCi0JICAgICAgY2ZsYWdzPSJcJCQoc2hlbGwgcGtnLWNvbmZpZyAkJHBrZyAtLWNmbGFn cykiOyBcCi0JICAgICAgbGlicz0iXCQkKHNoZWxsIHBrZy1jb25maWcgJCRwa2cgLS1saWJzKSI7 IFwKLQkgICAgICBtb2M9IlwkJChzaGVsbCBwa2ctY29uZmlnICQkcGtnIC0tdmFyaWFibGU9cHJl Zml4KS9iaW4vbW9jIjsgXAotCSAgICAgIGRpcj0iJCQocGtnLWNvbmZpZyAkJHBrZyAtLXZhcmlh YmxlPXByZWZpeCkiOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGZvciBkIGluICQkUVRESVIgL3Vz ci9zaGFyZS9xdCogL3Vzci9saWIvcXQqOyBkbyBcCi0JICAgICAgICBpZiBbIC1mICQkZC9pbmNs dWRlL3Fjb25maWcuaCBdOyB0aGVuIGRpcj0kJGQ7IGJyZWFrOyBmaTsgXAotCSAgICAgIGRvbmU7 IFwKLQkgICAgICBpZiBbIC16ICIkJGRpciIgXTsgdGhlbiBcCi0JICAgICAgICBlY2hvID4mMiAi KiI7IFwKLQkgICAgICAgIGVjaG8gPiYyICIqIFVuYWJsZSB0byBmaW5kIGFueSBRdCBpbnN0YWxs YXRpb24uIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCI7IFwKLQkgICAgICAgIGVjaG8gPiYyICIqIHRo ZSBRdDQgb3IgUXQzIGRldmVsb3BtZW50IHBhY2thZ2UgaXMgY29ycmVjdGx5IGluc3RhbGxlZCBh bmQiOyBcCi0JICAgICAgICBlY2hvID4mMiAiKiBlaXRoZXIgcW1ha2UgY2FuIGJlIGZvdW5kIG9y IGluc3RhbGwgcGtnLWNvbmZpZyBvciBzZXQiOyBcCi0JICAgICAgICBlY2hvID4mMiAiKiB0aGUg UVRESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24uIjsgXAot CSAgICAgICAgZWNobyA+JjIgIioiOyBcCi0JICAgICAgICBmYWxzZTsgXAotCSAgICAgIGZpOyBc Ci0JICAgICAgbGlicGF0aD0kJGRpci9saWI7IGxpYj1xdDsgb3NkaXI9IiI7IFwKLQkgICAgICAk KEhPU1RDWFgpIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgPiAvZGV2L251bGwgMj4mMSAmJiBc Ci0JICAgICAgICBvc2Rpcj14JCQoJChIT1NUQ1hYKSAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5 KTsgXAotCSAgICAgIHRlc3QgLWQgJCRsaWJwYXRoLyQkb3NkaXIgJiYgbGlicGF0aD0kJGxpYnBh dGgvJCRvc2RpcjsgXAotCSAgICAgIHRlc3QgLWYgJCRsaWJwYXRoL2xpYnF0LW10LnNvICYmIGxp Yj1xdC1tdDsgXAotCSAgICAgIGNmbGFncz0iLUkkJGRpci9pbmNsdWRlIjsgXAotCSAgICAgIGxp YnM9Ii1MJCRsaWJwYXRoIC1XbCwtcnBhdGgsJCRsaWJwYXRoIC1sJCRsaWIiOyBcCi0JICAgICAg bW9jPSIkJGRpci9iaW4vbW9jIjsgXAotCSAgICBmaTsgXAotCSAgICBpZiBbICEgLXggJCRkaXIv YmluL21vYyAtYSAteCAvdXNyL2Jpbi9tb2MgXTsgdGhlbiBcCi0JICAgICAgZWNobyAiKiI7IFwK LQkgICAgICBlY2hvICIqIFVuYWJsZSB0byBmaW5kICQkZGlyL2Jpbi9tb2MsIHVzaW5nIC91c3Iv YmluL21vYyBpbnN0ZWFkLiI7IFwKLQkgICAgICBlY2hvICIqIjsgXAotCSAgICAgIG1vYz0iL3Vz ci9iaW4vbW9jIjsgXAotCSAgICBmaTsgXAorCUBzZXQgLWU7ICQoa2VjaG8pICIgIENIRUNLICAg cXQiOyBcCisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyBRdDVDb3JlOyB0aGVuIFwKKwkgICAgY2Zs YWdzPSItc3RkPWMrKzExIC1mUElDIGBwa2ctY29uZmlnIC0tY2ZsYWdzIFF0NUNvcmUgUXQ1R3Vp IFF0NVdpZGdldHNgIjsgXAorCSAgICBsaWJzPWBwa2ctY29uZmlnIC0tbGlicyBRdDVDb3JlIFF0 NUd1aSBRdDVXaWRnZXRzYDsgXAorCSAgICBtb2M9YHBrZy1jb25maWcgLS12YXJpYWJsZT1ob3N0 X2JpbnMgUXQ1Q29yZWAvbW9jOyBcCisJZWxpZiBwa2ctY29uZmlnIC0tZXhpc3RzIFF0Q29yZTsg dGhlbiBcCisJICAgIGNmbGFncz1gcGtnLWNvbmZpZyAtLWNmbGFncyBRdENvcmUgUXRHdWlgOyBc CisJICAgIGxpYnM9YHBrZy1jb25maWcgLS1saWJzIFF0Q29yZSBRdEd1aWA7IFwKKwkgICAgbW9j PWBwa2ctY29uZmlnIC0tdmFyaWFibGU9bW9jX2xvY2F0aW9uIFF0Q29yZWA7IFwKIAllbHNlIFwK LQkgIGNmbGFncz0iXCQkKHNoZWxsIHBrZy1jb25maWcgUXRDb3JlIFF0R3VpIFF0M1N1cHBvcnQg LS1jZmxhZ3MpIjsgXAotCSAgbGlicz0iXCQkKHNoZWxsIHBrZy1jb25maWcgUXRDb3JlIFF0R3Vp IFF0M1N1cHBvcnQgLS1saWJzKSI7IFwKLQkgIG1vYz0iXCQkKHNoZWxsIHBrZy1jb25maWcgUXRD b3JlIC0tdmFyaWFibGU9bW9jX2xvY2F0aW9uKSI7IFwKLQkgIFsgLW4gIiQkbW9jIiBdIHx8IG1v Yz0iXCQkKHNoZWxsIHBrZy1jb25maWcgUXRDb3JlIC0tdmFyaWFibGU9cHJlZml4KS9iaW4vbW9j IjsgXAorCSAgICBlY2hvID4mMiAiKiI7IFwKKwkgICAgZWNobyA+JjIgIiogQ291bGQgbm90IGZp bmQgUXQgdmlhIHBrZy1jb25maWcuIjsgXAorCSAgICBlY2hvID4mMiAiKiBQbGVhc2UgaW5zdGFs bCBlaXRoZXIgUXQgNC44IG9yIDUueC4gYW5kIG1ha2Ugc3VyZSBpdCdzIGluIFBLR19DT05GSUdf UEFUSCI7IFwKKwkgICAgZWNobyA+JjIgIioiOyBcCisJICAgIGV4aXQgMTsgXAogCWZpOyBcCiAJ ZWNobyAiS0NfUVRfQ0ZMQUdTPSQkY2ZsYWdzIiA+ICRAOyBcCiAJZWNobyAiS0NfUVRfTElCUz0k JGxpYnMiID4+ICRAOyBcCkBAIC0zMDEsNyArMjk2LDcgQEAgJChvYmopLy50bXBfZ3RrY2hlY2s6 CiAJZmkKIGVuZGlmCiAKLSQob2JqKS96Y29uZi50YWIubzogJChvYmopL3pjb25mLmxleC5jICQo b2JqKS96Y29uZi5oYXNoLmMKKyQob2JqKS96Y29uZi50YWIubzogJChvYmopL3pjb25mLmxleC5j CiAKICQob2JqKS9xY29uZi5vOiAkKG9iaikvcWNvbmYubW9jCiAKZGlmZiAtLWdpdCBhL3hlbi90 b29scy9rY29uZmlnL01ha2VmaWxlLmhvc3QgYi94ZW4vdG9vbHMva2NvbmZpZy9NYWtlZmlsZS5o b3N0CmluZGV4IDEzM2VkZmFlNWIuLmFhOTcxY2MzZjMgMTAwNjQ0Ci0tLSBhL3hlbi90b29scy9r Y29uZmlnL01ha2VmaWxlLmhvc3QKKysrIGIveGVuL3Rvb2xzL2tjb25maWcvTWFrZWZpbGUuaG9z dApAQCAtMSwzICsxLDQgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICMg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KICMgQnVpbGRpbmcgYmluYXJpZXMgb24gdGhlIGhvc3Qgc3lzdGVt CiAjIEJpbmFyaWVzIGFyZSB1c2VkIGR1cmluZyB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGtlcm5l bCwgZm9yIGV4YW1wbGUKQEAgLTIxLDYgKzIyLDggQEAKICMgVGhleSBhcmUgbGlua2VkIGFzIEMr KyBjb2RlIHRvIHRoZSBleGVjdXRhYmxlIHFjb25mCiAKIF9faG9zdHByb2dzIDo9ICQoc29ydCAk KGhvc3Rwcm9ncy15KSAkKGhvc3Rwcm9ncy1tKSkKK2hvc3QtY3NobGliIDo9ICQoc29ydCAkKGhv c3RsaWJzLXkpICQoaG9zdGxpYnMtbSkpCitob3N0LWN4eHNobGliIDo9ICQoc29ydCAkKGhvc3Rj eHhsaWJzLXkpICQoaG9zdGN4eGxpYnMtbSkpCiAKICMgQyBjb2RlCiAjIEV4ZWN1dGFibGVzIGNv bXBpbGVkIGZyb20gYSBzaW5nbGUgLmMgZmlsZQpAQCAtNDIsMjMgKzQ1LDE5IEBAIGhvc3QtY3h4 bXVsdGkJOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJChpZiAkKCQobSktY3h4b2Jqcyks JChtKSkpCiAjIEMrKyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9tIC5jYyBmaWxlcwog aG9zdC1jeHhvYmpzCTo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4bXVsdGkpLCQoJCht KS1jeHhvYmpzKSkpCiAKLSMgb3V0cHV0IGRpcmVjdG9yeSBmb3IgcHJvZ3JhbXMvLm8gZmlsZXMK LSMgaG9zdHByb2dzLXkgOj0gdG9vbHMvYnVpbGQgbWF5IGhhdmUgYmVlbiBzcGVjaWZpZWQuCi0j IFJldHJpZXZlIGFsc28gZGlyZWN0b3J5IG9mIC5vIGZpbGVzIGZyb20gcHJvZy1vYmpzIG9yIHBy b2ctY3h4b2JqcyBub3RhdGlvbgotaG9zdC1vYmpkaXJzIDo9ICQoZGlyICQoX19ob3N0cHJvZ3Mp ICQoaG9zdC1jb2JqcykgJChob3N0LWN4eG9ianMpKQorIyBPYmplY3QgKC5vKSBmaWxlcyB1c2Vk IGJ5IHRoZSBzaGFyZWQgbGliYXJpZXMKK2hvc3QtY3Nob2Jqcwk6PSAkKHNvcnQgJChmb3JlYWNo IG0sJChob3N0LWNzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQoraG9zdC1jeHhzaG9ianMJOj0g JChzb3J0ICQoZm9yZWFjaCBtLCQoaG9zdC1jeHhzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQog Ci1ob3N0LW9iamRpcnMgOj0gJChzdHJpcCAkKHNvcnQgJChmaWx0ZXItb3V0IC4vLCQoaG9zdC1v YmpkaXJzKSkpKQotCi0KLV9faG9zdHByb2dzICAgICA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQo X19ob3N0cHJvZ3MpKQogaG9zdC1jc2luZ2xlCTo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0 LWNzaW5nbGUpKQogaG9zdC1jbXVsdGkJOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211 bHRpKSkKIGhvc3QtY29ianMJOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29ianMpKQog aG9zdC1jeHhtdWx0aQk6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jeHhtdWx0aSkpCiBo b3N0LWN4eG9ianMJOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2JqcykpCi1ob3N0 LW9iamRpcnMgICAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3Qtb2JqZGlycykpCi0KLW9i ai1kaXJzICs9ICQoaG9zdC1vYmpkaXJzKQoraG9zdC1jc2hsaWIJOj0gJChhZGRwcmVmaXggJChv YmopLywkKGhvc3QtY3NobGliKSkKK2hvc3QtY3h4c2hsaWIJOj0gJChhZGRwcmVmaXggJChvYmop LywkKGhvc3QtY3h4c2hsaWIpKQoraG9zdC1jc2hvYmpzCTo9ICQoYWRkcHJlZml4ICQob2JqKS8s JChob3N0LWNzaG9ianMpKQoraG9zdC1jeHhzaG9ianMJOj0gJChhZGRwcmVmaXggJChvYmopLywk KGhvc3QtY3h4c2hvYmpzKSkKIAogIyMjIyMKICMgSGFuZGxlIG9wdGlvbnMgdG8gZ2NjLiBTdXBw b3J0IGJ1aWxkaW5nIHdpdGggc2VwYXJhdGUgb3V0cHV0IGRpcmVjdG9yeQpAQCAtODUsNyArODQs NyBAQCBob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9faG9zdGN4eF9mbGFn cykKICMgQ3JlYXRlIGV4ZWN1dGFibGUgZnJvbSBhIHNpbmdsZSAuYyBmaWxlCiAjIGhvc3QtY3Np bmdsZSAtPiBFeGVjdXRhYmxlCiBxdWlldF9jbWRfaG9zdC1jc2luZ2xlIAk9IEhPU1RDQyAgJEAK LSAgICAgIGNtZF9ob3N0LWNzaW5nbGUJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgLW8gJEAg JDwgXAorICAgICAgY21kX2hvc3QtY3NpbmdsZQk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAk KEhPU1RMREZMQUdTKSAtbyAkQCAkPCBcCiAJICAJJChIT1NUX0xPQURMSUJFUykgJChIT1NUTE9B RExJQkVTXyQoQEYpKQogJChob3N0LWNzaW5nbGUpOiAkKG9iaikvJTogJChzcmMpLyUuYyBGT1JD RQogCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaW5nbGUpCkBAIC0xMjQsNSArMTIzLDQy IEBAIHF1aWV0X2NtZF9ob3N0LWN4eG9ianMJPSBIT1NUQ1hYICRACiAkKGhvc3QtY3h4b2Jqcyk6 ICQob2JqKS8lLm86ICQoc3JjKS8lLmNjIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhv c3QtY3h4b2JqcykKIAorIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVu ZGVudCAubyBmaWxlCisjIGhvc3QtY3Nob2JqcyAtPiAubworcXVpZXRfY21kX2hvc3QtY3Nob2Jq cwk9IEhPU1RDQyAgLWZQSUMgJEAKKyAgICAgIGNtZF9ob3N0LWNzaG9ianMJPSAkKEhPU1RDQykg JChob3N0Y19mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwKKyQoaG9zdC1jc2hvYmpzKTogJChvYmop LyUubzogJChzcmMpLyUuYyBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaG9i anMpCisKKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVhdGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgLm8g ZmlsZQorIyBOb3RlIHRoYXQgcGx1Z2luIGNhcGFibGUgZ2NjIHZlcnNpb25zIGNhbiBiZSBlaXRo ZXIgQyBvciBDKysgYmFzZWQKKyMgdGhlcmVmb3JlIHBsdWdpbiBzb3VyY2UgZmlsZXMgaGF2ZSB0 byBiZSBjb21waWxhYmxlIGluIGJvdGggQyBhbmQgQysrIG1vZGUuCisjIFRoaXMgaXMgd2h5IGEg QysrIGNvbXBpbGVyIGlzIGludm9rZWQgb24gYSAuYyBmaWxlLgorIyBob3N0LWN4eHNob2JqcyAt PiAubworcXVpZXRfY21kX2hvc3QtY3h4c2hvYmpzCT0gSE9TVENYWCAtZlBJQyAkQAorICAgICAg Y21kX2hvc3QtY3h4c2hvYmpzCT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpIC1mUElDIC1j IC1vICRAICQ8CiskKGhvc3QtY3h4c2hvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyBGT1JD RQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eHNob2JqcykKKworIyBMaW5rIGEgc2hh cmVkIGxpYnJhcnksIGJhc2VkIG9uIHBvc2l0aW9uIGluZGVwZW5kZW50IC5vIGZpbGVzCisjICou byAtPiAuc28gc2hhcmVkIGxpYnJhcnkgKGhvc3QtY3NobGliKQorcXVpZXRfY21kX2hvc3QtY3No bGliCT0gSE9TVExMRCAtc2hhcmVkICRACisgICAgICBjbWRfaG9zdC1jc2hsaWIJPSAkKEhPU1RD QykgJChIT1NUTERGTEFHUykgLXNoYXJlZCAtbyAkQCBcCisJCQkgICQoYWRkcHJlZml4ICQob2Jq KS8sJCgkKEBGOi5zbz0tb2JqcykpKSBcCisJCQkgICQoSE9TVF9MT0FETElCRVMpICQoSE9TVExP QURMSUJFU18kKEBGKSkKKyQoaG9zdC1jc2hsaWIpOiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2Vk LGhvc3QtY3NobGliKQorJChjYWxsIG11bHRpX2RlcGVuZCwgJChob3N0LWNzaGxpYiksIC5zbywg LW9ianMpCisKKyMgTGluayBhIHNoYXJlZCBsaWJyYXJ5LCBiYXNlZCBvbiBwb3NpdGlvbiBpbmRl cGVuZGVudCAubyBmaWxlcworIyAqLm8gLT4gLnNvIHNoYXJlZCBsaWJyYXJ5IChob3N0LWN4eHNo bGliKQorcXVpZXRfY21kX2hvc3QtY3h4c2hsaWIJPSBIT1NUTExEIC1zaGFyZWQgJEAKKyAgICAg IGNtZF9ob3N0LWN4eHNobGliCT0gJChIT1NUQ1hYKSAkKEhPU1RMREZMQUdTKSAtc2hhcmVkIC1v ICRAIFwKKwkJCSAgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEY6LnNvPS1vYmpzKSkpIFwKKwkJ CSAgJChIT1NUX0xPQURMSUJFUykgJChIT1NUTE9BRExJQkVTXyQoQEYpKQorJChob3N0LWN4eHNo bGliKTogRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxob3N0LWN4eHNobGliKQorJChjYWxsIG11 bHRpX2RlcGVuZCwgJChob3N0LWN4eHNobGliKSwgLnNvLCAtb2JqcykKKwogdGFyZ2V0cyArPSAk KGhvc3QtY3NpbmdsZSkgICQoaG9zdC1jbXVsdGkpICQoaG9zdC1jb2JqcylcCi0JICAgJChob3N0 LWN4eG11bHRpKSAkKGhvc3QtY3h4b2JqcykKKwkgICAkKGhvc3QtY3h4bXVsdGkpICQoaG9zdC1j eHhvYmpzKSAkKGhvc3QtY3NobGliKSAkKGhvc3QtY3Nob2JqcykgJChob3N0LWN4eHNobGliKSAk KGhvc3QtY3h4c2hvYmpzKQpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvTWFrZWZpbGUu a2NvbmZpZyBiL3hlbi90b29scy9rY29uZmlnL01ha2VmaWxlLmtjb25maWcKaW5kZXggZGJkODkx MjAxNS4uODViNGJiYmE3ZSAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvTWFrZWZpbGUu a2NvbmZpZworKysgYi94ZW4vdG9vbHMva2NvbmZpZy9NYWtlZmlsZS5rY29uZmlnCkBAIC0zOSw2 ICszOSwxMCBAQCBDT05GSUdfU0hFTEwgOj0gJChTSEVMTCkKIEhPU1RDQyA/PSBnY2MKIEhPU1RD WFggPz0gZysrCiAKKyMgZGVmYXVsdCBsZXggYW5kIHlhY2MgcHJvdmlkZXIKK0xFWCA/PSBmbGV4 CitZQUNDID89IGJpc29uCisKICMgZm9yY2UgdGFyZ2V0CiBQSE9OWSArPSBGT1JDRQogCkBAIC02 MCwzICs2NCwyNyBAQCBjbGVhbjoKIAogJChvYmopL3pjb25mJTogJChzcmMpL3pjb25mJV9zaGlw cGVkCiAJQGNwIC1mICQ8ICRACisKKyMgZnJvbSBzY3JpcHRzL01ha2VmaWxlLmxpYgorCisjIExF WAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3F1aWV0X2NtZF9mbGV4ID0gTEVYICAgICAkQAorICAg ICAgY21kX2ZsZXggPSAkKExFWCkgLW8kQCAtTCAkPAorCiskKG9iaikvJS5sZXguYzogJChzcmMp LyUubCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpCisKKyMgWUFDQworIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK3F1aWV0X2NtZF9iaXNvbiA9IFlBQ0MgICAgJEAKKyAgICAgIGNtZF9iaXNv biA9ICQoWUFDQykgLW8kQCAtdCAtbCAkPAorCiskKG9iaikvJS50YWIuYzogJChzcmMpLyUueSBG T1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uKQorCitxdWlldF9jbWRfYmlzb25faCA9IFlB Q0MgICAgJEAKKyAgICAgIGNtZF9iaXNvbl9oID0gJChZQUNDKSAtby9kZXYvbnVsbCAtLWRlZmlu ZXM9JEAgLXQgLWwgJDwKKworJChvYmopLyUudGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UKKwkkKGNh bGwgaWZfY2hhbmdlZCxiaXNvbl9oKQpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvY2hl Y2suc2ggYi94ZW4vdG9vbHMva2NvbmZpZy9jaGVjay5zaAppbmRleCA1NWI3OWJhMWJhLi45N2Yw ZmVlN2QxIDEwMDc1NQotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9jaGVjay5zaAorKysgYi94ZW4v dG9vbHMva2NvbmZpZy9jaGVjay5zaApAQCAtMSw0ICsxLDUgQEAKICMhL2Jpbi9zaAorIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyBOZWVkZWQgZm9yIHN5c3RlbXMgd2l0aG91 dCBnZXR0ZXh0CiAkKiAteCBjIC1vIC9kZXYvbnVsbCAtID4gL2Rldi9udWxsIDI+JjEgPDwgRU9G CiAjaW5jbHVkZSA8bGliaW50bC5oPgpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvY29u Zi5jIGIveGVuL3Rvb2xzL2tjb25maWcvY29uZi5jCmluZGV4IDZjMjA0MzE4YmMuLjI4M2VlZWRh YTQgMTAwNjQ0Ci0tLSBhL3hlbi90b29scy9rY29uZmlnL2NvbmYuYworKysgYi94ZW4vdG9vbHMv a2NvbmZpZy9jb25mLmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNp bmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+ CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xOSwxMSArMjAs MTAgQEAKIAogc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7CiBzdGF0aWMgdm9p ZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KTsKLXN0YXRpYyB2b2lkIHhmZ2V0cyhjaGFy ICpzdHIsIGludCBzaXplLCBGSUxFICppbik7CiAKIGVudW0gaW5wdXRfbW9kZSB7CiAJb2xkYXNr Y29uZmlnLAotCXNpbGVudG9sZGNvbmZpZywKKwlzeW5jY29uZmlnLAogCW9sZGNvbmZpZywKIAlh bGxub2NvbmZpZywKIAlhbGx5ZXNjb25maWcsCkBAIC0zNCwxNCArMzQsMTQgQEAgZW51bSBpbnB1 dF9tb2RlIHsKIAlzYXZlZGVmY29uZmlnLAogCWxpc3RuZXdjb25maWcsCiAJb2xkZGVmY29uZmln LAotfSBpbnB1dF9tb2RlID0gb2xkYXNrY29uZmlnOworfTsKK3N0YXRpYyBlbnVtIGlucHV0X21v ZGUgaW5wdXRfbW9kZSA9IG9sZGFza2NvbmZpZzsKIAogc3RhdGljIGludCBpbmRlbnQgPSAxOwog c3RhdGljIGludCB0dHlfc3RkaW87Ci1zdGF0aWMgaW50IHZhbGlkX3N0ZGluID0gMTsKIHN0YXRp YyBpbnQgc3luY19rY29uZmlnOwogc3RhdGljIGludCBjb25mX2NudDsKLXN0YXRpYyBjaGFyIGxp bmVbMTI4XTsKK3N0YXRpYyBjaGFyIGxpbmVbUEFUSF9NQVhdOwogc3RhdGljIHN0cnVjdCBtZW51 ICpyb290RW50cnk7CiAKIHN0YXRpYyB2b2lkIHByaW50X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUp CkBAIC03MSwxNCArNzEsMTQgQEAgc3RhdGljIHZvaWQgc3RyaXAoY2hhciAqc3RyKQogCQkqcC0t ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tfc3RkaW4odm9pZCkKKy8qIEhlbHBlciBmdW5j dGlvbiB0byBmYWNpbGl0YXRlIGZnZXRzKCkgYnkgSmVhbiBTYWNyZW4uICovCitzdGF0aWMgdm9p ZCB4ZmdldHMoY2hhciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pCiB7Ci0JaWYgKCF2YWxpZF9z dGRpbikgewotCQlwcmludGYoXygiYWJvcnRlZCFcblxuIikpOwotCQlwcmludGYoXygiQ29uc29s ZSBpbnB1dC9vdXRwdXQgaXMgcmVkaXJlY3RlZC4gIikpOwotCQlwcmludGYoXygiUnVuICdtYWtl IG9sZGNvbmZpZycgdG8gdXBkYXRlIGNvbmZpZ3VyYXRpb24uXG5cbiIpKTsKLQkJZXhpdCgxKTsK LQl9CisJaWYgKCFmZ2V0cyhzdHIsIHNpemUsIGluKSkKKwkJZnByaW50ZihzdGRlcnIsICJcbkVy cm9yIGluIHJlYWRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsKKworCWlmICghdHR5X3N0ZGlvKQor CQlwcmludGYoIiVzIiwgc3RyKTsKIH0KIAogc3RhdGljIGludCBjb25mX2Fza3ZhbHVlKHN0cnVj dCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqZGVmKQpAQCAtMTAwLDE4ICsxMDAsMTUgQEAgc3Rh dGljIGludCBjb25mX2Fza3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqZGVm KQogCiAJc3dpdGNoIChpbnB1dF9tb2RlKSB7CiAJY2FzZSBvbGRjb25maWc6Ci0JY2FzZSBzaWxl bnRvbGRjb25maWc6CisJY2FzZSBzeW5jY29uZmlnOgogCQlpZiAoc3ltX2hhc192YWx1ZShzeW0p KSB7CiAJCQlwcmludGYoIiVzXG4iLCBkZWYpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2hlY2tf c3RkaW4oKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBvbGRhc2tjb25maWc6CiAJCWZm bHVzaChzdGRvdXQpOwotCQl4ZmdldHMobGluZSwgMTI4LCBzdGRpbik7Ci0JCWlmICghdHR5X3N0 ZGlvKQotCQkJcHJpbnRmKCJcbiIpOworCQl4ZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRp bik7CiAJCXJldHVybiAxOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTkxLDkgKzE4OCw3IEBA IHN0YXRpYyBpbnQgY29uZl9zeW0oc3RydWN0IG1lbnUgKm1lbnUpCiAJCQlwcmludGYoIi9tIik7 CiAJCWlmIChvbGR2YWwgIT0geWVzICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5 ZXMpKQogCQkJcHJpbnRmKCIveSIpOwotCQlpZiAobWVudV9oYXNfaGVscChtZW51KSkKLQkJCXBy aW50ZigiLz8iKTsKLQkJcHJpbnRmKCJdICIpOworCQlwcmludGYoIi8/XSAiKTsKIAkJaWYgKCFj b25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSkpCiAJCQlyZXR1cm4g MDsKIAkJc3RyaXAobGluZSk7CkBAIC0yOTUsMjMgKzI5MCwxOSBAQCBzdGF0aWMgaW50IGNvbmZf Y2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQogCQkJcHJpbnRmKCJbMV06IDFcbiIpOwogCQkJZ290 byBjb25mX2NoaWxkczsKIAkJfQotCQlwcmludGYoIlsxLSVkIiwgY250KTsKLQkJaWYgKG1lbnVf aGFzX2hlbHAobWVudSkpCi0JCQlwcmludGYoIj8iKTsKLQkJcHJpbnRmKCJdOiAiKTsKKwkJcHJp bnRmKCJbMS0lZD9dOiAiLCBjbnQpOwogCQlzd2l0Y2ggKGlucHV0X21vZGUpIHsKIAkJY2FzZSBv bGRjb25maWc6Ci0JCWNhc2Ugc2lsZW50b2xkY29uZmlnOgorCQljYXNlIHN5bmNjb25maWc6CiAJ CQlpZiAoIWlzX25ldykgewogCQkJCWNudCA9IGRlZjsKIAkJCQlwcmludGYoIiVkXG4iLCBjbnQp OwogCQkJCWJyZWFrOwogCQkJfQotCQkJY2hlY2tfc3RkaW4oKTsKIAkJCS8qIGZhbGwgdGhyb3Vn aCAqLwogCQljYXNlIG9sZGFza2NvbmZpZzoKIAkJCWZmbHVzaChzdGRvdXQpOwotCQkJeGZnZXRz KGxpbmUsIDEyOCwgc3RkaW4pOworCQkJeGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4p OwogCQkJc3RyaXAobGluZSk7CiAJCQlpZiAobGluZVswXSA9PSAnPycpIHsKIAkJCQlwcmludF9o ZWxwKG1lbnUpOwpAQCAtMzY3LDEwICszNTgsMTEgQEAgc3RhdGljIHZvaWQgY29uZihzdHJ1Y3Qg bWVudSAqbWVudSkKIAogCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKIAkJY2FzZSBQX01FTlU6Ci0J CQlpZiAoKGlucHV0X21vZGUgPT0gc2lsZW50b2xkY29uZmlnIHx8Ci0JCQkgICAgIGlucHV0X21v ZGUgPT0gbGlzdG5ld2NvbmZpZyB8fAotCQkJICAgICBpbnB1dF9tb2RlID09IG9sZGRlZmNvbmZp ZykgJiYKLQkJCSAgICByb290RW50cnkgIT0gbWVudSkgeworCQkJLyoKKwkJCSAqIEV4Y2VwdCBp biBvbGRhc2tjb25maWcgbW9kZSwgd2Ugc2hvdyBvbmx5IG1lbnVzIHRoYXQKKwkJCSAqIGNvbnRh aW4gbmV3IHN5bWJvbHMuCisJCQkgKi8KKwkJCWlmIChpbnB1dF9tb2RlICE9IG9sZGFza2NvbmZp ZyAmJiByb290RW50cnkgIT0gbWVudSkgewogCQkJCWNoZWNrX2NvbmYobWVudSk7CiAJCQkJcmV0 dXJuOwogCQkJfQpAQCAtNDMwLDEwICs0MjIsMjAgQEAgc3RhdGljIHZvaWQgY2hlY2tfY29uZihz dHJ1Y3QgbWVudSAqbWVudSkKIAkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSB8fAogCQkgICAg KHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVz KSkgewogCQkJaWYgKGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZykgewotCQkJCWlmIChzeW0t Pm5hbWUgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgewotCQkJCQlwcmludGYoIiVzJXNc biIsIENPTkZJR18sIHN5bS0+bmFtZSk7CisJCQkJaWYgKHN5bS0+bmFtZSkgeworCQkJCQljb25z dCBjaGFyICpzdHI7CisKKwkJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1NUUklORykgeworCQkJCQkJ c3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJCQkJCXN0ciA9IHN5bV9lc2NhcGVf c3RyaW5nX3ZhbHVlKHN0cik7CisJCQkJCQlwcmludGYoIiVzJXM9JXNcbiIsIENPTkZJR18sIHN5 bS0+bmFtZSwgc3RyKTsKKwkJCQkJCWZyZWUoKHZvaWQgKilzdHIpOworCQkJCQl9IGVsc2Ugewor CQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJCQkJCXByaW50ZigiJXMl cz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJCQl9CiAJCQkJfQotCQkJfSBl bHNlIGlmIChpbnB1dF9tb2RlICE9IG9sZGRlZmNvbmZpZykgeworCQkJfSBlbHNlIHsKIAkJCQlp ZiAoIWNvbmZfY250KyspCiAJCQkJCXByaW50ZihfKCIqXG4qIFJlc3RhcnQgY29uZmlnLi4uXG4q XG4iKSk7CiAJCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50X21lbnUobWVudSk7CkBAIC00 NDksNyArNDUxLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkK IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0c1tdID0gewogCXsib2xkYXNrY29uZmlnIiwg ICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGFza2NvbmZpZ30sCiAJeyJvbGRjb25maWci LCAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkY29uZmlnfSwKLQl7InNpbGVudG9s ZGNvbmZpZyIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBzaWxlbnRvbGRjb25maWd9LAorCXsi c3luY2NvbmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIHN5bmNjb25maWd9LAog CXsiZGVmY29uZmlnIiwgICAgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsIGRlZmNvbmZpZ30s CiAJeyJzYXZlZGVmY29uZmlnIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgc2F2ZWRlZmNv bmZpZ30sCiAJeyJhbGxub2NvbmZpZyIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxs bm9jb25maWd9LApAQCAtNDc2LDggKzQ3OCw5IEBAIHN0YXRpYyB2b2lkIGNvbmZfdXNhZ2UoY29u c3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKCIgIC0tbGlzdG5ld2NvbmZpZyAgICAgICAgIExp c3QgbmV3IG9wdGlvbnNcbiIpOwogCXByaW50ZigiICAtLW9sZGFza2NvbmZpZyAgICAgICAgICBT dGFydCBhIG5ldyBjb25maWd1cmF0aW9uIHVzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtXG4i KTsKIAlwcmludGYoIiAgLS1vbGRjb25maWcgICAgICAgICAgICAgVXBkYXRlIGEgY29uZmlndXJh dGlvbiB1c2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZVxuIik7Ci0JcHJpbnRmKCIgIC0t c2lsZW50b2xkY29uZmlnICAgICAgIFNhbWUgYXMgb2xkY29uZmlnLCBidXQgcXVpZXRseSwgYWRk aXRpb25hbGx5IHVwZGF0ZSBkZXBzXG4iKTsKLQlwcmludGYoIiAgLS1vbGRkZWZjb25maWcgICAg ICAgICAgU2FtZSBhcyBzaWxlbnRvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhl aXIgZGVmYXVsdCB2YWx1ZVxuIik7CisJcHJpbnRmKCIgIC0tc3luY2NvbmZpZyAgICAgICAgICAg IFNpbWlsYXIgdG8gb2xkY29uZmlnIGJ1dCBnZW5lcmF0ZXMgY29uZmlndXJhdGlvbiBpblxuIgor CSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlL3tnZW5lcmF0ZWQvLGNv bmZpZy99XG4iKTsKKwlwcmludGYoIiAgLS1vbGRkZWZjb25maWcgICAgICAgICAgU2FtZSBhcyBv bGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZVxuIik7 CiAJcHJpbnRmKCIgIC0tb2xkbm9jb25maWcgICAgICAgICAgIEFuIGFsaWFzIG9mIG9sZGRlZmNv bmZpZ1xuIik7CiAJcHJpbnRmKCIgIC0tZGVmY29uZmlnIDxmaWxlPiAgICAgIE5ldyBjb25maWcg d2l0aCBkZWZhdWx0IGRlZmluZWQgaW4gPGZpbGU+XG4iKTsKIAlwcmludGYoIiAgLS1zYXZlZGVm Y29uZmlnIDxmaWxlPiAgU2F2ZSB0aGUgbWluaW1hbCBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8g PGZpbGU+XG4iKTsKQEAgLTQ5OSw3ICs1MDIsNyBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiph dikKIAliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOwogCXRleHRkb21haW4oUEFD S0FHRSk7CiAKLQl0dHlfc3RkaW8gPSBpc2F0dHkoMCkgJiYgaXNhdHR5KDEpICYmIGlzYXR0eSgy KTsKKwl0dHlfc3RkaW8gPSBpc2F0dHkoMCkgJiYgaXNhdHR5KDEpOwogCiAJd2hpbGUgKChvcHQg PSBnZXRvcHRfbG9uZyhhYywgYXYsICJzIiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gLTEpIHsKIAkJ aWYgKG9wdCA9PSAncycpIHsKQEAgLTUwOCw3ICs1MTEsNyBAQCBpbnQgbWFpbihpbnQgYWMsIGNo YXIgKiphdikKIAkJfQogCQlpbnB1dF9tb2RlID0gKGVudW0gaW5wdXRfbW9kZSlvcHQ7CiAJCXN3 aXRjaCAob3B0KSB7Ci0JCWNhc2Ugc2lsZW50b2xkY29uZmlnOgorCQljYXNlIHN5bmNjb25maWc6 CiAJCQlzeW5jX2tjb25maWcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgZGVmY29uZmlnOgpAQCAt NTU2LDcgKzU1OSw3IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KQogCQl9CiAJfQogCWlm IChhYyA9PSBvcHRpbmQpIHsKLQkJcHJpbnRmKF8oIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xu IiksIGF2WzBdKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBLY29uZmlnIGZpbGUgbWlzc2lu Z1xuIiksIGF2WzBdKTsKIAkJY29uZl91c2FnZShwcm9nbmFtZSk7CiAJCWV4aXQoMSk7CiAJfQpA QCAtNTgxLDE0ICs1ODQsMTYgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAJCWlmICgh ZGVmY29uZmlnX2ZpbGUpCiAJCQlkZWZjb25maWdfZmlsZSA9IGNvbmZfZ2V0X2RlZmF1bHRfY29u Zm5hbWUoKTsKIAkJaWYgKGNvbmZfcmVhZChkZWZjb25maWdfZmlsZSkpIHsKLQkJCXByaW50Zihf KCIqKipcbiIKLQkJCQkiKioqIENhbid0IGZpbmQgZGVmYXVsdCBjb25maWd1cmF0aW9uIFwiJXNc IiFcbiIKLQkJCQkiKioqXG4iKSwgZGVmY29uZmlnX2ZpbGUpOworCQkJZnByaW50ZihzdGRlcnIs CisJCQkJXygiKioqXG4iCisJCQkJICAiKioqIENhbid0IGZpbmQgZGVmYXVsdCBjb25maWd1cmF0 aW9uIFwiJXNcIiFcbiIKKwkJCQkgICIqKipcbiIpLAorCQkJCWRlZmNvbmZpZ19maWxlKTsKIAkJ CWV4aXQoMSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBzYXZlZGVmY29uZmlnOgotCWNhc2Ugc2ls ZW50b2xkY29uZmlnOgorCWNhc2Ugc3luY2NvbmZpZzoKIAljYXNlIG9sZGFza2NvbmZpZzoKIAlj YXNlIG9sZGNvbmZpZzoKIAljYXNlIGxpc3RuZXdjb25maWc6CkBAIC02NDEsNyArNjQ2LDYgQEAg aW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KLQkJ dmFsaWRfc3RkaW4gPSB0dHlfc3RkaW87CiAJfQogCiAJc3dpdGNoIChpbnB1dF9tb2RlKSB7CkBA IC02NjksMjQgKzY3MywyNCBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKIAljYXNlIG9s ZGFza2NvbmZpZzoKIAkJcm9vdEVudHJ5ID0gJnJvb3RtZW51OwogCQljb25mKCZyb290bWVudSk7 Ci0JCWlucHV0X21vZGUgPSBzaWxlbnRvbGRjb25maWc7CisJCWlucHV0X21vZGUgPSBvbGRjb25m aWc7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2Ugb2xkY29uZmlnOgogCWNhc2UgbGlzdG5l d2NvbmZpZzoKLQljYXNlIG9sZGRlZmNvbmZpZzoKLQljYXNlIHNpbGVudG9sZGNvbmZpZzoKKwlj YXNlIHN5bmNjb25maWc6CiAJCS8qIFVwZGF0ZSB1bnRpbCBhIGxvb3AgY2F1c2VkIG5vIG1vcmUg Y2hhbmdlcyAqLwogCQlkbyB7CiAJCQljb25mX2NudCA9IDA7CiAJCQljaGVja19jb25mKCZyb290 bWVudSk7Ci0JCX0gd2hpbGUgKGNvbmZfY250ICYmCi0JCQkgKGlucHV0X21vZGUgIT0gbGlzdG5l d2NvbmZpZyAmJgotCQkJICBpbnB1dF9tb2RlICE9IG9sZGRlZmNvbmZpZykpOworCQl9IHdoaWxl IChjb25mX2NudCk7CisJCWJyZWFrOworCWNhc2Ugb2xkZGVmY29uZmlnOgorCWRlZmF1bHQ6CiAJ CWJyZWFrOwogCX0KIAogCWlmIChzeW5jX2tjb25maWcpIHsKLQkJLyogc2lsZW50b2xkY29uZmln IGlzIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBzbyB3ZSBzaGFsbCB1cGRhdGUgYXV0b2NvbmYuCisJ CS8qIHN5bmNjb25maWcgaXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkIHNvIHdlIHNoYWxsIHVwZGF0 ZSBhdXRvY29uZi4KIAkJICogQWxsIG90aGVyIGNvbW1hbmRzIGFyZSBvbmx5IHVzZWQgdG8gZ2Vu ZXJhdGUgYSBjb25maWcuCiAJCSAqLwogCQlpZiAoY29uZl9nZXRfY2hhbmdlZCgpICYmIGNvbmZf d3JpdGUoTlVMTCkpIHsKQEAgLTcxMSwxMiArNzE1LDMgQEAgaW50IG1haW4oaW50IGFjLCBjaGFy ICoqYXYpCiAJfQogCXJldHVybiAwOwogfQotCi0vKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIGZh Y2lsaXRhdGUgZmdldHMoKSBieSBKZWFuIFNhY3Jlbi4KLSAqLwotdm9pZCB4ZmdldHMoY2hhciAq c3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pCi17Ci0JaWYgKGZnZXRzKHN0ciwgc2l6ZSwgaW4pID09 IE5VTEwpCi0JCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciBpbiByZWFkaW5nIG9yIGVuZCBvZiBm aWxlLlxuIik7Ci19CmRpZmYgLS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy9jb25mZGF0YS5jIGIv eGVuL3Rvb2xzL2tjb25maWcvY29uZmRhdGEuYwppbmRleCAwYjdkYzJmZDdiLi5kZjI2YzdiMGZl IDEwMDY0NAotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9jb25mZGF0YS5jCisrKyBiL3hlbi90b29s cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTI4LDcgKzI4LDcgQEAgc3RhdGljIHZvaWQgY29uZl9t ZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHBy aW50ZiwgMSwgMikpKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7Ci1zdGF0 aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dhcm5pbmdzLCBjb25mX3Vuc2F2ZWQ7CitzdGF0aWMg aW50IGNvbmZfbGluZW5vLCBjb25mX3dhcm5pbmdzOwogCiBjb25zdCBjaGFyIGNvbmZfZGVmbmFt ZVtdID0gImFyY2gvJEFSQ0gvZGVmY29uZmlnIjsKIApAQCAtMTc4LDcgKzE3OCw3IEBAIHN0YXRp YyBpbnQgY29uZl9zZXRfc3ltX3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBkZWYsIGludCBk ZWZfZmxhZ3MsIGNoYXIgKnApCiAJY2FzZSBTX0hFWDoKIAlkb25lOgogCQlpZiAoc3ltX3N0cmlu Z192YWxpZChzeW0sIHApKSB7Ci0JCQlzeW0tPmRlZltkZWZdLnZhbCA9IHN0cmR1cChwKTsKKwkJ CXN5bS0+ZGVmW2RlZl0udmFsID0geHN0cmR1cChwKTsKIAkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2Zs YWdzOwogCQl9IGVsc2UgewogCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQpAQCAtMjAxLDcgKzIw MSw3IEBAIHN0YXRpYyBpbnQgYWRkX2J5dGUoaW50IGMsIGNoYXIgKipsaW5lcHRyLCBzaXplX3Qg c2xlbiwgc2l6ZV90ICpuKQogCWlmIChuZXdfc2l6ZSA+ICpuKSB7CiAJCW5ld19zaXplICs9IExJ TkVfR1JPV1RIIC0gMTsKIAkJbmV3X3NpemUgKj0gMjsKLQkJbmxpbmUgPSByZWFsbG9jKCpsaW5l cHRyLCBuZXdfc2l6ZSk7CisJCW5saW5lID0geHJlYWxsb2MoKmxpbmVwdHIsIG5ld19zaXplKTsK IAkJaWYgKCFubGluZSkKIAkJCXJldHVybiAtMTsKIApAQCAtMjY3LDEwICsyNjcsOCBAQCBpbnQg Y29uZl9yZWFkX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVmKQogCQlpZiAoaW4pCiAJ CQlnb3RvIGxvYWQ7CiAJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOwotCQlpZiAoIXN5bV9kZWZj b25maWdfbGlzdCkgewotCQkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCQlpZiAoIXN5 bV9kZWZjb25maWdfbGlzdCkKIAkJCXJldHVybiAxOwotCQl9CiAKIAkJZm9yX2FsbF9kZWZhdWx0 cyhzeW1fZGVmY29uZmlnX2xpc3QsIHByb3ApIHsKIAkJCWlmIChleHByX2NhbGNfdmFsdWUocHJv cC0+dmlzaWJsZS5leHByKSA9PSBubyB8fApAQCAtMjkyLDcgKzI5MCw2IEBAIGxvYWQ6CiAJY29u Zl9maWxlbmFtZSA9IG5hbWU7CiAJY29uZl9saW5lbm8gPSAwOwogCWNvbmZfd2FybmluZ3MgPSAw OwotCWNvbmZfdW5zYXZlZCA9IDA7CiAKIAlkZWZfZmxhZ3MgPSBTWU1CT0xfREVGIDw8IGRlZjsK IAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CkBAIC0zNzcsNyArMzc0LDkgQEAgbG9hZDoKIAkJ CQljb250aW51ZTsKIAkJfSBlbHNlIHsKIAkJCWlmIChsaW5lWzBdICE9ICdccicgJiYgbGluZVsw XSAhPSAnXG4nKQotCQkJCWNvbmZfd2FybmluZygidW5leHBlY3RlZCBkYXRhIik7CisJCQkJY29u Zl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGE6ICUuKnMiLAorCQkJCQkgICAgIChpbnQpc3RyY3Nw bihsaW5lLCAiXHJcbiIpLCBsaW5lKTsKKwogCQkJY29udGludWU7CiAJCX0KIHNldHN5bToKQEAg LTQwMywxOSArNDAyLDIzIEBAIHNldHN5bToKIAl9CiAJZnJlZShsaW5lKTsKIAlmY2xvc2UoaW4p OwotCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGNv bmZfcmVhZChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQg Y29uZl91bnNhdmVkID0gMDsKIAlpbnQgaTsKIAogCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOwog Ci0JaWYgKGNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpCisJaWYgKGNvbmZfcmVh ZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpIHsKKwkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19z eW0pOwogCQlyZXR1cm4gMTsKKwl9CisKKwlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CiAK IAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CiAJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CkBAIC04 NDYsNiArODQ5LDcgQEAgc3RhdGljIGludCBjb25mX3NwbGl0X2NvbmZpZyh2b2lkKQogCiAJbmFt ZSA9IGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpOwogCWNvbmZfcmVhZF9zaW1wbGUobmFtZSwg U19ERUZfQVVUTyk7CisJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOwogCiAJaWYgKGNoZGly KCJpbmNsdWRlL2NvbmZpZyIpKQogCQlyZXR1cm4gMTsKQEAgLTExMTksNyArMTEyMyw3IEBAIHZv aWQgc2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pCiBib29sIGNvbmZf c2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSkKIHsKIAlzdHJ1Y3Qg c3ltYm9sICpzeW0sICpjc3ltOwotCWludCBpLCBjbnQsIHBieSwgcHR5LCBwdG07CS8qIHBieTog cHJvYmFiaWxpdHkgb2YgYm9vbGVhbiAgPSB5CisJaW50IGksIGNudCwgcGJ5LCBwdHksIHB0bTsJ LyogcGJ5OiBwcm9iYWJpbGl0eSBvZiBib29sICAgICA9IHkKIAkJCQkJICogcHR5OiBwcm9iYWJp bGl0eSBvZiB0cmlzdGF0ZSA9IHkKIAkJCQkJICogcHRtOiBwcm9iYWJpbGl0eSBvZiB0cmlzdGF0 ZSA9IG0KIAkJCQkJICovCmRpZmYgLS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy9leHByLmMgYi94 ZW4vdG9vbHMva2NvbmZpZy9leHByLmMKaW5kZXggNjY3ZDFhYTIzNy4uZTFhMzllOTA4NCAxMDA2 NDQKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvZXhwci5jCisrKyBiL3hlbi90b29scy9rY29uZmln L2V4cHIuYwpAQCAtOTQsNyArOTQsNyBAQCBzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0 cnVjdCBleHByICpvcmcpCiAJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2NvcHkob3JnLT5yaWdodC5l eHByKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRmKCJjYW4ndCBjb3B5IHR5cGUgJWRc biIsIGUtPnR5cGUpOworCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGNvcHkgdHlwZSAlZFxuIiwg ZS0+dHlwZSk7CiAJCWZyZWUoZSk7CiAJCWUgPSBOVUxMOwogCQlicmVhazsKQEAgLTExMyw3ICsx MTMsNyBAQCB2b2lkIGV4cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSkKIAkJYnJlYWs7CiAJY2FzZSBF X05PVDoKIAkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7Ci0JCXJldHVybjsKKwkJYnJlYWs7CiAJ Y2FzZSBFX0VRVUFMOgogCWNhc2UgRV9HRVE6CiAJY2FzZSBFX0dUSDoKQEAgLTEyNyw3ICsxMjcs NyBAQCB2b2lkIGV4cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSkKIAkJZXhwcl9mcmVlKGUtPnJpZ2h0 LmV4cHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGYoImhvdyB0byBmcmVlIHR5cGUg JWQ/XG4iLCBlLT50eXBlKTsKKwkJZnByaW50ZihzdGRlcnIsICJob3cgdG8gZnJlZSB0eXBlICVk P1xuIiwgZS0+dHlwZSk7CiAJCWJyZWFrOwogCX0KIAlmcmVlKGUpOwpAQCAtMTM4LDggKzEzOCwx OCBAQCBzdGF0aWMgaW50IHRyYW5zX2NvdW50OwogI2RlZmluZSBlMSAoKmVwMSkKICNkZWZpbmUg ZTIgKCplcDIpCiAKKy8qCisgKiBleHByX2VsaW1pbmF0ZV9lcSgpIGhlbHBlci4KKyAqCisgKiBX YWxrcyB0aGUgdHdvIGV4cHJlc3Npb24gdHJlZXMgZ2l2ZW4gaW4gJ2VwMScgYW5kICdlcDInLiBB bnkgbm9kZSB0aGF0IGRvZXMKKyAqIG5vdCBoYXZlIHR5cGUgJ3R5cGUnIChFX09SL0VfQU5EKSBp cyBjb25zaWRlcmVkIGEgbGVhZiwgYW5kIGlzIGNvbXBhcmVkCisgKiBhZ2FpbnN0IGFsbCBvdGhl ciBsZWF2ZXMuIFR3byBlcXVhbCBsZWF2ZXMgYXJlIGJvdGggcmVwbGFjZWQgd2l0aCBlaXRoZXIg J3knCisgKiBvciAnbicgYXMgYXBwcm9wcmlhdGUgZm9yICd0eXBlJywgdG8gYmUgZWxpbWluYXRl ZCBsYXRlci4KKyAqLwogc3RhdGljIHZvaWQgX19leHByX2VsaW1pbmF0ZV9lcShlbnVtIGV4cHJf dHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCiB7CisJLyog UmVjdXJzZSBkb3duIHRvIGxlYXZlcyAqLworCiAJaWYgKGUxLT50eXBlID09IHR5cGUpIHsKIAkJ X19leHByX2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsKIAkJX19leHBy X2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7CkBAIC0xNTAsMTIgKzE2 MCwxOCBAQCBzdGF0aWMgdm9pZCBfX2V4cHJfZWxpbWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5 cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZQogCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5 cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsKIAkJcmV0dXJuOwogCX0KKworCS8qIGUxIGFuZCBl MiBhcmUgbGVhdmVzLiBDb21wYXJlIHRoZW0uICovCisKIAlpZiAoZTEtPnR5cGUgPT0gRV9TWU1C T0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYKIAkgICAgZTEtPmxlZnQuc3ltID09IGUyLT5s ZWZ0LnN5bSAmJgogCSAgICAoZTEtPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzIHx8IGUxLT5sZWZ0 LnN5bSA9PSAmc3ltYm9sX25vKSkKIAkJcmV0dXJuOwogCWlmICghZXhwcl9lcShlMSwgZTIpKQog CQlyZXR1cm47CisKKwkvKiBlMSBhbmQgZTIgYXJlIGVxdWFsIGxlYXZlcy4gUHJlcGFyZSB0aGVt IGZvciBlbGltaW5hdGlvbi4gKi8KKwogCXRyYW5zX2NvdW50Kys7CiAJZXhwcl9mcmVlKGUxKTsg ZXhwcl9mcmVlKGUyKTsKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE3Miw2ICsxODgsMzUgQEAgc3Rh dGljIHZvaWQgX19leHByX2VsaW1pbmF0ZV9lcShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qg ZXhwciAqKmVwMSwgc3RydWN0IGUKIAl9CiB9CiAKKy8qCisgKiBSZXdyaXRlcyB0aGUgZXhwcmVz c2lvbnMgJ2VwMScgYW5kICdlcDInIHRvIHJlbW92ZSBvcGVyYW5kcyBjb21tb24gdG8gYm90aC4K KyAqIEV4YW1wbGUgcmVkdWN0aW9uczoKKyAqCisgKgllcDE6IEEgJiYgQiAgICAgICAgICAgLT4g IGVwMTogeQorICoJZXAyOiBBICYmIEIgJiYgQyAgICAgIC0+ICBlcDI6IEMKKyAqCisgKgllcDE6 IEEgfHwgQiAgICAgICAgICAgLT4gIGVwMTogbgorICoJZXAyOiBBIHx8IEIgfHwgQyAgICAgIC0+ ICBlcDI6IEMKKyAqCisgKgllcDE6IEEgJiYgKEIgJiYgRk9PKSAgLT4gIGVwMTogRk9PCisgKgll cDI6IChCQVIgJiYgQikgJiYgQSAgLT4gIGVwMjogQkFSCisgKgorICoJZXAxOiBBICYmIChCIHx8 IEMpICAgIC0+ICBlcDE6IHkKKyAqCWVwMjogKEMgfHwgQikgJiYgQSAgICAtPiAgZXAyOiB5Cisg KgorICogQ29tcGFyaXNvbnMgYXJlIGRvbmUgYmV0d2VlbiBhbGwgb3BlcmFuZHMgYXQgdGhlIHNh bWUgImxldmVsIiBvZiAmJiBvciB8fC4KKyAqIEZvciBleGFtcGxlLCBpbiB0aGUgZXhwcmVzc2lv biAnZTEgJiYgKGUyIHx8IGUzKSAmJiAoZTQgfHwgZTUpJywgdGhlCisgKiBmb2xsb3dpbmcgb3Bl cmFuZHMgd2lsbCBiZSBjb21wYXJlZDoKKyAqCisgKgktICdlMScsICdlMiB8fCBlMycsIGFuZCAn ZTQgfHwgZTUnLCBhZ2FpbnN0IGVhY2ggb3RoZXIKKyAqCS0gZTIgYWdhaW5zdCBlMworICoJLSBl NCBhZ2FpbnN0IGU1CisgKgorICogUGFyZW50aGVzZXMgYXJlIGlycmVsZXZhbnQgd2l0aGluIGEg c2luZ2xlIGxldmVsLiAnZTEgJiYgKGUyICYmIGUzKScgYW5kCisgKiAnKGUxICYmIGUyKSAmJiBl MycgYXJlIGJvdGggYSBzaW5nbGUgbGV2ZWwuCisgKgorICogU2VlIF9fZXhwcl9lbGltaW5hdGVf ZXEoKSBhcyB3ZWxsLgorICovCiB2b2lkIGV4cHJfZWxpbWluYXRlX2VxKHN0cnVjdCBleHByICoq ZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKIHsKIAlpZiAoIWUxIHx8ICFlMikKQEAgLTE5Nyw2ICsy NDIsMTIgQEAgdm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0 IGV4cHIgKiplcDIpCiAjdW5kZWYgZTEKICN1bmRlZiBlMgogCisvKgorICogUmV0dXJucyB0cnVl IGlmICdlMScgYW5kICdlMicgYXJlIGVxdWFsLCBhZnRlciBtaW5vciBzaW1wbGlmaWNhdGlvbi4g VHdvCisgKiAmJi98fCBleHByZXNzaW9ucyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiBldmVyeSBv cGVyYW5kIGluIG9uZSBleHByZXNzaW9uCisgKiBlcXVhbHMgc29tZSBvcGVyYW5kIGluIHRoZSBv dGhlciAob3BlcmFuZHMgZG8gbm90IG5lZWQgdG8gYXBwZWFyIGluIHRoZSBzYW1lCisgKiBvcmRl ciksIHJlY3Vyc2l2ZWx5LgorICovCiBzdGF0aWMgaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUx LCBzdHJ1Y3QgZXhwciAqZTIpCiB7CiAJaW50IHJlcywgb2xkX2NvdW50OwpAQCAtMjQzLDYgKzI5 NCwxNyBAQCBzdGF0aWMgaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAq ZTIpCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBSZWN1cnNpdmVseSBwZXJmb3JtcyB0aGUgZm9s bG93aW5nIHNpbXBsaWZpY2F0aW9ucyBpbi1wbGFjZSAoYXMgd2VsbCBhcyB0aGUKKyAqIGNvcnJl c3BvbmRpbmcgc2ltcGxpZmljYXRpb25zIHdpdGggc3dhcHBlZCBvcGVyYW5kcyk6CisgKgorICoJ ZXhwciAmJiBuICAtPiAgbgorICoJZXhwciAmJiB5ICAtPiAgZXhwcgorICoJZXhwciB8fCBuICAt PiAgZXhwcgorICoJZXhwciB8fCB5ICAtPiAgeQorICoKKyAqIFJldHVybnMgdGhlIG9wdGltaXpl ZCBleHByZXNzaW9uLgorICovCiBzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3lu KHN0cnVjdCBleHByICplKQogewogCXN0cnVjdCBleHByICp0bXA7CkBAIC01MTYsMTIgKzU3OCwy MSBAQCBzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfam9pbl9hbmQoc3RydWN0IGV4cHIgKmUxLCBz dHJ1Y3QgZXhwciAqZTIpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBleHByX2VsaW1pbmF0 ZV9kdXBzKCkgaGVscGVyLgorICoKKyAqIFdhbGtzIHRoZSB0d28gZXhwcmVzc2lvbiB0cmVlcyBn aXZlbiBpbiAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRoYXQgZG9lcworICogbm90IGhhdmUg dHlwZSAndHlwZScgKEVfT1IvRV9BTkQpIGlzIGNvbnNpZGVyZWQgYSBsZWFmLCBhbmQgaXMgY29t cGFyZWQKKyAqIGFnYWluc3QgYWxsIG90aGVyIGxlYXZlcyB0byBsb29rIGZvciBzaW1wbGlmaWNh dGlvbnMuCisgKi8KIHN0YXRpYyB2b2lkIGV4cHJfZWxpbWluYXRlX2R1cHMxKGVudW0gZXhwcl90 eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKIHsKICNkZWZp bmUgZTEgKCplcDEpCiAjZGVmaW5lIGUyICgqZXAyKQogCXN0cnVjdCBleHByICp0bXA7CiAKKwkv KiBSZWN1cnNlIGRvd24gdG8gbGVhdmVzICovCisKIAlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgewog CQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsKIAkJZXhw cl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOwpAQCAtNTMyLDYg KzYwMyw5IEBAIHN0YXRpYyB2b2lkIGV4cHJfZWxpbWluYXRlX2R1cHMxKGVudW0gZXhwcl90eXBl IHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QKIAkJZXhwcl9lbGltaW5hdGVfZHVwczEo dHlwZSwgJmUxLCAmZTItPnJpZ2h0LmV4cHIpOwogCQlyZXR1cm47CiAJfQorCisJLyogZTEgYW5k IGUyIGFyZSBsZWF2ZXMuIENvbXBhcmUgYW5kIHByb2Nlc3MgdGhlbS4gKi8KKwogCWlmIChlMSA9 PSBlMikKIAkJcmV0dXJuOwogCkBAIC01NjgsNiArNjQyLDE3IEBAIHN0YXRpYyB2b2lkIGV4cHJf ZWxpbWluYXRlX2R1cHMxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBz dHJ1Y3QKICN1bmRlZiBlMgogfQogCisvKgorICogUmV3cml0ZXMgJ2UnIGluLXBsYWNlIHRvIHJl bW92ZSAoImpvaW4iKSBkdXBsaWNhdGUgYW5kIG90aGVyIHJlZHVuZGFudAorICogb3BlcmFuZHMu CisgKgorICogRXhhbXBsZSBzaW1wbGlmaWNhdGlvbnM6CisgKgorICoJQSB8fCBCIHx8IEEgICAg LT4gIEEgfHwgQgorICoJQSAmJiBCICYmIEE9eSAgLT4gIEE9eSAmJiBCCisgKgorICogUmV0dXJu cyB0aGUgZGVkdXBsaWNhdGVkIGV4cHJlc3Npb24uCisgKi8KIHN0cnVjdCBleHByICpleHByX2Vs aW1pbmF0ZV9kdXBzKHN0cnVjdCBleHByICplKQogewogCWludCBvbGRjb3VudDsKQEAgLTU4NCw2 ICs2NjksNyBAQCBzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfZHVwcyhzdHJ1Y3QgZXhwciAq ZSkKIAkJCTsKIAkJfQogCQlpZiAoIXRyYW5zX2NvdW50KQorCQkJLyogTm8gc2ltcGxpZmljYXRp b25zIGRvbmUgaW4gdGhpcyBwYXNzLiBXZSdyZSBkb25lICovCiAJCQlicmVhazsKIAkJZSA9IGV4 cHJfZWxpbWluYXRlX3luKGUpOwogCX0KQEAgLTU5MSw2ICs2NzcsMTIgQEAgc3RydWN0IGV4cHIg KmV4cHJfZWxpbWluYXRlX2R1cHMoc3RydWN0IGV4cHIgKmUpCiAJcmV0dXJuIGU7CiB9CiAKKy8q CisgKiBQZXJmb3JtcyB2YXJpb3VzIHNpbXBsaWZpY2F0aW9ucyBpbnZvbHZpbmcgbG9naWNhbCBv cGVyYXRvcnMgYW5kCisgKiBjb21wYXJpc29ucy4KKyAqCisgKiBBbGxvY2F0ZXMgYW5kIHJldHVy bnMgYSBuZXcgZXhwcmVzc2lvbi4KKyAqLwogc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNmb3JtKHN0 cnVjdCBleHByICplKQogewogCXN0cnVjdCBleHByICp0bXA7CkBAIC04MDUsNiArODk3LDIwIEBA IGJvb2wgZXhwcl9kZXBlbmRzX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9s ICpzeW0pCiAgCXJldHVybiBmYWxzZTsKIH0KIAorLyoKKyAqIEluc2VydHMgZXhwbGljaXQgY29t cGFyaXNvbnMgb2YgdHlwZSAndHlwZScgdG8gc3ltYm9sICdzeW0nIGludG8gdGhlCisgKiBleHBy ZXNzaW9uICdlJy4KKyAqCisgKiBFeGFtcGxlcyB0cmFuc2Zvcm1hdGlvbnMgZm9yIHR5cGUgPT0g RV9VTkVRVUFMLCBzeW0gPT0gJnN5bWJvbF9ubzoKKyAqCisgKglBICAgICAgICAgICAgICAtPiAg QSE9bgorICoJIUEgICAgICAgICAgICAgLT4gIEE9bgorICoJQSAmJiBCICAgICAgICAgLT4gICEo QT1uIHx8IEI9bikKKyAqCUEgfHwgQiAgICAgICAgIC0+ICAhKEE9biAmJiBCPW4pCisgKglBICYm IChCIHx8IEMpICAtPiAgIShBPW4gfHwgKEI9biAmJiBDPW4pKQorICoKKyAqIEFsbG9jYXRlcyBh bmQgcmV0dXJucyBhIG5ldyBleHByZXNzaW9uLgorICovCiBzdHJ1Y3QgZXhwciAqZXhwcl90cmFu c19jb21wYXJlKHN0cnVjdCBleHByICplLCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3lt Ym9sICpzeW0pCiB7CiAJc3RydWN0IGV4cHIgKmUxLCAqZTI7CkBAIC04OTMsNyArOTk5LDEwIEBA IHN0YXRpYyBlbnVtIHN0cmluZ192YWx1ZV9raW5kIGV4cHJfcGFyc2Vfc3RyaW5nKGNvbnN0IGNo YXIgKnN0ciwKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNfQk9PTEVBTjoKIAljYXNlIFNfVFJJ U1RBVEU6Ci0JCXJldHVybiBrX3N0cmluZzsKKwkJdmFsLT5zID0gIXN0cmNtcChzdHIsICJuIikg PyAwIDoKKwkJCSAhc3RyY21wKHN0ciwgIm0iKSA/IDEgOgorCQkJICFzdHJjbXAoc3RyLCAieSIp ID8gMiA6IC0xOworCQlyZXR1cm4ga19zaWduZWQ7CiAJY2FzZSBTX0lOVDoKIAkJdmFsLT5zID0g c3RydG9sbChzdHIsICZ0YWlsLCAxMCk7CiAJCWtpbmQgPSBrX3NpZ25lZDsKQEAgLTEwMjgsNDkg KzExMzcsOSBAQCBzdGF0aWMgaW50IGV4cHJfY29tcGFyZV90eXBlKGVudW0gZXhwcl90eXBlIHQx LCBlbnVtIGV4cHJfdHlwZSB0MikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1 Y3QgZXhwciAqCi1leHByX2dldF9sZWZ0bW9zdF9zeW1ib2woY29uc3Qgc3RydWN0IGV4cHIgKmUp Ci17Ci0KLQlpZiAoZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlIChlLT50eXBl ICE9IEVfU1lNQk9MKQotCQllID0gZS0+bGVmdC5leHByOwotCi0JcmV0dXJuIGV4cHJfY29weShl KTsKLX0KLQotLyoKLSAqIEdpdmVuIGV4cHJlc3Npb24gYGUxJyBhbmQgYGUyJywgcmV0dXJucyB0 aGUgbGVhZiBvZiB0aGUgbG9uZ2VzdAotICogc3ViLWV4cHJlc3Npb24gb2YgYGUxJyBub3QgY29u dGFpbmluZyAnZTIuCi0gKi8KLXN0cnVjdCBleHByICpleHByX3NpbXBsaWZ5X3VubWV0X2RlcChz dHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKLXsKLQlzdHJ1Y3QgZXhwciAqcmV0Owot Ci0Jc3dpdGNoIChlMS0+dHlwZSkgewotCWNhc2UgRV9PUjoKLQkJcmV0dXJuIGV4cHJfYWxsb2Nf YW5kKAotCQkgICAgZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoZTEtPmxlZnQuZXhwciwgZTIpLAot CQkgICAgZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoZTEtPnJpZ2h0LmV4cHIsIGUyKSk7Ci0JY2Fz ZSBFX0FORDogewotCQlzdHJ1Y3QgZXhwciAqZTsKLQkJZSA9IGV4cHJfYWxsb2NfYW5kKGV4cHJf Y29weShlMSksIGV4cHJfY29weShlMikpOwotCQllID0gZXhwcl9lbGltaW5hdGVfZHVwcyhlKTsK LQkJcmV0ID0gKCFleHByX2VxKGUsIGUxKSkgPyBlMSA6IE5VTEw7Ci0JCWV4cHJfZnJlZShlKTsK LQkJYnJlYWs7Ci0JCX0KLQlkZWZhdWx0OgotCQlyZXQgPSBlMTsKLQkJYnJlYWs7Ci0JfQotCi0J cmV0dXJuIGV4cHJfZ2V0X2xlZnRtb3N0X3N5bWJvbChyZXQpOwotfQotCi12b2lkIGV4cHJfcHJp bnQoc3RydWN0IGV4cHIgKmUsIHZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNv bnN0IGNoYXIgKiksIHZvaWQgKmRhdGEsIGludCBwcmV2dG9rZW4pCit2b2lkIGV4cHJfcHJpbnQo c3RydWN0IGV4cHIgKmUsCisJCXZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNv bnN0IGNoYXIgKiksCisJCXZvaWQgKmRhdGEsIGludCBwcmV2dG9rZW4pCiB7CiAJaWYgKCFlKSB7 CiAJCWZuKGRhdGEsIE5VTEwsICJ5Iik7CkBAIC0xMTEzLDcgKzExODIsNyBAQCB2b2lkIGV4cHJf cHJpbnQoc3RydWN0IGV4cHIgKmUsIHZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICos IGNvbnN0IGNoYXIgKgogCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1l KTsKIAkJZWxzZQogCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7Ci0JCWZuKGRhdGEsIE5V TEwsIGUtPnR5cGUgPT0gRV9MRVEgPyAiPj0iIDogIj4iKTsKKwkJZm4oZGF0YSwgTlVMTCwgZS0+ dHlwZSA9PSBFX0dFUSA/ICI+PSIgOiAiPiIpOwogCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUt PnJpZ2h0LnN5bS0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgRV9VTkVRVUFMOgpAQCAtMTIwNCwz ICsxMjczLDMzIEBAIHZvaWQgZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3Qg Z3N0ciAqZ3MpCiB7CiAJZXhwcl9wcmludChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywg RV9OT05FKTsKIH0KKworLyoKKyAqIFRyYW5zZm9ybSB0aGUgdG9wIGxldmVsICJ8fCIgdG9rZW5z IGludG8gbmV3bGluZXMgYW5kIHByZXBlbmQgZWFjaAorICogbGluZSB3aXRoIGEgbWludXMuIFRo aXMgbWFrZXMgZXhwcmVzc2lvbnMgbXVjaCBlYXNpZXIgdG8gcmVhZC4KKyAqIFN1aXRhYmxlIGZv ciByZXZlcnNlIGRlcGVuZGVuY3kgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGV4cHJf cHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLAorCQkJICAgICAgdm9pZCAoKmZuKSh2b2lkICos IHN0cnVjdCBzeW1ib2wgKiwgY29uc3QgY2hhciAqKSwKKwkJCSAgICAgIHZvaWQgKmRhdGEsIHRy aXN0YXRlIHByX3R5cGUsIGNvbnN0IGNoYXIgKip0aXRsZSkKK3sKKwlpZiAoZS0+dHlwZSA9PSBF X09SKSB7CisJCWV4cHJfcHJpbnRfcmV2ZGVwKGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIHByX3R5 cGUsIHRpdGxlKTsKKwkJZXhwcl9wcmludF9yZXZkZXAoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEs IHByX3R5cGUsIHRpdGxlKTsKKwl9IGVsc2UgaWYgKGV4cHJfY2FsY192YWx1ZShlKSA9PSBwcl90 eXBlKSB7CisJCWlmICgqdGl0bGUpIHsKKwkJCWZuKGRhdGEsIE5VTEwsICp0aXRsZSk7CisJCQkq dGl0bGUgPSBOVUxMOworCQl9CisKKwkJZm4oZGF0YSwgTlVMTCwgIiAgLSAiKTsKKwkJZXhwcl9w cmludChlLCBmbiwgZGF0YSwgRV9OT05FKTsKKwkJZm4oZGF0YSwgTlVMTCwgIlxuIik7CisJfQor fQorCit2b2lkIGV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBn c3RyICpncywKKwkJCSAgICB0cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICp0aXRsZSkKK3sK KwlleHByX3ByaW50X3JldmRlcChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgcHJfdHlw ZSwgJnRpdGxlKTsKK30KZGlmZiAtLWdpdCBhL3hlbi90b29scy9rY29uZmlnL2V4cHIuaCBiL3hl bi90b29scy9rY29uZmlnL2V4cHIuaAppbmRleCA5NzNiNmY3MzMzLi45NGEzODNiMjFkIDEwMDY0 NAotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9leHByLmgKKysrIGIveGVuL3Rvb2xzL2tjb25maWcv ZXhwci5oCkBAIC03NCwxNyArNzQsNjEgQEAgZW51bSB7CiAJU19ERUZfQ09VTlQKIH07CiAKKy8q CisgKiBSZXByZXNlbnRzIGEgY29uZmlndXJhdGlvbiBzeW1ib2wuCisgKgorICogQ2hvaWNlcyBh cmUgcmVwcmVzZW50ZWQgYXMgYSBzcGVjaWFsIGtpbmQgb2Ygc3ltYm9sIGFuZCBoYXZlIHRoZQor ICogU1lNQk9MX0NIT0lDRSBiaXQgc2V0IGluICdmbGFncycuCisgKi8KIHN0cnVjdCBzeW1ib2wg eworCS8qIFRoZSBuZXh0IHN5bWJvbCBpbiB0aGUgc2FtZSBidWNrZXQgaW4gdGhlIHN5bWJvbCBo YXNoIHRhYmxlICovCiAJc3RydWN0IHN5bWJvbCAqbmV4dDsKKworCS8qIFRoZSBuYW1lIG9mIHRo ZSBzeW1ib2wsIGUuZy4gIkZPTyIgZm9yICdjb25maWcgRk9PJyAqLwogCWNoYXIgKm5hbWU7CisK KwkvKiBTX0JPT0xFQU4sIFNfVFJJU1RBVEUsIC4uLiAqLwogCWVudW0gc3ltYm9sX3R5cGUgdHlw ZTsKKworCS8qCisJICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgb2YgdGhlIHN5bWJvbC4gVGhlIFNZ TUJPTF9WQUxJRCBiaXQgaXMgc2V0IGluCisJICogJ2ZsYWdzJyB3aGVuIHRoaXMgaXMgdXAgdG8g ZGF0ZS4gTm90ZSB0aGF0IHRoaXMgdmFsdWUgbWlnaHQgZGlmZmVyCisJICogZnJvbSB0aGUgdXNl ciB2YWx1ZSBzZXQgaW4gZS5nLiBhIC5jb25maWcgZmlsZSwgZHVlIHRvIHZpc2liaWxpdHkuCisJ ICovCiAJc3RydWN0IHN5bWJvbF92YWx1ZSBjdXJyOworCisJLyoKKwkgKiBWYWx1ZXMgZm9yIHRo ZSBzeW1ib2wgcHJvdmlkZWQgZnJvbSBvdXRzaWRlLiBkZWZbU19ERUZfVVNFUl0gaG9sZHMKKwkg KiB0aGUgLmNvbmZpZyB2YWx1ZS4KKwkgKi8KIAlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIGRlZltTX0RF Rl9DT1VOVF07CisKKwkvKgorCSAqIEFuIHVwcGVyIGJvdW5kIG9uIHRoZSB0cmlzdGF0ZSB2YWx1 ZSB0aGUgdXNlciBjYW4gc2V0IGZvciB0aGUgc3ltYm9sCisJICogaWYgaXQgaXMgYSBib29sZWFu IG9yIHRyaXN0YXRlLiBDYWxjdWxhdGVkIGZyb20gcHJvbXB0IGRlcGVuZGVuY2llcywKKwkgKiB3 aGljaCBhbHNvIGluaGVyaXQgZGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9p Y2VzLCBhbmQKKwkgKiBpZnMuIElmICduJywgdGhlIHVzZXIgdmFsdWUgd2lsbCBiZSBpZ25vcmVk LgorCSAqCisJICogU3ltYm9scyBsYWNraW5nIHByb21wdHMgYWx3YXlzIGhhdmUgdmlzaWJpbGl0 eSAnbicuCisJICovCiAJdHJpc3RhdGUgdmlzaWJsZTsKKworCS8qIFNZTUJPTF8qIGZsYWdzICov CiAJaW50IGZsYWdzOworCisJLyogTGlzdCBvZiBwcm9wZXJ0aWVzLiBTZWUgcHJvcF90eXBlLiAq LwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCS8qIERlcGVuZGVuY2llcyBmcm9tIGVuY2xv c2luZyBtZW51cywgY2hvaWNlcywgYW5kIGlmcyAqLwogCXN0cnVjdCBleHByX3ZhbHVlIGRpcl9k ZXA7CisKKwkvKiBSZXZlcnNlIGRlcGVuZGVuY2llcyB0aHJvdWdoIGJlaW5nIHNlbGVjdGVkIGJ5 IG90aGVyIHN5bWJvbHMgKi8KIAlzdHJ1Y3QgZXhwcl92YWx1ZSByZXZfZGVwOworCisJLyoKKwkg KiAiV2VhayIgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgdGhyb3VnaCBiZWluZyBpbXBsaWVkIGJ5IG90 aGVyIHN5bWJvbHMKKwkgKi8KKwlzdHJ1Y3QgZXhwcl92YWx1ZSBpbXBsaWVkOwogfTsKIAogI2Rl ZmluZSBmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSBmb3IgKGkgPSAwOyBpIDwgU1lNQk9MX0hBU0hT SVpFOyBpKyspIGZvciAoc3ltID0gc3ltYm9sX2hhc2hbaV07IHN5bTsgc3ltID0gc3ltLT5uZXh0 KSBpZiAoc3ltLT50eXBlICE9IFNfT1RIRVIpCkBAIC0xMzIsMTAgKzE3NiwxMSBAQCBlbnVtIHBy b3BfdHlwZSB7CiAJUF9VTktOT1dOLAogCVBfUFJPTVBULCAgIC8qIHByb21wdCAiZm9vIHByb21w dCIgb3IgIkJBWiBWYWx1ZSIgKi8KIAlQX0NPTU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0 aCBhIGNvbW1lbnQgKi8KLQlQX01FTlUsICAgICAvKiBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIGEg bWVudWNvbmZpZyBvcHRpb24gKi8KKwlQX01FTlUsICAgICAvKiBwcm9tcHQgYXNzb2NpYXRlZCB3 aXRoIGEgbWVudSBvciBtZW51Y29uZmlnIHN5bWJvbCAqLwogCVBfREVGQVVMVCwgIC8qIGRlZmF1 bHQgeSAqLwogCVBfQ0hPSUNFLCAgIC8qIGNob2ljZSB2YWx1ZSAqLwogCVBfU0VMRUNULCAgIC8q IHNlbGVjdCBCQVIgKi8KKwlQX0lNUExZLCAgICAvKiBpbXBseSBCQVIgKi8KIAlQX1JBTkdFLCAg ICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5bWJvbCkgKi8KIAlQX0VOViwgICAgICAvKiB2YWx1 ZSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlICovCiAJUF9TWU1CT0wsICAgLyogd2hlcmUgYSBz eW1ib2wgaXMgZGVmaW5lZCAqLwpAQCAtMTY0LDIyICsyMDksNjcgQEAgc3RydWN0IHByb3BlcnR5 IHsKIAlmb3IgKHN0ID0gc3ltLT5wcm9wOyBzdDsgc3QgPSBzdC0+bmV4dCkgXAogCQlpZiAoc3Qt PnRleHQpCiAKKy8qCisgKiBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgbWVudSB0cmVlLCBhcyBz ZWVuIGluIGUuZy4gbWVudWNvbmZpZyAodGhvdWdoIHVzZWQKKyAqIGZvciBhbGwgZnJvbnQgZW5k cykuIEVhY2ggc3ltYm9sLCBtZW51LCBldGMuIGRlZmluZWQgaW4gdGhlIEtjb25maWcgZmlsZXMK KyAqIGdldHMgYSBub2RlLiBBIHN5bWJvbCBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyBn ZXRzIG9uZSBub2RlIGF0IGVhY2gKKyAqIGxvY2F0aW9uLgorICovCiBzdHJ1Y3QgbWVudSB7CisJ LyogVGhlIG5leHQgbWVudSBub2RlIGF0IHRoZSBzYW1lIGxldmVsICovCiAJc3RydWN0IG1lbnUg Km5leHQ7CisKKwkvKiBUaGUgcGFyZW50IG1lbnUgbm9kZSwgY29ycmVzcG9uZGluZyB0byBlLmcu IGEgbWVudSBvciBjaG9pY2UgKi8KIAlzdHJ1Y3QgbWVudSAqcGFyZW50OworCisJLyogVGhlIGZp cnN0IGNoaWxkIG1lbnUgbm9kZSwgZm9yIGUuZy4gbWVudXMgYW5kIGNob2ljZXMgKi8KIAlzdHJ1 Y3QgbWVudSAqbGlzdDsKKworCS8qCisJICogVGhlIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggdGhl IG1lbnUgbm9kZS4gQ2hvaWNlcyBhcmUgaW1wbGVtZW50ZWQgYXMKKwkgKiBhIHNwZWNpYWwga2lu ZCBvZiBzeW1ib2wuIE5VTEwgZm9yIG1lbnVzLCBjb21tZW50cywgYW5kIGlmcy4KKwkgKi8KIAlz dHJ1Y3Qgc3ltYm9sICpzeW07CisKKwkvKgorCSAqIFRoZSBwcm9tcHQgYXNzb2NpYXRlZCB3aXRo IHRoZSBub2RlLiBUaGlzIGhvbGRzIHRoZSBwcm9tcHQgZm9yIGEKKwkgKiBzeW1ib2wgYXMgd2Vs bCBhcyB0aGUgdGV4dCBmb3IgYSBtZW51IG9yIGNvbW1lbnQsIGFsb25nIHdpdGggdGhlCisJICog dHlwZSAoUF9QUk9NUFQsIFBfTUVOVSwgZXRjLikKKwkgKi8KIAlzdHJ1Y3QgcHJvcGVydHkgKnBy b21wdDsKKworCS8qCisJICogJ3Zpc2libGUgaWYnIGRlcGVuZGVuY2llcy4gSWYgbW9yZSB0aGFu IG9uZSBpcyBnaXZlbiwgdGhleSB3aWxsIGJlCisJICogQU5EZWQgdG9nZXRoZXIuCisJICovCiAJ c3RydWN0IGV4cHIgKnZpc2liaWxpdHk7CisKKwkvKgorCSAqIE9yZGluYXJ5IGRlcGVuZGVuY2ll cyBmcm9tIGUuZy4gJ2RlcGVuZHMgb24nIGFuZCAnaWYnLCBBTkRlZAorCSAqIHRvZ2V0aGVyCisJ ICovCiAJc3RydWN0IGV4cHIgKmRlcDsKKworCS8qIE1FTlVfKiBmbGFncyAqLwogCXVuc2lnbmVk IGludCBmbGFnczsKKworCS8qIEFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2Rl ICovCiAJY2hhciAqaGVscDsKKworCS8qIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgbWVudSBub2Rl IGFwcGVhcnMgaW4gdGhlIEtjb25maWcgZmlsZXMgKi8KIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlp bnQgbGluZW5vOworCisJLyogRm9yIHVzZSBieSBmcm9udCBlbmRzIHRoYXQgbmVlZCB0byBzdG9y ZSBhdXhpbGlhcnkgZGF0YSAqLwogCXZvaWQgKmRhdGE7CiB9OwogCisvKgorICogU2V0IG9uIGEg bWVudSBub2RlIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGNoYW5nZXMgc3RhdGUgaW4g c29tZSB3YXkuCisgKiBDYW4gYmUgY2hlY2tlZCBieSBmcm9udCBlbmRzLgorICovCiAjZGVmaW5l IE1FTlVfQ0hBTkdFRAkJMHgwMDAxCisKICNkZWZpbmUgTUVOVV9ST09UCQkweDAwMDIKIAogc3Ry dWN0IGp1bXBfa2V5IHsKQEAgLTIxNSwxMSArMzA1LDEyIEBAIHN0cnVjdCBleHByICpleHByX3Ry YW5zZm9ybShzdHJ1Y3QgZXhwciAqZSk7CiBpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0 IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKTsKIGJvb2wgZXhwcl9kZXBlbmRzX3N5bWJv bChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogc3RydWN0IGV4cHIgKmV4 cHJfdHJhbnNfY29tcGFyZShzdHJ1Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3Ry dWN0IHN5bWJvbCAqc3ltKTsKLXN0cnVjdCBleHByICpleHByX3NpbXBsaWZ5X3VubWV0X2RlcChz dHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7CiAKIHZvaWQgZXhwcl9mcHJpbnQoc3Ry dWN0IGV4cHIgKmUsIEZJTEUgKm91dCk7CiBzdHJ1Y3QgZ3N0cjsgLyogZm9yd2FyZCAqLwogdm9p ZCBleHByX2dzdHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpncyk7Cit2b2lk IGV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpncywK KwkJCSAgICB0cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICp0aXRsZSk7CiAKIHN0YXRpYyBp bmxpbmUgaW50IGV4cHJfaXNfeWVzKHN0cnVjdCBleHByICplKQogewpkaWZmIC0tZ2l0IGEveGVu L3Rvb2xzL2tjb25maWcvZ2NvbmYuYyBiL3hlbi90b29scy9rY29uZmlnL2djb25mLmMKaW5kZXgg MjZkMjA4YjQzNS4uY2ZkZGRkYjljOSAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvZ2Nv bmYuYworKysgYi94ZW4vdG9vbHMva2NvbmZpZy9nY29uZi5jCkBAIC05MTQsNyArOTE0LDcgQEAg b25fdHJlZXZpZXcyX2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsCiAJCQlj dXJyZW50ID0gbWVudTsKIAkJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7CiAJCQlndGtfd2lkZ2V0X3Nl dF9zZW5zaXRpdmUoYmFja19idG4sIFRSVUUpOwotCQl9IGVsc2UgaWYgKChjb2wgPT0gQ09MX09Q VElPTikpIHsKKwkJfSBlbHNlIGlmIChjb2wgPT0gQ09MX09QVElPTikgewogCQkJdG9nZ2xlX3N5 bV92YWx1ZShtZW51KTsKIAkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBU UlVFKTsKIAkJfQpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcva2NvbmZfaWQuYyBiL3hl bi90b29scy9rY29uZmlnL2tjb25mX2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uM2VhOWM1ZjlmNwotLS0gL2Rldi9udWxsCisrKyBiL3hlbi90b29scy9rY29uZmln L2tjb25mX2lkLmMKQEAgLTAsMCArMSw1MyBAQAorCitzdGF0aWMgc3RydWN0IGtjb25mX2lkIGtj b25mX2lkX2FycmF5W10gPSB7CisJeyAibWFpbm1lbnUiLAkJVF9NQUlOTUVOVSwJCVRGX0NPTU1B TkQgfSwKKwl7ICJtZW51IiwJCVRfTUVOVSwJCQlURl9DT01NQU5EIH0sCisJeyAiZW5kbWVudSIs CQlUX0VORE1FTlUsCQlURl9DT01NQU5EIH0sCisJeyAic291cmNlIiwJCVRfU09VUkNFLAkJVEZf Q09NTUFORCB9LAorCXsgImNob2ljZSIsCQlUX0NIT0lDRSwJCVRGX0NPTU1BTkQgfSwKKwl7ICJl bmRjaG9pY2UiLAkJVF9FTkRDSE9JQ0UsCQlURl9DT01NQU5EIH0sCisJeyAiY29tbWVudCIsCQlU X0NPTU1FTlQsCQlURl9DT01NQU5EIH0sCisJeyAiY29uZmlnIiwJCVRfQ09ORklHLAkJVEZfQ09N TUFORCB9LAorCXsgIm1lbnVjb25maWciLAkJVF9NRU5VQ09ORklHLAkJVEZfQ09NTUFORCB9LAor CXsgImhlbHAiLAkJVF9IRUxQLAkJCVRGX0NPTU1BTkQgfSwKKwl7ICItLS1oZWxwLS0tIiwJCVRf SEVMUCwJCQlURl9DT01NQU5EIH0sCisJeyAiaWYiLAkJCVRfSUYsCQkJVEZfQ09NTUFORHxURl9Q QVJBTSB9LAorCXsgImVuZGlmIiwJCVRfRU5ESUYsCQlURl9DT01NQU5EIH0sCisJeyAiZGVwZW5k cyIsCQlUX0RFUEVORFMsCQlURl9DT01NQU5EIH0sCisJeyAib3B0aW9uYWwiLAkJVF9PUFRJT05B TCwJCVRGX0NPTU1BTkQgfSwKKwl7ICJkZWZhdWx0IiwJCVRfREVGQVVMVCwJCVRGX0NPTU1BTkQs IFNfVU5LTk9XTiB9LAorCXsgInByb21wdCIsCQlUX1BST01QVCwJCVRGX0NPTU1BTkQgfSwKKwl7 ICJ0cmlzdGF0ZSIsCQlUX1RZUEUsCQkJVEZfQ09NTUFORCwgU19UUklTVEFURSB9LAorCXsgImRl Zl90cmlzdGF0ZSIsCVRfREVGQVVMVCwJCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEUgfSwKKwl7ICJi b29sIiwJCVRfVFlQRSwJCQlURl9DT01NQU5ELCBTX0JPT0xFQU4gfSwKKwl7ICJkZWZfYm9vbCIs CQlUX0RFRkFVTFQsCQlURl9DT01NQU5ELCBTX0JPT0xFQU4gfSwKKwl7ICJpbnQiLAkJVF9UWVBF LAkJCVRGX0NPTU1BTkQsIFNfSU5UIH0sCisJeyAiaGV4IiwJCVRfVFlQRSwJCQlURl9DT01NQU5E LCBTX0hFWCB9LAorCXsgInN0cmluZyIsCQlUX1RZUEUsCQkJVEZfQ09NTUFORCwgU19TVFJJTkcg fSwKKwl7ICJzZWxlY3QiLAkJVF9TRUxFQ1QsCQlURl9DT01NQU5EIH0sCisJeyAiaW1wbHkiLAkJ VF9JTVBMWSwJCVRGX0NPTU1BTkQgfSwKKwl7ICJyYW5nZSIsCQlUX1JBTkdFLAkJVEZfQ09NTUFO RCB9LAorCXsgInZpc2libGUiLAkJVF9WSVNJQkxFLAkJVEZfQ09NTUFORCB9LAorCXsgIm9wdGlv biIsCQlUX09QVElPTiwJCVRGX0NPTU1BTkQgfSwKKwl7ICJvbiIsCQkJVF9PTiwJCQlURl9QQVJB TSB9LAorCXsgIm1vZHVsZXMiLAkJVF9PUFRfTU9EVUxFUywJCVRGX09QVElPTiB9LAorCXsgImRl ZmNvbmZpZ19saXN0IiwJVF9PUFRfREVGQ09ORklHX0xJU1QsCVRGX09QVElPTiB9LAorCXsgImVu diIsCQlUX09QVF9FTlYsCQlURl9PUFRJT04gfSwKKwl7ICJhbGxub2NvbmZpZ195IiwJVF9PUFRf QUxMTk9DT05GSUdfWSwJVEZfT1BUSU9OIH0sCit9OworCisjZGVmaW5lIEtDT05GX0lEX0FSUkFZ X1NJWkUgKHNpemVvZihrY29uZl9pZF9hcnJheSkvc2l6ZW9mKHN0cnVjdCBrY29uZl9pZCkpCisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBj b25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgS0NPTkZfSURfQVJSQVlfU0laRTsgaSsrKSB7CisJCXN0cnVjdCBr Y29uZl9pZCAqaWQgPSBrY29uZl9pZF9hcnJheStpOworCQlpbnQgbCA9IHN0cmxlbihpZC0+bmFt ZSk7CisKKwkJaWYgKGxlbiA9PSBsICYmICFtZW1jbXAoc3RyLCBpZC0+bmFtZSwgbGVuKSkKKwkJ CXJldHVybiBpZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS94ZW4vdG9vbHMv a2NvbmZpZy9reGdldHRleHQuYyBiL3hlbi90b29scy9rY29uZmlnL2t4Z2V0dGV4dC5jCmluZGV4 IDI4NTg3MzhiMjIuLjI0MDg4MGE4OTEgMTAwNjQ0Ci0tLSBhL3hlbi90b29scy9rY29uZmlnL2t4 Z2V0dGV4dC5jCisrKyBiL3hlbi90b29scy9rY29uZmlnL2t4Z2V0dGV4dC5jCkBAIC0xMDEsNyAr MTAxLDcgQEAgc3RhdGljIHN0cnVjdCBtZXNzYWdlICptZXNzYWdlX19uZXcoY29uc3QgY2hhciAq bXNnLCBjaGFyICpvcHRpb24sCiAJaWYgKHNlbGYtPmZpbGVzID09IE5VTEwpCiAJCWdvdG8gb3V0 X2ZhaWw7CiAKLQlzZWxmLT5tc2cgPSBzdHJkdXAobXNnKTsKKwlzZWxmLT5tc2cgPSB4c3RyZHVw KG1zZyk7CiAJaWYgKHNlbGYtPm1zZyA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsX21zZzsKIApk aWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvbGlzdC5oIGIveGVuL3Rvb2xzL2tjb25maWcv bGlzdC5oCmluZGV4IDJjZjIzZjAwMmQuLjQ1Y2IyMzdhYjcgMTAwNjQ0Ci0tLSBhL3hlbi90b29s cy9rY29uZmlnL2xpc3QuaAorKysgYi94ZW4vdG9vbHMva2NvbmZpZy9saXN0LmgKQEAgLTEsMyAr MSw0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwogI2lmbmRlZiBM SVNUX0gKICNkZWZpbmUgTElTVF9ICiAKZGlmZiAtLWdpdCBhL3hlbi90b29scy9rY29uZmlnL2xr Yy5oIGIveGVuL3Rvb2xzL2tjb25maWcvbGtjLmgKaW5kZXggOTFjYTEyNmVhMC4uZjQzOTRhZjZl NCAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvbGtjLmgKKysrIGIveGVuL3Rvb2xzL2tj b25maWcvbGtjLmgKQEAgLTYyLDEyICs2MiwxMyBAQCBlbnVtIGNvbmZfZGVmX21vZGUgewogI2Rl ZmluZSBUX09QVF9BTExOT0NPTkZJR19ZCTQKIAogc3RydWN0IGtjb25mX2lkIHsKLQlpbnQgbmFt ZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCB0b2tlbjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7 CiAJZW51bSBzeW1ib2xfdHlwZSBzdHlwZTsKIH07CiAKK2V4dGVybiBpbnQgeXlsaW5lbm87CiB2 b2lkIHpjb25mZHVtcChGSUxFICpvdXQpOwogdm9pZCB6Y29uZl9zdGFydGhlbHAodm9pZCk7CiBG SUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKTsKQEAgLTEwMCw3ICsxMDEsNiBAQCB2 b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwog c3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCk7CiB2b2lkIG1lbnVfZW5kX21lbnUodm9p ZCk7CiB2b2lkIG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSk7Ci12b2lkIG1lbnVf ZW5kX2VudHJ5KHZvaWQpOwogdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCk7CiB2 b2lkIG1lbnVfYWRkX3Zpc2liaWxpdHkoc3RydWN0IGV4cHIgKmRlcCk7CiBzdHJ1Y3QgcHJvcGVy dHkgKm1lbnVfYWRkX3Byb21wdChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0 cnVjdCBleHByICpkZXApOwpAQCAtMTE1LDYgKzExNSw4IEBAIHN0cnVjdCBmaWxlICpmaWxlX2xv b2t1cChjb25zdCBjaGFyICpuYW1lKTsKIGludCBmaWxlX3dyaXRlX2RlcChjb25zdCBjaGFyICpu YW1lKTsKIHZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpOwogdm9pZCAqeGNhbGxvYyhzaXplX3Qg bm1lbWIsIHNpemVfdCBzaXplKTsKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBzaXpl KTsKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcyk7CiAKIHN0cnVjdCBnc3RyIHsKIAlzaXpl X3QgbGVuOwpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvbGtjX3Byb3RvLmggYi94ZW4v dG9vbHMva2NvbmZpZy9sa2NfcHJvdG8uaAppbmRleCBkNTM5ODcxOGVjLi45ZGM4YWJmYjFkIDEw MDY0NAotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9sa2NfcHJvdG8uaAorKysgYi94ZW4vdG9vbHMv a2NvbmZpZy9sa2NfcHJvdG8uaApAQCAtMSwzICsxLDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wICovCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKIC8qIGNvbmZkYXRhLmMg Ki8KQEAgLTMwLDcgKzMxLDcgQEAgZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKiBzeW1ib2xfaGFzaFtT WU1CT0xfSEFTSFNJWkVdOwogCiBzdHJ1Y3Qgc3ltYm9sICogc3ltX2xvb2t1cChjb25zdCBjaGFy ICpuYW1lLCBpbnQgZmxhZ3MpOwogc3RydWN0IHN5bWJvbCAqIHN5bV9maW5kKGNvbnN0IGNoYXIg Km5hbWUpOwotY29uc3QgY2hhciAqIHN5bV9leHBhbmRfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIg KmluKTsKK2NoYXIgKnN5bV9leHBhbmRfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIgKmluKTsKIGNv bnN0IGNoYXIgKiBzeW1fZXNjYXBlX3N0cmluZ192YWx1ZShjb25zdCBjaGFyICppbik7CiBzdHJ1 Y3Qgc3ltYm9sICoqIHN5bV9yZV9zZWFyY2goY29uc3QgY2hhciAqcGF0dGVybik7CiBjb25zdCBj aGFyICogc3ltX3R5cGVfbmFtZShlbnVtIHN5bWJvbF90eXBlIHR5cGUpOwpkaWZmIC0tZ2l0IGEv eGVuL3Rvb2xzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggYi94ZW4vdG9vbHMv a2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAppbmRleCA1MDc1ZWJmMmQzLi42YzBi Y2Q5YzQ3IDEwMDc1NQotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRp YWxvZy5zaAorKysgYi94ZW4vdG9vbHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5z aApAQCAtMSw0ICsxLDUgQEAKICMhL2Jpbi9zaAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAogIyBDaGVjayBuY3Vyc2VzIGNvbXBhdGliaWxpdHkKIAogIyBXaGF0IGxpYnJhcnkg dG8gbGluawpAQCAtNTQsNyArNTUsOCBAQCBFT0YKIAkgICAgZWNobyAiICoqKiByZXF1aXJlZCBo ZWFkZXIgZmlsZXMuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCiAJICAgIGVjaG8g IiAqKiogJ21ha2UgbWVudWNvbmZpZycgcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyaWVzLiIg MT4mMgogCSAgICBlY2hvICIgKioqICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDE+JjIKLQkgICAgZWNobyAiICoqKiBJbnN0YWxsIG5jdXJzZXMgKG5j dXJzZXMtZGV2ZWwpIGFuZCB0cnkgYWdhaW4uIiAgICAxPiYyCisJICAgIGVjaG8gIiAqKiogSW5z dGFsbCBuY3Vyc2VzIChuY3Vyc2VzLWRldmVsIG9yIGxpYm5jdXJzZXMtZGV2ICIgMT4mMgorCSAg ICBlY2hvICIgKioqIGRlcGVuZGluZyBvbiB5b3VyIGRpc3RyaWJ1dGlvbikgYW5kIHRyeSBhZ2Fp bi4iICAgIDE+JjIKIAkgICAgZWNobyAiICoqKiAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxPiYyCiAJICAgIGV4aXQgMQogCWZpCmRpZmYgLS1naXQg YS94ZW4vdG9vbHMva2NvbmZpZy9tY29uZi5jIGIveGVuL3Rvb2xzL2tjb25maWcvbWNvbmYuYwpp bmRleCAzMTVjZTJjN2NiLi5jODI5YmU4YmIxIDEwMDY0NAotLS0gYS94ZW4vdG9vbHMva2NvbmZp Zy9tY29uZi5jCisrKyBiL3hlbi90b29scy9rY29uZmlnL21jb25mLmMKQEAgLTI0Niw3ICsyNDYs NyBAQCBzZWFyY2hfaGVscFtdID0gTl8oCiAJIiAgU2VsZWN0ZWQgYnk6IEJBUiBbPW5dXG4iCiAJ Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tXG4iCiAJIm8gVGhlIGxpbmUgJ1R5cGU6JyBzaG93cyB0aGUgdHlwZSBvZiB0aGUg Y29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iCi0JIiAgdGhpcyBzeW1ib2wgKGJvb2xlYW4sIHRy aXN0YXRlLCBzdHJpbmcsIC4uLilcbiIKKwkiICB0aGlzIHN5bWJvbCAoYm9vbCwgdHJpc3RhdGUs IHN0cmluZywgLi4uKVxuIgogCSJvIFRoZSBsaW5lICdQcm9tcHQ6JyBzaG93cyB0aGUgdGV4dCB1 c2VkIGluIHRoZSBtZW51IHN0cnVjdHVyZSBmb3JcbiIKIAkiICB0aGlzIHN5bWJvbFxuIgogCSJv IFRoZSAnRGVmaW5lZCBhdCcgbGluZSB0ZWxscyBhdCB3aGF0IGZpbGUgLyBsaW5lIG51bWJlciB0 aGUgc3ltYm9sXG4iCmRpZmYgLS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy9tZW51LmMgYi94ZW4v dG9vbHMva2NvbmZpZy9tZW51LmMKaW5kZXggYjA1Y2MzZDRhOS4uNWM1YzEzNzRiMSAxMDA2NDQK LS0tIGEveGVuL3Rvb2xzL2tjb25maWcvbWVudS5jCisrKyBiL3hlbi90b29scy9rY29uZmlnL21l bnUuYwpAQCAtNjIsMTMgKzYyLDggQEAgdm9pZCBtZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9s ICpzeW0pCiAJCW1lbnVfYWRkX3N5bWJvbChQX1NZTUJPTCwgc3ltLCBOVUxMKTsKIH0KIAotdm9p ZCBtZW51X2VuZF9lbnRyeSh2b2lkKQotewotfQotCiBzdHJ1Y3QgbWVudSAqbWVudV9hZGRfbWVu dSh2b2lkKQogewotCW1lbnVfZW5kX2VudHJ5KCk7CiAJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVu dF9lbnRyeS0+bGlzdDsKIAlyZXR1cm4gY3VycmVudF9tZW51ID0gY3VycmVudF9lbnRyeTsKIH0K QEAgLTc5LDE5ICs3NCwyMyBAQCB2b2lkIG1lbnVfZW5kX21lbnUodm9pZCkKIAljdXJyZW50X21l bnUgPSBjdXJyZW50X21lbnUtPnBhcmVudDsKIH0KIAotc3RhdGljIHN0cnVjdCBleHByICptZW51 X2NoZWNrX2RlcChzdHJ1Y3QgZXhwciAqZSkKKy8qCisgKiBSZXdyaXRlcyAnbScgdG8gJ20nICYm IE1PRFVMRVMsIHNvIHRoYXQgaXQgZXZhbHVhdGVzIHRvICduJyB3aGVuIHJ1bm5pbmcKKyAqIHdp dGhvdXQgbW9kdWxlcworICovCitzdGF0aWMgc3RydWN0IGV4cHIgKnJld3JpdGVfbShzdHJ1Y3Qg ZXhwciAqZSkKIHsKIAlpZiAoIWUpCiAJCXJldHVybiBlOwogCiAJc3dpdGNoIChlLT50eXBlKSB7 CiAJY2FzZSBFX05PVDoKLQkJZS0+bGVmdC5leHByID0gbWVudV9jaGVja19kZXAoZS0+bGVmdC5l eHByKTsKKwkJZS0+bGVmdC5leHByID0gcmV3cml0ZV9tKGUtPmxlZnQuZXhwcik7CiAJCWJyZWFr OwogCWNhc2UgRV9PUjoKIAljYXNlIEVfQU5EOgotCQllLT5sZWZ0LmV4cHIgPSBtZW51X2NoZWNr X2RlcChlLT5sZWZ0LmV4cHIpOwotCQllLT5yaWdodC5leHByID0gbWVudV9jaGVja19kZXAoZS0+ cmlnaHQuZXhwcik7CisJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0LmV4cHIpOwor CQllLT5yaWdodC5leHByID0gcmV3cml0ZV9tKGUtPnJpZ2h0LmV4cHIpOwogCQlicmVhazsKIAlj YXNlIEVfU1lNQk9MOgogCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8KQEAg LTEwNiw3ICsxMDUsNyBAQCBzdGF0aWMgc3RydWN0IGV4cHIgKm1lbnVfY2hlY2tfZGVwKHN0cnVj dCBleHByICplKQogCiB2b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKQogewotCWN1 cnJlbnRfZW50cnktPmRlcCA9IGV4cHJfYWxsb2NfYW5kKGN1cnJlbnRfZW50cnktPmRlcCwgbWVu dV9jaGVja19kZXAoZGVwKSk7CisJY3VycmVudF9lbnRyeS0+ZGVwID0gZXhwcl9hbGxvY19hbmQo Y3VycmVudF9lbnRyeS0+ZGVwLCBkZXApOwogfQogCiB2b2lkIG1lbnVfc2V0X3R5cGUoaW50IHR5 cGUpCkBAIC0xMzEsNyArMTMwLDcgQEAgc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRf cHJvcChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdAogCiAJcHJvcC0+ bWVudSA9IGN1cnJlbnRfZW50cnk7CiAJcHJvcC0+ZXhwciA9IGV4cHI7Ci0JcHJvcC0+dmlzaWJs ZS5leHByID0gbWVudV9jaGVja19kZXAoZGVwKTsKKwlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7 CiAKIAlpZiAocHJvbXB0KSB7CiAJCWlmIChpc3NwYWNlKCpwcm9tcHQpKSB7CkBAIC0yMTMsNiAr MjEyLDcgQEAgdm9pZCBtZW51X2FkZF9vcHRpb24oaW50IHRva2VuLCBjaGFyICphcmcpCiAJCQlz eW1fZGVmY29uZmlnX2xpc3QgPSBjdXJyZW50X2VudHJ5LT5zeW07CiAJCWVsc2UgaWYgKHN5bV9k ZWZjb25maWdfbGlzdCAhPSBjdXJyZW50X2VudHJ5LT5zeW0pCiAJCQl6Y29uZl9lcnJvcigidHJ5 aW5nIHRvIHJlZGVmaW5lIGRlZmNvbmZpZyBzeW1ib2wiKTsKKwkJc3ltX2RlZmNvbmZpZ19saXN0 LT5mbGFncyB8PSBTWU1CT0xfQVVUTzsKIAkJYnJlYWs7CiAJY2FzZSBUX09QVF9FTlY6CiAJCXBy b3BfYWRkX2VudihhcmcpOwpAQCAtMjMzLDYgKzIzMyw4IEBAIHN0YXRpYyB2b2lkIHN5bV9jaGVj a19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAJ c3RydWN0IHN5bWJvbCAqc3ltMjsKKwljaGFyICp1c2U7CisKIAlmb3IgKHByb3AgPSBzeW0tPnBy b3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CiAJCXN3aXRjaCAocHJvcC0+dHlwZSkgewog CQljYXNlIFBfREVGQVVMVDoKQEAgLTI1MCwyMCArMjUyLDMyIEBAIHN0YXRpYyB2b2lkIHN5bV9j aGVja19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKIAkJCQkJICAgICInJXMnOiBudW1iZXIgaXMg aW52YWxpZCIsCiAJCQkJCSAgICBzeW0tPm5hbWUpOwogCQkJfQorCQkJaWYgKHN5bV9pc19jaG9p Y2Uoc3ltKSkgeworCQkJCXN0cnVjdCBwcm9wZXJ0eSAqY2hvaWNlX3Byb3AgPQorCQkJCQlzeW1f Z2V0X2Nob2ljZV9wcm9wKHN5bTIpOworCisJCQkJaWYgKCFjaG9pY2VfcHJvcCB8fAorCQkJCSAg ICBwcm9wX2dldF9zeW1ib2woY2hvaWNlX3Byb3ApICE9IHN5bSkKKwkJCQkJcHJvcF93YXJuKHBy b3AsCisJCQkJCQkgICJjaG9pY2UgZGVmYXVsdCBzeW1ib2wgJyVzJyBpcyBub3QgY29udGFpbmVk IGluIHRoZSBjaG9pY2UiLAorCQkJCQkJICBzeW0yLT5uYW1lKTsKKwkJCX0KIAkJCWJyZWFrOwog CQljYXNlIFBfU0VMRUNUOgorCQljYXNlIFBfSU1QTFk6CisJCQl1c2UgPSBwcm9wLT50eXBlID09 IFBfU0VMRUNUID8gInNlbGVjdCIgOiAiaW1wbHkiOwogCQkJc3ltMiA9IHByb3BfZ2V0X3N5bWJv bChwcm9wKTsKIAkJCWlmIChzeW0tPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bS0+dHlwZSAhPSBT X1RSSVNUQVRFKQogCQkJCXByb3Bfd2Fybihwcm9wLAotCQkJCSAgICAiY29uZmlnIHN5bWJvbCAn JXMnIHVzZXMgc2VsZWN0LCBidXQgaXMgIgotCQkJCSAgICAibm90IGJvb2xlYW4gb3IgdHJpc3Rh dGUiLCBzeW0tPm5hbWUpOworCQkJCSAgICAiY29uZmlnIHN5bWJvbCAnJXMnIHVzZXMgJXMsIGJ1 dCBpcyAiCisJCQkJICAgICJub3QgYm9vbCBvciB0cmlzdGF0ZSIsIHN5bS0+bmFtZSwgdXNlKTsK IAkJCWVsc2UgaWYgKHN5bTItPnR5cGUgIT0gU19VTktOT1dOICYmCiAJCQkJIHN5bTItPnR5cGUg IT0gU19CT09MRUFOICYmCiAJCQkJIHN5bTItPnR5cGUgIT0gU19UUklTVEFURSkKIAkJCQlwcm9w X3dhcm4ocHJvcCwKLQkJCQkgICAgIiclcycgaGFzIHdyb25nIHR5cGUuICdzZWxlY3QnIG9ubHkg IgotCQkJCSAgICAiYWNjZXB0IGFyZ3VtZW50cyBvZiBib29sZWFuIGFuZCAiCi0JCQkJICAgICJ0 cmlzdGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSk7CisJCQkJICAgICInJXMnIGhhcyB3cm9uZyB0eXBl LiAnJXMnIG9ubHkgIgorCQkJCSAgICAiYWNjZXB0IGFyZ3VtZW50cyBvZiBib29sIGFuZCAiCisJ CQkJICAgICJ0cmlzdGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSwgdXNlKTsKIAkJCWJyZWFrOwogCQlj YXNlIFBfUkFOR0U6CiAJCQlpZiAoc3ltLT50eXBlICE9IFNfSU5UICYmIHN5bS0+dHlwZSAhPSBT X0hFWCkKQEAgLTI4OCw2ICszMDIsMTEgQEAgdm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51 ICpwYXJlbnQpCiAKIAlzeW0gPSBwYXJlbnQtPnN5bTsKIAlpZiAocGFyZW50LT5saXN0KSB7CisJ CS8qCisJCSAqIFRoaXMgbWVudSBub2RlIGhhcyBjaGlsZHJlbi4gV2UgKHJlY3Vyc2l2ZWx5KSBw cm9jZXNzIHRoZW0KKwkJICogYW5kIHByb3BhZ2F0ZSBwYXJlbnQgZGVwZW5kZW5jaWVzIGJlZm9y ZSBtb3Zpbmcgb24uCisJCSAqLworCiAJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKSB7 CiAJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgewogCQkJCS8qIGZpbmQgdGhlIGZpcnN0 IGNob2ljZSB2YWx1ZSB0byBmaW5kIG91dCBjaG9pY2UgdHlwZSAqLwpAQCAtMzA1LDY1ICszMjQs MTY5IEBAIHZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KQogCQkJCWlmICht ZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlID09IFNfVU5LTk9XTikKIAkJCQkJbWVudV9zZXRf dHlwZShzeW0tPnR5cGUpOwogCQkJfQorCisJCQkvKgorCQkJICogVXNlIHRoZSBjaG9pY2UgaXRz ZWxmIGFzIHRoZSBwYXJlbnQgZGVwZW5kZW5jeSBvZgorCQkJICogdGhlIGNvbnRhaW5lZCBpdGVt cy4gVGhpcyB0dXJucyB0aGUgbW9kZSBvZiB0aGUKKwkJCSAqIGNob2ljZSBpbnRvIGFuIHVwcGVy IGJvdW5kIG9uIHRoZSB2aXNpYmlsaXR5IG9mIHRoZQorCQkJICogY2hvaWNlIHZhbHVlIHN5bWJv bHMuCisJCQkgKi8KIAkJCXBhcmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7CiAJCX0g ZWxzZSBpZiAocGFyZW50LT5wcm9tcHQpCisJCQkvKiBNZW51IG5vZGUgZm9yICdtZW51JyAqLwog CQkJcGFyZW50ZGVwID0gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwcjsKIAkJZWxzZQorCQkJ LyogTWVudSBub2RlIGZvciAnaWYnICovCiAJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPmRlcDsKIAor CQkvKiBGb3IgZWFjaCBjaGlsZCBtZW51IG5vZGUuLi4gKi8KIAkJZm9yIChtZW51ID0gcGFyZW50 LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgewotCQkJYmFzZWRlcCA9IGV4cHJfdHJh bnNmb3JtKG1lbnUtPmRlcCk7CisJCQkvKgorCQkJICogUHJvcGFnYXRlIHBhcmVudCBkZXBlbmRl bmNpZXMgdG8gdGhlIGNoaWxkIG1lbnUKKwkJCSAqIG5vZGUsIGFsc28gcmV3cml0aW5nIGFuZCBz aW1wbGlmeWluZyBleHByZXNzaW9ucworCQkJICovCisJCQliYXNlZGVwID0gcmV3cml0ZV9tKG1l bnUtPmRlcCk7CisJCQliYXNlZGVwID0gZXhwcl90cmFuc2Zvcm0oYmFzZWRlcCk7CiAJCQliYXNl ZGVwID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KHBhcmVudGRlcCksIGJhc2VkZXApOwogCQkJ YmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoYmFzZWRlcCk7CiAJCQltZW51LT5kZXAgPSBi YXNlZGVwOworCiAJCQlpZiAobWVudS0+c3ltKQorCQkJCS8qCisJCQkJICogTm90ZTogRm9yIHN5 bWJvbHMsIGFsbCBwcm9tcHRzIGFyZSBpbmNsdWRlZAorCQkJCSAqIHRvbyBpbiB0aGUgc3ltYm9s J3Mgb3duIHByb3BlcnR5IGxpc3QKKwkJCQkgKi8KIAkJCQlwcm9wID0gbWVudS0+c3ltLT5wcm9w OwogCQkJZWxzZQorCQkJCS8qCisJCQkJICogRm9yIG5vbi1zeW1ib2wgbWVudSBub2Rlcywgd2Ug anVzdCBuZWVkIHRvCisJCQkJICogaGFuZGxlIHRoZSBwcm9tcHQKKwkJCQkgKi8KIAkJCQlwcm9w ID0gbWVudS0+cHJvbXB0OworCisJCQkvKiBGb3IgZWFjaCBwcm9wZXJ0eS4uLiAqLwogCQkJZm9y ICg7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CiAJCQkJaWYgKHByb3AtPm1lbnUgIT0gbWVu dSkKKwkJCQkJLyoKKwkJCQkJICogVHdvIHBvc3NpYmlsaXRpZXM6CisJCQkJCSAqCisJCQkJCSAq IDEuIFRoZSBwcm9wZXJ0eSBsYWNrcyBkZXBlbmRlbmNpZXMKKwkJCQkJICogICAgYW5kIHNvIGlz bid0IGxvY2F0aW9uLXNwZWNpZmljLAorCQkJCQkgKiAgICBlLmcuIGFuICdvcHRpb24nCisJCQkJ CSAqCisJCQkJCSAqIDIuIFRoZSBwcm9wZXJ0eSBiZWxvbmdzIHRvIGEgc3ltYm9sCisJCQkJCSAq ICAgIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGFuZAorCQkJCQkgKiAgICBpcyBmcm9t IHNvbWUgb3RoZXIgbG9jYXRpb24uIEl0CisJCQkJCSAqICAgIHdpbGwgYmUgaGFuZGxlZCB0aGVy ZSBpbiB0aGF0CisJCQkJCSAqICAgIGNhc2UuCisJCQkJCSAqCisJCQkJCSAqIFNraXAgdGhlIHBy b3BlcnR5LgorCQkJCQkgKi8KIAkJCQkJY29udGludWU7Ci0JCQkJZGVwID0gZXhwcl90cmFuc2Zv cm0ocHJvcC0+dmlzaWJsZS5leHByKTsKKworCQkJCS8qCisJCQkJICogUHJvcGFnYXRlIHBhcmVu dCBkZXBlbmRlbmNpZXMgdG8gdGhlCisJCQkJICogcHJvcGVydHkncyBjb25kaXRpb24sIHJld3Jp dGluZyBhbmQKKwkJCQkgKiBzaW1wbGlmeWluZyBleHByZXNzaW9ucyBhdCB0aGUgc2FtZSB0aW1l CisJCQkJICovCisJCQkJZGVwID0gcmV3cml0ZV9tKHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJ ZGVwID0gZXhwcl90cmFuc2Zvcm0oZGVwKTsKIAkJCQlkZXAgPSBleHByX2FsbG9jX2FuZChleHBy X2NvcHkoYmFzZWRlcCksIGRlcCk7CiAJCQkJZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhkZXAp OwogCQkJCWlmIChtZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpCiAJ CQkJCWRlcCA9IGV4cHJfdHJhbnNfYm9vbChkZXApOwogCQkJCXByb3AtPnZpc2libGUuZXhwciA9 IGRlcDsKKworCQkJCS8qCisJCQkJICogSGFuZGxlIHNlbGVjdHMgYW5kIGltcGxpZXMsIHdoaWNo IG1vZGlmeSB0aGUKKwkJCQkgKiBkZXBlbmRlbmNpZXMgb2YgdGhlIHNlbGVjdGVkL2ltcGxpZWQg c3ltYm9sCisJCQkJICovCiAJCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QpIHsKIAkJCQkJ c3RydWN0IHN5bWJvbCAqZXMgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CiAJCQkJCWVzLT5yZXZf ZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKGVzLT5yZXZfZGVwLmV4cHIsCiAJCQkJCQkJZXhwcl9h bGxvY19hbmQoZXhwcl9hbGxvY19zeW1ib2wobWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsK KwkJCQl9IGVsc2UgaWYgKHByb3AtPnR5cGUgPT0gUF9JTVBMWSkgeworCQkJCQlzdHJ1Y3Qgc3lt Ym9sICplcyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCQkJZXMtPmltcGxpZWQuZXhwciA9 IGV4cHJfYWxsb2Nfb3IoZXMtPmltcGxpZWQuZXhwciwKKwkJCQkJCQlleHByX2FsbG9jX2FuZChl eHByX2FsbG9jX3N5bWJvbChtZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOwogCQkJCX0KIAkJ CX0KIAkJfQorCisJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJZXhwcl9mcmVl KHBhcmVudGRlcCk7CisKKwkJLyoKKwkJICogUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlbiBp biB0aGUgc2FtZSBmYXNoaW9uIGJlZm9yZQorCQkgKiBtb3Zpbmcgb24KKwkJICovCiAJCWZvciAo bWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpCiAJCQltZW51X2Zp bmFsaXplKG1lbnUpOwogCX0gZWxzZSBpZiAoc3ltKSB7CisJCS8qCisJCSAqIEF1dG9tYXRpYyBz dWJtZW51IGNyZWF0aW9uLiBJZiBzeW0gaXMgYSBzeW1ib2wgYW5kIEEsIEIsIEMsCisJCSAqIC4u LiBhcmUgY29uc2VjdXRpdmUgaXRlbXMgKHN5bWJvbHMsIG1lbnVzLCBpZnMsIGV0Yy4pIHRoYXQK KwkJICogYWxsIGRlcGVuZCBvbiBzeW0sIHRoZW4gdGhlIGZvbGxvd2luZyBtZW51IHN0cnVjdHVy ZSBpcworCQkgKiBjcmVhdGVkOgorCQkgKgorCQkgKglzeW0KKwkJICoJICstQQorCQkgKgkgKy1C CisJCSAqCSArLUMKKwkJICoJIC4uLgorCQkgKgorCQkgKiBUaGlzIGFsc28gd29ya3MgcmVjdXJz aXZlbHksIGdpdmluZyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZQorCQkgKiBpZiBBIGlzIGEgc3lt Ym9sIGFuZCBCIGRlcGVuZHMgb24gQToKKwkJICoKKwkJICoJc3ltCisJCSAqCSArLUEKKwkJICoJ IHwgKy1CCisJCSAqCSArLUMKKwkJICoJIC4uLgorCQkgKi8KKwogCQliYXNlZGVwID0gcGFyZW50 LT5wcm9tcHQgPyBwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByIDogTlVMTDsKIAkJYmFzZWRl cCA9IGV4cHJfdHJhbnNfY29tcGFyZShiYXNlZGVwLCBFX1VORVFVQUwsICZzeW1ib2xfbm8pOwog CQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhleHByX3RyYW5zZm9ybShiYXNlZGVwKSk7 CisKKwkJLyogRXhhbWluZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBhZnRlciBzeW0gKi8KIAkJbGFz dF9tZW51ID0gTlVMTDsKIAkJZm9yIChtZW51ID0gcGFyZW50LT5uZXh0OyBtZW51OyBtZW51ID0g bWVudS0+bmV4dCkgewogCQkJZGVwID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT52aXNp YmxlLmV4cHIgOiBtZW51LT5kZXA7CiAJCQlpZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwg c3ltKSkKKwkJCQkvKiBObyBkZXBlbmRlbmN5LCBxdWl0ICovCiAJCQkJYnJlYWs7CiAJCQlpZiAo ZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAsIHN5bSkpCisJCQkJLyogQWJzb2x1dGUgZGVwZW5kZW5j eSwgcHV0IGluIHN1Ym1lbnUgKi8KIAkJCQlnb3RvIG5leHQ7CisKKwkJCS8qCisJCQkgKiBBbHNv IGNvbnNpZGVyIGl0IGEgZGVwZW5kZW5jeSBvbiBzeW0gaWYgb3VyCisJCQkgKiBkZXBlbmRlbmNp ZXMgY29udGFpbiBzeW0gYW5kIGFyZSBhICJzdXBlcnNldCIgb2YKKwkJCSAqIHN5bSdzIGRlcGVu ZGVuY2llcywgZS5nLiAnKHN5bSB8fCBRKSAmJiBSJyB3aGVuIHN5bQorCQkJICogZGVwZW5kcyBv biBSLgorCQkJICoKKwkJCSAqIE5vdGUgdGhhdCAnUicgbWlnaHQgYmUgZnJvbSBhbiBlbmNsb3Np bmcgbWVudSBvciBpZiwKKwkJCSAqIG1ha2luZyB0aGlzIGEgbW9yZSBjb21tb24gY2FzZSB0aGFu IGl0IG1pZ2h0IHNlZW0uCisJCQkgKi8KIAkJCWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAs IEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7CiAJCQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGV4 cHJfdHJhbnNmb3JtKGRlcCkpOwogCQkJZGVwMiA9IGV4cHJfY29weShiYXNlZGVwKTsKIAkJCWV4 cHJfZWxpbWluYXRlX2VxKCZkZXAsICZkZXAyKTsKIAkJCWV4cHJfZnJlZShkZXApOwogCQkJaWYg KCFleHByX2lzX3llcyhkZXAyKSkgeworCQkJCS8qIE5vdCBzdXBlcnNldCwgcXVpdCAqLwogCQkJ CWV4cHJfZnJlZShkZXAyKTsKIAkJCQlicmVhazsKIAkJCX0KKwkJCS8qIFN1cGVyc2V0LCBwdXQg aW4gc3VibWVudSAqLwogCQkJZXhwcl9mcmVlKGRlcDIpOwogCQluZXh0OgogCQkJbWVudV9maW5h bGl6ZShtZW51KTsKIAkJCW1lbnUtPnBhcmVudCA9IHBhcmVudDsKIAkJCWxhc3RfbWVudSA9IG1l bnU7CiAJCX0KKwkJZXhwcl9mcmVlKGJhc2VkZXApOwogCQlpZiAobGFzdF9tZW51KSB7CiAJCQlw YXJlbnQtPmxpc3QgPSBwYXJlbnQtPm5leHQ7CiAJCQlwYXJlbnQtPm5leHQgPSBsYXN0X21lbnUt Pm5leHQ7CkBAIC00MTIsNiArNTM1LDM1IEBAIHZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVu dSAqcGFyZW50KQogCQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsKIAkJCSgq ZXApLT5yaWdodC5zeW0gPSBtZW51LT5zeW07CiAJCX0KKworCQkvKgorCQkgKiBUaGlzIGNvZGUg c2VydmVzIHR3byBwdXJwb3NlczoKKwkJICoKKwkJICogKDEpIEZsYXR0ZW5pbmcgJ2lmJyBibG9j a3MsIHdoaWNoIGRvIG5vdCBzcGVjaWZ5IGEgc3VibWVudQorCQkgKiAgICAgYW5kIG9ubHkgYWRk IGRlcGVuZGVuY2llcy4KKwkJICoKKwkJICogICAgIChBdXRvbWF0aWMgc3VibWVudSBjcmVhdGlv biBtaWdodCBzdGlsbCBjcmVhdGUgYSBzdWJtZW51CisJCSAqICAgICBmcm9tIGFuICdpZicgYmVm b3JlIHRoaXMgY29kZSBydW5zLikKKwkJICoKKwkJICogKDIpICJVbmRvaW5nIiBhbnkgYXV0b21h dGljIHN1Ym1lbnVzIGNyZWF0ZWQgZWFybGllciBiZWxvdworCQkgKiAgICAgcHJvbXB0bGVzcyBz eW1ib2xzLgorCQkgKgorCQkgKiBCZWZvcmU6CisJCSAqCisJCSAqCUEKKwkJICoJaWYgLi4uIChv ciBwcm9tcHRsZXNzIHN5bWJvbCkKKwkJICoJICstQgorCQkgKgkgKy1DCisJCSAqCUQKKwkJICoK KwkJICogQWZ0ZXI6CisJCSAqCisJCSAqCUEKKwkJICoJaWYgLi4uIChvciBwcm9tcHRsZXNzIHN5 bWJvbCkKKwkJICoJQgorCQkgKglDCisJCSAqCUQKKwkJICovCiAJCWlmIChtZW51LT5saXN0ICYm ICghbWVudS0+cHJvbXB0IHx8ICFtZW51LT5wcm9tcHQtPnRleHQpKSB7CiAJCQlmb3IgKGxhc3Rf bWVudSA9IG1lbnUtPmxpc3Q7IDsgbGFzdF9tZW51ID0gbGFzdF9tZW51LT5uZXh0KSB7CiAJCQkJ bGFzdF9tZW51LT5wYXJlbnQgPSBwYXJlbnQ7CkBAIC00MzYsNiArNTg4LDE1IEBAIHZvaWQgbWVu dV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KQogCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9X QVJORUQ7CiAJfQogCisJLyoKKwkgKiBGb3Igbm9uLW9wdGlvbmFsIGNob2ljZXMsIGFkZCBhIHJl dmVyc2UgZGVwZW5kZW5jeSAoY29ycmVzcG9uZGluZyB0bworCSAqIGEgc2VsZWN0KSBvZiAnPHZp c2liaWxpdHk+ICYmIG0nLiBUaGlzIHByZXZlbnRzIHRoZSB1c2VyIGZyb20KKwkgKiBzZXR0aW5n IHRoZSBjaG9pY2UgbW9kZSB0byAnbicgd2hlbiB0aGUgY2hvaWNlIGlzIHZpc2libGUuCisJICoK KwkgKiBUaGlzIHdvdWxkIGFsc28gd29yayBmb3Igbm9uLWNob2ljZSBzeW1ib2xzLCBidXQgb25s eSBub24tb3B0aW9uYWwKKwkgKiBjaG9pY2VzIGNsZWFyIFNZTUJPTF9PUFRJT05BTCBhcyBvZiB3 cml0aW5nLiBDaG9pY2VzIGFyZSBpbXBsZW1lbnRlZAorCSAqIGFzIGEgdHlwZSBvZiBzeW1ib2wu CisJICovCiAJaWYgKHN5bSAmJiAhc3ltX2lzX29wdGlvbmFsKHN5bSkgJiYgcGFyZW50LT5wcm9t cHQpIHsKIAkJc3ltLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKHN5bS0+cmV2X2RlcC5l eHByLAogCQkJCWV4cHJfYWxsb2NfYW5kKHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIsCkBA IC00NzcsNyArNjM4LDcgQEAgYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0IG1lbnUgKm1lbnUp CiAKIAlpZiAobWVudS0+dmlzaWJpbGl0eSkgewogCQlpZiAoZXhwcl9jYWxjX3ZhbHVlKG1lbnUt PnZpc2liaWxpdHkpID09IG5vKQotCQkJcmV0dXJuIG5vOworCQkJcmV0dXJuIGZhbHNlOwogCX0K IAogCXN5bSA9IG1lbnUtPnN5bTsKQEAgLTYxMiwxMyArNzczLDMwIEBAIHN0YXRpYyBzdHJ1Y3Qg cHJvcGVydHkgKmdldF9zeW1ib2xfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCiAJcmV0dXJuIHBy b3A7CiB9CiAKK3N0YXRpYyB2b2lkIGdldF9zeW1ib2xfcHJvcHNfc3RyKHN0cnVjdCBnc3RyICpy LCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCQkJIGVudW0gcHJvcF90eXBlIHRvaywgY29uc3QgY2hh ciAqcHJlZml4KQoreworCWJvb2wgaGl0ID0gZmFsc2U7CisJc3RydWN0IHByb3BlcnR5ICpwcm9w OworCisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgcHJvcCwgdG9rKSB7CisJCWlmICghaGl0KSB7 CisJCQlzdHJfYXBwZW5kKHIsIHByZWZpeCk7CisJCQloaXQgPSB0cnVlOworCQl9IGVsc2UKKwkJ CXN0cl9wcmludGYociwgIiAmJiAiKTsKKwkJZXhwcl9nc3RyX3ByaW50KHByb3AtPmV4cHIsIHIp OworCX0KKwlpZiAoaGl0KQorCQlzdHJfYXBwZW5kKHIsICJcbiIpOworfQorCiAvKgogICogaGVh ZCBpcyBvcHRpb25hbCBhbmQgbWF5IGJlIE5VTEwKICAqLwogc3RhdGljIHZvaWQgZ2V0X3N5bWJv bF9zdHIoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBzeW1ib2wgKnN5bSwKIAkJICAgIHN0cnVjdCBs aXN0X2hlYWQgKmhlYWQpCiB7Ci0JYm9vbCBoaXQ7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwog CiAJaWYgKHN5bSAmJiBzeW0tPm5hbWUpIHsKQEAgLTY0OCwyMiArODI2LDIwIEBAIHN0YXRpYyB2 b2lkIGdldF9zeW1ib2xfc3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCiAJ CX0KIAl9CiAKLQloaXQgPSBmYWxzZTsKLQlmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCBQ X1NFTEVDVCkgewotCQlpZiAoIWhpdCkgewotCQkJc3RyX2FwcGVuZChyLCAiICBTZWxlY3RzOiAi KTsKLQkJCWhpdCA9IHRydWU7Ci0JCX0gZWxzZQotCQkJc3RyX3ByaW50ZihyLCAiICYmICIpOwot CQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7Ci0JfQotCWlmIChoaXQpCi0JCXN0cl9h cHBlbmQociwgIlxuIik7CisJZ2V0X3N5bWJvbF9wcm9wc19zdHIociwgc3ltLCBQX1NFTEVDVCwg XygiICBTZWxlY3RzOiAiKSk7CiAJaWYgKHN5bS0+cmV2X2RlcC5leHByKSB7Ci0JCXN0cl9hcHBl bmQociwgXygiICBTZWxlY3RlZCBieTogIikpOwotCQlleHByX2dzdHJfcHJpbnQoc3ltLT5yZXZf ZGVwLmV4cHIsIHIpOwotCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCQlleHByX2dzdHJfcHJpbnRf cmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCB5ZXMsICIgIFNlbGVjdGVkIGJ5IFt5XTpcbiIp OworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCBtb2QsICIg IFNlbGVjdGVkIGJ5IFttXTpcbiIpOworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2 X2RlcC5leHByLCByLCBubywgIiAgU2VsZWN0ZWQgYnkgW25dOlxuIik7CiAJfQorCisJZ2V0X3N5 bWJvbF9wcm9wc19zdHIociwgc3ltLCBQX0lNUExZLCBfKCIgIEltcGxpZXM6ICIpKTsKKwlpZiAo c3ltLT5pbXBsaWVkLmV4cHIpIHsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPmltcGxp ZWQuZXhwciwgciwgeWVzLCAiICBJbXBsaWVkIGJ5IFt5XTpcbiIpOworCQlleHByX2dzdHJfcHJp bnRfcmV2ZGVwKHN5bS0+aW1wbGllZC5leHByLCByLCBtb2QsICIgIEltcGxpZWQgYnkgW21dOlxu Iik7CisJCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5pbXBsaWVkLmV4cHIsIHIsIG5vLCAi ICBJbXBsaWVkIGJ5IFtuXTpcbiIpOworCX0KKwogCXN0cl9hcHBlbmQociwgIlxuXG4iKTsKIH0K IApkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvbWVyZ2VfY29uZmlnLnNoIGIveGVuL3Rv b2xzL2tjb25maWcvbWVyZ2VfY29uZmlnLnNoCmluZGV4IDBkODgzYjM3ODguLjY3ZDEzMTQ0NzYg MTAwNzU1Ci0tLSBhL3hlbi90b29scy9rY29uZmlnL21lcmdlX2NvbmZpZy5zaAorKysgYi94ZW4v dG9vbHMva2NvbmZpZy9tZXJnZV9jb25maWcuc2gKQEAgLTMyLDcgKzMyLDcgQEAgdXNhZ2UoKSB7 CiAJZWNobyAiICAtbSAgICBvbmx5IG1lcmdlIHRoZSBmcmFnbWVudHMsIGRvIG5vdCBleGVjdXRl IHRoZSBtYWtlIGNvbW1hbmQiCiAJZWNobyAiICAtbiAgICB1c2UgYWxsbm9jb25maWcgaW5zdGVh ZCBvZiBhbGxkZWZjb25maWciCiAJZWNobyAiICAtciAgICBsaXN0IHJlZHVuZGFudCBlbnRyaWVz IHdoZW4gbWVyZ2luZyBmcmFnbWVudHMiCi0JZWNobyAiICAtTyAgICBkaXIgdG8gcHV0IGdlbmVy YXRlZCBvdXRwdXQgZmlsZXMiCisJZWNobyAiICAtTyAgICBkaXIgdG8gcHV0IGdlbmVyYXRlZCBv dXRwdXQgZmlsZXMuICBDb25zaWRlciBzZXR0aW5nIFwkS0NPTkZJR19DT05GSUcgaW5zdGVhZC4i CiB9CiAKIFJVTk1BS0U9dHJ1ZQpAQCAtNzcsMTEgKzc3LDE5IEBAIHdoaWxlIHRydWU7IGRvCiAJ ZXNhYwogZG9uZQogCi1pZiBbICIkIyIgLWx0IDIgXSA7IHRoZW4KK2lmIFsgIiQjIiAtbHQgMSBd IDsgdGhlbgogCXVzYWdlCiAJZXhpdAogZmkKIAoraWYgWyAteiAiJEtDT05GSUdfQ09ORklHIiBd OyB0aGVuCisJaWYgWyAiJE9VVFBVVCIgIT0gLiBdOyB0aGVuCisJCUtDT05GSUdfQ09ORklHPSQo cmVhZGxpbmsgLW0gLS0gIiRPVVRQVVQvLmNvbmZpZyIpCisJZWxzZQorCQlLQ09ORklHX0NPTkZJ Rz0uY29uZmlnCisJZmkKK2ZpCisKIElOSVRGSUxFPSQxCiBzaGlmdDsKIApAQCAtMTI0LDkgKzEz Miw5IEBAIGZvciBNRVJHRV9GSUxFIGluICRNRVJHRV9MSVNUIDsgZG8KIGRvbmUKIAogaWYgWyAi JFJVTk1BS0UiID0gImZhbHNlIiBdOyB0aGVuCi0JY3AgJFRNUF9GSUxFICRPVVRQVVQvLmNvbmZp ZworCWNwIC1UIC0tICIkVE1QX0ZJTEUiICIkS0NPTkZJR19DT05GSUciCiAJZWNobyAiIyIKLQll Y2hvICIjIG1lcmdlZCBjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJE9VVFBVVC8uY29uZmlnIChu ZWVkcyBtYWtlKSIKKwllY2hvICIjIG1lcmdlZCBjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJEtD T05GSUdfQ09ORklHIChuZWVkcyBtYWtlKSIKIAllY2hvICIjIgogCWNsZWFuX3VwCiAJZXhpdApA QCAtMTUwLDcgKzE1OCw3IEBAIG1ha2UgS0NPTkZJR19BTExDT05GSUc9JFRNUF9GSUxFICRPVVRQ VVRfQVJHICRBTExUQVJHRVQKIGZvciBDRkcgaW4gJChzZWQgLW4gIiRTRURfQ09ORklHX0VYUCIg JFRNUF9GSUxFKTsgZG8KIAogCVJFUVVFU1RFRF9WQUw9JChncmVwIC13IC1lICIkQ0ZHIiAkVE1Q X0ZJTEUpCi0JQUNUVUFMX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICRPVVRQVVQvLmNvbmZpZykK KwlBQ1RVQUxfVkFMPSQoZ3JlcCAtdyAtZSAiJENGRyIgIiRLQ09ORklHX0NPTkZJRyIpCiAJaWYg WyAieCRSRVFVRVNURURfVkFMIiAhPSAieCRBQ1RVQUxfVkFMIiBdIDsgdGhlbgogCQllY2hvICJW YWx1ZSByZXF1ZXN0ZWQgZm9yICRDRkcgbm90IGluIGZpbmFsIC5jb25maWciCiAJCWVjaG8gIlJl cXVlc3RlZCB2YWx1ZTogICRSRVFVRVNURURfVkFMIgpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tj b25maWcvbmNvbmYuYyBiL3hlbi90b29scy9rY29uZmlnL25jb25mLmMKaW5kZXggZDQyZDUzNGE2 Ni4uMDAzMTE0Nzc5OCAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvbmNvbmYuYworKysg Yi94ZW4vdG9vbHMva2NvbmZpZy9uY29uZi5jCkBAIC01LDcgKzUsOSBAQAogICogRGVyaXZlZCBm cm9tIG1lbnVjb25maWcuCiAgKgogICovCisjaWZuZGVmIF9HTlVfU09VUkNFCiAjZGVmaW5lIF9H TlVfU09VUkNFCisjZW5kaWYKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIu aD4KIApAQCAtMjY5LDcgKzI3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWl0ZW0ga19tZW51X2l0ZW1z W01BWF9NRU5VX0lURU1TXTsKIHN0YXRpYyBpbnQgaXRlbXNfbnVtOwogc3RhdGljIGludCBnbG9i YWxfZXhpdDsKIC8qIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYnV0dG9uICovCi1jb25zdCBjaGFy ICpjdXJyZW50X2luc3RydWN0aW9ucyA9IG1lbnVfaW5zdHJ1Y3Rpb25zOworc3RhdGljIGNvbnN0 IGNoYXIgKmN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gbWVudV9pbnN0cnVjdGlvbnM7CiAKIHN0YXRp YyBjaGFyICpkaWFsb2dfaW5wdXRfcmVzdWx0Owogc3RhdGljIGludCBkaWFsb2dfaW5wdXRfcmVz dWx0X2xlbjsKQEAgLTMwMyw3ICszMDUsNyBAQCBzdHJ1Y3QgZnVuY3Rpb25fa2V5cyB7CiB9Owog CiBzdGF0aWMgY29uc3QgaW50IGZ1bmN0aW9uX2tleXNfbnVtID0gOTsKLXN0cnVjdCBmdW5jdGlv bl9rZXlzIGZ1bmN0aW9uX2tleXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fa2V5cyBm dW5jdGlvbl9rZXlzW10gPSB7CiAJewogCQkua2V5X3N0ciA9ICJGMSIsCiAJCS5mdW5jID0gIkhl bHAiLApAQCAtNTA2LDcgKzUwOCw3IEBAIHN0YXRpYyBpbnQgZ2V0X21leHRfbWF0Y2goY29uc3Qg Y2hhciAqbWF0Y2hfc3RyLCBtYXRjaF9mIGZsYWcpCiAJaW5kZXggPSAoaW5kZXggKyBpdGVtc19u dW0pICUgaXRlbXNfbnVtOwogCXdoaWxlICh0cnVlKSB7CiAJCWNoYXIgKnN0ciA9IGtfbWVudV9p dGVtc1tpbmRleF0uc3RyOwotCQlpZiAoc3RyY2FzZXN0cihzdHIsIG1hdGNoX3N0cikgIT0gMCkK KwkJaWYgKHN0cmNhc2VzdHIoc3RyLCBtYXRjaF9zdHIpICE9IE5VTEwpCiAJCQlyZXR1cm4gaW5k ZXg7CiAJCWlmIChmbGFnID09IEZJTkRfTkVYVF9NQVRDSF9VUCB8fAogCQkgICAgZmxhZyA9PSBN QVRDSF9USU5LRVJfUEFUVEVSTl9VUCkKQEAgLTEwNjUsNyArMTA2Nyw3IEBAIHN0YXRpYyBpbnQg ZG9fbWF0Y2goaW50IGtleSwgc3RydWN0IG1hdGNoX3N0YXRlICpzdGF0ZSwgaW50ICphbnMpCiAK IHN0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpCiB7Ci0Jc3RydWN0IG1lbnUgKnN1 Ym1lbnUgPSAwOworCXN0cnVjdCBtZW51ICpzdWJtZW51ID0gTlVMTDsKIAljb25zdCBjaGFyICpw cm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwogCWlu dCByZXM7CkBAIC0xMjMyLDcgKzEyMzQsNyBAQCBzdGF0aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0 IG1lbnUgKm1lbnUpCiBzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkK IHsKIAljb25zdCBjaGFyICpwcm9tcHQgPSBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSk7Ci0Jc3Ry dWN0IG1lbnUgKmNoaWxkID0gMDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQgPSBOVUxMOwogCXN0cnVj dCBzeW1ib2wgKmFjdGl2ZTsKIAlpbnQgc2VsZWN0ZWRfaW5kZXggPSAwOwogCWludCBsYXN0X3Rv cF9yb3cgPSAwOwpAQCAtMTQ1NCw3ICsxNDU2LDcgQEAgc3RhdGljIHZvaWQgY29uZl9zYXZlKHZv aWQpCiAJfQogfQogCi12b2lkIHNldHVwX3dpbmRvd3Modm9pZCkKK3N0YXRpYyB2b2lkIHNldHVw X3dpbmRvd3Modm9pZCkKIHsKIAlpbnQgbGluZXMsIGNvbHVtbnM7CiAKZGlmZiAtLWdpdCBhL3hl bi90b29scy9rY29uZmlnL25jb25mLmd1aS5jIGIveGVuL3Rvb2xzL2tjb25maWcvbmNvbmYuZ3Vp LmMKaW5kZXggODI3NWYwZTU1MS4uODg4NzRhY2ZkYSAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tj b25maWcvbmNvbmYuZ3VpLmMKKysrIGIveGVuL3Rvb2xzL2tjb25maWcvbmNvbmYuZ3VpLmMKQEAg LTYsNiArNiw3IEBACiAgKgogICovCiAjaW5jbHVkZSAibmNvbmYuaCIKKyNpbmNsdWRlICJsa2Mu aCIKIAogLyogYSBsaXN0IG9mIGFsbCB0aGUgZGlmZmVyZW50IHdpZGdldHMgd2UgdXNlICovCiBh dHRyaWJ1dGVzX3QgYXR0cmlidXRlc1tBVFRSX01BWCsxXSA9IHswfTsKQEAgLTEyOSw3ICsxMzAs NyBAQCBzdGF0aWMgdm9pZCBub19jb2xvcnNfdGhlbWUodm9pZCkKIAlta2F0dHJuKEZVTkNUSU9O X1RFWFQsIEFfUkVWRVJTRSk7CiB9CiAKLXZvaWQgc2V0X2NvbG9ycygpCit2b2lkIHNldF9jb2xv cnModm9pZCkKIHsKIAlzdGFydF9jb2xvcigpOwogCXVzZV9kZWZhdWx0X2NvbG9ycygpOwpAQCAt MTkyLDcgKzE5Myw3IEBAIGNvbnN0IGNoYXIgKmdldF9saW5lKGNvbnN0IGNoYXIgKnRleHQsIGlu dCBsaW5lX25vKQogCWludCBsaW5lcyA9IDA7CiAKIAlpZiAoIXRleHQpCi0JCXJldHVybiAwOwor CQlyZXR1cm4gTlVMTDsKIAogCWZvciAoaSA9IDA7IHRleHRbaV0gIT0gJ1wwJyAmJiBsaW5lcyA8 IGxpbmVfbm87IGkrKykKIAkJaWYgKHRleHRbaV0gPT0gJ1xuJykKQEAgLTM2NCwxNSArMzY1LDE3 IEBAIGludCBkaWFsb2dfaW5wdXRib3goV0lORE9XICptYWluX3dpbmRvdywKIAlXSU5ET1cgKnBy b21wdF93aW47CiAJV0lORE9XICpmb3JtX3dpbjsKIAlQQU5FTCAqcGFuZWw7Ci0JaW50IGksIHgs IHk7CisJaW50IGksIHgsIHksIGxpbmVzLCBjb2x1bW5zLCB3aW5fbGluZXMsIHdpbl9jb2xzOwog CWludCByZXMgPSAtMTsKIAlpbnQgY3Vyc29yX3Bvc2l0aW9uID0gc3RybGVuKGluaXQpOwogCWlu dCBjdXJzb3JfZm9ybV93aW47CiAJY2hhciAqcmVzdWx0ID0gKnJlc3VsdHA7CiAKKwlnZXRtYXh5 eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsKKwogCWlmIChzdHJsZW4oaW5pdCkrMSA+ICpyZXN1 bHRfbGVuKSB7CiAJCSpyZXN1bHRfbGVuID0gc3RybGVuKGluaXQpKzE7Ci0JCSpyZXN1bHRwID0g cmVzdWx0ID0gcmVhbGxvYyhyZXN1bHQsICpyZXN1bHRfbGVuKTsKKwkJKnJlc3VsdHAgPSByZXN1 bHQgPSB4cmVhbGxvYyhyZXN1bHQsICpyZXN1bHRfbGVuKTsKIAl9CiAKIAkvKiBmaW5kIHRoZSB3 aWRlc3QgbGluZSBvZiBtc2c6ICovCkBAIC0zODYsMTQgKzM4OSwxOSBAQCBpbnQgZGlhbG9nX2lu cHV0Ym94KFdJTkRPVyAqbWFpbl93aW5kb3csCiAJaWYgKHRpdGxlKQogCQlwcm9tcHRfd2lkdGgg PSBtYXgocHJvbXB0X3dpZHRoLCBzdHJsZW4odGl0bGUpKTsKIAorCXdpbl9saW5lcyA9IG1pbihw cm9tcHRfbGluZXMrNiwgbGluZXMtMik7CisJd2luX2NvbHMgPSBtaW4ocHJvbXB0X3dpZHRoKzcs IGNvbHVtbnMtMik7CisJcHJvbXB0X2xpbmVzID0gbWF4KHdpbl9saW5lcy02LCAwKTsKKwlwcm9t cHRfd2lkdGggPSBtYXgod2luX2NvbHMtNywgMCk7CisKIAkvKiBwbGFjZSBkaWFsb2cgaW4gbWlk ZGxlIG9mIHNjcmVlbiAqLwotCXkgPSAoZ2V0bWF4eShzdGRzY3IpLShwcm9tcHRfbGluZXMrNCkp LzI7Ci0JeCA9IChnZXRtYXh4KHN0ZHNjciktKHByb21wdF93aWR0aCs0KSkvMjsKKwl5ID0gKGxp bmVzLXdpbl9saW5lcykvMjsKKwl4ID0gKGNvbHVtbnMtd2luX2NvbHMpLzI7CiAKIAlzdHJuY3B5 KHJlc3VsdCwgaW5pdCwgKnJlc3VsdF9sZW4pOwogCiAJLyogY3JlYXRlIHRoZSB3aW5kb3dzICov Ci0Jd2luID0gbmV3d2luKHByb21wdF9saW5lcys2LCBwcm9tcHRfd2lkdGgrNywgeSwgeCk7CisJ d2luID0gbmV3d2luKHdpbl9saW5lcywgd2luX2NvbHMsIHksIHgpOwogCXByb21wdF93aW4gPSBk ZXJ3aW4od2luLCBwcm9tcHRfbGluZXMrMSwgcHJvbXB0X3dpZHRoLCAyLCAyKTsKIAlmb3JtX3dp biA9IGRlcndpbih3aW4sIDEsIHByb21wdF93aWR0aCwgcHJvbXB0X2xpbmVzKzMsIDIpOwogCWtl eXBhZChmb3JtX3dpbiwgVFJVRSk7CmRpZmYgLS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy9uY29u Zi5oIGIveGVuL3Rvb2xzL2tjb25maWcvbmNvbmYuaAppbmRleCAwZDUyNjE3MDVlLi45ZjZmMjFk M2IwIDEwMDY0NAotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9uY29uZi5oCisrKyBiL3hlbi90b29s cy9rY29uZmlnL25jb25mLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4K ICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KLSNpbmNsdWRlIDxjdXJz ZXMuaD4KKyNpbmNsdWRlIDxuY3Vyc2VzLmg+CiAjaW5jbHVkZSA8bWVudS5oPgogI2luY2x1ZGUg PHBhbmVsLmg+CiAjaW5jbHVkZSA8Zm9ybS5oPgpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUg PHRpbWUuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogCi0jaW5jbHVkZSAibmN1cnNlcy5oIgot CiAjZGVmaW5lIG1heChhLCBiKSAoe1wKIAkJdHlwZW9mKGEpIF9hID0gYTtcCiAJCXR5cGVvZihi KSBfYiA9IGI7XApkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvcWNvbmYuY2MgYi94ZW4v dG9vbHMva2NvbmZpZy9xY29uZi5jYwppbmRleCBjM2JiN2ZlOGRmLi5hZTZjNzI1NDY0IDEwMDY0 NAotLS0gYS94ZW4vdG9vbHMva2NvbmZpZy9xY29uZi5jYworKysgYi94ZW4vdG9vbHMva2NvbmZp Zy9xY29uZi5jYwpAQCAtMSwzMiArMSwxNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMiBS b21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx NSBCb3JpcyBCYXJidWxvdnNraSA8YmJhcmJ1bG92c2tpQGdtYWlsLmNvbT4KICAqIFJlbGVhc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgogICovCiAKICNpbmNsdWRlIDxx Z2xvYmFsLmg+CiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDAwMDAKLSNpbmNsdWRlIDxzdGRkZWYu aD4KLSNpbmNsdWRlIDxxbWFpbndpbmRvdy5oPgotI2luY2x1ZGUgPHF2Ym94Lmg+Ci0jaW5jbHVk ZSA8cXZhbHVlbGlzdC5oPgorI2luY2x1ZGUgPFFNYWluV2luZG93PgorI2luY2x1ZGUgPFFMaXN0 PgogI2luY2x1ZGUgPHF0ZXh0YnJvd3Nlci5oPgotI2luY2x1ZGUgPHFhY3Rpb24uaD4KLSNpbmNs dWRlIDxxaGVhZGVyLmg+Ci0jaW5jbHVkZSA8cWZpbGVkaWFsb2cuaD4KLSNpbmNsdWRlIDxxZHJh Z29iamVjdC5oPgotI2luY2x1ZGUgPHFwb3B1cG1lbnUuaD4KLSNlbHNlCi0jaW5jbHVkZSA8cTNt YWlud2luZG93Lmg+Ci0jaW5jbHVkZSA8cTN2Ym94Lmg+Ci0jaW5jbHVkZSA8cTN2YWx1ZWxpc3Qu aD4KLSNpbmNsdWRlIDxxM3RleHRicm93c2VyLmg+Ci0jaW5jbHVkZSA8cTNhY3Rpb24uaD4KLSNp bmNsdWRlIDxxM2hlYWRlci5oPgotI2luY2x1ZGUgPHEzZmlsZWRpYWxvZy5oPgotI2luY2x1ZGUg PHEzZHJhZ29iamVjdC5oPgotI2luY2x1ZGUgPHEzcG9wdXBtZW51Lmg+Ci0jZW5kaWYKKyNpbmNs dWRlIDxRQWN0aW9uPgorI2luY2x1ZGUgPFFGaWxlRGlhbG9nPgorI2luY2x1ZGUgPFFNZW51Pgog CiAjaW5jbHVkZSA8cWFwcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8cWRlc2t0b3B3aWRnZXQuaD4K QEAgLTU3LDcgKzQyLDcgQEAKIHN0YXRpYyBRQXBwbGljYXRpb24gKmNvbmZpZ0FwcDsKIHN0YXRp YyBDb25maWdTZXR0aW5ncyAqY29uZmlnU2V0dGluZ3M7CiAKLVEzQWN0aW9uICpDb25maWdNYWlu V2luZG93OjpzYXZlQWN0aW9uOworUUFjdGlvbiAqQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUFjdGlv bjsKIAogc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNoYXIqIHN0cikKIHsK QEAgLTY2LDcgKzUxLDcgQEAgc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNo YXIqIHN0cikKIAogc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IFFTdHJpbmcm IHN0cikKIHsKLQlyZXR1cm4gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChnZXR0ZXh0KHN0ci5sYXRp bjEoKSkpOworCXJldHVybiBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGdldHRleHQoc3RyLnRvTGF0 aW4xKCkpKTsKIH0KIAogQ29uZmlnU2V0dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkKQEAgLTc3LDE0 ICs2MiwyMiBAQCBDb25maWdTZXR0aW5nczo6Q29uZmlnU2V0dGluZ3MoKQogLyoqCiAgKiBSZWFk cyBhIGxpc3Qgb2YgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3Mu CiAgKi8KLVEzVmFsdWVMaXN0PGludD4gQ29uZmlnU2V0dGluZ3M6OnJlYWRTaXplcyhjb25zdCBR U3RyaW5nJiBrZXksIGJvb2wgKm9rKQorUUxpc3Q8aW50PiBDb25maWdTZXR0aW5nczo6cmVhZFNp emVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2spCiB7Ci0JUTNWYWx1ZUxpc3Q8aW50PiBy ZXN1bHQ7Ci0JUVN0cmluZ0xpc3QgZW50cnlMaXN0ID0gcmVhZExpc3RFbnRyeShrZXksIG9rKTsK LQlRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQ7CisJUUxpc3Q8aW50PiByZXN1bHQ7CisKKwlpZiAo Y29udGFpbnMoa2V5KSkKKwl7CisJCVFTdHJpbmdMaXN0IGVudHJ5TGlzdCA9IHZhbHVlKGtleSku dG9TdHJpbmdMaXN0KCk7CisJCVFTdHJpbmdMaXN0OjpJdGVyYXRvciBpdDsKIAotCWZvciAoaXQg PSBlbnRyeUxpc3QuYmVnaW4oKTsgaXQgIT0gZW50cnlMaXN0LmVuZCgpOyArK2l0KQotCQlyZXN1 bHQucHVzaF9iYWNrKCgqaXQpLnRvSW50KCkpOworCQlmb3IgKGl0ID0gZW50cnlMaXN0LmJlZ2lu KCk7IGl0ICE9IGVudHJ5TGlzdC5lbmQoKTsgKytpdCkKKwkJCXJlc3VsdC5wdXNoX2JhY2soKCpp dCkudG9JbnQoKSk7CisKKwkJKm9rID0gdHJ1ZTsKKwl9CisJZWxzZQorCQkqb2sgPSBmYWxzZTsK IAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC05MiwxNCArODUsMTYgQEAgUTNWYWx1ZUxpc3Q8aW50 PiBDb25maWdTZXR0aW5nczo6cmVhZFNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2sp CiAvKioKICAqIFdyaXRlcyBhIGxpc3Qgb2YgaW50ZWdlciB2YWx1ZXMgdG8gdGhlIGFwcGxpY2F0 aW9uIHNldHRpbmdzLgogICovCi1ib29sIENvbmZpZ1NldHRpbmdzOjp3cml0ZVNpemVzKGNvbnN0 IFFTdHJpbmcmIGtleSwgY29uc3QgUTNWYWx1ZUxpc3Q8aW50PiYgdmFsdWUpCitib29sIENvbmZp Z1NldHRpbmdzOjp3cml0ZVNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgY29uc3QgUUxpc3Q8aW50 PiYgdmFsdWUpCiB7CiAJUVN0cmluZ0xpc3Qgc3RyaW5nTGlzdDsKLQlRM1ZhbHVlTGlzdDxpbnQ+ OjpDb25zdEl0ZXJhdG9yIGl0OworCVFMaXN0PGludD46OkNvbnN0SXRlcmF0b3IgaXQ7CiAKIAlm b3IgKGl0ID0gdmFsdWUuYmVnaW4oKTsgaXQgIT0gdmFsdWUuZW5kKCk7ICsraXQpCiAJCXN0cmlu Z0xpc3QucHVzaF9iYWNrKFFTdHJpbmc6Om51bWJlcigqaXQpKTsKLQlyZXR1cm4gd3JpdGVFbnRy eShrZXksIHN0cmluZ0xpc3QpOworCXNldFZhbHVlKGtleSwgc3RyaW5nTGlzdCk7CisKKwlyZXR1 cm4gdHJ1ZTsKIH0KIAogCkBAIC0xMDksOSArMTA0LDYgQEAgYm9vbCBDb25maWdTZXR0aW5nczo6 d3JpdGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGNvbnN0IFEzVmFsdWVMaXN0PGludD4mIHZh bHUKICAqLwogdm9pZCBDb25maWdJdGVtOjpva1JlbmFtZShpbnQgY29sKQogewotCVBhcmVudDo6 b2tSZW5hbWUoY29sKTsKLQlzeW1fc2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0sIHRleHQoZGF0 YUNvbElkeCkubGF0aW4xKCkpOwotCWxpc3RWaWV3KCktPnVwZGF0ZUxpc3QodGhpcyk7CiB9CiAK IC8qCkBAIC0xNDksMTEgKzE0MSwxMSBAQCB2b2lkIENvbmZpZ0l0ZW06OnVwZGF0ZU1lbnUodm9p ZCkKIAkJfSBlbHNlIHsKIAkJCWlmIChzeW0pCiAJCQkJYnJlYWs7Ci0JCQlzZXRQaXhtYXAocHJv bXB0Q29sSWR4LCAwKTsKKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkpOwogCQl9 CiAJCWdvdG8gc2V0X3Byb21wdDsKIAljYXNlIFBfQ09NTUVOVDoKLQkJc2V0UGl4bWFwKHByb21w dENvbElkeCwgMCk7CisJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkpOwogCQlnb3Rv IHNldF9wcm9tcHQ7CiAJZGVmYXVsdDoKIAkJOwpAQCAtMTcwLDcgKzE2Miw3IEBAIHZvaWQgQ29u ZmlnSXRlbTo6dXBkYXRlTWVudSh2b2lkKQogCQljaGFyIGNoOwogCiAJCWlmICghc3ltX2lzX2No YW5nYWJsZShzeW0pICYmIGxpc3QtPm9wdE1vZGUgPT0gbm9ybWFsT3B0KSB7Ci0JCQlzZXRQaXht YXAocHJvbXB0Q29sSWR4LCAwKTsKKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkp OwogCQkJc2V0VGV4dChub0NvbElkeCwgUVN0cmluZzo6bnVsbCk7CiAJCQlzZXRUZXh0KG1vZENv bElkeCwgUVN0cmluZzo6bnVsbCk7CiAJCQlzZXRUZXh0KHllc0NvbElkeCwgUVN0cmluZzo6bnVs bCk7CkBAIC0yMTYsOSArMjA4LDYgQEAgdm9pZCBDb25maWdJdGVtOjp1cGRhdGVNZW51KHZvaWQp CiAKIAkJZGF0YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CiAKLQkJaW50IGkgPSBsaXN0 LT5tYXBJZHgoZGF0YUNvbElkeCk7Ci0JCWlmIChpID49IDApCi0JCQlzZXRSZW5hbWVFbmFibGVk KGksIFRSVUUpOwogCQlzZXRUZXh0KGRhdGFDb2xJZHgsIGRhdGEpOwogCQlpZiAodHlwZSA9PSBT X1NUUklORykKIAkJCXByb21wdCA9IFFTdHJpbmcoIiUxOiAlMiIpLmFyZyhwcm9tcHQpLmFyZyhk YXRhKTsKQEAgLTI1MCwxOCArMjM5LDYgQEAgdm9pZCBDb25maWdJdGVtOjp0ZXN0VXBkYXRlTWVu dShib29sIHYpCiAJCXVwZGF0ZU1lbnUoKTsKIH0KIAotdm9pZCBDb25maWdJdGVtOjpwYWludENl bGwoUVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvckdyb3VwJiBjZywgaW50IGNvbHVtbiwgaW50IHdp ZHRoLCBpbnQgYWxpZ24pCi17Ci0JQ29uZmlnTGlzdCogbGlzdCA9IGxpc3RWaWV3KCk7Ci0KLQlp ZiAodmlzaWJsZSkgewotCQlpZiAoaXNTZWxlY3RlZCgpICYmICFsaXN0LT5oYXNGb2N1cygpICYm IGxpc3QtPm1vZGUgPT0gbWVudU1vZGUpCi0JCQlQYXJlbnQ6OnBhaW50Q2VsbChwLCBsaXN0LT5p bmFjdGl2ZWRDb2xvckdyb3VwLCBjb2x1bW4sIHdpZHRoLCBhbGlnbik7Ci0JCWVsc2UKLQkJCVBh cmVudDo6cGFpbnRDZWxsKHAsIGNnLCBjb2x1bW4sIHdpZHRoLCBhbGlnbik7Ci0JfSBlbHNlCi0J CVBhcmVudDo6cGFpbnRDZWxsKHAsIGxpc3QtPmRpc2FibGVkQ29sb3JHcm91cCwgY29sdW1uLCB3 aWR0aCwgYWxpZ24pOwotfQogCiAvKgogICogY29uc3RydWN0IGEgbWVudSBlbnRyeQpAQCAtMjc0 LDcgKzI1MSw3IEBAIHZvaWQgQ29uZmlnSXRlbTo6aW5pdCh2b2lkKQogCQltZW51LT5kYXRhID0g dGhpczsKIAogCQlpZiAobGlzdC0+bW9kZSAhPSBmdWxsTW9kZSkKLQkJCXNldE9wZW4oVFJVRSk7 CisJCQlzZXRFeHBhbmRlZCh0cnVlKTsKIAkJc3ltX2NhbGNfdmFsdWUobWVudS0+c3ltKTsKIAl9 CiAJdXBkYXRlTWVudSgpOwpAQCAtMjk5LDcgKzI3Niw3IEBAIENvbmZpZ0l0ZW06On5Db25maWdJ dGVtKHZvaWQpCiBDb25maWdMaW5lRWRpdDo6Q29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFy ZW50KQogCTogUGFyZW50KHBhcmVudCkKIHsKLQljb25uZWN0KHRoaXMsIFNJR05BTChsb3N0Rm9j dXMoKSksIFNMT1QoaGlkZSgpKSk7CisJY29ubmVjdCh0aGlzLCBTSUdOQUwoZWRpdGluZ0Zpbmlz aGVkKCkpLCBTTE9UKGhpZGUoKSkpOwogfQogCiB2b2lkIENvbmZpZ0xpbmVFZGl0OjpzaG93KENv bmZpZ0l0ZW0qIGkpCkBAIC0zMjAsNyArMjk3LDcgQEAgdm9pZCBDb25maWdMaW5lRWRpdDo6a2V5 UHJlc3NFdmVudChRS2V5RXZlbnQqIGUpCiAJCWJyZWFrOwogCWNhc2UgUXQ6OktleV9SZXR1cm46 CiAJY2FzZSBRdDo6S2V5X0VudGVyOgotCQlzeW1fc2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51 LT5zeW0sIHRleHQoKS5sYXRpbjEoKSk7CisJCXN5bV9zZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1l bnUtPnN5bSwgdGV4dCgpLnRvTGF0aW4xKCkpOwogCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVt KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMzMywzOSArMzEwLDM5IEBAIHZvaWQgQ29uZmln TGluZUVkaXQ6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBlKQogfQogCiBDb25maWdMaXN0OjpD b25maWdMaXN0KENvbmZpZ1ZpZXcqIHAsIGNvbnN0IGNoYXIgKm5hbWUpCi0JOiBQYXJlbnQocCwg bmFtZSksCisJOiBQYXJlbnQocCksCiAJICB1cGRhdGVBbGwoZmFsc2UpLAogCSAgc3ltYm9sWWVz UGl4KHhwbV9zeW1ib2xfeWVzKSwgc3ltYm9sTW9kUGl4KHhwbV9zeW1ib2xfbW9kKSwgc3ltYm9s Tm9QaXgoeHBtX3N5bWJvbF9ubyksCiAJICBjaG9pY2VZZXNQaXgoeHBtX2Nob2ljZV95ZXMpLCBj aG9pY2VOb1BpeCh4cG1fY2hvaWNlX25vKSwKIAkgIG1lbnVQaXgoeHBtX21lbnUpLCBtZW51SW52 UGl4KHhwbV9tZW51X2ludiksIG1lbnVCYWNrUGl4KHhwbV9tZW51YmFjayksIHZvaWRQaXgoeHBt X3ZvaWQpLAotCSAgc2hvd05hbWUoZmFsc2UpLCBzaG93UmFuZ2UoZmFsc2UpLCBzaG93RGF0YShm YWxzZSksIG9wdE1vZGUobm9ybWFsT3B0KSwKKwkgIHNob3dOYW1lKGZhbHNlKSwgc2hvd1Jhbmdl KGZhbHNlKSwgc2hvd0RhdGEoZmFsc2UpLCBtb2RlKHNpbmdsZU1vZGUpLCBvcHRNb2RlKG5vcm1h bE9wdCksCiAJICByb290RW50cnkoMCksIGhlYWRlclBvcHVwKDApCiB7CiAJaW50IGk7CiAKLQlz ZXRTb3J0aW5nKC0xKTsKLQlzZXRSb290SXNEZWNvcmF0ZWQoVFJVRSk7Ci0JZGlzYWJsZWRDb2xv ckdyb3VwID0gcGFsZXR0ZSgpLmFjdGl2ZSgpOwotCWRpc2FibGVkQ29sb3JHcm91cC5zZXRDb2xv cihRQ29sb3JHcm91cDo6VGV4dCwgcGFsZXR0ZSgpLmRpc2FibGVkKCkudGV4dCgpKTsKLQlpbmFj dGl2ZWRDb2xvckdyb3VwID0gcGFsZXR0ZSgpLmFjdGl2ZSgpOwotCWluYWN0aXZlZENvbG9yR3Jv dXAuc2V0Q29sb3IoUUNvbG9yR3JvdXA6OkhpZ2hsaWdodCwgcGFsZXR0ZSgpLmRpc2FibGVkKCku aGlnaGxpZ2h0KCkpOworCXNldE9iamVjdE5hbWUobmFtZSk7CisJc2V0U29ydGluZ0VuYWJsZWQo ZmFsc2UpOworCXNldFJvb3RJc0RlY29yYXRlZCh0cnVlKTsKKworCXNldFZlcnRpY2FsU2Nyb2xs TW9kZShTY3JvbGxQZXJQaXhlbCk7CisJc2V0SG9yaXpvbnRhbFNjcm9sbE1vZGUoU2Nyb2xsUGVy UGl4ZWwpOwogCi0JY29ubmVjdCh0aGlzLCBTSUdOQUwoc2VsZWN0aW9uQ2hhbmdlZCh2b2lkKSks CisJc2V0SGVhZGVyTGFiZWxzKFFTdHJpbmdMaXN0KCkgPDwgXygiT3B0aW9uIikgPDwgXygiTmFt ZSIpIDw8ICJOIiA8PCAiTSIgPDwgIlkiIDw8IF8oIlZhbHVlIikpOworCisJY29ubmVjdCh0aGlz LCBTSUdOQUwoaXRlbVNlbGVjdGlvbkNoYW5nZWQodm9pZCkpLAogCQlTTE9UKHVwZGF0ZVNlbGVj dGlvbih2b2lkKSkpOwogCiAJaWYgKG5hbWUpIHsKIAkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3Jv dXAobmFtZSk7Ci0JCXNob3dOYW1lID0gY29uZmlnU2V0dGluZ3MtPnJlYWRCb29sRW50cnkoIi9z aG93TmFtZSIsIGZhbHNlKTsKLQkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGluZ3MtPnJlYWRCb29s RW50cnkoIi9zaG93UmFuZ2UiLCBmYWxzZSk7Ci0JCXNob3dEYXRhID0gY29uZmlnU2V0dGluZ3Mt PnJlYWRCb29sRW50cnkoIi9zaG93RGF0YSIsIGZhbHNlKTsKLQkJb3B0TW9kZSA9IChlbnVtIG9w dGlvbk1vZGUpY29uZmlnU2V0dGluZ3MtPnJlYWROdW1FbnRyeSgiL29wdGlvbk1vZGUiLCBmYWxz ZSk7CisJCXNob3dOYW1lID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd05hbWUiLCBmYWxz ZSkudG9Cb29sKCk7CisJCXNob3dSYW5nZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dS YW5nZSIsIGZhbHNlKS50b0Jvb2woKTsKKwkJc2hvd0RhdGEgPSBjb25maWdTZXR0aW5ncy0+dmFs dWUoIi9zaG93RGF0YSIsIGZhbHNlKS50b0Jvb2woKTsKKwkJb3B0TW9kZSA9IChlbnVtIG9wdGlv bk1vZGUpY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvb3B0aW9uTW9kZSIsIDApLnRvSW50KCk7CiAJ CWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOwogCQljb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFM KGFib3V0VG9RdWl0KCkpLCBTTE9UKHNhdmVTZXR0aW5ncygpKSk7CiAJfQogCi0JZm9yIChpID0g MDsgaSA8IGNvbE5yOyBpKyspCi0JCWNvbE1hcFtpXSA9IGNvbFJldk1hcFtpXSA9IC0xOwotCWFk ZENvbHVtbihwcm9tcHRDb2xJZHgsIF8oIk9wdGlvbiIpKTsKKwlhZGRDb2x1bW4ocHJvbXB0Q29s SWR4KTsKIAogCXJlaW5pdCgpOwogfQpAQCAtMzkwLDI2ICszNjcsMjYgQEAgdm9pZCBDb25maWdM aXN0OjpyZWluaXQodm9pZCkKIAlyZW1vdmVDb2x1bW4obmFtZUNvbElkeCk7CiAKIAlpZiAoc2hv d05hbWUpCi0JCWFkZENvbHVtbihuYW1lQ29sSWR4LCBfKCJOYW1lIikpOworCQlhZGRDb2x1bW4o bmFtZUNvbElkeCk7CiAJaWYgKHNob3dSYW5nZSkgewotCQlhZGRDb2x1bW4obm9Db2xJZHgsICJO Iik7Ci0JCWFkZENvbHVtbihtb2RDb2xJZHgsICJNIik7Ci0JCWFkZENvbHVtbih5ZXNDb2xJZHgs ICJZIik7CisJCWFkZENvbHVtbihub0NvbElkeCk7CisJCWFkZENvbHVtbihtb2RDb2xJZHgpOwor CQlhZGRDb2x1bW4oeWVzQ29sSWR4KTsKIAl9CiAJaWYgKHNob3dEYXRhKQotCQlhZGRDb2x1bW4o ZGF0YUNvbElkeCwgXygiVmFsdWUiKSk7CisJCWFkZENvbHVtbihkYXRhQ29sSWR4KTsKIAogCXVw ZGF0ZUxpc3RBbGwoKTsKIH0KIAogdm9pZCBDb25maWdMaXN0OjpzYXZlU2V0dGluZ3Modm9pZCkK IHsKLQlpZiAobmFtZSgpKSB7Ci0JCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUoKSk7 Ci0JCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvc2hvd05hbWUiLCBzaG93TmFtZSk7Ci0J CWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvc2hvd1JhbmdlIiwgc2hvd1JhbmdlKTsKLQkJ Y29uZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi9zaG93RGF0YSIsIHNob3dEYXRhKTsKLQkJY29u ZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi9vcHRpb25Nb2RlIiwgKGludClvcHRNb2RlKTsKKwlp ZiAoIW9iamVjdE5hbWUoKS5pc0VtcHR5KCkpIHsKKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3Jv dXAob2JqZWN0TmFtZSgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd05hbWUi LCBzaG93TmFtZSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dSYW5nZSIsIHNo b3dSYW5nZSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEYXRhIiwgc2hvd0Rh dGEpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9vcHRpb25Nb2RlIiwgKGludClvcHRN b2RlKTsKIAkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CiAJfQogfQpAQCAtNDMxLDcgKzQw OCwxMCBAQCB2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZVNlbGVjdGlvbih2b2lkKQogCXN0cnVjdCBt ZW51ICptZW51OwogCWVudW0gcHJvcF90eXBlIHR5cGU7CiAKLQlDb25maWdJdGVtKiBpdGVtID0g KENvbmZpZ0l0ZW0qKXNlbGVjdGVkSXRlbSgpOworCWlmIChzZWxlY3RlZEl0ZW1zKCkuY291bnQo KSA9PSAwKQorCQlyZXR1cm47CisKKwlDb25maWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0qKXNl bGVjdGVkSXRlbXMoKS5maXJzdCgpOwogCWlmICghaXRlbSkKIAkJcmV0dXJuOwogCkBAIC00NTEs MjEgKzQzMSwyMyBAQCB2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRl bSkKIAlpZiAoIXJvb3RFbnRyeSkgewogCQlpZiAobW9kZSAhPSBsaXN0TW9kZSkKIAkJCWdvdG8g dXBkYXRlOwotCQlRM0xpc3RWaWV3SXRlbUl0ZXJhdG9yIGl0KHRoaXMpOworCQlRVHJlZVdpZGdl dEl0ZW1JdGVyYXRvciBpdCh0aGlzKTsKIAkJQ29uZmlnSXRlbSogaXRlbTsKIAotCQlmb3IgKDsg aXQuY3VycmVudCgpOyArK2l0KSB7Ci0JCQlpdGVtID0gKENvbmZpZ0l0ZW0qKWl0LmN1cnJlbnQo KTsKKwkJd2hpbGUgKCppdCkgeworCQkJaXRlbSA9IChDb25maWdJdGVtKikoKml0KTsKIAkJCWlm ICghaXRlbS0+bWVudSkKIAkJCQljb250aW51ZTsKIAkJCWl0ZW0tPnRlc3RVcGRhdGVNZW51KG1l bnVfaXNfdmlzaWJsZShpdGVtLT5tZW51KSk7CisKKwkJCSsraXQ7CiAJCX0KIAkJcmV0dXJuOwog CX0KIAogCWlmIChyb290RW50cnkgIT0gJnJvb3RtZW51ICYmIChtb2RlID09IHNpbmdsZU1vZGUg fHwKIAkgICAgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiByb290RW50cnktPnBhcmVudCAhPSAmcm9v dG1lbnUpKSkgewotCQlpdGVtID0gZmlyc3RDaGlsZCgpOworCQlpdGVtID0gKENvbmZpZ0l0ZW0g Kil0b3BMZXZlbEl0ZW0oMCk7CiAJCWlmICghaXRlbSkKIAkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRl bSh0aGlzLCAwLCB0cnVlKTsKIAkJbGFzdCA9IGl0ZW07CkBAIC00NzksMTIgKzQ2MSwxNCBAQCB2 b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRlbSkKIAkJCWl0ZW0tPnRl c3RVcGRhdGVNZW51KHRydWUpOwogCiAJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIHJvb3RFbnRyeSk7 Ci0JCXRyaWdnZXJVcGRhdGUoKTsKKwkJdXBkYXRlKCk7CisJCXJlc2l6ZUNvbHVtblRvQ29udGVu dHMoMCk7CiAJCXJldHVybjsKIAl9CiB1cGRhdGU6CiAJdXBkYXRlTWVudUxpc3QodGhpcywgcm9v dEVudHJ5KTsKLQl0cmlnZ2VyVXBkYXRlKCk7CisJdXBkYXRlKCk7CisJcmVzaXplQ29sdW1uVG9D b250ZW50cygwKTsKIH0KIAogdm9pZCBDb25maWdMaXN0OjpzZXRWYWx1ZShDb25maWdJdGVtKiBp dGVtLCB0cmlzdGF0ZSB2YWwpCkBAIC01MDYsNyArNDkwLDcgQEAgdm9pZCBDb25maWdMaXN0Ojpz ZXRWYWx1ZShDb25maWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwpCiAJCWlmICghc3ltX3NldF90 cmlzdGF0ZV92YWx1ZShzeW0sIHZhbCkpCiAJCQlyZXR1cm47CiAJCWlmIChvbGR2YWwgPT0gbm8g JiYgaXRlbS0+bWVudS0+bGlzdCkKLQkJCWl0ZW0tPnNldE9wZW4oVFJVRSk7CisJCQlpdGVtLT5z ZXRFeHBhbmRlZCh0cnVlKTsKIAkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CiAJCWJyZWFr OwogCX0KQEAgLTUyNCw3ICs1MDgsNyBAQCB2b2lkIENvbmZpZ0xpc3Q6OmNoYW5nZVZhbHVlKENv bmZpZ0l0ZW0qIGl0ZW0pCiAJc3ltID0gbWVudS0+c3ltOwogCWlmICghc3ltKSB7CiAJCWlmIChp dGVtLT5tZW51LT5saXN0KQotCQkJaXRlbS0+c2V0T3BlbighaXRlbS0+aXNPcGVuKCkpOworCQkJ aXRlbS0+c2V0RXhwYW5kZWQoIWl0ZW0tPmlzRXhwYW5kZWQoKSk7CiAJCXJldHVybjsKIAl9CiAK QEAgLTUzNiw5ICs1MjAsOSBAQCB2b2lkIENvbmZpZ0xpc3Q6OmNoYW5nZVZhbHVlKENvbmZpZ0l0 ZW0qIGl0ZW0pCiAJCW5ld2V4cHIgPSBzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CiAJ CWlmIChpdGVtLT5tZW51LT5saXN0KSB7CiAJCQlpZiAob2xkZXhwciA9PSBuZXdleHByKQotCQkJ CWl0ZW0tPnNldE9wZW4oIWl0ZW0tPmlzT3BlbigpKTsKKwkJCQlpdGVtLT5zZXRFeHBhbmRlZCgh aXRlbS0+aXNFeHBhbmRlZCgpKTsKIAkJCWVsc2UgaWYgKG9sZGV4cHIgPT0gbm8pCi0JCQkJaXRl bS0+c2V0T3BlbihUUlVFKTsKKwkJCQlpdGVtLT5zZXRFeHBhbmRlZCh0cnVlKTsKIAkJfQogCQlp ZiAob2xkZXhwciAhPSBuZXdleHByKQogCQkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CkBA IC01NDYsMTAgKzUzMCw3IEBAIHZvaWQgQ29uZmlnTGlzdDo6Y2hhbmdlVmFsdWUoQ29uZmlnSXRl bSogaXRlbSkKIAljYXNlIFNfSU5UOgogCWNhc2UgU19IRVg6CiAJY2FzZSBTX1NUUklORzoKLQkJ aWYgKGNvbE1hcFtkYXRhQ29sSWR4XSA+PSAwKQotCQkJaXRlbS0+c3RhcnRSZW5hbWUoY29sTWFw W2RhdGFDb2xJZHhdKTsKLQkJZWxzZQotCQkJcGFyZW50KCktPmxpbmVFZGl0LT5zaG93KGl0ZW0p OworCQlwYXJlbnQoKS0+bGluZUVkaXQtPnNob3coaXRlbSk7CiAJCWJyZWFrOwogCX0KIH0KQEAg LTU2Niw4ICs1NDcsMTAgQEAgdm9pZCBDb25maWdMaXN0OjpzZXRSb290TWVudShzdHJ1Y3QgbWVu dSAqbWVudSkKIAl1cGRhdGVNZW51TGlzdCh0aGlzLCAwKTsKIAlyb290RW50cnkgPSBtZW51Owog CXVwZGF0ZUxpc3RBbGwoKTsKLQlzZXRTZWxlY3RlZChjdXJyZW50SXRlbSgpLCBoYXNGb2N1cygp KTsKLQllbnN1cmVJdGVtVmlzaWJsZShjdXJyZW50SXRlbSgpKTsKKwlpZiAoY3VycmVudEl0ZW0o KSkgeworCQljdXJyZW50SXRlbSgpLT5zZXRTZWxlY3RlZChoYXNGb2N1cygpKTsKKwkJc2Nyb2xs VG9JdGVtKGN1cnJlbnRJdGVtKCkpOworCX0KIH0KIAogdm9pZCBDb25maWdMaXN0OjpzZXRQYXJl bnRNZW51KHZvaWQpCkBAIC01ODAsMTMgKzU2MywxNiBAQCB2b2lkIENvbmZpZ0xpc3Q6OnNldFBh cmVudE1lbnUodm9pZCkKIAkJcmV0dXJuOwogCXNldFJvb3RNZW51KG1lbnVfZ2V0X3BhcmVudF9t ZW51KHJvb3RFbnRyeS0+cGFyZW50KSk7CiAKLQlRM0xpc3RWaWV3SXRlbUl0ZXJhdG9yIGl0KHRo aXMpOwotCWZvciAoOyAoaXRlbSA9IChDb25maWdJdGVtKilpdC5jdXJyZW50KCkpOyBpdCsrKSB7 CisJUVRyZWVXaWRnZXRJdGVtSXRlcmF0b3IgaXQodGhpcyk7CisJd2hpbGUgKCppdCkgeworCQlp dGVtID0gKENvbmZpZ0l0ZW0gKikoKml0KTsKIAkJaWYgKGl0ZW0tPm1lbnUgPT0gb2xkcm9vdCkg ewogCQkJc2V0Q3VycmVudEl0ZW0oaXRlbSk7Ci0JCQllbnN1cmVJdGVtVmlzaWJsZShpdGVtKTsK KwkJCXNjcm9sbFRvSXRlbShpdGVtKTsKIAkJCWJyZWFrOwogCQl9CisKKwkJKytpdDsKIAl9CiB9 CiAKQEAgLTU5Nyw4ICs1ODMsNyBAQCB2b2lkIENvbmZpZ0xpc3Q6OnNldFBhcmVudE1lbnUodm9p ZCkKICAqIHBhcmVudDogZWl0aGVyIHRoZSBtZW51IGxpc3Qgd2lkZ2V0IG9yIGEgbWVudSBlbnRy eSB3aWRnZXQKICAqIG1lbnU6IGVudHJ5IHRvIGJlIHVwZGF0ZWQKICAqLwotdGVtcGxhdGUgPGNs YXNzIFA+Ci12b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1lbnVMaXN0KFAqIHBhcmVudCwgc3RydWN0 IG1lbnUqIG1lbnUpCit2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1lbnVMaXN0KENvbmZpZ0l0ZW0g KnBhcmVudCwgc3RydWN0IG1lbnUqIG1lbnUpCiB7CiAJc3RydWN0IG1lbnUqIGNoaWxkOwogCUNv bmZpZ0l0ZW0qIGl0ZW07CkBAIC02MDcsOCArNTkyLDExIEBAIHZvaWQgQ29uZmlnTGlzdDo6dXBk YXRlTWVudUxpc3QoUCogcGFyZW50LCBzdHJ1Y3QgbWVudSogbWVudSkKIAllbnVtIHByb3BfdHlw ZSB0eXBlOwogCiAJaWYgKCFtZW51KSB7Ci0JCXdoaWxlICgoaXRlbSA9IHBhcmVudC0+Zmlyc3RD aGlsZCgpKSkKLQkJCWRlbGV0ZSBpdGVtOworCQl3aGlsZSAocGFyZW50LT5jaGlsZENvdW50KCkg PiAwKQorCQl7CisJCQlkZWxldGUgcGFyZW50LT50YWtlQ2hpbGQoMCk7CisJCX0KKwogCQlyZXR1 cm47CiAJfQogCkBAIC02NjAsOSArNjQ4LDc0IEBAIHZvaWQgQ29uZmlnTGlzdDo6dXBkYXRlTWVu dUxpc3QoUCogcGFyZW50LCBzdHJ1Y3QgbWVudSogbWVudSkKIAl9CiB9CiAKK3ZvaWQgQ29uZmln TGlzdDo6dXBkYXRlTWVudUxpc3QoQ29uZmlnTGlzdCAqcGFyZW50LCBzdHJ1Y3QgbWVudSogbWVu dSkKK3sKKwlzdHJ1Y3QgbWVudSogY2hpbGQ7CisJQ29uZmlnSXRlbSogaXRlbTsKKwlDb25maWdJ dGVtKiBsYXN0OworCWJvb2wgdmlzaWJsZTsKKwllbnVtIHByb3BfdHlwZSB0eXBlOworCisJaWYg KCFtZW51KSB7CisJCXdoaWxlIChwYXJlbnQtPnRvcExldmVsSXRlbUNvdW50KCkgPiAwKQorCQl7 CisJCQlkZWxldGUgcGFyZW50LT50YWtlVG9wTGV2ZWxJdGVtKDApOworCQl9CisKKwkJcmV0dXJu OworCX0KKworCWxhc3QgPSAoQ29uZmlnSXRlbSopcGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7CisJ aWYgKGxhc3QgJiYgIWxhc3QtPmdvUGFyZW50KQorCQlsYXN0ID0gMDsKKwlmb3IgKGNoaWxkID0g bWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaXRlbSA9IGxhc3Qg PyBsYXN0LT5uZXh0U2libGluZygpIDogKENvbmZpZ0l0ZW0qKXBhcmVudC0+dG9wTGV2ZWxJdGVt KDApOworCQl0eXBlID0gY2hpbGQtPnByb21wdCA/IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VO S05PV047CisKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgbWVudU1vZGU6CisJCQlpZiAoIShj aGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQorCQkJCWdvdG8gaGlkZTsKKwkJCWJyZWFrOworCQlj YXNlIHN5bWJvbE1vZGU6CisJCQlpZiAoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKQorCQkJCWdv dG8gaGlkZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQl2aXNp YmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsKKwkJaWYgKCFtZW51U2tpcChjaGlsZCkpIHsK KwkJCWlmICghY2hpbGQtPnN5bSAmJiAhY2hpbGQtPmxpc3QgJiYgIWNoaWxkLT5wcm9tcHQpCisJ CQkJY29udGludWU7CisJCQlpZiAoIWl0ZW0gfHwgaXRlbS0+bWVudSAhPSBjaGlsZCkKKwkJCQlp dGVtID0gbmV3IENvbmZpZ0l0ZW0ocGFyZW50LCBsYXN0LCBjaGlsZCwgdmlzaWJsZSk7CisJCQll bHNlCisJCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUodmlzaWJsZSk7CisKKwkJCWlmIChtb2RlID09 IGZ1bGxNb2RlIHx8IG1vZGUgPT0gbWVudU1vZGUgfHwgdHlwZSAhPSBQX01FTlUpCisJCQkJdXBk YXRlTWVudUxpc3QoaXRlbSwgY2hpbGQpOworCQkJZWxzZQorCQkJCXVwZGF0ZU1lbnVMaXN0KGl0 ZW0sIDApOworCQkJbGFzdCA9IGl0ZW07CisJCQljb250aW51ZTsKKwkJfQorCWhpZGU6CisJCWlm IChpdGVtICYmIGl0ZW0tPm1lbnUgPT0gY2hpbGQpIHsKKwkJCWxhc3QgPSAoQ29uZmlnSXRlbSop cGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7CisJCQlpZiAobGFzdCA9PSBpdGVtKQorCQkJCWxhc3Qg PSAwOworCQkJZWxzZSB3aGlsZSAobGFzdC0+bmV4dFNpYmxpbmcoKSAhPSBpdGVtKQorCQkJCWxh c3QgPSBsYXN0LT5uZXh0U2libGluZygpOworCQkJZGVsZXRlIGl0ZW07CisJCX0KKwl9Cit9CisK IHZvaWQgQ29uZmlnTGlzdDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQogewotCVEzTGlz dFZpZXdJdGVtKiBpID0gY3VycmVudEl0ZW0oKTsKKwlRVHJlZVdpZGdldEl0ZW0qIGkgPSBjdXJy ZW50SXRlbSgpOwogCUNvbmZpZ0l0ZW0qIGl0ZW07CiAJc3RydWN0IG1lbnUgKm1lbnU7CiAJZW51 bSBwcm9wX3R5cGUgdHlwZTsKQEAgLTcxNCwyMCArNzY3LDIwIEBAIHZvaWQgQ29uZmlnTGlzdDo6 a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQogCWV2LT5hY2NlcHQoKTsKIH0KIAotdm9pZCBD b25maWdMaXN0Ojpjb250ZW50c01vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCogZSkKK3ZvaWQg Q29uZmlnTGlzdDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBlKQogewogCS8vUVBvaW50 IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7CiAJLy9wcmludGYoImNvbnRlbnRzTW91 c2VQcmVzc0V2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsKLQlQYXJlbnQ6OmNvbnRlbnRz TW91c2VQcmVzc0V2ZW50KGUpOworCVBhcmVudDo6bW91c2VQcmVzc0V2ZW50KGUpOwogfQogCi12 b2lkIENvbmZpZ0xpc3Q6OmNvbnRlbnRzTW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGUp Cit2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBlKQogewot CVFQb2ludCBwKGNvbnRlbnRzVG9WaWV3cG9ydChlLT5wb3MoKSkpOworCVFQb2ludCBwID0gZS0+ cG9zKCk7CiAJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7CiAJc3Ry dWN0IG1lbnUgKm1lbnU7CiAJZW51bSBwcm9wX3R5cGUgcHR5cGU7Ci0JY29uc3QgUVBpeG1hcCog cG07CisJUUljb24gaWNvbjsKIAlpbnQgaWR4LCB4OwogCiAJaWYgKCFpdGVtKQpAQCAtNzM1LDE0 ICs3ODgsMTMgQEAgdm9pZCBDb25maWdMaXN0Ojpjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50KFFN b3VzZUV2ZW50KiBlKQogCiAJbWVudSA9IGl0ZW0tPm1lbnU7CiAJeCA9IGhlYWRlcigpLT5vZmZz ZXQoKSArIHAueCgpOwotCWlkeCA9IGNvbFJldk1hcFtoZWFkZXIoKS0+c2VjdGlvbkF0KHgpXTsK KwlpZHggPSBoZWFkZXIoKS0+bG9naWNhbEluZGV4QXQoeCk7CiAJc3dpdGNoIChpZHgpIHsKIAlj YXNlIHByb21wdENvbElkeDoKLQkJcG0gPSBpdGVtLT5waXhtYXAocHJvbXB0Q29sSWR4KTsKLQkJ aWYgKHBtKSB7Ci0JCQlpbnQgb2ZmID0gaGVhZGVyKCktPnNlY3Rpb25Qb3MoMCkgKyBpdGVtTWFy Z2luKCkgKwotCQkJCXRyZWVTdGVwU2l6ZSgpICogKGl0ZW0tPmRlcHRoKCkgKyAocm9vdElzRGVj b3JhdGVkKCkgPyAxIDogMCkpOwotCQkJaWYgKHggPj0gb2ZmICYmIHggPCBvZmYgKyBwbS0+d2lk dGgoKSkgeworCQlpY29uID0gaXRlbS0+cGl4bWFwKHByb21wdENvbElkeCk7CisJCWlmICghaWNv bi5pc051bGwoKSkgeworCQkJaW50IG9mZiA9IGhlYWRlcigpLT5zZWN0aW9uUG9zaXRpb24oMCkg KyB2aXN1YWxSZWN0KGluZGV4QXQocCkpLngoKSArIDQ7IC8vIDQgaXMgSGFyZGNvZGVkIGltYWdl IG9mZnNldC4gVGhlcmUgbWlnaHQgYmUgYSB3YXkgdG8gZG8gaXQgcHJvcGVybHkuCisJCQlpZiAo eCA+PSBvZmYgJiYgeCA8IG9mZiArIGljb24uYXZhaWxhYmxlU2l6ZXMoKS5maXJzdCgpLndpZHRo KCkpIHsKIAkJCQlpZiAoaXRlbS0+Z29QYXJlbnQpIHsKIAkJCQkJZW1pdCBwYXJlbnRTZWxlY3Rl ZCgpOwogCQkJCQlicmVhazsKQEAgLTc3MywxOSArODI1LDE5IEBAIHZvaWQgQ29uZmlnTGlzdDo6 Y29udGVudHNNb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCogZSkKIAogc2tpcDoKIAkvL3By aW50ZigiY29udGVudHNNb3VzZVJlbGVhc2VFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7 Ci0JUGFyZW50Ojpjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50KGUpOworCVBhcmVudDo6bW91c2VS ZWxlYXNlRXZlbnQoZSk7CiB9CiAKLXZvaWQgQ29uZmlnTGlzdDo6Y29udGVudHNNb3VzZU1vdmVF dmVudChRTW91c2VFdmVudCogZSkKK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VNb3ZlRXZlbnQoUU1v dXNlRXZlbnQqIGUpCiB7CiAJLy9RUG9pbnQgcChjb250ZW50c1RvVmlld3BvcnQoZS0+cG9zKCkp KTsKIAkvL3ByaW50ZigiY29udGVudHNNb3VzZU1vdmVFdmVudDogJWQsJWRcbiIsIHAueCgpLCBw LnkoKSk7Ci0JUGFyZW50Ojpjb250ZW50c01vdXNlTW92ZUV2ZW50KGUpOworCVBhcmVudDo6bW91 c2VNb3ZlRXZlbnQoZSk7CiB9CiAKLXZvaWQgQ29uZmlnTGlzdDo6Y29udGVudHNNb3VzZURvdWJs ZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqIGUpCit2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlRG91Ymxl Q2xpY2tFdmVudChRTW91c2VFdmVudCogZSkKIHsKLQlRUG9pbnQgcChjb250ZW50c1RvVmlld3Bv cnQoZS0+cG9zKCkpKTsKKwlRUG9pbnQgcCA9IGUtPnBvcygpOyAvLyBUT0RPOiBDaGVjayBpZiB0 aGlzIHdvcmtzKHdhcyBjb250ZW50c1RvVmlld3BvcnQpLgogCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAo Q29uZmlnSXRlbSopaXRlbUF0KHApOwogCXN0cnVjdCBtZW51ICptZW51OwogCWVudW0gcHJvcF90 eXBlIHB0eXBlOwpAQCAtODA3LDcgKzg1OSw3IEBAIHZvaWQgQ29uZmlnTGlzdDo6Y29udGVudHNN b3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqIGUpCiAKIHNraXA6CiAJLy9wcmludGYo ImNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsK LQlQYXJlbnQ6OmNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50KGUpOworCVBhcmVudDo6bW91 c2VEb3VibGVDbGlja0V2ZW50KGUpOwogfQogCiB2b2lkIENvbmZpZ0xpc3Q6OmZvY3VzSW5FdmVu dChRRm9jdXNFdmVudCAqZSkKQEAgLTgxOCw3ICs4NzAsNyBAQCB2b2lkIENvbmZpZ0xpc3Q6OmZv Y3VzSW5FdmVudChRRm9jdXNFdmVudCAqZSkKIAogCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmln SXRlbSAqKWN1cnJlbnRJdGVtKCk7CiAJaWYgKGl0ZW0pIHsKLQkJc2V0U2VsZWN0ZWQoaXRlbSwg VFJVRSk7CisJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOwogCQltZW51ID0gaXRlbS0+bWVudTsK IAl9CiAJZW1pdCBnb3RGb2N1cyhtZW51KTsKQEAgLTgyOCwzMyArODgwLDMzIEBAIHZvaWQgQ29u ZmlnTGlzdDo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSkKIHsKIAlpZiAo ZS0+eSgpIDw9IGhlYWRlcigpLT5nZW9tZXRyeSgpLmJvdHRvbSgpKSB7CiAJCWlmICghaGVhZGVy UG9wdXApIHsKLQkJCVEzQWN0aW9uICphY3Rpb247CisJCQlRQWN0aW9uICphY3Rpb247CiAKLQkJ CWhlYWRlclBvcHVwID0gbmV3IFEzUG9wdXBNZW51KHRoaXMpOwotCQkJYWN0aW9uID0gbmV3IFEz QWN0aW9uKE5VTEwsIF8oIlNob3cgTmFtZSIpLCAwLCB0aGlzKTsKLQkJCSAgYWN0aW9uLT5zZXRU b2dnbGVBY3Rpb24oVFJVRSk7CisJCQloZWFkZXJQb3B1cCA9IG5ldyBRTWVudSh0aGlzKTsKKwkJ CWFjdGlvbiA9IG5ldyBRQWN0aW9uKF8oIlNob3cgTmFtZSIpLCB0aGlzKTsKKwkJCSAgYWN0aW9u LT5zZXRDaGVja2FibGUodHJ1ZSk7CiAJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xl ZChib29sKSksCiAJCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93TmFtZShib29sKSkpOwogCQkJ ICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd05hbWVDaGFuZ2VkKGJvb2wpKSwKIAkJCQkg IGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkpOwotCQkJICBhY3Rpb24tPnNldE9uKHNob3dOYW1l KTsKLQkJCSAgYWN0aW9uLT5hZGRUbyhoZWFkZXJQb3B1cCk7Ci0JCQlhY3Rpb24gPSBuZXcgUTNB Y3Rpb24oTlVMTCwgXygiU2hvdyBSYW5nZSIpLCAwLCB0aGlzKTsKLQkJCSAgYWN0aW9uLT5zZXRU b2dnbGVBY3Rpb24oVFJVRSk7CisJCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93TmFtZSk7CisJ CQkgIGhlYWRlclBvcHVwLT5hZGRBY3Rpb24oYWN0aW9uKTsKKwkJCWFjdGlvbiA9IG5ldyBRQWN0 aW9uKF8oIlNob3cgUmFuZ2UiKSwgdGhpcyk7CisJCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRy dWUpOwogCQkJICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLAogCQkJCSAg cGFyZW50KCksIFNMT1Qoc2V0U2hvd1JhbmdlKGJvb2wpKSk7CiAJCQkgIGNvbm5lY3QocGFyZW50 KCksIFNJR05BTChzaG93UmFuZ2VDaGFuZ2VkKGJvb2wpKSwKIAkJCQkgIGFjdGlvbiwgU0xPVChz ZXRPbihib29sKSkpOwotCQkJICBhY3Rpb24tPnNldE9uKHNob3dSYW5nZSk7Ci0JCQkgIGFjdGlv bi0+YWRkVG8oaGVhZGVyUG9wdXApOwotCQkJYWN0aW9uID0gbmV3IFEzQWN0aW9uKE5VTEwsIF8o IlNob3cgRGF0YSIpLCAwLCB0aGlzKTsKLQkJCSAgYWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJV RSk7CisJCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93UmFuZ2UpOworCQkJICBoZWFkZXJQb3B1 cC0+YWRkQWN0aW9uKGFjdGlvbik7CisJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbihfKCJTaG93IERh dGEiKSwgdGhpcyk7CisJCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwogCQkJICBjb25u ZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLAogCQkJCSAgcGFyZW50KCksIFNMT1Qo c2V0U2hvd0RhdGEoYm9vbCkpKTsKIAkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dE YXRhQ2hhbmdlZChib29sKSksCiAJCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKLQkJ CSAgYWN0aW9uLT5zZXRPbihzaG93RGF0YSk7Ci0JCQkgIGFjdGlvbi0+YWRkVG8oaGVhZGVyUG9w dXApOworCQkJICBhY3Rpb24tPnNldENoZWNrZWQoc2hvd0RhdGEpOworCQkJICBoZWFkZXJQb3B1 cC0+YWRkQWN0aW9uKGFjdGlvbik7CiAJCX0KIAkJaGVhZGVyUG9wdXAtPmV4ZWMoZS0+Z2xvYmFs UG9zKCkpOwogCQllLT5hY2NlcHQoKTsKQEAgLTg2OCwxMSArOTIwLDE3IEBAIFFBY3Rpb24gKkNv bmZpZ1ZpZXc6OnNob3dBbGxBY3Rpb247CiBRQWN0aW9uICpDb25maWdWaWV3OjpzaG93UHJvbXB0 QWN0aW9uOwogCiBDb25maWdWaWV3OjpDb25maWdWaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3Qg Y2hhciAqbmFtZSkKLQk6IFBhcmVudChwYXJlbnQsIG5hbWUpCisJOiBQYXJlbnQocGFyZW50KQog ewotCWxpc3QgPSBuZXcgQ29uZmlnTGlzdCh0aGlzLCBuYW1lKTsKKwlzZXRPYmplY3ROYW1lKG5h bWUpOworCVFWQm94TGF5b3V0ICp2ZXJ0aWNhbExheW91dCA9IG5ldyBRVkJveExheW91dCh0aGlz KTsKKwl2ZXJ0aWNhbExheW91dC0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDApOworCisJ bGlzdCA9IG5ldyBDb25maWdMaXN0KHRoaXMpOworCXZlcnRpY2FsTGF5b3V0LT5hZGRXaWRnZXQo bGlzdCk7CiAJbGluZUVkaXQgPSBuZXcgQ29uZmlnTGluZUVkaXQodGhpcyk7CiAJbGluZUVkaXQt PmhpZGUoKTsKKwl2ZXJ0aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpbmVFZGl0KTsKIAogCXRoaXMt Pm5leHRWaWV3ID0gdmlld0xpc3Q7CiAJdmlld0xpc3QgPSB0aGlzOwpAQCAtOTMxLDEwICs5ODks MTMgQEAgdm9pZCBDb25maWdWaWV3OjpzZXRTaG93RGF0YShib29sIGIpCiAKIHZvaWQgQ29uZmln TGlzdDo6c2V0QWxsT3Blbihib29sIG9wZW4pCiB7Ci0JUTNMaXN0Vmlld0l0ZW1JdGVyYXRvciBp dCh0aGlzKTsKKwlRVHJlZVdpZGdldEl0ZW1JdGVyYXRvciBpdCh0aGlzKTsKKworCXdoaWxlICgq aXQpIHsKKwkJKCppdCktPnNldEV4cGFuZGVkKG9wZW4pOwogCi0JZm9yICg7IGl0LmN1cnJlbnQo KTsgaXQrKykKLQkJaXQuY3VycmVudCgpLT5zZXRPcGVuKG9wZW4pOworCQkrK2l0OworCX0KIH0K IAogdm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0qIGl0ZW0pCkBAIC05NTQs MTEgKzEwMTUsMTQgQEAgdm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0QWxsKHZvaWQpCiB9CiAK IENvbmZpZ0luZm9WaWV3OjpDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNo YXIgKm5hbWUpCi0JOiBQYXJlbnQocGFyZW50LCBuYW1lKSwgc3ltKDApLCBfbWVudSgwKQorCTog UGFyZW50KHBhcmVudCksIHN5bSgwKSwgX21lbnUoMCkKIHsKLQlpZiAobmFtZSkgewotCQljb25m aWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1lKTsKLQkJX3Nob3dEZWJ1ZyA9IGNvbmZpZ1NldHRp bmdzLT5yZWFkQm9vbEVudHJ5KCIvc2hvd0RlYnVnIiwgZmFsc2UpOworCXNldE9iamVjdE5hbWUo bmFtZSk7CisKKworCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0 aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOworCQlzZXRTaG93RGVidWcoY29uZmlnU2V0 dGluZ3MtPnZhbHVlKCIvc2hvd0RlYnVnIiwgZmFsc2UpLnRvQm9vbCgpKTsKIAkJY29uZmlnU2V0 dGluZ3MtPmVuZEdyb3VwKCk7CiAJCWNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1 aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKIAl9CkBAIC05NjYsOSArMTAzMCw5IEBAIENv bmZpZ0luZm9WaWV3OjpDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIg Km5hbWUpCiAKIHZvaWQgQ29uZmlnSW5mb1ZpZXc6OnNhdmVTZXR0aW5ncyh2b2lkKQogewotCWlm IChuYW1lKCkpIHsKLQkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSgpKTsKLQkJY29u ZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi9zaG93RGVidWciLCBzaG93RGVidWcoKSk7CisJaWYg KCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3Vw KG9iamVjdE5hbWUoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEZWJ1ZyIs IHNob3dEZWJ1ZygpKTsKIAkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CiAJfQogfQpAQCAt MTEyNyw4ICsxMTkxLDggQEAgUVN0cmluZyBDb25maWdJbmZvVmlldzo6cHJpbnRfZmlsdGVyKGNv bnN0IFFTdHJpbmcgJnN0cikKIHsKIAlRUmVnRXhwIHJlKCJbPD4mXCJcXG5dIik7CiAJUVN0cmlu ZyByZXMgPSBzdHI7Ci0JZm9yIChpbnQgaSA9IDA7IChpID0gcmVzLmZpbmQocmUsIGkpKSA+PSAw OykgewotCQlzd2l0Y2ggKHJlc1tpXS5sYXRpbjEoKSkgeworCWZvciAoaW50IGkgPSAwOyAoaSA9 IHJlcy5pbmRleE9mKHJlLCBpKSkgPj0gMDspIHsKKwkJc3dpdGNoIChyZXNbaV0udG9MYXRpbjEo KSkgewogCQljYXNlICc8JzoKIAkJCXJlcy5yZXBsYWNlKGksIDEsICImbHQ7Iik7CiAJCQlpICs9 IDQ7CkBAIC0xMTY3LDM3ICsxMjMxLDQyIEBAIHZvaWQgQ29uZmlnSW5mb1ZpZXc6OmV4cHJfcHJp bnRfaGVscCh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIKIAkJKnRl eHQgKz0gc3RyMjsKIH0KIAotUTNQb3B1cE1lbnUqIENvbmZpZ0luZm9WaWV3OjpjcmVhdGVQb3B1 cE1lbnUoY29uc3QgUVBvaW50JiBwb3MpCitRTWVudSogQ29uZmlnSW5mb1ZpZXc6OmNyZWF0ZVN0 YW5kYXJkQ29udGV4dE1lbnUoY29uc3QgUVBvaW50ICYgcG9zKQogewotCVEzUG9wdXBNZW51KiBw b3B1cCA9IFBhcmVudDo6Y3JlYXRlUG9wdXBNZW51KHBvcyk7Ci0JUTNBY3Rpb24qIGFjdGlvbiA9 IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IERlYnVnIEluZm8iKSwgMCwgcG9wdXApOwotCSAg YWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7CisJUU1lbnUqIHBvcHVwID0gUGFyZW50Ojpj cmVhdGVTdGFuZGFyZENvbnRleHRNZW51KHBvcyk7CisJUUFjdGlvbiogYWN0aW9uID0gbmV3IFFB Y3Rpb24oXygiU2hvdyBEZWJ1ZyBJbmZvIiksIHBvcHVwKTsKKwkgIGFjdGlvbi0+c2V0Q2hlY2th YmxlKHRydWUpOwogCSAgY29ubmVjdChhY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xP VChzZXRTaG93RGVidWcoYm9vbCkpKTsKIAkgIGNvbm5lY3QodGhpcywgU0lHTkFMKHNob3dEZWJ1 Z0NoYW5nZWQoYm9vbCkpLCBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKLQkgIGFjdGlvbi0+ c2V0T24oc2hvd0RlYnVnKCkpOwotCXBvcHVwLT5pbnNlcnRTZXBhcmF0b3IoKTsKLQlhY3Rpb24t PmFkZFRvKHBvcHVwKTsKKwkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93RGVidWcoKSk7CisJcG9w dXAtPmFkZFNlcGFyYXRvcigpOworCXBvcHVwLT5hZGRBY3Rpb24oYWN0aW9uKTsKIAlyZXR1cm4g cG9wdXA7CiB9CiAKLXZvaWQgQ29uZmlnSW5mb1ZpZXc6OmNvbnRlbnRzQ29udGV4dE1lbnVFdmVu dChRQ29udGV4dE1lbnVFdmVudCAqZSkKK3ZvaWQgQ29uZmlnSW5mb1ZpZXc6OmNvbnRleHRNZW51 RXZlbnQoUUNvbnRleHRNZW51RXZlbnQgKmUpCiB7Ci0JUGFyZW50Ojpjb250ZW50c0NvbnRleHRN ZW51RXZlbnQoZSk7CisJUGFyZW50Ojpjb250ZXh0TWVudUV2ZW50KGUpOwogfQogCiBDb25maWdT ZWFyY2hXaW5kb3c6OkNvbmZpZ1NlYXJjaFdpbmRvdyhDb25maWdNYWluV2luZG93KiBwYXJlbnQs IGNvbnN0IGNoYXIgKm5hbWUpCi0JOiBQYXJlbnQocGFyZW50LCBuYW1lKSwgcmVzdWx0KE5VTEwp CisJOiBQYXJlbnQocGFyZW50KSwgcmVzdWx0KE5VTEwpCiB7Ci0Jc2V0Q2FwdGlvbigiU2VhcmNo IENvbmZpZyIpOworCXNldE9iamVjdE5hbWUobmFtZSk7CisJc2V0V2luZG93VGl0bGUoIlNlYXJj aCBDb25maWciKTsKIAotCVFWQm94TGF5b3V0KiBsYXlvdXQxID0gbmV3IFFWQm94TGF5b3V0KHRo aXMsIDExLCA2KTsKLQlRSEJveExheW91dCogbGF5b3V0MiA9IG5ldyBRSEJveExheW91dCgwLCAw LCA2KTsKKwlRVkJveExheW91dCogbGF5b3V0MSA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKKwls YXlvdXQxLT5zZXRDb250ZW50c01hcmdpbnMoMTEsIDExLCAxMSwgMTEpOworCWxheW91dDEtPnNl dFNwYWNpbmcoNik7CisJUUhCb3hMYXlvdXQqIGxheW91dDIgPSBuZXcgUUhCb3hMYXlvdXQoMCk7 CisJbGF5b3V0Mi0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDApOworCWxheW91dDItPnNl dFNwYWNpbmcoNik7CiAJbGF5b3V0Mi0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwoXygiRmluZDoiKSwg dGhpcykpOwogCWVkaXRGaWVsZCA9IG5ldyBRTGluZUVkaXQodGhpcyk7CiAJY29ubmVjdChlZGl0 RmllbGQsIFNJR05BTChyZXR1cm5QcmVzc2VkKCkpLCBTTE9UKHNlYXJjaCgpKSk7CiAJbGF5b3V0 Mi0+YWRkV2lkZ2V0KGVkaXRGaWVsZCk7CiAJc2VhcmNoQnV0dG9uID0gbmV3IFFQdXNoQnV0dG9u KF8oIlNlYXJjaCIpLCB0aGlzKTsKLQlzZWFyY2hCdXR0b24tPnNldEF1dG9EZWZhdWx0KEZBTFNF KTsKKwlzZWFyY2hCdXR0b24tPnNldEF1dG9EZWZhdWx0KGZhbHNlKTsKIAljb25uZWN0KHNlYXJj aEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQoKSksIFNMT1Qoc2VhcmNoKCkpKTsKIAlsYXlvdXQyLT5h ZGRXaWRnZXQoc2VhcmNoQnV0dG9uKTsKIAlsYXlvdXQxLT5hZGRMYXlvdXQobGF5b3V0Mik7CkBA IC0xMjE1LDE5ICsxMjg0LDE5IEBAIENvbmZpZ1NlYXJjaFdpbmRvdzo6Q29uZmlnU2VhcmNoV2lu ZG93KENvbmZpZ01haW5XaW5kb3cqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtCiAJbGF5b3V0MS0+ YWRkV2lkZ2V0KHNwbGl0KTsKIAogCWlmIChuYW1lKSB7Ci0JCWludCB4LCB5LCB3aWR0aCwgaGVp Z2h0OworCQlRVmFyaWFudCB4LCB5OworCQlpbnQgd2lkdGgsIGhlaWdodDsKIAkJYm9vbCBvazsK IAogCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1lKTsKLQkJd2lkdGggPSBjb25maWdT ZXR0aW5ncy0+cmVhZE51bUVudHJ5KCIvd2luZG93IHdpZHRoIiwgcGFyZW50LT53aWR0aCgpIC8g Mik7Ci0JCWhlaWdodCA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi93aW5kb3cgaGVp Z2h0IiwgcGFyZW50LT5oZWlnaHQoKSAvIDIpOworCQl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52 YWx1ZSgiL3dpbmRvdyB3aWR0aCIsIHBhcmVudC0+d2lkdGgoKSAvIDIpLnRvSW50KCk7CisJCWhl aWdodCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBwYXJlbnQtPmhl aWdodCgpIC8gMikudG9JbnQoKTsKIAkJcmVzaXplKHdpZHRoLCBoZWlnaHQpOwotCQl4ID0gY29u ZmlnU2V0dGluZ3MtPnJlYWROdW1FbnRyeSgiL3dpbmRvdyB4IiwgMCwgJm9rKTsKLQkJaWYgKG9r KQotCQkJeSA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi93aW5kb3cgeSIsIDAsICZv ayk7Ci0JCWlmIChvaykKLQkJCW1vdmUoeCwgeSk7Ci0JCVEzVmFsdWVMaXN0PGludD4gc2l6ZXMg PSBjb25maWdTZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2spOworCQl4ID0gY29uZmln U2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHgiKTsKKwkJeSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1 ZSgiL3dpbmRvdyB5Iik7CisJCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1ZhbGlkKCkpKQorCQkJ bW92ZSh4LnRvSW50KCksIHkudG9JbnQoKSk7CisJCVFMaXN0PGludD4gc2l6ZXMgPSBjb25maWdT ZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2spOwogCQlpZiAob2spCiAJCQlzcGxpdC0+ c2V0U2l6ZXMoc2l6ZXMpOwogCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKQEAgLTEyMzcs MTIgKzEzMDYsMTIgQEAgQ29uZmlnU2VhcmNoV2luZG93OjpDb25maWdTZWFyY2hXaW5kb3coQ29u ZmlnTWFpbldpbmRvdyogcGFyZW50LCBjb25zdCBjaGFyICpuYW0KIAogdm9pZCBDb25maWdTZWFy Y2hXaW5kb3c6OnNhdmVTZXR0aW5ncyh2b2lkKQogewotCWlmIChuYW1lKCkpIHsKLQkJY29uZmln U2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSgpKTsKLQkJY29uZmlnU2V0dGluZ3MtPndyaXRlRW50 cnkoIi93aW5kb3cgeCIsIHBvcygpLngoKSk7Ci0JCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5 KCIvd2luZG93IHkiLCBwb3MoKS55KCkpOwotCQljb25maWdTZXR0aW5ncy0+d3JpdGVFbnRyeSgi L3dpbmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgpKTsKLQkJY29uZmlnU2V0dGluZ3MtPndyaXRl RW50cnkoIi93aW5kb3cgaGVpZ2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsKKwlpZiAoIW9iamVjdE5h bWUoKS5pc0VtcHR5KCkpIHsKKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAob2JqZWN0TmFt ZSgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHgiLCBwb3MoKS54KCkp OworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgeSIsIHBvcygpLnkoKSk7CisJ CWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgp KTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IGhlaWdodCIsIHNpemUoKS5o ZWlnaHQoKSk7CiAJCWNvbmZpZ1NldHRpbmdzLT53cml0ZVNpemVzKCIvc3BsaXQiLCBzcGxpdC0+ c2l6ZXMoKSk7CiAJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOwogCX0KQEAgLTEyNTgsNyAr MTMyNyw3IEBAIHZvaWQgQ29uZmlnU2VhcmNoV2luZG93OjpzZWFyY2godm9pZCkKIAlsaXN0LT5s aXN0LT5jbGVhcigpOwogCWluZm8tPmNsZWFyKCk7CiAKLQlyZXN1bHQgPSBzeW1fcmVfc2VhcmNo KGVkaXRGaWVsZC0+dGV4dCgpLmxhdGluMSgpKTsKKwlyZXN1bHQgPSBzeW1fcmVfc2VhcmNoKGVk aXRGaWVsZC0+dGV4dCgpLnRvTGF0aW4xKCkpOwogCWlmICghcmVzdWx0KQogCQlyZXR1cm47CiAJ Zm9yIChwID0gcmVzdWx0OyAqcDsgcCsrKSB7CkBAIC0xMjc1LDI5ICsxMzQ0LDI1IEBAIENvbmZp Z01haW5XaW5kb3c6OkNvbmZpZ01haW5XaW5kb3codm9pZCkKIAk6IHNlYXJjaFdpbmRvdygwKQog ewogCVFNZW51QmFyKiBtZW51OwotCWJvb2wgb2s7Ci0JaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7 CisJYm9vbCBvayA9IHRydWU7CisJUVZhcmlhbnQgeCwgeTsKKwlpbnQgd2lkdGgsIGhlaWdodDsK IAljaGFyIHRpdGxlWzI1Nl07CiAKIAlRRGVza3RvcFdpZGdldCAqZCA9IGNvbmZpZ0FwcC0+ZGVz a3RvcCgpOwogCXNucHJpbnRmKHRpdGxlLCBzaXplb2YodGl0bGUpLCAiJXMlcyIsCiAJCXJvb3Rt ZW51LnByb21wdC0+dGV4dCwKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDAwMDAKLQkJIiAoUXQzKSIK LSNlbHNlCiAJCSIiCi0jZW5kaWYKIAkJKTsKLQlzZXRDYXB0aW9uKHRpdGxlKTsKKwlzZXRXaW5k b3dUaXRsZSh0aXRsZSk7CiAKLQl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnko Ii93aW5kb3cgd2lkdGgiLCBkLT53aWR0aCgpIC0gNjQpOwotCWhlaWdodCA9IGNvbmZpZ1NldHRp bmdzLT5yZWFkTnVtRW50cnkoIi93aW5kb3cgaGVpZ2h0IiwgZC0+aGVpZ2h0KCkgLSA2NCk7CisJ d2lkdGggPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgd2lkdGgiLCBkLT53aWR0aCgp IC0gNjQpLnRvSW50KCk7CisJaGVpZ2h0ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93 IGhlaWdodCIsIGQtPmhlaWdodCgpIC0gNjQpLnRvSW50KCk7CiAJcmVzaXplKHdpZHRoLCBoZWln aHQpOwotCXggPSBjb25maWdTZXR0aW5ncy0+cmVhZE51bUVudHJ5KCIvd2luZG93IHgiLCAwLCAm b2spOwotCWlmIChvaykKLQkJeSA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi93aW5k b3cgeSIsIDAsICZvayk7Ci0JaWYgKG9rKQotCQltb3ZlKHgsIHkpOworCXggPSBjb25maWdTZXR0 aW5ncy0+dmFsdWUoIi93aW5kb3cgeCIpOworCXkgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93 aW5kb3cgeSIpOworCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1ZhbGlkKCkpKQorCQltb3ZlKHgu dG9JbnQoKSwgeS50b0ludCgpKTsKIAogCXNwbGl0MSA9IG5ldyBRU3BsaXR0ZXIodGhpcyk7CiAJ c3BsaXQxLT5zZXRPcmllbnRhdGlvbihRdDo6SG9yaXpvbnRhbCk7CkBAIC0xMzE0LDEyNyArMTM3 OSwxMTYgQEAgQ29uZmlnTWFpbldpbmRvdzo6Q29uZmlnTWFpbldpbmRvdyh2b2lkKQogCWNvbmZp Z0xpc3QgPSBjb25maWdWaWV3LT5saXN0OwogCiAJaGVscFRleHQgPSBuZXcgQ29uZmlnSW5mb1Zp ZXcoc3BsaXQyLCAiaGVscCIpOwotCWhlbHBUZXh0LT5zZXRUZXh0Rm9ybWF0KFF0OjpSaWNoVGV4 dCk7CiAKIAlzZXRUYWJPcmRlcihjb25maWdMaXN0LCBoZWxwVGV4dCk7CiAJY29uZmlnTGlzdC0+ c2V0Rm9jdXMoKTsKIAogCW1lbnUgPSBtZW51QmFyKCk7Ci0JdG9vbEJhciA9IG5ldyBRM1Rvb2xC YXIoIlRvb2xzIiwgdGhpcyk7Ci0KLQliYWNrQWN0aW9uID0gbmV3IFEzQWN0aW9uKCJCYWNrIiwg UVBpeG1hcCh4cG1fYmFjayksIF8oIkJhY2siKSwgMCwgdGhpcyk7Ci0JICBjb25uZWN0KGJhY2tB Y3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1QoZ29CYWNrKCkpKTsKLQkgIGJhY2tBY3Rp b24tPnNldEVuYWJsZWQoRkFMU0UpOwotCVEzQWN0aW9uICpxdWl0QWN0aW9uID0gbmV3IFEzQWN0 aW9uKCJRdWl0IiwgXygiJlF1aXQiKSwgUXQ6OkNUUkwgKyBRdDo6S2V5X1EsIHRoaXMpOwotCSAg Y29ubmVjdChxdWl0QWN0aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCBTTE9UKGNsb3NlKCkpKTsK LQlRM0FjdGlvbiAqbG9hZEFjdGlvbiA9IG5ldyBRM0FjdGlvbigiTG9hZCIsIFFQaXhtYXAoeHBt X2xvYWQpLCBfKCImTG9hZCIpLCBRdDo6Q1RSTCArIFF0OjpLZXlfTCwgdGhpcyk7Ci0JICBjb25u ZWN0KGxvYWRBY3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1QobG9hZENvbmZpZygpKSk7 Ci0Jc2F2ZUFjdGlvbiA9IG5ldyBRM0FjdGlvbigiU2F2ZSIsIFFQaXhtYXAoeHBtX3NhdmUpLCBf KCImU2F2ZSIpLCBRdDo6Q1RSTCArIFF0OjpLZXlfUywgdGhpcyk7Ci0JICBjb25uZWN0KHNhdmVB Y3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1Qoc2F2ZUNvbmZpZygpKSk7CisJdG9vbEJh ciA9IG5ldyBRVG9vbEJhcigiVG9vbHMiLCB0aGlzKTsKKwlhZGRUb29sQmFyKHRvb2xCYXIpOwor CisJYmFja0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX2JhY2spLCBfKCJCYWNrIiks IHRoaXMpOworCSAgY29ubmVjdChiYWNrQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwg U0xPVChnb0JhY2soKSkpOworCSAgYmFja0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7CisJUUFj dGlvbiAqcXVpdEFjdGlvbiA9IG5ldyBRQWN0aW9uKF8oIiZRdWl0IiksIHRoaXMpOworCXF1aXRB Y3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9RKTsKKwkgIGNvbm5lY3QocXVp dEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1QoY2xvc2UoKSkpOworCVFBY3Rp b24gKmxvYWRBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9sb2FkKSwgXygiJkxvYWQi KSwgdGhpcyk7CisJbG9hZEFjdGlvbi0+c2V0U2hvcnRjdXQoUXQ6OkNUUkwgKyBRdDo6S2V5X0wp OworCSAgY29ubmVjdChsb2FkQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChs b2FkQ29uZmlnKCkpKTsKKwlzYXZlQWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fc2F2 ZSksIF8oIiZTYXZlIiksIHRoaXMpOworCXNhdmVBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJM ICsgUXQ6OktleV9TKTsKKwkgIGNvbm5lY3Qoc2F2ZUFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChi b29sKSksIFNMT1Qoc2F2ZUNvbmZpZygpKSk7CiAJY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjayhj b25mX2NoYW5nZWQpOwogCS8vIFNldCBzYXZlQWN0aW9uJ3MgaW5pdGlhbCBzdGF0ZQogCWNvbmZf Y2hhbmdlZCgpOwotCVEzQWN0aW9uICpzYXZlQXNBY3Rpb24gPSBuZXcgUTNBY3Rpb24oIlNhdmUg QXMuLi4iLCBfKCJTYXZlICZBcy4uLiIpLCAwLCB0aGlzKTsKLQkgIGNvbm5lY3Qoc2F2ZUFzQWN0 aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCBTTE9UKHNhdmVDb25maWdBcygpKSk7Ci0JUTNBY3Rp b24gKnNlYXJjaEFjdGlvbiA9IG5ldyBRM0FjdGlvbigiRmluZCIsIF8oIiZGaW5kIiksIFF0OjpD VFJMICsgUXQ6OktleV9GLCB0aGlzKTsKLQkgIGNvbm5lY3Qoc2VhcmNoQWN0aW9uLCBTSUdOQUwo YWN0aXZhdGVkKCkpLCBTTE9UKHNlYXJjaENvbmZpZygpKSk7Ci0JUTNBY3Rpb24gKnNpbmdsZVZp ZXdBY3Rpb24gPSBuZXcgUTNBY3Rpb24oIlNpbmdsZSBWaWV3IiwgUVBpeG1hcCh4cG1fc2luZ2xl X3ZpZXcpLCBfKCJTaW5nbGUgVmlldyIpLCAwLCB0aGlzKTsKLQkgIGNvbm5lY3Qoc2luZ2xlVmll d0FjdGlvbiwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgU0xPVChzaG93U2luZ2xlVmlldygpKSk7Ci0J UTNBY3Rpb24gKnNwbGl0Vmlld0FjdGlvbiA9IG5ldyBRM0FjdGlvbigiU3BsaXQgVmlldyIsIFFQ aXhtYXAoeHBtX3NwbGl0X3ZpZXcpLCBfKCJTcGxpdCBWaWV3IiksIDAsIHRoaXMpOwotCSAgY29u bmVjdChzcGxpdFZpZXdBY3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1Qoc2hvd1NwbGl0 VmlldygpKSk7Ci0JUTNBY3Rpb24gKmZ1bGxWaWV3QWN0aW9uID0gbmV3IFEzQWN0aW9uKCJGdWxs IFZpZXciLCBRUGl4bWFwKHhwbV90cmVlX3ZpZXcpLCBfKCJGdWxsIFZpZXciKSwgMCwgdGhpcyk7 Ci0JICBjb25uZWN0KGZ1bGxWaWV3QWN0aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCBTTE9UKHNo b3dGdWxsVmlldygpKSk7Ci0KLQlRM0FjdGlvbiAqc2hvd05hbWVBY3Rpb24gPSBuZXcgUTNBY3Rp b24oTlVMTCwgXygiU2hvdyBOYW1lIiksIDAsIHRoaXMpOwotCSAgc2hvd05hbWVBY3Rpb24tPnNl dFRvZ2dsZUFjdGlvbihUUlVFKTsKKwlRQWN0aW9uICpzYXZlQXNBY3Rpb24gPSBuZXcgUUFjdGlv bihfKCJTYXZlICZBcy4uLiIpLCB0aGlzKTsKKwkgIGNvbm5lY3Qoc2F2ZUFzQWN0aW9uLCBTSUdO QUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzYXZlQ29uZmlnQXMoKSkpOworCVFBY3Rpb24gKnNl YXJjaEFjdGlvbiA9IG5ldyBRQWN0aW9uKF8oIiZGaW5kIiksIHRoaXMpOworCXNlYXJjaEFjdGlv bi0+c2V0U2hvcnRjdXQoUXQ6OkNUUkwgKyBRdDo6S2V5X0YpOworCSAgY29ubmVjdChzZWFyY2hB Y3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNlYXJjaENvbmZpZygpKSk7CisJ c2luZ2xlVmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NpbmdsZV92aWV3KSwg XygiU2luZ2xlIFZpZXciKSwgdGhpcyk7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0Q2hlY2thYmxl KHRydWUpOworCSAgY29ubmVjdChzaW5nbGVWaWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJv b2wpKSwgU0xPVChzaG93U2luZ2xlVmlldygpKSk7CisJc3BsaXRWaWV3QWN0aW9uID0gbmV3IFFB Y3Rpb24oUVBpeG1hcCh4cG1fc3BsaXRfdmlldyksIF8oIlNwbGl0IFZpZXciKSwgdGhpcyk7CisJ c3BsaXRWaWV3QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25uZWN0KHNwbGl0Vmll d0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd1NwbGl0VmlldygpKSk7 CisJZnVsbFZpZXdBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV90cmVlX3ZpZXcpLCBf KCJGdWxsIFZpZXciKSwgdGhpcyk7CisJZnVsbFZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVl KTsKKwkgIGNvbm5lY3QoZnVsbFZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBT TE9UKHNob3dGdWxsVmlldygpKSk7CisKKwlRQWN0aW9uICpzaG93TmFtZUFjdGlvbiA9IG5ldyBR QWN0aW9uKF8oIlNob3cgTmFtZSIpLCB0aGlzKTsKKwkgIHNob3dOYW1lQWN0aW9uLT5zZXRDaGVj a2FibGUodHJ1ZSk7CiAJICBjb25uZWN0KHNob3dOYW1lQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChi b29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd05hbWUoYm9vbCkpKTsKLQkgIGNvbm5lY3Qo Y29uZmlnVmlldywgU0lHTkFMKHNob3dOYW1lQ2hhbmdlZChib29sKSksIHNob3dOYW1lQWN0aW9u LCBTTE9UKHNldE9uKGJvb2wpKSk7Ci0JICBzaG93TmFtZUFjdGlvbi0+c2V0T24oY29uZmlnVmll dy0+c2hvd05hbWUoKSk7Ci0JUTNBY3Rpb24gKnNob3dSYW5nZUFjdGlvbiA9IG5ldyBRM0FjdGlv bihOVUxMLCBfKCJTaG93IFJhbmdlIiksIDAsIHRoaXMpOwotCSAgc2hvd1JhbmdlQWN0aW9uLT5z ZXRUb2dnbGVBY3Rpb24oVFJVRSk7CisJICBzaG93TmFtZUFjdGlvbi0+c2V0Q2hlY2tlZChjb25m aWdWaWV3LT5zaG93TmFtZSgpKTsKKwlRQWN0aW9uICpzaG93UmFuZ2VBY3Rpb24gPSBuZXcgUUFj dGlvbihfKCJTaG93IFJhbmdlIiksIHRoaXMpOworCSAgc2hvd1JhbmdlQWN0aW9uLT5zZXRDaGVj a2FibGUodHJ1ZSk7CiAJICBjb25uZWN0KHNob3dSYW5nZUFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQo Ym9vbCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dSYW5nZShib29sKSkpOwotCSAgY29ubmVj dChjb25maWdWaWV3LCBTSUdOQUwoc2hvd1JhbmdlQ2hhbmdlZChib29sKSksIHNob3dSYW5nZUFj dGlvbiwgU0xPVChzZXRPbihib29sKSkpOwotCSAgc2hvd1JhbmdlQWN0aW9uLT5zZXRPbihjb25m aWdMaXN0LT5zaG93UmFuZ2UpOwotCVEzQWN0aW9uICpzaG93RGF0YUFjdGlvbiA9IG5ldyBRM0Fj dGlvbihOVUxMLCBfKCJTaG93IERhdGEiKSwgMCwgdGhpcyk7Ci0JICBzaG93RGF0YUFjdGlvbi0+ c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOworCVFBY3Rpb24gKnNob3dEYXRhQWN0aW9uID0gbmV3IFFB Y3Rpb24oXygiU2hvdyBEYXRhIiksIHRoaXMpOworCSAgc2hvd0RhdGFBY3Rpb24tPnNldENoZWNr YWJsZSh0cnVlKTsKIAkgIGNvbm5lY3Qoc2hvd0RhdGFBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJv b2wpKSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93RGF0YShib29sKSkpOwotCSAgY29ubmVjdChj b25maWdWaWV3LCBTSUdOQUwoc2hvd0RhdGFDaGFuZ2VkKGJvb2wpKSwgc2hvd0RhdGFBY3Rpb24s IFNMT1Qoc2V0T24oYm9vbCkpKTsKLQkgIHNob3dEYXRhQWN0aW9uLT5zZXRPbihjb25maWdMaXN0 LT5zaG93RGF0YSk7CiAKIAlRQWN0aW9uR3JvdXAgKm9wdEdyb3VwID0gbmV3IFFBY3Rpb25Hcm91 cCh0aGlzKTsKLQlvcHRHcm91cC0+c2V0RXhjbHVzaXZlKFRSVUUpOwotCWNvbm5lY3Qob3B0R3Jv dXAsIFNJR05BTChzZWxlY3RlZChRQWN0aW9uICopKSwgY29uZmlnVmlldywKKwlvcHRHcm91cC0+ c2V0RXhjbHVzaXZlKHRydWUpOworCWNvbm5lY3Qob3B0R3JvdXAsIFNJR05BTCh0cmlnZ2VyZWQo UUFjdGlvbiopKSwgY29uZmlnVmlldywKIAkJU0xPVChzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKikp KTsKLQljb25uZWN0KG9wdEdyb3VwLCBTSUdOQUwoc2VsZWN0ZWQoUUFjdGlvbiAqKSksIG1lbnVW aWV3LAorCWNvbm5lY3Qob3B0R3JvdXAsIFNJR05BTCh0cmlnZ2VyZWQoUUFjdGlvbiAqKSksIG1l bnVWaWV3LAogCQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkpOwogCi0jaWYgUVRfVkVS U0lPTiA+PSAweDA0MDAwMAogCWNvbmZpZ1ZpZXctPnNob3dOb3JtYWxBY3Rpb24gPSBuZXcgUUFj dGlvbihfKCJTaG93IE5vcm1hbCBPcHRpb25zIiksIG9wdEdyb3VwKTsKIAljb25maWdWaWV3LT5z aG93QWxsQWN0aW9uID0gbmV3IFFBY3Rpb24oXygiU2hvdyBBbGwgT3B0aW9ucyIpLCBvcHRHcm91 cCk7CiAJY29uZmlnVmlldy0+c2hvd1Byb21wdEFjdGlvbiA9IG5ldyBRQWN0aW9uKF8oIlNob3cg UHJvbXB0IE9wdGlvbnMiKSwgb3B0R3JvdXApOwotI2Vsc2UKLQljb25maWdWaWV3LT5zaG93Tm9y bWFsQWN0aW9uID0gbmV3IFFBY3Rpb24oXygiU2hvdyBOb3JtYWwgT3B0aW9ucyIpLCAwLCBvcHRH cm91cCk7Ci0JY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbiA9IG5ldyBRQWN0aW9uKF8oIlNob3cg QWxsIE9wdGlvbnMiKSwgMCwgb3B0R3JvdXApOwotCWNvbmZpZ1ZpZXctPnNob3dQcm9tcHRBY3Rp b24gPSBuZXcgUUFjdGlvbihfKCJTaG93IFByb21wdCBPcHRpb25zIiksIDAsIG9wdEdyb3VwKTsK LSNlbmRpZgotCWNvbmZpZ1ZpZXctPnNob3dOb3JtYWxBY3Rpb24tPnNldFRvZ2dsZUFjdGlvbihU UlVFKTsKLQljb25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9uLT5zZXRPbihjb25maWdMaXN0LT5v cHRNb2RlID09IG5vcm1hbE9wdCk7Ci0JY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbi0+c2V0VG9n Z2xlQWN0aW9uKFRSVUUpOwotCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24tPnNldE9uKGNvbmZp Z0xpc3QtPm9wdE1vZGUgPT0gYWxsT3B0KTsKLQljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9u LT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7Ci0JY29uZmlnVmlldy0+c2hvd1Byb21wdEFjdGlvbi0+ c2V0T24oY29uZmlnTGlzdC0+b3B0TW9kZSA9PSBwcm9tcHRPcHQpOwotCi0JUTNBY3Rpb24gKnNo b3dEZWJ1Z0FjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IERlYnVnIEluZm8iKSwg MCwgdGhpcyk7Ci0JICBzaG93RGVidWdBY3Rpb24tPnNldFRvZ2dsZUFjdGlvbihUUlVFKTsKKwlj b25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJY29uZmln Vmlldy0+c2hvd0FsbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCWNvbmZpZ1ZpZXctPnNo b3dQcm9tcHRBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKworCVFBY3Rpb24gKnNob3dEZWJ1 Z0FjdGlvbiA9IG5ldyBRQWN0aW9uKCBfKCJTaG93IERlYnVnIEluZm8iKSwgdGhpcyk7CisJICBz aG93RGVidWdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKIAkgIGNvbm5lY3Qoc2hvd0RlYnVn QWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGhlbHBUZXh0LCBTTE9UKHNldFNob3dEZWJ1 Zyhib29sKSkpOwotCSAgY29ubmVjdChoZWxwVGV4dCwgU0lHTkFMKHNob3dEZWJ1Z0NoYW5nZWQo Ym9vbCkpLCBzaG93RGVidWdBY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKLQkgIHNob3dEZWJ1 Z0FjdGlvbi0+c2V0T24oaGVscFRleHQtPnNob3dEZWJ1ZygpKTsKKwkgIHNob3dEZWJ1Z0FjdGlv bi0+c2V0Q2hlY2tlZChoZWxwVGV4dC0+c2hvd0RlYnVnKCkpOwogCi0JUTNBY3Rpb24gKnNob3dJ bnRyb0FjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJJbnRyb2R1Y3Rpb24iKSwgMCwgdGhp cyk7Ci0JICBjb25uZWN0KHNob3dJbnRyb0FjdGlvbiwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgU0xP VChzaG93SW50cm8oKSkpOwotCVEzQWN0aW9uICpzaG93QWJvdXRBY3Rpb24gPSBuZXcgUTNBY3Rp b24oTlVMTCwgXygiQWJvdXQiKSwgMCwgdGhpcyk7Ci0JICBjb25uZWN0KHNob3dBYm91dEFjdGlv biwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgU0xPVChzaG93QWJvdXQoKSkpOworCVFBY3Rpb24gKnNo b3dJbnRyb0FjdGlvbiA9IG5ldyBRQWN0aW9uKCBfKCJJbnRyb2R1Y3Rpb24iKSwgdGhpcyk7CisJ ICBjb25uZWN0KHNob3dJbnRyb0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qo c2hvd0ludHJvKCkpKTsKKwlRQWN0aW9uICpzaG93QWJvdXRBY3Rpb24gPSBuZXcgUUFjdGlvbigg XygiQWJvdXQiKSwgdGhpcyk7CisJICBjb25uZWN0KHNob3dBYm91dEFjdGlvbiwgU0lHTkFMKHRy aWdnZXJlZChib29sKSksIFNMT1Qoc2hvd0Fib3V0KCkpKTsKIAogCS8vIGluaXQgdG9vbCBiYXIK LQliYWNrQWN0aW9uLT5hZGRUbyh0b29sQmFyKTsKKwl0b29sQmFyLT5hZGRBY3Rpb24oYmFja0Fj dGlvbik7CiAJdG9vbEJhci0+YWRkU2VwYXJhdG9yKCk7Ci0JbG9hZEFjdGlvbi0+YWRkVG8odG9v bEJhcik7Ci0Jc2F2ZUFjdGlvbi0+YWRkVG8odG9vbEJhcik7CisJdG9vbEJhci0+YWRkQWN0aW9u KGxvYWRBY3Rpb24pOworCXRvb2xCYXItPmFkZEFjdGlvbihzYXZlQWN0aW9uKTsKIAl0b29sQmFy LT5hZGRTZXBhcmF0b3IoKTsKLQlzaW5nbGVWaWV3QWN0aW9uLT5hZGRUbyh0b29sQmFyKTsKLQlz cGxpdFZpZXdBY3Rpb24tPmFkZFRvKHRvb2xCYXIpOwotCWZ1bGxWaWV3QWN0aW9uLT5hZGRUbyh0 b29sQmFyKTsKKwl0b29sQmFyLT5hZGRBY3Rpb24oc2luZ2xlVmlld0FjdGlvbik7CisJdG9vbEJh ci0+YWRkQWN0aW9uKHNwbGl0Vmlld0FjdGlvbik7CisJdG9vbEJhci0+YWRkQWN0aW9uKGZ1bGxW aWV3QWN0aW9uKTsKIAogCS8vIGNyZWF0ZSBjb25maWcgbWVudQotCVEzUG9wdXBNZW51KiBjb25m aWcgPSBuZXcgUTNQb3B1cE1lbnUodGhpcyk7Ci0JbWVudS0+aW5zZXJ0SXRlbShfKCImRmlsZSIp LCBjb25maWcpOwotCWxvYWRBY3Rpb24tPmFkZFRvKGNvbmZpZyk7Ci0Jc2F2ZUFjdGlvbi0+YWRk VG8oY29uZmlnKTsKLQlzYXZlQXNBY3Rpb24tPmFkZFRvKGNvbmZpZyk7Ci0JY29uZmlnLT5pbnNl cnRTZXBhcmF0b3IoKTsKLQlxdWl0QWN0aW9uLT5hZGRUbyhjb25maWcpOworCVFNZW51KiBjb25m aWcgPSBtZW51LT5hZGRNZW51KF8oIiZGaWxlIikpOworCWNvbmZpZy0+YWRkQWN0aW9uKGxvYWRB Y3Rpb24pOworCWNvbmZpZy0+YWRkQWN0aW9uKHNhdmVBY3Rpb24pOworCWNvbmZpZy0+YWRkQWN0 aW9uKHNhdmVBc0FjdGlvbik7CisJY29uZmlnLT5hZGRTZXBhcmF0b3IoKTsKKwljb25maWctPmFk ZEFjdGlvbihxdWl0QWN0aW9uKTsKIAogCS8vIGNyZWF0ZSBlZGl0IG1lbnUKLQlRM1BvcHVwTWVu dSogZWRpdE1lbnUgPSBuZXcgUTNQb3B1cE1lbnUodGhpcyk7Ci0JbWVudS0+aW5zZXJ0SXRlbShf KCImRWRpdCIpLCBlZGl0TWVudSk7Ci0Jc2VhcmNoQWN0aW9uLT5hZGRUbyhlZGl0TWVudSk7CisJ UU1lbnUqIGVkaXRNZW51ID0gbWVudS0+YWRkTWVudShfKCImRWRpdCIpKTsKKwllZGl0TWVudS0+ YWRkQWN0aW9uKHNlYXJjaEFjdGlvbik7CiAKIAkvLyBjcmVhdGUgb3B0aW9ucyBtZW51Ci0JUTNQ b3B1cE1lbnUqIG9wdGlvbk1lbnUgPSBuZXcgUTNQb3B1cE1lbnUodGhpcyk7Ci0JbWVudS0+aW5z ZXJ0SXRlbShfKCImT3B0aW9uIiksIG9wdGlvbk1lbnUpOwotCXNob3dOYW1lQWN0aW9uLT5hZGRU byhvcHRpb25NZW51KTsKLQlzaG93UmFuZ2VBY3Rpb24tPmFkZFRvKG9wdGlvbk1lbnUpOwotCXNo b3dEYXRhQWN0aW9uLT5hZGRUbyhvcHRpb25NZW51KTsKLQlvcHRpb25NZW51LT5pbnNlcnRTZXBh cmF0b3IoKTsKLQlvcHRHcm91cC0+YWRkVG8ob3B0aW9uTWVudSk7Ci0Jb3B0aW9uTWVudS0+aW5z ZXJ0U2VwYXJhdG9yKCk7CisJUU1lbnUqIG9wdGlvbk1lbnUgPSBtZW51LT5hZGRNZW51KF8oIiZP cHRpb24iKSk7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dOYW1lQWN0aW9uKTsKKwlvcHRp b25NZW51LT5hZGRBY3Rpb24oc2hvd1JhbmdlQWN0aW9uKTsKKwlvcHRpb25NZW51LT5hZGRBY3Rp b24oc2hvd0RhdGFBY3Rpb24pOworCW9wdGlvbk1lbnUtPmFkZFNlcGFyYXRvcigpOworCW9wdGlv bk1lbnUtPmFkZEFjdGlvbnMob3B0R3JvdXAtPmFjdGlvbnMoKSk7CisJb3B0aW9uTWVudS0+YWRk U2VwYXJhdG9yKCk7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dEZWJ1Z0FjdGlvbik7CiAK IAkvLyBjcmVhdGUgaGVscCBtZW51Ci0JUTNQb3B1cE1lbnUqIGhlbHBNZW51ID0gbmV3IFEzUG9w dXBNZW51KHRoaXMpOwotCW1lbnUtPmluc2VydFNlcGFyYXRvcigpOwotCW1lbnUtPmluc2VydEl0 ZW0oXygiJkhlbHAiKSwgaGVscE1lbnUpOwotCXNob3dJbnRyb0FjdGlvbi0+YWRkVG8oaGVscE1l bnUpOwotCXNob3dBYm91dEFjdGlvbi0+YWRkVG8oaGVscE1lbnUpOworCW1lbnUtPmFkZFNlcGFy YXRvcigpOworCVFNZW51KiBoZWxwTWVudSA9IG1lbnUtPmFkZE1lbnUoXygiJkhlbHAiKSk7CisJ aGVscE1lbnUtPmFkZEFjdGlvbihzaG93SW50cm9BY3Rpb24pOworCWhlbHBNZW51LT5hZGRBY3Rp b24oc2hvd0Fib3V0QWN0aW9uKTsKIAogCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKG1lbnVD aGFuZ2VkKHN0cnVjdCBtZW51ICopKSwKIAkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3Qg bWVudSAqKSkpOwpAQCAtMTQ1Niw3ICsxNTEwLDcgQEAgQ29uZmlnTWFpbldpbmRvdzo6Q29uZmln TWFpbldpbmRvdyh2b2lkKQogCWNvbm5lY3QoaGVscFRleHQsIFNJR05BTChtZW51U2VsZWN0ZWQo c3RydWN0IG1lbnUgKikpLAogCQlTTE9UKHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopKSk7CiAK LQlRU3RyaW5nIGxpc3RNb2RlID0gY29uZmlnU2V0dGluZ3MtPnJlYWRFbnRyeSgiL2xpc3RNb2Rl IiwgInN5bWJvbCIpOworCVFTdHJpbmcgbGlzdE1vZGUgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUo Ii9saXN0TW9kZSIsICJzeW1ib2wiKS50b1N0cmluZygpOwogCWlmIChsaXN0TW9kZSA9PSAic2lu Z2xlIikKIAkJc2hvd1NpbmdsZVZpZXcoKTsKIAllbHNlIGlmIChsaXN0TW9kZSA9PSAiZnVsbCIp CkBAIC0xNDY1LDcgKzE1MTksNyBAQCBDb25maWdNYWluV2luZG93OjpDb25maWdNYWluV2luZG93 KHZvaWQpCiAJCXNob3dTcGxpdFZpZXcoKTsKIAogCS8vIFVJIHNldHVwIGRvbmUsIHJlc3RvcmUg c3BsaXR0ZXIgcG9zaXRpb25zCi0JUTNWYWx1ZUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRp bmdzLT5yZWFkU2l6ZXMoIi9zcGxpdDEiLCAmb2spOworCVFMaXN0PGludD4gc2l6ZXMgPSBjb25m aWdTZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQxIiwgJm9rKTsKIAlpZiAob2spCiAJCXNwbGl0 MS0+c2V0U2l6ZXMoc2l6ZXMpOwogCkBAIC0xNDc2LDcgKzE1MzAsNyBAQCBDb25maWdNYWluV2lu ZG93OjpDb25maWdNYWluV2luZG93KHZvaWQpCiAKIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bG9h ZENvbmZpZyh2b2lkKQogewotCVFTdHJpbmcgcyA9IFEzRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVO YW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSwgTlVMTCwgdGhpcyk7CisJUVN0cmluZyBzID0gUUZp bGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZSh0aGlzLCAiIiwgY29uZl9nZXRfY29uZmlnbmFtZSgp KTsKIAlpZiAocy5pc051bGwoKSkKIAkJcmV0dXJuOwogCWlmIChjb25mX3JlYWQoUUZpbGU6OmVu Y29kZU5hbWUocykpKQpAQCAtMTQ5NSw3ICsxNTQ5LDcgQEAgYm9vbCBDb25maWdNYWluV2luZG93 OjpzYXZlQ29uZmlnKHZvaWQpCiAKIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZ0Fz KHZvaWQpCiB7Ci0JUVN0cmluZyBzID0gUTNGaWxlRGlhbG9nOjpnZXRTYXZlRmlsZU5hbWUoY29u Zl9nZXRfY29uZmlnbmFtZSgpLCBOVUxMLCB0aGlzKTsKKwlRU3RyaW5nIHMgPSBRRmlsZURpYWxv Zzo6Z2V0U2F2ZUZpbGVOYW1lKHRoaXMsICIiLCBjb25mX2dldF9jb25maWduYW1lKCkpOwogCWlm IChzLmlzTnVsbCgpKQogCQlyZXR1cm47CiAJc2F2ZUNvbmZpZygpOwpAQCAtMTUxMiw5ICsxNTY2 LDkgQEAgdm9pZCBDb25maWdNYWluV2luZG93OjpjaGFuZ2VNZW51KHN0cnVjdCBtZW51ICptZW51 KQogewogCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KG1lbnUpOwogCWlmIChjb25maWdMaXN0LT5y b290RW50cnktPnBhcmVudCA9PSAmcm9vdG1lbnUpCi0JCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQo RkFMU0UpOworCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKIAllbHNlCi0JCWJhY2tB Y3Rpb24tPnNldEVuYWJsZWQoVFJVRSk7CisJCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7 CiB9CiAKIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2V0TWVudUxpbmsoc3RydWN0IG1lbnUgKm1l bnUpCkBAIC0xNTQ2LDggKzE2MDAsOCBAQCB2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNldE1lbnVM aW5rKHN0cnVjdCBtZW51ICptZW51KQogCQkJCXJldHVybjsKIAkJCWl0ZW0gPSBtZW51TGlzdC0+ ZmluZENvbmZpZ0l0ZW0ocGFyZW50KTsKIAkJCWlmIChpdGVtKSB7Ci0JCQkJbWVudUxpc3QtPnNl dFNlbGVjdGVkKGl0ZW0sIFRSVUUpOwotCQkJCW1lbnVMaXN0LT5lbnN1cmVJdGVtVmlzaWJsZShp dGVtKTsKKwkJCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJCQltZW51TGlzdC0+c2Nyb2xs VG9JdGVtKGl0ZW0pOwogCQkJfQogCQkJbGlzdC0+c2V0Um9vdE1lbnUocGFyZW50KTsKIAkJfQpA QCAtMTU2Miw4ICsxNjE2LDggQEAgdm9pZCBDb25maWdNYWluV2luZG93OjpzZXRNZW51TGluayhz dHJ1Y3QgbWVudSAqbWVudSkKIAlpZiAobGlzdCkgewogCQlpdGVtID0gbGlzdC0+ZmluZENvbmZp Z0l0ZW0obWVudSk7CiAJCWlmIChpdGVtKSB7Ci0JCQlsaXN0LT5zZXRTZWxlY3RlZChpdGVtLCBU UlVFKTsKLQkJCWxpc3QtPmVuc3VyZUl0ZW1WaXNpYmxlKGl0ZW0pOworCQkJaXRlbS0+c2V0U2Vs ZWN0ZWQodHJ1ZSk7CisJCQlsaXN0LT5zY3JvbGxUb0l0ZW0oaXRlbSk7CiAJCQlsaXN0LT5zZXRG b2N1cygpOwogCQl9CiAJfQpAQCAtMTU3NywxNSArMTYzMSwyMSBAQCB2b2lkIENvbmZpZ01haW5X aW5kb3c6Omxpc3RGb2N1c0NoYW5nZWQodm9pZCkKIAogdm9pZCBDb25maWdNYWluV2luZG93Ojpn b0JhY2sodm9pZCkKIHsKLQlDb25maWdJdGVtKiBpdGVtOworCUNvbmZpZ0l0ZW0qIGl0ZW0sICpv bGRTZWxlY3Rpb247CiAKIAljb25maWdMaXN0LT5zZXRQYXJlbnRNZW51KCk7CiAJaWYgKGNvbmZp Z0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpCi0JCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQo RkFMU0UpOwotCWl0ZW0gPSAoQ29uZmlnSXRlbSopbWVudUxpc3QtPnNlbGVjdGVkSXRlbSgpOwor CQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKworCWlmIChtZW51TGlzdC0+c2VsZWN0 ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkKKwkJcmV0dXJuOworCisJaXRlbSA9IChDb25maWdJdGVt KiltZW51TGlzdC0+c2VsZWN0ZWRJdGVtcygpLmZpcnN0KCk7CisJb2xkU2VsZWN0aW9uID0gaXRl bTsKIAl3aGlsZSAoaXRlbSkgewogCQlpZiAoaXRlbS0+bWVudSA9PSBjb25maWdMaXN0LT5yb290 RW50cnkpIHsKLQkJCW1lbnVMaXN0LT5zZXRTZWxlY3RlZChpdGVtLCBUUlVFKTsKKwkJCW9sZFNl bGVjdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOworCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7 CiAJCQlicmVhazsKIAkJfQogCQlpdGVtID0gKENvbmZpZ0l0ZW0qKWl0ZW0tPnBhcmVudCgpOwpA QCAtMTU5NCw2ICsxNjU0LDEzIEBAIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Z29CYWNrKHZvaWQp CiAKIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd1NpbmdsZVZpZXcodm9pZCkKIHsKKwlzaW5n bGVWaWV3QWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRD aGVja2VkKHRydWUpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlzcGxp dFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFi bGVkKHRydWUpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKwogCW1lbnVW aWV3LT5oaWRlKCk7CiAJbWVudUxpc3QtPnNldFJvb3RNZW51KDApOwogCWNvbmZpZ0xpc3QtPm1v ZGUgPSBzaW5nbGVNb2RlOwpAQCAtMTYwMSwyOCArMTY2OCw0MSBAQCB2b2lkIENvbmZpZ01haW5X aW5kb3c6OnNob3dTaW5nbGVWaWV3KHZvaWQpCiAJCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwo KTsKIAllbHNlCiAJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7Ci0JY29uZmln TGlzdC0+c2V0QWxsT3BlbihUUlVFKTsKIAljb25maWdMaXN0LT5zZXRGb2N1cygpOwogfQogCiB2 b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dTcGxpdFZpZXcodm9pZCkKIHsKKwlzaW5nbGVWaWV3 QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOworCXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQo ZmFsc2UpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7CisJc3BsaXRWaWV3 QWN0aW9uLT5zZXRDaGVja2VkKHRydWUpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRy dWUpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKwogCWNvbmZpZ0xpc3Qt Pm1vZGUgPSBzeW1ib2xNb2RlOwogCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3Rt ZW51KQogCQljb25maWdMaXN0LT51cGRhdGVMaXN0QWxsKCk7CiAJZWxzZQogCQljb25maWdMaXN0 LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOwotCWNvbmZpZ0xpc3QtPnNldEFsbE9wZW4oVFJVRSk7 CisJY29uZmlnTGlzdC0+c2V0QWxsT3Blbih0cnVlKTsKIAljb25maWdBcHAtPnByb2Nlc3NFdmVu dHMoKTsKIAltZW51TGlzdC0+bW9kZSA9IG1lbnVNb2RlOwogCW1lbnVMaXN0LT5zZXRSb290TWVu dSgmcm9vdG1lbnUpOwotCW1lbnVMaXN0LT5zZXRBbGxPcGVuKFRSVUUpOworCW1lbnVMaXN0LT5z ZXRBbGxPcGVuKHRydWUpOwogCW1lbnVWaWV3LT5zaG93KCk7CiAJbWVudUxpc3QtPnNldEZvY3Vz KCk7CiB9CiAKIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Z1bGxWaWV3KHZvaWQpCiB7CisJ c2luZ2xlVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlzaW5nbGVWaWV3QWN0aW9uLT5z ZXRDaGVja2VkKGZhbHNlKTsKKwlzcGxpdFZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7CisJ c3BsaXRWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0 RW5hYmxlZChmYWxzZSk7CisJZnVsbFZpZXdBY3Rpb24tPnNldENoZWNrZWQodHJ1ZSk7CisKIAlt ZW51Vmlldy0+aGlkZSgpOwogCW1lbnVMaXN0LT5zZXRSb290TWVudSgwKTsKIAljb25maWdMaXN0 LT5tb2RlID0gZnVsbE1vZGU7CkBAIC0xNjMwLDcgKzE3MTAsNiBAQCB2b2lkIENvbmZpZ01haW5X aW5kb3c6OnNob3dGdWxsVmlldyh2b2lkKQogCQljb25maWdMaXN0LT51cGRhdGVMaXN0QWxsKCk7 CiAJZWxzZQogCQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOwotCWNvbmZpZ0xp c3QtPnNldEFsbE9wZW4oRkFMU0UpOwogCWNvbmZpZ0xpc3QtPnNldEZvY3VzKCk7CiB9CiAKQEAg LTE2ODQsNyArMTc2Myw4IEBAIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0ludHJvKHZvaWQp CiAKIHZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Fib3V0KHZvaWQpCiB7Ci0Jc3RhdGljIGNv bnN0IFFTdHJpbmcgc3RyID0gXygicWNvbmYgaXMgQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFpp cHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPi5cblxuIgorCXN0YXRpYyBjb25zdCBRU3RyaW5n IHN0ciA9IF8oInFjb25mIGlzIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBl bEBsaW51eC1tNjhrLm9yZz4uXG4iCisJCSJDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVs b3Zza2kgPGJiYXJidWxvdnNraUBnbWFpbC5jb20+LlxuXG4iCiAJCSJCdWcgcmVwb3J0cyBhbmQg ZmVhdHVyZSByZXF1ZXN0IGNhbiBhbHNvIGJlIGVudGVyZWQgYXQgaHR0cDovL2J1Z3ppbGxhLmtl cm5lbC5vcmcvXG4iKTsKIAogCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYi LCBzdHIpOwpAQCAtMTY5MiwxMCArMTc3MiwxMCBAQCB2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNo b3dBYm91dCh2b2lkKQogCiB2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNhdmVTZXR0aW5ncyh2b2lk KQogewotCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvd2luZG93IHgiLCBwb3MoKS54KCkp OwotCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvd2luZG93IHkiLCBwb3MoKS55KCkpOwot CWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvd2luZG93IHdpZHRoIiwgc2l6ZSgpLndpZHRo KCkpOwotCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvd2luZG93IGhlaWdodCIsIHNpemUo KS5oZWlnaHQoKSk7CisJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHgiLCBwb3Mo KS54KCkpOworCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5IiwgcG9zKCkueSgp KTsKKwljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgd2lkdGgiLCBzaXplKCkud2lk dGgoKSk7CisJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IGhlaWdodCIsIHNpemUo KS5oZWlnaHQoKSk7CiAKIAlRU3RyaW5nIGVudHJ5OwogCXN3aXRjaChjb25maWdMaXN0LT5tb2Rl KSB7CkBAIC0xNzE0LDcgKzE3OTQsNyBAQCB2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNhdmVTZXR0 aW5ncyh2b2lkKQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQljb25maWdTZXR0aW5ncy0+d3Jp dGVFbnRyeSgiL2xpc3RNb2RlIiwgZW50cnkpOworCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgi L2xpc3RNb2RlIiwgZW50cnkpOwogCiAJY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxp dDEiLCBzcGxpdDEtPnNpemVzKCkpOwogCWNvbmZpZ1NldHRpbmdzLT53cml0ZVNpemVzKCIvc3Bs aXQyIiwgc3BsaXQyLT5zaXplcygpKTsKQEAgLTE3NDYsNyArMTgyNiw3IEBAIHN0YXRpYyBjb25z dCBjaGFyICpwcm9nbmFtZTsKIAogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKLQlwcmludGYo XygiJXMgWy1zXSA8Y29uZmlnPlxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgWy1zXSA8 Y29uZmlnPlxuIikudG9MYXRpbjEoKS5jb25zdERhdGEoKSwgcHJvZ25hbWUpOwogCWV4aXQoMCk7 CiB9CiAKQEAgLTE3ODUsNyArMTg2NSw2IEBAIGludCBtYWluKGludCBhYywgY2hhcioqIGF2KQog CXYgPSBuZXcgQ29uZmlnTWFpbldpbmRvdygpOwogCiAJLy96Y29uZmR1bXAoc3Rkb3V0KTsKLQlj b25maWdBcHAtPnNldE1haW5XaWRnZXQodik7CiAJY29uZmlnQXBwLT5jb25uZWN0KGNvbmZpZ0Fw cCwgU0lHTkFMKGxhc3RXaW5kb3dDbG9zZWQoKSksIFNMT1QocXVpdCgpKSk7CiAJY29uZmlnQXBw LT5jb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCB2LCBTTE9UKHNhdmVT ZXR0aW5ncygpKSk7CiAJdi0+c2hvdygpOwpAQCAtMTc5Myw2ICsxODcyLDggQEAgaW50IG1haW4o aW50IGFjLCBjaGFyKiogYXYpCiAKIAljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKIAlkZWxl dGUgY29uZmlnU2V0dGluZ3M7CisJZGVsZXRlIHY7CisJZGVsZXRlIGNvbmZpZ0FwcDsKIAogCXJl dHVybiAwOwogfQpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvcWNvbmYuaCBiL3hlbi90 b29scy9rY29uZmlnL3Fjb25mLmgKaW5kZXggYmRlMGM2YjZmOS4uYTQwMDM2ZDFiMCAxMDA2NDQK LS0tIGEveGVuL3Rvb2xzL2tjb25maWcvcWNvbmYuaAorKysgYi94ZW4vdG9vbHMva2NvbmZpZy9x Y29uZi5oCkBAIC0zLDI2ICszLDE4IEBACiAgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHUEwgdjIuMC4KICAqLwogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwMDAwCi0jaW5j bHVkZSA8cWxpc3R2aWV3Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPHEzbGlzdHZpZXcuaD4KLSNlbmRp ZgorI2luY2x1ZGUgPFFUZXh0QnJvd3Nlcj4KKyNpbmNsdWRlIDxRVHJlZVdpZGdldD4KKyNpbmNs dWRlIDxRTWFpbldpbmRvdz4KKyNpbmNsdWRlIDxRSGVhZGVyVmlldz4KICNpbmNsdWRlIDxxc2V0 dGluZ3MuaD4KLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDAwMAotI2RlZmluZSBRM1ZhbHVlTGlz dCAgICAgICAgICAgICBRVmFsdWVMaXN0Ci0jZGVmaW5lIFEzUG9wdXBNZW51ICAgICAgICAgICAg IFFQb3B1cE1lbnUKLSNkZWZpbmUgUTNMaXN0VmlldyAgICAgICAgICAgICAgUUxpc3RWaWV3Ci0j ZGVmaW5lIFEzTGlzdFZpZXdJdGVtICAgICAgICAgIFFMaXN0Vmlld0l0ZW0KLSNkZWZpbmUgUTNW Qm94ICAgICAgICAgICAgICAgICAgUVZCb3gKLSNkZWZpbmUgUTNUZXh0QnJvd3NlciAgICAgICAg ICAgUVRleHRCcm93c2VyCi0jZGVmaW5lIFEzTWFpbldpbmRvdyAgICAgICAgICAgIFFNYWluV2lu ZG93Ci0jZGVmaW5lIFEzQWN0aW9uICAgICAgICAgICAgICAgIFFBY3Rpb24KLSNkZWZpbmUgUTNU b29sQmFyICAgICAgICAgICAgICAgUVRvb2xCYXIKLSNkZWZpbmUgUTNMaXN0Vmlld0l0ZW1JdGVy YXRvciAgUUxpc3RWaWV3SXRlbUl0ZXJhdG9yCi0jZGVmaW5lIFEzRmlsZURpYWxvZyAgICAgICAg ICAgIFFGaWxlRGlhbG9nCi0jZW5kaWYKKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KKyNpbmNsdWRl IDxRU2V0dGluZ3M+CisjaW5jbHVkZSA8UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFTcGxpdHRlcj4K KyNpbmNsdWRlIDxRQ2hlY2tCb3g+CisjaW5jbHVkZSA8UURpYWxvZz4KKyNpbmNsdWRlICJleHBy LmgiCiAKIGNsYXNzIENvbmZpZ1ZpZXc7CiBjbGFzcyBDb25maWdMaXN0OwpAQCAtMzMsOCArMjUs OCBAQCBjbGFzcyBDb25maWdNYWluV2luZG93OwogY2xhc3MgQ29uZmlnU2V0dGluZ3MgOiBwdWJs aWMgUVNldHRpbmdzIHsKIHB1YmxpYzoKIAlDb25maWdTZXR0aW5ncygpOwotCVEzVmFsdWVMaXN0 PGludD4gcmVhZFNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2spOwotCWJvb2wgd3Jp dGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGNvbnN0IFEzVmFsdWVMaXN0PGludD4mIHZhbHVl KTsKKwlRTGlzdDxpbnQ+IHJlYWRTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGJvb2wgKm9rKTsK Kwlib29sIHdyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBjb25zdCBRTGlzdDxpbnQ+JiB2 YWx1ZSk7CiB9OwogCiBlbnVtIGNvbElkeCB7CkBAIC00Nyw5ICszOSw5IEBAIGVudW0gb3B0aW9u TW9kZSB7CiAJbm9ybWFsT3B0ID0gMCwgYWxsT3B0LCBwcm9tcHRPcHQKIH07CiAKLWNsYXNzIENv bmZpZ0xpc3QgOiBwdWJsaWMgUTNMaXN0VmlldyB7CitjbGFzcyBDb25maWdMaXN0IDogcHVibGlj IFFUcmVlV2lkZ2V0IHsKIAlRX09CSkVDVAotCXR5cGVkZWYgY2xhc3MgUTNMaXN0VmlldyBQYXJl bnQ7CisJdHlwZWRlZiBjbGFzcyBRVHJlZVdpZGdldCBQYXJlbnQ7CiBwdWJsaWM6CiAJQ29uZmln TGlzdChDb25maWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7CiAJdm9pZCByZWluaXQo dm9pZCk7CkBAIC02MSwxMCArNTMsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAJdm9pZCBr ZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZSk7Ci0Jdm9pZCBjb250ZW50c01vdXNlUHJlc3NFdmVu dChRTW91c2VFdmVudCAqZSk7Ci0Jdm9pZCBjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50KFFNb3Vz ZUV2ZW50ICplKTsKLQl2b2lkIGNvbnRlbnRzTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQgKmUp OwotCXZvaWQgY29udGVudHNNb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKmUpOwor CXZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICplKTsKKwl2b2lkIG1vdXNlUmVsZWFz ZUV2ZW50KFFNb3VzZUV2ZW50ICplKTsKKwl2b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50 ICplKTsKKwl2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCAqZSk7CiAJdm9p ZCBmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQgKmUpOwogCXZvaWQgY29udGV4dE1lbnVFdmVudChR Q29udGV4dE1lbnVFdmVudCAqZSk7CiAKQEAgLTk1LDMyICs4NywyMyBAQCBwdWJsaWM6CiAJfQog CUNvbmZpZ0l0ZW0qIGZpcnN0Q2hpbGQoKSBjb25zdAogCXsKLQkJcmV0dXJuIChDb25maWdJdGVt ICopUGFyZW50OjpmaXJzdENoaWxkKCk7Ci0JfQotCWludCBtYXBJZHgoY29sSWR4IGlkeCkKLQl7 Ci0JCXJldHVybiBjb2xNYXBbaWR4XTsKKwkJcmV0dXJuIChDb25maWdJdGVtICopY2hpbGRyZW4o KS5maXJzdCgpOwogCX0KLQl2b2lkIGFkZENvbHVtbihjb2xJZHggaWR4LCBjb25zdCBRU3RyaW5n JiBsYWJlbCkKKwl2b2lkIGFkZENvbHVtbihjb2xJZHggaWR4KQogCXsKLQkJY29sTWFwW2lkeF0g PSBQYXJlbnQ6OmFkZENvbHVtbihsYWJlbCk7Ci0JCWNvbFJldk1hcFtjb2xNYXBbaWR4XV0gPSBp ZHg7CisJCXNob3dDb2x1bW4oaWR4KTsKIAl9CiAJdm9pZCByZW1vdmVDb2x1bW4oY29sSWR4IGlk eCkKIAl7Ci0JCWludCBjb2wgPSBjb2xNYXBbaWR4XTsKLQkJaWYgKGNvbCA+PSAwKSB7Ci0JCQlQ YXJlbnQ6OnJlbW92ZUNvbHVtbihjb2wpOwotCQkJY29sUmV2TWFwW2NvbF0gPSBjb2xNYXBbaWR4 XSA9IC0xOwotCQl9CisJCWhpZGVDb2x1bW4oaWR4KTsKIAl9CiAJdm9pZCBzZXRBbGxPcGVuKGJv b2wgb3Blbik7CiAJdm9pZCBzZXRQYXJlbnRNZW51KHZvaWQpOwogCiAJYm9vbCBtZW51U2tpcChz dHJ1Y3QgbWVudSAqKTsKIAotCXRlbXBsYXRlIDxjbGFzcyBQPgotCXZvaWQgdXBkYXRlTWVudUxp c3QoUCosIHN0cnVjdCBtZW51Kik7CisJdm9pZCB1cGRhdGVNZW51TGlzdChDb25maWdJdGVtICpw YXJlbnQsIHN0cnVjdCBtZW51Kik7CisJdm9pZCB1cGRhdGVNZW51TGlzdChDb25maWdMaXN0ICpw YXJlbnQsIHN0cnVjdCBtZW51Kik7CiAKIAlib29sIHVwZGF0ZUFsbDsKIApAQCAtMTMyLDMwICsx MTUsMjYgQEAgcHVibGljOgogCWVudW0gbGlzdE1vZGUgbW9kZTsKIAllbnVtIG9wdGlvbk1vZGUg b3B0TW9kZTsKIAlzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5OwotCVFDb2xvckdyb3VwIGRpc2FibGVk Q29sb3JHcm91cDsKLQlRQ29sb3JHcm91cCBpbmFjdGl2ZWRDb2xvckdyb3VwOwotCVEzUG9wdXBN ZW51KiBoZWFkZXJQb3B1cDsKLQotcHJpdmF0ZToKLQlpbnQgY29sTWFwW2NvbE5yXTsKLQlpbnQg Y29sUmV2TWFwW2NvbE5yXTsKKwlRUGFsZXR0ZSBkaXNhYmxlZENvbG9yR3JvdXA7CisJUVBhbGV0 dGUgaW5hY3RpdmVkQ29sb3JHcm91cDsKKwlRTWVudSogaGVhZGVyUG9wdXA7CiB9OwogCi1jbGFz cyBDb25maWdJdGVtIDogcHVibGljIFEzTGlzdFZpZXdJdGVtIHsKLQl0eXBlZGVmIGNsYXNzIFEz TGlzdFZpZXdJdGVtIFBhcmVudDsKK2NsYXNzIENvbmZpZ0l0ZW0gOiBwdWJsaWMgUVRyZWVXaWRn ZXRJdGVtIHsKKwl0eXBlZGVmIGNsYXNzIFFUcmVlV2lkZ2V0SXRlbSBQYXJlbnQ7CiBwdWJsaWM6 Ci0JQ29uZmlnSXRlbShRM0xpc3RWaWV3ICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBzdHJ1 Y3QgbWVudSAqbSwgYm9vbCB2KQotCTogUGFyZW50KHBhcmVudCwgYWZ0ZXIpLCBtZW51KG0pLCB2 aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkKKwlDb25maWdJdGVtKENvbmZpZ0xpc3QgKnBhcmVu dCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBtZW51ICptLCBib29sIHYpCisJOiBQYXJlbnQo cGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KG0pLCB2aXNpYmxlKHYpLCBnb1BhcmVu dChmYWxzZSkKIAl7CiAJCWluaXQoKTsKIAl9CiAJQ29uZmlnSXRlbShDb25maWdJdGVtICpwYXJl bnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBzdHJ1Y3QgbWVudSAqbSwgYm9vbCB2KQotCTogUGFyZW50 KHBhcmVudCwgYWZ0ZXIpLCBtZW51KG0pLCB2aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkKKwk6 IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUobSksIHZpc2libGUodiks IGdvUGFyZW50KGZhbHNlKQogCXsKIAkJaW5pdCgpOwogCX0KLQlDb25maWdJdGVtKFEzTGlzdFZp ZXcgKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIGJvb2wgdikKLQk6IFBhcmVudChwYXJlbnQs IGFmdGVyKSwgbWVudSgwKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQodHJ1ZSkKKwlDb25maWdJdGVt KENvbmZpZ0xpc3QgKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIGJvb2wgdikKKwk6IFBhcmVu dChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUoMCksIHZpc2libGUodiksIGdvUGFy ZW50KHRydWUpCiAJewogCQlpbml0KCk7CiAJfQpAQCAtMTY2LDMzICsxNDUsNDMgQEAgcHVibGlj OgogCXZvaWQgdGVzdFVwZGF0ZU1lbnUoYm9vbCB2KTsKIAlDb25maWdMaXN0KiBsaXN0Vmlldygp IGNvbnN0CiAJewotCQlyZXR1cm4gKENvbmZpZ0xpc3QqKVBhcmVudDo6bGlzdFZpZXcoKTsKKwkJ cmV0dXJuIChDb25maWdMaXN0KilQYXJlbnQ6OnRyZWVXaWRnZXQoKTsKIAl9CiAJQ29uZmlnSXRl bSogZmlyc3RDaGlsZCgpIGNvbnN0CiAJewotCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKilQYXJlbnQ6 OmZpcnN0Q2hpbGQoKTsKKwkJcmV0dXJuIChDb25maWdJdGVtICopUGFyZW50OjpjaGlsZCgwKTsK IAl9Ci0JQ29uZmlnSXRlbSogbmV4dFNpYmxpbmcoKSBjb25zdAorCUNvbmZpZ0l0ZW0qIG5leHRT aWJsaW5nKCkKIAl7Ci0JCXJldHVybiAoQ29uZmlnSXRlbSAqKVBhcmVudDo6bmV4dFNpYmxpbmco KTsKKwkJQ29uZmlnSXRlbSAqcmV0ID0gTlVMTDsKKwkJQ29uZmlnSXRlbSAqX3BhcmVudCA9IChD b25maWdJdGVtICopcGFyZW50KCk7CisKKwkJaWYoX3BhcmVudCkgeworCQkJcmV0ID0gKENvbmZp Z0l0ZW0gKilfcGFyZW50LT5jaGlsZChfcGFyZW50LT5pbmRleE9mQ2hpbGQodGhpcykrMSk7CisJ CX0gZWxzZSB7CisJCQlRVHJlZVdpZGdldCAqX3RyZWVXaWRnZXQgPSB0cmVlV2lkZ2V0KCk7CisJ CQlyZXQgPSAoQ29uZmlnSXRlbSAqKV90cmVlV2lkZ2V0LT50b3BMZXZlbEl0ZW0oX3RyZWVXaWRn ZXQtPmluZGV4T2ZUb3BMZXZlbEl0ZW0odGhpcykrMSk7CisJCX0KKworCQlyZXR1cm4gcmV0Owog CX0KIAl2b2lkIHNldFRleHQoY29sSWR4IGlkeCwgY29uc3QgUVN0cmluZyYgdGV4dCkKIAl7Ci0J CVBhcmVudDo6c2V0VGV4dChsaXN0VmlldygpLT5tYXBJZHgoaWR4KSwgdGV4dCk7CisJCVBhcmVu dDo6c2V0VGV4dChpZHgsIHRleHQpOwogCX0KIAlRU3RyaW5nIHRleHQoY29sSWR4IGlkeCkgY29u c3QKIAl7Ci0JCXJldHVybiBQYXJlbnQ6OnRleHQobGlzdFZpZXcoKS0+bWFwSWR4KGlkeCkpOwor CQlyZXR1cm4gUGFyZW50Ojp0ZXh0KGlkeCk7CiAJfQotCXZvaWQgc2V0UGl4bWFwKGNvbElkeCBp ZHgsIGNvbnN0IFFQaXhtYXAmIHBtKQorCXZvaWQgc2V0UGl4bWFwKGNvbElkeCBpZHgsIGNvbnN0 IFFJY29uICZpY29uKQogCXsKLQkJUGFyZW50OjpzZXRQaXhtYXAobGlzdFZpZXcoKS0+bWFwSWR4 KGlkeCksIHBtKTsKKwkJUGFyZW50OjpzZXRJY29uKGlkeCwgaWNvbik7CiAJfQotCWNvbnN0IFFQ aXhtYXAqIHBpeG1hcChjb2xJZHggaWR4KSBjb25zdAorCWNvbnN0IFFJY29uIHBpeG1hcChjb2xJ ZHggaWR4KSBjb25zdAogCXsKLQkJcmV0dXJuIFBhcmVudDo6cGl4bWFwKGxpc3RWaWV3KCktPm1h cElkeChpZHgpKTsKKwkJcmV0dXJuIGljb24oaWR4KTsKIAl9Ci0Jdm9pZCBwYWludENlbGwoUVBh aW50ZXIqIHAsIGNvbnN0IFFDb2xvckdyb3VwJiBjZywgaW50IGNvbHVtbiwgaW50IHdpZHRoLCBp bnQgYWxpZ24pOworCS8vIFRPRE86IEltcGxlbWVudCBwYWludENlbGwKIAogCUNvbmZpZ0l0ZW0q IG5leHRJdGVtOwogCXN0cnVjdCBtZW51ICptZW51OwpAQCAtMjE2LDkgKzIwNSw5IEBAIHB1Ymxp YzoKIAlDb25maWdJdGVtICppdGVtOwogfTsKIAotY2xhc3MgQ29uZmlnVmlldyA6IHB1YmxpYyBR M1ZCb3ggeworY2xhc3MgQ29uZmlnVmlldyA6IHB1YmxpYyBRV2lkZ2V0IHsKIAlRX09CSkVDVAot CXR5cGVkZWYgY2xhc3MgUTNWQm94IFBhcmVudDsKKwl0eXBlZGVmIGNsYXNzIFFXaWRnZXQgUGFy ZW50OwogcHVibGljOgogCUNvbmZpZ1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpu YW1lID0gMCk7CiAJfkNvbmZpZ1ZpZXcodm9pZCk7CkBAIC0yNDksOSArMjM4LDkgQEAgcHVibGlj OgogCXN0YXRpYyBRQWN0aW9uICpzaG93UHJvbXB0QWN0aW9uOwogfTsKIAotY2xhc3MgQ29uZmln SW5mb1ZpZXcgOiBwdWJsaWMgUTNUZXh0QnJvd3NlciB7CitjbGFzcyBDb25maWdJbmZvVmlldyA6 IHB1YmxpYyBRVGV4dEJyb3dzZXIgewogCVFfT0JKRUNUCi0JdHlwZWRlZiBjbGFzcyBRM1RleHRC cm93c2VyIFBhcmVudDsKKwl0eXBlZGVmIGNsYXNzIFFUZXh0QnJvd3NlciBQYXJlbnQ7CiBwdWJs aWM6CiAJQ29uZmlnSW5mb1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0g MCk7CiAJYm9vbCBzaG93RGVidWcodm9pZCkgY29uc3QgeyByZXR1cm4gX3Nob3dEZWJ1ZzsgfQpA QCAtMjcxLDggKzI2MCw4IEBAIHByb3RlY3RlZDoKIAlRU3RyaW5nIGRlYnVnX2luZm8oc3RydWN0 IHN5bWJvbCAqc3ltKTsKIAlzdGF0aWMgUVN0cmluZyBwcmludF9maWx0ZXIoY29uc3QgUVN0cmlu ZyAmc3RyKTsKIAlzdGF0aWMgdm9pZCBleHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0 IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpOwotCVEzUG9wdXBNZW51KiBjcmVhdGVQb3B1 cE1lbnUoY29uc3QgUVBvaW50JiBwb3MpOwotCXZvaWQgY29udGVudHNDb250ZXh0TWVudUV2ZW50 KFFDb250ZXh0TWVudUV2ZW50ICplKTsKKwlRTWVudSAqY3JlYXRlU3RhbmRhcmRDb250ZXh0TWVu dShjb25zdCBRUG9pbnQgJiBwb3MpOworCXZvaWQgY29udGV4dE1lbnVFdmVudChRQ29udGV4dE1l bnVFdmVudCAqZSk7CiAKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJc3RydWN0IG1lbnUgKl9tZW51 OwpAQCAtMjk5LDEwICsyODgsMTAgQEAgcHJvdGVjdGVkOgogCXN0cnVjdCBzeW1ib2wgKipyZXN1 bHQ7CiB9OwogCi1jbGFzcyBDb25maWdNYWluV2luZG93IDogcHVibGljIFEzTWFpbldpbmRvdyB7 CitjbGFzcyBDb25maWdNYWluV2luZG93IDogcHVibGljIFFNYWluV2luZG93IHsKIAlRX09CSkVD VAogCi0Jc3RhdGljIFEzQWN0aW9uICpzYXZlQWN0aW9uOworCXN0YXRpYyBRQWN0aW9uICpzYXZl QWN0aW9uOwogCXN0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsKIHB1YmxpYzoKIAlDb25m aWdNYWluV2luZG93KHZvaWQpOwpAQCAtMzMxLDggKzMyMCwxMSBAQCBwcm90ZWN0ZWQ6CiAJQ29u ZmlnVmlldyAqY29uZmlnVmlldzsKIAlDb25maWdMaXN0ICpjb25maWdMaXN0OwogCUNvbmZpZ0lu Zm9WaWV3ICpoZWxwVGV4dDsKLQlRM1Rvb2xCYXIgKnRvb2xCYXI7Ci0JUTNBY3Rpb24gKmJhY2tB Y3Rpb247Ci0JUVNwbGl0dGVyKiBzcGxpdDE7Ci0JUVNwbGl0dGVyKiBzcGxpdDI7CisJUVRvb2xC YXIgKnRvb2xCYXI7CisJUUFjdGlvbiAqYmFja0FjdGlvbjsKKwlRQWN0aW9uICpzaW5nbGVWaWV3 QWN0aW9uOworCVFBY3Rpb24gKnNwbGl0Vmlld0FjdGlvbjsKKwlRQWN0aW9uICpmdWxsVmlld0Fj dGlvbjsKKwlRU3BsaXR0ZXIgKnNwbGl0MTsKKwlRU3BsaXR0ZXIgKnNwbGl0MjsKIH07CmRpZmYg LS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbCBiL3hlbi90b29s cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCmluZGV4IGYzZDNmYjQyYjguLmEyZTgzYWIx N2QgMTAwNzU1Ci0tLSBhL3hlbi90b29scy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCisr KyBiL3hlbi90b29scy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCkBAIC0xLDQgKzEsNCBA QAotIyEvdXNyL2Jpbi9wZXJsIC13CisjIS91c3IvYmluL2VudiBwZXJsCiAjCiAjIENvcHlyaWdo dCAyMDA1LTIwMDkgLSBTdGV2ZW4gUm9zdGVkdAogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKQEAgLTQyLDYgKzQyLDcgQEAKICMgICAg bXYgY29uZmlnX3N0cmlwIC5jb25maWcKICMgICAgbWFrZSBvbGRjb25maWcKICMKK3VzZSB3YXJu aW5nczsKIHVzZSBzdHJpY3Q7CiB1c2UgR2V0b3B0OjpMb25nOwogCkBAIC0xODgsNyArMTg5LDcg QEAgc3ViIHJlYWRfa2NvbmZpZyB7CiAJJGNvbnQgPSAwOwogCiAJIyBjb2xsZWN0IGFueSBLY29u ZmlnIHNvdXJjZXMKLQlpZiAoL15zb3VyY2VccyoiKC4qKSIvKSB7CisJaWYgKC9ec291cmNlXHMr Ij8oW14iXSspLykgewogCSAgICBteSAka2NvbmZpZyA9ICQxOwogCSAgICAjIHByZXZlbnQgcmVh ZGluZyB0d2ljZS4KIAkgICAgaWYgKCFkZWZpbmVkKCRyZWFkX2tjb25maWdzeyRrY29uZmlnfSkp IHsKQEAgLTIzNyw3ICsyMzgsNyBAQCBzdWIgcmVhZF9rY29uZmlnIHsKIAkgICAgfQogCiAJIyBj b25maWdzIHdpdGhvdXQgcHJvbXB0cyBtdXN0IGJlIHNlbGVjdGVkCi0JfSBlbHNpZiAoJHN0YXRl IG5lICJOT05FIiAmJiAvXlxzKnRyaXN0YXRlXHNcUy8pIHsKKwl9IGVsc2lmICgkc3RhdGUgbmUg Ik5PTkUiICYmIC9eXHMqKHRyaXN0YXRlXHMrXFN8cHJvbXB0XGIpLykgewogCSAgICAjIG5vdGUg aWYgdGhlIGNvbmZpZyBoYXMgYSBwcm9tcHQKIAkgICAgJHByb21wdHN7JGNvbmZpZ30gPSAxOwog CkBAIC0yNTYsOCArMjU3LDggQEAgc3ViIHJlYWRfa2NvbmZpZyB7CiAKIAkgICAgJGlmbGV2ZWwt LSBpZiAoJGlmbGV2ZWwpOwogCi0JIyBzdG9wIG9uICJoZWxwIgotCX0gZWxzaWYgKC9eXHMqaGVs cFxzKiQvKSB7CisJIyBzdG9wIG9uICJoZWxwIiBhbmQga2V5d29yZHMgdGhhdCBlbmQgYSBtZW51 IGVudHJ5CisJfSBlbHNpZiAoL15ccyooLS0tKT9oZWxwKC0tLSk/XHMqJC8gfHwgL14oY29tbWVu dHxjaG9pY2V8bWVudSlcYi8pIHsKIAkgICAgJHN0YXRlID0gIk5PTkUiOwogCX0KICAgICB9CkBA IC00NTQsNyArNDU1LDcgQEAgc3ViIHBhcnNlX2NvbmZpZ19kZXBlbmRzCiAJICAgICRwID1+IHMv XlteJHZhbGlkXSpbJHZhbGlkXSsvLzsKIAogCSAgICAjIFdlIG9ubHkgbmVlZCB0byBwcm9jZXNz IGlmIHRoZSBkZXBlbmQgY29uZmlnIGlzIGEgbW9kdWxlCi0JICAgIGlmICghZGVmaW5lZCgkb3Jp Z19jb25maWdzeyRjb25mfSkgfHwgISRvcmlnX2NvbmZpZ3N7Y29uZn0gZXEgIm0iKSB7CisJICAg IGlmICghZGVmaW5lZCgkb3JpZ19jb25maWdzeyRjb25mfSkgfHwgJG9yaWdfY29uZmlnc3skY29u Zn0gZXEgInkiKSB7CiAJCW5leHQ7CiAJICAgIH0KIApAQCAtNjEwLDYgKzYxMSw0MCBAQCBmb3Jl YWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsKIAluZXh0OwogICAgIH0KIAorICAgIGlmICgv Q09ORklHX01PRFVMRV9TSUdfS0VZPSIoLispIi8pIHsKKyAgICAgICAgbXkgJG9yaWdfY2VydCA9 ICQxOworICAgICAgICBteSAkZGVmYXVsdF9jZXJ0ID0gImNlcnRzL3NpZ25pbmdfa2V5LnBlbSI7 CisKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBsb2dpYyBpbiB0aGlzIHNjcmlwdCBzdGlsbCBt YXRjaGVzIHRoZSBvbmUgaW4gS2NvbmZpZworICAgICAgICBpZiAoIWRlZmluZWQoJGRlcGVuZHN7 Ik1PRFVMRV9TSUdfS0VZIn0pIHx8CisgICAgICAgICAgICAkZGVwZW5kc3siTU9EVUxFX1NJR19L RVkifSAhfiAvIlxRJGRlZmF1bHRfY2VydFxFIi8pIHsKKyAgICAgICAgICAgIHByaW50IFNUREVS UiAiV0FSTklORzogTU9EVUxFX1NJR19LRVkgYXNzZXJ0aW9uIGZhaWx1cmUsICIsCisgICAgICAg ICAgICAgICAgInVwZGF0ZSBuZWVkZWQgdG8gIiwgX19GSUxFX18sICIgbGluZSAiLCBfX0xJTkVf XywgIlxuIjsKKyAgICAgICAgICAgIHByaW50OworICAgICAgICB9IGVsc2lmICgkb3JpZ19jZXJ0 IG5lICRkZWZhdWx0X2NlcnQgJiYgISAtZiAkb3JpZ19jZXJ0KSB7CisgICAgICAgICAgICBwcmlu dCBTVERFUlIgIk1vZHVsZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGVuYWJsZWQgYnV0ICIsCisg ICAgICAgICAgICAgICAgIm1vZHVsZSBzaWduaW5nIGtleSBcIiRvcmlnX2NlcnRcIiBub3QgZm91 bmQuIFJlc2V0dGluZyAiLAorICAgICAgICAgICAgICAgICJzaWduaW5nIGtleSB0byBkZWZhdWx0 IHZhbHVlLlxuIjsKKyAgICAgICAgICAgIHByaW50ICJDT05GSUdfTU9EVUxFX1NJR19LRVk9XCIk ZGVmYXVsdF9jZXJ0XCJcbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludDsK KyAgICAgICAgfQorICAgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgvQ09ORklHX1NZU1RF TV9UUlVTVEVEX0tFWVM9IiguKykiLykgeworICAgICAgICBteSAkb3JpZ19rZXlzID0gJDE7CisK KyAgICAgICAgaWYgKCEgLWYgJG9yaWdfa2V5cykgeworICAgICAgICAgICAgcHJpbnQgU1RERVJS ICJTeXN0ZW0ga2V5cmluZyBlbmFibGVkIGJ1dCBrZXlzIFwiJG9yaWdfa2V5c1wiICIsCisgICAg ICAgICAgICAgICAgIm5vdCBmb3VuZC4gUmVzZXR0aW5nIGtleXMgdG8gZGVmYXVsdCB2YWx1ZS5c biI7CisgICAgICAgICAgICBwcmludCAiQ09ORklHX1NZU1RFTV9UUlVTVEVEX0tFWVM9XCJcIlxu IjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50OworICAgICAgICB9CisgICAg ICAgIG5leHQ7CisgICAgfQorCiAgICAgaWYgKC9eKENPTkZJRy4qKT0obXx5KS8pIHsKIAlpZiAo ZGVmaW5lZCgkY29uZmlnc3skMX0pKSB7CiAJICAgIGlmICgkbG9jYWx5ZXNjb25maWcpIHsKZGlm ZiAtLWdpdCBhL3hlbi90b29scy9rY29uZmlnL3N5bWJvbC5jIGIveGVuL3Rvb2xzL2tjb25maWcv c3ltYm9sLmMKaW5kZXggNTA4NzhkYzAyNS4uZjBiMmUzYjMxMCAxMDA2NDQKLS0tIGEveGVuL3Rv b2xzL2tjb25maWcvc3ltYm9sLmMKKysrIGIveGVuL3Rvb2xzL2tjb25maWcvc3ltYm9sLmMKQEAg LTc3LDcgKzc3LDcgQEAgY29uc3QgY2hhciAqc3ltX3R5cGVfbmFtZShlbnVtIHN5bWJvbF90eXBl IHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTX0JPT0xFQU46Ci0JCXJldHVybiAi Ym9vbGVhbiI7CisJCXJldHVybiAiYm9vbCI7CiAJY2FzZSBTX1RSSVNUQVRFOgogCQlyZXR1cm4g InRyaXN0YXRlIjsKIAljYXNlIFNfSU5UOgpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lk IHN5bV92YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCiAJCXNwcmludGYoc3RyLCAi JWxsZCIsIHZhbDIpOwogCWVsc2UKIAkJc3ByaW50ZihzdHIsICIweCVsbHgiLCB2YWwyKTsKLQlz eW0tPmN1cnIudmFsID0gc3RyZHVwKHN0cik7CisJc3ltLT5jdXJyLnZhbCA9IHhzdHJkdXAoc3Ry KTsKIH0KIAogc3RhdGljIHZvaWQgc3ltX3NldF9jaGFuZ2VkKHN0cnVjdCBzeW1ib2wgKnN5bSkK QEAgLTIwOSwxMiArMjA5LDI2IEBAIHN0YXRpYyB2b2lkIHN5bV9zZXRfYWxsX2NoYW5nZWQodm9p ZCkKIHN0YXRpYyB2b2lkIHN5bV9jYWxjX3Zpc2liaWxpdHkoc3RydWN0IHN5bWJvbCAqc3ltKQog ewogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpjaG9pY2Vfc3ltID0g TlVMTDsKIAl0cmlzdGF0ZSB0cmk7CiAKIAkvKiBhbnkgcHJvbXB0IHZpc2libGU/ICovCiAJdHJp ID0gbm87CisKKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQorCQljaG9pY2Vfc3ltID0g cHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisKIAlmb3JfYWxsX3By b21wdHMoc3ltLCBwcm9wKSB7CiAJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVl KHByb3AtPnZpc2libGUuZXhwcik7CisJCS8qCisJCSAqIFRyaXN0YXRlIGNob2ljZV92YWx1ZXMg d2l0aCB2aXNpYmlsaXR5ICdtb2QnIGFyZQorCQkgKiBub3QgdmlzaWJsZSBpZiB0aGUgY29ycmVz cG9uZGluZyBjaG9pY2UncyB2YWx1ZSBpcworCQkgKiAneWVzJy4KKwkJICovCisJCWlmIChjaG9p Y2Vfc3ltICYmIHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmCisJCSAgICBwcm9wLT52aXNpYmxl LnRyaSA9PSBtb2QgJiYgY2hvaWNlX3N5bS0+Y3Vyci50cmkgPT0geWVzKQorCQkJcHJvcC0+dmlz aWJsZS50cmkgPSBubzsKKwogCQl0cmkgPSBFWFBSX09SKHRyaSwgcHJvcC0+dmlzaWJsZS50cmkp OwogCX0KIAlpZiAodHJpID09IG1vZCAmJiAoc3ltLT50eXBlICE9IFNfVFJJU1RBVEUgfHwgbW9k dWxlc192YWwgPT0gbm8pKQpAQCAtMjI5LDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIHN5bV9jYWxj X3Zpc2liaWxpdHkoc3RydWN0IHN5bWJvbCAqc3ltKQogCXRyaSA9IHllczsKIAlpZiAoc3ltLT5k aXJfZGVwLmV4cHIpCiAJCXRyaSA9IGV4cHJfY2FsY192YWx1ZShzeW0tPmRpcl9kZXAuZXhwcik7 Ci0JaWYgKHRyaSA9PSBtb2QpCisJaWYgKHRyaSA9PSBtb2QgJiYgc3ltX2dldF90eXBlKHN5bSkg PT0gU19CT09MRUFOKQogCQl0cmkgPSB5ZXM7CiAJaWYgKHN5bS0+ZGlyX2RlcC50cmkgIT0gdHJp KSB7CiAJCXN5bS0+ZGlyX2RlcC50cmkgPSB0cmk7CkBAIC0yNDQsNiArMjU4LDE1IEBAIHN0YXRp YyB2b2lkIHN5bV9jYWxjX3Zpc2liaWxpdHkoc3RydWN0IHN5bWJvbCAqc3ltKQogCQlzeW0tPnJl dl9kZXAudHJpID0gdHJpOwogCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKIAl9CisJdHJpID0gbm87 CisJaWYgKHN5bS0+aW1wbGllZC5leHByICYmIHN5bS0+ZGlyX2RlcC50cmkgIT0gbm8pCisJCXRy aSA9IGV4cHJfY2FsY192YWx1ZShzeW0tPmltcGxpZWQuZXhwcik7CisJaWYgKHRyaSA9PSBtb2Qg JiYgc3ltX2dldF90eXBlKHN5bSkgPT0gU19CT09MRUFOKQorCQl0cmkgPSB5ZXM7CisJaWYgKHN5 bS0+aW1wbGllZC50cmkgIT0gdHJpKSB7CisJCXN5bS0+aW1wbGllZC50cmkgPSB0cmk7CisJCXN5 bV9zZXRfY2hhbmdlZChzeW0pOworCX0KIH0KIAogLyoKQEAgLTMxMCw2ICszMzMsMjcgQEAgc3Rh dGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jYWxjX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCiAJ cmV0dXJuIGRlZl9zeW07CiB9CiAKK3N0YXRpYyB2b2lkIHN5bV93YXJuX3VubWV0X2RlcChzdHJ1 Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IGdzdHIgZ3MgPSBzdHJfbmV3KCk7CisKKwlzdHJf cHJpbnRmKCZncywKKwkJICAgIlxuV0FSTklORzogdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyBk ZXRlY3RlZCBmb3IgJXNcbiIsCisJCSAgIHN5bS0+bmFtZSk7CisJc3RyX3ByaW50ZigmZ3MsCisJ CSAgICIgIERlcGVuZHMgb24gWyVjXTogIiwKKwkJICAgc3ltLT5kaXJfZGVwLnRyaSA9PSBtb2Qg PyAnbScgOiAnbicpOworCWV4cHJfZ3N0cl9wcmludChzeW0tPmRpcl9kZXAuZXhwciwgJmdzKTsK KwlzdHJfcHJpbnRmKCZncywgIlxuIik7CisKKwlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+ cmV2X2RlcC5leHByLCAmZ3MsIHllcywKKwkJCSAgICAgICAiICBTZWxlY3RlZCBieSBbeV06XG4i KTsKKwlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAmZ3MsIG1vZCwK KwkJCSAgICAgICAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKKworCWZwdXRzKHN0cl9nZXQoJmdz KSwgc3RkZXJyKTsKK30KKwogdm9pZCBzeW1fY2FsY192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0p CiB7CiAJc3RydWN0IHN5bWJvbF92YWx1ZSBuZXd2YWwsIG9sZHZhbDsKQEAgLTM0OCwxMSArMzky LDEzIEBAIHZvaWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQogCQlzeW0tPmN1 cnIudHJpID0gbm87CiAJCXJldHVybjsKIAl9Ci0JaWYgKCFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5 bSkpCi0JCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKKwlzeW0tPmZsYWdzICY9IH5TWU1C T0xfV1JJVEU7CiAKIAlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CiAKKwlpZiAoc3ltLT52aXNp YmxlICE9IG5vKQorCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwogCS8qIHNldCBkZWZh dWx0IGlmIHJlY3Vyc2l2ZWx5IGNhbGxlZCAqLwogCXN5bS0+Y3VyciA9IG5ld3ZhbDsKIApAQCAt MzY3LDcgKzQxMyw2IEBAIHZvaWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQog CQkJCS8qIGlmIHRoZSBzeW1ib2wgaXMgdmlzaWJsZSB1c2UgdGhlIHVzZXIgdmFsdWUKIAkJCQkg KiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB0cnkgdGhlIGRlZmF1bHQgdmFsdWUKIAkJCQkgKi8K LQkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKIAkJCQlpZiAoc3ltX2hhc192YWx1ZShz eW0pKSB7CiAJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX0FORChzeW0tPmRlZltTX0RFRl9VU0VSXS50 cmksCiAJCQkJCQkJICAgICAgc3ltLT52aXNpYmxlKTsKQEAgLTM3OSwzOCArNDI0LDMxIEBAIHZv aWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQogCQkJaWYgKCFzeW1faXNfY2hv aWNlKHN5bSkpIHsKIAkJCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKIAkJCQlp ZiAocHJvcCkgewotCQkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKIAkJCQkJbmV3dmFs LnRyaSA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5leHByKSwKIAkJCQkJCQkgICAg ICBwcm9wLT52aXNpYmxlLnRyaSk7CisJCQkJCWlmIChuZXd2YWwudHJpICE9IG5vKQorCQkJCQkJ c3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJfQorCQkJCWlmIChzeW0tPmltcGxpZWQu dHJpICE9IG5vKSB7CisJCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOworCQkJCQluZXd2 YWwudHJpID0gRVhQUl9PUihuZXd2YWwudHJpLCBzeW0tPmltcGxpZWQudHJpKTsKIAkJCQl9CiAJ CQl9CiAJCWNhbGNfbmV3dmFsOgotCQkJaWYgKHN5bS0+ZGlyX2RlcC50cmkgPT0gbm8gJiYgc3lt LT5yZXZfZGVwLnRyaSAhPSBubykgewotCQkJCXN0cnVjdCBleHByICplOwotCQkJCWUgPSBleHBy X3NpbXBsaWZ5X3VubWV0X2RlcChzeW0tPnJldl9kZXAuZXhwciwKLQkJCQkgICAgc3ltLT5kaXJf ZGVwLmV4cHIpOwotCQkJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogKCIpOwotCQkJCWV4cHJf ZnByaW50KGUsIHN0ZGVycik7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIpIHNlbGVjdHMgJXMgd2hp Y2ggaGFzIHVubWV0IGRpcmVjdCBkZXBlbmRlbmNpZXMgKCIsCi0JCQkJCXN5bS0+bmFtZSk7Ci0J CQkJZXhwcl9mcHJpbnQoc3ltLT5kaXJfZGVwLmV4cHIsIHN0ZGVycik7Ci0JCQkJZnByaW50Zihz dGRlcnIsICIpXG4iKTsKLQkJCQlleHByX2ZyZWUoZSk7Ci0JCQl9CisJCQlpZiAoc3ltLT5kaXJf ZGVwLnRyaSA8IHN5bS0+cmV2X2RlcC50cmkpCisJCQkJc3ltX3dhcm5fdW5tZXRfZGVwKHN5bSk7 CiAJCQluZXd2YWwudHJpID0gRVhQUl9PUihuZXd2YWwudHJpLCBzeW0tPnJldl9kZXAudHJpKTsK IAkJfQotCQlpZiAobmV3dmFsLnRyaSA9PSBtb2QgJiYgc3ltX2dldF90eXBlKHN5bSkgPT0gU19C T09MRUFOKQorCQlpZiAobmV3dmFsLnRyaSA9PSBtb2QgJiYKKwkJICAgIChzeW1fZ2V0X3R5cGUo c3ltKSA9PSBTX0JPT0xFQU4gfHwgc3ltLT5pbXBsaWVkLnRyaSA9PSB5ZXMpKQogCQkJbmV3dmFs LnRyaSA9IHllczsKIAkJYnJlYWs7CiAJY2FzZSBTX1NUUklORzoKIAljYXNlIFNfSEVYOgogCWNh c2UgU19JTlQ6Ci0JCWlmIChzeW0tPnZpc2libGUgIT0gbm8pIHsKLQkJCXN5bS0+ZmxhZ3MgfD0g U1lNQk9MX1dSSVRFOwotCQkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgewotCQkJCW5ld3ZhbC52 YWwgPSBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWw7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCWlmIChz eW0tPnZpc2libGUgIT0gbm8gJiYgc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQluZXd2YWwudmFs ID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCQkJYnJlYWs7CiAJCX0KIAkJcHJvcCA9IHN5 bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7CiAJCWlmIChwcm9wKSB7CkBAIC00ODQsNiArNTIyLDgg QEAgYm9vbCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwgdHJp c3RhdGUgdmFsKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKHN5bS0+dmlzaWJsZSA8PSBzeW0tPnJl dl9kZXAudHJpKQogCQlyZXR1cm4gZmFsc2U7CisJaWYgKHN5bS0+aW1wbGllZC50cmkgPT0geWVz ICYmIHZhbCA9PSBtb2QpCisJCXJldHVybiBmYWxzZTsKIAlpZiAoc3ltX2lzX2Nob2ljZV92YWx1 ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpCiAJCXJldHVybiB2YWwgPT0geWVzOwogCXJl dHVybiB2YWwgPj0gc3ltLT5yZXZfZGVwLnRyaSAmJiB2YWwgPD0gc3ltLT52aXNpYmxlOwpAQCAt NzM2LDYgKzc3NiwxMCBAQCBjb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN0cnVj dCBzeW1ib2wgKnN5bSkKIAlpZiAoc3ltLT50eXBlID09IFNfQk9PTEVBTiAmJiB2YWwgPT0gbW9k KQogCQl2YWwgPSB5ZXM7CiAKKwkvKiBhZGp1c3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhpcyBz eW1ib2wgaXMgaW1wbGllZCBieSBhbm90aGVyICovCisJaWYgKHZhbCA8IHN5bS0+aW1wbGllZC50 cmkpCisJCXZhbCA9IHN5bS0+aW1wbGllZC50cmk7CisKIAlzd2l0Y2ggKHN5bS0+dHlwZSkgewog CWNhc2UgU19CT09MRUFOOgogCWNhc2UgU19UUklTVEFURToKQEAgLTgxNyw3ICs4NjEsNyBAQCBz dHJ1Y3Qgc3ltYm9sICpzeW1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncykKIAkJ CQkgICA6ICEoc3ltYm9sLT5mbGFncyAmIChTWU1CT0xfQ09OU1R8U1lNQk9MX0NIT0lDRSkpKSkK IAkJCQlyZXR1cm4gc3ltYm9sOwogCQl9Ci0JCW5ld19uYW1lID0gc3RyZHVwKG5hbWUpOworCQlu ZXdfbmFtZSA9IHhzdHJkdXAobmFtZSk7CiAJfSBlbHNlIHsKIAkJbmV3X25hbWUgPSBOVUxMOwog CQloYXNoID0gMDsKQEAgLTg2NywxMiArOTExLDE2IEBAIHN0cnVjdCBzeW1ib2wgKnN5bV9maW5k KGNvbnN0IGNoYXIgKm5hbWUpCiAgKiBuYW1lIHRvIGJlIGV4cGFuZGVkIHNoYWxsIGJlIHByZWZp eGVkIGJ5IGEgJyQnLiBVbmtub3duIHN5bWJvbCBleHBhbmRzIHRvCiAgKiB0aGUgZW1wdHkgc3Ry aW5nLgogICovCi1jb25zdCBjaGFyICpzeW1fZXhwYW5kX3N0cmluZ192YWx1ZShjb25zdCBjaGFy ICppbikKK2NoYXIgKnN5bV9leHBhbmRfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIgKmluKQogewog CWNvbnN0IGNoYXIgKnNyYzsKIAljaGFyICpyZXM7CiAJc2l6ZV90IHJlc2xlbjsKIAorCS8qCisJ ICogTm90ZTogJ2luJyBtaWdodCBjb21lIGZyb20gYSB0b2tlbiB0aGF0J3MgYWJvdXQgdG8gYmUK KwkgKiBmcmVlZCwgc28gbWFrZSBzdXJlIHRvIGFsd2F5cyBhbGxvY2F0ZSBhIG5ldyBzdHJpbmcK KwkgKi8KIAlyZXNsZW4gPSBzdHJsZW4oaW4pICsgMTsKIAlyZXMgPSB4bWFsbG9jKHJlc2xlbik7 CiAJcmVzWzBdID0gJ1wwJzsKQEAgLTkwMCw3ICs5NDgsNyBAQCBjb25zdCBjaGFyICpzeW1fZXhw YW5kX3N0cmluZ192YWx1ZShjb25zdCBjaGFyICppbikKIAkJbmV3bGVuID0gc3RybGVuKHJlcykg KyBzdHJsZW4oc3ltdmFsKSArIHN0cmxlbihzcmMpICsgMTsKIAkJaWYgKG5ld2xlbiA+IHJlc2xl bikgewogCQkJcmVzbGVuID0gbmV3bGVuOwotCQkJcmVzID0gcmVhbGxvYyhyZXMsIHJlc2xlbik7 CisJCQlyZXMgPSB4cmVhbGxvYyhyZXMsIHJlc2xlbik7CiAJCX0KIAogCQlzdHJjYXQocmVzLCBz eW12YWwpOwpAQCAtMTAyNyw3ICsxMDc1LDcgQEAgc3RydWN0IHN5bWJvbCAqKnN5bV9yZV9zZWFy Y2goY29uc3QgY2hhciAqcGF0dGVybikKIAl9CiAJaWYgKHN5bV9tYXRjaF9hcnIpIHsKIAkJcXNv cnQoc3ltX21hdGNoX2FyciwgY250LCBzaXplb2Yoc3RydWN0IHN5bV9tYXRjaCksIHN5bV9yZWxf Y29tcCk7Ci0JCXN5bV9hcnIgPSBtYWxsb2MoKGNudCsxKSAqIHNpemVvZihzdHJ1Y3Qgc3ltYm9s KSk7CisJCXN5bV9hcnIgPSBtYWxsb2MoKGNudCsxKSAqIHNpemVvZihzdHJ1Y3Qgc3ltYm9sICop KTsKIAkJaWYgKCFzeW1fYXJyKQogCQkJZ290byBzeW1fcmVfc2VhcmNoX2ZyZWU7CiAJCWZvciAo aSA9IDA7IGkgPCBjbnQ7IGkrKykKQEAgLTExMTYsNiArMTE2NCw3IEBAIHN0YXRpYyB2b2lkIHN5 bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9zeW0pCiAJCWlmIChz dGFjay0+c3ltID09IGxhc3Rfc3ltKQogCQkJZnByaW50ZihzdGRlcnIsICIlczolZDplcnJvcjog cmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhXG4iLAogCQkJCXByb3AtPmZpbGUtPm5hbWUs IHByb3AtPmxpbmVubyk7CisKIAkJaWYgKHN0YWNrLT5leHByKSB7CiAJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIHZhbHVlIGNvbnRhaW5zICVzXG4iLAogCQkJCXByb3At PmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKQEAgLTExNDUsNiArMTE5NCwxMSBAQCBzdGF0aWMg dm9pZCBzeW1fY2hlY2tfcHJpbnRfcmVjdXJzaXZlKHN0cnVjdCBzeW1ib2wgKmxhc3Rfc3ltKQog CQl9CiAJfQogCisJZnByaW50ZihzdGRlcnIsCisJCSJGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRv IERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0XG4iCisJCSJzdWJzZWN0 aW9uIFwiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9uc1wiXG4iCisJCSJc biIpOworCiAJaWYgKGNoZWNrX3RvcCA9PSAmY3Zfc3RhY2spCiAJCWRlcF9zdGFja19yZW1vdmUo KTsKIH0KQEAgLTExNzksNyArMTIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hl Y2tfZXhwcl9kZXBzKHN0cnVjdCBleHByICplKQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQlw cmludGYoIk9vcHMhIEhvdyB0byBjaGVjayAlZD9cbiIsIGUtPnR5cGUpOworCWZwcmludGYoc3Rk ZXJyLCAiT29wcyEgSG93IHRvIGNoZWNrICVkP1xuIiwgZS0+dHlwZSk7CiAJcmV0dXJuIE5VTEw7 CiB9CiAKQEAgLTEzMzYsNiArMTM5MCw4IEBAIGNvbnN0IGNoYXIgKnByb3BfZ2V0X3R5cGVfbmFt ZShlbnVtIHByb3BfdHlwZSB0eXBlKQogCQlyZXR1cm4gImNob2ljZSI7CiAJY2FzZSBQX1NFTEVD VDoKIAkJcmV0dXJuICJzZWxlY3QiOworCWNhc2UgUF9JTVBMWToKKwkJcmV0dXJuICJpbXBseSI7 CiAJY2FzZSBQX1JBTkdFOgogCQlyZXR1cm4gInJhbmdlIjsKIAljYXNlIFBfU1lNQk9MOgpkaWZm IC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvdXRpbC5jIGIveGVuL3Rvb2xzL2tjb25maWcvdXRp bC5jCmluZGV4IDBlNzYwNDI0NzMuLmM2ZjZlMjFiODAgMTAwNjQ0Ci0tLSBhL3hlbi90b29scy9r Y29uZmlnL3V0aWwuYworKysgYi94ZW4vdG9vbHMva2NvbmZpZy91dGlsLmMKQEAgLTE0LDExICsx NCwxMSBAQAogc3RydWN0IGZpbGUgKmZpbGVfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJ c3RydWN0IGZpbGUgKmZpbGU7Ci0JY29uc3QgY2hhciAqZmlsZV9uYW1lID0gc3ltX2V4cGFuZF9z dHJpbmdfdmFsdWUobmFtZSk7CisJY2hhciAqZmlsZV9uYW1lID0gc3ltX2V4cGFuZF9zdHJpbmdf dmFsdWUobmFtZSk7CiAKIAlmb3IgKGZpbGUgPSBmaWxlX2xpc3Q7IGZpbGU7IGZpbGUgPSBmaWxl LT5uZXh0KSB7CiAJCWlmICghc3RyY21wKG5hbWUsIGZpbGUtPm5hbWUpKSB7Ci0JCQlmcmVlKCh2 b2lkICopZmlsZV9uYW1lKTsKKwkJCWZyZWUoZmlsZV9uYW1lKTsKIAkJCXJldHVybiBmaWxlOwog CQl9CiAJfQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAq Z3MsIGNvbnN0IGNoYXIgKnMpCiAJaWYgKHMpIHsKIAkJbCA9IHN0cmxlbihncy0+cykgKyBzdHJs ZW4ocykgKyAxOwogCQlpZiAobCA+IGdzLT5sZW4pIHsKLQkJCWdzLT5zICAgPSByZWFsbG9jKGdz LT5zLCBsKTsKKwkJCWdzLT5zID0geHJlYWxsb2MoZ3MtPnMsIGwpOwogCQkJZ3MtPmxlbiA9IGw7 CiAJCX0KIAkJc3RyY2F0KGdzLT5zLCBzKTsKQEAgLTE0NSwzICsxNDUsMjMgQEAgdm9pZCAqeGNh bGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQogCWZwcmludGYoc3RkZXJyLCAiT3V0IG9m IG1lbW9yeS5cbiIpOwogCWV4aXQoMSk7CiB9CisKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnAsIHNp emVfdCBzaXplKQoreworCXAgPSByZWFsbG9jKHAsIHNpemUpOworCWlmIChwKQorCQlyZXR1cm4g cDsKKwlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkuXG4iKTsKKwlleGl0KDEpOworfQor CitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciAqcDsKKworCXAgPSBzdHJk dXAocyk7CisJaWYgKHApCisJCXJldHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1l bW9yeS5cbiIpOworCWV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy96 Y29uZi5ncGVyZiBiL3hlbi90b29scy9rY29uZmlnL3pjb25mLmdwZXJmCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBhYzQ5OGYwMWI0Li4wMDAwMDAwMDAwCi0tLSBhL3hlbi90b29scy9r Y29uZmlnL3pjb25mLmdwZXJmCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotJWxhbmd1 YWdlPUFOU0ktQwotJWRlZmluZSBoYXNoLWZ1bmN0aW9uLW5hbWUga2NvbmZfaWRfaGFzaAotJWRl ZmluZSBsb29rdXAtZnVuY3Rpb24tbmFtZSBrY29uZl9pZF9sb29rdXAKLSVkZWZpbmUgc3RyaW5n LXBvb2wtbmFtZSBrY29uZl9pZF9zdHJpbmdzCi0lY29tcGFyZS1zdHJuY21wCi0lZW51bQotJXBp YwotJXN0cnVjdC10eXBlCi0KLXN0cnVjdCBrY29uZl9pZDsKLQotc3RhdGljIGNvbnN0IHN0cnVj dCBrY29uZl9pZCAqa2NvbmZfaWRfbG9va3VwKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVn aXN0ZXIgdW5zaWduZWQgaW50IGxlbik7Ci0KLSUlCi1tYWlubWVudSwJVF9NQUlOTUVOVSwJVEZf Q09NTUFORAotbWVudSwJCVRfTUVOVSwJCVRGX0NPTU1BTkQKLWVuZG1lbnUsCVRfRU5ETUVOVSwJ VEZfQ09NTUFORAotc291cmNlLAkJVF9TT1VSQ0UsCVRGX0NPTU1BTkQKLWNob2ljZSwJCVRfQ0hP SUNFLAlURl9DT01NQU5ECi1lbmRjaG9pY2UsCVRfRU5EQ0hPSUNFLAlURl9DT01NQU5ECi1jb21t ZW50LAlUX0NPTU1FTlQsCVRGX0NPTU1BTkQKLWNvbmZpZywJCVRfQ09ORklHLAlURl9DT01NQU5E Ci1tZW51Y29uZmlnLAlUX01FTlVDT05GSUcsCVRGX0NPTU1BTkQKLWhlbHAsCQlUX0hFTFAsCQlU Rl9DT01NQU5ECi0tLS1oZWxwLS0tLAlUX0hFTFAsCQlURl9DT01NQU5ECi1pZiwJCVRfSUYsCQlU Rl9DT01NQU5EfFRGX1BBUkFNCi1lbmRpZiwJCVRfRU5ESUYsCVRGX0NPTU1BTkQKLWRlcGVuZHMs CVRfREVQRU5EUywJVEZfQ09NTUFORAotb3B0aW9uYWwsCVRfT1BUSU9OQUwsCVRGX0NPTU1BTkQK LWRlZmF1bHQsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19VTktOT1dOCi1wcm9tcHQsCQlUX1BS T01QVCwJVEZfQ09NTUFORAotdHJpc3RhdGUsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfVFJJU1RB VEUKLWRlZl90cmlzdGF0ZSwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1RSSVNUQVRFCi1ib29s LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOCi1ib29sZWFuLAlUX1RZUEUsCQlURl9D T01NQU5ELCBTX0JPT0xFQU4KLWRlZl9ib29sLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfQk9P TEVBTgotaW50LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19JTlQKLWhleCwJCVRfVFlQRSwJCVRG X0NPTU1BTkQsIFNfSEVYCi1zdHJpbmcsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX1NUUklORwot c2VsZWN0LAkJVF9TRUxFQ1QsCVRGX0NPTU1BTkQKLXJhbmdlLAkJVF9SQU5HRSwJVEZfQ09NTUFO RAotdmlzaWJsZSwJVF9WSVNJQkxFLAlURl9DT01NQU5ECi1vcHRpb24sCQlUX09QVElPTiwJVEZf Q09NTUFORAotb24sCQlUX09OLAkJVEZfUEFSQU0KLW1vZHVsZXMsCVRfT1BUX01PRFVMRVMsCVRG X09QVElPTgotZGVmY29uZmlnX2xpc3QsCVRfT1BUX0RFRkNPTkZJR19MSVNULFRGX09QVElPTgot ZW52LAkJVF9PUFRfRU5WLAlURl9PUFRJT04KLWFsbG5vY29uZmlnX3ksCVRfT1BUX0FMTE5PQ09O RklHX1ksVEZfT1BUSU9OCi0lJQpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvemNvbmYu aGFzaC5jX3NoaXBwZWQgYi94ZW4vdG9vbHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYwYTYyZGYyYi4uMDAwMDAwMDAwMAotLS0g YS94ZW4vdG9vbHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAorKysgL2Rldi9udWxsCkBA IC0xLDI5MyArMCwwIEBACi0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9u IDMuMC40ICovCi0vKiBDb21tYW5kLWxpbmU6IGdwZXJmIC10IC0tb3V0cHV0LWZpbGUgc2NyaXB0 cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkIC1hIC1DIC1FIC1nIC1rICcxLDMsJCcgLXAg LXQgc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmICAqLwotCi0jaWYgISgoJyAnID09IDMyKSAm JiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCi0gICAgICAmJiAo JyUnID09IDM3KSAmJiAoJyYnID09IDM4KSAmJiAoJ1wnJyA9PSAzOSkgJiYgKCcoJyA9PSA0MCkg XAotICAgICAgJiYgKCcpJyA9PSA0MSkgJiYgKCcqJyA9PSA0MikgJiYgKCcrJyA9PSA0MykgJiYg KCcsJyA9PSA0NCkgXAotICAgICAgJiYgKCctJyA9PSA0NSkgJiYgKCcuJyA9PSA0NikgJiYgKCcv JyA9PSA0NykgJiYgKCcwJyA9PSA0OCkgXAotICAgICAgJiYgKCcxJyA9PSA0OSkgJiYgKCcyJyA9 PSA1MCkgJiYgKCczJyA9PSA1MSkgJiYgKCc0JyA9PSA1MikgXAotICAgICAgJiYgKCc1JyA9PSA1 MykgJiYgKCc2JyA9PSA1NCkgJiYgKCc3JyA9PSA1NSkgJiYgKCc4JyA9PSA1NikgXAotICAgICAg JiYgKCc5JyA9PSA1NykgJiYgKCc6JyA9PSA1OCkgJiYgKCc7JyA9PSA1OSkgJiYgKCc8JyA9PSA2 MCkgXAotICAgICAgJiYgKCc9JyA9PSA2MSkgJiYgKCc+JyA9PSA2MikgJiYgKCc/JyA9PSA2Mykg JiYgKCdBJyA9PSA2NSkgXAotICAgICAgJiYgKCdCJyA9PSA2NikgJiYgKCdDJyA9PSA2NykgJiYg KCdEJyA9PSA2OCkgJiYgKCdFJyA9PSA2OSkgXAotICAgICAgJiYgKCdGJyA9PSA3MCkgJiYgKCdH JyA9PSA3MSkgJiYgKCdIJyA9PSA3MikgJiYgKCdJJyA9PSA3MykgXAotICAgICAgJiYgKCdKJyA9 PSA3NCkgJiYgKCdLJyA9PSA3NSkgJiYgKCdMJyA9PSA3NikgJiYgKCdNJyA9PSA3NykgXAotICAg ICAgJiYgKCdOJyA9PSA3OCkgJiYgKCdPJyA9PSA3OSkgJiYgKCdQJyA9PSA4MCkgJiYgKCdRJyA9 PSA4MSkgXAotICAgICAgJiYgKCdSJyA9PSA4MikgJiYgKCdTJyA9PSA4MykgJiYgKCdUJyA9PSA4 NCkgJiYgKCdVJyA9PSA4NSkgXAotICAgICAgJiYgKCdWJyA9PSA4NikgJiYgKCdXJyA9PSA4Nykg JiYgKCdYJyA9PSA4OCkgJiYgKCdZJyA9PSA4OSkgXAotICAgICAgJiYgKCdaJyA9PSA5MCkgJiYg KCdbJyA9PSA5MSkgJiYgKCdcXCcgPT0gOTIpICYmICgnXScgPT0gOTMpIFwKLSAgICAgICYmICgn XicgPT0gOTQpICYmICgnXycgPT0gOTUpICYmICgnYScgPT0gOTcpICYmICgnYicgPT0gOTgpIFwK LSAgICAgICYmICgnYycgPT0gOTkpICYmICgnZCcgPT0gMTAwKSAmJiAoJ2UnID09IDEwMSkgJiYg KCdmJyA9PSAxMDIpIFwKLSAgICAgICYmICgnZycgPT0gMTAzKSAmJiAoJ2gnID09IDEwNCkgJiYg KCdpJyA9PSAxMDUpICYmICgnaicgPT0gMTA2KSBcCi0gICAgICAmJiAoJ2snID09IDEwNykgJiYg KCdsJyA9PSAxMDgpICYmICgnbScgPT0gMTA5KSAmJiAoJ24nID09IDExMCkgXAotICAgICAgJiYg KCdvJyA9PSAxMTEpICYmICgncCcgPT0gMTEyKSAmJiAoJ3EnID09IDExMykgJiYgKCdyJyA9PSAx MTQpIFwKLSAgICAgICYmICgncycgPT0gMTE1KSAmJiAoJ3QnID09IDExNikgJiYgKCd1JyA9PSAx MTcpICYmICgndicgPT0gMTE4KSBcCi0gICAgICAmJiAoJ3cnID09IDExOSkgJiYgKCd4JyA9PSAx MjApICYmICgneScgPT0gMTIxKSAmJiAoJ3onID09IDEyMikgXAotICAgICAgJiYgKCd7JyA9PSAx MjMpICYmICgnfCcgPT0gMTI0KSAmJiAoJ30nID09IDEyNSkgJiYgKCd+JyA9PSAxMjYpKQotLyog VGhlIGNoYXJhY3RlciBzZXQgaXMgbm90IGJhc2VkIG9uIElTTy02NDYuICAqLwotI2Vycm9yICJn cGVyZiBnZW5lcmF0ZWQgdGFibGVzIGRvbid0IHdvcmsgd2l0aCB0aGlzIGV4ZWN1dGlvbiBjaGFy YWN0ZXIgc2V0LiBQbGVhc2UgcmVwb3J0IGEgYnVnIHRvIDxidWctZ251LWdwZXJmQGdudS5vcmc+ LiIKLSNlbmRpZgotCi0jbGluZSAxMCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotc3Ry dWN0IGtjb25mX2lkOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGtjb25mX2lkICprY29uZl9pZF9s b29rdXAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVu KTsKLS8qIG1heGltdW0ga2V5IHJhbmdlID0gNzEsIGR1cGxpY2F0ZXMgPSAwICovCi0KLSNpZmRl ZiBfX0dOVUNfXwotX19pbmxpbmUKLSNlbHNlCi0jaWZkZWYgX19jcGx1c3BsdXMKLWlubGluZQot I2VuZGlmCi0jZW5kaWYKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWtjb25mX2lkX2hhc2ggKHJlZ2lz dGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbikKLXsKLSAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXNzb192YWx1ZXNbXSA9Ci0gICAgewotICAgICAgNzMs IDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3 MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMs IDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3 MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsICAwLCA3MywgNzMsIDczLCA3MywKLSAg ICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDcz LCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3Mywg NzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDcz LCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsICA1LCAyNSwg MjUsCi0gICAgICAgMCwgIDAsICAwLCAgNSwgIDAsICAwLCA3MywgNzMsICA1LCAgMCwKLSAgICAg IDEwLCAgNSwgNDUsIDczLCAyMCwgMjAsICAwLCAxNSwgMTUsIDczLAotICAgICAgMjAsICA1LCA3 MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMs IDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3 MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMs Ci0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDcz LCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3Mywg NzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDcz LCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3Mywg NzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0g ICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3 MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMs IDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczCi0g ICAgfTsKLSAgcmVnaXN0ZXIgaW50IGh2YWwgPSBsZW47Ci0KLSAgc3dpdGNoIChodmFsKQotICAg IHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGh2YWwgKz0gYXNzb192YWx1ZXNbKHVuc2lnbmVk IGNoYXIpc3RyWzJdXTsKLSAgICAgIC8qRkFMTFRIUk9VR0gqLwotICAgICAgY2FzZSAyOgotICAg ICAgY2FzZSAxOgotICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0 clswXV07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgcmV0dXJuIGh2YWwgKyBhc3NvX3ZhbHVl c1sodW5zaWduZWQgY2hhcilzdHJbbGVuIC0gMV1dOwotfQotCi1zdHJ1Y3Qga2NvbmZfaWRfc3Ry aW5nc190Ci0gIHsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMltzaXplb2YoImlmIild OwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzW3NpemVvZigiaW50IildOwotICAgIGNo YXIga2NvbmZfaWRfc3RyaW5nc19zdHI1W3NpemVvZigiZW5kaWYiKV07Ci0gICAgY2hhciBrY29u Zl9pZF9zdHJpbmdzX3N0cjdbc2l6ZW9mKCJkZWZhdWx0IildOwotICAgIGNoYXIga2NvbmZfaWRf c3RyaW5nc19zdHI4W3NpemVvZigidHJpc3RhdGUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJp bmdzX3N0cjlbc2l6ZW9mKCJlbmRjaG9pY2UiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdz X3N0cjEwW3NpemVvZigiLS0taGVscC0tLSIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nf c3RyMTJbc2l6ZW9mKCJkZWZfdHJpc3RhdGUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdz X3N0cjEzW3NpemVvZigiZGVmX2Jvb2wiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0 cjE0W3NpemVvZigiZGVmY29uZmlnX2xpc3QiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdz X3N0cjE3W3NpemVvZigib24iKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE4W3Np emVvZigib3B0aW9uYWwiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIxW3NpemVv Zigib3B0aW9uIildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyMltzaXplb2YoImVu ZG1lbnUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIzW3NpemVvZigibWFpbm1l bnUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjI1W3NpemVvZigibWVudWNvbmZp ZyIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjdbc2l6ZW9mKCJtb2R1bGVzIild OwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyOFtzaXplb2YoImFsbG5vY29uZmlnX3ki KV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjI5W3NpemVvZigibWVudSIpXTsKLSAg ICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzFbc2l6ZW9mKCJzZWxlY3QiKV07Ci0gICAgY2hh ciBrY29uZl9pZF9zdHJpbmdzX3N0cjMyW3NpemVvZigiY29tbWVudCIpXTsKLSAgICBjaGFyIGtj b25mX2lkX3N0cmluZ3Nfc3RyMzNbc2l6ZW9mKCJlbnYiKV07Ci0gICAgY2hhciBrY29uZl9pZF9z dHJpbmdzX3N0cjM1W3NpemVvZigicmFuZ2UiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdz X3N0cjM2W3NpemVvZigiY2hvaWNlIildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIz OVtzaXplb2YoImJvb2wiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjQxW3NpemVv Zigic291cmNlIildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0MltzaXplb2YoInZp c2libGUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjQzW3NpemVvZigiaGV4Iild OwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0NltzaXplb2YoImNvbmZpZyIpXTsKLSAg ICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDdbc2l6ZW9mKCJib29sZWFuIildOwotICAgIGNo YXIga2NvbmZfaWRfc3RyaW5nc19zdHI1MVtzaXplb2YoInN0cmluZyIpXTsKLSAgICBjaGFyIGtj b25mX2lkX3N0cmluZ3Nfc3RyNTRbc2l6ZW9mKCJoZWxwIildOwotICAgIGNoYXIga2NvbmZfaWRf c3RyaW5nc19zdHI1NltzaXplb2YoInByb21wdCIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmlu Z3Nfc3RyNzJbc2l6ZW9mKCJkZXBlbmRzIildOwotICB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCBr Y29uZl9pZF9zdHJpbmdzX3Qga2NvbmZfaWRfc3RyaW5nc19jb250ZW50cyA9Ci0gIHsKLSAgICAi aWYiLAotICAgICJpbnQiLAotICAgICJlbmRpZiIsCi0gICAgImRlZmF1bHQiLAotICAgICJ0cmlz dGF0ZSIsCi0gICAgImVuZGNob2ljZSIsCi0gICAgIi0tLWhlbHAtLS0iLAotICAgICJkZWZfdHJp c3RhdGUiLAotICAgICJkZWZfYm9vbCIsCi0gICAgImRlZmNvbmZpZ19saXN0IiwKLSAgICAib24i LAotICAgICJvcHRpb25hbCIsCi0gICAgIm9wdGlvbiIsCi0gICAgImVuZG1lbnUiLAotICAgICJt YWlubWVudSIsCi0gICAgIm1lbnVjb25maWciLAotICAgICJtb2R1bGVzIiwKLSAgICAiYWxsbm9j b25maWdfeSIsCi0gICAgIm1lbnUiLAotICAgICJzZWxlY3QiLAotICAgICJjb21tZW50IiwKLSAg ICAiZW52IiwKLSAgICAicmFuZ2UiLAotICAgICJjaG9pY2UiLAotICAgICJib29sIiwKLSAgICAi c291cmNlIiwKLSAgICAidmlzaWJsZSIsCi0gICAgImhleCIsCi0gICAgImNvbmZpZyIsCi0gICAg ImJvb2xlYW4iLAotICAgICJzdHJpbmciLAotICAgICJoZWxwIiwKLSAgICAicHJvbXB0IiwKLSAg ICAiZGVwZW5kcyIKLSAgfTsKLSNkZWZpbmUga2NvbmZfaWRfc3RyaW5ncyAoKGNvbnN0IGNoYXIg KikgJmtjb25mX2lkX3N0cmluZ3NfY29udGVudHMpCi0jaWZkZWYgX19HTlVDX18KLV9faW5saW5l Ci0jaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXyB8fCBkZWZpbmVkIF9fR05VQ19HTlVf SU5MSU5FX18KLV9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCi0jZW5kaWYKLSNlbmRp ZgotY29uc3Qgc3RydWN0IGtjb25mX2lkICoKLWtjb25mX2lkX2xvb2t1cCAocmVnaXN0ZXIgY29u c3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQotewotICBlbnVtCi0gICAg ewotICAgICAgVE9UQUxfS0VZV09SRFMgPSAzNCwKLSAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDIs Ci0gICAgICBNQVhfV09SRF9MRU5HVEggPSAxNCwKLSAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMiwK LSAgICAgIE1BWF9IQVNIX1ZBTFVFID0gNzIKLSAgICB9OwotCi0gIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qga2NvbmZfaWQgd29yZGxpc3RbXSA9Ci0gICAgewotICAgICAgey0xfSwgey0xfSwKLSNsaW5l IDI2ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChz dHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMiwJCVRf SUYsCQlURl9DT01NQU5EfFRGX1BBUkFNfSwKLSNsaW5lIDM3ICJzY3JpcHRzL2tjb25maWcvemNv bmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190 ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMywJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSU5U fSwKLSAgICAgIHstMX0sCi0jbGluZSAyNyAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgot ICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29u Zl9pZF9zdHJpbmdzX3N0cjUsCQlUX0VORElGLAlURl9DT01NQU5EfSwKLSAgICAgIHstMX0sCi0j bGluZSAzMCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcp Jigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjcs CVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19VTktOT1dOfSwKLSNsaW5lIDMyICJzY3JpcHRzL2tj b25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRf c3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyOCwJVF9UWVBFLAkJVEZfQ09NTUFO RCwgU19UUklTVEFURX0sCi0jbGluZSAyMCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgot ICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29u Zl9pZF9zdHJpbmdzX3N0cjksCVRfRU5EQ0hPSUNFLAlURl9DT01NQU5EfSwKLSNsaW5lIDI1ICJz Y3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qg a2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTAsCVRfSEVMUCwJ CVRGX0NPTU1BTkR9LAotICAgICAgey0xfSwKLSNsaW5lIDMzICJzY3JpcHRzL2tjb25maWcvemNv bmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190 ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTIsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19U UklTVEFURX0sCi0jbGluZSAzNiAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAg eyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9z dHJpbmdzX3N0cjEzLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfQk9PTEVBTn0sCi0jbGluZSA0 NiAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3Ry dWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE0LAlUX09Q VF9ERUZDT05GSUdfTElTVCxURl9PUFRJT059LAotICAgICAgey0xfSwgey0xfSwKLSNsaW5lIDQ0 ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1 Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTcsCQlUX09O LAkJVEZfUEFSQU19LAotI2xpbmUgMjkgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAg ICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZf aWRfc3RyaW5nc19zdHIxOCwJVF9PUFRJT05BTCwJVEZfQ09NTUFORH0sCi0gICAgICB7LTF9LCB7 LTF9LAotI2xpbmUgNDMgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50 KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5n c19zdHIyMSwJCVRfT1BUSU9OLAlURl9DT01NQU5EfSwKLSNsaW5lIDE3ICJzY3JpcHRzL2tjb25m aWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3Ry aW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjIsCVRfRU5ETUVOVSwJVEZfQ09NTUFO RH0sCi0jbGluZSAxNSAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQp KGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdz X3N0cjIzLAlUX01BSU5NRU5VLAlURl9DT01NQU5EfSwKLSAgICAgIHstMX0sCi0jbGluZSAyMyAi c2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0 IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI1LAlUX01FTlVD T05GSUcsCVRGX0NPTU1BTkR9LAotICAgICAgey0xfSwKLSNsaW5lIDQ1ICJzY3JpcHRzL2tjb25m aWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3Ry aW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjcsCVRfT1BUX01PRFVMRVMsCVRGX09Q VElPTn0sCi0jbGluZSA0OCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhp bnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJp bmdzX3N0cjI4LAlUX09QVF9BTExOT0NPTkZJR19ZLFRGX09QVElPTn0sCi0jbGluZSAxNiAic2Ny aXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtj b25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI5LAkJVF9NRU5VLAkJ VEZfQ09NTUFORH0sCi0gICAgICB7LTF9LAotI2xpbmUgNDAgInNjcmlwdHMva2NvbmZpZy96Y29u Zi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3Qg KikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzMSwJCVRfU0VMRUNULAlURl9DT01NQU5EfSwKLSNs aW5lIDIxICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykm KChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzIs CVRfQ09NTUVOVCwJVEZfQ09NTUFORH0sCi0jbGluZSA0NyAic2NyaXB0cy9rY29uZmlnL3pjb25m LmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAq KTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjMzLAkJVF9PUFRfRU5WLAlURl9PUFRJT059LAotICAg ICAgey0xfSwKLSNsaW5lIDQxICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7 KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0 cmluZ3Nfc3RyMzUsCQlUX1JBTkdFLAlURl9DT01NQU5EfSwKLSNsaW5lIDE5ICJzY3JpcHRzL2tj b25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRf c3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzYsCQlUX0NIT0lDRSwJVEZfQ09N TUFORH0sCi0gICAgICB7LTF9LCB7LTF9LAotI2xpbmUgMzQgInNjcmlwdHMva2NvbmZpZy96Y29u Zi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3Qg KikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzOSwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9P TEVBTn0sCi0gICAgICB7LTF9LAotI2xpbmUgMTggInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVy ZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+ a2NvbmZfaWRfc3RyaW5nc19zdHI0MSwJCVRfU09VUkNFLAlURl9DT01NQU5EfSwKLSNsaW5lIDQy ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1 Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDIsCVRfVklT SUJMRSwJVEZfQ09NTUFORH0sCi0jbGluZSAzOCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJm IgotICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5r Y29uZl9pZF9zdHJpbmdzX3N0cjQzLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19IRVh9LAotICAg ICAgey0xfSwgey0xfSwKLSNsaW5lIDIyICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0g ICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25m X2lkX3N0cmluZ3Nfc3RyNDYsCQlUX0NPTkZJRywJVEZfQ09NTUFORH0sCi0jbGluZSAzNSAic2Ny aXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtj b25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjQ3LAlUX1RZUEUsCQlU Rl9DT01NQU5ELCBTX0JPT0xFQU59LAotICAgICAgey0xfSwgey0xfSwgey0xfSwKLSNsaW5lIDM5 ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1 Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNTEsCQlUX1RZ UEUsCQlURl9DT01NQU5ELCBTX1NUUklOR30sCi0gICAgICB7LTF9LCB7LTF9LAotI2xpbmUgMjQg InNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVj dCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI1NCwJCVRfSEVM UCwJCVRGX0NPTU1BTkR9LAotICAgICAgey0xfSwKLSNsaW5lIDMxICJzY3JpcHRzL2tjb25maWcv emNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5n c190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNTYsCQlUX1BST01QVCwJVEZfQ09NTUFORH0s Ci0gICAgICB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7 LTF9LAotICAgICAgey0xfSwgey0xfSwgey0xfSwgey0xfSwgey0xfSwgey0xfSwKLSNsaW5lIDI4 ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1 Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNzIsCVRfREVQ RU5EUywJVEZfQ09NTUFORH0KLSAgICB9OwotCi0gIGlmIChsZW4gPD0gTUFYX1dPUkRfTEVOR1RI ICYmIGxlbiA+PSBNSU5fV09SRF9MRU5HVEgpCi0gICAgewotICAgICAgcmVnaXN0ZXIgaW50IGtl eSA9IGtjb25mX2lkX2hhc2ggKHN0ciwgbGVuKTsKLQotICAgICAgaWYgKGtleSA8PSBNQVhfSEFT SF9WQUxVRSAmJiBrZXkgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlZ2lzdGVyIGludCBv ID0gd29yZGxpc3Rba2V5XS5uYW1lOwotICAgICAgICAgIGlmIChvID49IDApCi0gICAgICAgICAg ICB7Ci0gICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnMgPSBvICsga2NvbmZfaWRf c3RyaW5nczsKLQotICAgICAgICAgICAgICBpZiAoKnN0ciA9PSAqcyAmJiAhc3RybmNtcCAoc3Ry ICsgMSwgcyArIDEsIGxlbiAtIDEpICYmIHNbbGVuXSA9PSAnXDAnKQotICAgICAgICAgICAgICAg IHJldHVybiAmd29yZGxpc3Rba2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K LSAgcmV0dXJuIDA7Ci19Ci0jbGluZSA0OSAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgot CmRpZmYgLS1naXQgYS94ZW4vdG9vbHMva2NvbmZpZy96Y29uZi5sIGIveGVuL3Rvb2xzL2tjb25m aWcvemNvbmYubAppbmRleCBjNDEwZDI1N2RhLi4wNDUwOTNkODI3IDEwMDY0NAotLS0gYS94ZW4v dG9vbHMva2NvbmZpZy96Y29uZi5sCisrKyBiL3hlbi90b29scy9rY29uZmlnL3pjb25mLmwKQEAg LTEsNSArMSw1IEBACiAlb3B0aW9uIG5vc3RkaW5pdCBub3l5d3JhcCBuZXZlci1pbnRlcmFjdGl2 ZSBmdWxsIGVjcwotJW9wdGlvbiA4Yml0IG5vZGVmYXVsdCBwZXJmLXJlcG9ydCBwZXJmLXJlcG9y dAorJW9wdGlvbiA4Yml0IG5vZGVmYXVsdCB5eWxpbmVubwogJW9wdGlvbiBub2lucHV0CiAleCBD T01NQU5EIEhFTFAgU1RSSU5HIFBBUkFNCiAlewpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgdm9p ZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiAJaWYgKG5ld19zaXpl ID4gdGV4dF9hc2l6ZSkgewogCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKIAkJbmV3 X3NpemUgJj0gLVNUQVJUX1NUUlNJWkU7Ci0JCXRleHQgPSByZWFsbG9jKHRleHQsIG5ld19zaXpl KTsKKwkJdGV4dCA9IHhyZWFsbG9jKHRleHQsIG5ld19zaXplKTsKIAkJdGV4dF9hc2l6ZSA9IG5l d19zaXplOwogCX0KIAltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsKQEAgLTgz LDcgKzgzLDYgQEAgbglbQS1aYS16MC05Xy1dCiAKIFsgXHRdKiMuKlxuCXwKIFsgXHRdKlxuCXsK LQljdXJyZW50X2ZpbGUtPmxpbmVubysrOwogCXJldHVybiBUX0VPTDsKIH0KIFsgXHRdKiMuKgpA QCAtMTA0LDE5ICsxMDMsMTggQEAgbglbQS1aYS16MC05Xy1dCiAJCWNvbnN0IHN0cnVjdCBrY29u Zl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoeXl0ZXh0LCB5eWxlbmcpOwogCQlCRUdJTihQQVJB TSk7CiAJCWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7Ci0JCWN1cnJlbnRfcG9zLmxp bmVubyA9IGN1cnJlbnRfZmlsZS0+bGluZW5vOworCQljdXJyZW50X3Bvcy5saW5lbm8gPSB5eWxp bmVubzsKIAkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX0NPTU1BTkQpIHsKLQkJCXpjb25mbHZh bC5pZCA9IGlkOworCQkJeXlsdmFsLmlkID0gaWQ7CiAJCQlyZXR1cm4gaWQtPnRva2VuOwogCQl9 CiAJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0JCXpjb25mbHZhbC5zdHJpbmcgPSB0 ZXh0OworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKIAkJcmV0dXJuIFRfV09SRDsKIAl9CiAJLgl3 YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOwogCVxuCXsKIAkJQkVHSU4oSU5JVElBTCk7 Ci0JCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CiAJCXJldHVybiBUX0VPTDsKIAl9CiB9CkBAIC0x MzgsMTkgKzEzNiwxOSBAQCBuCVtBLVphLXowLTlfLV0KIAkJbmV3X3N0cmluZygpOwogCQlCRUdJ TihTVFJJTkcpOwogCX0KLQlcbglCRUdJTihJTklUSUFMKTsgY3VycmVudF9maWxlLT5saW5lbm8r KzsgcmV0dXJuIFRfRU9MOworCVxuCUJFR0lOKElOSVRJQUwpOyByZXR1cm4gVF9FT0w7CiAJKHtu fXxbLy5dKSsJewogCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3Vw KHl5dGV4dCwgeXlsZW5nKTsKIAkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX1BBUkFNKSB7Ci0J CQl6Y29uZmx2YWwuaWQgPSBpZDsKKwkJCXl5bHZhbC5pZCA9IGlkOwogCQkJcmV0dXJuIGlkLT50 b2tlbjsKIAkJfQogCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotCQl6Y29uZmx2YWwu c3RyaW5nID0gdGV4dDsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CiAJCXJldHVybiBUX1dPUkQ7 CiAJfQogCSMuKgkvKiBjb21tZW50ICovCi0JXFxcbgljdXJyZW50X2ZpbGUtPmxpbmVubysrOwor CVxcXG4JOwogCVtbOmJsYW5rOl1dKwogCS4Jd2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0 KTsKIAk8PEVPRj4+IHsKQEAgLTE2MSw3ICsxNTksNyBAQCBuCVtBLVphLXowLTlfLV0KIDxTVFJJ Tkc+ewogCVteJyJcXFxuXSsvXG4JewogCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsK LQkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OwogCQly ZXR1cm4gVF9XT1JEX1FVT1RFOwogCX0KIAlbXiciXFxcbl0rCXsKQEAgLTE2OSw3ICsxNjcsNyBA QCBuCVtBLVphLXowLTlfLV0KIAl9CiAJXFwuPy9cbgl7CiAJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0 ICsgMSwgeXlsZW5nIC0gMSk7Ci0JCXpjb25mbHZhbC5zdHJpbmcgPSB0ZXh0OworCQl5eWx2YWwu c3RyaW5nID0gdGV4dDsKIAkJcmV0dXJuIFRfV09SRF9RVU9URTsKIAl9CiAJXFwuPwl7CkBAIC0x NzgsMTQgKzE3NiwxNSBAQCBuCVtBLVphLXowLTlfLV0KIAlcJ3xcIgl7CiAJCWlmIChzdHIgPT0g eXl0ZXh0WzBdKSB7CiAJCQlCRUdJTihQQVJBTSk7Ci0JCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4 dDsKKwkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OwogCQkJcmV0dXJuIFRfV09SRF9RVU9URTsKIAkJ fSBlbHNlCiAJCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgMSk7CiAJfQogCVxuCXsKLQkJcHJpbnRm KCIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1cHBvcnRlZFxuIiwgemNv bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7 CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5n cyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7 CiAJCUJFR0lOKElOSVRJQUwpOwogCQlyZXR1cm4gVF9FT0w7CiAJfQpAQCAtMjE4LDEyICsyMTcs MTAgQEAgbglbQS1aYS16MC05Xy1dCiAJCX0KIAl9CiAJWyBcdF0qXG4vW14gXHRcbl0gewotCQlj dXJyZW50X2ZpbGUtPmxpbmVubysrOwogCQl6Y29uZl9lbmRoZWxwKCk7CiAJCXJldHVybiBUX0hF TFBURVhUOwogCX0KIAlbIFx0XSpcbgl7Ci0JCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CiAJCWFw cGVuZF9zdHJpbmcoIlxuIiwgMSk7CiAJfQogCVteIFx0XG5dLiogewpAQCAtMjYxLDcgKzI1OCw3 IEBAIHZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCiAKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGhl bHAodm9pZCkKIHsKLQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKKwl5eWx2YWwuc3RyaW5nID0g dGV4dDsKIAlCRUdJTihJTklUSUFMKTsKIH0KIApAQCAtMjk0LDcgKzI5MSw3IEBAIHZvaWQgemNv bmZfaW5pdHNjYW4oY29uc3QgY2hhciAqbmFtZSkKIHsKIAl5eWluID0gemNvbmZfZm9wZW4obmFt ZSk7CiAJaWYgKCF5eWluKSB7Ci0JCXByaW50ZigiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1l KTsKKwkJZnByaW50ZihzdGRlcnIsICJjYW4ndCBmaW5kIGZpbGUgJXNcbiIsIG5hbWUpOwogCQll eGl0KDEpOwogCX0KIApAQCAtMzAyLDcgKzI5OSw3IEBAIHZvaWQgemNvbmZfaW5pdHNjYW4oY29u c3QgY2hhciAqbmFtZSkKIAltZW1zZXQoY3VycmVudF9idWYsIDAsIHNpemVvZigqY3VycmVudF9i dWYpKTsKIAogCWN1cnJlbnRfZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOwotCWN1cnJlbnRfZmls ZS0+bGluZW5vID0gMTsKKwl5eWxpbmVubyA9IDE7CiB9CiAKIHZvaWQgemNvbmZfbmV4dGZpbGUo Y29uc3QgY2hhciAqbmFtZSkKQEAgLTMxNSwzNSArMzEyLDM0IEBAIHZvaWQgemNvbmZfbmV4dGZp bGUoY29uc3QgY2hhciAqbmFtZSkKIAljdXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5UX0JV RkZFUjsKIAl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7CiAJaWYgKCF5eWluKSB7Ci0J CXByaW50ZigiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBcIiVzXCJcbiIsCi0JCSAgICB6Y29uZl9j dXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1lKTsKKwkJZnByaW50ZihzdGRlcnIs ICIlczolZDogY2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIlxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwg emNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOwogCQlleGl0KDEpOwogCX0KIAl5eV9zd2l0Y2hf dG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbiwgWVlfQlVGX1NJWkUpKTsKIAlidWYtPnBh cmVudCA9IGN1cnJlbnRfYnVmOwogCWN1cnJlbnRfYnVmID0gYnVmOwogCi0JZm9yIChpdGVyID0g Y3VycmVudF9maWxlLT5wYXJlbnQ7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5wYXJlbnQgKSB7Ci0JCWlm ICghc3RyY21wKGN1cnJlbnRfZmlsZS0+bmFtZSxpdGVyLT5uYW1lKSApIHsKLQkJCXByaW50Zigi JXM6JWQ6IHJlY3Vyc2l2ZSBpbmNsdXNpb24gZGV0ZWN0ZWQuICIKLQkJCSAgICAgICAiSW5jbHVz aW9uIHBhdGg6XG4gIGN1cnJlbnQgZmlsZSA6ICclcydcbiIsCi0JCQkgICAgICAgemNvbmZfY3Vy bmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKLQkJCSAgICAgICB6Y29uZl9jdXJuYW1lKCkpOwotCQkJ aXRlciA9IGN1cnJlbnRfZmlsZS0+cGFyZW50OwotCQkJd2hpbGUgKGl0ZXIgJiYgXAotCQkJICAg ICAgIHN0cmNtcChpdGVyLT5uYW1lLGN1cnJlbnRfZmlsZS0+bmFtZSkpIHsKLQkJCQlwcmludGYo IiAgaW5jbHVkZWQgZnJvbTogJyVzOiVkJ1xuIiwKLQkJCQkgICAgICAgaXRlci0+bmFtZSwgaXRl ci0+bGluZW5vLTEpOworCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87CisJZmlsZS0+ cGFyZW50ID0gY3VycmVudF9maWxlOworCisJZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBpdGVy OyBpdGVyID0gaXRlci0+cGFyZW50KSB7CisJCWlmICghc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUt Pm5hbWUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBk ZXRlY3RlZC5cbiIKKwkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iCisJCQkJIiAgY3VycmVudCBmaWxl IDogJXNcbiIsIGZpbGUtPm5hbWUpOworCQkJaXRlciA9IGZpbGU7CisJCQlkbyB7CiAJCQkJaXRl ciA9IGl0ZXItPnBhcmVudDsKLQkJCX0KLQkJCWlmIChpdGVyKQotCQkJCXByaW50ZigiICBpbmNs dWRlZCBmcm9tOiAnJXM6JWQnXG4iLAotCQkJCSAgICAgICBpdGVyLT5uYW1lLCBpdGVyLT5saW5l bm8rMSk7CisJCQkJZnByaW50ZihzdGRlcnIsICIgIGluY2x1ZGVkIGZyb206ICVzOiVkXG4iLAor CQkJCQlpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8gLSAxKTsKKwkJCX0gd2hpbGUgKHN0cmNtcChp dGVyLT5uYW1lLCBmaWxlLT5uYW1lKSk7CiAJCQlleGl0KDEpOwogCQl9CiAJfQotCWZpbGUtPmxp bmVubyA9IDE7Ci0JZmlsZS0+cGFyZW50ID0gY3VycmVudF9maWxlOworCisJeXlsaW5lbm8gPSAx OwogCWN1cnJlbnRfZmlsZSA9IGZpbGU7CiB9CiAKQEAgLTM1Miw2ICszNDgsOCBAQCBzdGF0aWMg dm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpCiAJc3RydWN0IGJ1ZmZlciAqcGFyZW50OwogCiAJY3Vy cmVudF9maWxlID0gY3VycmVudF9maWxlLT5wYXJlbnQ7CisJaWYgKGN1cnJlbnRfZmlsZSkKKwkJ eXlsaW5lbm8gPSBjdXJyZW50X2ZpbGUtPmxpbmVubzsKIAogCXBhcmVudCA9IGN1cnJlbnRfYnVm LT5wYXJlbnQ7CiAJaWYgKHBhcmVudCkgewpkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcv emNvbmYubGV4LmNfc2hpcHBlZCBiL3hlbi90b29scy9rY29uZmlnL3pjb25mLmxleC5jX3NoaXBw ZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZmRmNjEyMzUuLjAwMDAwMDAwMDAK LS0tIGEveGVuL3Rvb2xzL2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZAorKysgL2Rldi9udWxs CkBAIC0xLDI0NzMgKzAsMCBAQAotCi0jbGluZSAzICJzY3JpcHRzL2tjb25maWcvemNvbmYubGV4 LmNfc2hpcHBlZCIKLQotI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEg bGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgeXlfY3JlYXRl X2J1ZmZlciB6Y29uZl9jcmVhdGVfYnVmZmVyCi0jZGVmaW5lIHl5X2RlbGV0ZV9idWZmZXIgemNv bmZfZGVsZXRlX2J1ZmZlcgotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHpjb25mX2ZsZXhfZGVidWcK LSNkZWZpbmUgeXlfaW5pdF9idWZmZXIgemNvbmZfaW5pdF9idWZmZXIKLSNkZWZpbmUgeXlfZmx1 c2hfYnVmZmVyIHpjb25mX2ZsdXNoX2J1ZmZlcgotI2RlZmluZSB5eV9sb2FkX2J1ZmZlcl9zdGF0 ZSB6Y29uZl9sb2FkX2J1ZmZlcl9zdGF0ZQotI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIHpj b25mX3N3aXRjaF90b19idWZmZXIKLSNkZWZpbmUgeXlpbiB6Y29uZmluCi0jZGVmaW5lIHl5bGVu ZyB6Y29uZmxlbmcKLSNkZWZpbmUgeXlsZXggemNvbmZsZXgKLSNkZWZpbmUgeXlsaW5lbm8gemNv bmZsaW5lbm8KLSNkZWZpbmUgeXlvdXQgemNvbmZvdXQKLSNkZWZpbmUgeXlyZXN0YXJ0IHpjb25m cmVzdGFydAotI2RlZmluZSB5eXRleHQgemNvbmZ0ZXh0Ci0jZGVmaW5lIHl5d3JhcCB6Y29uZndy YXAKLSNkZWZpbmUgeXlhbGxvYyB6Y29uZmFsbG9jCi0jZGVmaW5lIHl5cmVhbGxvYyB6Y29uZnJl YWxsb2MKLSNkZWZpbmUgeXlmcmVlIHpjb25mZnJlZQotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgot I2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZF UlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVY X1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZp cnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmlj IGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUg PHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNs dWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxl eCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZp bmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5 IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lP Tl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVm aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlm IHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICov Ci0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP UyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4 X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3Qg ZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBp bnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNl bHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQg ZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3Vp bnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLQotLyogTGltaXRz IG9mIGludGVncmFsIHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01J TiAgICAgICAgICAgICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmlu ZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQz Ml9NSU4KLSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNl bmRpZgotI2lmbmRlZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgx MjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAg ICAgICAgKDMyNzY3KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9N QVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAot I2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJ TlQxNl9NQVgKLSNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlm Ci0jaWZuZGVmIFVJTlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5 NDk2NzI5NVUpCi0jZW5kaWYKLQotI2VuZGlmIC8qICEgQzk5ICovCi0KLSNlbmRpZiAvKiAhIEZM RVhJTlRfSCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFn ZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNl bHNlCS8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJl IGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9V U0VfQ09OU1QKLQotI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmCS8qICEg X19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAotI2RlZmluZSB5eWNvbnN0IGNv bnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0dXJuZWQgdXBvbiBl bmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8qIFByb21vdGVzIGEgcG9zc2li bHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBpbnRl Z2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVn YXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWdu ZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAqLwotI2RlZmluZSBZWV9TQ19U T19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0KLS8qIEVudGVyIGEg c3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFt ZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBv biB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KLSAqLwotI2RlZmlu ZSBCRUdJTiAoeXlfc3RhcnQpID0gMSArIDIgKgotCi0vKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQg c3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAotICogdG8g QkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBs ZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZpbmUgWVlfU1RBUlQgKCgoeXlfc3RhcnQp IC0gMSkgLyAyKQotI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCi0KLS8qIEFjdGlvbiBudW1iZXIg Zm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCi0jZGVmaW5lIFlZX1NUQVRF X0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCi0KLS8qIFNwZWNpYWwg YWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCi0jZGVmaW5l IFlZX05FV19GSUxFIHpjb25mcmVzdGFydCh6Y29uZmluICApCi0KLSNkZWZpbmUgWVlfRU5EX09G X0JVRkZFUl9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KLSNp Zm5kZWYgWVlfQlVGX1NJWkUKLSNpZmRlZiBfX2lhNjRfXwotLyogT24gSUEtNjQsIHRoZSBidWZm ZXIgc2l6ZSBpcyAxNmssIG5vdCA4ay4KLSAqIE1vcmVvdmVyLCBZWV9CVUZfU0laRSBpcyAyKllZ X1JFQURfQlVGX1NJWkUgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIERpdHRvIGZvciB0aGUgX19p YTY0X18gY2FzZSBhY2NvcmRpbmdseS4KLSAqLwotI2RlZmluZSBZWV9CVUZfU0laRSAzMjc2OAot I2Vsc2UKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZiAvKiBfX2lhNjRfXyAqLwot I2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBv bmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZpbmUg WVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVf dHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlf VFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAq WVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLWV4dGVybiBpbnQgemNvbmZsZW5nOwotCi1leHRl cm4gRklMRSAqemNvbmZpbiwgKnpjb25mb3V0OwotCi0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVf U0NBTiAwCi0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0JfQUNUX0xB U1RfTUFUQ0ggMgotCi0gICAgI2RlZmluZSBZWV9MRVNTX0xJTkVOTyhuKQotICAgIAotLyogUmV0 dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUg aW5wdXQgc3RyZWFtLiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotCWRvIFwKLQkJeyBcCi0JCS8q IFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4dC4gKi8gXAotICAgICAgICBpbnQg eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf bWFjcm9fYXJnKTtcCi0JCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyBcCi0JCVlZX1JFU1RPUkVf WVlfTU9SRV9PRkZTRVQgXAotCQkoeXlfY19idWZfcCkgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNz X21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0JCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNl dCB1cCB6Y29uZnRleHQgYWdhaW4gKi8gXAotCQl9IFwKLQl3aGlsZSAoIDAgKQotCi0jZGVmaW5l IHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQotCi0jaWZuZGVmIFlZX1RZUEVE RUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVf dCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRF Ci0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3Rh dGUKLQl7Ci0JRklMRSAqeXlfaW5wdXRfZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlu cHV0IGJ1ZmZlciAqLwotCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGlu IGlucHV0IGJ1ZmZlciAqLwotCi0JLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5v dCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXpl X3QgeXlfYnVmX3NpemU7Ci0KLQkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlf Y2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JaW50IHl5 X25fY2hhcnM7Ci0KLQkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBr bm93IHdlIGNyZWF0ZWQgaXQsCi0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwg YW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lz X291cl9idWZmZXI7Ci0KLQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1 dCBzb3VyY2U7IGlmIHNvLCBhbmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQs IHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBt YWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4K LQkgKi8KLQlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNp ZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBy dWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90 LgotCSAqLwotCWludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRo ZSBsaW5lIGNvdW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBj b3VudC4gKi8KLSAgICAKLQkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZm ZXIgd2hlbiB3ZSByZWFjaCB0aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxf YnVmZmVyOwotCi0JaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05F VyAwCi0jZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBz ZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBt YXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkg KiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAg V2UgbWlnaHQKLQkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91 Z2gsIGJlY2F1c2Ugb2YKLQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3 ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkg KiAodmlhIHpjb25mcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nh bm5pbmcgYnkKLQkgKiBqdXN0IHBvaW50aW5nIHpjb25maW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4K LQkgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyog IVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KLQotLyogU3RhY2sgb2YgaW5wdXQgYnVmZmVy cy4gKi8KLXN0YXRpYyBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7IC8qKjwgaW5kZXgg b2YgdG9wIG9mIHN0YWNrLiAqLwotc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4ID0g MDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLXN0YXRpYyBZWV9CVUZGRVJfU1RBVEUgKiB5 eV9idWZmZXJfc3RhY2sgPSAwOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwotCi0vKiBXZSBw cm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUK LSAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2Vu ZXJhbAotICogInNjYW5uZXIgc3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUg c3RhY2ssIG9yIE5VTEwuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCAoeXlfYnVm ZmVyX3N0YWNrKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8gKHl5X2J1ZmZlcl9zdGFj aylbKHl5X2J1ZmZlcl9zdGFja190b3ApXSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDog TlVMTCkKLQotLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtu b3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVuIHdlIG5lZWQg YW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVO VF9CVUZGRVJfTFZBTFVFICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0K LQotLyogeXlfaG9sZF9jaGFyIGhvbGRzIHRoZSBjaGFyYWN0ZXIgbG9zdCB3aGVuIHpjb25mdGV4 dCBpcyBmb3JtZWQuICovCi1zdGF0aWMgY2hhciB5eV9ob2xkX2NoYXI7Ci1zdGF0aWMgaW50IHl5 X25fY2hhcnM7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmICov Ci1pbnQgemNvbmZsZW5nOwotCi0vKiBQb2ludHMgdG8gY3VycmVudCBjaGFyYWN0ZXIgaW4gYnVm ZmVyLiAqLwotc3RhdGljIGNoYXIgKnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotc3RhdGljIGlu dCB5eV9pbml0ID0gMDsJCS8qIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplICovCi1zdGF0 aWMgaW50IHl5X3N0YXJ0ID0gMDsJLyogc3RhcnQgc3RhdGUgbnVtYmVyICovCi0KLS8qIEZsYWcg d2hpY2ggaXMgdXNlZCB0byBhbGxvdyB6Y29uZndyYXAoKSdzIHRvIGRvIGJ1ZmZlciBzd2l0Y2hl cwotICogaW5zdGVhZCBvZiBzZXR0aW5nIHVwIGEgZnJlc2ggemNvbmZpbi4gIEEgYml0IG9mIGEg aGFjayAuLi4KLSAqLwotc3RhdGljIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0K LXZvaWQgemNvbmZyZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICApOwotdm9pZCB6Y29uZl9zd2l0 Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsKLVlZX0JVRkZFUl9T VEFURSB6Y29uZl9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICApOwotdm9pZCB6 Y29uZl9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAgKTsKLXZvaWQgemNvbmZfZmx1 c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAgKTsKLXZvaWQgemNvbmZwdXNoX2J1ZmZlcl9z dGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7Ci12b2lkIHpjb25mcG9wX2J1ZmZl cl9zdGF0ZSAodm9pZCApOwotCi1zdGF0aWMgdm9pZCB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sg KHZvaWQgKTsKLXN0YXRpYyB2b2lkIHpjb25mX2xvYWRfYnVmZmVyX3N0YXRlICh2b2lkICk7Ci1z dGF0aWMgdm9pZCB6Y29uZl9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmls ZSAgKTsKLQotI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgemNvbmZfZmx1c2hfYnVmZmVyKFlZX0NV UlJFTlRfQlVGRkVSICkKLQotWVlfQlVGRkVSX1NUQVRFIHpjb25mX3NjYW5fYnVmZmVyIChjaGFy ICpiYXNlLHl5X3NpemVfdCBzaXplICApOwotWVlfQlVGRkVSX1NUQVRFIHpjb25mX3NjYW5fc3Ry aW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAgKTsKLVlZX0JVRkZFUl9TVEFURSB6Y29uZl9zY2Fu X2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gICk7Ci0KLXZvaWQgKnpjb25mYWxs b2MgKHl5X3NpemVfdCAgKTsKLXZvaWQgKnpjb25mcmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAg KTsKLXZvaWQgemNvbmZmcmVlICh2b2lkICogICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciB6 Y29uZl9jcmVhdGVfYnVmZmVyCi0KLSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVy YWN0aXZlKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAg emNvbmZlbnN1cmVfYnVmZmVyX3N0YWNrICgpOyBcCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV RSA9ICAgIFwKLSAgICAgICAgICAgIHpjb25mX2NyZWF0ZV9idWZmZXIoemNvbmZpbixZWV9CVUZf U0laRSApOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFj dGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5lIHl5X3NldF9ib2woYXRfYm9s KSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAotICAgICAgICB6Y29uZmVu c3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAg XAotICAgICAgICAgICAgemNvbmZfY3JlYXRlX2J1ZmZlcih6Y29uZmluLFlZX0JVRl9TSVpFICk7 IFwKLQl9IFwKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsg XAotCX0KLQotI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55 eV9hdF9ib2wpCi0KLS8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KLQotI2RlZmluZSB6Y29uZndyYXAo bikgMQotI2RlZmluZSBZWV9TS0lQX1lZV1JBUAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlf Q0hBUjsKLQotRklMRSAqemNvbmZpbiA9IChGSUxFICopIDAsICp6Y29uZm91dCA9IChGSUxFICop IDA7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLWV4dGVybiBpbnQgemNvbmZsaW5l bm87Ci0KLWludCB6Y29uZmxpbmVubyA9IDE7Ci0KLWV4dGVybiBjaGFyICp6Y29uZnRleHQ7Ci0j ZGVmaW5lIHl5dGV4dF9wdHIgemNvbmZ0ZXh0Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg eXlfbnh0W11bMThdID0KLSAgICB7Ci0gICAgewotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAg ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwCi0gICAgfSwKLQotICAgIHsKLSAgICAg ICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxMiwgICAxMiwgICAxNSwgICAxMiwgICAxMiwgICAx MiwKLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMgot ICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTIsICAgMTIs ICAgMTUsICAgMTIsICAgMTIsICAgMTIsCi0gICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAg MTIsICAgMTIsICAgMTIsICAgMTIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgIDE2LCAg IDE2LCAgIDE3LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LAotICAgICAgIDE2 LCAgIDE4LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2Ci0gICAgfSwKLQotICAg IHsKLSAgICAgICAxMSwgICAxNiwgICAxNiwgICAxNywgICAxNiwgICAxNiwgICAxNiwgICAxNiwg ICAxNiwgICAxNiwKLSAgICAgICAxNiwgICAxOCwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAx NiwgICAxNgotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgICAxOSwgICAyMCwgICAyMSwg ICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwKLSAgICAgICAxOSwgICAxOSwgICAx OSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAg MTEsICAgMTksICAgMjAsICAgMjEsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTks Ci0gICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTkKLSAg ICB9LAotCi0gICAgewotICAgICAgIDExLCAgIDIyLCAgIDIyLCAgIDIzLCAgIDIyLCAgIDI0LCAg IDIyLCAgIDIyLCAgIDI0LCAgIDIyLAotICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIy LCAgIDIyLCAgIDI1LCAgIDIyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgICAyMiwgICAy MiwgICAyMywgICAyMiwgICAyNCwgICAyMiwgICAyMiwgICAyNCwgICAyMiwKLSAgICAgICAyMiwg ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMgotICAgIH0sCi0KLSAgICB7 Ci0gICAgICAgMTEsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAg MzAsICAgMzMsCi0gICAgICAgMzQsICAgMzUsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzks ICAgNDAKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgMjYsICAgMjcsICAgMjgsICAg MjksICAgMzAsICAgMzEsICAgMzIsICAgMzAsICAgMzMsCi0gICAgICAgMzQsICAgMzUsICAgMzUs ICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAKLSAgICB9LAotCi0gICAgewotICAgICAgLTEx LCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLAot ICAgICAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExCi0gICAg fSwKLQotICAgIHsKLSAgICAgICAxMSwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0x MiwgIC0xMiwgIC0xMiwgIC0xMiwKLSAgICAgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwg IC0xMiwgIC0xMiwgIC0xMgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtMTMsICAgNDEs ICAgNDIsICAtMTMsICAtMTMsICAgNDMsICAtMTMsICAtMTMsICAtMTMsCi0gICAgICAtMTMsICAt MTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMKLSAgICB9LAotCi0gICAgewot ICAgICAgIDExLCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0 LCAgLTE0LAotICAgICAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAg LTE0Ci0KLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgIDQ0LCAgIDQ0LCAgIDQ1LCAgIDQ0 LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LAotICAgICAgIDQ0LCAgIDQ0LCAgIDQ0LCAg IDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwg IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKLSAg ICAgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNgotICAgIH0s Ci0KLSAgICB7Ci0gICAgICAgMTEsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcs ICAtMTcsICAtMTcsICAtMTcsCi0gICAgICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAt MTcsICAtMTcsICAtMTcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTE4LCAgLTE4LCAg LTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LAotICAgICAgLTE4LCAgIDQ2 LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4Ci0gICAgfSwKLQotICAgIHsKLSAg ICAgICAxMSwgICA0NywgICA0NywgIC0xOSwgICA0NywgICA0NywgICA0NywgICA0NywgICA0Nywg ICA0NywKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0 NwotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC0yMCwgICA0OCwgICA0OSwgIC0yMCwg IC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwKLSAgICAgIC0yMCwgIC0yMCwgIC0yMCwgIC0y MCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAg NTAsICAtMjEsICAtMjEsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsCi0gICAg ICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAKLSAgICB9LAot Ci0gICAgewotICAgICAgIDExLCAgIDUxLCAgIDUxLCAgIDUyLCAgIDUxLCAgLTIyLCAgIDUxLCAg IDUxLCAgLTIyLCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUx LCAgLTIyLCAgIDUxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC0yMywgIC0yMywgIC0y MywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywKLSAgICAgIC0yMywgIC0yMywg IC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMwotICAgIH0sCi0KLSAgICB7Ci0gICAg ICAgMTEsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAt MjQsCi0gICAgICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQK LQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgNTMsICAgNTMsICAgNTQsICAgNTMsICAg NTMsICAgNTMsICAgNTMsICAgNTMsICAgNTMsCi0gICAgICAgNTMsICAgNTMsICAgNTMsICAgNTMs ICAgNTMsICAgNTMsICAgNTMsICAgNTMKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTI2 LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LAotICAgICAg LTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2Ci0gICAgfSwKLQot ICAgIHsKLSAgICAgICAxMSwgIC0yNywgICA1NSwgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0y NywgIC0yNywgIC0yNywKLSAgICAgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywg IC0yNywgIC0yNwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtMjgsICAtMjgsICAtMjgs ICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsCi0gICAgICAtMjgsICAtMjgsICAt MjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAtMjgKLSAgICB9LAotCi0gICAgewotICAgICAg IDExLCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5 LAotICAgICAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgIDU2LCAgLTI5LCAgLTI5LCAgLTI5Ci0K LSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMw LCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLAotICAgICAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAg LTMwLCAgLTMwLCAgLTMwLCAgLTMwCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgICA1Nywg ICA1NywgIC0zMSwgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywKLSAgICAgICA1 NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NwotICAgIH0sCi0KLSAg ICB7Ci0gICAgICAgMTEsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAgNTgs ICAtMzIsICAtMzIsCi0gICAgICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAt MzIsICAtMzIKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTMzLCAgLTMzLCAgLTMzLCAg LTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLAotICAgICAgLTMzLCAgLTMzLCAgLTMz LCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAx MSwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwK LSAgICAgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNAotCi0g ICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwg IC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwKLSAgICAgIC0zNSwgICA1OSwgICA1OSwgIC0zNSwgIC0z NSwgIC0zNSwgIC0zNSwgIC0zNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtMzYsICAt MzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCi0gICAgICAtMzYs ICAtMzYsICAtMzYsICAtMzYsICAgNjAsICAtMzYsICAtMzYsICAtMzYKLSAgICB9LAotCi0gICAg ewotICAgICAgIDExLCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAg LTM3LCAgLTM3LAotICAgICAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3 LCAgLTM3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC0zOCwgIC0zOCwgIC0zOCwgIC0z OCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKLSAgICAgIC0zOCwgIC0zOCwgIC0zOCwg IC0zOCwgICA2MSwgIC0zOCwgIC0zOCwgIC0zOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEs ICAtMzksICAtMzksICAgNjIsICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksCi0g ICAgICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzkKLQotICAg IH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAt NDAsICAtNDAsICAtNDAsICAtNDAsCi0gICAgICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAs ICAtNDAsICAtNDAsICAgNjMKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTQxLCAgIDQx LCAgIDQyLCAgLTQxLCAgLTQxLCAgIDQzLCAgLTQxLCAgLTQxLCAgLTQxLAotICAgICAgLTQxLCAg LTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxCi0gICAgfSwKLQotICAgIHsK LSAgICAgICAxMSwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00 MiwgIC00MiwKLSAgICAgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00Miwg IC00MgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgNDQsICAgNDQsICAgNDUsICAgNDQs ICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsCi0gICAgICAgNDQsICAgNDQsICAgNDQsICAg NDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAg IDQ0LCAgIDQ0LCAgIDQ1LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LAotICAg ICAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ0Ci0KLSAgICB9 LAotCi0gICAgewotICAgICAgIDExLCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1 LCAgLTQ1LCAgLTQ1LCAgLTQ1LAotICAgICAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAg LTQ1LCAgLTQ1LCAgLTQ1Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC00NiwgIC00Niwg IC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwKLSAgICAgIC00NiwgICA0 NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NgotICAgIH0sCi0KLSAgICB7Ci0g ICAgICAgMTEsICAgNDcsICAgNDcsICAtNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcs ICAgNDcsCi0gICAgICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAg NDcKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTQ4LCAgIDQ4LCAgIDQ5LCAgLTQ4LCAg LTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LAotICAgICAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4 LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgICA1 MCwgIC00OSwgIC00OSwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKLSAgICAg ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MAotCi0gICAgfSwK LQotICAgIHsKLSAgICAgICAxMSwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwg IC01MCwgIC01MCwgIC01MCwKLSAgICAgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01 MCwgIC01MCwgIC01MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgNTEsICAgNTEsICAg NTIsICAgNTEsICAtNTEsICAgNTEsICAgNTEsICAtNTEsICAgNTEsCi0gICAgICAgNTEsICAgNTEs ICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAtNTEsICAgNTEKLSAgICB9LAotCi0gICAgewotICAg ICAgIDExLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAg LTUyLAotICAgICAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUy Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC01MywgIC01MywgICA1NCwgIC01MywgIC01 MywgIC01MywgIC01MywgIC01MywgIC01MywKLSAgICAgIC01MywgIC01MywgIC01MywgIC01Mywg IC01MywgIC01MywgIC01MywgIC01MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNTQs ICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsCi0gICAgICAt NTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQKLQotICAgIH0sCi0K LSAgICB7Ci0gICAgICAgMTEsICAtNTUsICAgNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAt NTUsICAtNTUsICAtNTUsCi0gICAgICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUsICAtNTUs ICAtNTUsICAtNTUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTU2LCAgLTU2LCAgLTU2 LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LAotICAgICAgLTU2LCAgLTU2LCAg LTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2Ci0gICAgfSwKLQotICAgIHsKLSAgICAg ICAxMSwgICA1NywgICA1NywgIC01NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1 NywKLSAgICAgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1NywgICA1Nwot ICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgs ICAtNTgsICAtNTgsICAtNTgsICAtNTgsCi0gICAgICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAt NTgsICAtNTgsICAtNTgsICAtNTgKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTU5LCAg LTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LAotICAgICAgLTU5 LCAgIDU5LCAgIDU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5Ci0KLSAgICB9LAotCi0g ICAgewotICAgICAgIDExLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYw LCAgLTYwLCAgLTYwLAotICAgICAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAg LTYwLCAgLTYwCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02MSwgIC02MSwgIC02MSwg IC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwKLSAgICAgIC02MSwgIC02MSwgIC02 MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAg MTEsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIs Ci0gICAgICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIKLSAg ICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAg LTYzLCAgLTYzLCAgLTYzLCAgLTYzLAotICAgICAgLTYzLCAgLTYzLCAgLTYzLCAgLTYzLCAgLTYz LCAgLTYzLCAgLTYzLCAgLTYzCi0gICAgfSwKLQotICAgIH0gOwotCi1zdGF0aWMgeXlfc3RhdGVf dHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHZvaWQgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBl IHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgKTsKLXN0YXRp YyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh2b2lkICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9l cnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50 IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGlu ZyBhY3Rpb24gLSBzZXRzIHVwIHpjb25mdGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVf QUNUSU9OIFwKLQkoeXl0ZXh0X3B0cikgPSB5eV9icDsgXAotCXpjb25mbGVuZyA9IChzaXplX3Qp ICh5eV9jcCAtIHl5X2JwKTsgXAotCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcCi0JKnl5X2Nw ID0gJ1wwJzsgXAotCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxF UyAzNwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3Qg dXNlZCBpbiB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4g Ki8KLXN0cnVjdCB5eV90cmFuc19pbmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0J ZmxleF9pbnQzMl90IHl5X254dDsKLQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5 X2FjY2VwdFs2NF0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgIDM4LCAgICA1LCAgICA0 LCAgICAyLCAgICAzLCAgICA3LCAgICA4LCAgICA2LCAgIDM2LCAgIDMzLAotICAgICAgIDM1LCAg IDI4LCAgIDMyLCAgIDMxLCAgIDMwLCAgIDI2LCAgIDI1LCAgIDIxLCAgIDEzLCAgIDIwLAotICAg ICAgIDIzLCAgIDI2LCAgIDExLCAgIDEyLCAgIDIyLCAgIDE4LCAgIDE0LCAgIDE5LCAgIDI2LCAg IDI2LAotICAgICAgICA0LCAgICAyLCAgICAzLCAgICAzLCAgICAxLCAgICA2LCAgIDM2LCAgIDMz LCAgIDM1LCAgIDM0LAotICAgICAgIDI4LCAgIDI3LCAgIDMwLCAgIDI5LCAgIDI1LCAgIDE1LCAg IDIzLCAgICA5LCAgIDIyLCAgIDE2LAotICAgICAgIDE3LCAgIDI0LCAgIDEwCi0gICAgfSA7Ci0K LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAg ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwg ICAgMywKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNCwgICAgNSwgICAg NiwgICAgMSwgICAgMSwgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAgMSwgICAgMSwg ICAgMSwgICAxMSwgICAxMiwgICAxMiwgICAxMSwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAx MSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAgMSwgICAgMSwgICAxMywKLSAgICAg ICAxNCwgICAxNSwgICAgMSwgICAgMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAx MSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwg ICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAx MSwgICAxMSwgICAxMSwgICAxMSwKLSAgICAgICAgMSwgICAxNiwgICAgMSwgICAgMSwgICAxMSwg ICAgMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwKLQotICAgICAgIDExLCAgIDExLCAgIDExLCAg IDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLAotICAgICAgIDExLCAgIDEx LCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLAotICAgICAg IDExLCAgIDExLCAgICAxLCAgIDE3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx LCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotZXh0ZXJuIGludCB6 Y29uZl9mbGV4X2RlYnVnOwotaW50IHpjb25mX2ZsZXhfZGVidWcgPSAwOwotCi0vKiBUaGUgaW50 ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAotICogYW55IHVz ZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICovCi0jZGVmaW5lIFJFSkVDVCByZWpl Y3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1 dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREogMAotI2RlZmluZSBZWV9SRVNUT1JF X1lZX01PUkVfT0ZGU0VUCi1jaGFyICp6Y29uZnRleHQ7Ci0jZGVmaW5lIFlZX05PX0lOUFVUIDEK LQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1t NjhrLm9yZz4KLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4w LgotICovCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1 ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgot Ci0jaW5jbHVkZSAibGtjLmgiCi0KLSNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNgotCi1zdGF0aWMg c3RydWN0IHsKLQlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgbGluZW5vOwotfSBjdXJyZW50X3Bv czsKLQotc3RhdGljIGNoYXIgKnRleHQ7Ci1zdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6 ZTsKLQotc3RydWN0IGJ1ZmZlciB7Ci0Jc3RydWN0IGJ1ZmZlciAqcGFyZW50OwotCVlZX0JVRkZF Ul9TVEFURSBzdGF0ZTsKLX07Ci0KLXN0cnVjdCBidWZmZXIgKmN1cnJlbnRfYnVmOwotCi1zdGF0 aWMgaW50IGxhc3RfdHMsIGZpcnN0X3RzOwotCi1zdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZv aWQpOwotc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKLQotc3RhdGljIHZvaWQgbmV3 X3N0cmluZyh2b2lkKQotewotCXRleHQgPSB4bWFsbG9jKFNUQVJUX1NUUlNJWkUpOwotCXRleHRf YXNpemUgPSBTVEFSVF9TVFJTSVpFOwotCXRleHRfc2l6ZSA9IDA7Ci0JKnRleHQgPSAwOwotfQot Ci1zdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCi17 Ci0JaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7Ci0JaWYgKG5ld19zaXplID4g dGV4dF9hc2l6ZSkgewotCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKLQkJbmV3X3Np emUgJj0gLVNUQVJUX1NUUlNJWkU7Ci0JCXRleHQgPSByZWFsbG9jKHRleHQsIG5ld19zaXplKTsK LQkJdGV4dF9hc2l6ZSA9IG5ld19zaXplOwotCX0KLQltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwg c3RyLCBzaXplKTsKLQl0ZXh0X3NpemUgKz0gc2l6ZTsKLQl0ZXh0W3RleHRfc2l6ZV0gPSAwOwot fQotCi1zdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkK LXsKLQl0ZXh0ID0geG1hbGxvYyhzaXplICsgMSk7Ci0JbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7 Ci0JdGV4dFtzaXplXSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhcm5faWdub3JlZF9jaGFyYWN0 ZXIoY2hhciBjaHIpCi17Ci0JZnByaW50ZihzdGRlcnIsCi0JICAgICAgICAiJXM6JWQ6d2Fybmlu ZzogaWdub3JpbmcgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyICclYydcbiIsCi0JICAgICAgICB6Y29u Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBjaHIpOwotfQotCi0jZGVmaW5lIElOSVRJQUwg MAotI2RlZmluZSBDT01NQU5EIDEKLSNkZWZpbmUgSEVMUCAyCi0jZGVmaW5lIFNUUklORyAzCi0j ZGVmaW5lIFBBUkFNIDQKLQotI2lmbmRlZiBZWV9OT19VTklTVERfSAotLyogU3BlY2lhbCBjYXNl IGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkK LSAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0aW9uIDEgdG8gaGF2 ZSBiZWVuIHNjYW5uZWQgZmlyc3QuCi0gKiBUaGUgdXNlciBoYXMgYSBjaGFuY2UgdG8gb3ZlcnJp ZGUgaXQgd2l0aCBhbiBvcHRpb24uCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgot Ci0jaWZuZGVmIFlZX0VYVFJBX1RZUEUKLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lkICoKLSNl bmRpZgotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCApOwotCi0vKiBBY2Nlc3Nv ciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1y ZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgemNvbmZsZXhfZGVz dHJveSAodm9pZCApOwotCi1pbnQgemNvbmZnZXRfZGVidWcgKHZvaWQgKTsKLQotdm9pZCB6Y29u ZnNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgICk7Ci0KLVlZX0VYVFJBX1RZUEUgemNvbmZnZXRf ZXh0cmEgKHZvaWQgKTsKLQotdm9pZCB6Y29uZnNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy X2RlZmluZWQgICk7Ci0KLUZJTEUgKnpjb25mZ2V0X2luICh2b2lkICk7Ci0KLXZvaWQgemNvbmZz ZXRfaW4gIChGSUxFICogaW5fc3RyICApOwotCi1GSUxFICp6Y29uZmdldF9vdXQgKHZvaWQgKTsK LQotdm9pZCB6Y29uZnNldF9vdXQgIChGSUxFICogb3V0X3N0ciAgKTsKLQotaW50IHpjb25mZ2V0 X2xlbmcgKHZvaWQgKTsKLQotY2hhciAqemNvbmZnZXRfdGV4dCAodm9pZCApOwotCi1pbnQgemNv bmZnZXRfbGluZW5vICh2b2lkICk7Ci0KLXZvaWQgemNvbmZzZXRfbGluZW5vIChpbnQgbGluZV9u dW1iZXIgICk7Ci0KLS8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJp ZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRl ZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCB6Y29u ZndyYXAgKHZvaWQgKTsKLSNlbHNlCi1leHRlcm4gaW50IHpjb25md3JhcCAodm9pZCApOwotI2Vu ZGlmCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLGNoYXIgKmJ1Zl9w dHIgICk7Ci0gICAgCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3Ry bmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCApOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9O RUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogKTsK LSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3Rh dGljIGludCB5eWlucHV0ICh2b2lkICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAodm9pZCAp OwotI2VuZGlmCi0KLSNlbmRpZgotCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0 aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNpZmRlZiBfX2lhNjRf XwotLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ayAqLwotI2RlZmlu ZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0Ci0jZWxzZQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpF IDgxOTIKLSNlbmRpZiAvKiBfX2lhNjRfXyAqLwotI2VuZGlmCi0KLS8qIENvcHkgd2hhdGV2ZXIg dGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCi0jaWZuZGVm IEVDSE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmlu ZyBtaWdodCBjb250YWluIE5VTCdzLAotICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KLSAqLwotI2Rl ZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggemNvbmZ0ZXh0LCB6Y29uZmxlbmcsIDEsIHpjb25m b3V0ICkpIHt9IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZz IGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAot ICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZp bmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAotCWVycm5vPTA7IFwKLQl3aGlsZSAo IChyZXN1bHQgPSByZWFkKCBmaWxlbm8oemNvbmZpbiksIChjaGFyICopIGJ1ZiwgbWF4X3NpemUg KSkgPCAwICkgXAotCXsgXAotCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKLQkJeyBcCi0JCQlZWV9G QVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJCWJyZWFr OyBcCi0JCX0gXAotCQllcnJubz0wOyBcCi0JCWNsZWFyZXJyKHpjb25maW4pOyBcCi0JfVwKLVwK LQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdl IGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9uJ3Qgd2FudCBhbiBleHRy YSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCi0gKiBzb21l IGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgotICov Ci0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05V TEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRp b24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUg WVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9ydCBhIGZhdGFsIGVycm9y LiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cp IHl5X2ZhdGFsX2Vycm9yKCBtc2cgKQotI2VuZGlmCi0KLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXph dGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCi0KLS8qIERlZmF1bHQgZGVjbGFyYXRp b24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KLSAqIGVh c2lseSBhZGQgcGFyYW1ldGVycy4KLSAqLwotI2lmbmRlZiBZWV9ERUNMCi0jZGVmaW5lIFlZX0RF Q0xfSVNfT1VSUyAxCi0KLWV4dGVybiBpbnQgemNvbmZsZXggKHZvaWQpOwotCi0jZGVmaW5lIFlZ X0RFQ0wgaW50IHpjb25mbGV4ICh2b2lkKQotI2VuZGlmIC8qICFZWV9ERUNMICovCi0KLS8qIENv ZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHpjb25mdGV4 dCBhbmQgemNvbmZsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZX1VT RVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBleGVj dXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNkZWZp bmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLQlZ WV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2Vz IGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUg eXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotCXJlZ2lz dGVyIGludCB5eV9hY3Q7Ci0gICAgCi0JaW50IHN0ciA9IDA7Ci0JaW50IHRzLCBpOwotCi0JaWYg KCAhKHl5X2luaXQpICkKLQkJewotCQkoeXlfaW5pdCkgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9J TklUCi0JCVlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0JCWlmICggISAoeXlfc3RhcnQpICkKLQkJ CSh5eV9zdGFydCkgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0JCWlmICggISB6Y29u ZmluICkKLQkJCXpjb25maW4gPSBzdGRpbjsKLQotCQlpZiAoICEgemNvbmZvdXQgKQotCQkJemNv bmZvdXQgPSBzdGRvdXQ7Ci0KLQkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotCQkJemNv bmZlbnN1cmVfYnVmZmVyX3N0YWNrICgpOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0K LQkJCQl6Y29uZl9jcmVhdGVfYnVmZmVyKHpjb25maW4sWVlfQlVGX1NJWkUgKTsKLQkJfQotCi0J CXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOwotCQl9Ci0KLQl3aGlsZSAoIDEgKQkJLyogbG9v cHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwotCQl7Ci0JCXl5X2NwID0gKHl5X2Nf YnVmX3ApOwotCi0JCS8qIFN1cHBvcnQgb2YgemNvbmZ0ZXh0LiAqLwotCQkqeXlfY3AgPSAoeXlf aG9sZF9jaGFyKTsKLQotCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2No X2J1ZiBvZiB0aGUgc3RhcnQgb2YKLQkJICogdGhlIGN1cnJlbnQgcnVuLgotCQkgKi8KLQkJeXlf YnAgPSB5eV9jcDsKLQotCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsKLXl5X21hdGNo OgotCQl3aGlsZSAoICh5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVd WyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSAgXSkgPiAwICkKLQkJCSsreXlfY3A7Ci0KLQkJ eXlfY3VycmVudF9zdGF0ZSA9IC15eV9jdXJyZW50X3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoK LQkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0JCVlZX0RPX0JFRk9S RV9BQ1RJT047Ci0KLWRvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNj ZXNzIEVPRiBhY3Rpb25zLiAqLwotCi0JCXN3aXRjaCAoIHl5X2FjdCApCi0JeyAvKiBiZWdpbm5p bmcgb2YgYWN0aW9uIHN3aXRjaCAqLwotY2FzZSAxOgotLyogcnVsZSAxIGNhbiBtYXRjaCBlb2wg Ki8KLWNhc2UgMjoKLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17 Ci0JY3VycmVudF9maWxlLT5saW5lbm8rKzsKLQlyZXR1cm4gVF9FT0w7Ci19Ci0JWVlfQlJFQUsK LWNhc2UgMzoKLVlZX1JVTEVfU0VUVVAKLQotCVlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NF VFVQCi17Ci0JQkVHSU4oQ09NTUFORCk7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVf U0VUVVAKLXsKLQl1bnB1dCh6Y29uZnRleHRbMF0pOwotCUJFR0lOKENPTU1BTkQpOwotfQotCVlZ X0JSRUFLCi0KLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJY29uc3Qgc3RydWN0IGtjb25m X2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh6Y29uZnRleHQsIHpjb25mbGVuZyk7Ci0JCUJFR0lO KFBBUkFNKTsKLQkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKLQkJY3VycmVudF9w b3MubGluZW5vID0gY3VycmVudF9maWxlLT5saW5lbm87Ci0JCWlmIChpZCAmJiBpZC0+ZmxhZ3Mg JiBURl9DT01NQU5EKSB7Ci0JCQl6Y29uZmx2YWwuaWQgPSBpZDsKLQkJCXJldHVybiBpZC0+dG9r ZW47Ci0JCX0KLQkJYWxsb2Nfc3RyaW5nKHpjb25mdGV4dCwgemNvbmZsZW5nKTsKLQkJemNvbmZs dmFsLnN0cmluZyA9IHRleHQ7Ci0JCXJldHVybiBUX1dPUkQ7Ci0JfQotCVlZX0JSRUFLCi1jYXNl IDc6Ci1ZWV9SVUxFX1NFVFVQCi13YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp6Y29uZnRleHQpOwot CVlZX0JSRUFLCi1jYXNlIDg6Ci0vKiBydWxlIDggY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9T RVRVUAotewotCQlCRUdJTihJTklUSUFMKTsKLQkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKLQkJ cmV0dXJuIFRfRU9MOwotCX0KLQlZWV9CUkVBSwotCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQCi1y ZXR1cm4gVF9BTkQ7Ci0JWVlfQlJFQUsKLWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi1yZXR1cm4g VF9PUjsKLQlZWV9CUkVBSwotY2FzZSAxMToKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX09QRU5f UEFSRU47Ci0JWVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi1yZXR1cm4gVF9DTE9T RV9QQVJFTjsKLQlZWV9CUkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX05P VDsKLQlZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0VRVUFMOwot CVlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfVU5FUVVBTDsKLQlZ WV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0xFU1NfRVFVQUw7Ci0J WVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NFVFVQCi1yZXR1cm4gVF9HUkVBVEVSX0VRVUFM OwotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfTEVTUzsKLQlZ WV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0dSRUFURVI7Ci0JWVlf QlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0JCXN0ciA9IHpjb25mdGV4dFswXTsK LQkJbmV3X3N0cmluZygpOwotCQlCRUdJTihTVFJJTkcpOwotCX0KLQlZWV9CUkVBSwotY2FzZSAy MToKLS8qIHJ1bGUgMjEgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotQkVHSU4oSU5J VElBTCk7IGN1cnJlbnRfZmlsZS0+bGluZW5vKys7IHJldHVybiBUX0VPTDsKLQlZWV9CUkVBSwot Y2FzZSAyMjoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCA9 IGtjb25mX2lkX2xvb2t1cCh6Y29uZnRleHQsIHpjb25mbGVuZyk7Ci0JCWlmIChpZCAmJiBpZC0+ ZmxhZ3MgJiBURl9QQVJBTSkgewotCQkJemNvbmZsdmFsLmlkID0gaWQ7Ci0JCQlyZXR1cm4gaWQt PnRva2VuOwotCQl9Ci0JCWFsbG9jX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7Ci0JCXpj b25mbHZhbC5zdHJpbmcgPSB0ZXh0OwotCQlyZXR1cm4gVF9XT1JEOwotCX0KLQlZWV9CUkVBSwot Y2FzZSAyMzoKLVlZX1JVTEVfU0VUVVAKLS8qIGNvbW1lbnQgKi8KLQlZWV9CUkVBSwotY2FzZSAy NDoKLS8qIHJ1bGUgMjQgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotY3VycmVudF9m aWxlLT5saW5lbm8rKzsKLQlZWV9CUkVBSwotY2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLQotCVlZ X0JSRUFLCi1jYXNlIDI2OgotWVlfUlVMRV9TRVRVUAotd2Fybl9pZ25vcmVkX2NoYXJhY3Rlcigq emNvbmZ0ZXh0KTsKLQlZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0YoUEFSQU0pOgotewotCQlC RUdJTihJTklUSUFMKTsKLQl9Ci0JWVlfQlJFQUsKLQotY2FzZSAyNzoKLS8qIHJ1bGUgMjcgY2Fu IG1hdGNoIGVvbCAqLwotKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBv ZiBzZXR0aW5nIHVwIHpjb25mdGV4dCAqLwotKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKLVlZ X0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB6Y29uZnRleHQgYWdhaW4gKi8KLVlZX1JVTEVf U0VUVVAKLXsKLQkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIHpjb25mbGVuZyk7Ci0JCXpjb25m bHZhbC5zdHJpbmcgPSB0ZXh0OwotCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwotCX0KLQlZWV9CUkVB SwotY2FzZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQs IHpjb25mbGVuZyk7Ci0JfQotCVlZX0JSRUFLCi1jYXNlIDI5OgotLyogcnVsZSAyOSBjYW4gbWF0 Y2ggZW9sICovCi0qeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNl dHRpbmcgdXAgemNvbmZ0ZXh0ICovCi0oeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOwotWVlfRE9f QkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRV UAotewotCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4dCArIDEsIHpjb25mbGVuZyAtIDEpOwotCQl6 Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKLQkJcmV0dXJuIFRfV09SRF9RVU9URTsKLQl9Ci0JWVlf QlJFQUsKLWNhc2UgMzA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0JCWFwcGVuZF9zdHJpbmcoemNvbmZ0 ZXh0ICsgMSwgemNvbmZsZW5nIC0gMSk7Ci0JfQotCVlZX0JSRUFLCi1jYXNlIDMxOgotWVlfUlVM RV9TRVRVUAotewotCQlpZiAoc3RyID09IHpjb25mdGV4dFswXSkgewotCQkJQkVHSU4oUEFSQU0p OwotCQkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7Ci0JCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwot CQl9IGVsc2UKLQkJCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0LCAxKTsKLQl9Ci0JWVlfQlJFQUsK LWNhc2UgMzI6Ci0vKiBydWxlIDMyIGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsK LQkJcHJpbnRmKCIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1cHBvcnRl ZFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JCWN1cnJlbnRfZmlsZS0+ bGluZW5vKys7Ci0JCUJFR0lOKElOSVRJQUwpOwotCQlyZXR1cm4gVF9FT0w7Ci0JfQotCVlZX0JS RUFLCi1jYXNlIFlZX1NUQVRFX0VPRihTVFJJTkcpOgotewotCQlCRUdJTihJTklUSUFMKTsKLQl9 Ci0JWVlfQlJFQUsKLQotY2FzZSAzMzoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJdHMgPSAwOwotCQlm b3IgKGkgPSAwOyBpIDwgemNvbmZsZW5nOyBpKyspIHsKLQkJCWlmICh6Y29uZnRleHRbaV0gPT0g J1x0JykKLQkJCQl0cyA9ICh0cyAmIH43KSArIDg7Ci0JCQllbHNlCi0JCQkJdHMrKzsKLQkJfQot CQlsYXN0X3RzID0gdHM7Ci0JCWlmIChmaXJzdF90cykgewotCQkJaWYgKHRzIDwgZmlyc3RfdHMp IHsKLQkJCQl6Y29uZl9lbmRoZWxwKCk7Ci0JCQkJcmV0dXJuIFRfSEVMUFRFWFQ7Ci0JCQl9Ci0J CQl0cyAtPSBmaXJzdF90czsKLQkJCXdoaWxlICh0cyA+IDgpIHsKLQkJCQlhcHBlbmRfc3RyaW5n KCIgICAgICAgICIsIDgpOwotCQkJCXRzIC09IDg7Ci0JCQl9Ci0JCQlhcHBlbmRfc3RyaW5nKCIg ICAgICAgICIsIHRzKTsKLQkJfQotCX0KLQlZWV9CUkVBSwotY2FzZSAzNDoKLS8qIHJ1bGUgMzQg Y2FuIG1hdGNoIGVvbCAqLwotKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0 cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4dCAqLwotKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsK LVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB6Y29uZnRleHQgYWdhaW4gKi8KLVlZX1JV TEVfU0VUVVAKLXsKLQkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKLQkJemNvbmZfZW5kaGVscCgp OwotCQlyZXR1cm4gVF9IRUxQVEVYVDsKLQl9Ci0JWVlfQlJFQUsKLWNhc2UgMzU6Ci0vKiBydWxl IDM1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsKLQkJY3VycmVudF9maWxlLT5s aW5lbm8rKzsKLQkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKLQl9Ci0JWVlfQlJFQUsKLWNhc2Ug MzY6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0JCXdoaWxlICh6Y29uZmxlbmcpIHsKLQkJCWlmICgoemNv bmZ0ZXh0W3pjb25mbGVuZy0xXSAhPSAnICcpICYmICh6Y29uZnRleHRbemNvbmZsZW5nLTFdICE9 ICdcdCcpKQotCQkJCWJyZWFrOwotCQkJemNvbmZsZW5nLS07Ci0JCX0KLQkJYXBwZW5kX3N0cmlu Zyh6Y29uZnRleHQsIHpjb25mbGVuZyk7Ci0JCWlmICghZmlyc3RfdHMpCi0JCQlmaXJzdF90cyA9 IGxhc3RfdHM7Ci0JfQotCVlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihIRUxQKToKLXsKLQkJ emNvbmZfZW5kaGVscCgpOwotCQlyZXR1cm4gVF9IRUxQVEVYVDsKLQl9Ci0JWVlfQlJFQUsKLQot Y2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6Ci1jYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToK LXsKLQlpZiAoY3VycmVudF9maWxlKSB7Ci0JCXpjb25mX2VuZGZpbGUoKTsKLQkJcmV0dXJuIFRf RU9MOwotCX0KLQlmY2xvc2UoemNvbmZpbik7Ci0JeXl0ZXJtaW5hdGUoKTsKLX0KLQlZWV9CUkVB SwotY2FzZSAzNzoKLVlZX1JVTEVfU0VUVVAKLVlZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVy IGphbW1lZCIgKTsKLQlZWV9CUkVBSwotCi0JY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotCQl7Ci0J CS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICov Ci0JCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0gKHl5dGV4 dF9wdHIpKSAtIDE7Ci0KLQkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNU SU9OLiAqLwotCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKLQkJWVlfUkVTVE9SRV9ZWV9NT1JF X09GRlNFVAotCi0JCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh dHVzID09IFlZX0JVRkZFUl9ORVcgKQotCQkJewotCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcg ZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFw cGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotCQkJICoganVzdCBwb2ludGVkIHpjb25maW4gYXQgYSBu ZXcgc291cmNlIGFuZCBjYWxsZWQKLQkJCSAqIHpjb25mbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo YXZlIHRvIGFzc3VyZQotCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF UiBhbmQgb3VyCi0JCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g c28sIGJlY2F1c2UKLQkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBw b3NzaWJseSBhCi0JCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w dXQgc291cmNlLgotCQkJICovCi0JCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9M VkFMVUUtPnl5X25fY2hhcnM7Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0 X2ZpbGUgPSB6Y29uZmluOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLQkJCX0KLQotCQkvKiBOb3RlIHRoYXQgaGVyZSB3 ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0JCSAqIG9mIHRoZSBm aXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0JCSAqIGFscmVh ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLQkJICogKHNp bmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0JCSAqIGVuZC1v Zi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0JCSAqIGluIGlu cHV0KCkuCi0JCSAqLwotCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJf TFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCi0JCQl7IC8qIFRoaXMgd2FzIHJlYWxs eSBhIE5VTC4gKi8KLQkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotCQkJKHl5X2Nf YnVmX3ApID0gKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotCQkJ eXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7Ci0KLQkJCS8qIE9r YXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotCQkJICogdHJhbnNpdGlv bi4gIFdlIGNvdWxkbid0IGhhdmUKLQkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFo ZWFkIGFuZCBkbyBpdAotCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0 byBkZWFsCi0JCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9u J3QKLQkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAot CQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotCQkJICovCi0KLQkJCXl5X25leHRfc3RhdGUg PSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7Ci0KLQkJCXl5X2JwID0gKHl5 dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7Ci0KLQkJCWlmICggeXlfbmV4dF9zdGF0ZSApCi0JCQkJ ewotCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLQkJCQl5eV9jcCA9ICsrKHl5X2NfYnVmX3Ap OwotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotCQkJCWdvdG8geXlfbWF0 Y2g7Ci0JCQkJfQotCi0JCQllbHNlCi0JCQkJewotCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOwot CQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0JCQkJfQotCQkJfQotCi0JCWVsc2Ugc3dpdGNoICgg eXlfZ2V0X25leHRfYnVmZmVyKCAgKSApCi0JCQl7Ci0JCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJ TEU6Ci0JCQkJewotCQkJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMDsKLQotCQkJ CWlmICggemNvbmZ3cmFwKCApICkKLQkJCQkJewotCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3Zl IHRha2VuIGNhcmUgaW4KLQkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQg dXAKLQkJCQkJICogemNvbmZ0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAotCQkJCQkgKiB5eV9jX2J1 Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAotCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2Vs Zikgd2FudHMgdG8KLQkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhl Ci0JCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0JCQkJCSAqIFlZ X05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0JCQkJCSAqLwotCQkJCQkoeXlfY19idWZfcCkgPSAo eXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKLQotCQkJCQl5eV9hY3QgPSBZWV9TVEFURV9FT0Yo WVlfU1RBUlQpOwotCQkJCQlnb3RvIGRvX2FjdGlvbjsKLQkJCQkJfQotCi0JCQkJZWxzZQotCQkJ CQl7Ci0JCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCi0JCQkJCQlZ WV9ORVdfRklMRTsKLQkJCQkJfQotCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2FzZSBFT0JfQUNU X0NPTlRJTlVFX1NDQU46Ci0JCQkJKHl5X2NfYnVmX3ApID0KLQkJCQkJKHl5dGV4dF9wdHIpICsg eXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n ZXRfcHJldmlvdXNfc3RhdGUoICApOwotCi0JCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7Ci0JCQkJ eXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X21hdGNoOwot Ci0JCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLQkJCQkoeXlfY19idWZfcCkgPQotCQkJCSZZ WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldOwotCi0JCQkJ eXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7Ci0KLQkJCQl5eV9j cCA9ICh5eV9jX2J1Zl9wKTsKLQkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURK OwotCQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0JCQl9Ci0JCWJyZWFrOwotCQl9Ci0KLQlkZWZh dWx0OgotCQlZWV9GQVRBTF9FUlJPUigKLQkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwg ZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLQl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICov Ci0JCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAvKiBlbmQgb2YgemNvbmZs ZXggKi8KLQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVm ZmVyCi0gKgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKLSAqCUVP Ql9BQ1RfTEFTVF9NQVRDSCAtCi0gKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBz Y2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBl bmQgb2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkKLXsK LSAgICAJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf Y2hfYnVmOwotCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9ICh5eXRleHRfcHRyKTsKLQlyZWdpc3Rl ciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoICh5eV9jX2J1 Zl9wKSA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykg KyAxXSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFs IGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZG RVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8gZmls bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCAoeXlfY19idWZfcCkg LSAoeXl0ZXh0X3B0cikgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8qIFdlIG1hdGNo ZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQgdGhpcyBhcyBh IGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQl9 Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhl IEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVybiBFT0JfQUNU X0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8K LQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0JbnVt YmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpKSAtIDE7Ci0K LQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotCQkqKGRlc3QrKykgPSAq KHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf c3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRvbid0IGRvIHRoZSByZWFk LCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0JCSAqIGp1c3QgZm9yY2Ug YW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAo eXlfbl9jaGFycykgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQlpbnQgbnVtX3RvX3JlYWQgPQotCQkJ WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g MTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotCQkJeyAvKiBOb3QgZW5vdWdoIHJv b20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLQkJCS8qIGp1c3QgYSBzaG9ydGVyIG5h bWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9D VVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLQkJCQkoaW50KSAo KHl5X2NfYnVmX3ApIC0gYi0+eXlfY2hfYnVmKTsKLQotCQkJaWYgKCBiLT55eV9pc19vdXJfYnVm ZmVyICkKLQkJCQl7Ci0JCQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0J CQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKLQkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm X3NpemUgLyA4OwotCQkJCWVsc2UKLQkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWIt Pnl5X2NoX2J1ZiA9IChjaGFyICopCi0JCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0Ig Y2hhcnMuICovCi0JCQkJCXpjb25mcmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlf YnVmX3NpemUgKyAyICApOwotCQkJCX0KLQkJCWVsc2UKLQkJCQkvKiBDYW4ndCBncm93IGl0LCB3 ZSBkb24ndCBvd24gaXQuICovCi0JCQkJYi0+eXlfY2hfYnVmID0gMDsKLQotCQkJaWYgKCAhIGIt Pnl5X2NoX2J1ZiApCi0JCQkJWVlfRkFUQUxfRVJST1IoCi0JCQkJImZhdGFsIGVycm9yIC0gc2Nh bm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0KLQkJCSh5eV9jX2J1Zl9wKSA9ICZiLT55 eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwotCi0JCQludW1fdG9fcmVhZCA9IFlZX0NVUlJF TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAx OwotCi0JCQl9Ci0KLQkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQotCQkJ bnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwotCi0JCS8qIFJlYWQgaW4gbW9yZSBkYXRh LiAqLwotCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zltu dW1iZXJfdG9fbW92ZV0pLAotCQkJKHl5X25fY2hhcnMpLCAoc2l6ZV90KSBudW1fdG9fcmVhZCAp OwotCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJz KTsKLQkJfQotCi0JaWYgKCAoeXlfbl9jaGFycykgPT0gMCApCi0JCXsKLQkJaWYgKCBudW1iZXJf dG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0JCQl7Ci0JCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRf T0ZfRklMRTsKLQkJCXpjb25mcmVzdGFydCh6Y29uZmluICApOwotCQkJfQotCi0JCWVsc2UKLQkJ CXsKLQkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0JCQlZWV9DVVJSRU5UX0JVRkZF Ul9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsK LQkJCX0KLQkJfQotCi0JZWxzZQotCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwot Ci0JaWYgKCh5eV9zaXplX3QpICgoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9D VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0JCS8qIEV4dGVuZCB0aGUgYXJy YXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0JCXl5X3NpemVf dCBuZXdfc2l6ZSA9ICh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlICsgKCh5eV9uX2NoYXJz KSA+PiAxKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAq KSB6Y29uZnJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i dWYsbmV3X3NpemUgICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No X2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9n ZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQkoeXlfbl9jaGFycykgKz0gbnVtYmVyX3RvX21v dmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSA9 IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No X2J1ZlsoeXlfbl9jaGFycykgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCSh5eXRl eHRfcHRyKSA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKLQotCXJl dHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0 YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLwotCi0gICAgc3RhdGlj IHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkKQotewotCXJlZ2lzdGVy IHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5eV9jcDsK LSAgICAKLQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsKLQotCWZvciAoIHl5X2NwID0g KHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgKHl5X2NfYnVmX3ApOyArK3l5X2Nw ICkKLQkJewotCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVdWygq eXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpXTsKLQkJfQotCi0JcmV0dXJu IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFr ZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNpcwotICoJ bmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAg IHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5 X2N1cnJlbnRfc3RhdGUgKQotewotCXJlZ2lzdGVyIGludCB5eV9pc19qYW07Ci0gICAgCi0JeXlf Y3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsxXTsKLQl5eV9pc19qYW0g PSAoeXlfY3VycmVudF9zdGF0ZSA8PSAwKTsKLQotCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlf Y3VycmVudF9zdGF0ZTsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLCByZWdp c3RlciBjaGFyICogeXlfYnAgKQotewotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIAotICAg IHl5X2NwID0gKHl5X2NfYnVmX3ApOwotCi0JLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAg emNvbmZ0ZXh0ICovCi0JKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7Ci0KLQlpZiAoIHl5X2NwIDwg WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKyAyICkKLQkJeyAvKiBuZWVkIHRv IHNoaWZ0IHRoaW5ncyB1cCB0byBtYWtlIHJvb20gKi8KLQkJLyogKzIgZm9yIEVPQiBjaGFycy4g Ki8KLQkJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlID0gKHl5X25fY2hhcnMpICsgMjsKLQkJ cmVnaXN0ZXIgY2hhciAqZGVzdCA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1 ZlsKLQkJCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSArIDJdOwotCQly ZWdpc3RlciBjaGFyICpzb3VyY2UgPQotCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5 X2NoX2J1ZltudW1iZXJfdG9fbW92ZV07Ci0KLQkJd2hpbGUgKCBzb3VyY2UgPiBZWV9DVVJSRU5U X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0JCQkqLS1kZXN0ID0gKi0tc291cmNlOwotCi0J CXl5X2NwICs9IChpbnQpIChkZXN0IC0gc291cmNlKTsKLQkJeXlfYnAgKz0gKGludCkgKGRlc3Qg LSBzb3VyY2UpOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPQotCQkJ KHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZTsKLQot CQlpZiAoIHl5X2NwIDwgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKyAyICkK LQkJCVlZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVyIHB1c2gtYmFjayBvdmVyZmxvdyIgKTsK LQkJfQotCi0JKi0teXlfY3AgPSAoY2hhcikgYzsKLQotCSh5eXRleHRfcHRyKSA9IHl5X2JwOwot CSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOwotCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOwotfQotCi0j aWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5 aW5wdXQgKHZvaWQpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh2b2lkKQotI2VuZGlm Ci0KLXsKLQlpbnQgYzsKLSAgICAKLQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7Ci0K LQlpZiAoICooeXlfY19idWZfcCkgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLQkJewotCQkv KiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVy bi4KLQkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVu IGl0J3MgYQotCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBv ZiB0aGUgYnVmZmVyLgotCQkgKi8KLQkJaWYgKCAoeXlfY19idWZfcCkgPCAmWVlfQ1VSUkVOVF9C VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCi0JCQkvKiBUaGlzIHdhcyBy ZWFsbHkgYSBOVUwuICovCi0JCQkqKHl5X2NfYnVmX3ApID0gJ1wwJzsKLQotCQllbHNlCi0JCQl7 IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotCQkJaW50IG9mZnNldCA9ICh5eV9jX2J1Zl9wKSAtICh5 eXRleHRfcHRyKTsKLQkJCSsrKHl5X2NfYnVmX3ApOwotCi0JCQlzd2l0Y2ggKCB5eV9nZXRfbmV4 dF9idWZmZXIoICApICkKLQkJCQl7Ci0JCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJ CS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKLQkJCQkJICogc2VlcyB0aGF0IHdl J3ZlIGFjY3VtdWxhdGVkIGEKLQkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0 bwotCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotCQkJCQkgKiBwcm9jZWVk aW5nLiAgQnV0IGZvciBpbnB1dCgpLAotCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNv bnNpZGVyLgotCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLQkJCQkJ ICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLQkJCQkJICovCi0KLQkJCQkJLyogUmVzZXQgYnVm ZmVyIHN0YXR1cy4gKi8KLQkJCQkJemNvbmZyZXN0YXJ0KHpjb25maW4gKTsKLQotCQkJCQkvKkZB TExUSFJPVUdIKi8KLQotCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLQkJCQkJewotCQkJ CQlpZiAoIHpjb25md3JhcCggKSApCi0JCQkJCQlyZXR1cm4gRU9GOwotCi0JCQkJCWlmICggISAo eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCi0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRl ZiBfX2NwbHVzcGx1cwotCQkJCQlyZXR1cm4geXlpbnB1dCgpOwotI2Vsc2UKLQkJCQkJcmV0dXJu IGlucHV0KCk7Ci0jZW5kaWYKLQkJCQkJfQotCi0JCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1ND QU46Ci0JCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKLQkJCQkJYnJl YWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1 Zl9wKTsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0JKih5eV9jX2J1Zl9wKSA9ICdcMCc7 CS8qIHByZXNlcnZlIHpjb25mdGV4dCAqLwotCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVm X3ApOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0K LS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICog QHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiAKLSAqIEBub3RlIFRoaXMg ZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFM IC4KLSAqLwotICAgIHZvaWQgemNvbmZyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgKQotewot ICAgIAotCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICB6Y29uZmVuc3VyZV9i dWZmZXJfc3RhY2sgKCk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAg ICB6Y29uZl9jcmVhdGVfYnVmZmVyKHpjb25maW4sWVlfQlVGX1NJWkUgKTsKLQl9Ci0KLQl6Y29u Zl9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7Ci0JemNvbmZfbG9h ZF9idWZmZXJfc3RhdGUoICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQg YnVmZmVyLgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiAK LSAqLwotICAgIHZvaWQgemNvbmZfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAg bmV3X2J1ZmZlciApCi17Ci0gICAgCi0JLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVw bGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0JICogd2l0aAotCSAqCQl6Y29uZnBvcF9i dWZmZXJfc3RhdGUoKTsKLQkgKgkJemNvbmZwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsK LSAgICAgKi8KLQl6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKCk7Ci0JaWYgKCBZWV9DVVJSRU5U X0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZWV9DVVJSRU5UX0JV RkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq LwotCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7Ci0JCVlZX0NVUlJFTlRfQlVGRkVS X0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJf TFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JV RkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOwot Ci0JLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBk dXJpbmcKLQkgKiBFT0YgKHpjb25md3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGlt ZSB0aGlzIGZsYWcKLQkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgemNvbmZ3cmFwKCkgaXMgY2Fs bGVkLCBzbyBpdCdzIHNhZmUKLQkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkg Ki8KLQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lk IHpjb25mX2xvYWRfYnVmZmVyX3N0YXRlICAodm9pZCkKLXsKLSAgICAJKHl5X25fY2hhcnMpID0g WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotCSh5eXRleHRfcHRyKSA9ICh5 eV9jX2J1Zl9wKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLQl6Y29u ZmluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotCSh5eV9ob2xk X2NoYXIpID0gKih5eV9jX2J1Zl9wKTsKLX0KLQotLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXpl IGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFt LgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hl biBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgotICogCi0gKiBAcmV0dXJuIHRoZSBhbGxv Y2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHpjb25mX2NyZWF0 ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICkKLXsKLQlZWV9CVUZGRVJfU1RBVEUg YjsKLSAgICAKLQliID0gKFlZX0JVRkZFUl9TVEFURSkgemNvbmZhbGxvYyhzaXplb2YoIHN0cnVj dCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAi b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHpjb25mX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotCWIt Pnl5X2J1Zl9zaXplID0gc2l6ZTsKLQotCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0 ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKLQkgKiB3ZSBuZWVkIHRvIHB1 dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KLQkgKi8KLQliLT55eV9jaF9idWYgPSAo Y2hhciAqKSB6Y29uZmFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAgKTsKLQlpZiAoICEgYi0+eXlf Y2hfYnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNv bmZfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQl6 Y29uZl9pbml0X2J1ZmZlcihiLGZpbGUgKTsKLQotCXJldHVybiBiOwotfQotCi0vKiogRGVzdHJv eSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHpjb25mX2Ny ZWF0ZV9idWZmZXIoKQotICogCi0gKi8KLSAgICB2b2lkIHpjb25mX2RlbGV0ZV9idWZmZXIgKFlZ X0JVRkZFUl9TVEFURSAgYiApCi17Ci0gICAgCi0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQlp ZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9w IGhlcmUuICovCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUp IDA7Ci0KLQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQl6Y29uZmZyZWUoKHZvaWQgKikg Yi0+eXlfY2hfYnVmICApOwotCi0JemNvbmZmcmVlKCh2b2lkICopIGIgICk7Ci19Ci0KLS8qIElu aXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9uIGlz IHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAotICog c3VjaCBhcyBkdXJpbmcgYSB6Y29uZnJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0 aWMgdm9pZCB6Y29uZl9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZp bGUgKQotCi17Ci0JaW50IG9lcnJubyA9IGVycm5vOwotICAgIAotCXpjb25mX2ZsdXNoX2J1ZmZl cihiICk7Ci0KLQliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKLQliLT55eV9maWxsX2J1ZmZlciA9 IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB6Y29uZl9pbml0 X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAgICAqIGNhbGxlZCBmcm9tIHpjb25mcmVzdGFydCgp IG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgotICAgICAqIEluIHRoYXQgY2FzZSwgd2Ug ZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KLSAgICAgKi8KLSAgICBp ZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7 Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7Ci0gICAgfQotCi0gICAgICAgIGItPnl5X2lz X2ludGVyYWN0aXZlID0gMDsKLSAgICAKLQllcnJubyA9IG9lcnJubzsKLX0KLQotLyoqIERpc2Nh cmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdp bGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVk LCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgotICogCi0gKi8KLSAgICB2b2lkIHpjb25m X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKLXsKLSAgICAJaWYgKCAhIGIgKQot CQlyZXR1cm47Ci0KLQliLT55eV9uX2NoYXJzID0gMDsKLQotCS8qIFdlIGFsd2F5cyBuZWVkIHR3 byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0JICogYSB0cmFu c2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLQkg KiBhIGphbSBpbiB0aGF0IHN0YXRlLgotCSAqLwotCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9P Rl9CVUZGRVJfQ0hBUjsKLQliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7 Ci0KLQliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotCWItPnl5X2F0X2JvbCA9 IDE7Ci0JYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQlpZiAoIGIgPT0g WVlfQ1VSUkVOVF9CVUZGRVIgKQotCQl6Y29uZl9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKLX0KLQot LyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJl Y29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRl IHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUg bmV3IHN0YXRlLgotICogIAotICovCi12b2lkIHpjb25mcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JV RkZFUl9TVEFURSBuZXdfYnVmZmVyICkKLXsKLSAgICAJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkK LQkJcmV0dXJuOwotCi0JemNvbmZlbnN1cmVfYnVmZmVyX3N0YWNrKCk7Ci0KLQkvKiBUaGlzIGJs b2NrIGlzIGNvcGllZCBmcm9tIHpjb25mX3N3aXRjaF90b19idWZmZXIuICovCi0JaWYgKCBZWV9D VVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg YnVmZmVyLiAqLwotCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7Ci0JCVlZX0NVUlJF TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKLQkJWVlfQ1VSUkVO VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOwotCQl9Ci0KLQkvKiBP bmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLQlpZiAo WVlfQ1VSUkVOVF9CVUZGRVIpCi0JCSh5eV9idWZmZXJfc3RhY2tfdG9wKSsrOwotCVlZX0NVUlJF TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0KLQkvKiBjb3BpZWQgZnJvbSB6Y29uZl9z d2l0Y2hfdG9fYnVmZmVyLiAqLwotCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOwotCSh5eV9k aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0 ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVu dCBiZWNvbWVzIHRoZSBuZXcgdG9wLgotICogIAotICovCi12b2lkIHpjb25mcG9wX2J1ZmZlcl9z dGF0ZSAodm9pZCkKLXsKLSAgICAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLQkJcmV0dXJuOwot Ci0JemNvbmZfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApOwotCVlZX0NVUlJFTlRf QlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApCi0J CS0tKHl5X2J1ZmZlcl9zdGFja190b3ApOwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0J CXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOwotCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f ZW9mKSA9IDE7Ci0JfQotfQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90 IGV4aXN0LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICov Ci1zdGF0aWMgdm9pZCB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQpCi17Ci0JaW50IG51 bV90b19hbGxvYzsKLSAgICAKLQlpZiAoISh5eV9idWZmZXJfc3RhY2spKSB7Ci0KLQkJLyogRmly c3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93 IGlmIHRoaXMKLQkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBp bnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLQkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5l eHQgY2FsbC4KLSAgICAgICAgICovCi0JCW51bV90b19hbGxvYyA9IDE7Ci0JCSh5eV9idWZmZXJf c3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil6Y29uZmFsbG9jCi0JCQkJCQkJCShu dW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSk7 Ci0JCWlmICggISAoeXlfYnVmZmVyX3N0YWNrKSApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv ZiBkeW5hbWljIG1lbW9yeSBpbiB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQkJCQkJ CQkJICAKLQkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXpl b2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLQkJCQkKLQkJKHl5X2J1ZmZlcl9zdGFja19t YXgpID0gbnVtX3RvX2FsbG9jOwotCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOwotCQlyZXR1 cm47Ci0JfQotCi0JaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1ZmZlcl9zdGFj a19tYXgpKSAtIDEpewotCi0JCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3Ig YSBwb3NzaWJsZSBwdXNoLiAqLwotCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3Jv dyBzaXplICovOwotCi0JCW51bV90b19hbGxvYyA9ICh5eV9idWZmZXJfc3RhY2tfbWF4KSArIGdy b3dfc2l6ZTsKLQkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq KXpjb25mcmVhbGxvYwotCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCi0JCQkJCQkJCW51bV90 b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJKTsKLQkJ aWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5 bmFtaWMgbWVtb3J5IGluIHpjb25mZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0JCS8qIHpl cm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0JCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSArICh5 eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm ZXJfc3RhdGUqKSk7Ci0JCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsKLQl9 Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkg ZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0 aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2Yg dGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIAotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk IGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9i dWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICkKLXsKLQlZWV9CVUZGRVJfU1RB VEUgYjsKLSAgICAKLQlpZiAoIHNpemUgPCAyIHx8Ci0JICAgICBiYXNlW3NpemUtMl0gIT0gWVlf RU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0JICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JV RkZFUl9DSEFSICkKLQkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidz LiAqLwotCQlyZXR1cm4gMDsKLQotCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB6Y29uZmFsbG9jKHNp emVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOwotCWlmICggISBiICkKLQkJWVlfRkFU QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNvbmZfc2Nhbl9idWZmZXIoKSIg KTsKLQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBv ZiBFT0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotCWItPnl5 X2lzX291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2ZpbGUgPSAwOwotCWItPnl5X25fY2hh cnMgPSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0JYi0+eXlf YXRfYm9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0JYi0+eXlfYnVmZmVyX3N0YXR1 cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQl6Y29uZl9zd2l0Y2hfdG9fYnVmZmVyKGIgICk7Ci0KLQly ZXR1cm4gYjsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBh IHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB6Y29uZmxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBh IEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3Ry aW5nIHRvIHNjYW4KLSAqIAotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBz dGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5 IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHpjb25mX3NjYW5fYnl0ZXMo KSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9zdHJpbmcgKHl5Y29u c3QgY2hhciAqIHl5c3RyICkKLXsKLSAgICAKLQlyZXR1cm4gemNvbmZfc2Nhbl9ieXRlcyh5eXN0 cixzdHJsZW4oeXlzdHIpICk7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRl IHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2ls bAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSB5eWJ5dGVz IHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1i ZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgotICogCi0g KiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqLwot WVlfQlVGRkVSX1NUQVRFIHpjb25mX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVz LCBpbnQgIF95eWJ5dGVzX2xlbiApCi17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0JY2hhciAqYnVm OwotCXl5X3NpemVfdCBuOwotCWludCBpOwotICAgIAotCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwg YnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotCW4gPSBfeXli eXRlc19sZW4gKyAyOwotCWJ1ZiA9IChjaGFyICopIHpjb25mYWxsb2MobiAgKTsKLQlpZiAoICEg YnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNvbmZf c2Nhbl9ieXRlcygpIiApOwotCi0JZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSAp Ci0JCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07Ci0KLQlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXli eXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLQliID0gemNvbmZfc2Nhbl9i dWZmZXIoYnVmLG4gKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZl ciBpbiB6Y29uZl9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMu IHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICogYXdheSB3aGVuIHdlJ3Jl IGRvbmUuCi0JICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlyZXR1cm4gYjsKLX0K LQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNl bmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQot ewotICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotCWV4aXQoIFlZ X0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBp biBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxlc3Mobikg XAotCWRvIFwKLQkJeyBcCi0JCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4 dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZ WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0JCXpjb25mdGV4dFt6Y29uZmxlbmdd ID0gKHl5X2hvbGRfY2hhcik7IFwKLQkJKHl5X2NfYnVmX3ApID0gemNvbmZ0ZXh0ICsgeXlsZXNz X21hY3JvX2FyZzsgXAotCQkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19idWZfcCk7IFwKLQkJKih5 eV9jX2J1Zl9wKSA9ICdcMCc7IFwKLQkJemNvbmZsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAot CQl9IFwKLQl3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5j dGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSBjdXJyZW50IGxpbmUg bnVtYmVyLgotICogCi0gKi8KLWludCB6Y29uZmdldF9saW5lbm8gICh2b2lkKQotewotICAgICAg ICAKLSAgICByZXR1cm4gemNvbmZsaW5lbm87Ci19Ci0KLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVh bS4KLSAqIAotICovCi1GSUxFICp6Y29uZmdldF9pbiAgKHZvaWQpCi17Ci0gICAgICAgIHJldHVy biB6Y29uZmluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogCi0gKi8KLUZJ TEUgKnpjb25mZ2V0X291dCAgKHZvaWQpCi17Ci0gICAgICAgIHJldHVybiB6Y29uZm91dDsKLX0K LQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgotICogCi0gKi8KLWlu dCB6Y29uZmdldF9sZW5nICAodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuIHpjb25mbGVuZzsKLX0K LQotLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAqIAotICovCi0KLWNoYXIgKnpjb25mZ2V0 X3RleHQgICh2b2lkKQotewotICAgICAgICByZXR1cm4gemNvbmZ0ZXh0OwotfQotCi0vKiogU2V0 IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiAKLSAq Lwotdm9pZCB6Y29uZnNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgKQotewotICAgIAotICAg IHpjb25mbGluZW5vID0gbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVh bS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0g KiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogCi0gKiBAc2VlIHpjb25mX3N3 aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCB6Y29uZnNldF9pbiAoRklMRSAqICBpbl9zdHIgKQot ewotICAgICAgICB6Y29uZmluID0gaW5fc3RyIDsKLX0KLQotdm9pZCB6Y29uZnNldF9vdXQgKEZJ TEUgKiAgb3V0X3N0ciApCi17Ci0gICAgICAgIHpjb25mb3V0ID0gb3V0X3N0ciA7Ci19Ci0KLWlu dCB6Y29uZmdldF9kZWJ1ZyAgKHZvaWQpCi17Ci0gICAgICAgIHJldHVybiB6Y29uZl9mbGV4X2Rl YnVnOwotfQotCi12b2lkIHpjb25mc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyApCi17Ci0gICAgICAg IHpjb25mX2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xv YmFscyAodm9pZCkKLXsKLSAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMg Zm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgZnJvbSB6Y29uZmxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCi0g ICAgICovCi0KLSAgICAoeXlfYnVmZmVyX3N0YWNrKSA9IDA7Ci0gICAgKHl5X2J1ZmZlcl9zdGFj a190b3ApID0gMDsKLSAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOwotICAgICh5eV9jX2J1 Zl9wKSA9IChjaGFyICopIDA7Ci0gICAgKHl5X2luaXQpID0gMDsKLSAgICAoeXlfc3RhcnQpID0g MDsKLQotLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNpZmRlZiBZWV9TVERJTklUCi0gICAgemNv bmZpbiA9IHN0ZGluOwotICAgIHpjb25mb3V0ID0gc3Rkb3V0OwotI2Vsc2UKLSAgICB6Y29uZmlu ID0gKEZJTEUgKikgMDsKLSAgICB6Y29uZm91dCA9IChGSUxFICopIDA7Ci0jZW5kaWYKLQotICAg IC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFy ZSBjYWxsZWQgYnkKLSAgICAgKiB6Y29uZmxleF9pbml0KCkKLSAgICAgKi8KLSAgICByZXR1cm4g MDsKLX0KLQotLyogemNvbmZsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5v bi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCi1pbnQgemNvbmZsZXhfZGVzdHJveSAgKHZvaWQpCi17 Ci0gICAgCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVt ZW50LiAqLwotCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLQkJemNvbmZfZGVsZXRlX2J1ZmZl cihZWV9DVVJSRU5UX0JVRkZFUiAgKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVM TDsKLQkJemNvbmZwb3BfYnVmZmVyX3N0YXRlKCk7Ci0JfQotCi0JLyogRGVzdHJveSB0aGUgc3Rh Y2sgaXRzZWxmLiAqLwotCXpjb25mZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOwotCSh5eV9idWZm ZXJfc3RhY2spID0gTlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGlt cG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAg ICogemNvbmZsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0g ICAgeXlfaW5pdF9nbG9iYWxzKCApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRl cm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGlj IHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBu ICkKLXsKLQlyZWdpc3RlciBpbnQgaTsKLQlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCi0JCXMx W2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMg aW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKLXsKLQlyZWdpc3RlciBpbnQg bjsKLQlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKLQkJOwotCi0JcmV0dXJuIG47Ci19Ci0jZW5k aWYKLQotdm9pZCAqemNvbmZhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkKLXsKLQlyZXR1cm4gKHZv aWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZvaWQgKnpjb25mcmVhbGxvYyAgKHZvaWQgKiBw dHIsIHl5X3NpemVfdCAgc2l6ZSApCi17Ci0JLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhl IGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVz ZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLQkgKiB0aGF0IHVzZSB2b2lkKiBn ZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0JICogYmVjYXVzZSBi b3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotCSAqIGFu eSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lv bnMKLQkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLQkgKi8KLQlyZXR1cm4gKHZv aWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQgemNvbmZmcmVl ICh2b2lkICogcHRyICkKLXsKLQlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHpjb25mcmVh bGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCi19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAi eXl0YWJsZXMiCi0KLXZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCi17Ci0JbmV3X3N0cmluZygp OwotCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7Ci0JQkVHSU4oSEVMUCk7Ci19Ci0KLXN0YXRpYyB2 b2lkIHpjb25mX2VuZGhlbHAodm9pZCkKLXsKLQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKLQlC RUdJTihJTklUSUFMKTsKLX0KLQotLyoKLSAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBmaWxlIHdp dGggZm9sbG93aW5nIG5hbWVzOgotICogLi9uYW1lCi0gKiAkKHNyY3RyZWUpL25hbWUKLSAqIFRo ZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0cmVlCi0g KiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgotICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBu b3QgZm91bmQuCi0gKi8KLUZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0J Y2hhciAqZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKLQlGSUxFICpmOwotCi0JZiA9IGZvcGVu KG5hbWUsICJyIik7Ci0JaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykg ewotCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7Ci0JCWlmIChlbnYpIHsKLQkJCXNwcmludGYoZnVs bG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7Ci0JCQlmID0gZm9wZW4oZnVsbG5hbWUsICJyIik7 Ci0JCX0KLQl9Ci0JcmV0dXJuIGY7Ci19Ci0KLXZvaWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hh ciAqbmFtZSkKLXsKLQl6Y29uZmluID0gemNvbmZfZm9wZW4obmFtZSk7Ci0JaWYgKCF6Y29uZmlu KSB7Ci0JCXByaW50ZigiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1lKTsKLQkJZXhpdCgxKTsK LQl9Ci0KLQljdXJyZW50X2J1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1ZikpOwotCW1l bXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOwotCi0JY3VycmVudF9m aWxlID0gZmlsZV9sb29rdXAobmFtZSk7Ci0JY3VycmVudF9maWxlLT5saW5lbm8gPSAxOwotfQot Ci12b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGZpbGUg Kml0ZXI7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKLQlzdHJ1Y3Qg YnVmZmVyICpidWYgPSB4bWFsbG9jKHNpemVvZigqYnVmKSk7Ci0JbWVtc2V0KGJ1ZiwgMCwgc2l6 ZW9mKCpidWYpKTsKLQotCWN1cnJlbnRfYnVmLT5zdGF0ZSA9IFlZX0NVUlJFTlRfQlVGRkVSOwot CXpjb25maW4gPSB6Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsKLQlpZiAoIXpjb25maW4pIHsKLQkJ cHJpbnRmKCIlczolZDogY2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIlxuIiwKLQkJICAgIHpjb25mX2N1 cm5hbWUoKSwgemNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOwotCQlleGl0KDEpOwotCX0KLQl6 Y29uZl9zd2l0Y2hfdG9fYnVmZmVyKHpjb25mX2NyZWF0ZV9idWZmZXIoemNvbmZpbixZWV9CVUZf U0laRSkpOwotCWJ1Zi0+cGFyZW50ID0gY3VycmVudF9idWY7Ci0JY3VycmVudF9idWYgPSBidWY7 Ci0KLQlmb3IgKGl0ZXIgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsgaXRlcjsgaXRlciA9IGl0ZXIt PnBhcmVudCApIHsKLQkJaWYgKCFzdHJjbXAoY3VycmVudF9maWxlLT5uYW1lLGl0ZXItPm5hbWUp ICkgewotCQkJcHJpbnRmKCIlczolZDogcmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4gIgot CQkJICAgICAgICJJbmNsdXNpb24gcGF0aDpcbiAgY3VycmVudCBmaWxlIDogJyVzJ1xuIiwKLQkJ CSAgICAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAotCQkJICAgICAgIHpjb25m X2N1cm5hbWUoKSk7Ci0JCQlpdGVyID0gY3VycmVudF9maWxlLT5wYXJlbnQ7Ci0JCQl3aGlsZSAo aXRlciAmJiBcCi0JCQkgICAgICAgc3RyY21wKGl0ZXItPm5hbWUsY3VycmVudF9maWxlLT5uYW1l KSkgewotCQkJCXByaW50ZigiICBpbmNsdWRlZCBmcm9tOiAnJXM6JWQnXG4iLAotCQkJCSAgICAg ICBpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8tMSk7Ci0JCQkJaXRlciA9IGl0ZXItPnBhcmVudDsK LQkJCX0KLQkJCWlmIChpdGVyKQotCQkJCXByaW50ZigiICBpbmNsdWRlZCBmcm9tOiAnJXM6JWQn XG4iLAotCQkJCSAgICAgICBpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8rMSk7Ci0JCQlleGl0KDEp OwotCQl9Ci0JfQotCWZpbGUtPmxpbmVubyA9IDE7Ci0JZmlsZS0+cGFyZW50ID0gY3VycmVudF9m aWxlOwotCWN1cnJlbnRfZmlsZSA9IGZpbGU7Ci19Ci0KLXN0YXRpYyB2b2lkIHpjb25mX2VuZGZp bGUodm9pZCkKLXsKLQlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7Ci0KLQljdXJyZW50X2ZpbGUgPSBj dXJyZW50X2ZpbGUtPnBhcmVudDsKLQotCXBhcmVudCA9IGN1cnJlbnRfYnVmLT5wYXJlbnQ7Ci0J aWYgKHBhcmVudCkgewotCQlmY2xvc2UoemNvbmZpbik7Ci0JCXpjb25mX2RlbGV0ZV9idWZmZXIo WVlfQ1VSUkVOVF9CVUZGRVIpOwotCQl6Y29uZl9zd2l0Y2hfdG9fYnVmZmVyKHBhcmVudC0+c3Rh dGUpOwotCX0KLQlmcmVlKGN1cnJlbnRfYnVmKTsKLQljdXJyZW50X2J1ZiA9IHBhcmVudDsKLX0K LQotaW50IHpjb25mX2xpbmVubyh2b2lkKQotewotCXJldHVybiBjdXJyZW50X3Bvcy5saW5lbm87 Ci19Ci0KLWNvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVu dF9wb3MuZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+IjsKLX0KLQpkaWZm IC0tZ2l0IGEveGVuL3Rvb2xzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCBiL3hlbi90b29s cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDdhNGQ2NThjMjAuLjAwMDAwMDAwMDAKLS0tIGEveGVuL3Rvb2xzL2tjb25maWcvemNvbmYu dGFiLmNfc2hpcHBlZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ODAgKzAsMCBAQAotLyogQSBCaXNv biBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNS4xLiAgKi8KLQotLyogQmlzb24gaW1wbGVt ZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLSAgIAotICAgICAgQ29weXJpZ2h0 IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgot ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgIAotICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSAgIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQotLyogQXMg YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv bnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk aXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJz ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0 ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u KSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0 IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0gICAKLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24g d2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24g Mi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVu IGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28t Y2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBi ZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcg b24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAot ICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2Vy IG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGlu IGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0 aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAg Ki8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0K LS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNS4xIgot Ci0vKiBTa2VsZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMi Ci0KLS8qIFB1cmUgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAwCi0KLS8qIFB1c2ggcGFy c2Vycy4gICovCi0jZGVmaW5lIFlZUFVTSCAwCi0KLS8qIFB1bGwgcGFyc2Vycy4gICovCi0jZGVm aW5lIFlZUFVMTCAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQX05F RURFRCAwCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4g ICovCi0jZGVmaW5lIHl5cGFyc2UgICAgICAgICB6Y29uZnBhcnNlCi0jZGVmaW5lIHl5bGV4ICAg ICAgICAgICB6Y29uZmxleAotI2RlZmluZSB5eWVycm9yICAgICAgICAgemNvbmZlcnJvcgotI2Rl ZmluZSB5eWx2YWwgICAgICAgICAgemNvbmZsdmFsCi0jZGVmaW5lIHl5Y2hhciAgICAgICAgICB6 Y29uZmNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHpjb25mZGVidWcKLSNkZWZpbmUgeXlu ZXJycyAgICAgICAgIHpjb25mbmVycnMKLQotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVz ZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5j bHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4K LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0KLSNpbmNsdWRlICJs a2MuaCIKLQotI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2sp KSBwcmludGYoZm10KQotCi0jZGVmaW5lIFBSSU5URAkJMHgwMDAxCi0jZGVmaW5lIERFQlVHX1BB UlNFCTB4MDAwMgotCi1pbnQgY2RlYnVnID0gUFJJTlREOwotCi1leHRlcm4gaW50IHpjb25mbGV4 KHZvaWQpOwotc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7Ci1z dGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9p ZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tl bihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2Vu KTsKLQotc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbU1lNQk9MX0hBU0hTSVpFXTsKLQotc3Rh dGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OwotCi0KLQotCi0j IGlmbmRlZiBZWV9OVUxMCi0jICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0g X19jcGx1c3BsdXMKLSMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCi0jICBlbHNlCi0jICAgZGVm aW5lIFlZX05VTEwgMAotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogRW5hYmxpbmcgdHJhY2VzLiAg Ki8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAxCi0jZW5kaWYKLQotLyogRW5h YmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NF Ci0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNl bHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRo ZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9L RU5fVEFCTEUgMAotI2VuZGlmCi0KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZ UEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBz eW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cg YWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgVF9NQUlOTUVOVSA9 IDI1OCwKLSAgICAgVF9NRU5VID0gMjU5LAotICAgICBUX0VORE1FTlUgPSAyNjAsCi0gICAgIFRf U09VUkNFID0gMjYxLAotICAgICBUX0NIT0lDRSA9IDI2MiwKLSAgICAgVF9FTkRDSE9JQ0UgPSAy NjMsCi0gICAgIFRfQ09NTUVOVCA9IDI2NCwKLSAgICAgVF9DT05GSUcgPSAyNjUsCi0gICAgIFRf TUVOVUNPTkZJRyA9IDI2NiwKLSAgICAgVF9IRUxQID0gMjY3LAotICAgICBUX0hFTFBURVhUID0g MjY4LAotICAgICBUX0lGID0gMjY5LAotICAgICBUX0VORElGID0gMjcwLAotICAgICBUX0RFUEVO RFMgPSAyNzEsCi0gICAgIFRfT1BUSU9OQUwgPSAyNzIsCi0gICAgIFRfUFJPTVBUID0gMjczLAot ICAgICBUX1RZUEUgPSAyNzQsCi0gICAgIFRfREVGQVVMVCA9IDI3NSwKLSAgICAgVF9TRUxFQ1Qg PSAyNzYsCi0gICAgIFRfUkFOR0UgPSAyNzcsCi0gICAgIFRfVklTSUJMRSA9IDI3OCwKLSAgICAg VF9PUFRJT04gPSAyNzksCi0gICAgIFRfT04gPSAyODAsCi0gICAgIFRfV09SRCA9IDI4MSwKLSAg ICAgVF9XT1JEX1FVT1RFID0gMjgyLAotICAgICBUX1VORVFVQUwgPSAyODMsCi0gICAgIFRfTEVT UyA9IDI4NCwKLSAgICAgVF9MRVNTX0VRVUFMID0gMjg1LAotICAgICBUX0dSRUFURVIgPSAyODYs Ci0gICAgIFRfR1JFQVRFUl9FUVVBTCA9IDI4NywKLSAgICAgVF9DTE9TRV9QQVJFTiA9IDI4OCwK LSAgICAgVF9PUEVOX1BBUkVOID0gMjg5LAotICAgICBUX0VPTCA9IDI5MCwKLSAgICAgVF9PUiA9 IDI5MSwKLSAgICAgVF9BTkQgPSAyOTIsCi0gICAgIFRfRVFVQUwgPSAyOTMsCi0gICAgIFRfTk9U ID0gMjk0Ci0gICB9OwotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBk ZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQRQotewotCi0K LQljaGFyICpzdHJpbmc7Ci0Jc3RydWN0IGZpbGUgKmZpbGU7Ci0Jc3RydWN0IHN5bWJvbCAqc3lt Ym9sOwotCXN0cnVjdCBleHByICpleHByOwotCXN0cnVjdCBtZW51ICptZW51OwotCWNvbnN0IHN0 cnVjdCBrY29uZl9pZCAqaWQ7Ci0KLQotCi19IFlZU1RZUEU7Ci0jIGRlZmluZSBZWVNUWVBFX0lT X1RSSVZJQUwgMQotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxs IGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jZW5kaWYK LQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0K LQotLyogSW5jbHVkZSB6Y29uZi5oYXNoLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBj b25zdGFudHMuICovCi0jaW5jbHVkZSAiemNvbmYuaGFzaC5jIgotCi0KLQotI2lmZGVmIHNob3J0 Ci0jIHVuZGVmIHNob3J0Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZ WVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5 eXR5cGVfdWludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQ RV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N U0NfVkVSKQotdHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBlZGVm IHNob3J0IGludCB5eXR5cGVfaW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgot dHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lO VDE2Ci10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRlZiBz aG9ydCBpbnQgeXl0eXBlX2ludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMgaWZk ZWYgX19TSVpFX1RZUEVfXwotIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMgZWxp ZiBkZWZpbmVkIHNpemVfdAotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVm aW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0j ICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot IyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1QgdW5z aWduZWQgaW50Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZ U0laRV9UKSAtMSkKLQotI2lmbmRlZiBZWV8KLSMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYg WVlFTkFCTEVfTkxTCi0jICBpZiBFTkFCTEVfTkxTCi0jICAgaW5jbHVkZSA8bGliaW50bC5oPiAv KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZGVmaW5lIFlZXyhtc2dpZCkg ZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCi0jICBlbmRpZgotIyBlbmRpZgotIyBp Zm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAotIyBlbmRpZgotI2VuZGlmCi0K LS8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwot I2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KLSMgZGVmaW5lIFlZVVNFKGUp ICgodm9pZCkgKGUpKQotI2Vsc2UKLSMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCi0jZW5k aWYKLQotLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJv dXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCi0jaWZuZGVmIGxpbnQKLSMgZGVmaW5lIFlZSUQo bikgKG4pCi0jZWxzZQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV TkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK LXN0YXRpYyBpbnQKLVlZSUQgKGludCB5eWkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAoeXlp KQotICAgIGludCB5eWk7Ci0jZW5kaWYKLXsKLSAgcmV0dXJuIHl5aTsKLX0KLSNlbmRpZgotCi0j aWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJz ZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xz LiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FM TE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVp bHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAg IGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0j ICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EK LSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElO RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2Nh Ci0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBk ZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9f U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1 c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJ TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0gICAgICAvKiBVc2UgRVhJVF9TVUNDRVNT IGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAqLwotIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VT UwotIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAotIyAgICAgZW5kaWYKLSMgICAgZW5kaWYK LSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZWVNUQUNLX0FMTE9DCi0g ICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwotIyAgZGVmaW5l IFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQot IyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRoZSBPUyBtaWdodCBndWFy YW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKLSAg ICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3 ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQw OTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAgIHRvIGFsbG93IGZvciBh IGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KLSMgICBk ZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2 ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQwot IyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01B WElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCi0j ICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VD Q0VTUyBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2Mp IFwKLQkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKLSMgICBpbmNs dWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGlm bmRlZiBFWElUX1NVQ0NFU1MKLSMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCi0jICAgZW5kaWYK LSMgIGVuZGlmCi0jICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9j Ci0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChk ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxvYyAoWVlTSVpF X1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVu ZGlmCi0jICBpZm5kZWYgWVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBk ZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENf XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz IHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBP TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRp ZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYg KCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBc Ci0JIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp KSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l bWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOwot ICBZWVNUWVBFIHl5dnNfYWxsb2M7Ci19OwotCi0vKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBn YXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwotIyBkZWZpbmUg WVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCi0KLS8qIFRo ZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVh Y2ggd2l0aAotICAgTiBlbGVtZW50cy4gICovCi0jIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwK LSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBc Ci0gICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLSMgZGVmaW5lIFlZQ09QWV9ORUVERUQg MQotCi0vKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBv bmUuICBUaGUKLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUg dGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQg WVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNrLiAgQWR2YW5jZSBZ WVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0Ci0gICBzdGFj ay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJ XAotICAgIGRvCQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlZWVNJWkVfVCB5eW5ld2J5 dGVzOwkJCQkJCVwKLQlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUp OwkJCVwKLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCi0JeXluZXdieXRlcyA9 IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAot CXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKLSAgICAgIH0JCQkJ CQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgWVlD T1BZX05FRURFRCAmJiBZWUNPUFlfTkVFREVECi0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBT UkMgdG8gRFNULiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFw LiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19H TlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgXAotICAgICAgX19idWls dGluX21lbWNweSAoRHN0LCBTcmMsIChDb3VudCkgKiBzaXplb2YgKCooU3JjKSkpCi0jICBlbHNl Ci0jICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpICAgICAgICAgICAgICBcCi0gICAg ICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgWVlTSVpF X1QgeXlpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZm9yICh5eWkgPSAw OyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAgICAgICAoRHN0KVt5eWldID0gKFNy YylbeXlpXTsgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRp ZgotI2VuZGlmIC8qICFZWUNPUFlfTkVFREVEICovCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVt YmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDExCi0v KiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAg Mjk4Ci0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KLSNkZWZpbmUg WVlOVE9LRU5TICA0MAotLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwot I2RlZmluZSBZWU5OVFMgIDUwCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwot I2RlZmluZSBZWU5SVUxFUyAgMTIyCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAg Ki8KLSNkZWZpbmUgWVlOU1RBVEVTICAxOTkKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJp c29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZ VU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjk0Ci0KLSNkZWZpbmUgWVlUUkFOU0xB VEUoWVlYKQkJCQkJCVwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5 dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0g Qmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBj b25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAx LCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg ICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYs ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwK LSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz MiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5Ci19 OwotCi0jaWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJI UyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0gICBZWVJIUy4gICovCi1zdGF0aWMgY29u c3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAg ICAgNiwgICAgIDgsICAgIDExLCAgICAxMywgICAgMTQsICAgIDE3LCAgICAyMCwKLSAgICAgIDIz LCAgICAyNiwgICAgMzEsICAgIDM2LCAgICA0MCwgICAgNDIsICAgIDQ0LCAgICA0NiwgICAgNDgs ICAgIDUwLAotICAgICAgNTIsICAgIDU0LCAgICA1NiwgICAgNTgsICAgIDYwLCAgICA2MiwgICAg NjQsICAgIDY2LCAgICA2OCwgICAgNzIsCi0gICAgICA3NSwgICAgNzksICAgIDgyLCAgICA4Niwg ICAgODksICAgIDkwLCAgICA5MywgICAgOTYsICAgIDk5LCAgIDEwMiwKLSAgICAgMTA1LCAgIDEw OCwgICAxMTIsICAgMTE3LCAgIDEyMiwgICAxMjcsICAgMTMzLCAgIDEzNywgICAxMzgsICAgMTQy LAotICAgICAxNDMsICAgMTQ2LCAgIDE1MCwgICAxNTMsICAgMTU1LCAgIDE1OSwgICAxNjAsICAg MTYzLCAgIDE2NiwgICAxNjksCi0gICAgIDE3MiwgICAxNzUsICAgMTgwLCAgIDE4NCwgICAxODcs ICAgMTkyLCAgIDE5MywgICAxOTYsICAgMjAwLCAgIDIwMiwKLSAgICAgMjA2LCAgIDIwNywgICAy MTAsICAgMjEzLCAgIDIxNiwgICAyMjAsICAgMjI0LCAgIDIyOCwgICAyMzAsICAgMjM0LAotICAg ICAyMzUsICAgMjM4LCAgIDI0MSwgICAyNDQsICAgMjQ4LCAgIDI1MiwgICAyNTUsICAgMjU4LCAg IDI2MSwgICAyNjIsCi0gICAgIDI2NSwgICAyNjgsICAgMjcxLCAgIDI3NiwgICAyNzcsICAgMjgw LCAgIDI4MywgICAyODYsICAgMjg3LCAgIDI5MCwKLSAgICAgMjkyLCAgIDI5NCwgICAyOTcsICAg MzAwLCAgIDMwMywgICAzMDUsICAgMzA4LCAgIDMwOSwgICAzMTIsICAgMzE0LAotICAgICAzMTgs ICAgMzIyLCAgIDMyNiwgICAzMzAsICAgMzM0LCAgIDMzOCwgICAzNDIsICAgMzQ1LCAgIDM0OSwg ICAzNTMsCi0gICAgIDM1NSwgICAzNTcsICAgMzU4Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSct c2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlw ZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDEsICAgICAwLCAgICAtMSwgICAgODUsICAgIDQy LCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA2NywgICAgNDMsCi0gICAgICAtMSwgICAgNDMsICAg IC0xLCAgICAtMSwgICAgNDMsICAgIDQ1LCAgICAtMSwgICAgNDMsICAgIDU5LCAgICAtMSwKLSAg ICAgIDQzLCAgICA3MSwgICAgLTEsICAgIDQzLCAgICA4NCwgICAgLTEsICAgIDQzLCAgICAyNiwg ICAgIDEsICAgIDM1LAotICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgIDEsICAgIDM1LCAgICAt MSwgICAgNDMsICAgICAxLCAgICAzNSwgICAgLTEsCi0gICAgICAxNiwgICAgLTEsICAgIDE4LCAg ICAtMSwgICAgMTksICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDE3LCAgICAtMSwKLSAgICAgIDIy LCAgICAtMSwgICAgMjAsICAgIC0xLCAgICAyMywgICAgLTEsICAgIDM1LCAgICAtMSwgICAgNjUs ICAgIC0xLAotICAgICAgNzUsICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDUwLCAgICAtMSwgICAg NzMsICAgIC0xLCAgICAyNiwgICAgIDEsCi0gICAgICAzNSwgICAgLTEsICAgICAxLCAgICAzNSwg ICAgLTEsICAgIDEwLCAgICAyNiwgICAgMzUsICAgIC0xLCAgICA0NywKLSAgICAgIDUxLCAgICAt MSwgICAgMTEsICAgIDI2LCAgICAzNSwgICAgLTEsICAgIDQ5LCAgICA1MSwgICAgLTEsICAgIC0x LAotICAgICAgNTEsICAgIDUyLCAgICAtMSwgICAgNTEsICAgIDUzLCAgICAtMSwgICAgNTEsICAg IDc5LCAgICAtMSwgICAgNTEsCi0gICAgICA3NywgICAgLTEsICAgIDUxLCAgICA0NiwgICAgLTEs ICAgIDUxLCAgICAzNSwgICAgLTEsICAgIDE5LCAgICA4MiwKLSAgICAgIDM1LCAgICAtMSwgICAg MTgsICAgIDgzLCAgICA4NiwgICAgMzUsICAgIC0xLCAgICAyMCwgICAgODcsICAgIDg2LAotICAg ICAgMzUsICAgIC0xLCAgICAyMSwgICAgMjYsICAgIDg2LCAgICAzNSwgICAgLTEsICAgIDIyLCAg ICA4OCwgICAgODgsCi0gICAgICA4NiwgICAgMzUsICAgIC0xLCAgICAyNCwgICAgNTQsICAgIDM1 LCAgICAtMSwgICAgLTEsICAgIDU0LCAgICAyNiwKLSAgICAgIDU1LCAgICAtMSwgICAgLTEsICAg IDM4LCAgICA4MywgICAgLTEsICAgICA3LCAgICA4OSwgICAgMzUsICAgIC0xLAotICAgICAgNTYs ICAgIDYwLCAgICAtMSwgICAgODQsICAgIC0xLCAgICA1NywgICAgNjIsICAgIDU4LCAgICAtMSwg ICAgLTEsCi0gICAgICA2MCwgICAgNjEsICAgIC0xLCAgICA2MCwgICAgNzksICAgIC0xLCAgICA2 MCwgICAgNzcsICAgIC0xLCAgICA2MCwKLSAgICAgIDM1LCAgICAtMSwgICAgNjAsICAgIDQ2LCAg ICAtMSwgICAgMTgsICAgIDgzLCAgICA4NiwgICAgMzUsICAgIC0xLAotICAgICAgMTksICAgIDgy LCAgICAzNSwgICAgLTEsICAgIDE3LCAgICAzNSwgICAgLTEsICAgIDIwLCAgICAyNiwgICAgODYs Ci0gICAgICAzNSwgICAgLTEsICAgIC0xLCAgICA2MiwgICAgNDUsICAgIC0xLCAgICAxNCwgICAg ODcsICAgIDg1LCAgICAtMSwKLSAgICAgIDg0LCAgICAtMSwgICAgNjMsICAgIDY2LCAgICA2NCwg ICAgLTEsICAgIC0xLCAgICA2NiwgICAgNDUsICAgIC0xLAotICAgICAgNjYsICAgIDcxLCAgICAt MSwgICAgNjYsICAgIDU5LCAgICAtMSwgICAgIDMsICAgIDgzLCAgICA4NSwgICAgLTEsCi0gICAg ICAgNCwgICAgODMsICAgIDM1LCAgICAtMSwgICAgNjgsICAgIDgwLCAgICA3OCwgICAgLTEsICAg IDg0LCAgICAtMSwKLSAgICAgIDY5LCAgICA3MiwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgNzIs ICAgIDQ1LCAgICAtMSwgICAgNzIsICAgIDcxLAotICAgICAgLTEsICAgIDcyLCAgICA1OSwgICAg LTEsICAgICA2LCAgICA4MywgICAgMzUsICAgIC0xLCAgICAgOSwgICAgODMsCi0gICAgICAzNSwg ICAgLTEsICAgIDc0LCAgICA3OCwgICAgLTEsICAgIDEyLCAgICAzNSwgICAgLTEsICAgIDc2LCAg ICAxMywKLSAgICAgIC0xLCAgICAtMSwgICAgNzgsICAgIDc5LCAgICAtMSwgICAgNzgsICAgIDM1 LCAgICAtMSwgICAgNzgsICAgIDQ2LAotICAgICAgLTEsICAgIDE2LCAgICAyNSwgICAgODcsICAg IDM1LCAgICAtMSwgICAgLTEsICAgIDgwLCAgICA4MSwgICAgLTEsCi0gICAgICA4MCwgICAgMzUs ICAgIC0xLCAgICAyMywgICAgODYsICAgIC0xLCAgICAtMSwgICAgODMsICAgIDg2LCAgICAtMSwK LSAgICAgIDI2LCAgICAtMSwgICAgMjcsICAgIC0xLCAgICAgNSwgICAgMzUsICAgIC0xLCAgICAg OCwgICAgMzUsICAgIC0xLAotICAgICAgMTUsICAgIDM1LCAgICAtMSwgICAgMzUsICAgIC0xLCAg ICA4NSwgICAgMzUsICAgIC0xLCAgICAtMSwgICAgMTQsCi0gICAgICA4NywgICAgLTEsICAgIDg4 LCAgICAtMSwgICAgODgsICAgIDI5LCAgICA4OCwgICAgLTEsICAgIDg4LCAgICAzMCwKLSAgICAg IDg4LCAgICAtMSwgICAgODgsICAgIDMxLCAgICA4OCwgICAgLTEsICAgIDg4LCAgICAzMiwgICAg ODgsICAgIC0xLAotICAgICAgODgsICAgIDM4LCAgICA4OCwgICAgLTEsICAgIDg4LCAgICAyOCwg ICAgODgsICAgIC0xLCAgICAzNCwgICAgODcsCi0gICAgICAzMywgICAgLTEsICAgIDM5LCAgICA4 NywgICAgLTEsICAgIDg3LCAgICAzNiwgICAgODcsICAgIC0xLCAgICA4NywKLSAgICAgIDM3LCAg ICA4NywgICAgLTEsICAgIDI2LCAgICAtMSwgICAgMjcsICAgIC0xLCAgICAtMSwgICAgMjYsICAg IC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1i ZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxp bmVbXSA9Ci17Ci0gICAgICAgMCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMTAsICAgMTEwLCAg IDExMiwgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIz LCAgIDEyNywgICAxMjcsICAgMTI3LCAgIDEyNywgICAxMjcsICAgMTI3LAotICAgICAxMjcsICAg MTI3LCAgIDEzMSwgICAxMzIsICAgMTMzLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDE0MCwgICAx NDEsCi0gICAgIDE0NywgICAxNTUsICAgMTYxLCAgIDE2OSwgICAxNzksICAgMTgxLCAgIDE4Miwg ICAxODMsICAgMTg0LCAgIDE4NSwKLSAgICAgMTg2LCAgIDE4OSwgICAxOTcsICAgMjAzLCAgIDIx MywgICAyMTksICAgMjI1LCAgIDIyOCwgICAyMzAsICAgMjQxLAotICAgICAyNDIsICAgMjQ3LCAg IDI1NiwgICAyNjEsICAgMjY5LCAgIDI3MiwgICAyNzQsICAgMjc1LCAgIDI3NiwgICAyNzcsCi0g ICAgIDI3OCwgICAyODEsICAgMjg3LCAgIDI5OCwgICAzMDQsICAgMzE0LCAgIDMxNiwgICAzMjEs ICAgMzI5LCAgIDMzNywKLSAgICAgMzQwLCAgIDM0MiwgICAzNDMsICAgMzQ0LCAgIDM0OSwgICAz NTYsICAgMzYzLCAgIDM2OCwgICAzNzYsICAgMzc5LAotICAgICAzODEsICAgMzgyLCAgIDM4Mywg ICAzODYsICAgMzk0LCAgIDQwMSwgICA0MDgsICAgNDE0LCAgIDQyMSwgICA0MjMsCi0gICAgIDQy NCwgICA0MjUsICAgNDI4LCAgIDQzNiwgICA0MzgsICAgNDM5LCAgIDQ0MiwgICA0NDksICAgNDUx LCAgIDQ1NiwKLSAgICAgNDU3LCAgIDQ2MCwgICA0NjEsICAgNDYyLCAgIDQ2NiwgICA0NjcsICAg NDcwLCAgIDQ3MSwgICA0NzQsICAgNDc1LAotICAgICA0NzYsICAgNDc3LCAgIDQ3OCwgICA0Nzks ICAgNDgwLCAgIDQ4MSwgICA0ODIsICAgNDgzLCAgIDQ4NCwgICA0ODcsCi0gICAgIDQ4OCwgICA0 OTEsICAgNDkyCi19OwotI2VuZGlmCi0KLSNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8 fCBZWVRPS0VOX1RBQkxFCi0vKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9m IHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBz dGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCi1zdGF0aWMgY29uc3QgY2hh ciAqY29uc3QgeXl0bmFtZVtdID0KLXsKLSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIs ICJUX01BSU5NRU5VIiwgIlRfTUVOVSIsICJUX0VORE1FTlUiLAotICAiVF9TT1VSQ0UiLCAiVF9D SE9JQ0UiLCAiVF9FTkRDSE9JQ0UiLCAiVF9DT01NRU5UIiwgIlRfQ09ORklHIiwKLSAgIlRfTUVO VUNPTkZJRyIsICJUX0hFTFAiLCAiVF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAiVF9E RVBFTkRTIiwKLSAgIlRfT1BUSU9OQUwiLCAiVF9QUk9NUFQiLCAiVF9UWVBFIiwgIlRfREVGQVVM VCIsICJUX1NFTEVDVCIsICJUX1JBTkdFIiwKLSAgIlRfVklTSUJMRSIsICJUX09QVElPTiIsICJU X09OIiwgIlRfV09SRCIsICJUX1dPUkRfUVVPVEUiLCAiVF9VTkVRVUFMIiwKLSAgIlRfTEVTUyIs ICJUX0xFU1NfRVFVQUwiLCAiVF9HUkVBVEVSIiwgIlRfR1JFQVRFUl9FUVVBTCIsCi0gICJUX0NM T1NFX1BBUkVOIiwgIlRfT1BFTl9QQVJFTiIsICJUX0VPTCIsICJUX09SIiwgIlRfQU5EIiwgIlRf RVFVQUwiLAotICAiVF9OT1QiLCAiJGFjY2VwdCIsICJpbnB1dCIsICJzdGFydCIsICJzdG10X2xp c3QiLCAib3B0aW9uX25hbWUiLAotICAiY29tbW9uX3N0bXQiLCAib3B0aW9uX2Vycm9yIiwgImNv bmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIsCi0gICJtZW51Y29uZmlnX2VudHJ5X3N0 YXJ0IiwgIm1lbnVjb25maWdfc3RtdCIsICJjb25maWdfb3B0aW9uX2xpc3QiLAotICAiY29uZmln X29wdGlvbiIsICJzeW1ib2xfb3B0aW9uIiwgInN5bWJvbF9vcHRpb25fbGlzdCIsCi0gICJzeW1i b2xfb3B0aW9uX2FyZyIsICJjaG9pY2UiLCAiY2hvaWNlX2VudHJ5IiwgImNob2ljZV9lbmQiLAot ICAiY2hvaWNlX3N0bXQiLCAiY2hvaWNlX29wdGlvbl9saXN0IiwgImNob2ljZV9vcHRpb24iLCAi Y2hvaWNlX2Jsb2NrIiwKLSAgImlmX2VudHJ5IiwgImlmX2VuZCIsICJpZl9zdG10IiwgImlmX2Js b2NrIiwgIm1haW5tZW51X3N0bXQiLCAibWVudSIsCi0gICJtZW51X2VudHJ5IiwgIm1lbnVfZW5k IiwgIm1lbnVfc3RtdCIsICJtZW51X2Jsb2NrIiwgInNvdXJjZV9zdG10IiwKLSAgImNvbW1lbnQi LCAiY29tbWVudF9zdG10IiwgImhlbHBfc3RhcnQiLCAiaGVscCIsICJkZXBlbmRzX2xpc3QiLAot ICAiZGVwZW5kcyIsICJ2aXNpYmlsaXR5X2xpc3QiLCAidmlzaWJsZSIsICJwcm9tcHRfc3RtdF9v cHQiLCAicHJvbXB0IiwKLSAgImVuZCIsICJubCIsICJpZl9leHByIiwgImV4cHIiLCAic3ltYm9s IiwgIndvcmRfb3B0IiwgWVlfTlVMTAotfTsKLSNlbmRpZgotCi0jIGlmZGVmIFlZUFJJTlQKLS8q IFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRp bmcgdG8KLSAgIHRva2VuIFlZTEVYLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQx NiB5eXRva251bVtdID0KLXsKLSAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwg ICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAotICAgICAyNjUsICAgMjY2LCAgIDI2 NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsCi0gICAg IDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgIDI4MSwgICAyODIsICAg MjgzLCAgIDI4NCwKLSAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4OSwgICAyOTAs ICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0Ci19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0g LS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0 YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA0MCwgICAg NDEsICAgIDQxLCAgICA0MiwgICAgNDIsICAgIDQzLCAgICA0MywgICAgNDMsICAgIDQzLAotICAg ICAgNDMsICAgIDQzLCAgICA0MywgICAgNDMsICAgIDQ0LCAgICA0NCwgICAgNDQsICAgIDQ0LCAg ICA0NCwgICAgNDQsCi0gICAgICA0NCwgICAgNDQsICAgIDQ1LCAgICA0NSwgICAgNDUsICAgIDQ1 LCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA0NiwKLSAgICAgIDQ3LCAgICA0OCwgICAgNDksICAg IDUwLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEs ICAgIDUyLCAgICA1MiwgICAgNTIsICAgIDUyLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NCwg ICAgNTUsCi0gICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2 MCwgICAgNjAsICAgIDYwLCAgICA2MCwKLSAgICAgIDYwLCAgICA2MSwgICAgNjEsICAgIDYxLCAg ICA2MSwgICAgNjIsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LAotICAgICAgNjYsICAgIDY2 LCAgICA2NiwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIs Ci0gICAgICA3MiwgICAgNzIsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAg NzcsICAgIDc4LCAgICA3OCwKLSAgICAgIDc4LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MCwg ICAgODAsICAgIDgxLCAgICA4MiwgICAgODIsICAgIDgzLAotICAgICAgODMsICAgIDg0LCAgICA4 NCwgICAgODQsICAgIDg1LCAgICA4NSwgICAgODYsICAgIDg2LCAgICA4NywgICAgODcsCi0gICAg ICA4NywgICAgODcsICAgIDg3LCAgICA4NywgICAgODcsICAgIDg3LCAgICA4NywgICAgODcsICAg IDg3LCAgICA4OCwKLSAgICAgIDg4LCAgICA4OSwgICAgODkKLX07Ci0KLS8qIFlZUjJbWVlOXSAt LSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlO LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAg ICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDIsICAg ICAyLAotICAgICAgIDIsICAgICA0LCAgICAgNCwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEs ICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMiwKLSAgICAgICAzLCAgICAgMiwg ICAgIDMsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot ICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgNSwgICAgIDMsICAgICAw LCAgICAgMywgICAgIDAsCi0gICAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDMsICAg ICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgNCwgICAgIDMs ICAgICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAg IDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAg MywgICAgIDAsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsICAgICAyLCAg ICAgMiwgICAgIDIsICAgICAwLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDQsICAgICAw LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLAotICAgICAgIDEsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMSwgICAg IDMsCi0gICAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwg ICAgIDMsICAgICAzLCAgICAgMSwKLSAgICAgICAxLCAgICAgMCwgICAgIDEKLX07Ci0KLS8qIFlZ REVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBT VEFURS1OVU0uCi0gICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21l dGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9y LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Ci17Ci0gICAgICAg NiwgICAgIDAsICAgMTA0LCAgICAgMCwgICAgIDMsICAgICAwLCAgICAgNiwgICAgIDYsICAgIDk5 LCAgIDEwMCwKLSAgICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg MTIxLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTQs ICAgIDE4LCAgICAxNSwgICAgMTYsICAgIDIwLCAgICAxNywgICAgMTksCi0gICAgICAyMSwgICAg IDAsICAgIDIyLCAgICAgMCwgICAgIDcsICAgIDM0LCAgICAyNSwgICAgMzQsICAgIDI2LCAgICA1 NSwKLSAgICAgIDY1LCAgICAgOCwgICAgNzAsICAgIDIzLCAgICA5MywgICAgNzksICAgICA5LCAg ICAyNywgICAgODgsICAgIDI0LAotICAgICAgMTAsICAgICAwLCAgIDEwNSwgICAgIDIsICAgIDc0 LCAgICAxMywgICAgIDAsICAgMTAxLCAgICAgMCwgICAxMjIsCi0gICAgICAgMCwgICAxMDIsICAg ICAwLCAgICAgMCwgICAgIDAsICAgMTE5LCAgIDEyMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg ICAgMTA4LCAgIDEwMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg ICAgIDAsICAgIDg4LAotICAgICAgIDAsICAgICAwLCAgICA3NSwgICAgODMsICAgIDUxLCAgICA4 NCwgICAgMzAsICAgIDMyLCAgICAgMCwgICAxMTYsCi0gICAgICAgMCwgICAgIDAsICAgIDY3LCAg ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKLSAgICAgIDEy LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAs ICAgIDQ3LAotICAgICAgIDAsICAgIDQwLCAgICAzOSwgICAgMzUsICAgIDM2LCAgICAgMCwgICAg MzgsICAgIDM3LCAgICAgMCwgICAgIDAsCi0gICAgICA5NywgICAgIDAsICAgIDU5LCAgICA2MCwg ICAgNTYsICAgIDU4LCAgICA1NywgICAgNjYsICAgIDU0LCAgICA1MywKLSAgICAgIDcxLCAgICA3 MywgICAgNjksICAgIDcyLCAgICA2OCwgICAxMDYsICAgIDk1LCAgICAgMCwgICAgOTQsICAgIDgw LAotICAgICAgODIsICAgIDc4LCAgICA4MSwgICAgNzcsICAgIDkwLCAgICA5MSwgICAgODksICAg MTE1LCAgIDExNywgICAxMTgsCi0gICAgIDExNCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIs ICAgMTEzLCAgICAyOSwgICAgODYsICAgICAwLCAgIDEwNiwKLSAgICAgICAwLCAgIDEwNiwgICAx MDYsICAgMTA2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4NywgICAgNjMsICAgMTA2LAotICAg ICAgIDAsICAgMTA2LCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgNDEsICAgIDk4LCAg ICAgMCwgICAgIDAsCi0gICAgIDEwNiwgICAgNDksICAgIDQ2LCAgICAyOCwgICAgIDAsICAgIDYy LCAgICAgMCwgICAxMDcsICAgIDkyLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgIDAsICAg ICAwLCAgICA0OCwgICAgNjEsICAgIDY0LCAgICA0NSwgICAgNTAKLX07Ci0KLS8qIFlZREVGR09U T1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10g PQotewotICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIDMzLCAgICAzNCwgICAxMTIs ICAgIDM1LCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgNzQsICAgMTEzLCAgIDExNCwgICAx NjUsICAgMTk0LCAgICAzOSwgICAgNDAsICAgMTI4LCAgICA0MSwKLSAgICAgIDc2LCAgIDEyNCwg ICAgNzcsICAgIDQyLCAgIDEzMiwgICAgNDMsICAgIDc4LCAgICAgNiwgICAgNDQsICAgIDQ1LAot ICAgICAxNDEsICAgIDQ2LCAgICA4MCwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAxMTUsICAgMTE2 LCAgICA4MSwgICAxMTcsCi0gICAgICA3OSwgICAxMzgsICAgMTYwLCAgIDE2MSwgICAgNTAsICAg ICA3LCAgIDE3MywgICAgNjksICAgIDcwLCAgICA2MAotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5V TV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFU RS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtOTEKLXN0YXRpYyBjb25zdCB5eXR5cGVf aW50MTYgeXlwYWN0W10gPQotewotICAgICAgMTksICAgIDM3LCAgIC05MSwgICAgMTMsICAgLTkx LCAgICA3OSwgICAtOTEsICAgIDIwLCAgIC05MSwgICAtOTEsCi0gICAgIC0xNiwgICAtOTEsICAg IDIxLCAgICAzNywgICAgMjUsICAgIDM3LCAgICA0MSwgICAgMzYsICAgIDM3LCAgICA3OCwKLSAg ICAgIDgzLCAgICAzMSwgICAgNTYsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwg ICAtOTEsICAgLTkxLAotICAgICAtOTEsICAgMTE2LCAgIC05MSwgICAxMjcsICAgLTkxLCAgIC05 MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsCi0gICAgIC05MSwgICAtOTEsICAgLTkxLCAg IC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwKLSAgICAgLTkx LCAgIDE0NywgICAtOTEsICAgLTkxLCAgIDEwNSwgICAtOTEsICAgMTA5LCAgIC05MSwgICAxMTEs ICAgLTkxLAotICAgICAxMTQsICAgLTkxLCAgIDEzNiwgICAxMzcsICAgMTQyLCAgIC05MSwgICAt OTEsICAgIDMxLCAgICAzMSwgICAgNzYsCi0gICAgIDI1NCwgICAtOTEsICAgMTQzLCAgIDE0Niwg ICAgMjcsICAgMTE1LCAgIDIwNywgICAyNTgsICAgMjQzLCAgIC0xNCwKLSAgICAgMjQzLCAgIDE3 OSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAgLTcsICAgLTkx LAotICAgICAgMzEsICAgIDMxLCAgIDEwNSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAg IDUxLCAgICA1MSwgICAtOTEsCi0gICAgIC05MSwgICAxNTYsICAgMTY4LCAgIDE4MSwgICAgMzcs ICAgIDM3LCAgICAzMSwgICAxNzgsICAgIDUxLCAgIC05MSwKLSAgICAgMjA2LCAgIC05MSwgICAt OTEsICAgLTkxLCAgIC05MSwgICAxOTYsICAgLTkxLCAgIC05MSwgICAxNzUsICAgIDM3LAotICAg ICAgMzcsICAgMTg1LCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAg IC05MSwgICAtOTEsCi0gICAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgMjE0 LCAgIC05MSwgICAyMzAsICAgLTkxLCAgIC05MSwKLSAgICAgLTkxLCAgIC05MSwgICAtOTEsICAg LTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAxODMsICAgLTkxLAotICAgICAtOTEs ICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgICAzMSwg ICAyMTQsCi0gICAgIDE5NCwgICAyMTQsICAgIDQ1LCAgIDIxNCwgICAgNTEsICAgIDI2LCAgIDE5 NSwgICAtOTEsICAgLTkxLCAgIDIxNCwKLSAgICAgMTk3LCAgIDIxNCwgICAgMzEsICAgLTkxLCAg IDEzOSwgICAyMDgsICAgLTkxLCAgIC05MSwgICAyMjAsICAgMjI0LAotICAgICAyMTQsICAgMjIy LCAgIC05MSwgICAtOTEsICAgMjI2LCAgIC05MSwgICAyMjcsICAgMTIzLCAgIC05MSwgICAtOTEs Ci0gICAgIC05MSwgICAtOTEsICAgMjM1LCAgICAzNywgICAtOTEsICAgLTkxLCAgIC05MSwgICAt OTEsICAgLTkxCi19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0 IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQotewotICAgICAtOTEsICAgLTkxLCAgIDI2NCwgICAy NjgsICAgLTkxLCAgICAzMCwgICAtNjUsICAgLTkxLCAgIC05MSwgICAtOTEsCi0gICAgIC05MSwg ICAyMzgsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAg IC0xMiwKLSAgICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkxLCAgIC05MSwgICAtOTEsICAgLTkx LCAgIC05MSwgICAtOTEsICAgLTkxLAotICAgICAtOTEsICAgIC01LCAgIC05MSwgICAtOTEsICAg LTkxLCAgIC05MSwgICAtOTEsICAgMjAwLCAgIDIwOSwgICAtNjEsCi0gICAgIC05MSwgICAtOTEs ICAgMTcwLCAgICAtMSwgICAgNjUsICAgICAwLCAgIDExOCwgICAtNjYsICAgLTkwLCAgIC05MQot fTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRl IFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0 aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJ ZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAt ODYKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KLXsKLSAgICAgIDEwLCAg ICA4OCwgICAgODksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNTUsICAg MTM1LAotICAgICAgNTQsICAgMTIzLCAgICA1NiwgICAgMTEsICAgIDU4LCAgIDEyNiwgICAxNDUs ICAgIDYyLCAgIDE2NCwgICAgIDIsCi0gICAgIDE0NiwgICAxMzYsICAgICAxLCAgICAgMSwgICAx NDgsICAgMTQ5LCAgIDE0NywgICAtMzEsICAgMTAxLCAgICA5MCwKLSAgICAgIDkxLCAgIC0zMSwg ICAtMzEsICAgLTMxLCAgIC0zMSwgICAtMzEsICAgLTMxLCAgIC0zMSwgICAtMzEsICAgMTAyLAot ICAgICAxNjIsICAgLTMxLCAgIC0zMSwgICAxMDMsICAgLTMxLCAgIDEwNCwgICAxMDUsICAgMTA2 LCAgIDEwNywgICAxMDgsCi0gICAgIC0zMSwgICAxMDksICAgMTgxLCAgIDExMCwgICAgIDIsICAg IDUyLCAgICA1NSwgICAgNjUsICAgIDY2LCAgIDE3MiwKLSAgICAgIDU3LCAgIDE4MiwgICAxMTEs ICAgICA4LCAgICAgOSwgICAgNjcsICAgMTMxLCAgICA1OSwgICAxNDAsICAgIDkyLAotICAgICAg NjgsICAgIDYxLCAgIDE0NSwgICAxMzMsICAgMTgwLCAgIDE0MiwgICAxNDYsICAgIDY1LCAgICA2 NiwgICAgLTUsCi0gICAgICAxMiwgICAgOTAsICAgIDkxLCAgICAxMywgICAgMTQsICAgIDE1LCAg ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICA3MSwgICAxNzQsICAgIDIx LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAg IDI5LCAgICAzMCwgICAxNTksICAgIDYzLCAgICAzMSwgICAxODcsICAgMTI3LCAgIDEzMCwgICAg NjQsCi0gICAgIDEzOSwgICAgIDIsICAgIDkwLCAgICA5MSwgICAgMzIsICAgLTMzLCAgIDEwMSwg ICAgNzIsICAgMTY5LCAgIC0zMywKLSAgICAgLTMzLCAgIC0zMywgICAtMzMsICAgLTMzLCAgIC0z MywgICAtMzMsICAgLTMzLCAgIDEwMiwgICAgNzMsICAgLTMzLAotICAgICAtMzMsICAgMTAzLCAg IC0zMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4LCAgIC0zMywgICAxMDksCi0g ICAgICA1MiwgICAxMTAsICAgMTI5LCAgIDEzNCwgICAgODIsICAgMTQzLCAgICA4MywgICAgLTQs ICAgIDEyLCAgICA4NCwKLSAgICAgMTExLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDkwLAotICAgICAgOTEsICAgIDIxLCAgICAyMiwg ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAz MCwgICAgODUsICAgIDg2LCAgICAzMSwgICAxODgsICAgIDkwLCAgICA5MSwgICAgODcsICAgIDk5 LCAgIC04NSwKLSAgICAgMTAxLCAgIDEwMCwgICAgMzIsICAgLTg1LCAgIC04NSwgICAtODUsICAg LTg1LCAgIC04NSwgICAtODUsICAgLTg1LAotICAgICAtODUsICAgMTU2LCAgIDE5OCwgICAtODUs ICAgLTg1LCAgIDEwMywgICAtODUsICAgLTg1LCAgIC04NSwgICAtODUsCi0gICAgIC04NSwgICAt ODUsICAgLTg1LCAgIDE1NywgICAxNjMsICAgMTEwLCAgIDE1OCwgICAxNjYsICAgMTAxLCAgIDE2 NywKLSAgICAgMTY4LCAgIDE3MSwgICAtNTIsICAgLTUyLCAgIDE0NCwgICAtNTIsICAgLTUyLCAg IC01MiwgICAtNTIsICAgMTAyLAotICAgICAgOTEsICAgLTUyLCAgIC01MiwgICAxMDMsICAgMTE4 LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDE3MiwgICAxNzYsCi0gICAgIDE4MywgICAxMDEsICAg MTg1LCAgIDExMCwgICAtNzYsICAgLTc2LCAgIC03NiwgICAtNzYsICAgLTc2LCAgIC03NiwKLSAg ICAgLTc2LCAgIC03NiwgICAxMjIsICAgMTg5LCAgIC03NiwgICAtNzYsICAgMTAzLCAgICAxMywg ICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgIDE5 MCwgICAxMTAsICAgIDIxLCAgICAyMiwgICAxOTEsCi0gICAgIDE5MywgICAxOTUsICAgMTk2LCAg ICAxNCwgICAgMTUsICAgMTQ0LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgMTk3 LCAgICA1MywgICAgMjEsICAgIDIyLCAgICA1MSwgICAgNzUsICAgMTI1LCAgIDE3NSwgICAgMzIs ICAgMTc3LAotICAgICAxNzgsICAgMTc5LCAgICA5MywgICAgOTQsICAgIDk1LCAgICA5NiwgICAg OTcsICAgMTg0LCAgIDEzNywgICAxODYsCi0gICAgIDE3MCwgICAgIDAsICAgIDk4LCAgICAzMiwg ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkyCi19OwotCi0jZGVmaW5lIHl5cGFjdF92 YWx1ZV9pc19kZWZhdWx0KHl5c3RhdGUpIFwKLSAgKCh5eXN0YXRlKSA9PSAoLTkxKSkKLQotI2Rl ZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKHl5dGFibGVfdmFsdWUpIFwKLSAgWVlJRCAoMCkK LQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQotewotICAgICAgIDEsICAg IDY3LCAgICA2OCwgICAgOTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5OCwgICAg MjMsCi0gICAgICAxMCwgICAgNzYsICAgIDEzLCAgICAgMCwgICAgMTUsICAgIDc2LCAgICA4MSwg ICAgMTgsICAgMTA4LCAgICAzNSwKLSAgICAgIDgxLCAgICAzNSwgICAgIDMsICAgICAzLCAgICA5 MCwgICAgOTEsICAgIDMzLCAgICAgMCwgICAgIDEsICAgIDM2LAotICAgICAgMzcsICAgICA0LCAg ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCi0g ICAgIDEwNiwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs ICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjYsICAgIDI2LCAgICAzNSwgICAg MzUsICAgIDM1LCAgICAyNiwgICAgMjcsICAgIDE0LAotICAgICAgMzUsICAgIDM1LCAgICAzNSwg ICAgMjYsICAgIDI3LCAgICAzNCwgICAgNzgsICAgIDI2LCAgICA4MCwgICAgNjksCi0gICAgICAz OSwgICAgMzUsICAgMTM3LCAgICA3OCwgICAxNjQsICAgIDgwLCAgIDEzNywgICAgMjYsICAgIDI3 LCAgICAgMCwKLSAgICAgICAxLCAgICAzNiwgICAgMzcsICAgICA0LCAgICAgNSwgICAgIDYsICAg ICA3LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgMTEsICAgIDM1LCAgIDE1OCwgICAgMTQs ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAg MjIsICAgIDIzLCAgIDEwNCwgICAgMjYsICAgIDI2LCAgIDE3MiwgICAgNzcsICAgIDc4LCAgICAy NiwKLSAgICAgIDgwLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzNSwgICAgIDAsICAgICAxLCAg ICAgMSwgICAxMTksICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5 LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAgMSwgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAg IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKLSAg ICAgIDM1LCAgICAyNiwgICAgNzcsICAgIDc4LCAgICAzNSwgICAgODAsICAgIDM1LCAgICAgMCwg ICAgIDEsICAgIDM1LAotICAgICAgMzUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsCi0gICAgICAzNywgICAgMTQsICAgIDE1LCAg ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgIDIz LCAgICAzNSwgICAgMzUsICAgIDI2LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzNSwgICAgMzUs ICAgICAwLAotICAgICAgIDEsICAgIDM1LCAgICAzNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAg IDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAxMSwgICAgMzUsICAgMTkzLCAgICAxNCwg ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAy MiwgICAgMjMsICAgIDM1LCAgICAyNiwgICAgMjYsICAgIDI1LCAgICAgMSwgICAgIDEsICAgIDEz LAotICAgICAgMzUsICAgIDI2LCAgICAgNSwgICAgIDYsICAgIDM1LCAgICAgOCwgICAgIDksICAg IDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAzNywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDE0LCAgICAzNSwKLSAgICAgIDM1LCAgICAgMSwgICAg MzUsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAg ICAgMTAsICAgIDExLCAgICAzNSwgICAgMzUsICAgIDE0LCAgICAxNSwgICAgMTYsICAgICA0LCAg ICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM1 LCAgICAyNiwgICAgMTQsICAgIDE1LCAgICAzNSwKLSAgICAgIDM4LCAgICAzNSwgICAgMzUsICAg ICA1LCAgICAgNiwgICAgMzUsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMzUs ICAgICA3LCAgICAxNCwgICAgMTUsICAgICA2LCAgICAzNywgICAgNzYsICAgMTU5LCAgICAzNSwg ICAxNjEsCi0gICAgIDE2MiwgICAxNjMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz MiwgICAxNjksICAgIDc5LCAgIDE3MSwKLSAgICAgMTIwLCAgICAtMSwgICAgMzgsICAgIDM1LCAg ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxODAKLX07Ci0KLS8qIFlZU1RPU1tTVEFURS1O VU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0gICBzeW1ib2wg b2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9z W10gPQotewotICAgICAgIDAsICAgICAzLCAgICAzNSwgICAgNDEsICAgIDQyLCAgICA0MywgICAg NjcsICAgIDg1LCAgICAyNiwgICAgMjcsCi0gICAgICA4MywgICAgIDAsICAgICAxLCAgICAgNCwg ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAx NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy LAotICAgICAgMjMsICAgIDI2LCAgICAzNSwgICAgNDQsICAgIDQ1LCAgICA0NywgICAgNDgsICAg IDQ5LCAgICA1MCwgICAgNTYsCi0gICAgICA1NywgICAgNTksICAgIDYzLCAgICA2NSwgICAgNjgs ICAgIDY5LCAgICA3MSwgICAgNzMsICAgIDc0LCAgICA3NSwKLSAgICAgIDg0LCAgICA0MywgICAg MzUsICAgIDQyLCAgICA4NSwgICAgMzUsICAgIDgzLCAgICAzNSwgICAgODMsICAgIDI2LAotICAg ICAgODksICAgIDM1LCAgICA4MywgICAgMjYsICAgIDI2LCAgICAyNiwgICAgMjcsICAgIDM0LCAg ICAzOSwgICAgODcsCi0gICAgICA4OCwgICAgMzUsICAgICAxLCAgICAgMSwgICAgNTEsICAgIDUx LCAgICA2MCwgICAgNjIsICAgIDY2LCAgICA4MCwKLSAgICAgIDcyLCAgICA3OCwgICAgMzUsICAg IDM1LCAgICAzNSwgICAgMzUsICAgIDM1LCAgICAzNSwgICAgODcsICAgIDg3LAotICAgICAgMzYs ICAgIDM3LCAgICA4NSwgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzOCwg ICAgMzUsCi0gICAgICAzNSwgICAgIDEsICAgIDEyLCAgICAxNiwgICAgMTgsICAgIDE5LCAgICAy MCwgICAgMjEsICAgIDIyLCAgICAyNCwKLSAgICAgIDI2LCAgICAzNSwgICAgNDYsICAgIDUyLCAg ICA1MywgICAgNzYsICAgIDc3LCAgICA3OSwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIw LCAgICAzNSwgICAgNDYsICAgIDYxLCAgICA3NywgICAgNzksICAgIDQ1LCAgICA1OCwgICAgODQs Ci0gICAgICA0NSwgICAgNTksICAgIDY0LCAgICA3MSwgICAgODQsICAgIDIzLCAgICAzNSwgICAg NzgsICAgIDgxLCAgICA0NSwKLSAgICAgIDU5LCAgICA3MCwgICAgNzEsICAgIDg0LCAgICAzNSwg ICAgNDYsICAgIDc5LCAgICAzMywgICAgODcsICAgIDg3LAotICAgICAgODgsICAgIDg4LCAgICA4 OCwgICAgODgsICAgIDg4LCAgICA4OCwgICAgMzUsICAgIDM1LCAgICAyNSwgICAgODMsCi0gICAg ICA4MiwgICAgODMsICAgIDg3LCAgICAyNiwgICAgODgsICAgIDU0LCAgICAgMSwgICAgMTMsICAg IDM1LCAgICA4MywKLSAgICAgIDgyLCAgICAyNiwgICAgMTQsICAgIDg2LCAgICA4NywgICAgODYs ICAgIDM1LCAgICA4NiwgICAgODYsICAgIDg2LAotICAgICAgODgsICAgIDI2LCAgICAzNSwgICAg MzUsICAgIDg2LCAgICAzNSwgICAgODYsICAgIDg3LCAgICAzNSwgICAgMzUsCi0gICAgICAzNSwg ICAgMzUsICAgIDg2LCAgICAzOCwgICAgNTUsICAgIDM1LCAgICAzNSwgICAgMzUsICAgIDgzCi19 OwotCi0jZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJp bgkoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWQkJKC0yKQotI2RlZmluZSBZWUVP RgkJMAotCi0jZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9S VAkJZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgotCi0K LS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl cmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFu aW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBs YW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCi0gICBZWUZBSUwgYXBwZWFy cyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQK LSAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0 IG91dCBpcwotICAgZGlzY3Vzc2VkLiAgKi8KLQotI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJs YWIKLSNpZiBkZWZpbmVkIFlZRkFJTAotICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2Fy bmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCi0gICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5 IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0Ci0gICAgIHNvbWUgdXNlcnMg ZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCi0gICAg IFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUu ICAqLwotI2VuZGlmCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQot Ci0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXljaGFyID0g KFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg IHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICBZWVBPUFNUQUNLICh5eWxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8geXliYWNrdXA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAi KSk7IFwKLSAgICAgIFlZRVJST1I7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJ RCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09ERQkyNTYKLQot Ci0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRv IFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9j YXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMg ZGVmaW5lZCkuICAqLwotCi0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lm bmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhz LCBOKQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7CQkJCQkJCQlc Ci0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGlu ZTsJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0 X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4p Lmxhc3RfbGluZTsJCVwKLQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhz LCBOKS5sYXN0X2NvbHVtbjsJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7 CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGlu ZSAgID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3Vy cmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlS SFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgd2hpbGUg KFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogVGhpcyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFj a3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KLQotI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBk ZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jZW5kaWYKLQot Ci0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAg Ki8KLQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoWVlMRVhfUEFS QU0pCi0jZWxzZQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCkKLSNlbmRpZgotCi0vKiBFbmFibGUg ZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQ UklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB Q0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZ WURQUklOVEYoQXJncykJCQlcCi1kbyB7CQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCVwKLSAg ICBZWUZQUklOVEYgQXJnczsJCQkJXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLSMgZGVmaW5lIFlZ X1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAotZG8gewkJ CQkJCQkJCSAgXAotICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAotICAgIHsJCQkJCQkJCQkgIFwK LSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCi0gICAgICB5 eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKLQkJICBUeXBlLCBWYWx1ZSk7IFwKLSAg ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKLSAgICB9CQkJCQkJCQkJICBc Ci19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1RE Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJp bnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2 YWx1ZXApCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRw dXQsIHl5dHlwZSwgeXl2YWx1ZXApCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlw ZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0jZW5kaWYKLXsKLSAgRklM RSAqeXlvID0geXlvdXRwdXQ7Ci0gIFlZVVNFICh5eW8pOwotICBpZiAoIXl5dmFsdWVwKQotICAg IHJldHVybjsKLSMgaWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAg IFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNl Ci0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsK LSAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAot YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1RE Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJ TEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAp Ci0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwg eXl2YWx1ZXApCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNU WVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZ TlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVb eXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIs IHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwg eXl0eXBlLCB5eXZhbHVlcCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Ci19Ci0KLS8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJv bSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0j aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5 X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9w KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQot ICAgIHl5dHlwZV9pbnQxNiAqeXlib3R0b207Ci0gICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKLSNl bmRpZgotewotICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwotICBmb3IgKDsgeXli b3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCi0gICAgewotICAgICAgaW50IHl5Ym90ID0gKnl5 Ym90dG9tOwotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7Ci0gICAgfQot ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5U KEJvdHRvbSwgVG9wKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJCQlc Ci0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKLX0gd2hpbGUgKFlZ SUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQu ICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K LQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lk Ci15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlKQotI2Vsc2UKLXN0 YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUpCi0gICAgWVlTVFlQRSAq eXl2c3A7Ci0gICAgaW50IHl5cnVsZTsKLSNlbmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5 eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVb eXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVk IChsaW5lICVsdSk6XG4iLAotCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3lt Ym9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5 aSsrKQotICAgIHsKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsg MSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0g KyB5eWldLAotCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0JCSAgICAg ICAJCSAgICAgICApOwotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0K LQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCi1kbyB7CQkJCQlcCi0gIGlmICh5 eWRlYnVnKQkJCQlcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSk7IFwKLX0gd2hp bGUgKFlZSUQgKDApKQotCi0vKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQg aXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKLSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNv ZXhpc3QuICAqLwotaW50IHl5ZGVidWc7Ci0jZWxzZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUg WVlEUFJJTlRGKEFyZ3MpCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh bHVlLCBMb2NhdGlvbikKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBk ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0v KiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICov Ci0jaWZuZGVmCVlZSU5JVERFUFRICi0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgot Ci0vKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChl ZmZlY3RpdmUgb25seQotICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2Qg aXMgdXNlZCkuCi0KLSAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVz dWx0cyBhcmUgdW5kZWZpbmVkIGlmCi0gICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNL X0JZVEVTIChZWU1BWERFUFRIKQotICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9u IGludGVnZXIgYXJpdGhtZXRpYy4gICovCi0KLSNpZm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUg WVlNQVhERVBUSCAxMDAwMAotI2VuZGlmCi0KLQotI2lmIFlZRVJST1JfVkVSQk9TRQotCi0jIGlm bmRlZiB5eXN0cmxlbgotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5H X0gKLSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCi0jICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxl bmd0aCBvZiBZWVNUUi4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5 OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf VkVSKQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi0jZWxz ZQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoeXlzdHIpCi0gICAgY29uc3QgY2hhciAqeXlz dHI7Ci0jZW5kaWYKLXsKLSAgWVlTSVpFX1QgeXlsZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0 clt5eWxlbl07IHl5bGVuKyspCi0gICAgY29udGludWU7Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMg IGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJ QkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCi0jICAgZGVm aW5lIHl5c3RwY3B5IHN0cGNweQotIyAgZWxzZQotLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJl dHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgotICAgWVlERVNU LiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAot ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMg Y2hhciAqCi15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLSNlbHNl Ci1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKLSAgICBjaGFyICp5eWRl c3Q7Ci0gICAgY29uc3QgY2hhciAqeXlzcmM7Ci0jZW5kaWYKLXsKLSAgY2hhciAqeXlkID0geXlk ZXN0OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9ICp5 eXMrKykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0KLSMg IGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJFUyB0 aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAg IHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJv ci4gIFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3Nh cnkgdW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEs IG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNU UiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90IGNv cHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAgd291 bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5eXJl cywgY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsKLSAg ICAgIFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKLQot ICAgICAgZm9yICg7OykKLQlzd2l0Y2ggKCorK3l5cCkKLQkgIHsKLQkgIGNhc2UgJ1wnJzoKLQkg IGNhc2UgJywnOgotCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0KLQkgIGNhc2UgJ1xc JzoKLQkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1 b3RlczsKLQkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLQkgIGRlZmF1bHQ6Ci0JICAgIGlmICh5 eXJlcykKLQkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLQkgICAgeXluKys7Ci0JICAgIGJyZWFr OwotCi0JICBjYXNlICciJzoKLQkgICAgaWYgKHl5cmVzKQotCSAgICAgIHl5cmVzW3l5bl0gPSAn XDAnOwotCSAgICByZXR1cm4geXluOwotCSAgfQotICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsK LSAgICB9Ci0KLSAgaWYgKCEgeXlyZXMpCi0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0K LSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0K LS8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlzIG9mIHNpemUgKllZTVNHX0FMTE9DLCBhbiBl cnJvciBtZXNzYWdlCi0gICBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0 aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzCi0gICBZWVNTUC4KLQotICAgUmV0dXJuIDAgaWYg KllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gIFJldHVybiAxIGlmICpZWU1TRyBpcwot ICAgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBtZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBh bHNvIHNldAotICAgKllZTVNHX0FMTE9DIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMu ICBSZXR1cm4gMiBpZiB0aGUKLSAgIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFy Z2UgdG8gc3RvcmUuICAqLwotc3RhdGljIGludAoteXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5 eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAotICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAq eXlzc3AsIGludCB5eXRva2VuKQotewotICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZ WV9OVUxMLCB5eXRuYW1lW3l5dG9rZW5dKTsKLSAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK LSAgWVlTSVpFX1QgeXlzaXplMTsKLSAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElN VU0gPSA1IH07Ci0gIC8qIEludGVybmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICovCi0gIGNv bnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTDsKLSAgLyogQXJndW1lbnRzIG9mIHl5Zm9ybWF0 LiAqLwotICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsK LSAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQi LCBvbmUgcGVyCi0gICAgICJleHBlY3RlZCIpLiAqLwotICBpbnQgeXljb3VudCA9IDA7Ci0KLSAg LyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGllcyBoZXJlIHRvIGNvbnNpZGVyOgotICAgICAt IEFzc3VtZSBZWUZBSUwgaXMgbm90IHVzZWQuICBJdCdzIHRvbyBmbGF3ZWQgdG8gY29uc2lkZXIu ICBTZWUKLSAgICAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBh dGNoZXMvMjAwOS0xMi9tc2cwMDAyNC5odG1sPgotICAgICAgIGZvciBkZXRhaWxzLiAgWVlFUlJP UiBpcyBmaW5lIGFzIGl0IGRvZXMgbm90IGludm9rZSB0aGlzCi0gICAgICAgZnVuY3Rpb24uCi0g ICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQg YWN0aW9uLCB0aGVuCi0gICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9r ZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCi0gICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAg SW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQKLSAgICAgICB0b2tlbnMgYmVj YXVzZSB0aGVyZSBhcmUgbm9uZS4KLSAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2FuIGJlIG5v IGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIpIGlzIGlmCi0gICAgICAgdGhpcyBzdGF0ZSBp cyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywKLSAgICAg ICBkZXRlY3RpbmcgdGhlIGFic2VuY2Ugb2YgYSBsb29rYWhlYWQgaXMgc3VmZmljaWVudCB0byBk ZXRlcm1pbmUKLSAgICAgICB0aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQg dG9rZW4gdG8gcmVwb3J0LiAgSW4gdGhhdAotICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEgc2lt cGxlICJzeW50YXggZXJyb3IiLgotICAgICAtIERvbid0IGFzc3VtZSB0aGVyZSBpc24ndCBhIGxv b2thaGVhZCBqdXN0IGJlY2F1c2UgdGhpcyBzdGF0ZSBpcyBhCi0gICAgICAgY29uc2lzdGVudCBz dGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQotICAg ICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEg bm9uLWRlZmF1bHQKLSAgICAgICBhY3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9uIHRoYXQg bWFuaXB1bGF0ZWQgeXljaGFyLgotICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4cGVjdGVkIHRva2Vu IGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8gaGF2ZQotICAgICAgIGNvcnJlY3QgbG9va2FoZWFk IGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdAotICAgICAgIHRv IHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRlciBmZXRjaGluZyBhIGxvb2thaGVhZCBmcm9t IHRoZQotICAgICAgIHNjYW5uZXIgYW5kIGJlZm9yZSBkZXRlY3RpbmcgYSBzeW50YXggZXJyb3Iu ICBUaHVzLCBzdGF0ZSBtZXJnaW5nCi0gICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVm YXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkCi0gICAgICAgdG9rZW4gbGlzdC4g IEhvd2V2ZXIsIHRoZSBsaXN0IGlzIGNvcnJlY3QgZm9yIGNhbm9uaWNhbCBMUiB3aXRoCi0gICAg ICAgb25lIGV4Y2VwdGlvbjogaXQgd2lsbCBzdGlsbCBjb250YWluIGFueSB0b2tlbiB0aGF0IHdp bGwgbm90IGJlCi0gICAgICAgYWNjZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBpbiBhIGxh dGVyIHN0YXRlLgotICAqLwotICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQotICAgIHsKLSAgICAg IGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsKLSAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRu YW1lW3l5dG9rZW5dOwotICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkK LSAgICAgICAgewotICAgICAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRv IGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAgICAgICAgICBZWUNIRUNLLiAgSW4gb3Ro ZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4gYWN0aW9ucyBmb3IKLSAgICAgICAgICAgICB0 aGlzIHN0YXRlIGJlY2F1c2UgdGhleSBhcmUgZGVmYXVsdCBhY3Rpb25zLiAgKi8KLSAgICAgICAg ICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0gICAgICAgICAgLyogU3RheSB3 aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICAgICAg aW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgICAgIGludCB5eXhlbmQg PSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAg ICAgICBpbnQgeXl4OwotCi0gICAgICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4 ZW5kOyArK3l5eCkKLSAgICAgICAgICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYm IHl5eCAhPSBZWVRFUlJPUgotICAgICAgICAgICAgICAgICYmICF5eXRhYmxlX3ZhbHVlX2lzX2Vy cm9yICh5eXRhYmxlW3l5eCArIHl5bl0pKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAgICAgICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeXljb3VudCA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5 eXRuYW1lW3l5eF07Ci0gICAgICAgICAgICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVy ciAoWVlfTlVMTCwgeXl0bmFtZVt5eXhdKTsKLSAgICAgICAgICAgICAgICBpZiAoISAoeXlzaXpl IDw9IHl5c2l6ZTEKLSAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNL X0FMTE9DX01BWElNVU0pKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAg ICAgICAgeXlzaXplID0geXlzaXplMTsKLSAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotCi0gIHN3aXRjaCAoeXljb3VudCkKLSAgICB7Ci0jIGRlZmluZSBZWUNBU0VfKE4sIFMpICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICB5eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICBicmVhawotICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAg ICAgIFlZQ0FTRV8oMSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKSk7Ci0gICAg ICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rpbmcg JXMiKSk7Ci0gICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz LCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7Ci0gICAgICBZWUNBU0VfKDQsIFlZXygic3ludGF4IGVy cm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKSk7Ci0gICAgICBZ WUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg b3IgJXMgb3IgJXMgb3IgJXMiKSk7Ci0jIHVuZGVmIFlZQ0FTRV8KLSAgICB9Ci0KLSAgeXlzaXpl MSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7Ci0gIGlmICghICh5eXNpemUgPD0geXlz aXplMSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgcmV0dXJuIDI7 Ci0gIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0KLSAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKLSAg ICB7Ci0gICAgICAqeXltc2dfYWxsb2MgPSAyICogeXlzaXplOwotICAgICAgaWYgKCEgKHl5c2l6 ZSA8PSAqeXltc2dfYWxsb2MKLSAgICAgICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlTVEFD S19BTExPQ19NQVhJTVVNKSkKLSAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19N QVhJTVVNOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gIC8qIEF2b2lkIHNwcmludGYsIGFz IHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLSAgICAgRG9uJ3QgaGF2 ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KLSAgICAgcHJvZHVj ZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgewotICAg IGNoYXIgKnl5cCA9ICp5eW1zZzsKLSAgICBpbnQgeXlpID0gMDsKLSAgICB3aGlsZSAoKCp5eXAg PSAqeXlmb3JtYXQpICE9ICdcMCcpCi0gICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmb3JtYXRb MV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICB5eXAgKz0g eXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0gICAgICAgICAgeXlmb3JtYXQgKz0gMjsK LSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgeXlwKys7Ci0gICAg ICAgICAgeXlmb3JtYXQrKzsKLSAgICAgICAgfQotICB9Ci0gIHJldHVybiAwOwotfQotI2VuZGlm IC8qIFlZRVJST1JfVkVSQk9TRSAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0 aGlzIHN5bWJvbC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l ZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywg aW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXApCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVz dHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQotICAgIGNvbnN0IGNoYXIgKnl5bXNnOwot ICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7Ci0jZW5kaWYKLXsKLSAgWVlV U0UgKHl5dmFsdWVwKTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsK LSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAp OwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgNTc6IC8qICJjaG9pY2Vf ZW50cnkiICovCi0KLQl7Ci0JZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3Rh dGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAotCQkoeXl2YWx1ZXAtPm1lbnUpLT5maWxlLT5uYW1l LCAoeXl2YWx1ZXAtPm1lbnUpLT5saW5lbm8pOwotCWlmIChjdXJyZW50X21lbnUgPT0gKHl5dmFs dWVwLT5tZW51KSkKLQkJbWVudV9lbmRfbWVudSgpOwotfTsKLQotCWJyZWFrOwotICAgICAgY2Fz ZSA2MzogLyogImlmX2VudHJ5IiAqLwotCi0JewotCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1p c3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKLQkJKHl5dmFsdWVwLT5tZW51 KS0+ZmlsZS0+bmFtZSwgKHl5dmFsdWVwLT5tZW51KS0+bGluZW5vKTsKLQlpZiAoY3VycmVudF9t ZW51ID09ICh5eXZhbHVlcC0+bWVudSkpCi0JCW1lbnVfZW5kX21lbnUoKTsKLX07Ci0KLQlicmVh azsKLSAgICAgIGNhc2UgNjk6IC8qICJtZW51X2VudHJ5IiAqLwotCi0JewotCWZwcmludGYoc3Rk ZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKLQkJ KHl5dmFsdWVwLT5tZW51KS0+ZmlsZS0+bmFtZSwgKHl5dmFsdWVwLT5tZW51KS0+bGluZW5vKTsK LQlpZiAoY3VycmVudF9tZW51ID09ICh5eXZhbHVlcC0+bWVudSkpCi0JCW1lbnVfZW5kX21lbnUo KTsKLX07Ci0KLQlicmVhazsKLQotICAgICAgZGVmYXVsdDoKLQlicmVhazsKLSAgICB9Ci19Ci0K LQotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLSNp ZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3Bs dXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5 cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmlu ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHZvaWQpOwot I2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFN ICovCi0KLQotLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyog VGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUg eXlsdmFsOwotCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5 bmVycnM7Ci0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwot Ci0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf TVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1pbnQK LXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNlbmRp ZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwg ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk ZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlICh2b2lkKQotI2Vsc2UKLWludAoteXlwYXJz ZSAoKQotCi0jZW5kaWYKLSNlbmRpZgotewotICAgIGludCB5eXN0YXRlOwotICAgIC8qIE51bWJl ciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwot ICAgIGludCB5eWVycnN0YXR1czsKLQotICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xz OgotICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCi0gICAgICAgYHl5dnMnOiByZWxh dGVkIHRvIHNlbWFudGljIHZhbHVlcy4KLQotICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhy b3VnaCBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICAgIHRvIHJl YWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gICAgLyogVGhlIHN0YXRlIHN0YWNrLiAg Ki8KLSAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICAgIHl5dHlwZV9pbnQx NiAqeXlzczsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gICAgLyogVGhlIHNlbWFudGlj IHZhbHVlIHN0YWNrLiAgKi8KLSAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgICBZ WVNUWVBFICp5eXZzOwotICAgIFlZU1RZUEUgKnl5dnNwOwotCi0gICAgWVlTSVpFX1QgeXlzdGFj a3NpemU7Ci0KLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBMb29rYWhlYWQgdG9r ZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5 eXRva2VuOwotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVl IGFuZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMuICAqLwotICBZWVNU WVBFIHl5dmFsOwotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3Ig bWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEy OF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2didWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0g c2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZz cCAtPSAoTiksIHl5c3NwIC09IChOKSkKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24g dGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBz eW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgeXl0b2tl biA9IDA7Ci0gIHl5c3MgPSB5eXNzYTsKLSAgeXl2cyA9IHl5dnNhOwotICB5eXN0YWNrc2l6ZSA9 IFlZSU5JVERFUFRIOwotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4i KSk7Ci0KLSAgeXlzdGF0ZSA9IDA7Ci0gIHl5ZXJyc3RhdHVzID0gMDsKLSAgeXluZXJycyA9IDA7 Ci0gIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0K LSAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQg b2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRo ZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50 cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotICB5eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0g eXl2czsKLQotICBnb3RvIHl5c2V0c3RhdGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1 c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5 eW5ld3N0YXRlOgotICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFs dWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBw dXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KLSAgeXlzc3ArKzsKLQot IHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9IHl5c3RhdGU7Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNr c2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgewotICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQg c2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCi0gICAgICBZWVNJWkVf VCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwotCi0jaWZkZWYgeXlvdmVyZmxvdwotICAgICAg ewotCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj b3BpZXMgb2YKLQkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwg b25lcyBpbnRvCi0JICAgbWVtb3J5LiAgKi8KLQlZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0JeXl0 eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0KLQkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVz cyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBkYXRhIGluIHVzZSBpbiB0aGF0 IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0JICAgY29uZGl0aW9uYWwgYXJv dW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotCSAgIGJlIHVuZGVm aW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5b3ZlcmZsb3cgKFlZXygibWVt b3J5IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCks Ci0JCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQkJICAgICZ5eXN0YWNr c2l6ZSk7Ci0KLQl5eXNzID0geXlzczE7Ci0JeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2Ug Lyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290 byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIg b3duIHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLQlnb3Rv IHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1B WERFUFRIIDwgeXlzdGFja3NpemUpCi0JeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAg ICB7Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0JdW5pb24geXlhbGxvYyAqeXlwdHIg PQotCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlz dGFja3NpemUpKTsKLQlpZiAoISB5eXB0cikKLQkgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0JWVlT VEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXl2 c19hbGxvYywgeXl2cyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0JaWYgKHl5c3MxICE9 IHl5c3NhKQotCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5k aWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAx OwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLQotICAgICAgWVlEUFJJTlRGICgo c3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotCQkgICh1bnNpZ25lZCBs b25nIGludCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAt IDEgPD0geXlzc3ApCi0JWVlBQk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAi RW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQotICBpZiAoeXlzdGF0ZSA9PSBZWUZJ TkFMKQotICAgIFlZQUNDRVBUOwotCi0gIGdvdG8geXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0u Ci18IHl5YmFja3VwLiAgfAotYC0tLS0tLS0tLS0tKi8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFw cHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAg ICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUg b25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCBy ZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVd OwotICBpZiAoeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgZ290byB5eWRlZmF1 bHQ7Ci0KLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBh bHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3Ig WVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZ WUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tl bjogIikpOwotICAgICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0g WVlFT0YpCi0gICAgewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlE UFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVs c2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZ WV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxv Yyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZ WVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhh dCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNU IDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0Owot ICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAo eXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXluKSkKLSAgICAgICAgZ290byB5eWVycmxhYjsKLSAg ICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQotICAvKiBDb3Vu dCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9y Ci0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0t OwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJ TlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCi0gIC8qIERpc2Nh cmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLwotICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3Rh dGUgPSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQot Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3Vy cmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1bHQ6Ci0gIHl5biA9IHl5ZGVmYWN0W3l5c3Rh dGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290byB5eWVycmxhYjsKLSAgZ290byB5eXJlZHVj ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eXJlZHVjZSAtLSBE byBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eXJl ZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAg Ki8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1w bGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgIGAkJCA9ICQxJy4K LQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJh Z2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgotICAgICB1 c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAotICAgICB1 bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZv aWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxp emVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKLQotCi0gIFlZX1JFRFVDRV9QUklO VCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDEwOgotCi0gICAg eyB6Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7IH0KLSAgICBicmVhazsK LQotICBjYXNlIDExOgotCi0gICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1lbnQgXCIl c1wiIiwgKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSk7IH0KLSAgICBicmVhazsKLQotICBjYXNl IDEyOgotCi0gICAgewotCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkIG9wdGlvbiBcIiVzXCIiLCBr Y29uZl9pZF9zdHJpbmdzICsgKHl5dnNwWygyKSAtICg0KV0uaWQpLT5uYW1lKTsKLX0KLSAgICBi cmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0ZW1l bnQiKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjg6Ci0KLSAgICB7IHpjb25mX2Vycm9yKCJ1 bmtub3duIG9wdGlvbiBcIiVzXCIiLCAoeXl2c3BbKDEpIC0gKDMpXS5zdHJpbmcpKTsgfQotICAg IGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7IHpjb25mX2Vycm9yKCJpbnZhbGlkIG9wdGlv biIpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLQlzdHJ1Y3Qgc3ltYm9s ICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFsoMikgLSAoMyldLnN0cmluZyksIDApOwotCXN5bS0+ ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOwotCW1lbnVfYWRkX2VudHJ5KHN5bSk7Ci0JcHJpbnRk KERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25m X2xpbmVubygpLCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpKTsKLX0KLSAgICBicmVhazsKLQot ICBjYXNlIDMxOgotCi0gICAgewotCW1lbnVfZW5kX2VudHJ5KCk7Ci0JcHJpbnRkKERFQlVHX1BB UlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp KTsKLX0KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewotCXN0cnVjdCBzeW1ib2wg KnN5bSA9IHN5bV9sb29rdXAoKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSwgMCk7Ci0Jc3ltLT5m bGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7Ci0JbWVudV9hZGRfZW50cnkoc3ltKTsKLQlwcmludGQo REVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpj b25mX2xpbmVubygpLCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpKTsKLX0KLSAgICBicmVhazsK LQotICBjYXNlIDMzOgotCi0gICAgewotCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCi0JCWN1 cnJlbnRfZW50cnktPnByb21wdC0+dHlwZSA9IFBfTUVOVTsKLQllbHNlCi0JCXpjb25mcHJpbnQo Indhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7Ci0JbWVudV9l bmRfZW50cnkoKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpj b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug NDE6Ci0KLSAgICB7Ci0JbWVudV9zZXRfdHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pZCktPnN0eXBl KTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKLQkJemNvbmZfY3Vy bmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKLQkJKHl5dnNwWygxKSAtICgzKV0uaWQpLT5zdHlwZSk7 Ci19Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQotICAgIHsKLQltZW51X2FkZF9wcm9tcHQo UF9QUk9NUFQsICh5eXZzcFsoMikgLSAoNCldLnN0cmluZyksICh5eXZzcFsoMykgLSAoNCldLmV4 cHIpKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5h bWUoKSwgemNvbmZfbGluZW5vKCkpOwotfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDM6Ci0KLSAg ICB7Ci0JbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICh5eXZzcFsoMikgLSAoNCldLmV4cHIpLCAo eXl2c3BbKDMpIC0gKDQpXS5leHByKSk7Ci0JaWYgKCh5eXZzcFsoMSkgLSAoNCldLmlkKS0+c3R5 cGUgIT0gU19VTktOT1dOKQotCQltZW51X3NldF90eXBlKCh5eXZzcFsoMSkgLSAoNCldLmlkKS0+ c3R5cGUpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQoJXUpXG4iLAotCQl6 Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAotCQkoeXl2c3BbKDEpIC0gKDQpXS5pZCkt PnN0eXBlKTsKLX0KLSAgICBicmVhazsKLQotICBjYXNlIDQ0OgotCi0gICAgewotCW1lbnVfYWRk X3N5bWJvbChQX1NFTEVDVCwgc3ltX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDQpXS5zdHJpbmcpLCAw KSwgKHl5dnNwWygzKSAtICg0KV0uZXhwcikpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk OnNlbGVjdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19Ci0gICAgYnJl YWs7Ci0KLSAgY2FzZSA0NToKLQotICAgIHsKLQltZW51X2FkZF9leHByKFBfUkFOR0UsIGV4cHJf YWxsb2NfY29tcChFX1JBTkdFLCh5eXZzcFsoMikgLSAoNSldLnN5bWJvbCksICh5eXZzcFsoMykg LSAoNSldLnN5bWJvbCkpLCAoeXl2c3BbKDQpIC0gKDUpXS5leHByKSk7Ci0JcHJpbnRkKERFQlVH X1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp OwotfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7Ci0JY29uc3Qgc3RydWN0IGtj b25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBz dHJsZW4oKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSkpOwotCWlmIChpZCAmJiBpZC0+ZmxhZ3Mg JiBURl9PUFRJT04pCi0JCW1lbnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICh5eXZzcFsoMykgLSAo MyldLnN0cmluZykpOwotCWVsc2UKLQkJemNvbmZwcmludCgid2FybmluZzogaWdub3JpbmcgdW5r bm93biBvcHRpb24gJXMiLCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpKTsKLQlmcmVlKCh5eXZz cFsoMikgLSAoMyldLnN0cmluZykpOwotfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDk6Ci0KLSAg ICB7ICh5eXZhbC5zdHJpbmcpID0gTlVMTDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTA6Ci0K LSAgICB7ICh5eXZhbC5zdHJpbmcpID0gKHl5dnNwWygyKSAtICgyKV0uc3RyaW5nKTsgfQotICAg IGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltID0gc3lt X2xvb2t1cCgoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBTWU1CT0xfQ0hPSUNFKTsKLQlzeW0t PmZsYWdzIHw9IFNZTUJPTF9BVVRPOwotCW1lbnVfYWRkX2VudHJ5KHN5bSk7Ci0JbWVudV9hZGRf ZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6 Y2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX0KLSAgICBicmVh azsKLQotICBjYXNlIDUyOgotCi0gICAgewotCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUo KTsKLX0KLSAgICBicmVhazsKLQotICBjYXNlIDUzOgotCi0gICAgewotCWlmICh6Y29uZl9lbmR0 b2tlbigoeXl2c3BbKDEpIC0gKDEpXS5pZCksIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsKLQkJ bWVudV9lbmRfbWVudSgpOwotCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2Vc biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCX0KLX0KLSAgICBicmVhazsK LQotICBjYXNlIDYxOgotCi0gICAgewotCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNw WygyKSAtICg0KV0uc3RyaW5nKSwgKHl5dnNwWygzKSAtICg0KV0uZXhwcikpOwotCXByaW50ZChE RUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l bm8oKSk7Ci19Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsKLQlpZiAoKHl5dnNw WygxKSAtICgzKV0uaWQpLT5zdHlwZSA9PSBTX0JPT0xFQU4gfHwgKHl5dnNwWygxKSAtICgzKV0u aWQpLT5zdHlwZSA9PSBTX1RSSVNUQVRFKSB7Ci0JCW1lbnVfc2V0X3R5cGUoKHl5dnNwWygxKSAt ICgzKV0uaWQpLT5zdHlwZSk7Ci0JCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUoJXUp XG4iLAotCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKLQkJCSh5eXZzcFsoMSkg LSAoMyldLmlkKS0+c3R5cGUpOwotCX0gZWxzZQotCQlZWUVSUk9SOwotfQotICAgIGJyZWFrOwot Ci0gIGNhc2UgNjM6Ci0KLSAgICB7Ci0JY3VycmVudF9lbnRyeS0+c3ltLT5mbGFncyB8PSBTWU1C T0xfT1BUSU9OQUw7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6b3B0aW9uYWxcbiIsIHpj b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug NjQ6Ci0KLSAgICB7Ci0JaWYgKCh5eXZzcFsoMSkgLSAoNCldLmlkKS0+c3R5cGUgPT0gU19VTktO T1dOKSB7Ci0JCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsIHN5bV9sb29rdXAoKHl5dnNwWygy KSAtICg0KV0uc3RyaW5nKSwgMCksICh5eXZzcFsoMykgLSAoNCldLmV4cHIpKTsKLQkJcHJpbnRk KERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwKLQkJCXpjb25mX2N1cm5hbWUoKSwgemNv bmZfbGluZW5vKCkpOwotCX0gZWxzZQotCQlZWUVSUk9SOwotfQotICAgIGJyZWFrOwotCi0gIGNh c2UgNjc6Ci0KLSAgICB7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aWZcbiIsIHpjb25m X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCW1lbnVfYWRkX2VudHJ5KE5VTEwpOwotCW1l bnVfYWRkX2RlcCgoeXl2c3BbKDIpIC0gKDMpXS5leHByKSk7Ci0JKHl5dmFsLm1lbnUpID0gbWVu dV9hZGRfbWVudSgpOwotfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjg6Ci0KLSAgICB7Ci0JaWYg KHpjb25mX2VuZHRva2VuKCh5eXZzcFsoMSkgLSAoMSldLmlkKSwgVF9JRiwgVF9FTkRJRikpIHsK LQkJbWVudV9lbmRfbWVudSgpOwotCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRpZlxu IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JfQotfQotICAgIGJyZWFrOwot Ci0gIGNhc2UgNzQ6Ci0KLSAgICB7Ci0JbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgKHl5dnNwWygy KSAtICgzKV0uc3RyaW5nKSwgTlVMTCk7Ci19Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3NToKLQot ICAgIHsKLQltZW51X2FkZF9lbnRyeShOVUxMKTsKLQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAo eXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBOVUxMKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIl czolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX0KLSAgICBi cmVhazsKLQotICBjYXNlIDc2OgotCi0gICAgewotCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21l bnUoKTsKLX0KLSAgICBicmVhazsKLQotICBjYXNlIDc3OgotCi0gICAgewotCWlmICh6Y29uZl9l bmR0b2tlbigoeXl2c3BbKDEpIC0gKDEpXS5pZCksIFRfTUVOVSwgVF9FTkRNRU5VKSkgewotCQlt ZW51X2VuZF9tZW51KCk7Ci0JCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIs IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCX0KLX0KLSAgICBicmVhazsKLQot ICBjYXNlIDgzOgotCi0gICAgewotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAl c1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWygyKSAtICgzKV0u c3RyaW5nKSk7Ci0JemNvbmZfbmV4dGZpbGUoKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSk7Ci19 Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4NDoKLQotICAgIHsKLQltZW51X2FkZF9lbnRyeShOVUxM KTsKLQltZW51X2FkZF9wcm9tcHQoUF9DT01NRU5ULCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcp LCBOVUxMKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9j dXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX0KLSAgICBicmVhazsKLQotICBjYXNlIDg1Ogot Ci0gICAgewotCW1lbnVfZW5kX2VudHJ5KCk7Ci19Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4NjoK LQotICAgIHsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpoZWxwXG4iLCB6Y29uZl9jdXJu YW1lKCksIHpjb25mX2xpbmVubygpKTsKLQl6Y29uZl9zdGFydGhlbHAoKTsKLX0KLSAgICBicmVh azsKLQotICBjYXNlIDg3OgotCi0gICAgewotCWN1cnJlbnRfZW50cnktPmhlbHAgPSAoeXl2c3Bb KDIpIC0gKDIpXS5zdHJpbmcpOwotfQotICAgIGJyZWFrOwotCi0gIGNhc2UgOTI6Ci0KLSAgICB7 Ci0JbWVudV9hZGRfZGVwKCh5eXZzcFsoMykgLSAoNCldLmV4cHIpKTsKLQlwcmludGQoREVCVUdf UEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu bygpKTsKLX0KLSAgICBicmVhazsKLQotICBjYXNlIDk2OgotCi0gICAgewotCW1lbnVfYWRkX3Zp c2liaWxpdHkoKHl5dnNwWygyKSAtICgyKV0uZXhwcikpOwotfQotICAgIGJyZWFrOwotCi0gIGNh c2UgOTg6Ci0KLSAgICB7Ci0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbKDEpIC0g KDIpXS5zdHJpbmcpLCAoeXl2c3BbKDIpIC0gKDIpXS5leHByKSk7Ci19Ci0gICAgYnJlYWs7Ci0K LSAgY2FzZSAxMDE6Ci0KLSAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pZCk7 IH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwMjoKLQotICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZz cFsoMSkgLSAoMildLmlkKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAzOgotCi0gICAgeyAo eXl2YWwuaWQpID0gKHl5dnNwWygxKSAtICgyKV0uaWQpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz ZSAxMDY6Ci0KLSAgICB7ICh5eXZhbC5leHByKSA9IE5VTEw7IH0KLSAgICBicmVhazsKLQotICBj YXNlIDEwNzoKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWygyKSAtICgyKV0uZXhwcik7 IH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwODoKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhw cl9hbGxvY19zeW1ib2woKHl5dnNwWygxKSAtICgxKV0uc3ltYm9sKSk7IH0KLSAgICBicmVhazsK LQotICBjYXNlIDEwOToKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVf TFRILCAoeXl2c3BbKDEpIC0gKDMpXS5zeW1ib2wpLCAoeXl2c3BbKDMpIC0gKDMpXS5zeW1ib2wp KTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTEwOgotCi0gICAgeyAoeXl2YWwuZXhwcikgPSBl eHByX2FsbG9jX2NvbXAoRV9MRVEsICh5eXZzcFsoMSkgLSAoMyldLnN5bWJvbCksICh5eXZzcFso MykgLSAoMyldLnN5bWJvbCkpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTE6Ci0KLSAgICB7 ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0dUSCwgKHl5dnNwWygxKSAtICgzKV0u c3ltYm9sKSwgKHl5dnNwWygzKSAtICgzKV0uc3ltYm9sKSk7IH0KLSAgICBicmVhazsKLQotICBj YXNlIDExMjoKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfR0VRLCAo eXl2c3BbKDEpIC0gKDMpXS5zeW1ib2wpLCAoeXl2c3BbKDMpIC0gKDMpXS5zeW1ib2wpKTsgfQot ICAgIGJyZWFrOwotCi0gIGNhc2UgMTEzOgotCi0gICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2Fs bG9jX2NvbXAoRV9FUVVBTCwgKHl5dnNwWygxKSAtICgzKV0uc3ltYm9sKSwgKHl5dnNwWygzKSAt ICgzKV0uc3ltYm9sKSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDExNDoKLQotICAgIHsgKHl5 dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgKHl5dnNwWygxKSAtICgzKV0u c3ltYm9sKSwgKHl5dnNwWygzKSAtICgzKV0uc3ltYm9sKSk7IH0KLSAgICBicmVhazsKLQotICBj YXNlIDExNToKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWygyKSAtICgzKV0uZXhwcik7 IH0KLSAgICBicmVhazsKLQotICBjYXNlIDExNjoKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhw cl9hbGxvY19vbmUoRV9OT1QsICh5eXZzcFsoMikgLSAoMildLmV4cHIpKTsgfQotICAgIGJyZWFr OwotCi0gIGNhc2UgMTE3OgotCi0gICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3byhF X09SLCAoeXl2c3BbKDEpIC0gKDMpXS5leHByKSwgKHl5dnNwWygzKSAtICgzKV0uZXhwcikpOyB9 Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTg6Ci0KLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJf YWxsb2NfdHdvKEVfQU5ELCAoeXl2c3BbKDEpIC0gKDMpXS5leHByKSwgKHl5dnNwWygzKSAtICgz KV0uZXhwcikpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTk6Ci0KLSAgICB7ICh5eXZhbC5z eW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2c3BbKDEpIC0gKDEpXS5zdHJpbmcpLCAwKTsgZnJlZSgo eXl2c3BbKDEpIC0gKDEpXS5zdHJpbmcpKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIwOgot Ci0gICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5dnNwWygxKSAtICgxKV0uc3Ry aW5nKSwgU1lNQk9MX0NPTlNUKTsgZnJlZSgoeXl2c3BbKDEpIC0gKDEpXS5zdHJpbmcpKTsgfQot ICAgIGJyZWFrOwotCi0gIGNhc2UgMTIxOgotCi0gICAgeyAoeXl2YWwuc3RyaW5nKSA9IE5VTEw7 IH0KLSAgICBicmVhazsKLQotCi0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgLyog VXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJl cXVpcmVzCi0gICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyB0cmFuc2xh dGlvbi4gIFdlIHRha2UgdGhlCi0gICAgIGFwcHJvYWNoIG9mIHRyYW5zbGF0aW5nIGltbWVkaWF0 ZWx5IGJlZm9yZSBldmVyeSB1c2Ugb2YgeXl0b2tlbi4KLSAgICAgT25lIGFsdGVybmF0aXZlIGlz IHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0aW9uLAotICAgICBidXQg dGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhlIHNlbWFudGljIGFjdGlvbiBp bnZva2VzCi0gICAgIFlZQUJPUlQsIFlZQUNDRVBULCBvciBZWUVSUk9SIGltbWVkaWF0ZWx5IGFm dGVyIGFsdGVyaW5nIHl5Y2hhciBvcgotICAgICBpZiBpdCBpbnZva2VzIFlZQkFDS1VQLiAgSW4g dGhlIGNhc2Ugb2YgWVlBQk9SVCBvciBZWUFDQ0VQVCwgYW4KLSAgICAgaW5jb3JyZWN0IGRlc3Ry dWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlCi0gICAgIGNh c2Ugb2YgWVlFUlJPUiBvciBZWUJBQ0tVUCwgc3Vic2VxdWVudCBwYXJzZXIgYWN0aW9ucyBtaWdo dCBsZWFkCi0gICAgIHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNhbGwgb3IgdmVyYm9zZSBz eW50YXggZXJyb3IgbWVzc2FnZQotICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFuc2xh dGVkLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFs LCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9T VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICorK3l5dnNwID0geXl2YWw7Ci0KLSAgLyog Tm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQg c3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJh Y2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4g PSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5 eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNr W3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKLSAg ZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKLQotICBnb3Rv IHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u Ci18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKLWAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0gIC8qIE1ha2Ugc3VyZSB3ZSBo YXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQKLSAgICAg dXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLwotICB5 eXRva2VuID0geXljaGFyID09IFlZRU1QVFkgPyBZWUVNUFRZIDogWVlUUkFOU0xBVEUgKHl5Y2hh cik7Ci0KLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBv cnQgdGhpcyBlcnJvci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAgewotICAgICAgKyt5 eW5lcnJzOwotI2lmICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9yIChZWV8oInN5bnRh eCBlcnJvciIpKTsKLSNlbHNlCi0jIGRlZmluZSBZWVNZTlRBWF9FUlJPUiB5eXN5bnRheF9lcnJv ciAoJnl5bXNnX2FsbG9jLCAmeXltc2csIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB5eXNzcCwgeXl0b2tlbikKLSAgICAgIHsKLSAgICAgICAgY2hhciBjb25zdCAq eXltc2dwID0gWVlfKCJzeW50YXggZXJyb3IiKTsKLSAgICAgICAgaW50IHl5c3ludGF4X2Vycm9y X3N0YXR1czsKLSAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7 Ci0gICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMCkKLSAgICAgICAgICB5eW1z Z3AgPSB5eW1zZzsKLSAgICAgICAgZWxzZSBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDEp Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAg ICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgICAgIHl5bXNnID0gKGNoYXIg KikgWVlTVEFDS19BTExPQyAoeXltc2dfYWxsb2MpOwotICAgICAgICAgICAgaWYgKCF5eW1zZykK LSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5bXNnID0geXltc2didWY7Ci0gICAg ICAgICAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAgICAgICAg ICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gMjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jf c3RhdHVzID0gWVlTWU5UQVhfRVJST1I7Ci0gICAgICAgICAgICAgICAgeXltc2dwID0geXltc2c7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIHl5ZXJyb3IgKHl5bXNncCk7 Ci0gICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMikKLSAgICAgICAgICBnb3Rv IHl5ZXhoYXVzdGVkbGFiOwotICAgICAgfQotIyB1bmRlZiBZWVNZTlRBWF9FUlJPUgotI2VuZGlm Ci0gICAgfQotCi0KLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJ ZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFu Ci0JIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikK LQl7Ci0JICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotCSAgaWYg KHl5Y2hhciA9PSBZWUVPRikKLQkgICAgWVlBQk9SVDsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAg eXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLQkJICAgICAgeXl0b2tlbiwgJnl5bHZh bCk7Ci0JICB5eWNoYXIgPSBZWUVNUFRZOwotCX0KLSAgICB9Ci0KLSAgLyogRWxzZSB3aWxsIHRy eSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCi0gICAg IHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIgLS0gZXJyb3Ig cmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQotICAvKiBQYWNp ZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCi0g ICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBl YXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCovIDApCi0gICAg IGdvdG8geXllcnJvcmxhYjsKLQotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0 aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0g IFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlz cywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0v Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3Ig YW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsJ LyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3Ig KDs7KQotICAgIHsKLSAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICgheXlw YWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0JewotCSAgeXluICs9IFlZVEVSUk9SOwotCSAg aWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9S KQotCSAgICB7Ci0JICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotCSAgICAgIGlmICgwIDwgeXlu KQotCQlicmVhazsKLQkgICAgfQotCX0KLQotICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRl IGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwotICAgICAgaWYg KHl5c3NwID09IHl5c3MpCi0JWVlBQk9SVDsKLQotCi0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6 IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3ApOwotICAgICAgWVlQT1BTVEFD SyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5 c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLQotICAvKiBTaGlm dCB0aGUgZXJyb3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5 c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXlu ZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18 IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwot ICBnb3RvIHl5cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LgotfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0g IGdvdG8geXlyZXR1cm47Ci0KLSNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVS Qk9TRQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAot YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXll eGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXly ZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgot ICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCi0gICAgewotICAgICAgLyogTWFrZSBzdXJlIHdlIGhh dmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAotICAgICAg ICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLwot ICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgeXlkZXN0cnVjdCAo IkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgICAgICAgICAgIHl5dG9r ZW4sICZ5eWx2YWwpOwotICAgIH0KLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2Yg dGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlB Q0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNz LCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1 Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLQkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3ApOwotICAg ICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQotI2lmbmRlZiB5eW92ZXJmbG93Ci0gIGlmICh5eXNz ICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7Ci0jZW5kaWYKLSNpZiBZWUVSUk9S X1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlt c2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLwotICByZXR1cm4g WVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQotCi0KLXZvaWQgY29uZl9wYXJzZShjb25zdCBjaGFy ICpuYW1lKQotewotCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlpbnQgaTsKLQotCXpjb25mX2luaXRz Y2FuKG5hbWUpOwotCi0Jc3ltX2luaXQoKTsKLQlfbWVudV9pbml0KCk7Ci0Jcm9vdG1lbnUucHJv bXB0ID0gbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgIkxpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9u IiwgTlVMTCk7Ci0KLQlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIpKQotCQl6Y29uZmRlYnVnID0g MTsKLQl6Y29uZnBhcnNlKCk7Ci0JaWYgKHpjb25mbmVycnMpCi0JCWV4aXQoMSk7Ci0JaWYgKCFt b2R1bGVzX3N5bSkKLQkJbW9kdWxlc19zeW0gPSBzeW1fZmluZCggIm4iICk7Ci0KLQlyb290bWVu dS5wcm9tcHQtPnRleHQgPSBfKHJvb3RtZW51LnByb21wdC0+dGV4dCk7Ci0Jcm9vdG1lbnUucHJv bXB0LT50ZXh0ID0gc3ltX2V4cGFuZF9zdHJpbmdfdmFsdWUocm9vdG1lbnUucHJvbXB0LT50ZXh0 KTsKLQotCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsKLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3lt KSB7Ci0JCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0pKQotCQkJemNvbmZuZXJycysrOwotCX0KLQlp ZiAoemNvbmZuZXJycykKLQkJZXhpdCgxKTsKLQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKLX0K LQotc3RhdGljIGNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCi17Ci0Jc3dp dGNoICh0b2tlbikgewotCWNhc2UgVF9NRU5VOgkJcmV0dXJuICJtZW51IjsKLQljYXNlIFRfRU5E TUVOVToJCXJldHVybiAiZW5kbWVudSI7Ci0JY2FzZSBUX0NIT0lDRToJCXJldHVybiAiY2hvaWNl IjsKLQljYXNlIFRfRU5EQ0hPSUNFOglyZXR1cm4gImVuZGNob2ljZSI7Ci0JY2FzZSBUX0lGOgkJ cmV0dXJuICJpZiI7Ci0JY2FzZSBUX0VORElGOgkJcmV0dXJuICJlbmRpZiI7Ci0JY2FzZSBUX0RF UEVORFM6CQlyZXR1cm4gImRlcGVuZHMiOwotCWNhc2UgVF9WSVNJQkxFOgkJcmV0dXJuICJ2aXNp YmxlIjsKLQl9Ci0JcmV0dXJuICI8dG9rZW4+IjsKLX0KLQotc3RhdGljIGJvb2wgemNvbmZfZW5k dG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0 b2tlbikKLXsKLQlpZiAoaWQtPnRva2VuICE9IGVuZHRva2VuKSB7Ci0JCXpjb25mX2Vycm9yKCJ1 bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2NrIiwKLQkJCWtjb25mX2lkX3N0cmluZ3MgKyBp ZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKLQkJemNvbmZuZXJycysrOwot CQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9m aWxlKSB7Ci0JCXpjb25mX2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIs Ci0JCQlrY29uZl9pZF9zdHJpbmdzICsgaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRv a2VuKSk7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4i LAotCQkJY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubywKLQkJ CXpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7Ci0JCXpjb25mbmVycnMrKzsKLQkJcmV0dXJu IGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgemNvbmZwcmludChj b25zdCBjaGFyICplcnIsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JZnByaW50ZihzdGRlcnIs ICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JdmFfc3RhcnQo YXAsIGVycik7Ci0JdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKLQl2YV9lbmQoYXApOwotCWZw cmludGYoc3RkZXJyLCAiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3Qg Y2hhciAqZXJyLCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXpjb25mbmVycnMrKzsKLQlmcHJp bnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK LQl2YV9zdGFydChhcCwgZXJyKTsKLQl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOwotCXZhX2Vu ZChhcCk7Ci0JZnByaW50ZihzdGRlcnIsICJcbiIpOwotfQotCi1zdGF0aWMgdm9pZCB6Y29uZmVy cm9yKGNvbnN0IGNoYXIgKmVycikKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwg emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSArIDEsIGVycik7Ci19Ci0KLXN0YXRpYyB2 b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCi17Ci0J Y29uc3QgY2hhciAqcDsKLQlpbnQgbGVuOwotCi0JcHV0YygnIicsIG91dCk7Ci0Jd2hpbGUgKChw ID0gc3RyY2hyKHN0ciwgJyInKSkpIHsKLQkJbGVuID0gcCAtIHN0cjsKLQkJaWYgKGxlbikKLQkJ CWZwcmludGYob3V0LCAiJS4qcyIsIGxlbiwgc3RyKTsKLQkJZnB1dHMoIlxcXCIiLCBvdXQpOwot CQlzdHIgPSBwICsgMTsKLQl9Ci0JZnB1dHMoc3RyLCBvdXQpOwotCXB1dGMoJyInLCBvdXQpOwot fQotCi1zdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVu dSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07Ci0Jc3RydWN0IHByb3BlcnR5 ICpwcm9wOwotCi0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKLQkJZnByaW50ZihvdXQsICJcbmNo b2ljZVxuIik7Ci0JZWxzZQotCQlmcHJpbnRmKG91dCwgIlxuY29uZmlnICVzXG4iLCBzeW0tPm5h bWUpOwotCXN3aXRjaCAoc3ltLT50eXBlKSB7Ci0JY2FzZSBTX0JPT0xFQU46Ci0JCWZwdXRzKCIg IGJvb2xlYW5cbiIsIG91dCk7Ci0JCWJyZWFrOwotCWNhc2UgU19UUklTVEFURToKLQkJZnB1dHMo IiAgdHJpc3RhdGVcbiIsIG91dCk7Ci0JCWJyZWFrOwotCWNhc2UgU19TVFJJTkc6Ci0JCWZwdXRz KCIgIHN0cmluZ1xuIiwgb3V0KTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lOVDoKLQkJZnB1dHMoIiAg aW50ZWdlclxuIiwgb3V0KTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0hFWDoKLQkJZnB1dHMoIiAgaGV4 XG4iLCBvdXQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmcHV0cygiICA/Pz9cbiIsIG91dCk7 Ci0JCWJyZWFrOwotCX0KLQlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9w LT5uZXh0KSB7Ci0JCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCi0JCQljb250aW51ZTsKLQkJc3dp dGNoIChwcm9wLT50eXBlKSB7Ci0JCWNhc2UgUF9QUk9NUFQ6Ci0JCQlmcHV0cygiICBwcm9tcHQg Iiwgb3V0KTsKLQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKLQkJCWlm ICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgewotCQkJCWZwdXRzKCIgaWYgIiwg b3V0KTsKLQkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7Ci0JCQl9Ci0J CQlmcHV0YygnXG4nLCBvdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUF9ERUZBVUxUOgotCQkJZnB1 dHMoICIgIGRlZmF1bHQgIiwgb3V0KTsKLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7 Ci0JCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKLQkJCQlmcHV0cygi IGlmICIsIG91dCk7Ci0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOwot CQkJfQotCQkJZnB1dGMoJ1xuJywgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNlIFBfQ0hPSUNFOgot CQkJZnB1dHMoIiAgI2Nob2ljZSB2YWx1ZVxuIiwgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNlIFBf U0VMRUNUOgotCQkJZnB1dHMoICIgIHNlbGVjdCAiLCBvdXQpOwotCQkJZXhwcl9mcHJpbnQocHJv cC0+ZXhwciwgb3V0KTsKLQkJCWZwdXRjKCdcbicsIG91dCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQ X1JBTkdFOgotCQkJZnB1dHMoICIgIHJhbmdlICIsIG91dCk7Ci0JCQlleHByX2ZwcmludChwcm9w LT5leHByLCBvdXQpOwotCQkJZnB1dGMoJ1xuJywgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNlIFBf TUVOVToKLQkJCWZwdXRzKCAiICBtZW51ICIsIG91dCk7Ci0JCQlwcmludF9xdW90ZWRfc3RyaW5n KG91dCwgcHJvcC0+dGV4dCk7Ci0JCQlmcHV0YygnXG4nLCBvdXQpOwotCQkJYnJlYWs7Ci0JCWRl ZmF1bHQ6Ci0JCQlmcHJpbnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVkIVxuIiwgcHJvcC0+dHlw ZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAobWVudS0+aGVscCkgewotCQlpbnQgbGVuID0g c3RybGVuKG1lbnUtPmhlbHApOwotCQl3aGlsZSAobWVudS0+aGVscFstLWxlbl0gPT0gJ1xuJykK LQkJCW1lbnUtPmhlbHBbbGVuXSA9IDA7Ci0JCWZwcmludGYob3V0LCAiICBoZWxwXG4lc1xuIiwg bWVudS0+aGVscCk7Ci0JfQotfQotCi12b2lkIHpjb25mZHVtcChGSUxFICpvdXQpCi17Ci0Jc3Ry dWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzdHJ1Y3QgbWVudSAq bWVudTsKLQotCW1lbnUgPSByb290bWVudS5saXN0OwotCXdoaWxlIChtZW51KSB7Ci0JCWlmICgo c3ltID0gbWVudS0+c3ltKSkKLQkJCXByaW50X3N5bWJvbChvdXQsIG1lbnUpOwotCQllbHNlIGlm ICgocHJvcCA9IG1lbnUtPnByb21wdCkpIHsKLQkJCXN3aXRjaCAocHJvcC0+dHlwZSkgewotCQkJ Y2FzZSBQX0NPTU1FTlQ6Ci0JCQkJZnB1dHMoIlxuY29tbWVudCAiLCBvdXQpOwotCQkJCXByaW50 X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKLQkJCQlmcHV0cygiXG4iLCBvdXQpOwot CQkJCWJyZWFrOwotCQkJY2FzZSBQX01FTlU6Ci0JCQkJZnB1dHMoIlxubWVudSAiLCBvdXQpOwot CQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKLQkJCQlmcHV0cygiXG4i LCBvdXQpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQk7Ci0JCQl9Ci0JCQlpZiAoIWV4 cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKLQkJCQlmcHV0cygiICBkZXBlbmRzICIs IG91dCk7Ci0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOwotCQkJCWZw dXRjKCdcbicsIG91dCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobWVudS0+bGlzdCkKLQkJCW1lbnUg PSBtZW51LT5saXN0OwotCQllbHNlIGlmIChtZW51LT5uZXh0KQotCQkJbWVudSA9IG1lbnUtPm5l eHQ7Ci0JCWVsc2Ugd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgewotCQkJaWYgKG1lbnUt PnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQotCQkJCWZwdXRzKCJcbmVu ZG1lbnVcbiIsIG91dCk7Ci0JCQlpZiAobWVudS0+bmV4dCkgewotCQkJCW1lbnUgPSBtZW51LT5u ZXh0OwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotfQotCi0jaW5jbHVkZSAiemNvbmYubGV4 LmMiCi0jaW5jbHVkZSAidXRpbC5jIgotI2luY2x1ZGUgImNvbmZkYXRhLmMiCi0jaW5jbHVkZSAi ZXhwci5jIgotI2luY2x1ZGUgInN5bWJvbC5jIgotI2luY2x1ZGUgIm1lbnUuYyIKLQpkaWZmIC0t Z2l0IGEveGVuL3Rvb2xzL2tjb25maWcvemNvbmYueSBiL3hlbi90b29scy9rY29uZmlnL3pjb25m LnkKaW5kZXggNzFiZjhiZmY2OS4uYWQ2MzA1YjBmNCAxMDA2NDQKLS0tIGEveGVuL3Rvb2xzL2tj b25maWcvemNvbmYueQorKysgYi94ZW4vdG9vbHMva2NvbmZpZy96Y29uZi55CkBAIC0yMCwxMCAr MjAsMTAgQEAKIAogaW50IGNkZWJ1ZyA9IFBSSU5URDsKIAotZXh0ZXJuIGludCB6Y29uZmxleCh2 b2lkKTsKK2ludCB5eWxleCh2b2lkKTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAq ZXJyKTsKIHN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOwogc3Rh dGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOwotc3RhdGljIHZvaWQg emNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOwogc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4o Y29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7 CiAKIHN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9IQVNIU0laRV07CkBAIC0zMSw3 ICszMSw3IEBAIHN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9IQVNIU0laRV07CiBz dGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CiAKICV9Ci0l ZXhwZWN0IDMwCislZXhwZWN0IDMyCiAKICV1bmlvbgogewpAQCAtNjIsNiArNjIsNyBAQCBzdGF0 aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CiAldG9rZW4gPGlk PlRfVFlQRQogJXRva2VuIDxpZD5UX0RFRkFVTFQKICV0b2tlbiA8aWQ+VF9TRUxFQ1QKKyV0b2tl biA8aWQ+VF9JTVBMWQogJXRva2VuIDxpZD5UX1JBTkdFCiAldG9rZW4gPGlkPlRfVklTSUJMRQog JXRva2VuIDxpZD5UX09QVElPTgpAQCAtODQsNiArODUsNyBAQCBzdGF0aWMgc3RydWN0IG1lbnUg KmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CiAlbm9uYXNzb2MgVF9OT1QKIAogJXR5cGUg PHN0cmluZz4gcHJvbXB0CisldHlwZSA8c3ltYm9sPiBub25jb25zdF9zeW1ib2wKICV0eXBlIDxz eW1ib2w+IHN5bWJvbAogJXR5cGUgPGV4cHI+IGV4cHIKICV0eXBlIDxleHByPiBpZl9leHByCkBA IC0xMDAsMTQgKzEwMiwzNCBAQCBzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1 cnJlbnRfZW50cnk7CiB9IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CiAKICV7Ci0v KiBJbmNsdWRlIHpjb25mLmhhc2guYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0 YW50cy4gKi8KLSNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCisvKiBJbmNsdWRlIGtjb25mX2lkLmMg aGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovCisjaW5jbHVkZSAia2Nv bmZfaWQuYyIKICV9CiAKICUlCiBpbnB1dDogbmwgc3RhcnQgfCBzdGFydDsKIAotc3RhcnQ6IG1h aW5tZW51X3N0bXQgc3RtdF9saXN0IHwgc3RtdF9saXN0Oworc3RhcnQ6IG1haW5tZW51X3N0bXQg c3RtdF9saXN0IHwgbm9fbWFpbm1lbnVfc3RtdCBzdG10X2xpc3Q7CisKKy8qIG1haW5tZW51IGVu dHJ5ICovCisKK21haW5tZW51X3N0bXQ6IFRfTUFJTk1FTlUgcHJvbXB0IG5sCit7CisJbWVudV9h ZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwpOworfTsKKworLyogRGVmYXVsdCBtYWluIG1lbnUs IGlmIHRoZXJlJ3Mgbm8gbWFpbm1lbnUgZW50cnkgKi8KKworbm9fbWFpbm1lbnVfc3RtdDogLyog ZW1wdHkgKi8KK3sKKwkvKgorCSAqIEhhY2s6IEtlZXAgdGhlIG1haW4gbWVudSB0aXRsZSBvbiB0 aGUgaGVhcCBzbyB3ZSBjYW4gc2FmZWx5IGZyZWUgaXQKKwkgKiBsYXRlciByZWdhcmRsZXNzIG9m IHdoZXRoZXIgaXQgY29tZXMgZnJvbSB0aGUgJ3Byb21wdCcgaW4KKwkgKiBtYWlubWVudV9zdG10 IG9yIGhlcmUKKwkgKi8KKwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCB4c3RyZHVwKCJMaW51eCBL ZXJuZWwgQ29uZmlndXJhdGlvbiIpLCBOVUxMKTsKK307CisKIAogc3RtdF9saXN0OgogCSAgLyog ZW1wdHkgKi8KQEAgLTExOCwxMyArMTQwLDEzIEBAIHN0bXRfbGlzdDoKIAl8IHN0bXRfbGlzdCBU X1dPUkQgZXJyb3IgVF9FT0wJeyB6Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1lbnQgXCIlc1wi IiwgJDIpOyB9CiAJfCBzdG10X2xpc3Qgb3B0aW9uX25hbWUgZXJyb3IgVF9FT0wKIHsKLQl6Y29u Zl9lcnJvcigidW5leHBlY3RlZCBvcHRpb24gXCIlc1wiIiwga2NvbmZfaWRfc3RyaW5ncyArICQy LT5uYW1lKTsKKwl6Y29uZl9lcnJvcigidW5leHBlY3RlZCBvcHRpb24gXCIlc1wiIiwgJDItPm5h bWUpOwogfQogCXwgc3RtdF9saXN0IGVycm9yIFRfRU9MCQl7IHpjb25mX2Vycm9yKCJpbnZhbGlk IHN0YXRlbWVudCIpOyB9CiA7CiAKIG9wdGlvbl9uYW1lOgotCVRfREVQRU5EUyB8IFRfUFJPTVBU IHwgVF9UWVBFIHwgVF9TRUxFQ1QgfCBUX09QVElPTkFMIHwgVF9SQU5HRSB8IFRfREVGQVVMVCB8 IFRfVklTSUJMRQorCVRfREVQRU5EUyB8IFRfUFJPTVBUIHwgVF9UWVBFIHwgVF9TRUxFQ1QgfCBU X0lNUExZIHwgVF9PUFRJT05BTCB8IFRfUkFOR0UgfCBUX0RFRkFVTFQgfCBUX1ZJU0lCTEUKIDsK IAogY29tbW9uX3N0bXQ6CkBAIC0xNDQsMjYgKzE2NiwyMyBAQCBvcHRpb25fZXJyb3I6CiAKIC8q IGNvbmZpZy9tZW51Y29uZmlnIGVudHJ5ICovCiAKLWNvbmZpZ19lbnRyeV9zdGFydDogVF9DT05G SUcgVF9XT1JEIFRfRU9MCitjb25maWdfZW50cnlfc3RhcnQ6IFRfQ09ORklHIG5vbmNvbnN0X3N5 bWJvbCBUX0VPTAogewotCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIDApOwot CXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOwotCW1lbnVfYWRkX2VudHJ5KHN5bSk7Ci0J cHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCks IHpjb25mX2xpbmVubygpLCAkMik7CisJJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwlt ZW51X2FkZF9lbnRyeSgkMik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVz XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7CiB9OwogCiBj b25maWdfc3RtdDogY29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlzdAogewotCW1l bnVfZW5kX2VudHJ5KCk7CiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4i LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIH07CiAKLW1lbnVjb25maWdfZW50 cnlfc3RhcnQ6IFRfTUVOVUNPTkZJRyBUX1dPUkQgVF9FT0wKK21lbnVjb25maWdfZW50cnlfc3Rh cnQ6IFRfTUVOVUNPTkZJRyBub25jb25zdF9zeW1ib2wgVF9FT0wKIHsKLQlzdHJ1Y3Qgc3ltYm9s ICpzeW0gPSBzeW1fbG9va3VwKCQyLCAwKTsKLQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05B TDsKLQltZW51X2FkZF9lbnRyeShzeW0pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1l bnVjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsKKwkk Mi0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KCQyKTsKKwlwcmlu dGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCks IHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7CiB9OwogCiBtZW51Y29uZmlnX3N0bXQ6IG1lbnVj b25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0CkBAIC0xNzIsNyArMTkxLDYgQEAg bWVudWNvbmZpZ19zdG10OiBtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlz dAogCQljdXJyZW50X2VudHJ5LT5wcm9tcHQtPnR5cGUgPSBQX01FTlU7CiAJZWxzZQogCQl6Y29u ZnByaW50KCJ3YXJuaW5nOiBtZW51Y29uZmlnIHN0YXRlbWVudCB3aXRob3V0IHByb21wdCIpOwot CW1lbnVfZW5kX2VudHJ5KCk7CiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY29uZmln XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIH07CiAKQEAgLTIxMCwxMiAr MjI4LDE4IEBAIGNvbmZpZ19vcHRpb246IFRfREVGQVVMVCBleHByIGlmX2V4cHIgVF9FT0wKIAkJ JDEtPnN0eXBlKTsKIH07CiAKLWNvbmZpZ19vcHRpb246IFRfU0VMRUNUIFRfV09SRCBpZl9leHBy IFRfRU9MCitjb25maWdfb3B0aW9uOiBUX1NFTEVDVCBub25jb25zdF9zeW1ib2wgaWZfZXhwciBU X0VPTAogewotCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgc3ltX2xvb2t1cCgkMiwgMCksICQz KTsKKwltZW51X2FkZF9zeW1ib2woUF9TRUxFQ1QsICQyLCAkMyk7CiAJcHJpbnRkKERFQlVHX1BB UlNFLCAiJXM6JWQ6c2VsZWN0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK IH07CiAKK2NvbmZpZ19vcHRpb246IFRfSU1QTFkgbm9uY29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9F T0wKK3sKKwltZW51X2FkZF9zeW1ib2woUF9JTVBMWSwgJDIsICQzKTsKKwlwcmludGQoREVCVUdf UEFSU0UsICIlczolZDppbXBseVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7 Cit9OworCiBjb25maWdfb3B0aW9uOiBUX1JBTkdFIHN5bWJvbCBzeW1ib2wgaWZfZXhwciBUX0VP TAogewogCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsJDIs ICQzKSwgJDQpOwpAQCAtMjMwLDggKzI1NCwxMCBAQCBzeW1ib2xfb3B0aW9uX2xpc3Q6CiAJfCBz eW1ib2xfb3B0aW9uX2xpc3QgVF9XT1JEIHN5bWJvbF9vcHRpb25fYXJnCiB7CiAJY29uc3Qgc3Ry dWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCgkMiwgc3RybGVuKCQyKSk7Ci0JaWYg KGlkICYmIGlkLT5mbGFncyAmIFRGX09QVElPTikKKwlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZf T1BUSU9OKSB7CiAJCW1lbnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICQzKTsKKwkJZnJlZSgkMyk7 CisJfQogCWVsc2UKIAkJemNvbmZwcmludCgid2FybmluZzogaWdub3JpbmcgdW5rbm93biBvcHRp b24gJXMiLCAkMik7CiAJZnJlZSgkMik7CkBAIC0yNTAsNiArMjc2LDcgQEAgY2hvaWNlOiBUX0NI T0lDRSB3b3JkX29wdCBUX0VPTAogCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0FVVE87CiAJbWVudV9h ZGRfZW50cnkoc3ltKTsKIAltZW51X2FkZF9leHByKFBfQ0hPSUNFLCBOVUxMLCBOVUxMKTsKKwlm cmVlKCQyKTsKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjaG9pY2VcbiIsIHpjb25mX2N1 cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogfTsKIApAQCAtMzAxLDEwICszMjgsMTAgQEAgY2hv aWNlX29wdGlvbjogVF9PUFRJT05BTCBUX0VPTAogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk Om9wdGlvbmFsXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIH07CiAKLWNo b2ljZV9vcHRpb246IFRfREVGQVVMVCBUX1dPUkQgaWZfZXhwciBUX0VPTAorY2hvaWNlX29wdGlv bjogVF9ERUZBVUxUIG5vbmNvbnN0X3N5bWJvbCBpZl9leHByIFRfRU9MCiB7CiAJaWYgKCQxLT5z dHlwZSA9PSBTX1VOS05PV04pIHsKLQkJbWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgc3ltX2xv b2t1cCgkMiwgMCksICQzKTsKKwkJbWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgJDIsICQzKTsK IAkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwKIAkJCXpjb25mX2N1cm5h bWUoKSwgemNvbmZfbGluZW5vKCkpOwogCX0gZWxzZQpAQCAtMzQ0LDEzICszNzEsNiBAQCBpZl9i bG9jazoKIAl8IGlmX2Jsb2NrIGNob2ljZV9zdG10CiA7CiAKLS8qIG1haW5tZW51IGVudHJ5ICov Ci0KLW1haW5tZW51X3N0bXQ6IFRfTUFJTk1FTlUgcHJvbXB0IG5sCi17Ci0JbWVudV9hZGRfcHJv bXB0KFBfTUVOVSwgJDIsIE5VTEwpOwotfTsKLQogLyogbWVudSBlbnRyeSAqLwogCiBtZW51OiBU X01FTlUgcHJvbXB0IFRfRU9MCkBAIC0zODcsNiArNDA3LDcgQEAgc291cmNlX3N0bXQ6IFRfU09V UkNFIHByb21wdCBUX0VPTAogewogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAl c1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOwogCXpjb25mX25leHRm aWxlKCQyKTsKKwlmcmVlKCQyKTsKIH07CiAKIC8qIGNvbW1lbnQgZW50cnkgKi8KQEAgLTM5OSw5 ICs0MjAsNyBAQCBjb21tZW50OiBUX0NPTU1FTlQgcHJvbXB0IFRfRU9MCiB9OwogCiBjb21tZW50 X3N0bXQ6IGNvbW1lbnQgZGVwZW5kc19saXN0Ci17Ci0JbWVudV9lbmRfZW50cnkoKTsKLX07Cis7 CiAKIC8qIGhlbHAgb3B0aW9uICovCiAKQEAgLTQxMyw2ICs0MzIsMTcgQEAgaGVscF9zdGFydDog VF9IRUxQIFRfRU9MCiAKIGhlbHA6IGhlbHBfc3RhcnQgVF9IRUxQVEVYVAogeworCWlmIChjdXJy ZW50X2VudHJ5LT5oZWxwKSB7CisJCWZyZWUoY3VycmVudF9lbnRyeS0+aGVscCk7CisJCXpjb25m cHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIG1vcmUgdGhhbiBvbmUgaGVscCB0ZXh0 IC0tIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIsCisJCQkgICBjdXJyZW50X2VudHJ5 LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7CisJfQorCisJLyogSXMgdGhlIGhlbHAgdGV4dCBl bXB0eSBvciBhbGwgd2hpdGVzcGFjZT8gKi8KKwlpZiAoJDJbc3Ryc3BuKCQyLCAiIFxmXG5cclx0 XHYiKV0gPT0gJ1wwJykKKwkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGgg YmxhbmsgaGVscCB0ZXh0IiwKKwkJCSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNo b2ljZT4iKTsKKwogCWN1cnJlbnRfZW50cnktPmhlbHAgPSAkMjsKIH07CiAKQEAgLTQ4NCw3ICs1 MTQsMTAgQEAgZXhwcjoJICBzeW1ib2wJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfc3ltYm9sKCQxKTsg fQogCXwgZXhwciBUX0FORCBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAkMSwg JDMpOyB9CiA7CiAKLXN5bWJvbDoJICBUX1dPUkQJeyAkJCA9IHN5bV9sb29rdXAoJDEsIDApOyBm cmVlKCQxKTsgfQorLyogRm9yIHN5bWJvbCBkZWZpbml0aW9ucywgc2VsZWN0cywgZXRjLiwgd2hl cmUgcXVvdGVzIGFyZSBub3QgYWNjZXB0ZWQgKi8KK25vbmNvbnN0X3N5bWJvbDogVF9XT1JEIHsg JCQgPSBzeW1fbG9va3VwKCQxLCAwKTsgZnJlZSgkMSk7IH07CisKK3N5bWJvbDoJICBub25jb25z dF9zeW1ib2wKIAl8IFRfV09SRF9RVU9URQl7ICQkID0gc3ltX2xvb2t1cCgkMSwgU1lNQk9MX0NP TlNUKTsgZnJlZSgkMSk7IH0KIDsKIApAQCAtNDk1LDYgKzUyOCw3IEBAIHdvcmRfb3B0OiAvKiBl bXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9CiAKIHZvaWQgY29uZl9wYXJzZShjb25zdCBjaGFyICpu YW1lKQogeworCWNvbnN0IGNoYXIgKnRtcDsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJaW50IGk7 CiAKQEAgLTUwMiwyNSArNTM2LDI2IEBAIHZvaWQgY29uZl9wYXJzZShjb25zdCBjaGFyICpuYW1l KQogCiAJc3ltX2luaXQoKTsKIAlfbWVudV9pbml0KCk7Ci0Jcm9vdG1lbnUucHJvbXB0ID0gbWVu dV9hZGRfcHJvbXB0KFBfTUVOVSwgIkxpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uIiwgTlVMTCk7 CiAKIAlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIpKQotCQl6Y29uZmRlYnVnID0gMTsKLQl6Y29u ZnBhcnNlKCk7Ci0JaWYgKHpjb25mbmVycnMpCisJCXl5ZGVidWcgPSAxOworCXl5cGFyc2UoKTsK KwlpZiAoeXluZXJycykKIAkJZXhpdCgxKTsKIAlpZiAoIW1vZHVsZXNfc3ltKQogCQltb2R1bGVz X3N5bSA9IHN5bV9maW5kKCAibiIgKTsKIAorCXRtcCA9IHJvb3RtZW51LnByb21wdC0+dGV4dDsK IAlyb290bWVudS5wcm9tcHQtPnRleHQgPSBfKHJvb3RtZW51LnByb21wdC0+dGV4dCk7CiAJcm9v dG1lbnUucHJvbXB0LT50ZXh0ID0gc3ltX2V4cGFuZF9zdHJpbmdfdmFsdWUocm9vdG1lbnUucHJv bXB0LT50ZXh0KTsKKwlmcmVlKChjaGFyKil0bXApOwogCiAJbWVudV9maW5hbGl6ZSgmcm9vdG1l bnUpOwogCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKIAkJaWYgKHN5bV9jaGVja19kZXBzKHN5 bSkpCi0JCQl6Y29uZm5lcnJzKys7CisJCQl5eW5lcnJzKys7CiAJfQotCWlmICh6Y29uZm5lcnJz KQorCWlmICh5eW5lcnJzKQogCQlleGl0KDEpOwogCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOwog fQpAQCAtNTQ0LDE3ICs1NzksMTcgQEAgc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3Qg c3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2sKIHsKIAlpZiAo aWQtPnRva2VuICE9IGVuZHRva2VuKSB7CiAJCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkICclcycg d2l0aGluICVzIGJsb2NrIiwKLQkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZf dG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKLQkJemNvbmZuZXJycysrOworCQkJaWQtPm5hbWUsIHpj b25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJCXl5bmVycnMrKzsKIAkJcmV0dXJuIGZhbHNl OwogCX0KIAlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgewogCQl6Y29u Zl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLAotCQkJa2NvbmZfaWRf c3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQkJaWQt Pm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CiAJCWZwcmludGYoc3RkZXJyLCAi JXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4iLAogCQkJY3VycmVudF9tZW51LT5maWxlLT5u YW1lLCBjdXJyZW50X21lbnUtPmxpbmVubywKIAkJCXpjb25mX3Rva2VubmFtZShzdGFydHRva2Vu KSk7Ci0JCXpjb25mbmVycnMrKzsKKwkJeXluZXJycysrOwogCQlyZXR1cm4gZmFsc2U7CiAJfQog CXJldHVybiB0cnVlOwpAQCAtNTc1LDcgKzYxMCw3IEBAIHN0YXRpYyB2b2lkIHpjb25mX2Vycm9y KGNvbnN0IGNoYXIgKmVyciwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAKLQl6Y29uZm5lcnJzKys7 CisJeXluZXJycysrOwogCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUo KSwgemNvbmZfbGluZW5vKCkpOwogCXZhX3N0YXJ0KGFwLCBlcnIpOwogCXZmcHJpbnRmKHN0ZGVy ciwgZXJyLCBhcCk7CkBAIC01ODMsNyArNjE4LDcgQEAgc3RhdGljIHZvaWQgemNvbmZfZXJyb3Io Y29uc3QgY2hhciAqZXJyLCAuLi4pCiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQogCi1zdGF0 aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycikKK3N0YXRpYyB2b2lkIHl5ZXJyb3Io Y29uc3QgY2hhciAqZXJyKQogewogCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29u Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKIH0KQEAgLTYxNiw3ICs2NTEs NyBAQCBzdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVu dSkKIAkJZnByaW50ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsKIAlzd2l0Y2gg KHN5bS0+dHlwZSkgewogCWNhc2UgU19CT09MRUFOOgotCQlmcHV0cygiICBib29sZWFuXG4iLCBv dXQpOworCQlmcHV0cygiICBib29sXG4iLCBvdXQpOwogCQlicmVhazsKIAljYXNlIFNfVFJJU1RB VEU6CiAJCWZwdXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOwpAQCAtNjY0LDYgKzY5OSwxMSBAQCBz dGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKIAkJ CWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CiAJCQlmcHV0YygnXG4nLCBvdXQpOwogCQkJ YnJlYWs7CisJCWNhc2UgUF9JTVBMWToKKwkJCWZwdXRzKCAiICBpbXBseSAiLCBvdXQpOworCQkJ ZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQli cmVhazsKIAkJY2FzZSBQX1JBTkdFOgogCQkJZnB1dHMoICIgIHJhbmdlICIsIG91dCk7CiAJCQll eHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOwotLSAKMi4xNS4yIChBcHBsZSBHaXQtMTAxLjEp CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==