X-Original-To: alpine-aports@mail.alpinelinux.org Delivered-To: alpine-aports@mail.alpinelinux.org Received: from mail.alpinelinux.org (dallas-a1.alpinelinux.org [127.0.0.1]) by mail.alpinelinux.org (Postfix) with ESMTP id A029CDC0C8C for ; Thu, 24 Sep 2015 13:14:47 +0000 (UTC) Received: from relay1.infogroup.kiev.ua (tera.infogroup.kiev.ua [195.144.25.26]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.alpinelinux.org (Postfix) with ESMTPS id 0B0A2DC00AD for ; Thu, 24 Sep 2015 13:14:47 +0000 (UTC) Received: from aveo.com.ua ([195.144.25.27] helo=csync2host1) by relay1.infogroup.kiev.ua with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80.1) (envelope-from ) id 1Zf6MH-0000z5-9N; Thu, 24 Sep 2015 16:14:45 +0300 From: Valery Kartel To: alpine-aports@lists.alpinelinux.org Cc: Valery Kartel Subject: [alpine-aports] [PATCH] testing/csync2: upgrade to 2.0 Date: Thu, 24 Sep 2015 16:17:31 +0300 Message-Id: <1443100651-13963-1-git-send-email-valery.kartel@gmail.com> X-Mailer: git-send-email 2.5.3 X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Virus-Scanned: ClamAV using ClamSMTP LS0tDQogdGVzdGluZy9jc3luYzIvMDMtc3RybGNweV9kaXNhYmxlLnBhdGNoICAgICAgICAgfCAg IDIxIC0NCiB0ZXN0aW5nL2NzeW5jMi9BUEtCVUlMRCAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgOTQgKy0NCiB0ZXN0aW5nL2NzeW5jMi9jc3luYzItMS4zNC1saWJyc3luYy0xLjAuMC5wYXRj aCB8ICAgMzUgLQ0KIHRlc3RpbmcvY3N5bmMyL2NzeW5jMi5pbml0ZCAgICAgICAgICAgICAgICAg ICAgIHwgICAxMyArDQogdGVzdGluZy9jc3luYzIvY3N5bmMyLnBvc3QtaW5zdGFsbCAgICAgICAg ICAgICAgfCAgIDI0ICsNCiB0ZXN0aW5nL2NzeW5jMi9jc3luYzIucG9zdC11cGdyYWRlICAgICAg ICAgICAgICB8ICAgIDYgKw0KIHRlc3RpbmcvY3N5bmMyL2dpdC5wYXRjaCAgICAgICAgICAgICAg ICAgICAgICAgIHwgNjY0MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHRlc3RpbmcvY3N5bmMy L2xvbmdsb25nLWZvcm1hdC5wYXRjaCAgICAgICAgICAgIHwgICAzMSArDQogdGVzdGluZy9jc3lu YzIvcnN5bmMtc3RybGNweS1kaXNhYmxlLnBhdGNoICAgICAgfCAgIDIwICsNCiA5IGZpbGVzIGNo YW5nZWQsIDEzMiBpbnNlcnRpb25zKCspLCA2NzUyIGRlbGV0aW9ucygtKQ0KIGRlbGV0ZSBtb2Rl IDEwMDY0NCB0ZXN0aW5nL2NzeW5jMi8wMy1zdHJsY3B5X2Rpc2FibGUucGF0Y2gNCiBkZWxldGUg bW9kZSAxMDA2NDQgdGVzdGluZy9jc3luYzIvY3N5bmMyLTEuMzQtbGlicnN5bmMtMS4wLjAucGF0 Y2gNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdGluZy9jc3luYzIvY3N5bmMyLmluaXRkDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRlc3RpbmcvY3N5bmMyL2NzeW5jMi5wb3N0LWluc3RhbGwNCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdGluZy9jc3luYzIvY3N5bmMyLnBvc3QtdXBncmFkZQ0KIGRlbGV0 ZSBtb2RlIDEwMDY0NCB0ZXN0aW5nL2NzeW5jMi9naXQucGF0Y2gNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGVzdGluZy9jc3luYzIvbG9uZ2xvbmctZm9ybWF0LnBhdGNoDQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RpbmcvY3N5bmMyL3JzeW5jLXN0cmxjcHktZGlzYWJsZS5wYXRjaA0KDQpkaWZmIC0t Z2l0IGEvdGVzdGluZy9jc3luYzIvMDMtc3RybGNweV9kaXNhYmxlLnBhdGNoIGIvdGVzdGluZy9j c3luYzIvMDMtc3RybGNweV9kaXNhYmxlLnBhdGNoDQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IGYwZTlkNDUuLjAwMDAwMDANCi0tLSBhL3Rlc3RpbmcvY3N5bmMyLzAzLXN0cmxjcHlf ZGlzYWJsZS5wYXRjaA0KKysrIC9kZXYvbnVsbA0KQEAgLTEsMjEgKzAsMCBAQA0KLS0tLSBvbGQv cnN5bmMuYw0KLSsrKyBuZXcvcnN5bmMuYw0KLUBAIC00OSw2ICs0OSw5IEBADQotICAqDQotICAq IEByZXR1cm4gaW5kZXggb2YgdGhlIHRlcm1pbmF0aW5nIGJ5dGUuDQotICAqKi8NCi0rDQotKy8q IGRpc2FibGVkICoqDQotKw0KLSBzdGF0aWMgc2l6ZV90IHN0cmxjcHkoY2hhciAqZCwgY29uc3Qg Y2hhciAqcywgc2l6ZV90IGJ1ZnNpemUpDQotIHsNCi0gICAgICAgICBzaXplX3QgbGVuID0gc3Ry bGVuKHMpOw0KLUBAIC02MSw3ICs2NCw3IEBADQotICAgICAgICAgfQ0KLSAgICAgICAgIHJldHVy biByZXQ7DQotIH0NCi0tDQotKyovDQotIA0KLSAvKiBUaGlzIGhhcyBiZWVuIHRha2VuIGZyb20g cnN5bmMgc291cmNlczogcmVjZWl2ZXIuYyAqLw0KLSANCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Nz eW5jMi9BUEtCVUlMRCBiL3Rlc3RpbmcvY3N5bmMyL0FQS0JVSUxEDQppbmRleCBmMjZkYTU1Li41 YjMyYmFkIDEwMDY0NA0KLS0tIGEvdGVzdGluZy9jc3luYzIvQVBLQlVJTEQNCisrKyBiL3Rlc3Rp bmcvY3N5bmMyL0FQS0JVSUxEDQpAQCAtMSw4MyArMSw2NSBAQA0KLSMgTWFpbnRhaW5lcjogTmF0 YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPg0KIHBrZ25hbWU9Y3N5bmMyDQotcGtn dmVyPTEuMzRfZ2l0MjAxMTEyMDENCi1fdmVyPSR7cGtndmVyJV9naXQqfQ0KLXBrZ3JlbD0yDQor cGtndmVyPTIuMA0KK3BrZ3JlbD0wDQogcGtnZGVzYz0iQ2x1c3RlciBzeW5jaHJvbml6YXRpb24g dG9vbCINCiB1cmw9Imh0dHA6Ly9vc3MubGluYml0LmNvbS9jc3luYzIvIg0KIGFyY2g9ImFsbCIN CiBsaWNlbnNlPSJHUEwtMisiDQotZGVwZW5kcz0NCi1tYWtlZGVwZW5kcz0ibGlicnN5bmMtZGV2 IGdudXRscy1kZXYgc3FsaXRlLWRldiBhdXRvY29uZiBhdXRvbWFrZSBiaXNvbiBmbGV4Ig0KLWlu c3RhbGw9DQotc3VicGFja2FnZXM9IiRwa2duYW1lLWRvYyINCi1zb3VyY2U9Imh0dHA6Ly9vc3Mu bGluYml0LmNvbS9jc3luYzIvY3N5bmMyLSR7X3Zlcn0udGFyLmd6DQotCWdpdC5wYXRjaA0KLQkw My1zdHJsY3B5X2Rpc2FibGUucGF0Y2gNCi0JY3N5bmMyLTEuMzQtbGlicnN5bmMtMS4wLjAucGF0 Y2gNCi0JIg0KLSMJMDEtY3N5bmMyLXNxbGl0ZTMucGF0Y2gNCi0jCTAyLWNzeW5jMi0xLjM0LWdu dXRsc19wa2djb25maWcucGF0Y2gNCittYWtlZGVwZW5kcz0ibGlicnN5bmMtZGV2IGdudXRscy1k ZXYgc3FsaXRlLWRldiBteXNxbC1kZXYgcG9zdGdyZXNxbC1kZXYiDQorc3VicGFja2FnZXM9IiRw a2duYW1lLWNvbXBhcmUgJHBrZ25hbWUtZG9jIg0KK3NvdXJjZT0iaHR0cDovL29zcy5saW5iaXQu Y29tLyRwa2duYW1lLyRwa2duYW1lLSRwa2d2ZXIudGFyLmd6DQorCWxvbmdsb25nLWZvcm1hdC5w YXRjaA0KKwlyc3luYy1zdHJsY3B5LWRpc2FibGUucGF0Y2gNCisJJHBrZ25hbWUuaW5pdGQiDQor aW5zdGFsbD0iJHBrZ25hbWUucG9zdC1pbnN0YWxsICRwa2duYW1lLnBvc3QtdXBncmFkZSINCiAN Ci1fYnVpbGRkaXI9IiRzcmNkaXIiLyRwa2duYW1lLSRfdmVyDQotX2dpdHVybD0iaHR0cDovL2dp dC5saW5iaXQuY29tL2NzeW5jMi5naXQiDQorX2J1aWxkZGlyPSIkc3JjZGlyIi8kcGtnbmFtZS0k cGtndmVyDQogDQotDQotc25hcHNob3QoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgbG9jYWwgX3BrZz0k cGtnbmFtZS0kcGtndmVyLnRhci5neiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg DQotICAgICAgICBta2RpciAtcCAiJHNyY2RpciIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgY2QgIiRzcmNkaXIiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgIG1z ZyAiQ3JlYXRpbmcgc25hcHNob3Q6ICRfcGtnIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgDQotIAlybSAtcmYgJHtfZ2l0dXJsIyMqL30gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIA0KLQlnaXQgY2xvbmUgLS1iYXJlICRfZ2l0dXJsIHx8 IHJldHVybiAxICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICBnaXQgLS1naXQtZGlyICR7 X2dpdHVybCMjKi99IGFyY2hpdmUgLW8gJF9wa2cgXA0KLSAgICAgICAgICAgICAtLXByZWZpeD0k cGtnbmFtZS0kcGtndmVyLyBIRUFEIFwNCi0gICAgICAgICAgICB8fCByZXR1cm4gMSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAJDQotICAgICAgICBtc2cgIk5ldyBzbmFw c2hvdDogJF9wa2ciDQotICAgICAgICBpZiBbIC1uICIkX3VwbG9hZCIgXTsgdGhlbiAgICAgICAg ICAgICAgICAgICAgDQotICAgICAgICAgICAgIG1zZyAiVXBsb2FkaW5nIHRvICRfdXBsb2FkIiAg ICAgICAgICAgDQotICAgICAgICAgICAgIHNjcCAkX3BrZyAkX3VwbG9hZCB8fCByZXR1cm4gMSAg ICAgDQotICAgICAgICAgICAgIGFidW1wICRwa2duYW1lLSRfdGFnICAgICAgICAgIA0KLSAgICAg ICAgZmkgICANCi0gICAgICAgICNhYnVpbGQgY2hlY2tzdW0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIA0KLX0NCi0NCi1wcmVwYXJlKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA0KK3ByZXBhcmUoKSB7DQogCWNkICIkX2J1aWxkZGlyIg0KIAlm b3IgaSBpbiAkc291cmNlOyBkbw0KIAkJY2FzZSAkaSBpbg0KIAkJKi5wYXRjaCkgbXNnICRpOyBw YXRjaCAtcDEgLWkgIiRzcmNkaXIiLyRpIHx8IHJldHVybiAxOzsNCiAJCWVzYWMNCiAJZG9uZQ0K LQlhdXRvcmVjb25mIC0taW5zdGFsbCAtLWZvcmNlIA0KIH0NCi0gICAgDQorDQogYnVpbGQoKSB7 DQogCWNkICIkX2J1aWxkZGlyIg0KIAkuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyIFwNCi0JCS0t c3lzY29uZmRpcj0vZXRjIFwNCisJCS0tc3lzY29uZmRpcj0vZXRjLyRwa2duYW1lIFwNCiAJCS0t bG9jYWxzdGF0ZWRpcj0vdmFyIFwNCisJCS0tZG9jZGlyPS91c3Ivc2hhcmUvZG9jLyRwa2duYW1l IFwNCiAJCS0tbWFuZGlyPS91c3Ivc2hhcmUvbWFuIFwNCi0JCS0taW5mb2Rpcj0vdXNyL3NoYXJl L2luZm8gXA0KKwkJLS1lbmFibGUtcG9zdGdyZXMgXA0KKwkJLS1lbmFibGUtbXlzcWwgXA0KIAkJ fHwgcmV0dXJuIDENCiAJbWFrZSB8fCByZXR1cm4gMQ0KIH0NCiANCiBwYWNrYWdlKCkgew0KIAlj ZCAiJF9idWlsZGRpciINCi0JbWFrZSBERVNURElSPSIkcGtnZGlyIiBpbnN0YWxsDQorCW1ha2Ug REVTVERJUj0iJHBrZ2RpciIgaW5zdGFsbCB8fCByZXR1cm4gMQ0KKwlpbnN0YWxsIC1tNzU1IC1E ICIkc3JjZGlyIi8kcGtnbmFtZS5pbml0ZCAiJHBrZ2RpciIvZXRjL2luaXQuZC8kcGtnbmFtZQ0K KwljcCBkb2MvKiAiJHBrZ2RpciIvdXNyL3NoYXJlL2RvYy8kcGtnbmFtZS8NCiB9DQogDQotbWQ1 c3Vtcz0iZWZjOGEzNTQ4OTk2Yjc5Y2VmMmFkNzZhZjVlOTNjZDggIGNzeW5jMi0xLjM0LnRhci5n eg0KLWJkNDk1N2QyNWU5ODQ1MThkOTI5YWU0MDM2YmYwYWU5ICBnaXQucGF0Y2gNCi1lNmQ4YWFm ZjcwY2Y4NDdiMTE4NzNjZDFjZmFhYThmNiAgMDMtc3RybGNweV9kaXNhYmxlLnBhdGNoDQotOTQz MjI3YTRjYTRiZGQ1ZWMzN2EzMTVkYmExODQ0ZDMgIGNzeW5jMi0xLjM0LWxpYnJzeW5jLTEuMC4w LnBhdGNoIg0KLXNoYTI1NnN1bXM9IjMyYjI1MGRkNGEwMzUzZjcxMDE1YzVjMzk2MTE3NGI5NzVk ZDVlNzk5ZTRhMDg0ZThmNmQwMDc5MmJkOGM4MzMgIGNzeW5jMi0xLjM0LnRhci5neg0KLTcxNzRm ZjBjYjQ2NGI4Zjc0YzM4MTZiZmUzYzVhODllOWI4NzZiNTBkY2Q2YTc0NDBiNzQ4OGUzNTYxNjY4 ZDcgIGdpdC5wYXRjaA0KLWY0YTQ0Y2EzZjNhMzNhNDEzYTk2Y2U4MzdkNTU2OWMzZDgwMmJjZTRh NmE5NjA1OTNiMDE0ZDhkY2JmYmMxMzYgIDAzLXN0cmxjcHlfZGlzYWJsZS5wYXRjaA0KLTMyMGFj OTc0ZDZiYmViZGRlYTViYzA4YjkyYzk0NDE4OTczMzc0MmUyZGI4YzM1ODBlMTkzY2E5YTJiOTM0 ZWUgIGNzeW5jMi0xLjM0LWxpYnJzeW5jLTEuMC4wLnBhdGNoIg0KLXNoYTUxMnN1bXM9ImEyNDE1 NDQ0Njc0MGYzMzYyYzEwYTIzZDUyNmMyOWU5NjI5MmYyYWQ1NmE5ZWQyZjExY2EwYTZkN2FmZWQz NzMwZDBlOTZmOGViYzJjNmNkY2MxNzAzMWFhMGUzNjhmNmJhOTMwODRhZDNjZjVmNDgyOGZiYzI3 OWU2ZjAwNGQ4ICBjc3luYzItMS4zNC50YXIuZ3oNCi1mZjQ3YjMwZTg2ZjYyNjZiNGJlODVhNDdk YjUyNDA5MTY5NTk3ZDk3ZTRlYzA4NjY1M2FmMzM0MTk3OGNjZTVlNDc3MDU0ZTU3NDZmMzgyNGFl ZDFkOGM3OTQ5ZTVmODQ1MWIyYmQ2NzU0NDJhOWEyYzljNWM1MTk5MTg0MzhhOSAgZ2l0LnBhdGNo DQotMWI4MmIyNWFjZmI5ODhjZDhmOTIxMTdmNmVhNGJjMjIyNDc2NDg0NDg3NTFhZGMwOTU4ZGFl MGFkZTNjMWViMDY1YWQxNWY3MTA0ZTQ4NjBlYTJmMDhhOTFhMzY4ZDY4ZTM5NTllZjVkZmEyNzhj MjU0ODU3MzgyZWJiNjQ2MjUgIDAzLXN0cmxjcHlfZGlzYWJsZS5wYXRjaA0KLWY0NGUxZGYzNWFl ZmZmMjkwMGE1OTgzZmQxZTM2ODg2NDM5Njc1N2UxZmNmZDZlM2Y1ZDM5YTU1YzFiYWQ2ZTQyZThi Y2E1ZjBlMTZhYTY0MWRmZjNiNjJhMjdkN2Q1NDEzZGM5MDdiY2QxOWI5ZDRkZTA2OGZkN2JlNzIx NGIwICBjc3luYzItMS4zNC1saWJyc3luYy0xLjAuMC5wYXRjaCINCitjb21wYXJlKCkgew0KKwlz dWJwa2dkZXNjPSJjc3luYzIgY29tcGFyZSBzY3JpcHQiDQorCWFyY2g9Im5vYXJjaCINCisJZGVw ZW50cz0iYmFzaCBwZXJsLWRpZ2VzdC1tZDUiDQorCW1rZGlyIC1wICIkc3VicGtnZGlyIi91c3Iv c2Jpbg0KKwltdiAiJHBrZ2RpciIvdXNyL3NiaW4vJHBrZ25hbWUtY29tcGFyZSAiJHN1YnBrZ2Rp ciIvdXNyL3NiaW4vDQorfQ0KK21kNXN1bXM9IjQwNjlmYzllODZlODUwOGMzOTJmZTI4NjIwNTll YjkxICBjc3luYzItMi4wLnRhci5neg0KKzhmYzczMjU0ZGIyOTMxNmY5MTI1NzYxZDE4ZjFlZDQ2 ICBsb25nbG9uZy1mb3JtYXQucGF0Y2gNCis1OTA4YzQxMDZkNDg2NmFiMWMxZjg4ZjRjOTQ4MmM5 ZiAgcnN5bmMtc3RybGNweS1kaXNhYmxlLnBhdGNoDQorMDVkZjhmMmI4NzdlN2Q4Y2E4MzhkZjll NzFiZjJjNjUgIGNzeW5jMi5pbml0ZCINCitzaGEyNTZzdW1zPSIxMWNiMzczODBmYjE4NWJjZTBj MjJiODA0ZmVjOWIwMWMzODVkOWQ4M2NjNTI4Y2ZkNDhkNzQ4NDUzODM0ZmEyICBjc3luYzItMi4w LnRhci5neg0KK2FmYjEzMTc5ODdjYzRiODE5MDhiYzQzNzI2OTE2MmM3YWYyM2IzNGU2ODQyMzA2 NDgzZGE1YjUzZWZjZTJkYjMgIGxvbmdsb25nLWZvcm1hdC5wYXRjaA0KKzMzOWM3ZjVkOTFmZjdl ZDNlNjNkZTVhNWUzOWNmMTdlZmQ3NTMzZjljNDYwZWI4MWRiNzYwMDNhY2IxNjQwMTcgIHJzeW5j LXN0cmxjcHktZGlzYWJsZS5wYXRjaA0KKzc3ZjZiYWY2ODhmZGI2OTM4ODQ2ZTlmNmUwZTk0NWQ0 MDg1ZDJmMDAwMjY2MWZmMzM1ZTVjOGFjMzlmMDA2OWEgIGNzeW5jMi5pbml0ZCINCitzaGE1MTJz dW1zPSJmOTFmZDIyMmY2N2FmZmU5NjM0NDcxZDM0MWI0M2ZmNjc4NTRhNmVkMjViNjIwMzAxYTQ1 NGU5OGE3OWE5ZmI4MGIyYTY2ZWI4NzEzNTQ2NzU4ZmQwODMwMGQ1Mjc1MWU1Y2E3NDcyYzY5NmRh YTIwZWUxMTc3OWI4N2E4MzBmOCAgY3N5bmMyLTIuMC50YXIuZ3oNCiszOGExN2NiZjIzY2JjY2Q0 OTk2YWQxYWYwNDk4NTFlMzMxNzk1ODZlNjE5ZTNmM2VkYmZhY2JhYTM2NjYyZTQ0ZDkxNjgzOWFj ZDU5YjFjZmM2N2IzYWY5MDQyYzMyNTgwNjhlYzllNWI1N2Y3ZTI2YzAwYTQxYTBlNmYwZTE0OCAg bG9uZ2xvbmctZm9ybWF0LnBhdGNoDQorYzQ0YWQ3ZTdmYjcwOTNmNjZmZDk1ODJiNTMwOWUzOTI5 ZGZkZjdiNzZlZjRkMjM0ZDM0NmZhMjUxNThmMDg4Yjk0MzZkYjlhMTk4OWQwMzZkNzM5NTcwNDU5 ODY3MjEwZDA1M2FmNjIxMjVmYWNiNjZlNGY1MjAyNDQ4YzdiZWEgIHJzeW5jLXN0cmxjcHktZGlz YWJsZS5wYXRjaA0KKzk2ZTVmYjFhODg2NTk4MWEwMTRmMzY4YjNhNjQ0NjU5ZDA0ODE4MzUzNGE3 MjMzMjcxOGFhODE1ZmRmMjgxODBlNzU4MDA1ZThhZTdjNDM4YmI4YjM2MTM0NzE5YzI1OTdkZDQ0 ZmMwOWM4NWJhMTNlMTUwZjZkMzk2ZDZiMjViICBjc3luYzIuaW5pdGQiDQpkaWZmIC0tZ2l0IGEv dGVzdGluZy9jc3luYzIvY3N5bmMyLTEuMzQtbGlicnN5bmMtMS4wLjAucGF0Y2ggYi90ZXN0aW5n L2NzeW5jMi9jc3luYzItMS4zNC1saWJyc3luYy0xLjAuMC5wYXRjaA0KZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCBkNDY2NTNkLi4wMDAwMDAwDQotLS0gYS90ZXN0aW5nL2NzeW5jMi9j c3luYzItMS4zNC1saWJyc3luYy0xLjAuMC5wYXRjaA0KKysrIC9kZXYvbnVsbA0KQEAgLTEsMzUg KzAsMCBAQA0KLVBhdGNoIGJ5IFJvYmVydCBTY2hlY2sgPHJvYmVydEBmZWRvcmFwcm9qZWN0Lm9y Zz4gZm9yIGNzeW5jMiA8PSAxLjM0IGJhc2VkIG9uIHRoZQ0KLXBhdGNoIGJ5IFJvbWFuIFRlcmVz aG9ua292IGFuZCBLYXJpIEhhdXRpbyB0byBhdm9pZCBhIGJ1aWxkIGZhaWx1cmUgd2l0aCBsaWJy c3luYw0KLT49IDEuMC4wICh3aGljaCBpcyBhIHNlY3VyaXR5IGJ1Z2ZpeCByZWxlYXNlKS4gVGhl IGRpc2N1c3Npb24gYW5kIHNvbHV0aW9uIGZpbmRpbmcNCi1jYW4gYmUgZm91bmQgYXQgaHR0cHM6 Ly9idWdzLmxhdW5jaHBhZC5uZXQvZHVwbGljaXR5LytidWcvMTQxNjM0NCAoZm9yIGR1cGxpY2l0 eSkuDQotDQotLS0tIGNzeW5jMi0xLjM0L3JzeW5jLmMJCQkJMjAwNy0wNy0yNCAyMzowNDoxOC4w MDAwMDAwMDAgKzAyMDANCi0rKysgY3N5bmMyLTEuMzQvcnN5bmMuYy5saWJyc3luYy0xLjAuMAkJ MjAxNS0wMy0wMiAwMDoxODo0My4wMDAwMDAwMDAgKzAxMDANCi1AQCAtMTM0LDggKzEzNCwxMyBA QA0KLSANCi0gCWlmICggaXNyZWcgKSB7DQotIAkJY3N5bmNfZGVidWcoMywgIlJ1bm5pbmcgcnNf c2lnX2ZpbGUoKSBmcm9tIGxpYnJzeW5jLi4uLlxuIik7DQotKyNpZmRlZiBSU19ERUZBVUxUX1NU Uk9OR19MRU4NCi0gCQlyZXN1bHQgPSByc19zaWdfZmlsZShiYXNpc19maWxlLCBzaWdfZmlsZSwN Ci0gCQkJCVJTX0RFRkFVTFRfQkxPQ0tfTEVOLCBSU19ERUZBVUxUX1NUUk9OR19MRU4sICZzdGF0 cyk7DQotKyNlbHNlIC8qIGxpYnJzeW5jID49IDEuMC4wICovDQotKwkJcmVzdWx0ID0gcnNfc2ln X2ZpbGUoYmFzaXNfZmlsZSwgc2lnX2ZpbGUsDQotKwkJCQlSU19ERUZBVUxUX0JMT0NLX0xFTiwg OCwgUlNfTUQ0X1NJR19NQUdJQywgJnN0YXRzKTsNCi0rI2VuZGlmDQotIAkJaWYgKHJlc3VsdCAh PSBSU19ET05FKSB7DQotIAkJCWNzeW5jX2RlYnVnKDAsICJJbnRlcm5hbCBlcnJvciBmcm9tIHJz eW5jIGxpYnJhcnkhXG4iKTsNCi0gCQkJZ290byBlcnJvcjsNCi1AQCAtMjE2LDggKzIyMSwxMyBA QA0KLSAJaWYgKCAhYmFzaXNfZmlsZSApIGJhc2lzX2ZpbGUgPSBmb3BlbigiL2Rldi9udWxsIiwg InJiIik7DQotIA0KLSAJY3N5bmNfZGVidWcoMywgIlJ1bm5pbmcgcnNfc2lnX2ZpbGUoKSBmcm9t IGxpYnJzeW5jLi5cbiIpOw0KLSsjaWZkZWYgUlNfREVGQVVMVF9TVFJPTkdfTEVODQotIAlyZXN1 bHQgPSByc19zaWdfZmlsZShiYXNpc19maWxlLCBzaWdfZmlsZSwNCi0gCQkJUlNfREVGQVVMVF9C TE9DS19MRU4sIFJTX0RFRkFVTFRfU1RST05HX0xFTiwgJnN0YXRzKTsNCi0rI2Vsc2UgLyogbGli cnN5bmMgPj0gMS4wLjAgKi8NCi0rCXJlc3VsdCA9IHJzX3NpZ19maWxlKGJhc2lzX2ZpbGUsIHNp Z19maWxlLA0KLSsJCQlSU19ERUZBVUxUX0JMT0NLX0xFTiwgOCwgUlNfTUQ0X1NJR19NQUdJQywg JnN0YXRzKTsNCi0rI2VuZGlmDQotIAlpZiAocmVzdWx0ICE9IFJTX0RPTkUpDQotIAkJY3N5bmNf ZmF0YWwoIkdvdCBhbiBlcnJvciBmcm9tIGxpYnJzeW5jLCB0b28gYmFkIVxuIik7DQotIA0KZGlm ZiAtLWdpdCBhL3Rlc3RpbmcvY3N5bmMyL2NzeW5jMi5pbml0ZCBiL3Rlc3RpbmcvY3N5bmMyL2Nz eW5jMi5pbml0ZA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjBjYWEzMzkN Ci0tLSAvZGV2L251bGwNCisrKyBiL3Rlc3RpbmcvY3N5bmMyL2NzeW5jMi5pbml0ZA0KQEAgLTAs MCArMSwxMyBAQA0KKyMhL3NiaW4vb3BlbnJjLXJ1bg0KKw0KK25hbWU9IiRTVkNOQU1FIg0KK3Bp ZGZpbGU9Ii92YXIvcnVuLyRTVkNOQU1FLnBpZCINCitjb21tYW5kPSIvdXNyL3NiaW4vJFNWQ05B TUUiDQorY29tbWFuZF9hcmdzPSItaWkiDQorY29tbWFuZF9iYWNrZ3JvdW5kPSJ5ZXMiDQorcmVx dWlyZWRfZmlsZXM9Ii9ldGMvY3N5bmMyL2NzeW5jMi5jZmcgL2V0Yy9jc3luYzIvY3N5bmMyX3Nz bF9rZXkucGVtIC9ldGMvY3N5bmMyL2NzeW5jMl9zc2xfY2VydC5wZW0iDQorDQorZGVwZW5kKCkg ew0KKyAgICBuZWVkIG5ldCBsb2NhbG1vdW50DQorICAgIGFmdGVyIGZpcmV3YWxsDQorfQ0KZGlm ZiAtLWdpdCBhL3Rlc3RpbmcvY3N5bmMyL2NzeW5jMi5wb3N0LWluc3RhbGwgYi90ZXN0aW5nL2Nz eW5jMi9jc3luYzIucG9zdC1pbnN0YWxsDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMC4uM2MyZWNjMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvdGVzdGluZy9jc3luYzIvY3N5bmMy LnBvc3QtaW5zdGFsbA0KQEAgLTAsMCArMSwyNCBAQA0KKyMhL2Jpbi9zaA0KKw0KK1NTTD0iL2V0 Yy9jc3luYzIvY3N5bmMyX3NzbF8iDQorU0VSVj0iL2V0Yy9zZXJ2aWNlcyINCitJTkVURD0iL2V0 Yy9pbmV0ZC5jb25mIg0KKw0KK2lmIFsgISAtZiAke1NTTH1rZXkucGVtIC1vICEgLWYgJHtTU0x9 Y2VydC5wZW0gXTsgdGhlbg0KKwlvcGVuc3NsIGdlbnJzYSAtb3V0ICR7U1NMfWtleS5wZW0gMTAy NCAmPiAvZGV2L251bGwNCisJeWVzICcnIHwgb3BlbnNzbCByZXEgLW5ldyAta2V5ICR7U1NMfWtl eS5wZW0gLW91dCAke1NTTH1jZXJ0LmNzciAmPiAvZGV2L251bGwNCisJb3BlbnNzbCB4NTA5IC1y ZXEgLWRheXMgMzYwMCAtaW4gJHtTU0x9Y2VydC5jc3IgLW91dCAke1NTTH1jZXJ0LnBlbSAtc2ln bmtleSAke1NTTH1rZXkucGVtICY+IC9kZXYvbnVsbA0KKwlybSAke1NTTH1jZXJ0LmNzcg0KK2Zp DQorDQoraWYgWyAhIC1mICR7U0VSVn0gXTsgdGhlbg0KKwl0b3VjaCAke1NFUlZ9DQorZmkNCitn cmVwIC1xIGNzeW5jMiAke1NFUlZ9IHx8IGVjaG8gLWUgImNzeW5jMlx0XHQzMDg2NS90Y3AiID4+ ICR7U0VSVn0NCisNCitpZiBbICEgLWYgJHtJTkVURH0gXTsgdGhlbg0KKwl0b3VjaCAke0lORVRE fQ0KK2ZpDQorZ3JlcCAtcSBjc3luYzIgJHtJTkVURH0gfHwgZWNobyAiY3N5bmMyIHN0cmVhbSB0 Y3Agbm93YWl0IHJvb3QgL3Vzci9zYmluL2NzeW5jMiBjc3luYzIgLWkiID4+ICR7SU5FVER9DQor DQorZXhpdCAwDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jc3luYzIvY3N5bmMyLnBvc3QtdXBncmFk ZSBiL3Rlc3RpbmcvY3N5bmMyL2NzeW5jMi5wb3N0LXVwZ3JhZGUNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwLi4yNmY4ZTQ1DQotLS0gL2Rldi9udWxsDQorKysgYi90ZXN0aW5n L2NzeW5jMi9jc3luYzIucG9zdC11cGdyYWRlDQpAQCAtMCwwICsxLDYgQEANCisjIS9iaW4vc2gN CisNCittdiAvZXRjL2NzeW5jMi5jZmcgL2V0Yy9jc3luYzIvICY+IC9kZXYvbnVsbA0KK212IC9l dGMvY3N5bmMyX3NzbF8qLnBlbSAvZXRjL2NzeW5jMi8gJj4gL2Rldi9udWxsDQorDQorZXhpdCAw DQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jc3luYzIvZ2l0LnBhdGNoIGIvdGVzdGluZy9jc3luYzIv Z2l0LnBhdGNoDQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDVkOWI3MDkuLjAwMDAw MDANCi0tLSBhL3Rlc3RpbmcvY3N5bmMyL2dpdC5wYXRjaA0KKysrIC9kZXYvbnVsbA0KQEAgLTEs NjY0MCArMCwwIEBADQotZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTDQotaW5kZXggNzRm YWEwNS4uNDVlZDBkNyAxMDA2NDQNCi0tLS0gYS9BVVRIT1JTDQotKysrIGIvQVVUSE9SUw0KLUBA IC0xICsxLDggQEANCi0rTElOQklUIEluZm9ybWF0aW9uIFRlY2hub2xvZ2llcyBHbWJIIDxodHRw Oi8vd3d3LmxpbmJpdC5jb20+DQotIENsaWZmb3JkIFdvbGYgPGNsaWZmb3JkQGNsaWZmb3JkLmF0 Pg0KLSsNCi0rV2l0aCBjb250cmlidXRpb25zIGZyb206DQotKw0KLStMYXJzIEVsbGVuYmVyZyA8 bGFycy5lbGxlbmJlcmdAbGluYml0LmF0Pg0KLStKb2hhbm5lcyBUaG9tYSA8am9oYW5uZXMudGhv bWFAZ214LmF0Pg0KLStEZW5uaXMgU2NoYWZyb3RoIDxkZW5uaXNAc2NoYWZyb3RoLmRrPg0KLWRp ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cNCi1pbmRleCA1MmZhMmEyLi45ZDlmNzkx IDEwMDY0NA0KLS0tLSBhL0NoYW5nZUxvZw0KLSsrKyBiL0NoYW5nZUxvZw0KLUBAIC0xLDIgKzEs MiBAQA0KLSBQbGVhc2UgZmV0Y2ggdGhlIENoYW5nZUxvZyBkaXJlY3RseSBmcm9tIHRoZSBzdWJ2 ZXJzaW9uIHJlcG9zaXRvcnk6DQotLXN2biBsb2cgLXYgaHR0cDovL3N2bi5jbGlmZm9yZC5hdC9j c3luYzIvDQotK3N2biBsb2cgLXYgaHR0cDovL3N2bi5saW5iaXQuY29tL2NzeW5jMi8NCi1kaWZm IC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQ0KLWluZGV4IGUzZWM5MzMuLmFkYmY2 OGQgMTAwNjQ0DQotLS0tIGEvTWFrZWZpbGUuYW0NCi0rKysgYi9NYWtlZmlsZS5hbQ0KLUBAIC0y MywxNiArMjMsMjcgQEAgbWFuX01BTlMgPSBjc3luYzIuMQ0KLSANCi0gY3N5bmMyX1NPVVJDRVMg PSBhY3Rpb24uYyBjZmdmaWxlX3BhcnNlci55IGNmZ2ZpbGVfc2Nhbm5lci5sIGNoZWNrLmMJXA0K LSAgICAgICAgICAgICAgICAgIGNoZWNrdHh0LmMgY3N5bmMyLmMgZGFlbW9uLmMgZGIuYyBlcnJv ci5jIGdldHJlYWxmbi5jCVwNCi0tICAgICAgICAgICAgICAgICBncm91cHMuYyByc3luYy5jIHVw ZGF0ZS5jIHVybGVuY29kZS5jIGNvbm4uYyBwcmVmaXhzdWJzdC5jDQotKyAgICAgICAgICAgICAg ICAgZ3JvdXBzLmMgcnN5bmMuYyB1cGRhdGUuYyB1cmxlbmNvZGUuYyBjb25uLmMgcHJlZml4c3Vi c3QuYyBcDQotKwkJIGRiX2FwaS5jIGRiX3NxbGl0ZS5jIGRiX3NxbGl0ZTIuYyBkYl9teXNxbC5j IGRiX3Bvc3RncmVzLmMgXA0KLSsJCSBjc3luYzIuaCBkYl9hcGkuaCBkYl9teXNxbC5oIGRiX3Bv c3RncmVzLmggZGJfc3FsaXRlLmggZGJfc3FsaXRlMi5oIGRsLmggXA0KLSsJCSBjc3luYzItY29t cGFyZSBcDQotKwkJIGNzeW5jMi4xDQotKw0KLStFWFRSQV9ESVNUID0gY3N5bmMyLmNmZyBjc3lu YzIueGluZXRkDQotIA0KLSBBTV9ZRkxBR1MgPSAtZA0KLSBCVUlMVF9TT1VSQ0VTID0gY2ZnZmls ZV9wYXJzZXIuaA0KLStMSUJTICs9IC1sZGwNCi0gQ0xFQU5GSUxFUyA9IGNmZ2ZpbGVfcGFyc2Vy LmMgY2ZnZmlsZV9wYXJzZXIuaCBjZmdmaWxlX3NjYW5uZXIuYwlcDQotLSAgICAgICAgICAgICBw cml2YXRlX2xpYnJzeW5jIHByaXZhdGVfbGlic3FsaXRlIGNvbmZpZy5sb2cJCVwNCi0tICAgICAg ICAgICAgIGNvbmZpZy5zdGF0dXMgY29uZmlnLmggLmRlcHMvKi5QbyBzdGFtcC1oMSBNYWtlZmls ZQ0KLSsgICAgICAgICAgICAgcHJpdmF0ZV9saWJyc3luYyBwcml2YXRlX2xpYnNxbGl0ZSBjb25m aWcubG9nCQkNCi0rDQotK0RJU1RDTEVBTkZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuaCAu ZGVwcy8qLlBvIHN0YW1wLWgxIE1ha2VmaWxlIE1ha2VmaWxlLmluIGNvbmZpZ3VyZQ0KLSsNCi0r ZGlzdC1jbGVhbi1sb2NhbDoNCi0rCXJtIC1yZiBhdXRvbTR0ZS5jYWNoZQ0KLSANCi0tQU1fQ0ZM QUdTPQ0KLS1BTV9MREZMQUdTPQ0KLStBTV9DRkxBR1M9JChMSUJHTlVUTFNfQ0ZMQUdTKQ0KLStB TV9MREZMQUdTPSQoTElCR05VVExTX0xJQlMpDQotIA0KLSBpZiBQUklWQVRFX0xJQlJTWU5DDQot ICAgQlVJTFRfU09VUkNFUyArPSBwcml2YXRlX2xpYnJzeW5jDQotQEAgLTQxLDEzICs1Miw2IEBA IGlmIFBSSVZBVEVfTElCUlNZTkMNCi0gICBMSUJTICs9IC1scHJpdmF0ZXJzeW5jDQotIGVuZGlm DQotIA0KLS1pZiBQUklWQVRFX0xJQlNRTElURQ0KLS0gIEJVSUxUX1NPVVJDRVMgKz0gcHJpdmF0 ZV9saWJzcWxpdGUNCi0tICBBTV9DRkxBR1MgKz0gLUkkKHNoZWxsIHRlc3QgLWYgbGlic3FsaXRl LmRpciAmJiBjYXQgbGlic3FsaXRlLmRpciB8fCBlY2hvID09bGlic3FsaXRlPT0pDQotLSAgQU1f TERGTEFHUyArPSAtTCQoc2hlbGwgdGVzdCAtZiBsaWJzcWxpdGUuZGlyICYmIGNhdCBsaWJzcWxp dGUuZGlyIHx8IGVjaG8gPT1saWJzcWxpdGU9PSkNCi0tICBMSUJTICs9IC1scHJpdmF0ZXNxbGl0 ZQ0KLS1lbmRpZg0KLS0NCi0gQU1fQ1BQRkxBR1MgID0gLUQnREJESVI9IiQobG9jYWxzdGF0ZWRp cikvbGliL2NzeW5jMiInDQotIEFNX0NQUEZMQUdTICs9IC1EJ0VUQ0RJUj0iJChzeXNjb25mZGly KSInDQotIA0KLWRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUNCi1pbmRleCBlZDZlYjZiLi43 ZGJiYWUxIDEwMDY0NA0KLS0tLSBhL1JFQURNRQ0KLSsrKyBiL1JFQURNRQ0KLUBAIC0xMiw3ICsx Miw3IEBAIGJldHRlciBoYXZlIGEgbG9vayBhdCBVbmlzb24gKGh0dHA6Ly93d3cuY2lzLnVwZW5u LmVkdS9+YmNwaWVyY2UvdW5pc29uLykNCi0gdG9vLg0KLSANCi0gU2VlIGh0dHA6Ly9vc3MubGlu Yml0LmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3N5bmMyLiBUaGUgY3N5bmMyDQotLXN1 YnZlcnNpb24gdHJlZSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3N2bi5jbGlmZm9yZC5hdC9jc3lu YzIvLg0KLStzdWJ2ZXJzaW9uIHRyZWUgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9zdm4ubGluYml0 LmNvbS9jc3luYzIvLg0KLSANCi0gDQotIENvcHlyaWdodA0KLUBAIC03NiwzICs3NiwyNSBAQCBU aGVyZSBpcyBhIGNzeW5jMiBtYWlsaW5nIGxpc3Q6DQotIEl0IGlzIHJlY29tbWVuZGVkIHRvIHN1 YnNjcmliZSB0byB0aGlzIGxpc3QgaWYgeW91IGFyZSB1c2luZyBjc3luYzIgaW4NCi0gcHJvZHVj dGlvbiBlbnZpcm9ubWVudHMuDQotIA0KLStCdWlsZGluZyBjc3luYzINCi0rPT09PT09PT09PT09 PT09DQotKw0KLStZb3UnbGwgbmVlZCB0aGUgR05VIGF1dG90b29scyBhbmQgYSBjb21waWxlciB0 b29sY2hhaW4gKGdjYykgZm9yIA0KLStidWlsZGluZyBjc3luYzIuDQotKw0KLStGaXJzdCwgcnVu IHRoZSBhdXRvZ2VuLnNoIHNjcmlwdDoNCi0rDQotK2thcmluJCAuL2F1dG9nZW4uc2gNCi0rDQot K1RoZW4gcnVuIGNvbmZpZ3VyZSwgdXNlIC4vY29uZmlndXJlIC0taGVscCBmb3IgbW9yZSBvcHRp b25zOg0KLSsNCi0ra2FyaW4kIC4vY29uZmlndXJlDQotKw0KLStUaGVuIHJ1biBtYWtlOg0KLSsN Ci0ra2FyaW4kIG1ha2UNCi0rDQotK2NzeW5jMiBzaG91bGQgYmUgYnVpbHQgbm93LiBEaXJlY3Qg YW55IHF1ZXN0aW9ucyB0byB0aGUgY3N5bmMyIG1haWxpbmcgbGlzdA0KLSsoc2VlIGFib3ZlKS4N Ci0rDQotKy0gSm9oYW5uZXMNCi1kaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8NCi1pbmRleCA2YzAy ZmMzLi4wZWU4M2ZmIDEwMDY0NA0KLS0tLSBhL1RPRE8NCi0rKysgYi9UT0RPDQotQEAgLTEgKzEs NzQgQEANCi0gVW5pdmVyc2FsIHBlYWNlIGFuZCBhIGdvb2QgYXR0aXR1ZGUgZm9yIGV2ZXJ5b25l Lg0KLSsNCi0rQ2hlY2sgZm9yIG15c3FsL215c3FsLmggdG8gZXhpc3QgaW4gY29uZmlndXJlLg0K LSsJRG9uZQ0KLSsNCi0rREIgYWJzdHJhY3Rpb246IGNoZWNrIGZvciBpbnN0YWxsZWQgZGF0YWJh c2VzIG9uIGNvbmZpZ3VyZQ0KLSsJYW5kIGVuYWJsZS9kaXNhYmxlIHRoZW0gZm9yIGNvbXBpbGF0 aW9uLg0KLSsNCi0rQ3JlYXRlIE15U1FMIGRhdGFiYXNlIGlmIGl0IGRvZXNuJ3QgZXhpc3QuDQot Kw0KLStJbXBsZW1lbnQgdGFibGUgY3JlYXRpb24gd2l0aCBzY2hlbWEgc3VwcG9ydC4NCi0rCVdl IGRvbid0IGhhdmUgYSBzY2hlbWEgdGFibGUgeWV0LCBhZGQgaXQgd2hlbiBpdCBpcyBuZWVkZWQu DQotKw0KLStIYXZlIGNoZWNrIHJldHVybiB2YWx1ZSBmb3IgYXNwcmludGYgKCkgLi4gaGF2ZSBh IG1hY3JvIHRoYXQgZG9lcyBhIGNzeW5jX2ZhdGFsIA0KLSsJaWYgdGhlcmUgaXMgbm8gbWVtb3J5 Lg0KLSsNCi0rTWFrZSBkYXRhYmFzZSBjb25maWd1cmFibGUuDQotKw0KLStGcm9tIERlbm5pczoN Ci0rRmlsZW5hbWUgY29sdW1uIGlzIHRvbyBzaG9ydCwgYnV0IHRoaXMgaXMgZHVlIHRvIHRoZSBm YWN0IHRoYXQgbXlzcWwgNSBvbmx5IA0KLStzdXBwb3J0cyBrZXlzIGxlbmd0aCBvZiBtYXggMTAw MCBieXRlcy4NCi0rU28gdGhlIGZpbGVuYW1lK3BlZXJuYW1lIG11c3QgYmUgYmVsb3cgMzMzIFVU RiBjaGFyYWN0ZXJzIChzaW5jZSBteXNxbCBsb29rcyBhdCANCi0rd29yc3QtY2FzZSB3aGVuIGdl bmVyYXRpbmcgdGhlIHRhYmxlcykuIA0KLSsJU29ydCBvZiBmaXhlZC4gRmllbGRzIGFyZSA0MDk2 IGJ5dGVzIG5vdyAoaGlnaGVzdCBNQVhQQVRITEVOIG9mIGFsbA0KLSsJc3VwcG9ydGVkIHBsYXRm b3JtcykgYnV0IG9ubHkgdGhlIGZpcnN0IDEwMDAgY2hhcnMgYXJlIHVuaXF1ZS4NCi0rDQotK3Nx bGl0ZTM6Ly8gdXJsIG5vdCB3b3JraW5nDQotKwlJdCB3b3JrcyBidXQgaXQgbmVlZHMgYW4gZXh0 cmEgc2xhc2ggbGlrZSBpbiBzcWxpdGUzOi8vL3Zhci9saWIvLi4uIA0KLSsJTm93IGhhdmUgYSBo b3d0byBpZiBzbGFzaCBpcyBtaXNzaW5nIGFuZCBkYXRhYmFzZSBmaWxlIGlzIG5vdCBmb3VuZC4N Ci0rDQotKy1hIHNob3VsZCBiZSBzdHJvbmdlciB0aGFuIGNvbmZpZ3VyZWQgZGF0YWJhc2UgaW4g L2V0Yy9jc3luYzIuY2ZnDQotKwlXb3JrcyBub3cuDQotKw0KLSt0ZXN0IGxvbmcgZmlsZW5hbWVz IHdpdGggbXlzcWwNCi0rCVdvcmsgbm93DQotKw0KLStGcm9tIERlbm5pczoNCi0rV2VpcmQgY2hh cmFjdGVycyBpbiBmaWxlbmFtZSBjdXRzIG9mZiB0aGUgZmlsZW5hbWUgYXQgdGhlIGNoYXJhY3Rl ci4gSSBoYXZlIGEgDQotK2RhbmlzaCBsZXR0ZXIgKMOlIGVuY29kZWQgaW4gaXNvLTg4NTktMTog XDM3MCkgc3RpbGwgcHJlc2VudCBpbiBteSANCi0rbm93IFVURi04IGZpbGVzeXN0ZW0gbmFtZXMu IA0KLSsJQ291bGRuJ3QgcmVwcm9kdWNlIHRyaWVkIHdpdGggR2VybWFuIHVtbGF1dHMuDQotKw0K LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0rDQotK1Rlc3Qgc2NoZW1hIHN1cHBvcnQgZm9yIFNRTGl0 ZSAyLg0KLSsNCi0rSGF2ZSBjb21tYW5kIHRvIHBpcGUgY29ubmVjdGlvbiB0aHJvdWdoIChmb3Ig U1NIIHN1cHBvcnQgZm9yIGV4YW1wbGUpDQotKw0KLStGcm9tIEdlcmhhcmQgUmllZ2VyOg0KLStJ ZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBub2RlIHRvIHN5bmMgd2l0aCBwcmludCBub2RlcyB0 aGF0IGFyZSBub3QgcmVhY2hhYmxlLg0KLSsJRG9uZSwgdGVzdCBpdA0KLSsNCi0rCVNlZ2ZhdWx0 IHdoZW4gc3luY2luZyBhIGZpbGUgd2hlcmUgb25lIHNpZGUgaXMgYSBkaXJlY3RvcnkgYW5kIHRo ZSBvdGhlciBvbmUNCi0rCQlpcyBhIGxpbmsuDQotKw0KLStwb3N0Z3JlcyBzdXBwb3J0DQotKw0K LStkbF9vcGVuIGZvciBhbGwgc3FsIHJlbGF0ZWQgY2FsbHMNCi0rCXdlIGRvbid0IHdhbnQgdG8g ZGVwZW5kIG9uIGxpYm15c3FsL2xpYnNxbGl0ZS93aGF0ZXZlciBvbiBpbnN0YWxsLg0KLSsJVE9E TzogaG93IHRvIGV4cHJlc3MgdGhhdCB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBzcWwgY2xpZW50IGxp YnJhcnkgaW4gRGViaWFuL1JQTQ0KLSsNCi0rUGVyZm9ybWFuY2UgdGVzdHM6IHdoZW4gZG9lcyBp dCBtYWtlIHNlbnNlIHRvIHVzZSBteXNxbCBpbnN0ZWFkIG9mIHNxbGl0ZT8NCi0rDQotK0hhdmUg c2NoZW1hIHZlcnNpb24gdGFibGUuDQotKw0KLStDb21waWxlIGV2ZW4gd2hlbiB0aGVyZSBpcyBu byBsaWJzcWxpdGUgKG15c3FsIHN1cHBvcnQgb25seSkNCi0rDQotK0Zyb20gTWFydGluOiBQcm92 aWRlIHVwLXRvLWRhdGUgcGFja2FnZXMuDQotKwlSZXN1c2UgYnVpbGQuc2ggc2NyaXB0IGZyb20g ZHJiZC1wcm94eS4NCi0rDQotK0J1aWxkIHBhY2thZ2VzIGZvciBhbGwgc3VwcG9ydGVkIGRpc3Ry b3MuDQotKw0KLStJZiBpbmNsdWRlIDxkaXI+IGlzIG1pc3NpbmcgZXJyb3IgbWVzc2FnZSBpcyBQ ZXJtaXNzaW9uIGRlbmllZCwgd2hpY2ggaXMgDQotKyAgICBpcnJpdGF0aW5nLg0KLWRpZmYgLS1n aXQgYS9hY3Rpb24uYyBiL2FjdGlvbi5jDQotaW5kZXggNDM4ZGI1Yy4uOWFjODEyNiAxMDA2NDQN Ci0tLS0gYS9hY3Rpb24uYw0KLSsrKyBiL2FjdGlvbi5jDQotQEAgLTM4LDE0ICszOCwxOCBAQCB2 b2lkIGNzeW5jX3NjaGVkdWxlX2NvbW1hbmRzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgaXNs b2NhbCkNCi0gDQotIAl3aGlsZSAoIChnPWNzeW5jX2ZpbmRfbmV4dChnLCBmaWxlbmFtZSkpICkg ew0KLSAJCWZvciAoYT1nLT5hY3Rpb247IGE7IGE9YS0+bmV4dCkgew0KLSsJCQlpZiAoICFpc2xv Y2FsICYmIGEtPmRvX2xvY2FsX29ubHkgKQ0KLSsJCQkJY29udGludWU7DQotIAkJCWlmICggaXNs b2NhbCAmJiAhYS0+ZG9fbG9jYWwgKQ0KLSAJCQkJY29udGludWU7DQotIAkJCWlmICghYS0+cGF0 dGVybikNCi0gCQkJCWdvdG8gZm91bmRfbWF0Y2hpbmdfcGF0dGVybjsNCi0tCQkJZm9yIChwPWEt PnBhdHRlcm47IHA7IHA9cC0+bmV4dCkNCi0rCQkJZm9yIChwPWEtPnBhdHRlcm47IHA7IHA9cC0+ bmV4dCkgew0KLSsJCQkJaW50IGZubV9wYXRobmFtZSA9IHAtPnN0YXJfbWF0Y2hlc19zbGFzaGVz ID8gMCA6IEZOTV9QQVRITkFNRTsNCi0gCQkJCWlmICggIWZubWF0Y2gocC0+cGF0dGVybiwgZmls ZW5hbWUsDQotLQkJCQkJCUZOTV9MRUFESU5HX0RJUnxGTk1fUEFUSE5BTUUpICkNCi0rCQkJCQkJ Rk5NX0xFQURJTkdfRElSfGZubV9wYXRobmFtZSkgKQ0KLSAJCQkJCWdvdG8gZm91bmRfbWF0Y2hp bmdfcGF0dGVybjsNCi0rCQkJfQ0KLSAJCQljb250aW51ZTsNCi0gZm91bmRfbWF0Y2hpbmdfcGF0 dGVybjoNCi0gCQkJZm9yIChjPWEtPmNvbW1hbmQ7IGM7IGM9Yy0+bmV4dCkNCi1AQCAtNjksNyAr NzMsNyBAQCB2b2lkIGNzeW5jX3J1bl9zaW5nbGVfY29tbWFuZChjb25zdCBjaGFyICpjb21tYW5k LCBjb25zdCBjaGFyICpsb2dmaWxlKQ0KLSAJCQkiU0VMRUNUIGZpbGVuYW1lIGZyb20gYWN0aW9u IFdIRVJFIGNvbW1hbmQgPSAnJXMnICINCi0gCQkJImFuZCBsb2dmaWxlID0gJyVzJyIsIGNvbW1h bmQsIGxvZ2ZpbGUpDQotIAl7DQotLQkJdGV4dGxpc3RfYWRkKCZ0bCwgU1FMX1ZbMF0sIDApOw0K LSsJCXRleHRsaXN0X2FkZCgmdGwsIFNRTF9WKDApLCAwKTsNCi0gCX0gU1FMX0VORDsNCi0gDQot IAltYXJrID0gc3Ryc3RyKGNvbW1hbmRfY2xyLCAiJSUiKTsNCi1AQCAtMTA3LDcgKzExMSw3IEBA IHZvaWQgY3N5bmNfcnVuX3NpbmdsZV9jb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQsIGNvbnN0 IGNoYXIgKmxvZ2ZpbGUpDQotIAkJLyogMSAqLyBvcGVuKGxvZ2ZpbGVfY2xyLCBPX1dST05MWXxP X0NSRUFUfE9fQVBQRU5ELCAwNjY2KTsNCi0gCQkvKiAyICovIG9wZW4obG9nZmlsZV9jbHIsIE9f V1JPTkxZfE9fQ1JFQVR8T19BUFBFTkQsIDA2NjYpOw0KLSANCi0tCQlleGVjbCgiL2Jpbi9zaCIs ICJzaCIsICItYyIsIHJlYWxfY29tbWFuZCwgMCk7DQotKwkJZXhlY2woIi9iaW4vc2giLCAic2gi LCAiLWMiLCByZWFsX2NvbW1hbmQsIE5VTEwpOw0KLSAJCV9leGl0KDEyNyk7DQotIAl9DQotIA0K LUBAIC0xMzAsNyArMTM0LDcgQEAgdm9pZCBjc3luY19ydW5fY29tbWFuZHMoKQ0KLSAJU1FMX0JF R0lOKCJDaGVja2luZyBmb3Igc2NlZHVsZWQgY29tbWFuZHMiLA0KLSAJCQkiU0VMRUNUIGNvbW1h bmQsIGxvZ2ZpbGUgRlJPTSBhY3Rpb24gR1JPVVAgQlkgY29tbWFuZCwgbG9nZmlsZSIpDQotIAl7 DQotLQkJdGV4dGxpc3RfYWRkMigmdGwsIFNRTF9WWzBdLCBTUUxfVlsxXSwgMCk7DQotKwkJdGV4 dGxpc3RfYWRkMigmdGwsIFNRTF9WKDApLCBTUUxfVigxKSwgMCk7DQotIAl9IFNRTF9FTkQ7DQot IA0KLSAJZm9yICh0ID0gdGw7IHQgIT0gMDsgdCA9IHQtPm5leHQpDQotZGlmZiAtLWdpdCBhL2F1 dG9nZW4uc2ggYi9hdXRvZ2VuLnNoDQotaW5kZXggZGY5ZTc5Ny4uODU2NjNhYyAxMDA3NTUNCi0t LS0gYS9hdXRvZ2VuLnNoDQotKysrIGIvYXV0b2dlbi5zaA0KLUBAIC0xOCw5ICsxOCw5IEBADQot ICMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUNCi0gIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg Qm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQotIA0KLS1hY2xvY2FsLTEuNw0KLSthY2xvY2Fs DQotIGF1dG9oZWFkZXINCi0tYXV0b21ha2UtMS43IC0tYWRkLW1pc3NpbmcgLS1jb3B5DQotK2F1 dG9tYWtlIC0tYWRkLW1pc3NpbmcgLS1jb3B5DQotIGF1dG9jb25mDQotIA0KLSBpZiBbICIkMSIg PSBjbGVhbiBdOyB0aGVuDQotQEAgLTMyLDUgKzMyLDEzIEBAIGlmIFsgIiQxIiA9IGNsZWFuIF07 IHRoZW4NCi0gCXJtIC1yZiBjb25maWcuZ3Vlc3MgY29uZmlnLnN1Yg0KLSAJcm0gLXJmIGN5Z3dp bi9saWJyc3luYy0wLjkuNy50YXIuZ3oNCi0gCXJtIC1yZiBjeWd3aW4vc3FsaXRlLTIuOC4xNi50 YXIuZ3oNCi0rZWxzZQ0KLSsJLi9jb25maWd1cmUgIC0tcHJlZml4PS91c3IgLS1sb2NhbHN0YXRl ZGlyPS92YXIgLS1zeXNjb25mZGlyPS9ldGMNCi0rDQotKwllY2hvICIiDQotKwllY2hvICJDb25m aWd1cmVkIGFzIg0KLSsJZWNobyAiLi9jb25maWd1cmUgIC0tcHJlZml4PS91c3IgLS1sb2NhbHN0 YXRlZGlyPS92YXIgLS1zeXNjb25mZGlyPS9ldGMiDQotKwllY2hvICIiDQotKwllY2hvICJyZWNv bmZpZ3VyZSwgaWYgeW91IHdhbnQgaXQgZGlmZmVyZW50Ig0KLSBmaQ0KLSANCi1kaWZmIC0tZ2l0 IGEvY2ZnZmlsZV9wYXJzZXIueSBiL2NmZ2ZpbGVfcGFyc2VyLnkNCi1pbmRleCA3NzZiYmNmLi43 ZjQ5M2FiIDEwMDY0NA0KLS0tLSBhL2NmZ2ZpbGVfcGFyc2VyLnkNCi0rKysgYi9jZmdmaWxlX3Bh cnNlci55DQotQEAgLTMzLDYgKzMzLDggQEAgc3RydWN0IGNzeW5jX25vc3NsICAqY3N5bmNfbm9z c2wgID0gMDsNCi0gaW50IGNzeW5jX2lnbm9yZV91aWQgPSAwOw0KLSBpbnQgY3N5bmNfaWdub3Jl X2dpZCA9IDA7DQotIGludCBjc3luY19pZ25vcmVfbW9kID0gMDsNCi0rdW5zaWduZWQgY3N5bmNf bG9ja190aW1lb3V0ID0gMTI7DQotK2NoYXIgKmNzeW5jX3RlbXBkaXIgPSBOVUxMOw0KLSANCi0g I2lmZGVmIF9fQ1lHV0lOX18NCi0gaW50IGNzeW5jX2xvd2VyY3lnX2Rpc2FibGUgPSAwOw0KLUBA IC01MSwxMSArNTMsMTIgQEAgdm9pZCB5eWVycm9yKGNoYXIgKnRleHQpDQotIHN0YXRpYyB2b2lk IG5ld19ncm91cChjaGFyICpuYW1lKQ0KLSB7DQotIAlpbnQgc3RhdGljIGF1dG9udW0gPSAxOw0K LSsJaW50IHJjOyANCi0gCXN0cnVjdCBjc3luY19ncm91cCAqdCA9DQotIAkJY2FsbG9jKHNpemVv ZihzdHJ1Y3QgY3N5bmNfZ3JvdXApLCAxKTsNCi0gDQotIAlpZiAobmFtZSA9PSAwKQ0KLS0JCWFz cHJpbnRmKCZuYW1lLCAiZ3JvdXBfJWQiLCBhdXRvbnVtKyspOw0KLSsJCXJjID0gYXNwcmludGYo Jm5hbWUsICJncm91cF8lZCIsIGF1dG9udW0rKyk7DQotIA0KLSAJdC0+bmV4dCA9IGNzeW5jX2dy b3VwOw0KLSAJdC0+YXV0b19tZXRob2QgPSAtMTsNCi1AQCAtMTA2LDEyICsxMDksMTcgQEAgc3Rh dGljIHZvaWQgYWRkX3BhdHQoaW50IHBhdHRlcm50eXBlLCBjaGFyICpwYXR0ZXJuKQ0KLSAJfQ0K LSAjZW5kaWYNCi0gDQotKwkvKiBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGZyb20gcGF0dGVybiAq Lw0KLSAJZm9yIChpPXN0cmxlbihwYXR0ZXJuKS0xOyBpPjA7IGktLSkNCi0gCQlpZiAocGF0dGVy bltpXSA9PSAnLycpDQotIAkJCXBhdHRlcm5baV0gPSAwOw0KLSAJCWVsc2UNCi0gCQkJYnJlYWs7 DQotIA0KLSsJLyogaWYgeW91IHVzZSAqKiBhdCBsZWFzdCBvbmNlIGFueXdoZXJlIGluIHRoZSBw YXR0ZXJuLA0KLSsJICogX2FsbF8gc3RhcnMgaW4gdGhlIHBhdHRlcm4sIGV2ZW4gc2luZ2xlIG9u ZXMsDQotKwkgKiB3aWxsIG1hdGNoIHNsYXNoZXMuICovDQotKwl0LT5zdGFyX21hdGNoZXNfc2xh c2hlcyA9ICEhc3Ryc3RyKHBhdHRlcm4sICIqKiIpOw0KLSAJdC0+aXNpbmNsdWRlID0gcGF0dGVy bnR5cGUgPj0gMTsNCi0gCXQtPmlzY29tcGFyZSA9IHBhdHRlcm50eXBlID49IDI7DQotIAl0LT5w YXR0ZXJuID0gcGF0dGVybjsNCi1AQCAtMjgwLDYgKzI4OCw3IEBAIHN0YXRpYyB2b2lkIGFkZF9h Y3Rpb25fcGF0dGVybihjb25zdCBjaGFyICpwYXR0ZXJuKQ0KLSB7DQotIAlzdHJ1Y3QgY3N5bmNf Z3JvdXBfYWN0aW9uX3BhdHRlcm4gKnQgPQ0KLSAJCWNhbGxvYyhzaXplb2Yoc3RydWN0IGNzeW5j X2dyb3VwX2FjdGlvbl9wYXR0ZXJuKSwgMSk7DQotKwl0LT5zdGFyX21hdGNoZXNfc2xhc2hlcyA9 ICEhc3Ryc3RyKHBhdHRlcm4sICIqKiIpOw0KLSAJdC0+cGF0dGVybiA9IHBhdHRlcm47DQotIAl0 LT5uZXh0ID0gY3N5bmNfZ3JvdXAtPmFjdGlvbi0+cGF0dGVybjsNCi0gCWNzeW5jX2dyb3VwLT5h Y3Rpb24tPnBhdHRlcm4gPSB0Ow0KLUBAIC0zMDQsNiArMzEzLDI4IEBAIHN0YXRpYyB2b2lkIHNl dF9hY3Rpb25fZG9sb2NhbCgpDQotIAljc3luY19ncm91cC0+YWN0aW9uLT5kb19sb2NhbCA9IDE7 DQotIH0NCi0gDQotK3N0YXRpYyB2b2lkIHNldF9hY3Rpb25fZG9sb2NhbF9vbmx5KCkNCi0rew0K LSsJY3N5bmNfZ3JvdXAtPmFjdGlvbi0+ZG9fbG9jYWwgPSAxOw0KLSsJY3N5bmNfZ3JvdXAtPmFj dGlvbi0+ZG9fbG9jYWxfb25seSA9IDE7DQotK30NCi0rDQotK3N0YXRpYyB2b2lkIHNldF9sb2Nr X3RpbWVvdXQoY29uc3QgY2hhciAqdGltZW91dCkNCi0rew0KLSsJY3N5bmNfbG9ja190aW1lb3V0 ID0gYXRvaSh0aW1lb3V0KTsNCi0rfQ0KLSsNCi0rc3RhdGljIHZvaWQgc2V0X3RlbXBkaXIoY29u c3QgY2hhciAqdGVtcGRpcikNCi0rew0KLSsJY3N5bmNfdGVtcGRpciA9IHN0cmR1cCh0ZW1wZGly KTsNCi0rfQ0KLSsNCi0rc3RhdGljIHZvaWQgc2V0X2RhdGFiYXNlKGNvbnN0IGNoYXIgKmZpbGVu YW1lKQ0KLSt7DQotKwlpZiAoIWNzeW5jX2RhdGFiYXNlKQ0KLSsJCWNzeW5jX2RhdGFiYXNlID0g c3RyZHVwKGZpbGVuYW1lKTsNCi0rfQ0KLSsNCi0gc3RhdGljIHZvaWQgbmV3X3ByZWZpeChjb25z dCBjaGFyICpwbmFtZSkNCi0gew0KLSAJc3RydWN0IGNzeW5jX3ByZWZpeCAqcCA9DQotQEAgLTM5 MiwxMCArNDIzLDEyIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVfY3lnd2luX2xvd2VyY2FzZV9oYWNr KCkNCi0gfQ0KLSANCi0gJXRva2VuIFRLX0JMT0NLX0JFR0lOIFRLX0JMT0NLX0VORCBUS19TVEVO RCBUS19BVCBUS19BVVRPDQotLSV0b2tlbiBUS19OT1NTTCBUS19JR05PUkUgVEtfR1JPVVAgVEtf SE9TVCBUS19FWENMIFRLX0lOQ0wgVEtfQ09NUCBUS19LRVkNCi0rJXRva2VuIFRLX05PU1NMIFRL X0lHTk9SRSBUS19HUk9VUCBUS19IT1NUIFRLX0VYQ0wgVEtfSU5DTCBUS19DT01QIFRLX0tFWSBU S19EQVRBQkFTRQ0KLSAldG9rZW4gVEtfQUNUSU9OIFRLX1BBVFRFUk4gVEtfRVhFQyBUS19ET0xP Q0FMIFRLX0xPR0ZJTEUgVEtfTk9DWUdMT1dFUg0KLSAldG9rZW4gVEtfUFJFRklYIFRLX09OIFRL X0NPTE9OIFRLX1BPUEVOIFRLX1BDTE9TRQ0KLS0ldG9rZW4gVEtfQkFLX0RJUiBUS19CQUtfR0VO DQotKyV0b2tlbiBUS19CQUtfRElSIFRLX0JBS19HRU4gVEtfRE9MT0NBTE9OTFkNCi0rJXRva2Vu IFRLX1RFTVBESVINCi0rJXRva2VuIFRLX0xPQ0tfVElNRU9VVA0KLSAldG9rZW4gPHR4dD4gVEtf U1RSSU5HDQotIA0KLSAlJQ0KLUBAIC00MTMsOSArNDQ2LDE1IEBAIGJsb2NrOg0KLSAJCXsgfQ0K LSB8CVRLX05PU1NMIFRLX1NUUklORyBUS19TVFJJTkcgVEtfU1RFTkQNCi0gCQl7IG5ld19ub3Nz bCgkMiwgJDMpOyB9DQotK3wJVEtfREFUQUJBU0UgVEtfU1RSSU5HIFRLX1NURU5EDQotKwkJeyBz ZXRfZGF0YWJhc2UoJDIpOyB9DQotK3wJVEtfVEVNUERJUiBUS19TVFJJTkcgVEtfU1RFTkQNCi0r CQl7IHNldF90ZW1wZGlyKCQyKTsgfQ0KLSB8CVRLX0lHTk9SRSBpZ25vcmVfbGlzdCBUS19TVEVO RA0KLSB8CVRLX05PQ1lHTE9XRVIgVEtfU1RFTkQNCi0gCQl7IGRpc2FibGVfY3lnd2luX2xvd2Vy Y2FzZV9oYWNrKCk7IH0NCi0rfAlUS19MT0NLX1RJTUVPVVQgVEtfU1RSSU5HIFRLX1NURU5EDQot KwkJeyBzZXRfbG9ja190aW1lb3V0KCQyKTsgfQ0KLSA7DQotIA0KLSBpZ25vcmVfbGlzdDoNCi1A QCAtNTE3LDYgKzU1Niw4IEBAIGFjdGlvbl9zdG10Og0KLSAJCXsgc2V0X2FjdGlvbl9sb2dmaWxl KCQyKTsgfQ0KLSB8CVRLX0RPTE9DQUwNCi0gCQl7IHNldF9hY3Rpb25fZG9sb2NhbCgpOyB9DQot K3wJVEtfRE9MT0NBTE9OTFkNCi0rCQl7IHNldF9hY3Rpb25fZG9sb2NhbF9vbmx5KCk7IH0NCi0g Ow0KLSANCi0gYWN0aW9uX3BhdHRlcm5fbGlzdDoNCi1kaWZmIC0tZ2l0IGEvY2ZnZmlsZV9zY2Fu bmVyLmwgYi9jZmdmaWxlX3NjYW5uZXIubA0KLWluZGV4IDc3ZGFmNWYuLjVlOTNmN2MgMTAwNjQ0 DQotLS0tIGEvY2ZnZmlsZV9zY2FubmVyLmwNCi0rKysgYi9jZmdmaWxlX3NjYW5uZXIubA0KLUBA IC0yNSw5ICsyNSwxMyBAQA0KLSAjZGVmaW5lIE1BWF9JTkNMVURFX0RFUFRIIDEwDQotIFlZX0JV RkZFUl9TVEFURSBpbmNsdWRlX3N0YWNrW01BWF9JTkNMVURFX0RFUFRIXTsNCi0gaW50IGluY2x1 ZGVfc3RhY2tfcHRyID0gMDsNCi0rDQotKyNkZWZpbmUgWVlfTk9fSU5QVVQgMQ0KLSsjZGVmaW5l IFlZX05PX1VOUFVUIDENCi0gJX0NCi0gDQotICVvcHRpb24gbm95eXdyYXAgeXlsaW5lbm8NCi0r JW9wdGlvbiBub3VucHV0DQotICV4IFNUUklORyBJTkNMDQotIA0KLSAlJQ0KLUBAIC00Miw2ICs0 Niw3IEBAIGludCBpbmNsdWRlX3N0YWNrX3B0ciA9IDA7DQotIA0KLSAibm9zc2wiCQl7IHJldHVy biBUS19OT1NTTDsgfQ0KLSAiaWdub3JlIgl7IHJldHVybiBUS19JR05PUkU7IH0NCi0rImRhdGFi YXNlIgl7IHJldHVybiBUS19EQVRBQkFTRTsgfQ0KLSANCi0gImdyb3VwIgkJeyByZXR1cm4gVEtf R1JPVVA7IH0NCi0gImhvc3QiCQl7IHJldHVybiBUS19IT1NUOyB9DQotQEAgLTU2LDEwICs2MSwx MyBAQCBpbnQgaW5jbHVkZV9zdGFja19wdHIgPSAwOw0KLSAiZXhlYyIJCXsgcmV0dXJuIFRLX0VY RUM7IH0NCi0gImxvZ2ZpbGUiCXsgcmV0dXJuIFRLX0xPR0ZJTEU7IH0NCi0gImRvLWxvY2FsIgl7 IHJldHVybiBUS19ET0xPQ0FMOyB9DQotKyJkby1sb2NhbC1vbmx5Igl7IHJldHVybiBUS19ET0xP Q0FMT05MWTsgfQ0KLSANCi0gInByZWZpeCIJeyByZXR1cm4gVEtfUFJFRklYOyB9DQotICJvbiIJ CXsgcmV0dXJuIFRLX09OOyB9DQotIA0KLSsibG9jay10aW1lb3V0IgkJeyByZXR1cm4gVEtfTE9D S19USU1FT1VUOyB9DQotKyJ0ZW1wZGlyIgkJeyByZXR1cm4gVEtfVEVNUERJUjsgfQ0KLSAiYmFj a3VwLWRpcmVjdG9yeSIJeyByZXR1cm4gVEtfQkFLX0RJUjsgfQ0KLSAiYmFja3VwLWdlbmVyYXRp b25zIgl7IHJldHVybiBUS19CQUtfR0VOOyB9DQotIA0KLWRpZmYgLS1naXQgYS9jaGVjay5jIGIv Y2hlY2suYw0KLWluZGV4IDM2MGFiZDMuLmM1YjlmMzIgMTAwNjQ0DQotLS0tIGEvY2hlY2suYw0K LSsrKyBiL2NoZWNrLmMNCi1AQCAtOTksMTUgKzk5LDIwIEBAIHZvaWQgY3N5bmNfbWFyayhjb25z dCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICp0aGlzcGVlciwgY29uc3QgY2hhciAqcGVlcmZpbHRl cikNCi0gDQotIAljc3luY19kZWJ1ZygxLCAiTWFya2luZyBmaWxlIGFzIGRpcnR5OiAlc1xuIiwg ZmlsZSk7DQotIAlmb3IgKHBsX2lkeD0wOyBwbFtwbF9pZHhdLnBlZXJuYW1lOyBwbF9pZHgrKykN Ci0tCQlpZiAoIXBlZXJmaWx0ZXIgfHwgIXN0cmNtcChwZWVyZmlsdGVyLCBwbFtwbF9pZHhdLnBl ZXJuYW1lKSkNCi0rCQlpZiAoIXBlZXJmaWx0ZXIgfHwgIXN0cmNtcChwZWVyZmlsdGVyLCBwbFtw bF9pZHhdLnBlZXJuYW1lKSkgew0KLSsJCQlTUUwoIkRlbGV0aW5nIG9sZCBkaXJ0eSBmaWxlIGVu dHJpZXMiLA0KLSsJCQkJIkRFTEVURSBGUk9NIGRpcnR5IFdIRVJFIGZpbGVuYW1lID0gJyVzJyBB TkQgcGVlcm5hbWUgPSAnJXMnIiwNCi0rCQkJCXVybF9lbmNvZGUoZmlsZSksDQotKwkJCQl1cmxf ZW5jb2RlKHBsW3BsX2lkeF0ucGVlcm5hbWUpKTsNCi0rDQotIAkJCVNRTCgiTWFya2luZyBGaWxl IERpcnR5IiwNCi0tCQkJCSIlcyBJTlRPIGRpcnR5IChmaWxlbmFtZSwgZm9yY2UsIG15bmFtZSwg cGVlcm5hbWUpICINCi0rCQkJCSJJTlNFUlQgSU5UTyBkaXJ0eSAoZmlsZW5hbWUsIGZvcmNlZCwg bXluYW1lLCBwZWVybmFtZSkgIg0KLSAJCQkJIlZBTFVFUyAoJyVzJywgJXMsICclcycsICclcycp IiwNCi0tCQkJCWNzeW5jX25ld19mb3JjZSA/ICJSRVBMQUNFIiA6ICJJTlNFUlQiLA0KLSAJCQkJ dXJsX2VuY29kZShmaWxlKSwNCi0gCQkJCWNzeW5jX25ld19mb3JjZSA/ICIxIiA6ICIwIiwNCi0g CQkJCXVybF9lbmNvZGUocGxbcGxfaWR4XS5teW5hbWUpLA0KLSAJCQkJdXJsX2VuY29kZShwbFtw bF9pZHhdLnBlZXJuYW1lKSk7DQotKwkJfQ0KLSANCi0gCWZyZWUocGwpOw0KLSB9DQotQEAgLTEy MiwyMSArMTI3LDgzIEBAIGludCBjc3luY19jaGVja19wdXJlKGNvbnN0IGNoYXIgKmZpbGVuYW1l KQ0KLSAJaWYgKCFjc3luY19sb3dlcmN5Z19kaXNhYmxlKQ0KLSAJCXJldHVybiAwOw0KLSAjZW5k aWYNCi0tDQotIAlzdHJ1Y3Qgc3RhdCBzYnVmOw0KLS0JaW50IGk9MDsNCi0rCWludCBkaXJfbGVu ID0gMDsNCi0rCWludCBpOw0KLSsJaW50IHNhbWVfbGVuOw0KLSsNCi0rCS8qIHNpbmdsZSBlbnRy eSBsYXN0IHF1ZXJ5IGNhY2hlDQotKwkgKiB0byBzcGVlZCB1cCBjaGVja3MgZnJvbSBkZWVwIHN1 YmRpcnMgKi8NCi0rCXN0YXRpYyBzdHJ1Y3Qgew0KLSsJCS8qIHN0b3JlIGluY2x1c2l2ZSB0cmFp bGluZyBzbGFzaCBmb3IgcHJlZml4IG1hdGNoICovDQotKwkJY2hhciAqcGF0aDsNCi0rCQkvKiBz dHJsZW4ocGF0aCkgKi8NCi0rCQlpbnQgbGVuOw0KLSsJCS8qIGNhY2hlZCByZXR1cm4gdmFsdWUg Ki8NCi0rCQlpbnQgaGFzX3N5bWxpbms7DQotKwl9IGNhY2hlZDsNCi0rDQotKwlmb3IgKGkgPSAw OyBmaWxlbmFtZVtpXTsgaSsrKQ0KLSsJCWlmIChmaWxlbmFtZVtpXSA9PSAnLycpDQotKwkJCWRp cl9sZW4gPSBpKzE7DQotKw0KLSsJaWYgKGRpcl9sZW4gPD0gMSkgLyogJy8nIGEgc3ltbGluaz8g aGFyZGx5LiAqLw0KLSsJCXJldHVybiAwOw0KLSsNCi0rCS8qIGlkZW50aWNhbCBwcmVmaXggcGFy dCAqLw0KLSsJZm9yIChpID0gMDsgaSA8IGRpcl9sZW4gJiYgaSA8IGNhY2hlZC5sZW47IGkrKykN Ci0rCQlpZiAoZmlsZW5hbWVbaV0gIT0gY2FjaGVkLnBhdGhbaV0pDQotKwkJCWJyZWFrOw0KLSsN Ci0rCS8qIGJhY2t0cmFjayB0byBzbGFzaCAqLw0KLSsJZm9yICgtLWk7IGkgPj0gMCAmJiBjYWNo ZWQucGF0aFtpXSAhPSAnLyc7IC0taSk7DQotKwkJOw0KLSANCi0tCXdoaWxlIChmaWxlbmFtZVtp XSkgaSsrOw0KLSsJc2FtZV9sZW4gPSBpKzE7DQotKw0KLSsJY3N5bmNfZGVidWcoMywgIiBjaGVj azogJXMgJXUsICVzICV1LCAldS5cbiIsIGZpbGVuYW1lLCBkaXJfbGVuLCBjYWNoZWQucGF0aCwg Y2FjaGVkLmxlbiwgc2FtZV9sZW4pOw0KLSsJLyogZXhhY3QgbWF0Y2g/ICovDQotKwlpZiAoZGly X2xlbiA9PSBzYW1lX2xlbiAmJiBzYW1lX2xlbiA9PSBjYWNoZWQubGVuKQ0KLSsJCXJldHVybiBj YWNoZWQuaGFzX3N5bWxpbms7DQotIA0KLSAJeyAvKiBuZXcgYmxvY2sgZm9yIG15ZmlsZW5hbWVb XSAqLw0KLS0JCWNoYXIgbXlmaWxlbmFtZVtpKzFdOw0KLS0JCW1lbWNweShteWZpbGVuYW1lLCBm aWxlbmFtZSwgaSsxKTsNCi0tCQl3aGlsZSAoMSkgew0KLS0JCQl3aGlsZSAobXlmaWxlbmFtZVtp XSAhPSAnLycpDQotLQkJCQlpZiAoLS1pIDw9IDApIHJldHVybiAwOw0KLSsJCWNoYXIgbXlmaWxl bmFtZVtkaXJfbGVuKzFdOw0KLSsJCWNoYXIgKnRvX2JlX2NhY2hlZDsNCi0rCQlpbnQgaGFzX3N5 bWxpbmsgPSAwOw0KLSsJCW1lbWNweShteWZpbGVuYW1lLCBmaWxlbmFtZSwgZGlyX2xlbik7DQot KwkJbXlmaWxlbmFtZVtkaXJfbGVuXSA9ICdcMCc7DQotKwkJdG9fYmVfY2FjaGVkID0gc3RyZHVw KG15ZmlsZW5hbWUpOw0KLSsJCWkgPSBkaXJfbGVuLTE7DQotKwkJd2hpbGUgKGkpIHsNCi0rCQkJ Zm9yICg7IGkgJiYgbXlmaWxlbmFtZVtpXSAhPSAnLyc7IC0taSkNCi0rCQkJCTsNCi0rDQotKwkJ CWlmIChpIDw9IDEpDQotKwkJCQlicmVhazsNCi0rDQotKwkJCWlmIChpKzEgPT0gc2FtZV9sZW4p IHsNCi0rCQkJCWlmIChzYW1lX2xlbiA9PSBjYWNoZWQubGVuKSB7DQotKwkJCQkJLyogZXhhY3Qg bWF0Y2ggKi8NCi0rCQkJCQloYXNfc3ltbGluayA9IGNhY2hlZC5oYXNfc3ltbGluazsNCi0rCQkJ CQlicmVhazsNCi0rCQkJCX0gZWxzZSBpZiAoIWNhY2hlZC5oYXNfc3ltbGluaykNCi0rCQkJCQkv KiBwcmVmaXggb2Ygc29tZXRoaW5nICdwdXJlJyAqLw0KLSsJCQkJCWJyZWFrOw0KLSsJCQl9DQot Kw0KLSAJCQlteWZpbGVuYW1lW2ldPTA7DQotLQkJCWlmICggbHN0YXRfc3RyaWN0KHByZWZpeHN1 YnN0KG15ZmlsZW5hbWUpLCAmc2J1ZikgfHwgU19JU0xOSyhzYnVmLnN0X21vZGUpICkgcmV0dXJu IDE7DQotKwkJCWlmIChsc3RhdF9zdHJpY3QocHJlZml4c3Vic3QobXlmaWxlbmFtZSksICZzYnVm KSB8fCBTX0lTTE5LKHNidWYuc3RfbW9kZSkpIHsNCi0rCQkJCWhhc19zeW1saW5rID0gMTsNCi0r CQkJCWJyZWFrOw0KLSsJCQl9DQotIAkJfQ0KLSsJCWlmICh0b19iZV9jYWNoZWQpIHsgLyogc3Ry ZHVwIGNhbiBmYWlsLiBTbyB3aGF0LiAqLw0KLSsJCQlmcmVlKGNhY2hlZC5wYXRoKTsNCi0rCQkJ Y2FjaGVkLnBhdGggPSB0b19iZV9jYWNoZWQ7DQotKwkJCWNhY2hlZC5sZW4gPSBkaXJfbGVuOw0K LSsJCQljYWNoZWQuaGFzX3N5bWxpbmsgPSBoYXNfc3ltbGluazsNCi0rCQl9DQotKwkJcmV0dXJu IGhhc19zeW1saW5rOw0KLSAJfQ0KLSB9DQotIA0KLUBAIC0xNDgsMTggKzIxNSwyMiBAQCB2b2lk IGNzeW5jX2NoZWNrX2RlbChjb25zdCBjaGFyICpmaWxlLCBpbnQgcmVjdXJzaXZlLCBpbnQgaW5p dF9ydW4pDQotIA0KLSAJaWYgKCByZWN1cnNpdmUgKSB7DQotIAkJaWYgKCAhc3RyY21wKGZpbGUs ICIvIikgKQ0KLS0JCQlhc3ByaW50Zigmd2hlcmVfcmVjLCAib3IgMSIpOw0KLSsJCSAgQVNQUklO VEYoJndoZXJlX3JlYywgIk9SIDE9MSIpOw0KLSAJCWVsc2UNCi0tCQkJYXNwcmludGYoJndoZXJl X3JlYywgIm9yIChmaWxlbmFtZSA+ICclcy8nICINCi0tCQkJCQkiYW5kIGZpbGVuYW1lIDwgJyVz MCcpIiwNCi0tCQkJCQl1cmxfZW5jb2RlKGZpbGUpLCB1cmxfZW5jb2RlKGZpbGUpKTsNCi0rCQkg IEFTUFJJTlRGKCZ3aGVyZV9yZWMsICJVTklPTiBBTEwgU0VMRUNUIGZpbGVuYW1lIGZyb20gZmls ZSB3aGVyZSBmaWxlbmFtZSA+ICclcy8nICINCi0rCQkJCSJhbmQgZmlsZW5hbWUgPCAnJXMwJyIs DQotKwkJCQl1cmxfZW5jb2RlKGZpbGUpLCB1cmxfZW5jb2RlKGZpbGUpKTsNCi0gCX0NCi0gDQot IAlTUUxfQkVHSU4oIkNoZWNraW5nIGZvciByZW1vdmVkIGZpbGVzIiwNCi0gCQkJIlNFTEVDVCBm aWxlbmFtZSBmcm9tIGZpbGUgd2hlcmUgIg0KLSAJCQkiZmlsZW5hbWUgPSAnJXMnICVzIE9SREVS IEJZIGZpbGVuYW1lIiwgdXJsX2VuY29kZShmaWxlKSwgd2hlcmVfcmVjKQ0KLSAJew0KLS0JCWNv bnN0IGNoYXIgKmZpbGVuYW1lID0gdXJsX2RlY29kZShTUUxfVlswXSk7DQotKwkJY29uc3QgY2hh ciAqZmlsZW5hbWUgPSB1cmxfZGVjb2RlKFNRTF9WKDApKTsNCi0rDQotKwkJaWYgKCFjc3luY19t YXRjaF9maWxlKGZpbGVuYW1lKSkNCi0rCQkJY29udGludWU7DQotKw0KLSAJCWlmICggbHN0YXRf c3RyaWN0KHByZWZpeHN1YnN0KGZpbGVuYW1lKSwgJnN0KSAhPSAwIHx8IGNzeW5jX2NoZWNrX3B1 cmUoZmlsZW5hbWUpICkNCi0gCQkJdGV4dGxpc3RfYWRkKCZ0bCwgZmlsZW5hbWUsIDApOw0KLSAJ fSBTUUxfRU5EOw0KLUBAIC0yMzEsNyArMzAyLDcgQEAgaW50IGNzeW5jX2NoZWNrX21vZChjb25z dCBjaGFyICpmaWxlLCBpbnQgcmVjdXJzaXZlLCBpbnQgaWdubm9lbnQsIGludCBpbml0X3J1bikN Ci0gCQkJImZpbGVuYW1lID0gJyVzJyIsIHVybF9lbmNvZGUoZmlsZSkpDQotIAkJew0KLSAJCQlp ZiAoICFjc3luY19jbXBjaGVja3R4dChjaGVja3R4dCwNCi0tCQkJCQkJdXJsX2RlY29kZShTUUxf VlswXSkpICkgew0KLSsJCQkJCQl1cmxfZGVjb2RlKFNRTF9WKDApKSkgKSB7DQotIAkJCQljc3lu Y19kZWJ1ZygyLCAiRmlsZSBoYXMgY2hhbmdlZDogJXNcbiIsIGZpbGUpOw0KLSAJCQkJdGhpc19p c19kaXJ0eSA9IDE7DQotIAkJCX0NCi1AQCAtMjQzLDYgKzMxNCwxMCBAQCBpbnQgY3N5bmNfY2hl Y2tfbW9kKGNvbnN0IGNoYXIgKmZpbGUsIGludCByZWN1cnNpdmUsIGludCBpZ25ub2VudCwgaW50 IGluaXRfcnVuKQ0KLSAJCX0gU1FMX0VORDsNCi0gDQotIAkJaWYgKCB0aGlzX2lzX2RpcnR5ICYm ICFjc3luY19jb21wYXJlX21vZGUgKSB7DQotKwkJCVNRTCgiRGVsZXRpbmcgb2xkIGZpbGUgZW50 cnkiLA0KLSsJCQkgICAgIkRFTEVURSBGUk9NIGZpbGUgV0hFUkUgZmlsZW5hbWUgPSAnJXMnIiwN Ci0rCQkJICAgIHVybF9lbmNvZGUoZmlsZSkpOw0KLSsNCi0gCQkJU1FMKCJBZGRpbmcgb3IgdXBk YXRpbmcgZmlsZSBlbnRyeSIsDQotIAkJCSAgICAiSU5TRVJUIElOVE8gZmlsZSAoZmlsZW5hbWUs IGNoZWNrdHh0KSAiDQotIAkJCSAgICAiVkFMVUVTICgnJXMnLCAnJXMnKSIsDQotZGlmZiAtLWdp dCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYw0KLWluZGV4IDZlYzYxMzYuLjg5ODlhMzMg MTAwNjQ0DQotLS0tIGEvY29uZmlndXJlLmFjDQotKysrIGIvY29uZmlndXJlLmFjDQotQEAgLTE3 LDE1ICsxNywxNSBAQA0KLSAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp dGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCi0gDQotICMgUHJvY2VzcyB0aGlz IGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4NCi0tQUNf SU5JVChjc3luYzIsIDEuMzQsIGNsaWZmb3JkQGNsaWZmb3JkLmF0KQ0KLStBQ19JTklUKGNzeW5j MiwgMi4wcmMxLCBjc3luYzJAbGlzdHMubGluYml0LmNvbSkNCi0gQU1fSU5JVF9BVVRPTUFLRQ0K LSANCi0gQUNfQ09ORklHX1NSQ0RJUihjc3luYzIuYykNCi0gQU1fQ09ORklHX0hFQURFUihjb25m aWcuaCkNCi0gDQotICMgVXNlIC9ldGMgYW5kIC92YXIgaW5zdGVhZCBvZiAkcHJlZml4Ly4uLg0K LS10ZXN0ICIkbG9jYWxzdGF0ZWRpciIgPSAnJHtwcmVmaXh9L3ZhcicgJiYgbG9jYWxzdGF0ZWRp cj0vdmFyDQotLXRlc3QgIiRzeXNjb25mZGlyIiA9ICcke3ByZWZpeH0vZXRjJyAmJiBzeXNjb25m ZGlyPS9ldGMNCi0rIyB0ZXN0ICIkbG9jYWxzdGF0ZWRpciIgPSAnJHtwcmVmaXh9L3ZhcicgJiYg bG9jYWxzdGF0ZWRpcj0vdmFyDQotKyMgdGVzdCAiJHN5c2NvbmZkaXIiID0gJyR7cHJlZml4fS9l dGMnICYmIHN5c2NvbmZkaXI9L2V0Yw0KLSANCi0gIyBDaGVja3MgZm9yIHByb2dyYW1zLg0KLSBB Q19QUk9HX0NDDQotQEAgLTMzLDYgKzMzLDkgQEAgQUNfUFJPR19JTlNUQUxMDQotIEFDX1BST0df WUFDQw0KLSBBTV9QUk9HX0xFWA0KLSANCi0rIyBjaGVjayBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0 DQotK0FDX1NZU19MQVJHRUZJTEUNCi0rDQotICMgQ2hlY2sgZm9yIGxpYnJzeW5jLg0KLSBBQ19B UkdfV0lUSChbbGlicnN5bmMtc291cmNlXSwNCi0gCUFTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGli cnN5bmMtc291cmNlPXNvdXJjZS10YXItZmlsZV0sDQotQEAgLTQyLDM1ICs0NSw3OCBAQCBBQ19B UkdfV0lUSChbbGlicnN5bmMtc291cmNlXSwNCi0gKQ0KLSBBTV9DT05ESVRJT05BTChbUFJJVkFU RV9MSUJSU1lOQ10sIFt0ZXN0IC1uICIkbGlicnN5bmNfc291cmNlX2ZpbGUiXSkNCi0gDQotLSMg Q2hlY2sgZm9yIGxpYnNxbGl0ZS4NCi0tQUNfQVJHX1dJVEgoW2xpYnNxbGl0ZS1zb3VyY2VdLA0K LS0JQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJzcWxpdGUtc291cmNlPXNvdXJjZS10YXItZmls ZV0sDQotLQkJW2J1aWxkIHRoaXMgbGlic3FsaXRlIGFuZCBsaW5rIHN0YXRpY2FsbHkgYWdhaW5z dCBpdCAoaGFjayEgaGFjayEpXSksDQotLQlBQ19TVUJTVChbbGlic3FsaXRlX3NvdXJjZV9maWxl XSwgJHdpdGh2YWwpLA0KLS0JQUNfQ0hFQ0tfTElCKFtzcWxpdGVdLCBbc3FsaXRlX2V4ZWNdLCAs IFtBQ19NU0dfRVJST1IobGlic3FsaXRlIGlzIHJlcXVpcmVkKV0pDQotLSkNCi0tQU1fQ09ORElU SU9OQUwoW1BSSVZBVEVfTElCU1FMSVRFXSwgW3Rlc3QgLW4gIiRsaWJzcWxpdGVfc291cmNlX2Zp bGUiXSkNCi0rQUNfQVJHX0VOQUJMRShbc3FsaXRlXSwNCi0rCVtBQ19IRUxQX1NUUklORyhbLS1l bmFibGUtc3FsaXRlXSwNCi0rCQlbZW5hYmxlL2Rpc2FibGUgc3FsaXRlIDIgc3VwcG9ydCAoZGVm YXVsdCBpcyBkaXNhYmxlZCldKV0sDQotKwlbXSwgWyBlbmFibGVfc3FsaXRlPW5vIF0pDQotKw0K LStpZiB0ZXN0ICIkZW5hYmxlX3NxbGl0ZSIgPT0geWVzDQotK3RoZW4NCi0rICAgICAgICBBQ19D SEVDS19IRUFERVJTKFtzcWxpdGUuaF0sICwgW0FDX01TR19FUlJPUihbW1NRTGl0ZSBoZWFkZXIg bm90IGZvdW5kOyBpbnN0YWxsIGxpYnNxbGl0ZS1kZXYgYW5kIGRlcGVuZGVuY2llcyBmb3IgU1FM aXRlIDIgc3VwcG9ydF1dKV0pDQotKw0KLSsJQUNfREVGSU5FKFtIQVZFX1NRTElURV0sIDEsIFtE ZWZpbmUgaWYgc3FsaXRlIDIgc3VwcG9ydCBpcyB3YW50ZWRdKQ0KLStmaQ0KLSsNCi0rQUNfQVJH X0VOQUJMRShbc3FsaXRlM10sDQotKwlbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zcWxpdGUz XSwNCi0rCQlbZW5hYmxlL2Rpc2FibGUgc3FsaXRlMyBzdXBwb3J0IChkZWZhdWx0IGlzIGVuYWJs ZWQpXSldLA0KLSsJW10sIFsgZW5hYmxlX3NxbGl0ZTM9eWVzIF0pDQotKw0KLStpZiB0ZXN0ICIk ZW5hYmxlX3NxbGl0ZTMiID09IHllcw0KLSt0aGVuDQotKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVS Uyhbc3FsaXRlMy5oXSwgLCBbQUNfTVNHX0VSUk9SKFtbU1FMaXRlIGhlYWRlciBub3QgZm91bmQ7 IGluc3RhbGwgbGlic3FsaXRlMy1kZXYgYW5kIGRlcGVuZGVuY2llcyBmb3IgU1FMaXRlIDMgc3Vw cG9ydF1dKV0pDQotKw0KLSsJQUNfREVGSU5FKFtIQVZFX1NRTElURTNdLCAxLCBbRGVmaW5lIGlm IHNxbGl0ZTMgc3VwcG9ydCBpcyB3YW50ZWRdKQ0KLStmaQ0KLSANCi0gQUNfQVJHX0VOQUJMRShb Z251dGxzXSwNCi0tCVtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdudXRsc10sDQotLQkJW2Vu YWJsZS9kaXNhYmxlIEdOVSBUTFMgc3VwcG9ydCAoZGVmYXVsdCBpcyBlbmFibGVkKV0pXSwNCi0r CVtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdudXRsc10sW2VuYWJsZS9kaXNhYmxlIEdOVSBU TFMgc3VwcG9ydCAoZGVmYXVsdCBpcyBlbmFibGVkKV0pXSwNCi0gCVtdLCBbIGVuYWJsZV9nbnV0 bHM9eWVzIF0pDQotIA0KLSBpZiB0ZXN0ICIkZW5hYmxlX2dudXRscyIgIT0gbm8NCi0gdGhlbg0K LSsgICBQS0dfUFJPR19QS0dfQ09ORklHDQotKyAgIFBLR19DSEVDS19NT0RVTEVTKFtMSUJHTlVU TFNdLCBbZ251dGxzID49IDIuNi4wXSwgWw0KLSsgICAgICBBQ19ERUZJTkUoW0hBVkVfTElCR05V VExTXSwgMSwgW0RlZmluZSB0byAxIHdoZW4gdXNpbmcgR05VIFRMUyBsaWJyYXJ5XSkNCi0rICAg XSkNCi0rZmkNCi0gDQotLQkjIENoZWNrIGZvciBnbnVUTFMuDQotLQlBTV9QQVRIX0xJQkdOVVRM UygxLjAuMCwgLCBbIEFDX01TR19FUlJPUihbW2dudXRscyBub3QgZm91bmQ7IGluc3RhbGwgZ251 dGxzLCBnbnV0bHMtb3BlbnNzbCBhbmQgbGlidGFzbjEgcGFja2FnZXMgZm9yIHlvdXIgc3lzdGVt IG9yIHJ1biBjb25maWd1cmUgd2l0aCAtLWRpc2FibGUtZ251dGxzXV0pIF0pDQotK0FDX0FSR19F TkFCTEUoW215c3FsXSwNCi0rCVtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbXlzcWxdLA0KLSsJ CVtlbmFibGUvZGlzYWJsZSBNeVNRTCBzdXBwb3J0IChkZWZhdWx0IGlzIGRpc2FibGVkKV0pXSwN Ci0rCVtdLCBbIGVuYWJsZV9teXNxbD1ubyBdKQ0KLSANCi0rQUNfQVJHX0VOQUJMRShbcG9zdGdy ZXNdLA0KLSsJW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb3N0Z3Jlc10sDQotKwkJW2VuYWJs ZS9kaXNhYmxlIFBvc3RncmVzIHN1cHBvcnQgKGRlZmF1bHQgaXMgZGlzYWJsZWQpXSldLA0KLSsJ W10sIFsgZW5hYmxlX3Bvc3RncmVzPW5vIF0pDQotKw0KLStpZiB0ZXN0ICIkZW5hYmxlX215c3Fs IiA9PSB5ZXMNCi0rdGhlbg0KLSsJIyBDaGVjayBmb3IgbXlzcWwuDQotIAkjIFRoaXMgaXMgYSBi bG9vZHkgaGFjayBmb3IgZmVkb3JhIGNvcmUNCi0tCUNGTEFHUz0iJENGTEFHUyAkTElCR05VVExT X0NGTEFHUyINCi0tCUxJQlM9IiRMSUJTICRMSUJHTlVUTFNfTElCUyAtbHRhc24xIg0KLSsJQ0ZM QUdTPSIkQ0ZMQUdTIGBteXNxbF9jb25maWcgLS1jZmxhZ3NgIgkNCi0rDQotKwkjIENoZWNrIE15 U1FMIGRldmVsb3BtZW50IGhlYWRlcg0KLSsJQUNfQ0hFQ0tfSEVBREVSUyhbbXlzcWwvbXlzcWwu aF0sICwgW0FDX01TR19FUlJPUihbW215c3FsIGhlYWRlciBub3QgZm91bmQ7IGluc3RhbGwgbXlz cWwtZGV2ZWwgYW5kIGRlcGVuZGVuY2llcyBmb3IgTXlTUUwgU3VwcG9ydF1dKV0pDQotIA0KLS0J IyBDaGVjayBnbnVUTFMgU1NMIGNvbXBhdGliaWxpdHkgbGliLg0KLS0JQUNfQ0hFQ0tfTElCKFtn bnV0bHMtb3BlbnNzbF0sIFtTU0xfbmV3XSwgLCBbQUNfTVNHX0VSUk9SKFtbZ251dGxzLW9wZW5z c2wgbm90IGZvdW5kOyBpbnN0YWxsIGdudXRscywgZ251dGxzLW9wZW5zc2wgYW5kIGxpYnRhc24x IHBhY2thZ2VzIGZvciB5b3VyIHN5c3RlbSBvciBydW4gY29uZmlndXJlIHdpdGggLS1kaXNhYmxl LWdudXRsc11dKV0pDQotKwlBQ19ERUZJTkUoW0hBVkVfTVlTUUxdLCAxLCBbRGVmaW5lIGlmIG15 c3FsIHN1cHBvcnQgaXMgd2FudGVkXSkNCi0rZmkNCi0rDQotK2lmIHRlc3QgIiRlbmFibGVfcG9z dGdyZXMiID09IHllcw0KLSt0aGVuDQotKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbcG9zdGdy ZXNxbC9saWJwcS1mZS5oXSwgLCBbQUNfTVNHX0VSUk9SKFtbcG9zdGdyZXMgaGVhZGVyIG5vdCBm b3VuZDsgaW5zdGFsbCBsaWJwcS1kZXYgYW5kIGRlcGVuZGVuY2llcyBmb3IgUG9zdGdyZXMgc3Vw cG9ydF1dKV0pDQotIA0KLSsJQUNfREVGSU5FKFtIQVZFX1BPU1RHUkVTXSwgMSwgW0RlZmluZSBp ZiBwb3N0Z3JlcyBzdXBwb3J0IGlzIHdhbnRlZF0pDQotK2ZpDQotKw0KLSsjIGF0IGxlYXN0IG9u ZSBkYiBiYWNrZW5kIG11c3QgYmUgY29uZmlndXJlZC4NCi0rDQotK2lmIHRlc3QgIiRlbmFibGVf cG9zdGdyZXMiICE9IHllcyAmJiB0ZXN0ICIkZW5hYmxlX215c3FsIiAhPSB5ZXMgJiYNCi0rICAg dGVzdCAiJGVuYWJsZV9zcWxpdGUzIiAhPSB5ZXMgJiYgdGVzdCAiJGVuYWJsZV9zcWxpdGUiICE9 IHllcw0KLSt0aGVuDQotKwlBQ19NU0dfRVJST1IoW05vIGRhdGFiYXNlIGJhY2tlbmQgY29uZmln dXJlZC4gUGxlYXNlIGVuYWJsZSBlaXRoZXIgc3FsaXRlLCBzcWxpdGUzLCBteXNxbCBvciBwb3N0 Z3Jlcy5dKQ0KLSBmaQ0KLSANCi0gQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZV0pDQotIEFDX09V VFBVVA0KLS0NCi1kaWZmIC0tZ2l0IGEvY29ubi5jIGIvY29ubi5jDQotaW5kZXggNmY4ZGZkYy4u OGRkYTEwZCAxMDA2NDQNCi0tLS0gYS9jb25uLmMNCi0rKysgYi9jb25uLmMNCi1AQCAtMzAsNTIg KzMwLDc3IEBADQotICNpbmNsdWRlIDxuZXRkYi5oPg0KLSAjaW5jbHVkZSA8ZXJybm8uaD4NCi0g DQotLSNpZmRlZiBIQVZFX0xJQkdOVVRMU19PUEVOU1NMDQotKyNpZmRlZiBIQVZFX0xJQkdOVVRM Uw0KLSAjICBpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+DQotLSMgIGluY2x1ZGUgPGdudXRscy9v cGVuc3NsLmg+DQotKyMgIGluY2x1ZGUgPGdudXRscy94NTA5Lmg+DQotICNlbmRpZg0KLSANCi0g aW50IGNvbm5fZmRfaW4gID0gLTE7DQotIGludCBjb25uX2ZkX291dCA9IC0xOw0KLSBpbnQgY29u bl9jbGlzb2sgPSAwOw0KLSANCi0tI2lmZGVmIEhBVkVfTElCR05VVExTX09QRU5TU0wNCi0rI2lm ZGVmIEhBVkVfTElCR05VVExTDQotIGludCBjc3luY19jb25uX3VzZXNzbCA9IDA7DQotIA0KLS1T U0xfTUVUSE9EICpjb25uX3NzbF9tZXRoOw0KLS1TU0xfQ1RYICpjb25uX3NzbF9jdHg7DQotLVNT TCAqY29ubl9zc2w7DQotK3N0YXRpYyBnbnV0bHNfc2Vzc2lvbl90IGNvbm5fdGxzX3Nlc3Npb247 DQotK3N0YXRpYyBnbnV0bHNfY2VydGlmaWNhdGVfY3JlZGVudGlhbHNfdCBjb25uX3g1MDlfY3Jl ZDsNCi0gI2VuZGlmDQotIA0KLSsNCi0rLyogZ2V0YWRkcmluZm8gc3R1ZmYgbW9zdGx5IGNvcGll ZCBmcm9tIGl0cyBtYW5wYWdlICovDQotK2ludCBjb25uX2Nvbm5lY3QoY29uc3QgY2hhciAqcGVl cm5hbWUpDQotK3sNCi0rCXN0cnVjdCBhZGRyaW5mbyBoaW50czsNCi0rCXN0cnVjdCBhZGRyaW5m byAqcmVzdWx0LCAqcnA7DQotKwlpbnQgc2ZkLCBzOw0KLSsNCi0rCS8qIE9idGFpbiBhZGRyZXNz KGVzKSBtYXRjaGluZyBob3N0L3BvcnQgKi8NCi0rCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihz dHJ1Y3QgYWRkcmluZm8pKTsNCi0rCWhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsJLyogQWxs b3cgSVB2NCBvciBJUHY2ICovDQotKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOw0K LSsJaGludHMuYWlfZmxhZ3MgPSAwOw0KLSsJaGludHMuYWlfcHJvdG9jb2wgPSAwOwkvKiBBbnkg cHJvdG9jb2wgKi8NCi0rDQotKwlzID0gZ2V0YWRkcmluZm8ocGVlcm5hbWUsIGNzeW5jX3BvcnQs ICZoaW50cywgJnJlc3VsdCk7DQotKwlpZiAocyAhPSAwKSB7DQotKwkJY3N5bmNfZGVidWcoMSwg IkNhbm5vdCByZXNvbHZlIHBlZXJuYW1lLCBnZXRhZGRyaW5mbzogJXNcbiIsIGdhaV9zdHJlcnJv cihzKSk7DQotKwkJcmV0dXJuIC0xOw0KLSsJfQ0KLSsNCi0rCS8qIGdldGFkZHJpbmZvKCkgcmV0 dXJucyBhIGxpc3Qgb2YgYWRkcmVzcyBzdHJ1Y3R1cmVzLg0KLSsJICAgVHJ5IGVhY2ggYWRkcmVz cyB1bnRpbCB3ZSBzdWNjZXNzZnVsbHkgY29ubmVjdCgyKS4NCi0rCSAgIElmIHNvY2tldCgyKSAo b3IgY29ubmVjdCgyKSkgZmFpbHMsIHdlIChjbG9zZSB0aGUgc29ja2V0DQotKwkgICBhbmQpIHRy eSB0aGUgbmV4dCBhZGRyZXNzLiAqLw0KLSsNCi0rCWZvciAocnAgPSByZXN1bHQ7IHJwICE9IE5V TEw7IHJwID0gcnAtPmFpX25leHQpIHsNCi0rCQlzZmQgPSBzb2NrZXQocnAtPmFpX2ZhbWlseSwg cnAtPmFpX3NvY2t0eXBlLCBycC0+YWlfcHJvdG9jb2wpOw0KLSsJCWlmIChzZmQgPT0gLTEpDQot KwkJCWNvbnRpbnVlOw0KLSsNCi0rCQlpZiAoY29ubmVjdChzZmQsIHJwLT5haV9hZGRyLCBycC0+ YWlfYWRkcmxlbikgIT0gLTEpDQotKwkJCWJyZWFrOwkvKiBTdWNjZXNzICovDQotKw0KLSsJCWNs b3NlKHNmZCk7DQotKwl9DQotKwlmcmVlYWRkcmluZm8ocmVzdWx0KTsJLyogTm8gbG9uZ2VyIG5l ZWRlZCAqLw0KLSsNCi0rCWlmIChycCA9PSBOVUxMKQkvKiBObyBhZGRyZXNzIHN1Y2NlZWRlZCAq Lw0KLSsJCXJldHVybiAtMTsNCi0rDQotKwlyZXR1cm4gc2ZkOw0KLSt9DQotKw0KLSBpbnQgY29u bl9vcGVuKGNvbnN0IGNoYXIgKnBlZXJuYW1lKQ0KLSB7DQotLSAgICAgICAgc3RydWN0IHNvY2th ZGRyX2luIHNpbjsNCi0tICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7DQotIAlpbnQgb24gPSAx Ow0KLSANCi0tICAgICAgICBocCA9IGdldGhvc3RieW5hbWUocGVlcm5hbWUpOw0KLS0gICAgICAg IGlmICggISBocCApIHsNCi0tICAgICAgICAgICAgICAgIGNzeW5jX2RlYnVnKDEsICJDYW4ndCBy ZXNvbHZlIHBlZXJuYW1lLlxuIik7DQotLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotLSAg ICAgICAgfQ0KLS0NCi0tICAgICAgICBjb25uX2ZkX2luID0gc29ja2V0KGhwLT5oX2FkZHJ0eXBl LCBTT0NLX1NUUkVBTSwgMCk7DQotKyAgICAgICAgY29ubl9mZF9pbiA9IGNvbm5fY29ubmVjdChw ZWVybmFtZSk7DQotICAgICAgICAgaWYgKGNvbm5fZmRfaW4gPCAwKSB7DQotICAgICAgICAgICAg ICAgICBjc3luY19kZWJ1ZygxLCAiQ2FuJ3QgY3JlYXRlIHNvY2tldC5cbiIpOw0KLSAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgIH0NCi0gDQotLSAgICAgICAgc2luLnNpbl9m YW1pbHkgPSBocC0+aF9hZGRydHlwZTsNCi0tICAgICAgICBiY29weShocC0+aF9hZGRyLCAmc2lu LnNpbl9hZGRyLCBocC0+aF9sZW5ndGgpOw0KLS0gICAgICAgIHNpbi5zaW5fcG9ydCA9IGh0b25z KGNzeW5jX3BvcnQpOw0KLS0NCi0tICAgICAgICBpZiAoY29ubmVjdChjb25uX2ZkX2luLCAoc3Ry dWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mIChzaW4pKSA8IDApIHsNCi0tICAgICAgICAgICAg ICAgIGNzeW5jX2RlYnVnKDEsICJDYW4ndCBjb25uZWN0IHRvIHJlbW90ZSBob3N0LlxuIik7DQot LQkJY2xvc2UoY29ubl9mZF9pbik7IGNvbm5fZmRfaW4gPSAtMTsNCi0tICAgICAgICAgICAgICAg IHJldHVybiAtMTsNCi0tICAgICAgICB9DQotLQ0KLS0JaWYgKHNldHNvY2tvcHQoY29ubl9mZF9p biwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmb24sIHNpemVvZihvbikgKSA8IDAgKSB7DQot KwlpZiAoc2V0c29ja29wdChjb25uX2ZkX2luLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICZv biwgc2l6ZW9mKG9uKSApIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgY3N5bmNfZGVidWcoMSwg IkNhbid0IHNldCBUQ1BfTk9ERUxBWSBvcHRpb24gb24gVENQIHNvY2tldC5cbiIpOw0KLSAJCWNs b3NlKGNvbm5fZmRfaW4pOyBjb25uX2ZkX2luID0gLTE7DQotICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7DQotQEAgLTgzLDEwICsxMDgsOSBAQCBpbnQgY29ubl9vcGVuKGNvbnN0IGNoYXIgKnBl ZXJuYW1lKQ0KLSANCi0gCWNvbm5fZmRfb3V0ID0gY29ubl9mZF9pbjsNCi0gCWNvbm5fY2xpc29r ID0gMTsNCi0tI2lmZGVmIEhBVkVfTElCR05VVExTX09QRU5TU0wNCi0rI2lmZGVmIEhBVkVfTElC R05VVExTDQotIAljc3luY19jb25uX3VzZXNzbCA9IDA7DQotICNlbmRpZg0KLS0NCi0gCXJldHVy biAwOw0KLSB9DQotIA0KLUBAIC05NywxMiArMTIxLDEzIEBAIGludCBjb25uX3NldChpbnQgaW5m ZCwgaW50IG91dGZkKQ0KLSAJY29ubl9mZF9pbiAgPSBpbmZkOw0KLSAJY29ubl9mZF9vdXQgPSBv dXRmZDsNCi0gCWNvbm5fY2xpc29rID0gMTsNCi0tI2lmZGVmIEhBVkVfTElCR05VVExTX09QRU5T U0wNCi0rI2lmZGVmIEhBVkVfTElCR05VVExTDQotIAljc3luY19jb25uX3VzZXNzbCA9IDA7DQot ICNlbmRpZg0KLSANCi0gCS8vIHdoZW4gcnVubmluZyBpbiBzZXJ2ZXIgbW9kZSwgdGhpcyBoYXMg YmVlbiBkb25lIGFscmVhZHkNCi0gCS8vIGluIGNzeW5jMi5jIHdpdGggbW9yZSByZXN0cmljdGl2 ZSBlcnJvciBoYW5kbGluZy4uDQotKwkvLyBGSVhNRSBkb24ndCBldmVuIHRyeSBpbiAic3NoIiBt b2RlDQotIAlpZiAoIHNldHNvY2tvcHQoY29ubl9mZF9vdXQsIElQUFJPVE9fVENQLCBUQ1BfTk9E RUxBWSwgJm9uLCAoc29ja2xlbl90KSBzaXplb2Yob24pKSA8IDAgKQ0KLSAgICAgICAgICAgICAg ICAgY3N5bmNfZGVidWcoMSwgIkNhbid0IHNldCBUQ1BfTk9ERUxBWSBvcHRpb24gb24gVENQIHNv Y2tldC5cbiIpOw0KLSANCi1AQCAtMTEwLDQzICsxMzUsMTA2IEBAIGludCBjb25uX3NldChpbnQg aW5mZCwgaW50IG91dGZkKQ0KLSB9DQotIA0KLSANCi0tI2lmZGVmIEhBVkVfTElCR05VVExTX09Q RU5TU0wNCi0rI2lmZGVmIEhBVkVfTElCR05VVExTDQotKw0KLStzdGF0aWMgdm9pZCBzc2xfbG9n KGludCBsZXZlbCwgY29uc3QgY2hhciogbXNnKQ0KLSt7IGNzeW5jX2RlYnVnKGxldmVsLCAiJXMi LCBtc2cpOyB9DQotIA0KLS1jaGFyICpzc2xfa2V5ZmlsZSA9IEVUQ0RJUiAiL2NzeW5jMl9zc2xf a2V5LnBlbSI7DQotLWNoYXIgKnNzbF9jZXJ0ZmlsZSA9IEVUQ0RJUiAiL2NzeW5jMl9zc2xfY2Vy dC5wZW0iOw0KLStzdGF0aWMgY29uc3QgY2hhciAqc3NsX2tleWZpbGUgPSBFVENESVIgIi9jc3lu YzJfc3NsX2tleS5wZW0iOw0KLStzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NlcnRmaWxlID0gRVRD RElSICIvY3N5bmMyX3NzbF9jZXJ0LnBlbSI7DQotIA0KLSBpbnQgY29ubl9hY3RpdmF0ZV9zc2wo aW50IHNlcnZlcl9yb2xlKQ0KLSB7DQotLQlzdGF0aWMgaW50IHNzbGluaXQgPSAwOw0KLSsJZ251 dGxzX2FsZXJ0X2Rlc2NyaXB0aW9uX3QgYWxydDsNCi0rCWludCBlcnI7DQotIA0KLSAJaWYgKGNz eW5jX2Nvbm5fdXNlc3NsKQ0KLSAJCXJldHVybiAwOw0KLSANCi0tCWlmICghc3NsaW5pdCkgew0K LS0JCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsNCi0tCQlTU0xfbGlicmFyeV9pbml0KCk7DQot LQkJc3NsaW5pdD0xOw0KLS0JfQ0KLSsJZ251dGxzX2dsb2JhbF9pbml0KCk7DQotKwlnbnV0bHNf Z2xvYmFsX3NldF9sb2dfZnVuY3Rpb24oc3NsX2xvZyk7DQotKwlnbnV0bHNfZ2xvYmFsX3NldF9s b2dfbGV2ZWwoMTApOw0KLSANCi0tCWNvbm5fc3NsX21ldGggPSAoc2VydmVyX3JvbGUgPyBTU0x2 MjNfc2VydmVyX21ldGhvZCA6IFNTTHYyM19jbGllbnRfbWV0aG9kKSgpOw0KLS0JY29ubl9zc2xf Y3R4ID0gU1NMX0NUWF9uZXcoY29ubl9zc2xfbWV0aCk7DQotKwlnbnV0bHNfY2VydGlmaWNhdGVf YWxsb2NhdGVfY3JlZGVudGlhbHMoJmNvbm5feDUwOV9jcmVkKTsNCi0gDQotLQlpZiAoU1NMX0NU WF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbm5fc3NsX2N0eCwgc3NsX2tleWZpbGUsIFNTTF9GSUxF VFlQRV9QRU0pIDw9IDApDQotLQkJY3N5bmNfZmF0YWwoIlNTTDogZmFpbGVkIHRvIHVzZSBrZXkg ZmlsZSAlcy5cbiIsIHNzbF9rZXlmaWxlKTsNCi0rCWVyciA9IGdudXRsc19jZXJ0aWZpY2F0ZV9z ZXRfeDUwOV9rZXlfZmlsZShjb25uX3g1MDlfY3JlZCwgc3NsX2NlcnRmaWxlLCBzc2xfa2V5Zmls ZSwgR05VVExTX1g1MDlfRk1UX1BFTSk7DQotKwlpZihlcnIgIT0gR05VVExTX0VfU1VDQ0VTUykg ew0KLSsJCWdudXRsc19jZXJ0aWZpY2F0ZV9mcmVlX2NyZWRlbnRpYWxzKGNvbm5feDUwOV9jcmVk KTsNCi0rCQlnbnV0bHNfZ2xvYmFsX2RlaW5pdCgpOw0KLSANCi0tCWlmIChTU0xfQ1RYX3VzZV9j ZXJ0aWZpY2F0ZV9maWxlKGNvbm5fc3NsX2N0eCwgc3NsX2NlcnRmaWxlLCBTU0xfRklMRVRZUEVf UEVNKSA8PSAwKQ0KLS0JCWNzeW5jX2ZhdGFsKCJTU0w6IGZhaWxlZCB0byB1c2UgY2VydGlmaWNh dGUgZmlsZSAlcy5cbiIsIHNzbF9jZXJ0ZmlsZSk7DQotKwkJY3N5bmNfZmF0YWwoDQotKwkJCSJT U0w6IGZhaWxlZCB0byB1c2Uga2V5IGZpbGUgJXMgYW5kL29yIGNlcnRpZmljYXRlIGZpbGUgJXM6 ICVzICglcylcbiIsDQotKwkJCXNzbF9rZXlmaWxlLA0KLSsJCQlzc2xfY2VydGZpbGUsDQotKwkJ CWdudXRsc19zdHJlcnJvcihlcnIpLA0KLSsJCQlnbnV0bHNfc3RyZXJyb3JfbmFtZShlcnIpDQot KwkJKTsNCi0rCX0NCi0gDQotLQlpZiAoISAoY29ubl9zc2wgPSBTU0xfbmV3KGNvbm5fc3NsX2N0 eCkpICkNCi0tCQljc3luY19mYXRhbCgiQ3JlYXRpbmcgYSBuZXcgU1NMIGhhbmRsZSBmYWlsZWQu XG4iKTsNCi0rCWlmKHNlcnZlcl9yb2xlKSB7DQotKwkJZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVf Y2FzKGNvbm5feDUwOV9jcmVkKTsNCi0gDQotLQlnbnV0bHNfY2VydGlmaWNhdGVfc2VydmVyX3Nl dF9yZXF1ZXN0KGNvbm5fc3NsLT5nbnV0bHNfc3RhdGUsIEdOVVRMU19DRVJUX1JFUVVJUkUpOw0K LSsJCWlmKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV90cnVzdF9maWxlKGNvbm5feDUwOV9j cmVkLCBzc2xfY2VydGZpbGUsIEdOVVRMU19YNTA5X0ZNVF9QRU0pIDwgMSkgew0KLSsJCQlnbnV0 bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhjb25uX3g1MDlfY3JlZCk7DQotKwkJCWdu dXRsc19nbG9iYWxfZGVpbml0KCk7DQotIA0KLS0JU1NMX3NldF9yZmQoY29ubl9zc2wsIGNvbm5f ZmRfaW4pOw0KLS0JU1NMX3NldF93ZmQoY29ubl9zc2wsIGNvbm5fZmRfb3V0KTsNCi0rCQkJY3N5 bmNfZmF0YWwoDQotKwkJCQkiU1NMOiBmYWlsZWQgdG8gdXNlIGNlcnRpZmljYXRlIGZpbGUgJXMg YXMgQ0EuXG4iLA0KLSsJCQkJc3NsX2NlcnRmaWxlDQotKwkJCSk7DQotKwkJfQ0KLSsJfSBlbHNl DQotKwkJZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY2FfbmFtZXMoY29ubl94NTA5X2NyZWQpOw0K LSsNCi0rCWdudXRsc19pbml0KCZjb25uX3Rsc19zZXNzaW9uLCAoc2VydmVyX3JvbGUgPyBHTlVU TFNfU0VSVkVSIDogR05VVExTX0NMSUVOVCkpOw0KLSsJZ251dGxzX3ByaW9yaXR5X3NldF9kaXJl Y3QoY29ubl90bHNfc2Vzc2lvbiwgIlBFUkZPUk1BTkNFIiwgTlVMTCk7DQotKwlnbnV0bHNfY3Jl ZGVudGlhbHNfc2V0KGNvbm5fdGxzX3Nlc3Npb24sIEdOVVRMU19DUkRfQ0VSVElGSUNBVEUsIGNv bm5feDUwOV9jcmVkKTsNCi0gDQotLQlpZiAoIChzZXJ2ZXJfcm9sZSA/IFNTTF9hY2NlcHQgOiBT U0xfY29ubmVjdCkoY29ubl9zc2wpIDwgMSApDQotLQkJY3N5bmNfZmF0YWwoIkVzdGFibGlzaGlu ZyBTU0wgY29ubmVjdGlvbiBmYWlsZWQuXG4iKTsNCi0rCWlmKHNlcnZlcl9yb2xlKSB7DQotKwkJ Z251dGxzX2NlcnRpZmljYXRlX3NlbmRfeDUwOV9yZG5fc2VxdWVuY2UoY29ubl90bHNfc2Vzc2lv biwgMCk7DQotKwkJZ251dGxzX2NlcnRpZmljYXRlX3NlcnZlcl9zZXRfcmVxdWVzdChjb25uX3Rs c19zZXNzaW9uLCBHTlVUTFNfQ0VSVF9SRVFVSVJFKTsNCi0rCX0NCi0rDQotKwlnbnV0bHNfdHJh bnNwb3J0X3NldF9wdHIyKA0KLSsJCWNvbm5fdGxzX3Nlc3Npb24sDQotKwkJKGdudXRsc190cmFu c3BvcnRfcHRyX3QpY29ubl9mZF9pbiwNCi0rCQkoZ251dGxzX3RyYW5zcG9ydF9wdHJfdCljb25u X2ZkX291dA0KLSsJKTsNCi0rDQotKwllcnIgPSBnbnV0bHNfaGFuZHNoYWtlKGNvbm5fdGxzX3Nl c3Npb24pOw0KLSsJc3dpdGNoKGVycikgew0KLSsJY2FzZSBHTlVUTFNfRV9TVUNDRVNTOg0KLSsJ CWJyZWFrOw0KLSsNCi0rCWNhc2UgR05VVExTX0VfV0FSTklOR19BTEVSVF9SRUNFSVZFRDoNCi0r CQlhbHJ0ID0gZ251dGxzX2FsZXJ0X2dldChjb25uX3Rsc19zZXNzaW9uKTsNCi0rCQlmcHJpbnRm KA0KLSsJCQljc3luY19kZWJ1Z19vdXQsDQotKwkJCSJTU0w6IHdhcm5pbmcgYWxlcnQgcmVjZWl2 ZWQgZnJvbSBwZWVyOiAlZCAoJXMpLlxuIiwNCi0rCQkJYWxydCwgZ251dGxzX2FsZXJ0X2dldF9u YW1lKGFscnQpDQotKwkJKTsNCi0rCQlicmVhazsNCi0rDQotKwljYXNlIEdOVVRMU19FX0ZBVEFM X0FMRVJUX1JFQ0VJVkVEOg0KLSsJCWFscnQgPSBnbnV0bHNfYWxlcnRfZ2V0KGNvbm5fdGxzX3Nl c3Npb24pOw0KLSsJCWZwcmludGYoDQotKwkJCWNzeW5jX2RlYnVnX291dCwNCi0rCQkJIlNTTDog ZmF0YWwgYWxlcnQgcmVjZWl2ZWQgZnJvbSBwZWVyOiAlZCAoJXMpLlxuIiwNCi0rCQkJYWxydCwg Z251dGxzX2FsZXJ0X2dldF9uYW1lKGFscnQpDQotKwkJKTsNCi0rDQotKwlkZWZhdWx0Og0KLSsJ CWdudXRsc19ieWUoY29ubl90bHNfc2Vzc2lvbiwgR05VVExTX1NIVVRfUkRXUik7DQotKwkJZ251 dGxzX2RlaW5pdChjb25uX3Rsc19zZXNzaW9uKTsNCi0rCQlnbnV0bHNfY2VydGlmaWNhdGVfZnJl ZV9jcmVkZW50aWFscyhjb25uX3g1MDlfY3JlZCk7DQotKwkJZ251dGxzX2dsb2JhbF9kZWluaXQo KTsNCi0rDQotKwkJY3N5bmNfZmF0YWwoDQotKwkJCSJTU0w6IGhhbmRzaGFrZSBmYWlsZWQ6ICVz ICglcylcbiIsDQotKwkJCWdudXRsc19zdHJlcnJvcihlcnIpLA0KLSsJCQlnbnV0bHNfc3RyZXJy b3JfbmFtZShlcnIpDQotKwkJKTsNCi0rCX0NCi0gDQotIAljc3luY19jb25uX3VzZXNzbCA9IDE7 DQotIA0KLUBAIC0xNTUsMTUgKzI0MywxNSBAQCBpbnQgY29ubl9hY3RpdmF0ZV9zc2woaW50IHNl cnZlcl9yb2xlKQ0KLSANCi0gaW50IGNvbm5fY2hlY2tfcGVlcl9jZXJ0KGNvbnN0IGNoYXIgKnBl ZXJuYW1lLCBpbnQgY2FsbGZhdGFsKQ0KLSB7DQotLQljb25zdCBYNTA5ICpwZWVyY2VydDsNCi0r CWNvbnN0IGdudXRsc19kYXR1bV90ICpwZWVyY2VydHM7DQotKwl1bnNpZ25lZCBucGVlcmNlcnRz Ow0KLSAJaW50IGksIGNlcnRfaXNfb2sgPSAtMTsNCi0gDQotIAlpZiAoIWNzeW5jX2Nvbm5fdXNl c3NsKQ0KLSAJCXJldHVybiAxOw0KLSANCi0tCXBlZXJjZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRp ZmljYXRlKGNvbm5fc3NsKTsNCi0tDQotLQlpZiAoIXBlZXJjZXJ0IHx8IHBlZXJjZXJ0LT5zaXpl IDw9IDApIHsNCi0rCXBlZXJjZXJ0cyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9nZXRfcGVlcnMoY29u bl90bHNfc2Vzc2lvbiwgJm5wZWVyY2VydHMpOw0KLSsJaWYocGVlcmNlcnRzID09IE5VTEwgfHwg bnBlZXJjZXJ0cyA9PSAwKSB7DQotIAkJaWYgKGNhbGxmYXRhbCkNCi0gCQkJY3N5bmNfZmF0YWwo IlBlZXIgZGlkIG5vdCBwcm92aWRlIGFuIFNTTCBYNTA5IGNldHJpZmljYXRlLlxuIik7DQotIAkJ Y3N5bmNfZGVidWcoMSwgIlBlZXIgZGlkIG5vdCBwcm92aWRlIGFuIFNTTCBYNTA5IGNldHJpZmlj YXRlLlxuIik7DQotQEAgLTE3MSwxNyArMjU5LDE3IEBAIGludCBjb25uX2NoZWNrX3BlZXJfY2Vy dChjb25zdCBjaGFyICpwZWVybmFtZSwgaW50IGNhbGxmYXRhbCkNCi0gCX0NCi0gDQotIAl7DQot LQkJY2hhciBjZXJ0ZGF0YVtwZWVyY2VydC0+c2l6ZSoyICsgMV07DQotKwkJY2hhciBjZXJ0ZGF0 YVsyKnBlZXJjZXJ0c1swXS5zaXplICsgMV07DQotIA0KLS0JCWZvciAoaT0wOyBpPHBlZXJjZXJ0 LT5zaXplOyBpKyspDQotLQkJCXNwcmludGYoY2VydGRhdGEraSoyLCAiJTAyWCIsIHBlZXJjZXJ0 LT5kYXRhW2ldKTsNCi0tCQljZXJ0ZGF0YVtwZWVyY2VydC0+c2l6ZSoyXSA9IDA7DQotKwkJZm9y IChpPTA7IGk8cGVlcmNlcnRzWzBdLnNpemU7IGkrKykNCi0rCQkJc3ByaW50ZigmY2VydGRhdGFb MippXSwgIiUwMlgiLCBwZWVyY2VydHNbMF0uZGF0YVtpXSk7DQotKwkJY2VydGRhdGFbMippXSA9 IDA7DQotIA0KLSAJCVNRTF9CRUdJTigiQ2hlY2tpbmcgcGVlciB4NTA5IGNlcnRpZmljYXRlLiIs DQotIAkJCSJTRUxFQ1QgY2VydGRhdGEgRlJPTSB4NTA5X2NlcnQgV0hFUkUgcGVlcm5hbWUgPSAn JXMnIiwNCi0gCQkJdXJsX2VuY29kZShwZWVybmFtZSkpDQotIAkJew0KLS0JCQlpZiAoIXN0cmNt cChTUUxfVlswXSwgY2VydGRhdGEpKQ0KLSsJCQlpZiAoIXN0cmNtcChTUUxfVigwKSwgY2VydGRh dGEpKQ0KLSAJCQkJY2VydF9pc19vayA9IDE7DQotIAkJCWVsc2UNCi0gCQkJCWNlcnRfaXNfb2sg PSAwOw0KLUBAIC0yMTUsMTQgKzMwMywxOSBAQCBpbnQgY29ubl9jaGVja19wZWVyX2NlcnQoY29u c3QgY2hhciAqcGVlcm5hbWUsIGludCBjYWxsZmF0YWwpDQotIAlyZXR1cm4gMTsNCi0gfQ0KLSAN Ci0tI2VuZGlmIC8qIEhBVkVfTElCR05VVExTX09QRU5TU0wgKi8NCi0rI2VuZGlmIC8qIEhBVkVf TElCR05VVExTICovDQotIA0KLSBpbnQgY29ubl9jbG9zZSgpDQotIHsNCi0gCWlmICggIWNvbm5f Y2xpc29rICkgcmV0dXJuIC0xOw0KLSANCi0tI2lmZGVmIEhBVkVfTElCR05VVExTX09QRU5TU0wN Ci0tCWlmICggY3N5bmNfY29ubl91c2Vzc2wgKSBTU0xfZnJlZShjb25uX3NzbCk7DQotKyNpZmRl ZiBIQVZFX0xJQkdOVVRMUw0KLSsJaWYgKCBjc3luY19jb25uX3VzZXNzbCApIHsNCi0rCQlnbnV0 bHNfYnllKGNvbm5fdGxzX3Nlc3Npb24sIEdOVVRMU19TSFVUX1JEV1IpOw0KLSsJCWdudXRsc19k ZWluaXQoY29ubl90bHNfc2Vzc2lvbik7DQotKwkJZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3Jl ZGVudGlhbHMoY29ubl94NTA5X2NyZWQpOw0KLSsJCWdudXRsc19nbG9iYWxfZGVpbml0KCk7DQot Kwl9DQotICNlbmRpZg0KLSANCi0gCWlmICggY29ubl9mZF9pbiAhPSBjb25uX2ZkX291dCkgY2xv c2UoY29ubl9mZF9pbik7DQotQEAgLTIzNyw5ICszMzAsOSBAQCBpbnQgY29ubl9jbG9zZSgpDQot IA0KLSBzdGF0aWMgaW5saW5lIGludCBSRUFEKHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KLSB7 DQotLSNpZmRlZiBIQVZFX0xJQkdOVVRMU19PUEVOU1NMDQotKyNpZmRlZiBIQVZFX0xJQkdOVVRM Uw0KLSAJaWYgKGNzeW5jX2Nvbm5fdXNlc3NsKQ0KLS0JCXJldHVybiBTU0xfcmVhZChjb25uX3Nz bCwgYnVmLCBjb3VudCk7DQotKwkJcmV0dXJuIGdudXRsc19yZWNvcmRfcmVjdihjb25uX3Rsc19z ZXNzaW9uLCBidWYsIGNvdW50KTsNCi0gCWVsc2UNCi0gI2VuZGlmDQotIAkJcmV0dXJuIHJlYWQo Y29ubl9mZF9pbiwgYnVmLCBjb3VudCk7DQotQEAgLTI0OSw5ICszNDIsOSBAQCBzdGF0aWMgaW5s aW5lIGludCBXUklURShjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkNCi0gew0KLSAJc3Rh dGljIGludCBuLCB0b3RhbDsNCi0gDQotLSNpZmRlZiBIQVZFX0xJQkdOVVRMU19PUEVOU1NMDQot KyNpZmRlZiBIQVZFX0xJQkdOVVRMUw0KLSAJaWYgKGNzeW5jX2Nvbm5fdXNlc3NsKQ0KLS0JCXJl dHVybiBTU0xfd3JpdGUoY29ubl9zc2wsIGJ1ZiwgY291bnQpOw0KLSsJCXJldHVybiBnbnV0bHNf cmVjb3JkX3NlbmQoY29ubl90bHNfc2Vzc2lvbiwgYnVmLCBjb3VudCk7DQotIAllbHNlDQotICNl bmRpZg0KLSAJew0KLUBAIC0zMDIsNyArMzk1LDcgQEAgaW50IGNvbm5fcmF3X3JlYWQodm9pZCAq YnVmLCBzaXplX3QgY291bnQpDQotIAlyZXR1cm4gMDsNCi0gfQ0KLSANCi0tdm9pZCBjb25uX2Rl YnVnKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqYnVmLCBzaXplX3QgY291 bnQpDQotK3ZvaWQgY29ubl9kZWJ1Zyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyKmJ1Ziwg c2l6ZV90IGNvdW50KQ0KLSB7DQotIAlpbnQgaTsNCi0gDQotQEAgLTM2NSw5ICs0NTgsOSBAQCB2 b2lkIGNvbm5fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KLSAJY29ubl93cml0ZShidWZm ZXIsIHNpemUpOw0KLSB9DQotIA0KLS1pbnQgY29ubl9nZXRzKGNoYXIgKnMsIGludCBzaXplKQ0K LStzaXplX3QgY29ubl9nZXRzKGNoYXIgKnMsIHNpemVfdCBzaXplKQ0KLSB7DQotLQlpbnQgaT0w Ow0KLSsJc2l6ZV90IGk9MDsNCi0gDQotIAl3aGlsZSAoaTxzaXplLTEpIHsNCi0gCQlpbnQgcmMg PSBjb25uX3Jhd19yZWFkKHMraSwgMSk7DQotZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3N5bmMyaWQu cGwgYi9jb250cmliL2NzeW5jMmlkLnBsDQotbmV3IGZpbGUgbW9kZSAxMDA2NDQNCi1pbmRleCAw MDAwMDAwLi4xYjNhNWZhDQotLS0tIC9kZXYvbnVsbA0KLSsrKyBiL2NvbnRyaWIvY3N5bmMyaWQu cGwNCi1AQCAtMCwwICsxLDM1OSBAQA0KLSsjIS91c3IvYmluL3BlcmwgLXcNCi0rIyBDb3B5cmln aHQ6IHRlbGVncmFhZiAoTkwpDQotKyMgQXV0aG9yOiBhcmRAdGVsZWdyYWFmbmV0Lm5sDQotKyMg TGljZW5zZTogR1BMIHYyIG9yIGhpZ2hlcg0KLSt1c2Ugc3RyaWN0Ow0KLSt1c2UgTGludXg6Oklu b3RpZnkyOw0KLSt1c2UgRGF0YTo6RHVtcGVyOw0KLSt1c2UgRmlsZTo6RmluZDsNCi0rdXNlIFBP U0lYIHF3KHVuYW1lIDpzeXNfd2FpdF9oKTsNCi0rdXNlIFN5czo6U3lzbG9nOw0KLSt1c2UgTmV0 OjpTZXJ2ZXI6OkRhZW1vbml6ZSBxdyhkYWVtb25pemUpOw0KLSt1c2UgSU86OlNlbGVjdDsNCi0r dXNlIEZjbnRsOw0KLSsNCi0rDQotK215ICRwcm9ncmFtPSJjc3luYzJpZCI7DQotK215ICRkYWVt b25pemU9MTsNCi0rbXkgJHVzZXN5c2xvZz0xOw0KLStteSAkcGlkZmlsZT0nL3Zhci9ydW4vY3N5 bmMyaWQucGlkJzsNCi0rbXkgJHBpZGZpbGVib290PScvdmFyL3J1bi9jc3luYzJpZC5ib290LnBp ZCc7DQotKw0KLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLSsjIENvbmZpZyBpdGVtcw0KLSsj IE92ZXJyaWRkZW4gYnkgL2V0Yy9jc3luYzJpZC5jZmcNCi0rIyBOb3JtYWwgY29uZmlnIGluIC9l dGMvY3N5bmMyaWQuY2ZnOg0KLSsjDQotKyMgQDo6ZGlycz1xdyggL2RhdGExIC9kYXRhMiApOw0K LSsjIDE7DQotKyMNCi0rIyBjc3luY2RpcmhpbnQ6ICBwcmVmZXJyZWQgaGludCBjb21tYW5kIGZv ciBkaXJlY3RvcmllcyAoYSBzaW5nbGUgZGlyZWN0b3J5IG5hbWUNCi0rIyAgICAgICAgICAgICAg ICB3aWxsIGJlIGFkZGVkKQ0KLSsjIGNzeW5jZmlsZWhpbnQ6IHByZWZlcnJlZCBoaW50IGNvbW1h bmQgZm9yIGZpbGVzIChhdCBtb3N0ICR4IGZpbGVuYW1lcyB3aWxsIGJlIGFwcGVuZGVkKQ0KLSsj IGNzeW5jY2hlY2s6IHByZWZlcnJlZCBjb21tYW5kIHNjaGVkdWxlZCByaWdodCBhZnRlciB0aGUg aGludCwgb3IgYWZ0ZXIgYSB0aW1lb3V0DQotKyMgY3N5bmN1cGRhdGU6IHByZWZlcnJlZCBjb21t YW5kIHNjaGVkdWxlZCByaWdodCBhZnRlciB0aGUgY2hlY2sNCi0rIyBkZWJ1ZzogbG9nIGRlYnVn IGxpbmVzDQotKyMgc3RhdHNkaXI6IGZpbGUgdG8gbG9nIHRoZSBudW1iZXIgb2Ygd2F0Y2hlZCBk aXJlY3Rvcmllcw0KLSsjIHN0YXRjaGFuZ2VzOiBmaWxlIHRvIGxvZyB0aGUgbnVtYmVyIG9mIGZp bGUgY2hhbmdlIGV2ZW50cw0KLSsjIHN0YXRzcmV0cnk6IGZpbGUgdG8gbG9nIHRoZSBudW1iZXIg b2YgcmV0cmllcyBuZWVkZWQgc28gZmFyIGZvciB0aGUgaGludA0KLSsjIGRpcnM6IGFuIGFycmF5 IG9mIGRpcmVjdG9yaWVzIHdoaWNoIG5lZWQgdG8gYmUgd2F0Y2hlZCByZWN1cnNpdmVseQ0KLSsj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLSsNCi0rJDo6Y3N5bmNoaW50bWF4YXJncz0yMDsNCi0r QDo6Y3N5bmNkaXJoaW50PSgiL3Vzci9zYmluL2NzeW5jMiIsICItQiIsIi1BIiwiLXJoIik7DQot K0A6OmNzeW5jZmlsZWhpbnQ9KCIvdXNyL3NiaW4vY3N5bmMyIiwgIi1CIiwiLUEiLCItaCIpOw0K LStAOjpjc3luY2NoZWNrPSgiL3Vzci9zYmluL2NzeW5jMiIsICItQiIsIi1BIiwiLWMiKTsNCi0r QDo6Y3N5bmN1cGRhdGU9KCIvdXNyL3NiaW4vY3N5bmMyIiwgIi1CIiwiLUEiLCItdSIpOw0KLSsk OjpkZWJ1Zz0zOw0KLSskOjpzdGF0c2Rpcj0iL2Rldi9zaG0vY3N5bmNzdGF0cy9kaXJzIjsNCi0r JDo6c3RhdHNjaGFuZ2VzPSIvZGV2L3NobS9jc3luY3N0YXRzL2NoYW5nZXMiOw0KLSskOjpzdGF0 c3JldHJ5PSIvZGV2L3NobS9jc3luY3N0YXRzL3JldHJ5IjsNCi0rQDo6ZGlycz0oKTsNCi0rcmVx dWlyZSAiL2V0Yy9jc3luYzJpZC5jZmciOw0KLSsNCi0rJGRhZW1vbml6ZSAmJiBkYWVtb25pemUo MCwwLCRwaWRmaWxlYm9vdCk7DQotKyR1c2VzeXNsb2cgJiYgb3BlbmxvZygiJHByb2dyYW0iLCdw aWQnLCdkYWVtb24nKTsNCi0rDQotK3VzZSBjb25zdGFudCB7IExPR0VSUiA9PiAwLCBMT0dXQVJO ID0+IDEsIExPR0lORk8gPT4yLCBMT0dERUJVRz0+MyxMT0dTTE9UUz0+MjU2IH07DQotK215ICVw cmlvcz0oIDAgPT4gJ2VycicsIDEgPT4gJ3dhcm5pbmcnLCAyID0+ICdpbmZvJywgZGVmYXVsdCA9 PiAnZGVidWcnICk7DQotK3N1YiBsb2dnZXIgew0KLSsJbXkoJGxldmVsLEBhcmdzKT1AXzsNCi0r CW15ICgkcHJpbyk9JHByaW9zeyRsZXZlbH18fCRwcmlvc3snZGVmYXVsdCd9OyAjIDokcHJpb3N7 J2RlZmF1bHQnfTsNCi0rCWlmKCR1c2VzeXNsb2cpIHsNCi0rCQlzeXNsb2coJHByaW8sQGFyZ3Mp IGlmICgoJGxldmVsPD0gTE9HREVCVUcgJiYgJGxldmVsPD0kOjpkZWJ1Zyl8fCgkOjpkZWJ1Zz49 TE9HREVCVUcgJiYgJGxldmVsJiQ6OmRlYnVnKSkgDQotKwl9IGVsc2Ugew0KLSsJCXByaW50ICJM T0c6ICRwcmlvICI7DQotKwkJcHJpbnQoQGFyZ3MpOw0KLSsJCXByaW50ICJcbiI7DQotKwl9DQot K30NCi0rDQotK2xvZ2dlcihMT0dERUJVRyxEdW1wZXIoXEA6OmRpcnMpKTsNCi0rDQotKw0KLStt eSAkaW5vdGlmeSA9IG5ldyBMaW51eDo6SW5vdGlmeTIgb3IgKCBsb2dnZXIoTE9HRVJSLCAiVW5h YmxlIHRvIGNyZWF0ZSBuZXcgaW5vdGlmeSBvYmplY3Q6ICQhIikgJiYgZGllKCJpbm90aWZ5Iikg KTsNCi0rDQotKyMgRm9yIHN0YXRzDQotK215ICRnbG9iYWxkaXJzPTA7DQotK215ICRnbG9iYWxl dmVudHM9MDsNCi0rbXkgJGdsb2JhbGhpbnRyZXRyeT0wOw0KLSsNCi0rc3ViIGxvZ3N0YXRzbGlu ZSB7DQotKwlteSAoJGZpbGUsJGxpbmUpPUBfOw0KLSsjCW9wZW4gU1RBVFMsIj4gJGZpbGUiOw0K LSsjCXByaW50IFNUQVRTICRsaW5lOw0KLSsjCWNsb3NlIFNUQVRTOw0KLSt9DQotKw0KLSsNCi0r I3BhY2thZ2UgUnVubmVyOw0KLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLSsjIFByb2Nlc3Mg cnVubmVyDQotKyMgUnVucyBwcm9jZXNzZXMgYW5kIGtlZXAgc3RhdHVzDQotKyMgQVBJOg0KLSsj IHJ1bnN0YXR1czogY3VycmVudCBzdGF0dXMgb2YgYSBydW5zbG90IChydW5uaW5nL2lkbGUpDQot KyMgZXhpdHN0YXR1czogbGFzdCBzdGF0dXMgb2YgYW4gZXhlYw0KLSsjIHNsb3RydW46IGZvcmtl eGVjIGEgbmV3IGNvbW1hbmQgd2l0aCBhIGNhbGxiYWNrIHdoZW4gaXQncyBmaW5pc2hlZCBmb3Ig YSBzcGVjaWZpYyBzbG90DQotKyMgSGVscGVyczoNCi0rIyByZWFwZXIgaXMgdGhlIFNJR0NITEQg aGFuZGxlcg0KLSsjIGNoZWNrY2hpbGRyZW4gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzeXNjYWxs cyB3aGljaCBleGl0ZWQgd2l0aCBFX0lOVFIsIGFuZA0KLSsjIGNhbGxzIHRoZSBzcGVjaWZpYyBj YWxsYmFja3MuDQotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotK3VzZSBjb25zdGFudCB7IFJV Tl9JRExFID0+IDAsIFJVTl9SVU5OSU5HID0+IDEsIFJVTl9SRUFQRUQgPT4yIH07DQotK215ICVz bG90c3RhdHVzOw0KLStteSAlc2xvdGV4aXRzdGF0dXM7DQotK215ICVzbG90Y29tbWFuZGxpbmU7 DQotK215ICVzbG90Y2FsbGJhY2s7DQotK215ICVzbG90cGlkMnNsb3Q7DQotK215ICVzbG90c3Rh cnR0aW1lOw0KLSsNCi0rIyBwaWQgcXVldWUgZm9yIHJlYXBlcg0KLSsjIEV2ZXJ5IHBpZCAoa2V5 KSAgY29udGFpbnMgYSB3YWl0Zm9ycGlkIGV4aXQgc3RhdHVzIGFzIHZhbHVlLg0KLStteSAlc2xv dHBpZHJlYXBlZDsNCi0rDQotK3N1YiBydW5zdGF0dXMgew0KLSsJbXkgKCRzbG90KT1AXzsNCi0r CXJldHVybigkc2xvdHN0YXR1c3skc2xvdH0pIGlmIGV4aXN0cygkc2xvdHN0YXR1c3skc2xvdH0p Ow0KLSsJcmV0dXJuIFJVTl9JRExFOw0KLSt9DQotK3N1YiBzbG90cnVuIHsNCi0rCW15ICgkc2xv dCwkY2FsbGJhY2ssJGNvbW1hbmRsaW5lKT0oQF8pOw0KLSsJJFNJR3tDSExEfSA9IFwmcmVhcGVy Ow0KLSsJaWYocnVuc3RhdHVzKCRzbG90KSE9UlVOX0lETEUpIHsNCi0rCQlsb2dnZXIoTE9HREVC VUcsIlNsb3RSdW46IEFza2VkIHRvIHJ1biBmb3IgJHNsb3QsIGJ1dCAkc2xvdCAhPSBSVU5fSURM RSIpOw0KLSsJCXJldHVybiAtMTsNCi0rCX0NCi0rCSRzbG90Y29tbWFuZGxpbmV7JHNsb3R9PSRj b21tYW5kbGluZTsNCi0rCSRzbG90Y2FsbGJhY2t7JHNsb3R9PSRjYWxsYmFjazsNCi0rCSRzbG90 c3RhdHVzeyRzbG90fT1SVU5fUlVOTklORzsNCi0rCSRzbG90c3RhcnR0aW1leyRzbG90fT10aW1l KCk7DQotKwlteSAkcGlkPWZvcmsoKTsNCi0rCWlmKCEkcGlkKSB7DQotKwkJIyBXZSBrbm93IHRo YXQgZXhlYyBzaG91bGQgbm90IHJldHVybi4gTm93IHRlbGwgdGhlIHBlcmwgaW50ZXJwcmV0ZXIg dGhhdCB3ZSBrbm93Lg0KLSsJCXsNCi0rCQkJZXhlYyhAJGNvbW1hbmRsaW5lKTsNCi0rCQl9DQot KwkJbG9nZ2VyKExPR1dBUk4sIlNsb3RSdW46ICRzbG90IEV4ZWMgZmFpbGVkOiAiLmpvaW4oJyAn LCc+JywgQCRjb21tYW5kbGluZSwnPCcpKTsNCi0rCQkjIElmIHdlIGNhbid0IGV4ZWMsIHdlIGRv bid0IHJlYWxseSBrbm93IHdoeSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gZ28gYnVzeSBmb3JrIGV4 ZWNpbmcNCi0rCQkjIEdpdmUgYSBmb3JrIGV4ZWMgZ3JhY2UgYnkgd2FpdGluZw0KLSsJCXNsZWVw IDE7DQotKwkJZXhpdCAxOw0KLSsJfQ0KLSsJbG9nZ2VyKExPR0RFQlVHLCJTbG90UnVuOiAkc2xv dCAjICIuJHBpZC4iOiBydW4iLmpvaW4oJyAnLCc+JywgQCRjb21tYW5kbGluZSwnPCcpKTsNCi0r CSRzbG90cGlkMnNsb3R7JHBpZH09JHNsb3Q7DQotK30NCi0rc3ViIGV4aXRzdGF0dXMgew0KLSsJ bXkgKCRzbG90KT1AXzsNCi0rCXJldHVybigkc2xvdGV4aXRzdGF0dXN7JHNsb3R9KSBpZiBleGlz dHMoJHNsb3RleGl0c3RhdHVzeyRzbG90fSk7DQotKwlyZXR1cm4gLTE7DQotK30NCi0rc3ViIHJl YXBlciB7DQotK30NCi0rDQotK3N1YiBjaGVja2NoaWxkcmVuIHsNCi0rCWlmKCQ6OmRlYnVnPT1M T0dTTE9UUykgew0KLSsJCXdoaWxlKG15ICgkc2xvdCwkc3RhdHVzKSA9IGVhY2ggJXNsb3RzdGF0 dXMpIHsNCi0rCQkJbG9nZ2VyKExPR0RFQlVHLCJTbG90UnVuOiAkc2xvdCBzdGF0dXMgJHN0YXR1 cyB0aW1lOiAiLigkc3RhdHVzPyh0aW1lKCktJHNsb3RzdGFydHRpbWV7JHNsb3R9KToneCcpKTsN Ci0rCQl9Ow0KLSsJfQ0KLSsJd2hpbGUoKSB7DQotKwkJbXkgKCRwaWQpPXdhaXRwaWQoLTEsJldO T0hBTkcpOw0KLSsJCWlmKCRwaWQ8PTApIHsNCi0rCQkJbGFzdDsNCi0rCQl9DQotKwkJbXkgJHN0 YXR1cz0kPzsNCi0rCQlpZiAoV0lGRVhJVEVEKCRzdGF0dXMpfHxXSUZTSUdOQUxFRCgkc3RhdHVz KSAmJiBleGlzdHMoJHNsb3RwaWQyc2xvdHskcGlkfSkpIHsNCi0rCQkJbXkgJHNsb3Q9JHNsb3Rw aWQyc2xvdHskcGlkfTsNCi0rCQkJZGVsZXRlKCRzbG90cGlkMnNsb3R7JHBpZH0pOw0KLSsJCQkk c2xvdHN0YXR1c3skc2xvdH09UlVOX0lETEU7DQotKwkJCSRzbG90ZXhpdHN0YXR1c3skc2xvdH09 JHN0YXR1czsNCi0rCQkJbG9nZ2VyKExPR0RFQlVHLCAiU2xvdFJ1bjogJHNsb3QgJHBpZCBleGl0 ZWQgd2l0aCAkc3RhdHVzID09ICIuV0VYSVRTVEFUVVMoJHN0YXR1cykuIi5cbiIpOw0KLSsJCQkj IENhbGxiYWNrIGRldGVybWluZXMgaWYgd2UgcnVuIGFnYWluIG9yIG5vdC4NCi0rCQkJJHNsb3Rj YWxsYmFja3skc2xvdH0tPigkc2xvdCwkc2xvdGV4aXRzdGF0dXN7JHNsb3R9LCRzbG90Y29tbWFu ZGxpbmV7JHNsb3R9KTsNCi0rCQl9IGVsc2Ugew0KLSsJCQlsb2dnZXIoTE9HREVCVUcsICJTbG90 UnVuOiBVbmtub3duIHByb2Nlc3MgJHBpZCBjaGFuZ2Ugc3RhdGUuXG4iKTsNCi0rCQl9DQotKwl9 DQotK30NCi0rDQotKw0KLSsNCi0rDQotKw0KLSsNCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN Ci0rIyBDU1lOQyBSVU5ORVJTDQotKyMgZ3JvdXBzIHF1ZXVlZCBoaW50cyBpbnRvIHNpbmdsZSBj c3luYyBjb21tYW5kcw0KLSsjIHJ1biBjc3luYyB1cGRhdGUgYW5kIGNoZWNrIGNvbW1hbmRzIA0K LSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLSsNCi0rIyB1c2UgY29uc3RhbnQgeyBDU1lOQ0hJ TlQgPT4gMCAsIENTWU5DQ0hFQ0s9PjEgLCBDU1lOQ1VQREFURT0+MiB9Ow0KLStteSBAaGludGZp Zm87DQotKw0KLStzdWIgdXBkYXRlQ2FsbGJhY2sgew0KLSsJbXkgKCRzbG90LCRleGl0c3RhdHVz LCRjb21tYW5kKT1AXzsNCi0rCWlmKCRleGl0c3RhdHVzKSB7DQotKwkJbG9nZ2VyKExPR1dBUk4s IlVwZGF0ZXIgZ290ICIuJGV4aXRzdGF0dXMuIiwgTk9UIHJldHJ5aW5nIHJ1bjoiLmpvaW4oJyAn LCc+JyxAJGNvbW1hbmQsJzwnKSk7DQotKwl9DQotK30NCi0rc3ViIHJ1bnVwZGF0ZXIgew0KLSsJ aWYocnVuc3RhdHVzKCdjc3VwZGF0ZScpID09IFJVTl9JRExFKSB7DQotKwkJc2xvdHJ1bignY3N1 cGRhdGUnLFwmdXBkYXRlQ2FsbGJhY2ssXEA6OmNzeW5jdXBkYXRlKTsNCi0rCX0NCi0rfQ0KLSsN Ci0rc3ViIGNoZWNrZXJDYWxsYmFjayB7DQotKwlteSAoJHNsb3QsJGV4aXRzdGF0dXMsJGNvbW1h bmQpPUBfOw0KLSsJaWYoJGV4aXRzdGF0dXMpIHsNCi0rCQlsb2dnZXIoTE9HV0FSTiwiQ2hlY2tl ciBnb3QgIi4kZXhpdHN0YXR1cy4iLCBOT1QgcmV0cnlpbmcgcnVuOiIuam9pbignICcsJz4nLEAk Y29tbWFuZCwnPCcpKTsNCi0rCX0NCi0rCXJ1bnVwZGF0ZXIoKTsNCi0rfQ0KLStzdWIgcnVuY2hl Y2tlciB7DQotKwlpZihydW5zdGF0dXMoJ2NzY2hlY2snKSA9PSBSVU5fSURMRSkgew0KLSsJCXNs b3RydW4oJ2NzY2hlY2snLFwmY2hlY2tlckNhbGxiYWNrLFxAOjpjc3luY2NoZWNrKTsNCi0rCX0N Ci0rfQ0KLStzdWIgaGludGVyQ2FsbGJhY2sgew0KLSsJbXkgKCRzbG90LCRleGl0c3RhdHVzLCRj b21tYW5kKT1AXzsNCi0rCWlmKCRleGl0c3RhdHVzKSB7DQotKwkJbG9nZ2VyKExPR1dBUk4sIkhp bnRlciBnb3QgIi4kZXhpdHN0YXR1cy4iLCByZXRyeWluZyBydW46Ii5qb2luKCcgJywnPicsQCRj b21tYW5kLCc8JykpOw0KLSsJCSRnbG9iYWxoaW50cmV0cnkrKzsNCi0rCQlsb2dzdGF0c2xpbmUo JDo6c3RhdHNyZXRyeSwkZ2xvYmFsaGludHJldHJ5KTsNCi0rCQlzbG90cnVuKCRzbG90LFwmaGlu dGVyQ2FsbGJhY2ssJGNvbW1hbmQpOw0KLSsJfSBlbHNlIHsNCi0rCQlydW5jaGVja2VyKCk7DQot Kwl9DQotK30NCi0rc3ViIGdpdmVoaW50cyB7DQotKwlpZihydW5zdGF0dXMoJ2NzaGludCcpID09 IFJVTl9JRExFICYmIEBoaW50Zmlmbykgew0KLSsJCSMgUFJFUEFSRSBKT0INCi0rCQkjIERpcmVj dG9yaWVzIHNob3VsZCBiZSB0cmVhdGVkIHdpdGggY2FyZSwgb25lIGF0IGEgdGltZS4NCi0rCQlt eSBAaGludGNvbW1hbmQ7DQotKwkJaWYoJGhpbnRmaWZvWzBdLT57J3JlY3Vyc2UnfSkgew0KLSsJ CQlteSAkZmlsZW5hbWU9JGhpbnRmaWZvWzBdLT57J2ZpbGVuYW1lJ307DQotKwkJCUBoaW50Y29t bWFuZD0oQDo6Y3N5bmNkaXJoaW50LCRmaWxlbmFtZSk7DQotKwkJCXNoaWZ0KEBoaW50Zmlmbykg d2hpbGUgKEBoaW50ZmlmbyAmJiAkZmlsZW5hbWUgZXEgJGhpbnRmaWZvWzBdLT57J2ZpbGVuYW1l J30gKTsNCi0rCQl9IGVsc2Ugew0KLSsJCQkjIEZpbGVzIGNhbiBiZSBidWxrZWQsIHVudGlsIHRo ZSBuZXh0IGRpcmVjdG9yeQ0KLSsJCQlteSAkbnJhcmdzPTA7DQotKwkJCUBoaW50Y29tbWFuZD0o QDo6Y3N5bmNmaWxlaGludCk7DQotKwkJCXdoaWxlKCRucmFyZ3MgPCAkOjpjc3luY2hpbnRtYXhh cmdzICYmIEBoaW50ZmlmbyAmJiAhJGhpbnRmaWZvWzBdLT57J3JlY3Vyc2UnfSkgew0KLSsJCQkJ bXkgJGZpbGVuYW1lPSRoaW50Zmlmb1swXS0+eydmaWxlbmFtZSd9Ow0KLSsJCQkJcHVzaChAaGlu dGNvbW1hbmQsJGZpbGVuYW1lKTsNCi0rCQkJCXNoaWZ0KEBoaW50Zmlmbykgd2hpbGUgKEBoaW50 ZmlmbyAmJiAkZmlsZW5hbWUgZXEgJGhpbnRmaWZvWzBdLT57J2ZpbGVuYW1lJ30gKTsNCi0rCQkJ CSRucmFyZ3MrKzsNCi0rCQkJfQ0KLSsJCX0NCi0rCQlzbG90cnVuKCdjc2hpbnQnLFwmaGludGVy Q2FsbGJhY2ssXEBoaW50Y29tbWFuZCk7DQotKwl9DQotK30NCi0rDQotKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjDQotKyMgU3VidHJlZSBwYXJzZXINCi0rIyBBZGRzIHN1YnRyZWVzIHRvIGFuIGV4 aXN0aW5nIHdhdGNoDQotKyMgZ2xvYmFsczogJGdsb2JhbGRpcnMgZm9yIHN0YXRzLg0KLSsjIExv Z3MgdG8gbG9nZ2VyDQotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotK3N1YiB3YXRjaHRyZWUg ew0KLSsJbXkgKCRpbm90aWZpZXIsJHRyZWUsJGlub3RpZnlmbGFncykgPSBAXzsNCi0rCSRpbm90 aWZpZXItPndhdGNoICgkdHJlZSwgJGlub3RpZnlmbGFncyk7DQotKwkkZ2xvYmFsZGlycysrOw0K LSsJZmluZCgNCi0rCQlzdWIgew0KLSsJCQlpZighIG0vXlwuXC4/JC8pIHsNCi0rCQkJCW15ICgk ZGV2LCAkaW5vLCAkbW9kZSwgJG5saW5rLCAkdWlkLCAkZ2lkKSA9IGxzdGF0KCRfKSA7DQotKwkJ CQlpZigtZCBfICkgew0KLSsJCQkJCWlmICgkbmxpbms9PTIpIHsNCi0rCQkJCQkJJEZpbGU6OkZp bmQ6OnBydW5lID0gMTsNCi0rCQkJCQl9DQotKwkJCQkJJGlub3RpZmllci0+d2F0Y2ggKCRGaWxl OjpGaW5kOjpkaXIuJy8nLiRfLCAkaW5vdGlmeWZsYWdzKSBvciBkaWUoIldhdGNoVHJlZTogd2F0 Y2ggY3JlYXRpb24gZmFpbGVkIChtYXliZSBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHdhdGNoZXM/ KSIpOw0KLSsJCQkJCSRnbG9iYWxkaXJzKys7DQotKwkJCQkJbG9nZ2VyKExPR0RFQlVHLCJXYXRj aFRyZWU6IGRpcmVjdG9yeSAiLiAkZ2xvYmFsZGlycy4iICIuJEZpbGU6OkZpbmQ6OmRpci4nLycu JF8pOw0KLSsJCQkJfQ0KLSsJCQl9DQotKwkJfSwNCi0rCQkkdHJlZQ0KLSsJKTsNCi0rCWxvZ3N0 YXRzbGluZSgkOjpzdGF0c2RpciwkZ2xvYmFsZGlycyk7DQotK30NCi0rDQotKw0KLSsjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIw0KLSsjIE1haW4NCi0rIw0KLStsb2dnZXIoTE9HSU5GTywgJ01haW46 IFN0YXJ0aW5nICRJZDogY3N5bmMyaWQucGwsdiAxLjE4IDIwMDgvMTIvMjQgMTU6MzQ6MTkgYXJk IEV4cCAkJyk7DQotKyMgU3RhcnQgd2F0Y2hpbmcgdGhlIGRpcmVjdG9yaWVzDQotK2xvZ2dlcihM T0dJTkZPLCAiTWFpbjogdHJhdmVyc2luZyBkaXJlY3RvcmllcyIpOw0KLStldmFsIHsNCi0rCXdh dGNodHJlZSgkaW5vdGlmeSwkXyxJTl9NT1ZFfElOX0RFTEVURXxJTl9DTE9TRV9XUklURXxJTl9B VFRSSUJ8SU5fQ1JFQVRFKSBmb3JlYWNoKEA6OmRpcnMpDQotK307DQotK2lmKCRAKSB7DQotKwls b2dnZXIoTE9HRVJSLCJNYWluOiAkQCIpOw0KLSsJZXhpdCgyKTsNCi0rfQ0KLStsb2dnZXIoTE9H SU5GTywiTWFpbjogcmVhZHkgZm9yIGV2ZW50cyIpOw0KLSsNCi0rIyBLaWxsIG90aGVyIGRhZW1v biBiZWNhdXNlIHdlIGFyZSByZWFkeQ0KLStpZigkZGFlbW9uaXplKSB7DQotKwlpZiAoIC1lICRw aWRmaWxlICkgew0KLSsJCW15ICR0aGVwaWQ7DQotKwkJQEFSR1Y9KCRwaWRmaWxlKTsNCi0rCQkk dGhlcGlkPTw+Ow0KLSsJCWxvZ2dlcihMT0dJTkZPLCAiTWFpbjogYWJvdXQgdG8ga2lsbCBwcmV2 aW91cyBpbmNhcm5hdGlvbiAkdGhlcGlkIik7DQotKwkJa2lsbCgxNSwkdGhlcGlkKTsNCi0rCQlz bGVlcCAwLjU7DQotKwl9DQotKwlyZW5hbWUoJHBpZGZpbGVib290LCRwaWRmaWxlKTsNCi0rfQ0K LSsNCi0rIyBNYWluIGxvb3ANCi0rJGlub3RpZnktPmJsb2NraW5nKE9fTk9OQkxPQ0spOw0KLStt eSAkdGltZW91dD0yMDsNCi0rd2hpbGUgKCkgew0KLSsJI215ICgkcmhzZXQsJGR1bW15LCRkdW1t eSwkdGltZWxlZnQpPUlPOjpTZWxlY3QtPnNlbGVjdCgkc2VsZWN0c2V0LCB1bmRlZiwgdW5kZWYs IDYwKTsNCi0rCW15ICRuZm91bmQ7DQotKwlteSAkcmluPScnOw0KLSsJdmVjKCRyaW4sJGlub3Rp ZnktPmZpbGVubywxKT0xOw0KLSsJKCRuZm91bmQsJHRpbWVvdXQpPXNlbGVjdCgkcmluLCB1bmRl ZiwgdW5kZWYsICR0aW1lb3V0KTsNCi0rCWxvZ2dlcihMT0dERUJVRywiTWFpbjogbnJmZHM6ICRu Zm91bmQgdGltZWxlZnQ6ICR0aW1lb3V0XG4iKTsNCi0rCWlmKCEkdGltZW91dCkgew0KLSsJCSR0 aW1lb3V0PTIwOw0KLSsJCWxvZ2dlcihMT0dERUJVRywgIk1haW46IHRpbWVvdXQtPmNoZWNrIGFu ZCB1cGRhdGUiKTsNCi0rCQlydW5jaGVja2VyKCk7DQotKwkJcnVudXBkYXRlcigpOw0KLSsJCSMg DQotKwl9DQotKwlpZigkbmZvdW5kPjApIHsNCi0rCQlteSBAZXZlbnRzID0gJGlub3RpZnktPnJl YWQ7DQotKwkJdW5sZXNzIChAZXZlbnRzID4gMCkgew0KLSsJCQlsb2dnZXIoTE9HV0FSTiwiTWFp bjogWmVybyBldmVudHMsIG11c3QgYmUgYSBzb21ldGhpbmcgd2VpcmQiKTsNCi0rCQl9DQotKwkJ Zm9yZWFjaChAZXZlbnRzKSB7DQotKwkJCWlmKCRfLT5JTl9RX09WRVJGTE9XKSB7DQotKwkJCQls b2dnZXIoTE9HRVJSLCJNYWluOiBGQVRBTDppbm90aWZ5IHF1ZXVlIG92ZXJmbG93OiBjc3luYzJp ZCB3YXMgdG8gc2xvdyB0byBoYW5kbGUgZXZlbnRzIik7DQotKwkJCX0NCi0rCQkJaWYoICRfLT5J Tl9JU0RJUikgew0KLSsJCQkJbXkgJHJlY3Vyc2U9MDsNCi0rCQkJCSMgV2Ugd2FudCB0byByZWN1 cnNlIG9ubHkgZm9yIG5ldywgcmVuYW1lZCBvciBkZWxldGVkIGRpcmVjdG9yaWVzDQotKwkJCQkk cmVjdXJzZT0kXy0+SU5fREVMRVRFfHwkXy0+SU5fQ1JFQVRFfHwkXy0+SU5fTU9WRURfVE98fCRf LT5JTl9NT1ZFRF9GUk9NOw0KLSsJCQkJZXZhbCB3YXRjaHRyZWUoJGlub3RpZnksJF8tPmZ1bGxu YW1lLElOX01PVkV8SU5fREVMRVRFfElOX0NMT1NFX1dSSVRFfElOX0FUVFJJQnxJTl9DUkVBVEUp IGlmICRfLT5JTl9DUkVBVEV8fCRfLT5JTl9NT1ZFRF9UTzsNCi0rCQkJCWlmKCRAKSB7DQotKwkJ CQkJbG9nZ2VyKExPR0lORk8sIiRAIik7DQotKwkJCQkJZXhpdCgzKTsNCi0rCQkJCX0NCi0rCQkJ CXB1c2goQGhpbnRmaWZvLHsgImZpbGVuYW1lIiA9PiAkXy0+ZnVsbG5hbWUgLCAicmVjdXJzZSIg PT4gJHJlY3Vyc2UgfSk7DQotKwkJCQlsb2dnZXIoTE9HREVCVUcsIk1haW46IGRpcjogIi4kXy0+ bWFzay4iICIuJHJlY3Vyc2UuIiAiLiRfLT5mdWxsbmFtZSk7DQotKwkJCX0gZWxzZSB7DQotKwkJ CQkjIEFjY3VtdWxhdGUgc2luZ2xlIGZpbGUgZXZlbnRzOg0KLSsJCQkJbmV4dCBpZihAaGludGZp Zm8gJiYgJGhpbnRmaWZvWy0xXS0+eyJmaWxlbmFtZSJ9IGVxICRfLT5mdWxsbmFtZSk7DQotKwkJ CQlwdXNoKEBoaW50Zmlmbyx7ICJmaWxlbmFtZSIgPT4gJF8tPmZ1bGxuYW1lICwgInJlY3Vyc2Ui ID0+IDAgfSk7DQotKwkJCQlsb2dnZXIoTE9HREVCVUcsIk1haW46IGZpbGU6ICIuJF8tPm1hc2ss IiAiLiRfLT5mdWxsbmFtZSk7DQotKwkJCX0NCi0rCQkJJGdsb2JhbGV2ZW50cysrOw0KLSsJCX0N Ci0rCX0NCi0rCWNoZWNrY2hpbGRyZW4oKTsNCi0rCWdpdmVoaW50cygpOw0KLSsJbG9nc3RhdHNs aW5lKCQ6OnN0YXRzY2hhbmdlcywkZ2xvYmFsZXZlbnRzKTsNCi0rfQ0KLWRpZmYgLS1naXQgYS9j b3B5Y2hlY2suc2ggYi9jb3B5Y2hlY2suc2gNCi1uZXcgZmlsZSBtb2RlIDEwMDc1NQ0KLWluZGV4 IDAwMDAwMDAuLmQ0ZmU3ZDUNCi0tLS0gL2Rldi9udWxsDQotKysrIGIvY29weWNoZWNrLnNoDQot QEAgLTAsMCArMSwzNyBAQA0KLSsjIS9iaW4vYmFzaA0KLSsNCi0rZXJyb3JzPTANCi0raWducmV2 PSJyMzY0Ig0KLSsNCi0rY2hlY2soKSB7DQotKwlpZiAhIHN2biBzdCAkMSB8IGdyZXAgLXEgJ14/ JzsgdGhlbg0KLSsJCXllYXJzPSIyMDAzIDIwMDQgMjAwNSAyMDA2IDIwMDcgMjAwOCINCi0rCQlm b3IgeSBpbiBgc3ZuIGxvZyAkMSB8IGdyZXAgJ15yWzAtOV0nIHwgZWdyZXAgLXYgIl4oJGlnbnJl dikiIHwgc2VkICdzLC4qIFwoMjAwLlwpLS4qLFwxLCcgfCBzb3J0IC11YA0KLSsJCWRvDQotKwkJ CXllYXJzPWBlY2hvICR5ZWFycyB8IHNlZCAicywkeSwsImANCi0rCQkJaWYgISBncmVwIC1xICJc Ki4qQ29weXJpZ2h0LiokeSIgJDE7IHRoZW4NCi0rCQkJCWVjaG8gIk1pc3NpbmcgJHkgaW4gJDEu Ig0KLSsJCQkJKCggZXJyb3JzKysgKSkNCi0rCQkJZmkNCi0rCQlkb25lDQotKwkJZm9yIHkgaW4g JHllYXJzDQotKwkJZG8NCi0rCQkJaWYgZ3JlcCAtcSAiXCouKkNvcHlyaWdodC4qJHkiICQxOyB0 aGVuDQotKwkJCQllY2hvICJCb2d1cyAkeSBpbiAkMS4iDQotKwkJCQkoKCBlcnJvcnMrKyApKQ0K LSsJCQlmaQ0KLSsJCWRvbmUNCi0rCWZpDQotK30NCi0rDQotK2ZvciBmIGluIGBncmVwIC1ybCAn XCouKkNvcHlyaWdodCcgLiB8IGdyZXAgLXYgJy9cLnN2bi8nYCA7IGRvDQotKwljaGVjayAkZg0K LStkb25lDQotKw0KLStpZiBbICRlcnJvcnMgLW5lIDAgXTsgdGhlbg0KLSsJZWNobyAiRm91bmQg JGVycm9ycyBlcnJvcnMuIg0KLSsJZXhpdCAxDQotK2ZpDQotKw0KLStleGl0IDANCi0rDQotZGlm ZiAtLWdpdCBhL2NzeW5jMi1wb3N0Z3Jlcy5zcWwgYi9jc3luYzItcG9zdGdyZXMuc3FsDQotbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCi1pbmRleCAwMDAwMDAwLi5jODk3NWMxDQotLS0tIC9kZXYvbnVs bA0KLSsrKyBiL2NzeW5jMi1wb3N0Z3Jlcy5zcWwNCi1AQCAtMCwwICsxLDU2IEBADQotKy0tDQot Ky0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgdGFibGUgYWN0aW9uDQotKy0tDQotKw0KLStEUk9QIFRB QkxFIElGIEVYSVNUUyBhY3Rpb247DQotK0NSRUFURSBUQUJMRSBhY3Rpb24gKA0KLSsgIGZpbGVu YW1lIHZhcmNoYXIoMjU1KSBERUZBVUxUIE5VTEwsDQotKyAgY29tbWFuZCB0ZXh0LA0KLSsgIGxv Z2ZpbGUgdGV4dCwNCi0rICBVTklRVUUgKGZpbGVuYW1lLGNvbW1hbmQpDQotKyk7DQotKw0KLSst LQ0KLSstLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHRhYmxlIGRpcnR5DQotKy0tDQotKw0KLStEUk9Q IFRBQkxFIElGIEVYSVNUUyBkaXJ0eTsNCi0rQ1JFQVRFIFRBQkxFIGRpcnR5ICgNCi0rICBmaWxl bmFtZSB2YXJjaGFyKDIwMCkgREVGQVVMVCBOVUxMLA0KLSsgIGZvcmNlZCBpbnQgREVGQVVMVCBO VUxMLA0KLSsgIG15bmFtZSB2YXJjaGFyKDEwMCkgREVGQVVMVCBOVUxMLA0KLSsgIHBlZXJuYW1l IHZhcmNoYXIoMTAwKSBERUZBVUxUIE5VTEwsDQotKyAgVU5JUVVFIChmaWxlbmFtZSxwZWVybmFt ZSkNCi0rKTsNCi0rDQotKy0tDQotKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgdGFibGUgZmlsZQ0K LSstLQ0KLSsNCi0rRFJPUCBUQUJMRSBJRiBFWElTVFMgZmlsZTsNCi0rQ1JFQVRFIFRBQkxFIGZp bGUgKA0KLSsgIGZpbGVuYW1lIHZhcmNoYXIoMjAwKSBERUZBVUxUIE5VTEwsDQotKyAgY2hlY2t0 eHQgdmFyY2hhcigyMDApIERFRkFVTFQgTlVMTCwNCi0rICBVTklRVUUgKGZpbGVuYW1lKQ0KLSsp Ow0KLSsNCi0rLS0NCi0rLS0gVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBoaW50DQotKy0tDQot Kw0KLStEUk9QIFRBQkxFIElGIEVYSVNUUyBoaW50Ow0KLStDUkVBVEUgVEFCTEUgaGludCAoDQot KyAgZmlsZW5hbWUgdmFyY2hhcigyNTUpIERFRkFVTFQgTlVMTCwNCi0rICByZWN1cnNpdmUgaW50 IERFRkFVTFQgTlVMTA0KLSspOw0KLSsNCi0rLS0NCi0rLS0gVGFibGUgc3RydWN0dXJlIGZvciB0 YWJsZSB4NTA5X2NlcnQNCi0rLS0NCi0rDQotK0RST1AgVEFCTEUgSUYgRVhJU1RTIHg1MDlfY2Vy dDsNCi0rQ1JFQVRFIFRBQkxFIHg1MDlfY2VydCAoDQotKyAgcGVlcm5hbWUgdmFyY2hhcigyNTUp IERFRkFVTFQgTlVMTCwNCi0rICBjZXJ0ZGF0YSB2YXJjaGFyKDI1NSkgREVGQVVMVCBOVUxMLA0K LSsgIFVOSVFVRSAocGVlcm5hbWUpDQotKyk7DQotZGlmZiAtLWdpdCBhL2NzeW5jMi5jIGIvY3N5 bmMyLmMNCi1pbmRleCA4OGZlZmEyLi44ODliZTA1IDEwMDY0NA0KLS0tLSBhL2NzeW5jMi5jDQot KysrIGIvY3N5bmMyLmMNCi1AQCAtMzYsMTggKzM2LDI1IEBADQotICNpbmNsdWRlIDxlcnJuby5o Pg0KLSAjaW5jbHVkZSA8c2lnbmFsLmg+DQotICNpbmNsdWRlIDxjdHlwZS5oPg0KLSsjaW5jbHVk ZSA8c3lzbG9nLmg+DQotKyNpbmNsdWRlICJkYl9hcGkuaCINCi0rI2luY2x1ZGUgPG5ldGRiLmg+ DQotIA0KLSAjaWZkZWYgUkVBTF9EQkRJUg0KLSAjICB1bmRlZiBEQkRJUg0KLSAjICBkZWZpbmUg REJESVIgUkVBTF9EQkRJUg0KLSAjZW5kaWYNCi0gDQotLXN0YXRpYyBjaGFyICpmaWxlX2RhdGFi YXNlID0gMDsNCi0rY2hhciAqY3N5bmNfZGF0YWJhc2UgPSAwOw0KLSsNCi0raW50IGRiX3R5cGUg PSBEQl9TUUxJVEUzOw0KLSsNCi0gc3RhdGljIGNoYXIgKmZpbGVfY29uZmlnID0gMDsNCi0gc3Rh dGljIGNoYXIgKmRiZGlyID0gREJESVI7DQotIGNoYXIgKmNmZ25hbWUgPSAiIjsNCi0gDQotIGNo YXIgbXlob3N0bmFtZVsyNTZdID0gIiI7DQotK2NoYXIgKmNzeW5jX3BvcnQgPSAiMzA4NjUiOw0K LSBjaGFyICphY3RpdmVfZ3JvdXBsaXN0ID0gMDsNCi0gY2hhciAqYWN0aXZlX3BlZXJsaXN0ID0g MDsNCi0gDQotQEAgLTU3LDExICs2NCwxMSBAQCBleHRlcm4gRklMRSAqeXlpbjsNCi0gaW50IGNz eW5jX2Vycm9yX2NvdW50ID0gMDsNCi0gaW50IGNzeW5jX2RlYnVnX2xldmVsID0gMDsNCi0gRklM RSAqY3N5bmNfZGVidWdfb3V0ID0gMDsNCi0raW50IGNzeW5jX3N5c2xvZyA9IDA7DQotIA0KLSBp bnQgY3N5bmNfc2VydmVyX2NoaWxkX3BpZCA9IDA7DQotIGludCBjc3luY190aW1lc3RhbXBzID0g MDsNCi0gaW50IGNzeW5jX25ld19mb3JjZSA9IDA7DQotLWludCBjc3luY19wb3J0ID0gMzA4NjU7 DQotIA0KLSBpbnQgY3N5bmNfZHVtcF9kaXJfZmQgPSAtMTsNCi0gDQotQEAgLTkzLDYgKzEwMCwx MSBAQCB2b2lkIGhlbHAoY2hhciAqY21kKQ0KLSBQQUNLQUdFX1NUUklORyAiIC0gY2x1c3RlciBz eW5jaHJvbml6YXRpb24gdG9vbCwgMm5kIGdlbmVyYXRpb25cbiINCi0gIkxJTkJJVCBJbmZvcm1h dGlvbiBUZWNobm9sb2dpZXMgR21iSCA8aHR0cDovL3d3dy5saW5iaXQuY29tPlxuIg0KLSAiQ29w eXJpZ2h0IChDKSAyMDA0LCAyMDA1ICBDbGlmZm9yZCBXb2xmIDxjbGlmZm9yZEBjbGlmZm9yZC5h dD5cbiINCi0rIkNvcHlyaWdodCAoQykgMjAxMCAgRGVubmlzIFNjaGFmcm90aCA8ZGVubmlzQHNj aGFmcm90aC5jb20+XG4iDQotKyJDb3B5cmlnaHQgKEMpIDIwMTAgIEpvaGFubmVzIFRob21hIDxq b2hhbm5lcy50aG9tYUBnbXguYXQ+XG4iDQotKyJcbiINCi0rIlZlcnNpb246ICIgQ1NZTkMyX1ZF UlNJT04gIlxuIg0KLSsiXG4iDQotICJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwuXG4iDQotICJcbiINCi0gIlVzYWdlOiAlcyBbLXYu Ll0gWy1DIGNvbmZpZy1uYW1lXSBcXFxuIg0KLUBAIC0xMDMsNyArMTE1LDcgQEAgUEFDS0FHRV9T VFJJTkcgIiAtIGNsdXN0ZXIgc3luY2hyb25pemF0aW9uIHRvb2wsIDJuZCBnZW5lcmF0aW9uXG4i DQotICIJLWMgWy1yXSBmaWxlLi4JCUNoZWNrIGZpbGVzIGFuZCBtYXliZSBhZGQgdG8gZGlydHkg ZGJcbiINCi0gIgktdSBbLWRdIFstcl0gZmlsZS4uCVVwZGF0ZXMgZmlsZXMgaWYgbGlzdGVkIGlu IGRpcnR5IGRiXG4iDQotICIJLW8gWy1yXSBmaWxlLi4JCUNyZWF0ZSBsaXN0IG9mIGZpbGVzIGlu IGNvbXBhcmUtbW9kZVxuIg0KLS0iCS1mIFstcl0gZmlsZS4uCQlGb3JjZSB0aGlzIGZpbGUgaW4g c3luYyAocmVzb2x2ZSBjb25mbGljdClcbiINCi0rIgktZiBbLXJdIGZpbGUuLgkJRm9yY2UgZmls ZXMgdG8gd2luIG5leHQgY29uZmxpY3QgcmVzb2x1dGlvblxuIg0KLSAiCS1tIGZpbGUuLgkJTWFy ayBmaWxlcyBpbiBkYXRhYmFzZSBhcyBkaXJ0eVxuIg0KLSAiXG4iDQotICJTaW1wbGUgbW9kZTpc biINCi1AQCAtMTYxLDExICsxNzMsMTEgQEAgUEFDS0FHRV9TVFJJTkcgIiAtIGNsdXN0ZXIgc3lu Y2hyb25pemF0aW9uIHRvb2wsIDJuZCBnZW5lcmF0aW9uXG4iDQotICIJLVUJRG9uJ3QgbWFyayBh bGwgb3RoZXIgcGVlcnMgYXMgZGlydHkgd2hlbiBkb2luZyBhIC1USSBydW4uXG4iDQotICJcbiIN Ci0gIgktRyBHcm91cDEsR3JvdXAyLEdyb3VwMywuLi5cbiINCi0tIgkJT25seSB1c2UgdGhpcyBn cm91cHMgZnJvbSBjb25maWctZmlsZS5cbiINCi0rIgkJT25seSB1c2UgdGhlc2UgZ3JvdXBzIGZy b20gY29uZmlnLWZpbGUuXG4iDQotICJcbiINCi0gIgktUCBwZWVyMSxwZWVyMSwuLi5cbiINCi0t IgkJT25seSB1cGRhdGUgdGhpcyBwZWVycyAoc3RpbGwgbWFyayBhbGwgYXMgZGlydHkpLlxuIg0K LS0iCQlPbmx5IHNob3cgZmlsZXMgZm9yIHRoaXMgcGVlcnMgaW4gLW8gKGNvbXBhcmUpIG1vZGUu XG4iDQotKyIJCU9ubHkgdXBkYXRlIHRoZXNlIHBlZXJzIChzdGlsbCBtYXJrIGFsbCBhcyBkaXJ0 eSkuXG4iDQotKyIJCU9ubHkgc2hvdyBmaWxlcyBmb3IgdGhlc2UgcGVlcnMgaW4gLW8gKGNvbXBh cmUpIG1vZGUuXG4iDQotICJcbiINCi0gIgktRglBZGQgbmV3IGVudHJpZXMgdG8gZGlydHkgZGF0 YWJhc2Ugd2l0aCBmb3JjZSBmbGFnIHNldC5cbiINCi0gIlxuIg0KLUBAIC0xNzgsNiArMTkwLDE1 IEBAIFBBQ0tBR0VfU1RSSU5HICIgLSBjbHVzdGVyIHN5bmNocm9uaXphdGlvbiB0b29sLCAybmQg Z2VuZXJhdGlvblxuIg0KLSAiCQlmb3VuZCB0byB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRv ciAod2hlbiBkb2luZyBhIC1jIHJ1bikuXG4iDQotICIJCVRoZSBkaXJlY3RvcnkgbmFtZXMgaW4g dGhpcyBvdXRwdXQgYXJlIHplcm8tdGVybWluYXRlZC5cbiINCi0gIlxuIg0KLSsiRGF0YWJhc2Ug c3dpdGNoZXM6XG4iDQotKyJcbiINCi0rIgktRCBkYXRhYmFzZS1kaXJcbiINCi0rIgkJVXNlIHNx bGl0ZSBkYXRhYmFzZSBpbiBkYXRhYmFzZSBkaXIgKGRlZmF1bHQ6IC92YXIvbGliL2NzeW5jMilc biINCi0rIlxuIg0KLSsiCS1hIG15c3FsLXVybFxuIg0KLSsiCQlVc2UgbXlzcWwgZGF0YWJhc2Ug aW4gVVJMOlxuIg0KLSsiCQlteXNxbDovL1s8dXNlcj46PHBhc3N3b3JkPkBdPGhvc3RuYW1lPi88 ZGF0YWJhc2U+XG4iDQotKyJcbiINCi0gIkNyZWF0aW5nIGtleSBmaWxlOlxuIg0KLSAiCSVzIC1r IGZpbGVuYW1lXG4iDQotICJcbiINCi1AQCAtMTkwLDY5ICsyMTEsMTI0IEBAIFBBQ0tBR0VfU1RS SU5HICIgLSBjbHVzdGVyIHN5bmNocm9uaXphdGlvbiB0b29sLCAybmQgZ2VuZXJhdGlvblxuIg0K LSBpbnQgY3JlYXRlX2tleWZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpDQotIHsNCi0gCWludCBm ZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZfE9fQ1JFQVR8T19FWENMLCAwNjAwKTsNCi0tCWlu dCByYW5kID0gb3BlbigiL2Rldi9yYW5kb20iLCBPX1JET05MWSk7DQotKwlpbnQgcmFuZCA9IG9w ZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsNCi0gCWNoYXIgbWF0cml4W10gPSAiQUJDREVG R0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODku XyI7DQotIAl1bnNpZ25lZCBjaGFyIG47DQotIAlpbnQgaTsNCi0tDQotKwlpbnQgcmM7DQotIAlh c3NlcnQoc2l6ZW9mKG1hdHJpeCkgPT0gNjUpOw0KLSAJaWYgKCBmZCA9PSAtMSApIHsNCi0gCQlm cHJpbnRmKHN0ZGVyciwgIkNhbid0IGNyZWF0ZSBrZXkgZmlsZTogJXNcbiIsIHN0cmVycm9yKGVy cm5vKSk7DQotIAkJcmV0dXJuIDE7DQotIAl9DQotIAlpZiAoIHJhbmQgPT0gLTEgKSB7DQotLQkJ ZnByaW50ZihzdGRlcnIsICJDYW4ndCBvcGVuIC9kZXYvcmFuZG9tOiAlc1xuIiwgc3RyZXJyb3Io ZXJybm8pKTsNCi0rCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG9wZW4gL2Rldi91cmFuZG9tOiAl c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsNCi0gCQlyZXR1cm4gMTsNCi0gCX0NCi0gCWZvciAoaT0w OyBpPDY0OyBpKyspIHsNCi0tCQlyZWFkKHJhbmQsICZuLCAxKTsNCi0tCQl3cml0ZShmZCwgbWF0 cml4KyhuJjYzKSwgMSk7DQotKwkJcmMgPSByZWFkKHJhbmQsICZuLCAxKTsNCi0rCQlyYyA9IHdy aXRlKGZkLCBtYXRyaXgrKG4mNjMpLCAxKTsNCi0gCX0NCi0tCXdyaXRlKGZkLCAiXG4iLCAxKTsN Ci0rCXJjID0gd3JpdGUoZmQsICJcbiIsIDEpOw0KLSAJY2xvc2UocmFuZCk7DQotIAljbG9zZShm ZCk7DQotIAlyZXR1cm4gMDsNCi0gfQ0KLSANCi0tc3RhdGljIGludCBjc3luY19zZXJ2ZXJfbG9v cChpbnQgc2luZ2xlX2Nvbm5lY3QpDQotK3N0YXRpYyBpbnQgY3N5bmNfc2VydmVyX2JpbmQodm9p ZCkNCi0gew0KLSAJc3RydWN0IGxpbmdlciBzbCA9IHsgMSwgNSB9Ow0KLS0Jc3RydWN0IHNvY2th ZGRyX2luIGFkZHI7DQotLQlpbnQgb24gPSAxOw0KLSsJc3RydWN0IGFkZHJpbmZvIGhpbnRzOw0K LSsJc3RydWN0IGFkZHJpbmZvICpyZXN1bHQsICpycDsNCi0rCWludCBzYXZlX2Vycm5vOw0KLSsJ aW50IHNmZCwgcywgb24gPSAxOw0KLSsJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKHN0cnVjdCBh ZGRyaW5mbykpOw0KLSsJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOwkvKiBBbGxvdyBJUHY0 IG9yIElQdjYgKi8NCi0rCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07DQotKwloaW50 cy5haV9mbGFncyA9IEFJX1BBU1NJVkU7DQotKw0KLSsJcyA9IGdldGFkZHJpbmZvKE5VTEwsIGNz eW5jX3BvcnQsICZoaW50cywgJnJlc3VsdCk7DQotKwlpZiAocyAhPSAwKSB7DQotKwkJY3N5bmNf ZGVidWcoMSwgIkNhbm5vdCBwcmVwYXJlIGxvY2FsIHNvY2tldCwgZ2V0YWRkcmluZm86ICVzXG4i LCBnYWlfc3RyZXJyb3IocykpOw0KLSsJCXJldHVybiAtMTsNCi0rCX0NCi0gDQotLQlpbnQgbGlz dGVuZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0KLS0JaWYgKGxpc3RlbmZk IDwgMCkgZ290byBlcnJvcjsNCi0rCS8qIGdldGFkZHJpbmZvKCkgcmV0dXJucyBhIGxpc3Qgb2Yg YWRkcmVzcyBzdHJ1Y3R1cmVzLg0KLSsJICAgVHJ5IGVhY2ggYWRkcmVzcyB1bnRpbCB3ZSBzdWNj ZXNzZnVsbHkgYmluZCgyKS4NCi0rCSAgIElmIHNvY2tldCgyKSAob3IgYmluZCgyKSkgZmFpbHMs IHdlIChjbG9zZSB0aGUgc29ja2V0DQotKwkgICBhbmQpIHRyeSB0aGUgbmV4dCBhZGRyZXNzLiAq Lw0KLSsNCi0rCWZvciAocnAgPSByZXN1bHQ7IHJwICE9IE5VTEw7IHJwID0gcnAtPmFpX25leHQp IHsNCi0rCQlzZmQgPSBzb2NrZXQocnAtPmFpX2ZhbWlseSwgcnAtPmFpX3NvY2t0eXBlLCBycC0+ YWlfcHJvdG9jb2wpOw0KLSsJCWlmIChzZmQgPT0gLTEpDQotKwkJCWNvbnRpbnVlOw0KLSsNCi0r CQlpZiAoc2V0c29ja29wdChzZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uLCAoc29j a2xlbl90KSBzaXplb2Yob24pKSA8IDApDQotKwkJCWdvdG8gZXJyb3I7DQotKwkJaWYgKHNldHNv Y2tvcHQoc2ZkLCBTT0xfU09DS0VULCBTT19MSU5HRVIsICZzbCwgKHNvY2tsZW5fdCkgc2l6ZW9m KHNsKSkgPCAwKQ0KLSsJCQlnb3RvIGVycm9yOw0KLSsJCWlmIChzZXRzb2Nrb3B0KHNmZCwgSVBQ Uk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmb24sIChzb2NrbGVuX3QpIHNpemVvZihvbikpIDwgMCkN Ci0rCQkJZ290byBlcnJvcjsNCi0gDQotLQliemVybygmYWRkciwgc2l6ZW9mKGFkZHIpKTsNCi0t CWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQotLQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0 b25sKElOQUREUl9BTlkpOw0KLS0JYWRkci5zaW5fcG9ydCA9IGh0b25zKGNzeW5jX3BvcnQpOw0K LSsJCWlmIChiaW5kKHNmZCwgcnAtPmFpX2FkZHIsIHJwLT5haV9hZGRybGVuKSA9PSAwKQ0KLSsJ CQlicmVhazsJLyogU3VjY2VzcyAqLw0KLSsNCi0rCQljbG9zZShzZmQpOw0KLSsJfQ0KLSANCi0t CWlmICggc2V0c29ja29wdChsaXN0ZW5mZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb24s IChzb2NrbGVuX3QpIHNpemVvZihvbikpIDwgMCApIGdvdG8gZXJyb3I7DQotLQlpZiAoIHNldHNv Y2tvcHQobGlzdGVuZmQsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwgJnNsLCAoc29ja2xlbl90KSBz aXplb2Yoc2wpKSA8IDAgKSBnb3RvIGVycm9yOw0KLS0JaWYgKCBzZXRzb2Nrb3B0KGxpc3RlbmZk LCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICZvbiwgKHNvY2tsZW5fdCkgc2l6ZW9mKG9uKSkg PCAwICkgZ290byBlcnJvcjsNCi0rCWZyZWVhZGRyaW5mbyhyZXN1bHQpOwkvKiBObyBsb25nZXIg bmVlZGVkICovDQotIA0KLS0JaWYgKCBiaW5kKGxpc3RlbmZkLCAoc3RydWN0IHNvY2thZGRyICop ICZhZGRyLCBzaXplb2YoYWRkcikpIDwgMCApIGdvdG8gZXJyb3I7DQotLQlpZiAoIGxpc3Rlbihs aXN0ZW5mZCwgNSkgPCAwICkgZ290byBlcnJvcjsNCi0rCWlmIChycCA9PSBOVUxMKQkvKiBObyBh ZGRyZXNzIHN1Y2NlZWRlZCAqLw0KLSsJCXJldHVybiAtMTsNCi0rDQotKwlyZXR1cm4gc2ZkOw0K LSsNCi0rZXJyb3I6DQotKwlzYXZlX2Vycm5vID0gZXJybm87DQotKwljbG9zZShzZmQpOw0KLSsJ ZXJybm8gPSBzYXZlX2Vycm5vOw0KLSsJcmV0dXJuIC0xOw0KLSt9DQotIA0KLStzdGF0aWMgaW50 IGNzeW5jX3NlcnZlcl9sb29wKGludCBzaW5nbGVfY29ubmVjdCkNCi0rew0KLSsJdW5pb24gew0K LSsJCXN0cnVjdCBzb2NrYWRkciBzYTsNCi0rCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FfaW47DQot KwkJc3RydWN0IHNvY2thZGRyX2luNiBzYV9pbjY7DQotKwkJc3RydWN0IHNvY2thZGRyX3N0b3Jh Z2Ugc3M7DQotKwl9IGFkZHI7DQotKwlpbnQgbGlzdGVuZmQgPSBjc3luY19zZXJ2ZXJfYmluZCgp Ow0KLSsJaWYgKGxpc3RlbmZkIDwgMCkgZ290byBlcnJvcjsNCi0rDQotKwlpZiAobGlzdGVuKGxp c3RlbmZkLCA1KSA8IDApIGdvdG8gZXJyb3I7DQotKw0KLSsJLyogd2Ugd2FudCB0byAiY2xlYW5s eSIgc2h1dGRvd24gaWYgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCB1bmV4cGVjdGVkbHkgKi8NCi0g CXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsNCi0rCS8qIHNlcnZlciBpcyBub3QgaW50ZXJlc3Rl ZCBpbiBpdHMgY2hpbGRzLCBwcmV2ZW50IHpvbWJpZXMgKi8NCi0gCXNpZ25hbChTSUdDSExELCBT SUdfSUdOKTsNCi0gDQotIAlwcmludGYoIkNzeW5jMiBkYWVtb24gcnVubmluZy4gV2FpdGluZyBm b3IgY29ubmVjdGlvbnMuXG4iKTsNCi0gDQotIAl3aGlsZSAoMSkgew0KLS0JCWludCBhZGRybGVu ID0gc2l6ZW9mKGFkZHIpOw0KLS0JCWludCBjb25uID0gYWNjZXB0KGxpc3RlbmZkLCAoc3RydWN0 IHNvY2thZGRyICopICZhZGRyLCAmYWRkcmxlbik7DQotKwkJdW5zaWduZWQgYWRkcmxlbiA9IHNp emVvZihhZGRyKTsNCi0rCQlpbnQgY29ubiA9IGFjY2VwdChsaXN0ZW5mZCwgJmFkZHIuc2EsICZh ZGRybGVuKTsNCi0gCQlpZiAoY29ubiA8IDApIGdvdG8gZXJyb3I7DQotIA0KLSAJCWZmbHVzaChz dGRvdXQpOyBmZmx1c2goc3RkZXJyKTsNCi0gDQotIAkJaWYgKHNpbmdsZV9jb25uZWN0IHx8ICFm b3JrKCkpIHsNCi0rCQkJY2hhciBoYnVmW05JX01BWEhPU1RdLCBzYnVmW05JX01BWFNFUlZdOw0K LSsJCQkvKiBuZWVkIHRvIHJlc3RvcmUgZGVmYXVsdCBTSUdDSExEIGhhbmRsZXIgaW4gdGhlIHNl c3Npb24sDQotKwkJCSAqIGFzIHdlIG1heSBuZWVkIHRvIHdhaXQgb24gdGhlbSBpbiBhY3Rpb24u YyAqLw0KLSsJCQlzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7DQotIAkJCWNzeW5jX3NlcnZlcl9j aGlsZF9waWQgPSBnZXRwaWQoKTsNCi0tCQkJZnByaW50ZihzdGRlcnIsICI8JWQ+IE5ldyBjb25u ZWN0aW9uIGZyb20gJXM6JXUuXG4iLA0KLS0JCQkJY3N5bmNfc2VydmVyX2NoaWxkX3BpZCwNCi0t CQkJCWluZXRfbnRvYShhZGRyLnNpbl9hZGRyKSwNCi0tCQkJCW50b2hzKGFkZHIuc2luX3BvcnQp KTsNCi0rCQkJaWYgKGdldG5hbWVpbmZvKCZhZGRyLnNhLCBhZGRybGVuLA0KLSsJCQkJCWhidWYs IHNpemVvZihoYnVmKSwgc2J1Ziwgc2l6ZW9mKHNidWYpLA0KLSsJCQkJCU5JX05VTUVSSUNIT1NU IHwgTklfTlVNRVJJQ1NFUlYpICE9IDApDQotKwkJCQlnb3RvIGVycm9yOw0KLSsJCQlmcHJpbnRm KHN0ZGVyciwgIjwlZD4gTmV3IGNvbm5lY3Rpb24gZnJvbSAlczolcy5cbiIsDQotKwkJCQljc3lu Y19zZXJ2ZXJfY2hpbGRfcGlkLCBoYnVmLCBzYnVmKTsNCi0gCQkJZmZsdXNoKHN0ZGVycik7DQot IA0KLSAJCQlkdXAyKGNvbm4sIDApOw0KLUBAIC0yOTMsOCArMzY5LDEzIEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqIGFyZ3YpDQotIAkJcmV0dXJuIDE7DQotIAl9DQotIA0KLS0Jd2hpbGUg KCAob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJXOnM6RnRwOkc6UDpDOkQ6TjpIQkFJWFVMU1RN UnZoY3VvaW1meHJkIikpICE9IC0xICkgew0KLSsJd2hpbGUgKCAob3B0ID0gZ2V0b3B0KGFyZ2Ms IGFyZ3YsICJhOlc6czpGdHA6RzpQOkM6RDpOOkhCQUlYVUxsU1RNUnZoY3VvaW1meHJkIikpICE9 IC0xICkgew0KLSsNCi0gCQlzd2l0Y2ggKG9wdCkgew0KLSsJCSAgICAgICAgY2FzZSAnYSc6DQot KwkJCSAgICAgICAgY3N5bmNfZGF0YWJhc2UgPSBvcHRhcmc7DQotKwkJCQlkYl90eXBlID0gREJf TVlTUUw7DQotKwkJCQlicmVhazsNCi0gCQkJY2FzZSAnVyc6DQotIAkJCQljc3luY19kdW1wX2Rp cl9mZCA9IGF0b2kob3B0YXJnKTsNCi0gCQkJCWlmICh3cml0ZShjc3luY19kdW1wX2Rpcl9mZCwg MCwgMCkgPCAwKQ0KLUBAIC0zMTQsNyArMzk1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KiogYXJndikNCi0gCQkJCWNzeW5jX3RpbWVzdGFtcHMgPSAxOw0KLSAJCQkJYnJlYWs7DQotIAkJ CWNhc2UgJ3AnOg0KLS0JCQkJY3N5bmNfcG9ydCA9IGF0b2kob3B0YXJnKTsNCi0rCQkJCWNzeW5j X3BvcnQgPSBzdHJkdXAob3B0YXJnKTsNCi0gCQkJCWJyZWFrOw0KLSAJCQljYXNlICdHJzoNCi0g CQkJCWFjdGl2ZV9ncm91cGxpc3QgPSBvcHRhcmc7DQotQEAgLTM0OSw2ICs0MzAsMTAgQEAgaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikNCi0gCQkJY2FzZSAndic6DQotIAkJCQljc3lu Y19kZWJ1Z19sZXZlbCsrOw0KLSAJCQkJYnJlYWs7DQotKwkJCWNhc2UgJ2wnOg0KLSsJCQkJY3N5 bmNfc3lzbG9nID0gMTsNCi0rCQkJCW9wZW5sb2coImNzeW5jMiIsIExPR19PREVMQVksIExPR19M T0NBTDApOw0KLSsJCQkJYnJlYWs7DQotIAkJCWNhc2UgJ2gnOg0KLSAJCQkJaWYgKCBtb2RlICE9 IE1PREVfTk9ORSApIGhlbHAoYXJndlswXSk7DQotIAkJCQltb2RlID0gTU9ERV9ISU5UOw0KLUBA IC00NTAsNiArNTM1LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpDQotIAlp ZiAoIG1vZGUgPT0gTU9ERV9OT05FICkNCi0gCQloZWxwKGFyZ3ZbMF0pOw0KLSANCi0rCS8qIFNv bWUgaW5ldGQgY29ubmVjdCBzdGRlcnIgdG8gc3Rkb3V0LiAgVGhlIGRlYnVnIGxldmVsIG1lc3Nh Z2VzIG9uDQotKwkgKiBzdGRlcnIgd291bGQgY29uZnVzZSB0aGUgY3N5bmMyIHByb3RvY29sLiBM b2cgdG8gc3lzbG9nIGluc3RlYWQuICovDQotKwlpZiAoIG1vZGUgPT0gTU9ERV9JTkVURCAmJiBj c3luY19kZWJ1Z19sZXZlbCAmJiAhY3N5bmNfc3lzbG9nICkgew0KLSsJCWNzeW5jX3N5c2xvZyA9 IDE7DQotKwkJb3BlbmxvZygiY3N5bmMyIiwgTE9HX09ERUxBWSwgTE9HX0xPQ0FMMCk7DQotKwl9 DQotKw0KLSAJaWYgKCAqbXlob3N0bmFtZSA9PSAwICkgew0KLSAJCWdldGhvc3RuYW1lKG15aG9z dG5hbWUsIDI1Nik7DQotIAkJbXlob3N0bmFtZVsyNTVdID0gMDsNCi1AQCAtNDgyLDcgKzU3NCw3 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpDQotIAkJcGFyYSA9IGNtZCA/IHN0 cnRvaygwLCAiXHQgXHJcbiIpIDogMDsNCi0gDQotIAkJaWYgKGNtZCAmJiAhc3RyY2FzZWNtcChj bWQsICJzc2wiKSkgew0KLS0jaWZkZWYgSEFWRV9MSUJHTlVUTFNfT1BFTlNTTA0KLSsjaWZkZWYg SEFWRV9MSUJHTlVUTFMNCi0gCQkJY29ubl9wcmludGYoIk9LIChhY3RpdmF0aW5nX3NzbCkuXG4i KTsNCi0gCQkJY29ubl9hY3RpdmF0ZV9zc2woMSk7DQotIA0KLUBAIC01MDMsMTAgKzU5NSw4IEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpDQotIAkJaWYgKHBhcmEpDQotIAkJCWNm Z25hbWUgPSBzdHJkdXAodXJsX2RlY29kZShwYXJhKSk7DQotIAl9DQotLQ0KLSAJaWYgKCAhKmNm Z25hbWUgKSB7DQotLQkJYXNwcmludGYoJmZpbGVfZGF0YWJhc2UsICIlcy8lcy5kYiIsIGRiZGly LCBteWhvc3RuYW1lKTsNCi0tCQlhc3ByaW50ZigmZmlsZV9jb25maWcsIEVUQ0RJUiAiL2NzeW5j Mi5jZmciKTsNCi0rCSAgICAgQVNQUklOVEYoJmZpbGVfY29uZmlnLCBFVENESVIgIi9jc3luYzIu Y2ZnIik7DQotIAl9IGVsc2Ugew0KLSAJCWludCBpOw0KLSANCi1AQCAtNTE4LDE0ICs2MDgsMTAg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikNCi0gCQkJCXJldHVybiBtb2RlICE9 IE1PREVfSU5FVEQ7DQotIAkJCX0NCi0gDQotLQkJYXNwcmludGYoJmZpbGVfZGF0YWJhc2UsICIl cy8lc18lcy5kYiIsIGRiZGlyLCBteWhvc3RuYW1lLCBjZmduYW1lKTsNCi0tCQlhc3ByaW50Zigm ZmlsZV9jb25maWcsIEVUQ0RJUiAiL2NzeW5jMl8lcy5jZmciLCBjZmduYW1lKTsNCi0rCQlBU1BS SU5URigmZmlsZV9jb25maWcsIEVUQ0RJUiAiL2NzeW5jMl8lcy5jZmciLCBjZmduYW1lKTsNCi0g CX0NCi0gDQotLQljc3luY19kZWJ1ZygyLCAiTXkgaG9zdG5hbWUgaXMgJXMuXG4iLCBteWhvc3Ru YW1lKTsNCi0tCWNzeW5jX2RlYnVnKDIsICJEYXRhYmFzZS1GaWxlOiAlc1xuIiwgZmlsZV9kYXRh YmFzZSk7DQotIAljc3luY19kZWJ1ZygyLCAiQ29uZmlnLUZpbGU6ICAgJXNcbiIsIGZpbGVfY29u ZmlnKTsNCi0tDQotIAl5eWluID0gZm9wZW4oZmlsZV9jb25maWcsICJyIik7DQotIAlpZiAoICF5 eWluICkNCi0gCQljc3luY19mYXRhbCgiQ2FuIG5vdCBvcGVuIGNvbmZpZyBmaWxlIGAlcyc6ICVz XG4iLA0KLUBAIC01MzMsNiArNjE5LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFy Z3YpDQotIAl5eXBhcnNlKCk7DQotIAlmY2xvc2UoeXlpbik7DQotIA0KLSsJaWYgKCFjc3luY19k YXRhYmFzZSkNCi0rCQljc3luY19kYXRhYmFzZSA9IGRiX2RlZmF1bHRfZGF0YWJhc2UoZGJkaXIs IG15aG9zdG5hbWUsIGNmZ25hbWUpOw0KLSsNCi0rCWNzeW5jX2RlYnVnKDIsICJNeSBob3N0bmFt ZSBpcyAlcy5cbiIsIG15aG9zdG5hbWUpOw0KLSsJY3N5bmNfZGVidWcoMiwgIkRhdGFiYXNlLUZp bGU6ICVzXG4iLCBjc3luY19kYXRhYmFzZSk7DQotKw0KLSAJew0KLSAJCWNvbnN0IHN0cnVjdCBj c3luY19ncm91cCAqZzsNCi0gCQlmb3IgKGc9Y3N5bmNfZ3JvdXA7IGc7IGc9Zy0+bmV4dCkNCi1A QCAtNTQxLDcgKzYzMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpDQotIGZv dW5kX2FfZ3JvdXA6Ow0KLSAJfQ0KLSANCi0tCWNzeW5jX2RiX29wZW4oZmlsZV9kYXRhYmFzZSk7 DQotKwljc3luY19kYl9vcGVuKGNzeW5jX2RhdGFiYXNlKTsNCi0gDQotIAlmb3IgKGk9b3B0aW5k OyBpIDwgYXJnYzsgaSsrKQ0KLSAJCW9uX2N5Z3dpbl9sb3dlcmNhc2UoYXJndltpXSk7DQotQEAg LTU4Miw4ICs2NzQsOCBAQCBmb3VuZF9hX2dyb3VwOjsNCi0gCQkJCVNRTF9CRUdJTigiQ2hlY2sg YWxsIGhpbnRzIiwNCi0gCQkJCQkiU0VMRUNUIGZpbGVuYW1lLCByZWN1cnNpdmUgRlJPTSBoaW50 IikNCi0gCQkJCXsNCi0tCQkJCQl0ZXh0bGlzdF9hZGQoJnRsLCB1cmxfZGVjb2RlKFNRTF9WWzBd KSwNCi0tCQkJCQkJCWF0b2koU1FMX1ZbMV0pKTsNCi0rCQkJCQl0ZXh0bGlzdF9hZGQoJnRsLCB1 cmxfZGVjb2RlKFNRTF9WKDApKSwNCi0rCQkJCQkJCWF0b2koU1FMX1YoMSkpKTsNCi0gCQkJCX0g U1FMX0VORDsNCi0gDQotIAkJCQlmb3IgKHQgPSB0bDsgdCAhPSAwOyB0ID0gdC0+bmV4dCkgew0K LUBAIC02NDIsNTEgKzczNCw1NiBAQCBmb3VuZF9hX2dyb3VwOjsNCi0gCQljYXNlIE1PREVfTUFS SzoNCi0gCQkJZm9yIChpPW9wdGluZDsgaSA8IGFyZ2M7IGkrKykgew0KLSAJCQkJY2hhciAqcmVh bG5hbWUgPSBnZXRyZWFsZm4oYXJndltpXSk7DQotKwkJCQljaGFyICpwZm5hbWU7DQotIAkJCQlj c3luY19jaGVja191c2VmdWxsbmVzcyhyZWFsbmFtZSwgcmVjdXJzaXZlKTsNCi0tCQkJCWNzeW5j X21hcmsocmVhbG5hbWUsIDAsIDApOw0KLSsJCQkJcGZuYW1lPXN0cmR1cChwcmVmaXhlbmNvZGUo cmVhbG5hbWUpKTsNCi0rCQkJCWNzeW5jX21hcmsocGZuYW1lLCAwLCAwKTsNCi0gDQotIAkJCQlp ZiAoIHJlY3Vyc2l2ZSApIHsNCi0gCQkJCQljaGFyICp3aGVyZV9yZWMgPSAiIjsNCi0gDQotIAkJ CQkJaWYgKCAhc3RyY21wKHJlYWxuYW1lLCAiLyIpICkNCi0tCQkJCQkJYXNwcmludGYoJndoZXJl X3JlYywgIm9yIDEiKTsNCi0rCQkJCQkJQVNQUklOVEYoJndoZXJlX3JlYywgIm9yIDE9MSIpOw0K LSAJCQkJCWVsc2UNCi0tCQkJCQkJYXNwcmludGYoJndoZXJlX3JlYywgIm9yIChmaWxlbmFtZSA+ ICclcy8nICINCi0tCQkJCQkJCSJhbmQgZmlsZW5hbWUgPCAnJXMwJykiLA0KLS0JCQkJCQkJdXJs X2VuY29kZShyZWFsbmFtZSksIHVybF9lbmNvZGUocmVhbG5hbWUpKTsNCi0rCQkJCQkJQVNQUklO VEYoJndoZXJlX3JlYywgIlVOSU9OIEFMTCBTRUxFQ1QgZmlsZW5hbWUgZnJvbSBmaWxlIHdoZXJl IGZpbGVuYW1lID4gJyVzLycgIg0KLSsJCQkJCQkJImFuZCBmaWxlbmFtZSA8ICclczAnIiwNCi0r CQkJCQkJCXVybF9lbmNvZGUocGZuYW1lKSwgdXJsX2VuY29kZShwZm5hbWUpKTsNCi0gDQotIAkJ CQkJU1FMX0JFR0lOKCJBZGRpbmcgZGlydHkgZW50cmllcyByZWN1cnNpdmVseSIsDQotIAkJCQkJ CSJTRUxFQ1QgZmlsZW5hbWUgRlJPTSBmaWxlIFdIRVJFIGZpbGVuYW1lID0gJyVzJyAlcyIsDQot LQkJCQkJCXVybF9lbmNvZGUocmVhbG5hbWUpLCB3aGVyZV9yZWMpDQotKwkJCQkJCXVybF9lbmNv ZGUocGZuYW1lKSwgd2hlcmVfcmVjKQ0KLSAJCQkJCXsNCi0tCQkJCQkJY2hhciAqZmlsZW5hbWUg PSBzdHJkdXAodXJsX2VuY29kZShTUUxfVlswXSkpOw0KLSsJCQkJCQljaGFyICpmaWxlbmFtZSA9 IHN0cmR1cCh1cmxfZGVjb2RlKFNRTF9WKDApKSk7DQotIAkJCQkJCWNzeW5jX21hcmsoZmlsZW5h bWUsIDAsIDApOw0KLSAJCQkJCQlmcmVlKGZpbGVuYW1lKTsNCi0gCQkJCQl9IFNRTF9FTkQ7DQot IAkJCQl9DQotKwkJCQlmcmVlKHBmbmFtZSk7DQotIAkJCX0NCi0gCQkJYnJlYWs7DQotIA0KLSAJ CWNhc2UgTU9ERV9GT1JDRToNCi0gCQkJZm9yIChpPW9wdGluZDsgaSA8IGFyZ2M7IGkrKykgew0K LSAJCQkJY2hhciAqcmVhbG5hbWUgPSBnZXRyZWFsZm4oYXJndltpXSk7DQotKwkJCQljaGFyICpw Zm5hbWUgPSBzdHJkdXAocHJlZml4ZW5jb2RlKHJlYWxuYW1lKSk7DQotIAkJCQljaGFyICp3aGVy ZV9yZWMgPSAiIjsNCi0gDQotIAkJCQlpZiAoIHJlY3Vyc2l2ZSApIHsNCi0gCQkJCQlpZiAoICFz dHJjbXAocmVhbG5hbWUsICIvIikgKQ0KLS0JCQkJCQlhc3ByaW50Zigmd2hlcmVfcmVjLCAib3Ig MSIpOw0KLSsJCQkJCQlBU1BSSU5URigmd2hlcmVfcmVjLCAib3IgMT0xIik7DQotIAkJCQkJZWxz ZQ0KLS0JCQkJCQlhc3ByaW50Zigmd2hlcmVfcmVjLCAib3IgKGZpbGVuYW1lID4gJyVzLycgIg0K LSsJCQkJCQlBU1BSSU5URigmd2hlcmVfcmVjLCAib3IgKGZpbGVuYW1lID4gJyVzLycgIg0KLSAJ CQkJCQkJImFuZCBmaWxlbmFtZSA8ICclczAnKSIsDQotIAkJCQkJCQl1cmxfZW5jb2RlKHJlYWxu YW1lKSwgdXJsX2VuY29kZShyZWFsbmFtZSkpOw0KLSAJCQkJfQ0KLSANCi0gCQkJCVNRTCgiTWFy ayBmaWxlIGFzIHRvIGJlIGZvcmNlZCIsDQotLQkJCQkJIlVQREFURSBkaXJ0eSBTRVQgZm9yY2Ug PSAxIFdIRVJFIGZpbGVuYW1lID0gJyVzJyAlcyIsDQotKwkJCQkJIlVQREFURSBkaXJ0eSBTRVQg Zm9yY2VkID0gMSBXSEVSRSBmaWxlbmFtZSA9ICclcycgJXMiLA0KLSAJCQkJCXVybF9lbmNvZGUo cmVhbG5hbWUpLCB3aGVyZV9yZWMpOw0KLSANCi0gCQkJCWlmICggcmVjdXJzaXZlICkNCi0gCQkJ CQlmcmVlKHdoZXJlX3JlYyk7DQotKwkJCQlmcmVlKHBmbmFtZSk7DQotIAkJCX0NCi0gCQkJYnJl YWs7DQotIA0KLUBAIC02OTUsNyArNzkyLDcgQEAgZm91bmRfYV9ncm91cDo7DQotIAkJCVNRTF9C RUdJTigiREIgRHVtcCAtIEhpbnQiLA0KLSAJCQkJIlNFTEVDVCByZWN1cnNpdmUsIGZpbGVuYW1l IEZST00gaGludCBPUkRFUiBCWSBmaWxlbmFtZSIpDQotIAkJCXsNCi0tCQkJCXByaW50ZigiJXNc dCVzXG4iLCBTUUxfVlswXSwgdXJsX2RlY29kZShTUUxfVlsxXSkpOw0KLSsJCQkJcHJpbnRmKCIl c1x0JXNcbiIsIChjaGFyKilTUUxfVigwKSwgdXJsX2RlY29kZShTUUxfVigxKSkpOw0KLSAJCQkJ cmV0dmFsID0gLTE7DQotIAkJCX0gU1FMX0VORDsNCi0gCQkJYnJlYWs7DQotQEAgLTcwNSw4ICs4 MDIsOCBAQCBmb3VuZF9hX2dyb3VwOjsNCi0gCQkJU1FMX0JFR0lOKCJEQiBEdW1wIC0gRmlsZSIs DQotIAkJCQkiU0VMRUNUIGNoZWNrdHh0LCBmaWxlbmFtZSBGUk9NIGZpbGUgT1JERVIgQlkgZmls ZW5hbWUiKQ0KLSAJCQl7DQotLQkJCQlpZiAoY3N5bmNfZmluZF9uZXh0KDAsIHVybF9kZWNvZGUo U1FMX1ZbMV0pKSkgew0KLS0JCQkJCXByaW50ZigiJXNcdCVzXG4iLCB1cmxfZGVjb2RlKFNRTF9W WzBdKSwgdXJsX2RlY29kZShTUUxfVlsxXSkpOw0KLSsJCQkJaWYgKGNzeW5jX2ZpbmRfbmV4dCgw LCB1cmxfZGVjb2RlKFNRTF9WKDEpKSkpIHsNCi0rCQkJCQlwcmludGYoIiVzXHQlc1xuIiwgdXJs X2RlY29kZShTUUxfVigwKSksIHVybF9kZWNvZGUoU1FMX1YoMSkpKTsNCi0gCQkJCQlyZXR2YWwg PSAtMTsNCi0gCQkJCX0NCi0gCQkJfSBTUUxfRU5EOw0KLUBAIC03MTcsOCArODE0LDggQEAgZm91 bmRfYV9ncm91cDo7DQotIAkJCVNRTF9CRUdJTigiREIgRHVtcCAtIEZpbGUiLA0KLSAJCQkJIlNF TEVDVCBjaGVja3R4dCwgZmlsZW5hbWUgRlJPTSBmaWxlIE9SREVSIEJZIGZpbGVuYW1lIikNCi0g CQkJew0KLS0JCQkJaWYgKCBjc3luY19tYXRjaF9maWxlX2hvc3QodXJsX2RlY29kZShTUUxfVlsx XSksIGFyZ3Zbb3B0aW5kXSwgYXJndltvcHRpbmQrMV0sIDApICkgew0KLS0JCQkJCXByaW50Zigi JXNcdCVzXG4iLCB1cmxfZGVjb2RlKFNRTF9WWzBdKSwgdXJsX2RlY29kZShTUUxfVlsxXSkpOw0K LSsJCQkJaWYgKCBjc3luY19tYXRjaF9maWxlX2hvc3QodXJsX2RlY29kZShTUUxfVigxKSksIGFy Z3Zbb3B0aW5kXSwgYXJndltvcHRpbmQrMV0sIDApICkgew0KLSsJCQkJCXByaW50ZigiJXNcdCVz XG4iLCB1cmxfZGVjb2RlKFNRTF9WKDApKSwgdXJsX2RlY29kZShTUUxfVigxKSkpOw0KLSAJCQkJ CXJldHZhbCA9IC0xOw0KLSAJCQkJfQ0KLSAJCQl9IFNRTF9FTkQ7DQotQEAgLTc2NywxMSArODY0 LDExIEBAIGZvdW5kX2FfZ3JvdXA6Ow0KLSAJCWNhc2UgTU9ERV9MSVNUX0RJUlRZOg0KLSAJCQly ZXR2YWwgPSAyOw0KLSAJCQlTUUxfQkVHSU4oIkRCIER1bXAgLSBEaXJ0eSIsDQotLQkJCQkiU0VM RUNUIGZvcmNlLCBteW5hbWUsIHBlZXJuYW1lLCBmaWxlbmFtZSBGUk9NIGRpcnR5IE9SREVSIEJZ IGZpbGVuYW1lIikNCi0rCQkJCSJTRUxFQ1QgZm9yY2VkLCBteW5hbWUsIHBlZXJuYW1lLCBmaWxl bmFtZSBGUk9NIGRpcnR5IE9SREVSIEJZIGZpbGVuYW1lIikNCi0gCQkJew0KLS0JCQkJaWYgKGNz eW5jX2ZpbmRfbmV4dCgwLCB1cmxfZGVjb2RlKFNRTF9WWzNdKSkpIHsNCi0tCQkJCQlwcmludGYo IiVzXHQlc1x0JXNcdCVzXG4iLCBhdG9pKFNRTF9WWzBdKSA/ICAiZm9yY2UiIDogImNoYXJ5IiwN Ci0tCQkJCQkJdXJsX2RlY29kZShTUUxfVlsxXSksIHVybF9kZWNvZGUoU1FMX1ZbMl0pLCB1cmxf ZGVjb2RlKFNRTF9WWzNdKSk7DQotKwkJCQlpZiAoY3N5bmNfZmluZF9uZXh0KDAsIHVybF9kZWNv ZGUoU1FMX1YoMykpKSkgew0KLSsJCQkJCXByaW50ZigiJXNcdCVzXHQlc1x0JXNcbiIsIGF0b2ko U1FMX1YoMCkpID8gICJmb3JjZSIgOiAiY2hhcnkiLA0KLSsJCQkJCQl1cmxfZGVjb2RlKFNRTF9W KDEpKSwgdXJsX2RlY29kZShTUUxfVigyKSksIHVybF9kZWNvZGUoU1FMX1YoMykpKTsNCi0gCQkJ CQlyZXR2YWwgPSAtMTsNCi0gCQkJCX0NCi0gCQkJfSBTUUxfRU5EOw0KLWRpZmYgLS1naXQgYS9j c3luYzIuY2ZnIGIvY3N5bmMyLmNmZw0KLWluZGV4IDMzOGJiN2IuLmZmOWU2MzkgMTAwNjQ0DQot LS0tIGEvY3N5bmMyLmNmZw0KLSsrKyBiL2NzeW5jMi5jZmcNCi1AQCAtMSw0ICsxLDMgQEANCi0t DQotICMgQ3N5bmMyIEV4YW1wbGUgQ29uZmlndXJhdGlvbiBGaWxlDQotICMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICMNCi1AQCAtMTIsNiArMTEsMjIgQEANCi0gIw0KLSAj IAlrZXkgL2V0Yy9jc3luYzIua2V5X215Z3JvdXA7DQotICMNCi0rIyAJIw0KLSsjIAkjIFdBUk5J Tkc6DQotKyMgCSMgWW91IENBTk5PVCB1c2UgcGF0aHMgY29udGFpbmluZyBhIHN5bWxpbmsNCi0r IyAJIyBjb21wb25lbnQgaW4gaW5jbHVkZS9leGNsdWRlIG9wdGlvbnMhDQotKyMgCSMNCi0rIyAJ IyBIZXJlIGlzIGEgcmVhbC1saWZlIGV4YW1wbGU6DQotKyMgCSMgU3VwcG9zZSB5b3UgaGF2ZSBz b21lIDY0Yml0IExpbnV4IHN5c3RlbXMNCi0rIyAJIyBhbmQgL3Vzci9saWIvb2NmIGlzIHdoYXQg eW91IHdhbnQgdG8ga2VlcA0KLSsjCSMgaW4gc3luYy4gT24gNjRiaXQgTGludXggc3lzdGVtcywg L3Vzci9saWINCi0rIyAJIyBpcyB1c3VhbGx5IGEgc3ltbGluayB0byAvdXNyL2xpYjY0Lg0KLSsj IAkjIFRoaXMgZG9lcyBub3Qgd29yazoNCi0rIyAJIyAgIGluY2x1ZGUgL3Vzci9saWIvb2NmOw0K LSsjIAkjIEJ1dCB0aGlzIGRvZXMgd29yazoNCi0rIyAJIyAgIGluY2x1ZGUgL3Vzci9saWI2NC9v Y2Y7DQotKyMgCSMNCi0rIyANCi0gIyAJaW5jbHVkZSAvZXRjL2FwYWNoZTsNCi0gIyAJaW5jbHVk ZSAlaG9tZWRpciUvYm9iOw0KLSAjIAlleGNsdWRlICVob21lZGlyJS9ib2IvdGVtcDsNCi1AQCAt MjQsOCArMzksMTIgQEANCi0gIyAJCWV4ZWMgIi91c3Ivc2Jpbi9hcGFjaGUyY3RsIGdyYWNlZnVs IjsNCi0gIyAJCWxvZ2ZpbGUgIi92YXIvbG9nL2NzeW5jMl9hY3Rpb24ubG9nIjsNCi0gIyAJCWRv LWxvY2FsOw0KLSsjCQkjIHlvdSBjYW4gdXNlIGRvLWxvY2FsLW9ubHkgaWYgdGhlIGV4ZWN1dGlv bg0KLSsjCQkjIHNob3VsZCBiZSBkb25lIGxvY2FsbHkgb25seQ0KLSsjCQkjIGRvLWxvY2FsLW9u bHk7DQotICMgCX0NCi0gIw0KLSsjIAkjIFRoZSBiYWNrdXAtZGlyZWN0b3J5IG5lZWRzIHRvIGJl IGNyZWF0ZWQgZmlyc3QhDQotICMgCWJhY2t1cC1kaXJlY3RvcnkgL3Zhci9iYWNrdXBzL2NzeW5j MjsNCi0gIyAJYmFja3VwLWdlbmVyYXRpb25zIDM7DQotICMNCi1AQCAtMzcsNCArNTYsMyBAQA0K LSAjIAlvbiBob3N0WzEyXTogL2V4cG9ydC91c2VyczsNCi0gIyAJb24gKjogICAgICAgIC9ob21l Ow0KLSAjIH0NCi0tDQotZGlmZiAtLWdpdCBhL2NzeW5jMi5oIGIvY3N5bmMyLmgNCi1pbmRleCAx MzA2MDIzLi5kNzZmODgwIDEwMDY0NA0KLS0tLSBhL2NzeW5jMi5oDQotKysrIGIvY3N5bmMyLmgN Ci1AQCAtMjEsNyArMjEsMTEgQEANCi0gI2lmbmRlZiBDU1lOQzJfSA0KLSAjZGVmaW5lIENTWU5D Ml9IIDENCi0gDQotKyNkZWZpbmUgQ1NZTkMyX1ZFUlNJT04gIjIuMC1yYzEiDQotKw0KLSsjaWZu ZGVmIF9HTlVfU09VUkNFDQotICNkZWZpbmUgX0dOVV9TT1VSQ0UNCi0rI2VuZGlmDQotIA0KLSAj aW5jbHVkZSAiY29uZmlnLmgiDQotICNpbmNsdWRlIDxzdGRpby5oPg0KLUBAIC0zMSw2ICszNSwy NCBAQA0KLSAjaW5jbHVkZSA8ZXJybm8uaD4NCi0gDQotIA0KLSsjZGVmaW5lIERCX1NDSEVNQV9W RVJTSU9OIDANCi0rDQotKy8qIGFzcHJpbnRmIHdpdGggdGVzdCBmb3Igbm8gbWVtb3J5ICovDQot Kw0KLSsjZGVmaW5lIEFTUFJJTlRGKHMsIGZtdCwgLi4uKSBkbyB7XA0KLSsJaW50IF9fcmV0ID0g YXNwcmludGYocywgZm10LCAjI19fVkFfQVJHU19fKTtcDQotKwlpZiAoX19yZXQgPCAwKSBcDQot KwkJY3N5bmNfZmF0YWwoIk91dCBvZiBtZW1vcnkgaW4gYXNwcmludGYgYXQgJXM6JWRcbiIsIF9f RklMRV9fLCBfX0xJTkVfXyk7XA0KLSt9IHdoaWxlICgwKQ0KLSsNCi0rDQotKyNkZWZpbmUgVkFT UFJJTlRGKHMsIGZtdCwgYXJncykgZG8ge1wNCi0rCWludCBfX3JldCA9IHZhc3ByaW50ZihzLCBm bXQsIGFyZ3MpO1wNCi0rCWlmIChfX3JldCA8IDApIFwNCi0rCQljc3luY19mYXRhbCgiT3V0IG9m IG1lbW9yeSBpbiB2YXNwcmludGYgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7XA0K LSt9IHdoaWxlICgwKQ0KLSsNCi0rDQotIC8qIGFjdGlvbi5jICovDQotIA0KLSBleHRlcm4gdm9p ZCBjc3luY19zY2hlZHVsZV9jb21tYW5kcyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGlzbG9j YWwpOw0KLUBAIC03OCw3ICsxMDAsNyBAQCBleHRlcm4gaW50IGNvbm5fd3JpdGUoY29uc3Qgdm9p ZCAqYnVmLCBzaXplX3QgY291bnQpOw0KLSANCi0gZXh0ZXJuIHZvaWQgY29ubl9wcmludGYoY29u c3QgY2hhciAqZm10LCAuLi4pOw0KLSBleHRlcm4gaW50IGNvbm5fZmdldHMoY2hhciAqcywgaW50 IHNpemUpOw0KLS1leHRlcm4gaW50IGNvbm5fZ2V0cyhjaGFyICpzLCBpbnQgc2l6ZSk7DQotK2V4 dGVybiBzaXplX3QgY29ubl9nZXRzKGNoYXIgKnMsIHNpemVfdCBzaXplKTsNCi0gDQotIA0KLSAv KiBkYi5jICovDQotQEAgLTkxLDI2ICsxMTMsNTYgQEAgZXh0ZXJuIHZvaWQqIGNzeW5jX2RiX2Jl Z2luKGNvbnN0IGNoYXIgKmVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pOw0KLSBleHRlcm4gaW50 IGNzeW5jX2RiX25leHQodm9pZCAqdm14LCBjb25zdCBjaGFyICplcnIsDQotIAkJaW50ICpwTiwg Y29uc3QgY2hhciAqKipwYXpWYWx1ZSwgY29uc3QgY2hhciAqKipwYXpDb2xOYW1lKTsNCi0gZXh0 ZXJuIHZvaWQgY3N5bmNfZGJfZmluKHZvaWQgKnZteCwgY29uc3QgY2hhciAqZXJyKTsNCi0rZXh0 ZXJuIGNvbnN0IHZvaWQgKiBjc3luY19kYl9jb2xibG9iKHZvaWQgKnN0bXR4LGludCBjb2wpOw0K LStleHRlcm4gY2hhciAqZGJfZGVmYXVsdF9kYXRhYmFzZShjaGFyICpkYmRpciwgY2hhciAqbXlo b3N0bmFtZSwgY2hhciAqY2ZnX25hbWUpOw0KLSsNCi0gDQotICNkZWZpbmUgU1FMKGUsIHMsIC4u LikgY3N5bmNfZGJfc3FsKGUsIHMsICMjX19WQV9BUkdTX18pDQotIA0KLSsjaWYgMA0KLSsjaWYg ZGVmaW5lZChIQVZFX0xJQlNRTElURSkNCi0gI2RlZmluZSBTUUxfQkVHSU4oZSwgcywgLi4uKSBc DQotIHsgXA0KLSAJY2hhciAqU1FMX0VSUiA9IGU7IFwNCi0gCXZvaWQgKlNRTF9WTSA9IGNzeW5j X2RiX2JlZ2luKFNRTF9FUlIsIHMsICMjX19WQV9BUkdTX18pOyBcDQotIAlpbnQgU1FMX0NPVU5U ID0gMDsgXA0KLSAJd2hpbGUgKDEpIHsgXA0KLS0JCWNvbnN0IGNoYXIgKipTUUxfViwgKipTUUxf TjsgXA0KLSsJCWNvbnN0IGNoYXIgKipkYXRhU1FMX1YsICoqZGF0YVNRTF9OOyBcDQotIAkJaW50 IFNRTF9DOyBcDQotIAkJaWYgKCAhY3N5bmNfZGJfbmV4dChTUUxfVk0sIFNRTF9FUlIsIFwNCi0t CQkJCQkmU1FMX0MsICZTUUxfViwgJlNRTF9OKSApIGJyZWFrOyBcDQotKwkJCQkJJlNRTF9DLCAm ZGF0YVNRTF9WLCAmZGF0YVNRTF9OKSApIGJyZWFrOyBcDQotIAkJU1FMX0NPVU5UKys7DQotIA0K LSsjZGVmaW5lIFNRTF9WKGNvbCkgXA0KLSsJKGRhdGFTUUxfVlsoY29sKV0pDQotKyNlbmRpZg0K LSsjZW5kaWYNCi0rDQotKy8vICNpZiBkZWZpbmVkKEhBVkVfTElCU1FMSVRFMykNCi0rDQotKyNk ZWZpbmUgU1FMX0JFR0lOKGUsIHMsIC4uLikgXA0KLSt7IFwNCi0rCWNoYXIgKlNRTF9FUlIgPSBl OyBcDQotKwl2b2lkICpTUUxfVk0gPSBjc3luY19kYl9iZWdpbihTUUxfRVJSLCBzLCAjI19fVkFf QVJHU19fKTsgXA0KLSsJaW50IFNRTF9DT1VOVCA9IDA7IFwNCi0rXA0KLSsJaWYgKFNRTF9WTSkg eyBcDQotKwkJd2hpbGUgKDEpIHsgXA0KLSsJCQljb25zdCBjaGFyICoqZGF0YVNRTF9WLCAqKmRh dGFTUUxfTjsgXA0KLSsJCQlpbnQgU1FMX0M7IFwNCi0rCQkJaWYgKCAhY3N5bmNfZGJfbmV4dChT UUxfVk0sIFNRTF9FUlIsIFwNCi0rCQkJCQkJJlNRTF9DLCAmZGF0YVNRTF9WLCAmZGF0YVNRTF9O KSApIGJyZWFrOyBcDQotKwkJCVNRTF9DT1VOVCsrOw0KLSsNCi0rI2RlZmluZSBTUUxfVihjb2wp IFwNCi0rCShjc3luY19kYl9jb2xibG9iKFNRTF9WTSwoY29sKSkpDQotKy8vICNlbmRpZg0KLSAj ZGVmaW5lIFNRTF9GSU4gfXsNCi0gDQotICNkZWZpbmUgU1FMX0VORCBcDQotKwkJfSBcDQotKwkJ Y3N5bmNfZGJfZmluKFNRTF9WTSwgU1FMX0VSUik7IFwNCi0gCX0gXA0KLS0JY3N5bmNfZGJfZmlu KFNRTF9WTSwgU1FMX0VSUik7IFwNCi0gfQ0KLSANCi0gZXh0ZXJuIGludCBkYl9ibG9ja2luZ19t b2RlOw0KLUBAIC0xNTAsNiArMjAyLDcgQEAgZXh0ZXJuIHZvaWQgY3N5bmNfcmVtb3ZlX29sZCgp Ow0KLSAvKiBkYWVtb24uYyAqLw0KLSANCi0gZXh0ZXJuIHZvaWQgY3N5bmNfZGFlbW9uX3Nlc3Np b24oKTsNCi0rZXh0ZXJuIGludCBjc3luY19jb3B5X2ZpbGUoaW50IGZkX2luLCBpbnQgZmRfb3V0 KTsNCi0gDQotIA0KLSAvKiBnZXRyZWFsZm4uYyAqLw0KLUBAIC0xNzAsNiArMjIzLDcgQEAgY29u c3QgY2hhciAqdXJsX2RlY29kZShjb25zdCBjaGFyICppbik7DQotIA0KLSAvKiBhbm90aGVyIHJp bmdidWZmZXIgaGVyZS4gc28gdXNlIGl0IHdpdGggY2FyZSEhICovDQotIGNvbnN0IGNoYXIgKnBy ZWZpeHN1YnN0KGNvbnN0IGNoYXIgKmluKTsNCi0rY29uc3QgY2hhciAqcHJlZml4ZW5jb2RlKGNv bnN0IGNoYXIgKmZpbGVuYW1lKTsNCi0gDQotIA0KLSAvKiB0ZXh0bGlzdCBpbXBsZW1lbnRhdGlv biAqLw0KLUBAIC0yMzMsMTIgKzI4NywxMyBAQCBzdHJ1Y3QgY3N5bmNfZ3JvdXBfaG9zdCB7DQot IA0KLSBzdHJ1Y3QgY3N5bmNfZ3JvdXBfcGF0dGVybiB7DQotIAlzdHJ1Y3QgY3N5bmNfZ3JvdXBf cGF0dGVybiAqbmV4dDsNCi0tCWludCBpc2luY2x1ZGUsIGlzY29tcGFyZTsNCi0rCWludCBpc2lu Y2x1ZGUsIGlzY29tcGFyZSwgc3Rhcl9tYXRjaGVzX3NsYXNoZXM7DQotIAljb25zdCBjaGFyICpw YXR0ZXJuOw0KLSB9Ow0KLSANCi0gc3RydWN0IGNzeW5jX2dyb3VwX2FjdGlvbl9wYXR0ZXJuIHsN Ci0gCXN0cnVjdCBjc3luY19ncm91cF9hY3Rpb25fcGF0dGVybiAqbmV4dDsNCi0rCWludCBzdGFy X21hdGNoZXNfc2xhc2hlczsNCi0gCWNvbnN0IGNoYXIgKnBhdHRlcm47DQotIH07DQotIA0KLUBA IC0yNTMsNiArMzA4LDcgQEAgc3RydWN0IGNzeW5jX2dyb3VwX2FjdGlvbiB7DQotIAlzdHJ1Y3Qg Y3N5bmNfZ3JvdXBfYWN0aW9uX2NvbW1hbmQgKmNvbW1hbmQ7DQotIAljb25zdCBjaGFyICpsb2dm aWxlOw0KLSAJaW50IGRvX2xvY2FsOw0KLSsJaW50IGRvX2xvY2FsX29ubHk7DQotIH07DQotIA0K LSBzdHJ1Y3QgY3N5bmNfZ3JvdXAgew0KLUBAIC0zMDEsOCArMzU3LDE0IEBAIGV4dGVybiBzdHJ1 Y3QgY3N5bmNfZ3JvdXAgICpjc3luY19ncm91cDsNCi0gZXh0ZXJuIHN0cnVjdCBjc3luY19wcmVm aXggKmNzeW5jX3ByZWZpeDsNCi0gZXh0ZXJuIHN0cnVjdCBjc3luY19ub3NzbCAgKmNzeW5jX25v c3NsOw0KLSANCi0rZXh0ZXJuIHVuc2lnbmVkIGNzeW5jX2xvY2tfdGltZW91dDsNCi0rZXh0ZXJu IGNoYXIgKmNzeW5jX3RlbXBkaXI7DQotKw0KLStleHRlcm4gY2hhciAqY3N5bmNfZGF0YWJhc2U7 DQotKw0KLSBleHRlcm4gaW50IGNzeW5jX2Vycm9yX2NvdW50Ow0KLSBleHRlcm4gaW50IGNzeW5j X2RlYnVnX2xldmVsOw0KLStleHRlcm4gaW50IGNzeW5jX3N5c2xvZzsNCi0gZXh0ZXJuIEZJTEUg KmNzeW5jX2RlYnVnX291dDsNCi0gDQotIGV4dGVybiBsb25nIGNzeW5jX2xhc3RfcHJpbnR0aW1l Ow0KLUBAIC0zMTIsOSArMzc0LDkgQEAgZXh0ZXJuIGludCBjc3luY19tZXNzYWdlc19wcmludGVk Ow0KLSBleHRlcm4gaW50IGNzeW5jX3NlcnZlcl9jaGlsZF9waWQ7DQotIGV4dGVybiBpbnQgY3N5 bmNfdGltZXN0YW1wczsNCi0gZXh0ZXJuIGludCBjc3luY19uZXdfZm9yY2U7DQotLWV4dGVybiBp bnQgY3N5bmNfcG9ydDsNCi0gDQotIGV4dGVybiBjaGFyIG15aG9zdG5hbWVbXTsNCi0rZXh0ZXJu IGNoYXIgKmNzeW5jX3BvcnQ7DQotIGV4dGVybiBjaGFyICphY3RpdmVfZ3JvdXBsaXN0Ow0KLSBl eHRlcm4gY2hhciAqYWN0aXZlX3BlZXJsaXN0Ow0KLSANCi1AQCAtMzI4LDcgKzM5MCw3IEBAIGV4 dGVybiBpbnQgY3N5bmNfZHVtcF9kaXJfZmQ7DQotIA0KLSBleHRlcm4gaW50IGNzeW5jX2NvbXBh cmVfbW9kZTsNCi0gDQotLSNpZmRlZiBIQVZFX0xJQkdOVVRMU19PUEVOU1NMDQotKyNpZmRlZiBI QVZFX0xJQkdOVVRMUw0KLSBleHRlcm4gaW50IGNzeW5jX2Nvbm5fdXNlc3NsOw0KLSAjZW5kaWYN Ci0gDQotZGlmZiAtLWdpdCBhL2NzeW5jMi5zcGVjIGIvY3N5bmMyLnNwZWMNCi1pbmRleCAxN2Rh YWQ2Li41ZDM0MmRjIDEwMDY0NA0KLS0tLSBhL2NzeW5jMi5zcGVjDQotKysrIGIvY3N5bmMyLnNw ZWMNCi1AQCAtMjMsMTUgKzIzLDE1IEBADQotICMgbm9yb290Zm9yYnVpbGQNCi0gIyBuZWVkZWRm b3JidWlsZCAgb3BlbnNzbCBvcGVuc3NsLWRldmVsDQotIA0KLS1CdWlsZFJlcXVpcmVzOiBzcWxp dGUtZGV2ZWwgc3FsaXRlIGxpYnJzeW5jIG9wZW5zc2wtZGV2ZWwgbGlicnN5bmMtZGV2ZWwNCi0r QnVpbGRSZXF1aXJlczogc3FsaXRlLWRldmVsIHNxbGl0ZSBsaWJyc3luYyBnbnV0bHMtZGV2ZWwg bGlicnN5bmMtZGV2ZWwNCi0gDQotIE5hbWU6ICAgICAgICAgY3N5bmMyDQotIExpY2Vuc2U6ICAg ICAgR1BMDQotIEdyb3VwOiAgICAgICAgU3lzdGVtL01vbml0b3JpbmcNCi0gUmVxdWlyZXM6ICAg ICBzcWxpdGUgb3BlbnNzbCBsaWJyc3luYw0KLSBBdXRvcmVxcHJvdjogIG9uDQotLVZlcnNpb246 ICAgICAgMS4zNA0KLS1SZWxlYXNlOiAgICAgIDENCi0rVmVyc2lvbjogICAgICAyLjANCi0rUmVs ZWFzZTogICAgICAwLjEucmMxDQotIFNvdXJjZTA6ICAgICAgY3N5bmMyLSV7dmVyc2lvbn0udGFy Lmd6DQotIFVSTDogICAgICAgICAgaHR0cDovL29zcy5saW5iaXQuY29tL2NzeW5jMg0KLSBCdWls ZFJvb3Q6ICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZA0KLUBAIC04Myw2 ICs4Myw3IEBAIGZpDQotICVkZWZhdHRyKC0scm9vdCxyb290KQ0KLSAlZG9jIENoYW5nZUxvZyBS RUFETUUgTkVXUyBJTlNUQUxMIFRPRE8gQVVUSE9SUw0KLSAle19zYmluZGlyfS9jc3luYzINCi0r JXtfc2JpbmRpcn0vY3N5bmMyLWNvbXBhcmUNCi0gJXtfdmFyfS9saWIvY3N5bmMyDQotICV7X21h bmRpcn0vbWFuMS9jc3luYzIuMS5neg0KLSAlY29uZmlnKG5vcmVwbGFjZSkgJXtfc3lzY29uZmRp cn0veGluZXRkLmQvY3N5bmMyDQotZGlmZiAtLWdpdCBhL2RhZW1vbi5jIGIvZGFlbW9uLmMNCi1p bmRleCBhNjM1N2ZhLi4yYzA1NGVkIDEwMDY0NA0KLS0tLSBhL2RhZW1vbi5jDQotKysrIGIvZGFl bW9uLmMNCi1AQCAtMjMsNiArMjMsNyBAQA0KLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCi0gI2lu Y2x1ZGUgPHN5cy9zb2NrZXQuaD4NCi0gI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCi0rI2luY2x1 ZGUgPGFycGEvaW5ldC5oPg0KLSAjaW5jbHVkZSA8c3RyaW5nLmg+DQotICNpbmNsdWRlIDxmbm1h dGNoLmg+DQotICNpbmNsdWRlIDxzdGRsaWIuaD4NCi1AQCAtMzgsNiArMzksOSBAQA0KLSANCi0g c3RhdGljIGNoYXIgKmNtZF9lcnJvcjsNCi0gDQotK2ludCBjc3luY19zZXRCYWNrdXBGaWxlU3Rh dHVzKGNoYXIgKmZpbGVuYW1lLCBpbnQgYmFja3VwRGlyTGVuZ3RoKTsNCi0rDQotKw0KLSBpbnQg Y3N5bmNfdW5saW5rKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgaWduKQ0KLSB7DQotIAlzdHJ1 Y3Qgc3RhdCBzdDsNCi1AQCAtODAsOCArODQsMTMgQEAgdm9pZCBjc3luY19maWxlX3VwZGF0ZShj b25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqcGVlcm5hbWUpDQotIAkJCXVybF9lbmNv ZGUoZmlsZW5hbWUpKTsNCi0gCX0gZWxzZSB7DQotIAkJY29uc3QgY2hhciAqY2hlY2t0eHQgPSBj c3luY19nZW5jaGVja3R4dCgmc3QsIGZpbGVuYW1lLCAwKTsNCi0rDQotKwkJU1FMKCJEZWxldGlu ZyBvbGQgcmVjb3JkIGZyb20gZmlsZSBkYiIsDQotKwkJCSJERUxFVEUgRlJPTSBmaWxlIFdIRVJF IGZpbGVuYW1lID0gJyVzJyIsDQotKwkJCXVybF9lbmNvZGUoZmlsZW5hbWUpKTsNCi0rDQotIAkJ U1FMKCJJbnNlcnQgcmVjb3JkIHRvIGZpbGUgZGIiLA0KLS0JCQkiaW5zZXJ0IGludG8gZmlsZSAo ZmlsZW5hbWUsIGNoZWNrdHh0KSB2YWx1ZXMgIg0KLSsJCQkiSU5TRVJUIElOVE8gZmlsZSAoZmls ZW5hbWUsIGNoZWNrdHh0KSB2YWx1ZXMgIg0KLSAJCQkiKCclcycsICclcycpIiwgdXJsX2VuY29k ZShmaWxlbmFtZSksDQotIAkJCXVybF9lbmNvZGUoY2hlY2t0eHQpKTsNCi0gCX0NCi1AQCAtOTgs NzMgKzEwNywxNjQgQEAgaW50IGNzeW5jX2ZpbGVfYmFja3VwKGNvbnN0IGNoYXIgKmZpbGVuYW1l KQ0KLSB7DQotIAlzdGF0aWMgY2hhciBlcnJvcl9idWZmZXJbMTAyNF07DQotIAljb25zdCBzdHJ1 Y3QgY3N5bmNfZ3JvdXAgKmcgPSBOVUxMOw0KLSsJc3RydWN0IHN0YXQgYnVmOw0KLSsJaW50IHJj Ow0KLSAJd2hpbGUgKCAoZz1jc3luY19maW5kX25leHQoZywgZmlsZW5hbWUpKSApIHsNCi0tCQlp ZiAoZy0+YmFja3VwX2RpcmVjdG9yeSAmJiBnLT5iYWNrdXBfZ2VuZXJhdGlvbnMgPiAwKSB7DQot LQkJCWludCBiYWtfZGlyX2xlbiA9IHN0cmxlbihnLT5iYWNrdXBfZGlyZWN0b3J5KTsNCi0tCQkJ aW50IGZpbGVuYW1lX2xlbiA9IHN0cmxlbihmaWxlbmFtZSk7DQotLQkJCWNoYXIgYmFja3VwX2Zp bGVuYW1lW2Jha19kaXJfbGVuICsgZmlsZW5hbWVfbGVuICsgMTBdOw0KLS0JCQljaGFyIGJhY2t1 cF9vdGhlcmZpbGVuYW1lW2Jha19kaXJfbGVuICsgZmlsZW5hbWVfbGVuICsgMTBdOw0KLS0JCQlp bnQgZmRfaW4sIGZkX291dCwgaTsNCi0tDQotLQkJCWZkX2luID0gb3BlbihmaWxlbmFtZSwgT19S RE9OTFkpOw0KLS0JCQlpZiAoZmRfaW4gPCAwKSByZXR1cm4gMDsNCi0tDQotLQkJCW1lbWNweShi YWNrdXBfZmlsZW5hbWUsIGctPmJhY2t1cF9kaXJlY3RvcnksIGJha19kaXJfbGVuKTsNCi0tCQkJ Zm9yIChpPTA7IGk8ZmlsZW5hbWVfbGVuOyBpKyspDQotLQkJCQliYWNrdXBfZmlsZW5hbWVbYmFr X2Rpcl9sZW4raV0gPQ0KLS0JCQkJCWZpbGVuYW1lW2ldID09ICcvJyA/ICdfJyA6IGZpbGVuYW1l W2ldOw0KLS0JCQliYWNrdXBfZmlsZW5hbWVbYmFrX2Rpcl9sZW5dID0gJy8nOw0KLS0JCQltZW1j cHkoYmFja3VwX290aGVyZmlsZW5hbWUsIGJhY2t1cF9maWxlbmFtZSwNCi0tCQkJCQliYWtfZGly X2xlbiArIGZpbGVuYW1lX2xlbik7DQotLQ0KLS0JCQlmb3IgKGk9Zy0+YmFja3VwX2dlbmVyYXRp b25zLTE7IGk7IGktLSkgew0KLS0JCQkJc25wcmludGYoYmFja3VwX2ZpbGVuYW1lK2Jha19kaXJf bGVuK2ZpbGVuYW1lX2xlbiwgMTAsICIuJWQiLCBpLTEpOw0KLS0JCQkJc25wcmludGYoYmFja3Vw X290aGVyZmlsZW5hbWUrYmFrX2Rpcl9sZW4rZmlsZW5hbWVfbGVuLCAxMCwgIi4lZCIsIGkpOw0K LS0JCQkJcmVuYW1lKGJhY2t1cF9maWxlbmFtZSwgYmFja3VwX290aGVyZmlsZW5hbWUpOw0KLS0J CQl9DQotLQ0KLS0JCQlzdHJjcHkoYmFja3VwX2ZpbGVuYW1lK2Jha19kaXJfbGVuK2ZpbGVuYW1l X2xlbiwgIi4wIik7DQotLQkJCWZkX291dCA9IG9wZW4oYmFja3VwX2ZpbGVuYW1lLCBPX1dST05M WXxPX0NSRUFULCAwNjAwKTsNCi0tDQotLQkJCWlmIChmZF9vdXQgPCAwKSB7DQotLQkJCQlzbnBy aW50ZihlcnJvcl9idWZmZXIsIDEwMjQsDQotLQkJCQkJCSJPcGVuIGVycm9yIHdoaWxlIGJhY2tp bmcgdXAgJyVzJzogJXNcbiIsDQotLQkJCQkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOw0K LS0JCQkJY21kX2Vycm9yID0gZXJyb3JfYnVmZmVyOw0KLS0JCQkJY2xvc2UoZmRfaW4pOw0KLS0J CQkJcmV0dXJuIDE7DQotLQkJCX0NCi0tDQotLQkJCXdoaWxlICgxKSB7DQotLQkJCQljaGFyIGJ1 ZmZlcls1MTJdOw0KLS0JCQkJaW50IHJlYWRfbGVuID0gcmVhZChmZF9pbiwgYnVmZmVyLCA1MTIp Ow0KLS0JCQkJaW50IHdyaXRlX2xlbiA9IDA7DQotLQ0KLS0JCQkJaWYgKHJlYWRfbGVuIDw9IDAp DQotLQkJCQkJYnJlYWs7DQotLQ0KLS0JCQkJd2hpbGUgKHdyaXRlX2xlbiA8IHJlYWRfbGVuKSB7 DQotLQkJCQkJaW50IHJjID0gd3JpdGUoZmRfb3V0LCBidWZmZXIrd3JpdGVfbGVuLCByZWFkX2xl bi13cml0ZV9sZW4pOw0KLS0JCQkJCWlmIChyYyA8PSAwKSB7DQotLQkJCQkJCXNucHJpbnRmKGVy cm9yX2J1ZmZlciwgMTAyNCwNCi0tCQkJCQkJCQkiV3JpdGUgZXJyb3Igd2hpbGUgYmFja2luZyB1 cCAnJXMnOiAlc1xuIiwNCi0tCQkJCQkJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsNCi0t CQkJCQkJY21kX2Vycm9yID0gZXJyb3JfYnVmZmVyOw0KLS0JCQkJCQljbG9zZShmZF9pbik7DQot LQkJCQkJCWNsb3NlKGZkX291dCk7DQotLQkJCQkJCXJldHVybiAxOw0KLS0JCQkJCX0NCi0tCQkJ CQl3cml0ZV9sZW4gKz0gcmM7DQotLQkJCQl9DQotLQkJCX0NCi0tCQkJY2xvc2UoZmRfaW4pOw0K LS0JCQljbG9zZShmZF9vdXQpOw0KLS0JCX0NCi0rCSAgaWYgKGctPmJhY2t1cF9kaXJlY3Rvcnkg JiYgZy0+YmFja3VwX2dlbmVyYXRpb25zID4gMSkgew0KLSsJICAgIA0KLSsJICAgIGludCBiYWtf ZGlyX2xlbiA9IHN0cmxlbihnLT5iYWNrdXBfZGlyZWN0b3J5KTsNCi0rCSAgICBpbnQgZmlsZW5h bWVfbGVuID0gc3RybGVuKGZpbGVuYW1lKTsNCi0rCSAgICBjaGFyIGJhY2t1cF9maWxlbmFtZVti YWtfZGlyX2xlbiArIGZpbGVuYW1lX2xlbiArIDEwXTsNCi0rCSAgICBjaGFyIGJhY2t1cF9vdGhl cmZpbGVuYW1lW2Jha19kaXJfbGVuICsgZmlsZW5hbWVfbGVuICsgMTBdOw0KLSsJICAgIGludCBm ZF9pbiwgZmRfb3V0LCBpOw0KLSsJICAgIGludCBsYXN0U2xhc2ggPSAwOw0KLSsJICAgIG1vZGVf dCBtb2RlOw0KLSsJICAgIGNzeW5jX2RlYnVnKDEsICJiYWNrdXBcbiIpOw0KLSsJICAgIC8vIFNr aXAgZ2VuZXJhdGlvbiBvZiBkaXJlY3Rvcmllcw0KLSsJICAgIHJjID0gIHN0YXQoZmlsZW5hbWUs ICZidWYpOw0KLSsJICAgIGlmIChTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgew0KLSsJICAgICAgY3N5 bmNfZGVidWcoMSwgImRpcmVjdG9yeS4gU2tpcCBnZW5lcmF0aW9uIFxuIik7DQotKwkgICAgICBy ZXR1cm4gMDsNCi0rCSAgICB9DQotKw0KLSsJICAgIGZkX2luID0gb3BlbihmaWxlbmFtZSwgT19S RE9OTFkpOw0KLSsJICAgIGlmIChmZF9pbiA8IDApIA0KLSsJICAgICAgcmV0dXJuIDA7DQotKwkJ CQ0KLSsJICAgIG1lbWNweShiYWNrdXBfZmlsZW5hbWUsIGctPmJhY2t1cF9kaXJlY3RvcnksIGJh a19kaXJfbGVuKTsNCi0rCSAgICBiYWNrdXBfZmlsZW5hbWVbYmFrX2Rpcl9sZW5dID0gMDsNCi0r CSAgICBtb2RlID0gMDc3NzsNCi0rDQotKw0KLSsJICAgIGZvciAoaT1maWxlbmFtZV9sZW47IGk+ IDA7IGktLSkNCi0rCSAgICAgIGlmIChmaWxlbmFtZVtpXSA9PSAnLycpICB7DQotKwkJbGFzdFNs YXNoID0gaTsNCi0rCQlicmVhazsNCi0rCSAgICAgIH0NCi0rCQkJDQotKwkgICAgZm9yIChpPTA7 IGkgPCBmaWxlbmFtZV9sZW47IGkrKykgew0KLSsJCS8vIENyZWF0ZSBkaXJlY3RvcmllcyBpbiBm aWxlbmFtZQ0KLSsJCS8vIFRPRE86IEdldCB0aGUgbW9kZSBmcm9tIHRoZSBvcmlnLiBkaXINCi0r CSAgICAgIGlmIChmaWxlbmFtZVtpXSA9PSAnLycgJiYgaSA8PSBsYXN0U2xhc2gpIHsNCi0rDQot KwkJYmFja3VwX2ZpbGVuYW1lW2Jha19kaXJfbGVuK2ldID0gMDsNCi0rDQotKwkJY3N5bmNfZGVi dWcoMSwgIm1rZGlyICVzIFxuIiwgYmFja3VwX2ZpbGVuYW1lKTsNCi0rDQotKwkJbWtkaXIoYmFj a3VwX2ZpbGVuYW1lLCBtb2RlKTsNCi0rCQkvLyBEb250IGNoZWNrIHRoZSBlbXB0eSBzdHJpbmcu DQotKwkJaWYgKGkhPSAwKQ0KLSsJCSAgY3N5bmNfc2V0QmFja3VwRmlsZVN0YXR1cyhiYWNrdXBf ZmlsZW5hbWUsIGJha19kaXJfbGVuKTsNCi0rDQotKwkgICAgICB9DQotKwkJYmFja3VwX2ZpbGVu YW1lW2Jha19kaXJfbGVuK2ldID0gZmlsZW5hbWVbaV07DQotKwkgICAgfQ0KLSsNCi0rCSAgICBi YWNrdXBfZmlsZW5hbWVbYmFrX2Rpcl9sZW4gKyBmaWxlbmFtZV9sZW5dID0gMDsNCi0rCSAgICBi YWNrdXBfZmlsZW5hbWVbYmFrX2Rpcl9sZW5dID0gJy8nOw0KLSsJICAgIG1lbWNweShiYWNrdXBf b3RoZXJmaWxlbmFtZSwgYmFja3VwX2ZpbGVuYW1lLA0KLSsJCSAgIGJha19kaXJfbGVuICsgZmls ZW5hbWVfbGVuKTsNCi0rCSAgICANCi0rCSAgICAvL3JjID0gdW5saW5rKA0KLSsJICAgIGZvciAo aT1nLT5iYWNrdXBfZ2VuZXJhdGlvbnMtMTsgaTsgaS0tKSB7DQotKw0KLSsJICAgICAgaWYgKGkg IT0gMSkNCi0rCQlzbnByaW50ZihiYWNrdXBfZmlsZW5hbWUrYmFrX2Rpcl9sZW4rZmlsZW5hbWVf bGVuLCAxMCwgIi4lZCIsIGktMSk7DQotKwkgICAgICBiYWNrdXBfZmlsZW5hbWVbYmFrX2Rpcl9s ZW4rZmlsZW5hbWVfbGVuXSA9ICdcMCc7DQotKwkgICAgICBzbnByaW50ZihiYWNrdXBfb3RoZXJm aWxlbmFtZStiYWtfZGlyX2xlbitmaWxlbmFtZV9sZW4sIDEwLCAiLiVkIiwgaSk7DQotKw0KLSsJ ICAgICAgcmMgPSByZW5hbWUoYmFja3VwX2ZpbGVuYW1lLCBiYWNrdXBfb3RoZXJmaWxlbmFtZSk7 DQotKwkgICAgICBjc3luY19kZWJ1ZygxLCAicmVuYW1pbmcgYmFja3VwIGZpbGVzICclcycgdG8g JyVzJy4gcmMgPSAlZFxuIiwgYmFja3VwX2ZpbGVuYW1lLCBiYWNrdXBfb3RoZXJmaWxlbmFtZSwg cmMpOw0KLSsJICAgICAgDQotKwkgICAgfQ0KLSsNCi0rCSAgICAvKiBzdHJjcHkoYmFja3VwX2Zp bGVuYW1lK2Jha19kaXJfbGVuK2ZpbGVuYW1lX2xlbiwgIiIpOyAqLw0KLSsNCi0rCSAgICBmZF9v dXQgPSBvcGVuKGJhY2t1cF9maWxlbmFtZSwgT19XUk9OTFl8T19DUkVBVCwgMDYwMCk7DQotKw0K LSsJICAgIGlmIChmZF9vdXQgPCAwKSB7DQotKwkgICAgICBzbnByaW50ZihlcnJvcl9idWZmZXIs IDEwMjQsDQotKwkJICAgICAgICJPcGVuIGVycm9yIHdoaWxlIGJhY2tpbmcgdXAgJyVzJzogJXNc biIsDQotKwkJICAgICAgIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOw0KLSsJICAgICAgY21k X2Vycm9yID0gZXJyb3JfYnVmZmVyOw0KLSsJICAgICAgY2xvc2UoZmRfaW4pOw0KLSsJICAgICAg cmV0dXJuIDE7DQotKwkgICAgfQ0KLSsNCi0rCSAgICBjc3luY19kZWJ1ZygxLCJDb3B5aW5nIGRh dGEgZnJvbSAlcyB0byBiYWNrdXAgZmlsZSAlcyBcbiIsIGZpbGVuYW1lLCBiYWNrdXBfZmlsZW5h bWUpOw0KLSsNCi0rCSAgICByYyAgPSBjc3luY19jb3B5X2ZpbGUoZmRfaW4sIGZkX291dCk7DQot KwkgICAgaWYgKHJjICE9IDApIHsNCi0rCQljc3luY19kZWJ1ZygxLCAiY3N5bmNfYmFja3VwIGVy cm9yIDJcbiIpOw0KLSsNCi0rCQlzbnByaW50ZihlcnJvcl9idWZmZXIsIDEwMjQsDQotKwkJCSAi V3JpdGUgZXJyb3Igd2hpbGUgYmFja2luZyB1cCAnJXMnOiAlc1xuIiwNCi0rCQkJIGZpbGVuYW1l LCBzdHJlcnJvcihlcnJubykpOw0KLSsNCi0rCQljbWRfZXJyb3IgPSBlcnJvcl9idWZmZXI7DQot KwkJLy8gVE9ETyB2ZXJpZnkgZmlsZSBkaXNhcGVhcmVkID8gDQotKwkJLy8gDQotKwkJLy8gcmV0 dXJuIDE7DQotKwkgICAgfQ0KLSsJICAgIGNzeW5jX3NldEJhY2t1cEZpbGVTdGF0dXMoYmFja3Vw X2ZpbGVuYW1lLCBiYWtfZGlyX2xlbik7DQotKwkgICAgY3N5bmNfZGVidWcoMSwgImNzeW5jX2Jh Y2t1cCBsb29wIGVuZFxuIik7DQotKwkgIH0NCi0gCX0NCi0tDQotKwljc3luY19kZWJ1ZygxLCAi Y3N5bmNfYmFja3VwIGVuZFxuIik7DQotIAlyZXR1cm4gMDsNCi0gfQ0KLSANCi0raW50IGNzeW5j X2NvcHlfZmlsZShpbnQgZmRfaW4sIGludCBmZF9vdXQpIA0KLSt7DQotKyAgY2hhciBidWZmZXJb NTEyXTsNCi0rICBpbnQgcmVhZF9sZW4gPSByZWFkKGZkX2luLCBidWZmZXIsIDUxMik7DQotKw0K LSsgIHdoaWxlIChyZWFkX2xlbiA+IDApIHsNCi0rICAgIGludCB3cml0ZV9sZW4gPSAwOw0KLSsg ICAgDQotKyAgICB3aGlsZSAod3JpdGVfbGVuIDwgcmVhZF9sZW4pIHsNCi0rICAgICAgaW50IHJj ID0gd3JpdGUoZmRfb3V0LCBidWZmZXIrd3JpdGVfbGVuLCByZWFkX2xlbi13cml0ZV9sZW4pOw0K LSsgICAgICBpZiAocmMgPT0gLTEpIHsNCi0rCWNsb3NlKGZkX2luKTsNCi0rCWNsb3NlKGZkX291 dCk7DQotKwkvL1RPRE8gdmVyaWZ5IHJldHVybiBjb2RlLiANCi0rCXJldHVybiBlcnJubzsNCi0r ICAgICAgfQ0KLSsgICAgICB3cml0ZV9sZW4gKz0gcmM7DQotKyAgICB9DQotKyAgICByZWFkX2xl biA9IHJlYWQoZmRfaW4sIGJ1ZmZlciwgNTEyKTsNCi0rICB9CQ0KLSsgIGNsb3NlKGZkX2luKTsN Ci0rICBjbG9zZShmZF9vdXQpOw0KLSsgIHJldHVybiAwOw0KLSt9DQotKw0KLSsvKiBnZXQgdGhl IG1vZGUgZnJvbSB0aGUgb3JpZyBkaXJlY3RvcnkuDQotKyAgIExvb2tpbmcgZnJvbSB0aGUgYmFj a19kaXJfbGVuIHNob3VsZCBwcm9kdWNlIHRoZSBvcmlnaW5hbCBkaXIuDQotKyovDQotK2ludCBj c3luY19zZXRCYWNrdXBGaWxlU3RhdHVzKGNoYXIgKmZpbGVuYW1lLCBpbnQgYmFja3VwRGlyTGVu Z3RoKSB7DQotKw0KLSsgIHN0cnVjdCBzdGF0IGJ1ZjsNCi0rICBpbnQgcmMgPSBzdGF0KChmaWxl bmFtZSArIGJhY2t1cERpckxlbmd0aCksICZidWYpOw0KLSsgIGlmIChyYyA9PSAwICkgew0KLSsg ICAgY3N5bmNfZGVidWcoMCwgIlN0YXRpbmcgb3JpZ2luYWwgZmlsZSAlcyByYzogJWQgbW9kZTog JW8iLCAoZmlsZW5hbWUgKyBiYWNrdXBEaXJMZW5ndGgpLCByYywgYnVmLnN0X21vZGUpOw0KLSsN Ci0rICAgIHJjID0gY2hvd24oZmlsZW5hbWUsIGJ1Zi5zdF91aWQsIGJ1Zi5zdF9naWQpOw0KLSsg ICAgY3N5bmNfZGVidWcoMCwgIkNoYW5naW5nIG93bmVyIG9mICVzIHRvIHVzZXIgJWQgYW5kIGdy b3VwICVkLCByYz0gJWQgXG4iLCANCi0rCQlmaWxlbmFtZSwgYnVmLnN0X3VpZCwgYnVmLnN0X2dp ZCwgcmMpOw0KLSsNCi0rICAgIHJjID0gY2htb2QoZmlsZW5hbWUsIGJ1Zi5zdF9tb2RlKTsNCi0r ICAgIGNzeW5jX2RlYnVnKDAsICJDaGFuZ2luZyBtb2RlIG9mICVzIHRvIG1vZGUgJWQsIHJjPSAl ZCBcbiIsIA0KLSsJCWZpbGVuYW1lLCBidWYuc3RfbW9kZSwgcmMpOw0KLSsNCi0rICB9DQotKyAg ZWxzZSB7DQotKyAgICBjc3luY19kZWJ1ZygwLCAiRXJyb3IgZ2V0dGluZyBtb2RlIGFuZCBvd25l ciBzaGlwIGZyb20gJXMgXG4iLCAoZmlsZW5hbWUgKyBiYWNrdXBEaXJMZW5ndGgpKTsNCi0rICAg IHJldHVybiAtMTsNCi0rICB9DQotKyAgcmV0dXJuIDA7DQotK307DQotKw0KLSBzdHJ1Y3QgY3N5 bmNfY29tbWFuZCB7DQotIAljaGFyICp0ZXh0Ow0KLSAJaW50IGNoZWNrX3Blcm07DQotQEAgLTIx MCwxNiArMzEwLDE0OSBAQCBzdHJ1Y3QgY3N5bmNfY29tbWFuZCBjbWR0YWJbXSA9IHsNCi0gCXsg MCwJCTAsIDAsIDAsIDAsIDAsIDAJfQ0KLSB9Ow0KLSANCi0rdHlwZWRlZiB1bmlvbiBhZGRyZXNz IHsNCi0rCXN0cnVjdCBzb2NrYWRkciBzYTsNCi0rCXN0cnVjdCBzb2NrYWRkcl9pbiBzYV9pbjsN Ci0rCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FfaW42Ow0KLSsJc3RydWN0IHNvY2thZGRyX3N0b3Jh Z2Ugc3M7DQotK30gYWRkcmVzc190Ow0KLSsNCi0rY29uc3QgY2hhciAqY3N5bmNfaW5ldF9udG9w KGFkZHJlc3NfdCAqYWRkcikNCi0rew0KLSsJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07DQot KwlzYV9mYW1pbHlfdCBhZiA9IGFkZHItPnNhLnNhX2ZhbWlseTsNCi0rCXJldHVybiBpbmV0X250 b3AoYWYsDQotKwkJYWYgPT0gQUZfSU5FVCAgPyAodm9pZCopJmFkZHItPnNhX2luLnNpbl9hZGRy IDoNCi0rCQlhZiA9PSBBRl9JTkVUNiA/ICh2b2lkKikmYWRkci0+c2FfaW42LnNpbjZfYWRkciA6 IE5VTEwsDQotKwkJYnVmLCBzaXplb2YoYnVmKSk7DQotK30NCi0rDQotKy8qDQotKyAqIExvb3Bz ICh0byBjYXRlciBmb3IgbXVsdGlob21lZCBwZWVycykgdGhyb3VnaCB0aGUgYWRkcmVzcyBsaXN0 IHJldHVybmVkIGJ5DQotKyAqIGdldGhvc3RieW5hbWUoKSwgcmV0dXJucyAxIGlmIGFueSBtYXRj aCB3aXRoIHRoZSBhZGRyZXNzIG9idGFpbmVkIGZyb20NCi0rICogZ2V0cGVlcm5hbWUoKSBkdXJp bmcgc2Vzc2lvbiBzdGFydHVwLg0KLSsgKiBPdGhlcndpc2UgcmV0dXJucyAwICgtPiBpZGVudGlm aWNhdGlvbiBmYWlsZWQpLg0KLSsgKg0KLSsgKiBUT0RPIHN3aXRjaCB0byBhIGdldG5hbWVpbmZv IGluIGNvbm5fb3Blbi4NCi0rICogVE9ETyBhZGQgYSAicHJlLWF1dGhlbnRpY2F0ZWQiIHBpcGUg bW9kZSBmb3IgdXNlIG92ZXIgc3NoICovDQotK2ludCB2ZXJpZnlfcGVlcm5hbWUoY29uc3QgY2hh ciAqbmFtZSwgYWRkcmVzc190ICpwZWVyYWRkcikNCi0rew0KLSsJc2FfZmFtaWx5X3QgYWYgPSBw ZWVyYWRkci0+c2Euc2FfZmFtaWx5Ow0KLSsJc3RydWN0IGFkZHJpbmZvIGhpbnRzOw0KLSsJc3Ry dWN0IGFkZHJpbmZvICpyZXN1bHQsICpycDsNCi0rCWludCB0cnlfbWFwcGVkX2lwdjQ7DQotKwlp bnQgczsNCi0rDQotKwkvKiBPYnRhaW4gYWRkcmVzcyhlcykgbWF0Y2hpbmcgaG9zdCAqLw0KLSsJ bWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOw0KLSsJaGludHMuYWlf ZmFtaWx5ID0gQUZfVU5TUEVDOyAgICAgLyogQWxsb3cgSVB2NCBvciBJUHY2ICovDQotKwloaW50 cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOyAvKiBEYXRhZ3JhbSBzb2NrZXQgKi8NCi0rDQot KwlzID0gZ2V0YWRkcmluZm8obmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzdWx0KTsNCi0rCWlmIChz ICE9IDApIHsNCi0rCQljc3luY19kZWJ1ZygxLCAiZ2V0YWRkcmluZm86ICVzXG4iLCBnYWlfc3Ry ZXJyb3IocykpOw0KLSsJCXJldHVybiAwOw0KLSsJfQ0KLSsNCi0rCXRyeV9tYXBwZWRfaXB2NCA9 DQotKwkJYWYgPT0gQUZfSU5FVDYgJiYNCi0rCQkhbWVtY21wKCZwZWVyYWRkci0+c2FfaW42LnNp bjZfYWRkciwNCi0rCQkJIlwwXDBcMFwwIiAiXDBcMFwwXDAiICJcMFwwXHhmZlx4ZmYiLCAxMik7 DQotKw0KLSsJLyogZ2V0YWRkcmluZm8oKSByZXR1cm5zIGEgbGlzdCBvZiBhZGRyZXNzIHN0cnVj dHVyZXMuDQotKwkgKiBUcnkgZWFjaCBhZGRyZXNzLiAqLw0KLSsNCi0rCWZvciAocnAgPSByZXN1 bHQ7IHJwICE9IE5VTEw7IHJwID0gcnAtPmFpX25leHQpIHsNCi0rCQkvKiBib3RoIElQdjQgKi8N Ci0rCQlpZiAoYWYgPT0gQUZfSU5FVCAmJiBycC0+YWlfZmFtaWx5ID09IEFGX0lORVQgJiYNCi0r CQkgICAgIW1lbWNtcCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKXJwLT5haV9hZGRyKS0+c2luX2Fk ZHIsDQotKwkJCSAgICAmcGVlcmFkZHItPnNhX2luLnNpbl9hZGRyLCBzaXplb2Yoc3RydWN0IGlu X2FkZHIpKSkNCi0rCQkJYnJlYWs7DQotKwkJLyogYm90aCBJUHY2ICovDQotKwkJaWYgKGFmID09 IEFGX0lORVQ2ICYmIHJwLT5haV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYNCi0rCQkgICAgIW1lbWNt cCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42KilycC0+YWlfYWRkciktPnNpbjZfYWRkciwNCi0rCQkJ ICAgICZwZWVyYWRkci0+c2FfaW42LnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikp KQ0KLSsJCQlicmVhazsNCi0rCQkvKiBwZWVyYWRkciBJUHY2LCBidXQgYWN0dWFsbHkgOjpmZmZm OkkuUC52LjQsDQotKwkJICogYW5kIGZvcndhcmQgbG9va3VwIHJldHVybmVkIElQdjQgb25seSAq Lw0KLSsJCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBycC0+YWlfZmFtaWx5ID09IEFGX0lORVQgJiYN Ci0rCQkgICAgdHJ5X21hcHBlZF9pcHY0ICYmDQotKwkJICAgICFtZW1jbXAoJigoc3RydWN0IHNv Y2thZGRyX2luKilycC0+YWlfYWRkciktPnNpbl9hZGRyLA0KLSsJCQkgICAgKHVuc2lnbmVkIGNo YXIqKSZwZWVyYWRkci0+c2FfaW42LnNpbjZfYWRkciArIDEyLA0KLSsJCQkgICAgc2l6ZW9mKHN0 cnVjdCBpbl9hZGRyKSkpDQotKwkJCWJyZWFrOw0KLSsJfQ0KLSsJZnJlZWFkZHJpbmZvKHJlc3Vs dCk7DQotKwlpZiAocnAgIT0gTlVMTCkgLyogbWVtY21wIGZvdW5kIGEgbWF0Y2ggKi8NCi0rCQly ZXR1cm4gY29ubl9jaGVja19wZWVyX2NlcnQobmFtZSwgMCk7DQotKwlyZXR1cm4gMDsNCi0rfQ0K LSsNCi0rLyogV2h5IGRvIGFsbCB0aGlzIGZ1enosIGFuZCBub3Qgc2ltcGx5IC0tYXNzdW1lLWF1 dGhlbnRpY2F0ZWQ/DQotKyAqIFRvIGxpbWl0IHRoZSBpbXBhY3Qgb2YgYW4gYWNjaWRlbnRhbCBt aXNjb25maWd1cmF0aW9uLg0KLSsgKi8NCi0rdm9pZCBzZXRfcGVlcm5hbWVfZnJvbV9lbnYoYWRk cmVzc190ICpwLCBjb25zdCBjaGFyICplbnYpDQotK3sNCi0rCXN0cnVjdCBhZGRyaW5mbyBoaW50 cyA9IHsNCi0rCQkuYWlfZmFtaWx5ID0gQUZfVU5TUEVDLA0KLSsJCS5haV9zb2NrdHlwZSA9IFNP Q0tfU1RSRUFNLA0KLSsJCS5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUIHwgQUlfTlVNRVJJQ1NF UlYsDQotKwl9Ow0KLSsJc3RydWN0IGFkZHJpbmZvICpyZXN1bHQ7DQotKwljaGFyICpjOw0KLSsJ aW50IHM7DQotKw0KLSsJY2hhciAqdmFsID0gZ2V0ZW52KGVudik7DQotKwljc3luY19kZWJ1Zygz LCAiZ2V0ZW52KCVzKTogPj4lczw8XG4iLCBlbnYsIHZhbCA/OiAiIik7DQotKwlpZiAoIXZhbCkN Ci0rCQlyZXR1cm47DQotKwl2YWwgPSBzdHJkdXAodmFsKTsNCi0rCWlmICghdmFsKQ0KLSsJCXJl dHVybjsNCi0rDQotKwljID0gc3RyY2hyKHZhbCwgJyAnKTsNCi0rCWlmICghYykNCi0rCQlyZXR1 cm47DQotKwkqYyA9ICdcMCc7DQotKw0KLSsJcyA9IGdldGFkZHJpbmZvKHZhbCwgTlVMTCwgJmhp bnRzLCAmcmVzdWx0KTsNCi0rCWlmIChzICE9IDApIHsNCi0rCQljc3luY19kZWJ1ZygxLCAiZ2V0 YWRkcmluZm86ICVzXG4iLCBnYWlfc3RyZXJyb3IocykpOw0KLSsJCXJldHVybjsNCi0rCX0NCi0r DQotKwkvKiBnZXRhZGRyaW5mbygpIG1heSByZXR1cm4gYSBsaXN0IG9mIGFkZHJlc3Mgc3RydWN0 dXJlcy4NCi0rCSAqIFVzZSB0aGUgZmlyc3Qgb25lLiAqLw0KLSsJaWYgKHJlc3VsdCkNCi0rCQlt ZW1jcHkocCwgcmVzdWx0LT5haV9hZGRyLCByZXN1bHQtPmFpX2FkZHJsZW4pOw0KLSsJZnJlZWFk ZHJpbmZvKHJlc3VsdCk7DQotK30NCi0rDQotIHZvaWQgY3N5bmNfZGFlbW9uX3Nlc3Npb24oKQ0K LSB7DQotLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gcGVlcm5hbWU7DQotLQlzdHJ1Y3QgaG9zdGVudCAq aHA7DQotLQlpbnQgcGVlcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOw0KLSsJc3Ry dWN0IHN0YXQgc2I7DQotKwlhZGRyZXNzX3QgcGVlcm5hbWUgPSB7IC5zYS5zYV9mYW1pbHkgPSBB Rl9VTlNQRUMsIH07DQotKwlzb2NrbGVuX3QgcGVlcmxlbiA9IHNpemVvZihwZWVybmFtZSk7DQot IAljaGFyIGxpbmVbNDA5Nl0sICpwZWVyPTAsICp0YWdbMzJdOw0KLSAJaW50IGk7DQotIA0KLS0J aWYgKCBnZXRwZWVybmFtZSgwLCAoc3RydWN0IHNvY2thZGRyKikmcGVlcm5hbWUsICZwZWVybGVu KSA9PSAtMSApDQotLQkJY3N5bmNfZmF0YWwoIkNhbid0IHJ1biBnZXRwZWVybmFtZSBvbiBmZCAw OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7DQotKw0KLSsJaWYgKGZzdGF0KDAsICZzYikpDQotKwkJ Y3N5bmNfZmF0YWwoIkNhbid0IHJ1biBmc3RhdCBvbiBmZCAwOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7DQotKw0KLSsJc3dpdGNoIChzYi5zdF9tb2RlICYgU19JRk1UKSB7DQotKwljYXNlIFNfSUZT T0NLOg0KLSsJCWlmICggZ2V0cGVlcm5hbWUoMCwgJnBlZXJuYW1lLnNhLCAmcGVlcmxlbikgPT0g LTEgKQ0KLSsJCQljc3luY19mYXRhbCgiQ2FuJ3QgcnVuIGdldHBlZXJuYW1lIG9uIGZkIDA6ICVz Iiwgc3RyZXJyb3IoZXJybm8pKTsNCi0rCQlicmVhazsNCi0rCWNhc2UgU19JRklGTzoNCi0rCQlz ZXRfcGVlcm5hbWVfZnJvbV9lbnYoJnBlZXJuYW1lLCAiU1NIX0NMSUVOVCIpOw0KLSsJCWJyZWFr Ow0KLSsJCS8qIGZhbGwgdGhyb3VnaCAqLw0KLSsJZGVmYXVsdDoNCi0rCQljc3luY19mYXRhbCgi SSdtIG9ubHkgdGFsa2luZyB0byBzb2NrZXRzIG9yIHBpcGVzISAleFxuIiwgc2Iuc3RfbW9kZSAm IFNfSUZNVCk7DQotKwkJYnJlYWs7DQotKwl9DQotIA0KLSAJd2hpbGUgKCBjb25uX2dldHMobGlu ZSwgNDA5NikgKSB7DQotIAkJaW50IGNtZG5yOw0KLUBAIC0yNDYsMTMgKzQ3OSw4IEBAIHZvaWQg Y3N5bmNfZGFlbW9uX3Nlc3Npb24oKQ0KLSAJCWNtZF9lcnJvciA9IDA7DQotIA0KLSAJCWlmICgg Y21kdGFiW2NtZG5yXS5uZWVkX2lkZW50ICYmICFwZWVyICkgew0KLS0JCQl1bmlvbiB7DQotLQkJ CQlpbl9hZGRyX3QgYWRkcjsNCi0tCQkJCXVuc2lnbmVkIGNoYXIgb2N0WzRdOw0KLS0JCQl9IHRt cDsNCi0tCQkJdG1wLmFkZHIgPSBwZWVybmFtZS5zaW5fYWRkci5zX2FkZHI7DQotLQkJCWNvbm5f cHJpbnRmKCJEZWFyICVkLiVkLiVkLiVkLCBwbGVhc2UgaWRlbnRpZnkgZmlyc3QuXG4iLA0KLS0J CQkJCXRtcC5vY3RbMF0sIHRtcC5vY3RbMV0sIHRtcC5vY3RbMl0sIHRtcC5vY3RbM10pOw0KLSsJ CQljb25uX3ByaW50ZigiRGVhciAlcywgcGxlYXNlIGlkZW50aWZ5IGZpcnN0LlxuIiwNCi0rCQkJ CSAgICBjc3luY19pbmV0X250b3AoJnBlZXJuYW1lKSA/OiAic3RyYW5nZXIiKTsNCi0gCQkJZ290 byBuZXh0X2NtZDsNCi0gCQl9DQotIA0KLUBAIC00NDMsOCArNjcxLDggQEAgdm9pZCBjc3luY19k YWVtb25fc2Vzc2lvbigpDQotIAkJCQkJc3RyY21wKHRhZ1syXSwgIi0iKSA/IHVybF9lbmNvZGUo dGFnWzJdKSA6ICIiLA0KLSAJCQkJCXN0cmNtcCh0YWdbMl0sICItIikgPyAiJyIgOiAiIikNCi0g CQkJew0KLS0JCQkJaWYgKCBjc3luY19tYXRjaF9maWxlX2hvc3QodXJsX2RlY29kZShTUUxfVlsx XSksIHRhZ1sxXSwgcGVlciwgKGNvbnN0IGNoYXIgKiopJnRhZ1szXSkgKQ0KLS0JCQkJCWNvbm5f cHJpbnRmKCIlc1x0JXNcbiIsIFNRTF9WWzBdLCBTUUxfVlsxXSk7DQotKwkJCQlpZiAoIGNzeW5j X21hdGNoX2ZpbGVfaG9zdCh1cmxfZGVjb2RlKFNRTF9WKDEpKSwgdGFnWzFdLCBwZWVyLCAoY29u c3QgY2hhciAqKikmdGFnWzNdKSApDQotKwkJCQkJY29ubl9wcmludGYoIiVzXHQlc1xuIiwgU1FM X1YoMCksIFNRTF9WKDEpKTsNCi0gCQkJfSBTUUxfRU5EOw0KLSAJCQlicmVhazsNCi0gDQotQEAg LTQ1NCwxOCArNjgyLDE4IEBAIHZvaWQgY3N5bmNfZGFlbW9uX3Nlc3Npb24oKQ0KLSAJCQkJY3N5 bmNfZGVidWdfbGV2ZWwgPSBhdG9pKHRhZ1sxXSk7DQotIAkJCWJyZWFrOw0KLSAJCWNhc2UgQV9I RUxMTzoNCi0tCQkJaWYgKHBlZXIpIGZyZWUocGVlcik7DQotLQkJCWhwID0gZ2V0aG9zdGJ5bmFt ZSh0YWdbMV0pOw0KLS0JCQlpZiAoIGhwICE9IDAgJiYgcGVlcm5hbWUuc2luX2ZhbWlseSA9PSBo cC0+aF9hZGRydHlwZSAmJg0KLS0JCQkgICAgICFtZW1jbXAoaHAtPmhfYWRkciwgJnBlZXJuYW1l LnNpbl9hZGRyLCBocC0+aF9sZW5ndGgpICYmDQotLQkJCSAgICAgY29ubl9jaGVja19wZWVyX2Nl cnQodGFnWzFdLCAwKSkgew0KLSsJCQlpZiAocGVlcikgew0KLSsJCQkJZnJlZShwZWVyKTsNCi0r CQkJCXBlZXIgPSBOVUxMOw0KLSsJCQl9DQotKwkJCWlmICh2ZXJpZnlfcGVlcm5hbWUodGFnWzFd LCAmcGVlcm5hbWUpKSB7DQotIAkJCQlwZWVyID0gc3RyZHVwKHRhZ1sxXSk7DQotIAkJCX0gZWxz ZSB7DQotLQkJCQlwZWVyID0gMDsNCi0rCQkJCXBlZXIgPSBOVUxMOw0KLSAJCQkJY21kX2Vycm9y ID0gIklkZW50aWZpY2F0aW9uIGZhaWxlZCEiOw0KLSAJCQkJYnJlYWs7DQotIAkJCX0NCi0tI2lm ZGVmIEhBVkVfTElCR05VVExTX09QRU5TU0wNCi0rI2lmZGVmIEhBVkVfTElCR05VVExTDQotIAkJ CWlmICghY3N5bmNfY29ubl91c2Vzc2wpIHsNCi0gCQkJCXN0cnVjdCBjc3luY19ub3NzbCAqdDsN Ci0gCQkJCWZvciAodCA9IGNzeW5jX25vc3NsOyB0OyB0PXQtPm5leHQpIHsNCi1AQCAtNTA3LDcg KzczNSw3IEBAIGZvdW5kX2FzYWN0aXZlOiA7DQotIAkJCWJyZWFrOw0KLSAJCWNhc2UgQV9CWUU6 DQotIAkJCWZvciAoaT0wOyBpPDMyOyBpKyspDQotLQkJCQl0YWdbaV0gPSBzdHJkdXAodXJsX2Rl Y29kZSh0YWdbaV0pKTsNCi0rCQkJCWZyZWUodGFnW2ldKTsNCi0gCQkJY29ubl9wcmludGYoIk9L IChjdV9sYXRlcikuXG4iKTsNCi0gCQkJcmV0dXJuOw0KLSAJCX0NCi1AQCAtNTI5LDcgKzc1Nyw2 IEBAIGFib3J0X2NtZDoNCi0gDQotIG5leHRfY21kOg0KLSAJCWZvciAoaT0wOyBpPDMyOyBpKysp DQotLQkJCXRhZ1tpXSA9IHN0cmR1cCh1cmxfZGVjb2RlKHRhZ1tpXSkpOw0KLSsJCQlmcmVlKHRh Z1tpXSk7DQotIAl9DQotIH0NCi0tDQotZGlmZiAtLWdpdCBhL2RiLmMgYi9kYi5jDQotaW5kZXgg MWNkNjk1My4uNjg4NDhiMyAxMDA2NDQNCi0tLS0gYS9kYi5jDQotKysrIGIvZGIuYw0KLUBAIC0x OSwxMyArMTksMTMgQEANCi0gICovDQotIA0KLSAjaW5jbHVkZSAiY3N5bmMyLmgiDQotLSNpbmNs dWRlIDxzcWxpdGUuaD4NCi0gI2luY2x1ZGUgPHN0ZGlvLmg+DQotICNpbmNsdWRlIDxzdGRhcmcu aD4NCi0gI2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSAjaW5jbHVkZSA8dW5pc3RkLmg+DQotICNpbmNs dWRlIDxzaWduYWwuaD4NCi0gI2luY2x1ZGUgPHRpbWUuaD4NCi0rI2luY2x1ZGUgImRiX2FwaS5o Ig0KLSANCi0gI2RlZmluZSBERUFETE9DS19NRVNTQUdFIFwNCi0gCSJEYXRhYmFzZSBiYWNrZW5k IGlzIGV4Y2VlZGluZ2x5IGJ1c3kgPT4gVGVybWluYXRpbmcgKHJlcXVlc3RpbmcgcmV0cnkpLlxu Ig0KLUBAIC0zMywxNCArMzMsMTYgQEANCi0gaW50IGRiX2Jsb2NraW5nX21vZGUgPSAxOw0KLSBp bnQgZGJfc3luY19tb2RlID0gMTsNCi0gDQotLXN0YXRpYyBzcWxpdGUgKmRiID0gMDsNCi0rZXh0 ZXJuIGludCBkYl90eXBlOyANCi0rc3RhdGljIGRiX2Nvbm5fcCBkYiA9IDA7DQotKy8vIFRPRE8g bWFrZSBjb25maWd1cmFibGUNCi0raW50IHdhaXQgPSAxOw0KLSANCi0gc3RhdGljIGludCBnZXRf ZGJsb2NrX3RpbWVvdXQoKQ0KLSB7DQotLQlyZXR1cm4gZ2V0cGlkKCkgJSA3ICsgMTI7DQotKwly ZXR1cm4gZ2V0cGlkKCkgJSA3ICsgY3N5bmNfbG9ja190aW1lb3V0Ow0KLSB9DQotIA0KLS0NCi0g c3RhdGljIGludCB0cXVlcmllc19jb3VudGVyID0gLTUwOw0KLSBzdGF0aWMgdGltZV90IHRyYW5z YWN0aW9uX2JlZ2luID0gMDsNCi0gc3RhdGljIHRpbWVfdCBsYXN0X3dhaXRfY3ljbGUgPSAwOw0K LUBAIC01OCw3ICs2MCw3IEBAIHZvaWQgY3N5bmNfZGJfYWxhcm1oYW5kbGVyKGludCBzaWdudW0p DQotIAliZWdpbl9jb21taXRfcmVjdXJzaW9uKys7DQotIA0KLSAJY3N5bmNfZGVidWcoMiwgIkRh dGFiYXNlIGlkbGUgaW4gdHJhbnNhY3Rpb24uIEZvcmNpbmcgQ09NTUlULlxuIik7DQotLQlTUUwo IkNPTU1JVCBUUkFOU0FDVElPTiIsICJDT01NSVQgVFJBTlNBQ1RJT04iKTsNCi0rCVNRTCgiQ09N TUlUICIsICJDT01NSVQgIik7DQotIAl0cXVlcmllc19jb3VudGVyID0gLTEwOw0KLSANCi0gCWJl Z2luX2NvbW1pdF9yZWN1cnNpb24tLTsNCi1AQCAtODIsNyArODQsNyBAQCB2b2lkIGNzeW5jX2Ri X21heWJlZ2luKCkNCi0gCQl0cmFuc2FjdGlvbl9iZWdpbiA9IHRpbWUoMCk7DQotIAkJaWYgKCFs YXN0X3dhaXRfY3ljbGUpDQotIAkJCWxhc3Rfd2FpdF9jeWNsZSA9IHRyYW5zYWN0aW9uX2JlZ2lu Ow0KLS0JCVNRTCgiQkVHSU4gVFJBTlNBQ1RJT04iLCAiQkVHSU4gVFJBTlNBQ1RJT04iKTsNCi0r CQlTUUwoIkJFR0lOICIsICJCRUdJTiAiKTsNCi0gCX0NCi0gDQotIAliZWdpbl9jb21taXRfcmVj dXJzaW9uLS07DQotQEAgLTEwMyw5ICsxMDUsMTEgQEAgdm9pZCBjc3luY19kYl9tYXljb21taXQo KQ0KLSAJbm93ID0gdGltZSgwKTsNCi0gDQotIAlpZiAoKG5vdyAtIGxhc3Rfd2FpdF9jeWNsZSkg PiAxMCkgew0KLS0JCVNRTCgiQ09NTUlUIFRSQU5TQUNUSU9OIiwgIkNPTU1JVCBUUkFOU0FDVElP TiIpOw0KLS0JCWNzeW5jX2RlYnVnKDIsICJXYWl0aW5nIDIgc2VjcyBzbyBvdGhlcnMgY2FuIGxv Y2sgdGhlIGRhdGFiYXNlICglZCAtICVkKS4uLlxuIiwgKGludClub3csIChpbnQpbGFzdF93YWl0 X2N5Y2xlKTsNCi0tCQlzbGVlcCgyKTsNCi0rCQlTUUwoIkNPTU1JVCIsICJDT01NSVQgIik7DQot KwkJaWYgKHdhaXQpIHsNCi0rCQkgIGNzeW5jX2RlYnVnKDIsICJXYWl0aW5nICVkIHNlY3Mgc28g b3RoZXJzIGNhbiBsb2NrIHRoZSBkYXRhYmFzZSAoJWQgLSAlZCkuLi5cbiIsIHdhaXQsIChpbnQp bm93LCAoaW50KWxhc3Rfd2FpdF9jeWNsZSk7DQotKwkJICBzbGVlcCh3YWl0KTsNCi0rCQl9DQot IAkJbGFzdF93YWl0X2N5Y2xlID0gMDsNCi0gCQl0cXVlcmllc19jb3VudGVyID0gLTEwOw0KLSAJ CWJlZ2luX2NvbW1pdF9yZWN1cnNpb24tLTsNCi1AQCAtMTEzLDcgKzExNyw3IEBAIHZvaWQgY3N5 bmNfZGJfbWF5Y29tbWl0KCkNCi0gCX0NCi0gDQotIAlpZiAoKHRxdWVyaWVzX2NvdW50ZXIgPiAx MDAwKSB8fCAoKG5vdyAtIHRyYW5zYWN0aW9uX2JlZ2luKSA+IDMpKSB7DQotLQkJU1FMKCJDT01N SVQgVFJBTlNBQ1RJT04iLCAiQ09NTUlUIFRSQU5TQUNUSU9OIik7DQotKwkgICAgICAgIFNRTCgi Q09NTUlUICIsICJDT01NSVQgIik7DQotIAkJdHF1ZXJpZXNfY291bnRlciA9IDA7DQotIAkJYmVn aW5fY29tbWl0X3JlY3Vyc2lvbi0tOw0KLSAJCXJldHVybjsNCi1AQCAtMTI4LDQ1ICsxMzIsMjMg QEAgdm9pZCBjc3luY19kYl9tYXljb21taXQoKQ0KLSANCi0gdm9pZCBjc3luY19kYl9vcGVuKGNv bnN0IGNoYXIgKmZpbGUpDQotIHsNCi0tCWRiID0gc3FsaXRlX29wZW4oZmlsZSwgMCwgMCk7DQot LQlpZiAoIGRiID09IDAgKQ0KLSsgICAgICAgIGludCByYyA9IGRiX29wZW4oZmlsZSwgZGJfdHlw ZSwgJmRiKTsNCi0rCWlmICggcmMgIT0gREJfT0sgKQ0KLSAJCWNzeW5jX2ZhdGFsKCJDYW4ndCBv cGVuIGRhdGFiYXNlOiAlc1xuIiwgZmlsZSk7DQotIA0KLSsJZGJfc2V0X2xvZ2dlcihkYiwgY3N5 bmNfZGVidWcpOw0KLSsNCi0gCS8qIGlnbm9yZSBlcnJvcnMgb24gdGFibGUgY3JlYXRpb24gKi8N Ci0gCWluX3NxbF9xdWVyeSsrOw0KLS0Jc3FsaXRlX2V4ZWMoZGIsDQotLQkJIkNSRUFURSBUQUJM RSBmaWxlICgiDQotLQkJIglmaWxlbmFtZSwgY2hlY2t0eHQsIg0KLS0JCSIJVU5JUVVFICggZmls ZW5hbWUgKSBPTiBDT05GTElDVCBSRVBMQUNFIg0KLS0JCSIpIiwNCi0tCQkwLCAwLCAwKTsNCi0t CXNxbGl0ZV9leGVjKGRiLA0KLS0JCSJDUkVBVEUgVEFCTEUgZGlydHkgKCINCi0tCQkiCWZpbGVu YW1lLCBmb3JjZSwgbXluYW1lLCBwZWVybmFtZSwiDQotLQkJIglVTklRVUUgKCBmaWxlbmFtZSwg cGVlcm5hbWUgKSBPTiBDT05GTElDVCBJR05PUkUiDQotLQkJIikiLA0KLS0JCTAsIDAsIDApOw0K LS0Jc3FsaXRlX2V4ZWMoZGIsDQotLQkJIkNSRUFURSBUQUJMRSBoaW50ICgiDQotLQkJIglmaWxl bmFtZSwgcmVjdXJzaXZlLCINCi0tCQkiCVVOSVFVRSAoIGZpbGVuYW1lLCByZWN1cnNpdmUgKSBP TiBDT05GTElDVCBJR05PUkUiDQotLQkJIikiLA0KLS0JCTAsIDAsIDApOw0KLS0Jc3FsaXRlX2V4 ZWMoZGIsDQotLQkJIkNSRUFURSBUQUJMRSBhY3Rpb24gKCINCi0tCQkiCWZpbGVuYW1lLCBjb21t YW5kLCBsb2dmaWxlLCINCi0tCQkiCVVOSVFVRSAoIGZpbGVuYW1lLCBjb21tYW5kICkgT04gQ09O RkxJQ1QgSUdOT1JFIg0KLS0JCSIpIiwNCi0tCQkwLCAwLCAwKTsNCi0tCXNxbGl0ZV9leGVjKGRi LA0KLS0JCSJDUkVBVEUgVEFCTEUgeDUwOV9jZXJ0ICgiDQotLQkJIglwZWVybmFtZSwgY2VydGRh dGEsIg0KLS0JCSIJVU5JUVVFICggcGVlcm5hbWUgKSBPTiBDT05GTElDVCBJR05PUkUiDQotLQkJ IikiLA0KLS0JCTAsIDAsIDApOw0KLSsNCi0rCWlmIChkYl9zY2hlbWFfdmVyc2lvbihkYikgPCBE Ql9TQ0hFTUFfVkVSU0lPTikNCi0rCQlpZiAoZGJfdXBncmFkZV90b19zY2hlbWEoZGIsIERCX1ND SEVNQV9WRVJTSU9OKSAhPSBEQl9PSykNCi0rCQkJY3N5bmNfZmF0YWwoIkNhbm5vdCBjcmVhdGUg ZGF0YWJhc2UgdGFibGVzICh2ZXJzaW9uIHJlcXVlc3RlZCA9ICVkKTogJXNcbiIsIERCX1NDSEVN QV9WRVJTSU9OLCBkYl9lcnJtc2coZGIpKTsNCi0rDQotIAlpZiAoIWRiX3N5bmNfbW9kZSkNCi0t CQlzcWxpdGVfZXhlYyhkYiwgIlBSQUdNQSBzeW5jaHJvbm91cyA9IE9GRiIsIDAsIDAsIDApOw0K LSsJCWRiX2V4ZWMoZGIsICJQUkFHTUEgc3luY2hyb25vdXMgPSBPRkYiKTsNCi0gCWluX3NxbF9x dWVyeS0tOw0KLSsJLy8gcmV0dXJuIGRiOw0KLSB9DQotIA0KLSB2b2lkIGNzeW5jX2RiX2Nsb3Nl KCkNCi1AQCAtMTc1LDEwICsxNTcsMTAgQEAgdm9pZCBjc3luY19kYl9jbG9zZSgpDQotIA0KLSAJ YmVnaW5fY29tbWl0X3JlY3Vyc2lvbisrOw0KLSAJaWYgKHRxdWVyaWVzX2NvdW50ZXIgPiAwKSB7 DQotLQkJU1FMKCJDT01NSVQgVFJBTlNBQ1RJT04iLCAiQ09NTUlUIFRSQU5TQUNUSU9OIik7DQot KwkgICAgICAgIFNRTCgiQ09NTUlUICIsICJDT01NSVQgIik7DQotIAkJdHF1ZXJpZXNfY291bnRl ciA9IC0xMDsNCi0gCX0NCi0tCXNxbGl0ZV9jbG9zZShkYik7DQotKwlkYl9jbG9zZShkYik7DQot IAliZWdpbl9jb21taXRfcmVjdXJzaW9uLS07DQotIAlkYiA9IDA7DQotIH0NCi1AQCAtMTkwLDcg KzE3Miw3IEBAIHZvaWQgY3N5bmNfZGJfc3FsKGNvbnN0IGNoYXIgKmVyciwgY29uc3QgY2hhciAq Zm10LCAuLi4pDQotIAlpbnQgcmMsIGJ1c3ljID0gMDsNCi0gDQotIAl2YV9zdGFydChhcCwgZm10 KTsNCi0tCXZhc3ByaW50Zigmc3FsLCBmbXQsIGFwKTsNCi0rCVZBU1BSSU5URigmc3FsLCBmbXQs IGFwKTsNCi0gCXZhX2VuZChhcCk7DQotIA0KLSAJaW5fc3FsX3F1ZXJ5Kys7DQotQEAgLTE5OSwx NSArMTgxLDE1IEBAIHZvaWQgY3N5bmNfZGJfc3FsKGNvbnN0IGNoYXIgKmVyciwgY29uc3QgY2hh ciAqZm10LCAuLi4pDQotIAljc3luY19kZWJ1ZygyLCAiU1FMOiAlc1xuIiwgc3FsKTsNCi0gDQot IAl3aGlsZSAoMSkgew0KLS0JCXJjID0gc3FsaXRlX2V4ZWMoZGIsIHNxbCwgMCwgMCwgMCk7DQot LQkJaWYgKCByYyAhPSBTUUxJVEVfQlVTWSApIGJyZWFrOw0KLS0JCWlmIChidXN5YysrID4gZ2V0 X2RibG9ja190aW1lb3V0KCkpIHsgZGIgPSAwOyBjc3luY19mYXRhbChERUFETE9DS19NRVNTQUdF KTsgfQ0KLS0JCWNzeW5jX2RlYnVnKDIsICJEYXRhYmFzZSBpcyBidXN5LCBzbGVlcGluZyBhIHNl Yy5cbiIpOw0KLS0JCXNsZWVwKDEpOw0KLSsJICByYyA9IGRiX2V4ZWMoZGIsIHNxbCk7DQotKwkg IGlmICggcmMgIT0gREJfQlVTWSApIGJyZWFrOw0KLSsJICBpZiAoYnVzeWMrKyA+IGdldF9kYmxv Y2tfdGltZW91dCgpKSB7IGRiID0gMDsgY3N5bmNfZmF0YWwoREVBRExPQ0tfTUVTU0FHRSk7IH0N Ci0rCSAgY3N5bmNfZGVidWcoMiwgIkRhdGFiYXNlIGlzIGJ1c3ksIHNsZWVwaW5nIGEgc2VjLlxu Iik7DQotKwkgIHNsZWVwKDEpOw0KLSAJfQ0KLSANCi0tCWlmICggcmMgIT0gU1FMSVRFX09LICYm IGVyciApDQotLQkJY3N5bmNfZmF0YWwoIkRhdGFiYXNlIEVycm9yOiAlcyBbJWRdOiAlc1xuIiwg ZXJyLCByYywgc3FsKTsNCi0rCWlmICggcmMgIT0gREJfT0sgJiYgZXJyICkNCi0rCQljc3luY19m YXRhbCgiRGF0YWJhc2UgRXJyb3I6ICVzIFslZF06ICVzIG9uIGV4ZWN1dGluZyAlc1xuIiwgZXJy LCByYywgZGJfZXJybXNnKGRiKSwgc3FsKTsNCi0gCWZyZWUoc3FsKTsNCi0gDQotIAljc3luY19k Yl9tYXljb21taXQoKTsNCi1AQCAtMjE2LDc3ICsxOTgsMTQwIEBAIHZvaWQgY3N5bmNfZGJfc3Fs KGNvbnN0IGNoYXIgKmVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pDQotIA0KLSB2b2lkKiBjc3lu Y19kYl9iZWdpbihjb25zdCBjaGFyICplcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KLSB7DQot LQlzcWxpdGVfdm0gKnZtOw0KLSsJZGJfc3RtdF9wIHN0bXQgPSBOVUxMOw0KLSAJY2hhciAqc3Fs Ow0KLSAJdmFfbGlzdCBhcDsNCi0gCWludCByYywgYnVzeWMgPSAwOw0KLS0NCi0rCWNoYXIgKnBw VGFpbDsgDQotIAl2YV9zdGFydChhcCwgZm10KTsNCi0tCXZhc3ByaW50Zigmc3FsLCBmbXQsIGFw KTsNCi0rCVZBU1BSSU5URigmc3FsLCBmbXQsIGFwKTsNCi0gCXZhX2VuZChhcCk7DQotIA0KLSAJ aW5fc3FsX3F1ZXJ5Kys7DQotIAljc3luY19kYl9tYXliZWdpbigpOw0KLSANCi0gCWNzeW5jX2Rl YnVnKDIsICJTUUw6ICVzXG4iLCBzcWwpOw0KLS0NCi0gCXdoaWxlICgxKSB7DQotLQkJcmMgPSBz cWxpdGVfY29tcGlsZShkYiwgc3FsLCAwLCAmdm0sIDApOw0KLS0JCWlmICggcmMgIT0gU1FMSVRF X0JVU1kgKSBicmVhazsNCi0rCSAgICAgICAgcmMgPSBkYl9wcmVwYXJlX3N0bXQoZGIsIHNxbCwg JnN0bXQsICZwcFRhaWwpOw0KLSsJCWlmICggcmMgIT0gREJfQlVTWSApIGJyZWFrOw0KLSAJCWlm IChidXN5YysrID4gZ2V0X2RibG9ja190aW1lb3V0KCkpIHsgZGIgPSAwOyBjc3luY19mYXRhbChE RUFETE9DS19NRVNTQUdFKTsgfQ0KLSAJCWNzeW5jX2RlYnVnKDIsICJEYXRhYmFzZSBpcyBidXN5 LCBzbGVlcGluZyBhIHNlYy5cbiIpOw0KLSAJCXNsZWVwKDEpOw0KLSAJfQ0KLSANCi0tCWlmICgg cmMgIT0gU1FMSVRFX09LICYmIGVyciApDQotLQkJY3N5bmNfZmF0YWwoIkRhdGFiYXNlIEVycm9y OiAlcyBbJWRdOiAlc1xuIiwgZXJyLCByYywgc3FsKTsNCi0rCWlmICggcmMgIT0gREJfT0sgJiYg ZXJyICkNCi0rCQljc3luY19mYXRhbCgiRGF0YWJhc2UgRXJyb3I6ICVzIFslZF06ICVzIG9uIGV4 ZWN1dGluZyAlc1xuIiwgZXJyLCByYywgZGJfZXJybXNnKGRiKSwgc3FsKTsNCi0gCWZyZWUoc3Fs KTsNCi0gDQotLQlyZXR1cm4gdm07DQotKwlyZXR1cm4gc3RtdDsNCi0rfQ0KLSsNCi0rY29uc3Qg Y2hhciAqY3N5bmNfZGJfZ2V0X2NvbHVtbl90ZXh0KHZvaWQgICpzdG10LCBpbnQgY29sdW1uKSB7 DQotKwlyZXR1cm4gZGJfc3RtdF9nZXRfY29sdW1uX3RleHQoc3RtdCwgY29sdW1uKTsNCi0rfQ0K LSsNCi0raW50IGNzeW5jX2RiX2dldF9jb2x1bW5faW50KHZvaWQgKnN0bXQsIGludCBjb2x1bW4p IHsNCi0rICByZXR1cm4gZGJfc3RtdF9nZXRfY29sdW1uX2ludCgoZGJfc3RtdF9wKSBzdG10LCBj b2x1bW4pOw0KLSB9DQotIA0KLSBpbnQgY3N5bmNfZGJfbmV4dCh2b2lkICp2bXgsIGNvbnN0IGNo YXIgKmVyciwNCi0gCQlpbnQgKnBOLCBjb25zdCBjaGFyICoqKnBhelZhbHVlLCBjb25zdCBjaGFy ICoqKnBhekNvbE5hbWUpDQotIHsNCi0tCXNxbGl0ZV92bSAqdm0gPSB2bXg7DQotKwlkYl9zdG10 X3Agc3RtdCA9IHZteDsNCi0gCWludCByYywgYnVzeWMgPSAwOw0KLSANCi0gCWNzeW5jX2RlYnVn KDQsICJUcnlpbmcgdG8gZmV0Y2ggYSByb3cgZnJvbSB0aGUgZGF0YWJhc2UuXG4iKTsNCi0gDQot IAl3aGlsZSAoMSkgew0KLS0JCXJjID0gc3FsaXRlX3N0ZXAodm0sIHBOLCBwYXpWYWx1ZSwgcGF6 Q29sTmFtZSk7DQotLQkJaWYgKCByYyAhPSBTUUxJVEVfQlVTWSApIGJyZWFrOw0KLS0JCWlmIChi dXN5YysrID4gZ2V0X2RibG9ja190aW1lb3V0KCkpIHsgZGIgPSAwOyBjc3luY19mYXRhbChERUFE TE9DS19NRVNTQUdFKTsgfQ0KLSsJCXJjID0gZGJfc3RtdF9uZXh0KHN0bXQpOw0KLSsJCWlmICgg cmMgIT0gREJfQlVTWSApIA0KLSsJCSAgYnJlYWs7DQotKwkJaWYgKGJ1c3ljKysgPiBnZXRfZGJs b2NrX3RpbWVvdXQoKSkgeyANCi0rCQkgIGRiID0gMDsgDQotKwkJICBjc3luY19mYXRhbChERUFE TE9DS19NRVNTQUdFKTsgDQotKwkJfQ0KLSAJCWNzeW5jX2RlYnVnKDIsICJEYXRhYmFzZSBpcyBi dXN5LCBzbGVlcGluZyBhIHNlYy5cbiIpOw0KLSAJCXNsZWVwKDEpOw0KLSAJfQ0KLSANCi0tCWlm ICggcmMgIT0gU1FMSVRFX09LICYmIHJjICE9IFNRTElURV9ST1cgJiYNCi0tCSAgICAgcmMgIT0g U1FMSVRFX0RPTkUgJiYgZXJyICkNCi0tCQljc3luY19mYXRhbCgiRGF0YWJhc2UgRXJyb3I6ICVz IFslZF0uXG4iLCBlcnIsIHJjKTsNCi0rCWlmICggcmMgIT0gREJfT0sgJiYgcmMgIT0gREJfUk9X ICYmDQotKwkgICAgIHJjICE9IERCX0RPTkUgJiYgZXJyICkNCi0rCQljc3luY19mYXRhbCgiRGF0 YWJhc2UgRXJyb3I6ICVzIFslZF06ICVzXG4iLCBlcnIsIHJjLCBkYl9lcnJtc2coZGIpKTsNCi0r DQotKwlyZXR1cm4gcmMgPT0gREJfUk9XOw0KLSt9DQotIA0KLS0JcmV0dXJuIHJjID09IFNRTElU RV9ST1c7DQotK2NvbnN0IHZvaWQgKiBjc3luY19kYl9jb2xibG9iKHZvaWQgKnN0bXR4LCBpbnQg Y29sKSB7DQotKyAgICAgICBkYl9zdG10X3Agc3RtdCA9IHN0bXR4Ow0KLSsgICAgICAgY29uc3Qg dm9pZCAqcHRyID0gc3RtdC0+Z2V0X2NvbHVtbl9ibG9iKHN0bXQsIGNvbCk7DQotKyAgICAgICBp ZiAoc3RtdC0+ZGIgJiYgc3RtdC0+ZGItPmxvZ2dlcikgew0KLSsJIHN0bXQtPmRiLT5sb2dnZXIo NCwgIkRCIGdldCBibG9iOiAlcyAiLCAoY2hhciAqKSBwdHIpOw0KLSsgICAgICAgfQ0KLSsgICAg ICAgcmV0dXJuIHB0cjsNCi0gfQ0KLSANCi0gdm9pZCBjc3luY19kYl9maW4odm9pZCAqdm14LCBj b25zdCBjaGFyICplcnIpDQotIHsNCi0tCXNxbGl0ZV92bSAqdm0gPSB2bXg7DQotKyAgICAgICAg ZGJfc3RtdF9wIHN0bXQgPSAoZGJfc3RtdF9wKSB2bXg7DQotIAlpbnQgcmMsIGJ1c3ljID0gMDsN Ci0gDQotKwlpZiAodm14ID09IE5VTEwpDQotKwkgICByZXR1cm47DQotKw0KLSAJY3N5bmNfZGVi dWcoMiwgIlNRTCBRdWVyeSBmaW5pc2hlZC5cbiIpOw0KLSANCi0gCXdoaWxlICgxKSB7DQotLQkJ cmMgPSBzcWxpdGVfZmluYWxpemUodm0sIDApOw0KLS0JCWlmICggcmMgIT0gU1FMSVRFX0JVU1kg KSBicmVhazsNCi0tCQlpZiAoYnVzeWMrKyA+IGdldF9kYmxvY2tfdGltZW91dCgpKSB7IGRiID0g MDsgY3N5bmNfZmF0YWwoREVBRExPQ0tfTUVTU0FHRSk7IH0NCi0tCQljc3luY19kZWJ1ZygyLCAi RGF0YWJhc2UgaXMgYnVzeSwgc2xlZXBpbmcgYSBzZWMuXG4iKTsNCi0tCQlzbGVlcCgxKTsNCi0r CSAgcmMgPSBkYl9zdG10X2Nsb3NlKHN0bXQpOw0KLSsJICBpZiAoIHJjICE9IERCX0JVU1kgKSAN Ci0rCSAgICBicmVhazsNCi0rCSAgaWYgKGJ1c3ljKysgPiBnZXRfZGJsb2NrX3RpbWVvdXQoKSkg eyBkYiA9IDA7IGNzeW5jX2ZhdGFsKERFQURMT0NLX01FU1NBR0UpOyB9DQotKwkgIGNzeW5jX2Rl YnVnKDIsICJEYXRhYmFzZSBpcyBidXN5LCBzbGVlcGluZyBhIHNlYy5cbiIpOw0KLSsJICBzbGVl cCgxKTsNCi0gCX0NCi0gDQotLQlpZiAoIHJjICE9IFNRTElURV9PSyAmJiBlcnIgKQ0KLS0JCWNz eW5jX2ZhdGFsKCJEYXRhYmFzZSBFcnJvcjogJXMgWyVkXS5cbiIsIGVyciwgcmMpOw0KLSsJaWYg KCByYyAhPSBEQl9PSyAmJiBlcnIgKQ0KLSsJCWNzeW5jX2ZhdGFsKCJEYXRhYmFzZSBFcnJvcjog JXMgWyVkXTogJXNcbiIsIGVyciwgcmMsIGRiX2Vycm1zZyhkYikpOw0KLSANCi0gCWNzeW5jX2Ri X21heWNvbW1pdCgpOw0KLSAJaW5fc3FsX3F1ZXJ5LS07DQotIH0NCi0gDQotKyNpZiBkZWZpbmVk KEhBVkVfU1FMSVRFKQ0KLSsjZGVmaW5lIERCRVhURU5TSU9OICIuZGIiDQotKyNlbmRpZg0KLSsj aWYgZGVmaW5lZChIQVZFX1NRTElURTMpDQotKyNkZWZpbmUgREJFWFRFTlNJT04gIi5kYjMiDQot KyNlbmRpZg0KLSsNCi0rY2hhciAqZGJfZGVmYXVsdF9kYXRhYmFzZShjaGFyICpkYmRpciwgY2hh ciAqbXlob3N0bmFtZSwgY2hhciAqY2ZnX25hbWUpDQotK3sNCi0rCWNoYXIgKmRiOw0KLSsNCi0r I2lmIGRlZmluZWQoSEFWRV9TUUxJVEUzKQ0KLSsJaWYgKGNmZ19uYW1lWzBdICE9ICdcMCcpDQot KwkJQVNQUklOVEYoJmRiLCAic3FsaXRlMzovLyVzLyVzXyVzIiBEQkVYVEVOU0lPTiwgZGJkaXIs IG15aG9zdG5hbWUsIGNmZ25hbWUpOw0KLSsJZWxzZQ0KLSsJCUFTUFJJTlRGKCZkYiwgInNxbGl0 ZTM6Ly8lcy8lcyIgREJFWFRFTlNJT04sIGRiZGlyLCBteWhvc3RuYW1lKTsNCi0rI2VsaWYgZGVm aW5lZChIQVZFX1NRTElURSkNCi0rCWlmIChjZmdfbmFtZVswXSAhPSAnXDAnKQ0KLSsJCUFTUFJJ TlRGKCZkYiwgInNxbGl0ZTI6Ly8lcy8lc18lcyIgREJFWFRFTlNJT04sIGRiZGlyLCBteWhvc3Ru YW1lLCBjZmduYW1lKTsNCi0rCWVsc2UNCi0rCQlBU1BSSU5URigmZGIsICJzcWxpdGUyOi8vJXMv JXMiIERCRVhURU5TSU9OLCBkYmRpciwgbXlob3N0bmFtZSk7DQotKyNlbGlmIGRlZmluZWQoSEFW RV9NWVNRTCkNCi0rCWlmIChjZmdfbmFtZVswXSAhPSAnXDAnKQ0KLSsJCUFTUFJJTlRGKCZkYiwg Im15c3FsOi8vcm9vdEBsb2NhbGhvc3QvY3N5bmMyXyVzXyVzIiBEQkVYVEVOU0lPTiwgbXlob3N0 bmFtZSwgY2ZnbmFtZSk7DQotKwllbHNlDQotKwkJQVNQUklOVEYoJmRiLCAibXlzcWw6Ly9yb290 QGxvY2FsaG9zdC9jc3luYzJfJXMiIERCRVhURU5TSU9OLCBteWhvc3RuYW1lKTsNCi0rDQotKyNl bGlmIGRlZmluZWQoSEFWRV9QT1NUR1JFUykNCi0rCWlmIChjZmdfbmFtZVswXSAhPSAnXDAnKQ0K LSsJCUFTUFJJTlRGKCZkYiwgInBnc3FsOi8vcm9vdEBsb2NhbGhvc3QvY3N5bmMyXyVzXyVzIiBE QkVYVEVOU0lPTiwgbXlob3N0bmFtZSwgY2ZnbmFtZSk7DQotKwllbHNlDQotKwkJQVNQUklOVEYo JmRiLCAicGdzcWw6Ly9yb290QGxvY2FsaG9zdC9jc3luYzJfJXMiIERCRVhURU5TSU9OLCBteWhv c3RuYW1lKTsNCi0rDQotKyNlbHNlDQotKyNlcnJvciAiTm8gZGF0YWJhc2UgYmFja2VuZCBhdmFp bGFibGUuIFBsZWFzZSBpbnN0YWxsIGVpdGhlciBsaWJwZywgbGlibXlzcWxjbGllbnQgb3IgbGli c3FsaXRlLCByZWNvbmZpZ3VyZSBhbmQgcmVjb21waWxlIg0KLSsjZW5kaWYNCi0rDQotKwlyZXR1 cm4gZGI7DQotK30NCi1kaWZmIC0tZ2l0IGEvZGJfYXBpLmMgYi9kYl9hcGkuYw0KLW5ldyBmaWxl IG1vZGUgMTAwNjQ0DQotaW5kZXggMDAwMDAwMC4uYWY1NTkxYw0KLS0tLSAvZGV2L251bGwNCi0r KysgYi9kYl9hcGkuYw0KLUBAIC0wLDAgKzEsMTg2IEBADQotKy8qDQotKyAgIERCIEFQSQ0KLSsg ICANCi0rICovDQotKw0KLSsjaW5jbHVkZSAiY3N5bmMyLmgiDQotKyNpbmNsdWRlIDxzdGRpby5o Pg0KLSsjaW5jbHVkZSA8c3RkYXJnLmg+DQotKyNpbmNsdWRlIDxzdGRsaWIuaD4NCi0rI2luY2x1 ZGUgPHVuaXN0ZC5oPg0KLSsjaW5jbHVkZSA8c2lnbmFsLmg+DQotKyNpbmNsdWRlIDx0aW1lLmg+ DQotKyNpbmNsdWRlICJkYl9hcGkuaCINCi0rDQotKyNpbmNsdWRlICJkYl9teXNxbC5oIg0KLSsj aW5jbHVkZSAiZGJfcG9zdGdyZXMuaCINCi0rI2luY2x1ZGUgImRiX3NxbGl0ZS5oIg0KLSsjaW5j bHVkZSAiZGJfc3FsaXRlMi5oIg0KLSsNCi0rI2RlZmluZSBERUFETE9DS19NRVNTQUdFIFwNCi0r CSJEYXRhYmFzZSBiYWNrZW5kIGlzIGV4Y2VlZGluZ2x5IGJ1c3kgPT4gVGVybWluYXRpbmcgKHJl cXVlc3RpbmcgcmV0cnkpLlxuIg0KLSsNCi0raW50IGRiX3NxbGl0ZV9vcGVuKGNvbnN0IGNoYXIg KmZpbGUsIGRiX2Nvbm5fcCAqZGIpOyANCi0raW50IGRiX215c3FsX29wZW4oY29uc3QgY2hhciAq ZmlsZSwgZGJfY29ubl9wICpkYik7IA0KLSsNCi0raW50IGRiX2RldGVjdF90eXBlKGNvbnN0IGNo YXIgKipkYl9zdHIsIGludCB0eXBlKSB7DQotKyAgY29uc3QgY2hhciAqZGJfdHlwZXNbXSA9IHsg Im15c3FsOi8vIiwgInNxbGl0ZTM6Ly8iLCAic3FsaXRlMjovLyIsICJwZ3NxbDovLyIsIDAgfTsN Ci0rICBpbnQgdHlwZXNbXSAgICAgICAgICAgID0geyBEQl9NWVNRTCwgICBEQl9TUUxJVEUzLCAg IERCX1NRTElURTIsICAgREJfUEdTUUwgfTsgDQotKyAgaW50IGluZGV4OyANCi0rICBmb3IgKGlu ZGV4ID0gMDsgMSA7IGluZGV4KyspIHsNCi0rICAgIGlmIChkYl90eXBlc1tpbmRleF0gPT0gMCkg DQotKyAgICAgIGJyZWFrOw0KLSsgICAgaWYgKCFzdHJuY21wKCpkYl9zdHIsIGRiX3R5cGVzW2lu ZGV4XSwgc3RybGVuKGRiX3R5cGVzW2luZGV4XSkpKSB7DQotKyAgICAgICpkYl9zdHIgKz0gc3Ry bGVuKGRiX3R5cGVzW2luZGV4XSk7DQotKyAgICAgIHJldHVybiB0eXBlc1tpbmRleF07DQotKyAg ICB9DQotKyAgfQ0KLSsgIHJldHVybiB0eXBlOw0KLSt9DQotKw0KLStpbnQgZGJfb3Blbihjb25z dCBjaGFyICpmaWxlLCBpbnQgdHlwZSwgZGJfY29ubl9wICpkYikNCi0rew0KLSsgIGludCByYyA9 IERCX0VSUk9SOw0KLSsgIGNvbnN0IGNoYXIgKmRiX3N0cjsgDQotKyAgZGJfc3RyID0gZmlsZTsg DQotKw0KLSsgIHR5cGUgPSBkYl9kZXRlY3RfdHlwZSgmZGJfc3RyLCB0eXBlKTsNCi0rICAvKiBT d2l0Y2ggYmV0d2VlbiBpbXBsZW1lbnRhdGlvbiAqLw0KLSsgIHN3aXRjaCAodHlwZSkgew0KLSsg IGNhc2UgREJfU1FMSVRFMjoNCi0rICAgIHJjID0gZGJfc3FsaXRlMl9vcGVuKGRiX3N0ciwgZGIp Ow0KLSsNCi0rICAgIGlmIChyYyAhPSBEQl9PSyAmJiBkYl9zdHJbMF0gIT0gJy8nKQ0KLSsgICAg ICBmcHJpbnRmKGNzeW5jX2RlYnVnX291dCwgIkNhbm5vdCBvcGVuIGRhdGFiYXNlIGZpbGU6ICVz LCBtYXliZSB5b3UgbmVlZCB0aHJlZSBzbGFzaGVzIChsaWtlIHNxbGl0ZTovLy92YXIvbGliL2Nz eW5jMi9jc3luYzIuZGIpXG4iLCBkYl9zdHIpOw0KLSsgICAgYnJlYWs7DQotKyAgY2FzZSBEQl9T UUxJVEUzOg0KLSsgICAgcmMgPSBkYl9zcWxpdGVfb3BlbihkYl9zdHIsIGRiKTsNCi0rDQotKyAg ICBpZiAocmMgIT0gREJfT0sgJiYgZGJfc3RyWzBdICE9ICcvJykNCi0rICAgICAgZnByaW50Zihj c3luY19kZWJ1Z19vdXQsICJDYW5ub3Qgb3BlbiBkYXRhYmFzZSBmaWxlOiAlcywgbWF5YmUgeW91 IG5lZWQgdGhyZWUgc2xhc2hlcyAobGlrZSBzcWxpdGU6Ly8vdmFyL2xpYi9jc3luYzIvY3N5bmMy LmRiKVxuIiwgZGJfc3RyKTsNCi0rICAgIGJyZWFrOw0KLSsjaWZkZWYgSEFWRV9NWVNRTA0KLSsg IGNhc2UgREJfTVlTUUw6DQotKyAgICByYyA9IGRiX215c3FsX29wZW4oZGJfc3RyLCBkYik7DQot KyAgICBicmVhazsNCi0rI2Vsc2UNCi0rICBjYXNlIERCX01ZU1FMOg0KLSsgICAgY3N5bmNfZmF0 YWwoIk5vIE15c3FsIHN1cHBvcnQgY29uZmlndXJlZC4gUGxlYXNlIHJlY29uZmlndXJlIHdpdGgg LS1lbmFibGUtbXlzcWwgKGRhdGFiYXNlIGlzICVzKS5cbiIsIGZpbGUpOyAgICANCi0rICAgIHJj ID0gREJfRVJST1I7DQotKyAgICBicmVhazsNCi0rI2VuZGlmDQotKyNpZmRlZiBIQVZFX1BPU1RH UkVTDQotKyAgY2FzZSBEQl9QR1NRTDoNCi0rICAgIHJjID0gZGJfcG9zdGdyZXNfb3BlbihkYl9z dHIsIGRiKTsNCi0rICAgIGJyZWFrOw0KLSsjZWxzZQ0KLSsgIGNhc2UgREJfUEdTUUw6DQotKyAg ICBjc3luY19mYXRhbCgiTm8gUG9zdGdyZXMgU1FMIHN1cHBvcnQgY29uZmlndXJlZC4gUGxlYXNl IHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtcG9zdGdyZXMgKGRhdGFiYXNlIGlzICVzKS5cbiIs IGZpbGUpOyAgICANCi0rICAgIHJjID0gREJfRVJST1I7DQotKyAgICBicmVhazsNCi0rI2VuZGlm DQotKw0KLSsgIGRlZmF1bHQ6DQotKyAgICBjc3luY19mYXRhbCgiRGF0YWJhc2UgdHlwZSBub3Qg Zm91bmQuIENhbid0IG9wZW4gZGF0YWJhc2UgJXNcbiIsIGZpbGUpOw0KLSsgICAgcmMgPSBEQl9F UlJPUjsNCi0rICB9DQotKyAgaWYgKCpkYikNCi0rICAgICgqZGIpLT5sb2dnZXIgPSAwOw0KLSsg IHJldHVybiByYzsNCi0rfQ0KLSsNCi0rdm9pZCBkYl9zZXRfbG9nZ2VyKGRiX2Nvbm5fcCBjb25u LCB2b2lkICgqbG9nZ2VyKShpbnQgbHYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSkgew0KLSsgIGlm IChjb25uID09IE5VTEwpDQotKyAgICBjc3luY19mYXRhbCgiTm8gY29ubmVjdGlvbiBpbiBzZXRf bG9nZ2VyLlxuIik7DQotKw0KLSsgIGNvbm4tPmxvZ2dlciA9IGxvZ2dlcjsNCi0rfQ0KLSsNCi0r dm9pZCBkYl9jbG9zZShkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlmICghY29ubiB8fCAhY29u bi0+Y2xvc2UpDQotKyAgICByZXR1cm47DQotKyAgY29ubi0+Y2xvc2UoY29ubik7DQotK30NCi0r DQotK2NvbnN0IGNoYXIgKmRiX2Vycm1zZyhkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlmIChj b25uICYmIGNvbm4tPmVycm1zZykNCi0rICAgIHJldHVybiBjb25uLT5lcnJtc2coY29ubik7DQot Kw0KLSsgIHJldHVybiAiKG5vIGVycm9yIG1lc3NhZ2UgZnVuY3Rpb24gYXZhaWxhYmxlKSI7DQot K30NCi0rDQotK2ludCBkYl9leGVjKGRiX2Nvbm5fcCBjb25uLCBjb25zdCBjaGFyICpzcWwpIHsN Ci0rICBpZiAoY29ubiAmJiBjb25uLT5leGVjKQ0KLSsgICAgcmV0dXJuIGNvbm4tPmV4ZWMoY29u biwgc3FsKTsNCi0rDQotKyAgY3N5bmNfZGVidWcoMCwgIk5vIGV4ZWMgZnVuY3Rpb24gaW4gZGJf ZXhlYy5cbiIpOw0KLSsgIHJldHVybiBEQl9FUlJPUjsNCi0rfQ0KLSsNCi0raW50IGRiX3ByZXBh cmVfc3RtdChkYl9jb25uX3AgY29ubiwgY29uc3QgY2hhciAqc3FsLCBkYl9zdG10X3AgKnN0bXQs IGNoYXIgKipwcHRhaWwpIHsNCi0rICBpZiAoY29ubiAmJiBjb25uLT5wcmVwYXJlKQ0KLSsgICAg cmV0dXJuIGNvbm4tPnByZXBhcmUoY29ubiwgc3FsLCBzdG10LCBwcHRhaWwpOw0KLSsNCi0rICBj c3luY19kZWJ1ZygwLCAiTm8gcHJlcGFyZSBmdW5jdGlvbiBpbiBkYl9wcmVwYXJlX3N0bXQuXG4i KTsNCi0rICByZXR1cm4gREJfRVJST1I7DQotK30NCi0rDQotK2NvbnN0IGNoYXIgKmRiX3N0bXRf Z2V0X2NvbHVtbl90ZXh0KGRiX3N0bXRfcCBzdG10LCBpbnQgY29sdW1uKSB7DQotKyAgaWYgKHN0 bXQgJiYgc3RtdC0+Z2V0X2NvbHVtbl90ZXh0KQ0KLSsgICAgcmV0dXJuIHN0bXQtPmdldF9jb2x1 bW5fdGV4dChzdG10LCBjb2x1bW4pOw0KLSsNCi0rICBjc3luY19kZWJ1ZygwLCAiTm8gc3RtdCBp biBkYl9zdG10X2dldF9jb2x1bW5fdGV4dCAvIG5vIGZ1bmN0aW9uLlxuIik7DQotKyAgcmV0dXJu IE5VTEw7DQotK30NCi0rDQotK2ludCBkYl9zdG10X2dldF9jb2x1bW5faW50KGRiX3N0bXRfcCBz dG10LCBpbnQgY29sdW1uKSB7DQotKyAgaWYgKHN0bXQgJiYgc3RtdC0+Z2V0X2NvbHVtbl9pbnQp DQotKyAgICByZXR1cm4gc3RtdC0+Z2V0X2NvbHVtbl9pbnQoc3RtdCwgY29sdW1uKTsNCi0rDQot KyAgY3N5bmNfZGVidWcoMCwgIk5vIHN0bXQgaW4gZGJfc3RtdF9nZXRfY29sdW1uX2ludCAvIG5v IGZ1bmN0aW9uLlxuIik7DQotKyAgcmV0dXJuIDA7DQotK30NCi0rDQotK2ludCBkYl9zdG10X25l eHQoZGJfc3RtdF9wIHN0bXQpDQotK3sNCi0rICBpZiAoc3RtdCAmJiBzdG10LT5uZXh0KQ0KLSsg ICAgcmV0dXJuIHN0bXQtPm5leHQoc3RtdCk7DQotKw0KLSsgIGNzeW5jX2RlYnVnKDAsICJObyBz dG10IGluIGRiX3N0bXRfbmV4dCAvIG5vIGZ1bmN0aW9uLlxuIik7DQotKyAgcmV0dXJuIERCX0VS Uk9SOw0KLSt9DQotKw0KLStpbnQgZGJfc3RtdF9jbG9zZShkYl9zdG10X3Agc3RtdCkNCi0rew0K LSsgIGlmIChzdG10ICYmIHN0bXQtPmNsb3NlKQ0KLSsgICAgcmV0dXJuIHN0bXQtPmNsb3NlKHN0 bXQpOw0KLSsNCi0rICBjc3luY19kZWJ1ZygwLCAiTm8gc3RtdCBpbiBkYl9zdG10X2Nsb3NlIC8g bm8gZnVuY3Rpb24uXG4iKTsNCi0rICByZXR1cm4gREJfRVJST1I7DQotK30NCi0rDQotK2ludCBk Yl9zY2hlbWFfdmVyc2lvbihkYl9jb25uX3AgZGIpDQotK3sNCi0rCWludCB2ZXJzaW9uID0gLTE7 DQotKw0KLSsgICAgICAgIFNRTF9CRUdJTihOVUxMLCAgIC8qIGlnbm9yZSBlcnJvcnMgKi8NCi0r ICAgICAgICAgICAgICAgICJTRUxFQ1QgY291bnQoKikgZnJvbSBmaWxlIikNCi0rICAgICAgICB7 DQotKwkJdmVyc2lvbiA9IDA7DQotKyAgICAgICAgfSBTUUxfRU5EOw0KLSsNCi0rCXJldHVybiB2 ZXJzaW9uOw0KLSt9DQotKw0KLSsNCi0raW50IGRiX3VwZ3JhZGVfdG9fc2NoZW1hKGRiX2Nvbm5f cCBkYiwgaW50IHZlcnNpb24pDQotK3sNCi0rCWlmIChkYiAmJiBkYi0+dXBncmFkZV90b19zY2hl bWEpDQotKwkJcmV0dXJuIGRiLT51cGdyYWRlX3RvX3NjaGVtYSh2ZXJzaW9uKTsNCi0rDQotKwly ZXR1cm4gREJfRVJST1I7DQotK30NCi0rDQotKw0KLWRpZmYgLS1naXQgYS9kYl9hcGkuaCBiL2Ri X2FwaS5oDQotbmV3IGZpbGUgbW9kZSAxMDA2NDQNCi1pbmRleCAwMDAwMDAwLi5lYWI2MjdiDQot LS0tIC9kZXYvbnVsbA0KLSsrKyBiL2RiX2FwaS5oDQotQEAgLTAsMCArMSw2MiBAQA0KLSsNCi0r I2lmbmRlZiBEQl9BUElfSA0KLSsjZGVmaW5lIERCX0FQSV9IDQotKw0KLSsjZGVmaW5lIERCX1NR TElURTIgMSANCi0rI2RlZmluZSBEQl9TUUxJVEUzIDIgDQotKyNkZWZpbmUgREJfTVlTUUwgICAz DQotKyNkZWZpbmUgREJfUEdTUUwgICA0DQotKw0KLSsjZGVmaW5lIERCX09LICAgICAgICAgICAg ICAgICAgMA0KLSsjZGVmaW5lIERCX0VSUk9SICAgICAgICAgICAgICAgMQ0KLSsjZGVmaW5lIERC X0JVU1kgICAgICAgICAgICAgICAgMg0KLSsjZGVmaW5lIERCX05PX0NPTk5FQ1RJT04gICAgICAg Mw0KLSsjZGVmaW5lIERCX05PX0NPTk5FQ1RJT05fUkVBTCAgNA0KLSsjZGVmaW5lIERCX1JPVyAg MTAwDQotKyNkZWZpbmUgREJfRE9ORSAxMDENCi0rDQotK3R5cGVkZWYgc3RydWN0IGRiX2Nvbm5f dCAqZGJfY29ubl9wOw0KLSt0eXBlZGVmIHN0cnVjdCBkYl9zdG10X3QgKmRiX3N0bXRfcDsNCi0r DQotK3N0cnVjdCBkYl9jb25uX3Qgew0KLSsgIHZvaWQgKnByaXZhdGU7DQotKyAgaW50ICAgICAg ICgqZXhlYykgICAoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIqIGV4ZWMpOw0KLSsgIGludCAg ICAgICAoKnByZXBhcmUpKGRiX2Nvbm5fcCBjb25uLCBjb25zdCBjaGFyICpzdGF0ZW1lbnQsIGRi X3N0bXRfcCAqc3RtdCwgY2hhciAqKnZhbHVlKTsNCi0rICB2b2lkICAgICAgKCpjbG9zZSkgIChk Yl9jb25uX3AgY29ubik7DQotKyAgdm9pZCAgICAgICgqbG9nZ2VyKSAoaW50IGx2LCBjb25zdCBj aGFyICpmbXQsIC4uLik7DQotKyAgY29uc3QgY2hhciogKCplcnJtc2cpIChkYl9jb25uX3AgY29u bik7DQotKyAgaW50ICAgICAgICgqdXBncmFkZV90b19zY2hlbWEpIChpbnQgdmVyc2lvbik7DQot K307DQotKw0KLStzdHJ1Y3QgZGJfc3RtdF90IHsNCi0rICB2b2lkICpwcml2YXRlOw0KLSsgIHZv aWQgKnByaXZhdGUyOw0KLSsgIGRiX2Nvbm5fcCBkYjsNCi0rICBjb25zdCBjaGFyICogICAgKCpn ZXRfY29sdW1uX3RleHQpIChkYl9zdG10X3Agdm14LCBpbnQgY29sdW1uKTsNCi0rICBjb25zdCB2 b2lkKiAgICAgKCpnZXRfY29sdW1uX2Jsb2IpIChkYl9zdG10X3Agdm14LCBpbnQgY29sdW1uKTsN Ci0rICBpbnQgICAgICAgICAgICAgKCpnZXRfY29sdW1uX2ludCkgIChkYl9zdG10X3Agdm14LCBp bnQgY29sdW1uKTsNCi0rICBpbnQgICAgICAgKCpuZXh0KSAoZGJfc3RtdF9wIHN0bXQpOw0KLSsg IGludCAgICAgICAoKmNsb3NlKShkYl9zdG10X3Agc3RtdCk7DQotK307DQotKw0KLSsvL3N0cnVj dCBkYl9jb25uICpkYl9jb25uOw0KLSsNCi0raW50ICAgICAgIGRiX29wZW4oY29uc3QgY2hhciAq ZmlsZSwgaW50IHR5cGUsIGRiX2Nvbm5fcCAqZGIpOw0KLSt2b2lkICAgICAgZGJfY2xvc2UoZGJf Y29ubl9wIGNvbm4pOw0KLSsNCi0raW50ICAgICAgIGRiX2V4ZWMoZGJfY29ubl9wIGNvbm4sIGNv bnN0IGNoYXIqIGV4ZWMpOw0KLStpbnQgICAgICAgZGJfZXhlYzIoZGJfY29ubl9wIGNvbm4sIGNv bnN0IGNoYXIqIGV4ZWMsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqLCBpbnQsIGludCksIHZvaWQg KmRhdGEsIGNvbnN0IGNoYXIgKiplcnIpOw0KLSsNCi0raW50ICAgICAgIGRiX3ByZXBhcmVfc3Rt dChkYl9jb25uX3AgY29ubiwgY29uc3QgY2hhciAqc3RhdGVtZW50LCBkYl9zdG10X3AgKnN0bXQs IGNoYXIgKip2YWx1ZSk7DQotKw0KLStjb25zdCBjaGFyICogICAgZGJfc3RtdF9nZXRfY29sdW1u X3RleHQoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1bW4pOw0KLStpbnQgICAgICAgZGJfc3RtdF9n ZXRfY29sdW1uX2ludChkYl9zdG10X3AgIHN0bXQsIGludCBjb2x1bW4pOw0KLStpbnQgICAgICAg ZGJfc3RtdF9uZXh0IChkYl9zdG10X3Agc3RtdCk7DQotK2ludCAgICAgICBkYl9zdG10X2Nsb3Nl KGRiX3N0bXRfcCBzdG10KTsNCi0rDQotK3ZvaWQgZGJfc2V0X2xvZ2dlcihkYl9jb25uX3AgY29u biwgdm9pZCAoKmxvZ2dlcikoaW50IGx2LCBjb25zdCBjaGFyICpmbXQsIC4uLikpOw0KLStpbnQg ZGJfc2NoZW1hX3ZlcnNpb24oZGJfY29ubl9wIGRiKTsNCi0raW50IGRiX3VwZ3JhZGVfdG9fc2No ZW1hKGRiX2Nvbm5fcCBkYiwgaW50IHZlcnNpb24pOw0KLStjb25zdCBjaGFyICpkYl9lcnJtc2co ZGJfY29ubl9wIGNvbm4pOw0KLSsNCi0rI2VuZGlmDQotZGlmZiAtLWdpdCBhL2RiX215c3FsLmMg Yi9kYl9teXNxbC5jDQotbmV3IGZpbGUgbW9kZSAxMDA2NDQNCi1pbmRleCAwMDAwMDAwLi4xYjZk MDllDQotLS0tIC9kZXYvbnVsbA0KLSsrKyBiL2RiX215c3FsLmMNCi1AQCAtMCwwICsxLDQwOCBA QA0KLSsvKg0KLSsgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBEZW5uaXMgU2NoYWZyb3RoIDxkZW5u aXNAc2NoYWZyb3RoLmNvbT4+DQotKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIEpvaGFubmVzIFRo b21hIDxqb2hhbm5lcy50aG9tYUBnbXguYXQ+DQotKyAqDQotKyAqICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSsg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkNCi0rICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQotKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLg0KLSsgKg0KLSsgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQotKyAqICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSsgKiAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQ0KLSsgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N Ci0rICoNCi0rICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KLSsgKiAgRm91bmRhdGlvbiwgSW5jLiwg NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0K LSsgKi8NCi0rDQotKyNpbmNsdWRlICJjc3luYzIuaCINCi0rI2luY2x1ZGUgPHN0ZGlvLmg+DQot KyNpbmNsdWRlIDxzdGRhcmcuaD4NCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSsjaW5jbHVkZSA8 dW5pc3RkLmg+DQotKyNpbmNsdWRlIDxzaWduYWwuaD4NCi0rI2luY2x1ZGUgPHRpbWUuaD4NCi0r I2luY2x1ZGUgPHN0cmluZy5oPg0KLSsjaW5jbHVkZSAiZGJfYXBpLmgiDQotKyNpbmNsdWRlICJk Yl9teXNxbC5oIg0KLSsjaW5jbHVkZSAiZGwuaCINCi0rDQotKyNpZmRlZiBIQVZFX01ZU1FMDQot KyNpbmNsdWRlIDxteXNxbC9teXNxbC5oPg0KLSsjaW5jbHVkZSA8bXlzcWwvbXlzcWxkX2Vycm9y Lmg+DQotKw0KLStzdGF0aWMgc3RydWN0IGRiX215c3FsX2ZucyB7DQotKwlNWVNRTCAqKCpteXNx bF9pbml0X2ZuKShNWVNRTCopOw0KLSsJTVlTUUwgKigqbXlzcWxfcmVhbF9jb25uZWN0X2ZuKShN WVNRTCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsNCi0rCWlu dCAoKm15c3FsX2Vycm5vX2ZuKShNWVNRTCopOw0KLSsJaW50ICgqbXlzcWxfcXVlcnlfZm4pKE1Z U1FMKiwgY29uc3QgY2hhciopOw0KLSsJdm9pZCAoKm15c3FsX2Nsb3NlX2ZuKShNWVNRTCopOw0K LSsJY29uc3QgY2hhciAqKCpteXNxbF9lcnJvcl9mbikoTVlTUUwgKik7DQotKwlNWVNRTF9SRVMg KigqbXlzcWxfc3RvcmVfcmVzdWx0X2ZuKShNWVNRTCAqKTsNCi0rCXVuc2lnbmVkIGludCAoKm15 c3FsX251bV9maWVsZHNfZm4pKE1ZU1FMX1JFUyAqKTsNCi0rCU1ZU1FMX1JPVyAoKm15c3FsX2Zl dGNoX3Jvd19mbikoTVlTUUxfUkVTICopOw0KLSsJdm9pZCAoKm15c3FsX2ZyZWVfcmVzdWx0X2Zu KShNWVNRTF9SRVMgKik7DQotKwl1bnNpZ25lZCBpbnQgKCpteXNxbF93YXJuaW5nX2NvdW50X2Zu KShNWVNRTCAqKTsNCi0rfSBmOw0KLSsNCi0rc3RhdGljIHZvaWQgKmRsX2hhbmRsZTsNCi0rDQot Kw0KLStzdGF0aWMgdm9pZCBkYl9teXNxbF9kbG9wZW4odm9pZCkNCi0rew0KLSsJY3N5bmNfZGVi dWcoMSwgIk9wZW5pbmcgc2hhcmVkIGxpYnJhcnkgbGlibXlzcWxjbGllbnQuc29cbiIpOw0KLSsg ICAgICAgIGRsX2hhbmRsZSA9IGRsb3BlbigibGlibXlzcWxjbGllbnQuc28iLCBSVExEX0xBWlkp Ow0KLSsgICAgICAgIGlmIChkbF9oYW5kbGUgPT0gTlVMTCkgew0KLSsgICAgICAgICAgICAgICAg Y3N5bmNfZmF0YWwoIkNvdWxkIG5vdCBvcGVuIGxpYm15c3FsY2xpZW50LnNvOiAlc1xuUGxlYXNl IGluc3RhbGwgTXlzcWwgY2xpZW50IGxpYnJhcnkgKGxpYm15c3FsY2xpZW50KSBvciB1c2Ugb3Ro ZXIgZGF0YWJhc2UgKHNxbGl0ZSwgcG9zdGdyZXMpXG4iLCBkbGVycm9yKCkpOw0KLSsgICAgICAg IH0NCi0rDQotKwljc3luY19kZWJ1ZygxLCAiUmVhZGluZyBzeW1ib2xzIGZyb20gc2hhcmVkIGxp YnJhcnkgbGlibXlzcWxjbGllbnQuc29cbiIpOw0KLSsNCi0rICAgICAgICBMT09LVVBfU1lNQk9M KGRsX2hhbmRsZSwgbXlzcWxfaW5pdCk7DQotKyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5k bGUsIG15c3FsX3JlYWxfY29ubmVjdCk7DQotKyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5k bGUsIG15c3FsX2Vycm5vKTsNCi0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgbXlz cWxfcXVlcnkpOw0KLSsgICAgICAgIExPT0tVUF9TWU1CT0woZGxfaGFuZGxlLCBteXNxbF9jbG9z ZSk7DQotKyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIG15c3FsX2Vycm9yKTsNCi0r ICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgbXlzcWxfc3RvcmVfcmVzdWx0KTsNCi0r ICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgbXlzcWxfbnVtX2ZpZWxkcyk7DQotKyAg ICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIG15c3FsX2ZldGNoX3Jvdyk7DQotKyAgICAg ICAgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIG15c3FsX2ZyZWVfcmVzdWx0KTsNCi0rICAgICAg ICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgbXlzcWxfd2FybmluZ19jb3VudCk7DQotK30NCi0r DQotKw0KLStpbnQgZGJfbXlzcWxfcGFyc2VfdXJsKGNoYXIgKnVybCwgY2hhciAqKmhvc3QsIGNo YXIgKip1c2VyLCBjaGFyICoqcGFzcywgY2hhciAqKmRhdGFiYXNlLCB1bnNpZ25lZCBpbnQgKnBv cnQsIGNoYXIgKip1bml4X3NvY2tldCkgDQotK3sNCi0rICBjaGFyICpwb3MgPSBzdHJjaHIodXJs LCAnQCcpOyANCi0rICBpZiAocG9zKSB7DQotKyAgICAvLyBPcHRpb25hbCB1c2VyL3Bhc3N3ZA0K LSsgICAgKihwb3MpID0gMDsNCi0rICAgICoodXNlcikgPSB1cmw7DQotKyAgICB1cmwgPSBwb3Mg KyAxOw0KLSsgICAgLy8gVE9ETyBwYXNzd29yZA0KLSsgICAgcG9zID0gc3RyY2hyKCp1c2VyLCAn OicpOw0KLSsgICAgaWYgKHBvcykgew0KLSsgICAgICAqKHBvcykgPSAwOw0KLSsgICAgICAqKHBh c3MpID0gKHBvcyArMSk7DQotKyAgICB9DQotKyAgICBlbHNlDQotKyAgICAgICpwYXNzID0gMDsN Ci0rICB9DQotKyAgZWxzZSB7DQotKyAgICAvLyBObyB1c2VyL3Bhc3MgcGFzc3dvcmQgDQotKyAg ICAqdXNlciA9IDA7DQotKyAgICAqcGFzcyA9IDA7DQotKyAgfQ0KLSsgICpob3N0ID0gdXJsOw0K LSsgIHBvcyA9IHN0cmNocigqaG9zdCwgJy8nKTsNCi0rICBpZiAocG9zKSB7DQotKyAgICAvLyBE YXRhYmFzZQ0KLSsgICAgKCpwb3MpID0gMDsNCi0rICAgICpkYXRhYmFzZSA9IHBvcysxOw0KLSsg IH0NCi0rICBlbHNlIHsNCi0rICAgICpkYXRhYmFzZSA9IDA7DQotKyAgfQ0KLSsgIHBvcyA9IHN0 cmNocigqaG9zdCwgJzonKTsNCi0rICBpZiAocG9zKSB7DQotKyAgICAoKnBvcykgPSAwOw0KLSsg ICAgKnBvcnQgPSBhdG9pKHBvcysxKTsNCi0rICB9DQotKyAgKnVuaXhfc29ja2V0ID0gMDsNCi0r ICByZXR1cm4gREJfT0s7DQotK30NCi0rDQotKyNlbmRpZg0KLSsNCi0raW50IGRiX215c3FsX29w ZW4oY29uc3QgY2hhciAqZmlsZSwgZGJfY29ubl9wICpjb25uX3ApDQotK3sNCi0rI2lmZGVmIEhB VkVfTVlTUUwNCi0rICBkYl9teXNxbF9kbG9wZW4oKTsNCi0rDQotKyAgTVlTUUwgKmRiID0gZi5t eXNxbF9pbml0X2ZuKDApOw0KLSsgIGNoYXIgKmhvc3QsICp1c2VyLCAqcGFzcywgKmRhdGFiYXNl LCAqdW5peF9zb2NrZXQ7DQotKyAgdW5zaWduZWQgaW50IHBvcnQ7DQotKyAgY2hhciAqZGJfdXJs ID0gbWFsbG9jKHN0cmxlbihmaWxlKSsxKTsNCi0rICBjaGFyICpjcmVhdGVfZGF0YWJhc2Vfc3Rh dGVtZW50Ow0KLSsNCi0rICBpZiAoZGJfdXJsID09IE5VTEwpDQotKyAgICBjc3luY19mYXRhbCgi Tm8gbWVtb3J5IGZvciBkYl91cmxcbiIpOw0KLSsNCi0rICBzdHJjcHkoZGJfdXJsLCBmaWxlKTsN Ci0rICBpbnQgcmMgPSBkYl9teXNxbF9wYXJzZV91cmwoZGJfdXJsLCAmaG9zdCwgJnVzZXIsICZw YXNzLCAmZGF0YWJhc2UsICZwb3J0LCAmdW5peF9zb2NrZXQpOw0KLSsgIGlmIChyYyAhPSBEQl9P Sykgew0KLSsgICAgcmV0dXJuIHJjOw0KLSsgIH0NCi0rDQotKyAgaWYgKGYubXlzcWxfcmVhbF9j b25uZWN0X2ZuKGRiLCBob3N0LCB1c2VyLCBwYXNzLCBkYXRhYmFzZSwgcG9ydCwgdW5peF9zb2Nr ZXQsIDApID09IE5VTEwpIHsNCi0rICAgIGlmIChmLm15c3FsX2Vycm5vX2ZuKGRiKSA9PSBFUl9C QURfREJfRVJST1IpIHsNCi0rICAgICAgaWYgKGYubXlzcWxfcmVhbF9jb25uZWN0X2ZuKGRiLCBo b3N0LCB1c2VyLCBwYXNzLCBOVUxMLCBwb3J0LCB1bml4X3NvY2tldCwgMCkgIT0gTlVMTCkgew0K LSsJQVNQUklOVEYoJmNyZWF0ZV9kYXRhYmFzZV9zdGF0ZW1lbnQsICJjcmVhdGUgZGF0YWJhc2Ug JXMiLCBkYXRhYmFzZSk7DQotKw0KLSsJY3N5bmNfZGVidWcoMiwgImNyZWF0aW5nIGRhdGFiYXNl ICVzXG4iLCBkYXRhYmFzZSk7DQotKyAgICAgICAgaWYgKGYubXlzcWxfcXVlcnlfZm4oZGIsIGNy ZWF0ZV9kYXRhYmFzZV9zdGF0ZW1lbnQpICE9IDApDQotKyAgICAgICAgICBjc3luY19mYXRhbCgi Q2Fubm90IGNyZWF0ZSBkYXRhYmFzZSAlczogRXJyb3I6ICVzXG4iLCBkYXRhYmFzZSwgZi5teXNx bF9lcnJvcl9mbihkYikpOw0KLSsJZnJlZShjcmVhdGVfZGF0YWJhc2Vfc3RhdGVtZW50KTsNCi0r DQotKwlmLm15c3FsX2Nsb3NlX2ZuKGRiKTsNCi0rCWRiID0gZi5teXNxbF9pbml0X2ZuKDApOw0K LSsNCi0rICAgICAgICBpZiAoZi5teXNxbF9yZWFsX2Nvbm5lY3RfZm4oZGIsIGhvc3QsIHVzZXIs IHBhc3MsIGRhdGFiYXNlLCBwb3J0LCB1bml4X3NvY2tldCwgMCkgPT0gTlVMTCkNCi0rICAgICAg ICAgIGdvdG8gZmF0YWw7DQotKyAgICAgIH0NCi0rICAgIH0gZWxzZQ0KLStmYXRhbDoNCi0rICAg ICAgY3N5bmNfZmF0YWwoIkZhaWxlZCB0byBjb25uZWN0IHRvIGRhdGFiYXNlOiBFcnJvcjogJXNc biIsIGYubXlzcWxfZXJyb3JfZm4oZGIpKTsNCi0rICB9DQotKw0KLSsgIGRiX2Nvbm5fcCBjb25u ID0gY2FsbG9jKDEsIHNpemVvZigqY29ubikpOw0KLSsgIGlmIChjb25uID09IE5VTEwpIHsNCi0r ICAgIHJldHVybiBEQl9FUlJPUjsNCi0rICB9DQotKyAgKmNvbm5fcCA9IGNvbm47DQotKyAgY29u bi0+cHJpdmF0ZSA9IGRiOw0KLSsgIGNvbm4tPmNsb3NlID0gZGJfbXlzcWxfY2xvc2U7DQotKyAg Y29ubi0+ZXhlYyA9IGRiX215c3FsX2V4ZWM7DQotKyAgY29ubi0+cHJlcGFyZSA9IGRiX215c3Fs X3ByZXBhcmU7DQotKyAgY29ubi0+ZXJybXNnID0gZGJfbXlzcWxfZXJybXNnOw0KLSsgIGNvbm4t PnVwZ3JhZGVfdG9fc2NoZW1hID0gZGJfbXlzcWxfdXBncmFkZV90b19zY2hlbWE7DQotKw0KLSsg IHJldHVybiByYzsNCi0rI2Vsc2UNCi0rICByZXR1cm4gREJfRVJST1I7DQotKyNlbmRpZg0KLSt9 DQotKw0KLSsjaWZkZWYgSEFWRV9NWVNRTA0KLSsNCi0rdm9pZCBkYl9teXNxbF9jbG9zZShkYl9j b25uX3AgY29ubikNCi0rew0KLSsgIGlmICghY29ubikNCi0rICAgIHJldHVybjsNCi0rICBpZiAo IWNvbm4tPnByaXZhdGUpIA0KLSsgICAgcmV0dXJuOw0KLSsgIGYubXlzcWxfY2xvc2VfZm4oY29u bi0+cHJpdmF0ZSk7DQotKyAgY29ubi0+cHJpdmF0ZSA9IDA7DQotK30NCi0rDQotK2NvbnN0IGNo YXIgKmRiX215c3FsX2Vycm1zZyhkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlmICghY29ubikN Ci0rICAgIHJldHVybiAiKG5vIGNvbm5lY3Rpb24pIjsNCi0rICBpZiAoIWNvbm4tPnByaXZhdGUp DQotKyAgICByZXR1cm4gIihubyBwcml2YXRlIGRhdGEgaW4gY29ubikiOw0KLSsgIHJldHVybiBm Lm15c3FsX2Vycm9yX2ZuKGNvbm4tPnByaXZhdGUpOw0KLSt9DQotKw0KLStzdGF0aWMgdm9pZCBw cmludF93YXJuaW5ncyhpbnQgbGV2ZWwsIE1ZU1FMICptKQ0KLSt7DQotKyAgaW50IHJjOw0KLSsg IE1ZU1FMX1JFUyAqcmVzOw0KLSsgIGludCBmaWVsZHM7DQotKyAgTVlTUUxfUk9XIHJvdzsNCi0r DQotKyAgaWYgKG0gPT0gTlVMTCkNCi0rICAgIGNzeW5jX2ZhdGFsKCJwcmludF93YXJuaW5nczog bSBpcyBOVUxMIik7DQotKw0KLSsgIHJjID0gZi5teXNxbF9xdWVyeV9mbihtLCAiU0hPVyBXQVJO SU5HUyIpOw0KLSsgIGlmIChyYyAhPSAwKQ0KLSsgICAgY3N5bmNfZmF0YWwoInByaW50X3dhcm5p bmdzOiBGYWlsZWQgdG8gZ2V0IHdhcm5pbmcgbWVzc2FnZXMiKTsNCi0rDQotKyAgcmVzID0gZi5t eXNxbF9zdG9yZV9yZXN1bHRfZm4obSk7DQotKyAgaWYgKHJlcyA9PSBOVUxMKQ0KLSsgICAgY3N5 bmNfZmF0YWwoInByaW50X3dhcm5pbmdzOiBGYWlsZWQgdG8gZ2V0IHJlc3VsdCBzZXQgZm9yIHdh cm5pbmcgbWVzc2FnZXMiKTsNCi0rDQotKyAgZmllbGRzID0gZi5teXNxbF9udW1fZmllbGRzX2Zu KHJlcyk7DQotKyAgaWYgKGZpZWxkcyA8IDIpDQotKyAgICBjc3luY19mYXRhbCgicHJpbnRfd2Fy bmluZ3M6IFN0cmFuZ2U6IHNob3cgd2FybmluZ3MgcmVzdWx0IHNldCBoYXMgbGVzcyB0aGFuIDIg cm93cyIpOw0KLSsNCi0rICByb3cgPSBmLm15c3FsX2ZldGNoX3Jvd19mbihyZXMpOw0KLSsNCi0r ICB3aGlsZSAocm93KSB7DQotKyAgICBjc3luY19kZWJ1ZyhsZXZlbCwgIk15U3FsIFdhcm5pbmc6 ICVzXG4iLCByb3dbMl0pOw0KLSsgICAgcm93ID0gZi5teXNxbF9mZXRjaF9yb3dfZm4ocmVzKTsN Ci0rICB9DQotKw0KLSsgIGYubXlzcWxfZnJlZV9yZXN1bHRfZm4ocmVzKTsNCi0rfQ0KLSsNCi0r aW50IGRiX215c3FsX2V4ZWMoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCkgDQotK3sN Ci0rICBpbnQgcmMgPSBEQl9FUlJPUjsNCi0rICBpZiAoIWNvbm4pDQotKyAgICByZXR1cm4gREJf Tk9fQ09OTkVDVElPTjsgDQotKw0KLSsgIGlmICghY29ubi0+cHJpdmF0ZSkgew0KLSsgICAgLyog YWRkZWQgZXJyb3IgZWxlbWVudCAqLw0KLSsgICAgcmV0dXJuIERCX05PX0NPTk5FQ1RJT05fUkVB TDsNCi0rICB9DQotKyAgcmMgPSBmLm15c3FsX3F1ZXJ5X2ZuKGNvbm4tPnByaXZhdGUsIHNxbCk7 DQotKw0KLSsvKiBUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMuIEZvciBleGFtcGxlIHdoZW4gYSBj b2x1bW4gaXMgdG9vIHNob3J0IHRoaXMgc2hvdWxkDQotKyAgIGJlIGFuIGVycm9yLiAqLw0KLSsN Ci0rICBpZiAoZi5teXNxbF93YXJuaW5nX2NvdW50X2ZuKGNvbm4tPnByaXZhdGUpID4gMCkgew0K LSsgICAgcHJpbnRfd2FybmluZ3MoMSwgY29ubi0+cHJpdmF0ZSk7DQotKyAgICByZXR1cm4gREJf RVJST1I7DQotKyAgfQ0KLSsNCi0rICAvKiBPbiBlcnJvciBwYXJzZSwgY3JlYXRlIERCIEVSUk9S IGVsZW1lbnQgKi8NCi0rICByZXR1cm4gcmM7DQotK30NCi0rDQotK2ludCBkYl9teXNxbF9wcmVw YXJlKGRiX2Nvbm5fcCBjb25uLCBjb25zdCBjaGFyICpzcWwsIGRiX3N0bXRfcCAqc3RtdF9wLCAN Ci0rCQkgICAgIGNoYXIgKipwcHRhaWwpIHsNCi0rICBpbnQgcmMgPSBEQl9FUlJPUjsNCi0rDQot KyAgKnN0bXRfcCA9IE5VTEw7DQotKw0KLSsgIGlmICghY29ubikNCi0rICAgIHJldHVybiBEQl9O T19DT05ORUNUSU9OOw0KLSsNCi0rICBpZiAoIWNvbm4tPnByaXZhdGUpIHsNCi0rICAgIC8qIGFk ZGVkIGVycm9yIGVsZW1lbnQgKi8NCi0rICAgIHJldHVybiBEQl9OT19DT05ORUNUSU9OX1JFQUw7 DQotKyAgfQ0KLSsgIGRiX3N0bXRfcCBzdG10ID0gbWFsbG9jKHNpemVvZigqc3RtdCkpOw0KLSsg IC8qIFRPRE8gYXZvaWQgc3RybGVuLCB1c2UgY29uZmlndXJhYmxlIGxpbWl0PyAqLw0KLSsgIHJj ID0gZi5teXNxbF9xdWVyeV9mbihjb25uLT5wcml2YXRlLCBzcWwpOw0KLSsNCi0rLyogVHJlYXQg d2FybmluZ3MgYXMgZXJyb3JzLiBGb3IgZXhhbXBsZSB3aGVuIGEgY29sdW1uIGlzIHRvbyBzaG9y dCB0aGlzIHNob3VsZA0KLSsgICBiZSBhbiBlcnJvci4gKi8NCi0rDQotKyAgaWYgKGYubXlzcWxf d2FybmluZ19jb3VudF9mbihjb25uLT5wcml2YXRlKSA+IDApIHsNCi0rICAgIHByaW50X3dhcm5p bmdzKDEsIGNvbm4tPnByaXZhdGUpOw0KLSsgICAgcmV0dXJuIERCX0VSUk9SOw0KLSsgIH0NCi0r DQotKyAgTVlTUUxfUkVTICpteXNxbF9zdG10ID0gZi5teXNxbF9zdG9yZV9yZXN1bHRfZm4oY29u bi0+cHJpdmF0ZSk7DQotKyAgaWYgKG15c3FsX3N0bXQgPT0gTlVMTCkgew0KLSsgICAgY3N5bmNf ZGVidWcoMiwgIkVycm9yIGluIG15c3FsX3N0b3JlX3Jlc3VsdDogJXMiLCBmLm15c3FsX2Vycm9y X2ZuKGNvbm4tPnByaXZhdGUpKTsNCi0rICAgIHJldHVybiBEQl9FUlJPUjsNCi0rICB9DQotKw0K LSsvKiBUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMuIEZvciBleGFtcGxlIHdoZW4gYSBjb2x1bW4g aXMgdG9vIHNob3J0IHRoaXMgc2hvdWxkDQotKyAgIGJlIGFuIGVycm9yLiAqLw0KLSsNCi0rICBp ZiAoZi5teXNxbF93YXJuaW5nX2NvdW50X2ZuKGNvbm4tPnByaXZhdGUpID4gMCkgew0KLSsgICAg cHJpbnRfd2FybmluZ3MoMSwgY29ubi0+cHJpdmF0ZSk7DQotKyAgICByZXR1cm4gREJfRVJST1I7 DQotKyAgfQ0KLSsNCi0rICBzdG10LT5wcml2YXRlID0gbXlzcWxfc3RtdDsNCi0rICAvKiBUT0RP IGVycm9yIG1hcHBpbmcgLyBoYW5kbGluZyAqLw0KLSsgICpzdG10X3AgPSBzdG10Ow0KLSsgIHN0 bXQtPmdldF9jb2x1bW5fdGV4dCA9IGRiX215c3FsX3N0bXRfZ2V0X2NvbHVtbl90ZXh0Ow0KLSsg IHN0bXQtPmdldF9jb2x1bW5fYmxvYiA9IGRiX215c3FsX3N0bXRfZ2V0X2NvbHVtbl9ibG9iOw0K LSsgIHN0bXQtPmdldF9jb2x1bW5faW50ID0gZGJfbXlzcWxfc3RtdF9nZXRfY29sdW1uX2ludDsN Ci0rICBzdG10LT5uZXh0ID0gZGJfbXlzcWxfc3RtdF9uZXh0Ow0KLSsgIHN0bXQtPmNsb3NlID0g ZGJfbXlzcWxfc3RtdF9jbG9zZTsNCi0rICBzdG10LT5kYiA9IGNvbm47DQotKyAgcmV0dXJuIERC X09LOw0KLSt9DQotKw0KLStjb25zdCB2b2lkKiBkYl9teXNxbF9zdG10X2dldF9jb2x1bW5fYmxv YihkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVtbikgew0KLSsgIGlmICghc3RtdCB8fCAhc3RtdC0+ cHJpdmF0ZTIpIHsNCi0rICAgIHJldHVybiAwOw0KLSsgIH0NCi0rICBNWVNRTF9ST1cgcm93ID0g c3RtdC0+cHJpdmF0ZTI7DQotKyAgcmV0dXJuIHJvd1tjb2x1bW5dOw0KLSt9DQotKw0KLStjb25z dCBjaGFyICpkYl9teXNxbF9zdG10X2dldF9jb2x1bW5fdGV4dChkYl9zdG10X3Agc3RtdCwgaW50 IGNvbHVtbikgew0KLSsgIGlmICghc3RtdCB8fCAhc3RtdC0+cHJpdmF0ZTIpIHsNCi0rICAgIHJl dHVybiAwOw0KLSsgIH0NCi0rICBNWVNRTF9ST1cgcm93ID0gc3RtdC0+cHJpdmF0ZTI7DQotKyAg cmV0dXJuIHJvd1tjb2x1bW5dOw0KLSt9DQotKw0KLStpbnQgZGJfbXlzcWxfc3RtdF9nZXRfY29s dW1uX2ludChkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVtbikgew0KLSsgIGNvbnN0IGNoYXIgKnZh bHVlID0gZGJfbXlzcWxfc3RtdF9nZXRfY29sdW1uX3RleHQoc3RtdCwgY29sdW1uKTsNCi0rICBp ZiAodmFsdWUpDQotKyAgICByZXR1cm4gYXRvaSh2YWx1ZSk7DQotKyAgLyogZXJyb3IgbWFwcGlu ZyAqLw0KLSsgIHJldHVybiAwOw0KLSt9DQotKw0KLSsNCi0raW50IGRiX215c3FsX3N0bXRfbmV4 dChkYl9zdG10X3Agc3RtdCkNCi0rew0KLSsgIE1ZU1FMX1JFUyAqbXlzcWxfc3RtdCA9IHN0bXQt PnByaXZhdGU7DQotKyAgc3RtdC0+cHJpdmF0ZTIgPSBmLm15c3FsX2ZldGNoX3Jvd19mbihteXNx bF9zdG10KTsNCi0rICAvKiBlcnJvciBtYXBwaW5nICovIA0KLSsgIGlmIChzdG10LT5wcml2YXRl MikNCi0rICAgIHJldHVybiBEQl9ST1c7DQotKyAgcmV0dXJuIERCX0RPTkU7DQotK30NCi0rDQot K2ludCBkYl9teXNxbF9zdG10X2Nsb3NlKGRiX3N0bXRfcCBzdG10KQ0KLSt7DQotKyAgTVlTUUxf UkVTICpteXNxbF9zdG10ID0gc3RtdC0+cHJpdmF0ZTsNCi0rICBmLm15c3FsX2ZyZWVfcmVzdWx0 X2ZuKG15c3FsX3N0bXQpOw0KLSsgIGZyZWUoc3RtdCk7DQotKyAgcmV0dXJuIERCX09LOyANCi0r fQ0KLSsNCi0rDQotK2ludCBkYl9teXNxbF91cGdyYWRlX3RvX3NjaGVtYShpbnQgdmVyc2lvbikN Ci0rew0KLSsJaWYgKHZlcnNpb24gPCAwKQ0KLSsJCXJldHVybiBEQl9PSzsNCi0rDQotKwlpZiAo dmVyc2lvbiA+IDApDQotKwkJcmV0dXJuIERCX0VSUk9SOw0KLSsNCi0rCWNzeW5jX2RlYnVnKDIs ICJVcGdyYWRpbmcgZGF0YWJhc2Ugc2NoZW1hIHRvIHZlcnNpb24gJWQuXG4iLCB2ZXJzaW9uKTsN Ci0rDQotKy8qIFdlIHdhbnQgcHJvcGVyIGxvZ2dpbmcsIHNvIHVzZSB0aGUgY3N5bmMgc3FsIGZ1 bmN0aW9uIGluc3RlYWQNCi0rICogb2YgdGhhdCBmcm9tIHRoZSBkYXRhYmFzZSBsYXllci4NCi0r ICovDQotKwljc3luY19kYl9zcWwoIkNyZWF0aW5nIGFjdGlvbiB0YWJsZSIsDQotKwkJIkNSRUFU RSBUQUJMRSBgYWN0aW9uYCAoIg0KLSsJCSIgIGBmaWxlbmFtZWAgdmFyY2hhcig0MDk2KSBDSEFS QUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2JpbiBERUZBVUxUIE5VTEwsIg0KLSsJCSIgIGBj b21tYW5kYCB0ZXh0LCINCi0rCQkiICBgbG9nZmlsZWAgdGV4dCwiDQotKwkJIiAgVU5JUVVFIEtF WSBgZmlsZW5hbWVgIChgZmlsZW5hbWVgKDMyNiksYGNvbW1hbmRgKDIwKSkiDQotKwkJIikiKTsN Ci0rDQotKwljc3luY19kYl9zcWwoIkNyZWF0aW5nIGRpcnR5IHRhYmxlIiwNCi0rCQkiQ1JFQVRF IFRBQkxFIGBkaXJ0eWAgKCINCi0rCQkiICBgZmlsZW5hbWVgIHZhcmNoYXIoNDA5NikgQ0hBUkFD VEVSIFNFVCB1dGY4IENPTExBVEUgdXRmOF9iaW4gREVGQVVMVCBOVUxMLCINCi0rCQkiICBgZm9y Y2VkYCAgIGludCgxMSkgICAgICBERUZBVUxUIE5VTEwsIg0KLSsJCSIgIGBteW5hbWVgICAgdmFy Y2hhcig1MCkgIERFRkFVTFQgTlVMTCwiDQotKwkJIiAgYHBlZXJuYW1lYCB2YXJjaGFyKDUwKSAg REVGQVVMVCBOVUxMLCINCi0rCQkiICBVTklRVUUgS0VZIGBmaWxlbmFtZWAgKGBmaWxlbmFtZWAo MzE2KSxgcGVlcm5hbWVgKSwiDQotKwkJIiAgS0VZIGBkaXJ0eV9ob3N0YCAoYHBlZXJuYW1lYCgx MCkpIg0KLSsJCSIpIik7DQotKw0KLSsJY3N5bmNfZGJfc3FsKCJDcmVhdGluZyBmaWxlIHRhYmxl IiwNCi0rCQkiQ1JFQVRFIFRBQkxFIGBmaWxlYCAoIg0KLSsJCSIgIGBmaWxlbmFtZWAgdmFyY2hh cig0MDk2KSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2JpbiBERUZBVUxUIE5VTEws Ig0KLSsJCSIgIGBjaGVja3R4dGAgdmFyY2hhcigyMDApIERFRkFVTFQgTlVMTCwiDQotKwkJIiAg VU5JUVVFIEtFWSBgZmlsZW5hbWVgIChgZmlsZW5hbWVgKDMzMykpIg0KLSsJCSIpIik7DQotKw0K LSsJY3N5bmNfZGJfc3FsKCJDcmVhdGluZyBoaW50IHRhYmxlIiwNCi0rCQkiQ1JFQVRFIFRBQkxF IGBoaW50YCAoIg0KLSsJCSIgIGBmaWxlbmFtZWAgdmFyY2hhcig0MDk2KSBDSEFSQUNURVIgU0VU IHV0ZjggQ09MTEFURSB1dGY4X2JpbiBERUZBVUxUIE5VTEwsIg0KLSsJCSIgIGByZWN1cnNpdmVg IGludCgxMSkgICAgIERFRkFVTFQgTlVMTCINCi0rCQkiKSIpOw0KLSsNCi0rCWNzeW5jX2RiX3Nx bCgiQ3JlYXRpbmcgeDUwOV9jZXJ0IHRhYmxlIiwNCi0rCQkiQ1JFQVRFIFRBQkxFIGB4NTA5X2Nl cnRgICgiDQotKwkJIiAgYHBlZXJuYW1lYCB2YXJjaGFyKDUwKSAgREVGQVVMVCBOVUxMLCINCi0r CQkiICBgY2VydGRhdGFgIHZhcmNoYXIoMjU1KSBERUZBVUxUIE5VTEwsIg0KLSsJCSIgIFVOSVFV RSBLRVkgYHBlZXJuYW1lYCAoYHBlZXJuYW1lYCkiDQotKwkJIikiKTsNCi0rDQotKy8qIGNzeW5j X2RiX3NxbCBkb2VzIGEgY3N5bmNfZmF0YWwgb24gZXJyb3IsIHNvIHdlIGFsd2F5cyByZXR1cm4g REJfT0sgaGVyZS4gKi8NCi0rDQotKwlyZXR1cm4gREJfT0s7DQotK30NCi0rDQotKw0KLSsjZW5k aWYNCi1kaWZmIC0tZ2l0IGEvZGJfbXlzcWwuaCBiL2RiX215c3FsLmgNCi1uZXcgZmlsZSBtb2Rl IDEwMDY0NA0KLWluZGV4IDAwMDAwMDAuLmM1YWVhYjMNCi0tLS0gL2Rldi9udWxsDQotKysrIGIv ZGJfbXlzcWwuaA0KLUBAIC0wLDAgKzEsMTkgQEANCi0rDQotKyNpZm5kZWYgREJfTVlTUUxfSA0K LSsjZGVmaW5lIERCX01ZU1FMX0gNCi0rDQotKy8qIHB1YmxpYyAqLw0KLStpbnQgICBkYl9teXNx bF9vcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGRiX2Nvbm5fcCAqY29ubl9wKTsNCi0rLyogUHJpdmF0 ZSAqLw0KLSt2b2lkICBkYl9teXNxbF9jbG9zZShkYl9jb25uX3AgZGJfY29ubik7DQotK2ludCAg IGRiX215c3FsX2V4ZWMoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCk7DQotK2ludCAg IGRiX215c3FsX3ByZXBhcmUoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCwgZGJfc3Rt dF9wICpzdG10X3AsIGNoYXIgKipwcHRhaWwpOw0KLStpbnQgICBkYl9teXNxbF9zdG10X25leHQo ZGJfc3RtdF9wIHN0bXQpOw0KLStjb25zdCB2b2lkKiBkYl9teXNxbF9zdG10X2dldF9jb2x1bW5f YmxvYihkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVtbik7DQotK2NvbnN0IGNoYXIgKmRiX215c3Fs X3N0bXRfZ2V0X2NvbHVtbl90ZXh0KGRiX3N0bXRfcCBzdG10LCBpbnQgY29sdW1uKTsNCi0raW50 ICAgZGJfbXlzcWxfc3RtdF9nZXRfY29sdW1uX2ludChkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVt bik7DQotK2ludCAgIGRiX215c3FsX3N0bXRfY2xvc2UoZGJfc3RtdF9wIHN0bXQpOw0KLStjb25z dCBjaGFyICpkYl9teXNxbF9lcnJtc2coZGJfY29ubl9wIGRiX2Nvbm4pOw0KLStpbnQgICBkYl9t eXNxbF91cGdyYWRlX3RvX3NjaGVtYShpbnQgdmVyc2lvbik7DQotKw0KLSsjZW5kaWYNCi1kaWZm IC0tZ2l0IGEvZGJfcG9zdGdyZXMuYyBiL2RiX3Bvc3RncmVzLmMNCi1uZXcgZmlsZSBtb2RlIDEw MDY0NA0KLWluZGV4IDAwMDAwMDAuLmI0MGJkZmINCi0tLS0gL2Rldi9udWxsDQotKysrIGIvZGJf cG9zdGdyZXMuYw0KLUBAIC0wLDAgKzEsNDU4IEBADQotKy8qDQotKyAqICBDb3B5cmlnaHQgKEMp IDIwMTAgIERlbm5pcyBTY2hhZnJvdGggPGRlbm5pc0BzY2hhZnJvdGguY29tPg0KLSsgKiAgQ29w eXJpZ2h0IChDKSAyMDEwICBKb2hhbm5lcyBUaG9tYSA8am9oYW5uZXMudGhvbWFAZ214LmF0Pg0K LSsgKg0KLSsgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0rICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQotKyAqICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cg0KLSsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCi0rICoNCi0rICog IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLA0KLSsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCi0rICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi0rICogIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotKyAqDQotKyAqICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KLSsgKiAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUNCi0rICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC b3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCi0rICovDQotKw0KLSsjaW5jbHVkZSAiY3N5bmMy LmgiDQotKyNpbmNsdWRlIDxzdGRpby5oPg0KLSsjaW5jbHVkZSA8c3RkYXJnLmg+DQotKyNpbmNs dWRlIDxzdGRsaWIuaD4NCi0rI2luY2x1ZGUgPHVuaXN0ZC5oPg0KLSsjaW5jbHVkZSA8c2lnbmFs Lmg+DQotKyNpbmNsdWRlIDx0aW1lLmg+DQotKyNpbmNsdWRlIDxzdHJpbmcuaD4NCi0rI2luY2x1 ZGUgImRiX2FwaS5oIg0KLSsjaW5jbHVkZSAiZGJfcG9zdGdyZXMuaCINCi0rI2luY2x1ZGUgImRs LmgiDQotKw0KLSsjaWZkZWYgSEFWRV9QT1NUR1JFUw0KLSsjaW5jbHVkZSA8cG9zdGdyZXNxbC9s aWJwcS1mZS5oPg0KLSsjZW5kaWYNCi0rDQotKyNpZiAoIWRlZmluZWQgSEFWRV9QT1NUR1JFUykN Ci0raW50IGRiX3Bvc3RncmVzX29wZW4oY29uc3QgY2hhciAqZmlsZSwgZGJfY29ubl9wICpjb25u X3ApDQotK3sNCi0rCXJldHVybiBEQl9FUlJPUjsNCi0rfQ0KLSsjZWxzZQ0KLSsNCi0rc3RhdGlj IHN0cnVjdCBkYl9wb3N0Z3Jlc19mbnMgew0KLSsgICAgICAgIFBHY29ubiAqKCpQUWNvbm5lY3Rk Yl9mbikoY2hhciAqKTsNCi0rICAgICAgICBDb25uU3RhdHVzVHlwZSAoKlBRc3RhdHVzX2ZuKShj b25zdCBQR2Nvbm4gKik7DQotKyAgICAgICAgY2hhciAqKCpQUWVycm9yTWVzc2FnZV9mbikoY29u c3QgUEdjb25uICopOw0KLSsJdm9pZCAoKlBRZmluaXNoX2ZuKShQR2Nvbm4gKik7DQotKwlQR3Jl c3VsdCAqKCpQUWV4ZWNfZm4pKFBHY29ubiAqLCBjb25zdCBjaGFyICopOw0KLSsJRXhlY1N0YXR1 c1R5cGUgKCpQUXJlc3VsdFN0YXR1c19mbikoY29uc3QgUEdyZXN1bHQgKik7DQotKwljaGFyICoo KlBRcmVzdWx0RXJyb3JNZXNzYWdlX2ZuKShjb25zdCBQR3Jlc3VsdCAqKTsNCi0rCXZvaWQgKCpQ UWNsZWFyX2ZuKShQR3Jlc3VsdCAqKTsNCi0rCWludCAoKlBRbnR1cGxlc19mbikoY29uc3QgUEdy ZXN1bHQgKik7DQotKwljaGFyICooKlBRZ2V0dmFsdWVfZm4pKGNvbnN0IFBHcmVzdWx0ICosIGlu dCwgaW50KTsNCi0rfSBmOw0KLSsNCi0rc3RhdGljIHZvaWQgKmRsX2hhbmRsZTsNCi0rDQotKw0K LStzdGF0aWMgdm9pZCBkYl9wb3N0Z3Jlc19kbG9wZW4odm9pZCkNCi0rew0KLSsJY3N5bmNfZGVi dWcoMSwgIk9wZW5pbmcgc2hhcmVkIGxpYnJhcnkgbGlicHEuc29cbiIpOw0KLSsNCi0rICAgICAg ICBkbF9oYW5kbGUgPSBkbG9wZW4oImxpYnBxLnNvIiwgUlRMRF9MQVpZKTsNCi0rICAgICAgICBp ZiAoZGxfaGFuZGxlID09IE5VTEwpIHsNCi0rICAgICAgICAgICAgICAgIGNzeW5jX2ZhdGFsKCJD b3VsZCBub3Qgb3BlbiBsaWJwcS5zbzogJXNcblBsZWFzZSBpbnN0YWxsIHBvc3RncmVzIGNsaWVu dCBsaWJyYXJ5IChsaWJwZykgb3IgdXNlIG90aGVyIGRhdGFiYXNlIChzcWxpdGUsIG15c3FsKVxu IiwgZGxlcnJvcigpKTsNCi0rICAgICAgICB9DQotKwljc3luY19kZWJ1ZygxLCAiUmVhZGluZyBz eW1ib2xzIGZyb20gc2hhcmVkIGxpYnJhcnkgbGlicHEuc29cbiIpOw0KLSsNCi0rICAgICAgICBM T09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgUFFjb25uZWN0ZGIpOw0KLSsgICAgICAgIExPT0tVUF9T WU1CT0woZGxfaGFuZGxlLCBQUXN0YXR1cyk7DQotKyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9o YW5kbGUsIFBRZXJyb3JNZXNzYWdlKTsNCi0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRs ZSwgUFFmaW5pc2gpOw0KLSsgICAgICAgIExPT0tVUF9TWU1CT0woZGxfaGFuZGxlLCBQUWV4ZWMp Ow0KLSsgICAgICAgIExPT0tVUF9TWU1CT0woZGxfaGFuZGxlLCBQUXJlc3VsdFN0YXR1cyk7DQot KyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKTsN Ci0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgUFFjbGVhcik7DQotKyAgICAgICAg TE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIFBRbnR1cGxlcyk7DQotKyAgICAgICAgTE9PS1VQX1NZ TUJPTChkbF9oYW5kbGUsIFBRZ2V0dmFsdWUpOw0KLSt9DQotKw0KLSsNCi0rDQotKy8qIFRoaSBm dW5jdGlvbiBwYXJzZXMgYSBVUkwgc3RyaW5nIGxpa2UgcGdzcWw6Ly9bdXNlcls6cGFzc3dkXUBd aG9zdG5hbWVbOnBvcnRdL2RhdGFiYXNlLg0KLSsgICBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGlu IHRoZSBnaXZlbiBwYXJhbWV0ZXJzLg0KLSsNCi0rICAgSWYgYW4gb3B0aW9uYWwga2V5d29yZCBp cyBub3QgZ2l2ZW4sIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBjaGFuZ2VkLg0K LSsqLw0KLSsNCi0rc3RhdGljIGludCBkYl9wZ3NxbF9wYXJzZV91cmwoY2hhciAqdXJsLCBjaGFy ICoqaG9zdCwgY2hhciAqKnVzZXIsIGNoYXIgKipwYXNzLCBjaGFyICoqZGF0YWJhc2UsIHVuc2ln bmVkIGludCAqcG9ydCkgDQotK3sNCi0rICBjaGFyICpwb3MgPSBzdHJjaHIodXJsLCAnQCcpOyAN Ci0rICBpZiAocG9zKSB7DQotKyAgICAqKHBvcykgPSAwOw0KLSsgICAgKih1c2VyKSA9IHVybDsN Ci0rICAgIHVybCA9IHBvcyArIDE7DQotKw0KLSsgICAgcG9zID0gc3RyY2hyKCp1c2VyLCAnOicp Ow0KLSsgICAgaWYgKHBvcykgew0KLSsgICAgICAqKHBvcykgPSAwOw0KLSsgICAgICAqKHBhc3Mp ID0gKHBvcyArMSk7DQotKyAgICB9DQotKyAgfQ0KLSsgICpob3N0ID0gdXJsOw0KLSsgIHBvcyA9 IHN0cmNocigqaG9zdCwgJy8nKTsNCi0rICBpZiAocG9zKSB7DQotKyAgICAvLyBEYXRhYmFzZQ0K LSsgICAgKCpwb3MpID0gMDsNCi0rICAgICpkYXRhYmFzZSA9IHBvcysxOw0KLSsgIH0NCi0rICBw b3MgPSBzdHJjaHIoKmhvc3QsICc6Jyk7DQotKyAgaWYgKHBvcykgew0KLSsgICAgKCpwb3MpID0g MDsNCi0rICAgICpwb3J0ID0gYXRvaShwb3MrMSk7DQotKyAgfQ0KLSsgIHJldHVybiBEQl9PSzsN Ci0rfQ0KLSsNCi0raW50IGRiX3Bvc3RncmVzX29wZW4oY29uc3QgY2hhciAqZmlsZSwgZGJfY29u bl9wICpjb25uX3ApDQotK3sNCi0rICBQR2Nvbm4gKnBnX2Nvbm47DQotKyAgY2hhciAqaG9zdCwg KnVzZXIsICpwYXNzLCAqZGF0YWJhc2U7DQotKyAgdW5zaWduZWQgaW50IHBvcnQgPSA1NDMyOyAg LyogZGVmYXVsdCBwb3N0Z3JlcyBwb3J0ICovDQotKyAgY2hhciAqZGJfdXJsID0gbWFsbG9jKHN0 cmxlbihmaWxlKSsxKTsNCi0rICBjaGFyICpjcmVhdGVfZGF0YWJhc2Vfc3RhdGVtZW50Ow0KLSsg IGNoYXIgKnBnX2Nvbm5faW5mbzsNCi0rDQotKyAgZGJfcG9zdGdyZXNfZGxvcGVuKCk7DQotKw0K LSsgIGlmIChkYl91cmwgPT0gTlVMTCkNCi0rICAgIGNzeW5jX2ZhdGFsKCJObyBtZW1vcnkgZm9y IGRiX3VybFxuIik7DQotKw0KLSsgIHVzZXIgPSAicG9zdGdyZXMiOw0KLSsgIHBhc3MgPSAiIjsN Ci0rICBob3N0ID0gImxvY2FsaG9zdCI7DQotKyAgZGF0YWJhc2UgPSAiY3N5bmMyIjsNCi0rDQot KyAgc3RyY3B5KGRiX3VybCwgZmlsZSk7DQotKyAgaW50IHJjID0gZGJfcGdzcWxfcGFyc2VfdXJs KGRiX3VybCwgJmhvc3QsICZ1c2VyLCAmcGFzcywgJmRhdGFiYXNlLCAmcG9ydCk7DQotKyAgaWYg KHJjICE9IERCX09LKQ0KLSsgICAgcmV0dXJuIHJjOw0KLSsNCi0rICBBU1BSSU5URigmcGdfY29u bl9pbmZvLCAiaG9zdD0nJXMnIHVzZXI9JyVzJyBwYXNzd29yZD0nJXMnIGRibmFtZT0nJXMnIHBv cnQ9JWQiLA0KLSsJaG9zdCwgdXNlciwgcGFzcywgZGF0YWJhc2UsIHBvcnQpOw0KLSsNCi0rICBw Z19jb25uID0gZi5QUWNvbm5lY3RkYl9mbihwZ19jb25uX2luZm8pOw0KLSsgIGlmIChwZ19jb25u ID09IE5VTEwpDQotKyAgICBjc3luY19mYXRhbCgiTm8gbWVtb3J5IGZvciBwb3N0Z3Jlc3MgY29u bmVjdGlvbiBoYW5kbGVcbiIpOw0KLSsNCi0rICBpZiAoZi5QUXN0YXR1c19mbihwZ19jb25uKSAh PSBDT05ORUNUSU9OX09LKSB7DQotKyAgICBmLlBRZmluaXNoX2ZuKHBnX2Nvbm4pOw0KLSsgICAg ZnJlZShwZ19jb25uX2luZm8pOw0KLSsNCi0rICAgIEFTUFJJTlRGKCZwZ19jb25uX2luZm8sICJo b3N0PSclcycgdXNlcj0nJXMnIHBhc3N3b3JkPSclcycgZGJuYW1lPSdwb3N0Z3JlcycgcG9ydD0l ZCIsDQotKwkgIGhvc3QsIHVzZXIsIHBhc3MsIHBvcnQpOw0KLSsNCi0rICAgIHBnX2Nvbm4gPSBm LlBRY29ubmVjdGRiX2ZuKHBnX2Nvbm5faW5mbyk7DQotKyAgICBpZiAocGdfY29ubiA9PSBOVUxM KQ0KLSsgICAgICBjc3luY19mYXRhbCgiTm8gbWVtb3J5IGZvciBwb3N0Z3Jlc3MgY29ubmVjdGlv biBoYW5kbGVcbiIpOw0KLSsNCi0rICAgIGlmIChmLlBRc3RhdHVzX2ZuKHBnX2Nvbm4pICE9IENP Tk5FQ1RJT05fT0spIHsNCi0rICAgICAgY3N5bmNfZGVidWcoMCwgIkNvbm5lY3Rpb24gZmFpbGVk OiAlcyIsIGYuUFFlcnJvck1lc3NhZ2VfZm4ocGdfY29ubikpOw0KLSsgICAgICBmLlBRZmluaXNo X2ZuKHBnX2Nvbm4pOw0KLSsgICAgICBmcmVlKHBnX2Nvbm5faW5mbyk7DQotKyAgICAgIHJldHVy biBEQl9FUlJPUjsNCi0rICAgIH0gZWxzZSB7DQotKyAgICAgIGNoYXIgKmNyZWF0ZV9kYXRhYmFz ZV9zdGF0ZW1lbnQ7DQotKyAgICAgIFBHcmVzdWx0ICpyZXM7DQotKw0KLSsgICAgICBjc3luY19k ZWJ1ZygxLCAiRGF0YWJhc2UgJXMgbm90IGZvdW5kLCB0cnlpbmcgdG8gY3JlYXRlIGl0IC4uLiIs IGRhdGFiYXNlKTsNCi0rICAgICAgQVNQUklOVEYoJmNyZWF0ZV9kYXRhYmFzZV9zdGF0ZW1lbnQs ICJjcmVhdGUgZGF0YWJhc2UgJXMiLCBkYXRhYmFzZSk7DQotKyAgICAgIHJlcyA9IGYuUFFleGVj X2ZuKHBnX2Nvbm4sIGNyZWF0ZV9kYXRhYmFzZV9zdGF0ZW1lbnQpOw0KLSsNCi0rICAgICAgZnJl ZShjcmVhdGVfZGF0YWJhc2Vfc3RhdGVtZW50KTsNCi0rDQotKyAgICAgIHN3aXRjaCAoZi5QUXJl c3VsdFN0YXR1c19mbihyZXMpKSB7DQotKyAgICAgICAgY2FzZSBQR1JFU19DT01NQU5EX09LOg0K LSsgICAgICAgIGNhc2UgUEdSRVNfVFVQTEVTX09LOg0KLSsgICAgICAgICAgYnJlYWs7DQotKw0K LSsgICAgICAgIGRlZmF1bHQ6DQotKyAgICAgICAgICBjc3luY19kZWJ1ZygwLCAiQ291bGQgbm90 IGNyZWF0ZSBkYXRhYmFzZSAlczogJXMiLCBkYXRhYmFzZSwgZi5QUWVycm9yTWVzc2FnZV9mbihw Z19jb25uKSk7DQotKyAgICAgICAgICByZXR1cm4gREJfRVJST1I7DQotKyAgICAgIH0NCi0rDQot KyAgICAgIGYuUFFmaW5pc2hfZm4ocGdfY29ubik7DQotKyAgICAgIGZyZWUocGdfY29ubl9pbmZv KTsNCi0rDQotKyAgICAgIEFTUFJJTlRGKCZwZ19jb25uX2luZm8sICJob3N0PSclcycgdXNlcj0n JXMnIHBhc3N3b3JkPSclcycgZGJuYW1lPSclcycgcG9ydD0lZCIsDQotKwkgICAgaG9zdCwgdXNl ciwgcGFzcywgZGF0YWJhc2UsIHBvcnQpOw0KLSsNCi0rICAgICAgcGdfY29ubiA9IGYuUFFjb25u ZWN0ZGJfZm4ocGdfY29ubl9pbmZvKTsNCi0rICAgICAgaWYgKHBnX2Nvbm4gPT0gTlVMTCkNCi0r ICAgICAgICBjc3luY19mYXRhbCgiTm8gbWVtb3J5IGZvciBwb3N0Z3Jlc3MgY29ubmVjdGlvbiBo YW5kbGVcbiIpOw0KLSsNCi0rICAgICAgaWYgKGYuUFFzdGF0dXNfZm4ocGdfY29ubikgIT0gQ09O TkVDVElPTl9PSykgew0KLSsgICAgICAgIGNzeW5jX2RlYnVnKDAsICJDb25uZWN0aW9uIGZhaWxl ZDogJXMiLCBmLlBRZXJyb3JNZXNzYWdlX2ZuKHBnX2Nvbm4pKTsNCi0rICAgICAgICBmLlBRZmlu aXNoX2ZuKHBnX2Nvbm4pOw0KLSsgICAgICAgIGZyZWUocGdfY29ubl9pbmZvKTsNCi0rICAgICAg ICByZXR1cm4gREJfRVJST1I7DQotKyAgICAgIH0NCi0rICAgIH0NCi0rICB9DQotKw0KLSsgIGRi X2Nvbm5fcCBjb25uID0gY2FsbG9jKDEsIHNpemVvZigqY29ubikpOw0KLSsNCi0rICBpZiAoY29u biA9PSBOVUxMKQ0KLSsgICAgY3N5bmNfZmF0YWwoIk5vIG1lbW9yeSBmb3IgY29ublxuIik7DQot Kw0KLSsgICpjb25uX3AgPSBjb25uOw0KLSsgIGNvbm4tPnByaXZhdGUgPSBwZ19jb25uOw0KLSsg IGNvbm4tPmNsb3NlID0gZGJfcG9zdGdyZXNfY2xvc2U7DQotKyAgY29ubi0+ZXhlYyA9IGRiX3Bv c3RncmVzX2V4ZWM7DQotKyAgY29ubi0+ZXJybXNnID0gZGJfcG9zdGdyZXNfZXJybXNnOw0KLSsg IGNvbm4tPnByZXBhcmUgPSBkYl9wb3N0Z3Jlc19wcmVwYXJlOw0KLSsgIGNvbm4tPnVwZ3JhZGVf dG9fc2NoZW1hID0gZGJfcG9zdGdyZXNfdXBncmFkZV90b19zY2hlbWE7DQotKw0KLSsgIGZyZWUo cGdfY29ubl9pbmZvKTsNCi0rDQotKyAgcmV0dXJuIERCX09LOw0KLSt9DQotKw0KLSsNCi0rdm9p ZCBkYl9wb3N0Z3Jlc19jbG9zZShkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlmICghY29ubikN Ci0rICAgIHJldHVybjsNCi0rICBpZiAoIWNvbm4tPnByaXZhdGUpDQotKyAgICByZXR1cm47DQot KyAgZi5QUWZpbmlzaF9mbihjb25uLT5wcml2YXRlKTsNCi0rICBjb25uLT5wcml2YXRlID0gMDsN Ci0rfQ0KLSsNCi0rY29uc3QgY2hhciAqZGJfcG9zdGdyZXNfZXJybXNnKGRiX2Nvbm5fcCBjb25u KQ0KLSt7DQotKyAgaWYgKCFjb25uKQ0KLSsgICAgcmV0dXJuICIobm8gY29ubmVjdGlvbikiOw0K LSsgIGlmICghY29ubi0+cHJpdmF0ZSkNCi0rICAgIHJldHVybiAiKG5vIHByaXZhdGUgZGF0YSBp biBjb25uKSI7DQotKyAgcmV0dXJuIGYuUFFlcnJvck1lc3NhZ2VfZm4oY29ubi0+cHJpdmF0ZSk7 DQotK30NCi0rDQotKw0KLStpbnQgZGJfcG9zdGdyZXNfZXhlYyhkYl9jb25uX3AgY29ubiwgY29u c3QgY2hhciAqc3FsKSANCi0rew0KLSsgIFBHcmVzdWx0ICpyZXM7DQotKw0KLSsgIGlmICghY29u bikNCi0rICAgIHJldHVybiBEQl9OT19DT05ORUNUSU9OOw0KLSsNCi0rICBpZiAoIWNvbm4tPnBy aXZhdGUpIHsNCi0rICAgIC8qIGFkZGVkIGVycm9yIGVsZW1lbnQgKi8NCi0rICAgIHJldHVybiBE Ql9OT19DT05ORUNUSU9OX1JFQUw7DQotKyAgfQ0KLSsgIHJlcyA9IGYuUFFleGVjX2ZuKGNvbm4t PnByaXZhdGUsIHNxbCk7DQotKyAgc3dpdGNoIChmLlBRcmVzdWx0U3RhdHVzX2ZuKHJlcykpIHsN Ci0rICBjYXNlIFBHUkVTX0NPTU1BTkRfT0s6DQotKyAgY2FzZSBQR1JFU19UVVBMRVNfT0s6DQot KyAgICByZXR1cm4gREJfT0s7DQotKw0KLSsgIGRlZmF1bHQ6DQotKyAgICByZXR1cm4gREJfRVJS T1I7DQotKyAgfQ0KLSt9DQotKw0KLSsNCi0raW50IGRiX3Bvc3RncmVzX3ByZXBhcmUoZGJfY29u bl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCwgZGJfc3RtdF9wICpzdG10X3AsDQotKwkJICAgICBj aGFyICoqcHB0YWlsKQ0KLSt7DQotKyAgUEdyZXN1bHQgKnJlc3VsdDsNCi0rICBpbnQgKnJvd19w Ow0KLSsNCi0rICAqc3RtdF9wID0gTlVMTDsNCi0rDQotKyAgaWYgKCFjb25uKQ0KLSsgICAgcmV0 dXJuIERCX05PX0NPTk5FQ1RJT047DQotKw0KLSsgIGlmICghY29ubi0+cHJpdmF0ZSkgew0KLSsg ICAgLyogYWRkZWQgZXJyb3IgZWxlbWVudCAqLw0KLSsgICAgcmV0dXJuIERCX05PX0NPTk5FQ1RJ T05fUkVBTDsNCi0rICB9DQotKyAgcmVzdWx0ID0gZi5QUWV4ZWNfZm4oY29ubi0+cHJpdmF0ZSwg c3FsKTsNCi0rDQotKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQ0KLSsgICAgY3N5bmNfZmF0YWwoIk5v IG1lbW9yeSBmb3IgcmVzdWx0XG4iKTsNCi0rDQotKyAgc3dpdGNoIChmLlBRcmVzdWx0U3RhdHVz X2ZuKHJlc3VsdCkpIHsNCi0rICBjYXNlIFBHUkVTX0NPTU1BTkRfT0s6DQotKyAgY2FzZSBQR1JF U19UVVBMRVNfT0s6DQotKyAgICBicmVhazsNCi0rDQotKyAgZGVmYXVsdDoNCi0rICAgIGNzeW5j X2RlYnVnKDEsICJFcnJvciBpbiBQUWV4ZWM6ICVzIiwgZi5QUXJlc3VsdEVycm9yTWVzc2FnZV9m bihyZXN1bHQpKTsNCi0rICAgIGYuUFFjbGVhcl9mbihyZXN1bHQpOw0KLSsgICAgcmV0dXJuIERC X0VSUk9SOw0KLSsgIH0NCi0rDQotKyAgcm93X3AgPSBtYWxsb2Moc2l6ZW9mKCpyb3dfcCkpOw0K LSsgIGlmIChyb3dfcCA9PSBOVUxMKQ0KLSsgICAgY3N5bmNfZmF0YWwoIk5vIG1lbW9yeSBmb3Ig cm93XG4iKTsNCi0rICAqcm93X3AgPSAtMTsNCi0rDQotKyAgZGJfc3RtdF9wIHN0bXQgPSBtYWxs b2Moc2l6ZW9mKCpzdG10KSk7DQotKyAgaWYgKHN0bXQgPT0gTlVMTCkNCi0rICAgIGNzeW5jX2Zh dGFsKCJObyBtZW1vcnkgZm9yIHN0bXRcbiIpOw0KLSsNCi0rICBzdG10LT5wcml2YXRlID0gcmVz dWx0Ow0KLSsgIHN0bXQtPnByaXZhdGUyID0gcm93X3A7DQotKw0KLSsgICpzdG10X3AgPSBzdG10 Ow0KLSsgIHN0bXQtPmdldF9jb2x1bW5fdGV4dCA9IGRiX3Bvc3RncmVzX3N0bXRfZ2V0X2NvbHVt bl90ZXh0Ow0KLSsgIHN0bXQtPmdldF9jb2x1bW5fYmxvYiA9IGRiX3Bvc3RncmVzX3N0bXRfZ2V0 X2NvbHVtbl9ibG9iOw0KLSsgIHN0bXQtPmdldF9jb2x1bW5faW50ID0gZGJfcG9zdGdyZXNfc3Rt dF9nZXRfY29sdW1uX2ludDsNCi0rICBzdG10LT5uZXh0ID0gZGJfcG9zdGdyZXNfc3RtdF9uZXh0 Ow0KLSsgIHN0bXQtPmNsb3NlID0gZGJfcG9zdGdyZXNfc3RtdF9jbG9zZTsNCi0rICBzdG10LT5k YiA9IGNvbm47DQotKyAgcmV0dXJuIERCX09LOw0KLSt9DQotKw0KLSsNCi0rY29uc3Qgdm9pZCog ZGJfcG9zdGdyZXNfc3RtdF9nZXRfY29sdW1uX2Jsb2IoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1 bW4pDQotK3sNCi0rICBQR3Jlc3VsdCAqcmVzdWx0Ow0KLSsgIGludCAqcm93X3A7DQotKw0KLSsg IGlmICghc3RtdCB8fCAhc3RtdC0+cHJpdmF0ZSB8fCAhc3RtdC0+cHJpdmF0ZTIpIHsNCi0rICAg IHJldHVybiAwOw0KLSsgIH0NCi0rICByZXN1bHQgPSAoUEdyZXN1bHQqKXN0bXQtPnByaXZhdGU7 DQotKyAgcm93X3AgPSAoaW50KilzdG10LT5wcml2YXRlMjsNCi0rDQotKyAgaWYgKCpyb3dfcCA+ PSBmLlBRbnR1cGxlc19mbihyZXN1bHQpIHx8ICpyb3dfcCA8IDApIHsNCi0rICAgIGNzeW5jX2Rl YnVnKDEsICJyb3cgaW5kZXggb3V0IG9mIHJhbmdlIChzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAl ZCwgaXMgJWQpXG4iLCANCi0rICAgICAgICAgICAgICAgICpyb3dfcCwgZi5QUW50dXBsZXNfZm4o cmVzdWx0KSk7DQotKyAgICByZXR1cm4gTlVMTDsNCi0rICB9DQotKyAgcmV0dXJuIGYuUFFnZXR2 YWx1ZV9mbihyZXN1bHQsICpyb3dfcCwgY29sdW1uKTsNCi0rfQ0KLSsNCi0rY29uc3QgY2hhciAq ZGJfcG9zdGdyZXNfc3RtdF9nZXRfY29sdW1uX3RleHQoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1 bW4pDQotK3sNCi0rICBQR3Jlc3VsdCAqcmVzdWx0Ow0KLSsgIGludCAqcm93X3A7DQotKw0KLSsg IGlmICghc3RtdCB8fCAhc3RtdC0+cHJpdmF0ZSB8fCAhc3RtdC0+cHJpdmF0ZTIpIHsNCi0rICAg IHJldHVybiAwOw0KLSsgIH0NCi0rICByZXN1bHQgPSAoUEdyZXN1bHQqKXN0bXQtPnByaXZhdGU7 DQotKyAgcm93X3AgPSAoaW50KilzdG10LT5wcml2YXRlMjsNCi0rDQotKyAgaWYgKCpyb3dfcCA+ PSBmLlBRbnR1cGxlc19mbihyZXN1bHQpIHx8ICpyb3dfcCA8IDApIHsNCi0rICAgIGNzeW5jX2Rl YnVnKDEsICJyb3cgaW5kZXggb3V0IG9mIHJhbmdlIChzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAl ZCwgaXMgJWQpXG4iLCANCi0rICAgICAgICAgICAgICAgICpyb3dfcCwgZi5QUW50dXBsZXNfZm4o cmVzdWx0KSk7DQotKyAgICByZXR1cm4gTlVMTDsNCi0rICB9DQotKyAgcmV0dXJuIGYuUFFnZXR2 YWx1ZV9mbihyZXN1bHQsICpyb3dfcCwgY29sdW1uKTsNCi0rfQ0KLSsNCi0raW50IGRiX3Bvc3Rn cmVzX3N0bXRfZ2V0X2NvbHVtbl9pbnQoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1bW4pDQotK3sN Ci0rICBQR3Jlc3VsdCAqcmVzdWx0Ow0KLSsgIGludCAqcm93X3A7DQotKw0KLSsgIGlmICghc3Rt dCB8fCAhc3RtdC0+cHJpdmF0ZSB8fCAhc3RtdC0+cHJpdmF0ZTIpIHsNCi0rICAgIHJldHVybiAw Ow0KLSsgIH0NCi0rICByZXN1bHQgPSAoUEdyZXN1bHQqKXN0bXQtPnByaXZhdGU7DQotKyAgcm93 X3AgPSAoaW50KilzdG10LT5wcml2YXRlMjsNCi0rDQotKyAgaWYgKCpyb3dfcCA+PSBmLlBRbnR1 cGxlc19mbihyZXN1bHQpIHx8ICpyb3dfcCA8IDApIHsNCi0rICAgIGNzeW5jX2RlYnVnKDEsICJy b3cgaW5kZXggb3V0IG9mIHJhbmdlIChzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAlZCwgaXMgJWQp XG4iLCANCi0rICAgICAgICAgICAgICAgICpyb3dfcCwgZi5QUW50dXBsZXNfZm4ocmVzdWx0KSk7 DQotKyAgICByZXR1cm4gMDsNCi0rICB9DQotKyAgcmV0dXJuIGF0b2koZi5QUWdldHZhbHVlX2Zu KHJlc3VsdCwgKnJvd19wLCBjb2x1bW4pKTsNCi0rfQ0KLSsNCi0rDQotK2ludCBkYl9wb3N0Z3Jl c19zdG10X25leHQoZGJfc3RtdF9wIHN0bXQpDQotK3sNCi0rICBQR3Jlc3VsdCAqcmVzdWx0Ow0K LSsgIGludCAqcm93X3A7DQotKw0KLSsgIGlmICghc3RtdCB8fCAhc3RtdC0+cHJpdmF0ZSB8fCAh c3RtdC0+cHJpdmF0ZTIpIHsNCi0rICAgIHJldHVybiAwOw0KLSsgIH0NCi0rICByZXN1bHQgPSAo UEdyZXN1bHQqKXN0bXQtPnByaXZhdGU7DQotKyAgcm93X3AgPSAoaW50KilzdG10LT5wcml2YXRl MjsNCi0rDQotKyAgKCpyb3dfcCkrKzsNCi0rICBpZiAoKnJvd19wID49IGYuUFFudHVwbGVzX2Zu KHJlc3VsdCkpDQotKyAgICByZXR1cm4gREJfRE9ORTsNCi0rDQotKyAgcmV0dXJuIERCX1JPVzsN Ci0rfQ0KLSsNCi0raW50IGRiX3Bvc3RncmVzX3N0bXRfY2xvc2UoZGJfc3RtdF9wIHN0bXQpDQot K3sNCi0rICBQR3Jlc3VsdCAqcmVzID0gc3RtdC0+cHJpdmF0ZTsNCi0rDQotKyAgZi5QUWNsZWFy X2ZuKHJlcyk7DQotKyAgZnJlZShzdG10LT5wcml2YXRlMik7DQotKyAgZnJlZShzdG10KTsNCi0r ICByZXR1cm4gREJfT0s7DQotK30NCi0rDQotKw0KLStpbnQgZGJfcG9zdGdyZXNfdXBncmFkZV90 b19zY2hlbWEoaW50IHZlcnNpb24pDQotK3sNCi0rCWlmICh2ZXJzaW9uIDwgMCkNCi0rCQlyZXR1 cm4gREJfT0s7DQotKw0KLSsJaWYgKHZlcnNpb24gPiAwKQ0KLSsJCXJldHVybiBEQl9FUlJPUjsN Ci0rDQotKwljc3luY19kZWJ1ZygyLCAiVXBncmFkaW5nIGRhdGFiYXNlIHNjaGVtYSB0byB2ZXJz aW9uICVkLlxuIiwgdmVyc2lvbik7DQotKw0KLSsJY3N5bmNfZGJfc3FsKCJDcmVhdGluZyBhY3Rp b24gdGFibGUiLA0KLSsiQ1JFQVRFIFRBQkxFIGFjdGlvbiAoIg0KLSsiICBmaWxlbmFtZSB2YXJj aGFyKDI1NSkgREVGQVVMVCBOVUxMLCINCi0rIiAgY29tbWFuZCB0ZXh0LCINCi0rIiAgbG9nZmls ZSB0ZXh0LCINCi0rIiAgVU5JUVVFIChmaWxlbmFtZSxjb21tYW5kKSINCi0rIik7Iik7DQotKw0K LSsJY3N5bmNfZGJfc3FsKCJDcmVhdGluZyBkaXJ0eSB0YWJsZSIsDQotKyJDUkVBVEUgVEFCTEUg ZGlydHkgKCINCi0rIiAgZmlsZW5hbWUgdmFyY2hhcigyMDApIERFRkFVTFQgTlVMTCwiDQotKyIg IGZvcmNlZCBpbnQgREVGQVVMVCBOVUxMLCINCi0rIiAgbXluYW1lIHZhcmNoYXIoMTAwKSBERUZB VUxUIE5VTEwsIg0KLSsiICBwZWVybmFtZSB2YXJjaGFyKDEwMCkgREVGQVVMVCBOVUxMLCINCi0r IiAgVU5JUVVFIChmaWxlbmFtZSxwZWVybmFtZSkiDQotKyIpOyIpOw0KLSsNCi0rCWNzeW5jX2Ri X3NxbCgiQ3JlYXRpbmcgZmlsZSB0YWJsZSIsDQotKyJDUkVBVEUgVEFCTEUgZmlsZSAoIg0KLSsi ICBmaWxlbmFtZSB2YXJjaGFyKDIwMCkgREVGQVVMVCBOVUxMLCINCi0rIiAgY2hlY2t0eHQgdmFy Y2hhcigyMDApIERFRkFVTFQgTlVMTCwiDQotKyIgIFVOSVFVRSAoZmlsZW5hbWUpIg0KLSsiKTsi KTsNCi0rDQotKwljc3luY19kYl9zcWwoIkNyZWF0aW5nIGhpbnQgdGFibGUiLA0KLSsiQ1JFQVRF IFRBQkxFIGhpbnQgKCINCi0rIiAgZmlsZW5hbWUgdmFyY2hhcigyNTUpIERFRkFVTFQgTlVMTCwi DQotKyIgIHJlY3Vyc2l2ZSBpbnQgREVGQVVMVCBOVUxMIg0KLSsiKTsiKTsNCi0rDQotKwljc3lu Y19kYl9zcWwoIkNyZWF0aW5nIHg1MDlfY2VydCB0YWJsZSIsDQotKyJDUkVBVEUgVEFCTEUgeDUw OV9jZXJ0ICgiDQotKyIgIHBlZXJuYW1lIHZhcmNoYXIoMjU1KSBERUZBVUxUIE5VTEwsIg0KLSsi ICBjZXJ0ZGF0YSB2YXJjaGFyKDI1NSkgREVGQVVMVCBOVUxMLCINCi0rIiAgVU5JUVVFIChwZWVy bmFtZSkiDQotKyIpOyIpOw0KLSsNCi0rCXJldHVybiBEQl9PSzsNCi0rfQ0KLSsNCi0rDQotKyNl bmRpZiAgIC8qIEhBVkVfUE9TVEdSRVMgKi8NCi1kaWZmIC0tZ2l0IGEvZGJfcG9zdGdyZXMuaCBi L2RiX3Bvc3RncmVzLmgNCi1uZXcgZmlsZSBtb2RlIDEwMDY0NA0KLWluZGV4IDAwMDAwMDAuLjk0 OTQzOWUNCi0tLS0gL2Rldi9udWxsDQotKysrIGIvZGJfcG9zdGdyZXMuaA0KLUBAIC0wLDAgKzEs MjAgQEANCi0rDQotKyNpZm5kZWYgREJfUE9TVEdSRVNfSA0KLSsjZGVmaW5lIERCX1BPU1RHUkVT X0gNCi0rDQotKy8qIHB1YmxpYyAqLw0KLStpbnQgICBkYl9wb3N0Z3Jlc19vcGVuKGNvbnN0IGNo YXIgKmZpbGUsIGRiX2Nvbm5fcCAqY29ubl9wKTsNCi0rLyogUHJpdmF0ZSAqLw0KLSt2b2lkICBk Yl9wb3N0Z3Jlc19jbG9zZShkYl9jb25uX3AgZGJfY29ubik7DQotK2ludCAgIGRiX3Bvc3RncmVz X2V4ZWMoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCk7DQotK2ludCAgIGRiX3Bvc3Rn cmVzX3ByZXBhcmUoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCwgZGJfc3RtdF9wICpz dG10X3AsIGNoYXIgKipwcHRhaWwpOw0KLStjb25zdCBjaGFyICpkYl9wb3N0Z3Jlc19lcnJtc2co ZGJfY29ubl9wIGRiX2Nvbm4pOw0KLSsNCi0raW50ICAgZGJfcG9zdGdyZXNfc3RtdF9uZXh0KGRi X3N0bXRfcCBzdG10KTsNCi0rY29uc3Qgdm9pZCogZGJfcG9zdGdyZXNfc3RtdF9nZXRfY29sdW1u X2Jsb2IoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1bW4pOw0KLStjb25zdCBjaGFyICpkYl9wb3N0 Z3Jlc19zdG10X2dldF9jb2x1bW5fdGV4dChkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVtbik7DQot K2ludCAgIGRiX3Bvc3RncmVzX3N0bXRfZ2V0X2NvbHVtbl9pbnQoZGJfc3RtdF9wIHN0bXQsIGlu dCBjb2x1bW4pOw0KLStpbnQgICBkYl9wb3N0Z3Jlc19zdG10X2Nsb3NlKGRiX3N0bXRfcCBzdG10 KTsNCi0raW50ICAgZGJfcG9zdGdyZXNfdXBncmFkZV90b19zY2hlbWEoaW50IHZlcnNpb24pOw0K LSsNCi0rI2VuZGlmDQotZGlmZiAtLWdpdCBhL2RiX3NxbGl0ZS5jIGIvZGJfc3FsaXRlLmMNCi1u ZXcgZmlsZSBtb2RlIDEwMDY0NA0KLWluZGV4IDAwMDAwMDAuLjgxYzVjNzUNCi0tLS0gL2Rldi9u dWxsDQotKysrIGIvZGJfc3FsaXRlLmMNCi1AQCAtMCwwICsxLDI2MyBAQA0KLSsvKg0KLSsgKiAg Q29weXJpZ2h0IChDKSAyMDEwICBEZW5uaXMgU2NoYWZyb3RoIDxkZW5uaXNAc2NoYWZyb3RoLmNv bT4+DQotKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIEpvaGFubmVzIFRob21hIDxqb2hhbm5lcy50 aG9tYUBnbXguYXQ+DQotKyAqDQotKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSsgKiAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkN Ci0rICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UsIG9yDQotKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lg0KLSsgKg0KLSsgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQotKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSsgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSsgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi0rICoNCi0rICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlDQotKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQ0KLSsgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl LCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KLSsgKi8NCi0rDQotKyNp bmNsdWRlICJjc3luYzIuaCINCi0rI2lmIGRlZmluZWQoSEFWRV9TUUxJVEUzKQ0KLSsjaW5jbHVk ZSA8c3FsaXRlMy5oPg0KLSsjZW5kaWYNCi0rI2luY2x1ZGUgPHN0ZGlvLmg+DQotKyNpbmNsdWRl IDxzdGRhcmcuaD4NCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSsjaW5jbHVkZSA8dW5pc3RkLmg+ DQotKyNpbmNsdWRlIDxzaWduYWwuaD4NCi0rI2luY2x1ZGUgPHRpbWUuaD4NCi0rI2luY2x1ZGUg ImRiX2FwaS5oIg0KLSsjaW5jbHVkZSAiZGJfc3FsaXRlLmgiDQotKyNpbmNsdWRlICJkbC5oIg0K LSsNCi0rI2lmbmRlZiBIQVZFX1NRTElURTMNCi0raW50IGRiX3NxbGl0ZV9vcGVuKGNvbnN0IGNo YXIgKmZpbGUsIGRiX2Nvbm5fcCAqY29ubl9wKSB7DQotKyAgcmV0dXJuIERCX0VSUk9SOw0KLSt9 DQotKyNlbHNlDQotKw0KLStzdGF0aWMgc3RydWN0IGRiX3NxbGl0ZTNfZm5zIHsNCi0rCWludCAo KnNxbGl0ZTNfb3Blbl9mbikgKGNvbnN0IGNoYXIqLCBzcWxpdGUzICoqKTsNCi0rCWludCAoKnNx bGl0ZTNfY2xvc2VfZm4pIChzcWxpdGUzICopOw0KLSsJY29uc3QgY2hhciAqKCpzcWxpdGUzX2Vy cm1zZ19mbikgKHNxbGl0ZTMgKik7DQotKwlpbnQgKCpzcWxpdGUzX2V4ZWNfZm4pIChzcWxpdGUz KiwgY29uc3QgY2hhciAqLA0KLSsJCWludCAoKikgKHZvaWQqLGludCxjaGFyKiosY2hhcioqKSwg dm9pZCosIGNoYXIgKiopOw0KLSsJaW50ICgqc3FsaXRlM19wcmVwYXJlX3YyX2ZuKShzcWxpdGUz ICosIGNvbnN0IGNoYXIgKiwgaW50LA0KLSsJCXNxbGl0ZTNfc3RtdCAqKiwgY29uc3QgY2hhciAq KnB6VGFpbCk7DQotKwljb25zdCB1bnNpZ25lZCBjaGFyICooKnNxbGl0ZTNfY29sdW1uX3RleHRf Zm4pKHNxbGl0ZTNfc3RtdCosIGludCk7DQotKwljb25zdCB2b2lkICooKnNxbGl0ZTNfY29sdW1u X2Jsb2JfZm4pKHNxbGl0ZTNfc3RtdCosIGludCk7DQotKwlpbnQgKCpzcWxpdGUzX2NvbHVtbl9p bnRfZm4pKHNxbGl0ZTNfc3RtdCosIGludCk7DQotKwlpbnQgKCpzcWxpdGUzX3N0ZXBfZm4pKHNx bGl0ZTNfc3RtdCopOw0KLSsJaW50ICgqc3FsaXRlM19maW5hbGl6ZV9mbikoc3FsaXRlM19zdG10 ICopOw0KLSt9IGY7DQotKw0KLStzdGF0aWMgdm9pZCAqZGxfaGFuZGxlOw0KLSsNCi0rDQotK3N0 YXRpYyB2b2lkIGRiX3NxbGl0ZTNfZGxvcGVuKHZvaWQpDQotK3sNCi0rCWNzeW5jX2RlYnVnKDEs ICJPcGVuaW5nIHNoYXJlZCBsaWJyYXJ5IGxpYnNxbGl0ZTMuc29cbiIpOw0KLSsNCi0rICAgICAg ICBkbF9oYW5kbGUgPSBkbG9wZW4oImxpYnNxbGl0ZTMuc28iLCBSVExEX0xBWlkpOw0KLSsgICAg ICAgIGlmIChkbF9oYW5kbGUgPT0gTlVMTCkgew0KLSsgICAgICAgICAgICAgICAgY3N5bmNfZmF0 YWwoIkNvdWxkIG5vdCBvcGVuIGxpYnNxbGl0ZTMuc286ICVzXG5QbGVhc2UgaW5zdGFsbCBzcWxp dGUzIGNsaWVudCBsaWJyYXJ5IChsaWJzcWxpdGUzKSBvciB1c2Ugb3RoZXIgZGF0YWJhc2UgKHBv c3RncmVzLCBteXNxbClcbiIsIGRsZXJyb3IoKSk7DQotKyAgICAgICAgfQ0KLSsJY3N5bmNfZGVi dWcoMSwgIlJlYWRpbmcgc3ltYm9scyBmcm9tIHNoYXJlZCBsaWJyYXJ5IGxpYnNxbGl0ZTMuc29c biIpOw0KLSsNCi0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgc3FsaXRlM19vcGVu KTsNCi0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgc3FsaXRlM19jbG9zZSk7DQot KyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIHNxbGl0ZTNfZXJybXNnKTsNCi0rICAg ICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgc3FsaXRlM19leGVjKTsNCi0rICAgICAgICBM T09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgc3FsaXRlM19wcmVwYXJlX3YyKTsNCi0rICAgICAgICBM T09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgc3FsaXRlM19jb2x1bW5fdGV4dCk7DQotKyAgICAgICAg TE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIHNxbGl0ZTNfY29sdW1uX2Jsb2IpOw0KLSsgICAgICAg IExPT0tVUF9TWU1CT0woZGxfaGFuZGxlLCBzcWxpdGUzX2NvbHVtbl9pbnQpOw0KLSsgICAgICAg IExPT0tVUF9TWU1CT0woZGxfaGFuZGxlLCBzcWxpdGUzX3N0ZXApOw0KLSsgICAgICAgIExPT0tV UF9TWU1CT0woZGxfaGFuZGxlLCBzcWxpdGUzX2ZpbmFsaXplKTsNCi0rfQ0KLSsNCi0rc3RhdGlj IGludCBzcWxpdGVfZXJyb3JzW10gPSB7IFNRTElURV9PSywgU1FMSVRFX0VSUk9SLCBTUUxJVEVf QlVTWSwgU1FMSVRFX1JPVywgU1FMSVRFX0RPTkUsIC0xIH07DQotK3N0YXRpYyBpbnQgZGJfZXJy b3JzW10gICAgID0geyBEQl9PSywgICAgIERCX0VSUk9SLCAgICAgREJfQlVTWSwgICAgIERCX1JP VywgICAgIERCX0RPTkUsICAgICAtMSB9Ow0KLSsNCi0raW50IGRiX3NxbGl0ZV9lcnJvcl9tYXAo aW50IHNxbGl0ZV9lcnIpIHsNCi0rICBpbnQgaW5kZXg7IA0KLSsgIGZvciAoaW5kZXggPSAwOyA7 IGluZGV4KyspIHsNCi0rICAgIGlmIChzcWxpdGVfZXJyb3JzW2luZGV4XSA9PSAtMSkNCi0rICAg ICAgcmV0dXJuIERCX0VSUk9SOw0KLSsgICAgaWYgKHNxbGl0ZV9lcnIgPT0gc3FsaXRlX2Vycm9y c1tpbmRleF0pDQotKyAgICAgIHJldHVybiBkYl9lcnJvcnNbaW5kZXhdOw0KLSsgIH0NCi0rfQ0K LSsNCi0raW50IGRiX3NxbGl0ZV9vcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGRiX2Nvbm5fcCAqY29u bl9wKQ0KLSt7DQotKyAgc3FsaXRlMyAqZGI7DQotKw0KLSsgIGRiX3NxbGl0ZTNfZGxvcGVuKCk7 DQotKw0KLSsgIGludCByYyA9IGYuc3FsaXRlM19vcGVuX2ZuKGZpbGUsICZkYik7DQotKyAgaWYg KCByYyAhPSBTUUxJVEVfT0sgKSB7DQotKyAgICByZXR1cm4gZGJfc3FsaXRlX2Vycm9yX21hcChy Yyk7DQotKyAgfTsNCi0rICBkYl9jb25uX3AgY29ubiA9IGNhbGxvYygxLCBzaXplb2YoKmNvbm4p KTsNCi0rICBpZiAoY29ubiA9PSBOVUxMKSB7DQotKyAgICByZXR1cm4gREJfRVJST1I7DQotKyAg fQ0KLSsgICpjb25uX3AgPSBjb25uOw0KLSsgIGNvbm4tPnByaXZhdGUgPSBkYjsNCi0rICBjb25u LT5jbG9zZSAgID0gZGJfc3FsaXRlX2Nsb3NlOw0KLSsgIGNvbm4tPmV4ZWMgICAgPSBkYl9zcWxp dGVfZXhlYzsNCi0rICBjb25uLT5wcmVwYXJlID0gZGJfc3FsaXRlX3ByZXBhcmU7DQotKyAgY29u bi0+ZXJybXNnICA9IGRiX3NxbGl0ZV9lcnJtc2c7DQotKyAgY29ubi0+dXBncmFkZV90b19zY2hl bWEgPSBkYl9zcWxpdGVfdXBncmFkZV90b19zY2hlbWE7DQotKyAgcmV0dXJuIGRiX3NxbGl0ZV9l cnJvcl9tYXAocmMpOw0KLSt9DQotKw0KLSt2b2lkIGRiX3NxbGl0ZV9jbG9zZShkYl9jb25uX3Ag Y29ubikNCi0rew0KLSsgIGlmICghY29ubikNCi0rICAgIHJldHVybjsNCi0rICBpZiAoIWNvbm4t PnByaXZhdGUpIA0KLSsgICAgcmV0dXJuOw0KLSsgIGYuc3FsaXRlM19jbG9zZV9mbihjb25uLT5w cml2YXRlKTsNCi0rICBjb25uLT5wcml2YXRlID0gMDsNCi0rfQ0KLSsNCi0rY29uc3QgY2hhciAq ZGJfc3FsaXRlX2Vycm1zZyhkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlmICghY29ubikNCi0r ICAgIHJldHVybiAiKG5vIGNvbm5lY3Rpb24pIjsNCi0rICBpZiAoIWNvbm4tPnByaXZhdGUpDQot KyAgICByZXR1cm4gIihubyBwcml2YXRlIGRhdGEgaW4gY29ubikiOw0KLSsgIHJldHVybiBmLnNx bGl0ZTNfZXJybXNnX2ZuKGNvbm4tPnByaXZhdGUpOw0KLSt9DQotKw0KLStpbnQgZGJfc3FsaXRl X2V4ZWMoZGJfY29ubl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCkgew0KLSsgIGludCByYzsNCi0r ICBpZiAoIWNvbm4pIA0KLSsgICAgcmV0dXJuIERCX05PX0NPTk5FQ1RJT047IA0KLSsNCi0rICBp ZiAoIWNvbm4tPnByaXZhdGUpIHsNCi0rICAgIC8qIGFkZGVkIGVycm9yIGVsZW1lbnQgKi8NCi0r ICAgIHJldHVybiBEQl9OT19DT05ORUNUSU9OX1JFQUw7DQotKyAgfQ0KLSsgIHJjID0gZi5zcWxp dGUzX2V4ZWNfZm4oY29ubi0+cHJpdmF0ZSwgc3FsLCAwLCAwLCAwKTsNCi0rICByZXR1cm4gZGJf c3FsaXRlX2Vycm9yX21hcChyYyk7DQotK30NCi0rDQotK2ludCBkYl9zcWxpdGVfcHJlcGFyZShk Yl9jb25uX3AgY29ubiwgY29uc3QgY2hhciAqc3FsLCBkYl9zdG10X3AgKnN0bXRfcCwgY2hhciAq KnBwdGFpbCkgew0KLSsgIGludCByYzsNCi0rDQotKyAgKnN0bXRfcCA9IE5VTEw7DQotKw0KLSsg IGlmICghY29ubikNCi0rICAgIHJldHVybiBEQl9OT19DT05ORUNUSU9OOw0KLSsNCi0rICBpZiAo IWNvbm4tPnByaXZhdGUpIHsNCi0rICAgIC8qIGFkZGVkIGVycm9yIGVsZW1lbnQgKi8NCi0rICAg IHJldHVybiBEQl9OT19DT05ORUNUSU9OX1JFQUw7DQotKyAgfQ0KLSsgIGRiX3N0bXRfcCBzdG10 ID0gbWFsbG9jKHNpemVvZigqc3RtdCkpOw0KLSsgIHNxbGl0ZTNfc3RtdCAqc3FsaXRlX3N0bXQg PSAwOw0KLSsgIC8qIFRPRE8gYXZvaWQgc3RybGVuLCB1c2UgY29uZmlndXJhYmxlIGxpbWl0PyAq Lw0KLSsgIHJjID0gZi5zcWxpdGUzX3ByZXBhcmVfdjJfZm4oY29ubi0+cHJpdmF0ZSwgc3FsLCBz dHJsZW4oc3FsKSwgJnNxbGl0ZV9zdG10LCAoY29uc3QgY2hhciAqKikgcHB0YWlsKTsNCi0rICBp ZiAocmMgIT0gU1FMSVRFX09LKQ0KLSsgICAgcmV0dXJuIGRiX3NxbGl0ZV9lcnJvcl9tYXAocmMp Ow0KLSsgIHN0bXQtPnByaXZhdGUgPSBzcWxpdGVfc3RtdDsNCi0rICAqc3RtdF9wID0gc3RtdDsN Ci0rICBzdG10LT5nZXRfY29sdW1uX3RleHQgPSBkYl9zcWxpdGVfc3RtdF9nZXRfY29sdW1uX3Rl eHQ7DQotKyAgc3RtdC0+Z2V0X2NvbHVtbl9ibG9iID0gZGJfc3FsaXRlX3N0bXRfZ2V0X2NvbHVt bl9ibG9iOw0KLSsgIHN0bXQtPmdldF9jb2x1bW5faW50ID0gZGJfc3FsaXRlX3N0bXRfZ2V0X2Nv bHVtbl9pbnQ7DQotKyAgc3RtdC0+bmV4dCA9IGRiX3NxbGl0ZV9zdG10X25leHQ7DQotKyAgc3Rt dC0+Y2xvc2UgPSBkYl9zcWxpdGVfc3RtdF9jbG9zZTsNCi0rICBzdG10LT5kYiA9IGNvbm47DQot KyAgcmV0dXJuIGRiX3NxbGl0ZV9lcnJvcl9tYXAocmMpOw0KLSt9DQotKw0KLStjb25zdCBjaGFy ICpkYl9zcWxpdGVfc3RtdF9nZXRfY29sdW1uX3RleHQoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1 bW4pIHsNCi0rICBpZiAoIXN0bXQgfHwgIXN0bXQtPnByaXZhdGUpIHsNCi0rICAgIHJldHVybiAw Ow0KLSsgIH0NCi0rICBzcWxpdGUzX3N0bXQgKnNxbGl0ZV9zdG10ID0gc3RtdC0+cHJpdmF0ZTsN Ci0rICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQgID0gZi5zcWxpdGUzX2NvbHVtbl90ZXh0 X2ZuKHNxbGl0ZV9zdG10LCBjb2x1bW4pOw0KLSsgIC8qIGVycm9yIGhhbmRsaW5nICovDQotKyAg cmV0dXJuIChjb25zdCBjaGFyKilyZXN1bHQ7IA0KLSt9DQotKw0KLSsjaWYgZGVmaW5lZChIQVZF X1NRTElURTMpDQotK2NvbnN0IHZvaWQqIGRiX3NxbGl0ZV9zdG10X2dldF9jb2x1bW5fYmxvYihk Yl9zdG10X3Agc3RtdHgsIGludCBjb2wpIHsNCi0rICAgICAgIHNxbGl0ZTNfc3RtdCAqc3RtdCA9 IHN0bXR4LT5wcml2YXRlOw0KLSsgICAgICAgcmV0dXJuIGYuc3FsaXRlM19jb2x1bW5fYmxvYl9m bihzdG10LGNvbCk7DQotK30NCi0rI2VuZGlmDQotKw0KLSsNCi0rDQotK2ludCBkYl9zcWxpdGVf c3RtdF9nZXRfY29sdW1uX2ludChkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVtbikgew0KLSsgIHNx bGl0ZTNfc3RtdCAqc3FsaXRlX3N0bXQgPSBzdG10LT5wcml2YXRlOw0KLSsgIGludCByYyA9IGYu c3FsaXRlM19jb2x1bW5faW50X2ZuKHNxbGl0ZV9zdG10LCBjb2x1bW4pOw0KLSsgIHJldHVybiBk Yl9zcWxpdGVfZXJyb3JfbWFwKHJjKTsNCi0rfQ0KLSsNCi0rDQotK2ludCBkYl9zcWxpdGVfc3Rt dF9uZXh0KGRiX3N0bXRfcCBzdG10KQ0KLSt7DQotKyAgc3FsaXRlM19zdG10ICpzcWxpdGVfc3Rt dCA9IHN0bXQtPnByaXZhdGU7DQotKyAgaW50IHJjID0gZi5zcWxpdGUzX3N0ZXBfZm4oc3FsaXRl X3N0bXQpOw0KLSsgIHJldHVybiBkYl9zcWxpdGVfZXJyb3JfbWFwKHJjKTsNCi0rfQ0KLSsNCi0r aW50IGRiX3NxbGl0ZV9zdG10X2Nsb3NlKGRiX3N0bXRfcCBzdG10KQ0KLSt7DQotKyAgc3FsaXRl M19zdG10ICpzcWxpdGVfc3RtdCA9IHN0bXQtPnByaXZhdGU7DQotKyAgaW50IHJjID0gZi5zcWxp dGUzX2ZpbmFsaXplX2ZuKHNxbGl0ZV9zdG10KTsNCi0rICBmcmVlKHN0bXQpOw0KLSsgIHJldHVy biBkYl9zcWxpdGVfZXJyb3JfbWFwKHJjKTsNCi0rfQ0KLSsNCi0rDQotK2ludCBkYl9zcWxpdGVf dXBncmFkZV90b19zY2hlbWEoaW50IHZlcnNpb24pDQotK3sNCi0rCWlmICh2ZXJzaW9uIDwgMCkN Ci0rCQlyZXR1cm4gREJfT0s7DQotKw0KLSsJaWYgKHZlcnNpb24gPiAwKQ0KLSsJCXJldHVybiBE Ql9FUlJPUjsNCi0rDQotKwljc3luY19kZWJ1ZygyLCAiVXBncmFkaW5nIGRhdGFiYXNlIHNjaGVt YSB0byB2ZXJzaW9uICVkLlxuIiwgdmVyc2lvbik7DQotKw0KLSsJY3N5bmNfZGJfc3FsKCJDcmVh dGluZyBmaWxlIHRhYmxlIiwNCi0rCQkiQ1JFQVRFIFRBQkxFIGZpbGUgKCINCi0rCQkiCWZpbGVu YW1lLCBjaGVja3R4dCwiDQotKwkJIglVTklRVUUgKCBmaWxlbmFtZSApIE9OIENPTkZMSUNUIFJF UExBQ0UiDQotKwkJIikiKTsNCi0rDQotKwljc3luY19kYl9zcWwoIkNyZWF0aW5nIGRpcnR5IHRh YmxlIiwNCi0rCQkiQ1JFQVRFIFRBQkxFIGRpcnR5ICgiDQotKwkJIglmaWxlbmFtZSwgZm9yY2Vk LCBteW5hbWUsIHBlZXJuYW1lLCINCi0rCQkiCVVOSVFVRSAoIGZpbGVuYW1lLCBwZWVybmFtZSAp IE9OIENPTkZMSUNUIElHTk9SRSINCi0rCQkiKSIpOw0KLSsNCi0rCWNzeW5jX2RiX3NxbCgiQ3Jl YXRpbmcgaGludCB0YWJsZSIsDQotKwkJIkNSRUFURSBUQUJMRSBoaW50ICgiDQotKwkJIglmaWxl bmFtZSwgcmVjdXJzaXZlLCINCi0rCQkiCVVOSVFVRSAoIGZpbGVuYW1lLCByZWN1cnNpdmUgKSBP TiBDT05GTElDVCBJR05PUkUiDQotKwkJIikiKTsNCi0rDQotKwljc3luY19kYl9zcWwoIkNyZWF0 aW5nIGFjdGlvbiB0YWJsZSIsDQotKwkJIkNSRUFURSBUQUJMRSBhY3Rpb24gKCINCi0rCQkiCWZp bGVuYW1lLCBjb21tYW5kLCBsb2dmaWxlLCINCi0rCQkiCVVOSVFVRSAoIGZpbGVuYW1lLCBjb21t YW5kICkgT04gQ09ORkxJQ1QgSUdOT1JFIg0KLSsJCSIpIik7DQotKw0KLSsJY3N5bmNfZGJfc3Fs KCJDcmVhdGluZyB4NTA5X2NlcnQgdGFibGUiLA0KLSsJCSJDUkVBVEUgVEFCTEUgeDUwOV9jZXJ0 ICgiDQotKwkJIglwZWVybmFtZSwgY2VydGRhdGEsIg0KLSsJCSIJVU5JUVVFICggcGVlcm5hbWUg KSBPTiBDT05GTElDVCBJR05PUkUiDQotKwkJIikiKTsNCi0rDQotKwlyZXR1cm4gREJfT0s7DQot K30NCi0rDQotKyNlbmRpZg0KLWRpZmYgLS1naXQgYS9kYl9zcWxpdGUuaCBiL2RiX3NxbGl0ZS5o DQotbmV3IGZpbGUgbW9kZSAxMDA2NDQNCi1pbmRleCAwMDAwMDAwLi5mNWUyMzQwDQotLS0tIC9k ZXYvbnVsbA0KLSsrKyBiL2RiX3NxbGl0ZS5oDQotQEAgLTAsMCArMSwxOSBAQA0KLSsNCi0rI2lm bmRlZiBEQl9TUUxJVEVfSA0KLSsjZGVmaW5lIERCX1NRTElURV9IDQotKw0KLSsvKiBwdWJsaWMg Ki8NCi0raW50ICAgZGJfc3FsaXRlX29wZW4oY29uc3QgY2hhciAqZmlsZSwgZGJfY29ubl9wICpj b25uX3ApOw0KLSsvKiBQcml2YXRlICovDQotK3ZvaWQgIGRiX3NxbGl0ZV9jbG9zZShkYl9jb25u X3AgZGJfY29ubik7DQotK2ludCAgIGRiX3NxbGl0ZV9leGVjKGRiX2Nvbm5fcCBjb25uLCBjb25z dCBjaGFyICpzcWwpOw0KLStpbnQgICBkYl9zcWxpdGVfcHJlcGFyZShkYl9jb25uX3AgY29ubiwg Y29uc3QgY2hhciAqc3FsLCBkYl9zdG10X3AgKnN0bXRfcCwgY2hhciAqKnBwdGFpbCk7DQotK2lu dCAgIGRiX3NxbGl0ZV9zdG10X25leHQoZGJfc3RtdF9wIHN0bXQpOw0KLStjb25zdCBjaGFyKiBk Yl9zcWxpdGVfc3RtdF9nZXRfY29sdW1uX3RleHQoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1bW4p Ow0KLStjb25zdCB2b2lkKiBkYl9zcWxpdGVfc3RtdF9nZXRfY29sdW1uX2Jsb2IoZGJfc3RtdF9w IHN0bXQsIGludCBjb2x1bW4pOw0KLStpbnQgICBkYl9zcWxpdGVfc3RtdF9nZXRfY29sdW1uX2lu dChkYl9zdG10X3Agc3RtdCwgaW50IGNvbHVtbik7DQotK2ludCAgIGRiX3NxbGl0ZV9zdG10X2Ns b3NlKGRiX3N0bXRfcCBzdG10KTsNCi0rY29uc3QgY2hhciAqZGJfc3FsaXRlX2Vycm1zZyhkYl9j b25uX3AgY29ubik7DQotK2ludCBkYl9zcWxpdGVfdXBncmFkZV90b19zY2hlbWEoaW50IHZlcnNp b24pOw0KLSsNCi0rI2VuZGlmDQotZGlmZiAtLWdpdCBhL2RiX3NxbGl0ZTIuYyBiL2RiX3NxbGl0 ZTIuYw0KLW5ldyBmaWxlIG1vZGUgMTAwNjQ0DQotaW5kZXggMDAwMDAwMC4uOGIyYzg1ZQ0KLS0t LSAvZGV2L251bGwNCi0rKysgYi9kYl9zcWxpdGUyLmMNCi1AQCAtMCwwICsxLDI1NyBAQA0KLSsv Kg0KLSsgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBEZW5uaXMgU2NoYWZyb3RoIDxkZW5uaXNAc2No YWZyb3RoLmNvbT4+DQotKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIEpvaGFubmVzIFRob21hIDxq b2hhbm5lcy50aG9tYUBnbXguYXQ+DQotKyAqDQotKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSsgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkNCi0rICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQotKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLg0KLSsgKg0KLSsgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQotKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSsgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K LSsgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi0rICoN Ci0rICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQotKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KLSsgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt cGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KLSsgKi8N Ci0rDQotKyNpbmNsdWRlICJkYl9hcGkuaCINCi0rI2luY2x1ZGUgImNvbmZpZy5oIg0KLSsNCi0r I2lmbmRlZiBIQVZFX1NRTElURQ0KLSsvKiBkdW1teSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgYSBv cGVuIHRoYXQgZmFpbHMgKi8NCi0raW50IGRiX3NxbGl0ZTJfb3Blbihjb25zdCBjaGFyICpmaWxl LCBkYl9jb25uX3AgKmNvbm5fcCkgew0KLSsgIHJldHVybiBEQl9FUlJPUjsNCi0rfQ0KLSsjZWxz ZSANCi0rDQotKyNpbmNsdWRlIDxzcWxpdGUuaD4NCi0rI2luY2x1ZGUgPHN0ZGlvLmg+DQotKyNp bmNsdWRlIDxzdGRhcmcuaD4NCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSsjaW5jbHVkZSA8dW5p c3RkLmg+DQotKyNpbmNsdWRlIDxzaWduYWwuaD4NCi0rI2luY2x1ZGUgPHRpbWUuaD4NCi0rI2lu Y2x1ZGUgImRiX3NxbGl0ZTIuaCINCi0rI2luY2x1ZGUgPGRsLmg+DQotKw0KLSsNCi0rc3RhdGlj IHN0cnVjdCBkYl9zcWxpdGVfZm5zIHsNCi0rCXNxbGl0ZSAqKCpzcWxpdGVfb3Blbl9mbikoY29u c3QgY2hhciAqLCBpbnQsIGNoYXIqKik7DQotKwl2b2lkICgqc3FsaXRlX2Nsb3NlX2ZuKShzcWxp dGUgKik7DQotKwlpbnQgKCpzcWxpdGVfZXhlY19mbikoc3FsaXRlICosIGNoYXIgKiwgaW50ICgq KSh2b2lkKixpbnQsY2hhcioqLGNoYXIqKiksIHZvaWQgKiwgY2hhciAqKik7DQotKwlpbnQgKCpz cWxpdGVfY29tcGlsZV9mbikoc3FsaXRlICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKiwg c3FsaXRlX3ZtICoqLCBjaGFyICoqKTsNCi0rCWludCAoKnNxbGl0ZV9zdGVwX2ZuKShzcWxpdGVf dm0gKiwgaW50ICosIGNvbnN0IGNoYXIgKioqLCBjb25zdCBjaGFyICoqKik7DQotKwlpbnQgKCpz cWxpdGVfZmluYWxpemVfZm4pKHNxbGl0ZV92bSAqLCBjaGFyICoqKTsNCi0rfSBmOw0KLSsNCi0r c3RhdGljIGNoYXIgKmVycm1zZzsNCi0rDQotK3N0YXRpYyB2b2lkICpkbF9oYW5kbGU7DQotKw0K LSsNCi0rc3RhdGljIHZvaWQgZGJfc3FsaXRlX2Rsb3Blbih2b2lkKQ0KLSt7DQotKwljc3luY19k ZWJ1ZygxLCAiT3BlbmluZyBzaGFyZWQgbGlicmFyeSBsaWJzcWxpdGUuc29cbiIpOw0KLSsNCi0r ICAgICAgICBkbF9oYW5kbGUgPSBkbG9wZW4oImxpYnNxbGl0ZS5zbyIsIFJUTERfTEFaWSk7DQot KyAgICAgICAgaWYgKGRsX2hhbmRsZSA9PSBOVUxMKSB7DQotKwkJY3N5bmNfZGVidWcoMSwgIkxp YnNxbGl0ZS5zbyBub3QgZm91bmQsIHRyeWluZyBsaWJzcWxpdGUuc28uMFxuIik7DQotKwkJZGxf aGFuZGxlID0gZGxvcGVuKCJsaWJzcWxpdGUuc28uMCIsIFJUTERfTEFaWSk7DQotKwkgICAgICAg IGlmIChkbF9oYW5kbGUgPT0gTlVMTCkgew0KLSsJCQljc3luY19mYXRhbCgiQ291bGQgbm90IG9w ZW4gbGlic3FsaXRlLnNvOiAlc1xuUGxlYXNlIGluc3RhbGwgc3FsaXRlIGNsaWVudCBsaWJyYXJ5 IChsaWJzcWxpdGUpIG9yIHVzZSBvdGhlciBkYXRhYmFzZSAocG9zdGdyZXMsIG15c3FsKVxuIiwg ZGxlcnJvcigpKTsNCi0rCQl9DQotKyAgICAgICAgfQ0KLSsJY3N5bmNfZGVidWcoMSwgIk9wZW5p bmcgc2hhcmVkIGxpYnJhcnkgbGlic3FsaXRlLnNvXG4iKTsNCi0rDQotKyAgICAgICAgTE9PS1VQ X1NZTUJPTChkbF9oYW5kbGUsIHNxbGl0ZV9vcGVuKTsNCi0rICAgICAgICBMT09LVVBfU1lNQk9M KGRsX2hhbmRsZSwgc3FsaXRlX2Nsb3NlKTsNCi0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hh bmRsZSwgc3FsaXRlX2V4ZWMpOw0KLSsgICAgICAgIExPT0tVUF9TWU1CT0woZGxfaGFuZGxlLCBz cWxpdGVfY29tcGlsZSk7DQotKyAgICAgICAgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIHNxbGl0 ZV9zdGVwKTsNCi0rICAgICAgICBMT09LVVBfU1lNQk9MKGRsX2hhbmRsZSwgc3FsaXRlX2ZpbmFs aXplKTsNCi0rDQotK30NCi0rDQotKw0KLStpbnQgZGJfc3FsaXRlMl9vcGVuKGNvbnN0IGNoYXIg KmZpbGUsIGRiX2Nvbm5fcCAqY29ubl9wKQ0KLSt7DQotKyAgZGJfc3FsaXRlX2Rsb3BlbigpOw0K LSsNCi0rICBzcWxpdGUgKmRiID0gZi5zcWxpdGVfb3Blbl9mbihmaWxlLCAwLCAmZXJybXNnKTsN Ci0rICBpZiAoIGRiID09IDAgKSB7DQotKyAgICByZXR1cm4gREJfRVJST1I7DQotKyAgfTsNCi0r ICBkYl9jb25uX3AgY29ubiA9IGNhbGxvYygxLCBzaXplb2YoKmNvbm4pKTsNCi0rICBpZiAoY29u biA9PSBOVUxMKSB7DQotKyAgICByZXR1cm4gREJfRVJST1I7DQotKyAgfQ0KLSsgICpjb25uX3Ag PSBjb25uOw0KLSsgIGNvbm4tPnByaXZhdGUgPSBkYjsNCi0rICBjb25uLT5jbG9zZSA9IGRiX3Nx bGl0ZTJfY2xvc2U7DQotKyAgY29ubi0+ZXhlYyA9IGRiX3NxbGl0ZTJfZXhlYzsNCi0rICBjb25u LT5wcmVwYXJlID0gZGJfc3FsaXRlMl9wcmVwYXJlOw0KLSsgIGNvbm4tPmVycm1zZyAgPSBOVUxM Ow0KLSsgIGNvbm4tPnVwZ3JhZGVfdG9fc2NoZW1hID0gZGJfc3FsaXRlMl91cGdyYWRlX3RvX3Nj aGVtYTsNCi0rICByZXR1cm4gREJfT0s7DQotK30NCi0rDQotK3ZvaWQgZGJfc3FsaXRlMl9jbG9z ZShkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlmICghY29ubikNCi0rICAgIHJldHVybjsNCi0r ICBpZiAoIWNvbm4tPnByaXZhdGUpIA0KLSsgICAgcmV0dXJuOw0KLSsgIGYuc3FsaXRlX2Nsb3Nl X2ZuKGNvbm4tPnByaXZhdGUpOw0KLSsgIGNvbm4tPnByaXZhdGUgPSAwOw0KLSt9DQotKw0KLStj b25zdCBjaGFyICpkYl9zcWxpdGUyX2Vycm1zZyhkYl9jb25uX3AgY29ubikNCi0rew0KLSsgIGlm ICghY29ubikNCi0rICAgIHJldHVybiAiKG5vIGNvbm5lY3Rpb24pIjsNCi0rICBpZiAoIWNvbm4t PnByaXZhdGUpDQotKyAgICByZXR1cm4gIihubyBwcml2YXRlIGRhdGEgaW4gY29ubikiOw0KLSsg IHJldHVybiBlcnJtc2c7DQotK30NCi0rDQotK2ludCBkYl9zcWxpdGUyX2V4ZWMoZGJfY29ubl9w IGNvbm4sIGNvbnN0IGNoYXIgKnNxbCkgew0KLSsgIGludCByYzsNCi0rICBpZiAoIWNvbm4pIA0K LSsgICAgcmV0dXJuIERCX05PX0NPTk5FQ1RJT047IA0KLSsNCi0rICBpZiAoIWNvbm4tPnByaXZh dGUpIHsNCi0rICAgIC8qIGFkZGVkIGVycm9yIGVsZW1lbnQgKi8NCi0rICAgIHJldHVybiBEQl9O T19DT05ORUNUSU9OX1JFQUw7DQotKyAgfQ0KLSsgIHJjID0gZi5zcWxpdGVfZXhlY19mbihjb25u LT5wcml2YXRlLCAoY2hhciopIHNxbCwgMCwgMCwgJmVycm1zZyk7DQotKyAgLyogT24gZXJyb3Ig cGFyc2UsIGNyZWF0ZSBEQiBFUlJPUiBlbGVtZW50ICovDQotKyAgcmV0dXJuIHJjOw0KLSt9DQot Kw0KLStpbnQgZGJfc3FsaXRlMl9wcmVwYXJlKGRiX2Nvbm5fcCBjb25uLCBjb25zdCBjaGFyICpz cWwsIGRiX3N0bXRfcCAqc3RtdF9wLCBjaGFyICoqcHB0YWlsKSB7DQotKyAgaW50IHJjOw0KLSsg IHNxbGl0ZSAqZGI7DQotKw0KLSsgICpzdG10X3AgPSBOVUxMOw0KLSsNCi0rICBpZiAoIWNvbm4p DQotKyAgICByZXR1cm4gREJfTk9fQ09OTkVDVElPTjsNCi0rDQotKyAgaWYgKCFjb25uLT5wcml2 YXRlKSB7DQotKyAgICAvKiBhZGRlZCBlcnJvciBlbGVtZW50ICovDQotKyAgICByZXR1cm4gREJf Tk9fQ09OTkVDVElPTl9SRUFMOw0KLSsgIH0NCi0rICBkYiA9IGNvbm4tPnByaXZhdGU7DQotKw0K LSsgIGRiX3N0bXRfcCBzdG10ID0gbWFsbG9jKHNpemVvZigqc3RtdCkpOw0KLSsgIHNxbGl0ZV92 bSAqc3FsaXRlX3N0bXQgPSAwOw0KLSsgIHJjID0gZi5zcWxpdGVfY29tcGlsZV9mbihkYiwgc3Fs LCAwLCAmc3FsaXRlX3N0bXQsICZlcnJtc2cpOw0KLSsgIGlmIChyYyAhPSBTUUxJVEVfT0spDQot KyAgICByZXR1cm4gMDsNCi0rICBzdG10LT5wcml2YXRlID0gc3FsaXRlX3N0bXQ7DQotKyAgKnN0 bXRfcCA9IHN0bXQ7DQotKyAgc3RtdC0+Z2V0X2NvbHVtbl90ZXh0ID0gZGJfc3FsaXRlMl9zdG10 X2dldF9jb2x1bW5fdGV4dDsNCi0rICBzdG10LT5nZXRfY29sdW1uX2Jsb2IgPSBkYl9zcWxpdGUy X3N0bXRfZ2V0X2NvbHVtbl9ibG9iOw0KLSsgIHN0bXQtPmdldF9jb2x1bW5faW50ICA9IGRiX3Nx bGl0ZTJfc3RtdF9nZXRfY29sdW1uX2ludDsNCi0rICBzdG10LT5uZXh0ICA9IGRiX3NxbGl0ZTJf c3RtdF9uZXh0Ow0KLSsgIHN0bXQtPmNsb3NlID0gZGJfc3FsaXRlMl9zdG10X2Nsb3NlOw0KLSsg IHN0bXQtPmRiID0gY29ubjsNCi0rICByZXR1cm4gREJfT0s7DQotK30NCi0rDQotK2NvbnN0IGNo YXIgKmRiX3NxbGl0ZTJfc3RtdF9nZXRfY29sdW1uX3RleHQoZGJfc3RtdF9wIHN0bXQsIGludCBj b2x1bW4pIHsNCi0rICBpZiAoIXN0bXQgfHwgIXN0bXQtPnByaXZhdGUpIHsNCi0rICAgIHJldHVy biAwOw0KLSsgIH0NCi0rICBzcWxpdGVfdm0gKnNxbGl0ZV9zdG10ID0gc3RtdC0+cHJpdmF0ZTsN Ci0rICBjb25zdCBjaGFyICoqdmFsdWVzID0gc3RtdC0+cHJpdmF0ZTI7DQotKyAgcmV0dXJuIHZh bHVlc1tjb2x1bW5dOw0KLSt9DQotKw0KLStjb25zdCB2b2lkKiBkYl9zcWxpdGUyX3N0bXRfZ2V0 X2NvbHVtbl9ibG9iKGRiX3N0bXRfcCBzdG10LCBpbnQgY29sKSB7DQotKyAgICAgICByZXR1cm4g ZGJfc3FsaXRlMl9zdG10X2dldF9jb2x1bW5fdGV4dChzdG10LCBjb2wpOw0KLSt9DQotKw0KLStp bnQgZGJfc3FsaXRlMl9zdG10X2dldF9jb2x1bW5faW50KGRiX3N0bXRfcCBzdG10LCBpbnQgY29s dW1uKSB7DQotKyAgc3FsaXRlX3ZtICpzcWxpdGVfc3RtdCA9IHN0bXQtPnByaXZhdGU7DQotKyAg Y29uc3QgY2hhciAqKnZhbHVlcyA9IHN0bXQtPnByaXZhdGUyOw0KLSsgIGNvbnN0IGNoYXIgKnN0 cl92YWx1ZSA9IHZhbHVlc1tjb2x1bW5dOw0KLSsgIGludCB2YWx1ZSA9IDA7DQotKyAgaWYgKHZh bHVlKSANCi0rICAgIHZhbHVlID0gYXRvaShzdHJfdmFsdWUpOw0KLSsgIC8qIFRPRE8gbWlzc2lu ZyB3YXkgdG8gcmV0dXJuIGVycm9yICAqLw0KLSsgIHJldHVybiB2YWx1ZTsNCi0rfQ0KLSsNCi0r DQotK2ludCBkYl9zcWxpdGUyX3N0bXRfbmV4dChkYl9zdG10X3Agc3RtdCkNCi0rew0KLSsgIHNx bGl0ZV92bSAqc3FsaXRlX3N0bXQgPSBzdG10LT5wcml2YXRlOw0KLSsgIGNvbnN0IGNoYXIgKipk YXRhU1FMX1YsICoqZGF0YVNRTF9OOyANCi0rICBjb25zdCBjaGFyICoqdmFsdWVzOyANCi0rICBj b25zdCBjaGFyICoqbmFtZXM7IA0KLSsgIGludCBjb2x1bW5zOw0KLSsNCi0rICBpbnQgcmMgPSBm LnNxbGl0ZV9zdGVwX2ZuKHNxbGl0ZV9zdG10LCAmY29sdW1ucywgJnZhbHVlcywgJm5hbWVzKTsN Ci0rICBzdG10LT5wcml2YXRlMiA9IHZhbHVlczsNCi0rICAvKiBUT0RPIGVycm9yIG1hcHBpbmcg Ki8gDQotKyAgcmV0dXJuIHJjOyAvLyAgPT0gU1FMSVRFX1JPVzsNCi0rfQ0KLSsNCi0raW50IGRi X3NxbGl0ZTJfc3RtdF9jbG9zZShkYl9zdG10X3Agc3RtdCkNCi0rew0KLSsgIHNxbGl0ZV92bSAq c3FsaXRlX3N0bXQgPSBzdG10LT5wcml2YXRlOw0KLSsgIGludCByYyA9IGYuc3FsaXRlX2ZpbmFs aXplX2ZuKHNxbGl0ZV9zdG10LCAmZXJybXNnKTsNCi0rICBmcmVlKHN0bXQpOw0KLSsgIHJldHVy biByYzsgDQotK30NCi0rDQotKw0KLStpbnQgZGJfc3FsaXRlMl91cGdyYWRlX3RvX3NjaGVtYShp bnQgdmVyc2lvbikNCi0rew0KLSsJaWYgKHZlcnNpb24gPCAwKQ0KLSsJCXJldHVybiBEQl9PSzsN Ci0rDQotKwlpZiAodmVyc2lvbiA+IDApDQotKwkJcmV0dXJuIERCX0VSUk9SOw0KLSsNCi0rCWNz eW5jX2RlYnVnKDIsICJVcGdyYWRpbmcgZGF0YWJhc2Ugc2NoZW1hIHRvIHZlcnNpb24gJWQuXG4i LCB2ZXJzaW9uKTsNCi0rDQotKwljc3luY19kYl9zcWwoIkNyZWF0aW5nIGZpbGUgdGFibGUiLA0K LSsJCSJDUkVBVEUgVEFCTEUgZmlsZSAoIg0KLSsJCSIJZmlsZW5hbWUsIGNoZWNrdHh0LCINCi0r CQkiCVVOSVFVRSAoIGZpbGVuYW1lICkgT04gQ09ORkxJQ1QgUkVQTEFDRSINCi0rCQkiKSIpOw0K LSsNCi0rCWNzeW5jX2RiX3NxbCgiQ3JlYXRpbmcgZGlydHkgdGFibGUiLA0KLSsJCSJDUkVBVEUg VEFCTEUgZGlydHkgKCINCi0rCQkiCWZpbGVuYW1lLCBmb3JjZWQsIG15bmFtZSwgcGVlcm5hbWUs Ig0KLSsJCSIJVU5JUVVFICggZmlsZW5hbWUsIHBlZXJuYW1lICkgT04gQ09ORkxJQ1QgSUdOT1JF Ig0KLSsJCSIpIik7DQotKw0KLSsJY3N5bmNfZGJfc3FsKCJDcmVhdGluZyBoaW50IHRhYmxlIiwN Ci0rCQkiQ1JFQVRFIFRBQkxFIGhpbnQgKCINCi0rCQkiCWZpbGVuYW1lLCByZWN1cnNpdmUsIg0K LSsJCSIJVU5JUVVFICggZmlsZW5hbWUsIHJlY3Vyc2l2ZSApIE9OIENPTkZMSUNUIElHTk9SRSIN Ci0rCQkiKSIpOw0KLSsNCi0rCWNzeW5jX2RiX3NxbCgiQ3JlYXRpbmcgYWN0aW9uIHRhYmxlIiwN Ci0rCQkiQ1JFQVRFIFRBQkxFIGFjdGlvbiAoIg0KLSsJCSIJZmlsZW5hbWUsIGNvbW1hbmQsIGxv Z2ZpbGUsIg0KLSsJCSIJVU5JUVVFICggZmlsZW5hbWUsIGNvbW1hbmQgKSBPTiBDT05GTElDVCBJ R05PUkUiDQotKwkJIikiKTsNCi0rDQotKwljc3luY19kYl9zcWwoIkNyZWF0aW5nIHg1MDlfY2Vy dCB0YWJsZSIsDQotKwkJIkNSRUFURSBUQUJMRSB4NTA5X2NlcnQgKCINCi0rCQkiCXBlZXJuYW1l LCBjZXJ0ZGF0YSwiDQotKwkJIglVTklRVUUgKCBwZWVybmFtZSApIE9OIENPTkZMSUNUIElHTk9S RSINCi0rCQkiKSIpOw0KLSsNCi0rCXJldHVybiBEQl9PSzsNCi0rfQ0KLSsNCi0rDQotKyNlbmRp Zg0KLWRpZmYgLS1naXQgYS9kYl9zcWxpdGUyLmggYi9kYl9zcWxpdGUyLmgNCi1uZXcgZmlsZSBt b2RlIDEwMDY0NA0KLWluZGV4IDAwMDAwMDAuLjc5MzM2YTQNCi0tLS0gL2Rldi9udWxsDQotKysr IGIvZGJfc3FsaXRlMi5oDQotQEAgLTAsMCArMSwxOCBAQA0KLSsNCi0rI2lmbmRlZiBEQl9TUUxJ VEUyX0gNCi0rI2RlZmluZSBEQl9TUUxJVEUyX0gNCi0rDQotKy8qIHB1YmxpYyAqLw0KLStpbnQg ICBkYl9zcWxpdGUyX29wZW4oY29uc3QgY2hhciAqZmlsZSwgZGJfY29ubl9wICpjb25uX3ApOw0K LSsvKiBQcml2YXRlLCBzaG91bGQgbm90IGJlIGhlcmUgICovDQotK3ZvaWQgIGRiX3NxbGl0ZTJf Y2xvc2UoZGJfY29ubl9wIGRiX2Nvbm4pOw0KLStpbnQgICBkYl9zcWxpdGUyX2V4ZWMoZGJfY29u bl9wIGNvbm4sIGNvbnN0IGNoYXIgKnNxbCk7DQotK2ludCAgIGRiX3NxbGl0ZTJfcHJlcGFyZShk Yl9jb25uX3AgY29ubiwgY29uc3QgY2hhciAqc3FsLCBkYl9zdG10X3AgKnN0bXRfcCwgY2hhciAq KnBwdGFpbCk7DQotK2ludCAgIGRiX3NxbGl0ZTJfc3RtdF9uZXh0KGRiX3N0bXRfcCBzdG10KTsN Ci0rY29uc3QgY2hhciogZGJfc3FsaXRlMl9zdG10X2dldF9jb2x1bW5fdGV4dChkYl9zdG10X3Ag c3RtdCwgaW50IGNvbHVtbik7DQotK2NvbnN0IHZvaWQqIGRiX3NxbGl0ZTJfc3RtdF9nZXRfY29s dW1uX2Jsb2IoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1bW4pOw0KLStpbnQgICBkYl9zcWxpdGUy X3N0bXRfZ2V0X2NvbHVtbl9pbnQoZGJfc3RtdF9wIHN0bXQsIGludCBjb2x1bW4pOw0KLStpbnQg ICBkYl9zcWxpdGUyX3N0bXRfY2xvc2UoZGJfc3RtdF9wIHN0bXQpOw0KLStpbnQgICBkYl9zcWxp dGUyX3VwZ3JhZGVfdG9fc2NoZW1hKGludCB2ZXJzaW9uKTsNCi0rDQotKyNlbmRpZg0KLWRpZmYg LS1naXQgYS9kbC5oIGIvZGwuaA0KLW5ldyBmaWxlIG1vZGUgMTAwNjQ0DQotaW5kZXggMDAwMDAw MC4uMDc2OWIyZg0KLS0tLSAvZGV2L251bGwNCi0rKysgYi9kbC5oDQotQEAgLTAsMCArMSwxMiBA QA0KLSsjaWZuZGVmIERMX0gNCi0rI2RlZmluZSBETF9IDQotKw0KLSsjaW5jbHVkZSA8ZGxmY24u aD4NCi0rDQotKyNkZWZpbmUgTE9PS1VQX1NZTUJPTChkbF9oYW5kbGUsIHN5bSkgXA0KLSsJZi5z eW0gIyMgX2ZuID0gZGxzeW0oZGxfaGFuZGxlLCAjc3ltKTsgXA0KLSsJaWYgKChmLnN5bSAjIyBf Zm4pID09IE5VTEwpIHsgXA0KLSsJCWNzeW5jX2ZhdGFsICgiQ291bGQgbm90IGxvb2t1cCAlcyBp biBzaGFyZWQgbGlicmFyeTogJXNcbiIsICNzeW0sIGRsZXJyb3IoKSk7IFwNCi0rCX0NCi0rDQot KyNlbmRpZg0KLWRpZmYgLS1naXQgYS9kb2MvY3N5bmMyX3BhcGVyLnRleCBiL2RvYy9jc3luYzJf cGFwZXIudGV4DQotbmV3IGZpbGUgbW9kZSAxMDA2NDQNCi1pbmRleCAwMDAwMDAwLi4wMGYwZGUw DQotLS0tIC9kZXYvbnVsbA0KLSsrKyBiL2RvYy9jc3luYzJfcGFwZXIudGV4DQotQEAgLTAsMCAr MSw5MTAgQEANCi0rXGRvY3VtZW50Y2xhc3NbYTRwYXBlcix0d29jb2x1bW5de2FydGljbGV9DQot K1x1c2VwYWNrYWdle25vcGFnZW5vfQ0KLSsNCi0rXHVzZXBhY2thZ2V7c3ZufQ0KLStcU1ZOZGF0 ZSAkRGF0ZSQNCi0rDQotK1xkZWZcY3N5bmMye3tcc2MgQ3N5bmMkXnsyfSR9fQ0KLSsNCi0rXGJl Z2lue2RvY3VtZW50fQ0KLSsNCi0rXHRpdGxle0NsdXN0ZXIgc3luY2hyb25pemF0aW9uIHdpdGgg XGNzeW5jMn0NCi0rXGF1dGhvcntDbGlmZm9yZCBXb2xmLCBodHRwOi8vd3d3LmNsaWZmb3JkLmF0 L30NCi0rXG1ha2V0aXRsZQ0KLSsNCi0rXHNlY3Rpb257SW50cm9kdWN0aW9ufQ0KLSsNCi0rXGNz eW5jMiBbMV0gaXMgYSB0b29sIGZvciBhc3luY2hyb25vdXMgZmlsZSBzeW5jaHJvbml6YXRpb24g aW4gY2x1c3RlcnMuDQotK0FzeW5jaHJvbm91cyBmaWxlIHN5bmNocm9uaXphdGlvbiBpcyBnb29k IGZvciBmaWxlcyB3aGljaCBhcmUgc2VsZG9tIG1vZGlmaWVkIC0NCi0rc3VjaCBhcyBjb25maWd1 cmF0aW9uIGZpbGVzIG9yIGFwcGxpY2F0aW9uIGltYWdlcyAtIGJ1dCBpdCBpcyBub3QgYWRlcXVh dGUgZm9yDQotK3NvbWUgb3RoZXIgdHlwZXMgb2YgZGF0YS4NCi0rDQotK0ZvciBpbnN0YW5jZSBh IGRhdGFiYXNlIHdpdGggY29udGludW91cyB3cml0ZSBhY2Nlc3NlcyBzaG91bGQgYmUgc3luY2Vk DQotK3N5bmNocm9ub3VzbHkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBkYXRhIGludGVncml0eS4g QnV0IHRoYXQgZG9lcyBub3QNCi0rYXV0b21hdGljYWxseSBtZWFuIHRoYXQgc3luY2hyb25vdXMg c3luY2hyb25pemF0aW9uIGlzIGJldHRlcjsgaXQgc2ltcGx5IGlzDQotK2RpZmZlcmVudCBhbmQg dGhlcmUgYXJlIG1hbnkgY2FzZXMgd2hlcmUgYXN5bmNocm9ub3VzIHN5bmNocm9uaXphdGlvbiBp cw0KLStmYXZvcmVkIG92ZXIgc3luY2hyb25vdXMgc3luY2hyb25pemF0aW9uLiBTb21lIHByb3Mg b2YgYXN5bmNocm9ub3VzDQotK3N5bmNocm9uaXphdGlvbiBhcmU6DQotKw0KLSt7XGJmIDEufQ0K LStNb3N0IGFzeW5jaHJvbm91cyBzeW5jaHJvbml6YXRpb24gdG9vbHMgKGluY2x1ZGluZyBcY3N5 bmMyKSBhcmUgaW1wbGVtZW50ZWQgYXMNCi0rc2luZ2xlLXNob3QgY29tbWFuZHMgd2hpY2ggbmVl ZCB0byBiZSBleGVjdXRlZCBlYWNoIHRpbWUgaW4gb3JkZXIgdG8gcnVuIG9uZQ0KLStzeW5jaHJv bml6YXRpb24gY3ljbGUuIFRoZXJlZm9yZSBpdCBpcyBwb3NzaWJsZSB0byB0ZXN0IGNoYW5nZXMg b24gb25lIGhvc3QNCi0rYmVmb3JlIGRlcGxveWluZyB0aGVtIG9uIHRoZSBvdGhlcnMgKGFuZCBh bHNvIHJldHVybiB0byB0aGUgb2xkIHN0YXRlIGlmIHRoZQ0KLStjaGFuZ2VzIHR1cm4gb3V0IHRv IGJlIGJvZ3VzKS4NCi0rDQotK3tcYmYgMi59DQotK1RoZSBzeW5jaHJvbml6YXRpb24gYWxnb3Jp dGhtcyBhcmUgbXVjaCBzaW1wbGVyIGFuZCB0aHVzIGxlc3MgZXJyb3ItcHJvbmUuDQotKw0KLSt7 XGJmIDMufQ0KLStBc3luY2hyb25vdXMgc3luY2hyb25pemF0aW9uIHRvb2xzIGNhbiBiZSAoYW5k IHVzdWFsbHkgYXJlKSBpbXBsZW1lbnRlZCBhcw0KLStub3JtYWwgdXNlciBtb2RlIHByb2dyYW1z LiBTeW5jaHJvbm91cyBzeW5jaHJvbml6YXRpb24gdG9vbHMgbmVlZCB0byBiZQ0KLStpbXBsZW1l bnRlZCBhcyBvcGVyYXRpbmcgc3lzdGVtIGV4dGVuc2lvbnMuIFRoZXJlZm9yZSBhc3luY2hyb25v dXMgdG9vbHMgYXJlDQotK2Vhc2llciB0byBkZXBsb3kgYW5kIG1vcmUgcG9ydGFibGUuDQotKw0K LSt7XGJmIDQufQ0KLStJdCBpcyBtdWNoIGVhc2llciB0byBidWlsZCBzeXN0ZW1zIHdoaWNoIGFs bG93IHNldHVwcyB3aXRoIG1hbnkgaG9zdHMgYW5kDQotK2NvbXBsZXggcmVwbGljYXRpb24gcnVs ZXMuDQotKw0KLStCdXQgbW9zdCBhc3luY2hyb25vdXMgc3luY2hyb25pemF0aW9uIHRvb2xzIGFy ZSBwcmV0dHkgcHJpbWl0aXZlIGFuZCBkbyBub3QNCi0rZXZlbiBjb3ZlciBhIHNtYWxsIHBvcnRp b24gb2YgdGhlIGlzc3VlcyBmb3VuZCBpbiByZWFsIHdvcmxkIGVudmlyb25tZW50cy4NCi0rDQot K0kgaGF2ZSBkZXZlbG9wZWQgXGNzeW5jMiBiZWNhdXNlIEkgZm91bmQgbm9uZSBvZiB0aGUgZXhp c3RpbmcgdG9vbHMgZm9yDQotK2FzeW5jaHJvbm91cyBzeW5jaHJvbml6YXRpb24gc2F0aXNmeWlu Zy4gVGhlIGRldmVsb3BtZW50IG9mIFxjc3luYzIgaGFzDQotK2JlZW4gc3BvbnNvcmVkIGJ5IExJ TkJJVCBJbmZvcm1hdGlvbiBUZWNobm9sb2dpZXMgWzJdLCB0aGUgY29tcGFueSB3aGljaCBhbHNv DQotK3Nwb25zb3JzIHRoZSBzeW5jaHJvbm91cyBibG9jayBkZXZpY2Ugc3luY2hyb25pemF0aW9u IHRvb2xjaGFpbiBEUkJEIFszXS4NCi0rDQotK1xoc3BhY2V7MC4yY219DQotKw0KLStOb3RlOiBJ IHdpbGwgc2ltcGx5IHVzZSB0aGUgdGVybSB7XGl0IHN5bmNocm9uaXphdGlvbn0gaW5zdGVhZCBv ZiB0aGUNCi0rc2VtaS1veHltb3JvbiB7XGl0IGFzeW5jaHJvbm91cyBzeW5jaHJvbml6YXRpb259 IGluIHRoZSByZXN0IG9mIHRoaXMgcGFwZXIuDQotKw0KLStcc3Vic2VjdGlvbntcY3N5bmMyIGZl YXR1cmVzfQ0KLSsNCi0rTW9zdCBzeW5jaHJvbml6YXRpb24gdG9vbHMgYXJlIHZlcnkgc2ltcGxl IHdyYXBwZXJzIGZvciByZW1vdGUtY29weSB0b29scyBzdWNoDQotK2FzIHtcdHQgcnN5bmN9IG9y IHtcdHQgc2NwfS4gVGhlc2Ugc29sdXRpb25zIHdvcmsgd2VsbCBpbiBtb3N0IGNhc2VzIGJ1dA0K LStzdGlsbCBsZWF2ZSBhIGJpZyBnYXAgZm9yIG1vcmUgc29waGlzdGljYXRlZCB0b29scyBzdWNo IGFzIFxjc3luYzIuIFRoZSBtb3N0DQotK2ltcG9ydGFudCBmZWF0dXJlcyBvZiBcY3N5bmMyIGFy ZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4NCi0rDQotK1xzdWJzdWJzZWN0 aW9ue0NvbmZsaWN0IGRldGVjdGlvbn0NCi0rDQotK1xsYWJlbHtjb25mbF9kZXRlY3R9DQotKw0K LStNb3N0IG9mIHRoZSB0cml2aWFsIHN5bmNocm9uaXphdGlvbiB0b29scyBqdXN0IGNvcHkgdGhl IG5ld2VyIGZpbGUgb3ZlciB0aGUNCi0rb2xkZXIgb25lLiBUaGlzIGNhbiBiZSBhIHZlcnkgZGFu Z2Vyb3VzIGJlaGF2aW9yIGlmIHRoZSBzYW1lIGZpbGUgaGFzIGJlZW4NCi0rY2hhbmdlZCBvbiBt b3JlIHRoYW4gb25lIGhvc3QuIFxjc3luYzIgZGV0ZWN0cyBzdWNoIGEgc2l0dWF0aW9uIGFzIGEg Y29uZmxpY3QNCi0rYW5kIHdpbGwgbm90IHN5bmNocm9uaXplIHRoZSBmaWxlLiAgVGhvc2UgY29u ZmxpY3RzIHRoZW4gbmVlZCB0byBiZSByZXNvbHZlZA0KLSttYW51YWxseSBieSB0aGUgY2x1c3Rl ciBhZG1pbmlzdHJhdG9yLg0KLSsNCi0rSXQgaXMgbm90IGNvbnNpZGVyZWQgYXMgYSBjb25mbGlj dCBieSBcY3N5bmMyIHdoZW4gdGhlIHNhbWUgY2hhbmdlIGhhcyBiZWVuDQotK3BlcmZvcm1lZCBv biB0d28gaG9zdHMgKGUuZy4gYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHN5bmNocm9uaXpl ZCB3aXRoDQotK2Fub3RoZXIgdG9vbCkuDQotKw0KLStJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGxl dCBcY3N5bmMyIHJlc29sdmUgY29uZmxpY3RzIGF1dG9tYXRpY2FsbHkgZm9yIHNvbWUgb3INCi0r YWxsIGZpbGVzIHVzaW5nIG9uZSBvZiB0aGUgcHJlLWRlZmluZWQgYXV0by1yZXNvbHZlIG1ldGhv ZHMuIFRoZSBhdmFpbGFibGUNCi0rbWV0aG9kcyBhcmU6IHtcdHQgbm9uZX0gKHRoZSBkZWZhdWx0 IGJlaGF2aW9yKSwge1x0dCBmaXJzdH0gKHRoZSBob3N0IG9uIHdoaWNoDQotK1xjc3luYzIgaXMg ZXhlY3V0ZWQgZmlyc3Qgd2lucyksIHtcdHQgeW91bmdlcn0gYW5kIHtcdHQgb2xkZXJ9ICh0aGUg eW91bmdlciBvcg0KLStvbGRlciBmaWxlIHdpbnMpLCB7XHR0IGJpZ2dlcn0gYW5kIHtcdHQgc21h bGxlcn0gKHRoZSBiaWdnZXIgb3Igc21hbGxlciBmaWxlDQotK3dpbnMpLCB7XHR0IGxlZnR9IGFu ZCB7XHR0IHJpZ2h0fSAodGhlIGhvc3Qgb24gdGhlIGxlZnQgc2lkZSBvciB0aGUgcmlnaHQgc2lk ZQ0KLStpbiB0aGUgaG9zdCBsaXN0IHdpbnMpLg0KLSsNCi0rVGhlIHtcdHQgeW91bmdlcn0sIHtc dHQgb2xkZXJ9LCB7XHR0IGJpZ2dlcn0gYW5kIHtcdHQgc21hbGxlcn0gbWV0aG9kcyBsZXQgdGhl DQotK3JlbW90ZSBzaWRlIHdpbiB0aGUgY29uZmxpY3QgaWYgdGhlIGZpbGUgaGFzIGJlZW4gcmVt b3ZlZCBvbiB0aGUgbG9jYWwgc2lkZS4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue1JlcGxpY2F0aW5n IGZpbGUgcmVtb3ZhbHN9DQotKw0KLStNYW55IHN5bmNocm9uaXphdGlvbiB0b29scyBjYW4gbm90 IHN5bmNocm9uaXplIGZpbGUgcmVtb3ZhbHMgYmVjYXVzZSB0aGV5IGNhbg0KLStub3QgZGlzdGlu Z3Vpc2ggYmV0d2VlbiB0aGUgZmlsZSBiZWluZyByZW1vdmVkIG9uIG9uZSBob3N0IGFuZCBiZWlu ZyBjcmVhdGVkIG9uDQotK3RoZSBvdGhlciBvbmUuIFNvIGluc3RlYWQgb2YgcmVtb3ZpbmcgdGhl IGZpbGUgb24gdGhlIHNlY29uZCBob3N0IHRoZXkgcmVjcmVhdGUNCi0raXQgb24gdGhlIGZpcnN0 IG9uZS4NCi0rDQotK1xjc3luYzIgZGV0ZWN0cyBmaWxlIHJlbW92YWxzIGFzIHN1Y2ggYW5kIGNh biBzeW5jaHJvbml6ZSB0aGVtIGNvcnJlY3RseS4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue0NvbXBs ZXggc2V0dXBzfQ0KLSsNCi0rTWFueSBzeW5jaHJvbml6YXRpb24gdG9vbHMgYXJlIHN0cmljdGx5 IGRlc2lnbmVkIGZvciB0d28taG9zdC1zZXR1cHMuIFRoaXMgaXMNCi0rYW4gaW5hZGVxdWF0ZSBy ZXN0cmljdGlvbiBhbmQgc28gXGNzeW5jMiBjYW4gaGFuZGxlIGFueSBudW1iZXIgb2YgaG9zdHMu DQotKw0KLStcY3N5bmMyIGNhbiBldmVuIGhhbmRsZSBjb21wbGV4IHNldHVwcyB3aGVyZSBlLmcu IGFsbCBob3N0cyBpbiBhIGNsdXN0ZXIgc2hhcmUNCi0rdGhlIHtcdHQgL2V0Yy9ob3N0c30gZmls ZSwgYnV0IG9uZSB7XHR0IC9ldGMvcGFzc3dkfSBmaWxlIGlzIG9ubHkgc2hhcmVkIGFtb25nDQot K3RoZSBtZW1iZXJzIG9mIGEgc21hbGwgc3ViLWdyb3VwIG9mIGhvc3RzIGFuZCBhbm90aGVyIHtc dHQgL2V0Yy9wYXNzd2R9IGZpbGUgaXMNCi0rc2hhcmVkIGFtb25nIHRoZSBvdGhlciBob3N0cyBp biB0aGUgY2x1c3Rlci4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue1JlYWN0aW5nIHRvIHVwZGF0ZXN9 DQotKw0KLStJbiBtYW55IGNhc2VzIGl0IGlzIG5vdCBlbm91Z2ggdG8gc2ltcGx5IHN5bmNocm9u aXplIGEgZmlsZSBiZXR3ZWVuIGNsdXN0ZXINCi0rbm9kZXMuIEl0IGFsc28gaXMgaW1wb3J0YW50 IHRvIHRlbGwgdGhlIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgc3luY2hyb25pemVkDQotK2ZpbGUg dGhhdCB0aGUgdW5kZXJseWluZyBmaWxlIGhhcyBiZWVuIGNoYW5nZWQsIGUuZy4gYnkgcmVzdGFy dGluZyB0aGUNCi0rYXBwbGljYXRpb24uDQotKw0KLStcY3N5bmMyIGNhbiBiZSBjb25maWd1cmVk IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvbW1hbmRzIHdoZW4gZmlsZXMgbWF0Y2hpbmcgYW4NCi0r YXJiaXRyYXJ5IHNldCBvZiBzaGVsbCBwYXR0ZXJucyBhcmUgc3luY2hyb25pemVkLg0KLSsNCi0r XHNlY3Rpb257VGhlIFxjc3luYzIgYWxnb3JpdGhtfQ0KLSsNCi0rTWFueSBvdGhlciBzeW5jaHJv bml6YXRpb24gdG9vbHMgY29tcGFyZSB0aGUgaG9zdHMsIHRyeSB0byBmaWd1cmUgb3V0IHdoaWNo DQotK2hvc3QgaXMgdGhlIG1vc3QgdXAtdG8tZGF0ZSBvbmUgYW5kIHRoZW4gc3luY2hyb25pemUg dGhlIHN0YXRlIGZyb20gdGhpcyBob3N0DQotK3RvIGFsbCBvdGhlciBob3N0cy4gVGhpcyBhbGdv cml0aG0gY2FuIG5vdCBkZXRlY3QgY29uZmxpY3RzLCBjYW4gbm90DQotK2Rpc3Rpbmd1aXNoIGJl dHdlZW4gZmlsZSByZW1vdmFscyBhbmQgZmlsZSBjcmVhdGlvbnMgYW5kIHRoZXJmb3JlIGl0IGlz IG5vdA0KLSt1c2VkIGluIFxjc3luYzIuDQotKw0KLStcY3N5bmMyIGNyZWF0ZXMgYSBsaXR0bGUg ZGF0YWJhc2Ugd2l0aCBmaWxlc3lzdGVtIG1ldGFkYXRhIG9uIGVhY2ggaG9zdC4gVGhpcw0KLStk YXRhYmFzZSAoe1x0dCAvdmFyL2xpYi9jc3luYzIve1xpdCBob3N0bmFtZX0uZGJ9KSBjb250YWlu cyBhIGxpc3Qgb2YgdGhlIGxvY2FsDQotK2ZpbGVzIHVuZGVyIHRoZSBjb250cm9sIG9mIFxjc3lu YzIuIFRoZSBkYXRhYmFzZSBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIHN1Y2gNCi0rYXMgdGhl IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcHMgYW5kIGZpbGUgc2l6ZXMuDQotKw0KLStUaGlz IGRhdGFiYXNlIGlzIHVzZWQgYnkgXGNzeW5jMiB0byBkZXRlY3QgY2hhbmdlcyBieSBjb21wYXJp c29uIHdpdGggdGhlIGxvY2FsDQotK2ZpbGVzeXN0ZW0uIFRoZSBzeW5jaHJvbml6YXRpb24gaXRz ZWxmIGlzIHRoZW4gcGVyZm9ybWVkIHVzaW5nIHRoZSBcY3N5bmMyDQotK3Byb3RvY29sIChUQ1Ag cG9ydCAzMDg2NSkuDQotKw0KLStOb3RlIHRoYXQgdGhpcyBhcHByb2FjaCBpbXBsaWVzIHRoYXQg XGNzeW5jMiBjYW4gb25seSBwdXNoIGNoYW5nZXMgZnJvbSB0aGUNCi0rbWFjaGluZSBvbiB3aGlj aCB0aGUgY2hhbmdlcyBoYXMgYmVlbiBwZXJmb3JtZWQgdG8gdGhlIG90aGVyIG1hY2hpbmVzIGlu IHRoZQ0KLStjbHVzdGVyLiBSdW5uaW5nIFxjc3luYzIgb24gYW55IG90aGVyIG1hY2hpbmUgaW4g dGhlIGNsdXN0ZXIgY2FuIG5vdCBkZXRlY3QgYW5kDQotK3NvIGNhbiBub3Qgc3luY2hyb25pemUg dGhlIGNoYW5nZXMuDQotKw0KLStMaWJyc3luYyBbNF0gaXMgdXNlZCBmb3IgYmFuZHdpZHRoLXNh dmluZyBmaWxlIHN5bmNocm9uaXphdGlvbiBhbmQgU1NMIGlzIHVzZWQgZm9yDQotK2VuY3J5cHRp bmcgdGhlIG5ldHdvcmsgdHJhZmZpYy4gVGhlIHNxbGl0ZSBsaWJyYXJ5IFs1XSAodmVyc2lvbiAy KSBpcyB1c2VkIGZvcg0KLSttYW5hZ2luZyB0aGUgXGNzeW5jMiBkYXRhYmFzZSBmaWxlcy4gQXV0 aGVudGljYXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nDQotK2F1dG8tZ2VuZXJhdGVkIHByZS1zaGFy ZWQta2V5cyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwZWVyIElQIGFkZHJlc3MgYW5kDQotK3Ro ZSBwZWVyIFNTTCBjZXJ0aWZpY2F0ZS4NCi0rDQotK1xzZWN0aW9ue1NldHRpbmcgdXAgXGNzeW5j Mn0NCi0rDQotK1xzdWJzZWN0aW9ue0J1aWxkaW5nIFxjc3luYzIgZnJvbSBzb3VyY2V9DQotKw0K LStTaW1wbHkgZG93bmxvYWQgdGhlIGxhdGVzdCBcY3N5bmMyIHNvdXJjZSB0YXIuZ3ogZnJvbSB7 XGJmIFx0dCBodHRwOi8vb3NzLmxpbmJpdC5jb20vY3N5bmMyL30sDQotK2V4dHJhY3QgaXQgYW5k IHJ1biB0aGUgdXN1YWwge1x0dCAuL2NvbmZpZ3VyZX0gLSB7XHR0IG1ha2V9IC0ge1x0dCBtYWtl IGluc3RhbGx9IHRyaW8uDQotKw0KLStcY3N5bmMyIGhhcyBhIGZldyBwcmVyZXF1aXNpdGVzIGlu IGFkZGl0aW9uIHRvIGEgQyBjb21waWxlciwgdGhlIHN0YW5kYXJkDQotK3N5c3RlbSBsaWJyYXJp ZXMgYW5kIGhlYWRlcnMgYW5kIHRoZSB1c3VhbCBnbnUgdG9vbGNoYWluICh7XHR0IG1ha2V9LCBl dGMpOg0KLSsNCi0re1xiZiAxLn0gWW91IG5lZWQgbGlicnN5bmMsIGxpYnNxbGl0ZSAodmVyc2lv biAyKSBhbmQgbGlic3NsIGluc3RhbGxlZA0KLSsoaW5jbHVkaW5nIGRldmVsb3BtZW50IGhlYWRl cnMpLg0KLSsNCi0re1xiZiAyLn0gQmlzb24gYW5kIGZsZXggYXJlIG5lZWRlZCB0byBidWlsZCB0 aGUgY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlci4NCi0rDQotK1xzdWJzZWN0aW9ue1xjc3luYzIg aW4gTGludXggZGlzdHJpYnV0aW9uc30NCi0rDQotK0FzIG9mIHRoaXMgd3JpdGluZyB0aGVyZSBh cmUgbm8gb2ZmaWNpYWwgRGViaWFuLCBSZWRIYXQgb3IgU3VTRSBwYWNrYWdlcyBmb3INCi0rXGNz eW5jMi4gR2VudG9vIGhhcyBhIFxjc3luYzIgcGFja2FnZSwgYnV0IGlzIGhhcyBub3QgYmVlbiB1 cGRhdGVkIGZvciBhIHllYXINCi0rbm93LiBBcyBmYXIgYXMgSSBrbm93LCBST0NLIExpbnV4IFs2 XSBpcyB0aGUgb25seSBzeXN0ZW0gd2l0aCBhbiB1cC10by1kYXRlDQotK1xjc3luYzIgcGFja2Fn ZS4gU28gSSByZWNvbW1lbmQgdGhhdCBhbGwgdXNlcnMgb2Ygbm9uLVJPQ0sgZGlzdHJpYnV0aW9u cyBidWlsdA0KLSt0aGUgcGFja2FnZSBmcm9tIHNvdXJjZS4NCi0rDQotK1RoZSBcY3N5bmMyIHNv dXJjZSBwYWNrYWdlIGNvbnRhaW5zIGFuIFJQTSB7XHR0IC5zcGVjc30gZmlsZSBhcyB3ZWxsIGFz IGEge1x0dA0KLStkZWJpYW4vfSBkaXJlY3RvcnkuIFNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB7 XHR0IHJwbWJ1aWxkfSBvciB7XHR0IGRlYnVpbGR9IHRvDQotK2J1aWxkIFxjc3luYzIuDQotKw0K LStcc3Vic2VjdGlvbntQb3N0IGluc3RhbGxhdGlvbn0NCi0rDQotK05leHQgeW91IG5lZWQgdG8g Y3JlYXRlIGFuIFNTTCBjZXJ0aWZpY2F0ZSBmb3IgdGhlIGxvY2FsIFxjc3luYzIgc2VydmVyLg0K LStTaW1wbHkgcnVubmluZyB7XHR0IG1ha2UgY2VydH0gaW4gdGhlIFxjc3luYzIgc291cmNlIGRp cmVjdG9yeSB3aWxsIGNyZWF0ZSBhbmQNCi0raW5zdGFsbCBhIHNlbGYtc2lnbmVkIFNTTCBjZXJ0 aWZpY2F0ZSBmb3IgeW91LiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IGhhdmUgbm8NCi0rc291cmNl IGFyb3VuZCwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6DQotKw0KLStcYmVnaW57dmVyYmF0 aW19DQotK29wZW5zc2wgZ2VucnNhIFwNCi0rICAgIC1vdXQgL2V0Yy9jc3luYzJfc3NsX2tleS5w ZW0gMTAyNA0KLStvcGVuc3NsIHJlcSAtbmV3IFwNCi0rICAgIC1rZXkgL2V0Yy9jc3luYzJfc3Ns X2tleS5wZW0gXA0KLSsgICAgLW91dCAvZXRjL2NzeW5jMl9zc2xfY2VydC5jc3INCi0rb3BlbnNz bCB4NTA5IC1yZXEgLWRheXMgNjAwIFwNCi0rICAgIC1pbiAvZXRjL2NzeW5jMl9zc2xfY2VydC5j c3IgXA0KLSsgICAgLXNpZ25rZXkgL2V0Yy9jc3luYzJfc3NsX2tleS5wZW0gXA0KLSsgICAgLW91 dCAvZXRjL2NzeW5jMl9zc2xfY2VydC5wZW0NCi0rXGVuZHt2ZXJiYXRpbX0NCi0rDQotK1lvdSBo YXZlIHRvIGRvIHRoYXQgb24gZWFjaCBob3N0IHlvdSdyZSBydW5uaW5nIGNzeW5jMiBvbi4gV2hl biBzZXJ2ZXJzIGFyZQ0KLSt0YWxraW5nIHdpdGggZWFjaCBvdGhlciBmb3IgdGhlIGZpcnN0IHRp bWUsIHRoZXkgYWRkIGVhY2ggb3RoZXIgdG8gdGhlIGRhdGFiYXNlLg0KLSsNCi0rVGhlIFxjc3lu YzIgVENQIHBvcnQgMzA4NjUgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHtcdHQgL2V0Yy9zZXJ2 aWNlc30gZmlsZSBhbmQNCi0raW5ldGQgbmVlZHMgdG8gYmUgdG9sZCBhYm91dCBcY3N5bmMyIGJ5 IGFkZGluZw0KLSsNCi0rXGJlZ2lue3ZlcmJhdGltfQ0KLStjc3luYzIgc3RyZWFtIHRjcCBub3dh aXQgcm9vdCBcDQotKyAgICAgICAgL3Vzci9sb2NhbC9zYmluL2NzeW5jMiBjc3luYzIgLWkNCi0r XGVuZHt2ZXJiYXRpbX0NCi0rDQotK3RvIHtcdHQgL2V0Yy9pbmV0ZC5jb25mfS4NCi0rDQotKyUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUNCi0rDQotK1xiZWdpbntmaWd1cmUqfVt0XQ0KLSsgIFxiZWdp bntjZW50ZXJ9DQotK1xiZWdpbnt2ZXJiYXRpbX0NCi0rZ3JvdXAgbXlncm91cCAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgQSBzeW5jaHJvbml6YXRpb24gZ3JvdXAgKHNlZSAzLjQuMSkNCi0r ew0KLSsgICAgICAgIGhvc3QgaG9zdDEgaG9zdDIgKGhvc3QzKTsgICAgICAgIyBob3N0IGxpc3Qg KHNlZSAzLjQuMikNCi0rICAgICAgICBob3N0IGhvc3Q0QGhvc3Q0LWV0aDI7DQotKw0KLSsgICAg ICAgIGtleSAvZXRjL2NzeW5jMi5rZXlfbXlncm91cDsgICAgIyBwcmUtc2hhcmVkLWtleSAoc2Vl IDMuNC4zKQ0KLSsNCi0rICAgICAgICBpbmNsdWRlIC9ldGMvYXBhY2hlOyAgICAgICAgICAgICMg aW5jbHVkZS9leGNsdWRlIHBhdHRlcm5zIChzZWUgMy40LjQpDQotKyAgICAgICAgaW5jbHVkZSAl aG9tZWRpciUvYm9iOw0KLSsgICAgICAgIGV4Y2x1ZGUgJWhvbWVkaXIlL2JvYi90ZW1wOw0KLSsg ICAgICAgIGV4Y2x1ZGUgKn4gLio7DQotKw0KLSsgICAgICAgIGFjdGlvbiAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBhbiBhY3Rpb24gc2VjdGlvbiAoc2VlIDMuNC41KQ0KLSsgICAgICAgIHsN Ci0rICAgICAgICAgICAgICAgIHBhdHRlcm4gL2V0Yy9hcGFjaGUvaHR0cGQuY29uZjsNCi0rICAg ICAgICAgICAgICAgIHBhdHRlcm4gL2V0Yy9hcGFjaGUvc2l0ZXMtYXZhaWxhYmxlLyo7DQotKyAg ICAgICAgICAgICAgICBleGVjICIvdXNyL3NiaW4vYXBhY2hlMmN0bCBncmFjZWZ1bCI7DQotKyAg ICAgICAgICAgICAgICBsb2dmaWxlICIvdmFyL2xvZy9jc3luYzJfYWN0aW9uLmxvZyI7DQotKyAg ICAgICAgICAgICAgICBkby1sb2NhbDsNCi0rICAgICAgICAgICAgICAgICMgZG8tbG9jYWwtb25s eTsNCi0rICAgICAgICB9DQotKw0KLSsgICAgICAgIGJhY2t1cC1kaXJlY3RvcnkgL3Zhci9iYWNr dXBzL2NzeW5jMjsNCi0rICAgICAgICBiYWNrdXAtZ2VuZXJhdGlvbnMgMzsgICAgICAgICAgICMg YmFja3VwIG9sZCBmaWxlcyAoc2VlIDMuNC4xMSkNCi0rDQotKyAgICAgICAgYXV0byBub25lOyAg ICAgICAgICAgICAgICAgICAgICAjIGF1dG8gcmVzb2x2aW5nIG1vZGUgKHNlZSAzLjQuNikNCi0r fQ0KLSsNCi0rcHJlZml4IGhvbWVkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBwcmVm aXggZGVjbGFyYXRpb24gKHNlZSAzLjQuNykNCi0rew0KLSsgICAgICAgIG9uIGhvc3RbMTJdOiAv ZXhwb3J0L3VzZXJzOw0KLSsgICAgICAgIG9uICo6ICAgICAgICAvaG9tZTsNCi0rfQ0KLStcZW5k e3ZlcmJhdGltfQ0KLSsgIFxlbmR7Y2VudGVyfQ0KLSsgIFxjYXB0aW9ue0V4YW1wbGUgXGNzeW5j MiBjb25maWd1cmF0aW9uIGZpbGV9DQotK1xlbmR7ZmlndXJlKn0NCi0rDQotKyUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUNCi0rDQotKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUNCi0rDQotK1xiZWdpbntm aWd1cmUqfVt0XQ0KLSsgIFxiZWdpbntjZW50ZXJ9DQotK1xiZWdpbnt2ZXJiYXRpbX0NCi0rY3N5 bmMyIC1jciAvDQotK2lmIGNzeW5jMiAtTTsgdGhlbg0KLSsgICAgICAgIGVjaG8gIiEhIg0KLSsg ICAgICAgIGVjaG8gIiEhIFRoZXJlIGFyZSB1bnN5bmNlZCBjaGFuZ2VzISBUeXBlICd5ZXMnIGlm IHlvdSBzdGlsbCB3YW50IHRvIg0KLSsgICAgICAgIGVjaG8gIiEhIGV4aXQgKG9yIHByZXNzIGNy dGwtYykgYW5kIGFueXRoaW5nIGVsc2UgaWYgeW91IHdhbnQgdG8gc3RhcnQiDQotKyAgICAgICAg ZWNobyAiISEgYSBuZXcgbG9naW4gc2hlbGwgaW5zdGVhZC4iDQotKyAgICAgICAgZWNobyAiISEi DQotKyAgICAgICAgaWYgcmVhZCAtcCAiRG8geW91IHJlYWxseSB3YW50IHRvIGxvZ291dD8gIiBp biAmJg0KLSsgICAgICAgICAgIFsgIi4kaW4iICE9ICIueWVzIiBdOyB0aGVuDQotKyAgICAgICAg ICAgICAgICBleGVjIGJhc2ggLS1sb2dpbg0KLSsgICAgICAgIGZpDQotK2ZpDQotK1xlbmR7dmVy YmF0aW19DQotKyAgXGVuZHtjZW50ZXJ9DQotKyAgXGNhcHRpb257VGhlIHtcdHQgY3N5bmMyXF9s b2NoZWNrLnNofSBzY3JpcHR9DQotK1xlbmR7ZmlndXJlKn0NCi0rDQotKyUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUNCi0rDQotK1xzdWJzZWN0aW9ue0NvbmZpZ3VyYXRpb24gRmlsZX0NCi0rDQotK0Zp Z3VyZSAxIHNob3dzIGEgc2ltcGxlIFxjc3luYzIgY29uZmlndXJhdGlvbiBmaWxlLiBUaGUgY29u ZmlndXJhdGlvbiBmaWxlbmFtZQ0KLStpcyB7XHR0IC9ldGMvY3N5bmMyLmNmZ30gd2hlbiBubyB7 XHR0IC1DIHtcaXQgY29uZmlnbmFtZX19IG9wdGlvbiBoYXMgYmVlbg0KLStwYXNzZWQgYW5kIHtc dHQgL2V0Yy9jc3luYzJcX3tcaXQgY29uZmlnbmFtZX0uY2ZnfSB3aXRoIGEge1x0dCAtQyB7XGl0 DQotK2NvbmZpZ25hbWV9fSBvcHRpb24uDQotKw0KLStcc3Vic3Vic2VjdGlvbntTeW5jaHJvbml6 YXRpb24gR3JvdXBzfQ0KLSsNCi0rSW4gdGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIHlv dSB3aWxsIGZpbmQgdGhlIGRlY2xhcmF0aW9uIG9mIGENCi0rc3luY2hyb25pemF0aW9uIGdyb3Vw IGNhbGxlZCB7XHR0IG15Z3JvdXB9LiBBIFxjc3luYzIgc2V0dXAgY2FuIGhhdmUgYW55IG51bWJl cg0KLStvZiBzeW5jaHJvbml6YXRpb24gZ3JvdXBzLiBFYWNoIGdyb3VwIGhhcyBpdHMgb3duIGxp c3Qgb2YgbWVtYmVyIGhvc3RzIGFuZA0KLStpbmNsdWRlL2V4Y2x1ZGUgcnVsZXMuDQotKw0KLStc Y3N5bmMyIGF1dG9tYXRpY2FsbHkgaWdub3JlcyBhbGwgZ3JvdXBzIHdoaWNoIGRvIG5vdCBjb250 YWluIHRoZSBsb2NhbA0KLStob3N0bmFtZSBpbiB0aGUgaG9zdCBsaXN0LiBUaGlzIHdheSB5b3Ug Y2FuIHVzZSBvbmUgYmlnIFxjc3luYzIgY29uZmlndXJhdGlvbg0KLStmaWxlIGZvciB0aGUgZW50 aXJlIGNsdXN0ZXIuDQotKw0KLStcc3Vic3Vic2VjdGlvbntIb3N0IExpc3RzfQ0KLSsNCi0rSG9z dCBsaXN0cyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoZSB7XHR0IGhvc3R9IGtleXdvcmQuIFlvdSBj YW4gZWlnaHRlciBzcGVjaWZ5DQotK3RoZSBob3N0cyBpbiBhIHdoaXRlc3BhY2Ugc2VwZXJhdGVk IGxpc3Qgb3IgdXNlIGFuIGV4dHJhIHtcdHQgaG9zdH0gc3RhdGVtZW50DQotK2ZvciBlYWNoIGhv c3QuDQotKw0KLStUaGUgaG9zdG5hbWVzIHVzZWQgaGVyZSBtdXN0IGJlIHRoZSBsb2NhbCBob3N0 bmFtZXMgb2YgdGhlIGNsdXN0ZXIgbm9kZXMuIFRoYXQNCi0rbWVhbnMgeW91IG11c3QgdXNlIGV4 YWN0bHkgdGhlIHNhbWUgc3RyaW5nIGFzIHByaW50ZWQgb3V0IGJ5IHRoZSB7XHR0IGhvc3RuYW1l fQ0KLStjb21tYW5kLiBPdGhlcndpc2UgY3N5bmMyIHdvdWxkIGJlIHVuYWJsZSB0byBhc3NvY2lh dGUgdGhlIGhvc3RuYW1lcyBpbiB0aGUNCi0rY29uZmlndXJhdGlvbiBmaWxlIHdpdGggdGhlIGNs dXN0ZXIgbm9kZXMuDQotKw0KLStUaGUge1x0dCAtTiBcaXQgaG9zdG5hbWV9IGNvbW1hbmQgbGlu ZSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBsb2NhbA0KLStob3N0bmFtZSB1c2VkIGJ5 IFxjc3luYzIgdG8gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IHRo ZSB7XHR0DQotK2hvc3RuYW1lfSBjb21tYW5kLiBUaGlzIG1heSBiZSBlLmcuIHVzZWZ1bCBmb3Ig ZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBsb2NhbA0KLStob3N0bmFtZXMgYXJlIGF1dG9tYXRpY2Fs bHkgc2V0IGJ5IGEgREhDUCBzZXJ2ZXIgYW5kIGJlY2F1c2Ugb2YgdGhhdCBjaGFuZ2UNCi0rb2Z0 ZW4uDQotKw0KLStTb21ldGltZXMgaXQgaXMgZGVzaXJlZCB0aGF0IGEgaG9zdCBpcyByZWNlaXZp bmcgXGNzeW5jMiBjb25uZWN0aW9ucyBvbiBhbiBJUA0KLSthZGRyZXNzIHdoaWNoIGlzIG5vdCB0 aGUgSVAgYWRkcmVzcyBpdHMgRE5TIGVudHJ5IHJlc29sdmVzIHRvLCBlLmcufndoZW4gYQ0KLStj cm9zc292ZXIgY2FibGUgaXMgdXNlZCB0byBkaXJlY3RseSBjb25uZWN0IHRoZSBob3N0cyBvciBh biBleHRyYQ0KLStzeW5jaHJvbml6YXRpb24gbmV0d29yayBzaG91bGQgYmUgdXNlZC4gSW4gdGhp cyBjYXNlcyB0aGUgc3ludGF4IHtcdHR7XGl0DQotK2hvc3RuYW1lfUB7XGl0IGludGVyZmFjZW5h bWV9fSBoYXMgdG8gYmUgdXNlZCBmb3IgdGhlIHtcdHQgaG9zdH0gcmVjb3JkcyAoc2VlDQotK3tc dHQgaG9zdDR9IGluIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlKS4NCi0rDQotK1NvbWV0aW1lcyBh IGhvc3Qgc2hhbGwgb25seSByZWNlaXZlIHVwZGF0ZXMgZnJvbSBvdGhlciBob3N0cyBpbiB0aGUN Ci0rc3luY2hyb25pemF0aW9uIGdyb3VwIGJ1dCBzaGFsbCBub3QgYmUgYWxsb3dlZCB0byBzZW5k IHVwZGF0ZXMgdG8gdGhlIG90aGVyDQotK2hvc3RzLiBTdWNoIGhvc3RzIChzby1jYWxsZWQge1xp dCBzbGF2ZSBob3N0c30pIG11c3QgYmUgc3BlY2lmaWVkIGluDQotK2JyYWNrZXRzLCBzdWNoIGFz IHtcdHQgaG9zdDN9IGluIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlLg0KLSsNCi0rXHN1YnN1YnNl Y3Rpb257UHJlLVNoYXJlZC1LZXlzfQ0KLSsNCi0rQXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVk IHVzaW5nIHRoZSBJUCBhZGRyZXNzZXMgYW5kIHByZS1zaGFyZWQta2V5cyBpbg0KLStcY3N5bmMy LiBFYWNoIHN5bmNocm9uaXphdGlvbiBncm91cCBpbiB0aGUgY29uZmlnIGZpbGUgbXVzdCBoYXZl IGV4YWN0bHkgb25lDQotK3tcdHQga2V5fSByZWNvcmQgc3BlY2lmeWluZyB0aGUgZmlsZSBjb250 YWluaW5nIHRoZSBwcmUtc2hhcmVkLWtleSBmb3IgdGhpcw0KLStncm91cC4gSXQgaXMgcmVjb21t ZW5kZWQgdG8gdXNlIGEgc2VwYXJhdGUga2V5IGZvciBlYWNoIHN5bmNocm9uaXphdGlvbiBncm91 cA0KLSthbmQgb25seSBwbGFjZSBhIGtleSBmaWxlIG9uIHRob3NlIGhvc3RzIHdoaWNoIGFjdHVh bGx5IGFyZSBtZW1iZXJzIGluIHRoZQ0KLStjb3JyZXNwb25kaW5nIHN5bmNocm9uaXphdGlvbiBn cm91cC4NCi0rDQotK1RoZSBrZXkgZmlsZXMgY2FuIGJlIGdlbmVyYXRlZCB3aXRoIHtcdHQgY3N5 bmMyIC1rIHtcaXQgZmlsZW5hbWV9fS4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue0luY2x1ZGUvRXhj bHVkZSBQYXR0ZXJuc30NCi0rDQotK1RoZSB7XHR0IGluY2x1ZGV9IGFuZCB7XHR0IGV4Y2x1ZGV9 IHBhdHRlcm5zIGFyZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggZmlsZXMNCi0rc2hvdWxkIGJlIHN5 bmNlZCBpbiB0aGUgc3luY2hyb25pemF0aW9uIGdyb3VwLg0KLSsNCi0rVGhlcmUgYXJlIHR3byBr aW5kcyBvZiBwYXR0ZXJuczogcGF0aG5hbWUgcGF0dGVybnMgd2hpY2ggc3RhcnQgd2l0aCBhIHNs YXNoDQotK2NoYXJhY3RlciAob3IgYSBwcmVmaXggc3VjaCBhcyB0aGUge1x0dCBcJWhvbWVkaXJc JX0gaW4gdGhlIGV4YW1wbGU7IHByZWZpeGVzDQotK2FyZSBleHBsYWluZWQgaW4gYSBsYXRlciBz ZWN0aW9uKSBhbmQgYmFzZW5hbWUgcGF0dGVybnMgd2hpY2ggZG8gbm90Lg0KLSsNCi0rVGhlIGxh c3QgbWF0Y2hpbmcgcGF0dGVybiBmb3IgZWFjaCBvZiBib3RoIGNhdGVnb3JpZXMgaXMgY2hvc2Vu LiBJZg0KLStib3RoIGNhdGVnb3JpZXMgbWF0Y2gsIHRoZSBmaWxlIHdpbGwgYmUgc3luY2hyb25p emVkLg0KLSsNCi0rVGhlIHBhdGhuYW1lIHBhdHRlcm5zIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhl IGJlZ2lubmluZyBvZiB0aGUgZmlsZW5hbWUuIFNvIHRoZXkNCi0rbXVzdCBlaXRoZXIgbWF0Y2gg dGhlIGZ1bGwgYWJzb2x1dGUgZmlsZW5hbWUgb3IgbXVzdCBtYXRjaCBhIGRpcmVjdG9yeSBpbiB0 aGUNCi0rcGF0aCB0byB0aGUgZmlsZS4gVGhlIGZpbGUgd2lsbCBub3QgYmUgc3luY2hyb25pemVk IGlmIG5vIG1hdGNoaW5nIHtcdHQgaW5jbHVkZX0gb3INCi0re1x0dCBleGNsdWRlfSBwYXRobmFt ZSBwYXR0ZXJuIGlzIGZvdW5kIChpLmUuIHRoZSBkZWZhdWx0IHBhdGhuYW1lIHBhdHRlcm4gaXMN Ci0rYW4gZXhjbHVkZSBwYXR0ZXJuKS4NCi0rDQotK1RoZSBiYXNlbmFtZSBwYXR0ZXJucyBhcmUg bWF0Y2hlZCBhZ2FpbnN0IHRoZSBiYXNlIGZpbGVuYW1lIHdpdGhvdXQgdGhlIHBhdGguIFNvDQot K3RoZXkgY2FuIGUuZy4gYmUgdXNlZCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgZmlsZXMgYnkgdGhl aXIgZmlsZW5hbWUgZXh0ZW5zaW9ucy4NCi0rVGhlIGRlZmF1bHQgYmFzZW5hbWUgcGF0dGVybiBp cyBhbiBpbmNsdWRlIHBhdHRlcm4uDQotKw0KLStJbiBvdXIgZXhhbXBsZSBjb25maWcgZmlsZSB0 aGF0IG1lYW5zIHRoYXQgYWxsIGZpbGVzIGZyb20ge1x0dCAvZXRjL2FwYWNoZX0gYW5kDQotK3tc dHQgXCVob21lZGlyXCUvYm9ifSBhcmUgc3luY2VkLCBleGNlcHQgdGhlIGRvdCBmaWxlcywgZmls ZXMgd2l0aCBhIHRpbGRlDQotK2NoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlbmFtZSwg YW5kIGZpbGVzIGZyb20ge1x0dA0KLStcJWhvbWVkaXJcJS9ib2IvdGVtcH0uDQotKw0KLStcc3Vi c3Vic2VjdGlvbntBY3Rpb25zfQ0KLSsNCi0rRWFjaCBzeW5jaHJvbml6YXRpb24gZ3JvdXAgbWF5 IGhhdmUgYW55IG51bWJlciBvZiB7XHR0IGFjdGlvbn0gc2VjdGlvbnMuIFRoZXNlDQotK3tcdHQg YWN0aW9ufSBzZWN0aW9ucyBhcmUgdXNlZCB0byBzcGVjaWZ5IHNoZWxsIGNvbW1hbmRzIHdoaWNo IHNob3VsZCBiZQ0KLStleGVjdXRlZCBhZnRlciBhIGZpbGUgaXMgc3luY2hyb25pemVkIHRoYXQg bWF0Y2hlcyBhbnkgb2YgdGhlIHNwZWNpZmllZA0KLStwYXR0ZXJucy4NCi0rDQotK1RoZSB7XHR0 IGV4ZWN9IHN0YXRlbWVudCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbW1hbmQgd2hpY2ggc2hv dWxkIGJlDQotK2V4ZWN1dGVkLiBOb3RlIHRoYXQgaWYgbXVsdGlwbGUgZmlsZXMgbWF0Y2hpbmcg dGhlIHBhdHRlcm4gYXJlIHN5bmNlZCBpbiBvbmUNCi0rcnVuLCB0aGlzIGNvbW1hbmQgd2lsbCBv bmx5IGJlIGV4ZWN1dGVkIG9uY2UuIFRoZSBzcGVjaWFsIHRva2VuIHtcdHQgXCVcJX0gaW4NCi0r dGhlIGNvbW1hbmQgc3RyaW5nIGlzIHN1YnN0aXR1dGVkIHdpdGggdGhlIGxpc3Qgb2YgZmlsZXMg d2hpY2ggdHJpZ2dlcmVkIHRoZQ0KLStjb21tYW5kIGV4ZWN1dGlvbi4NCi0rDQotK1RoZSBvdXRw dXQgb2YgdGhlIGNvbW1hbmQgaXMgYXBwZW5kZWQgdG8gdGhlIHNwZWNpZmllZCBsb2dmaWxlLCBv ciB0bw0KLSt7XHR0IC9kZXYvbnVsbH0gaWYgdGhlIHtcdHQgbG9nZmlsZX0gc3RhdGVtZW50IGlz IG9taXR0ZWQuDQotKw0KLStVc3VhbGx5IHRoZSBhY3Rpb24gaXMgb25seSB0cmlnZ2VyZWQgb24g dGhlIHRhcmdlZCBob3N0cywgbm90IG9uIHRoZSBob3N0IG9uDQotK3doaWNoIHRoZSBmaWxlIG1v ZGlmaWNhdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoZSB7XHR0 DQotK2RvLWxvY2FsfSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoaXMgYmVoYXZp b3IgYW5kIGxldCBcY3N5bmMyIGFsc28NCi0rZXhlY3V0ZSB0aGUgY29tbWFuZCBvbiB0aGUgaG9z dCBmcm9tIHdoaWNoIHRoZSBtb2RpZmljYXRpb24gb3JpZ2luYXRlZC4gWW91IGNhbiANCi0rdXNl IHtcdHRkby1sb2NhbC1vbmx5fSB0byBleGVjdXRlIHRoZSBhY3Rpb24gb25seSBvbiB0aGlzIG1h Y2hpbmUuIA0KLSsNCi0rXHN1YnN1YnNlY3Rpb257Q29uZmxpY3QgQXV0by1yZXNvbHZpbmd9DQot Kw0KLStUaGUge1x0dCBhdXRvfSBzdGF0ZW1lbnQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb25m bGljdCBhdXRvLXJlc29sdmluZw0KLSttZWNoYW5pc20gZm9yIHRoaXMgc3luY2hyb25pemF0aW9u IGdyb3VwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7XHR0IGF1dG8gbm9uZX0uDQotKw0KLStTZWUg c2VjdGlvbiBccmVme2NvbmZsX2RldGVjdH0gZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMg Zm9yIHRoaXMgc2V0dGluZy4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue1ByZWZpeCBEZWNsYXJhdGlv bnN9DQotKw0KLStQcmVmaXhlcyAoc3VjaCBhcyB0aGUge1x0dCBcJWhvbWVkaXJcJX0gcHJlZml4 IGluIHRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24NCi0rZmlsZSkgY2FuIGJlIHVzZWQgdG8gc3lu Y2hyb25pemUgZGlyZWN0b3JpZXMgd2hpY2ggYXJlIG5hbWVkIGRpZmZlcmVudGx5IG9uDQotK3Ro ZSBjbHVzdGVyIG5vZGVzLiBJbiB0aGUgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgdGhlIGRp cmVjdG9yeSBmb3IgdGhlDQotK3VzZXIgaG9tZSBkaXJlY3RvcmllcyBpcyB7XHR0IC9leHBvcnQv dXNlcnN9IG9uIHRoZSBob3N0cyB7XHR0IGhvc3QxfSBhbmQNCi0re1x0dCBob3N0Mn0gYW5kIHtc dHQgL2hvbWV9IG9uIHRoZSBvdGhlciBob3N0cy4NCi0rDQotK1RoZSBwcmVmaXggdmFsdWUgbXVz dCBiZSBhbiBhYnNvbHV0ZSBwYXRoIG5hbWUgYW5kIG11c3Qgbm90IGNvbnRhaW4gYW55DQotK3dp bGRjYXJkIGNoYXJhY3RlcnMuDQotKw0KLStcc3Vic3Vic2VjdGlvbntUaGUge1x0dCBub3NzbH0g c3RhdGVtZW50fQ0KLSsNCi0rVXN1YWxseSBhbGwgXGNzeW5jMiBuZXR3b3JrIGNvbW11bmljYXRp b24gaXMgZW5jcnlwdGVkIHVzaW5nIFNTTC4gVGhpcyBjYW4gYmUNCi0rY2hhbmdlZCB3aXRoIHRo ZSB7XHR0IG5vc3NsfSBzdGF0ZW1lbnQuIFRoaXMgc3RhdGVtZW50IG1heSBvbmx5IG9jY3VyIGlu IHRoZQ0KLStyb290IGNvbnRleHQgKG5vdCBpbiBhIHtcdHQgZ3JvdXB9IG9yIHtcdHQgcHJlZml4 fSBzZWN0aW9uKSBhbmQgaGFzIHR3bw0KLStwYXJhbWV0ZXJzLiBUaGUgZmlyc3Qgb25lIGlzIGEg c2hlbGwgcGF0dGVybiBtYXRjaGluZyB0aGUgc291cmNlIEROUyBuYW1lIGZvcg0KLSt0aGUgVENQ IGNvbm5lY3Rpb24gYW5kIHRoZSBzZWNvbmQgb25lIGlzIGEgc2hlbGwgcGF0dGVybiBtYXRjaGlu ZyB0aGUNCi0rZGVzdGluYXRpb24gRE5TIG5hbWUuDQotKw0KLStTbyBpZiBlLmcufmEgc2VjdXJl IHN5bmNocm9uaXphdGlvbiBuZXR3b3JrIGlzIHVzZWQgYmV0d2VlbiBzb21lIGhvc3RzIGFuZA0K LSthbGwgdGhlIGludGVyZmFjZSBETlMgbmFtZXMgZW5kIHdpdGgge1x0dCAtc3luY30sIGEgc2lt cGxlDQotKw0KLStcYmVnaW57dmVyYmF0aW19DQotK25vc3NsICotc3luYyAqLXN5bmM7DQotK1xl bmR7dmVyYmF0aW19DQotKw0KLSt3aWxsIGRpc2FibGUgdGhlIGVuY3J5cHRpb24gb3ZlcmhlYWQg b24gdGhlIHN5bmNocm9uaXphdGlvbiBuZXR3b3JrLiBBbGwgb3RoZXINCi0rdHJhZmZpYyB3aWxs IHN0YXkgU1NMIGVuY3J5cHRlZC4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue1RoZSB7XHR0IGNvbmZp Z30gc3RhdGVtZW50fQ0KLSsNCi0rVGhlIHtcdHQgY29uZmlnfSBzdGF0ZW1lbnQgaXMgbm90aGlu ZyBtb3JlIHRoZW4gYW4gaW5jbHVkZSBzdGF0ZW1lbnQgYW5kIGNhbiBiZQ0KLSt1c2VkIHRvIGlu Y2x1ZGUgb3RoZXIgY29uZmlnIGZpbGVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1vZHVsYXJpemUg dGhlDQotK2NvbmZpZ3VyYXRpb24gZmlsZS4NCi0rDQotK1xzdWJzdWJzZWN0aW9ue1RoZSB7XHR0 IGlnbm9yZX0gc3RhdGVtZW50fQ0KLSsNCi0rVGhlIHtcdHQgaWdub3JlfSBzdGF0ZW1lbnQgY2Fu IGJlIHVzZWQgdG8gdGVsbCBcY3N5bmMyIHRvIG5vdCBjaGVjayBhbmQgbm90IHN5bmMNCi0rdGhl IGZpbGUgdXNlci1pZCwgdGhlIGZpbGUgZ3JvdXAtaWQgYW5kL29yIHRoZSBmaWxlIHBlcm1pc3Np b25zLiBUaGUgc3RhdGVtZW50DQotK2lzIG9ubHkgdmFsaWQgaW4gdGhlIHJvb3QgY29udGV4dCBh bmQgYWNjZXB0cyB0aGUgcGFyYW1ldGVycyB7XHR0IHVpZH0sIHtcdHQNCi0rZ2lkfSBhbmQge1x0 dCBtb2R9IHRvIHR1cm4gb2ZmIGhhbmRsaW5nIG9mIHVzZXItaWRzLCBncm91cC1pZHMgYW5kIGZp bGUNCi0rcGVybWlzc2lvbnMuDQotKw0KLStcc3Vic3Vic2VjdGlvbntUaGUge1x0dCB0ZW1wZGly fSBzdGF0ZW1lbnR9DQotKw0KLStUaGUge1x0dCB0ZW1wZGlyfSBzdGF0ZW1lbnQgc3BlY2lmaWVz IHRoZSBkaXJlY3RvcnkgdG8gYmUgdXNlZCBmb3IgdGVtcG9yYXJ5DQotK2ZpbGVzIHdoaWxlIHJl Y2VpdmluZyBkYXRhIHRocm91Z2ggbGlicnN5bmMuIE5vdGUgdGhhdCBpbnRlcm5hbGx5LCBjc3lu YzIgdXNlcw0KLSthIHdyYXBwZXIgYXJvdW5kIHRlbXBuYW0oMyksIHNvIHRoZSB7XHR0IFRNUERJ Un0gZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZQ0KLStjb25zaWRlcmVkIGZpcnN0LCB0aGVu IHRoZSBkaXJlY3RvcnkgZGVmaW5lZCBoZXJlLCBhbmQgaWYgdGhhdCBkb2VzIG5vdCB3b3JrIG91 dCwNCi0rdGhlIHN5c3RlbSBkZWZhdWx0IG9yIHtcdHQgL3RtcH0gd2lsbCBiZSB1c2VkLg0KLSsN Ci0rXHN1YnN1YnNlY3Rpb257VGhlIHtcdHQgbG9jay10aW1lb3V0fSBzdGF0ZW1lbnR9DQotKw0K LStUaGUge1x0dCBsb2NrLXRpbWVvdXR9IHN0YXRlbWVudCBzcGVjaWZpZXMgdGhlIHNlY29uZHMg dG8gd2FpdCB3b3IgYSBkYXRhYmFzZSBsb2NrDQotK2JlZm9yZSBnaXZpbmcgdXAuIERlZmF1bHQg aXMgMTIgc2Vjb25kcy4gVGhlIGFtb3VudCB3aWxsIGJlIHNsaWdodGx5IHJhbmRvbWl6ZWQNCi0r d2l0aCBhIGppdHRlciBvZiB1cCB0byA2IHNlY29uZHMgYmFzZWQgb24gdGhlIHJlc3BlY3RpdmUg cHJvY2VzcyBpZC4NCi0rDQotKyUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUNCi0rDQotK1xiZWdpbntm aWd1cmUqfVt0XQ0KLSsgIFxiZWdpbntjZW50ZXJ9DQotK1xiZWdpbnt2ZXJiYXRpbX0NCi0rQ1JF QVRFIFRBQkxFIGZpbGUgKA0KLSsgICAgICAgIGZpbGVuYW1lLCBjaGVja3R4dCwNCi0rICAgICAg ICBVTklRVUUgKCBmaWxlbmFtZSApIE9OIENPTkZMSUNUIFJFUExBQ0UNCi0rKTsNCi0rDQotK0NS RUFURSBUQUJMRSBkaXJ0eSAoDQotKyAgICAgICAgZmlsZW5hbWUsIGZvcmNlLCBteW5hbWUsIHBl ZXJuYW1lLA0KLSsgICAgICAgIFVOSVFVRSAoIGZpbGVuYW1lLCBwZWVybmFtZSApIE9OIENPTkZM SUNUIElHTk9SRQ0KLSspOw0KLSsNCi0rQ1JFQVRFIFRBQkxFIGhpbnQgKA0KLSsgICAgICAgIGZp bGVuYW1lLCByZWN1cnNpdmUsDQotKyAgICAgICAgVU5JUVVFICggZmlsZW5hbWUsIHJlY3Vyc2l2 ZSApIE9OIENPTkZMSUNUIElHTk9SRQ0KLSspOw0KLSsNCi0rQ1JFQVRFIFRBQkxFIGFjdGlvbiAo DQotKyAgICAgICAgZmlsZW5hbWUsIGNvbW1hbmQsIGxvZ2ZpbGUsDQotKyAgICAgICAgVU5JUVVF ICggZmlsZW5hbWUsIGNvbW1hbmQgKSBPTiBDT05GTElDVCBJR05PUkUNCi0rKTsNCi0rDQotK0NS RUFURSBUQUJMRSB4NTA5X2NlcnQgKA0KLSsgICAgICAgIHBlZXJuYW1lLCBjZXJ0ZGF0YSwNCi0r ICAgICAgICBVTklRVUUgKCBwZWVybmFtZSApIE9OIENPTkZMSUNUIElHTk9SRQ0KLSspOw0KLStc ZW5ke3ZlcmJhdGltfQ0KLSsgIFxlbmR7Y2VudGVyfQ0KLSsgIFxjYXB0aW9ue1RoZSBcY3N5bmMy IGRhdGFiYXNlIHNjaGVtYX0NCi0rXGVuZHtmaWd1cmUqfQ0KLSsNCi0rJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJQ0KLSsNCi0rXHN1YnN1YnNlY3Rpb257QmFja2luZyB1cH0NCi0rDQotK1xjc3luYzIg Y2FuIGJhY2sgdXAgdGhlIGZpbGVzIGl0IG1vZGlmaWVzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9y IHNjZW5hcmlvcw0KLSt3aGVyZSBvbmUgaXMgYWZyYWlkIG9mIGFjY2lkZW50YWxseSBzeW5jaW5n IGZpbGVzIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24uDQotKw0KLStUaGUge1x0dCBiYWNrdXAtZGly ZWN0b3J5fSBzdGF0ZW1lbnQgaXMgdXNlZCB0byB0ZWxsIFxjc3luYzIgaW4gd2hpY2ggZGlyZWN0 b3J5DQotK2l0IHNob3VsZCBjcmVhdGUgdGhlIGJhY2t1cCBmaWxlcyBhbmQgdGhlIHtcdHQgYmFj a3VwLWdlbmVyYXRpb25zfSBzdGF0ZW1lbnQgaXMNCi0rdXNlZCB0byB0ZWxsIFxjc3luYzIgaG93 IG1hbnkgb2xkIHZlcnNpb25zIG9mIHRoZSBmaWxlcyBzaG91bGQgYmUga2VwdCBpbiB0aGUNCi0r YmFja3VwIGRpcmVjdG9yeS4NCi0rDQotK1RoZSBmaWxlcyBpbiB0aGUgYmFja3VwIGRpcmVjdG9y eSBhcmUgbmFtZWQgbGlrZSB0aGUgZmlsZSB0aGV5IGJhY2sgdXAsIHdpdGgNCi0rYWxsIHNsYXNo ZXMgc3Vic3RpdHV0ZWQgYnkgdW5kZXJzY29yZXMgYW5kIGEgZ2VuZXJhdGlvbiBjb3VudGVyIGFw cGVuZGVkLiBOb3RlDQotK3RoYXQgb25seSB0aGUgZmlsZSBjb250ZW50LCBub3QgdGhlIG1ldGFk YXRhIHN1Y2ggYXMgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucw0KLSthcmUgYmFja2VkIHVwLg0K LSsNCi0rUGVyIGRlZmF1bHQgXGNzeW5jMiBkb2VzIG5vdCBiYWNrIHVwIHRoZSBmaWxlcyBpdCBt b2RpZmllcy4gVGhlIGRlZmF1bHQNCi0rdmFsdWUgZm9yIHtcdHQgYmFja3VwLWdlbmVyYXRpb25z fSBpcyB7XHR0IDN9Lg0KLSsNCi0rXHN1YnNlY3Rpb257QWN0aXZhdGluZyB0aGUgTG9nb3V0IENo ZWNrfQ0KLSsNCi0rVGhlIFxjc3luYzIgc291cmNlcyBjb250YWluIGEgbGl0dGxlIHNjcmlwdCBj YWxsZWQge1x0dCBjc3luYzJcX2xvY2hlY2suc2h9IA0KLSsoRmlndXJlIDIpLg0KLSsNCi0rSWYg eW91IGNvcHkgdGhhdCBzY3JpcHQgaW50byB5b3VyIHtcdHQgXHRleHRhc2NpaXRpbGRlLy5iYXNo XF9sb2dvdXR9IHNjcmlwdA0KLSsob3IgaW5jbHVkZSBpdCB1c2luZyB0aGUge1x0dCBzb3VyY2V9 IHNoZWxsIGNvbW1hbmQpLCB0aGUgc2hlbGwgd2lsbCBub3QgbGV0DQotK3lvdSBsb2cgb3V0IGlm IHRoZXJlIGFyZSBhbnkgdW5zeW5jZWQgY2hhbmdlcy4NCi0rDQotK1xzZWN0aW9ue0RhdGFiYXNl IFNjaGVtYX0NCi0rDQotK0ZpZ3VyZSAzIHNob3dzIHRoZSBcY3N5bmMyIGRhdGFiYXNlIHNjaGVt YS4gVGhlIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZw0KLSt0aGUge1x0dCBzcWxpdGV9 IGNvbW1hbmQgbGluZSBzaGVsbC4gQWxsIHN0cmluZyB2YWx1ZXMgYXJlIFVSTCBlbmNvZGVkIGlu IHRoZQ0KLStkYXRhYmFzZS4NCi0rDQotK1RoZSB7XHR0IGZpbGV9IHRhYmxlIGNvbnRhaW5zIGEg bGlzdCBvZiBhbGwgbG9jYWwgZmlsZXMgdW5kZXIgXGNzeW5jMiBjb250cm9sLA0KLSt0aGUge1x0 dCBjaGVja3R4dH0gYXR0cmlidXRlIGNvbnRhaW5zIGEgc3BlY2lhbCBzdHJpbmcgd2l0aCBpbmZv cm1hdGlvbiBhYm91dA0KLStmaWxlIHR5cGUsIHNpemUsIG1vZGlmaWNhdGlvbiB0aW1lIGFuZCBt b3JlLiBJdCBsb29rcyBsaWtlIHRoaXM6DQotKw0KLStcYmVnaW57dmVyYmF0aW19DQotK3YxOm10 aW1lPTExMDM0NzE4MzI6bW9kZT0zMzE1MjoNCi0rdWlkPTEwMDE6Z2lkPTExMTp0eXBlPXJlZzpz aXplPTMwMQ0KLStcZW5ke3ZlcmJhdGltfQ0KLSsNCi0rVGhpcyB7XHR0IGNoZWNrdHh0fSBhdHRy aWJ1dGUgaXMgdXNlZCB0byBjaGVjayBpZiBhIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvbg0KLSt0 aGUgbG9jYWwgaG9zdC4NCi0rDQotK0lmIGEgbG9jYWwgY2hhbmdlIGhhcyBiZWVuIGRldGVjdGVk LCB0aGUgZW50cnkgaW4gdGhlIHtcdHQgZmlsZX0gdGFibGUgaXMNCi0rdXBkYXRlZCBhbmQgZW50 cmllcyBpbiB0aGUge1x0dCBkaXJ0eX0gdGFibGUgYXJlIGNyZWF0ZWQgZm9yIGFsbCBwZWVyIGhv c3RzDQotK3doaWNoIHNob3VsZCBiZSB1cGRhdGVkLiBUaGlzIHdheSB0aGUgaW5mb3JtYXRpb24g dGhhdCBhIGhvc3Qgc2hvdWxkIGJlIHVwZGF0ZWQNCi0rZG9lcyBub3QgZ2V0IGxvc3QsIGV2ZW4g aWYgdGhlIGhvc3QgaW4gcXVlc3Rpb24gaXMgdW5yZWFjaGFibGUgcmlnaHQgbm93LiBUaGUNCi0r e1x0dCBmb3JjZX0gYXR0cmlidXRlIGlzIHNldCB0byB7XHR0IDB9IGJ5IGRlZmF1bHQgYW5kIHRv IHtcdHQgMX0gd2hlbiB0aGUNCi0rY2x1c3RlciBhZG1pbmlzdHJhdG9yIG1hcmtzIG9uZSBzaWRl IGFzIHRoZSByaWdodCBvbmUgaW4gYSBzeW5jaHJvbml6YXRpb24NCi0rY29uZmxpY3QuDQotKw0K LStUaGUge1x0dCBoaW50fSB0YWJsZSBpcyB1c3VhbGx5IG5vdCB1c2VkLiBJbiBsYXJnZSBzZXR1 cHMgdGhpcyB0YWJsZSBjYW4gYmUNCi0rZmlsbGVkIGJ5IGEgZGFlbW9uIGxpc3RlbmluZyBvbiB0 aGUgaW5vdGlmeSBBUEkuIEl0IGlzIHBvc3NpYmxlIHRvIHRlbGwgXGNzeW5jMg0KLSt0byBub3Qg Y2hlY2sgYWxsIGZpbGVzIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBidXQgb25seSB0aG9zZSB3aGlj aCBoYXZlIGVudHJpZXMNCi0raW4gdGhlIHtcdHQgaGludH0gdGFibGUuIEhvd2V2ZXIsIHRoZSBM aW51eCBzeXNjYWxsIEFQSSBpcyBzbyBmYXN0IHRoYXQgdGhpcw0KLStvbmx5IG1ha2VzIHNlbnNl IGZvciByZWFsbHkgaHVnZSBzZXR1cHMuDQotKw0KLStUaGUge1x0dCBhY3Rpb259IHRhYmxlIGlz IHVzZWQgZm9yIHNjaGVkdWxpbmcgYWN0aW9ucy4gVXN1YWxseSB0aGlzIHRhYmxlIGlzDQotK2Vt cHR5IGFmdGVyIFxjc3luYzIgaGFzIGJlZW4gdGVybWluYXRlZC4gSG93ZXZlciwgaXQgaXMgcG9z c2libGUgdGhhdCBcY3N5bmMyDQotK2dldHMgaW50ZXJydXB0ZWQgaW4gdGhlIG1pZGRsZSBvZiB0 aGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3MuIEluIHRoaXMgY2FzZQ0KLSt0aGUgcmVjb3JkcyBp biB0aGUge1x0dCBhY3Rpb259IHRhYmxlIGFyZSBwcm9jZXNzZWQgd2hlbiBcY3N5bmMyIGlzIGV4 ZWN1dGVkDQotK3RoZSBuZXh0IHRpbWUuDQotKw0KLStUaGUge1x0dCB4NTA5XF9jZXJ0fSB0YWJs ZSBpcyB1c2VkIHRvIGNhY2hlIHRoZSBTU0wgY2V0cmlmaWNhdGVzIHVzZWQgYnkgdGhlDQotK290 aGVyIGhvc3RzIGluIHRoZSBjc3luYzIgY2x1c3RlciAobGlrZSB0aGUgU1NIIHtcdHQga25vd25c X2hvc3RzfSBmaWxlKS4NCi0rDQotK1xzZWN0aW9ue1J1bm5pbmcgXGNzeW5jMn0NCi0rDQotKyUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUNCi0rDQotK1xiZWdpbntmaWd1cmUqfVt0XQ0KLSsgIFxiZWdp bntjZW50ZXJ9DQotKyAgICBcYmVnaW57dGFidWxhcn17fHB7MC41XGxpbmV3aWR0aH18cHswLjVc bGluZXdpZHRofXx9DQotKyAgICAgIFxobGluZQ0KLStcYmVnaW57dGlueX0NCi0rXGJlZ2lue3Zl cmJhdGltfQ0KLSsNCi0rDQotK2NzeW5jMiAxLjI2IC0gY2x1c3RlciBzeW5jaHJvbml6YXRpb24g dG9vbCwgMm5kIGdlbmVyYXRpb24NCi0rTElOQklUIEluZm9ybWF0aW9uIFRlY2hub2xvZ2llcyBH bWJIIDxodHRwOi8vd3d3LmxpbmJpdC5jb20+DQotK0NvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAg Q2xpZmZvcmQgV29sZiA8Y2xpZmZvcmRAY2xpZmZvcmQuYXQ+DQotK1RoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4NCi0rDQotK1VzYWdl OiBjc3luYzIgWy12Li5dIFstQyBjb25maWctbmFtZV0gXA0KLSsgICAgICAgICAgICAgICAgWy1E IGRhdGFiYXNlLWRpcl0gWy1OIGhvc3RuYW1lXSBbLXAgcG9ydF0gLi4NCi0rDQotK1dpdGggZmls ZSBwYXJhbWV0ZXJzOg0KLSsgICAgICAgIC1oIFstcl0gZmlsZS4uICAgICAgICAgIEFkZCAocmVj dXJzaXZlKSBoaW50cyBmb3IgY2hlY2sgdG8gZGINCi0rICAgICAgICAtYyBbLXJdIGZpbGUuLiAg ICAgICAgICBDaGVjayBmaWxlcyBhbmQgbWF5YmUgYWRkIHRvIGRpcnR5IGRiDQotKyAgICAgICAg LXUgWy1kXSBbLXJdIGZpbGUuLiAgICAgVXBkYXRlcyBmaWxlcyBpZiBsaXN0ZWQgaW4gZGlydHkg ZGINCi0rICAgICAgICAtZiBmaWxlLi4gICAgICAgICAgICAgICBGb3JjZSB0aGlzIGZpbGUgaW4g c3luYyAocmVzb2x2ZSBjb25mbGljdCkNCi0rICAgICAgICAtbSBmaWxlLi4gICAgICAgICAgICAg ICBNYXJrIGZpbGVzIGluIGRhdGFiYXNlIGFzIGRpcnR5DQotKw0KLStTaW1wbGUgbW9kZToNCi0r ICAgICAgICAteCBbLWRdIFtbLXJdIGZpbGUuLl0gICBSdW4gY2hlY2tzIGZvciBhbGwgZ2l2ZW4g ZmlsZXMgYW5kIHVwZGF0ZQ0KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90 ZSBob3N0cy4NCi0rDQotK1dpdGhvdXQgZmlsZSBwYXJhbWV0ZXJzOg0KLSsgICAgICAgIC1jICAg ICAgQ2hlY2sgYWxsIGhpbnRzIGluIGRiIGFuZCBldmVudHVhbGx5IG1hcmsgZmlsZXMgYXMgZGly dHkNCi0rICAgICAgICAtdSBbLWRdIFVwZGF0ZSAodHJhbnNmZXIgZGlydHkgZmlsZXMgdG8gcGVl cnMgYW5kIG1hcmsgYXMgY2xlYXIpDQotKw0KLSsgICAgICAgIC1IICAgICAgTGlzdCBhbGwgcGVu ZGluZyBoaW50cyBmcm9tIHN0YXR1cyBkYg0KLSsgICAgICAgIC1MICAgICAgTGlzdCBhbGwgZmls ZS1lbnRyaWVzIGZyb20gc3RhdHVzIGRiDQotKyAgICAgICAgLU0gICAgICBMaXN0IGFsbCBkaXJ0 eSBmaWxlcyBmcm9tIHN0YXR1cyBkYg0KLSsNCi0rICAgICAgICAtUyBteW5hbWUgcGVlcm5hbWUg ICAgICBMaXN0IGZpbGUtZW50cmllcyBmcm9tIHN0YXR1cyBkYiBmb3IgdGhpcw0KLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiBwYWlyLg0KLSsNCi0rICAg ICAgICAtVCAgICAgICAgICAgICAgICAgICAgICBUZXN0IGlmIGV2ZXJ5dGhpbmcgaXMgaW4gc3lu YyB3aXRoIGFsbCBwZWVycy4NCi0rDQotKyAgICAgICAgLVQgZmlsZW5hbWUgICAgICAgICAgICAg VGVzdCBpZiB0aGlzIGZpbGUgaXMgaW4gc3luYyB3aXRoIGFsbCBwZWVycy4NCi0rDQotKyAgICAg ICAgLVQgbXluYW1lIHBlZXJuYW1lICAgICAgVGVzdCBpZiB0aGlzIHN5bmNocm9uaXphdGlvbiBw YWlyIGlzIGluIHN5bmMuDQotKw0KLSsgICAgICAgIC1UIG15bmFtZSBwZWVyIGZpbGUgICAgIFRl c3Qgb25seSB0aGlzIGZpbGUgaW4gdGhpcyBzeW5jIHBhaXIuDQotKw0KLSsgICAgICAgIC1UVCAg ICAgQXMgLVQsIGJ1dCBwcmludCB0aGUgdW5pZmllZCBkaWZmcy4NCi0rDQotKyAgICAgICAgVGhl IG1vZGVzIC1ILCAtTCwgLU0gYW5kIC1TIHJldHVybiAyIGlmIHRoZSByZXF1ZXN0ZWQgZGIgaXMg ZW1wdHkuDQotKyAgICAgICAgVGhlIG1vZGUgLVQgcmV0dXJucyAyIGlmIGJvdGggaG9zdHMgYXJl IGluIHN5bmMuDQotKw0KLSsgICAgICAgIC1pICAgICAgUnVuIGluIGluZXRkIHNlcnZlciBtb2Rl Lg0KLSsgICAgICAgIC1paSAgICAgUnVuIGluIHN0YW5kLWFsb25lIHNlcnZlciBtb2RlLg0KLSsg ICAgICAgIC1paWkgICAgUnVuIGluIHN0YW5kLWFsb25lIHNlcnZlciBtb2RlIChvbmUgY29ubmVj dCBvbmx5KS4NCi0rDQotKyAgICAgICAgLVIgICAgICBSZW1vdmUgZmlsZXMgZnJvbSBkYXRhYmFz ZSB3aGljaCBkbyBub3QgbWF0Y2ggY29uZmlnIGVudHJpZXMuDQotK1xlbmR7dmVyYmF0aW19DQot K1xlbmR7dGlueX0NCi0rDQotKyYNCi0rDQotK1xiZWdpbnt0aW55fQ0KLStcYmVnaW57dmVyYmF0 aW19DQotK01vZGlmaWVyczoNCi0rICAgICAgICAtciAgICAgIFJlY3Vyc2l2ZSBvcGVyYXRpb24g b3ZlciBzdWJkaXJlY3Rvcmllcw0KLSsgICAgICAgIC1kICAgICAgRHJ5LXJ1biBvbiBhbGwgcmVt b3RlIHVwZGF0ZSBvcGVyYXRpb25zDQotKw0KLSsgICAgICAgIC1CICAgICAgRG8gbm90IGJsb2Nr IGV2ZXJ5dGhpbmcgaW50byBiaWcgU1FMIHRyYW5zYWN0aW9ucy4gVGhpcw0KLSsgICAgICAgICAg ICAgICAgc2xvd3MgZG93biBjc3luYzIgYnV0IGFsbG93cyBtdWx0aXBsZSBjc3luYzIgcHJvY2Vz c2VzIHRvDQotKyAgICAgICAgICAgICAgICBhY2Nlc3MgdGhlIGRhdGFiYXNlIGF0IHRoZSBzYW1l IHRpbWUuIFVzZSBlLmcuIHdoZW4gc2xvdw0KLSsgICAgICAgICAgICAgICAgbGluZXMgYXJlIHVz ZWQgb3IgaHVnZSBmaWxlcyBhcmUgdHJhbnNmZXJyZWQuDQotKw0KLSsgICAgICAgIC1BICAgICAg T3BlbiBkYXRhYmFzZSBpbiBhc3luY2hyb25vdXMgbW9kZS4gVGhpcyB3aWxsIGNhdXNlIGRhdGEN Ci0rICAgICAgICAgICAgICAgIGNvcnJ1cHRpb24gaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY3Jh c2hlcyBvciB0aGUgY29tcHV0ZXINCi0rICAgICAgICAgICAgICAgIGxvc2VzIHBvd2VyLg0KLSsN Ci0rICAgICAgICAtSSAgICAgIEluaXQtcnVuLiBVc2Ugd2l0aCBjYXJlIGFuZCByZWFkIHRoZSBk b2N1bWVudGF0aW9uIGZpcnN0IQ0KLSsgICAgICAgICAgICAgICAgWW91IHVzdWFsbHkgZG8gbm90 IG5lZWQgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBhcmUNCi0rICAgICAgICAgICAgICAgIGluaXRp YWxpemluZyBncm91cHMgd2l0aCByZWFsbHkgbGFyZ2UgZmlsZSBsaXN0cy4NCi0rDQotKyAgICAg ICAgLVggICAgICBBbHNvIGFkZCByZW1vdmFscyB0byBkaXJ0eSBkYiB3aGVuIGRvaW5nIGEgLVRJ IHJ1bi4NCi0rICAgICAgICAtVSAgICAgIERvbid0IG1hcmsgYWxsIG90aGVyIHBlZXJzIGFzIGRp cnR5IHdoZW4gZG9pbmcgYSAtVEkgcnVuLg0KLSsNCi0rICAgICAgICAtRyBHcm91cDEsR3JvdXAy LEdyb3VwMywuLi4NCi0rICAgICAgICAgICAgICAgIE9ubHkgdXNlIHRoaXMgZ3JvdXBzIGZyb20g Y29uZmlnLWZpbGUuDQotKw0KLSsgICAgICAgIC1QIHBlZXIxLHBlZXIxLC4uLg0KLSsgICAgICAg ICAgICAgICAgT25seSB1cGRhdGUgdGhpcyBwZWVycyAoc3RpbGwgbWFyayBhbGwgYXMgZGlydHkp Lg0KLSsNCi0rICAgICAgICAtRiAgICAgIEFkZCBuZXcgZW50cmllcyB0byBkaXJ0eSBkYXRhYmFz ZSB3aXRoIGZvcmNlIGZsYWcgc2V0Lg0KLSsNCi0rICAgICAgICAtdCAgICAgIFByaW50IHRpbWVz dGFtcHMgdG8gZGVidWcgb3V0cHV0IChlLmcuIGZvciBwcm9maWxpbmcpLg0KLSsNCi0rQ3JlYXRp bmcga2V5IGZpbGU6DQotKyAgICAgICAgY3N5bmMyIC1rIGZpbGVuYW1lDQotKw0KLStDc3luYzIg d2lsbCByZWZ1c2UgdG8gZG8gYW55dGhpbmcgd2hlbiBhIC9ldGMvY3N5bmMyLmxvY2sgZmlsZSBp cyBmb3VuZC4NCi0rXGVuZHt2ZXJiYXRpbX0NCi0rXGVuZHt0aW55fQ0KLSsgICAgICBcdGFidWxh cm5ld2xpbmUNCi0rICAgICAgXGhsaW5lDQotKyAgICBcZW5ke3RhYnVsYXJ9DQotKyAgXGVuZHtj ZW50ZXJ9DQotKyAgXGNhcHRpb257VGhlIFxjc3luYzIgaGVscCBtZXNzYWdlfQ0KLStcZW5ke2Zp Z3VyZSp9DQotKw0KLSslJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlDQotKw0KLStTaW1wbHkgY2FsbGlu ZyB7XHR0IGNzeW5jMn0gd2l0aG91dCBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJpbnRzIG91 dCBhDQotK2hlbHAgbWVzc2FnZSAoRmlndXJlIDQpLiBBIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRp b24gb2YgdGhlIG1vc3QNCi0raW1wb3J0YW50IHVzYWdlIHNjZW5hcmlvcyBpcyBnaXZlbiBpbiB0 aGUgbmV4dCBzZWN0aW9ucy4NCi0rDQotK1xzdWJzZWN0aW9ue0p1c3Qgc3luY2hyb25pemluZyB0 aGUgZmlsZXN9DQotKw0KLStUaGUgY29tbWFuZCB7XHR0IGNzeW5jMiAteH0gKG9yIHtcdHQgY3N5 bmMyIC14dn0pIGNoZWNrcyBmb3IgbG9jYWwgY2hhbmdlcyBhbmQNCi0rdHJpZXMgdG8gc3luY2hy b25pemUgdGhlbSB0byB0aGUgb3RoZXIgaG9zdHMuIFRoZSBvcHRpb24ge1x0dCAtZH0gKGRyeS1y dW4pIGNhbg0KLStiZSB1c2VkIHRvIGRvIGV2ZXJ5dGhpbmcgYnV0IHRoZSBhY3R1YWwgc3luY2hy b25pemF0aW9uLg0KLSsNCi0rV2hlbiB5b3Ugc3RhcnQgXGNzeW5jMiB0aGUgZmlyc3QgdGltZSBp dCBjb21wYXJlcyBpdHMgZW1wdHkgZGF0YWJhc2Ugd2l0aCB0aGUNCi0rZmlsZXN5c3RlbSBhbmQg c2VlcyB0aGF0IGFsbCBmaWxlcyBqdXN0IGhhdmUgYmVlbiBjcmVhdGVkLiBJdCB0aGVuIHdpbGwg dHJ5DQotK3RvIHN5bmNocm9uaXplIHRoZSBmaWxlcy4gSWYgdGhlIGZpbGUgaXMgbm90IHByZXNl bnQgb24gdGhlIHJlbW90ZSBob3N0cyBpdA0KLSt3aWxsIHNpbXBseSBiZSBjb3BpZWQgdG8gdGhl IG90aGVyIGhvc3QuIFRoZXJlIGFsc28gaXMgbm8gcHJvYmxlbSBpZiB0aGUgZmlsZQ0KLStpcyBh bHJlYWR5IHByZXNlbnQgb24gdGhlIHJlbW90ZSBob3N0IGFuZCBoYXMgdGhlIHNhbWUgY29udGVu dC4gQnV0IGlmIHRoZQ0KLStmaWxlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSByZW1vdGUgaG9zdCBh bmQgaGFzIGEgZGlmZmVyZW50IGNvbnRlbnQsIHlvdQ0KLStoYXZlIHlvdXIgZmlyc3QgY29uZmxp Y3QuDQotKw0KLStcc3Vic2VjdGlvbntSZXNvbHZpbmcgYSBjb25mbGljdH0NCi0rDQotK1doZW4g dHdvIG9yIG1vcmUgaG9zdHMgaW4gYSBcY3N5bmMyIHN5bmNocm9uaXphdGlvbiBncm91cCBoYXZl IGRldGVjdGVkIGNoYW5nZXMNCi0rZm9yIHRoZSBzYW1lIGZpbGUgd2UgcnVuIGludG8gYSBjb25m bGljdDogXGNzeW5jMiBjYW4gbm90IGtub3cgd2hpY2ggdmVyc2lvbiBpcw0KLSt0aGUgcmlnaHQg b25lICh1bmxlc3MgYW4gYXV0by1yZXNvbHZpbmcgbWV0aG9kIGhhcyBiZWVuIHNwZWNpZmllZCBp biB0aGUNCi0rY29uZmlndXJhdGlvbiBmaWxlKS4gVGhlIGNsdXN0ZXIgYWRtaW5pc3RyYXRvciBu ZWVkcyB0byB0ZWxsIFxjc3luYzIgd2hpY2gNCi0rdmVyc2lvbiBpcyB0aGUgY29ycmVjdCBvbmUu IFRoaXMgY2FuIGJlIGRvbmUgdXNpbmcge1x0dCBcY3N5bmMyIC1mfSwgZS5nLjoNCi0rDQotK1xi ZWdpbnt2ZXJiYXRpbX0NCi0rIyBjc3luYzIgLXgNCi0rV2hpbGUgc3luY2luZyBmaWxlIC9ldGMv aG9zdHM6DQotK0VSUk9SIGZyb20gcGVlciBhcG9sbG86DQotKyAgICBGaWxlIGlzIGFsc28gbWFy a2VkIGRpcnR5IGhlcmUhDQotK0ZpbmlzaGVkIHdpdGggMSBlcnJvcnMuDQotKw0KLSsjIGNzeW5j MiAtZiAvZXRjL2hvc3RzDQotKyMgY3N5bmMyIC14dg0KLStDb25uZWN0aW5nIHRvIGhvc3QgYXBv bGxvIChQTEFJTikgLi4uDQotK1VwZGF0aW5nIC9ldGMvaG9zdHMgb24gYXBvbGxvIC4uLg0KLStG aW5pc2hlZCB3aXRoIDAgZXJyb3JzLg0KLStcZW5ke3ZlcmJhdGltfQ0KLSsNCi0rXHN1YnNlY3Rp b257Q2hlY2tpbmcgd2l0aG91dCBzeW5jaW5nfQ0KLSsNCi0rSXQgaXMgYWxzbyBwb3NzaWJsZSB0 byBqdXN0IGNoZWNrIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHdpdGhvdXQgZG9pbmcgYW55DQotK2Nv bm5lY3Rpb25zIHRvIHJlbW90ZSBob3N0czoge1x0dCBjc3luYzIgLWNyIC99ICh0aGUge1x0dCAt cn0gbW9kaWZpZXINCi0rdGVsbHMgXGNzeW5jMiB0byBkbyBhIHJlY3Vyc2l2ZSBjaGVjaykuDQot Kw0KLSt7XHR0IGNzeW5jMiAtY30gd2l0aG91dCBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGNo ZWNrcyBhbGwgZmlsZXMgbGlzdGVkDQotK2luIHRoZSB7XHR0IGhpbnRzfSB0YWJsZS4NCi0rDQot K1RoZSBjb21tYW5kIHtcdHQgY3N5bmMyIC1NfSBjYW4gYmUgdXNlZCB0byBwcmludCB0aGUgbGlz dCBvZiBmaWxlcyBtYXJrZWQgZGlydHkNCi0rYW5kIHRoZXJmb3JlIHNjaGVkdWxlZCBmb3Igc3lu Y2hyb25pemF0aW9uLg0KLSsNCi0rXHN1YnNlY3Rpb257Q29tcGFyaW5nIHRoZSBob3N0c30NCi0r DQotK1RoZSB7XHR0IGNzeW5jMiAtVH0gY29tbWFuZCBjYW4gYmUgdXNlZCB0byBjb21wYXJlIHRo ZSBsb2NhbCBkYXRhYmFzZSB3aXRoIHRoZQ0KLStkYXRhYmFzZSBvZiB0aGUgcmVtb3RlIGhvc3Rz LiBOb3RlIHRoYXQgdGhpcyBjb21tYW5kIGNvbXBhcmVzIHRoZSBkYXRhYmFzZXMgYW5kDQotK25v dCB0aGUgZmlsZXN5c3RlbXMgLSBzbyBtYWtlIHN1cmUgdGhhdCB0aGUgZGF0YWJhc2VzIGFyZSB1 cC10by1kYXRlIG9uIGFsbA0KLStob3N0cyBiZWZvcmUgcnVubmluZyB7XHR0IGNzeW5jMiAtVH0g YW5kIHJ1biB7XHR0IGNzeW5jMiAtY3IgL30gaWYgeW91IGFyZQ0KLSt1bnN1cmUuDQotKw0KLStU aGUgb3V0cHV0IG9mIHtcdHQgY3N5bmMyIC1UfSBpcyBhIHRhYmxlIHdpdGggNCBjb2x1bW5zOg0K LSsNCi0re1xiZiAxLn0gVGhlIHR5cGUgb2YgdGhlIGZvdW5kIGRpZmZlcmVuY2U6IHtcdHQgWH0g bWVhbnMgdGhhdCB0aGUgZmlsZSBleGlzdHMNCi0rb24gYm90aCBob3N0cyBidXQgaXMgZGlmZmVy ZW50LCB7XHR0IEx9IHRoYXQgdGhlIGZpbGUgaXMgb25seSBwcmVzZW50IG9uIHRoZQ0KLStsb2Nh bCBob3N0IGFuZCB7XHR0IFJ9IHRoYXQgdGhlIGZpbGUgaXMgb25seSBwcmVzZW50IG9uIHRoZSBy ZW1vdGUgaG9zdC4NCi0rDQotK3tcYmYgMi59IFRoZSBsb2NhbCBpbnRlcmZhY2UgRE5TIG5hbWUg KHVzdWFsbHkganVzdCB0aGUgbG9jYWwgaG9zdG5hbWUpLg0KLSsNCi0re1xiZiAzLn0gVGhlIHJl bW90ZSBpbnRlcmZhY2UgRE5TIG5hbWUgKHVzdWFsbHkganVzdCB0aGUgcmVtb3RlIGhvc3RuYW1l KS4NCi0rDQotK3tcYmYgNC59IFRoZSBmaWxlbmFtZS4NCi0rDQotK1RoZSB7XHR0IGNzeW5jMiAt VFQge1xpdCBmaWxlbmFtZX19IGNvbW1hbmQgY2FuIGJlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdW5p ZmllZA0KLStkaWZmcyBiZXR3ZWVuIGEgbG9jYWwgZmlsZSBhbmQgdGhlIHJlbW90ZSBob3N0cy4N Ci0rDQotK1xzdWJzZWN0aW9ue0Jvb3RzdHJhcHBpbmcgbGFyZ2Ugc2V0dXBzfQ0KLSsNCi0rVGhl IHtcdHQgLUl9IG9wdGlvbiBpcyBhIG5pY2UgdG9vbCBmb3IgYm9vdHN0cmFwcGluZyBsYXJnZXIg XGNzeW5jMg0KLStpbnN0YWxsYXRpb25zIG9uIHNsb3dlciBuZXR3b3Jrcy4gSW4gc3VjaCBzY2Vu YXJpb3Mgb25lIHVzdWFsbHkgd2FudHMgdG8NCi0raW5pdGlhbGx5IHJlcGxpY2F0ZSB0aGUgZGF0 YSB1c2luZyBhIG1vcmUgZWZmaWNpZW50IHdheSBhbmQgdGhlbiB1c2UgXGNzeW5jMiB0bw0KLStz eW5jaHJvbml6ZSB0aGUgY2hhbmdlcyBvbiBhIHJlZ3VsYXIgYmFzaXMuDQotKw0KLStUaGUgcHJv YmxlbSBoZXJlIGlzIHRoYXQgd2hlbiB5b3Ugc3RhcnQgXGNzeW5jMiB0aGUgZmlyc3QgdGltZSBp dCBkZXRlY3RzIGEgbG90DQotK29mIG5ld2x5IGNyZWF0ZWQgZmlsZXMgYW5kIHdhbnRzIHRvIHN5 bmNocm9uaXplIHRoZW0sIGp1c3QgdG8gZmluZCBvdXQgdGhhdA0KLSt0aGV5IGFyZSBhbHJlYWR5 IGluIHN5bmMgd2l0aCB0aGUgcGVlcnMuDQotKw0KLStUaGUge1x0dCAtSX0gb3B0aW9uIG1vZGlm aWVzIHRoZSBiZWhhdmlvciBvZiB7XHR0IC1jfSBzbyBpdCBvbmx5IHVwZGF0ZXMgdGhlDQotK3tc dHQgZmlsZX0gdGFibGUgYnV0IGRvZXMgbm90IGNyZWF0ZSBlbnRyaWVzIGluIHRoZSB7XHR0IGRp cnR5fSB0YWJsZS4gU28geW91DQotK2NhbiBzaW1wbHkgdXNlIHtcdHQgY3N5bmMyIC1jSXIgL30g dG8gaW5pdGlhbGx5IGNyZWF0ZSB0aGUgXGNzeW5jMiBkYXRhYmFzZSBvbg0KLSt0aGUgY2x1c3Rl ciBub2RlcyB3aGVuIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGhvc3RzIGFyZSBhbHJlYWR5 IGluIHN5bmMuDQotKw0KLStUaGUge1x0dCAtSX0gb3B0aW9uIG1heSBhbHNvIGJlIHVzZWQgd2l0 aCB7XHR0IC1UfSB0byBhZGQgdGhlIGRldGVjdGVkDQotK2RpZmZlcmVuY2VzIHRvIHRoZSBkaXJ0 eSB0YWJsZSBhbmQgc28gaW5kdWNlIFxjc3luYzIgdG8gc3luY2hyb25pemUgdGhlIGxvY2FsDQot K3N0YXR1cyBvZiB0aGUgZmlsZXMgaW4gcXVlc3Rpb24gdG8gdGhlIHJlbW90ZSBob3N0Lg0KLSsN Ci0rVXN1YWxseSB7XHR0IC1USX0gZG9lcyBvbmx5IHNjaGVkdWxlIGxvY2FsIGZpbGVzIHdoaWNo IGRvIGV4aXN0IHRvIHRoZSBkaXJ0eQ0KLStkYXRhYmFzZS4gVGhhdCBtZWFucyB0aGF0IGl0IGRv ZXMgbm90IGluZHVjZSBcY3N5bmMyIHRvIHJlbW92ZSBhIGZpbGUgb24gYQ0KLStyZW1vdGUgaG9z dCBpZiBpdCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgaG9zdC4gVGhhdCBiZWhhdmlvciBj YW4gYmUNCi0rY2hhbmdlZCB1c2luZyB0aGUge1x0dCAtWH0gb3B0aW9uLg0KLSsNCi0rVGhlIGZp bGVzIHNjaGVkdWxlZCB0byBiZSBzeW5jZWQgYnkge1x0dCAtVEl9IGFyZSB1c3VhbGx5IHNjaGVk dWxlZCB0byBiZQ0KLStzeW5jZWQgdG8gYWxsIHBlZXJzLCBub3QganVzdCB0aGUgb25lIHBlZXIg d2hpY2ggaGFzIGJlZW4gdXNlZCBpbiB0aGUge1x0dCAtVEl9DQotK3J1bi4gVGhpcyBiZWhhdmlv ciBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUge1x0dCAtVX0gb3B0aW9uLg0KLSsNCi0rXHN1YnNl Y3Rpb257Q2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlfQ0KLSsNCi0rSXQgY2FuIGhhcHBlbiB0aGF0 IG9sZCBkYXRhIGlzIGxlZnQgb3ZlciBpbiB0aGUgXGNzeW5jMiBkYXRhYmFzZSBhZnRlciBhDQot K2NvbmZpZ3VyYXRpb24gY2hhbmdlIChlLmcuIGZpbGVzIGFuZCBob3N0cyB3aGljaCBhcmUgbm90 IHJlZmVycmVkIGFueW1vcmUNCi0rYnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSkuIFJ1bm5pbmcg e1x0dCBjc3luYzIgLVJ9IGNsZWFucyB1cCBzdWNoIG9sZA0KLStlbnRyaWVzIGluIHRoZSBcY3N5 bmMyIGRhdGFiYXNlLg0KLSsNCi0rXHN1YnNlY3Rpb257TXVsdGlwbGUgQ29uZmlndXJhdGlvbnN9 DQotKw0KLStTb21ldGltZXMgYSBoaWdoZXIgYWJzdHJhY2lvbiBsZXZlbCB0aGFuIHNpbXBseSBo YXZpbmcgZGlmZmVyZW50DQotK3N5bmNocm9uaXphdGlvbiBncm91cHMgaXMgbmVlZGVkLiBGb3Ig c3VjaCBjYXNlcyBpdCBpcyBwb3NzaWJsZSB0byB1c2UgbXVsdGlwbGUNCi0rY29uZmlndXJhdGlv biBmaWxlcyAoYW5kIGRhdGFiYXNlcykgc2lkZSBieSBzaWRlLg0KLSsNCi0rVGhlIGFkZGl0aW9u YWwgY29uZmlndXJhdGlvbnMgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuIFRoZSBjb25maWd1cmF0 aW9uIGZpbGUNCi0raXMgdGhlbiBuYW1lZCB7XHR0IC9ldGMvY3N5bmMyXF97XGl0IG15bmFtZX0u Y2ZnfSBhbmQgdGhlIGRhdGFiYXNlIGlzIG5hbWVkDQotK3tcdHQgL3Zhci9saWIvY3N5bmMyL3tc aXQgaG9zdG5hbWV9XF97XGl0IG15bmFtZX0uZGJ9LiBBY2NvcmRpbmdseSBcY3N5bmMyIG11c3QN Ci0rYmUgY2FsbGVkIHdpdGggdGhlIHtcdHQgLUMge1xpdCBteW5hbWV9fSBvcHRpb24uDQotKw0K LStCdXQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgbXVsdGlwbGUgXGNzeW5jMiBkYWVtb25zLiBUaGUg XGNzeW5jMiBwcm90b2NvbCBhbGxvd3MNCi0rdGhlIGNsaWVudCB0byB0ZWxsIHRoZSBzZXJ2ZXIg d2hpY2ggY29uZmlndXJhdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgdGhlDQotK2N1cnJlbnQgVENQ IGNvbm5lY3Rpb24uDQotKw0KLStcc2VjdGlvbntQZXJmb3JtYW5jZX0NCi0rDQotK0luIG1vc3Qg Y2FzZXMgXGNzeW5jMiBpcyB1c2VkIGZvciBzeW5jaW5nIGp1c3Qgc29tZSAodXAgdG8gYSBmZXcg aHVuZHJlZCkgc3lzdGVtDQotK2NvbmZpZ3VyYXRpb24gZmlsZXMuIEluIHRoZXNlIGNhc2VzIGFs bCBcY3N5bmMyIGNhbGxzIGFyZSBwcm9jZXNzZWQgaW4gbGVzcyB0aGFuDQotK29uZSBzZWNvbmQs IGV2ZW4gb24gc2xvdyBoYXJkd2FyZS4gU28gYSBwZXJmb3JtYW5jZSBhbmFseXNpcyBpcyBub3Qg aW50ZXJlc3RpbmcNCi0rZm9yIHRoZXNlIGNhc2VzIGJ1dCBvbmx5IGZvciBzZXR1cHMgd2hlcmUg YSBodWdlIGFtb3VudCBvZiBmaWxlcyBpcyBzeW5jZWQsDQotK2UuZy4gd2hlbiBzeW5jaW5nIGVu dGlyZSBhcHBsaWNhdGlvbiBpbWFnZXMgd2l0aCBcY3N5bmMyLg0KLSsNCi0rQSB3ZWxsLWZvdW5k ZWQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgd2hpY2ggd291bGQgYWxsb3cgbWVhbmluZ2Z1bCBjb21w YXJpc29ucw0KLSt3aXRoIG90aGVyIHN5bmNocm9uaXphdGlvbiB0b29scyB3b3VsZCBiZSBiZXlv bmQgdGhlIHNjb3BlIG9mIHRoaXMgcGFwZXIuDQotK1NvIGhlcmUgYXJlIGp1c3Qgc29tZSBxdWlj ayBhbmQgZGlydHkgbnVtYmVycyBmcm9tIGEgcHJvZHVjdGlvbg0KLSsyLW5vZGUgY2x1c3RlciAo Mi40MEdIeiBkdWFsLVhlb24sIDcyMDAgUlBNIEFUQSBIRCwgMSBHQiBSYW0pLiBUaGUgbWFjaGlu ZXMNCi0raGFkIGFuIGF2ZXJhZ2UgbG9hZCBvZiAwLjMgKHdlYiBhbmQgbWFpbCkgZHVyaW5nIG15 IHRlc3RzLi4NCi0rDQotK0kgaGF2ZSBhYm91dCAxMjguMDAwIGZpbGVzICgxLjcgR0IpIG9mIExp bnV4IGtlcm5lbCBzb3VyY2VzIGFuZCBvYmplY3QNCi0rZmlsZXMgb24gYW4gZXh0MyBmaWxlc3lz dGVtIHVuZGVyIFxjc3luYzIgY29udHJvbCBvbiB0aGUgbWFjaGluZXMuDQotKw0KLStDaGVja2lu ZyBmb3IgY2hhbmdlcyAoe1x0dCBjc3luYzIgLWNyIC99KSB0b29rIDEzLjcgc2Vjb25kcyB3YWxs IGNsb2NrIHRpbWUsDQotKzkuMSBzZWNvbmRzIGluIHVzZXIgbW9kZSBhbmQgNC4xIHNlY29uZHMg aW4ga2VybmVsIG1vZGUuIFRoZSByZW1haW5pbmcgMC41DQotK3NlY29uZHMgd2VyZSBzcGVudCBp biBvdGhlciBwcm9jZXNzZXMuDQotKw0KLStSZWNyZWF0aW5nIHRoZSBsb2NhbCBkYXRhYmFzZSB3 aXRob3V0IGFkZGluZyB0aGUgZmlsZXMgdG8gZGlydHkgdGFibGUgKHtcdHQNCi0rY3N5bmMyIC1j SXJ9IGFmdGVyIHJlbW92aW5nIHRoZSBkYXRhYmFzZSBmaWxlKSB0b29rIDI4LjUgc2Vjb25kcyAo MTguNiBzZWMNCi0rdXNlciBtb2RlIGFuZCAyLjYgc2VjIGtlcm5lbCBtb2RlKS4gDQotKw0KLStD b21wYXJpbmcgdGhlIFxjc3luYzIgZGF0YWJhc2VzIG9mIGJvdGggaG9zdHMgKHtcdHQgY3N5bmMy IC1UfSkgdG9vayAzIHNlY29uZHMNCi0rd2FsbCBjbG9jayB0aW1lLg0KLSsNCi0rUnVubmluZyB7 XHR0IGNzeW5jMiAtdX0gYWZ0ZXIgYWRkaW5nIGFsbCAxMjguMDAwIGZpbGVzIHRvb2sgMTAgbWlu dXRlcyB3YWxsDQotK2Nsb2NrIHRpbWUuIFRoYXQgbWVhbnMgdGhhdCBcY3N5bmMyIHRyaWVkIHRv IHN5bmMgYWxsIDEyOC4wMDAgZmlsZXMgYW5kIHRoZW4NCi0rcmVjb2duaXplZCB0aGF0IHRoZSBy ZW1vdGUgc2lkZSBoYWQgYWxyZWFkeSB0aGUgbW9zdCB1cC10by1kYXRlIHZlcnNpb24gb2YNCi0r dGhlIGZpbGUgYWZ0ZXIgY29tcGFyaW5nIHRoZSBjaGVja3N1bXMuDQotKw0KLStBbGwgbnVtYmVy cyBhcmUgdGhlIGF2ZXJhZ2UgdmFsdWVzIG9mIDEwIGl0ZXJhdGlvbnMuDQotKw0KLStcc2VjdGlv bntTZWN1cml0eSBOb3Rlc30NCi0rDQotK0FzIHN0YXRldCBlYXJsaWVyLCBhdXRoZW50aWNhdGlv biBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHBlZXIgSVAgYWRkcmVzcyBhbmQgYQ0KLStwcmUtc2hh cmVkLWtleS4gVGhlIHRyYWZmaWMgaXMgU1NMIGVuY3J5cHRlZCBhbmQgdGhlIFNTTCBjZXJ0aWZp Y2F0ZSBvZiB0aGUNCi0rcGVlciBpcyBjaGVja2VkIHdoZW4gdGhlcmUgaGFzIGJlZW4gYWxyZWFk eSBhbiBTU0wgY29ubmVjdGlvbiB0byB0aGF0IHBlZXIgaW4NCi0rdGhlIHBhc3QgKGkuZS5+dGhl IHBlZXIgY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBjYWNoZWQgaW4gdGhlIGRhdGFiYXNlKS4NCi0r DQotK0FsbCBETlMgbmFtZXMgdXNlZCBpbiB0aGUgXGNzeW5jMiBjb25maWd1cmF0aW9uIGZpbGUg KHRoZSB7XHR0IGhvc3R9IHJlY29yZHMpDQotK3Nob3VsZCBiZSByZXNvbHZhYmxlIHZpYSB0aGUg e1x0dCAvZXRjL2hvc3RzfSBmaWxlIHRvIGd1YXJkIGFnYWluc3QgRE5TDQotK3Nwb29maW5nIGF0 dGFja3MuDQotKw0KLStEZXBlbmRpbmcgb24gdGhlIGxpc3Qgb2YgZmlsZXMgYmVpbmcgbWFuYWdl ZCBieSBcY3N5bmMyLCBhbiBpbnRydWRlciBvbiBvbmUgb2YNCi0rdGhlIGNsdXN0ZXIgbm9kZXMg Y2FuIGFsc28gbW9kaWZ5IHRoZSBmaWxlcyB1bmRlciBcY3N5bmMyIGNvbnRyb2wgb24gdGhlIG90 aGVyDQotK2NsdXN0ZXIgbm9kZXMgYW5kIHNvIG1pZ2h0IGFsc28gZ2FpbiBhY2Nlc3Mgb24gdGhl bS4gSG93ZXZlciwgYW4gaW50cnVkZXIgY2FuDQotK25vdCBtb2RpZnkgYW55IG90aGVyIGZpbGVz IG9uIHRoZSBvdGhlciBob3N0cyBiZWNhdXNlIFxjc3luYzIgY2hlY2tzIG9uIHRoZQ0KLStyZWNl aXZpbmcgc2lkZSBpZiBhbGwgdXBkYXRlcyBhcmUgT0sgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1 cmF0aW9uIGZpbGUuDQotKw0KLStGb3Igc3VyZSwgYW4gaW50cnVkZXIgd291bGQgYmUgYWJsZSB0 byB3b3JrIGFyb3VuZCB0aGlzIHNlY3VyaXR5IGNoZWNrcyB3aGVuDQotK1xjc3luYzIgaXMgYWxz byB1c2VkIHRvIHN5bmMgdGhlIFxjc3luYzIgY29uZmlndXJhdGlvbiBmaWxlcy4NCi0rDQotK1xj c3luYzIgb25seSBzeW5jcyB0aGUgc3RhbmRhcmQgVU5JWCBwZXJtaXNzaW9ucyAodWlkLCBnaWQg YW5kIGZpbGUgbW9kZSkuDQotK0FDTHMsIExpbnV4IGV4dDJmcy9leHQzZnMgYXR0cmlidXRlcyBh bmQgb3RoZXIgZXh0ZW5kZWQgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucw0KLSthcmUgbmVpdGhlciBz eW5jZWQgbm9yIGZsdXNoZWQgKGUuZy4gaWYgdGhleSBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgd2hl bg0KLSt0aGUgZmlsZSBpcyBjcmVhdGVkKS4NCi0rDQotK1xzZWN0aW9ue0FsdGVybmF0aXZlc30N Ci0rDQotK1xjc3luYzIgaXMgbm90IHRoZSBvbmx5IGZpbGUgc3luY2hyb25pemF0aW9uIHRvb2wu IFNvbWUgb2YgdGhlIG90aGVyDQotK2ZyZWUgc29mdHdhcmUgZmlsZSBzeW5jaHJvbml6YXRpb24g dG9vbHMgYXJlOg0KLSsNCi0rXHN1YnNlY3Rpb257UnN5bmN9DQotKw0KLStSc3luYyBbN10gaXMg YSB0b29sIGZvciBmYXN0IGluY3JlbWVudGFsIGZpbGUgdHJhbnNmZXJzLCBidXQgaXMgbm90IGEN Ci0rc3luY2hyb25pemF0aW9uIHRvb2wgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwYXBlci4gQWN0 dWFsbHkgXGNzeW5jMiBpcw0KLSt1c2luZyB0aGUgcnN5bmMgYWxnb3JpdGhtIGZvciBmaWxlIHRy YW5zZmVycy4gQSB2YXJpZXR5IG9mIHN5bmNocm9uaXphdGlvbg0KLSt0b29scyBoYXZlIGJlZW4g d3JpdHRlbiBvbiB0b3Agb2YgcnN5bmMuIE1vc3Qgb2YgdGhlbSBhcmUgdGlueSBzaGVsbCBzY3Jp cHRzLg0KLSsNCi0rXHN1YnNlY3Rpb257VW5pc29ufQ0KLSsNCi0rVW5pc29uIFs4XSBpcyB1c2lu ZyBhbiBhbGdvcml0aG0gc2ltaWxhciB0byB0aGUgb25lIHVzZWQgYnkgXGNzeW5jMiwgYnV0IGlz DQotK2xpbWl0ZWQgdG8gdHdvLWhvc3Qgc2V0dXBzLiBJdHMgZm9jdXMgaXMgb24gaW50ZXJhY3Rp dmUgc3luY3MgKHRoZXJlIGV2ZW4gYXJlDQotK2dyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMpIGFu ZCBpdCBpcyB0YXJnZXRpbmcgb24gc3luY2luZyBob21lIGRpcmVjdG9yaWVzDQotK2JldHdlZW4g YSBsYXB0b3AgYW5kIGEgd29ya3N0YXRpb24uIFVuaXNvbiBpcyBwcmV0dHkgaW50dWl0aXZlIHRv IHVzZSwgYW1vbmcNCi0rb3RoZXIgdGhpbmdzIGJlY2F1c2Ugb2YgaXRzIGxpbWl0YXRpb25zLg0K LSsNCi0rXHN1YnNlY3Rpb257VmVyc2lvbiBDb250cm9sIFN5c3RlbXN9DQotKw0KLStWZXJzaW9u IGNvbnRyb2wgc3lzdGVtcyBzdWNoIGFzIFN1YnZlcnNpb24gWzldIGNhbiBhbHNvIGJlIHVzZWQg dG8gc3luY2hyb25pemUNCi0rY29uZmlndXJhdGlvbiBmaWxlcyBvciBhcHBsaWNhdGlvbiBpbWFn ZXMuIFRoZSBhZHZhbnRhZ2Ugb2YgdmVyc2lvbiBjb250cm9sDQotK3N5c3RlbXMgaXMgdGhhdCB0 aGV5IGNhbiBkbyB0aHJlZSB3YXkgbWVyZ2VzIGFuZCBwcmVzZXJ2ZSB0aGUgZW50aXJlIGhpc3Rv cnkNCi0rb2YgYSByZXBvc2l0b3J5LiBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgdGhleSBhcmUg bXVjaCBzbG93ZXIgYW5kIHJlcXVpcmUgbW9yZQ0KLStkaXNrIHNwYWNlIHRoYW4gcGxhaW4gc3lu Y2hyb25pemF0aW9uIHRvb2xzLg0KLSsNCi0rXHNlY3Rpb257UmVmZXJlbmNlc30NCi0rDQotK3tb MV19IFxjc3luYzIgXFwNCi0raHR0cDovL29zcy5saW5iaXQuY29tL2NzeW5jMi8NCi0rXG1lZHNr aXAgXFwNCi0re1syXX0gTElOQklUIEluZm9ybWF0aW9uIFRlY2hub2xvZ2llcyBcXA0KLStodHRw Oi8vd3d3LmxpbmJpdC5jb20vDQotK1xtZWRza2lwIFxcDQotK3tbM119IERSQkQgXFwNCi0raHR0 cDovL3d3dy5kcmJkLm9yZy8NCi0rXG1lZHNraXAgXFwNCi0re1s0XX0gTGlicnN5bmMgXFwNCi0r aHR0cDovL2xpYnJzeW5jLnNvdXJjZWZvcmdlLm5ldC8NCi0rXG1lZHNraXAgXFwNCi0re1s1XX0g U1FMaXRlIFxcDQotK2h0dHA6Ly93d3cuc3FsaXRlLm9yZy8NCi0rXG1lZHNraXAgXFwNCi0re1s2 XX0gUk9DSyBMaW51eCBcXA0KLStodHRwOi8vd3d3LnJvY2tsaW51eC5vcmcvDQotK1xtZWRza2lw IFxcDQotK3tbN119IFJzeW5jIFxcDQotK2h0dHA6Ly9zYW1iYS5hbnUuZWR1LmF1L3JzeW5jLw0K LStcbWVkc2tpcCBcXA0KLSt7WzhdfSBVbmlzb24gXFwNCi0raHR0cDovL3d3dy5jaXMudXBlbm4u ZWR1L1x0ZXh0YXNjaWl0aWxkZXt9YmNwaWVyY2UvdW5pc29uLw0KLStcbWVkc2tpcCBcXA0KLSt7 WzldfSBTdWJ2ZXJzaW9uIFxcDQotK2h0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvDQotKw0K LStcZW5ke2RvY3VtZW50fQ0KLWRpZmYgLS1naXQgYS9lcnJvci5jIGIvZXJyb3IuYw0KLWluZGV4 IDI2ZjA0YjIuLjgyZjJmM2YgMTAwNjQ0DQotLS0tIGEvZXJyb3IuYw0KLSsrKyBiL2Vycm9yLmMN Ci1AQCAtMjYsNiArMjYsNyBAQA0KLSAjaW5jbHVkZSA8dGltZS5oPg0KLSAjaW5jbHVkZSA8c3lz L3R5cGVzLmg+DQotICNpbmNsdWRlIDx1bmlzdGQuaD4NCi0rI2luY2x1ZGUgPHN5c2xvZy5oPg0K LSANCi0gbG9uZyBjc3luY19sYXN0X3ByaW50dGltZSA9IDA7DQotIEZJTEUgKmNzeW5jX3RpbWVz dGFtcF9vdXQgPSAwOw0KLUBAIC0xMTcsMjAgKzExOCwyOSBAQCB2b2lkIGNzeW5jX2RlYnVnKGlu dCBsdiwgY29uc3QgY2hhciAqZm10LCAuLi4pDQotIHsNCi0gCXZhX2xpc3QgYXA7DQotIA0KLS0J Y3N5bmNfcHJpbnR0aW1lKCk7DQotLQ0KLSAJaWYgKCBjc3luY19kZWJ1Z19sZXZlbCA8IGx2ICkg cmV0dXJuOw0KLSANCi0tCWlmIChjc3luY190aW1lc3RhbXBzKQ0KLS0JCWNzeW5jX3ByaW50dGlt ZV9wcmVmaXgoKTsNCi0rIAlpZiAoIWNzeW5jX3N5c2xvZykgew0KLSsJICBjc3luY19wcmludHRp bWUoKTsNCi0rCQ0KLSsJICBpZiAoY3N5bmNfdGltZXN0YW1wcykNCi0rCSAgICBjc3luY19wcmlu dHRpbWVfcHJlZml4KCk7DQotIA0KLS0JaWYgKCBjc3luY19zZXJ2ZXJfY2hpbGRfcGlkICkNCi0t CQlmcHJpbnRmKGNzeW5jX2RlYnVnX291dCwgIjwlZD4gIiwgY3N5bmNfc2VydmVyX2NoaWxkX3Bp ZCk7DQotLQ0KLS0JdmFfc3RhcnQoYXAsIGZtdCk7DQotLQl2ZnByaW50Zihjc3luY19kZWJ1Z19v dXQsIGZtdCwgYXApOw0KLS0JdmFfZW5kKGFwKTsNCi0rCSAgaWYgKCBjc3luY19zZXJ2ZXJfY2hp bGRfcGlkICkNCi0rCSAgICBmcHJpbnRmKGNzeW5jX2RlYnVnX291dCwgIjwlZD4gIiwgY3N5bmNf c2VydmVyX2NoaWxkX3BpZCk7DQotIA0KLSsJICB2YV9zdGFydChhcCwgZm10KTsNCi0rCSAgdmZw cmludGYoY3N5bmNfZGVidWdfb3V0LCBmbXQsIGFwKTsNCi0rCSAgdmFfZW5kKGFwKTsNCi0rCSAg Ly8gR29vZCAvIGJhZCB3aXRoIGV4dHJhIGxpbmUNCi0rCSAgZnByaW50Zihjc3luY19kZWJ1Z19v dXQsIlxuIik7DQotKwl9DQotKwllbHNlIHsNCi0rCSAgdmFfc3RhcnQoYXAsZm10KTsNCi0rCSAg dnN5c2xvZyhMT0dfREVCVUcsIGZtdCwgYXApOw0KLSsJICB2YV9lbmQoYXApOw0KLSsJfQ0KLSAJ Y3N5bmNfbWVzc2FnZXNfcHJpbnRlZCsrOw0KLSB9DQotIA0KLSsvKiBUZXN0IDMgKi8NCi1kaWZm IC0tZ2l0IGEvZ2V0cmVhbGZuLmMgYi9nZXRyZWFsZm4uYw0KLWluZGV4IDAxZDEzY2UuLmIyYmMw YjcgMTAwNjQ0DQotLS0tIGEvZ2V0cmVhbGZuLmMNCi0rKysgYi9nZXRyZWFsZm4uYw0KLUBAIC01 Myw4ICs1MywxMSBAQCBjaGFyICpnZXRyZWFsZm4oY29uc3QgY2hhciAqZmlsZW5hbWUpDQotIAkv KiBtYWtlIHRoZSBwYXRoIGFic29sdXRlICovDQotIAlpZiAoICp0ZW1wZm4gIT0gJy8nICkgew0K LSAJCWNoYXIgKnQyLCAqdDEgPSBteV9nZXRfY3VycmVudF9kaXJfbmFtZSgpOw0KLS0JCWFzcHJp bnRmKCZ0MiwgIiVzLyVzIiwgdDEsIHRlbXBmbik7DQotLQkJZnJlZSh0MSk7IGZyZWUodGVtcGZu KTsgdGVtcGZuID0gdDI7DQotKw0KLSsJCUFTUFJJTlRGKCZ0MiwgIiVzLyVzIiwgdDEsIHRlbXBm bik7DQotKwkJZnJlZSh0MSk7DQotKwkJZnJlZSh0ZW1wZm4pOw0KLSsJCXRlbXBmbiA9IHQyOw0K LSAJfQ0KLSANCi0gCS8qIHJlbW92ZSBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0ZW1wZm4gKi8NCi1A QCAtMTA4LDcgKzExMSw3IEBAIGNoYXIgKmdldHJlYWxmbihjb25zdCBjaGFyICpmaWxlbmFtZSkN Ci0gCQlpZiAoICFjaGRpcih0ZW1wZm4pICkgew0KLSAJCQljaGFyICp0MiwgKnQxID0gbXlfZ2V0 X2N1cnJlbnRfZGlyX25hbWUoKTsNCi0gCQkJaWYgKCBzdF9tYXJrICkgew0KLS0JCQkJYXNwcmlu dGYoJnQyLCAiJXMvJXMiLCB0MSwgc3RfbWFyaysxKTsNCi0rCQkJCUFTUFJJTlRGKCZ0MiwgIiVz LyVzIiwgdDEsIHN0X21hcmsrMSk7DQotIAkJCQlmcmVlKHRlbXBmbik7IGZyZWUodDEpOyB0ZW1w Zm4gPSB0MjsNCi0gCQkJfSBlbHNlIHsNCi0gCQkJCWZyZWUodGVtcGZuKTsgdGVtcGZuID0gdDE7 DQotZGlmZiAtLWdpdCBhL2dyb3Vwcy5jIGIvZ3JvdXBzLmMNCi1pbmRleCAxZmY5YTFhLi41MTE1 ODZlIDEwMDY0NA0KLS0tLSBhL2dyb3Vwcy5jDQotKysrIGIvZ3JvdXBzLmMNCi1AQCAtNDEsOCAr NDEsOSBAQCBpbnQgbWF0Y2hfcGF0dGVybl9saXN0KA0KLSAJCQkJbWF0Y2hlZCA9IDE7DQotIAkJ CX0NCi0gCQl9IGVsc2Ugew0KLSsJCQlpbnQgZm5tX3BhdGhuYW1lID0gcC0+c3Rhcl9tYXRjaGVz X3NsYXNoZXMgPyAwIDogRk5NX1BBVEhOQU1FOw0KLSAJCQlpZiAoICFmbm1hdGNoKHAtPnBhdHRl cm4sIGZpbGVuYW1lLA0KLS0JCQkJCUZOTV9MRUFESU5HX0RJUnxGTk1fUEFUSE5BTUUpICkgew0K LSsJCQkJCUZOTV9MRUFESU5HX0RJUnxmbm1fcGF0aG5hbWUpICkgew0KLSAJCQkJbWF0Y2hfcGF0 aCA9IHAtPmlzaW5jbHVkZTsNCi0gCQkJCW1hdGNoZWQgPSAxOw0KLSAJCQl9DQotQEAgLTkxLDEw ICs5MiwxMSBAQCBpbnQgY3N5bmNfc3RlcF9pbnRvKGNvbnN0IGNoYXIgKmZpbGUpDQotIAkJCQlj b250aW51ZTsNCi0gCQkJaWYgKCAocC0+cGF0dGVyblswXSA9PSAnLycgfHwgcC0+cGF0dGVyblsw XSA9PSAnJScpICYmIHAtPmlzaW5jbHVkZSApIHsNCi0gCQkJCWNoYXIgdFtzdHJsZW4ocC0+cGF0 dGVybikrMV0sICpsOw0KLSsJCQkJaW50IGZubV9wYXRobmFtZSA9IHAtPnN0YXJfbWF0Y2hlc19z bGFzaGVzID8gMCA6IEZOTV9QQVRITkFNRTsNCi0gCQkJCXN0cmNweSh0LCBwLT5wYXR0ZXJuKTsN Ci0gCQkJCXdoaWxlICggKGw9c3RycmNocih0LCAnLycpKSAhPSAwICkgew0KLSAJCQkJCSpsID0g MDsNCi0tCQkJCQlpZiAoICFmbm1hdGNoKHQsIGZpbGUsIEZOTV9QQVRITkFNRSkgKQ0KLSsJCQkJ CWlmICggIWZubWF0Y2godCwgZmlsZSwgZm5tX3BhdGhuYW1lKSApDQotIAkJCQkJCQkJcmV0dXJu IDE7DQotIAkJCQl9DQotIAkJCX0NCi1kaWZmIC0tZ2l0IGEvcHJlZml4c3Vic3QuYyBiL3ByZWZp eHN1YnN0LmMNCi1pbmRleCA2YWRlZGQ0Li5kMDAzYmI1IDEwMDY0NA0KLS0tLSBhL3ByZWZpeHN1 YnN0LmMNCi0rKysgYi9wcmVmaXhzdWJzdC5jDQotQEAgLTQ2LDcgKzQ2LDcgQEAgY29uc3QgY2hh ciAqcHJlZml4c3Vic3QoY29uc3QgY2hhciAqaW4pDQotIAkJCXJpbmdidWZmX2NvdW50ZXIgPSAo cmluZ2J1ZmZfY291bnRlcisxKSAlIFJJTkdCVUZGX0xFTjsNCi0gCQkJaWYgKHJpbmdidWZmW3Jp bmdidWZmX2NvdW50ZXJdKQ0KLSAJCQkJZnJlZShyaW5nYnVmZltyaW5nYnVmZl9jb3VudGVyXSk7 DQotLQkJCWFzcHJpbnRmKCZyaW5nYnVmZltyaW5nYnVmZl9jb3VudGVyXSwgIiVzJXMiLCBwLT5w YXRoLCBwYXRoKTsNCi0rCQkJQVNQUklOVEYoJnJpbmdidWZmW3JpbmdidWZmX2NvdW50ZXJdLCAi JXMlcyIsIHAtPnBhdGgsIHBhdGgpOw0KLSAJCQlyZXR1cm4gcmluZ2J1ZmZbcmluZ2J1ZmZfY291 bnRlcl07DQotIAkJfQ0KLSAJfQ0KLUBAIC01NiwzICs1NiwzNSBAQCBjb25zdCBjaGFyICpwcmVm aXhzdWJzdChjb25zdCBjaGFyICppbikNCi0gCXJldHVybiAwOw0KLSB9DQotIA0KLStjb25zdCBj aGFyICpwcmVmaXhlbmNvZGUoY29uc3QgY2hhciAqZmlsZW5hbWUpIHsNCi0rI2lmIF9fQ1lHV0lO X18NCi0rCWlmICghc3RyY21wKGZpbGVuYW1lLCAiLyIpKSB7DQotKwkJZmlsZW5hbWUgPSAiL2N5 Z2RyaXZlIjsNCi0rCX0NCi0rI2VuZGlmDQotKwlzdHJ1Y3QgY3N5bmNfcHJlZml4ICpwID0gY3N5 bmNfcHJlZml4Ow0KLSsNCi0rCS8qDQotKwkgKiBDYW5vbmljYWxpemVkIHBhdGhzIHdpbGwgYWx3 YXlzIGNvbnRhaW4gLw0KLSsJICogUHJlZml4c3Vic3RlZCBwYXRocyB3aWxsIHByb2JhYmx5IGNv bnRhaW4gJQ0KLSsJICovDQotKwlpZiAoKmZpbGVuYW1lID09ICcvJykNCi0rCQl3aGlsZSAocCkg ew0KLSsJCQlpZiAocC0+cGF0aCkgew0KLSsJCQkJaW50IHBfbGVuID0gc3RybGVuKHAtPnBhdGgp Ow0KLSsJCQkJaW50IGZfbGVuID0gc3RybGVuKGZpbGVuYW1lKTsNCi0rDQotKwkJCQlpZiAocF9s ZW4gPD0gZl9sZW4gJiYgIXN0cm5jbXAocC0+cGF0aCwgZmlsZW5hbWUsIHBfbGVuKSAmJg0KLSsJ CQkJCQkoZmlsZW5hbWVbcF9sZW5dID09ICcvJyB8fCAhZmlsZW5hbWVbcF9sZW5dKSkgew0KLSsJ CQkJCXJpbmdidWZmX2NvdW50ZXIgPSAocmluZ2J1ZmZfY291bnRlcisxKSAlIFJJTkdCVUZGX0xF TjsNCi0rCQkJCQlpZiAocmluZ2J1ZmZbcmluZ2J1ZmZfY291bnRlcl0pDQotKwkJCQkJCWZyZWUo cmluZ2J1ZmZbcmluZ2J1ZmZfY291bnRlcl0pOw0KLSsJCQkJCUFTUFJJTlRGKCZyaW5nYnVmZlty aW5nYnVmZl9jb3VudGVyXSwgIiUlJXMlJSVzIiwgcC0+bmFtZSwgZmlsZW5hbWUrcF9sZW4pOw0K LSsJCQkJCXJldHVybiByaW5nYnVmZltyaW5nYnVmZl9jb3VudGVyXTsNCi0rCQkJCX0NCi0rCQkJ fQ0KLSsJCQlwID0gcC0+bmV4dDsNCi0rCQl9DQotKwlyZXR1cm4gZmlsZW5hbWU7DQotK30NCi0r DQotZGlmZiAtLWdpdCBhL3JlbGVhc2Uuc2ggYi9yZWxlYXNlLnNoDQotbmV3IGZpbGUgbW9kZSAx MDA3NTUNCi1pbmRleCAwMDAwMDAwLi44ZWU0NDdjDQotLS0tIC9kZXYvbnVsbA0KLSsrKyBiL3Jl bGVhc2Uuc2gNCi1AQCAtMCwwICsxLDY5IEBADQotKyMhL2Jpbi9iYXNoDQotKyMNCi0rIyBjc3lu YzIgLSBjbHVzdGVyIHN5bmNocm9uaXphdGlvbiB0b29sLCAybmQgZ2VuZXJhdGlvbg0KLSsjIExJ TkJJVCBJbmZvcm1hdGlvbiBUZWNobm9sb2dpZXMgR21iSCA8aHR0cDovL3d3dy5saW5iaXQuY29t Pg0KLSsjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgQ2xpZmZvcmQgV29sZiA8Y2xpZmZvcmRA Y2xpZmZvcmQuYXQ+DQotKyMNCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSsjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQotKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3INCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KLSsjDQot KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsDQotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQotKyMgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi0rIw0KLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotKyMgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0rIyBG b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIxMTEtMTMwNyAgVVNBDQotKyMNCi0rIw0KLSsjIEludGVybmFsIHNjcmlwdCBmb3IgdGFnZ2lu ZyBhIHJlbGVhc2UgaW4gc3VidmVyc2lvbiBhbmQgY3JlYXRpbmcNCi0rIyB0aGUgc291cmNlIHRh ciBmaWxlLg0KLSsNCi0rUEFDS0FHRT1jc3luYzINCi0rVVJMPWh0dHA6Ly9zdm4ubGluYml0LmNv bS9jc3luYzINCi0rDQotK2Nhc2UgIiQxIiBpbg0KLSsgIC0qKQ0KLSsJZWNobyAiVXNhZ2U6ICQw IG5ld3ZlcnNpb24iDQotKwk7Ow0KLSsgICcnKQ0KLSsJc3ZuIGxzICRVUkwvdGFncyB8IHRyIC1k IC8gfCBwZXJsIC1wZSAnJHg9JF87ICR4PX5zL1xuL1x0LzsgcHJpbnQgJHg7DQotKwkJCXMvKFxk Kykvc3ByaW50ZiIlMDRkIiwkMS9lZzsnIHwgc29ydCAtazIgfCBjdXQgLWYxDQotKwk7Ow0KLSsg ICopDQotKwlWRVJTSU9OPSQxDQotKwlzZXQgLWV4DQotKw0KLSsJZGF0ZSAiK2NzeW5jMiAoJFZF UlNJT04tMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93JW4lbmANCi0rCQlgICAqIE5ldyBVcHN0cmVh bSBWZXJzaW9uLiVuJW4gLS0gQ2xpZmZvcmQgV29sZiBgDQotKwkJYDxjbGlmZm9yZC53b2xmQGxp bmJpdC5jb20+ICAlYSwgJWQgJWIgJVkgYA0KLSsJCWAlSDolTTolUyAleiVuIiA+IGRlYmlhbi9j aGFuZ2Vsb2cubmV3DQotKwljYXQgZGViaWFuL2NoYW5nZWxvZyA+PiBkZWJpYW4vY2hhbmdlbG9n Lm5ldw0KLSsJbXYgZGViaWFuL2NoYW5nZWxvZy5uZXcgZGViaWFuL2NoYW5nZWxvZw0KLSsJc3Zu IGNvbW1pdCAtbSAiQWRkZWQgdmVyc2lvbiAkVkVSU0lPTiB0byBkZWJpYW4gY2hhbmdlbG9nLiIg XA0KLSsJCQlkZWJpYW4vY2hhbmdlbG9nDQotKw0KLSsJc3ZuIGNwIC1tICJUYWdnZWQgdmVyc2lv biAkVkVSU0lPTiIgXA0KLSsJCQkkVVJML3RydW5rICRVUkwvdGFncy8kUEFDS0FHRS0kVkVSU0lP Tg0KLSsJc3ZuIGNvICRVUkwvdGFncy8kUEFDS0FHRS0kVkVSU0lPTiAuLi8kUEFDS0FHRS0kVkVS U0lPTg0KLSsNCi0rCWNkIC4uLyRQQUNLQUdFLSRWRVJTSU9ODQotKwlzdm4gcm0gcmVsZWFzZS5z aCBjb3B5Y2hlY2suc2gNCi0rCXBlcmwgLXBpIC1lICJzL1NOQVBTSE9ULyRWRVJTSU9OL2ciIGNv bmZpZ3VyZS5hYw0KLSsJcGVybCAtcGkgLWUgInMvU05BUFNIT1QvJFZFUlNJT04vZyIgY3N5bmMy LnNwZWMNCi0rCXN2biBjb21taXQgLW0gIkZpeGVkIHZlcnNpb24gaW5mbyBpbiB0YWcgJFZFUlNJ T04iDQotKw0KLSsJc2xlZXAgMg0KLSsJd2dldCAtTyBwYXBlci5wZGYgaHR0cDovL3d3dy5jbGlm Zm9yZC5hdC9wYXBlcnMvMjAwNS9jc3luYzIvcGFwZXIucGRmDQotKwkuL2F1dG9nZW4uc2g7IHJt IC1yZiBhdXRvbTR0ZS5jYWNoZSBkZWJpYW4vICQoIGZpbmQgLW5hbWUgLnN2biApDQotKw0KLSsJ Y2QgLi4NCi0rCXRhciBjdnpmICRQQUNLQUdFLSRWRVJTSU9OLnRhci5neiBcDQotKwkJLS1vd25l cj0wIC0tZ3JvdXA9MCAkUEFDS0FHRS0kVkVSU0lPTg0KLSsJcm0gLXJmICRQQUNLQUdFLSRWRVJT SU9ODQotKwk7Ow0KLStlc2FjDQotKw0KLWRpZmYgLS1naXQgYS9yc3luYy5jIGIvcnN5bmMuYw0K LWluZGV4IGU0YTkxOGMuLjg2NDgyZWUgMTAwNjQ0DQotLS0tIGEvcnN5bmMuYw0KLSsrKyBiL3Jz eW5jLmMNCi1AQCAtMjUsMTAgKzI1LDE4OCBAQA0KLSAjaW5jbHVkZSA8ZXJybm8uaD4NCi0gI2lu Y2x1ZGUgPHN0ZGlvLmg+DQotIA0KLSsvKiBmb3IgdG1wZmlsZSByZXBsYWNlbWVudDogKi8NCi0r I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCi0rI2luY2x1 ZGUgPGZjbnRsLmg+DQotKw0KLSsvKiBmb3IgTUFYUEFUSExFTiAqLw0KLSsjaW5jbHVkZSA8c3lz L3BhcmFtLmg+DQotKw0KLSsNCi0gI2lmZGVmIF9fQ1lHV0lOX18NCi0gI2luY2x1ZGUgPHczMmFw aS93aW5kb3dzLmg+DQotICNlbmRpZg0KLSANCi0rDQotKy8qIFRoaXMgaGFzIGJlZW4gdGFrZW4g ZnJvbSByc3luYzpsaWIvY29tcGF0LmMgKi8NCi0rDQotKy8qKg0KLSsgKiBMaWtlIHN0cm5jcHkg YnV0IGRvZXMgbm90IDAgZmlsbCB0aGUgYnVmZmVyIGFuZCBhbHdheXMgbnVsbA0KLSsgKiB0ZXJt aW5hdGVzLg0KLSsgKg0KLSsgKiBAcGFyYW0gYnVmc2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgZGVz dGluYXRpb24gYnVmZmVyLg0KLSsgKg0KLSsgKiBAcmV0dXJuIGluZGV4IG9mIHRoZSB0ZXJtaW5h dGluZyBieXRlLg0KLSsgKiovDQotK3N0YXRpYyBzaXplX3Qgc3RybGNweShjaGFyICpkLCBjb25z dCBjaGFyICpzLCBzaXplX3QgYnVmc2l6ZSkNCi0rew0KLSsgICAgICAgIHNpemVfdCBsZW4gPSBz dHJsZW4ocyk7DQotKyAgICAgICAgc2l6ZV90IHJldCA9IGxlbjsNCi0rICAgICAgICBpZiAoYnVm c2l6ZSA+IDApIHsNCi0rICAgICAgICAgICAgICAgIGlmIChsZW4gPj0gYnVmc2l6ZSkNCi0rICAg ICAgICAgICAgICAgICAgICAgICAgbGVuID0gYnVmc2l6ZS0xOw0KLSsgICAgICAgICAgICAgICAg bWVtY3B5KGQsIHMsIGxlbik7DQotKyAgICAgICAgICAgICAgICBkW2xlbl0gPSAwOw0KLSsgICAg ICAgIH0NCi0rICAgICAgICByZXR1cm4gcmV0Ow0KLSt9DQotKw0KLSsNCi0rLyogVGhpcyBoYXMg YmVlbiB0YWtlbiBmcm9tIHJzeW5jIHNvdXJjZXM6IHJlY2VpdmVyLmMgKi8NCi0rDQotKyNkZWZp bmUgVE1QTkFNRV9TVUZGSVggIi5YWFhYWFgiDQotKyNkZWZpbmUgVE1QTkFNRV9TVUZGSVhfTEVO ICgoaW50KXNpemVvZiBUTVBOQU1FX1NVRkZJWCAtIDEpDQotKyNkZWZpbmUgTUFYX1VOSVFVRV9O VU1CRVIgOTk5OTk5DQotKyNkZWZpbmUgTUFYX1VOSVFVRV9MT09QIDEwMA0KLSsNCi0rLyogZ2V0 X3RtcG5hbWUoKSAtIGNyZWF0ZSBhIHRtcCBmaWxlbmFtZSBmb3IgYSBnaXZlbiBmaWxlbmFtZQ0K LSsgKg0KLSsgKiBJZiBhIHRtcGRpciBpcyBkZWZpbmVkLCB1c2UgdGhhdCBhcyB0aGUgZGlyZWN0 b3J5IHRvIHB1dCBpdCBpbi4gIE90aGVyd2lzZSwNCi0rICogdGhlIHRtcCBmaWxlbmFtZSBpcyBp biB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGdpdmVuIG5hbWUuICBOb3RlIHRoYXQNCi0rICog dGhlcmUgbWF5IGJlIG5vIGRpcmVjdG9yeSBhdCBhbGwgaW4gdGhlIGdpdmVuIG5hbWUhDQotKyAq DQotKyAqIFRoZSB0bXAgZmlsZW5hbWUgaXMgYmFzaWNhbGx5IHRoZSBnaXZlbiBmaWxlbmFtZSB3 aXRoIGEgZG90IHByZXBlbmRlZCwgYW5kDQotKyAqIC5YWFhYWFggYXBwZW5kZWQgKGZvciBta3N0 ZW1wKCkgdG8gcHV0IGl0cyB1bmlxdWUgZ3VuayBpbikuICBXZSB0YWtlIGNhcmUNCi0rICogdG8g bm90IGV4Y2VlZCBlaXRoZXIgdGhlIE1BWFBBVEhMRU4gb3IgTkFNRV9NQVgsIGVzcGVjaWFsbHkg dGhlIGxhc3QsIGFzDQotKyAqIHRoZSBiYXNlbmFtZSBiYXNpY2FsbHkgYmVjb21lcyA4IGNoYXJh Y3RlcnMgbG9uZ2VyLiAgSW4gc3VjaCBhIGNhc2UsIHRoZQ0KLSsgKiBvcmlnaW5hbCBuYW1lIGlz IHNob3J0ZW5lZCBzdWZmaWNpZW50bHkgdG8gbWFrZSBpdCBhbGwgZml0Lg0KLSsgKg0KLSsgKiBJ ZiB0aGUgbWFrZV91bmlxdWUgYXJnIGlzIFRydWUsIHRoZSBYWFhYWFggc3RyaW5nIGlzIHJlcGxh Y2VkIHdpdGggYSB1bmlxdWUNCi0rICogc3RyaW5nIHRoYXQgZG9lc24ndCBleGlzdCBhdCB0aGUg dGltZSBvZiB0aGUgY2hlY2suICBUaGlzIGlzIGludGVuZGVkIHRvIGJlDQotKyAqIHVzZWQgZm9y IGNyZWF0aW5nIGhhcmQgbGlua3MsIHN5bWxpbmtzLCBkZXZpY2VzLCBhbmQgc3BlY2lhbCBmaWxl cywgc2luY2UNCi0rICogbm9ybWFsIGZpbGVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IG1rc3RlbXAo KSBmb3Igc2FmZXR5Lg0KLSsgKg0KLSsgKiBPZiBjb3Vyc2UsIHRoZSBvbmx5IHJlYXNvbiB0aGUg ZmlsZSBpcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgbmFtZSBpcyB0bw0KLSsgKiBtYWtlIGl0IGVh c2llciB0byBmaWd1cmUgb3V0IHdoYXQgcHVycG9zZSBhIHRlbXAgZmlsZSBpcyBzZXJ2aW5nIHdo ZW4gYQ0KLSsgKiB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcy4gKi8NCi0rDQotK3N0YXRpYyBpbnQg Z2V0X3RtcG5hbWUoY2hhciAqZm5hbWV0bXAsIGNvbnN0IGNoYXIgKmZuYW1lKQ0KLSt7DQotKwlp bnQgbWF4bmFtZSwgYWRkZWQsIGxlbmd0aCA9IDA7DQotKwljb25zdCBjaGFyICpmOw0KLSsJY2hh ciAqc3VmOw0KLSsNCi0rCXN0YXRpYyB1bnNpZ25lZCBjb3VudGVyX2xpbWl0Ow0KLSsJdW5zaWdu ZWQgY291bnRlcjsNCi0rDQotKwlpZiAoKGYgPSBzdHJyY2hyKGZuYW1lLCAnLycpKSAhPSBOVUxM KSB7DQotKwkJKytmOw0KLSsJCWxlbmd0aCA9IGYgLSBmbmFtZTsNCi0rCQkvKiBjb3B5IHVwIHRv IGFuZCBpbmNsdWRpbmcgdGhlIHNsYXNoICovDQotKwkJc3RybGNweShmbmFtZXRtcCwgZm5hbWUs IGxlbmd0aCArIDEpOw0KLSsJfSBlbHNlDQotKwkJZiA9IGZuYW1lOw0KLSsJZm5hbWV0bXBbbGVu Z3RoKytdID0gJy4nOw0KLSsNCi0rCS8qIFRoZSBtYXhuYW1lIHZhbHVlIGlzIGJ1ZnNpemUsIGFu ZCBpbmNsdWRlcyBzcGFjZSBmb3IgdGhlICdcMCcuDQotKwkgKiBOQU1FX01BWCBuZWVkcyBhbiBl eHRyYSAtMSBmb3IgdGhlIG5hbWUncyBsZWFkaW5nIGRvdC4gKi8NCi0rCW1heG5hbWUgPSBNSU4o TUFYUEFUSExFTiAtIGxlbmd0aCAtIFRNUE5BTUVfU1VGRklYX0xFTiwNCi0rCQkgICAgICBOQU1F X01BWCAtIDEgLSBUTVBOQU1FX1NVRkZJWF9MRU4pOw0KLSsNCi0rCWlmIChtYXhuYW1lIDwgMSkg ew0KLSsJCWNzeW5jX2RlYnVnKDEsICJ0ZW1wb3JhcnkgZmlsZW5hbWUgdG9vIGxvbmc6ICVzXG4i LCBmbmFtZSk7DQotKwkJZm5hbWV0bXBbMF0gPSAnXDAnOw0KLSsJCXJldHVybiAwOw0KLSsJfQ0K LSsNCi0rCWFkZGVkID0gc3RybGNweShmbmFtZXRtcCArIGxlbmd0aCwgZiwgbWF4bmFtZSk7DQot KwlpZiAoYWRkZWQgPj0gbWF4bmFtZSkNCi0rCQlhZGRlZCA9IG1heG5hbWUgLSAxOw0KLSsJc3Vm ID0gZm5hbWV0bXAgKyBsZW5ndGggKyBhZGRlZDsNCi0rDQotKwlpZiAoIWNvdW50ZXJfbGltaXQp IHsNCi0rCQljb3VudGVyX2xpbWl0ID0gKHVuc2lnbmVkKWdldHBpZCgpICsgTUFYX1VOSVFVRV9M T09QOw0KLSsJCWlmIChjb3VudGVyX2xpbWl0ID4gTUFYX1VOSVFVRV9OVU1CRVIgfHwgY291bnRl cl9saW1pdCA8IE1BWF9VTklRVUVfTE9PUCkNCi0rCQkJY291bnRlcl9saW1pdCA9IE1BWF9VTklR VUVfTE9PUDsNCi0rDQotKwkJY291bnRlciA9IGNvdW50ZXJfbGltaXQgLSBNQVhfVU5JUVVFX0xP T1A7DQotKw0KLSsJCS8qIFRoaXMgZG9lc24ndCBoYXZlIHRvIGJlIHZlcnkgZ29vZCBiZWNhdXNl IHdlIGRvbid0IG5lZWQNCi0rCQkgKiB0byB3b3JyeSBhYm91dCBzb21lb25lIHRyeWluZyB0byBn dWVzcyB0aGUgdmFsdWVzOiAgYWxsDQotKwkJICogYSBjb25mbGljdCB3aWxsIGRvIGlzIGNhdXNl IGEgZGV2aWNlLCBzcGVjaWFsIGZpbGUsIGhhcmQNCi0rCQkgKiBsaW5rLCBvciBzeW1saW5rIHRv IGZhaWwgdG8gYmUgY3JlYXRlZC4gIEFsc286IGF2b2lkDQotKwkJICogdXNpbmcgbWt0ZW1wKCkg ZHVlIHRvIGdjYydzIGFubm95aW5nIHdhcm5pbmcuICovDQotKwkJd2hpbGUgKDEpIHsNCi0rCQkJ c25wcmludGYoc3VmLCBUTVBOQU1FX1NVRkZJWF9MRU4rMSwgIi4lZCIsIGNvdW50ZXIpOw0KLSsJ CQlpZiAoYWNjZXNzKGZuYW1ldG1wLCAwKSA8IDApDQotKwkJCQlicmVhazsNCi0rCQkJaWYgKCsr Y291bnRlciA+PSBjb3VudGVyX2xpbWl0KQ0KLSsJCQkJcmV0dXJuIDA7DQotKwkJfQ0KLSsJfSBl bHNlDQotKwkJbWVtY3B5KHN1ZiwgVE1QTkFNRV9TVUZGSVgsIFRNUE5BTUVfU1VGRklYX0xFTisx KTsNCi0rDQotKwlyZXR1cm4gMTsNCi0rfQ0KLSsNCi0rDQotKy8qIFJldHVybnMgb3BlbiBmaWxl IGhhbmRsZSBmb3IgYSB0ZW1wIGZpbGUgdGhhdCByZXNpZGVzIGluIHRoZQ0KLSsgICBzYW1lIGRp cmVjdG9yeSBhcyBmaWxlIGZuYW1lLiBUaGUgZmlsZSBtdXN0IGJlIHJlbW92ZWQgYWZ0ZXINCi0r ICAgdXNhZ2UuDQotKyovDQotKw0KLStzdGF0aWMgRklMRSAqb3Blbl90ZW1wX2ZpbGUoY2hhciAq Zm5hbWV0bXAsIGNvbnN0IGNoYXIgKmZuYW1lKQ0KLSt7DQotKwlGSUxFICpmOw0KLSsJaW50IGZk Ow0KLSsNCi0rCWlmIChnZXRfdG1wbmFtZShmbmFtZXRtcCwgZm5hbWUpID09IDApIHsNCi0rCQlj c3luY19kZWJ1ZygxLCAiRVJST1I6IENvdWxkbid0IGZpbmQgdGVtcG5hbWUgZm9yIGZpbGUgJXNc biIsIGZuYW1lKTsNCi0rCQlyZXR1cm4gTlVMTDsNCi0rCX0NCi0rDQotKwlmID0gTlVMTDsNCi0r CWZkID0gb3BlbihmbmFtZXRtcCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgU19JV1VTUiB8 IFNfSVJVU1IpOw0KLSsJaWYgKGZkID49IDApIHsNCi0rCQlmID0gZmRvcGVuKGZkLCAid2IrIik7 DQotKwkJCS8qIG5vdCB1bmxpbmtpbmcgc2luY2UgcmVuYW1lIHdvdWxkbid0IHdvcmsgdGhlbiAq Lw0KLSsJfQ0KLSsJaWYgKGZkIDwgMCB8fCAhZikgew0KLSsJCWNzeW5jX2RlYnVnKDEsICJFUlJP UjogQ291bGQgbm90IG9wZW4gcmVzdWx0IGZyb20gdGVtcG5hbSglcykhXG4iLCBmbmFtZXRtcCk7 DQotKwkJcmV0dXJuIE5VTEw7DQotKwl9DQotKw0KLSsJcmV0dXJuIGY7DQotK30NCi0rDQotKw0K LSsNCi0rI2lmZGVmIF9TVklEX1NPVVJDRQ0KLStzdGF0aWMgRklMRSAqcGFyYW5vaWRfdG1wZmls ZSgpDQotK3sNCi0rCWNoYXIgKm5hbWU7DQotKwlGSUxFICpmOw0KLSsJaW50IGZkOw0KLSsNCi0r CW5hbWUgPSB0ZW1wbmFtKGNzeW5jX3RlbXBkaXIsICJjc3luYzIiKTsNCi0rCWlmICghbmFtZSkN Ci0rCQljc3luY19mYXRhbCgiRVJST1I6IHRlbXBuYW0oKSBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQg ZmlsZW5hbWUhXG4iKTsNCi0rDQotKwlmID0gTlVMTDsNCi0rCWZkID0gb3BlbihuYW1lLCBPX0NS RUFUIHwgT19FWENMIHwgT19SRFdSLCBTX0lXVVNSIHwgU19JUlVTUik7DQotKwlpZiAoZmQgPj0g MCkgew0KLSsJCWYgPSBmZG9wZW4oZmQsICJ3YisiKTsNCi0rCQl1bmxpbmsobmFtZSk7DQotKwl9 DQotKwlpZiAoZmQgPCAwIHx8ICFmKQ0KLSsJCWNzeW5jX2ZhdGFsKCJFUlJPUjogQ291bGQgbm90 IG9wZW4gcmVzdWx0IGZyb20gdGVtcG5hbSglcykhXG4iLCBuYW1lKTsNCi0rDQotKwljc3luY19k ZWJ1ZygzLCAiVGVtcGZpbGVuYW1lIGlzICVzXG4iLCBuYW1lKTsNCi0rCWZyZWUobmFtZSk7DQot KwlyZXR1cm4gZjsNCi0rfQ0KLSsjZWxzZQ0KLSBzdGF0aWMgRklMRSAqcGFyYW5vaWRfdG1wZmls ZSgpDQotIHsNCi0gCUZJTEUgKmY7DQotQEAgLTQxLDYgKzIxOSw3IEBAIHN0YXRpYyBGSUxFICpw YXJhbm9pZF90bXBmaWxlKCkNCi0gDQotIAlyZXR1cm4gZjsNCi0gfQ0KLSsjZW5kaWYNCi0gDQot IHZvaWQgY3N5bmNfc2VuZF9maWxlKEZJTEUgKmluKQ0KLSB7DQotQEAgLTExOSwxOCArMjk4LDIz IEBAIGludCBjc3luY19yc19jaGVjayhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGlzcmVnKQ0K LSAJcnNfc3RhdHNfdCBzdGF0czsNCi0gCXJzX3Jlc3VsdCByZXN1bHQ7DQotIAlsb25nIHNpemU7 DQotKwljaGFyIHRtcGZuYW1lW01BWFBBVEhMRU5dOw0KLSANCi0gCWNzeW5jX2RlYnVnKDMsICJD c3luYzIgLyBMaWJyc3luYzogY3N5bmNfcnNfY2hlY2soJyVzJywgJWQgWyVzXSlcbiIsDQotIAkJ ZmlsZW5hbWUsIGlzcmVnLCBpc3JlZyA/ICJyZWd1bGFyIGZpbGUiIDogIm5vbi1yZWd1bGFyIGZp bGUiKTsNCi0gDQotIAljc3luY19kZWJ1ZygzLCAiT3BlbmluZyBiYXNpc19maWxlIGFuZCBzaWdf ZmlsZS4uXG4iKTsNCi0gDQotLQlzaWdfZmlsZSA9IHBhcmFub2lkX3RtcGZpbGUoKTsNCi0rCXNp Z19maWxlID0gb3Blbl90ZW1wX2ZpbGUodG1wZm5hbWUsIHByZWZpeHN1YnN0KGZpbGVuYW1lKSk7 DQotIAlpZiAoICFzaWdfZmlsZSApIGdvdG8gaW9fZXJyb3I7DQotKwlpZiAodW5saW5rKHRtcGZu YW1lKSA8IDApIGdvdG8gaW9fZXJyb3I7DQotIA0KLSAJYmFzaXNfZmlsZSA9IGZvcGVuKHByZWZp eHN1YnN0KGZpbGVuYW1lKSwgInJiIik7DQotLQlpZiAoICFiYXNpc19maWxlICkgYmFzaXNfZmls ZSA9IHBhcmFub2lkX3RtcGZpbGUoKTsNCi0tCWlmICggIWJhc2lzX2ZpbGUgKSBnb3RvIGlvX2Vy cm9yOw0KLSsJaWYgKCAhYmFzaXNfZmlsZSApIHsgIC8qID8/IHdoeSBhIHRtcCBmaWxlPyAqLw0K LSsJCWJhc2lzX2ZpbGUgPSBvcGVuX3RlbXBfZmlsZSh0bXBmbmFtZSwgcHJlZml4c3Vic3QoZmls ZW5hbWUpKTsNCi0rCQlpZiAoICFiYXNpc19maWxlICkgZ290byBpb19lcnJvcjsNCi0rCQlpZiAo dW5saW5rKHRtcGZuYW1lKSA8IDApIGdvdG8gaW9fZXJyb3I7DQotKwl9DQotIA0KLSAJaWYgKCBp c3JlZyApIHsNCi0gCQljc3luY19kZWJ1ZygzLCAiUnVubmluZyByc19zaWdfZmlsZSgpIGZyb20g bGlicnN5bmMuLi4uXG4iKTsNCi1AQCAtMjA0LDE0ICszODgsMTkgQEAgZXJyb3I6Ow0KLSANCi0g dm9pZCBjc3luY19yc19zaWcoY29uc3QgY2hhciAqZmlsZW5hbWUpDQotIHsNCi0tCUZJTEUgKmJh c2lzX2ZpbGUsICpzaWdfZmlsZTsNCi0rCUZJTEUgKmJhc2lzX2ZpbGUgPSAwLCAqc2lnX2ZpbGUg PSAwOw0KLSAJcnNfc3RhdHNfdCBzdGF0czsNCi0gCXJzX3Jlc3VsdCByZXN1bHQ7DQotKwljaGFy IHRtcGZuYW1lW01BWFBBVEhMRU5dOw0KLSANCi0gCWNzeW5jX2RlYnVnKDMsICJDc3luYzIgLyBM aWJyc3luYzogY3N5bmNfcnNfc2lnKCclcycpXG4iLCBmaWxlbmFtZSk7DQotIA0KLSAJY3N5bmNf ZGVidWcoMywgIk9wZW5pbmcgYmFzaXNfZmlsZSBhbmQgc2lnX2ZpbGUuLlxuIik7DQotLQlzaWdf ZmlsZSA9IHBhcmFub2lkX3RtcGZpbGUoKTsNCi0rDQotKwlzaWdfZmlsZSA9IG9wZW5fdGVtcF9m aWxlKHRtcGZuYW1lLCBwcmVmaXhzdWJzdChmaWxlbmFtZSkpOw0KLSsJaWYgKCAhc2lnX2ZpbGUg KSBnb3RvIGlvX2Vycm9yOw0KLSsJaWYgKHVubGluayh0bXBmbmFtZSkgPCAwKSBnb3RvIGlvX2Vy cm9yOw0KLSsNCi0gCWJhc2lzX2ZpbGUgPSBmb3BlbihwcmVmaXhzdWJzdChmaWxlbmFtZSksICJy YiIpOw0KLSAJaWYgKCAhYmFzaXNfZmlsZSApIGJhc2lzX2ZpbGUgPSBmb3BlbigiL2Rldi9udWxs IiwgInJiIik7DQotIA0KLUBAIC0yMjcsMTkgKzQxNiwzNCBAQCB2b2lkIGNzeW5jX3JzX3NpZyhj b25zdCBjaGFyICpmaWxlbmFtZSkNCi0gCWNzeW5jX2RlYnVnKDMsICJTaWduYXR1cmUgaGFzIGJl ZW4gY3JlYXRlZCBzdWNjZXNzZnVsbHkuXG4iKTsNCi0gCWZjbG9zZShiYXNpc19maWxlKTsNCi0g CWZjbG9zZShzaWdfZmlsZSk7DQotKw0KLSsJcmV0dXJuOw0KLSsNCi0raW9fZXJyb3I6DQotKwlj c3luY19kZWJ1ZygwLCAiSS9PIEVycm9yICclcycgaW4gcnN5bmMtc2lnOiAlc1xuIiwNCi0rCQkJ c3RyZXJyb3IoZXJybm8pLCBwcmVmaXhzdWJzdChmaWxlbmFtZSkpOw0KLSsNCi0rCWlmIChiYXNp c19maWxlKSBmY2xvc2UoYmFzaXNfZmlsZSk7DQotKwlpZiAoc2lnX2ZpbGUpIGZjbG9zZShzaWdf ZmlsZSk7DQotIH0NCi0gDQotKw0KLSsNCi0gaW50IGNzeW5jX3JzX2RlbHRhKGNvbnN0IGNoYXIg KmZpbGVuYW1lKQ0KLSB7DQotLQlGSUxFICpzaWdfZmlsZSwgKm5ld19maWxlLCAqZGVsdGFfZmls ZTsNCi0rCUZJTEUgKnNpZ19maWxlID0gMCwgKm5ld19maWxlID0gMCwgKmRlbHRhX2ZpbGUgPSAw Ow0KLSAJcnNfcmVzdWx0IHJlc3VsdDsNCi0gCXJzX3NpZ25hdHVyZV90ICpzdW1zZXQ7DQotIAly c19zdGF0c190IHN0YXRzOw0KLSsJY2hhciB0bXBmbmFtZVtNQVhQQVRITEVOXTsNCi0gDQotIAlj c3luY19kZWJ1ZygzLCAiQ3N5bmMyIC8gTGlicnN5bmM6IGNzeW5jX3JzX2RlbHRhKCclcycpXG4i LCBmaWxlbmFtZSk7DQotIA0KLSAJY3N5bmNfZGVidWcoMywgIlJlY2VpdmluZyBzaWdfZmlsZSBm cm9tIHBlZXIuLlxuIik7DQotLQlzaWdfZmlsZSA9IHBhcmFub2lkX3RtcGZpbGUoKTsNCi0rCXNp Z19maWxlID0gb3Blbl90ZW1wX2ZpbGUodG1wZm5hbWUsIHByZWZpeHN1YnN0KGZpbGVuYW1lKSk7 DQotKwlpZiAoICFzaWdfZmlsZSApIGdvdG8gaW9fZXJyb3I7DQotKwlpZiAodW5saW5rKHRtcGZu YW1lKSA8IDApIGdvdG8gaW9fZXJyb3I7DQotKw0KLSAJaWYgKCBjc3luY19yZWN2X2ZpbGUoc2ln X2ZpbGUpICkgew0KLSAJCWZjbG9zZShzaWdfZmlsZSk7DQotIAkJcmV0dXJuIC0xOw0KLUBAIC0y NjAsNyArNDY0LDEwIEBAIGludCBjc3luY19yc19kZWx0YShjb25zdCBjaGFyICpmaWxlbmFtZSkN Ci0gCQllcnJubyA9IGJhY2t1cF9lcnJubzsNCi0gCQlyZXR1cm4gLTE7DQotIAl9DQotLQlkZWx0 YV9maWxlID0gcGFyYW5vaWRfdG1wZmlsZSgpOw0KLSsNCi0rCWRlbHRhX2ZpbGUgPSBvcGVuX3Rl bXBfZmlsZSh0bXBmbmFtZSwgcHJlZml4c3Vic3QoZmlsZW5hbWUpKTsNCi0rCWlmICggIWRlbHRh X2ZpbGUgKSBnb3RvIGlvX2Vycm9yOw0KLSsJaWYgKHVubGluayh0bXBmbmFtZSkgPCAwKSBnb3Rv IGlvX2Vycm9yOw0KLSANCi0gCWNzeW5jX2RlYnVnKDMsICJSdW5uaW5nIHJzX2J1aWxkX2hhc2hf dGFibGUoKSBmcm9tIGxpYnJzeW5jLi5cbiIpOw0KLSAJcmVzdWx0ID0gcnNfYnVpbGRfaGFzaF90 YWJsZShzdW1zZXQpOw0KLUBAIC0yODEsNiArNDg4LDE2IEBAIGludCBjc3luY19yc19kZWx0YShj b25zdCBjaGFyICpmaWxlbmFtZSkNCi0gCWZjbG9zZShuZXdfZmlsZSk7DQotIA0KLSAJcmV0dXJu IDA7DQotKw0KLStpb19lcnJvcjoNCi0rCWNzeW5jX2RlYnVnKDAsICJJL08gRXJyb3IgJyVzJyBp biByc3luYy1kZWx0YTogJXNcbiIsDQotKwkJCXN0cmVycm9yKGVycm5vKSwgcHJlZml4c3Vic3Qo ZmlsZW5hbWUpKTsNCi0rDQotKwlpZiAobmV3X2ZpbGUpIGZjbG9zZShuZXdfZmlsZSk7DQotKwlp ZiAoZGVsdGFfZmlsZSkgZmNsb3NlKGRlbHRhX2ZpbGUpOw0KLSsJaWYgKHNpZ19maWxlKSBmY2xv c2Uoc2lnX2ZpbGUpOw0KLSsNCi0rCXJldHVybiAtMTsNCi0gfQ0KLSANCi0gaW50IGNzeW5jX3Jz X3BhdGNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQ0KLUBAIC0yODksMjQgKzUwNiwyNyBAQCBpbnQg Y3N5bmNfcnNfcGF0Y2goY29uc3QgY2hhciAqZmlsZW5hbWUpDQotIAlpbnQgYmFja3VwX2Vycm5v Ow0KLSAJcnNfc3RhdHNfdCBzdGF0czsNCi0gCXJzX3Jlc3VsdCByZXN1bHQ7DQotLQljaGFyIGJ1 ZmZlcls1MTJdOw0KLSAJY2hhciAqZXJyc3RyID0gIj8iOw0KLS0JaW50IHJjOw0KLSsJY2hhciB0 bXBmbmFtZVtNQVhQQVRITEVOXSwgbmV3Zm5hbWVbTUFYUEFUSExFTl07DQotIA0KLSAJY3N5bmNf ZGVidWcoMywgIkNzeW5jMiAvIExpYnJzeW5jOiBjc3luY19yc19wYXRjaCgnJXMnKVxuIiwgZmls ZW5hbWUpOw0KLSANCi0gCWNzeW5jX2RlYnVnKDMsICJSZWNlaXZpbmcgZGVsdGFfZmlsZSBmcm9t IHBlZXIuLlxuIik7DQotLQlkZWx0YV9maWxlID0gcGFyYW5vaWRfdG1wZmlsZSgpOw0KLSsJZGVs dGFfZmlsZSA9IG9wZW5fdGVtcF9maWxlKHRtcGZuYW1lLCBwcmVmaXhzdWJzdChmaWxlbmFtZSkp Ow0KLSAJaWYgKCAhZGVsdGFfZmlsZSApIHsgZXJyc3RyPSJjcmVhdGluZyBkZWx0YSB0ZW1wIGZp bGUiOyBnb3RvIGlvX2Vycm9yOyB9DQotKwlpZiAodW5saW5rKHRtcGZuYW1lKSA8IDApIHsgZXJy c3RyPSJyZW1vdmluZyBkZWx0YSB0ZW1wIGZpbGUiOyBnb3RvIGlvX2Vycm9yOyB9DQotIAlpZiAo IGNzeW5jX3JlY3ZfZmlsZShkZWx0YV9maWxlKSApIGdvdG8gZXJyb3I7DQotIA0KLSAJY3N5bmNf ZGVidWcoMywgIk9wZW5pbmcgdG8gYmUgcGF0Y2hlZCBmaWxlIG9uIGxvY2FsIGhvc3QuLlxuIik7 DQotIAliYXNpc19maWxlID0gZm9wZW4ocHJlZml4c3Vic3QoZmlsZW5hbWUpLCAicmIiKTsNCi0t CWlmICggIWJhc2lzX2ZpbGUgKSBiYXNpc19maWxlID0gcGFyYW5vaWRfdG1wZmlsZSgpOw0KLS0J aWYgKCAhYmFzaXNfZmlsZSApIHsgZXJyc3RyPSJvcGVuaW5nIGRhdGEgZmlsZSBmb3IgcmVhZGlu ZyI7IGdvdG8gaW9fZXJyb3I7IH0NCi0rCWlmICggIWJhc2lzX2ZpbGUgKSB7DQotKwkJYmFzaXNf ZmlsZSA9IG9wZW5fdGVtcF9maWxlKHRtcGZuYW1lLCBwcmVmaXhzdWJzdChmaWxlbmFtZSkpOw0K LSsJCWlmICggIWJhc2lzX2ZpbGUgKSB7IGVycnN0cj0ib3BlbmluZyBkYXRhIGZpbGUgZm9yIHJl YWRpbmciOyBnb3RvIGlvX2Vycm9yOyB9DQotKwkJaWYgKHVubGluayh0bXBmbmFtZSkgPCAwKSB7 IGVycnN0cj0icmVtb3ZpbmcgZGF0YSB0ZW1wIGZpbGUiOyBnb3RvIGlvX2Vycm9yOyB9DQotKwl9 DQotIA0KLSAJY3N5bmNfZGVidWcoMywgIk9wZW5pbmcgdGVtcCBmaWxlIGZvciBuZXcgZGF0YSBv biBsb2NhbCBob3N0Li5cbiIpOw0KLS0JbmV3X2ZpbGUgPSBwYXJhbm9pZF90bXBmaWxlKCk7DQot KwluZXdfZmlsZSA9IG9wZW5fdGVtcF9maWxlKG5ld2ZuYW1lLCBwcmVmaXhzdWJzdChmaWxlbmFt ZSkpOw0KLSAJaWYgKCAhbmV3X2ZpbGUgKSB7IGVycnN0cj0iY3JlYXRpbmcgbmV3IGRhdGEgdGVt cCBmaWxlIjsgZ290byBpb19lcnJvcjsgfQ0KLSANCi0gCWNzeW5jX2RlYnVnKDMsICJSdW5uaW5n IHJzX3BhdGNoX2ZpbGUoKSBmcm9tIGxpYnJzeW5jLi5cbiIpOw0KLUBAIC0zMTYsMTIgKzUzNiwx MiBAQCBpbnQgY3N5bmNfcnNfcGF0Y2goY29uc3QgY2hhciAqZmlsZW5hbWUpDQotIAkJZ290byBl cnJvcjsNCi0gCX0NCi0gDQotLQljc3luY19kZWJ1ZygzLCAiQ29weWluZyBuZXcgZGF0YSB0byBs b2NhbCBmaWxlLi5cbiIpOw0KLSsJY3N5bmNfZGVidWcoMywgIlJlbmFtaW5nIHRtcCBmaWxlIHRv IGRhdGEgZmlsZS4uXG4iKTsNCi0gCWZjbG9zZShiYXNpc19maWxlKTsNCi0tCXJld2luZChuZXdf ZmlsZSk7DQotLQl1bmxpbmsocHJlZml4c3Vic3QoZmlsZW5hbWUpKTsNCi0gDQotICNpZmRlZiBf X0NZR1dJTl9fDQotKw0KLSsvKiBUT0RPOiBuZWVkZWQ/ICovDQotIAkvLyBUaGlzIGNyZWF0ZXMg dGhlIGZpbGUgdXNpbmcgdGhlIG5hdGl2ZSB3aW5kb3dzIEFQSSwgYnlwYXNzaW5nDQotIAkvLyB0 aGUgY3lnd2luIHdyYXBwZXJzIGFuZCBzbyBtYWtpbmcgc3VyZSB0aGF0IHdlIGRvIG5vdCBtZXNz IHVwIHRoZQ0KLSAJLy8gcGVybWlzc2lvbnMuLg0KLUBAIC0zNTAsMTQgKzU3MCw5IEBAIGludCBj c3luY19yc19wYXRjaChjb25zdCBjaGFyICpmaWxlbmFtZSkNCi0gCX0NCi0gI2VuZGlmDQotIA0K LS0JYmFzaXNfZmlsZSA9IGZvcGVuKHByZWZpeHN1YnN0KGZpbGVuYW1lKSwgIndiIik7DQotLQlp ZiAoICFiYXNpc19maWxlICkgeyBlcnJzdHI9Im9wZW5pbmcgZGF0YSBmaWxlIGZvciB3cml0aW5n IjsgZ290byBpb19lcnJvcjsgfQ0KLS0NCi0tCXdoaWxlICggKHJjID0gZnJlYWQoYnVmZmVyLCAx LCA1MTIsIG5ld19maWxlKSkgPiAwICkNCi0tCQlmd3JpdGUoYnVmZmVyLCByYywgMSwgYmFzaXNf ZmlsZSk7DQotKwlpZiAocmVuYW1lKG5ld2ZuYW1lLCBwcmVmaXhzdWJzdChmaWxlbmFtZSkpIDwg MCkgeyBlcnJzdHI9InJlbmFtaW5nIHRtcCBmaWxlIHRvIHRvIGJlIHBhdGNoZWQgZmlsZSI7IGdv dG8gaW9fZXJyb3I7IH0NCi0gDQotIAljc3luY19kZWJ1ZygzLCAiRmlsZSBoYXMgYmVlbiBwYXRj aGVkIHN1Y2Nlc3NmdWxseS5cbiIpOw0KLS0JZmNsb3NlKGJhc2lzX2ZpbGUpOw0KLSAJZmNsb3Nl KGRlbHRhX2ZpbGUpOw0KLSAJZmNsb3NlKG5ld19maWxlKTsNCi0gDQotZGlmZiAtLWdpdCBhL3Vw ZGF0ZS5jIGIvdXBkYXRlLmMNCi1pbmRleCA3YzU1MTEzLi5iMmMyYjg1IDEwMDY0NA0KLS0tLSBh L3VwZGF0ZS5jDQotKysrIGIvdXBkYXRlLmMNCi1AQCAtNDQsNyArNDQsOSBAQCBpbnQgcmVhZF9j b25uX3N0YXR1cyhjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpob3N0KQ0KLSAJfQ0KLSAJ aWYgKCBmaWxlICkNCi0gCQljc3luY19kZWJ1ZygwLCAiV2hpbGUgc3luY2luZyBmaWxlICVzOlxu IiwgZmlsZSk7DQotLQljc3luY19kZWJ1ZygwLCAiRVJST1IgZnJvbSBwZWVyICVzOiAlcyIsIGhv c3QsIGxpbmUpOw0KLSsJZWxzZQ0KLSsJICAgICAgICBmaWxlID0gIjxubyBmaWxlPiI7DQotKwlj c3luY19kZWJ1ZygwLCAiRVJST1IgZnJvbSBwZWVyKCVzKTogJXMgJXMiLCBmaWxlLCBob3N0LCBs aW5lKTsNCi0gCWNzeW5jX2Vycm9yX2NvdW50Kys7DQotIAlyZXR1cm4gIXN0cmNtcChsaW5lLCAi RmlsZSBpcyBhbHNvIG1hcmtlZCBkaXJ0eSBoZXJlISIpID8gMSA6IDI7DQotIH0NCi1AQCAtNzAs NyArNzIsNyBAQCBpbnQgY29ubmVjdF90b19ob3N0KGNvbnN0IGNoYXIgKnBlZXJuYW1lKQ0KLSAJ aWYgKCBjb25uX29wZW4ocGVlcm5hbWUpICkgcmV0dXJuIC0xOw0KLSANCi0gCWlmICggdXNlX3Nz bCApIHsNCi0tI2lmIEhBVkVfTElCR05VVExTX09QRU5TU0wNCi0rI2lmIEhBVkVfTElCR05VVExT DQotIAkJY29ubl9wcmludGYoIlNTTFxuIik7DQotIAkJaWYgKCByZWFkX2Nvbm5fc3RhdHVzKDAs IHBlZXJuYW1lKSApIHsNCi0gCQkJY3N5bmNfZGVidWcoMSwgIlNTTCBjb21tYW5kIGZhaWxlZC5c biIpOw0KLUBAIC0xOTYsNyArMTk4LDggQEAgYXV0b19yZXNvbHZlX2VudHJ5X3BvaW50Og0KLSAJ CQljc3luY19kZWJ1ZygxLCAiRmlsZSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUgb24gcGVlci5cbiIp Ow0KLSAJCQlpZiAoIGRyeV9ydW4gKSB7DQotIAkJCQlwcmludGYoIj9TOiAlLTE1cyAlc1xuIiwg cGVlcm5hbWUsIGZpbGVuYW1lKTsNCi0tCQkJCXJldHVybjsNCi0rCQkJCS8vIERTIFJlbW92ZSBs b2NhbCBkaXJ0eSwgZXZlbiBpbiBkcnkgcnVuDQotKwkJCQkvLyByZXR1cm47DQotIAkJCX0NCi0g CQkJZ290byBza2lwX2FjdGlvbjsNCi0gCQl9DQotQEAgLTMzMiw3ICszMzUsOCBAQCBhdXRvX3Jl c29sdmVfZW50cnlfcG9pbnQ6DQotIAkJCWNzeW5jX2RlYnVnKDEsICJGaWxlIGlzIGFscmVhZHkg dXAgdG8gZGF0ZSBvbiBwZWVyLlxuIik7DQotIAkJCWlmICggZHJ5X3J1biApIHsNCi0gCQkJCXBy aW50ZigiP1M6ICUtMTVzICVzXG4iLCBwZWVybmFtZSwgZmlsZW5hbWUpOw0KLS0JCQkJcmV0dXJu Ow0KLSsJCQkJLy8gRFMgYWxzbyBza2lwIG9uIGRyeV9ydW4gDQotKwkJCQkvLyByZXR1cm47DQot IAkJCX0NCi0gCQkJZ290byBza2lwX2FjdGlvbjsNCi0gCQl9DQotQEAgLTU0MCwxNyArNTQ0LDE2 IEBAIHZvaWQgY3N5bmNfdXBkYXRlX2hvc3QoY29uc3QgY2hhciAqcGVlcm5hbWUsDQotIAlzdHJ1 Y3QgdGV4dGxpc3QgKnRsX21vZCA9IDAsICoqbGFzdF90bj0mdGw7DQotIAljaGFyICpjdXJyZW50 X25hbWUgPSAwOw0KLSAJc3RydWN0IHN0YXQgc3Q7DQotLQ0KLSAJU1FMX0JFR0lOKCJHZXQgZmls ZXMgZm9yIGhvc3QgZnJvbSBkaXJ0eSB0YWJsZSIsDQotLQkJIlNFTEVDVCBmaWxlbmFtZSwgbXlu YW1lLCBmb3JjZSBGUk9NIGRpcnR5IFdIRVJFIHBlZXJuYW1lID0gJyVzJyAiDQotKwkJIlNFTEVD VCBmaWxlbmFtZSwgbXluYW1lLCBmb3JjZWQgRlJPTSBkaXJ0eSBXSEVSRSBwZWVybmFtZSA9ICcl cycgIg0KLSAJCSJPUkRFUiBieSBmaWxlbmFtZSBBU0MiLCB1cmxfZW5jb2RlKHBlZXJuYW1lKSkN Ci0gCXsNCi0tCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IHVybF9kZWNvZGUoU1FMX1ZbMF0pOw0K LSsJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gdXJsX2RlY29kZShTUUxfVigwKSk7DQotIAkJaW50 IGksIHVzZV90aGlzID0gcGF0bnVtID09IDA7DQotIAkJZm9yIChpPTA7IGk8cGF0bnVtICYmICF1 c2VfdGhpczsgaSsrKQ0KLSAJCQlpZiAoIGNvbXBhcmVfZmlsZXMoZmlsZW5hbWUsIHBhdGxpc3Rb aV0sIHJlY3Vyc2l2ZSkgKSB1c2VfdGhpcyA9IDE7DQotIAkJaWYgKHVzZV90aGlzKQ0KLS0JCQl0 ZXh0bGlzdF9hZGQyKCZ0bCwgZmlsZW5hbWUsIHVybF9kZWNvZGUoU1FMX1ZbMV0pLCBhdG9pKFNR TF9WWzJdKSk7DQotKwkJCXRleHRsaXN0X2FkZDIoJnRsLCBmaWxlbmFtZSwgdXJsX2RlY29kZShT UUxfVigxKSksIGF0b2koU1FMX1YoMikpKTsNCi0gCX0gU1FMX0VORDsNCi0gDQotIAkvKiBqdXN0 IHJldHVybiBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgdG8gdXBkYXRlICovDQotQEAgLTU1OCw3ICs1 NjEsNyBAQCB2b2lkIGNzeW5jX3VwZGF0ZV9ob3N0KGNvbnN0IGNoYXIgKnBlZXJuYW1lLA0KLSAN Ci0gCWlmICggY29ubmVjdF90b19ob3N0KHBlZXJuYW1lKSApIHsNCi0gCQljc3luY19lcnJvcl9j b3VudCsrOw0KLS0JCWNzeW5jX2RlYnVnKDAsICJFUlJPUjogQ29ubmVjdGlvbiB0byByZW1vdGUg aG9zdCBmYWlsZWQuXG4iKTsNCi0rCQljc3luY19kZWJ1ZygwLCAiRVJST1I6IENvbm5lY3Rpb24g dG8gcmVtb3RlIGhvc3QgYCVzJyBmYWlsZWQuXG4iLCBwZWVybmFtZSk7DQotIAkJY3N5bmNfZGVi dWcoMSwgIkhvc3Qgc3RheXMgaW4gZGlydHkgc3RhdGUuICINCi0gCQkJCSJUcnkgYWdhaW4gbGF0 ZXIuLi5cbiIpOw0KLSAJCXJldHVybjsNCi1AQCAtNTg0LDYgKzU4Nyw3IEBAIHZvaWQgY3N5bmNf dXBkYXRlX2hvc3QoY29uc3QgY2hhciAqcGVlcm5hbWUsDQotIAkJCXQtPm5leHQgPSB0bF9tb2Q7 DQotIAkJCXRsX21vZCA9IHQ7DQotIAkJfSBlbHNlIHsNCi0rCQkgICAgICAgIGNzeW5jX2RlYnVn KDMsICJEaXJ0eSBpdGVtICVzICVzICVkIFxuIiwgdC0+dmFsdWUsIHQtPnZhbHVlMiwgdC0+aW50 dmFsdWUpOw0KLSAJCQlpZiAoICFjdXJyZW50X25hbWUgfHwgc3RyY21wKGN1cnJlbnRfbmFtZSwg dC0+dmFsdWUyKSApIHsNCi0gCQkJCWNvbm5fcHJpbnRmKCJIRUxMTyAlc1xuIiwgdXJsX2VuY29k ZSh0LT52YWx1ZTIpKTsNCi0gCQkJCWlmICggcmVhZF9jb25uX3N0YXR1cyh0LT52YWx1ZSwgcGVl cm5hbWUpICkNCi1AQCAtNjAwLDYgKzYwNCw3IEBAIGlkZW50X2ZhaWxlZF8xOg0KLSANCi0gCWZv ciAodCA9IHRsX21vZDsgdCAhPSAwOyB0ID0gdC0+bmV4dCkgew0KLSAJCWlmICggIWN1cnJlbnRf bmFtZSB8fCBzdHJjbXAoY3VycmVudF9uYW1lLCB0LT52YWx1ZTIpICkgew0KLSsJCSAgICAgICAg Y3N5bmNfZGVidWcoMywgIkRpcnR5IGl0ZW0gJXMgJXMgJWQgIiwgdC0+dmFsdWUsIHQtPnZhbHVl MiwgdC0+aW50dmFsdWUpOyANCi0gCQkJY29ubl9wcmludGYoIkhFTExPICVzXG4iLCB1cmxfZW5j b2RlKHQtPnZhbHVlMikpOw0KLSAJCQlpZiAoIHJlYWRfY29ubl9zdGF0dXModC0+dmFsdWUsIHBl ZXJuYW1lKSApDQotIAkJCQlnb3RvIGlkZW50X2ZhaWxlZF8yOw0KLUBAIC02MjQsOSArNjI5LDkg QEAgdm9pZCBjc3luY191cGRhdGUoY29uc3QgY2hhciAqKiBwYXRsaXN0LCBpbnQgcGF0bnVtLCBp bnQgcmVjdXJzaXZlLCBpbnQgZHJ5X3J1bikNCi0gCXN0cnVjdCB0ZXh0bGlzdCAqdGwgPSAwLCAq dDsNCi0gDQotIAlTUUxfQkVHSU4oIkdldCBob3N0cyBmcm9tIGRpcnR5IHRhYmxlIiwNCi0tCQki U0VMRUNUIHBlZXJuYW1lIEZST00gZGlydHkgR1JPVVAgQlkgcGVlcm5hbWUgT1JERVIgQlkgcmFu ZG9tKCkiKQ0KLSsJCSJTRUxFQ1QgcGVlcm5hbWUgRlJPTSBkaXJ0eSBHUk9VUCBCWSBwZWVybmFt ZSIpDQotIAl7DQotLQkJdGV4dGxpc3RfYWRkKCZ0bCwgdXJsX2RlY29kZShTUUxfVlswXSksIDAp Ow0KLSsJCXRleHRsaXN0X2FkZCgmdGwsIHVybF9kZWNvZGUoU1FMX1YoMCkpLCAwKTsNCi0gCX0g U1FMX0VORDsNCi0gDQotIAlmb3IgKHQgPSB0bDsgdCAhPSAwOyB0ID0gdC0+bmV4dCkgew0KLUBA IC02NzIsNyArNjc3LDcgQEAgZm91bmRfaG9zdF9jaGVjazoNCi0gDQotIAlpZiAoIGNvbm5lY3Rf dG9faG9zdChwZWVybmFtZSkgKSB7DQotIAkJY3N5bmNfZXJyb3JfY291bnQrKzsNCi0tCQljc3lu Y19kZWJ1ZygwLCAiRVJST1I6IENvbm5lY3Rpb24gdG8gcmVtb3RlIGhvc3QgZmFpbGVkLlxuIik7 DQotKwkJY3N5bmNfZGVidWcoMCwgIkVSUk9SOiBDb25uZWN0aW9uIHRvIHJlbW90ZSBob3N0IGAl cycgZmFpbGVkLlxuIiwgcGVlcm5hbWUpOw0KLSAJCXJldHVybiAwOw0KLSAJfQ0KLSANCi1AQCAt Nzc0LDcgKzc3OSw3IEBAIGZvdW5kX2hvc3RfY2hlY2s6DQotIA0KLSAJaWYgKCBjb25uZWN0X3Rv X2hvc3QocGVlcm5hbWUpICkgew0KLSAJCWNzeW5jX2Vycm9yX2NvdW50Kys7DQotLQkJY3N5bmNf ZGVidWcoMCwgIkVSUk9SOiBDb25uZWN0aW9uIHRvIHJlbW90ZSBob3N0IGZhaWxlZC5cbiIpOw0K LSsJCWNzeW5jX2RlYnVnKDAsICJFUlJPUjogQ29ubmVjdGlvbiB0byByZW1vdGUgaG9zdCBgJXMn IGZhaWxlZC5cbiIsIHBlZXJuYW1lKTsNCi0gCQlyZXR1cm4gMDsNCi0gCX0NCi0gDQotQEAgLTc5 OCw3ICs4MDMsNyBAQCBmb3VuZF9ob3N0Og0KLSAJCQlmaWxlbmFtZSA/IHVybF9lbmNvZGUoZmls ZW5hbWUpIDogIiIsDQotIAkJCWZpbGVuYW1lID8gIiciIDogIiIpDQotIAl7DQotLQkJY2hhciAq bF9maWxlID0gc3RyZHVwKHVybF9kZWNvZGUoU1FMX1ZbMV0pKSwgKmxfY2hlY2t0eHQgPSBzdHJk dXAodXJsX2RlY29kZShTUUxfVlswXSkpOw0KLSsJCWNoYXIgKmxfZmlsZSA9IHN0cmR1cCh1cmxf ZGVjb2RlKFNRTF9WKDEpKSksICpsX2NoZWNrdHh0ID0gc3RyZHVwKHVybF9kZWNvZGUoU1FMX1Yo MCkpKTsNCi0gCQlpZiAoIGNzeW5jX21hdGNoX2ZpbGVfaG9zdChsX2ZpbGUsIG15bmFtZSwgcGVl cm5hbWUsIDApICkgew0KLSAJCQlpZiAoIHJlbW90ZV9lb2YgKSB7DQotIGdvdF9yZW1vdGVfZW9m Og0KLUBAIC05MzYsMTcgKzk0MSwxNyBAQCB2b2lkIGNzeW5jX3JlbW92ZV9vbGQoKQ0KLSAJCWNv bnN0IHN0cnVjdCBjc3luY19ncm91cCAqZyA9IDA7DQotIAkJY29uc3Qgc3RydWN0IGNzeW5jX2dy b3VwX2hvc3QgKmg7DQotIA0KLS0JCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gdXJsX2RlY29kZShT UUxfVlswXSk7IA0KLSsJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gdXJsX2RlY29kZShTUUxfVigw KSk7IA0KLSANCi0gCQl3aGlsZSAoKGc9Y3N5bmNfZmluZF9uZXh0KGcsIGZpbGVuYW1lKSkgIT0g MCkgew0KLS0JCQlpZiAoIXN0cmNtcChnLT5teW5hbWUsIFNRTF9WWzFdKSkNCi0rCQkJaWYgKCFz dHJjbXAoZy0+bXluYW1lLCBTUUxfVigxKSkpDQotIAkJCQlmb3IgKGggPSBnLT5ob3N0OyBoOyBo ID0gaC0+bmV4dCkgew0KLS0JCQkJCWlmICghc3RyY21wKGgtPmhvc3RuYW1lLCBTUUxfVlsyXSkp DQotKwkJCQkJaWYgKCFzdHJjbXAoaC0+aG9zdG5hbWUsIFNRTF9WKDIpKSkNCi0gCQkJCQkJZ290 byB0aGlzX2RpcnR5X3JlY29yZF9pc19vazsNCi0gCQkJCX0NCi0gCQl9DQotIA0KLS0JCXRleHRs aXN0X2FkZDIoJnRsLCBTUUxfVlswXSwgU1FMX1ZbMl0sIDApOw0KLSsJCXRleHRsaXN0X2FkZDIo JnRsLCBTUUxfVigwKSwgU1FMX1YoMiksIDApOw0KLSANCi0gdGhpc19kaXJ0eV9yZWNvcmRfaXNf b2s6DQotIAkJOw0KLUBAIC05NjIsOCArOTY3LDggQEAgdGhpc19kaXJ0eV9yZWNvcmRfaXNfb2s6 DQotIAlTUUxfQkVHSU4oIlF1ZXJ5IGZpbGUgREIiLA0KLSAJICAgICAgICAgICJTRUxFQ1QgZmls ZW5hbWUgRlJPTSBmaWxlIikNCi0gCXsNCi0tCQlpZiAoIWNzeW5jX2ZpbmRfbmV4dCgwLCB1cmxf ZGVjb2RlKFNRTF9WWzBdKSkpDQotLQkJCXRleHRsaXN0X2FkZCgmdGwsIFNRTF9WWzBdLCAwKTsN Ci0rCQlpZiAoIWNzeW5jX2ZpbmRfbmV4dCgwLCB1cmxfZGVjb2RlKFNRTF9WKDApKSkpDQotKwkJ CXRleHRsaXN0X2FkZCgmdGwsIFNRTF9WKDApLCAwKTsNCi0gCX0gU1FMX0VORDsNCi0gCWZvciAo dCA9IHRsOyB0ICE9IDA7IHQgPSB0LT5uZXh0KSB7DQotIAkJY3N5bmNfZGVidWcoMSwgIlJlbW92 aW5nICVzIGZyb20gZmlsZSBkYi5cbiIsIHQtPnZhbHVlKTsNCmRpZmYgLS1naXQgYS90ZXN0aW5n L2NzeW5jMi9sb25nbG9uZy1mb3JtYXQucGF0Y2ggYi90ZXN0aW5nL2NzeW5jMi9sb25nbG9uZy1m b3JtYXQucGF0Y2gNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5hMzc0ODhk DQotLS0gL2Rldi9udWxsDQorKysgYi90ZXN0aW5nL2NzeW5jMi9sb25nbG9uZy1mb3JtYXQucGF0 Y2gNCkBAIC0wLDAgKzEsMzEgQEANCistLS0gb2xkL2NoZWNrdHh0LmMNCisrKysgbmV3L2NoZWNr dHh0LmMNCitAQCAtNDksNyArNDksNyBAQA0KKyAJeHhwcmludGYoInYxIik7DQorIA0KKyAJaWYg KCAhU19JU0xOSyhzdC0+c3RfbW9kZSkgJiYgIVNfSVNESVIoc3QtPnN0X21vZGUpICkNCistCQl4 eHByaW50ZigiOm10aW1lPSVMZCIsIGlnbl9tdGltZSA/IChsb25nIGxvbmcpMCA6IChsb25nIGxv bmcpc3QtPnN0X210aW1lKTsNCisrCQl4eHByaW50ZigiOm10aW1lPSVsbGQiLCBpZ25fbXRpbWUg PyAobG9uZyBsb25nKTAgOiAobG9uZyBsb25nKXN0LT5zdF9tdGltZSk7DQorIA0KKyAJaWYgKCAh Y3N5bmNfaWdub3JlX21vZCApDQorIAkJeHhwcmludGYoIjptb2RlPSVkIiwgKGludClzdC0+c3Rf bW9kZSk7DQorQEAgLTYxLDcgKzYxLDcgQEANCisgCQl4eHByaW50ZigiOmdpZD0lZCIsIChpbnQp c3QtPnN0X2dpZCk7DQorIA0KKyAJaWYgKCBTX0lTUkVHKHN0LT5zdF9tb2RlKSApDQorLQkJeHhw cmludGYoIjp0eXBlPXJlZzpzaXplPSVMZCIsIChsb25nIGxvbmcpc3QtPnN0X3NpemUpOw0KKysJ CXh4cHJpbnRmKCI6dHlwZT1yZWc6c2l6ZT0lbGxkIiwgKGxvbmcgbG9uZylzdC0+c3Rfc2l6ZSk7 DQorIA0KKyAJaWYgKCBTX0lTRElSKHN0LT5zdF9tb2RlKSApDQorIAkJeHhwcmludGYoIjp0eXBl PWRpciIpOw0KKy0tLSBvbGQvdXBkYXRlLmMNCisrKysgbmV3L3VwZGF0ZS5jDQorQEAgLTQ2OSw3 ICs0NjksNyBAQA0KKyANCisgc2tpcF9hY3Rpb246DQorIAlpZiAoICFTX0lTTE5LKHN0LnN0X21v ZGUpICkgew0KKy0JCWNvbm5fcHJpbnRmKCJTRVRJTUUgJXMgJXMgJUxkXG4iLA0KKysJCWNvbm5f cHJpbnRmKCJTRVRJTUUgJXMgJXMgJWxsZFxuIiwNCisgCQkJCXVybF9lbmNvZGUoa2V5KSwgdXJs X2VuY29kZShmaWxlbmFtZSksDQorIAkJCQkobG9uZyBsb25nKXN0LnN0X210aW1lKTsNCisgCQls YXN0X2Nvbm5fc3RhdHVzID0gcmVhZF9jb25uX3N0YXR1cyhmaWxlbmFtZSwgcGVlcm5hbWUpOw0K ZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY3N5bmMyL3JzeW5jLXN0cmxjcHktZGlzYWJsZS5wYXRjaCBi L3Rlc3RpbmcvY3N5bmMyL3JzeW5jLXN0cmxjcHktZGlzYWJsZS5wYXRjaA0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjVkMjhlMWQNCi0tLSAvZGV2L251bGwNCisrKyBiL3Rl c3RpbmcvY3N5bmMyL3JzeW5jLXN0cmxjcHktZGlzYWJsZS5wYXRjaA0KQEAgLTAsMCArMSwyMCBA QA0KKy0tLSBvbGQvcnN5bmMuYw0KKysrKyBuZXcvcnN5bmMuYw0KK0BAIC00OCw3ICs0OCw3IEBA DQorICAqIEBwYXJhbSBidWZzaXplIGlzIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZm ZXIuDQorICAqDQorICAqIEByZXR1cm4gaW5kZXggb2YgdGhlIHRlcm1pbmF0aW5nIGJ5dGUuDQor LSAqKi8NCisrICogZGlzYWJsZWQNCisgc3RhdGljIHNpemVfdCBzdHJsY3B5KGNoYXIgKmQsIGNv bnN0IGNoYXIgKnMsIHNpemVfdCBidWZzaXplKQ0KKyB7DQorICAgICAgICAgc2l6ZV90IGxlbiA9 IHN0cmxlbihzKTsNCitAQCAtNjEsNyArNjEsNyBAQA0KKyAgICAgICAgIH0NCisgICAgICAgICBy ZXR1cm4gcmV0Ow0KKyB9DQorLQ0KKysgKiovDQorIC8qIHNwbGl0cyBmaWxlcGF0aCBhdCB0aGUg bGFzdCAnLycsIGlmIGFueSwgbGlrZSBzbzoNCisgICoJZGlybmFtZQkJYmFzZW5hbWUJZmlsZXBh dGgNCisgICoJIi8iCQkiIgkJIi8iDQotLSANCjIuNS4zDQoNCg0KDQotLS0NClVuc3Vic2NyaWJl OiAgYWxwaW5lLWFwb3J0cyt1bnN1YnNjcmliZUBsaXN0cy5hbHBpbmVsaW51eC5vcmcNCkhlbHA6 ICAgICAgICAgYWxwaW5lLWFwb3J0cytoZWxwQGxpc3RzLmFscGluZWxpbnV4Lm9yZw0KLS0tDQo=