ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzYTJiMmU1Li40OTBjN2NkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDggKzEsMTYgQEAKIAogICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCiAKK0NoYW5nZXMgaW4gMS4yLjQuNSAoMTggQXByIDIwMTApCistIFNldCBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtUb3Jva10KKy0gU2V0IExERkxBR1MgaW4gTWFrZWZpbGUuaW4gW0Jhci1MZXZdCistIEF2b2lkIG1rZGlyIG9ianMgcmFjZSBjb25kaXRpb24gaW4gTWFrZWZpbGUuaW4gW0Jvd2xlcl0KKy0gQWRkIFpMSUJfSU5URVJOQUwgaW4gZnJvbnQgb2YgaW50ZXJuYWwgaW50ZXItbW9kdWxlIGZ1bmN0aW9ucyBhbmQgYXJyYXlzCistIERlZmluZSBaTElCX0lOVEVSTkFMIHRvIGhpZGUgaW50ZXJuYWwgZnVuY3Rpb25zIGFuZCBhcnJheXMgZm9yIEdOVSBDCistIERvbid0IHVzZSBoaWRkZW4gYXR0cmlidXRlIHdoZW4gaXQgaXMgYSB3YXJuaW5nIGdlbmVyYXRvciAoZS5nLiBTb2xhcmlzKQorCiBDaGFuZ2VzIGluIDEuMi40LjQgKDE4IEFwciAyMDEwKQotLSBGaXggQ1JPU1NfUFJFRklYIGV4ZWN1dGFibGUgdGVzdGluZywgQ0hPU1QgZXh0cmFjdCwgbWluZ3cqIFtUmnKaa10KKy0gRml4IENST1NTX1BSRUZJWCBleGVjdXRhYmxlIHRlc3RpbmcsIENIT1NUIGV4dHJhY3QsIG1pbmd3KiBbVG9yb2tdCiAtIFVuZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaW4gemNvbmYuaCBpZiBpdCBpcyB6ZXJvLCBidXQgbm90IGlmIGVtcHR5CiAtIFRyeSB0byB1c2UgYmFzaCBvciBrc2ggcmVnYXJkbGVzcyBvZiBmdW5jdGlvbmFsaXR5IG9mIC9iaW4vc2gKIC0gRml4IGNvbmZpZ3VyZSBpbmNvbXBhdGliaWxpdHkgd2l0aCBOZXRCU0Qgc2gKQEAgLTE2Miw3ICsxNzAsNyBAQAogLSBDb3JyZWN0IGVtYWlsIGFkZHJlc3MgaW4gY29uZmlndXJlIGZvciBzeXN0ZW0gb3B0aW9ucwogLSBVcGRhdGUgbWFrZV92bXMuY29tIGFuZCBhZGQgbWFrZV92bXMuY29tIHRvIGNvbnRyaWIvbWluaXppcCBbWmluc2VyXQogLSBVcGRhdGUgemxpYi5tYXAgW0Jyb3duXQotLSBGaXggTWFrZWZpbGUuaW4gZm9yIFNvbGFyaXMgMTAgbWFrZSBvZiBleGFtcGxlNjQgYW5kIG1pbml6aXA2NCBbVJpymmtdCistIEZpeCBNYWtlZmlsZS5pbiBmb3IgU29sYXJpcyAxMCBtYWtlIG9mIGV4YW1wbGU2NCBhbmQgbWluaXppcDY0IFtUb3Jva10KIC0gQXBwbHkgdmFyaW91cyBmaXhlcyB0byBDTWFrZUxpc3RzLnR4dCBbTG93bWFuXQogLSBBZGQgY2hlY2tzIG9uIGxlbiBpbiBnenJlYWQoKSBhbmQgZ3p3cml0ZSgpCiAtIEFkZCBlcnJvciBtZXNzYWdlIGZvciBubyBtb3JlIHJvb20gZm9yIGd6dW5nZXRjKCkKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggZjkzMmQ5Zi4uMDBlMTA5ZiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTI1LDE0ICsyNSwxNCBAQAogIyAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcwogCiBTRkxBR1M9LU8KLQorTERGTEFHUz0KIFRFU1RfTERGTEFHUz0tTC4gbGliei5hCiBMRFNIQVJFRD0kKENDKQogQ1BQPSQoQ0MpIC1FCiAKIFNUQVRJQ0xJQj1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjQuNAorU0hBUkVETElCVj1saWJ6LnNvLjEuMi40LjUKIFNIQVJFRExJQk09bGliei5zby4xCiBMSUJTPSQoU1RBVElDTElCKSAkKFNIQVJFRExJQlYpCiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogLlNVRkZJWEVTOiAubG8KIAogLmMubG86Ci0JLUBpZiBbICEgLWQgb2JqcyBdOyB0aGVuIG1rZGlyIG9ianM7IGZpCisJLUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcwogCSQoQ0MpICQoU0ZMQUdTKSAtRFBJQyAtYyAtbyBvYmpzLyQqLm8gJDwKIAktQG12IG9ianMvJCoubyAkQAogCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggZDkwOWJhNi4uMDQ5Yjg3MyAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw2ICsxLDYgQEAKIFpMSUIgREFUQSBDT01QUkVTU0lPTiBMSUJSQVJZCiAKLXpsaWIgMS4yLjQuNCBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKK3psaWIgMS4yLjQuNSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzCiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpCkBAIC0zMSw3ICszMSw3IEBACiBpc3N1ZSBvZiBEci4gIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0CiBodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLyAuCiAKLVRoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuNC40IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KK1RoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuNC41IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGU3MjljNmMuLjAzNDRlYjQgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTE0LDcgKzE0LDcgQEAKICMgYW4gZXJyb3IuCiAKIGlmIFsgLW4gIiR7Q0hPU1R9IiBdOyB0aGVuCi0gICAgdW5hbWU9IiQoZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzLy4qLS4qLVwoLipcKS0uKiQvXDEvJyAtZSAncy8uKi1cKC4qXCktLiovXDEvJyAtZSAncy8uKi1cKC4qXCkkL1wxLycpIgorICAgIHVuYW1lPSIkKGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJykiCiAgICAgQ1JPU1NfUFJFRklYPSIke0NIT1NUfS0iCiBmaQogCkBAIC00OSw2ICs0OSw3IEBACiBwcmVmaXg9JHtwcmVmaXgtL3Vzci9sb2NhbH0KIGV4ZWNfcHJlZml4PSR7ZXhlY19wcmVmaXgtJyR7cHJlZml4fSd9CiBsaWJkaXI9JHtsaWJkaXItJyR7ZXhlY19wcmVmaXh9L2xpYid9CitzaGFyZWRsaWJkaXI9JHtzaGFyZWRsaWJkaXItJyR7ZXhlY19wcmVmaXh9L2xpYid9CiBpbmNsdWRlZGlyPSR7aW5jbHVkZWRpci0nJHtwcmVmaXh9L2luY2x1ZGUnfQogbWFuZGlyPSR7bWFuZGlyLScke3ByZWZpeH0vc2hhcmUvbWFuJ30KIHNoYXJlZF9leHQ9Jy5zbycKQEAgLTE0Nyw2ICsxNDgsNyBAQAogZWxzZQogICAjIGZpbmQgc3lzdGVtIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcgY2Mgb3B0aW9ucwogICBDQz0ke0NDLWNjfQorICBnY2M9MAogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKQEAgLTUwNCwyMSArNTA2LDI2IEBACiAgIGZpCiBmaQogCi1jYXQgPiAkdGVzdC5jIDw8RU9GCi1pbnQgZm9vIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKK2lmIHRlc3QgIiRnY2MiIC1lcSAxOyB0aGVuCisgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKyNlbHNlCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2VuZGlmCitpbnQgWkxJQl9JTlRFUk5BTCBmb287CiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAwOwogfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAtZnZpc2liaWxpdHk9aGlkZGVuICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mdmlzaWJpbGl0eT1oaWRkZW4iCi0gIFNGTEFHUz0iJFNGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgotICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKLWVsc2UKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fVklaIgotICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCi0gIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBOby4iCisgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKKyAgZWxzZQorICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX1ZJWiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIKKyAgZmkKIGZpCiAKIENQUD0ke0NQUC0iJENDIC1FIn0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGVscGhpL1pMaWIucGFzIGIvY29udHJpYi9kZWxwaGkvWkxpYi5wYXMKaW5kZXggYzEwOTRjNi4uMDQ5NmVlNCAxMDA2NDQKLS0tIGEvY29udHJpYi9kZWxwaGkvWkxpYi5wYXMKKysrIGIvY29udHJpYi9kZWxwaGkvWkxpYi5wYXMKQEAgLTE1Miw3ICsxNTIsNyBAQAogICBjb25zdCBPdXRCdWY6IFBvaW50ZXI7IEJ1ZlNpemU6IEludGVnZXIpOwogCiBjb25zdAotICB6bGliX3ZlcnNpb24gPSAnMS4yLjQuNCc7CisgIHpsaWJfdmVyc2lvbiA9ICcxLjIuNC41JzsKIAogdHlwZQogICBFWmxpYkVycm9yID0gY2xhc3MoRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL1VuaXRUZXN0cy5jcyBiL2NvbnRyaWIvZG90emxpYi9Eb3RaTGliL1VuaXRUZXN0cy5jcwppbmRleCBmZTEwNjFmLi40NTMxNDA4IDEwMDY0NAotLS0gYS9jb250cmliL2RvdHpsaWIvRG90WkxpYi9Vbml0VGVzdHMuY3MKKysrIGIvY29udHJpYi9kb3R6bGliL0RvdFpMaWIvVW5pdFRlc3RzLmNzCkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgICAgcHVibGljIHZvaWQgSW5mb19WZXJzaW9uKCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBJbmZvIGluZm8gPSBuZXcgSW5mbygpOw0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiMS4yLjQuNCIsIEluZm8uVmVyc2lvbik7DQorICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCIxLjIuNC41IiwgSW5mby5WZXJzaW9uKTsNCiAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMzIsIGluZm8uU2l6ZU9mVUludCk7DQogICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDMyLCBpbmZvLlNpemVPZlVMb25nKTsNCiAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMzIsIGluZm8uU2l6ZU9mUG9pbnRlcik7DQpkaWZmIC0tZ2l0IGEvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5jIGIvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5jCmluZGV4IDE4NDdkMjIuLmMwMWNjMWUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvaW5mYmFjazkvaW5mdHJlZTkuYworKysgYi9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmMKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlOV9jb3B5cmlnaHRbXSA9Ci0gICAiIGluZmxhdGU5IDEuMi40LjQgQ29weXJpZ2h0IDE5OTUtMjAxMCBNYXJrIEFkbGVyICI7CisgICAiIGluZmxhdGU5IDEuMi40LjUgQ29weXJpZ2h0IDE5OTUtMjAxMCBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTY0LDcgKzY0LDcgQEAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI5LCAxMjksIDEyOSwgMTI5LAogICAgICAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMyLCAxMzIsIDEzMiwgMTMyLAotICAgICAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDE0NCwgNzQsIDY1fTsKKyAgICAgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxNDQsIDc1LCA3NX07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMzEgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksCiAgICAgICAgIDY1LCA5NywgMTI5LCAxOTMsIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzIGIvY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMKaW5kZXggMGIyMTUzZC4uMmJiZjk1NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMKKysrIGIvY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMKQEAgLTEwLDcgKzEwLDcgQEAKIGludGVyZmFjZQogCiBjb25zdAotICBaTElCX1ZFUlNJT04gPSAnMS4yLjQuNCc7CisgIFpMSUJfVkVSU0lPTiA9ICcxLjIuNC41JzsKIAogdHlwZQogICBhbGxvY19mdW5jID0gZnVuY3Rpb24ob3BhcXVlOiBQb2ludGVyOyBpdGVtcywgc2l6ZTogSW50ZWdlcik6IFBvaW50ZXI7CmRpZmYgLS1naXQgYS9jb250cmliL3ZzdHVkaW8vdmMxMC96bGliLnJjIGIvY29udHJpYi92c3R1ZGlvL3ZjMTAvemxpYi5yYwppbmRleCA2MTI3MTQzLi5iMjE5NmQ5IDEwMDY0NAotLS0gYS9jb250cmliL3ZzdHVkaW8vdmMxMC96bGliLnJjCisrKyBiL2NvbnRyaWIvdnN0dWRpby92YzEwL3psaWIucmMKQEAgLTIsOCArMiw4IEBACiANCiAjZGVmaW5lIElEUl9WRVJTSU9OMSAgMQ0KIElEUl9WRVJTSU9OMQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQ0KLSAgRklMRVZFUlNJT04JIDEsMiw0LDQNCi0gIFBST0RVQ1RWRVJTSU9OIDEsMiw0LDQNCisgIEZJTEVWRVJTSU9OCSAxLDIsNCw1DQorICBQUk9EVUNUVkVSU0lPTiAxLDIsNCw1DQogICBGSUxFRkxBR1NNQVNLCVZTX0ZGSV9GSUxFRkxBR1NNQVNLDQogICBGSUxFRkxBR1MJMA0KICAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyDQpAQCAtMTcsNyArMTcsNyBAQAogDQogICAgIEJFR0lODQogICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJ6bGliIGRhdGEgY29tcHJlc3Npb24gYW5kIFpJUCBmaWxlIEkvTyBsaWJyYXJ5XDAiDQotICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwJIjEuMi40LjRcMCINCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjQuNVwwIg0KICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLAkiemxpYlwwIg0KICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJInpsaWIuZGxsXDAiDQogICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJIlpMaWIuRExMXDAiDQpkaWZmIC0tZ2l0IGEvY29udHJpYi92c3R1ZGlvL3ZjOS96bGliLnJjIGIvY29udHJpYi92c3R1ZGlvL3ZjOS96bGliLnJjCmluZGV4IDYxMjcxNDMuLmIyMTk2ZDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdnN0dWRpby92YzkvemxpYi5yYworKysgYi9jb250cmliL3ZzdHVkaW8vdmM5L3psaWIucmMKQEAgLTIsOCArMiw4IEBACiANCiAjZGVmaW5lIElEUl9WRVJTSU9OMSAgMQ0KIElEUl9WRVJTSU9OMQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQ0KLSAgRklMRVZFUlNJT04JIDEsMiw0LDQNCi0gIFBST0RVQ1RWRVJTSU9OIDEsMiw0LDQNCisgIEZJTEVWRVJTSU9OCSAxLDIsNCw1DQorICBQUk9EVUNUVkVSU0lPTiAxLDIsNCw1DQogICBGSUxFRkxBR1NNQVNLCVZTX0ZGSV9GSUxFRkxBR1NNQVNLDQogICBGSUxFRkxBR1MJMA0KICAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyDQpAQCAtMTcsNyArMTcsNyBAQAogDQogICAgIEJFR0lODQogICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJ6bGliIGRhdGEgY29tcHJlc3Npb24gYW5kIFpJUCBmaWxlIEkvTyBsaWJyYXJ5XDAiDQotICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwJIjEuMi40LjRcMCINCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjQuNVwwIg0KICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLAkiemxpYlwwIg0KICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJInpsaWIuZGxsXDAiDQogICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwJIlpMaWIuRExMXDAiDQpkaWZmIC0tZ2l0IGEvZGVmbGF0ZS5jIGIvZGVmbGF0ZS5jCmluZGV4IGI0ZWQ0OWQuLjlkNDY3YjcgMTAwNjQ0Ci0tLSBhL2RlZmxhdGUuYworKysgYi9kZWZsYXRlLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJkZWZsYXRlLmgiCiAKIGNvbnN0IGNoYXIgZGVmbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGRlZmxhdGUgMS4yLjQuNCBDb3B5cmlnaHQgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKKyAgICIgZGVmbGF0ZSAxLjIuNC41IENvcHlyaWdodCAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CmRpZmYgLS1naXQgYS9kZWZsYXRlLmggYi9kZWZsYXRlLmgKaW5kZXggZjUzZGViYS4uMDFjYzliNCAxMDA2NDQKLS0tIGEvZGVmbGF0ZS5oCisrKyBiL2RlZmxhdGUuaApAQCAtMjkwLDEzICsyOTAsMTMgQEAKICAgIG1lbW9yeSBjaGVja2VyIGVycm9ycyBmcm9tIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgKi8KIAogICAgICAgICAvKiBpbiB0cmVlcy5jICovCi12b2lkIF90cl9pbml0ICAgICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWludCAgX3RyX3RhbGx5ICAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKLXZvaWQgX3RyX2ZsdXNoX2Jsb2NrICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwgdWxnIHN0b3JlZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0KSk7Ci12b2lkIF90cl9hbGlnbiAgICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLXZvaWQgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwgdWxnIHN0b3JlZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0KSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2luaXQgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2ludCBaTElCX0lOVEVSTkFMIF90cl90YWxseSBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24gT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfc3RvcmVkX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHN0b3JlZF9sZW4sIGludCBsYXN0KSk7CiAKICNkZWZpbmUgZF9jb2RlKGRpc3QpIFwKICAgICgoZGlzdCkgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYrKChkaXN0KT4+NyldKQpAQCAtMzA5LDExICszMDksMTEgQEAKIC8qIElubGluZSB2ZXJzaW9ucyBvZiBfdHJfdGFsbHkgZm9yIHNwZWVkOiAqLwogCiAjaWYgZGVmaW5lZChHRU5fVFJFRVNfSCkgfHwgIWRlZmluZWQoU1REQykKLSAgZXh0ZXJuIHVjaCBfbGVuZ3RoX2NvZGVbXTsKLSAgZXh0ZXJuIHVjaCBfZGlzdF9jb2RlW107CisgIGV4dGVybiB1Y2ggWkxJQl9JTlRFUk5BTCBfbGVuZ3RoX2NvZGVbXTsKKyAgZXh0ZXJuIHVjaCBaTElCX0lOVEVSTkFMIF9kaXN0X2NvZGVbXTsKICNlbHNlCi0gIGV4dGVybiBjb25zdCB1Y2ggX2xlbmd0aF9jb2RlW107Ci0gIGV4dGVybiBjb25zdCB1Y2ggX2Rpc3RfY29kZVtdOworICBleHRlcm4gY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2xlbmd0aF9jb2RlW107CisgIGV4dGVybiBjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2RlW107CiAjZW5kaWYKIAogIyBkZWZpbmUgX3RyX3RhbGx5X2xpdChzLCBjLCBmbHVzaCkgXApkaWZmIC0tZ2l0IGEvZ3pndXRzLmggYi9nemd1dHMuaAppbmRleCBiMGE0Y2JkLi4wZjhmYjc5IDEwMDY0NAotLS0gYS9nemd1dHMuaAorKysgYi9nemd1dHMuaApAQCAtMTIsNyArMTIsMTEgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBaTElCX0lOVEVSTkFMCisjaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKyNlbHNlCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInpsaWIuaCIKQEAgLTExMiw5ICsxMTYsOSBAQAogdHlwZWRlZiBnel9zdGF0ZSBGQVIgKmd6X3N0YXRlcDsKIAogLyogc2hhcmVkIGZ1bmN0aW9ucyAqLwotWkVYVEVSTiB2b2lkIFpFWFBPUlQgZ3pfZXJyb3IgT0YoKGd6X3N0YXRlcCwgaW50LCBjb25zdCBjaGFyICopKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBnel9lcnJvciBPRigoZ3pfc3RhdGVwLCBpbnQsIGNvbnN0IGNoYXIgKikpOwogI2lmIGRlZmluZWQgVU5ERVJfQ0UKLVpFWFRFUk4gY2hhciBaRVhQT1JUICpnel9zdHJ3aW5lcnJvciBPRigoRFdPUkQgZXJyb3IpKTsKK2NoYXIgWkxJQl9JTlRFUk5BTCAqZ3pfc3Ryd2luZXJyb3IgT0YoKERXT1JEIGVycm9yKSk7CiAjZW5kaWYKIAogLyogR1RfT0ZGKHgpLCB3aGVyZSB4IGlzIGFuIHVuc2lnbmVkIHZhbHVlLCBpcyB0cnVlIGlmIHggPiBtYXhpbXVtIHpfb2ZmNjRfdApAQCAtMTIzLDYgKzEyNyw2IEBACiAjaWZkZWYgSU5UX01BWAogIyAgZGVmaW5lIEdUX09GRih4KSAoc2l6ZW9mKGludCkgPT0gc2l6ZW9mKHpfb2ZmNjRfdCkgJiYgKHgpID4gSU5UX01BWCkKICNlbHNlCi1aRVhURVJOIHVuc2lnbmVkIFpFWFBPUlQgZ3pfaW50bWF4IE9GKCh2b2lkKSk7Cit1bnNpZ25lZCBaTElCX0lOVEVSTkFMIGd6X2ludG1heCBPRigodm9pZCkpOwogIyAgZGVmaW5lIEdUX09GRih4KSAoc2l6ZW9mKGludCkgPT0gc2l6ZW9mKHpfb2ZmNjRfdCkgJiYgKHgpID4gZ3pfaW50bWF4KCkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2d6bGliLmMgYi9nemxpYi5jCmluZGV4IDE4MzkwMDIuLjYwM2U2MGUgMTAwNjQ0Ci0tLSBhL2d6bGliLmMKKysrIGIvZ3psaWIuYwpAQCAtMjYsNyArMjYsNyBAQAogCiAgICBUaGUgZ3pfc3Ryd2luZXJyb3IgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IHNldHRpbmcgb2YKICAgIEdldExhc3RFcnJvci4gKi8KLWNoYXIgWkVYUE9SVCAqZ3pfc3Ryd2luZXJyb3IgKGVycm9yKQorY2hhciBaTElCX0lOVEVSTkFMICpnel9zdHJ3aW5lcnJvciAoZXJyb3IpCiAgICAgIERXT1JEIGVycm9yOwogewogICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMDI0XTsKQEAgLTQ4Miw3ICs0ODIsNyBAQAogICAgbWVtb3J5KS4gIFNpbXBseSBzYXZlIHRoZSBlcnJvciBtZXNzYWdlIGFzIGEgc3RhdGljIHN0cmluZy4gIElmIHRoZXJlIGlzIGFuCiAgICBhbGxvY2F0aW9uIGZhaWx1cmUgY29uc3RydWN0aW5nIHRoZSBlcnJvciBtZXNzYWdlLCB0aGVuIGNvbnZlcnQgdGhlIGVycm9yIHRvCiAgICBvdXQgb2YgbWVtb3J5LiAqLwotdm9pZCBaRVhQT1JUIGd6X2Vycm9yKHN0YXRlLCBlcnIsIG1zZykKK3ZvaWQgWkxJQl9JTlRFUk5BTCBnel9lcnJvcihzdGF0ZSwgZXJyLCBtc2cpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIGludCBlcnI7CiAgICAgY29uc3QgY2hhciAqbXNnOwpAQCAtNTIyLDcgKzUyMiw3IEBACiAgICBhdmFpbGFibGUpIC0tIHdlIG5lZWQgdG8gZG8gdGhpcyB0byBjb3ZlciBjYXNlcyB3aGVyZSAyJ3MgY29tcGxlbWVudCBub3QKICAgIHVzZWQsIHNpbmNlIEMgc3RhbmRhcmQgcGVybWl0cyAxJ3MgY29tcGxlbWVudCBhbmQgc2lnbi1iaXQgcmVwcmVzZW50YXRpb25zLAogICAgb3RoZXJ3aXNlIHdlIGNvdWxkIGp1c3QgdXNlICgodW5zaWduZWQpLTEpID4+IDEgKi8KLXVuc2lnbmVkIFpFWFBPUlQgZ3pfaW50bWF4KCkKK3Vuc2lnbmVkIFpMSUJfSU5URVJOQUwgZ3pfaW50bWF4KCkKIHsKICAgICB1bnNpZ25lZCBwLCBxOwogCmRpZmYgLS1naXQgYS9pbmZmYXN0LmMgYi9pbmZmYXN0LmMKaW5kZXggMGEwNzYxZi4uNmMyYzM2MSAxMDA2NDQKLS0tIGEvaW5mZmFzdC5jCisrKyBiL2luZmZhc3QuYwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgcmVxdWlyZXMgc3RybS0+YXZhaWxfb3V0ID49IDI1OCBmb3IgZWFjaCBsb29wIHRvIGF2b2lkIGNoZWNraW5nIGZvcgogICAgICAgb3V0cHV0IHNwYWNlLgogICovCi12b2lkIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkKK3ZvaWQgWkxJQl9JTlRFUk5BTCBpbmZsYXRlX2Zhc3Qoc3RybSwgc3RhcnQpCiB6X3N0cmVhbXAgc3RybTsKIHVuc2lnbmVkIHN0YXJ0OyAgICAgICAgIC8qIGluZmxhdGUoKSdzIHN0YXJ0aW5nIHZhbHVlIGZvciBzdHJtLT5hdmFpbF9vdXQgKi8KIHsKZGlmZiAtLWdpdCBhL2luZmZhc3QuaCBiL2luZmZhc3QuaAppbmRleCAxZTg4ZDJkLi4xOTFlNWU3IDEwMDY0NAotLS0gYS9pbmZmYXN0LmgKKysrIGIvaW5mZmFzdC5oCkBAIC04LDQgKzgsNCBAQAogICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICovCiAKLXZvaWQgaW5mbGF0ZV9mYXN0IE9GKCh6X3N0cmVhbXAgc3RybSwgdW5zaWduZWQgc3RhcnQpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBpbmZsYXRlX2Zhc3QgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBzdGFydCkpOwpkaWZmIC0tZ2l0IGEvaW5mdHJlZXMuYyBiL2luZnRyZWVzLmMKaW5kZXggZWQzMjYzMi4uN2FmZTY2NSAxMDA2NDQKLS0tIGEvaW5mdHJlZXMuYworKysgYi9pbmZ0cmVlcy5jCkBAIC05LDcgKzksNyBAQAogI2RlZmluZSBNQVhCSVRTIDE1CiAKIGNvbnN0IGNoYXIgaW5mbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGluZmxhdGUgMS4yLjQuNCBDb3B5cmlnaHQgMTk5NS0yMDEwIE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjIuNC41IENvcHlyaWdodCAxOTk1LTIwMTAgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CkBAIC0yOSw3ICsyOSw3IEBACiAgICB0YWJsZSBpbmRleCBiaXRzLiAgSXQgd2lsbCBkaWZmZXIgaWYgdGhlIHJlcXVlc3QgaXMgZ3JlYXRlciB0aGFuIHRoZQogICAgbG9uZ2VzdCBjb2RlIG9yIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgc2hvcnRlc3QgY29kZS4KICAqLwotaW50IGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgY29kZXMsIHRhYmxlLCBiaXRzLCB3b3JrKQoraW50IFpMSUJfSU5URVJOQUwgaW5mbGF0ZV90YWJsZSh0eXBlLCBsZW5zLCBjb2RlcywgdGFibGUsIGJpdHMsIHdvcmspCiBjb2RldHlwZSB0eXBlOwogdW5zaWduZWQgc2hvcnQgRkFSICpsZW5zOwogdW5zaWduZWQgY29kZXM7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogICAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwKLSAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDc0LCA2NX07CisgICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3NSwgNzV9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYmFzZVszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGJhc2UgKi8KICAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLAogICAgICAgICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCmRpZmYgLS1naXQgYS9pbmZ0cmVlcy5oIGIvaW5mdHJlZXMuaAppbmRleCA2NzQ2MWRhLi4zMWE2MDliIDEwMDY0NAotLS0gYS9pbmZ0cmVlcy5oCisrKyBiL2luZnRyZWVzLmgKQEAgLTU3LDYgKzU3LDYgQEAKICAgICBESVNUUwogfSBjb2RldHlwZTsKIAotZXh0ZXJuIGludCBpbmZsYXRlX3RhYmxlIE9GKChjb2RldHlwZSB0eXBlLCB1bnNpZ25lZCBzaG9ydCBGQVIgKmxlbnMsCitpbnQgWkxJQl9JTlRFUk5BTCBpbmZsYXRlX3RhYmxlIE9GKChjb2RldHlwZSB0eXBlLCB1bnNpZ25lZCBzaG9ydCBGQVIgKmxlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVzLCBjb2RlIEZBUiAqIEZBUiAqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIEZBUiAqYml0cywgdW5zaWduZWQgc2hvcnQgRkFSICp3b3JrKSk7CmRpZmYgLS1naXQgYS9xbngvcGFja2FnZS5xcGcgYi9xbngvcGFja2FnZS5xcGcKaW5kZXggNGVlM2FkMy4uMmNmOWJiOSAxMDA2NDQKLS0tIGEvcW54L3BhY2thZ2UucXBnCisrKyBiL3FueC9wYWNrYWdlLnFwZwpAQCAtMjUsMTAgKzI1LDEwIEBACiAgICAgICA8UVBHOkZpbGVzPgogICAgICAgICAgPFFQRzpBZGQgZmlsZT0iLi4vemNvbmYuaCIgaW5zdGFsbD0iL29wdC9pbmNsdWRlLyIgdXNlcj0icm9vdDpzeXMiIHBlcm1pc3Npb249IjY0NCIvPgogICAgICAgICAgPFFQRzpBZGQgZmlsZT0iLi4vemxpYi5oIiBpbnN0YWxsPSIvb3B0L2luY2x1ZGUvIiB1c2VyPSJyb290OnN5cyIgcGVybWlzc2lvbj0iNjQ0Ii8+Ci0gICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi9saWJ6LnNvLjEuMi40LjQiIGluc3RhbGw9Ii9vcHQvbGliLyIgdXNlcj0icm9vdDpiaW4iIHBlcm1pc3Npb249IjY0NCIvPgotICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zbyIgaW5zdGFsbD0iL29wdC9saWIvIiBjb21wb25lbnQ9ImRldiIgZmlsZXR5cGU9InN5bWxpbmsiIGxpbmt0bz0ibGliei5zby4xLjIuNC40Ii8+Ci0gICAgICAgICA8UVBHOkFkZCBmaWxlPSJsaWJ6LnNvLjEiIGluc3RhbGw9Ii9vcHQvbGliLyIgZmlsZXR5cGU9InN5bWxpbmsiIGxpbmt0bz0ibGliei5zby4xLjIuNC40Ii8+Ci0gICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi9saWJ6LnNvLjEuMi40LjQiIGluc3RhbGw9Ii9vcHQvbGliLyIgY29tcG9uZW50PSJzbGliIi8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi9saWJ6LnNvLjEuMi40LjUiIGluc3RhbGw9Ii9vcHQvbGliLyIgdXNlcj0icm9vdDpiaW4iIHBlcm1pc3Npb249IjY0NCIvPgorICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zbyIgaW5zdGFsbD0iL29wdC9saWIvIiBjb21wb25lbnQ9ImRldiIgZmlsZXR5cGU9InN5bWxpbmsiIGxpbmt0bz0ibGliei5zby4xLjIuNC41Ii8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSJsaWJ6LnNvLjEiIGluc3RhbGw9Ii9vcHQvbGliLyIgZmlsZXR5cGU9InN5bWxpbmsiIGxpbmt0bz0ibGliei5zby4xLjIuNC41Ii8+CisgICAgICAgICA8UVBHOkFkZCBmaWxlPSIuLi9saWJ6LnNvLjEuMi40LjUiIGluc3RhbGw9Ii9vcHQvbGliLyIgY29tcG9uZW50PSJzbGliIi8+CiAgICAgICA8L1FQRzpGaWxlcz4KIAogICAgICAgPFFQRzpQYWNrYWdlRmlsdGVyPgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgPC9RUE06UHJvZHVjdERlc2NyaXB0aW9uPgogCiAgICAgICAgICAgICA8UVBNOlJlbGVhc2VEZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgIDxRUE06UmVsZWFzZVZlcnNpb24+MS4yLjQuNDwvUVBNOlJlbGVhc2VWZXJzaW9uPgorICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlVmVyc2lvbj4xLjIuNC41PC9RUE06UmVsZWFzZVZlcnNpb24+CiAgICAgICAgICAgICAgICA8UVBNOlJlbGVhc2VVcmdlbmN5Pk1lZGl1bTwvUVBNOlJlbGVhc2VVcmdlbmN5PgogICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlU3RhYmlsaXR5PlN0YWJsZTwvUVBNOlJlbGVhc2VTdGFiaWxpdHk+CiAgICAgICAgICAgICAgICA8UVBNOlJlbGVhc2VOb3RlTWlub3I+PC9RUE06UmVsZWFzZU5vdGVNaW5vcj4KZGlmZiAtLWdpdCBhL3RyZWVidWlsZC54bWwgYi90cmVlYnVpbGQueG1sCmluZGV4IDkzNDQ0MmYuLmY5Njc1N2YgMTAwNjQ0Ci0tLSBhL3RyZWVidWlsZC54bWwKKysrIGIvdHJlZWJ1aWxkLnhtbApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTxwYWNrYWdlIG5hbWU9InpsaWIiIHZlcnNpb249IjEuMi40LjQiPgotICAgIDxsaWJyYXJ5IG5hbWU9InpsaWIiIGRsdmVyc2lvbj0iMS4yLjQuNCIgZGxuYW1lPSJ6Ij4KKzxwYWNrYWdlIG5hbWU9InpsaWIiIHZlcnNpb249IjEuMi40LjUiPgorICAgIDxsaWJyYXJ5IG5hbWU9InpsaWIiIGRsdmVyc2lvbj0iMS4yLjQuNSIgZGxuYW1lPSJ6Ij4KIAk8cHJvcGVydHkgbmFtZT0iZGVzY3JpcHRpb24iPiB6aXAgY29tcHJlc3Npb24gbGlicmFyeSA8L3Byb3BlcnR5PgogCTxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlLXRhcmdldC1kaXIiIHZhbHVlPSIkKEBQQUNLQUdFL2luc3RhbGwtaW5jbHVkZWRpcikiIC8+CiAKZGlmZiAtLWdpdCBhL3RyZWVzLmMgYi90cmVlcy5jCmluZGV4IDFhNmU5OTcuLjQyMzM0MGMgMTAwNjQ0Ci0tLSBhL3RyZWVzLmMKKysrIGIvdHJlZXMuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEluaXRpYWxpemUgdGhlIHRyZWUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbS4KICAqLwotdm9pZCBfdHJfaW5pdChzKQordm9pZCBaTElCX0lOVEVSTkFMIF90cl9pbml0KHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKICAgICB0cl9zdGF0aWNfaW5pdCgpOwpAQCAtODY3LDcgKzg2Nyw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFNlbmQgYSBzdG9yZWQgYmxvY2sKICAqLwotdm9pZCBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGNoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrICovCiAgICAgdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCkBAIC04OTIsNyArODkyLDcgQEAKICAqIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugb2YgbGFzdCByZWFsIGNvZGUgZW5jb2RlZAogICogb24gb25lIGJpdCBvbmx5LgogICovCi12b2lkIF90cl9hbGlnbihzKQordm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbihzKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiB7CiAgICAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUzw8MSwgMyk7CkBAIC05MjEsNyArOTIxLDcgQEAKICAqIERldGVybWluZSB0aGUgYmVzdCBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgYmxvY2s6IGR5bmFtaWMgdHJlZXMsIHN0YXRpYwogICogdHJlZXMgb3Igc3RvcmUsIGFuZCBvdXRwdXQgdGhlIGVuY29kZWQgYmxvY2sgdG8gdGhlIHppcCBmaWxlLgogICovCi12b2lkIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGNoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrLCBvciBOVUxMIGlmIHRvbyBvbGQgKi8KICAgICB1bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KQEAgLTEwMjIsNyArMTAyMiw3IEBACiAgKiBTYXZlIHRoZSBtYXRjaCBpbmZvIGFuZCB0YWxseSB0aGUgZnJlcXVlbmN5IGNvdW50cy4gUmV0dXJuIHRydWUgaWYKICAqIHRoZSBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZC4KICAqLwotaW50IF90cl90YWxseSAocywgZGlzdCwgbGMpCitpbnQgWkxJQl9JTlRFUk5BTCBfdHJfdGFsbHkgKHMsIGRpc3QsIGxjKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgdW5zaWduZWQgZGlzdDsgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3RyaW5nICovCiAgICAgdW5zaWduZWQgbGM7ICAgIC8qIG1hdGNoIGxlbmd0aC1NSU5fTUFUQ0ggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3Q9PTApICovCmRpZmYgLS1naXQgYS90cmVlcy5oIGIvdHJlZXMuaAppbmRleCA3MmZhY2Y5Li5kMzU2MzlkIDEwMDY0NAotLS0gYS90cmVlcy5oCisrKyBiL3RyZWVzLmgKQEAgLTcwLDcgKzcwLDcgQEAKIHt7MTl9LHsgNX19LCB7ezExfSx7IDV9fSwge3syN30seyA1fX0sIHt7IDd9LHsgNX19LCB7ezIzfSx7IDV9fQogfTsKIAotY29uc3QgdWNoIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0gPSB7Citjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2RlW0RJU1RfQ09ERV9MRU5dID0gewogIDAsICAxLCAgMiwgIDMsICA0LCAgNCwgIDUsICA1LCAgNiwgIDYsICA2LCAgNiwgIDcsICA3LCAgNywgIDcsICA4LCAgOCwgIDgsICA4LAogIDgsICA4LCAgOCwgIDgsICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAogMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLApAQCAtOTksNyArOTksNyBAQAogMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOQogfTsKIAotY29uc3QgdWNoIF9sZW5ndGhfY29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdPSB7Citjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfbGVuZ3RoX2NvZGVbTUFYX01BVENILU1JTl9NQVRDSCsxXT0gewogIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDgsICA5LCAgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTIsIDEyLAogMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAogMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LApkaWZmIC0tZ2l0IGEvd2luMzIvTWFrZWZpbGUuZ2NjIGIvd2luMzIvTWFrZWZpbGUuZ2NjCmluZGV4IDkzYzIwN2QuLjMzMzNjMDEgMTAwNjQ0Ci0tLSBhL3dpbjMyL01ha2VmaWxlLmdjYworKysgYi93aW4zMi9NYWtlZmlsZS5nY2MKQEAgLTExNiwxMyArMTE2LDEzIEBACiAuUEhPTlk6IGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuCiAKIGluc3RhbGw6IHpsaWIuaCB6Y29uZi5oICQoU1RBVElDTElCKSAkKElNUExJQikKKwktQG1rZGlyIC1wICQoSU5DTFVERV9QQVRIKQorCS1AbWtkaXIgLXAgJChMSUJSQVJZX1BBVEgpCiAJLWlmIFsgIiQoU0hBUkVEX01PREUpIiA9ICIxIiBdOyB0aGVuIFwKIAkJbWtkaXIgLXAgJChCSU5BUllfUEFUSCk7IFwKIAkJJChJTlNUQUxMKSAkKFNIQVJFRExJQikgJChCSU5BUllfUEFUSCk7IFwKIAkJJChJTlNUQUxMKSAkKElNUExJQikgJChMSUJSQVJZX1BBVEgpOyBcCiAJZmkKLQktQG1rZGlyIC1wICQoSU5DTFVERV9QQVRIKQotCS1AbWtkaXIgLXAgJChMSUJSQVJZX1BBVEgpCiAJLSQoSU5TVEFMTCkgemxpYi5oICQoSU5DTFVERV9QQVRIKQogCS0kKElOU1RBTEwpIHpjb25mLmggJChJTkNMVURFX1BBVEgpCiAJLSQoSU5TVEFMTCkgJChTVEFUSUNMSUIpICQoTElCUkFSWV9QQVRIKQpkaWZmIC0tZ2l0IGEvemNvbmYuaCBiL3pjb25mLmgKaW5kZXggZjVhNmM4Ny4uMDJjZTU2YyAxMDA2NDQKLS0tIGEvemNvbmYuaAorKysgYi96Y29uZi5oCkBAIC0zMTUsMTAgKzMxNSw2IEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgTk9fVklaCi0jICBkZWZpbmUgWkVYVEVSTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkgZXh0ZXJuCi0jZW5kaWYKLQogI2lmbmRlZiBaRVhURVJOCiAjICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvemNvbmYuaC5jbWFrZWluIGIvemNvbmYuaC5jbWFrZWluCmluZGV4IDE4ZGQ3NzAuLmEyZjcxYjEgMTAwNjQ0Ci0tLSBhL3pjb25mLmguY21ha2VpbgorKysgYi96Y29uZi5oLmNtYWtlaW4KQEAgLTMxNywxMCArMzE3LDYgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBOT19WSVoKLSMgIGRlZmluZSBaRVhURVJOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKSBleHRlcm4KLSNlbmRpZgotCiAjaWZuZGVmIFpFWFRFUk4KICMgIGRlZmluZSBaRVhURVJOIGV4dGVybgogI2VuZGlmCmRpZmYgLS1naXQgYS96Y29uZi5oLmluIGIvemNvbmYuaC5pbgppbmRleCBmNWE2Yzg3Li4wMmNlNTZjIDEwMDY0NAotLS0gYS96Y29uZi5oLmluCisrKyBiL3pjb25mLmguaW4KQEAgLTMxNSwxMCArMzE1LDYgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBOT19WSVoKLSMgIGRlZmluZSBaRVhURVJOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKSBleHRlcm4KLSNlbmRpZgotCiAjaWZuZGVmIFpFWFRFUk4KICMgIGRlZmluZSBaRVhURVJOIGV4dGVybgogI2VuZGlmCmRpZmYgLS1naXQgYS96bGliLjMgYi96bGliLjMKaW5kZXggODU3ZGJkOS4uZmQwOGRlYiAxMDA2NDQKLS0tIGEvemxpYi4zCisrKyBiL3psaWIuMwpAQCAtMTI1LDcgKzEyNSw3IEBACiBTZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBnemlwLm9yZywKIG9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSkuCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuNC40CitWZXJzaW9uIDEuMi40LjUKIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQogYW5kIE1hcmsgQWRsZXIgKG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUpLgogLkxQCmRpZmYgLS1naXQgYS96bGliLjMucGRmIGIvemxpYi4zLnBkZgppbmRleCAzNjRhZWIwLi5mMjUwZTQ1IDEwMDY0NAotLS0gYS96bGliLjMucGRmCisrKyBiL3psaWIuMy5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvemxpYi5oIGIvemxpYi5oCmluZGV4IDY3MGZmZjEuLmE2MTNkZWIgMTAwNjQ0Ci0tLSBhL3psaWIuaAorKysgYi96bGliLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjIuNC40LCBBcHJpbCAxOHRoLCAyMDEwCisgIHZlcnNpb24gMS4yLjQuNSwgQXByaWwgMTh0aCwgMjAxMAogCiAgIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIApAQCAtMzcsMTIgKzM3LDEyIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjQuNCIKLSNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjQ0CisjZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjQuNSIKKyNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjQ1CiAjZGVmaW5lIFpMSUJfVkVSX01BSk9SIDEKICNkZWZpbmUgWkxJQl9WRVJfTUlOT1IgMgogI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA0Ci0jZGVmaW5lIFpMSUJfVkVSX1NVQlJFVklTSU9OIDQKKyNkZWZpbmUgWkxJQl9WRVJfU1VCUkVWSVNJT04gNQogCiAvKgogICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkgY29tcHJlc3Npb24gYW5kCmRpZmYgLS1naXQgYS96dXRpbC5jIGIvenV0aWwuYwppbmRleCA2YmExNmY2Li4zZGI5ZjNkIDEwMDY0NAotLS0gYS96dXRpbC5jCisrKyBiL3p1dGlsLmMKQEAgLTExNyw5ICsxMTcsOSBAQAogIyAgaWZuZGVmIHZlcmJvc2UKICMgICAgZGVmaW5lIHZlcmJvc2UgMAogIyAgZW5kaWYKLWludCB6X3ZlcmJvc2UgPSB2ZXJib3NlOworaW50IFpMSUJfSU5URVJOQUwgel92ZXJib3NlID0gdmVyYm9zZTsKIAotdm9pZCB6X2Vycm9yIChtKQordm9pZCBaTElCX0lOVEVSTkFMIHpfZXJyb3IgKG0pCiAgICAgY2hhciAqbTsKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtKTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAjaWZuZGVmIEhBVkVfTUVNQ1BZCiAKLXZvaWQgem1lbWNweShkZXN0LCBzb3VyY2UsIGxlbikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgbGVuKQogICAgIEJ5dGVmKiBkZXN0OwogICAgIGNvbnN0IEJ5dGVmKiBzb3VyY2U7CiAgICAgdUludCAgbGVuOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgfSB3aGlsZSAoLS1sZW4gIT0gMCk7CiB9CiAKLWludCB6bWVtY21wKHMxLCBzMiwgbGVuKQoraW50IFpMSUJfSU5URVJOQUwgem1lbWNtcChzMSwgczIsIGxlbikKICAgICBjb25zdCBCeXRlZiogczE7CiAgICAgY29uc3QgQnl0ZWYqIHMyOwogICAgIHVJbnQgIGxlbjsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIHJldHVybiAwOwogfQogCi12b2lkIHptZW16ZXJvKGRlc3QsIGxlbikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtemVybyhkZXN0LCBsZW4pCiAgICAgQnl0ZWYqIGRlc3Q7CiAgICAgdUludCAgbGVuOwogewpAQCAtMjEzLDcgKzIxMyw3IEBACiAgKiBhIHByb3RlY3RlZCBzeXN0ZW0gbGlrZSBPUy8yLiBVc2UgTWljcm9zb2Z0IEMgaW5zdGVhZC4KICAqLwogCi12b2lkcGYgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWduZWQgc2l6ZSkKIHsKICAgICB2b2lkcGYgYnVmID0gb3BhcXVlOyAvKiBqdXN0IHRvIG1ha2Ugc29tZSBjb21waWxlcnMgaGFwcHkgKi8KICAgICB1bGcgYnNpemUgPSAodWxnKWl0ZW1zKnNpemU7CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICByZXR1cm4gYnVmOwogfQogCi12b2lkICB6Y2ZyZWUgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQogewogICAgIGludCBuOwogICAgIGlmICgqKHVzaCopJnB0ciAhPSAwKSB7IC8qIG9iamVjdCA8IDY0SyAqLwpAQCAtMjcyLDEzICsyNzIsMTMgQEAKICMgIGRlZmluZSBfaGZyZWUgICBoZnJlZQogI2VuZGlmCiAKLXZvaWRwZiB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpCiB7CiAgICAgaWYgKG9wYXF1ZSkgb3BhcXVlID0gMDsgLyogdG8gbWFrZSBjb21waWxlciBoYXBweSAqLwogICAgIHJldHVybiBfaGFsbG9jKChsb25nKWl0ZW1zLCBzaXplKTsKIH0KIAotdm9pZCAgemNmcmVlICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQordm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKIHsKICAgICBpZiAob3BhcXVlKSBvcGFxdWUgPSAwOyAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCiAgICAgX2hmcmVlKHB0cik7CkBAIC0yOTcsNyArMjk3LDcgQEAKIGV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7CiAjZW5kaWYKIAotdm9pZHBmIHpjYWxsb2MgKG9wYXF1ZSwgaXRlbXMsIHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIChvcGFxdWUsIGl0ZW1zLCBzaXplKQogICAgIHZvaWRwZiBvcGFxdWU7CiAgICAgdW5zaWduZWQgaXRlbXM7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWRwZiljYWxsb2MoaXRlbXMsIHNpemUpOwogfQogCi12b2lkICB6Y2ZyZWUgKG9wYXF1ZSwgcHRyKQordm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAob3BhcXVlLCBwdHIpCiAgICAgdm9pZHBmIG9wYXF1ZTsKICAgICB2b2lkcGYgcHRyOwogewpkaWZmIC0tZ2l0IGEvenV0aWwuaCBiL3p1dGlsLmgKaW5kZXggYTI1MDA4OC4uMjU4ZmE4OCAxMDA2NDQKLS0tIGEvenV0aWwuaAorKysgYi96dXRpbC5oCkBAIC0xMyw3ICsxMywxMiBAQAogI2lmbmRlZiBaVVRJTF9ICiAjZGVmaW5lIFpVVElMX0gKIAotI2RlZmluZSBaTElCX0lOVEVSTkFMCisjaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKyNlbHNlCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2VuZGlmCisKICNpbmNsdWRlICJ6bGliLmgiCiAKICNpZmRlZiBTVERDCkBAIC0yMzEsMTYgKzIzNiwxNiBAQAogIyAgICBkZWZpbmUgem1lbXplcm8oZGVzdCwgbGVuKSBtZW1zZXQoZGVzdCwgMCwgbGVuKQogIyAgZW5kaWYKICNlbHNlCi0gICBleHRlcm4gdm9pZCB6bWVtY3B5ICBPRigoQnl0ZWYqIGRlc3QsIGNvbnN0IEJ5dGVmKiBzb3VyY2UsIHVJbnQgbGVuKSk7Ci0gICBleHRlcm4gaW50ICB6bWVtY21wICBPRigoY29uc3QgQnl0ZWYqIHMxLCBjb25zdCBCeXRlZiogczIsIHVJbnQgbGVuKSk7Ci0gICBleHRlcm4gdm9pZCB6bWVtemVybyBPRigoQnl0ZWYqIGRlc3QsIHVJbnQgbGVuKSk7CisgICB2b2lkIFpMSUJfSU5URVJOQUwgem1lbWNweSBPRigoQnl0ZWYqIGRlc3QsIGNvbnN0IEJ5dGVmKiBzb3VyY2UsIHVJbnQgbGVuKSk7CisgICBpbnQgWkxJQl9JTlRFUk5BTCB6bWVtY21wIE9GKChjb25zdCBCeXRlZiogczEsIGNvbnN0IEJ5dGVmKiBzMiwgdUludCBsZW4pKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtemVybyBPRigoQnl0ZWYqIGRlc3QsIHVJbnQgbGVuKSk7CiAjZW5kaWYKIAogLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KICNpZmRlZiBERUJVRwogIyAgaW5jbHVkZSA8c3RkaW8uaD4KLSAgIGV4dGVybiBpbnQgel92ZXJib3NlOwotICAgZXh0ZXJuIHZvaWQgel9lcnJvciAgICBPRigoY2hhciAqbSkpOworICAgZXh0ZXJuIGludCBaTElCX0lOVEVSTkFMIHpfdmVyYm9zZTsKKyAgIGV4dGVybiB2b2lkIFpMSUJfSU5URVJOQUwgel9lcnJvciBPRigoY2hhciAqbSkpOwogIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIHpfZXJyb3IobXNnKTt9CiAjICBkZWZpbmUgVHJhY2UoeCkge2lmICh6X3ZlcmJvc2U+PTApIGZwcmludGYgeCA7fQogIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHpfdmVyYm9zZT4wKSBmcHJpbnRmIHggO30KQEAgLTI1Nyw4ICsyNjIsOSBAQAogI2VuZGlmCiAKIAotdm9pZHBmIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLCB1bnNpZ25lZCBzaXplKSk7Ci12b2lkICAgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOwordm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOwogCiAjZGVmaW5lIFpBTExPQyhzdHJtLCBpdGVtcywgc2l6ZSkgXAogICAgICAgICAgICAoKigoc3RybSktPnphbGxvYykpKChzdHJtKS0+b3BhcXVlLCAoaXRlbXMpLCAoc2l6ZSkpCg==