Name: series-workflowftkx6 Phase: Failed StartedAt: 2026-06-26 10:46:59 +0000 UTC FinishedAt: 2026-06-26 10:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftkx6[0] Phase: Succeeded StartedAt: 2026-06-26 10:46:59 +0000 UTC FinishedAt: 2026-06-26 10:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftkx6[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 10:46:59 +0000 UTC FinishedAt: 2026-06-26 10:57:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTNhYWE1MTljMjEyYTg3ZDhkNGRmMmU0OWM1MzY3OGFjNjlkOWNiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDEwOjU2OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXG5pbmRleCA4MjNiY2U4OTUxNzhkYS4uYmY2YTY4MTE4NDA1MTMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNTg5LDcgJiM0Mzs1ODksNyBAQCBzdGF0aWMgaW50IGJ0Zl9wYXJzZV90eXBlX3NlYyhzdHJ1Y3QgYnRmICpidGYpXG4gXHRcdGlmICh0eXBlX3NpemUgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHR5cGVfc2l6ZTtcbiBcdFx0aWYgKG5leHRfdHlwZSAmIzQzOyB0eXBlX3NpemUgXHUwMDNlIGVuZF90eXBlKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtCVEYgdHlwZSBbJWRdIGlzIG1hbGZvcm1lZFxcblwmIzM0OywgYnRmLVx1MDAzZXN0YXJ0X2lkICYjNDM7IGJ0Zi1cdTAwM2Vucl90eXBlcyk7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7QlRGIHR5cGUgWyV1XSBpcyBtYWxmb3JtZWRcXG5cJiMzNDssIGJ0Zi1cdTAwM2VzdGFydF9pZCAmIzQzOyBidGYtXHUwMDNlbnJfdHlwZXMpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTQyNCw3ICYjNDM7MTQyNCw3IEBAIHN0YXRpYyBpbnQgYnRmX2ZpbmRfZWxmX3NlY3Rpb25zKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnRmX2VsZl9zZWNzXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChzaC5zaF90eXBlICE9IFNIVF9QUk9HQklUUykge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBzZWN0aW9uIHR5cGUgKCVkKSBvZiBzZWN0aW9uKCVkLCAlcykgZnJvbSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIHNlY3Rpb24gdHlwZSAoJXUpIG9mIHNlY3Rpb24oJWQsICVzKSBmcm9tICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0c2guc2hfdHlwZSwgaWR4LCBuYW1lLCBwYXRoKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuQEAgLTQ4NTQsNyAmIzQzOzQ4NTQsNyBAQCBzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKCFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIG0xLVx1MDAzZXR5cGUsIG0yLVx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpIHtcbiBcdFx0XHRcdGlmICh0MS1cdTAwM2VuYW1lX29mZikge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0lZCB2bGVuPSVkIGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0ldSB2bGVuPSV1IGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0IGsxID09IEJURl9LSU5EX1NUUlVDVCA/IFwmIzM0O1NUUlVDVFwmIzM0OyA6IFwmIzM0O1VOSU9OXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXHUwMDNlYnRmLCB0MS1cdTAwM2VuYW1lX29mZiksXG4gXHRcdFx0XHRcdFx0IHQxLVx1MDAzZXNpemUsIGJ0Zl92bGVuKHQxKSwgaWQxLCBpZDIsIGksXG5AQCAtNTEwNCw3ICYjNDM7NTEwNCw3IEBAIHN0YXRpYyBpbnQgYnRmX2RlZHVwX2lzX2VxdWl2KHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGNhbmRfaWQsXG4gXHRcdFx0ZXEgPSBidGZfZGVkdXBfaXNfZXF1aXYoZCwgY2FuZF9tLVx1MDAzZXR5cGUsIGNhbm9uX20tXHUwMDNldHlwZSk7XG4gXHRcdFx0aWYgKGVxIFx1MDAzYz0gMCkge1xuIFx0XHRcdFx0aWYgKGNhbmRfdHlwZS1cdTAwM2VuYW1lX29mZikge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0lZCB2bGVuPSVkIGNhbmRfaWRbJXVdIGNhbm9uX2lkWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgZXF1aXYgZm9yIGZpZWxkIyVkICYjMzk7JXMmIzM5OzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0ldSB2bGVuPSV1IGNhbmRfaWRbJXVdIGNhbm9uX2lkWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgZXF1aXYgZm9yIGZpZWxkIyVkICYjMzk7JXMmIzM5OzogJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0IGNhbmRfa2luZCA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcJiMzNDtTVFJVQ1RcJiMzNDsgOiBcJiMzNDtVTklPTlwmIzM0OyxcbiBcdFx0XHRcdFx0XHQgYnRmX19uYW1lX2J5X29mZnNldChkLVx1MDAzZWJ0ZiwgY2FuZF90eXBlLVx1MDAzZW5hbWVfb2ZmKSxcbiBcdFx0XHRcdFx0XHQgY2FuZF90eXBlLVx1MDAzZXNpemUsIHZsZW4sIGNhbmRfaWQsIGNhbm9uX2lkLCBpLFxuQEAgLTYwNjksNyAmIzQzOzYwNjksNyBAQCBzdGF0aWMgaW50IGJ0Zl9hZGRfZGlzdGlsbGVkX3R5cGVzKHN0cnVjdCBidGZfZGlzdGlsbCAqZGlzdClcbiBcdFx0XHRlcnIgPSBidGZfYWRkX3R5cGUoXHUwMDI2ZGlzdC1cdTAwM2VwaXBlLCB0KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJiMzOTslcyYjMzk7WyV1XSBvZiBraW5kIFsldV0gdG8gZGlzdGlsbGVkIGJhc2UgQlRGLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIGtpbmQgd2hlbiBhZGRpbmcgYmFzZSB0eXBlICYjMzk7JXMmIzM5O1slZF0gb2Yga2luZCBbJWRdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXG5cJiMzNDssXG4gXHRcdFx0XHRuYW1lLCBpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcbmluZGV4IGNjMWJhNjViYjZjNWFjLi4xMjNjNDQ4ZjIwYzc0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9idGZfZHVtcC5jXG5AQCAtMTc3Niw3ICYjNDM7MTc3Niw3IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfZ2V0X2JpdGZpZWxkX3ZhbHVlKHN0cnVjdCBidGZfZHVtcCAqZCxcbiBcbiBcdC8qIE1heGltdW0gc3VwcG9ydGVkIGJpdGZpZWxkIHNpemUgaXMgNjQgYml0cyAqL1xuIFx0aWYgKHQtXHUwMDNlc2l6ZSBcdTAwM2UgOCkge1xuLVx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQgYml0ZmllbGQgc2l6ZSAlZFxcblwmIzM0OywgdC1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBiaXRmaWVsZCBzaXplICV1XFxuXCYjMzQ7LCB0LVx1MDAzZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0yMjUxLDcgJiM0MzsyMjUxLDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfZW51bV92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsXG4gXHRcdCp2YWx1ZSA9IGlzX3NpZ25lZCA/ICooX19zOCAqKWRhdGEgOiAqKF9fdTggKilkYXRhO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXFxuXCYjMzQ7LCB0LVx1MDAzZXNpemUsIGlkKTtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBzaXplICV1IGZvciBlbnVtLCBpZDpbJXVdXFxuXCYjMzQ7LCB0LVx1MDAzZXNpemUsIGlkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXG5pbmRleCA1M2QxZjM1NDFiY2U2OS4uZGY1ZmE0YmQ4N2Q2OWEgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXG5AQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcbiBcdFx0ICAgICBjbXBfYnRmX25hbWVfc2l6ZShcdTAwMjZiYXNlX2luZm8sIGRpc3RfaW5mbykgPT0gMDtcbiBcdFx0ICAgICBkaXN0X2luZm8mIzQzOyYjNDM7KSB7XG4gXHRcdFx0aWYgKCFkaXN0X2luZm8tXHUwMDNlaWQgfHwgZGlzdF9pbmZvLVx1MDAzZWlkIFx1MDAzZT0gci1cdTAwM2Vucl9kaXN0X2Jhc2VfdHlwZXMpIHtcbi1cdFx0XHRcdHByX3dhcm4oXCYjMzQ7YmFzZSBCVEYgaWQgWyVkXSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFslZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtiYXNlIEJURiBpZCBbJXVdIG1hcHMgdG8gaW52YWxpZCBkaXN0aWxsZWQgYmFzZSBCVEYgaWQgWyV1XVxcblwmIzM0OyxcbiBcdFx0XHRcdFx0aWQsIGRpc3RfaW5mby1cdTAwM2VpZCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBkb25lO1xuQEAgLTM2OCw3ICYjNDM7MzY4LDcgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfbWFwX2Rpc3RpbGxlZF9iYXNlKHN0cnVjdCBidGZfcmVsb2NhdGUgKnIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRpc3RfdCA9IGJ0Zl90eXBlX2J5X2lkKHItXHUwMDNlZGlzdF9iYXNlX2J0ZiwgaWQpO1xuIFx0XHRuYW1lID0gYnRmX19uYW1lX2J5X29mZnNldChyLVx1MDAzZWRpc3RfYmFzZV9idGYsIGRpc3RfdC1cdTAwM2VuYW1lX29mZik7XG4tXHRcdHByX3dhcm4oXCYjMzQ7ZGlzdGlsbGVkIGJhc2UgQlRGIHR5cGUgJiMzOTslcyYjMzk7IFslZF0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7ZGlzdGlsbGVkIGJhc2UgQlRGIHR5cGUgJiMzOTslcyYjMzk7IFsldV0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcblwmIzM0OyxcbiBcdFx0XHRuYW1lLCBpZCk7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuQEAgLTM5NywxMSAmIzQzOzM5NywxMSBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV92YWxpZGF0ZV9kaXN0aWxsZWRfYmFzZShzdHJ1Y3QgYnRmX3JlbG9jYXRlICpyKVxuIFx0XHRjYXNlIEJURl9LSU5EX0ZXRDpcbiBcdFx0XHRpZiAodC1cdTAwM2VuYW1lX29mZilcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7dHlwZSBbJWRdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7dHlwZSBbJXVdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cJiMzNDssXG4gXHRcdFx0XHRpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRwcl93YXJuKFwmIzM0O3R5cGUgWyVkXSBpbiBkaXN0aWxsZWQgYmFzZWQgQlRGIGhhcyB1bmV4cGVjdGVkIGtpbmQgWyVkXVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDt0eXBlIFsldV0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cXG5cJiMzNDssXG4gXHRcdFx0XHRpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jXG5pbmRleCAyOTVkYmRhMjQ1ODA3MS4uZmUxMzZkMDI1OTY3OWYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2VsZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2VsZi5jXG5AQCAtMzU0LDcgJiM0MzszNTQsNyBAQCBsb25nIGVsZl9maW5kX2Z1bmNfb2Zmc2V0KEVsZiAqZWxmLCBjb25zdCBjaGFyICpiaW5hcnlfcGF0aCwgY29uc3QgY2hhciAqbmFtZSlcbiBcbiBcdGlmIChyZXQgXHUwMDNlIDApIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7ZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJiMzOTslcyYjMzk7IGluICYjMzk7JXMmIzM5OzogMHglbHhcXG5cJiMzNDssIG5hbWUsIGJpbmFyeV9wYXRoLFxuLVx0XHRcdCByZXQpO1xuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpcmV0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXQgPT0gMCkge1xuIFx0XHRcdHByX3dhcm4oXCYjMzQ7ZWxmOiAmIzM5OyVzJiMzOTsgaXMgMCBpbiBzeW10YWIgZm9yICYjMzk7JXMmIzM5OzogJXNcXG5cJiMzNDssIG5hbWUsIGJpbmFyeV9wYXRoLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbmluZGV4IGQ3OTY5NWYwMWM4N2YzLi5jN2YyZDJhYzdiYjM1ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuY1xuQEAgLTM4NCw3ICYjNDM7Mzg0LDcgQEAgaW50IGJwZl9nZW5fX2ZpbmlzaChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbnJfcHJvZ3MsIGludCBucl9tYXBzKVxuIFx0aW50IGk7XG4gXG4gXHRpZiAobnJfcHJvZ3MgXHUwMDNjIGdlbi1cdTAwM2Vucl9wcm9ncyB8fCBucl9tYXBzICE9IGdlbi1cdTAwM2Vucl9tYXBzKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7bnJfcHJvZ3MgJWQvJWQgbnJfbWFwcyAlZC8lZCBtaXNtYXRjaFxcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7bnJfcHJvZ3MgJWQvJXUgbnJfbWFwcyAlZC8ldSBtaXNtYXRjaFxcblwmIzM0OyxcbiBcdFx0XHRucl9wcm9ncywgZ2VuLVx1MDAzZW5yX3Byb2dzLCBucl9tYXBzLCBnZW4tXHUwMDNlbnJfbWFwcyk7XG4gXHRcdGdlbi1cdTAwM2VlcnJvciA9IC1FRkFVTFQ7XG4gXHRcdHJldHVybiBnZW4tXHUwMDNlZXJyb3I7XG5AQCAtNDg4LDcgJiM0Mzs0ODgsNyBAQCB2b2lkIGJwZl9nZW5fX2xvYWRfYnRmKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IHZvaWQgKmJ0Zl9yYXdfZGF0YSxcbiBcbiBcdGF0dHIuYnRmX3NpemUgPSB0Z3RfZW5kaWFuKGJ0Zl9yYXdfc2l6ZSk7XG4gXHRidGZfbG9hZF9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBsb2FkX2J0Zjogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogbG9hZF9idGY6IG9mZiAlZCBzaXplICV1LCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxcblwmIzM0OyxcbiBcdFx0IGJ0Zl9kYXRhLCBidGZfcmF3X3NpemUsIGJ0Zl9sb2FkX2F0dHIsIGF0dHJfc2l6ZSk7XG4gXG4gXHQvKiBwb3B1bGF0ZSB1bmlvbiBicGZfYXR0ciB3aXRoIHVzZXIgcHJvdmlkZWQgbG9nIGRldGFpbHMgKi9cbkBAIC01MzQsNyAmIzQzOzUzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX2NyZWF0ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0YXR0ci5idGZfdmFsdWVfdHlwZV9pZCA9IHRndF9lbmRpYW4obWFwX2F0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpO1xuIFxuIFx0bWFwX2NyZWF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBtYXBfY3JlYXRlOiAlcyBpZHggJWQgdHlwZSAlZCB2YWx1ZV90eXBlX2lkICVkLCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtnZW46IG1hcF9jcmVhdGU6ICVzIGlkeCAlZCB0eXBlICV1IHZhbHVlX3R5cGVfaWQgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCYjMzQ7LFxuIFx0XHQgbWFwX25hbWUsIG1hcF9pZHgsIG1hcF90eXBlLCBtYXBfYXR0ci1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbiBcdFx0IG1hcF9jcmVhdGVfYXR0ciwgYXR0cl9zaXplKTtcbiBcbkBAIC0xMDgyLDcgJiM0MzsxMDgyLDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiBcdGxpY2Vuc2Vfb2ZmID0gYWRkX2RhdGEoZ2VuLCBsaWNlbnNlLCBzdHJsZW4obGljZW5zZSkgJiM0MzsgMSk7XG4gXHQvKiBhZGQgaW5zbnMgdG8gYmxvYiBvZiBieXRlcyAqL1xuIFx0aW5zbnNfb2ZmID0gYWRkX2RhdGEoZ2VuLCBpbnNucywgaW5zbl9jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtnZW46IHByb2dfbG9hZDogcHJvZ19pZHggJWQgdHlwZSAlZCBpbnNuIG9mZiAlZCBpbnNuc19jbnQgJXpkIGxpY2Vuc2Ugb2ZmICVkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICV1IGluc24gb2ZmICVkIGluc25zX2NudCAlenUgbGljZW5zZSBvZmYgJWRcXG5cJiMzNDssXG4gXHRcdCBwcm9nX2lkeCwgcHJvZ190eXBlLCBpbnNuc19vZmYsIGluc25fY250LCBsaWNlbnNlX29mZik7XG4gXG4gXHQvKiBjb252ZXJ0IGJsb2IgaW5zbnMgdG8gdGFyZ2V0IGVuZGlhbm5lc3MgKi9cbkBAIC0xMTA1LDIxICYjNDM7MTEwNSwyMSBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0YXR0ci5mdW5jX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemUpO1xuIFx0YXR0ci5mdW5jX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXHUwMDNlZnVuY19pbmZvX2NudCk7XG4gXHRmdW5jX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm8sIGZ1bmNfaW5mb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtnZW46IHByb2dfbG9hZDogZnVuY19pbmZvOiBvZmYgJWQgY250ICV1IHJlYyBzaXplICV1XFxuXCYjMzQ7LFxuIFx0XHQgZnVuY19pbmZvLCBsb2FkX2F0dHItXHUwMDNlZnVuY19pbmZvX2NudCxcbiBcdFx0IGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemUpO1xuIFxuIFx0YXR0ci5saW5lX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xuIFx0YXR0ci5saW5lX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX2NudCk7XG4gXHRsaW5lX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtnZW46IHByb2dfbG9hZDogbGluZV9pbmZvOiBvZmYgJWQgY250ICV1IHJlYyBzaXplICV1XFxuXCYjMzQ7LFxuIFx0XHQgbGluZV9pbmZvLCBsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX2NudCxcbiBcdFx0IGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xuIFxuIFx0YXR0ci5jb3JlX3JlbG9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKChfX3UzMilzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKTtcbiBcdGF0dHIuY29yZV9yZWxvX2NudCA9IHRndF9lbmRpYW4oZ2VuLVx1MDAzZWNvcmVfcmVsb19jbnQpO1xuIFx0Y29yZV9yZWxvcyA9IGFkZF9kYXRhKGdlbiwgZ2VuLVx1MDAzZWNvcmVfcmVsb3MsIGNvcmVfcmVsb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGNvcmVfcmVsb3M6IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJXpkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxcblwmIzM0OyxcbiBcdFx0IGNvcmVfcmVsb3MsIGdlbi1cdTAwM2Vjb3JlX3JlbG9fY250LFxuIFx0XHQgc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7XG4gXG5AQCAtMTIzNCw3ICYjNDM7MTIzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsXG4gXHR9XG4gXG4gXHRtYXBfdXBkYXRlX2F0dHIgPSBhZGRfZGF0YShnZW4sIFx1MDAyNmF0dHIsIGF0dHJfc2l6ZSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogbWFwX3VwZGF0ZV9lbGVtOiBpZHggJWQsIHZhbHVlOiBvZmYgJWQgc2l6ZSAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cJiMzNDssXG4gXHRcdCBtYXBfaWR4LCB2YWx1ZSwgdmFsdWVfc2l6ZSwgbWFwX3VwZGF0ZV9hdHRyLCBhdHRyX3NpemUpO1xuIFx0bW92ZV9ibG9iMmJsb2IoZ2VuLCBhdHRyX2ZpZWxkKG1hcF91cGRhdGVfYXR0ciwgbWFwX2ZkKSwgNCxcbiBcdFx0ICAgICAgIGJsb2JfZmRfYXJyYXlfb2ZmKGdlbiwgbWFwX2lkeCkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCAxMzY4NzUyYWExM2MzOS4uNzE2MjE0NjI4MGE4MGUgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtMTQ4Niw3ICYjNDM7MTQ4Niw3IEBAIHN0YXRpYyBpbnQgaW5pdF9zdHJ1Y3Rfb3BzX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc2VjX25hbWUsXG4gXHRcdCAgICAgICB0eXBlLVx1MDAzZXNpemUpO1xuIFx0XHRzdF9vcHMtXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XG4gXG4tXHRcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JXUpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JWQpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwmIzM0OyxcbiBcdFx0XHQgdG5hbWUsIHR5cGVfaWQsIHZhcl9uYW1lLCB2c2ktXHUwMDNlb2Zmc2V0KTtcbiBcdH1cbiBcbkBAIC0yNjI2LDcgJiM0MzsyNjI2LDcgQEAgaW50IHBhcnNlX2J0Zl9tYXBfZGVmKGNvbnN0IGNoYXIgKm1hcF9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gXHRcdFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tXHUwMDNldHlwZSk7XG4gXHRcdFx0aWYgKCF0KSB7XG4tXHRcdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtleSB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtleSB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0bWFwX25hbWUsIG0tXHUwMDNldHlwZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMjY2Niw3ICYjNDM7MjY2Niw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiB2YWx1ZSB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHZhbHVlIHR5cGUgWyV1XSBub3QgZm91bmQuXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRtYXBfbmFtZSwgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0yNzIwLDcgJiM0MzsyNzIwLDcgQEAgaW50IHBhcnNlX2J0Zl9tYXBfZGVmKGNvbnN0IGNoYXIgKm1hcF9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0bWFwX2RlZi1cdTAwM2V2YWx1ZV9zaXplID0gNDtcbiBcdFx0XHR0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRpZiAoIXQpIHtcbi1cdFx0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogJXMgdHlwZSBbJWRdIG5vdCBmb3VuZC5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiAlcyB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0bWFwX25hbWUsIGRlc2MsIG0tXHUwMDNldHlwZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMzQ3Niw3ICYjNDM7MzQ3Niw3IEBAIHN0YXRpYyBpbnQgYnRmX2ZpeHVwX2RhdGFzZWMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHR2YXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0X3Zhci1cdTAwM2VuYW1lX29mZik7XG4gXHRcdGlmICghdmFyX25hbWUpIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMmIzM5O3MgbWVtYmVyICMlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7c2VjICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGZpbmQgbmFtZSBvZiBEQVRBU0VDJiMzOTtzIG1lbWJlciAjJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgc2VjX25hbWUsIGkpO1xuIFx0XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0XHR9XG5AQCAtMzk3MSw3ICYjNDM7Mzk3MSw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0aWYgKCFkYXRhKVxuIFx0XHRcdHJldHVybiAtTElCQlBGX0VSUk5PX19GT1JNQVQ7XG4gXG4tXHRcdHByX2RlYnVnKFwmIzM0O2VsZjogc2VjdGlvbiglZCkgJXMsIHNpemUgJWxkLCBsaW5rICVkLCBmbGFncyAlbHgsIHR5cGU9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtlbGY6IHNlY3Rpb24oJWQpICVzLCBzaXplICVsdSwgbGluayAlZCwgZmxhZ3MgJWx4LCB0eXBlPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdCBpZHgsIG5hbWUsICh1bnNpZ25lZCBsb25nKWRhdGEtXHUwMDNlZF9zaXplLFxuIFx0XHRcdCAoaW50KXNoLVx1MDAzZXNoX2xpbmssICh1bnNpZ25lZCBsb25nKXNoLVx1MDAzZXNoX2ZsYWdzLFxuIFx0XHRcdCAoaW50KXNoLVx1MDAzZXNoX3R5cGUpO1xuQEAgLTQ0OTQsNyAmIzQzOzQ0OTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFxuIFx0XHRcdGV4dC1cdTAwM2VrY2ZnLmRhdGFfb2ZmID0gcm91bmR1cChvZmYsIGV4dC1cdTAwM2VrY2ZnLmFsaWduKTtcbiBcdFx0XHRvZmYgPSBleHQtXHUwMDNla2NmZy5kYXRhX29mZiAmIzQzOyBleHQtXHUwMDNla2NmZy5zejtcbi1cdFx0XHRwcl9kZWJ1ZyhcJiMzNDtleHRlcm4gKGtjZmcpICMlZDogc3ltYm9sICVkLCBvZmYgJXUsIG5hbWUgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX2RlYnVnKFwmIzM0O2V4dGVybiAoa2NmZykgIyVkOiBzeW1ib2wgJWQsIG9mZiAlZCwgbmFtZSAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdCBpLCBleHQtXHUwMDNlc3ltX2lkeCwgZXh0LVx1MDAzZWtjZmcuZGF0YV9vZmYsIGV4dC1cdTAwM2VuYW1lKTtcbiBcdFx0fVxuIFx0XHRzZWMtXHUwMDNlc2l6ZSA9IG9mZjtcbkBAIC00NjI2LDcgJiM0Mzs0NjI2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG4gXHRpZiAoIWlzX2NhbGxfaW5zbihpbnNuKSBcdTAwMjZcdTAwMjYgIWlzX2xkaW1tNjRfaW5zbihpbnNuKSkge1xuLVx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBpbnZhbGlkIHJlbG8gYWdhaW5zdCAmIzM5OyVzJiMzOTsgZm9yIGluc25zWyVkXS5jb2RlIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBpbnZhbGlkIHJlbG8gYWdhaW5zdCAmIzM5OyVzJiMzOTsgZm9yIGluc25zWyV1XS5jb2RlIDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0cHJvZy1cdTAwM2VuYW1lLCBzeW1fbmFtZSwgaW5zbl9pZHgsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdHJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQztcbiBcdH1cbkBAIC00NzQ5LDcgJiM0Mzs0NzQ5LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0XHQgICAgbWFwLVx1MDAzZXNlY19pZHggIT0gc3ltLVx1MDAzZXN0X3NobmR4IHx8XG4gXHRcdFx0ICAgIG1hcC1cdTAwM2VzZWNfb2Zmc2V0ICE9IHN5bS1cdTAwM2VzdF92YWx1ZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBtYXAgJXpkICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBtYXAgJXp1ICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgcHJvZy1cdTAwM2VuYW1lLCBtYXBfaWR4LCBtYXAtXHUwMDNlbmFtZSwgbWFwLVx1MDAzZXNlY19pZHgsXG4gXHRcdFx0XHQgbWFwLVx1MDAzZXNlY19vZmZzZXQsIGluc25faWR4KTtcbiBcdFx0XHRicmVhaztcbkBAIC00Nzc2LDcgJiM0Mzs0Nzc2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0bWFwID0gXHUwMDI2b2JqLVx1MDAzZW1hcHNbbWFwX2lkeF07XG4gXHRcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgIT0gdHlwZSB8fCBtYXAtXHUwMDNlc2VjX2lkeCAhPSBzeW0tXHUwMDNlc3Rfc2huZHgpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBkYXRhIG1hcCAlemQgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IGZvdW5kIGRhdGEgbWFwICV6dSAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gJXVcXG5cJiMzNDssXG4gXHRcdFx0IHByb2ctXHUwMDNlbmFtZSwgbWFwX2lkeCwgbWFwLVx1MDAzZW5hbWUsIG1hcC1cdTAwM2VzZWNfaWR4LFxuIFx0XHRcdCBtYXAtXHUwMDNlc2VjX29mZnNldCwgaW5zbl9pZHgpO1xuIFx0XHRicmVhaztcbkBAIC00OTg1LDcgJiM0Mzs0OTg1LDcgQEAgc3RhdGljIGludCBicGZfZ2V0X21hcF9pbmZvX2Zyb21fZmRpbmZvKGludCBmZCwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbylcbiBcdFx0XHRpbmZvLVx1MDAzZXZhbHVlX3NpemUgPSB2YWw7XG4gXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcJiMzNDttYXhfZW50cmllczpcXHQldVwmIzM0OywgXHUwMDI2dmFsKSA9PSAxKVxuIFx0XHRcdGluZm8tXHUwMDNlbWF4X2VudHJpZXMgPSB2YWw7XG4tXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcJiMzNDttYXBfZmxhZ3M6XFx0JWlcJiMzNDssIFx1MDAyNnZhbCkgPT0gMSlcbiYjNDM7XHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcJiMzNDttYXBfZmxhZ3M6XFx0JXhcJiMzNDssIFx1MDAyNnZhbCkgPT0gMSlcbiBcdFx0XHRpbmZvLVx1MDAzZW1hcF9mbGFncyA9IHZhbDtcbiBcdH1cbiBcbkBAIC01NTIxLDExICYjNDM7NTUyMSwxMSBAQCBzdGF0aWMgaW50IGluaXRfbWFwX2luX21hcF9zbG90cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFslZF0gdG8gbWFwICYjMzk7JXMmIzM5OyBmZD0lZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJXVdIHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWQ6ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIGksIHRhcmdfbWFwLVx1MDAzZW5hbWUsIGZkLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFslZF0gc2V0IHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFsldV0gc2V0IHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWRcXG5cJiMzNDssXG4gXHRcdFx0IG1hcC1cdTAwM2VuYW1lLCBpLCB0YXJnX21hcC1cdTAwM2VuYW1lLCBmZCk7XG4gXHR9XG4gXG5AQCAtNTU1NCwxMSAmIzQzOzU1NTQsMTEgQEAgc3RhdGljIGludCBpbml0X3Byb2dfYXJyYXlfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXHUwMDNlZmQsIFx1MDAyNmksIFx1MDAyNmZkLCAwKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyVkXSB0byBwcm9nICYjMzk7JXMmIzM5OyBmZD0lZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJXVdIHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkOiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBpLCB0YXJnX3Byb2ctXHUwMDNlbmFtZSwgZmQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyVkXSBzZXQgdG8gcHJvZyAmIzM5OyVzJiMzOTsgZmQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFsldV0gc2V0IHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdCBtYXAtXHUwMDNlbmFtZSwgaSwgdGFyZ19wcm9nLVx1MDAzZW5hbWUsIGZkKTtcbiBcdH1cbiBcbkBAIC01Nzg4LDcgJiM0Mzs1Nzg4LDcgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcbiBcdFx0aWYgKHN0cm5jbXAobG9jYWxfbmFtZSwgdGFyZ19uYW1lLCBsb2NhbF9lc3NlbnRfbGVuKSAhPSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtDTy1SRSByZWxvY2F0aW5nIFslZF0gJXMgJXM6IGZvdW5kIHRhcmdldCBjYW5kaWRhdGUgWyVkXSAlcyAlcyBpbiBbJXNdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7Q08tUkUgcmVsb2NhdGluZyBbJXVdICVzICVzOiBmb3VuZCB0YXJnZXQgY2FuZGlkYXRlIFslZF0gJXMgJXMgaW4gWyVzXVxcblwmIzM0OyxcbiBcdFx0XHQgbG9jYWxfY2FuZC1cdTAwM2VpZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3QpLFxuIFx0XHRcdCBsb2NhbF9uYW1lLCBpLCBidGZfa2luZF9zdHIodCksIHRhcmdfbmFtZSxcbiBcdFx0XHQgdGFyZ19idGZfbmFtZSk7XG5AQCAtNTg0OCw3ICYjNDM7NTg0OCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4gXHRcdFx0XHRjb250aW51ZTsgLyogZXhwZWN0ZWQgcmFjZTogQlRGIHdhcyB1bmxvYWRlZCAqL1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJWQgRkQ6ICVzXFxuXCYjMzQ7LCBpZCwgZXJyc3RyKGVycikpO1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJXUgRkQ6ICVzXFxuXCYjMzQ7LCBpZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC01ODYxLDcgJiM0Mzs1ODYxLDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGVyciA9IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gZ2V0IEJURiBvYmplY3QgIyVkIGluZm86ICVzXFxuXCYjMzQ7LCBpZCwgZXJyc3RyKGVycikpO1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJXUgaW5mbzogJXNcXG5cJiMzNDssIGlkLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC01ODc0LDcgJiM0Mzs1ODc0LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gbG9hZCBtb2R1bGUgWyVzXSYjMzk7cyBCVEYgb2JqZWN0ICMlZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgbW9kdWxlIFslc10mIzM5O3MgQlRGIG9iamVjdCAjJXU6ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0bmFtZSwgaWQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNjcsNyAmIzQzOzYwNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX3Jlc29sdmVfcmVsbyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHQgICAgIWhhc2htYXBfX2ZpbmQoY2FuZF9jYWNoZSwgbG9jYWxfaWQsIFx1MDAyNmNhbmRzKSkge1xuIFx0XHRjYW5kcyA9IGJwZl9jb3JlX2ZpbmRfY2FuZHMocHJvZy1cdTAwM2VvYmosIGxvY2FsX2J0ZiwgbG9jYWxfaWQpO1xuIFx0XHRpZiAoSVNfRVJSKGNhbmRzKSkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB0YXJnZXQgY2FuZGlkYXRlIHNlYXJjaCBmYWlsZWQgZm9yIFslZF0gJXMgJXM6ICVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHRhcmdldCBjYW5kaWRhdGUgc2VhcmNoIGZhaWxlZCBmb3IgWyV1XSAlcyAlczogJWxkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgbG9jYWxfaWQsIGJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSxcbiBcdFx0XHRcdGxvY2FsX25hbWUsIFBUUl9FUlIoY2FuZHMpKTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihjYW5kcyk7XG5AQCAtNjEyNyw3ICYjNDM7NjEyNyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xcblwmIzM0Oywgc2VjX25hbWUsIHNlYy1cdTAwM2VudW1faW5mbyk7XG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmb3VuZCAldSBDTy1SRSByZWxvY2F0aW9uc1xcblwmIzM0Oywgc2VjX25hbWUsIHNlYy1cdTAwM2VudW1faW5mbyk7XG4gXG4gXHRcdGZvcl9lYWNoX2J0Zl9leHRfcmVjKHNlZywgc2VjLCBpLCByZWMpIHtcbiBcdFx0XHRpZiAocmVjLVx1MDAzZWluc25fb2ZmICUgQlBGX0lOU05fU1opXG5AQCAtNjE4MSw3ICYjNDM7NjE4MSw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcbiBcdFx0XHRlcnIgPSBicGZfY29yZV9wYXRjaF9pbnNuKHByb2ctXHUwMDNlbmFtZSwgaW5zbiwgaW5zbl9pZHgsIHJlYywgaSwgXHUwMDI2dGFyZ19yZXMpO1xuIFx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJXU6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJWQ6ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGksIGluc25faWR4LCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG5AQCAtNjM0Niw3ICYjNDM7NjM0Niw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2p0X21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjXG4gXHRcdGdvdG8gZXJyX2Nsb3NlO1xuIFx0fVxuIFx0aWYgKHN5bV9vZmYgJiM0MzsganRfc2l6ZSBcdTAwM2Ugb2JqLVx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeikge1xuLVx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5Oy5qdW1wdGFibGVzJiMzOTs6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6ZCwgdHJ5aW5nIHRvIGFjY2VzcyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7Lmp1bXB0YWJsZXMmIzM5OzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXp1LCB0cnlpbmcgdG8gYWNjZXNzICV1XFxuXCYjMzQ7LFxuIFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3osIHN5bV9vZmYgJiM0MzsganRfc2l6ZSk7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gZXJyX2Nsb3NlO1xuQEAgLTYzODEsNyAmIzQzOzYzODEsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y1xuIFx0XHQgKi9cbiBcdFx0aWYgKGluc25fb2ZmIFx1MDAzZSBVSU5UMzJfTUFYKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTsuanVtcHRhYmxlcyYjMzk7OiBpbnZhbGlkIGp1bXAgdGFibGUgdmFsdWUgMHglbGx4IGF0IG9mZnNldCAldVxcblwmIzM0Oyxcbi1cdFx0XHRcdChsb25nIGxvbmcpanRbaV0sIHN5bV9vZmYgJiM0MzsgaSAqIGp0X2VudHJ5X3NpemUpO1xuJiM0MztcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpanRbaV0sIHN5bV9vZmYgJiM0MzsgaSAqIGp0X2VudHJ5X3NpemUpO1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBlcnJfY2xvc2U7XG4gXHRcdH1cbkBAIC02NTE3LDcgJiM0Mzs2NTE3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfZGF0YShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4gXHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogYmFkIHJlbG8gdHlwZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IGJhZCByZWxvIHR5cGUgJXVcXG5cJiMzNDssXG4gXHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGksIHJlbG8tXHUwMDNldHlwZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC02Nzk3LDcgJiM0Mzs2Nzk3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NfY29kZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1haW5fcHJvZyxcbiBcdFx0XHQgKi9cbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHJlbG8gXHUwMDI2XHUwMDI2IHJlbG8tXHUwMDNldHlwZSAhPSBSRUxPX0NBTEwgXHUwMDI2XHUwMDI2IHJlbG8tXHUwMDNldHlwZSAhPSBSRUxPX1NVQlBST0dfQUREUikge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiB1bmV4cGVjdGVkIHJlbG8gZm9yIGluc24gIyV6dSwgdHlwZSAldVxcblwmIzM0OyxcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgaW5zbl9pZHgsIHJlbG8tXHUwMDNldHlwZSk7XG4gXHRcdFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX1JFTE9DO1xuIFx0XHR9XG5AQCAtNzU4Nyw3ICYjNDM7NzU4Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9tYXBfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0fVxuIFx0XHRuYW1lID0gZWxmX3N5bV9zdHIob2JqLCBzeW0tXHUwMDNlc3RfbmFtZSkgPzogXCYjMzQ7XHUwMDNjP1x1MDAzZVwmIzM0OztcbiBcbi1cdFx0cHJfZGVidWcoXCYjMzQ7Lm1hcHMgcmVsbyAjJWQ6IGZvciAlemQgdmFsdWUgJXpkIHJlbC1cdTAwM2VyX29mZnNldCAlenUgbmFtZSAlZCAoJiMzOTslcyYjMzk7KVxcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0Oy5tYXBzIHJlbG8gIyVkOiBmb3IgJXpkIHZhbHVlICV6dSByZWwtXHUwMDNlcl9vZmZzZXQgJXp1IG5hbWUgJXUgKCYjMzk7JXMmIzM5OylcXG5cJiMzNDssXG4gXHRcdFx0IGksIChzc2l6ZV90KShyZWwtXHUwMDNlcl9pbmZvIFx1MDAzZVx1MDAzZSAzMiksIChzaXplX3Qpc3ltLVx1MDAzZXN0X3ZhbHVlLFxuIFx0XHRcdCAoc2l6ZV90KXJlbC1cdTAwM2VyX29mZnNldCwgc3ltLVx1MDAzZXN0X25hbWUsIG5hbWUpO1xuIFxuQEAgLTc2NzgsNyAmIzQzOzc2NzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdH1cbiBcdFx0bWFwLVx1MDAzZWluaXRfc2xvdHNbbW9mZl0gPSBpc19tYXBfaW5fbWFwID8gKHZvaWQgKil0YXJnX21hcCA6ICh2b2lkICopdGFyZ19wcm9nO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDsubWFwcyByZWxvICMlZDogbWFwICYjMzk7JXMmIzM5OyBzbG90IFslZF0gcG9pbnRzIHRvICVzICYjMzk7JXMmIzM5O1xcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0Oy5tYXBzIHJlbG8gIyVkOiBtYXAgJiMzOTslcyYjMzk7IHNsb3QgWyV1XSBwb2ludHMgdG8gJXMgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LFxuIFx0XHRcdCBpLCBtYXAtXHUwMDNlbmFtZSwgbW9mZiwgdHlwZSwgbmFtZSk7XG4gXHR9XG4gXG5AQCAtODczOCw3ICYjNDM7ODczOCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVzb2x2ZV9rc3ltX3Zhcl9idGZfaWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0bG9jYWxfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQob2JqLVx1MDAzZWJ0ZiwgbG9jYWxfdHlwZS1cdTAwM2VuYW1lX29mZik7XG4gXHRcdHRhcmdfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0YXJnX3R5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIFxuLVx0XHRwcl93YXJuKFwmIzM0O2V4dGVybiAodmFyIGtzeW0pICYjMzk7JXMmIzM5OzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJWRdICVzICVzLCBidXQga2VybmVsIGhhcyBbJWRdICVzICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDtleHRlcm4gKHZhciBrc3ltKSAmIzM5OyVzJiMzOTs6IGluY29tcGF0aWJsZSB0eXBlcywgZXhwZWN0ZWQgWyV1XSAlcyAlcywgYnV0IGtlcm5lbCBoYXMgWyV1XSAlcyAlc1xcblwmIzM0OyxcbiBcdFx0XHRleHQtXHUwMDNlbmFtZSwgbG9jYWxfdHlwZV9pZCxcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdHlwZSksIGxvY2FsX25hbWUsIHRhcmdfdHlwZV9pZCxcbiBcdFx0XHRidGZfa2luZF9zdHIodGFyZ190eXBlKSwgdGFyZ19uYW1lKTtcbkBAIC04OTE1LDcgJiM0Mzs4OTE1LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZXNvbHZlX2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtleHRlcm4gKGtjZmcpICYjMzk7JXMmIzM5Ozogc2V0IHRvIDB4JWxseFxcblwmIzM0Oyxcbi1cdFx0XHRcdCBleHQtXHUwMDNlbmFtZSwgKGxvbmcgbG9uZyl2YWx1ZSk7XG4mIzQzO1x0XHRcdFx0IGV4dC1cdTAwM2VuYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O2V4dGVybiAmIzM5OyVzJiMzOTs6IHVucmVjb2duaXplZCBleHRlcm4ga2luZFxcblwmIzM0OywgZXh0LVx1MDAzZW5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEwNDk0LDcgJiM0MzsxMDQ5NCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9zdF9vcHNfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0bW9mZiA9IHJlbC1cdTAwM2VyX29mZnNldCAtIG1hcC1cdTAwM2VzZWNfb2Zmc2V0O1xuIFx0XHRzaGRyX2lkeCA9IHN5bS1cdTAwM2VzdF9zaG5keDtcbiBcdFx0c3Rfb3BzID0gbWFwLVx1MDAzZXN0X29wcztcbi1cdFx0cHJfZGVidWcoXCYjMzQ7c3RydWN0X29wcyByZWxvYyAlczogZm9yICVsbGQgdmFsdWUgJWxsZCBzaGRyX2lkeCAldSByZWwtXHUwMDNlcl9vZmZzZXQgJXp1IG1hcC1cdTAwM2VzZWNfb2Zmc2V0ICV6dSBuYW1lICVkIChcXCYjMzk7JXNcXCYjMzk7KVxcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLVx1MDAzZXJfb2Zmc2V0ICV6dSBtYXAtXHUwMDNlc2VjX29mZnNldCAlenUgbmFtZSAldSAoXFwmIzM5OyVzXFwmIzM5OylcXG5cJiMzNDssXG4gXHRcdFx0IG1hcC1cdTAwM2VuYW1lLFxuIFx0XHRcdCAobG9uZyBsb25nKShyZWwtXHUwMDNlcl9pbmZvIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdFx0IChsb25nIGxvbmcpc3ltLVx1MDAzZXN0X3ZhbHVlLFxuQEAgLTEwNjQzLDcgJiM0MzsxMDY0Myw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0XG4gXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xuIFx0ZXJyID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoYXR0YWNoX3Byb2dfZmQsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbiBcdGlmIChlcnIpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgZm9yIEZEICVkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkIGZvciBGRCAldTogJXNcXG5cJiMzNDssXG4gXHRcdFx0YXR0YWNoX3Byb2dfZmQsIGVycnN0cihlcnIpKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0xMDY1Niw3ICYjNDM7MTA2NTYsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9maW5kX3Byb2dfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIF9fdTMyIGF0dGFjaF9wcm9nX2ZkLCBpbnQgdFxuIFx0YnRmID0gYnRmX2xvYWRfZnJvbV9rZXJuZWwoaW5mby5idGZfaWQsIE5VTEwsIHRva2VuX2ZkKTtcbiBcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdGlmIChlcnIpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gZ2V0IEJURiAlZCBvZiB0aGUgcHJvZ3JhbTogJXNcXG5cJiMzNDssIGluZm8uYnRmX2lkLCBlcnJzdHIoZXJyKSk7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBnZXQgQlRGICV1IG9mIHRoZSBwcm9ncmFtOiAlc1xcblwmIzM0OywgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRlcnIgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgbmFtZSwgQlRGX0tJTkRfRlVOQyk7XG5AQCAtMTA3MzgsNyAmIzQzOzEwNzM4LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqYXR0YWNcbiBcdFx0fVxuIFx0XHRlcnIgPSBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChhdHRhY2hfbmFtZSwgYXR0YWNoX3Byb2dfZmQsIHByb2ctXHUwMDNlb2JqLVx1MDAzZXRva2VuX2ZkKTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBmaW5kIEJQRiBwcm9ncmFtIChGRCAlZCkgQlRGIElEIGZvciAmIzM5OyVzJiMzOTs6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJiMzOTslcyYjMzk7OiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgYXR0YWNoX3Byb2dfZmQsIGF0dGFjaF9uYW1lLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTExMjMzLDcgJiM0MzsxMTIzMyw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfbWFwX29wKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBrZXlfc3osXG4gXHRcdH1cbiBcbiBcdFx0aWYgKHZhbHVlX3N6ICE9IG51bV9jcHUgKiBlbGVtX3N6KSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiB1bmV4cGVjdGVkIHZhbHVlIHNpemUgJXp1IHByb3ZpZGVkIGZvciBwZXItQ1BVIG1hcCwgZXhwZWN0ZWQgJWQgKiAlenUgPSAlemRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXp1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIHZhbHVlX3N6LCBudW1fY3B1LCBlbGVtX3N6LCBudW1fY3B1ICogZWxlbV9zeik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC0xMTc3NCw3ICYjNDM7MTE3NzQsNyBAQCBzdGF0aWMgdm9pZCBnZW5fcHJvYmVfbGVnYWN5X2V2ZW50X25hbWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6LFxuIFx0c3RhdGljIGludCBpbmRleCA9IDA7XG4gXHRpbnQgaTtcbiBcbi1cdHNucHJpbnRmKGJ1ZiwgYnVmX3N6LCBcJiMzNDtsaWJicGZfJXVfJWRfJXNfMHglenhcJiMzNDssIGdldHBpZCgpLFxuJiM0MztcdHNucHJpbnRmKGJ1ZiwgYnVmX3N6LCBcJiMzNDtsaWJicGZfJWRfJWRfJXNfMHglenhcJiMzNDssIGdldHBpZCgpLFxuIFx0XHQgX19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aW5kZXgsIDEpLCBuYW1lLCBvZmZzZXQpO1xuIFxuIFx0Lyogc2FuaXRpemUgbmFtZSBpbiB0aGUgcHJvYmUgbmFtZSAqL1xuQEAgLTEyOTI0LDggJiM0MzsxMjkyNCw4IEBAIHN0YXRpYyBsb25nIGVsZl9maW5kX2Z1bmNfb2Zmc2V0X2Zyb21fYXJjaGl2ZShjb25zdCBjaGFyICphcmNoaXZlX3BhdGgsIGNvbnN0IGNoXG4gXHRyZXQgPSBlbGZfZmluZF9mdW5jX29mZnNldChlbGYsIGZpbGVfbmFtZSwgZnVuY19uYW1lKTtcbiBcdGlmIChyZXQgXHUwMDNlIDApIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7ZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJXMgb2YgJXMgaW4gJXM6IDB4JXggJiM0MzsgMHglbHggPSAweCVseFxcblwmIzM0Oyxcbi1cdFx0XHQgZnVuY19uYW1lLCBmaWxlX25hbWUsIGFyY2hpdmVfcGF0aCwgZW50cnkuZGF0YV9vZmZzZXQsIHJldCxcbi1cdFx0XHQgcmV0ICYjNDM7IGVudHJ5LmRhdGFfb2Zmc2V0KTtcbiYjNDM7XHRcdFx0IGZ1bmNfbmFtZSwgZmlsZV9uYW1lLCBhcmNoaXZlX3BhdGgsIGVudHJ5LmRhdGFfb2Zmc2V0LCAodW5zaWduZWQgbG9uZylyZXQsXG4mIzQzO1x0XHRcdCAodW5zaWduZWQgbG9uZykocmV0ICYjNDM7IGVudHJ5LmRhdGFfb2Zmc2V0KSk7XG4gXHRcdHJldCAmIzQzOz0gZW50cnkuZGF0YV9vZmZzZXQ7XG4gXHR9XG4gXHRlbGZfZW5kKGVsZik7XG5AQCAtMTQ1NzAsNyAmIzQzOzE0NTcwLDcgQEAgcGVyZl9idWZmZXJfX3Byb2Nlc3NfcmVjb3JkKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqZSwgdm9pZCAqY3R4KVxuIFx0XHRicmVhaztcbiBcdH1cbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7dW5rbm93biBwZXJmIHNhbXBsZSB0eXBlICVkXFxuXCYjMzQ7LCBlLVx1MDAzZXR5cGUpO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcXG5cJiMzNDssIGUtXHUwMDNldHlwZSk7XG4gXHRcdHJldHVybiBMSUJCUEZfUEVSRl9FVkVOVF9FUlJPUjtcbiBcdH1cbiBcdHJldHVybiBMSUJCUEZfUEVSRl9FVkVOVF9DT05UO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmMgYi90b29scy9saWIvYnBmL25sYXR0ci5jXG5pbmRleCAwNjY2M2Y5ZWE1ODFmOS4uMDA3ZmUxN2QxN2I0MjkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL25sYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL25sYXR0ci5jXG5AQCAtMTIzLDcgJiM0MzsxMjMsNyBAQCBpbnQgbGliYnBmX25sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwgc3RydWN0IG5sYXR0ciAqaGVhZCxcbiBcbiBcdFx0aWYgKHRiW3R5cGVdKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDtBdHRyaWJ1dGUgb2YgdHlwZSAlI3ggZm91bmQgbXVsdGlwbGUgdGltZXMgaW4gbWVzc2FnZSwgXCYjMzQ7XG4tXHRcdFx0XHRcJiMzNDtwcmV2aW91cyBhdHRyaWJ1dGUgaXMgYmVpbmcgaWdub3JlZC5cXG5cJiMzNDssIHR5cGUpO1xuJiM0MztcdFx0XHRcdFwmIzM0O3ByZXZpb3VzIGF0dHJpYnV0ZSBpcyBiZWluZyBpZ25vcmVkLlxcblwmIzM0OywgKHVuc2lnbmVkKXR5cGUpO1xuIFx0XHR9XG4gXG4gXHRcdHRiW3R5cGVdID0gbmxhO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmMgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5pbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5AQCAtMjE2LDcgJiM0MzsyMTYsNyBAQCBpbnQgX19icGZfY29yZV90eXBlc19hcmVfY29tcGF0KGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsXG4gXHRcdGdvdG8gcmVjdXI7XG4gXHR9XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxcblwmIzM0OyxcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdHlwZSksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMzg0LDcgJiM0MzszODQsNyBAQCBpbnQgYnBmX2NvcmVfcGFyc2Vfc3BlYyhjb25zdCBjaGFyICpwcm9nX25hbWUsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHRcdHJldHVybiBzejtcbiBcdFx0XHRzcGVjLVx1MDAzZWJpdF9vZmZzZXQgJiM0Mzs9IGFjY2Vzc19pZHggKiBzeiAqIDg7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyBmb3IgWyV1XSAlcyAoYXQgaWR4ICVkKSBjYXB0dXJlcyB0eXBlIFslZF0gb2YgdW5leHBlY3RlZCBraW5kICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvIGZvciBbJXVdICVzIChhdCBpZHggJWQpIGNhcHR1cmVzIHR5cGUgWyV1XSBvZiB1bmV4cGVjdGVkIGtpbmQgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRwcm9nX25hbWUsIHJlbG8tXHUwMDNldHlwZV9pZCwgc3BlY19zdHIsIGksIGlkLCBidGZfa2luZF9zdHIodCkpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtNzI1LDcgJiM0Mzs3MjUsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHQqdmFsID0gc3o7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4mIzM5O3QgYmUgYXBwbGllZCB0byBhcnJheSBhY2Nlc3NcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJiMzOTt0IGJlIGFwcGxpZWQgdG8gYXJyYXkgYWNjZXNzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvLVx1MDAzZWtpbmQsIHJlbG8tXHUwMDNlaW5zbl9vZmYgLyA4KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTc0Nyw3ICYjNDM7NzQ3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFx0XHR3aGlsZSAoYml0X29mZiAmIzQzOyBiaXRfc3ogLSBieXRlX29mZiAqIDggXHUwMDNlIGJ5dGVfc3ogKiA4KSB7XG4gXHRcdFx0aWYgKGJ5dGVfc3ogXHUwMDNlPSA4KSB7XG4gXHRcdFx0XHQvKiBiaXRmaWVsZCBjYW4mIzM5O3QgYmUgcmVhZCB3aXRoIDY0LWJpdCByZWFkICovXG4tXHRcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICVkIGF0IGluc24gIyVkIGNhbiYjMzk7dCBiZSBzYXRpc2ZpZWQgZm9yIGJpdGZpZWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJiMzOTt0IGJlIHNhdGlzZmllZCBmb3IgYml0ZmllbGRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdHByb2dfbmFtZSwgcmVsby1cdTAwM2VraW5kLCByZWxvLVx1MDAzZWluc25fb2ZmIC8gOCk7XG4gXHRcdFx0XHRyZXR1cm4gLUUyQklHO1xuIFx0XHRcdH1cbkBAIC05NzEsNyAmIzQzOzk3MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2NvcmVfY2FsY19yZWxvKGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcbiBcdFx0ZXJyID0gMDtcbiBcdH0gZWxzZSBpZiAoZXJyID09IC1FT1BOT1RTVVBQKSB7XG4gXHRcdC8qIEVPUE5PVFNVUFAgbWVhbnMgdW5rbm93bi91bnN1cHBvcnRlZCByZWxvY2F0aW9uICovXG4tXHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bnJlY29nbml6ZWQgQ08tUkUgcmVsb2NhdGlvbiAlcyAoJWQpIGF0IGluc24gIyVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVucmVjb2duaXplZCBDTy1SRSByZWxvY2F0aW9uICVzICgldSkgYXQgaW5zbiAjJXVcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgY29yZV9yZWxvX2tpbmRfc3RyKHJlbG8tXHUwMDNla2luZCksXG4gXHRcdFx0cmVsby1cdTAwM2VraW5kLCByZWxvLVx1MDAzZWluc25fb2ZmIC8gOCk7XG4gXHR9XG5AQCAtMTA2Nyw3ICYjNDM7MTA2Nyw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAocmVzLVx1MDAzZXZhbGlkYXRlIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSAhPSBvcmlnX3ZhbCkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKEFMVS9BTFU2NCkgdmFsdWU6IGdvdCAlZCwgZXhwICVsbHUgLVx1MDAzZSAlbGx1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCxcbiBcdFx0XHRcdGluc25faWR4LCBpbnNuLVx1MDAzZWltbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcbiBcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XG5AQCAtMTA4Myw3ICYjNDM7MTA4Myw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0Y2FzZSBCUEZfU1Q6XG4gXHRjYXNlIEJQRl9TVFg6XG4gXHRcdGlmIChyZXMtXHUwMDNldmFsaWRhdGUgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmICE9IG9yaWdfdmFsKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwmIzM0OyxcbiBcdFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGluc25faWR4LCBpbnNuLVx1MDAzZW9mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcbiBcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE1OSw3ICYjNDM7MTE1OSw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0ZGVmYXVsdDpcbiBcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHRyeWluZyB0byByZWxvY2F0ZSB1bnJlY29nbml6ZWQgaW5zbiAjJWQsIGNvZGU6MHgleCwgc3JjOjB4JXgsIGRzdDoweCV4LCBvZmY6MHgleCwgaW1tOjB4JXhcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXHUwMDNlY29kZSxcbi1cdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdFx0KHVuc2lnbmVkKWluc24tXHUwMDNlc3JjX3JlZywgKHVuc2lnbmVkKWluc24tXHUwMDNlZHN0X3JlZywgKHVuc2lnbmVkKWluc24tXHUwMDNlb2ZmLCAodW5zaWduZWQpaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0xMzIzLDcgJiM0MzsxMzIzLDcgQEAgaW50IGJwZl9jb3JlX2NhbGNfcmVsb19pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcbiBcdFx0Y29uc3QgY2hhciAqc3BlY19zdHI7XG4gXG4gXHRcdHNwZWNfc3RyID0gYnRmX19uYW1lX2J5X29mZnNldChsb2NhbF9idGYsIHJlbG8tXHUwMDNlYWNjZXNzX3N0cl9vZmYpO1xuLVx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogcGFyc2luZyBbJWRdICVzICVzICYjNDM7ICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogcGFyc2luZyBbJXVdICVzICVzICYjNDM7ICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgbG9jYWxfaWQsIGJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSxcbiBcdFx0XHRzdHJfaXNfZW1wdHkobG9jYWxfbmFtZSkgPyBcJiMzNDtcdTAwM2Nhbm9uXHUwMDNlXCYjMzQ7IDogbG9jYWxfbmFtZSxcbiBcdFx0XHRzcGVjX3N0ciA/OiBcJiMzNDtcdTAwM2M/XHUwMDNlXCYjMzQ7LCBlcnIpO1xuQEAgLTEzNDYsNyAmIzQzOzEzNDYsNyBAQCBpbnQgYnBmX2NvcmVfY2FsY19yZWxvX2luc24oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFxuIFx0LyogbGliYnBmIGRvZXNuJiMzOTt0IHN1cHBvcnQgY2FuZGlkYXRlIHNlYXJjaCBmb3IgYW5vbnltb3VzIHR5cGVzICovXG4gXHRpZiAoc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBcdTAwM2Mlc1x1MDAzZSAoJWQpIHJlbG9jYXRpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBhbm9ueW1vdXMgdHlwZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogXHUwMDNjJXNcdTAwM2UgKCV1KSByZWxvY2F0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXFxuXCYjMzQ7LFxuIFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVx1MDAzZWtpbmQpLCByZWxvLVx1MDAzZWtpbmQpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTY5Nyw3ICYjNDM7MTY5Nyw3IEBAIGludCBfX2JwZl9jb3JlX3R5cGVzX21hdGNoKGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsIGNvbnN0IHN0XG4gXHRcdGdvdG8gcmVjdXI7XG4gXHR9XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxcblwmIzM0OyxcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdCksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi91c2R0LmMgYi90b29scy9saWIvYnBmL3VzZHQuY1xuaW5kZXggNTdmYjgyYmI4MWI1ODguLmRiOTQzMmFkYjk2N2I2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi91c2R0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvdXNkdC5jXG5AQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgaW50IHNhbml0eV9jaGVja191c2R0X2VsZihFbGYgKmVsZiwgY29uc3QgY2hhciAqcGF0aClcbiBcdGludCBlbmRpYW5uZXNzO1xuIFxuIFx0aWYgKGVsZl9raW5kKGVsZikgIT0gRUxGX0tfRUxGKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7dXNkdDogdW5yZWNvZ25pemVkIEVMRiBraW5kICVkIGZvciAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIGVsZl9raW5kKGVsZiksIHBhdGgpO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1c2R0OiB1bnJlY29nbml6ZWQgRUxGIGtpbmQgJXUgZm9yICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZWxmX2tpbmQoZWxmKSwgcGF0aCk7XG4gXHRcdHJldHVybiAtRUJBREY7XG4gXHR9XG4gXG5AQCAtNDM4LDggJiM0Mzs0MzgsOSBAQCBzdGF0aWMgaW50IHBhcnNlX2VsZl9zZWdzKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZWxmX3NlZyAqKnNlZ3MsIHNpelxuIFx0XHR9XG4gXG4gXHRcdHByX2RlYnVnKFwmIzM0O3VzZHQ6IGRpc2NvdmVyZWQgUEhEUiAjJWQgaW4gJiMzOTslcyYjMzk7OiB2YWRkciAweCVseCBtZW1zeiAweCVseCBvZmZzZXQgMHglbHggdHlwZSAweCVseCBmbGFncyAweCVseFxcblwmIzM0Oyxcbi1cdFx0XHQgaSwgcGF0aCwgKGxvbmcpcGhkci5wX3ZhZGRyLCAobG9uZylwaGRyLnBfbWVtc3osIChsb25nKXBoZHIucF9vZmZzZXQsXG4tXHRcdFx0IChsb25nKXBoZHIucF90eXBlLCAobG9uZylwaGRyLnBfZmxhZ3MpO1xuJiM0MztcdFx0XHQgaSwgcGF0aCxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nKXBoZHIucF92YWRkciwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX21lbXN6LCAodW5zaWduZWQgbG9uZylwaGRyLnBfb2Zmc2V0LFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpcGhkci5wX3R5cGUsICh1bnNpZ25lZCBsb25nKXBoZHIucF9mbGFncyk7XG4gXHRcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9MT0FEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTcxOSwxNCAmIzQzOzcyMCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRpZiAoIXNlZykge1xuIFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3VzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBwcm9ncmFtIHNlZ21lbnQgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAmIzM5OyVzJiMzOTsgYXQgSVAgMHglbHhcXG5cJiMzNDssXG4tXHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsIHVzZHRfYWJzX2lwKTtcbiYjNDM7XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwKTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdFx0aWYgKCFzZWctXHUwMDNlaXNfZXhlYykge1xuIFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3VzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAmIzM5OyVzJiMzOTsgc2VnbWVudCBbMHglbHgsIDB4JWx4KSBmb3IgJiMzOTslczolcyYjMzk7IGF0IElQIDB4JWx4IGlzIG5vdCBleGVjdXRhYmxlXFxuXCYjMzQ7LFxuLVx0XHRcdFx0cGF0aCwgc2VnLVx1MDAzZXN0YXJ0LCBzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4tXHRcdFx0XHR1c2R0X2Fic19pcCk7XG4mIzQzO1x0XHRcdFx0cGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4mIzQzO1x0XHRcdFx0KHVuc2lnbmVkIGxvbmcpdXNkdF9hYnNfaXApO1xuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0XHQvKiB0cmFuc2xhdGUgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gZmlsZSBvZmZzZXQgKi9cbkBAIC03NjYsNyAmIzQzOzc2Nyw3IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXG4gXHRcdFx0aWYgKCFzZWcpIHtcbiBcdFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRcdHByX3dhcm4oXCYjMzQ7dXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OyBhdCByZWxhdGl2ZSBJUCAweCVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCB1c2R0X3JlbF9pcCk7XG4mIzQzO1x0XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfcmVsX2lwKTtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4gXG5AQCAtNzc1LDggJiM0Mzs3NzYsMTAgQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCxcbiBcbiBcdFx0cHJfZGVidWcoXCYjMzQ7dXNkdDogcHJvYmUgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAlcyAmIzM5OyVzJiMzOTs6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAmIzM5OyVzJiMzOTsgaW4gc2VnbWVudCBbMHglbHgsIDB4JWx4KSBhdCBvZmZzZXQgMHglbHhcXG5cJiMzNDssXG4gXHRcdFx0IHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/IFwmIzM0O2V4ZWNcJiMzNDsgOiBcJiMzNDtsaWIgXCYjMzQ7LCBwYXRoLFxuLVx0XHRcdCBub3RlLmxvY19hZGRyLCBub3RlLmJhc2VfYWRkciwgdXNkdF9hYnNfaXAsIHVzZHRfcmVsX2lwLCBub3RlLmFyZ3MsXG4tXHRcdFx0IHNlZyA/IHNlZy1cdTAwM2VzdGFydCA6IDAsIHNlZyA/IHNlZy1cdTAwM2VlbmQgOiAwLCBzZWcgPyBzZWctXHUwMDNlb2Zmc2V0IDogMCk7XG4mIzQzO1x0XHRcdCAodW5zaWduZWQgbG9uZylub3RlLmxvY19hZGRyLCAodW5zaWduZWQgbG9uZylub3RlLmJhc2VfYWRkcixcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy1cdTAwM2VzdGFydCA6IDApLCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVx1MDAzZWVuZCA6IDApLFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy1cdTAwM2VvZmZzZXQgOiAwKSk7XG4gXG4gXHRcdC8qIEFkanVzdCBzZW1hcGhvcmUgYWRkcmVzcyB0byBiZSBhIGZpbGUgb2Zmc2V0ICovXG4gXHRcdGlmIChub3RlLnNlbWFfYWRkcikge1xuQEAgLTc5MSwxNCAmIzQzOzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRcdGlmICghc2VnKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwmIzM0O3VzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBsb2FkYWJsZSBzZWdtZW50IHdpdGggc2VtYXBob3JlIG9mICYjMzk7JXM6JXMmIzM5OyBpbiAmIzM5OyVzJiMzOTsgYXQgMHglbHhcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgbm90ZS5zZW1hX2FkZHIpO1xuJiM0MztcdFx0XHRcdFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkcik7XG4gXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChzZWctXHUwMDNlaXNfZXhlYykge1xuIFx0XHRcdFx0ZXJyID0gLUVTUkNIO1xuIFx0XHRcdFx0cHJfd2FybihcJiMzNDt1c2R0OiBtYXRjaGVkIEVMRiBiaW5hcnkgJiMzOTslcyYjMzk7IHNlZ21lbnQgWzB4JWx4LCAweCVseF0gZm9yIHNlbWFwaG9yZSBvZiAmIzM5OyVzOiVzJiMzOTsgYXQgMHglbHggaXMgZXhlY3V0YWJsZVxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0cGF0aCwgc2VnLVx1MDAzZXN0YXJ0LCBzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4tXHRcdFx0XHRcdG5vdGUuc2VtYV9hZGRyKTtcbiYjNDM7XHRcdFx0XHRcdHBhdGgsICh1bnNpZ25lZCBsb25nKXNlZy1cdTAwM2VzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZWVuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xuIFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHRcdH1cbiBcbkBAIC04MDYsOCAmIzQzOzgwOSw4IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXG4gXG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7dXNkdDogc2VtYSAgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAlcyAmIzM5OyVzJiMzOTs6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgMHglbHgpIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gYXQgb2Zmc2V0IDB4JWx4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/IFwmIzM0O2V4ZWNcJiMzNDsgOiBcJiMzNDtsaWIgXCYjMzQ7LFxuLVx0XHRcdFx0IHBhdGgsIG5vdGUuc2VtYV9hZGRyLCBub3RlLmJhc2VfYWRkciwgdXNkdF9zZW1hX29mZixcbi1cdFx0XHRcdCBzZWctXHUwMDNlc3RhcnQsIHNlZy1cdTAwM2VlbmQsIHNlZy1cdTAwM2VvZmZzZXQpO1xuJiM0MztcdFx0XHRcdCBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsICh1bnNpZ25lZCBsb25nKXVzZHRfc2VtYV9vZmYsXG4mIzQzO1x0XHRcdFx0ICh1bnNpZ25lZCBsb25nKXNlZy1cdTAwM2VzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZWVuZCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZW9mZnNldCk7XG4gXHRcdH1cbiBcbiBcdFx0LyogUmVjb3JkIGFkanVzdGVkIGFkZHJlc3NlcyBhbmQgb2Zmc2V0cyBhbmQgcGFyc2UgVVNEVCBzcGVjICovXG5AQCAtMTExNyw3ICYjNDM7MTEyMCw3IEBAIHN0cnVjdCBicGZfbGluayAqdXNkdF9tYW5hZ2VyX2F0dGFjaF91c2R0KHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgY29uc3Qgc3RydWN0XG4gXHRcdFx0XHQgICAgICAgIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHByX3dhcm4oXCYjMzQ7dXNkdDogZmFpbGVkIHRvIG1hcCBJUCAweCVseCB0byBzcGVjICMlZCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OzogJXNcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHRhcmdldC1cdTAwM2VhYnNfaXAsIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKXRhcmdldC1cdTAwM2VhYnNfaXAsIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbiBcdFx0XHRcdFx0cGF0aCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTA6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBmb3JtYXQgc3BlY2lmaWVycyBpbiBsb2dnaW5nIGZ1bmN0aW9ucyAocHJfd2FybiwgcHJfZGVidWcpIGFuZCBvbmUgc3NjYW5mIGNhbGwgaW4gdXNlci1zcGFjZSBsaWJicGYgY29kZSAodG9vbHMvbGliL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzYWFhNTE5YzIxMmE4N2Q4ZDRkZjJlNDljNTM2NzhhYzY5ZDljYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAxMDo1NjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jCmluZGV4IDgyM2JjZTg5NTE3OGRhLi5iZjZhNjgxMTg0MDUxMyAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jCkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyBpbnQgYnRmX3BhcnNlX3R5cGVfc2VjKHN0cnVjdCBidGYgKmJ0ZikKIAkJaWYgKHR5cGVfc2l6ZSAmbHQ7IDApCiAJCQlyZXR1cm4gdHlwZV9zaXplOwogCQlpZiAobmV4dF90eXBlICYjNDM7IHR5cGVfc2l6ZSAmZ3Q7IGVuZF90eXBlKSB7Ci0JCQlwcl93YXJuKCYjMzQ7QlRGIHR5cGUgWyVkXSBpcyBtYWxmb3JtZWRcbiYjMzQ7LCBidGYtJmd0O3N0YXJ0X2lkICYjNDM7IGJ0Zi0mZ3Q7bnJfdHlwZXMpOwomIzQzOwkJCXByX3dhcm4oJiMzNDtCVEYgdHlwZSBbJXVdIGlzIG1hbGZvcm1lZFxuJiMzNDssIGJ0Zi0mZ3Q7c3RhcnRfaWQgJiM0MzsgYnRmLSZndDtucl90eXBlcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xNDI0LDcgJiM0MzsxNDI0LDcgQEAgc3RhdGljIGludCBidGZfZmluZF9lbGZfc2VjdGlvbnMoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidGZfZWxmX3NlY3MKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzaC5zaF90eXBlICE9IFNIVF9QUk9HQklUUykgewotCQkJcHJfd2FybigmIzM0O3VuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICglZCkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIHNlY3Rpb24gdHlwZSAoJXUpIG9mIHNlY3Rpb24oJWQsICVzKSBmcm9tICVzXG4mIzM0OywKIAkJCQlzaC5zaF90eXBlLCBpZHgsIG5hbWUsIHBhdGgpOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTQ4NTQsNyAmIzQzOzQ4NTQsNyBAQCBzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIG0xLSZndDt0eXBlLCBtMi0mZ3Q7dHlwZSwgZGVwdGggLSAxKSkgewogCQkJCWlmICh0MS0mZ3Q7bmFtZV9vZmYpIHsKLQkJCQkJcHJfZGVidWcoJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0lZCB2bGVuPSVkIGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJCQkJcHJfZGVidWcoJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0ldSB2bGVuPSV1IGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcbiYjMzQ7LAogCQkJCQkJIGsxID09IEJURl9LSU5EX1NUUlVDVCA/ICYjMzQ7U1RSVUNUJiMzNDsgOiAmIzM0O1VOSU9OJiMzNDssCiAJCQkJCQkgYnRmX19uYW1lX2J5X29mZnNldChkLSZndDtidGYsIHQxLSZndDtuYW1lX29mZiksCiAJCQkJCQkgdDEtJmd0O3NpemUsIGJ0Zl92bGVuKHQxKSwgaWQxLCBpZDIsIGksCkBAIC01MTA0LDcgJiM0Mzs1MTA0LDcgQEAgc3RhdGljIGludCBidGZfZGVkdXBfaXNfZXF1aXYoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgY2FuZF9pZCwKIAkJCWVxID0gYnRmX2RlZHVwX2lzX2VxdWl2KGQsIGNhbmRfbS0mZ3Q7dHlwZSwgY2Fub25fbS0mZ3Q7dHlwZSk7CiAJCQlpZiAoZXEgJmx0Oz0gMCkgewogCQkJCWlmIChjYW5kX3R5cGUtJmd0O25hbWVfb2ZmKSB7Ci0JCQkJCXByX2RlYnVnKCYjMzQ7JXMgJiMzOTslcyYjMzk7IHNpemU9JWQgdmxlbj0lZCBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTs6ICVkXG4mIzM0OywKJiM0MzsJCQkJCXByX2RlYnVnKCYjMzQ7JXMgJiMzOTslcyYjMzk7IHNpemU9JXUgdmxlbj0ldSBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTs6ICVkXG4mIzM0OywKIAkJCQkJCSBjYW5kX2tpbmQgPT0gQlRGX0tJTkRfU1RSVUNUID8gJiMzNDtTVFJVQ1QmIzM0OyA6ICYjMzQ7VU5JT04mIzM0OywKIAkJCQkJCSBidGZfX25hbWVfYnlfb2Zmc2V0KGQtJmd0O2J0ZiwgY2FuZF90eXBlLSZndDtuYW1lX29mZiksCiAJCQkJCQkgY2FuZF90eXBlLSZndDtzaXplLCB2bGVuLCBjYW5kX2lkLCBjYW5vbl9pZCwgaSwKQEAgLTYwNjksNyAmIzQzOzYwNjksNyBAQCBzdGF0aWMgaW50IGJ0Zl9hZGRfZGlzdGlsbGVkX3R5cGVzKHN0cnVjdCBidGZfZGlzdGlsbCAqZGlzdCkKIAkJCWVyciA9IGJ0Zl9hZGRfdHlwZSgmYW1wO2Rpc3QtJmd0O3BpcGUsIHQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBraW5kIHdoZW4gYWRkaW5nIGJhc2UgdHlwZSAmIzM5OyVzJiMzOTtbJXVdIG9mIGtpbmQgWyV1XSB0byBkaXN0aWxsZWQgYmFzZSBCVEYuXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBraW5kIHdoZW4gYWRkaW5nIGJhc2UgdHlwZSAmIzM5OyVzJiMzOTtbJWRdIG9mIGtpbmQgWyVkXSB0byBkaXN0aWxsZWQgYmFzZSBCVEYuXG4mIzM0OywKIAkJCQluYW1lLCBpLCBraW5kKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMKaW5kZXggY2MxYmE2NWJiNmM1YWMuLjEyM2M0NDhmMjBjNzQ2IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9idGZfZHVtcC5jCkBAIC0xNzc2LDcgJiM0MzsxNzc2LDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfYml0ZmllbGRfdmFsdWUoc3RydWN0IGJ0Zl9kdW1wICpkLAogCiAJLyogTWF4aW11bSBzdXBwb3J0ZWQgYml0ZmllbGQgc2l6ZSBpcyA2NCBiaXRzICovCiAJaWYgKHQtJmd0O3NpemUgJmd0OyA4KSB7Ci0JCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJWRcbiYjMzQ7LCB0LSZndDtzaXplKTsKJiM0MzsJCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJXVcbiYjMzQ7LCB0LSZndDtzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjUxLDcgJiM0MzsyMjUxLDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfZW51bV92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsCiAJCSp2YWx1ZSA9IGlzX3NpZ25lZCA/ICooX19zOCAqKWRhdGEgOiAqKF9fdTggKilkYXRhOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgotCQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXG4mIzM0OywgdC0mZ3Q7c2l6ZSwgaWQpOwomIzQzOwkJcHJfd2FybigmIzM0O3VuZXhwZWN0ZWQgc2l6ZSAldSBmb3IgZW51bSwgaWQ6WyV1XVxuJiMzNDssIHQtJmd0O3NpemUsIGlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGZfcmVsb2NhdGUuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMKaW5kZXggNTNkMWYzNTQxYmNlNjkuLmRmNWZhNGJkODdkNjlhIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMKQEAgLTI4MCw3ICYjNDM7MjgwLDcgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfbWFwX2Rpc3RpbGxlZF9iYXNlKHN0cnVjdCBidGZfcmVsb2NhdGUgKnIpCiAJCSAgICAgY21wX2J0Zl9uYW1lX3NpemUoJmFtcDtiYXNlX2luZm8sIGRpc3RfaW5mbykgPT0gMDsKIAkJICAgICBkaXN0X2luZm8mIzQzOyYjNDM7KSB7CiAJCQlpZiAoIWRpc3RfaW5mby0mZ3Q7aWQgfHwgZGlzdF9pbmZvLSZndDtpZCAmZ3Q7PSByLSZndDtucl9kaXN0X2Jhc2VfdHlwZXMpIHsKLQkJCQlwcl93YXJuKCYjMzQ7YmFzZSBCVEYgaWQgWyVkXSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFslZF1cbiYjMzQ7LAomIzQzOwkJCQlwcl93YXJuKCYjMzQ7YmFzZSBCVEYgaWQgWyV1XSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFsldV1cbiYjMzQ7LAogCQkJCQlpZCwgZGlzdF9pbmZvLSZndDtpZCk7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CkBAIC0zNjgsNyAmIzQzOzM2OCw3IEBAIHN0YXRpYyBpbnQgYnRmX3JlbG9jYXRlX21hcF9kaXN0aWxsZWRfYmFzZShzdHJ1Y3QgYnRmX3JlbG9jYXRlICpyKQogCQkJY29udGludWU7CiAJCWRpc3RfdCA9IGJ0Zl90eXBlX2J5X2lkKHItJmd0O2Rpc3RfYmFzZV9idGYsIGlkKTsKIAkJbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoci0mZ3Q7ZGlzdF9iYXNlX2J0ZiwgZGlzdF90LSZndDtuYW1lX29mZik7Ci0JCXByX3dhcm4oJiMzNDtkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAmIzM5OyVzJiMzOTsgWyVkXSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAmIzM5OyVzJiMzOTsgWyV1XSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXG4mIzM0OywKIAkJCW5hbWUsIGlkKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC0zOTcsMTEgJiM0MzszOTcsMTEgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfdmFsaWRhdGVfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcikKIAkJY2FzZSBCVEZfS0lORF9GV0Q6CiAJCQlpZiAodC0mZ3Q7bmFtZV9vZmYpCiAJCQkJYnJlYWs7Ci0JCQlwcl93YXJuKCYjMzQ7dHlwZSBbJWRdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDt0eXBlIFsldV0sIGtpbmQgWyVkXSBpcyBpbnZhbGlkIGZvciBkaXN0aWxsZWQgYmFzZSBCVEY7IGl0IGlzIGFub255bW91c1xuJiMzNDssCiAJCQkJaSwga2luZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZGVmYXVsdDoKLQkJCXByX3dhcm4oJiMzNDt0eXBlIFslZF0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDt0eXBlIFsldV0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cbiYjMzQ7LAogCQkJCWksIGtpbmQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jCmluZGV4IDI5NWRiZGEyNDU4MDcxLi5mZTEzNmQwMjU5Njc5ZiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9lbGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2VsZi5jCkBAIC0zNTQsNyAmIzQzOzM1NCw3IEBAIGxvbmcgZWxmX2ZpbmRfZnVuY19vZmZzZXQoRWxmICplbGYsIGNvbnN0IGNoYXIgKmJpbmFyeV9wYXRoLCBjb25zdCBjaGFyICpuYW1lKQogCiAJaWYgKHJldCAmZ3Q7IDApIHsKIAkJcHJfZGVidWcoJiMzNDtlbGY6IHN5bWJvbCBhZGRyZXNzIG1hdGNoIGZvciAmIzM5OyVzJiMzOTsgaW4gJiMzOTslcyYjMzk7OiAweCVseFxuJiMzNDssIG5hbWUsIGJpbmFyeV9wYXRoLAotCQkJIHJldCk7CiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKXJldCk7CiAJfSBlbHNlIHsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlwcl93YXJuKCYjMzQ7ZWxmOiAmIzM5OyVzJiMzOTsgaXMgMCBpbiBzeW10YWIgZm9yICYjMzk7JXMmIzM5OzogJXNcbiYjMzQ7LCBuYW1lLCBiaW5hcnlfcGF0aCwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmMKaW5kZXggZDc5Njk1ZjAxYzg3ZjMuLmM3ZjJkMmFjN2JiMzVmIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwpAQCAtMzg0LDcgJiM0MzszODQsNyBAQCBpbnQgYnBmX2dlbl9fZmluaXNoKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBucl9wcm9ncywgaW50IG5yX21hcHMpCiAJaW50IGk7CiAKIAlpZiAobnJfcHJvZ3MgJmx0OyBnZW4tJmd0O25yX3Byb2dzIHx8IG5yX21hcHMgIT0gZ2VuLSZndDtucl9tYXBzKSB7Ci0JCXByX3dhcm4oJiMzNDtucl9wcm9ncyAlZC8lZCBucl9tYXBzICVkLyVkIG1pc21hdGNoXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtucl9wcm9ncyAlZC8ldSBucl9tYXBzICVkLyV1IG1pc21hdGNoXG4mIzM0OywKIAkJCW5yX3Byb2dzLCBnZW4tJmd0O25yX3Byb2dzLCBucl9tYXBzLCBnZW4tJmd0O25yX21hcHMpOwogCQlnZW4tJmd0O2Vycm9yID0gLUVGQVVMVDsKIAkJcmV0dXJuIGdlbi0mZ3Q7ZXJyb3I7CkBAIC00ODgsNyAmIzQzOzQ4OCw3IEBAIHZvaWQgYnBmX2dlbl9fbG9hZF9idGYoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3Qgdm9pZCAqYnRmX3Jhd19kYXRhLAogCiAJYXR0ci5idGZfc2l6ZSA9IHRndF9lbmRpYW4oYnRmX3Jhd19zaXplKTsKIAlidGZfbG9hZF9hdHRyID0gYWRkX2RhdGEoZ2VuLCAmYW1wO2F0dHIsIGF0dHJfc2l6ZSk7Ci0JcHJfZGVidWcoJiMzNDtnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogbG9hZF9idGY6IG9mZiAlZCBzaXplICV1LCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxuJiMzNDssCiAJCSBidGZfZGF0YSwgYnRmX3Jhd19zaXplLCBidGZfbG9hZF9hdHRyLCBhdHRyX3NpemUpOwogCiAJLyogcG9wdWxhdGUgdW5pb24gYnBmX2F0dHIgd2l0aCB1c2VyIHByb3ZpZGVkIGxvZyBkZXRhaWxzICovCkBAIC01MzQsNyAmIzQzOzUzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX2NyZWF0ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLAogCWF0dHIuYnRmX3ZhbHVlX3R5cGVfaWQgPSB0Z3RfZW5kaWFuKG1hcF9hdHRyLSZndDtidGZfdmFsdWVfdHlwZV9pZCk7CiAKIAltYXBfY3JlYXRlX2F0dHIgPSBhZGRfZGF0YShnZW4sICZhbXA7YXR0ciwgYXR0cl9zaXplKTsKLQlwcl9kZWJ1ZygmIzM0O2dlbjogbWFwX2NyZWF0ZTogJXMgaWR4ICVkIHR5cGUgJWQgdmFsdWVfdHlwZV9pZCAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogbWFwX2NyZWF0ZTogJXMgaWR4ICVkIHR5cGUgJXUgdmFsdWVfdHlwZV9pZCAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcbiYjMzQ7LAogCQkgbWFwX25hbWUsIG1hcF9pZHgsIG1hcF90eXBlLCBtYXBfYXR0ci0mZ3Q7YnRmX3ZhbHVlX3R5cGVfaWQsCiAJCSBtYXBfY3JlYXRlX2F0dHIsIGF0dHJfc2l6ZSk7CiAKQEAgLTEwODIsNyAmIzQzOzEwODIsNyBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLAogCWxpY2Vuc2Vfb2ZmID0gYWRkX2RhdGEoZ2VuLCBsaWNlbnNlLCBzdHJsZW4obGljZW5zZSkgJiM0MzsgMSk7CiAJLyogYWRkIGluc25zIHRvIGJsb2Igb2YgYnl0ZXMgKi8KIAlpbnNuc19vZmYgPSBhZGRfZGF0YShnZW4sIGluc25zLCBpbnNuX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pKTsKLQlwcl9kZWJ1ZygmIzM0O2dlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICVkIGluc24gb2ZmICVkIGluc25zX2NudCAlemQgbGljZW5zZSBvZmYgJWRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICV1IGluc24gb2ZmICVkIGluc25zX2NudCAlenUgbGljZW5zZSBvZmYgJWRcbiYjMzQ7LAogCQkgcHJvZ19pZHgsIHByb2dfdHlwZSwgaW5zbnNfb2ZmLCBpbnNuX2NudCwgbGljZW5zZV9vZmYpOwogCiAJLyogY29udmVydCBibG9iIGluc25zIHRvIHRhcmdldCBlbmRpYW5uZXNzICovCkBAIC0xMTA1LDIxICYjNDM7MTEwNSwyMSBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLAogCWF0dHIuZnVuY19pbmZvX3JlY19zaXplID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2Z1bmNfaW5mb19yZWNfc2l6ZSk7CiAJYXR0ci5mdW5jX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2Z1bmNfaW5mb19jbnQpOwogCWZ1bmNfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLSZndDtmdW5jX2luZm8sIGZ1bmNfaW5mb190b3Rfc3opOwotCXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxuJiMzNDssCiYjNDM7CXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAldSByZWMgc2l6ZSAldVxuJiMzNDssCiAJCSBmdW5jX2luZm8sIGxvYWRfYXR0ci0mZ3Q7ZnVuY19pbmZvX2NudCwKIAkJIGxvYWRfYXR0ci0mZ3Q7ZnVuY19pbmZvX3JlY19zaXplKTsKIAogCWF0dHIubGluZV9pbmZvX3JlY19zaXplID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2xpbmVfaW5mb19yZWNfc2l6ZSk7CiAJYXR0ci5saW5lX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2xpbmVfaW5mb19jbnQpOwogCWxpbmVfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLSZndDtsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opOwotCXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxuJiMzNDssCiYjNDM7CXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAldSByZWMgc2l6ZSAldVxuJiMzNDssCiAJCSBsaW5lX2luZm8sIGxvYWRfYXR0ci0mZ3Q7bGluZV9pbmZvX2NudCwKIAkJIGxvYWRfYXR0ci0mZ3Q7bGluZV9pbmZvX3JlY19zaXplKTsKIAogCWF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gdGd0X2VuZGlhbigoX191MzIpc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7CiAJYXR0ci5jb3JlX3JlbG9fY250ID0gdGd0X2VuZGlhbihnZW4tJmd0O2NvcmVfcmVsb19jbnQpOwogCWNvcmVfcmVsb3MgPSBhZGRfZGF0YShnZW4sIGdlbi0mZ3Q7Y29yZV9yZWxvcywgY29yZV9yZWxvX3RvdF9zeik7Ci0JcHJfZGVidWcoJiMzNDtnZW46IHByb2dfbG9hZDogY29yZV9yZWxvczogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlemRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxuJiMzNDssCiAJCSBjb3JlX3JlbG9zLCBnZW4tJmd0O2NvcmVfcmVsb19jbnQsCiAJCSBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKTsKIApAQCAtMTIzNCw3ICYjNDM7MTIzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsCiAJfQogCiAJbWFwX3VwZGF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCAmYW1wO2F0dHIsIGF0dHJfc2l6ZSk7Ci0JcHJfZGVidWcoJiMzNDtnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXG4mIzM0OywKJiM0MzsJcHJfZGVidWcoJiMzNDtnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXG4mIzM0OywKIAkJIG1hcF9pZHgsIHZhbHVlLCB2YWx1ZV9zaXplLCBtYXBfdXBkYXRlX2F0dHIsIGF0dHJfc2l6ZSk7CiAJbW92ZV9ibG9iMmJsb2IoZ2VuLCBhdHRyX2ZpZWxkKG1hcF91cGRhdGVfYXR0ciwgbWFwX2ZkKSwgNCwKIAkJICAgICAgIGJsb2JfZmRfYXJyYXlfb2ZmKGdlbiwgbWFwX2lkeCkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggMTM2ODc1MmFhMTNjMzkuLjcxNjIxNDYyODBhODBlIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTE0ODYsNyAmIzQzOzE0ODYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3RydWN0X29wc19tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNlY19uYW1lLAogCQkgICAgICAgdHlwZS0mZ3Q7c2l6ZSk7CiAJCXN0X29wcy0mZ3Q7dHlwZV9pZCA9IHR5cGVfaWQ7CiAKLQkJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIGluaXQ6IHN0cnVjdCAlcyh0eXBlX2lkPSV1KSAlcyBmb3VuZCBhdCBvZmZzZXQgJXVcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIGluaXQ6IHN0cnVjdCAlcyh0eXBlX2lkPSVkKSAlcyBmb3VuZCBhdCBvZmZzZXQgJXVcbiYjMzQ7LAogCQkJIHRuYW1lLCB0eXBlX2lkLCB2YXJfbmFtZSwgdnNpLSZndDtvZmZzZXQpOwogCX0KIApAQCAtMjYyNiw3ICYjNDM7MjYyNiw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLAogCiAJCQl0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgbS0mZ3Q7dHlwZSk7CiAJCQlpZiAoIXQpIHsKLQkJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozoga2V5IHR5cGUgWyVkXSBub3QgZm91bmQuXG4mIzM0OywKJiM0MzsJCQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtleSB0eXBlIFsldV0gbm90IGZvdW5kLlxuJiMzNDssCiAJCQkJCW1hcF9uYW1lLCBtLSZndDt0eXBlKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTI2NjYsNyAmIzQzOzI2NjYsNyBAQCBpbnQgcGFyc2VfYnRmX21hcF9kZWYoY29uc3QgY2hhciAqbWFwX25hbWUsIHN0cnVjdCBidGYgKmJ0ZiwKIAogCQkJdCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tJmd0O3R5cGUpOwogCQkJaWYgKCF0KSB7Ci0JCQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHZhbHVlIHR5cGUgWyVkXSBub3QgZm91bmQuXG4mIzM0OywKJiM0MzsJCQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHZhbHVlIHR5cGUgWyV1XSBub3QgZm91bmQuXG4mIzM0OywKIAkJCQkJbWFwX25hbWUsIG0tJmd0O3R5cGUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQpAQCAtMjcyMCw3ICYjNDM7MjcyMCw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLAogCQkJbWFwX2RlZi0mZ3Q7dmFsdWVfc2l6ZSA9IDQ7CiAJCQl0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgbS0mZ3Q7dHlwZSk7CiAJCQlpZiAoIXQpIHsKLQkJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogJXMgdHlwZSBbJWRdIG5vdCBmb3VuZC5cbiYjMzQ7LAomIzQzOwkJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogJXMgdHlwZSBbJXVdIG5vdCBmb3VuZC5cbiYjMzQ7LAogCQkJCQltYXBfbmFtZSwgZGVzYywgbS0mZ3Q7dHlwZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CkBAIC0zNDc2LDcgJiM0MzszNDc2LDcgQEAgc3RhdGljIGludCBidGZfZml4dXBfZGF0YXNlYyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnRmICpidGYsCiAKIAkJdmFyX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdF92YXItJmd0O25hbWVfb2ZmKTsKIAkJaWYgKCF2YXJfbmFtZSkgewotCQkJcHJfZGVidWcoJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMmIzM5O3MgbWVtYmVyICMlZFxuJiMzNDssCiYjNDM7CQkJcHJfZGVidWcoJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMmIzM5O3MgbWVtYmVyICMldVxuJiMzNDssCiAJCQkJIHNlY19uYW1lLCBpKTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CkBAIC0zOTcxLDcgJiM0MzszOTcxLDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQlpZiAoIWRhdGEpCiAJCQlyZXR1cm4gLUxJQkJQRl9FUlJOT19fRk9STUFUOwogCi0JCXByX2RlYnVnKCYjMzQ7ZWxmOiBzZWN0aW9uKCVkKSAlcywgc2l6ZSAlbGQsIGxpbmsgJWQsIGZsYWdzICVseCwgdHlwZT0lZFxuJiMzNDssCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O2VsZjogc2VjdGlvbiglZCkgJXMsIHNpemUgJWx1LCBsaW5rICVkLCBmbGFncyAlbHgsIHR5cGU9JWRcbiYjMzQ7LAogCQkJIGlkeCwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGF0YS0mZ3Q7ZF9zaXplLAogCQkJIChpbnQpc2gtJmd0O3NoX2xpbmssICh1bnNpZ25lZCBsb25nKXNoLSZndDtzaF9mbGFncywKIAkJCSAoaW50KXNoLSZndDtzaF90eXBlKTsKQEAgLTQ0OTQsNyAmIzQzOzQ0OTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCiAJCQlleHQtJmd0O2tjZmcuZGF0YV9vZmYgPSByb3VuZHVwKG9mZiwgZXh0LSZndDtrY2ZnLmFsaWduKTsKIAkJCW9mZiA9IGV4dC0mZ3Q7a2NmZy5kYXRhX29mZiAmIzQzOyBleHQtJmd0O2tjZmcuc3o7Ci0JCQlwcl9kZWJ1ZygmIzM0O2V4dGVybiAoa2NmZykgIyVkOiBzeW1ib2wgJWQsIG9mZiAldSwgbmFtZSAlc1xuJiMzNDssCiYjNDM7CQkJcHJfZGVidWcoJiMzNDtleHRlcm4gKGtjZmcpICMlZDogc3ltYm9sICVkLCBvZmYgJWQsIG5hbWUgJXNcbiYjMzQ7LAogCQkJCSBpLCBleHQtJmd0O3N5bV9pZHgsIGV4dC0mZ3Q7a2NmZy5kYXRhX29mZiwgZXh0LSZndDtuYW1lKTsKIAkJfQogCQlzZWMtJmd0O3NpemUgPSBvZmY7CkBAIC00NjI2LDcgJiM0Mzs0NjI2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCiAJaWYgKCFpc19jYWxsX2luc24oaW5zbikgJmFtcDsmYW1wOyAhaXNfbGRpbW02NF9pbnNuKGluc24pKSB7Ci0JCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogaW52YWxpZCByZWxvIGFnYWluc3QgJiMzOTslcyYjMzk7IGZvciBpbnNuc1slZF0uY29kZSAweCV4XG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogaW52YWxpZCByZWxvIGFnYWluc3QgJiMzOTslcyYjMzk7IGZvciBpbnNuc1sldV0uY29kZSAweCV4XG4mIzM0OywKIAkJCXByb2ctJmd0O25hbWUsIHN5bV9uYW1lLCBpbnNuX2lkeCwgaW5zbi0mZ3Q7Y29kZSk7CiAJCXJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQzsKIAl9CkBAIC00NzQ5LDcgJiM0Mzs0NzQ5LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKIAkJCSAgICBtYXAtJmd0O3NlY19pZHggIT0gc3ltLSZndDtzdF9zaG5keCB8fAogCQkJICAgIG1hcC0mZ3Q7c2VjX29mZnNldCAhPSBzeW0tJmd0O3N0X3ZhbHVlKQogCQkJCWNvbnRpbnVlOwotCQkJcHJfZGVidWcoJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogZm91bmQgbWFwICV6ZCAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gIyV1XG4mIzM0OywKJiM0MzsJCQlwcl9kZWJ1ZygmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBtYXAgJXp1ICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcbiYjMzQ7LAogCQkJCSBwcm9nLSZndDtuYW1lLCBtYXBfaWR4LCBtYXAtJmd0O25hbWUsIG1hcC0mZ3Q7c2VjX2lkeCwKIAkJCQkgbWFwLSZndDtzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7CiAJCQlicmVhazsKQEAgLTQ3NzYsNyAmIzQzOzQ3NzYsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19yZWNvcmRfcmVsb2Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCQltYXAgPSAmYW1wO29iai0mZ3Q7bWFwc1ttYXBfaWR4XTsKIAkJaWYgKG1hcC0mZ3Q7bGliYnBmX3R5cGUgIT0gdHlwZSB8fCBtYXAtJmd0O3NlY19pZHggIT0gc3ltLSZndDtzdF9zaG5keCkKIAkJCWNvbnRpbnVlOwotCQlwcl9kZWJ1ZygmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBkYXRhIG1hcCAlemQgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XG4mIzM0OywKJiM0MzsJCXByX2RlYnVnKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IGZvdW5kIGRhdGEgbWFwICV6dSAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gJXVcbiYjMzQ7LAogCQkJIHByb2ctJmd0O25hbWUsIG1hcF9pZHgsIG1hcC0mZ3Q7bmFtZSwgbWFwLSZndDtzZWNfaWR4LAogCQkJIG1hcC0mZ3Q7c2VjX29mZnNldCwgaW5zbl9pZHgpOwogCQlicmVhazsKQEAgLTQ5ODUsNyAmIzQzOzQ5ODUsNyBAQCBzdGF0aWMgaW50IGJwZl9nZXRfbWFwX2luZm9fZnJvbV9mZGluZm8oaW50IGZkLCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvKQogCQkJaW5mby0mZ3Q7dmFsdWVfc2l6ZSA9IHZhbDsKIAkJZWxzZSBpZiAoc3NjYW5mKGJ1ZmYsICYjMzQ7bWF4X2VudHJpZXM6XHQldSYjMzQ7LCAmYW1wO3ZhbCkgPT0gMSkKIAkJCWluZm8tJmd0O21heF9lbnRyaWVzID0gdmFsOwotCQllbHNlIGlmIChzc2NhbmYoYnVmZiwgJiMzNDttYXBfZmxhZ3M6XHQlaSYjMzQ7LCAmYW1wO3ZhbCkgPT0gMSkKJiM0MzsJCWVsc2UgaWYgKHNzY2FuZihidWZmLCAmIzM0O21hcF9mbGFnczpcdCV4JiMzNDssICZhbXA7dmFsKSA9PSAxKQogCQkJaW5mby0mZ3Q7bWFwX2ZsYWdzID0gdmFsOwogCX0KIApAQCAtNTUyMSwxMSAmIzQzOzU1MjEsMTEgQEAgc3RhdGljIGludCBpbml0X21hcF9pbl9tYXBfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJfQogCQlpZiAoZXJyKSB7CiAJCQllcnIgPSAtZXJybm87Ci0JCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJWRdIHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWQ6ICVzXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJXVdIHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWQ6ICVzXG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIGksIHRhcmdfbWFwLSZndDtuYW1lLCBmZCwgZXJyc3RyKGVycikpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyVkXSBzZXQgdG8gbWFwICYjMzk7JXMmIzM5OyBmZD0lZFxuJiMzNDssCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyV1XSBzZXQgdG8gbWFwICYjMzk7JXMmIzM5OyBmZD0lZFxuJiMzNDssCiAJCQkgbWFwLSZndDtuYW1lLCBpLCB0YXJnX21hcC0mZ3Q7bmFtZSwgZmQpOwogCX0KIApAQCAtNTU1NCwxMSAmIzQzOzU1NTQsMTEgQEAgc3RhdGljIGludCBpbml0X3Byb2dfYXJyYXlfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtJmd0O2ZkLCAmYW1wO2ksICZhbXA7ZmQsIDApOwogCQlpZiAoZXJyKSB7CiAJCQllcnIgPSAtZXJybm87Ci0JCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJWRdIHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkOiAlc1xuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyV1XSB0byBwcm9nICYjMzk7JXMmIzM5OyBmZD0lZDogJXNcbiYjMzQ7LAogCQkJCW1hcC0mZ3Q7bmFtZSwgaSwgdGFyZ19wcm9nLSZndDtuYW1lLCBmZCwgZXJyc3RyKGVycikpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyVkXSBzZXQgdG8gcHJvZyAmIzM5OyVzJiMzOTsgZmQ9JWRcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFsldV0gc2V0IHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkXG4mIzM0OywKIAkJCSBtYXAtJmd0O25hbWUsIGksIHRhcmdfcHJvZy0mZ3Q7bmFtZSwgZmQpOwogCX0KIApAQCAtNTc4OCw3ICYjNDM7NTc4OCw3IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsCiAJCWlmIChzdHJuY21wKGxvY2FsX25hbWUsIHRhcmdfbmFtZSwgbG9jYWxfZXNzZW50X2xlbikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCXByX2RlYnVnKCYjMzQ7Q08tUkUgcmVsb2NhdGluZyBbJWRdICVzICVzOiBmb3VuZCB0YXJnZXQgY2FuZGlkYXRlIFslZF0gJXMgJXMgaW4gWyVzXVxuJiMzNDssCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0NPLVJFIHJlbG9jYXRpbmcgWyV1XSAlcyAlczogZm91bmQgdGFyZ2V0IGNhbmRpZGF0ZSBbJWRdICVzICVzIGluIFslc11cbiYjMzQ7LAogCQkJIGxvY2FsX2NhbmQtJmd0O2lkLCBidGZfa2luZF9zdHIobG9jYWxfdCksCiAJCQkgbG9jYWxfbmFtZSwgaSwgYnRmX2tpbmRfc3RyKHQpLCB0YXJnX25hbWUsCiAJCQkgdGFyZ19idGZfbmFtZSk7CkBAIC01ODQ4LDcgJiM0Mzs1ODQ4LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJCWNvbnRpbnVlOyAvKiBleHBlY3RlZCByYWNlOiBCVEYgd2FzIHVubG9hZGVkICovCiAJCQllcnIgPSAtZXJybm87Ci0JCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBGRDogJXNcbiYjMzQ7LCBpZCwgZXJyc3RyKGVycikpOwomIzQzOwkJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gZ2V0IEJURiBvYmplY3QgIyV1IEZEOiAlc1xuJiMzNDssIGlkLCBlcnJzdHIoZXJyKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTU4NjEsNyAmIzQzOzU4NjEsNyBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJZXJyID0gYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChmZCwgJmFtcDtpbmZvLCAmYW1wO2xlbik7CiAJCWlmIChlcnIpIHsKIAkJCWVyciA9IC1lcnJubzsKLQkJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gZ2V0IEJURiBvYmplY3QgIyVkIGluZm86ICVzXG4mIzM0OywgaWQsIGVycnN0cihlcnIpKTsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBpbmZvOiAlc1xuJiMzNDssIGlkLCBlcnJzdHIoZXJyKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC01ODc0LDcgJiM0Mzs1ODc0LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLSZndDtidGZfdm1saW51eCk7CiAJCWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKIAkJaWYgKGVycikgewotCQkJcHJfd2FybigmIzM0O2ZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJiMzOTtzIEJURiBvYmplY3QgIyVkOiAlc1xuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O2ZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJiMzOTtzIEJURiBvYmplY3QgIyV1OiAlc1xuJiMzNDssCiAJCQkJbmFtZSwgaWQsIGVycnN0cihlcnIpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MDY3LDcgJiM0Mzs2MDY3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9yZXNvbHZlX3JlbG8oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCSAgICAhaGFzaG1hcF9fZmluZChjYW5kX2NhY2hlLCBsb2NhbF9pZCwgJmFtcDtjYW5kcykpIHsKIAkJY2FuZHMgPSBicGZfY29yZV9maW5kX2NhbmRzKHByb2ctJmd0O29iaiwgbG9jYWxfYnRmLCBsb2NhbF9pZCk7CiAJCWlmIChJU19FUlIoY2FuZHMpKSB7Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB0YXJnZXQgY2FuZGlkYXRlIHNlYXJjaCBmYWlsZWQgZm9yIFslZF0gJXMgJXM6ICVsZFxuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJXVdICVzICVzOiAlbGRcbiYjMzQ7LAogCQkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGxvY2FsX2lkLCBidGZfa2luZF9zdHIobG9jYWxfdHlwZSksCiAJCQkJbG9jYWxfbmFtZSwgUFRSX0VSUihjYW5kcykpOwogCQkJcmV0dXJuIFBUUl9FUlIoY2FuZHMpOwpAQCAtNjEyNyw3ICYjNDM7NjEyNyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aCkKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcHJfZGVidWcoJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xuJiMzNDssIHNlY19uYW1lLCBzZWMtJmd0O251bV9pbmZvKTsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7c2VjICYjMzk7JXMmIzM5OzogZm91bmQgJXUgQ08tUkUgcmVsb2NhdGlvbnNcbiYjMzQ7LCBzZWNfbmFtZSwgc2VjLSZndDtudW1faW5mbyk7CiAKIAkJZm9yX2VhY2hfYnRmX2V4dF9yZWMoc2VnLCBzZWMsIGksIHJlYykgewogCQkJaWYgKHJlYy0mZ3Q7aW5zbl9vZmYgJSBCUEZfSU5TTl9TWikKQEAgLTYxODEsNyAmIzQzOzYxODEsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9jb3JlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRhcmdfYnRmX3BhdGgpCiAKIAkJCWVyciA9IGJwZl9jb3JlX3BhdGNoX2luc24ocHJvZy0mZ3Q7bmFtZSwgaW5zbiwgaW5zbl9pZHgsIHJlYywgaSwgJmFtcDt0YXJnX3Jlcyk7CiAJCQlpZiAoZXJyKSB7Ci0JCQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogZmFpbGVkIHRvIHBhdGNoIGluc24gIyV1OiAlc1xuJiMzNDssCiYjNDM7CQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IGZhaWxlZCB0byBwYXRjaCBpbnNuICMlZDogJXNcbiYjMzQ7LAogCQkJCQlwcm9nLSZndDtuYW1lLCBpLCBpbnNuX2lkeCwgZXJyc3RyKGVycikpOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtNjM0Niw3ICYjNDM7NjM0Niw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2p0X21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjCiAJCWdvdG8gZXJyX2Nsb3NlOwogCX0KIAlpZiAoc3ltX29mZiAmIzQzOyBqdF9zaXplICZndDsgb2JqLSZndDtqdW1wdGFibGVzX2RhdGFfc3opIHsKLQkJcHJfd2FybigmIzM0O21hcCAmIzM5Oy5qdW1wdGFibGVzJiMzOTs6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6ZCwgdHJ5aW5nIHRvIGFjY2VzcyAlZFxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7Lmp1bXB0YWJsZXMmIzM5OzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXp1LCB0cnlpbmcgdG8gYWNjZXNzICV1XG4mIzM0OywKIAkJCW9iai0mZ3Q7anVtcHRhYmxlc19kYXRhX3N6LCBzeW1fb2ZmICYjNDM7IGp0X3NpemUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9jbG9zZTsKQEAgLTYzODEsNyAmIzQzOzYzODEsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1YwogCQkgKi8KIAkJaWYgKGluc25fb2ZmICZndDsgVUlOVDMyX01BWCkgewogCQkJcHJfd2FybigmIzM0O21hcCAmIzM5Oy5qdW1wdGFibGVzJiMzOTs6IGludmFsaWQganVtcCB0YWJsZSB2YWx1ZSAweCVsbHggYXQgb2Zmc2V0ICV1XG4mIzM0OywKLQkJCQkobG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICYjNDM7IGkgKiBqdF9lbnRyeV9zaXplKTsKJiM0MzsJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylqdFtpXSwgc3ltX29mZiAmIzQzOyBpICoganRfZW50cnlfc2l6ZSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KQEAgLTY1MTcsNyAmIzQzOzY1MTcsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKIAkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBiYWQgcmVsbyB0eXBlICVkXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBiYWQgcmVsbyB0eXBlICV1XG4mIzM0OywKIAkJCQlwcm9nLSZndDtuYW1lLCBpLCByZWxvLSZndDt0eXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02Nzk3LDcgJiM0Mzs2Nzk3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NfY29kZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1haW5fcHJvZywKIAkJCSAqLwogCQkJY29udGludWU7CiAJCWlmIChyZWxvICZhbXA7JmFtcDsgcmVsby0mZ3Q7dHlwZSAhPSBSRUxPX0NBTEwgJmFtcDsmYW1wOyByZWxvLSZndDt0eXBlICE9IFJFTE9fU1VCUFJPR19BRERSKSB7Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICVkXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICV1XG4mIzM0OywKIAkJCQlwcm9nLSZndDtuYW1lLCBpbnNuX2lkeCwgcmVsby0mZ3Q7dHlwZSk7CiAJCQlyZXR1cm4gLUxJQkJQRl9FUlJOT19fUkVMT0M7CiAJCX0KQEAgLTc1ODcsNyAmIzQzOzc1ODcsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCX0KIAkJbmFtZSA9IGVsZl9zeW1fc3RyKG9iaiwgc3ltLSZndDtzdF9uYW1lKSA/OiAmIzM0OyZsdDs/Jmd0OyYjMzQ7OwogCi0JCXByX2RlYnVnKCYjMzQ7Lm1hcHMgcmVsbyAjJWQ6IGZvciAlemQgdmFsdWUgJXpkIHJlbC0mZ3Q7cl9vZmZzZXQgJXp1IG5hbWUgJWQgKCYjMzk7JXMmIzM5OylcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDsubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlenUgcmVsLSZndDtyX29mZnNldCAlenUgbmFtZSAldSAoJiMzOTslcyYjMzk7KVxuJiMzNDssCiAJCQkgaSwgKHNzaXplX3QpKHJlbC0mZ3Q7cl9pbmZvICZndDsmZ3Q7IDMyKSwgKHNpemVfdClzeW0tJmd0O3N0X3ZhbHVlLAogCQkJIChzaXplX3QpcmVsLSZndDtyX29mZnNldCwgc3ltLSZndDtzdF9uYW1lLCBuYW1lKTsKIApAQCAtNzY3OCw3ICYjNDM7NzY3OCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9tYXBfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKIAkJfQogCQltYXAtJmd0O2luaXRfc2xvdHNbbW9mZl0gPSBpc19tYXBfaW5fbWFwID8gKHZvaWQgKil0YXJnX21hcCA6ICh2b2lkICopdGFyZ19wcm9nOwogCi0JCXByX2RlYnVnKCYjMzQ7Lm1hcHMgcmVsbyAjJWQ6IG1hcCAmIzM5OyVzJiMzOTsgc2xvdCBbJWRdIHBvaW50cyB0byAlcyAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDsubWFwcyByZWxvICMlZDogbWFwICYjMzk7JXMmIzM5OyBzbG90IFsldV0gcG9pbnRzIHRvICVzICYjMzk7JXMmIzM5O1xuJiMzNDssCiAJCQkgaSwgbWFwLSZndDtuYW1lLCBtb2ZmLCB0eXBlLCBuYW1lKTsKIAl9CiAKQEAgLTg3MzgsNyAmIzQzOzg3MzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3Jlc29sdmVfa3N5bV92YXJfYnRmX2lkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCWxvY2FsX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KG9iai0mZ3Q7YnRmLCBsb2NhbF90eXBlLSZndDtuYW1lX29mZik7CiAJCXRhcmdfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0YXJnX3R5cGUtJmd0O25hbWVfb2ZmKTsKIAotCQlwcl93YXJuKCYjMzQ7ZXh0ZXJuICh2YXIga3N5bSkgJiMzOTslcyYjMzk7OiBpbmNvbXBhdGlibGUgdHlwZXMsIGV4cGVjdGVkIFslZF0gJXMgJXMsIGJ1dCBrZXJuZWwgaGFzIFslZF0gJXMgJXNcbiYjMzQ7LAomIzQzOwkJcHJfd2FybigmIzM0O2V4dGVybiAodmFyIGtzeW0pICYjMzk7JXMmIzM5OzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJXVdICVzICVzLCBidXQga2VybmVsIGhhcyBbJXVdICVzICVzXG4mIzM0OywKIAkJCWV4dC0mZ3Q7bmFtZSwgbG9jYWxfdHlwZV9pZCwKIAkJCWJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSwgbG9jYWxfbmFtZSwgdGFyZ190eXBlX2lkLAogCQkJYnRmX2tpbmRfc3RyKHRhcmdfdHlwZSksIHRhcmdfbmFtZSk7CkBAIC04OTE1LDcgJiM0Mzs4OTE1LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZXNvbHZlX2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJCXByX2RlYnVnKCYjMzQ7ZXh0ZXJuIChrY2ZnKSAmIzM5OyVzJiMzOTs6IHNldCB0byAweCVsbHhcbiYjMzQ7LAotCQkJCSBleHQtJmd0O25hbWUsIChsb25nIGxvbmcpdmFsdWUpOwomIzQzOwkJCQkgZXh0LSZndDtuYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTsKIAkJfSBlbHNlIHsKIAkJCXByX3dhcm4oJiMzNDtleHRlcm4gJiMzOTslcyYjMzk7OiB1bnJlY29nbml6ZWQgZXh0ZXJuIGtpbmRcbiYjMzQ7LCBleHQtJmd0O25hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDQ5NCw3ICYjNDM7MTA0OTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3Rfc3Rfb3BzX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCW1vZmYgPSByZWwtJmd0O3Jfb2Zmc2V0IC0gbWFwLSZndDtzZWNfb2Zmc2V0OwogCQlzaGRyX2lkeCA9IHN5bS0mZ3Q7c3Rfc2huZHg7CiAJCXN0X29wcyA9IG1hcC0mZ3Q7c3Rfb3BzOwotCQlwcl9kZWJ1ZygmIzM0O3N0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLSZndDtyX29mZnNldCAlenUgbWFwLSZndDtzZWNfb2Zmc2V0ICV6dSBuYW1lICVkIChcJiMzOTslc1wmIzM5OylcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIHJlbG9jICVzOiBmb3IgJWxsZCB2YWx1ZSAlbGxkIHNoZHJfaWR4ICV1IHJlbC0mZ3Q7cl9vZmZzZXQgJXp1IG1hcC0mZ3Q7c2VjX29mZnNldCAlenUgbmFtZSAldSAoXCYjMzk7JXNcJiMzOTspXG4mIzM0OywKIAkJCSBtYXAtJmd0O25hbWUsCiAJCQkgKGxvbmcgbG9uZykocmVsLSZndDtyX2luZm8gJmd0OyZndDsgMzIpLAogCQkJIChsb25nIGxvbmcpc3ltLSZndDtzdF92YWx1ZSwKQEAgLTEwNjQzLDcgJiM0MzsxMDY0Myw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0CiAJbWVtc2V0KCZhbXA7aW5mbywgMCwgaW5mb19sZW4pOwogCWVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGF0dGFjaF9wcm9nX2ZkLCAmYW1wO2luZm8sICZhbXA7aW5mb19sZW4pOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybigmIzM0O2ZhaWxlZCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZCBmb3IgRkQgJWQ6ICVzXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtmYWlsZWQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgZm9yIEZEICV1OiAlc1xuJiMzNDssCiAJCQlhdHRhY2hfcHJvZ19mZCwgZXJyc3RyKGVycikpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEwNjU2LDcgJiM0MzsxMDY1Niw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0CiAJYnRmID0gYnRmX2xvYWRfZnJvbV9rZXJuZWwoaW5mby5idGZfaWQsIE5VTEwsIHRva2VuX2ZkKTsKIAllcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7CiAJaWYgKGVycikgewotCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGdldCBCVEYgJWQgb2YgdGhlIHByb2dyYW06ICVzXG4mIzM0OywgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTsKJiM0MzsJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gZ2V0IEJURiAldSBvZiB0aGUgcHJvZ3JhbTogJXNcbiYjMzQ7LCBpbmZvLmJ0Zl9pZCwgZXJyc3RyKGVycikpOwogCQlnb3RvIG91dDsKIAl9CiAJZXJyID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIG5hbWUsIEJURl9LSU5EX0ZVTkMpOwpAQCAtMTA3MzgsNyAmIzQzOzEwNzM4LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqYXR0YWMKIAkJfQogCQllcnIgPSBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChhdHRhY2hfbmFtZSwgYXR0YWNoX3Byb2dfZmQsIHByb2ctJmd0O29iai0mZ3Q7dG9rZW5fZmQpOwogCQlpZiAoZXJyICZsdDsgMCkgewotCQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJWQpIEJURiBJRCBmb3IgJiMzOTslcyYjMzk7OiAlc1xuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJiMzOTslcyYjMzk7OiAlc1xuJiMzNDssCiAJCQkJcHJvZy0mZ3Q7bmFtZSwgYXR0YWNoX3Byb2dfZmQsIGF0dGFjaF9uYW1lLCBlcnJzdHIoZXJyKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xMTIzMyw3ICYjNDM7MTEyMzMsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX21hcF9vcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzaXplX3Qga2V5X3N6LAogCQl9CiAKIAkJaWYgKHZhbHVlX3N6ICE9IG51bV9jcHUgKiBlbGVtX3N6KSB7Ci0JCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXpkXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXp1XG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIHZhbHVlX3N6LCBudW1fY3B1LCBlbGVtX3N6LCBudW1fY3B1ICogZWxlbV9zeik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTE3NzQsNyAmIzQzOzExNzc0LDcgQEAgc3RhdGljIHZvaWQgZ2VuX3Byb2JlX2xlZ2FjeV9ldmVudF9uYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeiwKIAlzdGF0aWMgaW50IGluZGV4ID0gMDsKIAlpbnQgaTsKIAotCXNucHJpbnRmKGJ1ZiwgYnVmX3N6LCAmIzM0O2xpYmJwZl8ldV8lZF8lc18weCV6eCYjMzQ7LCBnZXRwaWQoKSwKJiM0MzsJc25wcmludGYoYnVmLCBidWZfc3osICYjMzQ7bGliYnBmXyVkXyVkXyVzXzB4JXp4JiMzNDssIGdldHBpZCgpLAogCQkgX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtpbmRleCwgMSksIG5hbWUsIG9mZnNldCk7CiAKIAkvKiBzYW5pdGl6ZSBuYW1lIGluIHRoZSBwcm9iZSBuYW1lICovCkBAIC0xMjkyNCw4ICYjNDM7MTI5MjQsOCBAQCBzdGF0aWMgbG9uZyBlbGZfZmluZF9mdW5jX29mZnNldF9mcm9tX2FyY2hpdmUoY29uc3QgY2hhciAqYXJjaGl2ZV9wYXRoLCBjb25zdCBjaAogCXJldCA9IGVsZl9maW5kX2Z1bmNfb2Zmc2V0KGVsZiwgZmlsZV9uYW1lLCBmdW5jX25hbWUpOwogCWlmIChyZXQgJmd0OyAwKSB7CiAJCXByX2RlYnVnKCYjMzQ7ZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJXMgb2YgJXMgaW4gJXM6IDB4JXggJiM0MzsgMHglbHggPSAweCVseFxuJiMzNDssCi0JCQkgZnVuY19uYW1lLCBmaWxlX25hbWUsIGFyY2hpdmVfcGF0aCwgZW50cnkuZGF0YV9vZmZzZXQsIHJldCwKLQkJCSByZXQgJiM0MzsgZW50cnkuZGF0YV9vZmZzZXQpOwomIzQzOwkJCSBmdW5jX25hbWUsIGZpbGVfbmFtZSwgYXJjaGl2ZV9wYXRoLCBlbnRyeS5kYXRhX29mZnNldCwgKHVuc2lnbmVkIGxvbmcpcmV0LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZykocmV0ICYjNDM7IGVudHJ5LmRhdGFfb2Zmc2V0KSk7CiAJCXJldCAmIzQzOz0gZW50cnkuZGF0YV9vZmZzZXQ7CiAJfQogCWVsZl9lbmQoZWxmKTsKQEAgLTE0NTcwLDcgJiM0MzsxNDU3MCw3IEBAIHBlcmZfYnVmZmVyX19wcm9jZXNzX3JlY29yZChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmUsIHZvaWQgKmN0eCkKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDt1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJWRcbiYjMzQ7LCBlLSZndDt0eXBlKTsKJiM0MzsJCXByX3dhcm4oJiMzNDt1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcbiYjMzQ7LCBlLSZndDt0eXBlKTsKIAkJcmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0VSUk9SOwogCX0KIAlyZXR1cm4gTElCQlBGX1BFUkZfRVZFTlRfQ09OVDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmMgYi90b29scy9saWIvYnBmL25sYXR0ci5jCmluZGV4IDA2NjYzZjllYTU4MWY5Li4wMDdmZTE3ZDE3YjQyOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9ubGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL25sYXR0ci5jCkBAIC0xMjMsNyAmIzQzOzEyMyw3IEBAIGludCBsaWJicGZfbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLCBzdHJ1Y3QgbmxhdHRyICpoZWFkLAogCiAJCWlmICh0Ylt0eXBlXSkgewogCQkJcHJfd2FybigmIzM0O0F0dHJpYnV0ZSBvZiB0eXBlICUjeCBmb3VuZCBtdWx0aXBsZSB0aW1lcyBpbiBtZXNzYWdlLCAmIzM0OwotCQkJCSYjMzQ7cHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXG4mIzM0OywgdHlwZSk7CiYjNDM7CQkJCSYjMzQ7cHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXG4mIzM0OywgKHVuc2lnbmVkKXR5cGUpOwogCQl9CiAKIAkJdGJbdHlwZV0gPSBubGE7CmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL3JlbG9fY29yZS5jIGIvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuYwppbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuYwpAQCAtMjE2LDcgJiM0MzsyMTYsNyBAQCBpbnQgX19icGZfY29yZV90eXBlc19hcmVfY29tcGF0KGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsCiAJCWdvdG8gcmVjdXI7CiAJfQogCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cbiYjMzQ7LAogCQkJYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLCBsb2NhbF9pZCwgdGFyZ19pZCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTM4NCw3ICYjNDM7Mzg0LDcgQEAgaW50IGJwZl9jb3JlX3BhcnNlX3NwZWMoY29uc3QgY2hhciAqcHJvZ19uYW1lLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJCQkJcmV0dXJuIHN6OwogCQkJc3BlYy0mZ3Q7Yml0X29mZnNldCAmIzQzOz0gYWNjZXNzX2lkeCAqIHN6ICogODsKIAkJfSBlbHNlIHsKLQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyBmb3IgWyV1XSAlcyAoYXQgaWR4ICVkKSBjYXB0dXJlcyB0eXBlIFslZF0gb2YgdW5leHBlY3RlZCBraW5kICVzXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJXVdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xuJiMzNDssCiAJCQkJcHJvZ19uYW1lLCByZWxvLSZndDt0eXBlX2lkLCBzcGVjX3N0ciwgaSwgaWQsIGJ0Zl9raW5kX3N0cih0KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzI1LDcgJiM0Mzs3MjUsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkqdmFsID0gc3o7CiAJCX0gZWxzZSB7Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJWQgYXQgaW5zbiAjJWQgY2FuJiMzOTt0IGJlIGFwcGxpZWQgdG8gYXJyYXkgYWNjZXNzXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJiMzOTt0IGJlIGFwcGxpZWQgdG8gYXJyYXkgYWNjZXNzXG4mIzM0OywKIAkJCQlwcm9nX25hbWUsIHJlbG8tJmd0O2tpbmQsIHJlbG8tJmd0O2luc25fb2ZmIC8gOCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzQ3LDcgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsCiAJCXdoaWxlIChiaXRfb2ZmICYjNDM7IGJpdF9zeiAtIGJ5dGVfb2ZmICogOCAmZ3Q7IGJ5dGVfc3ogKiA4KSB7CiAJCQlpZiAoYnl0ZV9zeiAmZ3Q7PSA4KSB7CiAJCQkJLyogYml0ZmllbGQgY2FuJiMzOTt0IGJlIHJlYWQgd2l0aCA2NC1iaXQgcmVhZCAqLwotCQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4mIzM5O3QgYmUgc2F0aXNmaWVkIGZvciBiaXRmaWVsZFxuJiMzNDssCiYjNDM7CQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAldSBhdCBpbnNuICMldSBjYW4mIzM5O3QgYmUgc2F0aXNmaWVkIGZvciBiaXRmaWVsZFxuJiMzNDssCiAJCQkJCXByb2dfbmFtZSwgcmVsby0mZ3Q7a2luZCwgcmVsby0mZ3Q7aW5zbl9vZmYgLyA4KTsKIAkJCQlyZXR1cm4gLUUyQklHOwogCQkJfQpAQCAtOTcxLDcgJiM0Mzs5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsCiAJCWVyciA9IDA7CiAJfSBlbHNlIGlmIChlcnIgPT0gLUVPUE5PVFNVUFApIHsKIAkJLyogRU9QTk9UU1VQUCBtZWFucyB1bmtub3duL3Vuc3VwcG9ydGVkIHJlbG9jYXRpb24gKi8KLQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogdW5yZWNvZ25pemVkIENPLVJFIHJlbG9jYXRpb24gJXMgKCVkKSBhdCBpbnNuICMlZFxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bnJlY29nbml6ZWQgQ08tUkUgcmVsb2NhdGlvbiAlcyAoJXUpIGF0IGluc24gIyV1XG4mIzM0OywKIAkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLSZndDtraW5kKSwKIAkJCXJlbG8tJmd0O2tpbmQsIHJlbG8tJmd0O2luc25fb2ZmIC8gOCk7CiAJfQpAQCAtMTA2Nyw3ICYjNDM7MTA2Nyw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfSykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAocmVzLSZndDt2YWxpZGF0ZSAmYW1wOyZhbXA7IGluc24tJmd0O2ltbSAhPSBvcmlnX3ZhbCkgewotCQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoQUxVL0FMVTY0KSB2YWx1ZTogZ290ICV1LCBleHAgJWxsdSAtJmd0OyAlbGx1XG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC0mZ3Q7ICVsbHVcbiYjMzQ7LAogCQkJCXByb2dfbmFtZSwgcmVsb19pZHgsCiAJCQkJaW5zbl9pZHgsIGluc24tJmd0O2ltbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKW5ld192YWwpOwpAQCAtMTA4Myw3ICYjNDM7MTA4Myw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWNhc2UgQlBGX1NUOgogCWNhc2UgQlBGX1NUWDoKIAkJaWYgKHJlcy0mZ3Q7dmFsaWRhdGUgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgIT0gb3JpZ192YWwpIHsKLQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC0mZ3Q7ICVsbHVcbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC0mZ3Q7ICVsbHVcbiYjMzQ7LAogCQkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGluc25faWR4LCBpbnNuLSZndDtvZmYsICh1bnNpZ25lZCBsb25nIGxvbmcpb3JpZ192YWwsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfdmFsKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE1OSw3ICYjNDM7MTE1OSw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWRlZmF1bHQ6CiAJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHRyeWluZyB0byByZWxvY2F0ZSB1bnJlY29nbml6ZWQgaW5zbiAjJWQsIGNvZGU6MHgleCwgc3JjOjB4JXgsIGRzdDoweCV4LCBvZmY6MHgleCwgaW1tOjB4JXhcbiYjMzQ7LAogCQkJcHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tJmd0O2NvZGUsCi0JCQlpbnNuLSZndDtzcmNfcmVnLCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsIGluc24tJmd0O2ltbSk7CiYjNDM7CQkJKHVuc2lnbmVkKWluc24tJmd0O3NyY19yZWcsICh1bnNpZ25lZClpbnNuLSZndDtkc3RfcmVnLCAodW5zaWduZWQpaW5zbi0mZ3Q7b2ZmLCAodW5zaWduZWQpaW5zbi0mZ3Q7aW1tKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzIzLDcgJiM0MzsxMzIzLDcgQEAgaW50IGJwZl9jb3JlX2NhbGNfcmVsb19pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwKIAkJY29uc3QgY2hhciAqc3BlY19zdHI7CiAKIAkJc3BlY19zdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGxvY2FsX2J0ZiwgcmVsby0mZ3Q7YWNjZXNzX3N0cl9vZmYpOwotCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBwYXJzaW5nIFslZF0gJXMgJXMgJiM0MzsgJXMgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBwYXJzaW5nIFsldV0gJXMgJXMgJiM0MzsgJXMgZmFpbGVkOiAlZFxuJiMzNDssCiAJCQlwcm9nX25hbWUsIHJlbG9faWR4LCBsb2NhbF9pZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLAogCQkJc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpID8gJiMzNDsmbHQ7YW5vbiZndDsmIzM0OyA6IGxvY2FsX25hbWUsCiAJCQlzcGVjX3N0ciA/OiAmIzM0OyZsdDs/Jmd0OyYjMzQ7LCBlcnIpOwpAQCAtMTM0Niw3ICYjNDM7MTM0Niw3IEBAIGludCBicGZfY29yZV9jYWxjX3JlbG9faW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsCiAKIAkvKiBsaWJicGYgZG9lc24mIzM5O3Qgc3VwcG9ydCBjYW5kaWRhdGUgc2VhcmNoIGZvciBhbm9ueW1vdXMgdHlwZXMgKi8KIAlpZiAoc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpKSB7Ci0JCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6ICZsdDslcyZndDsgKCVkKSByZWxvY2F0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6ICZsdDslcyZndDsgKCV1KSByZWxvY2F0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXG4mIzM0OywKIAkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLSZndDtraW5kKSwgcmVsby0mZ3Q7a2luZCk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNjk3LDcgJiM0MzsxNjk3LDcgQEAgaW50IF9fYnBmX2NvcmVfdHlwZXNfbWF0Y2goY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCwgY29uc3Qgc3QKIAkJZ290byByZWN1cjsKIAl9CiAJZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0O3VuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxuJiMzNDssCiAJCQlidGZfa2luZF9zdHIobG9jYWxfdCksIGxvY2FsX2lkLCB0YXJnX2lkKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi91c2R0LmMgYi90b29scy9saWIvYnBmL3VzZHQuYwppbmRleCA1N2ZiODJiYjgxYjU4OC4uZGI5NDMyYWRiOTY3YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvdXNkdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvdXNkdC5jCkBAIC0zMjcsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyBpbnQgc2FuaXR5X2NoZWNrX3VzZHRfZWxmKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoKQogCWludCBlbmRpYW5uZXNzOwogCiAJaWYgKGVsZl9raW5kKGVsZikgIT0gRUxGX0tfRUxGKSB7Ci0JCXByX3dhcm4oJiMzNDt1c2R0OiB1bnJlY29nbml6ZWQgRUxGIGtpbmQgJWQgZm9yICYjMzk7JXMmIzM5O1xuJiMzNDssIGVsZl9raW5kKGVsZiksIHBhdGgpOwomIzQzOwkJcHJfd2FybigmIzM0O3VzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAldSBmb3IgJiMzOTslcyYjMzk7XG4mIzM0OywgZWxmX2tpbmQoZWxmKSwgcGF0aCk7CiAJCXJldHVybiAtRUJBREY7CiAJfQogCkBAIC00MzgsOCAmIzQzOzQzOCw5IEBAIHN0YXRpYyBpbnQgcGFyc2VfZWxmX3NlZ3MoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBlbGZfc2VnICoqc2Vncywgc2l6CiAJCX0KIAogCQlwcl9kZWJ1ZygmIzM0O3VzZHQ6IGRpc2NvdmVyZWQgUEhEUiAjJWQgaW4gJiMzOTslcyYjMzk7OiB2YWRkciAweCVseCBtZW1zeiAweCVseCBvZmZzZXQgMHglbHggdHlwZSAweCVseCBmbGFncyAweCVseFxuJiMzNDssCi0JCQkgaSwgcGF0aCwgKGxvbmcpcGhkci5wX3ZhZGRyLCAobG9uZylwaGRyLnBfbWVtc3osIChsb25nKXBoZHIucF9vZmZzZXQsCi0JCQkgKGxvbmcpcGhkci5wX3R5cGUsIChsb25nKXBoZHIucF9mbGFncyk7CiYjNDM7CQkJIGksIHBhdGgsCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKXBoZHIucF92YWRkciwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX21lbXN6LCAodW5zaWduZWQgbG9uZylwaGRyLnBfb2Zmc2V0LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZylwaGRyLnBfdHlwZSwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX2ZsYWdzKTsKIAkJaWYgKHBoZHIucF90eXBlICE9IFBUX0xPQUQpCiAJCQljb250aW51ZTsKIApAQCAtNzE5LDE0ICYjNDM7NzIwLDE0IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsCiAJCWlmICghc2VnKSB7CiAJCQllcnIgPSAtRVNSQ0g7CiAJCQlwcl93YXJuKCYjMzQ7dXNkdDogZmFpbGVkIHRvIGZpbmQgRUxGIHByb2dyYW0gc2VnbWVudCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OyBhdCBJUCAweCVseFxuJiMzNDssCi0JCQkJdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCB1c2R0X2Fic19pcCk7CiYjNDM7CQkJCXVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgKHVuc2lnbmVkIGxvbmcpdXNkdF9hYnNfaXApOwogCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCWlmICghc2VnLSZndDtpc19leGVjKSB7CiAJCQllcnIgPSAtRVNSQ0g7CiAJCQlwcl93YXJuKCYjMzQ7dXNkdDogbWF0Y2hlZCBFTEYgYmluYXJ5ICYjMzk7JXMmIzM5OyBzZWdtZW50IFsweCVseCwgMHglbHgpIGZvciAmIzM5OyVzOiVzJiMzOTsgYXQgSVAgMHglbHggaXMgbm90IGV4ZWN1dGFibGVcbiYjMzQ7LAotCQkJCXBhdGgsIHNlZy0mZ3Q7c3RhcnQsIHNlZy0mZ3Q7ZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsCi0JCQkJdXNkdF9hYnNfaXApOwomIzQzOwkJCQlwYXRoLCAodW5zaWduZWQgbG9uZylzZWctJmd0O3N0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctJmd0O2VuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLAomIzQzOwkJCQkodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJLyogdHJhbnNsYXRlIGZyb20gdmlydHVhbCBhZGRyZXNzIHRvIGZpbGUgb2Zmc2V0ICovCkBAIC03NjYsNyAmIzQzOzc2Nyw3IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsCiAJCQlpZiAoIXNlZykgewogCQkJCWVyciA9IC1FU1JDSDsKIAkJCQlwcl93YXJuKCYjMzQ7dXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OyBhdCByZWxhdGl2ZSBJUCAweCVseFxuJiMzNDssCi0JCQkJCXVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9yZWxfaXApOwomIzQzOwkJCQkJdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCk7CiAJCQkJZ290byBlcnJfb3V0OwogCQkJfQogCkBAIC03NzUsOCAmIzQzOzc3NiwxMCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLAogCiAJCXByX2RlYnVnKCYjMzQ7dXNkdDogcHJvYmUgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAlcyAmIzM5OyVzJiMzOTs6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAmIzM5OyVzJiMzOTsgaW4gc2VnbWVudCBbMHglbHgsIDB4JWx4KSBhdCBvZmZzZXQgMHglbHhcbiYjMzQ7LAogCQkJIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/ICYjMzQ7ZXhlYyYjMzQ7IDogJiMzNDtsaWIgJiMzNDssIHBhdGgsCi0JCQkgbm90ZS5sb2NfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfYWJzX2lwLCB1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLAotCQkJIHNlZyA/IHNlZy0mZ3Q7c3RhcnQgOiAwLCBzZWcgPyBzZWctJmd0O2VuZCA6IDAsIHNlZyA/IHNlZy0mZ3Q7b2Zmc2V0IDogMCk7CiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKW5vdGUubG9jX2FkZHIsICh1bnNpZ25lZCBsb25nKW5vdGUuYmFzZV9hZGRyLAomIzQzOwkJCSAodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCwgKHVuc2lnbmVkIGxvbmcpdXNkdF9yZWxfaXAsIG5vdGUuYXJncywKJiM0MzsJCQkgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy0mZ3Q7c3RhcnQgOiAwKSwgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy0mZ3Q7ZW5kIDogMCksCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctJmd0O29mZnNldCA6IDApKTsKIAogCQkvKiBBZGp1c3Qgc2VtYXBob3JlIGFkZHJlc3MgdG8gYmUgYSBmaWxlIG9mZnNldCAqLwogCQlpZiAobm90ZS5zZW1hX2FkZHIpIHsKQEAgLTc5MSwxNCAmIzQzOzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLAogCQkJaWYgKCFzZWcpIHsKIAkJCQllcnIgPSAtRVNSQ0g7CiAJCQkJcHJfd2FybigmIzM0O3VzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBsb2FkYWJsZSBzZWdtZW50IHdpdGggc2VtYXBob3JlIG9mICYjMzk7JXM6JXMmIzM5OyBpbiAmIzM5OyVzJiMzOTsgYXQgMHglbHhcbiYjMzQ7LAotCQkJCQl1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsIG5vdGUuc2VtYV9hZGRyKTsKJiM0MzsJCQkJCXVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgKHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpOwogCQkJCWdvdG8gZXJyX291dDsKIAkJCX0KIAkJCWlmIChzZWctJmd0O2lzX2V4ZWMpIHsKIAkJCQllcnIgPSAtRVNSQ0g7CiAJCQkJcHJfd2FybigmIzM0O3VzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAmIzM5OyVzJiMzOTsgc2VnbWVudCBbMHglbHgsIDB4JWx4XSBmb3Igc2VtYXBob3JlIG9mICYjMzk7JXM6JXMmIzM5OyBhdCAweCVseCBpcyBleGVjdXRhYmxlXG4mIzM0OywKLQkJCQkJcGF0aCwgc2VnLSZndDtzdGFydCwgc2VnLSZndDtlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwKLQkJCQkJbm90ZS5zZW1hX2FkZHIpOwomIzQzOwkJCQkJcGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLSZndDtzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLSZndDtlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwKJiM0MzsJCQkJCSh1bnNpZ25lZCBsb25nKW5vdGUuc2VtYV9hZGRyKTsKIAkJCQlnb3RvIGVycl9vdXQ7CiAJCQl9CiAKQEAgLTgwNiw4ICYjNDM7ODA5LDggQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCwKIAogCQkJcHJfZGVidWcoJiMzNDt1c2R0OiBzZW1hICBmb3IgJiMzOTslczolcyYjMzk7IGluICVzICYjMzk7JXMmIzM5OzogYWRkciAweCVseCBiYXNlIDB4JWx4IChyZXNvbHZlZCAweCVseCkgaW4gc2VnbWVudCBbMHglbHgsIDB4JWx4XSBhdCBvZmZzZXQgMHglbHhcbiYjMzQ7LAogCQkJCSB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIGVoZHIuZV90eXBlID09IEVUX0VYRUMgPyAmIzM0O2V4ZWMmIzM0OyA6ICYjMzQ7bGliICYjMzQ7LAotCQkJCSBwYXRoLCBub3RlLnNlbWFfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfc2VtYV9vZmYsCi0JCQkJIHNlZy0mZ3Q7c3RhcnQsIHNlZy0mZ3Q7ZW5kLCBzZWctJmd0O29mZnNldCk7CiYjNDM7CQkJCSBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsICh1bnNpZ25lZCBsb25nKXVzZHRfc2VtYV9vZmYsCiYjNDM7CQkJCSAodW5zaWduZWQgbG9uZylzZWctJmd0O3N0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctJmd0O2VuZCwgKHVuc2lnbmVkIGxvbmcpc2VnLSZndDtvZmZzZXQpOwogCQl9CiAKIAkJLyogUmVjb3JkIGFkanVzdGVkIGFkZHJlc3NlcyBhbmQgb2Zmc2V0cyBhbmQgcGFyc2UgVVNEVCBzcGVjICovCkBAIC0xMTE3LDcgJiM0MzsxMTIwLDcgQEAgc3RydWN0IGJwZl9saW5rICp1c2R0X21hbmFnZXJfYXR0YWNoX3VzZHQoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBjb25zdCBzdHJ1Y3QKIAkJCQkgICAgICAgIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCk7CiAJCQl9IGVsc2UgewogCQkJCXByX3dhcm4oJiMzNDt1c2R0OiBmYWlsZWQgdG8gbWFwIElQIDB4JWx4IHRvIHNwZWMgIyVkIGZvciAmIzM5OyVzOiVzJiMzOTsgaW4gJiMzOTslcyYjMzk7OiAlc1xuJiMzNDssCi0JCQkJCXRhcmdldC0mZ3Q7YWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsCiYjNDM7CQkJCQkodW5zaWduZWQgbG9uZyl0YXJnZXQtJmd0O2Fic19pcCwgc3BlY19pZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLAogCQkJCQlwYXRoLCBlcnJzdHIoZXJyKSk7CiAJCQl9CiAJCQlnb3RvIGVycl9vdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjkxCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogMjYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQlBGIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYHRvb2xzL2xpYi9icGYvYCBkaXJlY3RvcnksIGFuZCBpdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNsZWFudXAgZWZmb3J0LiBQcmltYXJpbHksIGl0JiMzOTtzIGFib3V0IHR3ZWFraW5nIHRob3NlIGBwcl93YXJuYCBhbmQgYHByX2RlYnVnYCBjYWxscywgY2hhbmdpbmcgZm9ybWF0IHNwZWNpZmllcnMg4oCTIHRoaW5ncyBsaWtlIGAlZGAgdG8gYCV1YCwgYCV6ZGAgdG8gYCV6dWAsIGFuZCBhZGRpbmcgY2FzdHMsIG1vc3RseSBgKHVuc2lnbmVkIGxvbmcpYC4gVGhpcyBpcyBhbGwgcHJldHR5IGNvc21ldGljLCByaWdodD8gSXQgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZSBhY3R1YWwgKmxvZ2ljKiBvZiB0aGUgQlBGIGNvZGUgb3Iga2VybmVsIGludGVyYWN0aW9ucyBpcyBiZWluZyBjaGFuZ2VkLgoKSSB3ZW50IGxpbmUtYnktbGluZSBpbiB0aGUgZGlmZi4gRG91YmxlIGNoZWNrZWQgZXZlcnl0aGluZyBpbiBgYnRmLmNgLCBgYnRmX2R1bXAuY2AsIGBidGZfcmVsb2NhdGUuY2AsIGBlbGYuY2AsIGBnZW5fbG9hZGVyLmNgLCBgbGliYnBmLmNgLCBgbmxhdHRyLmNgLCBgcmVsb19jb3JlLmNgLCBhbmQgYHVzZHQuY2AuIEV2ZXJ5dGhpbmcgaXMgcmVhbGx5IGp1c3QgYWJvdXQgZm9ybWF0dGluZyB0aGUgb3V0cHV0IG9mIHdhcm5pbmdzIGFuZCBkZWJ1ZyBtZXNzYWdlcywgbWFraW5nIHN1cmUgdGhlIHJpZ2h0IGRhdGEgdHlwZXMgYXJlIGJlaW5nIHByaW50ZWQgY29ycmVjdGx5LiBJIHdhcyBhIGxpdHRsZSB3b3JyaWVkIGFib3V0IHRoZSBgc3NjYW5mYCBjaGFuZ2UgaW4gYGxpYmJwZi5jYCwgYnV0IGl0IHR1cm5zIG91dCB0aGUgb3JpZ2luYWwgY29kZSB3aXRoIGAlaWAgd2FzIGFscmVhZHkgcGFyc2luZyB0aGUgaGV4IHZhbHVlcyB1c2VkIGZvciBtYXAgZmxhZ3MgZnJvbSBgZmRpbmZvYCBjb3JyZWN0bHkuIFdoaWxlIGEgY2hhbmdlLCBpdCB3YXNuJiMzOTt0IGEgZnVuY3Rpb25hbCBvbmUgaW4gdGVybXMgb2YgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yLgoKQW5kLCBvZiBjb3Vyc2UsIHRoaXMgaXMgYWxsIGhhcHBlbmluZyBpbiB1c2VyLXNwYWNlIHRvb2xzLCB3aGljaCBhcmUgdmVyeSBkaWZmZXJlbnQgZnJvbSBmdXp6aW5nIHRoZSBrZXJuZWwgaXRzZWxmLiBTeXprYWxsZXIsIHdoaWNoIGlzIG1lbnRpb25lZCBpbiB0aGUgaW5zdHJ1Y3Rpb25zLCBpcyBkZXNpZ25lZCB0byBmdXp6IGtlcm5lbCBjb2RlLCBhbmQgaXQmIzM5O3Mgbm90IHRoZSByaWdodCB0b29sIGZvciB1c2VyLXNwYWNlIGNoYW5nZXMuIEl0JiMzOTtzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbGV2ZWwgb2YgdGVzdGluZy4KClNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkga2VybmVsLWxldmVsIGZ1bmN0aW9uYWwgY2hhbmdlcyBvciBuZXcgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgd2FycmFudCBrZXJuZWwgZnV6emluZy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBmb3JtYXR0aW5nIGNsZWFudXAgaW4gdGhlIHVzZXItc3BhY2UgQlBGIHRvb2xzLiBUaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGZvcm1hdCBzcGVjaWZpZXJzIGluIGxvZ2dpbmcgZnVuY3Rpb25zIChwcl93YXJuLCBwcl9kZWJ1ZykgYW5kIG9uZSBzc2NhbmYgY2FsbCBpbiB1c2VyLXNwYWNlIGxpYmJwZiBjb2RlICh0b29scy9saWIvYnBmLykuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEwOjU2OjE2LjY1Njg2MDI2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzYyOTE4NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGZvcm1hdCBzcGVjaWZpZXJzIGluIGxvZ2dpbmcgZnVuY3Rpb25zIChwcl93YXJuLCBwcl9kZWJ1ZykgYW5kIG9uZSBzc2NhbmYgY2FsbCBpbiB1c2VyLXNwYWNlIGxpYmJwZiBjb2RlICh0b29scy9saWIvYnBmLykuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTA6NTY6MTYuNjU2ODY4NDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDkxMTQ0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhM2FhYTUxOWMyMTJhODdkOGQ0ZGYyZTQ5YzUzNjc4YWM2OWQ5Y2I2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDEwOjU2OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXFxuaW5kZXggODIzYmNlODk1MTc4ZGEuLmJmNmE2ODExODQwNTEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2J0Zi5jXFxuQEAgLTU4OSw3ICs1ODksNyBAQCBzdGF0aWMgaW50IGJ0Zl9wYXJzZV90eXBlX3NlYyhzdHJ1Y3QgYnRmICpidGYpXFxuIFxcdFxcdGlmICh0eXBlX3NpemUgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHlwZV9zaXplO1xcbiBcXHRcXHRpZiAobmV4dF90eXBlICsgdHlwZV9zaXplIFxcdTAwM2UgZW5kX3R5cGUpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiQlRGIHR5cGUgWyVkXSBpcyBtYWxmb3JtZWRcXFxcblxcXCIsIGJ0Zi1cXHUwMDNlc3RhcnRfaWQgKyBidGYtXFx1MDAzZW5yX3R5cGVzKTtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiQlRGIHR5cGUgWyV1XSBpcyBtYWxmb3JtZWRcXFxcblxcXCIsIGJ0Zi1cXHUwMDNlc3RhcnRfaWQgKyBidGYtXFx1MDAzZW5yX3R5cGVzKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE0MjQsNyArMTQyNCw3IEBAIHN0YXRpYyBpbnQgYnRmX2ZpbmRfZWxmX3NlY3Rpb25zKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnRmX2VsZl9zZWNzXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKHNoLnNoX3R5cGUgIT0gU0hUX1BST0dCSVRTKSB7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICglZCkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICgldSkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHNoLnNoX3R5cGUsIGlkeCwgbmFtZSwgcGF0aCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHN0YXRpYyBib29sIGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgaWQxLCBfX3UzMiBpZDIsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRpZiAoIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgbTEtXFx1MDAzZXR5cGUsIG0yLVxcdTAwM2V0eXBlLCBkZXB0aCAtIDEpKSB7XFxuIFxcdFxcdFxcdFxcdGlmICh0MS1cXHUwMDNlbmFtZV9vZmYpIHtcXG4tXFx0XFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzICclcycgc2l6ZT0lZCB2bGVuPSVkIGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAnJXMnXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgJyVzJyBzaXplPSV1IHZsZW49JXUgaWQxWyV1XSBpZDJbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBpZGVudGljYWwgZm9yIGZpZWxkIyVkICclcydcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBrMSA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcXFwiU1RSVUNUXFxcIiA6IFxcXCJVTklPTlxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXFx1MDAzZWJ0ZiwgdDEtXFx1MDAzZW5hbWVfb2ZmKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHQxLVxcdTAwM2VzaXplLCBidGZfdmxlbih0MSksIGlkMSwgaWQyLCBpLFxcbkBAIC01MTA0LDcgKzUxMDQsNyBAQCBzdGF0aWMgaW50IGJ0Zl9kZWR1cF9pc19lcXVpdihzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBjYW5kX2lkLFxcbiBcXHRcXHRcXHRlcSA9IGJ0Zl9kZWR1cF9pc19lcXVpdihkLCBjYW5kX20tXFx1MDAzZXR5cGUsIGNhbm9uX20tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRpZiAoZXEgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRcXHRpZiAoY2FuZF90eXBlLVxcdTAwM2VuYW1lX29mZikge1xcbi1cXHRcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgJyVzJyBzaXplPSVkIHZsZW49JWQgY2FuZF9pZFsldV0gY2Fub25faWRbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBlcXVpdiBmb3IgZmllbGQjJWQgJyVzJzogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCIlcyAnJXMnIHNpemU9JXUgdmxlbj0ldSBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAnJXMnOiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IGNhbmRfa2luZCA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcXFwiU1RSVUNUXFxcIiA6IFxcXCJVTklPTlxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXFx1MDAzZWJ0ZiwgY2FuZF90eXBlLVxcdTAwM2VuYW1lX29mZiksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBjYW5kX3R5cGUtXFx1MDAzZXNpemUsIHZsZW4sIGNhbmRfaWQsIGNhbm9uX2lkLCBpLFxcbkBAIC02MDY5LDcgKzYwNjksNyBAQCBzdGF0aWMgaW50IGJ0Zl9hZGRfZGlzdGlsbGVkX3R5cGVzKHN0cnVjdCBidGZfZGlzdGlsbCAqZGlzdClcXG4gXFx0XFx0XFx0ZXJyID0gYnRmX2FkZF90eXBlKFxcdTAwMjZkaXN0LVxcdTAwM2VwaXBlLCB0KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJyVzJ1sldV0gb2Yga2luZCBbJXVdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJyVzJ1slZF0gb2Yga2luZCBbJWRdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG5hbWUsIGksIGtpbmQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuY1xcbmluZGV4IGNjMWJhNjViYjZjNWFjLi4xMjNjNDQ4ZjIwYzc0NiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcXG4rKysgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcXG5AQCAtMTc3Niw3ICsxNzc2LDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfYml0ZmllbGRfdmFsdWUoc3RydWN0IGJ0Zl9kdW1wICpkLFxcbiBcXG4gXFx0LyogTWF4aW11bSBzdXBwb3J0ZWQgYml0ZmllbGQgc2l6ZSBpcyA2NCBiaXRzICovXFxuIFxcdGlmICh0LVxcdTAwM2VzaXplIFxcdTAwM2UgOCkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJWRcXFxcblxcXCIsIHQtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJXVcXFxcblxcXCIsIHQtXFx1MDAzZXNpemUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMjI1MSw3ICsyMjUxLDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfZW51bV92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsXFxuIFxcdFxcdCp2YWx1ZSA9IGlzX3NpZ25lZCA/ICooX19zOCAqKWRhdGEgOiAqKF9fdTggKilkYXRhO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwidW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXFxcXG5cXFwiLCB0LVxcdTAwM2VzaXplLCBpZCk7XFxuK1xcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQgc2l6ZSAldSBmb3IgZW51bSwgaWQ6WyV1XVxcXFxuXFxcIiwgdC1cXHUwMDNlc2l6ZSwgaWQpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXFxuaW5kZXggNTNkMWYzNTQxYmNlNjkuLmRmNWZhNGJkODdkNjlhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcXG4rKysgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXFxuQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcXG4gXFx0XFx0ICAgICBjbXBfYnRmX25hbWVfc2l6ZShcXHUwMDI2YmFzZV9pbmZvLCBkaXN0X2luZm8pID09IDA7XFxuIFxcdFxcdCAgICAgZGlzdF9pbmZvKyspIHtcXG4gXFx0XFx0XFx0aWYgKCFkaXN0X2luZm8tXFx1MDAzZWlkIHx8IGRpc3RfaW5mby1cXHUwMDNlaWQgXFx1MDAzZT0gci1cXHUwMDNlbnJfZGlzdF9iYXNlX3R5cGVzKSB7XFxuLVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcImJhc2UgQlRGIGlkIFslZF0gbWFwcyB0byBpbnZhbGlkIGRpc3RpbGxlZCBiYXNlIEJURiBpZCBbJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJiYXNlIEJURiBpZCBbJXVdIG1hcHMgdG8gaW52YWxpZCBkaXN0aWxsZWQgYmFzZSBCVEYgaWQgWyV1XVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0aWQsIGRpc3RfaW5mby1cXHUwMDNlaWQpO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuQEAgLTM2OCw3ICszNjgsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGRpc3RfdCA9IGJ0Zl90eXBlX2J5X2lkKHItXFx1MDAzZWRpc3RfYmFzZV9idGYsIGlkKTtcXG4gXFx0XFx0bmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoci1cXHUwMDNlZGlzdF9iYXNlX2J0ZiwgZGlzdF90LVxcdTAwM2VuYW1lX29mZik7XFxuLVxcdFxcdHByX3dhcm4oXFxcImRpc3RpbGxlZCBiYXNlIEJURiB0eXBlICclcycgWyVkXSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAnJXMnIFsldV0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0bmFtZSwgaWQpO1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzk3LDExICszOTcsMTEgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfdmFsaWRhdGVfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcXG4gXFx0XFx0Y2FzZSBCVEZfS0lORF9GV0Q6XFxuIFxcdFxcdFxcdGlmICh0LVxcdTAwM2VuYW1lX29mZilcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInR5cGUgWyVkXSwga2luZCBbJWRdIGlzIGludmFsaWQgZm9yIGRpc3RpbGxlZCBiYXNlIEJURjsgaXQgaXMgYW5vbnltb3VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJ0eXBlIFsldV0sIGtpbmQgWyVkXSBpcyBpbnZhbGlkIGZvciBkaXN0aWxsZWQgYmFzZSBCVEY7IGl0IGlzIGFub255bW91c1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0aSwga2luZCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJ0eXBlIFslZF0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInR5cGUgWyV1XSBpbiBkaXN0aWxsZWQgYmFzZWQgQlRGIGhhcyB1bmV4cGVjdGVkIGtpbmQgWyVkXVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0aSwga2luZCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jXFxuaW5kZXggMjk1ZGJkYTI0NTgwNzEuLmZlMTM2ZDAyNTk2NzlmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZWxmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2VsZi5jXFxuQEAgLTM1NCw3ICszNTQsNyBAQCBsb25nIGVsZl9maW5kX2Z1bmNfb2Zmc2V0KEVsZiAqZWxmLCBjb25zdCBjaGFyICpiaW5hcnlfcGF0aCwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCJlbGY6IHN5bWJvbCBhZGRyZXNzIG1hdGNoIGZvciAnJXMnIGluICclcyc6IDB4JWx4XFxcXG5cXFwiLCBuYW1lLCBiaW5hcnlfcGF0aCxcXG4tXFx0XFx0XFx0IHJldCk7XFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZylyZXQpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpZiAocmV0ID09IDApIHtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwiZWxmOiAnJXMnIGlzIDAgaW4gc3ltdGFiIGZvciAnJXMnOiAlc1xcXFxuXFxcIiwgbmFtZSwgYmluYXJ5X3BhdGgsXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG5pbmRleCBkNzk2OTVmMDFjODdmMy4uYzdmMmQyYWM3YmIzNWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG4rKysgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuY1xcbkBAIC0zODQsNyArMzg0LDcgQEAgaW50IGJwZl9nZW5fX2ZpbmlzaChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbnJfcHJvZ3MsIGludCBucl9tYXBzKVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmIChucl9wcm9ncyBcXHUwMDNjIGdlbi1cXHUwMDNlbnJfcHJvZ3MgfHwgbnJfbWFwcyAhPSBnZW4tXFx1MDAzZW5yX21hcHMpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwibnJfcHJvZ3MgJWQvJWQgbnJfbWFwcyAlZC8lZCBtaXNtYXRjaFxcXFxuXFxcIixcXG4rXFx0XFx0cHJfd2FybihcXFwibnJfcHJvZ3MgJWQvJXUgbnJfbWFwcyAlZC8ldSBtaXNtYXRjaFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0bnJfcHJvZ3MsIGdlbi1cXHUwMDNlbnJfcHJvZ3MsIG5yX21hcHMsIGdlbi1cXHUwMDNlbnJfbWFwcyk7XFxuIFxcdFxcdGdlbi1cXHUwMDNlZXJyb3IgPSAtRUZBVUxUO1xcbiBcXHRcXHRyZXR1cm4gZ2VuLVxcdTAwM2VlcnJvcjtcXG5AQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgYnBmX2dlbl9fbG9hZF9idGYoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3Qgdm9pZCAqYnRmX3Jhd19kYXRhLFxcbiBcXG4gXFx0YXR0ci5idGZfc2l6ZSA9IHRndF9lbmRpYW4oYnRmX3Jhd19zaXplKTtcXG4gXFx0YnRmX2xvYWRfYXR0ciA9IGFkZF9kYXRhKGdlbiwgXFx1MDAyNmF0dHIsIGF0dHJfc2l6ZSk7XFxuLVxcdHByX2RlYnVnKFxcXCJnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXFxcblxcXCIsXFxuIFxcdFxcdCBidGZfZGF0YSwgYnRmX3Jhd19zaXplLCBidGZfbG9hZF9hdHRyLCBhdHRyX3NpemUpO1xcbiBcXG4gXFx0LyogcG9wdWxhdGUgdW5pb24gYnBmX2F0dHIgd2l0aCB1c2VyIHByb3ZpZGVkIGxvZyBkZXRhaWxzICovXFxuQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF9jcmVhdGUoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gXFx0YXR0ci5idGZfdmFsdWVfdHlwZV9pZCA9IHRndF9lbmRpYW4obWFwX2F0dHItXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcXG4gXFxuIFxcdG1hcF9jcmVhdGVfYXR0ciA9IGFkZF9kYXRhKGdlbiwgXFx1MDAyNmF0dHIsIGF0dHJfc2l6ZSk7XFxuLVxcdHByX2RlYnVnKFxcXCJnZW46IG1hcF9jcmVhdGU6ICVzIGlkeCAlZCB0eXBlICVkIHZhbHVlX3R5cGVfaWQgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxcXG5cXFwiLFxcbitcXHRwcl9kZWJ1ZyhcXFwiZ2VuOiBtYXBfY3JlYXRlOiAlcyBpZHggJWQgdHlwZSAldSB2YWx1ZV90eXBlX2lkICV1LCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxcXFxuXFxcIixcXG4gXFx0XFx0IG1hcF9uYW1lLCBtYXBfaWR4LCBtYXBfdHlwZSwgbWFwX2F0dHItXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLFxcbiBcXHRcXHQgbWFwX2NyZWF0ZV9hdHRyLCBhdHRyX3NpemUpO1xcbiBcXG5AQCAtMTA4Miw3ICsxMDgyLDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gXFx0bGljZW5zZV9vZmYgPSBhZGRfZGF0YShnZW4sIGxpY2Vuc2UsIHN0cmxlbihsaWNlbnNlKSArIDEpO1xcbiBcXHQvKiBhZGQgaW5zbnMgdG8gYmxvYiBvZiBieXRlcyAqL1xcbiBcXHRpbnNuc19vZmYgPSBhZGRfZGF0YShnZW4sIGluc25zLCBpbnNuX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pKTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICVkIGluc24gb2ZmICVkIGluc25zX2NudCAlemQgbGljZW5zZSBvZmYgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IHByb2dfbG9hZDogcHJvZ19pZHggJWQgdHlwZSAldSBpbnNuIG9mZiAlZCBpbnNuc19jbnQgJXp1IGxpY2Vuc2Ugb2ZmICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgcHJvZ19pZHgsIHByb2dfdHlwZSwgaW5zbnNfb2ZmLCBpbnNuX2NudCwgbGljZW5zZV9vZmYpO1xcbiBcXG4gXFx0LyogY29udmVydCBibG9iIGluc25zIHRvIHRhcmdldCBlbmRpYW5uZXNzICovXFxuQEAgLTExMDUsMjEgKzExMDUsMjEgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gXFx0YXR0ci5mdW5jX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cXHUwMDNlZnVuY19pbmZvX3JlY19zaXplKTtcXG4gXFx0YXR0ci5mdW5jX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXFx1MDAzZWZ1bmNfaW5mb19jbnQpO1xcbiBcXHRmdW5jX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cXHUwMDNlZnVuY19pbmZvLCBmdW5jX2luZm9fdG90X3N6KTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBmdW5jX2luZm86IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IHByb2dfbG9hZDogZnVuY19pbmZvOiBvZmYgJWQgY250ICV1IHJlYyBzaXplICV1XFxcXG5cXFwiLFxcbiBcXHRcXHQgZnVuY19pbmZvLCBsb2FkX2F0dHItXFx1MDAzZWZ1bmNfaW5mb19jbnQsXFxuIFxcdFxcdCBsb2FkX2F0dHItXFx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZSk7XFxuIFxcbiBcXHRhdHRyLmxpbmVfaW5mb19yZWNfc2l6ZSA9IHRndF9lbmRpYW4obG9hZF9hdHRyLVxcdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xcbiBcXHRhdHRyLmxpbmVfaW5mb19jbnQgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudCk7XFxuIFxcdGxpbmVfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLVxcdTAwM2VsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiZ2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxcXFxuXFxcIixcXG4rXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBsaW5lX2luZm86IG9mZiAlZCBjbnQgJXUgcmVjIHNpemUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdCBsaW5lX2luZm8sIGxvYWRfYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudCxcXG4gXFx0XFx0IGxvYWRfYXR0ci1cXHUwMDNlbGluZV9pbmZvX3JlY19zaXplKTtcXG4gXFxuIFxcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gdGd0X2VuZGlhbigoX191MzIpc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7XFxuIFxcdGF0dHIuY29yZV9yZWxvX2NudCA9IHRndF9lbmRpYW4oZ2VuLVxcdTAwM2Vjb3JlX3JlbG9fY250KTtcXG4gXFx0Y29yZV9yZWxvcyA9IGFkZF9kYXRhKGdlbiwgZ2VuLVxcdTAwM2Vjb3JlX3JlbG9zLCBjb3JlX3JlbG9fdG90X3N6KTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6ZFxcXFxuXFxcIixcXG4rXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxcXFxuXFxcIixcXG4gXFx0XFx0IGNvcmVfcmVsb3MsIGdlbi1cXHUwMDNlY29yZV9yZWxvX2NudCxcXG4gXFx0XFx0IHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbykpO1xcbiBcXG5AQCAtMTIzNCw3ICsxMjM0LDcgQEAgdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSxcXG4gXFx0fVxcbiBcXG4gXFx0bWFwX3VwZGF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcXHUwMDI2YXR0ciwgYXR0cl9zaXplKTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogbWFwX3VwZGF0ZV9lbGVtOiBpZHggJWQsIHZhbHVlOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgbWFwX2lkeCwgdmFsdWUsIHZhbHVlX3NpemUsIG1hcF91cGRhdGVfYXR0ciwgYXR0cl9zaXplKTtcXG4gXFx0bW92ZV9ibG9iMmJsb2IoZ2VuLCBhdHRyX2ZpZWxkKG1hcF91cGRhdGVfYXR0ciwgbWFwX2ZkKSwgNCxcXG4gXFx0XFx0ICAgICAgIGJsb2JfZmRfYXJyYXlfb2ZmKGdlbiwgbWFwX2lkeCkpO1xcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IDEzNjg3NTJhYTEzYzM5Li43MTYyMTQ2MjgwYTgwZSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC0xNDg2LDcgKzE0ODYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3RydWN0X29wc19tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNlY19uYW1lLFxcbiBcXHRcXHQgICAgICAgdHlwZS1cXHUwMDNlc2l6ZSk7XFxuIFxcdFxcdHN0X29wcy1cXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XFxuIFxcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwic3RydWN0X29wcyBpbml0OiBzdHJ1Y3QgJXModHlwZV9pZD0ldSkgJXMgZm91bmQgYXQgb2Zmc2V0ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwic3RydWN0X29wcyBpbml0OiBzdHJ1Y3QgJXModHlwZV9pZD0lZCkgJXMgZm91bmQgYXQgb2Zmc2V0ICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgdG5hbWUsIHR5cGVfaWQsIHZhcl9uYW1lLCB2c2ktXFx1MDAzZW9mZnNldCk7XFxuIFxcdH1cXG4gXFxuQEAgLTI2MjYsNyArMjYyNiw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXG4gXFx0XFx0XFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRpZiAoIXQpIHtcXG4tXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGtleSB0eXBlIFslZF0gbm90IGZvdW5kLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGtleSB0eXBlIFsldV0gbm90IGZvdW5kLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0bWFwX25hbWUsIG0tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBpbnQgcGFyc2VfYnRmX21hcF9kZWYoY29uc3QgY2hhciAqbWFwX25hbWUsIHN0cnVjdCBidGYgKmJ0ZixcXG4gXFxuIFxcdFxcdFxcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVxcdTAwM2V0eXBlKTtcXG4gXFx0XFx0XFx0aWYgKCF0KSB7XFxuLVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiB2YWx1ZSB0eXBlIFslZF0gbm90IGZvdW5kLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IHZhbHVlIHR5cGUgWyV1XSBub3QgZm91bmQuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRtYXBfbmFtZSwgbS1cXHUwMDNldHlwZSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTI3MjAsNyArMjcyMCw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRcXHRtYXBfZGVmLVxcdTAwM2V2YWx1ZV9zaXplID0gNDtcXG4gXFx0XFx0XFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRpZiAoIXQpIHtcXG4tXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6ICVzIHR5cGUgWyVkXSBub3QgZm91bmQuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogJXMgdHlwZSBbJXVdIG5vdCBmb3VuZC5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdG1hcF9uYW1lLCBkZXNjLCBtLVxcdTAwM2V0eXBlKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMzQ3Niw3ICszNDc2LDcgQEAgc3RhdGljIGludCBidGZfZml4dXBfZGF0YXNlYyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcbiBcXHRcXHR2YXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0X3Zhci1cXHUwMDNlbmFtZV9vZmYpO1xcbiBcXHRcXHRpZiAoIXZhcl9uYW1lKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJzZWMgJyVzJzogZmFpbGVkIHRvIGZpbmQgbmFtZSBvZiBEQVRBU0VDJ3MgbWVtYmVyICMlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcInNlYyAnJXMnOiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMncyBtZW1iZXIgIyV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgc2VjX25hbWUsIGkpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFx0XFx0fVxcbkBAIC0zOTcxLDcgKzM5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdGlmICghZGF0YSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX0ZPUk1BVDtcXG4gXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJlbGY6IHNlY3Rpb24oJWQpICVzLCBzaXplICVsZCwgbGluayAlZCwgZmxhZ3MgJWx4LCB0eXBlPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiZWxmOiBzZWN0aW9uKCVkKSAlcywgc2l6ZSAlbHUsIGxpbmsgJWQsIGZsYWdzICVseCwgdHlwZT0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IGlkeCwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGF0YS1cXHUwMDNlZF9zaXplLFxcbiBcXHRcXHRcXHQgKGludClzaC1cXHUwMDNlc2hfbGluaywgKHVuc2lnbmVkIGxvbmcpc2gtXFx1MDAzZXNoX2ZsYWdzLFxcbiBcXHRcXHRcXHQgKGludClzaC1cXHUwMDNlc2hfdHlwZSk7XFxuQEAgLTQ0OTQsNyArNDQ5NCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcbiBcXHRcXHRcXHRleHQtXFx1MDAzZWtjZmcuZGF0YV9vZmYgPSByb3VuZHVwKG9mZiwgZXh0LVxcdTAwM2VrY2ZnLmFsaWduKTtcXG4gXFx0XFx0XFx0b2ZmID0gZXh0LVxcdTAwM2VrY2ZnLmRhdGFfb2ZmICsgZXh0LVxcdTAwM2VrY2ZnLnN6O1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXh0ZXJuIChrY2ZnKSAjJWQ6IHN5bWJvbCAlZCwgb2ZmICV1LCBuYW1lICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXh0ZXJuIChrY2ZnKSAjJWQ6IHN5bWJvbCAlZCwgb2ZmICVkLCBuYW1lICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgaSwgZXh0LVxcdTAwM2VzeW1faWR4LCBleHQtXFx1MDAzZWtjZmcuZGF0YV9vZmYsIGV4dC1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c2VjLVxcdTAwM2VzaXplID0gb2ZmO1xcbkBAIC00NjI2LDcgKzQ2MjYsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19yZWNvcmRfcmVsb2Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbiBcXG4gXFx0aWYgKCFpc19jYWxsX2luc24oaW5zbikgXFx1MDAyNlxcdTAwMjYgIWlzX2xkaW1tNjRfaW5zbihpbnNuKSkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IGludmFsaWQgcmVsbyBhZ2FpbnN0ICclcycgZm9yIGluc25zWyVkXS5jb2RlIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogaW52YWxpZCByZWxvIGFnYWluc3QgJyVzJyBmb3IgaW5zbnNbJXVdLmNvZGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cHJvZy1cXHUwMDNlbmFtZSwgc3ltX25hbWUsIGluc25faWR4LCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX1JFTE9DO1xcbiBcXHR9XFxuQEAgLTQ3NDksNyArNDc0OSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dyYW1fX3JlY29yZF9yZWxvYyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZXNlY19pZHggIT0gc3ltLVxcdTAwM2VzdF9zaG5keCB8fFxcbiBcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0ICE9IHN5bS1cXHUwMDNlc3RfdmFsdWUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwicHJvZyAnJXMnOiBmb3VuZCBtYXAgJXpkICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX2RlYnVnKFxcXCJwcm9nICclcyc6IGZvdW5kIG1hcCAlenUgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICMldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IHByb2ctXFx1MDAzZW5hbWUsIG1hcF9pZHgsIG1hcC1cXHUwMDNlbmFtZSwgbWFwLVxcdTAwM2VzZWNfaWR4LFxcbiBcXHRcXHRcXHRcXHQgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC00Nzc2LDcgKzQ3NzYsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19yZWNvcmRfcmVsb2Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbiBcXHRcXHRtYXAgPSBcXHUwMDI2b2JqLVxcdTAwM2VtYXBzW21hcF9pZHhdO1xcbiBcXHRcXHRpZiAobWFwLVxcdTAwM2VsaWJicGZfdHlwZSAhPSB0eXBlIHx8IG1hcC1cXHUwMDNlc2VjX2lkeCAhPSBzeW0tXFx1MDAzZXN0X3NobmR4KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0cHJfZGVidWcoXFxcInByb2cgJyVzJzogZm91bmQgZGF0YSBtYXAgJXpkICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAldVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcInByb2cgJyVzJzogZm91bmQgZGF0YSBtYXAgJXp1ICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IHByb2ctXFx1MDAzZW5hbWUsIG1hcF9pZHgsIG1hcC1cXHUwMDNlbmFtZSwgbWFwLVxcdTAwM2VzZWNfaWR4LFxcbiBcXHRcXHRcXHQgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC00OTg1LDcgKzQ5ODUsNyBAQCBzdGF0aWMgaW50IGJwZl9nZXRfbWFwX2luZm9fZnJvbV9mZGluZm8oaW50IGZkLCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvKVxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2V2YWx1ZV9zaXplID0gdmFsO1xcbiBcXHRcXHRlbHNlIGlmIChzc2NhbmYoYnVmZiwgXFxcIm1heF9lbnRyaWVzOlxcXFx0JXVcXFwiLCBcXHUwMDI2dmFsKSA9PSAxKVxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VtYXhfZW50cmllcyA9IHZhbDtcXG4tXFx0XFx0ZWxzZSBpZiAoc3NjYW5mKGJ1ZmYsIFxcXCJtYXBfZmxhZ3M6XFxcXHQlaVxcXCIsIFxcdTAwMjZ2YWwpID09IDEpXFxuK1xcdFxcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcXFwibWFwX2ZsYWdzOlxcXFx0JXhcXFwiLCBcXHUwMDI2dmFsKSA9PSAxKVxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VtYXBfZmxhZ3MgPSB2YWw7XFxuIFxcdH1cXG4gXFxuQEAgLTU1MjEsMTEgKzU1MjEsMTEgQEAgc3RhdGljIGludCBpbml0X21hcF9pbl9tYXBfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1lcnJubztcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyVkXSB0byBtYXAgJyVzJyBmZD0lZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gbWFwICclcycgZmQ9JWQ6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUsIGksIHRhcmdfbWFwLVxcdTAwM2VuYW1lLCBmZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJtYXAgJyVzJzogc2xvdCBbJWRdIHNldCB0byBtYXAgJyVzJyBmZD0lZFxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBzbG90IFsldV0gc2V0IHRvIG1hcCAnJXMnIGZkPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLCBpLCB0YXJnX21hcC1cXHUwMDNlbmFtZSwgZmQpO1xcbiBcXHR9XFxuIFxcbkBAIC01NTU0LDExICs1NTU0LDExIEBAIHN0YXRpYyBpbnQgaW5pdF9wcm9nX2FycmF5X3Nsb3RzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLVxcdTAwM2VmZCwgXFx1MDAyNmksIFxcdTAwMjZmZCwgMCk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLWVycm5vO1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJWRdIHRvIHByb2cgJyVzJyBmZD0lZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gcHJvZyAnJXMnIGZkPSVkOiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VuYW1lLCBpLCB0YXJnX3Byb2ctXFx1MDAzZW5hbWUsIGZkLCBlcnJzdHIoZXJyKSk7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBzbG90IFslZF0gc2V0IHRvIHByb2cgJyVzJyBmZD0lZFxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBzbG90IFsldV0gc2V0IHRvIHByb2cgJyVzJyBmZD0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IG1hcC1cXHUwMDNlbmFtZSwgaSwgdGFyZ19wcm9nLVxcdTAwM2VuYW1lLCBmZCk7XFxuIFxcdH1cXG4gXFxuQEAgLTU3ODgsNyArNTc4OCw3IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdFxcdGlmIChzdHJuY21wKGxvY2FsX25hbWUsIHRhcmdfbmFtZSwgbG9jYWxfZXNzZW50X2xlbikgIT0gMClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiQ08tUkUgcmVsb2NhdGluZyBbJWRdICVzICVzOiBmb3VuZCB0YXJnZXQgY2FuZGlkYXRlIFslZF0gJXMgJXMgaW4gWyVzXVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkNPLVJFIHJlbG9jYXRpbmcgWyV1XSAlcyAlczogZm91bmQgdGFyZ2V0IGNhbmRpZGF0ZSBbJWRdICVzICVzIGluIFslc11cXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBsb2NhbF9jYW5kLVxcdTAwM2VpZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3QpLFxcbiBcXHRcXHRcXHQgbG9jYWxfbmFtZSwgaSwgYnRmX2tpbmRfc3RyKHQpLCB0YXJnX25hbWUsXFxuIFxcdFxcdFxcdCB0YXJnX2J0Zl9uYW1lKTtcXG5AQCAtNTg0OCw3ICs1ODQ4LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGlmIChlcnJubyA9PSBFTk9FTlQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlOyAvKiBleHBlY3RlZCByYWNlOiBCVEYgd2FzIHVubG9hZGVkICovXFxuIFxcdFxcdFxcdGVyciA9IC1lcnJubztcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBGRDogJXNcXFxcblxcXCIsIGlkLCBlcnJzdHIoZXJyKSk7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJXUgRkQ6ICVzXFxcXG5cXFwiLCBpZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01ODYxLDcgKzU4NjEsNyBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0ZXJyID0gYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZsZW4pO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1lcnJubztcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBpbmZvOiAlc1xcXFxuXFxcIiwgaWQsIGVycnN0cihlcnIpKTtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBpbmZvOiAlc1xcXFxuXFxcIiwgaWQsIGVycnN0cihlcnIpKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTU4NzQsNyArNTg3NCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cXHUwMDNlYnRmX3ZtbGludXgpO1xcbiBcXHRcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGxvYWQgbW9kdWxlIFslc10ncyBCVEYgb2JqZWN0ICMlZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJ3MgQlRGIG9iamVjdCAjJXU6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRuYW1lLCBpZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC02MDY3LDcgKzYwNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX3Jlc29sdmVfcmVsbyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdCAgICAhaGFzaG1hcF9fZmluZChjYW5kX2NhY2hlLCBsb2NhbF9pZCwgXFx1MDAyNmNhbmRzKSkge1xcbiBcXHRcXHRjYW5kcyA9IGJwZl9jb3JlX2ZpbmRfY2FuZHMocHJvZy1cXHUwMDNlb2JqLCBsb2NhbF9idGYsIGxvY2FsX2lkKTtcXG4gXFx0XFx0aWYgKElTX0VSUihjYW5kcykpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJWRdICVzICVzOiAlbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHRhcmdldCBjYW5kaWRhdGUgc2VhcmNoIGZhaWxlZCBmb3IgWyV1XSAlcyAlczogJWxkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRwcm9nX25hbWUsIHJlbG9faWR4LCBsb2NhbF9pZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLFxcbiBcXHRcXHRcXHRcXHRsb2NhbF9uYW1lLCBQVFJfRVJSKGNhbmRzKSk7XFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGNhbmRzKTtcXG5AQCAtNjEyNyw3ICs2MTI3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cHJfZGVidWcoXFxcInNlYyAnJXMnOiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xcXFxuXFxcIiwgc2VjX25hbWUsIHNlYy1cXHUwMDNlbnVtX2luZm8pO1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwic2VjICclcyc6IGZvdW5kICV1IENPLVJFIHJlbG9jYXRpb25zXFxcXG5cXFwiLCBzZWNfbmFtZSwgc2VjLVxcdTAwM2VudW1faW5mbyk7XFxuIFxcbiBcXHRcXHRmb3JfZWFjaF9idGZfZXh0X3JlYyhzZWcsIHNlYywgaSwgcmVjKSB7XFxuIFxcdFxcdFxcdGlmIChyZWMtXFx1MDAzZWluc25fb2ZmICUgQlBGX0lOU05fU1opXFxuQEAgLTYxODEsNyArNjE4MSw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcXG4gXFxuIFxcdFxcdFxcdGVyciA9IGJwZl9jb3JlX3BhdGNoX2luc24ocHJvZy1cXHUwMDNlbmFtZSwgaW5zbiwgaW5zbl9pZHgsIHJlYywgaSwgXFx1MDAyNnRhcmdfcmVzKTtcXG4gXFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJXU6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJWQ6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VuYW1lLCBpLCBpbnNuX2lkeCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0fVxcbkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y1xcbiBcXHRcXHRnb3RvIGVycl9jbG9zZTtcXG4gXFx0fVxcbiBcXHRpZiAoc3ltX29mZiArIGp0X3NpemUgXFx1MDAzZSBvYmotXFx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeikge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJtYXAgJy5qdW1wdGFibGVzJzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXpkLCB0cnlpbmcgdG8gYWNjZXNzICVkXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJtYXAgJy5qdW1wdGFibGVzJzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXp1LCB0cnlpbmcgdG8gYWNjZXNzICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRvYmotXFx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeiwgc3ltX29mZiArIGp0X3NpemUpO1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIGVycl9jbG9zZTtcXG5AQCAtNjM4MSw3ICs2MzgxLDcgQEAgc3RhdGljIGludCBjcmVhdGVfanRfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgc3RydWNcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChpbnNuX29mZiBcXHUwMDNlIFVJTlQzMl9NQVgpIHtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwibWFwICcuanVtcHRhYmxlcyc6IGludmFsaWQganVtcCB0YWJsZSB2YWx1ZSAweCVsbHggYXQgb2Zmc2V0ICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQobG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICsgaSAqIGp0X2VudHJ5X3NpemUpO1xcbitcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICsgaSAqIGp0X2VudHJ5X3NpemUpO1xcbiBcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9jbG9zZTtcXG4gXFx0XFx0fVxcbkBAIC02NTE3LDcgKzY1MTcsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcXG4gXFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogYmFkIHJlbG8gdHlwZSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogYmFkIHJlbG8gdHlwZSAldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlbmFtZSwgaSwgcmVsby1cXHUwMDNldHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuQEAgLTY3OTcsNyArNjc5Nyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHJlbG8gXFx1MDAyNlxcdTAwMjYgcmVsby1cXHUwMDNldHlwZSAhPSBSRUxPX0NBTEwgXFx1MDAyNlxcdTAwMjYgcmVsby1cXHUwMDNldHlwZSAhPSBSRUxPX1NVQlBST0dfQUREUikge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VuYW1lLCBpbnNuX2lkeCwgcmVsby1cXHUwMDNldHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQztcXG4gXFx0XFx0fVxcbkBAIC03NTg3LDcgKzc1ODcsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdFxcdH1cXG4gXFx0XFx0bmFtZSA9IGVsZl9zeW1fc3RyKG9iaiwgc3ltLVxcdTAwM2VzdF9uYW1lKSA/OiBcXFwiXFx1MDAzYz9cXHUwMDNlXFxcIjtcXG4gXFxuLVxcdFxcdHByX2RlYnVnKFxcXCIubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlemQgcmVsLVxcdTAwM2VyX29mZnNldCAlenUgbmFtZSAlZCAoJyVzJylcXFxcblxcXCIsXFxuK1xcdFxcdHByX2RlYnVnKFxcXCIubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlenUgcmVsLVxcdTAwM2VyX29mZnNldCAlenUgbmFtZSAldSAoJyVzJylcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBpLCAoc3NpemVfdCkocmVsLVxcdTAwM2VyX2luZm8gXFx1MDAzZVxcdTAwM2UgMzIpLCAoc2l6ZV90KXN5bS1cXHUwMDNlc3RfdmFsdWUsXFxuIFxcdFxcdFxcdCAoc2l6ZV90KXJlbC1cXHUwMDNlcl9vZmZzZXQsIHN5bS1cXHUwMDNlc3RfbmFtZSwgbmFtZSk7XFxuIFxcbkBAIC03Njc4LDcgKzc2NzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdFxcdH1cXG4gXFx0XFx0bWFwLVxcdTAwM2Vpbml0X3Nsb3RzW21vZmZdID0gaXNfbWFwX2luX21hcCA/ICh2b2lkICopdGFyZ19tYXAgOiAodm9pZCAqKXRhcmdfcHJvZztcXG4gXFxuLVxcdFxcdHByX2RlYnVnKFxcXCIubWFwcyByZWxvICMlZDogbWFwICclcycgc2xvdCBbJWRdIHBvaW50cyB0byAlcyAnJXMnXFxcXG5cXFwiLFxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiLm1hcHMgcmVsbyAjJWQ6IG1hcCAnJXMnIHNsb3QgWyV1XSBwb2ludHMgdG8gJXMgJyVzJ1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0IGksIG1hcC1cXHUwMDNlbmFtZSwgbW9mZiwgdHlwZSwgbmFtZSk7XFxuIFxcdH1cXG4gXFxuQEAgLTg3MzgsNyArODczOCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVzb2x2ZV9rc3ltX3Zhcl9idGZfaWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4gXFx0XFx0bG9jYWxfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQob2JqLVxcdTAwM2VidGYsIGxvY2FsX3R5cGUtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gXFx0XFx0dGFyZ19uYW1lID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHRhcmdfdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbiBcXG4tXFx0XFx0cHJfd2FybihcXFwiZXh0ZXJuICh2YXIga3N5bSkgJyVzJzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJWRdICVzICVzLCBidXQga2VybmVsIGhhcyBbJWRdICVzICVzXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJleHRlcm4gKHZhciBrc3ltKSAnJXMnOiBpbmNvbXBhdGlibGUgdHlwZXMsIGV4cGVjdGVkIFsldV0gJXMgJXMsIGJ1dCBrZXJuZWwgaGFzIFsldV0gJXMgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGV4dC1cXHUwMDNlbmFtZSwgbG9jYWxfdHlwZV9pZCxcXG4gXFx0XFx0XFx0YnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLCBsb2NhbF9uYW1lLCB0YXJnX3R5cGVfaWQsXFxuIFxcdFxcdFxcdGJ0Zl9raW5kX3N0cih0YXJnX3R5cGUpLCB0YXJnX25hbWUpO1xcbkBAIC04OTE1LDcgKzg5MTUsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3Jlc29sdmVfZXh0ZXJucyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXh0ZXJuIChrY2ZnKSAnJXMnOiBzZXQgdG8gMHglbGx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgZXh0LVxcdTAwM2VuYW1lLCAobG9uZyBsb25nKXZhbHVlKTtcXG4rXFx0XFx0XFx0XFx0IGV4dC1cXHUwMDNlbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcImV4dGVybiAnJXMnOiB1bnJlY29nbml6ZWQgZXh0ZXJuIGtpbmRcXFxcblxcXCIsIGV4dC1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xMDQ5NCw3ICsxMDQ5NCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9zdF9vcHNfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4gXFx0XFx0bW9mZiA9IHJlbC1cXHUwMDNlcl9vZmZzZXQgLSBtYXAtXFx1MDAzZXNlY19vZmZzZXQ7XFxuIFxcdFxcdHNoZHJfaWR4ID0gc3ltLVxcdTAwM2VzdF9zaG5keDtcXG4gXFx0XFx0c3Rfb3BzID0gbWFwLVxcdTAwM2VzdF9vcHM7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJzdHJ1Y3Rfb3BzIHJlbG9jICVzOiBmb3IgJWxsZCB2YWx1ZSAlbGxkIHNoZHJfaWR4ICV1IHJlbC1cXHUwMDNlcl9vZmZzZXQgJXp1IG1hcC1cXHUwMDNlc2VjX29mZnNldCAlenUgbmFtZSAlZCAoXFxcXCclc1xcXFwnKVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcInN0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLVxcdTAwM2VyX29mZnNldCAlenUgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0ICV6dSBuYW1lICV1IChcXFxcJyVzXFxcXCcpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLFxcbiBcXHRcXHRcXHQgKGxvbmcgbG9uZykocmVsLVxcdTAwM2VyX2luZm8gXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHRcXHQgKGxvbmcgbG9uZylzeW0tXFx1MDAzZXN0X3ZhbHVlLFxcbkBAIC0xMDY0Myw3ICsxMDY0Myw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0XFxuIFxcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xcbiBcXHRlcnIgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChhdHRhY2hfcHJvZ19mZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbik7XFxuIFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkIGZvciBGRCAlZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcImZhaWxlZCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZCBmb3IgRkQgJXU6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRhdHRhY2hfcHJvZ19mZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTEwNjU2LDcgKzEwNjU2LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChjb25zdCBjaGFyICpuYW1lLCBfX3UzMiBhdHRhY2hfcHJvZ19mZCwgaW50IHRcXG4gXFx0YnRmID0gYnRmX2xvYWRfZnJvbV9rZXJuZWwoaW5mby5idGZfaWQsIE5VTEwsIHRva2VuX2ZkKTtcXG4gXFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBnZXQgQlRGICVkIG9mIHRoZSBwcm9ncmFtOiAlc1xcXFxuXFxcIiwgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTtcXG4rXFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGdldCBCVEYgJXUgb2YgdGhlIHByb2dyYW06ICVzXFxcXG5cXFwiLCBpbmZvLmJ0Zl9pZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHRlcnIgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgbmFtZSwgQlRGX0tJTkRfRlVOQyk7XFxuQEAgLTEwNzM4LDcgKzEwNzM4LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqYXR0YWNcXG4gXFx0XFx0fVxcbiBcXHRcXHRlcnIgPSBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChhdHRhY2hfbmFtZSwgYXR0YWNoX3Byb2dfZmQsIHByb2ctXFx1MDAzZW9iai1cXHUwMDNldG9rZW5fZmQpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IGZhaWxlZCB0byBmaW5kIEJQRiBwcm9ncmFtIChGRCAlZCkgQlRGIElEIGZvciAnJXMnOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJyVzJzogJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHByb2ctXFx1MDAzZW5hbWUsIGF0dGFjaF9wcm9nX2ZkLCBhdHRhY2hfbmFtZSwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9tYXBfb3AoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IGtleV9zeixcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKHZhbHVlX3N6ICE9IG51bV9jcHUgKiBlbGVtX3N6KSB7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiB1bmV4cGVjdGVkIHZhbHVlIHNpemUgJXp1IHByb3ZpZGVkIGZvciBwZXItQ1BVIG1hcCwgZXhwZWN0ZWQgJWQgKiAlenUgPSAlemRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiB1bmV4cGVjdGVkIHZhbHVlIHNpemUgJXp1IHByb3ZpZGVkIGZvciBwZXItQ1BVIG1hcCwgZXhwZWN0ZWQgJWQgKiAlenUgPSAlenVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgdmFsdWVfc3osIG51bV9jcHUsIGVsZW1fc3osIG51bV9jcHUgKiBlbGVtX3N6KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5AQCAtMTE3NzQsNyArMTE3NzQsNyBAQCBzdGF0aWMgdm9pZCBnZW5fcHJvYmVfbGVnYWN5X2V2ZW50X25hbWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6LFxcbiBcXHRzdGF0aWMgaW50IGluZGV4ID0gMDtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXFxcImxpYmJwZl8ldV8lZF8lc18weCV6eFxcXCIsIGdldHBpZCgpLFxcbitcXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXFxcImxpYmJwZl8lZF8lZF8lc18weCV6eFxcXCIsIGdldHBpZCgpLFxcbiBcXHRcXHQgX19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmluZGV4LCAxKSwgbmFtZSwgb2Zmc2V0KTtcXG4gXFxuIFxcdC8qIHNhbml0aXplIG5hbWUgaW4gdGhlIHByb2JlIG5hbWUgKi9cXG5AQCAtMTI5MjQsOCArMTI5MjQsOCBAQCBzdGF0aWMgbG9uZyBlbGZfZmluZF9mdW5jX29mZnNldF9mcm9tX2FyY2hpdmUoY29uc3QgY2hhciAqYXJjaGl2ZV9wYXRoLCBjb25zdCBjaFxcbiBcXHRyZXQgPSBlbGZfZmluZF9mdW5jX29mZnNldChlbGYsIGZpbGVfbmFtZSwgZnVuY19uYW1lKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0cHJfZGVidWcoXFxcImVsZjogc3ltYm9sIGFkZHJlc3MgbWF0Y2ggZm9yICVzIG9mICVzIGluICVzOiAweCV4ICsgMHglbHggPSAweCVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGZ1bmNfbmFtZSwgZmlsZV9uYW1lLCBhcmNoaXZlX3BhdGgsIGVudHJ5LmRhdGFfb2Zmc2V0LCByZXQsXFxuLVxcdFxcdFxcdCByZXQgKyBlbnRyeS5kYXRhX29mZnNldCk7XFxuK1xcdFxcdFxcdCBmdW5jX25hbWUsIGZpbGVfbmFtZSwgYXJjaGl2ZV9wYXRoLCBlbnRyeS5kYXRhX29mZnNldCwgKHVuc2lnbmVkIGxvbmcpcmV0LFxcbitcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpKHJldCArIGVudHJ5LmRhdGFfb2Zmc2V0KSk7XFxuIFxcdFxcdHJldCArPSBlbnRyeS5kYXRhX29mZnNldDtcXG4gXFx0fVxcbiBcXHRlbGZfZW5kKGVsZik7XFxuQEAgLTE0NTcwLDcgKzE0NTcwLDcgQEAgcGVyZl9idWZmZXJfX3Byb2Nlc3NfcmVjb3JkKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqZSwgdm9pZCAqY3R4KVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCJ1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJWRcXFxcblxcXCIsIGUtXFx1MDAzZXR5cGUpO1xcbitcXHRcXHRwcl93YXJuKFxcXCJ1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcXFxcblxcXCIsIGUtXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRyZXR1cm4gTElCQlBGX1BFUkZfRVZFTlRfRVJST1I7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0NPTlQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmMgYi90b29scy9saWIvYnBmL25sYXR0ci5jXFxuaW5kZXggMDY2NjNmOWVhNTgxZjkuLjAwN2ZlMTdkMTdiNDI5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcXG4rKysgYi90b29scy9saWIvYnBmL25sYXR0ci5jXFxuQEAgLTEyMyw3ICsxMjMsNyBAQCBpbnQgbGliYnBmX25sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwgc3RydWN0IG5sYXR0ciAqaGVhZCxcXG4gXFxuIFxcdFxcdGlmICh0Ylt0eXBlXSkge1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJBdHRyaWJ1dGUgb2YgdHlwZSAlI3ggZm91bmQgbXVsdGlwbGUgdGltZXMgaW4gbWVzc2FnZSwgXFxcIlxcbi1cXHRcXHRcXHRcXHRcXFwicHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXFxcXG5cXFwiLCB0eXBlKTtcXG4rXFx0XFx0XFx0XFx0XFxcInByZXZpb3VzIGF0dHJpYnV0ZSBpcyBiZWluZyBpZ25vcmVkLlxcXFxuXFxcIiwgKHVuc2lnbmVkKXR5cGUpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR0Ylt0eXBlXSA9IG5sYTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuYyBiL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmNcXG5pbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmNcXG5AQCAtMjE2LDcgKzIxNiw3IEBAIGludCBfX2JwZl9jb3JlX3R5cGVzX2FyZV9jb21wYXQoY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCxcXG4gXFx0XFx0Z290byByZWN1cjtcXG4gXFx0fVxcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfd2FybihcXFwidW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cXFxcblxcXCIsXFxuIFxcdFxcdFxcdGJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSwgbG9jYWxfaWQsIHRhcmdfaWQpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbkBAIC0zODQsNyArMzg0LDcgQEAgaW50IGJwZl9jb3JlX3BhcnNlX3NwZWMoY29uc3QgY2hhciAqcHJvZ19uYW1lLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdFxcdHJldHVybiBzejtcXG4gXFx0XFx0XFx0c3BlYy1cXHUwMDNlYml0X29mZnNldCArPSBhY2Nlc3NfaWR4ICogc3ogKiA4O1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJWRdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvIGZvciBbJXVdICVzIChhdCBpZHggJWQpIGNhcHR1cmVzIHR5cGUgWyV1XSBvZiB1bmV4cGVjdGVkIGtpbmQgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsby1cXHUwMDNldHlwZV9pZCwgc3BlY19zdHIsIGksIGlkLCBidGZfa2luZF9zdHIodCkpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbkBAIC03MjUsNyArNzI1LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0KnZhbCA9IHN6O1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gJWQgYXQgaW5zbiAjJWQgY2FuJ3QgYmUgYXBwbGllZCB0byBhcnJheSBhY2Nlc3NcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAldSBhdCBpbnNuICMldSBjYW4ndCBiZSBhcHBsaWVkIHRvIGFycmF5IGFjY2Vzc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cHJvZ19uYW1lLCByZWxvLVxcdTAwM2VraW5kLCByZWxvLVxcdTAwM2VpbnNuX29mZiAvIDgpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbkBAIC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxcbiBcXHRcXHR3aGlsZSAoYml0X29mZiArIGJpdF9zeiAtIGJ5dGVfb2ZmICogOCBcXHUwMDNlIGJ5dGVfc3ogKiA4KSB7XFxuIFxcdFxcdFxcdGlmIChieXRlX3N6IFxcdTAwM2U9IDgpIHtcXG4gXFx0XFx0XFx0XFx0LyogYml0ZmllbGQgY2FuJ3QgYmUgcmVhZCB3aXRoIDY0LWJpdCByZWFkICovXFxuLVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4ndCBiZSBzYXRpc2ZpZWQgZm9yIGJpdGZpZWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJ3QgYmUgc2F0aXNmaWVkIGZvciBiaXRmaWVsZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0cHJvZ19uYW1lLCByZWxvLVxcdTAwM2VraW5kLCByZWxvLVxcdTAwM2VpbnNuX29mZiAvIDgpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTk3MSw3ICs5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXFxuIFxcdFxcdGVyciA9IDA7XFxuIFxcdH0gZWxzZSBpZiAoZXJyID09IC1FT1BOT1RTVVBQKSB7XFxuIFxcdFxcdC8qIEVPUE5PVFNVUFAgbWVhbnMgdW5rbm93bi91bnN1cHBvcnRlZCByZWxvY2F0aW9uICovXFxuLVxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHVucmVjb2duaXplZCBDTy1SRSByZWxvY2F0aW9uICVzICglZCkgYXQgaW5zbiAjJWRcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHVucmVjb2duaXplZCBDTy1SRSByZWxvY2F0aW9uICVzICgldSkgYXQgaW5zbiAjJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVxcdTAwM2VraW5kKSxcXG4gXFx0XFx0XFx0cmVsby1cXHUwMDNla2luZCwgcmVsby1cXHUwMDNlaW5zbl9vZmYgLyA4KTtcXG4gXFx0fVxcbkBAIC0xMDY3LDcgKzEwNjcsNyBAQCBpbnQgYnBmX2NvcmVfcGF0Y2hfaW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0spXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRpZiAocmVzLVxcdTAwM2V2YWxpZGF0ZSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gIT0gb3JpZ192YWwpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoQUxVL0FMVTY0KSB2YWx1ZTogZ290ICV1LCBleHAgJWxsdSAtXFx1MDAzZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cXHUwMDNlICVsbHVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsXFxuIFxcdFxcdFxcdFxcdGluc25faWR4LCBpbnNuLVxcdTAwM2VpbW0sICh1bnNpZ25lZCBsb25nIGxvbmcpb3JpZ192YWwsXFxuIFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XFxuQEAgLTEwODMsNyArMTA4Myw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRjYXNlIEJQRl9TVDpcXG4gXFx0Y2FzZSBCUEZfU1RYOlxcbiBcXHRcXHRpZiAocmVzLVxcdTAwM2V2YWxpZGF0ZSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgIT0gb3JpZ192YWwpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoTERYL1NUL1NUWCkgdmFsdWU6IGdvdCAldSwgZXhwICVsbHUgLVxcdTAwM2UgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoTERYL1NUL1NUWCkgdmFsdWU6IGdvdCAlZCwgZXhwICVsbHUgLVxcdTAwM2UgJWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXFx1MDAzZW9mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcXG4gXFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfdmFsKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTExNTksNyArMTE1OSw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiB0cnlpbmcgdG8gcmVsb2NhdGUgdW5yZWNvZ25pemVkIGluc24gIyVkLCBjb2RlOjB4JXgsIHNyYzoweCV4LCBkc3Q6MHgleCwgb2ZmOjB4JXgsIGltbToweCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRwcm9nX25hbWUsIHJlbG9faWR4LCBpbnNuX2lkeCwgaW5zbi1cXHUwMDNlY29kZSxcXG4tXFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRcXHQodW5zaWduZWQpaW5zbi1cXHUwMDNlc3JjX3JlZywgKHVuc2lnbmVkKWluc24tXFx1MDAzZWRzdF9yZWcsICh1bnNpZ25lZClpbnNuLVxcdTAwM2VvZmYsICh1bnNpZ25lZClpbnNuLVxcdTAwM2VpbW0pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTMyMyw3ICsxMzIzLDcgQEAgaW50IGJwZl9jb3JlX2NhbGNfcmVsb19pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcXG4gXFx0XFx0Y29uc3QgY2hhciAqc3BlY19zdHI7XFxuIFxcbiBcXHRcXHRzcGVjX3N0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQobG9jYWxfYnRmLCByZWxvLVxcdTAwM2VhY2Nlc3Nfc3RyX29mZik7XFxuLVxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyVkXSAlcyAlcyArICVzIGZhaWxlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyV1XSAlcyAlcyArICVzIGZhaWxlZDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsIGxvY2FsX2lkLCBidGZfa2luZF9zdHIobG9jYWxfdHlwZSksXFxuIFxcdFxcdFxcdHN0cl9pc19lbXB0eShsb2NhbF9uYW1lKSA/IFxcXCJcXHUwMDNjYW5vblxcdTAwM2VcXFwiIDogbG9jYWxfbmFtZSxcXG4gXFx0XFx0XFx0c3BlY19zdHIgPzogXFxcIlxcdTAwM2M/XFx1MDAzZVxcXCIsIGVycik7XFxuQEAgLTEzNDYsNyArMTM0Niw3IEBAIGludCBicGZfY29yZV9jYWxjX3JlbG9faW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsXFxuIFxcbiBcXHQvKiBsaWJicGYgZG9lc24ndCBzdXBwb3J0IGNhbmRpZGF0ZSBzZWFyY2ggZm9yIGFub255bW91cyB0eXBlcyAqL1xcbiBcXHRpZiAoc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IFxcdTAwM2Mlc1xcdTAwM2UgKCVkKSByZWxvY2F0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhbm9ueW1vdXMgdHlwZXNcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IFxcdTAwM2Mlc1xcdTAwM2UgKCV1KSByZWxvY2F0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhbm9ueW1vdXMgdHlwZXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVxcdTAwM2VraW5kKSwgcmVsby1cXHUwMDNla2luZCk7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbkBAIC0xNjk3LDcgKzE2OTcsNyBAQCBpbnQgX19icGZfY29yZV90eXBlc19tYXRjaChjb25zdCBzdHJ1Y3QgYnRmICpsb2NhbF9idGYsIF9fdTMyIGxvY2FsX2lkLCBjb25zdCBzdFxcbiBcXHRcXHRnb3RvIHJlY3VyO1xcbiBcXHR9XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0YnRmX2tpbmRfc3RyKGxvY2FsX3QpLCBsb2NhbF9pZCwgdGFyZ19pZCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvdXNkdC5jIGIvdG9vbHMvbGliL2JwZi91c2R0LmNcXG5pbmRleCA1N2ZiODJiYjgxYjU4OC4uZGI5NDMyYWRiOTY3YjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi91c2R0LmNcXG4rKysgYi90b29scy9saWIvYnBmL3VzZHQuY1xcbkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIGludCBzYW5pdHlfY2hlY2tfdXNkdF9lbGYoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgpXFxuIFxcdGludCBlbmRpYW5uZXNzO1xcbiBcXG4gXFx0aWYgKGVsZl9raW5kKGVsZikgIT0gRUxGX0tfRUxGKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAlZCBmb3IgJyVzJ1xcXFxuXFxcIiwgZWxmX2tpbmQoZWxmKSwgcGF0aCk7XFxuK1xcdFxcdHByX3dhcm4oXFxcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAldSBmb3IgJyVzJ1xcXFxuXFxcIiwgZWxmX2tpbmQoZWxmKSwgcGF0aCk7XFxuIFxcdFxcdHJldHVybiAtRUJBREY7XFxuIFxcdH1cXG4gXFxuQEAgLTQzOCw4ICs0MzgsOSBAQCBzdGF0aWMgaW50IHBhcnNlX2VsZl9zZWdzKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZWxmX3NlZyAqKnNlZ3MsIHNpelxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwidXNkdDogZGlzY292ZXJlZCBQSERSICMlZCBpbiAnJXMnOiB2YWRkciAweCVseCBtZW1zeiAweCVseCBvZmZzZXQgMHglbHggdHlwZSAweCVseCBmbGFncyAweCVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGksIHBhdGgsIChsb25nKXBoZHIucF92YWRkciwgKGxvbmcpcGhkci5wX21lbXN6LCAobG9uZylwaGRyLnBfb2Zmc2V0LFxcbi1cXHRcXHRcXHQgKGxvbmcpcGhkci5wX3R5cGUsIChsb25nKXBoZHIucF9mbGFncyk7XFxuK1xcdFxcdFxcdCBpLCBwYXRoLFxcbitcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpcGhkci5wX3ZhZGRyLCAodW5zaWduZWQgbG9uZylwaGRyLnBfbWVtc3osICh1bnNpZ25lZCBsb25nKXBoZHIucF9vZmZzZXQsXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZylwaGRyLnBfdHlwZSwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKHBoZHIucF90eXBlICE9IFBUX0xPQUQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtNzE5LDE0ICs3MjAsMTQgQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCxcXG4gXFx0XFx0aWYgKCFzZWcpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVTUkNIO1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJ1c2R0OiBmYWlsZWQgdG8gZmluZCBFTEYgcHJvZ3JhbSBzZWdtZW50IGZvciAnJXM6JXMnIGluICclcycgYXQgSVAgMHglbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9hYnNfaXApO1xcbitcXHRcXHRcXHRcXHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwKTtcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghc2VnLVxcdTAwM2Vpc19leGVjKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwidXNkdDogbWF0Y2hlZCBFTEYgYmluYXJ5ICclcycgc2VnbWVudCBbMHglbHgsIDB4JWx4KSBmb3IgJyVzOiVzJyBhdCBJUCAweCVseCBpcyBub3QgZXhlY3V0YWJsZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cGF0aCwgc2VnLVxcdTAwM2VzdGFydCwgc2VnLVxcdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcXG4tXFx0XFx0XFx0XFx0dXNkdF9hYnNfaXApO1xcbitcXHRcXHRcXHRcXHRwYXRoLCAodW5zaWduZWQgbG9uZylzZWctXFx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXFx1MDAzZWVuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLFxcbitcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHRcXHQvKiB0cmFuc2xhdGUgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gZmlsZSBvZmZzZXQgKi9cXG5AQCAtNzY2LDcgKzc2Nyw3IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXFxuIFxcdFxcdFxcdGlmICghc2VnKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0XFx0XFx0XFx0cHJfd2FybihcXFwidXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJyVzOiVzJyBpbiAnJXMnIGF0IHJlbGF0aXZlIElQIDB4JWx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsIHVzZHRfcmVsX2lwKTtcXG4rXFx0XFx0XFx0XFx0XFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0XFx0fVxcbiBcXG5AQCAtNzc1LDggKzc3NiwxMCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxcbiBcXG4gXFx0XFx0cHJfZGVidWcoXFxcInVzZHQ6IHByb2JlIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAnJXMnIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseCkgYXQgb2Zmc2V0IDB4JWx4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBlaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gXFxcImV4ZWNcXFwiIDogXFxcImxpYiBcXFwiLCBwYXRoLFxcbi1cXHRcXHRcXHQgbm90ZS5sb2NfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfYWJzX2lwLCB1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLFxcbi1cXHRcXHRcXHQgc2VnID8gc2VnLVxcdTAwM2VzdGFydCA6IDAsIHNlZyA/IHNlZy1cXHUwMDNlZW5kIDogMCwgc2VnID8gc2VnLVxcdTAwM2VvZmZzZXQgOiAwKTtcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKW5vdGUubG9jX2FkZHIsICh1bnNpZ25lZCBsb25nKW5vdGUuYmFzZV9hZGRyLFxcbitcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpdXNkdF9hYnNfaXAsICh1bnNpZ25lZCBsb25nKXVzZHRfcmVsX2lwLCBub3RlLmFyZ3MsXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVxcdTAwM2VzdGFydCA6IDApLCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVxcdTAwM2VlbmQgOiAwKSxcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctXFx1MDAzZW9mZnNldCA6IDApKTtcXG4gXFxuIFxcdFxcdC8qIEFkanVzdCBzZW1hcGhvcmUgYWRkcmVzcyB0byBiZSBhIGZpbGUgb2Zmc2V0ICovXFxuIFxcdFxcdGlmIChub3RlLnNlbWFfYWRkcikge1xcbkBAIC03OTEsMTQgKzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxcbiBcXHRcXHRcXHRpZiAoIXNlZykge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRVNSQ0g7XFxuIFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBsb2FkYWJsZSBzZWdtZW50IHdpdGggc2VtYXBob3JlIG9mICclczolcycgaW4gJyVzJyBhdCAweCVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCBub3RlLnNlbWFfYWRkcik7XFxuK1xcdFxcdFxcdFxcdFxcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgKHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHNlZy1cXHUwMDNlaXNfZXhlYykge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRVNSQ0g7XFxuIFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAnJXMnIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gZm9yIHNlbWFwaG9yZSBvZiAnJXM6JXMnIGF0IDB4JWx4IGlzIGV4ZWN1dGFibGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdHBhdGgsIHNlZy1cXHUwMDNlc3RhcnQsIHNlZy1cXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdG5vdGUuc2VtYV9hZGRyKTtcXG4rXFx0XFx0XFx0XFx0XFx0cGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLVxcdTAwM2VzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLVxcdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTgwNiw4ICs4MDksOCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxcbiBcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcInVzZHQ6IHNlbWEgIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgMHglbHgpIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gYXQgb2Zmc2V0IDB4JWx4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBlaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gXFxcImV4ZWNcXFwiIDogXFxcImxpYiBcXFwiLFxcbi1cXHRcXHRcXHRcXHQgcGF0aCwgbm90ZS5zZW1hX2FkZHIsIG5vdGUuYmFzZV9hZGRyLCB1c2R0X3NlbWFfb2ZmLFxcbi1cXHRcXHRcXHRcXHQgc2VnLVxcdTAwM2VzdGFydCwgc2VnLVxcdTAwM2VlbmQsIHNlZy1cXHUwMDNlb2Zmc2V0KTtcXG4rXFx0XFx0XFx0XFx0IHBhdGgsICh1bnNpZ25lZCBsb25nKW5vdGUuc2VtYV9hZGRyLCAodW5zaWduZWQgbG9uZylub3RlLmJhc2VfYWRkciwgKHVuc2lnbmVkIGxvbmcpdXNkdF9zZW1hX29mZixcXG4rXFx0XFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKXNlZy1cXHUwMDNlc3RhcnQsICh1bnNpZ25lZCBsb25nKXNlZy1cXHUwMDNlZW5kLCAodW5zaWduZWQgbG9uZylzZWctXFx1MDAzZW9mZnNldCk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIFJlY29yZCBhZGp1c3RlZCBhZGRyZXNzZXMgYW5kIG9mZnNldHMgYW5kIHBhcnNlIFVTRFQgc3BlYyAqL1xcbkBAIC0xMTE3LDcgKzExMjAsNyBAQCBzdHJ1Y3QgYnBmX2xpbmsgKnVzZHRfbWFuYWdlcl9hdHRhY2hfdXNkdChzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIGNvbnN0IHN0cnVjdFxcbiBcXHRcXHRcXHRcXHQgICAgICAgIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IGZhaWxlZCB0byBtYXAgSVAgMHglbHggdG8gc3BlYyAjJWQgZm9yICclczolcycgaW4gJyVzJzogJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdHRhcmdldC1cXHUwMDNlYWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKXRhcmdldC1cXHUwMDNlYWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdHBhdGgsIGVycnN0cihlcnIpKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEwOjU2OjE3LjU2NjY4ODA1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4NTMwODUxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzYWFhNTE5YzIxMmE4N2Q4ZDRkZjJlNDljNTM2NzhhYzY5ZDljYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAxMDo1NjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXG5pbmRleCA4MjNiY2U4OTUxNzhkYS4uYmY2YTY4MTE4NDA1MTMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4rKysgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyBpbnQgYnRmX3BhcnNlX3R5cGVfc2VjKHN0cnVjdCBidGYgKmJ0ZilcbiBcdFx0aWYgKHR5cGVfc2l6ZSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gdHlwZV9zaXplO1xuIFx0XHRpZiAobmV4dF90eXBlICsgdHlwZV9zaXplIFx1MDAzZSBlbmRfdHlwZSkge1xuLVx0XHRcdHByX3dhcm4oXCJCVEYgdHlwZSBbJWRdIGlzIG1hbGZvcm1lZFxcblwiLCBidGYtXHUwMDNlc3RhcnRfaWQgKyBidGYtXHUwMDNlbnJfdHlwZXMpO1xuK1x0XHRcdHByX3dhcm4oXCJCVEYgdHlwZSBbJXVdIGlzIG1hbGZvcm1lZFxcblwiLCBidGYtXHUwMDNlc3RhcnRfaWQgKyBidGYtXHUwMDNlbnJfdHlwZXMpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTQyNCw3ICsxNDI0LDcgQEAgc3RhdGljIGludCBidGZfZmluZF9lbGZfc2VjdGlvbnMoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidGZfZWxmX3NlY3NcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKHNoLnNoX3R5cGUgIT0gU0hUX1BST0dCSVRTKSB7XG4tXHRcdFx0cHJfd2FybihcInVuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICglZCkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcXG5cIixcbitcdFx0XHRwcl93YXJuKFwidW5leHBlY3RlZCBzZWN0aW9uIHR5cGUgKCV1KSBvZiBzZWN0aW9uKCVkLCAlcykgZnJvbSAlc1xcblwiLFxuIFx0XHRcdFx0c2guc2hfdHlwZSwgaWR4LCBuYW1lLCBwYXRoKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHN0YXRpYyBib29sIGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgaWQxLCBfX3UzMiBpZDIsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAoIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgbTEtXHUwMDNldHlwZSwgbTItXHUwMDNldHlwZSwgZGVwdGggLSAxKSkge1xuIFx0XHRcdFx0aWYgKHQxLVx1MDAzZW5hbWVfb2ZmKSB7XG4tXHRcdFx0XHRcdHByX2RlYnVnKFwiJXMgJyVzJyBzaXplPSVkIHZsZW49JWQgaWQxWyV1XSBpZDJbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBpZGVudGljYWwgZm9yIGZpZWxkIyVkICclcydcXG5cIixcbitcdFx0XHRcdFx0cHJfZGVidWcoXCIlcyAnJXMnIHNpemU9JXUgdmxlbj0ldSBpZDFbJXVdIGlkMlsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGlkZW50aWNhbCBmb3IgZmllbGQjJWQgJyVzJ1xcblwiLFxuIFx0XHRcdFx0XHRcdCBrMSA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcIlNUUlVDVFwiIDogXCJVTklPTlwiLFxuIFx0XHRcdFx0XHRcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXHUwMDNlYnRmLCB0MS1cdTAwM2VuYW1lX29mZiksXG4gXHRcdFx0XHRcdFx0IHQxLVx1MDAzZXNpemUsIGJ0Zl92bGVuKHQxKSwgaWQxLCBpZDIsIGksXG5AQCAtNTEwNCw3ICs1MTA0LDcgQEAgc3RhdGljIGludCBidGZfZGVkdXBfaXNfZXF1aXYoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgY2FuZF9pZCxcbiBcdFx0XHRlcSA9IGJ0Zl9kZWR1cF9pc19lcXVpdihkLCBjYW5kX20tXHUwMDNldHlwZSwgY2Fub25fbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRpZiAoZXEgXHUwMDNjPSAwKSB7XG4gXHRcdFx0XHRpZiAoY2FuZF90eXBlLVx1MDAzZW5hbWVfb2ZmKSB7XG4tXHRcdFx0XHRcdHByX2RlYnVnKFwiJXMgJyVzJyBzaXplPSVkIHZsZW49JWQgY2FuZF9pZFsldV0gY2Fub25faWRbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBlcXVpdiBmb3IgZmllbGQjJWQgJyVzJzogJWRcXG5cIixcbitcdFx0XHRcdFx0cHJfZGVidWcoXCIlcyAnJXMnIHNpemU9JXUgdmxlbj0ldSBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAnJXMnOiAlZFxcblwiLFxuIFx0XHRcdFx0XHRcdCBjYW5kX2tpbmQgPT0gQlRGX0tJTkRfU1RSVUNUID8gXCJTVFJVQ1RcIiA6IFwiVU5JT05cIixcbiBcdFx0XHRcdFx0XHQgYnRmX19uYW1lX2J5X29mZnNldChkLVx1MDAzZWJ0ZiwgY2FuZF90eXBlLVx1MDAzZW5hbWVfb2ZmKSxcbiBcdFx0XHRcdFx0XHQgY2FuZF90eXBlLVx1MDAzZXNpemUsIHZsZW4sIGNhbmRfaWQsIGNhbm9uX2lkLCBpLFxuQEAgLTYwNjksNyArNjA2OSw3IEBAIHN0YXRpYyBpbnQgYnRmX2FkZF9kaXN0aWxsZWRfdHlwZXMoc3RydWN0IGJ0Zl9kaXN0aWxsICpkaXN0KVxuIFx0XHRcdGVyciA9IGJ0Zl9hZGRfdHlwZShcdTAwMjZkaXN0LVx1MDAzZXBpcGUsIHQpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdHByX3dhcm4oXCJ1bmV4cGVjdGVkIGtpbmQgd2hlbiBhZGRpbmcgYmFzZSB0eXBlICclcydbJXVdIG9mIGtpbmQgWyV1XSB0byBkaXN0aWxsZWQgYmFzZSBCVEYuXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcInVuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJyVzJ1slZF0gb2Yga2luZCBbJWRdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXG5cIixcbiBcdFx0XHRcdG5hbWUsIGksIGtpbmQpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuY1xuaW5kZXggY2MxYmE2NWJiNmM1YWMuLjEyM2M0NDhmMjBjNzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9idGZfZHVtcC5jXG4rKysgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcbkBAIC0xNzc2LDcgKzE3NzYsNyBAQCBzdGF0aWMgaW50IGJ0Zl9kdW1wX2dldF9iaXRmaWVsZF92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsXG4gXG4gXHQvKiBNYXhpbXVtIHN1cHBvcnRlZCBiaXRmaWVsZCBzaXplIGlzIDY0IGJpdHMgKi9cbiBcdGlmICh0LVx1MDAzZXNpemUgXHUwMDNlIDgpIHtcbi1cdFx0cHJfd2FybihcInVuZXhwZWN0ZWQgYml0ZmllbGQgc2l6ZSAlZFxcblwiLCB0LVx1MDAzZXNpemUpO1xuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBiaXRmaWVsZCBzaXplICV1XFxuXCIsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTIyNTEsNyArMjI1MSw3IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfZ2V0X2VudW1fdmFsdWUoc3RydWN0IGJ0Zl9kdW1wICpkLFxuIFx0XHQqdmFsdWUgPSBpc19zaWduZWQgPyAqKF9fczggKilkYXRhIDogKihfX3U4ICopZGF0YTtcbiBcdFx0cmV0dXJuIDA7XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwidW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXFxuXCIsIHQtXHUwMDNlc2l6ZSwgaWQpO1xuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBzaXplICV1IGZvciBlbnVtLCBpZDpbJXVdXFxuXCIsIHQtXHUwMDNlc2l6ZSwgaWQpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGZfcmVsb2NhdGUuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcbmluZGV4IDUzZDFmMzU0MWJjZTY5Li5kZjVmYTRiZDg3ZDY5YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcbkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfbWFwX2Rpc3RpbGxlZF9iYXNlKHN0cnVjdCBidGZfcmVsb2NhdGUgKnIpXG4gXHRcdCAgICAgY21wX2J0Zl9uYW1lX3NpemUoXHUwMDI2YmFzZV9pbmZvLCBkaXN0X2luZm8pID09IDA7XG4gXHRcdCAgICAgZGlzdF9pbmZvKyspIHtcbiBcdFx0XHRpZiAoIWRpc3RfaW5mby1cdTAwM2VpZCB8fCBkaXN0X2luZm8tXHUwMDNlaWQgXHUwMDNlPSByLVx1MDAzZW5yX2Rpc3RfYmFzZV90eXBlcykge1xuLVx0XHRcdFx0cHJfd2FybihcImJhc2UgQlRGIGlkIFslZF0gbWFwcyB0byBpbnZhbGlkIGRpc3RpbGxlZCBiYXNlIEJURiBpZCBbJWRdXFxuXCIsXG4rXHRcdFx0XHRwcl93YXJuKFwiYmFzZSBCVEYgaWQgWyV1XSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFsldV1cXG5cIixcbiBcdFx0XHRcdFx0aWQsIGRpc3RfaW5mby1cdTAwM2VpZCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBkb25lO1xuQEAgLTM2OCw3ICszNjgsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZGlzdF90ID0gYnRmX3R5cGVfYnlfaWQoci1cdTAwM2VkaXN0X2Jhc2VfYnRmLCBpZCk7XG4gXHRcdG5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KHItXHUwMDNlZGlzdF9iYXNlX2J0ZiwgZGlzdF90LVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0cHJfd2FybihcImRpc3RpbGxlZCBiYXNlIEJURiB0eXBlICclcycgWyVkXSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXFxuXCIsXG4rXHRcdHByX3dhcm4oXCJkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAnJXMnIFsldV0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcblwiLFxuIFx0XHRcdG5hbWUsIGlkKTtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtMzk3LDExICszOTcsMTEgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfdmFsaWRhdGVfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcbiBcdFx0Y2FzZSBCVEZfS0lORF9GV0Q6XG4gXHRcdFx0aWYgKHQtXHUwMDNlbmFtZV9vZmYpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRwcl93YXJuKFwidHlwZSBbJWRdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cIixcbitcdFx0XHRwcl93YXJuKFwidHlwZSBbJXVdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cIixcbiBcdFx0XHRcdGksIGtpbmQpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdHByX3dhcm4oXCJ0eXBlIFslZF0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cXG5cIixcbitcdFx0XHRwcl93YXJuKFwidHlwZSBbJXVdIGluIGRpc3RpbGxlZCBiYXNlZCBCVEYgaGFzIHVuZXhwZWN0ZWQga2luZCBbJWRdXFxuXCIsXG4gXHRcdFx0XHRpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jXG5pbmRleCAyOTVkYmRhMjQ1ODA3MS4uZmUxMzZkMDI1OTY3OWYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2VsZi5jXG4rKysgYi90b29scy9saWIvYnBmL2VsZi5jXG5AQCAtMzU0LDcgKzM1NCw3IEBAIGxvbmcgZWxmX2ZpbmRfZnVuY19vZmZzZXQoRWxmICplbGYsIGNvbnN0IGNoYXIgKmJpbmFyeV9wYXRoLCBjb25zdCBjaGFyICpuYW1lKVxuIFxuIFx0aWYgKHJldCBcdTAwM2UgMCkge1xuIFx0XHRwcl9kZWJ1ZyhcImVsZjogc3ltYm9sIGFkZHJlc3MgbWF0Y2ggZm9yICclcycgaW4gJyVzJzogMHglbHhcXG5cIiwgbmFtZSwgYmluYXJ5X3BhdGgsXG4tXHRcdFx0IHJldCk7XG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKXJldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAocmV0ID09IDApIHtcbiBcdFx0XHRwcl93YXJuKFwiZWxmOiAnJXMnIGlzIDAgaW4gc3ltdGFiIGZvciAnJXMnOiAlc1xcblwiLCBuYW1lLCBiaW5hcnlfcGF0aCxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5pbmRleCBkNzk2OTVmMDFjODdmMy4uYzdmMmQyYWM3YmIzNWYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbkBAIC0zODQsNyArMzg0LDcgQEAgaW50IGJwZl9nZW5fX2ZpbmlzaChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbnJfcHJvZ3MsIGludCBucl9tYXBzKVxuIFx0aW50IGk7XG4gXG4gXHRpZiAobnJfcHJvZ3MgXHUwMDNjIGdlbi1cdTAwM2Vucl9wcm9ncyB8fCBucl9tYXBzICE9IGdlbi1cdTAwM2Vucl9tYXBzKSB7XG4tXHRcdHByX3dhcm4oXCJucl9wcm9ncyAlZC8lZCBucl9tYXBzICVkLyVkIG1pc21hdGNoXFxuXCIsXG4rXHRcdHByX3dhcm4oXCJucl9wcm9ncyAlZC8ldSBucl9tYXBzICVkLyV1IG1pc21hdGNoXFxuXCIsXG4gXHRcdFx0bnJfcHJvZ3MsIGdlbi1cdTAwM2Vucl9wcm9ncywgbnJfbWFwcywgZ2VuLVx1MDAzZW5yX21hcHMpO1xuIFx0XHRnZW4tXHUwMDNlZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRyZXR1cm4gZ2VuLVx1MDAzZWVycm9yO1xuQEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lkIGJwZl9nZW5fX2xvYWRfYnRmKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IHZvaWQgKmJ0Zl9yYXdfZGF0YSxcbiBcbiBcdGF0dHIuYnRmX3NpemUgPSB0Z3RfZW5kaWFuKGJ0Zl9yYXdfc2l6ZSk7XG4gXHRidGZfbG9hZF9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCJnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cIixcbitcdHByX2RlYnVnKFwiZ2VuOiBsb2FkX2J0Zjogb2ZmICVkIHNpemUgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCIsXG4gXHRcdCBidGZfZGF0YSwgYnRmX3Jhd19zaXplLCBidGZfbG9hZF9hdHRyLCBhdHRyX3NpemUpO1xuIFxuIFx0LyogcG9wdWxhdGUgdW5pb24gYnBmX2F0dHIgd2l0aCB1c2VyIHByb3ZpZGVkIGxvZyBkZXRhaWxzICovXG5AQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX2NyZWF0ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0YXR0ci5idGZfdmFsdWVfdHlwZV9pZCA9IHRndF9lbmRpYW4obWFwX2F0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpO1xuIFxuIFx0bWFwX2NyZWF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCJnZW46IG1hcF9jcmVhdGU6ICVzIGlkeCAlZCB0eXBlICVkIHZhbHVlX3R5cGVfaWQgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogbWFwX2NyZWF0ZTogJXMgaWR4ICVkIHR5cGUgJXUgdmFsdWVfdHlwZV9pZCAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cIixcbiBcdFx0IG1hcF9uYW1lLCBtYXBfaWR4LCBtYXBfdHlwZSwgbWFwX2F0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsXG4gXHRcdCBtYXBfY3JlYXRlX2F0dHIsIGF0dHJfc2l6ZSk7XG4gXG5AQCAtMTA4Miw3ICsxMDgyLDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiBcdGxpY2Vuc2Vfb2ZmID0gYWRkX2RhdGEoZ2VuLCBsaWNlbnNlLCBzdHJsZW4obGljZW5zZSkgKyAxKTtcbiBcdC8qIGFkZCBpbnNucyB0byBibG9iIG9mIGJ5dGVzICovXG4gXHRpbnNuc19vZmYgPSBhZGRfZGF0YShnZW4sIGluc25zLCBpbnNuX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pKTtcbi1cdHByX2RlYnVnKFwiZ2VuOiBwcm9nX2xvYWQ6IHByb2dfaWR4ICVkIHR5cGUgJWQgaW5zbiBvZmYgJWQgaW5zbnNfY250ICV6ZCBsaWNlbnNlIG9mZiAlZFxcblwiLFxuK1x0cHJfZGVidWcoXCJnZW46IHByb2dfbG9hZDogcHJvZ19pZHggJWQgdHlwZSAldSBpbnNuIG9mZiAlZCBpbnNuc19jbnQgJXp1IGxpY2Vuc2Ugb2ZmICVkXFxuXCIsXG4gXHRcdCBwcm9nX2lkeCwgcHJvZ190eXBlLCBpbnNuc19vZmYsIGluc25fY250LCBsaWNlbnNlX29mZik7XG4gXG4gXHQvKiBjb252ZXJ0IGJsb2IgaW5zbnMgdG8gdGFyZ2V0IGVuZGlhbm5lc3MgKi9cbkBAIC0xMTA1LDIxICsxMTA1LDIxIEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sXG4gXHRhdHRyLmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHRndF9lbmRpYW4obG9hZF9hdHRyLVx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZSk7XG4gXHRhdHRyLmZ1bmNfaW5mb19jbnQgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fY250KTtcbiBcdGZ1bmNfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLVx1MDAzZWZ1bmNfaW5mbywgZnVuY19pbmZvX3RvdF9zeik7XG4tXHRwcl9kZWJ1ZyhcImdlbjogcHJvZ19sb2FkOiBmdW5jX2luZm86IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJWRcXG5cIixcbitcdHByX2RlYnVnKFwiZ2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAldSByZWMgc2l6ZSAldVxcblwiLFxuIFx0XHQgZnVuY19pbmZvLCBsb2FkX2F0dHItXHUwMDNlZnVuY19pbmZvX2NudCxcbiBcdFx0IGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemUpO1xuIFxuIFx0YXR0ci5saW5lX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xuIFx0YXR0ci5saW5lX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX2NudCk7XG4gXHRsaW5lX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCJnZW46IHByb2dfbG9hZDogbGluZV9pbmZvOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICVkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogcHJvZ19sb2FkOiBsaW5lX2luZm86IG9mZiAlZCBjbnQgJXUgcmVjIHNpemUgJXVcXG5cIixcbiBcdFx0IGxpbmVfaW5mbywgbG9hZF9hdHRyLVx1MDAzZWxpbmVfaW5mb19jbnQsXG4gXHRcdCBsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX3JlY19zaXplKTtcbiBcbiBcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gdGd0X2VuZGlhbigoX191MzIpc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7XG4gXHRhdHRyLmNvcmVfcmVsb19jbnQgPSB0Z3RfZW5kaWFuKGdlbi1cdTAwM2Vjb3JlX3JlbG9fY250KTtcbiBcdGNvcmVfcmVsb3MgPSBhZGRfZGF0YShnZW4sIGdlbi1cdTAwM2Vjb3JlX3JlbG9zLCBjb3JlX3JlbG9fdG90X3N6KTtcbi1cdHByX2RlYnVnKFwiZ2VuOiBwcm9nX2xvYWQ6IGNvcmVfcmVsb3M6IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJXpkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxcblwiLFxuIFx0XHQgY29yZV9yZWxvcywgZ2VuLVx1MDAzZWNvcmVfcmVsb19jbnQsXG4gXHRcdCBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKTtcbiBcbkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqcHZhbHVlLFxuIFx0fVxuIFxuIFx0bWFwX3VwZGF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCJnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogbWFwX3VwZGF0ZV9lbGVtOiBpZHggJWQsIHZhbHVlOiBvZmYgJWQgc2l6ZSAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cIixcbiBcdFx0IG1hcF9pZHgsIHZhbHVlLCB2YWx1ZV9zaXplLCBtYXBfdXBkYXRlX2F0dHIsIGF0dHJfc2l6ZSk7XG4gXHRtb3ZlX2Jsb2IyYmxvYihnZW4sIGF0dHJfZmllbGQobWFwX3VwZGF0ZV9hdHRyLCBtYXBfZmQpLCA0LFxuIFx0XHQgICAgICAgYmxvYl9mZF9hcnJheV9vZmYoZ2VuLCBtYXBfaWR4KSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDEzNjg3NTJhYTEzYzM5Li43MTYyMTQ2MjgwYTgwZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC0xNDg2LDcgKzE0ODYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3RydWN0X29wc19tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNlY19uYW1lLFxuIFx0XHQgICAgICAgdHlwZS1cdTAwM2VzaXplKTtcbiBcdFx0c3Rfb3BzLVx1MDAzZXR5cGVfaWQgPSB0eXBlX2lkO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JXUpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwiLFxuK1x0XHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JWQpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwiLFxuIFx0XHRcdCB0bmFtZSwgdHlwZV9pZCwgdmFyX25hbWUsIHZzaS1cdTAwM2VvZmZzZXQpO1xuIFx0fVxuIFxuQEAgLTI2MjYsNyArMjYyNiw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBrZXkgdHlwZSBbJWRdIG5vdCBmb3VuZC5cXG5cIixcbitcdFx0XHRcdHByX3dhcm4oXCJtYXAgJyVzJzoga2V5IHR5cGUgWyV1XSBub3QgZm91bmQuXFxuXCIsXG4gXHRcdFx0XHRcdG1hcF9uYW1lLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuQEAgLTI2NjYsNyArMjY2Niw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiB2YWx1ZSB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwiLFxuK1x0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiB2YWx1ZSB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwiLFxuIFx0XHRcdFx0XHRtYXBfbmFtZSwgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0yNzIwLDcgKzI3MjAsNyBAQCBpbnQgcGFyc2VfYnRmX21hcF9kZWYoY29uc3QgY2hhciAqbWFwX25hbWUsIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHRtYXBfZGVmLVx1MDAzZXZhbHVlX3NpemUgPSA0O1xuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiAlcyB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwiLFxuK1x0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiAlcyB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwiLFxuIFx0XHRcdFx0XHRtYXBfbmFtZSwgZGVzYywgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0zNDc2LDcgKzM0NzYsNyBAQCBzdGF0aWMgaW50IGJ0Zl9maXh1cF9kYXRhc2VjKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBcdFx0dmFyX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdF92YXItXHUwMDNlbmFtZV9vZmYpO1xuIFx0XHRpZiAoIXZhcl9uYW1lKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzZWMgJyVzJzogZmFpbGVkIHRvIGZpbmQgbmFtZSBvZiBEQVRBU0VDJ3MgbWVtYmVyICMlZFxcblwiLFxuK1x0XHRcdHByX2RlYnVnKFwic2VjICclcyc6IGZhaWxlZCB0byBmaW5kIG5hbWUgb2YgREFUQVNFQydzIG1lbWJlciAjJXVcXG5cIixcbiBcdFx0XHRcdCBzZWNfbmFtZSwgaSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRcdH1cbkBAIC0zOTcxLDcgKzM5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGlmICghZGF0YSlcbiBcdFx0XHRyZXR1cm4gLUxJQkJQRl9FUlJOT19fRk9STUFUO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcImVsZjogc2VjdGlvbiglZCkgJXMsIHNpemUgJWxkLCBsaW5rICVkLCBmbGFncyAlbHgsIHR5cGU9JWRcXG5cIixcbitcdFx0cHJfZGVidWcoXCJlbGY6IHNlY3Rpb24oJWQpICVzLCBzaXplICVsdSwgbGluayAlZCwgZmxhZ3MgJWx4LCB0eXBlPSVkXFxuXCIsXG4gXHRcdFx0IGlkeCwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGF0YS1cdTAwM2VkX3NpemUsXG4gXHRcdFx0IChpbnQpc2gtXHUwMDNlc2hfbGluaywgKHVuc2lnbmVkIGxvbmcpc2gtXHUwMDNlc2hfZmxhZ3MsXG4gXHRcdFx0IChpbnQpc2gtXHUwMDNlc2hfdHlwZSk7XG5AQCAtNDQ5NCw3ICs0NDk0LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcbiBcdFx0XHRleHQtXHUwMDNla2NmZy5kYXRhX29mZiA9IHJvdW5kdXAob2ZmLCBleHQtXHUwMDNla2NmZy5hbGlnbik7XG4gXHRcdFx0b2ZmID0gZXh0LVx1MDAzZWtjZmcuZGF0YV9vZmYgKyBleHQtXHUwMDNla2NmZy5zejtcbi1cdFx0XHRwcl9kZWJ1ZyhcImV4dGVybiAoa2NmZykgIyVkOiBzeW1ib2wgJWQsIG9mZiAldSwgbmFtZSAlc1xcblwiLFxuK1x0XHRcdHByX2RlYnVnKFwiZXh0ZXJuIChrY2ZnKSAjJWQ6IHN5bWJvbCAlZCwgb2ZmICVkLCBuYW1lICVzXFxuXCIsXG4gXHRcdFx0XHQgaSwgZXh0LVx1MDAzZXN5bV9pZHgsIGV4dC1cdTAwM2VrY2ZnLmRhdGFfb2ZmLCBleHQtXHUwMDNlbmFtZSk7XG4gXHRcdH1cbiBcdFx0c2VjLVx1MDAzZXNpemUgPSBvZmY7XG5AQCAtNDYyNiw3ICs0NjI2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG4gXHRpZiAoIWlzX2NhbGxfaW5zbihpbnNuKSBcdTAwMjZcdTAwMjYgIWlzX2xkaW1tNjRfaW5zbihpbnNuKSkge1xuLVx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBpbnZhbGlkIHJlbG8gYWdhaW5zdCAnJXMnIGZvciBpbnNuc1slZF0uY29kZSAweCV4XFxuXCIsXG4rXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IGludmFsaWQgcmVsbyBhZ2FpbnN0ICclcycgZm9yIGluc25zWyV1XS5jb2RlIDB4JXhcXG5cIixcbiBcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIHN5bV9uYW1lLCBpbnNuX2lkeCwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX1JFTE9DO1xuIFx0fVxuQEAgLTQ3NDksNyArNDc0OSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dyYW1fX3JlY29yZF9yZWxvYyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHRcdFx0ICAgIG1hcC1cdTAwM2VzZWNfaWR4ICE9IHN5bS1cdTAwM2VzdF9zaG5keCB8fFxuIFx0XHRcdCAgICBtYXAtXHUwMDNlc2VjX29mZnNldCAhPSBzeW0tXHUwMDNlc3RfdmFsdWUpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRwcl9kZWJ1ZyhcInByb2cgJyVzJzogZm91bmQgbWFwICV6ZCAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gIyV1XFxuXCIsXG4rXHRcdFx0cHJfZGVidWcoXCJwcm9nICclcyc6IGZvdW5kIG1hcCAlenUgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICMldVxcblwiLFxuIFx0XHRcdFx0IHByb2ctXHUwMDNlbmFtZSwgbWFwX2lkeCwgbWFwLVx1MDAzZW5hbWUsIG1hcC1cdTAwM2VzZWNfaWR4LFxuIFx0XHRcdFx0IG1hcC1cdTAwM2VzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtNDc3Niw3ICs0Nzc2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0bWFwID0gXHUwMDI2b2JqLVx1MDAzZW1hcHNbbWFwX2lkeF07XG4gXHRcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgIT0gdHlwZSB8fCBtYXAtXHUwMDNlc2VjX2lkeCAhPSBzeW0tXHUwMDNlc3Rfc2huZHgpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHByX2RlYnVnKFwicHJvZyAnJXMnOiBmb3VuZCBkYXRhIG1hcCAlemQgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XFxuXCIsXG4rXHRcdHByX2RlYnVnKFwicHJvZyAnJXMnOiBmb3VuZCBkYXRhIG1hcCAlenUgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XFxuXCIsXG4gXHRcdFx0IHByb2ctXHUwMDNlbmFtZSwgbWFwX2lkeCwgbWFwLVx1MDAzZW5hbWUsIG1hcC1cdTAwM2VzZWNfaWR4LFxuIFx0XHRcdCBtYXAtXHUwMDNlc2VjX29mZnNldCwgaW5zbl9pZHgpO1xuIFx0XHRicmVhaztcbkBAIC00OTg1LDcgKzQ5ODUsNyBAQCBzdGF0aWMgaW50IGJwZl9nZXRfbWFwX2luZm9fZnJvbV9mZGluZm8oaW50IGZkLCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvKVxuIFx0XHRcdGluZm8tXHUwMDNldmFsdWVfc2l6ZSA9IHZhbDtcbiBcdFx0ZWxzZSBpZiAoc3NjYW5mKGJ1ZmYsIFwibWF4X2VudHJpZXM6XFx0JXVcIiwgXHUwMDI2dmFsKSA9PSAxKVxuIFx0XHRcdGluZm8tXHUwMDNlbWF4X2VudHJpZXMgPSB2YWw7XG4tXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcIm1hcF9mbGFnczpcXHQlaVwiLCBcdTAwMjZ2YWwpID09IDEpXG4rXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcIm1hcF9mbGFnczpcXHQleFwiLCBcdTAwMjZ2YWwpID09IDEpXG4gXHRcdFx0aW5mby1cdTAwM2VtYXBfZmxhZ3MgPSB2YWw7XG4gXHR9XG4gXG5AQCAtNTUyMSwxMSArNTUyMSwxMSBAQCBzdGF0aWMgaW50IGluaXRfbWFwX2luX21hcF9zbG90cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFslZF0gdG8gbWFwICclcycgZmQ9JWQ6ICVzXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gbWFwICclcycgZmQ9JWQ6ICVzXFxuXCIsXG4gXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgaSwgdGFyZ19tYXAtXHUwMDNlbmFtZSwgZmQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwibWFwICclcyc6IHNsb3QgWyVkXSBzZXQgdG8gbWFwICclcycgZmQ9JWRcXG5cIixcbitcdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2xvdCBbJXVdIHNldCB0byBtYXAgJyVzJyBmZD0lZFxcblwiLFxuIFx0XHRcdCBtYXAtXHUwMDNlbmFtZSwgaSwgdGFyZ19tYXAtXHUwMDNlbmFtZSwgZmQpO1xuIFx0fVxuIFxuQEAgLTU1NTQsMTEgKzU1NTQsMTEgQEAgc3RhdGljIGludCBpbml0X3Byb2dfYXJyYXlfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXHUwMDNlZmQsIFx1MDAyNmksIFx1MDAyNmZkLCAwKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwibWFwICclcyc6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyVkXSB0byBwcm9nICclcycgZmQ9JWQ6ICVzXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gcHJvZyAnJXMnIGZkPSVkOiAlc1xcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIGksIHRhcmdfcHJvZy1cdTAwM2VuYW1lLCBmZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2xvdCBbJWRdIHNldCB0byBwcm9nICclcycgZmQ9JWRcXG5cIixcbitcdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2xvdCBbJXVdIHNldCB0byBwcm9nICclcycgZmQ9JWRcXG5cIixcbiBcdFx0XHQgbWFwLVx1MDAzZW5hbWUsIGksIHRhcmdfcHJvZy1cdTAwM2VuYW1lLCBmZCk7XG4gXHR9XG4gXG5AQCAtNTc4OCw3ICs1Nzg4LDcgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcbiBcdFx0aWYgKHN0cm5jbXAobG9jYWxfbmFtZSwgdGFyZ19uYW1lLCBsb2NhbF9lc3NlbnRfbGVuKSAhPSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcIkNPLVJFIHJlbG9jYXRpbmcgWyVkXSAlcyAlczogZm91bmQgdGFyZ2V0IGNhbmRpZGF0ZSBbJWRdICVzICVzIGluIFslc11cXG5cIixcbitcdFx0cHJfZGVidWcoXCJDTy1SRSByZWxvY2F0aW5nIFsldV0gJXMgJXM6IGZvdW5kIHRhcmdldCBjYW5kaWRhdGUgWyVkXSAlcyAlcyBpbiBbJXNdXFxuXCIsXG4gXHRcdFx0IGxvY2FsX2NhbmQtXHUwMDNlaWQsIGJ0Zl9raW5kX3N0cihsb2NhbF90KSxcbiBcdFx0XHQgbG9jYWxfbmFtZSwgaSwgYnRmX2tpbmRfc3RyKHQpLCB0YXJnX25hbWUsXG4gXHRcdFx0IHRhcmdfYnRmX25hbWUpO1xuQEAgLTU4NDgsNyArNTg0OCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4gXHRcdFx0XHRjb250aW51ZTsgLyogZXhwZWN0ZWQgcmFjZTogQlRGIHdhcyB1bmxvYWRlZCAqL1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBGRDogJXNcXG5cIiwgaWQsIGVycnN0cihlcnIpKTtcbitcdFx0XHRwcl93YXJuKFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBGRDogJXNcXG5cIiwgaWQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXG5AQCAtNTg2MSw3ICs1ODYxLDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGVyciA9IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJWQgaW5mbzogJXNcXG5cIiwgaWQsIGVycnN0cihlcnIpKTtcbitcdFx0XHRwcl93YXJuKFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBpbmZvOiAlc1xcblwiLCBpZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5AQCAtNTg3NCw3ICs1ODc0LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJ3MgQlRGIG9iamVjdCAjJWQ6ICVzXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJ3MgQlRGIG9iamVjdCAjJXU6ICVzXFxuXCIsXG4gXHRcdFx0XHRuYW1lLCBpZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNjA2Nyw3ICs2MDY3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9yZXNvbHZlX3JlbG8oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIFx0ICAgICFoYXNobWFwX19maW5kKGNhbmRfY2FjaGUsIGxvY2FsX2lkLCBcdTAwMjZjYW5kcykpIHtcbiBcdFx0Y2FuZHMgPSBicGZfY29yZV9maW5kX2NhbmRzKHByb2ctXHUwMDNlb2JqLCBsb2NhbF9idGYsIGxvY2FsX2lkKTtcbiBcdFx0aWYgKElTX0VSUihjYW5kcykpIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJWRdICVzICVzOiAlbGRcXG5cIixcbitcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJXVdICVzICVzOiAlbGRcXG5cIixcbiBcdFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGxvY2FsX2lkLCBidGZfa2luZF9zdHIobG9jYWxfdHlwZSksXG4gXHRcdFx0XHRsb2NhbF9uYW1lLCBQVFJfRVJSKGNhbmRzKSk7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIoY2FuZHMpO1xuQEAgLTYxMjcsNyArNjEyNyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRwcl9kZWJ1ZyhcInNlYyAnJXMnOiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xcblwiLCBzZWNfbmFtZSwgc2VjLVx1MDAzZW51bV9pbmZvKTtcbitcdFx0cHJfZGVidWcoXCJzZWMgJyVzJzogZm91bmQgJXUgQ08tUkUgcmVsb2NhdGlvbnNcXG5cIiwgc2VjX25hbWUsIHNlYy1cdTAwM2VudW1faW5mbyk7XG4gXG4gXHRcdGZvcl9lYWNoX2J0Zl9leHRfcmVjKHNlZywgc2VjLCBpLCByZWMpIHtcbiBcdFx0XHRpZiAocmVjLVx1MDAzZWluc25fb2ZmICUgQlBGX0lOU05fU1opXG5AQCAtNjE4MSw3ICs2MTgxLDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxuIFxuIFx0XHRcdGVyciA9IGJwZl9jb3JlX3BhdGNoX2luc24ocHJvZy1cdTAwM2VuYW1lLCBpbnNuLCBpbnNuX2lkeCwgcmVjLCBpLCBcdTAwMjZ0YXJnX3Jlcyk7XG4gXHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IGZhaWxlZCB0byBwYXRjaCBpbnNuICMldTogJXNcXG5cIixcbitcdFx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJWQ6ICVzXFxuXCIsXG4gXHRcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgaSwgaW5zbl9pZHgsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y1xuIFx0XHRnb3RvIGVycl9jbG9zZTtcbiBcdH1cbiBcdGlmIChzeW1fb2ZmICsganRfc2l6ZSBcdTAwM2Ugb2JqLVx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeikge1xuLVx0XHRwcl93YXJuKFwibWFwICcuanVtcHRhYmxlcyc6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6ZCwgdHJ5aW5nIHRvIGFjY2VzcyAlZFxcblwiLFxuK1x0XHRwcl93YXJuKFwibWFwICcuanVtcHRhYmxlcyc6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6dSwgdHJ5aW5nIHRvIGFjY2VzcyAldVxcblwiLFxuIFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3osIHN5bV9vZmYgKyBqdF9zaXplKTtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBlcnJfY2xvc2U7XG5AQCAtNjM4MSw3ICs2MzgxLDcgQEAgc3RhdGljIGludCBjcmVhdGVfanRfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgc3RydWNcbiBcdFx0ICovXG4gXHRcdGlmIChpbnNuX29mZiBcdTAwM2UgVUlOVDMyX01BWCkge1xuIFx0XHRcdHByX3dhcm4oXCJtYXAgJy5qdW1wdGFibGVzJzogaW52YWxpZCBqdW1wIHRhYmxlIHZhbHVlIDB4JWxseCBhdCBvZmZzZXQgJXVcXG5cIixcbi1cdFx0XHRcdChsb25nIGxvbmcpanRbaV0sIHN5bV9vZmYgKyBpICoganRfZW50cnlfc2l6ZSk7XG4rXHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICsgaSAqIGp0X2VudHJ5X3NpemUpO1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBlcnJfY2xvc2U7XG4gXHRcdH1cbkBAIC02NTE3LDcgKzY1MTcsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiBcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiBiYWQgcmVsbyB0eXBlICVkXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IGJhZCByZWxvIHR5cGUgJXVcXG5cIixcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgaSwgcmVsby1cdTAwM2V0eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTY3OTcsNyArNjc5Nyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXG4gXHRcdFx0ICovXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChyZWxvIFx1MDAyNlx1MDAyNiByZWxvLVx1MDAzZXR5cGUgIT0gUkVMT19DQUxMIFx1MDAyNlx1MDAyNiByZWxvLVx1MDAzZXR5cGUgIT0gUkVMT19TVUJQUk9HX0FERFIpIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiB1bmV4cGVjdGVkIHJlbG8gZm9yIGluc24gIyV6dSwgdHlwZSAlZFxcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICV1XFxuXCIsXG4gXHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGluc25faWR4LCByZWxvLVx1MDAzZXR5cGUpO1xuIFx0XHRcdHJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQztcbiBcdFx0fVxuQEAgLTc1ODcsNyArNzU4Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9tYXBfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0fVxuIFx0XHRuYW1lID0gZWxmX3N5bV9zdHIob2JqLCBzeW0tXHUwMDNlc3RfbmFtZSkgPzogXCJcdTAwM2M/XHUwMDNlXCI7XG4gXG4tXHRcdHByX2RlYnVnKFwiLm1hcHMgcmVsbyAjJWQ6IGZvciAlemQgdmFsdWUgJXpkIHJlbC1cdTAwM2VyX29mZnNldCAlenUgbmFtZSAlZCAoJyVzJylcXG5cIixcbitcdFx0cHJfZGVidWcoXCIubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlenUgcmVsLVx1MDAzZXJfb2Zmc2V0ICV6dSBuYW1lICV1ICgnJXMnKVxcblwiLFxuIFx0XHRcdCBpLCAoc3NpemVfdCkocmVsLVx1MDAzZXJfaW5mbyBcdTAwM2VcdTAwM2UgMzIpLCAoc2l6ZV90KXN5bS1cdTAwM2VzdF92YWx1ZSxcbiBcdFx0XHQgKHNpemVfdClyZWwtXHUwMDNlcl9vZmZzZXQsIHN5bS1cdTAwM2VzdF9uYW1lLCBuYW1lKTtcbiBcbkBAIC03Njc4LDcgKzc2NzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdH1cbiBcdFx0bWFwLVx1MDAzZWluaXRfc2xvdHNbbW9mZl0gPSBpc19tYXBfaW5fbWFwID8gKHZvaWQgKil0YXJnX21hcCA6ICh2b2lkICopdGFyZ19wcm9nO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcIi5tYXBzIHJlbG8gIyVkOiBtYXAgJyVzJyBzbG90IFslZF0gcG9pbnRzIHRvICVzICclcydcXG5cIixcbitcdFx0cHJfZGVidWcoXCIubWFwcyByZWxvICMlZDogbWFwICclcycgc2xvdCBbJXVdIHBvaW50cyB0byAlcyAnJXMnXFxuXCIsXG4gXHRcdFx0IGksIG1hcC1cdTAwM2VuYW1lLCBtb2ZmLCB0eXBlLCBuYW1lKTtcbiBcdH1cbiBcbkBAIC04NzM4LDcgKzg3MzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3Jlc29sdmVfa3N5bV92YXJfYnRmX2lkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdGxvY2FsX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KG9iai1cdTAwM2VidGYsIGxvY2FsX3R5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIFx0XHR0YXJnX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdGFyZ190eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbiBcbi1cdFx0cHJfd2FybihcImV4dGVybiAodmFyIGtzeW0pICclcyc6IGluY29tcGF0aWJsZSB0eXBlcywgZXhwZWN0ZWQgWyVkXSAlcyAlcywgYnV0IGtlcm5lbCBoYXMgWyVkXSAlcyAlc1xcblwiLFxuK1x0XHRwcl93YXJuKFwiZXh0ZXJuICh2YXIga3N5bSkgJyVzJzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJXVdICVzICVzLCBidXQga2VybmVsIGhhcyBbJXVdICVzICVzXFxuXCIsXG4gXHRcdFx0ZXh0LVx1MDAzZW5hbWUsIGxvY2FsX3R5cGVfaWQsXG4gXHRcdFx0YnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLCBsb2NhbF9uYW1lLCB0YXJnX3R5cGVfaWQsXG4gXHRcdFx0YnRmX2tpbmRfc3RyKHRhcmdfdHlwZSksIHRhcmdfbmFtZSk7XG5AQCAtODkxNSw3ICs4OTE1LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZXNvbHZlX2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRwcl9kZWJ1ZyhcImV4dGVybiAoa2NmZykgJyVzJzogc2V0IHRvIDB4JWxseFxcblwiLFxuLVx0XHRcdFx0IGV4dC1cdTAwM2VuYW1lLCAobG9uZyBsb25nKXZhbHVlKTtcbitcdFx0XHRcdCBleHQtXHUwMDNlbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cHJfd2FybihcImV4dGVybiAnJXMnOiB1bnJlY29nbml6ZWQgZXh0ZXJuIGtpbmRcXG5cIiwgZXh0LVx1MDAzZW5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEwNDk0LDcgKzEwNDk0LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19jb2xsZWN0X3N0X29wc19yZWxvcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIFx0XHRtb2ZmID0gcmVsLVx1MDAzZXJfb2Zmc2V0IC0gbWFwLVx1MDAzZXNlY19vZmZzZXQ7XG4gXHRcdHNoZHJfaWR4ID0gc3ltLVx1MDAzZXN0X3NobmR4O1xuIFx0XHRzdF9vcHMgPSBtYXAtXHUwMDNlc3Rfb3BzO1xuLVx0XHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLVx1MDAzZXJfb2Zmc2V0ICV6dSBtYXAtXHUwMDNlc2VjX29mZnNldCAlenUgbmFtZSAlZCAoXFwnJXNcXCcpXFxuXCIsXG4rXHRcdHByX2RlYnVnKFwic3RydWN0X29wcyByZWxvYyAlczogZm9yICVsbGQgdmFsdWUgJWxsZCBzaGRyX2lkeCAldSByZWwtXHUwMDNlcl9vZmZzZXQgJXp1IG1hcC1cdTAwM2VzZWNfb2Zmc2V0ICV6dSBuYW1lICV1IChcXCclc1xcJylcXG5cIixcbiBcdFx0XHQgbWFwLVx1MDAzZW5hbWUsXG4gXHRcdFx0IChsb25nIGxvbmcpKHJlbC1cdTAwM2VyX2luZm8gXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0XHQgKGxvbmcgbG9uZylzeW0tXHUwMDNlc3RfdmFsdWUsXG5AQCAtMTA2NDMsNyArMTA2NDMsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9maW5kX3Byb2dfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIF9fdTMyIGF0dGFjaF9wcm9nX2ZkLCBpbnQgdFxuIFx0bWVtc2V0KFx1MDAyNmluZm8sIDAsIGluZm9fbGVuKTtcbiBcdGVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGF0dGFjaF9wcm9nX2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdHByX3dhcm4oXCJmYWlsZWQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgZm9yIEZEICVkOiAlc1xcblwiLFxuK1x0XHRwcl93YXJuKFwiZmFpbGVkIGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkIGZvciBGRCAldTogJXNcXG5cIixcbiBcdFx0XHRhdHRhY2hfcHJvZ19mZCwgZXJyc3RyKGVycikpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTEwNjU2LDcgKzEwNjU2LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChjb25zdCBjaGFyICpuYW1lLCBfX3UzMiBhdHRhY2hfcHJvZ19mZCwgaW50IHRcbiBcdGJ0ZiA9IGJ0Zl9sb2FkX2Zyb21fa2VybmVsKGluZm8uYnRmX2lkLCBOVUxMLCB0b2tlbl9mZCk7XG4gXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gZ2V0IEJURiAlZCBvZiB0aGUgcHJvZ3JhbTogJXNcXG5cIiwgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTtcbitcdFx0cHJfd2FybihcIkZhaWxlZCB0byBnZXQgQlRGICV1IG9mIHRoZSBwcm9ncmFtOiAlc1xcblwiLCBpbmZvLmJ0Zl9pZCwgZXJyc3RyKGVycikpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGVyciA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBuYW1lLCBCVEZfS0lORF9GVU5DKTtcbkBAIC0xMDczOCw3ICsxMDczOCw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKmF0dGFjXG4gXHRcdH1cbiBcdFx0ZXJyID0gbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoYXR0YWNoX25hbWUsIGF0dGFjaF9wcm9nX2ZkLCBwcm9nLVx1MDAzZW9iai1cdTAwM2V0b2tlbl9mZCk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJWQpIEJURiBJRCBmb3IgJyVzJzogJXNcXG5cIixcbitcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJyVzJzogJXNcXG5cIixcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgYXR0YWNoX3Byb2dfZmQsIGF0dGFjaF9uYW1lLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9tYXBfb3AoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IGtleV9zeixcbiBcdFx0fVxuIFxuIFx0XHRpZiAodmFsdWVfc3ogIT0gbnVtX2NwdSAqIGVsZW1fc3opIHtcbi1cdFx0XHRwcl93YXJuKFwibWFwICclcyc6IHVuZXhwZWN0ZWQgdmFsdWUgc2l6ZSAlenUgcHJvdmlkZWQgZm9yIHBlci1DUFUgbWFwLCBleHBlY3RlZCAlZCAqICV6dSA9ICV6ZFxcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJtYXAgJyVzJzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXp1XFxuXCIsXG4gXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgdmFsdWVfc3osIG51bV9jcHUsIGVsZW1fc3osIG51bV9jcHUgKiBlbGVtX3N6KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTExNzc0LDcgKzExNzc0LDcgQEAgc3RhdGljIHZvaWQgZ2VuX3Byb2JlX2xlZ2FjeV9ldmVudF9uYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeixcbiBcdHN0YXRpYyBpbnQgaW5kZXggPSAwO1xuIFx0aW50IGk7XG4gXG4tXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXCJsaWJicGZfJXVfJWRfJXNfMHglenhcIiwgZ2V0cGlkKCksXG4rXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXCJsaWJicGZfJWRfJWRfJXNfMHglenhcIiwgZ2V0cGlkKCksXG4gXHRcdCBfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZpbmRleCwgMSksIG5hbWUsIG9mZnNldCk7XG4gXG4gXHQvKiBzYW5pdGl6ZSBuYW1lIGluIHRoZSBwcm9iZSBuYW1lICovXG5AQCAtMTI5MjQsOCArMTI5MjQsOCBAQCBzdGF0aWMgbG9uZyBlbGZfZmluZF9mdW5jX29mZnNldF9mcm9tX2FyY2hpdmUoY29uc3QgY2hhciAqYXJjaGl2ZV9wYXRoLCBjb25zdCBjaFxuIFx0cmV0ID0gZWxmX2ZpbmRfZnVuY19vZmZzZXQoZWxmLCBmaWxlX25hbWUsIGZ1bmNfbmFtZSk7XG4gXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4gXHRcdHByX2RlYnVnKFwiZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJXMgb2YgJXMgaW4gJXM6IDB4JXggKyAweCVseCA9IDB4JWx4XFxuXCIsXG4tXHRcdFx0IGZ1bmNfbmFtZSwgZmlsZV9uYW1lLCBhcmNoaXZlX3BhdGgsIGVudHJ5LmRhdGFfb2Zmc2V0LCByZXQsXG4tXHRcdFx0IHJldCArIGVudHJ5LmRhdGFfb2Zmc2V0KTtcbitcdFx0XHQgZnVuY19uYW1lLCBmaWxlX25hbWUsIGFyY2hpdmVfcGF0aCwgZW50cnkuZGF0YV9vZmZzZXQsICh1bnNpZ25lZCBsb25nKXJldCxcbitcdFx0XHQgKHVuc2lnbmVkIGxvbmcpKHJldCArIGVudHJ5LmRhdGFfb2Zmc2V0KSk7XG4gXHRcdHJldCArPSBlbnRyeS5kYXRhX29mZnNldDtcbiBcdH1cbiBcdGVsZl9lbmQoZWxmKTtcbkBAIC0xNDU3MCw3ICsxNDU3MCw3IEBAIHBlcmZfYnVmZmVyX19wcm9jZXNzX3JlY29yZChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmUsIHZvaWQgKmN0eClcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwidW5rbm93biBwZXJmIHNhbXBsZSB0eXBlICVkXFxuXCIsIGUtXHUwMDNldHlwZSk7XG4rXHRcdHByX3dhcm4oXCJ1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcXG5cIiwgZS1cdTAwM2V0eXBlKTtcbiBcdFx0cmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0VSUk9SO1xuIFx0fVxuIFx0cmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0NPTlQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9ubGF0dHIuYyBiL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcbmluZGV4IDA2NjYzZjllYTU4MWY5Li4wMDdmZTE3ZDE3YjQyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcbkBAIC0xMjMsNyArMTIzLDcgQEAgaW50IGxpYmJwZl9ubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgaW50IG1heHR5cGUsIHN0cnVjdCBubGF0dHIgKmhlYWQsXG4gXG4gXHRcdGlmICh0Ylt0eXBlXSkge1xuIFx0XHRcdHByX3dhcm4oXCJBdHRyaWJ1dGUgb2YgdHlwZSAlI3ggZm91bmQgbXVsdGlwbGUgdGltZXMgaW4gbWVzc2FnZSwgXCJcbi1cdFx0XHRcdFwicHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXFxuXCIsIHR5cGUpO1xuK1x0XHRcdFx0XCJwcmV2aW91cyBhdHRyaWJ1dGUgaXMgYmVpbmcgaWdub3JlZC5cXG5cIiwgKHVuc2lnbmVkKXR5cGUpO1xuIFx0XHR9XG4gXG4gXHRcdHRiW3R5cGVdID0gbmxhO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmMgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5pbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG4rKysgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5AQCAtMjE2LDcgKzIxNiw3IEBAIGludCBfX2JwZl9jb3JlX3R5cGVzX2FyZV9jb21wYXQoY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCxcbiBcdFx0Z290byByZWN1cjtcbiBcdH1cbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxcblwiLFxuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cXG5cIixcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdHlwZSksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMzg0LDcgKzM4NCw3IEBAIGludCBicGZfY29yZV9wYXJzZV9zcGVjKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdFx0cmV0dXJuIHN6O1xuIFx0XHRcdHNwZWMtXHUwMDNlYml0X29mZnNldCArPSBhY2Nlc3NfaWR4ICogc3ogKiA4O1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJWRdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJXVdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xcblwiLFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvLVx1MDAzZXR5cGVfaWQsIHNwZWNfc3RyLCBpLCBpZCwgYnRmX2tpbmRfc3RyKHQpKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTcyNSw3ICs3MjUsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHQqdmFsID0gc3o7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4ndCBiZSBhcHBsaWVkIHRvIGFycmF5IGFjY2Vzc1xcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJ3QgYmUgYXBwbGllZCB0byBhcnJheSBhY2Nlc3NcXG5cIixcbiBcdFx0XHRcdHByb2dfbmFtZSwgcmVsby1cdTAwM2VraW5kLCByZWxvLVx1MDAzZWluc25fb2ZmIC8gOCk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFx0XHR3aGlsZSAoYml0X29mZiArIGJpdF9zeiAtIGJ5dGVfb2ZmICogOCBcdTAwM2UgYnl0ZV9zeiAqIDgpIHtcbiBcdFx0XHRpZiAoYnl0ZV9zeiBcdTAwM2U9IDgpIHtcbiBcdFx0XHRcdC8qIGJpdGZpZWxkIGNhbid0IGJlIHJlYWQgd2l0aCA2NC1iaXQgcmVhZCAqL1xuLVx0XHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4ndCBiZSBzYXRpc2ZpZWQgZm9yIGJpdGZpZWxkXFxuXCIsXG4rXHRcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICV1IGF0IGluc24gIyV1IGNhbid0IGJlIHNhdGlzZmllZCBmb3IgYml0ZmllbGRcXG5cIixcbiBcdFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvLVx1MDAzZWtpbmQsIHJlbG8tXHUwMDNlaW5zbl9vZmYgLyA4KTtcbiBcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gXHRcdFx0fVxuQEAgLTk3MSw3ICs5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdGVyciA9IDA7XG4gXHR9IGVsc2UgaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkge1xuIFx0XHQvKiBFT1BOT1RTVVBQIG1lYW5zIHVua25vd24vdW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiAqL1xuLVx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5yZWNvZ25pemVkIENPLVJFIHJlbG9jYXRpb24gJXMgKCVkKSBhdCBpbnNuICMlZFxcblwiLFxuK1x0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5yZWNvZ25pemVkIENPLVJFIHJlbG9jYXRpb24gJXMgKCV1KSBhdCBpbnNuICMldVxcblwiLFxuIFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVx1MDAzZWtpbmQpLFxuIFx0XHRcdHJlbG8tXHUwMDNla2luZCwgcmVsby1cdTAwM2VpbnNuX29mZiAvIDgpO1xuIFx0fVxuQEAgLTEwNjcsNyArMTA2Nyw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAocmVzLVx1MDAzZXZhbGlkYXRlIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSAhPSBvcmlnX3ZhbCkge1xuLVx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwiLFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCxcbiBcdFx0XHRcdGluc25faWR4LCBpbnNuLVx1MDAzZWltbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcbiBcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XG5AQCAtMTA4Myw3ICsxMDgzLDcgQEAgaW50IGJwZl9jb3JlX3BhdGNoX2luc24oY29uc3QgY2hhciAqcHJvZ19uYW1lLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRjYXNlIEJQRl9TVDpcbiBcdGNhc2UgQlBGX1NUWDpcbiBcdFx0aWYgKHJlcy1cdTAwM2V2YWxpZGF0ZSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgIT0gb3JpZ192YWwpIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoTERYL1NUL1NUWCkgdmFsdWU6IGdvdCAldSwgZXhwICVsbHUgLVx1MDAzZSAlbGx1XFxuXCIsXG4rXHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwiLFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXHUwMDNlb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKW9yaWdfdmFsLFxuIFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfdmFsKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMTU5LDcgKzExNTksNyBAQCBpbnQgYnBmX2NvcmVfcGF0Y2hfaW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGRlZmF1bHQ6XG4gXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiB0cnlpbmcgdG8gcmVsb2NhdGUgdW5yZWNvZ25pemVkIGluc24gIyVkLCBjb2RlOjB4JXgsIHNyYzoweCV4LCBkc3Q6MHgleCwgb2ZmOjB4JXgsIGltbToweCV4XFxuXCIsXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXHUwMDNlY29kZSxcbi1cdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0XHQodW5zaWduZWQpaW5zbi1cdTAwM2VzcmNfcmVnLCAodW5zaWduZWQpaW5zbi1cdTAwM2Vkc3RfcmVnLCAodW5zaWduZWQpaW5zbi1cdTAwM2VvZmYsICh1bnNpZ25lZClpbnNuLVx1MDAzZWltbSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTEzMjMsNyArMTMyMyw3IEBAIGludCBicGZfY29yZV9jYWxjX3JlbG9faW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdGNvbnN0IGNoYXIgKnNwZWNfc3RyO1xuIFxuIFx0XHRzcGVjX3N0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQobG9jYWxfYnRmLCByZWxvLVx1MDAzZWFjY2Vzc19zdHJfb2ZmKTtcbi1cdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyVkXSAlcyAlcyArICVzIGZhaWxlZDogJWRcXG5cIixcbitcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyV1XSAlcyAlcyArICVzIGZhaWxlZDogJWRcXG5cIixcbiBcdFx0XHRwcm9nX25hbWUsIHJlbG9faWR4LCBsb2NhbF9pZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLFxuIFx0XHRcdHN0cl9pc19lbXB0eShsb2NhbF9uYW1lKSA/IFwiXHUwMDNjYW5vblx1MDAzZVwiIDogbG9jYWxfbmFtZSxcbiBcdFx0XHRzcGVjX3N0ciA/OiBcIlx1MDAzYz9cdTAwM2VcIiwgZXJyKTtcbkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCBpbnQgYnBmX2NvcmVfY2FsY19yZWxvX2luc24oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFxuIFx0LyogbGliYnBmIGRvZXNuJ3Qgc3VwcG9ydCBjYW5kaWRhdGUgc2VhcmNoIGZvciBhbm9ueW1vdXMgdHlwZXMgKi9cbiBcdGlmIChzdHJfaXNfZW1wdHkobG9jYWxfbmFtZSkpIHtcbi1cdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IFx1MDAzYyVzXHUwMDNlICglZCkgcmVsb2NhdGlvbiBkb2Vzbid0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXFxuXCIsXG4rXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiBcdTAwM2Mlc1x1MDAzZSAoJXUpIHJlbG9jYXRpb24gZG9lc24ndCBzdXBwb3J0IGFub255bW91cyB0eXBlc1xcblwiLFxuIFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVx1MDAzZWtpbmQpLCByZWxvLVx1MDAzZWtpbmQpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTY5Nyw3ICsxNjk3LDcgQEAgaW50IF9fYnBmX2NvcmVfdHlwZXNfbWF0Y2goY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCwgY29uc3Qgc3RcbiBcdFx0Z290byByZWN1cjtcbiBcdH1cbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxcblwiLFxuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cXG5cIixcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdCksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi91c2R0LmMgYi90b29scy9saWIvYnBmL3VzZHQuY1xuaW5kZXggNTdmYjgyYmI4MWI1ODguLmRiOTQzMmFkYjk2N2I2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi91c2R0LmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvdXNkdC5jXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBpbnQgc2FuaXR5X2NoZWNrX3VzZHRfZWxmKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoKVxuIFx0aW50IGVuZGlhbm5lc3M7XG4gXG4gXHRpZiAoZWxmX2tpbmQoZWxmKSAhPSBFTEZfS19FTEYpIHtcbi1cdFx0cHJfd2FybihcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAlZCBmb3IgJyVzJ1xcblwiLCBlbGZfa2luZChlbGYpLCBwYXRoKTtcbitcdFx0cHJfd2FybihcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAldSBmb3IgJyVzJ1xcblwiLCBlbGZfa2luZChlbGYpLCBwYXRoKTtcbiBcdFx0cmV0dXJuIC1FQkFERjtcbiBcdH1cbiBcbkBAIC00MzgsOCArNDM4LDkgQEAgc3RhdGljIGludCBwYXJzZV9lbGZfc2VncyhFbGYgKmVsZiwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGVsZl9zZWcgKipzZWdzLCBzaXpcbiBcdFx0fVxuIFxuIFx0XHRwcl9kZWJ1ZyhcInVzZHQ6IGRpc2NvdmVyZWQgUEhEUiAjJWQgaW4gJyVzJzogdmFkZHIgMHglbHggbWVtc3ogMHglbHggb2Zmc2V0IDB4JWx4IHR5cGUgMHglbHggZmxhZ3MgMHglbHhcXG5cIixcbi1cdFx0XHQgaSwgcGF0aCwgKGxvbmcpcGhkci5wX3ZhZGRyLCAobG9uZylwaGRyLnBfbWVtc3osIChsb25nKXBoZHIucF9vZmZzZXQsXG4tXHRcdFx0IChsb25nKXBoZHIucF90eXBlLCAobG9uZylwaGRyLnBfZmxhZ3MpO1xuK1x0XHRcdCBpLCBwYXRoLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZylwaGRyLnBfdmFkZHIsICh1bnNpZ25lZCBsb25nKXBoZHIucF9tZW1zeiwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX29mZnNldCxcbitcdFx0XHQgKHVuc2lnbmVkIGxvbmcpcGhkci5wX3R5cGUsICh1bnNpZ25lZCBsb25nKXBoZHIucF9mbGFncyk7XG4gXHRcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9MT0FEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTcxOSwxNCArNzIwLDE0IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXG4gXHRcdGlmICghc2VnKSB7XG4gXHRcdFx0ZXJyID0gLUVTUkNIO1xuIFx0XHRcdHByX3dhcm4oXCJ1c2R0OiBmYWlsZWQgdG8gZmluZCBFTEYgcHJvZ3JhbSBzZWdtZW50IGZvciAnJXM6JXMnIGluICclcycgYXQgSVAgMHglbHhcXG5cIixcbi1cdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9hYnNfaXApO1xuK1x0XHRcdFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdGlmICghc2VnLVx1MDAzZWlzX2V4ZWMpIHtcbiBcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0cHJfd2FybihcInVzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAnJXMnIHNlZ21lbnQgWzB4JWx4LCAweCVseCkgZm9yICclczolcycgYXQgSVAgMHglbHggaXMgbm90IGV4ZWN1dGFibGVcXG5cIixcbi1cdFx0XHRcdHBhdGgsIHNlZy1cdTAwM2VzdGFydCwgc2VnLVx1MDAzZWVuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLFxuLVx0XHRcdFx0dXNkdF9hYnNfaXApO1xuK1x0XHRcdFx0cGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4rXHRcdFx0XHQodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdC8qIHRyYW5zbGF0ZSBmcm9tIHZpcnR1YWwgYWRkcmVzcyB0byBmaWxlIG9mZnNldCAqL1xuQEAgLTc2Niw3ICs3NjcsNyBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRcdGlmICghc2VnKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJyVzOiVzJyBpbiAnJXMnIGF0IHJlbGF0aXZlIElQIDB4JWx4XFxuXCIsXG4tXHRcdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9yZWxfaXApO1xuK1x0XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfcmVsX2lwKTtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4gXG5AQCAtNzc1LDggKzc3NiwxMCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFxuIFx0XHRwcl9kZWJ1ZyhcInVzZHQ6IHByb2JlIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAnJXMnIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseCkgYXQgb2Zmc2V0IDB4JWx4XFxuXCIsXG4gXHRcdFx0IHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/IFwiZXhlY1wiIDogXCJsaWIgXCIsIHBhdGgsXG4tXHRcdFx0IG5vdGUubG9jX2FkZHIsIG5vdGUuYmFzZV9hZGRyLCB1c2R0X2Fic19pcCwgdXNkdF9yZWxfaXAsIG5vdGUuYXJncyxcbi1cdFx0XHQgc2VnID8gc2VnLVx1MDAzZXN0YXJ0IDogMCwgc2VnID8gc2VnLVx1MDAzZWVuZCA6IDAsIHNlZyA/IHNlZy1cdTAwM2VvZmZzZXQgOiAwKTtcbitcdFx0XHQgKHVuc2lnbmVkIGxvbmcpbm90ZS5sb2NfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVx1MDAzZXN0YXJ0IDogMCksICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctXHUwMDNlZW5kIDogMCksXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctXHUwMDNlb2Zmc2V0IDogMCkpO1xuIFxuIFx0XHQvKiBBZGp1c3Qgc2VtYXBob3JlIGFkZHJlc3MgdG8gYmUgYSBmaWxlIG9mZnNldCAqL1xuIFx0XHRpZiAobm90ZS5zZW1hX2FkZHIpIHtcbkBAIC03OTEsMTQgKzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRcdGlmICghc2VnKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogZmFpbGVkIHRvIGZpbmQgRUxGIGxvYWRhYmxlIHNlZ21lbnQgd2l0aCBzZW1hcGhvcmUgb2YgJyVzOiVzJyBpbiAnJXMnIGF0IDB4JWx4XFxuXCIsXG4tXHRcdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgbm90ZS5zZW1hX2FkZHIpO1xuK1x0XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKW5vdGUuc2VtYV9hZGRyKTtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHNlZy1cdTAwM2Vpc19leGVjKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogbWF0Y2hlZCBFTEYgYmluYXJ5ICclcycgc2VnbWVudCBbMHglbHgsIDB4JWx4XSBmb3Igc2VtYXBob3JlIG9mICclczolcycgYXQgMHglbHggaXMgZXhlY3V0YWJsZVxcblwiLFxuLVx0XHRcdFx0XHRwYXRoLCBzZWctXHUwMDNlc3RhcnQsIHNlZy1cdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbi1cdFx0XHRcdFx0bm90ZS5zZW1hX2FkZHIpO1xuK1x0XHRcdFx0XHRwYXRoLCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlc3RhcnQsICh1bnNpZ25lZCBsb25nKXNlZy1cdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xuIFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHRcdH1cbiBcbkBAIC04MDYsOCArODA5LDggQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCxcbiBcbiBcdFx0XHRwcl9kZWJ1ZyhcInVzZHQ6IHNlbWEgIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgMHglbHgpIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gYXQgb2Zmc2V0IDB4JWx4XFxuXCIsXG4gXHRcdFx0XHQgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBlaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gXCJleGVjXCIgOiBcImxpYiBcIixcbi1cdFx0XHRcdCBwYXRoLCBub3RlLnNlbWFfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfc2VtYV9vZmYsXG4tXHRcdFx0XHQgc2VnLVx1MDAzZXN0YXJ0LCBzZWctXHUwMDNlZW5kLCBzZWctXHUwMDNlb2Zmc2V0KTtcbitcdFx0XHRcdCBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsICh1bnNpZ25lZCBsb25nKXVzZHRfc2VtYV9vZmYsXG4rXHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlZW5kLCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlb2Zmc2V0KTtcbiBcdFx0fVxuIFxuIFx0XHQvKiBSZWNvcmQgYWRqdXN0ZWQgYWRkcmVzc2VzIGFuZCBvZmZzZXRzIGFuZCBwYXJzZSBVU0RUIHNwZWMgKi9cbkBAIC0xMTE3LDcgKzExMjAsNyBAQCBzdHJ1Y3QgYnBmX2xpbmsgKnVzZHRfbWFuYWdlcl9hdHRhY2hfdXNkdChzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIGNvbnN0IHN0cnVjdFxuIFx0XHRcdFx0ICAgICAgICBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogZmFpbGVkIHRvIG1hcCBJUCAweCVseCB0byBzcGVjICMlZCBmb3IgJyVzOiVzJyBpbiAnJXMnOiAlc1xcblwiLFxuLVx0XHRcdFx0XHR0YXJnZXQtXHUwMDNlYWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4rXHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKXRhcmdldC1cdTAwM2VhYnNfaXAsIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbiBcdFx0XHRcdFx0cGF0aCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMDo1NjoxNy41NjY2ODk3ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDg1MzAzMzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIGB0b29scy9saWIvYnBmL2AgZGlyZWN0b3J5LCBhbmQgaXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwIGVmZm9ydC4gUHJpbWFyaWx5LCBpdCdzIGFib3V0IHR3ZWFraW5nIHRob3NlIGBwcl93YXJuYCBhbmQgYHByX2RlYnVnYCBjYWxscywgY2hhbmdpbmcgZm9ybWF0IHNwZWNpZmllcnMg4oCTIHRoaW5ncyBsaWtlIGAlZGAgdG8gYCV1YCwgYCV6ZGAgdG8gYCV6dWAsIGFuZCBhZGRpbmcgY2FzdHMsIG1vc3RseSBgKHVuc2lnbmVkIGxvbmcpYC4gVGhpcyBpcyBhbGwgcHJldHR5IGNvc21ldGljLCByaWdodD8gSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGFjdHVhbCAqbG9naWMqIG9mIHRoZSBCUEYgY29kZSBvciBrZXJuZWwgaW50ZXJhY3Rpb25zIGlzIGJlaW5nIGNoYW5nZWQuXG5cbkkgd2VudCBsaW5lLWJ5LWxpbmUgaW4gdGhlIGRpZmYuIERvdWJsZSBjaGVja2VkIGV2ZXJ5dGhpbmcgaW4gYGJ0Zi5jYCwgYGJ0Zl9kdW1wLmNgLCBgYnRmX3JlbG9jYXRlLmNgLCBgZWxmLmNgLCBgZ2VuX2xvYWRlci5jYCwgYGxpYmJwZi5jYCwgYG5sYXR0ci5jYCwgYHJlbG9fY29yZS5jYCwgYW5kIGB1c2R0LmNgLiBFdmVyeXRoaW5nIGlzIHJlYWxseSBqdXN0IGFib3V0IGZvcm1hdHRpbmcgdGhlIG91dHB1dCBvZiB3YXJuaW5ncyBhbmQgZGVidWcgbWVzc2FnZXMsIG1ha2luZyBzdXJlIHRoZSByaWdodCBkYXRhIHR5cGVzIGFyZSBiZWluZyBwcmludGVkIGNvcnJlY3RseS4gSSB3YXMgYSBsaXR0bGUgd29ycmllZCBhYm91dCB0aGUgYHNzY2FuZmAgY2hhbmdlIGluIGBsaWJicGYuY2AsIGJ1dCBpdCB0dXJucyBvdXQgdGhlIG9yaWdpbmFsIGNvZGUgd2l0aCBgJWlgIHdhcyBhbHJlYWR5IHBhcnNpbmcgdGhlIGhleCB2YWx1ZXMgdXNlZCBmb3IgbWFwIGZsYWdzIGZyb20gYGZkaW5mb2AgY29ycmVjdGx5LiBXaGlsZSBhIGNoYW5nZSwgaXQgd2Fzbid0IGEgZnVuY3Rpb25hbCBvbmUgaW4gdGVybXMgb2YgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yLlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhpcyBpcyBhbGwgaGFwcGVuaW5nIGluIHVzZXItc3BhY2UgdG9vbHMsIHdoaWNoIGFyZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIGZ1enppbmcgdGhlIGtlcm5lbCBpdHNlbGYuIFN5emthbGxlciwgd2hpY2ggaXMgbWVudGlvbmVkIGluIHRoZSBpbnN0cnVjdGlvbnMsIGlzIGRlc2lnbmVkIHRvIGZ1enoga2VybmVsIGNvZGUsIGFuZCBpdCdzIG5vdCB0aGUgcmlnaHQgdG9vbCBmb3IgdXNlci1zcGFjZSBjaGFuZ2VzLiBJdCdzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbGV2ZWwgb2YgdGVzdGluZy5cblxuU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IGtlcm5lbC1sZXZlbCBmdW5jdGlvbmFsIGNoYW5nZXMgb3IgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIHdhcnJhbnQga2VybmVsIGZ1enppbmcuIEl0J3MgcmVhbGx5IGp1c3QgYSBmb3JtYXR0aW5nIGNsZWFudXAgaW4gdGhlIHVzZXItc3BhY2UgQlBGIHRvb2xzLiBUaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IGluIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5MSwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMDo1NjozOC40MTk3MjYxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBmb3JtYXQgc3BlY2lmaWVycyBpbiBsb2dnaW5nIGZ1bmN0aW9ucyAocHJfd2FybiwgcHJfZGVidWcpIGFuZCBvbmUgc3NjYW5mIGNhbGwgaW4gdXNlci1zcGFjZSBsaWJicGYgY29kZSAodG9vbHMvbGliL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowftkx6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 10:46:59 +0000 UTC FinishedAt: 2026-06-26 10:56:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTNhYWE1MTljMjEyYTg3ZDhkNGRmMmU0OWM1MzY3OGFjNjlkOWNiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDEwOjU2OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXG5pbmRleCA4MjNiY2U4OTUxNzhkYS4uYmY2YTY4MTE4NDA1MTMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNTg5LDcgJiM0Mzs1ODksNyBAQCBzdGF0aWMgaW50IGJ0Zl9wYXJzZV90eXBlX3NlYyhzdHJ1Y3QgYnRmICpidGYpXG4gXHRcdGlmICh0eXBlX3NpemUgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHR5cGVfc2l6ZTtcbiBcdFx0aWYgKG5leHRfdHlwZSAmIzQzOyB0eXBlX3NpemUgXHUwMDNlIGVuZF90eXBlKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtCVEYgdHlwZSBbJWRdIGlzIG1hbGZvcm1lZFxcblwmIzM0OywgYnRmLVx1MDAzZXN0YXJ0X2lkICYjNDM7IGJ0Zi1cdTAwM2Vucl90eXBlcyk7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7QlRGIHR5cGUgWyV1XSBpcyBtYWxmb3JtZWRcXG5cJiMzNDssIGJ0Zi1cdTAwM2VzdGFydF9pZCAmIzQzOyBidGYtXHUwMDNlbnJfdHlwZXMpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTQyNCw3ICYjNDM7MTQyNCw3IEBAIHN0YXRpYyBpbnQgYnRmX2ZpbmRfZWxmX3NlY3Rpb25zKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnRmX2VsZl9zZWNzXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChzaC5zaF90eXBlICE9IFNIVF9QUk9HQklUUykge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBzZWN0aW9uIHR5cGUgKCVkKSBvZiBzZWN0aW9uKCVkLCAlcykgZnJvbSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIHNlY3Rpb24gdHlwZSAoJXUpIG9mIHNlY3Rpb24oJWQsICVzKSBmcm9tICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0c2guc2hfdHlwZSwgaWR4LCBuYW1lLCBwYXRoKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuQEAgLTQ4NTQsNyAmIzQzOzQ4NTQsNyBAQCBzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKCFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIG0xLVx1MDAzZXR5cGUsIG0yLVx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpIHtcbiBcdFx0XHRcdGlmICh0MS1cdTAwM2VuYW1lX29mZikge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0lZCB2bGVuPSVkIGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0ldSB2bGVuPSV1IGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0IGsxID09IEJURl9LSU5EX1NUUlVDVCA/IFwmIzM0O1NUUlVDVFwmIzM0OyA6IFwmIzM0O1VOSU9OXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXHUwMDNlYnRmLCB0MS1cdTAwM2VuYW1lX29mZiksXG4gXHRcdFx0XHRcdFx0IHQxLVx1MDAzZXNpemUsIGJ0Zl92bGVuKHQxKSwgaWQxLCBpZDIsIGksXG5AQCAtNTEwNCw3ICYjNDM7NTEwNCw3IEBAIHN0YXRpYyBpbnQgYnRmX2RlZHVwX2lzX2VxdWl2KHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGNhbmRfaWQsXG4gXHRcdFx0ZXEgPSBidGZfZGVkdXBfaXNfZXF1aXYoZCwgY2FuZF9tLVx1MDAzZXR5cGUsIGNhbm9uX20tXHUwMDNldHlwZSk7XG4gXHRcdFx0aWYgKGVxIFx1MDAzYz0gMCkge1xuIFx0XHRcdFx0aWYgKGNhbmRfdHlwZS1cdTAwM2VuYW1lX29mZikge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0lZCB2bGVuPSVkIGNhbmRfaWRbJXVdIGNhbm9uX2lkWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgZXF1aXYgZm9yIGZpZWxkIyVkICYjMzk7JXMmIzM5OzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0ldSB2bGVuPSV1IGNhbmRfaWRbJXVdIGNhbm9uX2lkWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgZXF1aXYgZm9yIGZpZWxkIyVkICYjMzk7JXMmIzM5OzogJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0IGNhbmRfa2luZCA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcJiMzNDtTVFJVQ1RcJiMzNDsgOiBcJiMzNDtVTklPTlwmIzM0OyxcbiBcdFx0XHRcdFx0XHQgYnRmX19uYW1lX2J5X29mZnNldChkLVx1MDAzZWJ0ZiwgY2FuZF90eXBlLVx1MDAzZW5hbWVfb2ZmKSxcbiBcdFx0XHRcdFx0XHQgY2FuZF90eXBlLVx1MDAzZXNpemUsIHZsZW4sIGNhbmRfaWQsIGNhbm9uX2lkLCBpLFxuQEAgLTYwNjksNyAmIzQzOzYwNjksNyBAQCBzdGF0aWMgaW50IGJ0Zl9hZGRfZGlzdGlsbGVkX3R5cGVzKHN0cnVjdCBidGZfZGlzdGlsbCAqZGlzdClcbiBcdFx0XHRlcnIgPSBidGZfYWRkX3R5cGUoXHUwMDI2ZGlzdC1cdTAwM2VwaXBlLCB0KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJiMzOTslcyYjMzk7WyV1XSBvZiBraW5kIFsldV0gdG8gZGlzdGlsbGVkIGJhc2UgQlRGLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIGtpbmQgd2hlbiBhZGRpbmcgYmFzZSB0eXBlICYjMzk7JXMmIzM5O1slZF0gb2Yga2luZCBbJWRdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXG5cJiMzNDssXG4gXHRcdFx0XHRuYW1lLCBpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcbmluZGV4IGNjMWJhNjViYjZjNWFjLi4xMjNjNDQ4ZjIwYzc0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9idGZfZHVtcC5jXG5AQCAtMTc3Niw3ICYjNDM7MTc3Niw3IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfZ2V0X2JpdGZpZWxkX3ZhbHVlKHN0cnVjdCBidGZfZHVtcCAqZCxcbiBcbiBcdC8qIE1heGltdW0gc3VwcG9ydGVkIGJpdGZpZWxkIHNpemUgaXMgNjQgYml0cyAqL1xuIFx0aWYgKHQtXHUwMDNlc2l6ZSBcdTAwM2UgOCkge1xuLVx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQgYml0ZmllbGQgc2l6ZSAlZFxcblwmIzM0OywgdC1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBiaXRmaWVsZCBzaXplICV1XFxuXCYjMzQ7LCB0LVx1MDAzZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0yMjUxLDcgJiM0MzsyMjUxLDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfZW51bV92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsXG4gXHRcdCp2YWx1ZSA9IGlzX3NpZ25lZCA/ICooX19zOCAqKWRhdGEgOiAqKF9fdTggKilkYXRhO1xuIFx0XHRyZXR1cm4gMDtcbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXFxuXCYjMzQ7LCB0LVx1MDAzZXNpemUsIGlkKTtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7dW5leHBlY3RlZCBzaXplICV1IGZvciBlbnVtLCBpZDpbJXVdXFxuXCYjMzQ7LCB0LVx1MDAzZXNpemUsIGlkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXG5pbmRleCA1M2QxZjM1NDFiY2U2OS4uZGY1ZmE0YmQ4N2Q2OWEgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXG5AQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcbiBcdFx0ICAgICBjbXBfYnRmX25hbWVfc2l6ZShcdTAwMjZiYXNlX2luZm8sIGRpc3RfaW5mbykgPT0gMDtcbiBcdFx0ICAgICBkaXN0X2luZm8mIzQzOyYjNDM7KSB7XG4gXHRcdFx0aWYgKCFkaXN0X2luZm8tXHUwMDNlaWQgfHwgZGlzdF9pbmZvLVx1MDAzZWlkIFx1MDAzZT0gci1cdTAwM2Vucl9kaXN0X2Jhc2VfdHlwZXMpIHtcbi1cdFx0XHRcdHByX3dhcm4oXCYjMzQ7YmFzZSBCVEYgaWQgWyVkXSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFslZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtiYXNlIEJURiBpZCBbJXVdIG1hcHMgdG8gaW52YWxpZCBkaXN0aWxsZWQgYmFzZSBCVEYgaWQgWyV1XVxcblwmIzM0OyxcbiBcdFx0XHRcdFx0aWQsIGRpc3RfaW5mby1cdTAwM2VpZCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBkb25lO1xuQEAgLTM2OCw3ICYjNDM7MzY4LDcgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfbWFwX2Rpc3RpbGxlZF9iYXNlKHN0cnVjdCBidGZfcmVsb2NhdGUgKnIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRpc3RfdCA9IGJ0Zl90eXBlX2J5X2lkKHItXHUwMDNlZGlzdF9iYXNlX2J0ZiwgaWQpO1xuIFx0XHRuYW1lID0gYnRmX19uYW1lX2J5X29mZnNldChyLVx1MDAzZWRpc3RfYmFzZV9idGYsIGRpc3RfdC1cdTAwM2VuYW1lX29mZik7XG4tXHRcdHByX3dhcm4oXCYjMzQ7ZGlzdGlsbGVkIGJhc2UgQlRGIHR5cGUgJiMzOTslcyYjMzk7IFslZF0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7ZGlzdGlsbGVkIGJhc2UgQlRGIHR5cGUgJiMzOTslcyYjMzk7IFsldV0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcblwmIzM0OyxcbiBcdFx0XHRuYW1lLCBpZCk7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuQEAgLTM5NywxMSAmIzQzOzM5NywxMSBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV92YWxpZGF0ZV9kaXN0aWxsZWRfYmFzZShzdHJ1Y3QgYnRmX3JlbG9jYXRlICpyKVxuIFx0XHRjYXNlIEJURl9LSU5EX0ZXRDpcbiBcdFx0XHRpZiAodC1cdTAwM2VuYW1lX29mZilcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7dHlwZSBbJWRdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7dHlwZSBbJXVdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cJiMzNDssXG4gXHRcdFx0XHRpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRwcl93YXJuKFwmIzM0O3R5cGUgWyVkXSBpbiBkaXN0aWxsZWQgYmFzZWQgQlRGIGhhcyB1bmV4cGVjdGVkIGtpbmQgWyVkXVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDt0eXBlIFsldV0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cXG5cJiMzNDssXG4gXHRcdFx0XHRpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jXG5pbmRleCAyOTVkYmRhMjQ1ODA3MS4uZmUxMzZkMDI1OTY3OWYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2VsZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2VsZi5jXG5AQCAtMzU0LDcgJiM0MzszNTQsNyBAQCBsb25nIGVsZl9maW5kX2Z1bmNfb2Zmc2V0KEVsZiAqZWxmLCBjb25zdCBjaGFyICpiaW5hcnlfcGF0aCwgY29uc3QgY2hhciAqbmFtZSlcbiBcbiBcdGlmIChyZXQgXHUwMDNlIDApIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7ZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJiMzOTslcyYjMzk7IGluICYjMzk7JXMmIzM5OzogMHglbHhcXG5cJiMzNDssIG5hbWUsIGJpbmFyeV9wYXRoLFxuLVx0XHRcdCByZXQpO1xuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpcmV0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXQgPT0gMCkge1xuIFx0XHRcdHByX3dhcm4oXCYjMzQ7ZWxmOiAmIzM5OyVzJiMzOTsgaXMgMCBpbiBzeW10YWIgZm9yICYjMzk7JXMmIzM5OzogJXNcXG5cJiMzNDssIG5hbWUsIGJpbmFyeV9wYXRoLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbmluZGV4IGQ3OTY5NWYwMWM4N2YzLi5jN2YyZDJhYzdiYjM1ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuY1xuQEAgLTM4NCw3ICYjNDM7Mzg0LDcgQEAgaW50IGJwZl9nZW5fX2ZpbmlzaChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbnJfcHJvZ3MsIGludCBucl9tYXBzKVxuIFx0aW50IGk7XG4gXG4gXHRpZiAobnJfcHJvZ3MgXHUwMDNjIGdlbi1cdTAwM2Vucl9wcm9ncyB8fCBucl9tYXBzICE9IGdlbi1cdTAwM2Vucl9tYXBzKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7bnJfcHJvZ3MgJWQvJWQgbnJfbWFwcyAlZC8lZCBtaXNtYXRjaFxcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7bnJfcHJvZ3MgJWQvJXUgbnJfbWFwcyAlZC8ldSBtaXNtYXRjaFxcblwmIzM0OyxcbiBcdFx0XHRucl9wcm9ncywgZ2VuLVx1MDAzZW5yX3Byb2dzLCBucl9tYXBzLCBnZW4tXHUwMDNlbnJfbWFwcyk7XG4gXHRcdGdlbi1cdTAwM2VlcnJvciA9IC1FRkFVTFQ7XG4gXHRcdHJldHVybiBnZW4tXHUwMDNlZXJyb3I7XG5AQCAtNDg4LDcgJiM0Mzs0ODgsNyBAQCB2b2lkIGJwZl9nZW5fX2xvYWRfYnRmKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IHZvaWQgKmJ0Zl9yYXdfZGF0YSxcbiBcbiBcdGF0dHIuYnRmX3NpemUgPSB0Z3RfZW5kaWFuKGJ0Zl9yYXdfc2l6ZSk7XG4gXHRidGZfbG9hZF9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBsb2FkX2J0Zjogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogbG9hZF9idGY6IG9mZiAlZCBzaXplICV1LCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxcblwmIzM0OyxcbiBcdFx0IGJ0Zl9kYXRhLCBidGZfcmF3X3NpemUsIGJ0Zl9sb2FkX2F0dHIsIGF0dHJfc2l6ZSk7XG4gXG4gXHQvKiBwb3B1bGF0ZSB1bmlvbiBicGZfYXR0ciB3aXRoIHVzZXIgcHJvdmlkZWQgbG9nIGRldGFpbHMgKi9cbkBAIC01MzQsNyAmIzQzOzUzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX2NyZWF0ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0YXR0ci5idGZfdmFsdWVfdHlwZV9pZCA9IHRndF9lbmRpYW4obWFwX2F0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpO1xuIFxuIFx0bWFwX2NyZWF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBtYXBfY3JlYXRlOiAlcyBpZHggJWQgdHlwZSAlZCB2YWx1ZV90eXBlX2lkICVkLCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtnZW46IG1hcF9jcmVhdGU6ICVzIGlkeCAlZCB0eXBlICV1IHZhbHVlX3R5cGVfaWQgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCYjMzQ7LFxuIFx0XHQgbWFwX25hbWUsIG1hcF9pZHgsIG1hcF90eXBlLCBtYXBfYXR0ci1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbiBcdFx0IG1hcF9jcmVhdGVfYXR0ciwgYXR0cl9zaXplKTtcbiBcbkBAIC0xMDgyLDcgJiM0MzsxMDgyLDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiBcdGxpY2Vuc2Vfb2ZmID0gYWRkX2RhdGEoZ2VuLCBsaWNlbnNlLCBzdHJsZW4obGljZW5zZSkgJiM0MzsgMSk7XG4gXHQvKiBhZGQgaW5zbnMgdG8gYmxvYiBvZiBieXRlcyAqL1xuIFx0aW5zbnNfb2ZmID0gYWRkX2RhdGEoZ2VuLCBpbnNucywgaW5zbl9jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtnZW46IHByb2dfbG9hZDogcHJvZ19pZHggJWQgdHlwZSAlZCBpbnNuIG9mZiAlZCBpbnNuc19jbnQgJXpkIGxpY2Vuc2Ugb2ZmICVkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICV1IGluc24gb2ZmICVkIGluc25zX2NudCAlenUgbGljZW5zZSBvZmYgJWRcXG5cJiMzNDssXG4gXHRcdCBwcm9nX2lkeCwgcHJvZ190eXBlLCBpbnNuc19vZmYsIGluc25fY250LCBsaWNlbnNlX29mZik7XG4gXG4gXHQvKiBjb252ZXJ0IGJsb2IgaW5zbnMgdG8gdGFyZ2V0IGVuZGlhbm5lc3MgKi9cbkBAIC0xMTA1LDIxICYjNDM7MTEwNSwyMSBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0YXR0ci5mdW5jX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemUpO1xuIFx0YXR0ci5mdW5jX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXHUwMDNlZnVuY19pbmZvX2NudCk7XG4gXHRmdW5jX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm8sIGZ1bmNfaW5mb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtnZW46IHByb2dfbG9hZDogZnVuY19pbmZvOiBvZmYgJWQgY250ICV1IHJlYyBzaXplICV1XFxuXCYjMzQ7LFxuIFx0XHQgZnVuY19pbmZvLCBsb2FkX2F0dHItXHUwMDNlZnVuY19pbmZvX2NudCxcbiBcdFx0IGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemUpO1xuIFxuIFx0YXR0ci5saW5lX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xuIFx0YXR0ci5saW5lX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX2NudCk7XG4gXHRsaW5lX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtnZW46IHByb2dfbG9hZDogbGluZV9pbmZvOiBvZmYgJWQgY250ICV1IHJlYyBzaXplICV1XFxuXCYjMzQ7LFxuIFx0XHQgbGluZV9pbmZvLCBsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX2NudCxcbiBcdFx0IGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xuIFxuIFx0YXR0ci5jb3JlX3JlbG9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKChfX3UzMilzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKTtcbiBcdGF0dHIuY29yZV9yZWxvX2NudCA9IHRndF9lbmRpYW4oZ2VuLVx1MDAzZWNvcmVfcmVsb19jbnQpO1xuIFx0Y29yZV9yZWxvcyA9IGFkZF9kYXRhKGdlbiwgZ2VuLVx1MDAzZWNvcmVfcmVsb3MsIGNvcmVfcmVsb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGNvcmVfcmVsb3M6IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJXpkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxcblwmIzM0OyxcbiBcdFx0IGNvcmVfcmVsb3MsIGdlbi1cdTAwM2Vjb3JlX3JlbG9fY250LFxuIFx0XHQgc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7XG4gXG5AQCAtMTIzNCw3ICYjNDM7MTIzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsXG4gXHR9XG4gXG4gXHRtYXBfdXBkYXRlX2F0dHIgPSBhZGRfZGF0YShnZW4sIFx1MDAyNmF0dHIsIGF0dHJfc2l6ZSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCYjMzQ7LFxuJiM0MztcdHByX2RlYnVnKFwmIzM0O2dlbjogbWFwX3VwZGF0ZV9lbGVtOiBpZHggJWQsIHZhbHVlOiBvZmYgJWQgc2l6ZSAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cJiMzNDssXG4gXHRcdCBtYXBfaWR4LCB2YWx1ZSwgdmFsdWVfc2l6ZSwgbWFwX3VwZGF0ZV9hdHRyLCBhdHRyX3NpemUpO1xuIFx0bW92ZV9ibG9iMmJsb2IoZ2VuLCBhdHRyX2ZpZWxkKG1hcF91cGRhdGVfYXR0ciwgbWFwX2ZkKSwgNCxcbiBcdFx0ICAgICAgIGJsb2JfZmRfYXJyYXlfb2ZmKGdlbiwgbWFwX2lkeCkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCAxMzY4NzUyYWExM2MzOS4uNzE2MjE0NjI4MGE4MGUgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtMTQ4Niw3ICYjNDM7MTQ4Niw3IEBAIHN0YXRpYyBpbnQgaW5pdF9zdHJ1Y3Rfb3BzX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc2VjX25hbWUsXG4gXHRcdCAgICAgICB0eXBlLVx1MDAzZXNpemUpO1xuIFx0XHRzdF9vcHMtXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XG4gXG4tXHRcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JXUpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JWQpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwmIzM0OyxcbiBcdFx0XHQgdG5hbWUsIHR5cGVfaWQsIHZhcl9uYW1lLCB2c2ktXHUwMDNlb2Zmc2V0KTtcbiBcdH1cbiBcbkBAIC0yNjI2LDcgJiM0MzsyNjI2LDcgQEAgaW50IHBhcnNlX2J0Zl9tYXBfZGVmKGNvbnN0IGNoYXIgKm1hcF9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gXHRcdFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tXHUwMDNldHlwZSk7XG4gXHRcdFx0aWYgKCF0KSB7XG4tXHRcdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtleSB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtleSB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0bWFwX25hbWUsIG0tXHUwMDNldHlwZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMjY2Niw3ICYjNDM7MjY2Niw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiB2YWx1ZSB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHZhbHVlIHR5cGUgWyV1XSBub3QgZm91bmQuXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRtYXBfbmFtZSwgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0yNzIwLDcgJiM0MzsyNzIwLDcgQEAgaW50IHBhcnNlX2J0Zl9tYXBfZGVmKGNvbnN0IGNoYXIgKm1hcF9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0bWFwX2RlZi1cdTAwM2V2YWx1ZV9zaXplID0gNDtcbiBcdFx0XHR0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRpZiAoIXQpIHtcbi1cdFx0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogJXMgdHlwZSBbJWRdIG5vdCBmb3VuZC5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiAlcyB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0bWFwX25hbWUsIGRlc2MsIG0tXHUwMDNldHlwZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMzQ3Niw3ICYjNDM7MzQ3Niw3IEBAIHN0YXRpYyBpbnQgYnRmX2ZpeHVwX2RhdGFzZWMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHR2YXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0X3Zhci1cdTAwM2VuYW1lX29mZik7XG4gXHRcdGlmICghdmFyX25hbWUpIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMmIzM5O3MgbWVtYmVyICMlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7c2VjICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGZpbmQgbmFtZSBvZiBEQVRBU0VDJiMzOTtzIG1lbWJlciAjJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgc2VjX25hbWUsIGkpO1xuIFx0XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0XHR9XG5AQCAtMzk3MSw3ICYjNDM7Mzk3MSw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0aWYgKCFkYXRhKVxuIFx0XHRcdHJldHVybiAtTElCQlBGX0VSUk5PX19GT1JNQVQ7XG4gXG4tXHRcdHByX2RlYnVnKFwmIzM0O2VsZjogc2VjdGlvbiglZCkgJXMsIHNpemUgJWxkLCBsaW5rICVkLCBmbGFncyAlbHgsIHR5cGU9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtlbGY6IHNlY3Rpb24oJWQpICVzLCBzaXplICVsdSwgbGluayAlZCwgZmxhZ3MgJWx4LCB0eXBlPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdCBpZHgsIG5hbWUsICh1bnNpZ25lZCBsb25nKWRhdGEtXHUwMDNlZF9zaXplLFxuIFx0XHRcdCAoaW50KXNoLVx1MDAzZXNoX2xpbmssICh1bnNpZ25lZCBsb25nKXNoLVx1MDAzZXNoX2ZsYWdzLFxuIFx0XHRcdCAoaW50KXNoLVx1MDAzZXNoX3R5cGUpO1xuQEAgLTQ0OTQsNyAmIzQzOzQ0OTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFxuIFx0XHRcdGV4dC1cdTAwM2VrY2ZnLmRhdGFfb2ZmID0gcm91bmR1cChvZmYsIGV4dC1cdTAwM2VrY2ZnLmFsaWduKTtcbiBcdFx0XHRvZmYgPSBleHQtXHUwMDNla2NmZy5kYXRhX29mZiAmIzQzOyBleHQtXHUwMDNla2NmZy5zejtcbi1cdFx0XHRwcl9kZWJ1ZyhcJiMzNDtleHRlcm4gKGtjZmcpICMlZDogc3ltYm9sICVkLCBvZmYgJXUsIG5hbWUgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX2RlYnVnKFwmIzM0O2V4dGVybiAoa2NmZykgIyVkOiBzeW1ib2wgJWQsIG9mZiAlZCwgbmFtZSAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdCBpLCBleHQtXHUwMDNlc3ltX2lkeCwgZXh0LVx1MDAzZWtjZmcuZGF0YV9vZmYsIGV4dC1cdTAwM2VuYW1lKTtcbiBcdFx0fVxuIFx0XHRzZWMtXHUwMDNlc2l6ZSA9IG9mZjtcbkBAIC00NjI2LDcgJiM0Mzs0NjI2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG4gXHRpZiAoIWlzX2NhbGxfaW5zbihpbnNuKSBcdTAwMjZcdTAwMjYgIWlzX2xkaW1tNjRfaW5zbihpbnNuKSkge1xuLVx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBpbnZhbGlkIHJlbG8gYWdhaW5zdCAmIzM5OyVzJiMzOTsgZm9yIGluc25zWyVkXS5jb2RlIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBpbnZhbGlkIHJlbG8gYWdhaW5zdCAmIzM5OyVzJiMzOTsgZm9yIGluc25zWyV1XS5jb2RlIDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0cHJvZy1cdTAwM2VuYW1lLCBzeW1fbmFtZSwgaW5zbl9pZHgsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdHJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQztcbiBcdH1cbkBAIC00NzQ5LDcgJiM0Mzs0NzQ5LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0XHQgICAgbWFwLVx1MDAzZXNlY19pZHggIT0gc3ltLVx1MDAzZXN0X3NobmR4IHx8XG4gXHRcdFx0ICAgIG1hcC1cdTAwM2VzZWNfb2Zmc2V0ICE9IHN5bS1cdTAwM2VzdF92YWx1ZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBtYXAgJXpkICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBtYXAgJXp1ICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgcHJvZy1cdTAwM2VuYW1lLCBtYXBfaWR4LCBtYXAtXHUwMDNlbmFtZSwgbWFwLVx1MDAzZXNlY19pZHgsXG4gXHRcdFx0XHQgbWFwLVx1MDAzZXNlY19vZmZzZXQsIGluc25faWR4KTtcbiBcdFx0XHRicmVhaztcbkBAIC00Nzc2LDcgJiM0Mzs0Nzc2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0bWFwID0gXHUwMDI2b2JqLVx1MDAzZW1hcHNbbWFwX2lkeF07XG4gXHRcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgIT0gdHlwZSB8fCBtYXAtXHUwMDNlc2VjX2lkeCAhPSBzeW0tXHUwMDNlc3Rfc2huZHgpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBkYXRhIG1hcCAlemQgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IGZvdW5kIGRhdGEgbWFwICV6dSAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gJXVcXG5cJiMzNDssXG4gXHRcdFx0IHByb2ctXHUwMDNlbmFtZSwgbWFwX2lkeCwgbWFwLVx1MDAzZW5hbWUsIG1hcC1cdTAwM2VzZWNfaWR4LFxuIFx0XHRcdCBtYXAtXHUwMDNlc2VjX29mZnNldCwgaW5zbl9pZHgpO1xuIFx0XHRicmVhaztcbkBAIC00OTg1LDcgJiM0Mzs0OTg1LDcgQEAgc3RhdGljIGludCBicGZfZ2V0X21hcF9pbmZvX2Zyb21fZmRpbmZvKGludCBmZCwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbylcbiBcdFx0XHRpbmZvLVx1MDAzZXZhbHVlX3NpemUgPSB2YWw7XG4gXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcJiMzNDttYXhfZW50cmllczpcXHQldVwmIzM0OywgXHUwMDI2dmFsKSA9PSAxKVxuIFx0XHRcdGluZm8tXHUwMDNlbWF4X2VudHJpZXMgPSB2YWw7XG4tXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcJiMzNDttYXBfZmxhZ3M6XFx0JWlcJiMzNDssIFx1MDAyNnZhbCkgPT0gMSlcbiYjNDM7XHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcJiMzNDttYXBfZmxhZ3M6XFx0JXhcJiMzNDssIFx1MDAyNnZhbCkgPT0gMSlcbiBcdFx0XHRpbmZvLVx1MDAzZW1hcF9mbGFncyA9IHZhbDtcbiBcdH1cbiBcbkBAIC01NTIxLDExICYjNDM7NTUyMSwxMSBAQCBzdGF0aWMgaW50IGluaXRfbWFwX2luX21hcF9zbG90cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFslZF0gdG8gbWFwICYjMzk7JXMmIzM5OyBmZD0lZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJXVdIHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWQ6ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIGksIHRhcmdfbWFwLVx1MDAzZW5hbWUsIGZkLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFslZF0gc2V0IHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFsldV0gc2V0IHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWRcXG5cJiMzNDssXG4gXHRcdFx0IG1hcC1cdTAwM2VuYW1lLCBpLCB0YXJnX21hcC1cdTAwM2VuYW1lLCBmZCk7XG4gXHR9XG4gXG5AQCAtNTU1NCwxMSAmIzQzOzU1NTQsMTEgQEAgc3RhdGljIGludCBpbml0X3Byb2dfYXJyYXlfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXHUwMDNlZmQsIFx1MDAyNmksIFx1MDAyNmZkLCAwKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyVkXSB0byBwcm9nICYjMzk7JXMmIzM5OyBmZD0lZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJXVdIHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkOiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBpLCB0YXJnX3Byb2ctXHUwMDNlbmFtZSwgZmQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyVkXSBzZXQgdG8gcHJvZyAmIzM5OyVzJiMzOTsgZmQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFsldV0gc2V0IHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkXFxuXCYjMzQ7LFxuIFx0XHRcdCBtYXAtXHUwMDNlbmFtZSwgaSwgdGFyZ19wcm9nLVx1MDAzZW5hbWUsIGZkKTtcbiBcdH1cbiBcbkBAIC01Nzg4LDcgJiM0Mzs1Nzg4LDcgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcbiBcdFx0aWYgKHN0cm5jbXAobG9jYWxfbmFtZSwgdGFyZ19uYW1lLCBsb2NhbF9lc3NlbnRfbGVuKSAhPSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtDTy1SRSByZWxvY2F0aW5nIFslZF0gJXMgJXM6IGZvdW5kIHRhcmdldCBjYW5kaWRhdGUgWyVkXSAlcyAlcyBpbiBbJXNdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7Q08tUkUgcmVsb2NhdGluZyBbJXVdICVzICVzOiBmb3VuZCB0YXJnZXQgY2FuZGlkYXRlIFslZF0gJXMgJXMgaW4gWyVzXVxcblwmIzM0OyxcbiBcdFx0XHQgbG9jYWxfY2FuZC1cdTAwM2VpZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3QpLFxuIFx0XHRcdCBsb2NhbF9uYW1lLCBpLCBidGZfa2luZF9zdHIodCksIHRhcmdfbmFtZSxcbiBcdFx0XHQgdGFyZ19idGZfbmFtZSk7XG5AQCAtNTg0OCw3ICYjNDM7NTg0OCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4gXHRcdFx0XHRjb250aW51ZTsgLyogZXhwZWN0ZWQgcmFjZTogQlRGIHdhcyB1bmxvYWRlZCAqL1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJWQgRkQ6ICVzXFxuXCYjMzQ7LCBpZCwgZXJyc3RyKGVycikpO1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJXUgRkQ6ICVzXFxuXCYjMzQ7LCBpZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC01ODYxLDcgJiM0Mzs1ODYxLDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGVyciA9IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gZ2V0IEJURiBvYmplY3QgIyVkIGluZm86ICVzXFxuXCYjMzQ7LCBpZCwgZXJyc3RyKGVycikpO1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJXUgaW5mbzogJXNcXG5cJiMzNDssIGlkLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC01ODc0LDcgJiM0Mzs1ODc0LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gbG9hZCBtb2R1bGUgWyVzXSYjMzk7cyBCVEYgb2JqZWN0ICMlZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgbW9kdWxlIFslc10mIzM5O3MgQlRGIG9iamVjdCAjJXU6ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0bmFtZSwgaWQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNjcsNyAmIzQzOzYwNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX3Jlc29sdmVfcmVsbyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHQgICAgIWhhc2htYXBfX2ZpbmQoY2FuZF9jYWNoZSwgbG9jYWxfaWQsIFx1MDAyNmNhbmRzKSkge1xuIFx0XHRjYW5kcyA9IGJwZl9jb3JlX2ZpbmRfY2FuZHMocHJvZy1cdTAwM2VvYmosIGxvY2FsX2J0ZiwgbG9jYWxfaWQpO1xuIFx0XHRpZiAoSVNfRVJSKGNhbmRzKSkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB0YXJnZXQgY2FuZGlkYXRlIHNlYXJjaCBmYWlsZWQgZm9yIFslZF0gJXMgJXM6ICVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHRhcmdldCBjYW5kaWRhdGUgc2VhcmNoIGZhaWxlZCBmb3IgWyV1XSAlcyAlczogJWxkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgbG9jYWxfaWQsIGJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSxcbiBcdFx0XHRcdGxvY2FsX25hbWUsIFBUUl9FUlIoY2FuZHMpKTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihjYW5kcyk7XG5AQCAtNjEyNyw3ICYjNDM7NjEyNyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xcblwmIzM0Oywgc2VjX25hbWUsIHNlYy1cdTAwM2VudW1faW5mbyk7XG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmb3VuZCAldSBDTy1SRSByZWxvY2F0aW9uc1xcblwmIzM0Oywgc2VjX25hbWUsIHNlYy1cdTAwM2VudW1faW5mbyk7XG4gXG4gXHRcdGZvcl9lYWNoX2J0Zl9leHRfcmVjKHNlZywgc2VjLCBpLCByZWMpIHtcbiBcdFx0XHRpZiAocmVjLVx1MDAzZWluc25fb2ZmICUgQlBGX0lOU05fU1opXG5AQCAtNjE4MSw3ICYjNDM7NjE4MSw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcbiBcdFx0XHRlcnIgPSBicGZfY29yZV9wYXRjaF9pbnNuKHByb2ctXHUwMDNlbmFtZSwgaW5zbiwgaW5zbl9pZHgsIHJlYywgaSwgXHUwMDI2dGFyZ19yZXMpO1xuIFx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJXU6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJWQ6ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGksIGluc25faWR4LCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG5AQCAtNjM0Niw3ICYjNDM7NjM0Niw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2p0X21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjXG4gXHRcdGdvdG8gZXJyX2Nsb3NlO1xuIFx0fVxuIFx0aWYgKHN5bV9vZmYgJiM0MzsganRfc2l6ZSBcdTAwM2Ugb2JqLVx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeikge1xuLVx0XHRwcl93YXJuKFwmIzM0O21hcCAmIzM5Oy5qdW1wdGFibGVzJiMzOTs6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6ZCwgdHJ5aW5nIHRvIGFjY2VzcyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7Lmp1bXB0YWJsZXMmIzM5OzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXp1LCB0cnlpbmcgdG8gYWNjZXNzICV1XFxuXCYjMzQ7LFxuIFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3osIHN5bV9vZmYgJiM0MzsganRfc2l6ZSk7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gZXJyX2Nsb3NlO1xuQEAgLTYzODEsNyAmIzQzOzYzODEsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y1xuIFx0XHQgKi9cbiBcdFx0aWYgKGluc25fb2ZmIFx1MDAzZSBVSU5UMzJfTUFYKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTsuanVtcHRhYmxlcyYjMzk7OiBpbnZhbGlkIGp1bXAgdGFibGUgdmFsdWUgMHglbGx4IGF0IG9mZnNldCAldVxcblwmIzM0Oyxcbi1cdFx0XHRcdChsb25nIGxvbmcpanRbaV0sIHN5bV9vZmYgJiM0MzsgaSAqIGp0X2VudHJ5X3NpemUpO1xuJiM0MztcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpanRbaV0sIHN5bV9vZmYgJiM0MzsgaSAqIGp0X2VudHJ5X3NpemUpO1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBlcnJfY2xvc2U7XG4gXHRcdH1cbkBAIC02NTE3LDcgJiM0Mzs2NTE3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfZGF0YShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4gXHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogYmFkIHJlbG8gdHlwZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IGJhZCByZWxvIHR5cGUgJXVcXG5cJiMzNDssXG4gXHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGksIHJlbG8tXHUwMDNldHlwZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC02Nzk3LDcgJiM0Mzs2Nzk3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NfY29kZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1haW5fcHJvZyxcbiBcdFx0XHQgKi9cbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHJlbG8gXHUwMDI2XHUwMDI2IHJlbG8tXHUwMDNldHlwZSAhPSBSRUxPX0NBTEwgXHUwMDI2XHUwMDI2IHJlbG8tXHUwMDNldHlwZSAhPSBSRUxPX1NVQlBST0dfQUREUikge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiB1bmV4cGVjdGVkIHJlbG8gZm9yIGluc24gIyV6dSwgdHlwZSAldVxcblwmIzM0OyxcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgaW5zbl9pZHgsIHJlbG8tXHUwMDNldHlwZSk7XG4gXHRcdFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX1JFTE9DO1xuIFx0XHR9XG5AQCAtNzU4Nyw3ICYjNDM7NzU4Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9tYXBfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0fVxuIFx0XHRuYW1lID0gZWxmX3N5bV9zdHIob2JqLCBzeW0tXHUwMDNlc3RfbmFtZSkgPzogXCYjMzQ7XHUwMDNjP1x1MDAzZVwmIzM0OztcbiBcbi1cdFx0cHJfZGVidWcoXCYjMzQ7Lm1hcHMgcmVsbyAjJWQ6IGZvciAlemQgdmFsdWUgJXpkIHJlbC1cdTAwM2VyX29mZnNldCAlenUgbmFtZSAlZCAoJiMzOTslcyYjMzk7KVxcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0Oy5tYXBzIHJlbG8gIyVkOiBmb3IgJXpkIHZhbHVlICV6dSByZWwtXHUwMDNlcl9vZmZzZXQgJXp1IG5hbWUgJXUgKCYjMzk7JXMmIzM5OylcXG5cJiMzNDssXG4gXHRcdFx0IGksIChzc2l6ZV90KShyZWwtXHUwMDNlcl9pbmZvIFx1MDAzZVx1MDAzZSAzMiksIChzaXplX3Qpc3ltLVx1MDAzZXN0X3ZhbHVlLFxuIFx0XHRcdCAoc2l6ZV90KXJlbC1cdTAwM2VyX29mZnNldCwgc3ltLVx1MDAzZXN0X25hbWUsIG5hbWUpO1xuIFxuQEAgLTc2NzgsNyAmIzQzOzc2NzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdH1cbiBcdFx0bWFwLVx1MDAzZWluaXRfc2xvdHNbbW9mZl0gPSBpc19tYXBfaW5fbWFwID8gKHZvaWQgKil0YXJnX21hcCA6ICh2b2lkICopdGFyZ19wcm9nO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDsubWFwcyByZWxvICMlZDogbWFwICYjMzk7JXMmIzM5OyBzbG90IFslZF0gcG9pbnRzIHRvICVzICYjMzk7JXMmIzM5O1xcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0Oy5tYXBzIHJlbG8gIyVkOiBtYXAgJiMzOTslcyYjMzk7IHNsb3QgWyV1XSBwb2ludHMgdG8gJXMgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LFxuIFx0XHRcdCBpLCBtYXAtXHUwMDNlbmFtZSwgbW9mZiwgdHlwZSwgbmFtZSk7XG4gXHR9XG4gXG5AQCAtODczOCw3ICYjNDM7ODczOCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVzb2x2ZV9rc3ltX3Zhcl9idGZfaWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0bG9jYWxfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQob2JqLVx1MDAzZWJ0ZiwgbG9jYWxfdHlwZS1cdTAwM2VuYW1lX29mZik7XG4gXHRcdHRhcmdfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0YXJnX3R5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIFxuLVx0XHRwcl93YXJuKFwmIzM0O2V4dGVybiAodmFyIGtzeW0pICYjMzk7JXMmIzM5OzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJWRdICVzICVzLCBidXQga2VybmVsIGhhcyBbJWRdICVzICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDtleHRlcm4gKHZhciBrc3ltKSAmIzM5OyVzJiMzOTs6IGluY29tcGF0aWJsZSB0eXBlcywgZXhwZWN0ZWQgWyV1XSAlcyAlcywgYnV0IGtlcm5lbCBoYXMgWyV1XSAlcyAlc1xcblwmIzM0OyxcbiBcdFx0XHRleHQtXHUwMDNlbmFtZSwgbG9jYWxfdHlwZV9pZCxcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdHlwZSksIGxvY2FsX25hbWUsIHRhcmdfdHlwZV9pZCxcbiBcdFx0XHRidGZfa2luZF9zdHIodGFyZ190eXBlKSwgdGFyZ19uYW1lKTtcbkBAIC04OTE1LDcgJiM0Mzs4OTE1LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZXNvbHZlX2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtleHRlcm4gKGtjZmcpICYjMzk7JXMmIzM5Ozogc2V0IHRvIDB4JWxseFxcblwmIzM0Oyxcbi1cdFx0XHRcdCBleHQtXHUwMDNlbmFtZSwgKGxvbmcgbG9uZyl2YWx1ZSk7XG4mIzQzO1x0XHRcdFx0IGV4dC1cdTAwM2VuYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O2V4dGVybiAmIzM5OyVzJiMzOTs6IHVucmVjb2duaXplZCBleHRlcm4ga2luZFxcblwmIzM0OywgZXh0LVx1MDAzZW5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEwNDk0LDcgJiM0MzsxMDQ5NCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9zdF9vcHNfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0bW9mZiA9IHJlbC1cdTAwM2VyX29mZnNldCAtIG1hcC1cdTAwM2VzZWNfb2Zmc2V0O1xuIFx0XHRzaGRyX2lkeCA9IHN5bS1cdTAwM2VzdF9zaG5keDtcbiBcdFx0c3Rfb3BzID0gbWFwLVx1MDAzZXN0X29wcztcbi1cdFx0cHJfZGVidWcoXCYjMzQ7c3RydWN0X29wcyByZWxvYyAlczogZm9yICVsbGQgdmFsdWUgJWxsZCBzaGRyX2lkeCAldSByZWwtXHUwMDNlcl9vZmZzZXQgJXp1IG1hcC1cdTAwM2VzZWNfb2Zmc2V0ICV6dSBuYW1lICVkIChcXCYjMzk7JXNcXCYjMzk7KVxcblwmIzM0OyxcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLVx1MDAzZXJfb2Zmc2V0ICV6dSBtYXAtXHUwMDNlc2VjX29mZnNldCAlenUgbmFtZSAldSAoXFwmIzM5OyVzXFwmIzM5OylcXG5cJiMzNDssXG4gXHRcdFx0IG1hcC1cdTAwM2VuYW1lLFxuIFx0XHRcdCAobG9uZyBsb25nKShyZWwtXHUwMDNlcl9pbmZvIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdFx0IChsb25nIGxvbmcpc3ltLVx1MDAzZXN0X3ZhbHVlLFxuQEAgLTEwNjQzLDcgJiM0MzsxMDY0Myw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0XG4gXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xuIFx0ZXJyID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoYXR0YWNoX3Byb2dfZmQsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbiBcdGlmIChlcnIpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgZm9yIEZEICVkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkIGZvciBGRCAldTogJXNcXG5cJiMzNDssXG4gXHRcdFx0YXR0YWNoX3Byb2dfZmQsIGVycnN0cihlcnIpKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0xMDY1Niw3ICYjNDM7MTA2NTYsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9maW5kX3Byb2dfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIF9fdTMyIGF0dGFjaF9wcm9nX2ZkLCBpbnQgdFxuIFx0YnRmID0gYnRmX2xvYWRfZnJvbV9rZXJuZWwoaW5mby5idGZfaWQsIE5VTEwsIHRva2VuX2ZkKTtcbiBcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdGlmIChlcnIpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gZ2V0IEJURiAlZCBvZiB0aGUgcHJvZ3JhbTogJXNcXG5cJiMzNDssIGluZm8uYnRmX2lkLCBlcnJzdHIoZXJyKSk7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBnZXQgQlRGICV1IG9mIHRoZSBwcm9ncmFtOiAlc1xcblwmIzM0OywgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRlcnIgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgbmFtZSwgQlRGX0tJTkRfRlVOQyk7XG5AQCAtMTA3MzgsNyAmIzQzOzEwNzM4LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqYXR0YWNcbiBcdFx0fVxuIFx0XHRlcnIgPSBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChhdHRhY2hfbmFtZSwgYXR0YWNoX3Byb2dfZmQsIHByb2ctXHUwMDNlb2JqLVx1MDAzZXRva2VuX2ZkKTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBmaW5kIEJQRiBwcm9ncmFtIChGRCAlZCkgQlRGIElEIGZvciAmIzM5OyVzJiMzOTs6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJiMzOTslcyYjMzk7OiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgYXR0YWNoX3Byb2dfZmQsIGF0dGFjaF9uYW1lLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTExMjMzLDcgJiM0MzsxMTIzMyw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfbWFwX29wKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBrZXlfc3osXG4gXHRcdH1cbiBcbiBcdFx0aWYgKHZhbHVlX3N6ICE9IG51bV9jcHUgKiBlbGVtX3N6KSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiB1bmV4cGVjdGVkIHZhbHVlIHNpemUgJXp1IHByb3ZpZGVkIGZvciBwZXItQ1BVIG1hcCwgZXhwZWN0ZWQgJWQgKiAlenUgPSAlemRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXp1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIHZhbHVlX3N6LCBudW1fY3B1LCBlbGVtX3N6LCBudW1fY3B1ICogZWxlbV9zeik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC0xMTc3NCw3ICYjNDM7MTE3NzQsNyBAQCBzdGF0aWMgdm9pZCBnZW5fcHJvYmVfbGVnYWN5X2V2ZW50X25hbWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6LFxuIFx0c3RhdGljIGludCBpbmRleCA9IDA7XG4gXHRpbnQgaTtcbiBcbi1cdHNucHJpbnRmKGJ1ZiwgYnVmX3N6LCBcJiMzNDtsaWJicGZfJXVfJWRfJXNfMHglenhcJiMzNDssIGdldHBpZCgpLFxuJiM0MztcdHNucHJpbnRmKGJ1ZiwgYnVmX3N6LCBcJiMzNDtsaWJicGZfJWRfJWRfJXNfMHglenhcJiMzNDssIGdldHBpZCgpLFxuIFx0XHQgX19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aW5kZXgsIDEpLCBuYW1lLCBvZmZzZXQpO1xuIFxuIFx0Lyogc2FuaXRpemUgbmFtZSBpbiB0aGUgcHJvYmUgbmFtZSAqL1xuQEAgLTEyOTI0LDggJiM0MzsxMjkyNCw4IEBAIHN0YXRpYyBsb25nIGVsZl9maW5kX2Z1bmNfb2Zmc2V0X2Zyb21fYXJjaGl2ZShjb25zdCBjaGFyICphcmNoaXZlX3BhdGgsIGNvbnN0IGNoXG4gXHRyZXQgPSBlbGZfZmluZF9mdW5jX29mZnNldChlbGYsIGZpbGVfbmFtZSwgZnVuY19uYW1lKTtcbiBcdGlmIChyZXQgXHUwMDNlIDApIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7ZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJXMgb2YgJXMgaW4gJXM6IDB4JXggJiM0MzsgMHglbHggPSAweCVseFxcblwmIzM0Oyxcbi1cdFx0XHQgZnVuY19uYW1lLCBmaWxlX25hbWUsIGFyY2hpdmVfcGF0aCwgZW50cnkuZGF0YV9vZmZzZXQsIHJldCxcbi1cdFx0XHQgcmV0ICYjNDM7IGVudHJ5LmRhdGFfb2Zmc2V0KTtcbiYjNDM7XHRcdFx0IGZ1bmNfbmFtZSwgZmlsZV9uYW1lLCBhcmNoaXZlX3BhdGgsIGVudHJ5LmRhdGFfb2Zmc2V0LCAodW5zaWduZWQgbG9uZylyZXQsXG4mIzQzO1x0XHRcdCAodW5zaWduZWQgbG9uZykocmV0ICYjNDM7IGVudHJ5LmRhdGFfb2Zmc2V0KSk7XG4gXHRcdHJldCAmIzQzOz0gZW50cnkuZGF0YV9vZmZzZXQ7XG4gXHR9XG4gXHRlbGZfZW5kKGVsZik7XG5AQCAtMTQ1NzAsNyAmIzQzOzE0NTcwLDcgQEAgcGVyZl9idWZmZXJfX3Byb2Nlc3NfcmVjb3JkKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqZSwgdm9pZCAqY3R4KVxuIFx0XHRicmVhaztcbiBcdH1cbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7dW5rbm93biBwZXJmIHNhbXBsZSB0eXBlICVkXFxuXCYjMzQ7LCBlLVx1MDAzZXR5cGUpO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcXG5cJiMzNDssIGUtXHUwMDNldHlwZSk7XG4gXHRcdHJldHVybiBMSUJCUEZfUEVSRl9FVkVOVF9FUlJPUjtcbiBcdH1cbiBcdHJldHVybiBMSUJCUEZfUEVSRl9FVkVOVF9DT05UO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmMgYi90b29scy9saWIvYnBmL25sYXR0ci5jXG5pbmRleCAwNjY2M2Y5ZWE1ODFmOS4uMDA3ZmUxN2QxN2I0MjkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL25sYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL25sYXR0ci5jXG5AQCAtMTIzLDcgJiM0MzsxMjMsNyBAQCBpbnQgbGliYnBmX25sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwgc3RydWN0IG5sYXR0ciAqaGVhZCxcbiBcbiBcdFx0aWYgKHRiW3R5cGVdKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDtBdHRyaWJ1dGUgb2YgdHlwZSAlI3ggZm91bmQgbXVsdGlwbGUgdGltZXMgaW4gbWVzc2FnZSwgXCYjMzQ7XG4tXHRcdFx0XHRcJiMzNDtwcmV2aW91cyBhdHRyaWJ1dGUgaXMgYmVpbmcgaWdub3JlZC5cXG5cJiMzNDssIHR5cGUpO1xuJiM0MztcdFx0XHRcdFwmIzM0O3ByZXZpb3VzIGF0dHJpYnV0ZSBpcyBiZWluZyBpZ25vcmVkLlxcblwmIzM0OywgKHVuc2lnbmVkKXR5cGUpO1xuIFx0XHR9XG4gXG4gXHRcdHRiW3R5cGVdID0gbmxhO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmMgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5pbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5AQCAtMjE2LDcgJiM0MzsyMTYsNyBAQCBpbnQgX19icGZfY29yZV90eXBlc19hcmVfY29tcGF0KGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsXG4gXHRcdGdvdG8gcmVjdXI7XG4gXHR9XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxcblwmIzM0OyxcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdHlwZSksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMzg0LDcgJiM0MzszODQsNyBAQCBpbnQgYnBmX2NvcmVfcGFyc2Vfc3BlYyhjb25zdCBjaGFyICpwcm9nX25hbWUsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHRcdHJldHVybiBzejtcbiBcdFx0XHRzcGVjLVx1MDAzZWJpdF9vZmZzZXQgJiM0Mzs9IGFjY2Vzc19pZHggKiBzeiAqIDg7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyBmb3IgWyV1XSAlcyAoYXQgaWR4ICVkKSBjYXB0dXJlcyB0eXBlIFslZF0gb2YgdW5leHBlY3RlZCBraW5kICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvIGZvciBbJXVdICVzIChhdCBpZHggJWQpIGNhcHR1cmVzIHR5cGUgWyV1XSBvZiB1bmV4cGVjdGVkIGtpbmQgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRwcm9nX25hbWUsIHJlbG8tXHUwMDNldHlwZV9pZCwgc3BlY19zdHIsIGksIGlkLCBidGZfa2luZF9zdHIodCkpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtNzI1LDcgJiM0Mzs3MjUsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHQqdmFsID0gc3o7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4mIzM5O3QgYmUgYXBwbGllZCB0byBhcnJheSBhY2Nlc3NcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJiMzOTt0IGJlIGFwcGxpZWQgdG8gYXJyYXkgYWNjZXNzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvLVx1MDAzZWtpbmQsIHJlbG8tXHUwMDNlaW5zbl9vZmYgLyA4KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTc0Nyw3ICYjNDM7NzQ3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFx0XHR3aGlsZSAoYml0X29mZiAmIzQzOyBiaXRfc3ogLSBieXRlX29mZiAqIDggXHUwMDNlIGJ5dGVfc3ogKiA4KSB7XG4gXHRcdFx0aWYgKGJ5dGVfc3ogXHUwMDNlPSA4KSB7XG4gXHRcdFx0XHQvKiBiaXRmaWVsZCBjYW4mIzM5O3QgYmUgcmVhZCB3aXRoIDY0LWJpdCByZWFkICovXG4tXHRcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICVkIGF0IGluc24gIyVkIGNhbiYjMzk7dCBiZSBzYXRpc2ZpZWQgZm9yIGJpdGZpZWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJiMzOTt0IGJlIHNhdGlzZmllZCBmb3IgYml0ZmllbGRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdHByb2dfbmFtZSwgcmVsby1cdTAwM2VraW5kLCByZWxvLVx1MDAzZWluc25fb2ZmIC8gOCk7XG4gXHRcdFx0XHRyZXR1cm4gLUUyQklHO1xuIFx0XHRcdH1cbkBAIC05NzEsNyAmIzQzOzk3MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2NvcmVfY2FsY19yZWxvKGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcbiBcdFx0ZXJyID0gMDtcbiBcdH0gZWxzZSBpZiAoZXJyID09IC1FT1BOT1RTVVBQKSB7XG4gXHRcdC8qIEVPUE5PVFNVUFAgbWVhbnMgdW5rbm93bi91bnN1cHBvcnRlZCByZWxvY2F0aW9uICovXG4tXHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bnJlY29nbml6ZWQgQ08tUkUgcmVsb2NhdGlvbiAlcyAoJWQpIGF0IGluc24gIyVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVucmVjb2duaXplZCBDTy1SRSByZWxvY2F0aW9uICVzICgldSkgYXQgaW5zbiAjJXVcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgY29yZV9yZWxvX2tpbmRfc3RyKHJlbG8tXHUwMDNla2luZCksXG4gXHRcdFx0cmVsby1cdTAwM2VraW5kLCByZWxvLVx1MDAzZWluc25fb2ZmIC8gOCk7XG4gXHR9XG5AQCAtMTA2Nyw3ICYjNDM7MTA2Nyw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAocmVzLVx1MDAzZXZhbGlkYXRlIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSAhPSBvcmlnX3ZhbCkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKEFMVS9BTFU2NCkgdmFsdWU6IGdvdCAlZCwgZXhwICVsbHUgLVx1MDAzZSAlbGx1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCxcbiBcdFx0XHRcdGluc25faWR4LCBpbnNuLVx1MDAzZWltbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcbiBcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XG5AQCAtMTA4Myw3ICYjNDM7MTA4Myw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0Y2FzZSBCUEZfU1Q6XG4gXHRjYXNlIEJQRl9TVFg6XG4gXHRcdGlmIChyZXMtXHUwMDNldmFsaWRhdGUgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmICE9IG9yaWdfdmFsKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwmIzM0OyxcbiBcdFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGluc25faWR4LCBpbnNuLVx1MDAzZW9mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcbiBcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE1OSw3ICYjNDM7MTE1OSw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0ZGVmYXVsdDpcbiBcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHRyeWluZyB0byByZWxvY2F0ZSB1bnJlY29nbml6ZWQgaW5zbiAjJWQsIGNvZGU6MHgleCwgc3JjOjB4JXgsIGRzdDoweCV4LCBvZmY6MHgleCwgaW1tOjB4JXhcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXHUwMDNlY29kZSxcbi1cdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdFx0KHVuc2lnbmVkKWluc24tXHUwMDNlc3JjX3JlZywgKHVuc2lnbmVkKWluc24tXHUwMDNlZHN0X3JlZywgKHVuc2lnbmVkKWluc24tXHUwMDNlb2ZmLCAodW5zaWduZWQpaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC0xMzIzLDcgJiM0MzsxMzIzLDcgQEAgaW50IGJwZl9jb3JlX2NhbGNfcmVsb19pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcbiBcdFx0Y29uc3QgY2hhciAqc3BlY19zdHI7XG4gXG4gXHRcdHNwZWNfc3RyID0gYnRmX19uYW1lX2J5X29mZnNldChsb2NhbF9idGYsIHJlbG8tXHUwMDNlYWNjZXNzX3N0cl9vZmYpO1xuLVx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogcGFyc2luZyBbJWRdICVzICVzICYjNDM7ICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogcGFyc2luZyBbJXVdICVzICVzICYjNDM7ICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgbG9jYWxfaWQsIGJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSxcbiBcdFx0XHRzdHJfaXNfZW1wdHkobG9jYWxfbmFtZSkgPyBcJiMzNDtcdTAwM2Nhbm9uXHUwMDNlXCYjMzQ7IDogbG9jYWxfbmFtZSxcbiBcdFx0XHRzcGVjX3N0ciA/OiBcJiMzNDtcdTAwM2M/XHUwMDNlXCYjMzQ7LCBlcnIpO1xuQEAgLTEzNDYsNyAmIzQzOzEzNDYsNyBAQCBpbnQgYnBmX2NvcmVfY2FsY19yZWxvX2luc24oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFxuIFx0LyogbGliYnBmIGRvZXNuJiMzOTt0IHN1cHBvcnQgY2FuZGlkYXRlIHNlYXJjaCBmb3IgYW5vbnltb3VzIHR5cGVzICovXG4gXHRpZiAoc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBcdTAwM2Mlc1x1MDAzZSAoJWQpIHJlbG9jYXRpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBhbm9ueW1vdXMgdHlwZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogXHUwMDNjJXNcdTAwM2UgKCV1KSByZWxvY2F0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXFxuXCYjMzQ7LFxuIFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVx1MDAzZWtpbmQpLCByZWxvLVx1MDAzZWtpbmQpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTY5Nyw3ICYjNDM7MTY5Nyw3IEBAIGludCBfX2JwZl9jb3JlX3R5cGVzX21hdGNoKGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsIGNvbnN0IHN0XG4gXHRcdGdvdG8gcmVjdXI7XG4gXHR9XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwmIzM0O3VuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxcblwmIzM0OyxcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdCksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi91c2R0LmMgYi90b29scy9saWIvYnBmL3VzZHQuY1xuaW5kZXggNTdmYjgyYmI4MWI1ODguLmRiOTQzMmFkYjk2N2I2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi91c2R0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvdXNkdC5jXG5AQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgaW50IHNhbml0eV9jaGVja191c2R0X2VsZihFbGYgKmVsZiwgY29uc3QgY2hhciAqcGF0aClcbiBcdGludCBlbmRpYW5uZXNzO1xuIFxuIFx0aWYgKGVsZl9raW5kKGVsZikgIT0gRUxGX0tfRUxGKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7dXNkdDogdW5yZWNvZ25pemVkIEVMRiBraW5kICVkIGZvciAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIGVsZl9raW5kKGVsZiksIHBhdGgpO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1c2R0OiB1bnJlY29nbml6ZWQgRUxGIGtpbmQgJXUgZm9yICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZWxmX2tpbmQoZWxmKSwgcGF0aCk7XG4gXHRcdHJldHVybiAtRUJBREY7XG4gXHR9XG4gXG5AQCAtNDM4LDggJiM0Mzs0MzgsOSBAQCBzdGF0aWMgaW50IHBhcnNlX2VsZl9zZWdzKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZWxmX3NlZyAqKnNlZ3MsIHNpelxuIFx0XHR9XG4gXG4gXHRcdHByX2RlYnVnKFwmIzM0O3VzZHQ6IGRpc2NvdmVyZWQgUEhEUiAjJWQgaW4gJiMzOTslcyYjMzk7OiB2YWRkciAweCVseCBtZW1zeiAweCVseCBvZmZzZXQgMHglbHggdHlwZSAweCVseCBmbGFncyAweCVseFxcblwmIzM0Oyxcbi1cdFx0XHQgaSwgcGF0aCwgKGxvbmcpcGhkci5wX3ZhZGRyLCAobG9uZylwaGRyLnBfbWVtc3osIChsb25nKXBoZHIucF9vZmZzZXQsXG4tXHRcdFx0IChsb25nKXBoZHIucF90eXBlLCAobG9uZylwaGRyLnBfZmxhZ3MpO1xuJiM0MztcdFx0XHQgaSwgcGF0aCxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nKXBoZHIucF92YWRkciwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX21lbXN6LCAodW5zaWduZWQgbG9uZylwaGRyLnBfb2Zmc2V0LFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpcGhkci5wX3R5cGUsICh1bnNpZ25lZCBsb25nKXBoZHIucF9mbGFncyk7XG4gXHRcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9MT0FEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTcxOSwxNCAmIzQzOzcyMCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRpZiAoIXNlZykge1xuIFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3VzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBwcm9ncmFtIHNlZ21lbnQgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAmIzM5OyVzJiMzOTsgYXQgSVAgMHglbHhcXG5cJiMzNDssXG4tXHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsIHVzZHRfYWJzX2lwKTtcbiYjNDM7XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwKTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdFx0aWYgKCFzZWctXHUwMDNlaXNfZXhlYykge1xuIFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3VzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAmIzM5OyVzJiMzOTsgc2VnbWVudCBbMHglbHgsIDB4JWx4KSBmb3IgJiMzOTslczolcyYjMzk7IGF0IElQIDB4JWx4IGlzIG5vdCBleGVjdXRhYmxlXFxuXCYjMzQ7LFxuLVx0XHRcdFx0cGF0aCwgc2VnLVx1MDAzZXN0YXJ0LCBzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4tXHRcdFx0XHR1c2R0X2Fic19pcCk7XG4mIzQzO1x0XHRcdFx0cGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4mIzQzO1x0XHRcdFx0KHVuc2lnbmVkIGxvbmcpdXNkdF9hYnNfaXApO1xuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0XHQvKiB0cmFuc2xhdGUgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gZmlsZSBvZmZzZXQgKi9cbkBAIC03NjYsNyAmIzQzOzc2Nyw3IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXG4gXHRcdFx0aWYgKCFzZWcpIHtcbiBcdFx0XHRcdGVyciA9IC1FU1JDSDtcbiBcdFx0XHRcdHByX3dhcm4oXCYjMzQ7dXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OyBhdCByZWxhdGl2ZSBJUCAweCVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCB1c2R0X3JlbF9pcCk7XG4mIzQzO1x0XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfcmVsX2lwKTtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4gXG5AQCAtNzc1LDggJiM0Mzs3NzYsMTAgQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCxcbiBcbiBcdFx0cHJfZGVidWcoXCYjMzQ7dXNkdDogcHJvYmUgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAlcyAmIzM5OyVzJiMzOTs6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAmIzM5OyVzJiMzOTsgaW4gc2VnbWVudCBbMHglbHgsIDB4JWx4KSBhdCBvZmZzZXQgMHglbHhcXG5cJiMzNDssXG4gXHRcdFx0IHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/IFwmIzM0O2V4ZWNcJiMzNDsgOiBcJiMzNDtsaWIgXCYjMzQ7LCBwYXRoLFxuLVx0XHRcdCBub3RlLmxvY19hZGRyLCBub3RlLmJhc2VfYWRkciwgdXNkdF9hYnNfaXAsIHVzZHRfcmVsX2lwLCBub3RlLmFyZ3MsXG4tXHRcdFx0IHNlZyA/IHNlZy1cdTAwM2VzdGFydCA6IDAsIHNlZyA/IHNlZy1cdTAwM2VlbmQgOiAwLCBzZWcgPyBzZWctXHUwMDNlb2Zmc2V0IDogMCk7XG4mIzQzO1x0XHRcdCAodW5zaWduZWQgbG9uZylub3RlLmxvY19hZGRyLCAodW5zaWduZWQgbG9uZylub3RlLmJhc2VfYWRkcixcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy1cdTAwM2VzdGFydCA6IDApLCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVx1MDAzZWVuZCA6IDApLFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy1cdTAwM2VvZmZzZXQgOiAwKSk7XG4gXG4gXHRcdC8qIEFkanVzdCBzZW1hcGhvcmUgYWRkcmVzcyB0byBiZSBhIGZpbGUgb2Zmc2V0ICovXG4gXHRcdGlmIChub3RlLnNlbWFfYWRkcikge1xuQEAgLTc5MSwxNCAmIzQzOzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRcdGlmICghc2VnKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwmIzM0O3VzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBsb2FkYWJsZSBzZWdtZW50IHdpdGggc2VtYXBob3JlIG9mICYjMzk7JXM6JXMmIzM5OyBpbiAmIzM5OyVzJiMzOTsgYXQgMHglbHhcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgbm90ZS5zZW1hX2FkZHIpO1xuJiM0MztcdFx0XHRcdFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkcik7XG4gXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChzZWctXHUwMDNlaXNfZXhlYykge1xuIFx0XHRcdFx0ZXJyID0gLUVTUkNIO1xuIFx0XHRcdFx0cHJfd2FybihcJiMzNDt1c2R0OiBtYXRjaGVkIEVMRiBiaW5hcnkgJiMzOTslcyYjMzk7IHNlZ21lbnQgWzB4JWx4LCAweCVseF0gZm9yIHNlbWFwaG9yZSBvZiAmIzM5OyVzOiVzJiMzOTsgYXQgMHglbHggaXMgZXhlY3V0YWJsZVxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0cGF0aCwgc2VnLVx1MDAzZXN0YXJ0LCBzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4tXHRcdFx0XHRcdG5vdGUuc2VtYV9hZGRyKTtcbiYjNDM7XHRcdFx0XHRcdHBhdGgsICh1bnNpZ25lZCBsb25nKXNlZy1cdTAwM2VzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZWVuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xuIFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHRcdH1cbiBcbkBAIC04MDYsOCAmIzQzOzgwOSw4IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXG4gXG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7dXNkdDogc2VtYSAgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAlcyAmIzM5OyVzJiMzOTs6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgMHglbHgpIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gYXQgb2Zmc2V0IDB4JWx4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/IFwmIzM0O2V4ZWNcJiMzNDsgOiBcJiMzNDtsaWIgXCYjMzQ7LFxuLVx0XHRcdFx0IHBhdGgsIG5vdGUuc2VtYV9hZGRyLCBub3RlLmJhc2VfYWRkciwgdXNkdF9zZW1hX29mZixcbi1cdFx0XHRcdCBzZWctXHUwMDNlc3RhcnQsIHNlZy1cdTAwM2VlbmQsIHNlZy1cdTAwM2VvZmZzZXQpO1xuJiM0MztcdFx0XHRcdCBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsICh1bnNpZ25lZCBsb25nKXVzZHRfc2VtYV9vZmYsXG4mIzQzO1x0XHRcdFx0ICh1bnNpZ25lZCBsb25nKXNlZy1cdTAwM2VzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZWVuZCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZW9mZnNldCk7XG4gXHRcdH1cbiBcbiBcdFx0LyogUmVjb3JkIGFkanVzdGVkIGFkZHJlc3NlcyBhbmQgb2Zmc2V0cyBhbmQgcGFyc2UgVVNEVCBzcGVjICovXG5AQCAtMTExNyw3ICYjNDM7MTEyMCw3IEBAIHN0cnVjdCBicGZfbGluayAqdXNkdF9tYW5hZ2VyX2F0dGFjaF91c2R0KHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgY29uc3Qgc3RydWN0XG4gXHRcdFx0XHQgICAgICAgIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHByX3dhcm4oXCYjMzQ7dXNkdDogZmFpbGVkIHRvIG1hcCBJUCAweCVseCB0byBzcGVjICMlZCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OzogJXNcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHRhcmdldC1cdTAwM2VhYnNfaXAsIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKXRhcmdldC1cdTAwM2VhYnNfaXAsIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbiBcdFx0XHRcdFx0cGF0aCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTA6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBmb3JtYXQgc3BlY2lmaWVycyBpbiBsb2dnaW5nIGZ1bmN0aW9ucyAocHJfd2FybiwgcHJfZGVidWcpIGFuZCBvbmUgc3NjYW5mIGNhbGwgaW4gdXNlci1zcGFjZSBsaWJicGYgY29kZSAodG9vbHMvbGliL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzYWFhNTE5YzIxMmE4N2Q4ZDRkZjJlNDljNTM2NzhhYzY5ZDljYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAxMDo1NjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jCmluZGV4IDgyM2JjZTg5NTE3OGRhLi5iZjZhNjgxMTg0MDUxMyAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jCkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyBpbnQgYnRmX3BhcnNlX3R5cGVfc2VjKHN0cnVjdCBidGYgKmJ0ZikKIAkJaWYgKHR5cGVfc2l6ZSAmbHQ7IDApCiAJCQlyZXR1cm4gdHlwZV9zaXplOwogCQlpZiAobmV4dF90eXBlICYjNDM7IHR5cGVfc2l6ZSAmZ3Q7IGVuZF90eXBlKSB7Ci0JCQlwcl93YXJuKCYjMzQ7QlRGIHR5cGUgWyVkXSBpcyBtYWxmb3JtZWRcbiYjMzQ7LCBidGYtJmd0O3N0YXJ0X2lkICYjNDM7IGJ0Zi0mZ3Q7bnJfdHlwZXMpOwomIzQzOwkJCXByX3dhcm4oJiMzNDtCVEYgdHlwZSBbJXVdIGlzIG1hbGZvcm1lZFxuJiMzNDssIGJ0Zi0mZ3Q7c3RhcnRfaWQgJiM0MzsgYnRmLSZndDtucl90eXBlcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xNDI0LDcgJiM0MzsxNDI0LDcgQEAgc3RhdGljIGludCBidGZfZmluZF9lbGZfc2VjdGlvbnMoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidGZfZWxmX3NlY3MKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzaC5zaF90eXBlICE9IFNIVF9QUk9HQklUUykgewotCQkJcHJfd2FybigmIzM0O3VuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICglZCkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIHNlY3Rpb24gdHlwZSAoJXUpIG9mIHNlY3Rpb24oJWQsICVzKSBmcm9tICVzXG4mIzM0OywKIAkJCQlzaC5zaF90eXBlLCBpZHgsIG5hbWUsIHBhdGgpOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTQ4NTQsNyAmIzQzOzQ4NTQsNyBAQCBzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIG0xLSZndDt0eXBlLCBtMi0mZ3Q7dHlwZSwgZGVwdGggLSAxKSkgewogCQkJCWlmICh0MS0mZ3Q7bmFtZV9vZmYpIHsKLQkJCQkJcHJfZGVidWcoJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0lZCB2bGVuPSVkIGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJCQkJcHJfZGVidWcoJiMzNDslcyAmIzM5OyVzJiMzOTsgc2l6ZT0ldSB2bGVuPSV1IGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTtcbiYjMzQ7LAogCQkJCQkJIGsxID09IEJURl9LSU5EX1NUUlVDVCA/ICYjMzQ7U1RSVUNUJiMzNDsgOiAmIzM0O1VOSU9OJiMzNDssCiAJCQkJCQkgYnRmX19uYW1lX2J5X29mZnNldChkLSZndDtidGYsIHQxLSZndDtuYW1lX29mZiksCiAJCQkJCQkgdDEtJmd0O3NpemUsIGJ0Zl92bGVuKHQxKSwgaWQxLCBpZDIsIGksCkBAIC01MTA0LDcgJiM0Mzs1MTA0LDcgQEAgc3RhdGljIGludCBidGZfZGVkdXBfaXNfZXF1aXYoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgY2FuZF9pZCwKIAkJCWVxID0gYnRmX2RlZHVwX2lzX2VxdWl2KGQsIGNhbmRfbS0mZ3Q7dHlwZSwgY2Fub25fbS0mZ3Q7dHlwZSk7CiAJCQlpZiAoZXEgJmx0Oz0gMCkgewogCQkJCWlmIChjYW5kX3R5cGUtJmd0O25hbWVfb2ZmKSB7Ci0JCQkJCXByX2RlYnVnKCYjMzQ7JXMgJiMzOTslcyYjMzk7IHNpemU9JWQgdmxlbj0lZCBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTs6ICVkXG4mIzM0OywKJiM0MzsJCQkJCXByX2RlYnVnKCYjMzQ7JXMgJiMzOTslcyYjMzk7IHNpemU9JXUgdmxlbj0ldSBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAmIzM5OyVzJiMzOTs6ICVkXG4mIzM0OywKIAkJCQkJCSBjYW5kX2tpbmQgPT0gQlRGX0tJTkRfU1RSVUNUID8gJiMzNDtTVFJVQ1QmIzM0OyA6ICYjMzQ7VU5JT04mIzM0OywKIAkJCQkJCSBidGZfX25hbWVfYnlfb2Zmc2V0KGQtJmd0O2J0ZiwgY2FuZF90eXBlLSZndDtuYW1lX29mZiksCiAJCQkJCQkgY2FuZF90eXBlLSZndDtzaXplLCB2bGVuLCBjYW5kX2lkLCBjYW5vbl9pZCwgaSwKQEAgLTYwNjksNyAmIzQzOzYwNjksNyBAQCBzdGF0aWMgaW50IGJ0Zl9hZGRfZGlzdGlsbGVkX3R5cGVzKHN0cnVjdCBidGZfZGlzdGlsbCAqZGlzdCkKIAkJCWVyciA9IGJ0Zl9hZGRfdHlwZSgmYW1wO2Rpc3QtJmd0O3BpcGUsIHQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBraW5kIHdoZW4gYWRkaW5nIGJhc2UgdHlwZSAmIzM5OyVzJiMzOTtbJXVdIG9mIGtpbmQgWyV1XSB0byBkaXN0aWxsZWQgYmFzZSBCVEYuXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBraW5kIHdoZW4gYWRkaW5nIGJhc2UgdHlwZSAmIzM5OyVzJiMzOTtbJWRdIG9mIGtpbmQgWyVkXSB0byBkaXN0aWxsZWQgYmFzZSBCVEYuXG4mIzM0OywKIAkJCQluYW1lLCBpLCBraW5kKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMKaW5kZXggY2MxYmE2NWJiNmM1YWMuLjEyM2M0NDhmMjBjNzQ2IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9idGZfZHVtcC5jCkBAIC0xNzc2LDcgJiM0MzsxNzc2LDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfYml0ZmllbGRfdmFsdWUoc3RydWN0IGJ0Zl9kdW1wICpkLAogCiAJLyogTWF4aW11bSBzdXBwb3J0ZWQgYml0ZmllbGQgc2l6ZSBpcyA2NCBiaXRzICovCiAJaWYgKHQtJmd0O3NpemUgJmd0OyA4KSB7Ci0JCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJWRcbiYjMzQ7LCB0LSZndDtzaXplKTsKJiM0MzsJCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJXVcbiYjMzQ7LCB0LSZndDtzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjUxLDcgJiM0MzsyMjUxLDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfZW51bV92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsCiAJCSp2YWx1ZSA9IGlzX3NpZ25lZCA/ICooX19zOCAqKWRhdGEgOiAqKF9fdTggKilkYXRhOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgotCQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXG4mIzM0OywgdC0mZ3Q7c2l6ZSwgaWQpOwomIzQzOwkJcHJfd2FybigmIzM0O3VuZXhwZWN0ZWQgc2l6ZSAldSBmb3IgZW51bSwgaWQ6WyV1XVxuJiMzNDssIHQtJmd0O3NpemUsIGlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGZfcmVsb2NhdGUuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMKaW5kZXggNTNkMWYzNTQxYmNlNjkuLmRmNWZhNGJkODdkNjlhIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMKQEAgLTI4MCw3ICYjNDM7MjgwLDcgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfbWFwX2Rpc3RpbGxlZF9iYXNlKHN0cnVjdCBidGZfcmVsb2NhdGUgKnIpCiAJCSAgICAgY21wX2J0Zl9uYW1lX3NpemUoJmFtcDtiYXNlX2luZm8sIGRpc3RfaW5mbykgPT0gMDsKIAkJICAgICBkaXN0X2luZm8mIzQzOyYjNDM7KSB7CiAJCQlpZiAoIWRpc3RfaW5mby0mZ3Q7aWQgfHwgZGlzdF9pbmZvLSZndDtpZCAmZ3Q7PSByLSZndDtucl9kaXN0X2Jhc2VfdHlwZXMpIHsKLQkJCQlwcl93YXJuKCYjMzQ7YmFzZSBCVEYgaWQgWyVkXSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFslZF1cbiYjMzQ7LAomIzQzOwkJCQlwcl93YXJuKCYjMzQ7YmFzZSBCVEYgaWQgWyV1XSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFsldV1cbiYjMzQ7LAogCQkJCQlpZCwgZGlzdF9pbmZvLSZndDtpZCk7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CkBAIC0zNjgsNyAmIzQzOzM2OCw3IEBAIHN0YXRpYyBpbnQgYnRmX3JlbG9jYXRlX21hcF9kaXN0aWxsZWRfYmFzZShzdHJ1Y3QgYnRmX3JlbG9jYXRlICpyKQogCQkJY29udGludWU7CiAJCWRpc3RfdCA9IGJ0Zl90eXBlX2J5X2lkKHItJmd0O2Rpc3RfYmFzZV9idGYsIGlkKTsKIAkJbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoci0mZ3Q7ZGlzdF9iYXNlX2J0ZiwgZGlzdF90LSZndDtuYW1lX29mZik7Ci0JCXByX3dhcm4oJiMzNDtkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAmIzM5OyVzJiMzOTsgWyVkXSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAmIzM5OyVzJiMzOTsgWyV1XSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXG4mIzM0OywKIAkJCW5hbWUsIGlkKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC0zOTcsMTEgJiM0MzszOTcsMTEgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfdmFsaWRhdGVfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcikKIAkJY2FzZSBCVEZfS0lORF9GV0Q6CiAJCQlpZiAodC0mZ3Q7bmFtZV9vZmYpCiAJCQkJYnJlYWs7Ci0JCQlwcl93YXJuKCYjMzQ7dHlwZSBbJWRdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDt0eXBlIFsldV0sIGtpbmQgWyVkXSBpcyBpbnZhbGlkIGZvciBkaXN0aWxsZWQgYmFzZSBCVEY7IGl0IGlzIGFub255bW91c1xuJiMzNDssCiAJCQkJaSwga2luZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZGVmYXVsdDoKLQkJCXByX3dhcm4oJiMzNDt0eXBlIFslZF0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDt0eXBlIFsldV0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cbiYjMzQ7LAogCQkJCWksIGtpbmQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jCmluZGV4IDI5NWRiZGEyNDU4MDcxLi5mZTEzNmQwMjU5Njc5ZiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9lbGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2VsZi5jCkBAIC0zNTQsNyAmIzQzOzM1NCw3IEBAIGxvbmcgZWxmX2ZpbmRfZnVuY19vZmZzZXQoRWxmICplbGYsIGNvbnN0IGNoYXIgKmJpbmFyeV9wYXRoLCBjb25zdCBjaGFyICpuYW1lKQogCiAJaWYgKHJldCAmZ3Q7IDApIHsKIAkJcHJfZGVidWcoJiMzNDtlbGY6IHN5bWJvbCBhZGRyZXNzIG1hdGNoIGZvciAmIzM5OyVzJiMzOTsgaW4gJiMzOTslcyYjMzk7OiAweCVseFxuJiMzNDssIG5hbWUsIGJpbmFyeV9wYXRoLAotCQkJIHJldCk7CiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKXJldCk7CiAJfSBlbHNlIHsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlwcl93YXJuKCYjMzQ7ZWxmOiAmIzM5OyVzJiMzOTsgaXMgMCBpbiBzeW10YWIgZm9yICYjMzk7JXMmIzM5OzogJXNcbiYjMzQ7LCBuYW1lLCBiaW5hcnlfcGF0aCwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmMKaW5kZXggZDc5Njk1ZjAxYzg3ZjMuLmM3ZjJkMmFjN2JiMzVmIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwpAQCAtMzg0LDcgJiM0MzszODQsNyBAQCBpbnQgYnBmX2dlbl9fZmluaXNoKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBucl9wcm9ncywgaW50IG5yX21hcHMpCiAJaW50IGk7CiAKIAlpZiAobnJfcHJvZ3MgJmx0OyBnZW4tJmd0O25yX3Byb2dzIHx8IG5yX21hcHMgIT0gZ2VuLSZndDtucl9tYXBzKSB7Ci0JCXByX3dhcm4oJiMzNDtucl9wcm9ncyAlZC8lZCBucl9tYXBzICVkLyVkIG1pc21hdGNoXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtucl9wcm9ncyAlZC8ldSBucl9tYXBzICVkLyV1IG1pc21hdGNoXG4mIzM0OywKIAkJCW5yX3Byb2dzLCBnZW4tJmd0O25yX3Byb2dzLCBucl9tYXBzLCBnZW4tJmd0O25yX21hcHMpOwogCQlnZW4tJmd0O2Vycm9yID0gLUVGQVVMVDsKIAkJcmV0dXJuIGdlbi0mZ3Q7ZXJyb3I7CkBAIC00ODgsNyAmIzQzOzQ4OCw3IEBAIHZvaWQgYnBmX2dlbl9fbG9hZF9idGYoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3Qgdm9pZCAqYnRmX3Jhd19kYXRhLAogCiAJYXR0ci5idGZfc2l6ZSA9IHRndF9lbmRpYW4oYnRmX3Jhd19zaXplKTsKIAlidGZfbG9hZF9hdHRyID0gYWRkX2RhdGEoZ2VuLCAmYW1wO2F0dHIsIGF0dHJfc2l6ZSk7Ci0JcHJfZGVidWcoJiMzNDtnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogbG9hZF9idGY6IG9mZiAlZCBzaXplICV1LCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxuJiMzNDssCiAJCSBidGZfZGF0YSwgYnRmX3Jhd19zaXplLCBidGZfbG9hZF9hdHRyLCBhdHRyX3NpemUpOwogCiAJLyogcG9wdWxhdGUgdW5pb24gYnBmX2F0dHIgd2l0aCB1c2VyIHByb3ZpZGVkIGxvZyBkZXRhaWxzICovCkBAIC01MzQsNyAmIzQzOzUzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX2NyZWF0ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLAogCWF0dHIuYnRmX3ZhbHVlX3R5cGVfaWQgPSB0Z3RfZW5kaWFuKG1hcF9hdHRyLSZndDtidGZfdmFsdWVfdHlwZV9pZCk7CiAKIAltYXBfY3JlYXRlX2F0dHIgPSBhZGRfZGF0YShnZW4sICZhbXA7YXR0ciwgYXR0cl9zaXplKTsKLQlwcl9kZWJ1ZygmIzM0O2dlbjogbWFwX2NyZWF0ZTogJXMgaWR4ICVkIHR5cGUgJWQgdmFsdWVfdHlwZV9pZCAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogbWFwX2NyZWF0ZTogJXMgaWR4ICVkIHR5cGUgJXUgdmFsdWVfdHlwZV9pZCAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcbiYjMzQ7LAogCQkgbWFwX25hbWUsIG1hcF9pZHgsIG1hcF90eXBlLCBtYXBfYXR0ci0mZ3Q7YnRmX3ZhbHVlX3R5cGVfaWQsCiAJCSBtYXBfY3JlYXRlX2F0dHIsIGF0dHJfc2l6ZSk7CiAKQEAgLTEwODIsNyAmIzQzOzEwODIsNyBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLAogCWxpY2Vuc2Vfb2ZmID0gYWRkX2RhdGEoZ2VuLCBsaWNlbnNlLCBzdHJsZW4obGljZW5zZSkgJiM0MzsgMSk7CiAJLyogYWRkIGluc25zIHRvIGJsb2Igb2YgYnl0ZXMgKi8KIAlpbnNuc19vZmYgPSBhZGRfZGF0YShnZW4sIGluc25zLCBpbnNuX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pKTsKLQlwcl9kZWJ1ZygmIzM0O2dlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICVkIGluc24gb2ZmICVkIGluc25zX2NudCAlemQgbGljZW5zZSBvZmYgJWRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICV1IGluc24gb2ZmICVkIGluc25zX2NudCAlenUgbGljZW5zZSBvZmYgJWRcbiYjMzQ7LAogCQkgcHJvZ19pZHgsIHByb2dfdHlwZSwgaW5zbnNfb2ZmLCBpbnNuX2NudCwgbGljZW5zZV9vZmYpOwogCiAJLyogY29udmVydCBibG9iIGluc25zIHRvIHRhcmdldCBlbmRpYW5uZXNzICovCkBAIC0xMTA1LDIxICYjNDM7MTEwNSwyMSBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLAogCWF0dHIuZnVuY19pbmZvX3JlY19zaXplID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2Z1bmNfaW5mb19yZWNfc2l6ZSk7CiAJYXR0ci5mdW5jX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2Z1bmNfaW5mb19jbnQpOwogCWZ1bmNfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLSZndDtmdW5jX2luZm8sIGZ1bmNfaW5mb190b3Rfc3opOwotCXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxuJiMzNDssCiYjNDM7CXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAldSByZWMgc2l6ZSAldVxuJiMzNDssCiAJCSBmdW5jX2luZm8sIGxvYWRfYXR0ci0mZ3Q7ZnVuY19pbmZvX2NudCwKIAkJIGxvYWRfYXR0ci0mZ3Q7ZnVuY19pbmZvX3JlY19zaXplKTsKIAogCWF0dHIubGluZV9pbmZvX3JlY19zaXplID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2xpbmVfaW5mb19yZWNfc2l6ZSk7CiAJYXR0ci5saW5lX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItJmd0O2xpbmVfaW5mb19jbnQpOwogCWxpbmVfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLSZndDtsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opOwotCXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxuJiMzNDssCiYjNDM7CXByX2RlYnVnKCYjMzQ7Z2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAldSByZWMgc2l6ZSAldVxuJiMzNDssCiAJCSBsaW5lX2luZm8sIGxvYWRfYXR0ci0mZ3Q7bGluZV9pbmZvX2NudCwKIAkJIGxvYWRfYXR0ci0mZ3Q7bGluZV9pbmZvX3JlY19zaXplKTsKIAogCWF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gdGd0X2VuZGlhbigoX191MzIpc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7CiAJYXR0ci5jb3JlX3JlbG9fY250ID0gdGd0X2VuZGlhbihnZW4tJmd0O2NvcmVfcmVsb19jbnQpOwogCWNvcmVfcmVsb3MgPSBhZGRfZGF0YShnZW4sIGdlbi0mZ3Q7Y29yZV9yZWxvcywgY29yZV9yZWxvX3RvdF9zeik7Ci0JcHJfZGVidWcoJiMzNDtnZW46IHByb2dfbG9hZDogY29yZV9yZWxvczogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlemRcbiYjMzQ7LAomIzQzOwlwcl9kZWJ1ZygmIzM0O2dlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxuJiMzNDssCiAJCSBjb3JlX3JlbG9zLCBnZW4tJmd0O2NvcmVfcmVsb19jbnQsCiAJCSBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKTsKIApAQCAtMTIzNCw3ICYjNDM7MTIzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsCiAJfQogCiAJbWFwX3VwZGF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCAmYW1wO2F0dHIsIGF0dHJfc2l6ZSk7Ci0JcHJfZGVidWcoJiMzNDtnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXG4mIzM0OywKJiM0MzsJcHJfZGVidWcoJiMzNDtnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXG4mIzM0OywKIAkJIG1hcF9pZHgsIHZhbHVlLCB2YWx1ZV9zaXplLCBtYXBfdXBkYXRlX2F0dHIsIGF0dHJfc2l6ZSk7CiAJbW92ZV9ibG9iMmJsb2IoZ2VuLCBhdHRyX2ZpZWxkKG1hcF91cGRhdGVfYXR0ciwgbWFwX2ZkKSwgNCwKIAkJICAgICAgIGJsb2JfZmRfYXJyYXlfb2ZmKGdlbiwgbWFwX2lkeCkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggMTM2ODc1MmFhMTNjMzkuLjcxNjIxNDYyODBhODBlIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTE0ODYsNyAmIzQzOzE0ODYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3RydWN0X29wc19tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNlY19uYW1lLAogCQkgICAgICAgdHlwZS0mZ3Q7c2l6ZSk7CiAJCXN0X29wcy0mZ3Q7dHlwZV9pZCA9IHR5cGVfaWQ7CiAKLQkJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIGluaXQ6IHN0cnVjdCAlcyh0eXBlX2lkPSV1KSAlcyBmb3VuZCBhdCBvZmZzZXQgJXVcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIGluaXQ6IHN0cnVjdCAlcyh0eXBlX2lkPSVkKSAlcyBmb3VuZCBhdCBvZmZzZXQgJXVcbiYjMzQ7LAogCQkJIHRuYW1lLCB0eXBlX2lkLCB2YXJfbmFtZSwgdnNpLSZndDtvZmZzZXQpOwogCX0KIApAQCAtMjYyNiw3ICYjNDM7MjYyNiw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLAogCiAJCQl0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgbS0mZ3Q7dHlwZSk7CiAJCQlpZiAoIXQpIHsKLQkJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozoga2V5IHR5cGUgWyVkXSBub3QgZm91bmQuXG4mIzM0OywKJiM0MzsJCQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtleSB0eXBlIFsldV0gbm90IGZvdW5kLlxuJiMzNDssCiAJCQkJCW1hcF9uYW1lLCBtLSZndDt0eXBlKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTI2NjYsNyAmIzQzOzI2NjYsNyBAQCBpbnQgcGFyc2VfYnRmX21hcF9kZWYoY29uc3QgY2hhciAqbWFwX25hbWUsIHN0cnVjdCBidGYgKmJ0ZiwKIAogCQkJdCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tJmd0O3R5cGUpOwogCQkJaWYgKCF0KSB7Ci0JCQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHZhbHVlIHR5cGUgWyVkXSBub3QgZm91bmQuXG4mIzM0OywKJiM0MzsJCQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHZhbHVlIHR5cGUgWyV1XSBub3QgZm91bmQuXG4mIzM0OywKIAkJCQkJbWFwX25hbWUsIG0tJmd0O3R5cGUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQpAQCAtMjcyMCw3ICYjNDM7MjcyMCw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLAogCQkJbWFwX2RlZi0mZ3Q7dmFsdWVfc2l6ZSA9IDQ7CiAJCQl0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgbS0mZ3Q7dHlwZSk7CiAJCQlpZiAoIXQpIHsKLQkJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogJXMgdHlwZSBbJWRdIG5vdCBmb3VuZC5cbiYjMzQ7LAomIzQzOwkJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogJXMgdHlwZSBbJXVdIG5vdCBmb3VuZC5cbiYjMzQ7LAogCQkJCQltYXBfbmFtZSwgZGVzYywgbS0mZ3Q7dHlwZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CkBAIC0zNDc2LDcgJiM0MzszNDc2LDcgQEAgc3RhdGljIGludCBidGZfZml4dXBfZGF0YXNlYyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnRmICpidGYsCiAKIAkJdmFyX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdF92YXItJmd0O25hbWVfb2ZmKTsKIAkJaWYgKCF2YXJfbmFtZSkgewotCQkJcHJfZGVidWcoJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMmIzM5O3MgbWVtYmVyICMlZFxuJiMzNDssCiYjNDM7CQkJcHJfZGVidWcoJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMmIzM5O3MgbWVtYmVyICMldVxuJiMzNDssCiAJCQkJIHNlY19uYW1lLCBpKTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CkBAIC0zOTcxLDcgJiM0MzszOTcxLDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQlpZiAoIWRhdGEpCiAJCQlyZXR1cm4gLUxJQkJQRl9FUlJOT19fRk9STUFUOwogCi0JCXByX2RlYnVnKCYjMzQ7ZWxmOiBzZWN0aW9uKCVkKSAlcywgc2l6ZSAlbGQsIGxpbmsgJWQsIGZsYWdzICVseCwgdHlwZT0lZFxuJiMzNDssCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O2VsZjogc2VjdGlvbiglZCkgJXMsIHNpemUgJWx1LCBsaW5rICVkLCBmbGFncyAlbHgsIHR5cGU9JWRcbiYjMzQ7LAogCQkJIGlkeCwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGF0YS0mZ3Q7ZF9zaXplLAogCQkJIChpbnQpc2gtJmd0O3NoX2xpbmssICh1bnNpZ25lZCBsb25nKXNoLSZndDtzaF9mbGFncywKIAkJCSAoaW50KXNoLSZndDtzaF90eXBlKTsKQEAgLTQ0OTQsNyAmIzQzOzQ0OTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCiAJCQlleHQtJmd0O2tjZmcuZGF0YV9vZmYgPSByb3VuZHVwKG9mZiwgZXh0LSZndDtrY2ZnLmFsaWduKTsKIAkJCW9mZiA9IGV4dC0mZ3Q7a2NmZy5kYXRhX29mZiAmIzQzOyBleHQtJmd0O2tjZmcuc3o7Ci0JCQlwcl9kZWJ1ZygmIzM0O2V4dGVybiAoa2NmZykgIyVkOiBzeW1ib2wgJWQsIG9mZiAldSwgbmFtZSAlc1xuJiMzNDssCiYjNDM7CQkJcHJfZGVidWcoJiMzNDtleHRlcm4gKGtjZmcpICMlZDogc3ltYm9sICVkLCBvZmYgJWQsIG5hbWUgJXNcbiYjMzQ7LAogCQkJCSBpLCBleHQtJmd0O3N5bV9pZHgsIGV4dC0mZ3Q7a2NmZy5kYXRhX29mZiwgZXh0LSZndDtuYW1lKTsKIAkJfQogCQlzZWMtJmd0O3NpemUgPSBvZmY7CkBAIC00NjI2LDcgJiM0Mzs0NjI2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCiAJaWYgKCFpc19jYWxsX2luc24oaW5zbikgJmFtcDsmYW1wOyAhaXNfbGRpbW02NF9pbnNuKGluc24pKSB7Ci0JCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogaW52YWxpZCByZWxvIGFnYWluc3QgJiMzOTslcyYjMzk7IGZvciBpbnNuc1slZF0uY29kZSAweCV4XG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogaW52YWxpZCByZWxvIGFnYWluc3QgJiMzOTslcyYjMzk7IGZvciBpbnNuc1sldV0uY29kZSAweCV4XG4mIzM0OywKIAkJCXByb2ctJmd0O25hbWUsIHN5bV9uYW1lLCBpbnNuX2lkeCwgaW5zbi0mZ3Q7Y29kZSk7CiAJCXJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQzsKIAl9CkBAIC00NzQ5LDcgJiM0Mzs0NzQ5LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKIAkJCSAgICBtYXAtJmd0O3NlY19pZHggIT0gc3ltLSZndDtzdF9zaG5keCB8fAogCQkJICAgIG1hcC0mZ3Q7c2VjX29mZnNldCAhPSBzeW0tJmd0O3N0X3ZhbHVlKQogCQkJCWNvbnRpbnVlOwotCQkJcHJfZGVidWcoJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogZm91bmQgbWFwICV6ZCAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gIyV1XG4mIzM0OywKJiM0MzsJCQlwcl9kZWJ1ZygmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBtYXAgJXp1ICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcbiYjMzQ7LAogCQkJCSBwcm9nLSZndDtuYW1lLCBtYXBfaWR4LCBtYXAtJmd0O25hbWUsIG1hcC0mZ3Q7c2VjX2lkeCwKIAkJCQkgbWFwLSZndDtzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7CiAJCQlicmVhazsKQEAgLTQ3NzYsNyAmIzQzOzQ3NzYsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19yZWNvcmRfcmVsb2Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCQltYXAgPSAmYW1wO29iai0mZ3Q7bWFwc1ttYXBfaWR4XTsKIAkJaWYgKG1hcC0mZ3Q7bGliYnBmX3R5cGUgIT0gdHlwZSB8fCBtYXAtJmd0O3NlY19pZHggIT0gc3ltLSZndDtzdF9zaG5keCkKIAkJCWNvbnRpbnVlOwotCQlwcl9kZWJ1ZygmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmb3VuZCBkYXRhIG1hcCAlemQgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XG4mIzM0OywKJiM0MzsJCXByX2RlYnVnKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IGZvdW5kIGRhdGEgbWFwICV6dSAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gJXVcbiYjMzQ7LAogCQkJIHByb2ctJmd0O25hbWUsIG1hcF9pZHgsIG1hcC0mZ3Q7bmFtZSwgbWFwLSZndDtzZWNfaWR4LAogCQkJIG1hcC0mZ3Q7c2VjX29mZnNldCwgaW5zbl9pZHgpOwogCQlicmVhazsKQEAgLTQ5ODUsNyAmIzQzOzQ5ODUsNyBAQCBzdGF0aWMgaW50IGJwZl9nZXRfbWFwX2luZm9fZnJvbV9mZGluZm8oaW50IGZkLCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvKQogCQkJaW5mby0mZ3Q7dmFsdWVfc2l6ZSA9IHZhbDsKIAkJZWxzZSBpZiAoc3NjYW5mKGJ1ZmYsICYjMzQ7bWF4X2VudHJpZXM6XHQldSYjMzQ7LCAmYW1wO3ZhbCkgPT0gMSkKIAkJCWluZm8tJmd0O21heF9lbnRyaWVzID0gdmFsOwotCQllbHNlIGlmIChzc2NhbmYoYnVmZiwgJiMzNDttYXBfZmxhZ3M6XHQlaSYjMzQ7LCAmYW1wO3ZhbCkgPT0gMSkKJiM0MzsJCWVsc2UgaWYgKHNzY2FuZihidWZmLCAmIzM0O21hcF9mbGFnczpcdCV4JiMzNDssICZhbXA7dmFsKSA9PSAxKQogCQkJaW5mby0mZ3Q7bWFwX2ZsYWdzID0gdmFsOwogCX0KIApAQCAtNTUyMSwxMSAmIzQzOzU1MjEsMTEgQEAgc3RhdGljIGludCBpbml0X21hcF9pbl9tYXBfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJfQogCQlpZiAoZXJyKSB7CiAJCQllcnIgPSAtZXJybm87Ci0JCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJWRdIHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWQ6ICVzXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJXVdIHRvIG1hcCAmIzM5OyVzJiMzOTsgZmQ9JWQ6ICVzXG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIGksIHRhcmdfbWFwLSZndDtuYW1lLCBmZCwgZXJyc3RyKGVycikpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyVkXSBzZXQgdG8gbWFwICYjMzk7JXMmIzM5OyBmZD0lZFxuJiMzNDssCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyV1XSBzZXQgdG8gbWFwICYjMzk7JXMmIzM5OyBmZD0lZFxuJiMzNDssCiAJCQkgbWFwLSZndDtuYW1lLCBpLCB0YXJnX21hcC0mZ3Q7bmFtZSwgZmQpOwogCX0KIApAQCAtNTU1NCwxMSAmIzQzOzU1NTQsMTEgQEAgc3RhdGljIGludCBpbml0X3Byb2dfYXJyYXlfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtJmd0O2ZkLCAmYW1wO2ksICZhbXA7ZmQsIDApOwogCQlpZiAoZXJyKSB7CiAJCQllcnIgPSAtZXJybm87Ci0JCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJWRdIHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkOiAlc1xuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyV1XSB0byBwcm9nICYjMzk7JXMmIzM5OyBmZD0lZDogJXNcbiYjMzQ7LAogCQkJCW1hcC0mZ3Q7bmFtZSwgaSwgdGFyZ19wcm9nLSZndDtuYW1lLCBmZCwgZXJyc3RyKGVycikpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTs6IHNsb3QgWyVkXSBzZXQgdG8gcHJvZyAmIzM5OyVzJiMzOTsgZmQ9JWRcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDttYXAgJiMzOTslcyYjMzk7OiBzbG90IFsldV0gc2V0IHRvIHByb2cgJiMzOTslcyYjMzk7IGZkPSVkXG4mIzM0OywKIAkJCSBtYXAtJmd0O25hbWUsIGksIHRhcmdfcHJvZy0mZ3Q7bmFtZSwgZmQpOwogCX0KIApAQCAtNTc4OCw3ICYjNDM7NTc4OCw3IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsCiAJCWlmIChzdHJuY21wKGxvY2FsX25hbWUsIHRhcmdfbmFtZSwgbG9jYWxfZXNzZW50X2xlbikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCXByX2RlYnVnKCYjMzQ7Q08tUkUgcmVsb2NhdGluZyBbJWRdICVzICVzOiBmb3VuZCB0YXJnZXQgY2FuZGlkYXRlIFslZF0gJXMgJXMgaW4gWyVzXVxuJiMzNDssCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0NPLVJFIHJlbG9jYXRpbmcgWyV1XSAlcyAlczogZm91bmQgdGFyZ2V0IGNhbmRpZGF0ZSBbJWRdICVzICVzIGluIFslc11cbiYjMzQ7LAogCQkJIGxvY2FsX2NhbmQtJmd0O2lkLCBidGZfa2luZF9zdHIobG9jYWxfdCksCiAJCQkgbG9jYWxfbmFtZSwgaSwgYnRmX2tpbmRfc3RyKHQpLCB0YXJnX25hbWUsCiAJCQkgdGFyZ19idGZfbmFtZSk7CkBAIC01ODQ4LDcgJiM0Mzs1ODQ4LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJCWNvbnRpbnVlOyAvKiBleHBlY3RlZCByYWNlOiBCVEYgd2FzIHVubG9hZGVkICovCiAJCQllcnIgPSAtZXJybm87Ci0JCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBGRDogJXNcbiYjMzQ7LCBpZCwgZXJyc3RyKGVycikpOwomIzQzOwkJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gZ2V0IEJURiBvYmplY3QgIyV1IEZEOiAlc1xuJiMzNDssIGlkLCBlcnJzdHIoZXJyKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTU4NjEsNyAmIzQzOzU4NjEsNyBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJZXJyID0gYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChmZCwgJmFtcDtpbmZvLCAmYW1wO2xlbik7CiAJCWlmIChlcnIpIHsKIAkJCWVyciA9IC1lcnJubzsKLQkJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gZ2V0IEJURiBvYmplY3QgIyVkIGluZm86ICVzXG4mIzM0OywgaWQsIGVycnN0cihlcnIpKTsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBpbmZvOiAlc1xuJiMzNDssIGlkLCBlcnJzdHIoZXJyKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC01ODc0LDcgJiM0Mzs1ODc0LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLSZndDtidGZfdm1saW51eCk7CiAJCWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKIAkJaWYgKGVycikgewotCQkJcHJfd2FybigmIzM0O2ZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJiMzOTtzIEJURiBvYmplY3QgIyVkOiAlc1xuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O2ZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJiMzOTtzIEJURiBvYmplY3QgIyV1OiAlc1xuJiMzNDssCiAJCQkJbmFtZSwgaWQsIGVycnN0cihlcnIpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MDY3LDcgJiM0Mzs2MDY3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9yZXNvbHZlX3JlbG8oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCSAgICAhaGFzaG1hcF9fZmluZChjYW5kX2NhY2hlLCBsb2NhbF9pZCwgJmFtcDtjYW5kcykpIHsKIAkJY2FuZHMgPSBicGZfY29yZV9maW5kX2NhbmRzKHByb2ctJmd0O29iaiwgbG9jYWxfYnRmLCBsb2NhbF9pZCk7CiAJCWlmIChJU19FUlIoY2FuZHMpKSB7Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB0YXJnZXQgY2FuZGlkYXRlIHNlYXJjaCBmYWlsZWQgZm9yIFslZF0gJXMgJXM6ICVsZFxuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJXVdICVzICVzOiAlbGRcbiYjMzQ7LAogCQkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGxvY2FsX2lkLCBidGZfa2luZF9zdHIobG9jYWxfdHlwZSksCiAJCQkJbG9jYWxfbmFtZSwgUFRSX0VSUihjYW5kcykpOwogCQkJcmV0dXJuIFBUUl9FUlIoY2FuZHMpOwpAQCAtNjEyNyw3ICYjNDM7NjEyNyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aCkKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcHJfZGVidWcoJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xuJiMzNDssIHNlY19uYW1lLCBzZWMtJmd0O251bV9pbmZvKTsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7c2VjICYjMzk7JXMmIzM5OzogZm91bmQgJXUgQ08tUkUgcmVsb2NhdGlvbnNcbiYjMzQ7LCBzZWNfbmFtZSwgc2VjLSZndDtudW1faW5mbyk7CiAKIAkJZm9yX2VhY2hfYnRmX2V4dF9yZWMoc2VnLCBzZWMsIGksIHJlYykgewogCQkJaWYgKHJlYy0mZ3Q7aW5zbl9vZmYgJSBCUEZfSU5TTl9TWikKQEAgLTYxODEsNyAmIzQzOzYxODEsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9jb3JlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRhcmdfYnRmX3BhdGgpCiAKIAkJCWVyciA9IGJwZl9jb3JlX3BhdGNoX2luc24ocHJvZy0mZ3Q7bmFtZSwgaW5zbiwgaW5zbl9pZHgsIHJlYywgaSwgJmFtcDt0YXJnX3Jlcyk7CiAJCQlpZiAoZXJyKSB7Ci0JCQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogZmFpbGVkIHRvIHBhdGNoIGluc24gIyV1OiAlc1xuJiMzNDssCiYjNDM7CQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IGZhaWxlZCB0byBwYXRjaCBpbnNuICMlZDogJXNcbiYjMzQ7LAogCQkJCQlwcm9nLSZndDtuYW1lLCBpLCBpbnNuX2lkeCwgZXJyc3RyKGVycikpOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtNjM0Niw3ICYjNDM7NjM0Niw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2p0X21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjCiAJCWdvdG8gZXJyX2Nsb3NlOwogCX0KIAlpZiAoc3ltX29mZiAmIzQzOyBqdF9zaXplICZndDsgb2JqLSZndDtqdW1wdGFibGVzX2RhdGFfc3opIHsKLQkJcHJfd2FybigmIzM0O21hcCAmIzM5Oy5qdW1wdGFibGVzJiMzOTs6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6ZCwgdHJ5aW5nIHRvIGFjY2VzcyAlZFxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7Lmp1bXB0YWJsZXMmIzM5OzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXp1LCB0cnlpbmcgdG8gYWNjZXNzICV1XG4mIzM0OywKIAkJCW9iai0mZ3Q7anVtcHRhYmxlc19kYXRhX3N6LCBzeW1fb2ZmICYjNDM7IGp0X3NpemUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9jbG9zZTsKQEAgLTYzODEsNyAmIzQzOzYzODEsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1YwogCQkgKi8KIAkJaWYgKGluc25fb2ZmICZndDsgVUlOVDMyX01BWCkgewogCQkJcHJfd2FybigmIzM0O21hcCAmIzM5Oy5qdW1wdGFibGVzJiMzOTs6IGludmFsaWQganVtcCB0YWJsZSB2YWx1ZSAweCVsbHggYXQgb2Zmc2V0ICV1XG4mIzM0OywKLQkJCQkobG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICYjNDM7IGkgKiBqdF9lbnRyeV9zaXplKTsKJiM0MzsJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylqdFtpXSwgc3ltX29mZiAmIzQzOyBpICoganRfZW50cnlfc2l6ZSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KQEAgLTY1MTcsNyAmIzQzOzY1MTcsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKIAkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBiYWQgcmVsbyB0eXBlICVkXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBiYWQgcmVsbyB0eXBlICV1XG4mIzM0OywKIAkJCQlwcm9nLSZndDtuYW1lLCBpLCByZWxvLSZndDt0eXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02Nzk3LDcgJiM0Mzs2Nzk3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NfY29kZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1haW5fcHJvZywKIAkJCSAqLwogCQkJY29udGludWU7CiAJCWlmIChyZWxvICZhbXA7JmFtcDsgcmVsby0mZ3Q7dHlwZSAhPSBSRUxPX0NBTEwgJmFtcDsmYW1wOyByZWxvLSZndDt0eXBlICE9IFJFTE9fU1VCUFJPR19BRERSKSB7Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICVkXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICV1XG4mIzM0OywKIAkJCQlwcm9nLSZndDtuYW1lLCBpbnNuX2lkeCwgcmVsby0mZ3Q7dHlwZSk7CiAJCQlyZXR1cm4gLUxJQkJQRl9FUlJOT19fUkVMT0M7CiAJCX0KQEAgLTc1ODcsNyAmIzQzOzc1ODcsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCX0KIAkJbmFtZSA9IGVsZl9zeW1fc3RyKG9iaiwgc3ltLSZndDtzdF9uYW1lKSA/OiAmIzM0OyZsdDs/Jmd0OyYjMzQ7OwogCi0JCXByX2RlYnVnKCYjMzQ7Lm1hcHMgcmVsbyAjJWQ6IGZvciAlemQgdmFsdWUgJXpkIHJlbC0mZ3Q7cl9vZmZzZXQgJXp1IG5hbWUgJWQgKCYjMzk7JXMmIzM5OylcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDsubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlenUgcmVsLSZndDtyX29mZnNldCAlenUgbmFtZSAldSAoJiMzOTslcyYjMzk7KVxuJiMzNDssCiAJCQkgaSwgKHNzaXplX3QpKHJlbC0mZ3Q7cl9pbmZvICZndDsmZ3Q7IDMyKSwgKHNpemVfdClzeW0tJmd0O3N0X3ZhbHVlLAogCQkJIChzaXplX3QpcmVsLSZndDtyX29mZnNldCwgc3ltLSZndDtzdF9uYW1lLCBuYW1lKTsKIApAQCAtNzY3OCw3ICYjNDM7NzY3OCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9tYXBfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKIAkJfQogCQltYXAtJmd0O2luaXRfc2xvdHNbbW9mZl0gPSBpc19tYXBfaW5fbWFwID8gKHZvaWQgKil0YXJnX21hcCA6ICh2b2lkICopdGFyZ19wcm9nOwogCi0JCXByX2RlYnVnKCYjMzQ7Lm1hcHMgcmVsbyAjJWQ6IG1hcCAmIzM5OyVzJiMzOTsgc2xvdCBbJWRdIHBvaW50cyB0byAlcyAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDsubWFwcyByZWxvICMlZDogbWFwICYjMzk7JXMmIzM5OyBzbG90IFsldV0gcG9pbnRzIHRvICVzICYjMzk7JXMmIzM5O1xuJiMzNDssCiAJCQkgaSwgbWFwLSZndDtuYW1lLCBtb2ZmLCB0eXBlLCBuYW1lKTsKIAl9CiAKQEAgLTg3MzgsNyAmIzQzOzg3MzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3Jlc29sdmVfa3N5bV92YXJfYnRmX2lkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCWxvY2FsX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KG9iai0mZ3Q7YnRmLCBsb2NhbF90eXBlLSZndDtuYW1lX29mZik7CiAJCXRhcmdfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0YXJnX3R5cGUtJmd0O25hbWVfb2ZmKTsKIAotCQlwcl93YXJuKCYjMzQ7ZXh0ZXJuICh2YXIga3N5bSkgJiMzOTslcyYjMzk7OiBpbmNvbXBhdGlibGUgdHlwZXMsIGV4cGVjdGVkIFslZF0gJXMgJXMsIGJ1dCBrZXJuZWwgaGFzIFslZF0gJXMgJXNcbiYjMzQ7LAomIzQzOwkJcHJfd2FybigmIzM0O2V4dGVybiAodmFyIGtzeW0pICYjMzk7JXMmIzM5OzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJXVdICVzICVzLCBidXQga2VybmVsIGhhcyBbJXVdICVzICVzXG4mIzM0OywKIAkJCWV4dC0mZ3Q7bmFtZSwgbG9jYWxfdHlwZV9pZCwKIAkJCWJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSwgbG9jYWxfbmFtZSwgdGFyZ190eXBlX2lkLAogCQkJYnRmX2tpbmRfc3RyKHRhcmdfdHlwZSksIHRhcmdfbmFtZSk7CkBAIC04OTE1LDcgJiM0Mzs4OTE1LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZXNvbHZlX2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJCXByX2RlYnVnKCYjMzQ7ZXh0ZXJuIChrY2ZnKSAmIzM5OyVzJiMzOTs6IHNldCB0byAweCVsbHhcbiYjMzQ7LAotCQkJCSBleHQtJmd0O25hbWUsIChsb25nIGxvbmcpdmFsdWUpOwomIzQzOwkJCQkgZXh0LSZndDtuYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTsKIAkJfSBlbHNlIHsKIAkJCXByX3dhcm4oJiMzNDtleHRlcm4gJiMzOTslcyYjMzk7OiB1bnJlY29nbml6ZWQgZXh0ZXJuIGtpbmRcbiYjMzQ7LCBleHQtJmd0O25hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDQ5NCw3ICYjNDM7MTA0OTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3Rfc3Rfb3BzX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCW1vZmYgPSByZWwtJmd0O3Jfb2Zmc2V0IC0gbWFwLSZndDtzZWNfb2Zmc2V0OwogCQlzaGRyX2lkeCA9IHN5bS0mZ3Q7c3Rfc2huZHg7CiAJCXN0X29wcyA9IG1hcC0mZ3Q7c3Rfb3BzOwotCQlwcl9kZWJ1ZygmIzM0O3N0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLSZndDtyX29mZnNldCAlenUgbWFwLSZndDtzZWNfb2Zmc2V0ICV6dSBuYW1lICVkIChcJiMzOTslc1wmIzM5OylcbiYjMzQ7LAomIzQzOwkJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIHJlbG9jICVzOiBmb3IgJWxsZCB2YWx1ZSAlbGxkIHNoZHJfaWR4ICV1IHJlbC0mZ3Q7cl9vZmZzZXQgJXp1IG1hcC0mZ3Q7c2VjX29mZnNldCAlenUgbmFtZSAldSAoXCYjMzk7JXNcJiMzOTspXG4mIzM0OywKIAkJCSBtYXAtJmd0O25hbWUsCiAJCQkgKGxvbmcgbG9uZykocmVsLSZndDtyX2luZm8gJmd0OyZndDsgMzIpLAogCQkJIChsb25nIGxvbmcpc3ltLSZndDtzdF92YWx1ZSwKQEAgLTEwNjQzLDcgJiM0MzsxMDY0Myw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0CiAJbWVtc2V0KCZhbXA7aW5mbywgMCwgaW5mb19sZW4pOwogCWVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGF0dGFjaF9wcm9nX2ZkLCAmYW1wO2luZm8sICZhbXA7aW5mb19sZW4pOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybigmIzM0O2ZhaWxlZCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZCBmb3IgRkQgJWQ6ICVzXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtmYWlsZWQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgZm9yIEZEICV1OiAlc1xuJiMzNDssCiAJCQlhdHRhY2hfcHJvZ19mZCwgZXJyc3RyKGVycikpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEwNjU2LDcgJiM0MzsxMDY1Niw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0CiAJYnRmID0gYnRmX2xvYWRfZnJvbV9rZXJuZWwoaW5mby5idGZfaWQsIE5VTEwsIHRva2VuX2ZkKTsKIAllcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7CiAJaWYgKGVycikgewotCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGdldCBCVEYgJWQgb2YgdGhlIHByb2dyYW06ICVzXG4mIzM0OywgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTsKJiM0MzsJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gZ2V0IEJURiAldSBvZiB0aGUgcHJvZ3JhbTogJXNcbiYjMzQ7LCBpbmZvLmJ0Zl9pZCwgZXJyc3RyKGVycikpOwogCQlnb3RvIG91dDsKIAl9CiAJZXJyID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIG5hbWUsIEJURl9LSU5EX0ZVTkMpOwpAQCAtMTA3MzgsNyAmIzQzOzEwNzM4LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqYXR0YWMKIAkJfQogCQllcnIgPSBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChhdHRhY2hfbmFtZSwgYXR0YWNoX3Byb2dfZmQsIHByb2ctJmd0O29iai0mZ3Q7dG9rZW5fZmQpOwogCQlpZiAoZXJyICZsdDsgMCkgewotCQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJWQpIEJURiBJRCBmb3IgJiMzOTslcyYjMzk7OiAlc1xuJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJiMzOTslcyYjMzk7OiAlc1xuJiMzNDssCiAJCQkJcHJvZy0mZ3Q7bmFtZSwgYXR0YWNoX3Byb2dfZmQsIGF0dGFjaF9uYW1lLCBlcnJzdHIoZXJyKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xMTIzMyw3ICYjNDM7MTEyMzMsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX21hcF9vcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzaXplX3Qga2V5X3N6LAogCQl9CiAKIAkJaWYgKHZhbHVlX3N6ICE9IG51bV9jcHUgKiBlbGVtX3N6KSB7Ci0JCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXpkXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXp1XG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIHZhbHVlX3N6LCBudW1fY3B1LCBlbGVtX3N6LCBudW1fY3B1ICogZWxlbV9zeik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTE3NzQsNyAmIzQzOzExNzc0LDcgQEAgc3RhdGljIHZvaWQgZ2VuX3Byb2JlX2xlZ2FjeV9ldmVudF9uYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeiwKIAlzdGF0aWMgaW50IGluZGV4ID0gMDsKIAlpbnQgaTsKIAotCXNucHJpbnRmKGJ1ZiwgYnVmX3N6LCAmIzM0O2xpYmJwZl8ldV8lZF8lc18weCV6eCYjMzQ7LCBnZXRwaWQoKSwKJiM0MzsJc25wcmludGYoYnVmLCBidWZfc3osICYjMzQ7bGliYnBmXyVkXyVkXyVzXzB4JXp4JiMzNDssIGdldHBpZCgpLAogCQkgX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtpbmRleCwgMSksIG5hbWUsIG9mZnNldCk7CiAKIAkvKiBzYW5pdGl6ZSBuYW1lIGluIHRoZSBwcm9iZSBuYW1lICovCkBAIC0xMjkyNCw4ICYjNDM7MTI5MjQsOCBAQCBzdGF0aWMgbG9uZyBlbGZfZmluZF9mdW5jX29mZnNldF9mcm9tX2FyY2hpdmUoY29uc3QgY2hhciAqYXJjaGl2ZV9wYXRoLCBjb25zdCBjaAogCXJldCA9IGVsZl9maW5kX2Z1bmNfb2Zmc2V0KGVsZiwgZmlsZV9uYW1lLCBmdW5jX25hbWUpOwogCWlmIChyZXQgJmd0OyAwKSB7CiAJCXByX2RlYnVnKCYjMzQ7ZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJXMgb2YgJXMgaW4gJXM6IDB4JXggJiM0MzsgMHglbHggPSAweCVseFxuJiMzNDssCi0JCQkgZnVuY19uYW1lLCBmaWxlX25hbWUsIGFyY2hpdmVfcGF0aCwgZW50cnkuZGF0YV9vZmZzZXQsIHJldCwKLQkJCSByZXQgJiM0MzsgZW50cnkuZGF0YV9vZmZzZXQpOwomIzQzOwkJCSBmdW5jX25hbWUsIGZpbGVfbmFtZSwgYXJjaGl2ZV9wYXRoLCBlbnRyeS5kYXRhX29mZnNldCwgKHVuc2lnbmVkIGxvbmcpcmV0LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZykocmV0ICYjNDM7IGVudHJ5LmRhdGFfb2Zmc2V0KSk7CiAJCXJldCAmIzQzOz0gZW50cnkuZGF0YV9vZmZzZXQ7CiAJfQogCWVsZl9lbmQoZWxmKTsKQEAgLTE0NTcwLDcgJiM0MzsxNDU3MCw3IEBAIHBlcmZfYnVmZmVyX19wcm9jZXNzX3JlY29yZChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmUsIHZvaWQgKmN0eCkKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDt1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJWRcbiYjMzQ7LCBlLSZndDt0eXBlKTsKJiM0MzsJCXByX3dhcm4oJiMzNDt1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcbiYjMzQ7LCBlLSZndDt0eXBlKTsKIAkJcmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0VSUk9SOwogCX0KIAlyZXR1cm4gTElCQlBGX1BFUkZfRVZFTlRfQ09OVDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmMgYi90b29scy9saWIvYnBmL25sYXR0ci5jCmluZGV4IDA2NjYzZjllYTU4MWY5Li4wMDdmZTE3ZDE3YjQyOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9ubGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL25sYXR0ci5jCkBAIC0xMjMsNyAmIzQzOzEyMyw3IEBAIGludCBsaWJicGZfbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLCBzdHJ1Y3QgbmxhdHRyICpoZWFkLAogCiAJCWlmICh0Ylt0eXBlXSkgewogCQkJcHJfd2FybigmIzM0O0F0dHJpYnV0ZSBvZiB0eXBlICUjeCBmb3VuZCBtdWx0aXBsZSB0aW1lcyBpbiBtZXNzYWdlLCAmIzM0OwotCQkJCSYjMzQ7cHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXG4mIzM0OywgdHlwZSk7CiYjNDM7CQkJCSYjMzQ7cHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXG4mIzM0OywgKHVuc2lnbmVkKXR5cGUpOwogCQl9CiAKIAkJdGJbdHlwZV0gPSBubGE7CmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL3JlbG9fY29yZS5jIGIvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuYwppbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuYwpAQCAtMjE2LDcgJiM0MzsyMTYsNyBAQCBpbnQgX19icGZfY29yZV90eXBlc19hcmVfY29tcGF0KGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsCiAJCWdvdG8gcmVjdXI7CiAJfQogCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7dW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cbiYjMzQ7LAogCQkJYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLCBsb2NhbF9pZCwgdGFyZ19pZCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTM4NCw3ICYjNDM7Mzg0LDcgQEAgaW50IGJwZl9jb3JlX3BhcnNlX3NwZWMoY29uc3QgY2hhciAqcHJvZ19uYW1lLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJCQkJcmV0dXJuIHN6OwogCQkJc3BlYy0mZ3Q7Yml0X29mZnNldCAmIzQzOz0gYWNjZXNzX2lkeCAqIHN6ICogODsKIAkJfSBlbHNlIHsKLQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyBmb3IgWyV1XSAlcyAoYXQgaWR4ICVkKSBjYXB0dXJlcyB0eXBlIFslZF0gb2YgdW5leHBlY3RlZCBraW5kICVzXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJXVdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xuJiMzNDssCiAJCQkJcHJvZ19uYW1lLCByZWxvLSZndDt0eXBlX2lkLCBzcGVjX3N0ciwgaSwgaWQsIGJ0Zl9raW5kX3N0cih0KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzI1LDcgJiM0Mzs3MjUsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkqdmFsID0gc3o7CiAJCX0gZWxzZSB7Ci0JCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJWQgYXQgaW5zbiAjJWQgY2FuJiMzOTt0IGJlIGFwcGxpZWQgdG8gYXJyYXkgYWNjZXNzXG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJiMzOTt0IGJlIGFwcGxpZWQgdG8gYXJyYXkgYWNjZXNzXG4mIzM0OywKIAkJCQlwcm9nX25hbWUsIHJlbG8tJmd0O2tpbmQsIHJlbG8tJmd0O2luc25fb2ZmIC8gOCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzQ3LDcgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsCiAJCXdoaWxlIChiaXRfb2ZmICYjNDM7IGJpdF9zeiAtIGJ5dGVfb2ZmICogOCAmZ3Q7IGJ5dGVfc3ogKiA4KSB7CiAJCQlpZiAoYnl0ZV9zeiAmZ3Q7PSA4KSB7CiAJCQkJLyogYml0ZmllbGQgY2FuJiMzOTt0IGJlIHJlYWQgd2l0aCA2NC1iaXQgcmVhZCAqLwotCQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4mIzM5O3QgYmUgc2F0aXNmaWVkIGZvciBiaXRmaWVsZFxuJiMzNDssCiYjNDM7CQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAldSBhdCBpbnNuICMldSBjYW4mIzM5O3QgYmUgc2F0aXNmaWVkIGZvciBiaXRmaWVsZFxuJiMzNDssCiAJCQkJCXByb2dfbmFtZSwgcmVsby0mZ3Q7a2luZCwgcmVsby0mZ3Q7aW5zbl9vZmYgLyA4KTsKIAkJCQlyZXR1cm4gLUUyQklHOwogCQkJfQpAQCAtOTcxLDcgJiM0Mzs5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsCiAJCWVyciA9IDA7CiAJfSBlbHNlIGlmIChlcnIgPT0gLUVPUE5PVFNVUFApIHsKIAkJLyogRU9QTk9UU1VQUCBtZWFucyB1bmtub3duL3Vuc3VwcG9ydGVkIHJlbG9jYXRpb24gKi8KLQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogdW5yZWNvZ25pemVkIENPLVJFIHJlbG9jYXRpb24gJXMgKCVkKSBhdCBpbnNuICMlZFxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bnJlY29nbml6ZWQgQ08tUkUgcmVsb2NhdGlvbiAlcyAoJXUpIGF0IGluc24gIyV1XG4mIzM0OywKIAkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLSZndDtraW5kKSwKIAkJCXJlbG8tJmd0O2tpbmQsIHJlbG8tJmd0O2luc25fb2ZmIC8gOCk7CiAJfQpAQCAtMTA2Nyw3ICYjNDM7MTA2Nyw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfSykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAocmVzLSZndDt2YWxpZGF0ZSAmYW1wOyZhbXA7IGluc24tJmd0O2ltbSAhPSBvcmlnX3ZhbCkgewotCQkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoQUxVL0FMVTY0KSB2YWx1ZTogZ290ICV1LCBleHAgJWxsdSAtJmd0OyAlbGx1XG4mIzM0OywKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC0mZ3Q7ICVsbHVcbiYjMzQ7LAogCQkJCXByb2dfbmFtZSwgcmVsb19pZHgsCiAJCQkJaW5zbl9pZHgsIGluc24tJmd0O2ltbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKW5ld192YWwpOwpAQCAtMTA4Myw3ICYjNDM7MTA4Myw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWNhc2UgQlBGX1NUOgogCWNhc2UgQlBGX1NUWDoKIAkJaWYgKHJlcy0mZ3Q7dmFsaWRhdGUgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgIT0gb3JpZ192YWwpIHsKLQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC0mZ3Q7ICVsbHVcbiYjMzQ7LAomIzQzOwkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC0mZ3Q7ICVsbHVcbiYjMzQ7LAogCQkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGluc25faWR4LCBpbnNuLSZndDtvZmYsICh1bnNpZ25lZCBsb25nIGxvbmcpb3JpZ192YWwsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfdmFsKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE1OSw3ICYjNDM7MTE1OSw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWRlZmF1bHQ6CiAJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6IHRyeWluZyB0byByZWxvY2F0ZSB1bnJlY29nbml6ZWQgaW5zbiAjJWQsIGNvZGU6MHgleCwgc3JjOjB4JXgsIGRzdDoweCV4LCBvZmY6MHgleCwgaW1tOjB4JXhcbiYjMzQ7LAogCQkJcHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tJmd0O2NvZGUsCi0JCQlpbnNuLSZndDtzcmNfcmVnLCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsIGluc24tJmd0O2ltbSk7CiYjNDM7CQkJKHVuc2lnbmVkKWluc24tJmd0O3NyY19yZWcsICh1bnNpZ25lZClpbnNuLSZndDtkc3RfcmVnLCAodW5zaWduZWQpaW5zbi0mZ3Q7b2ZmLCAodW5zaWduZWQpaW5zbi0mZ3Q7aW1tKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzIzLDcgJiM0MzsxMzIzLDcgQEAgaW50IGJwZl9jb3JlX2NhbGNfcmVsb19pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwKIAkJY29uc3QgY2hhciAqc3BlY19zdHI7CiAKIAkJc3BlY19zdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGxvY2FsX2J0ZiwgcmVsby0mZ3Q7YWNjZXNzX3N0cl9vZmYpOwotCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBwYXJzaW5nIFslZF0gJXMgJXMgJiM0MzsgJXMgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHJlbG8gIyVkOiBwYXJzaW5nIFsldV0gJXMgJXMgJiM0MzsgJXMgZmFpbGVkOiAlZFxuJiMzNDssCiAJCQlwcm9nX25hbWUsIHJlbG9faWR4LCBsb2NhbF9pZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLAogCQkJc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpID8gJiMzNDsmbHQ7YW5vbiZndDsmIzM0OyA6IGxvY2FsX25hbWUsCiAJCQlzcGVjX3N0ciA/OiAmIzM0OyZsdDs/Jmd0OyYjMzQ7LCBlcnIpOwpAQCAtMTM0Niw3ICYjNDM7MTM0Niw3IEBAIGludCBicGZfY29yZV9jYWxjX3JlbG9faW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsCiAKIAkvKiBsaWJicGYgZG9lc24mIzM5O3Qgc3VwcG9ydCBjYW5kaWRhdGUgc2VhcmNoIGZvciBhbm9ueW1vdXMgdHlwZXMgKi8KIAlpZiAoc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpKSB7Ci0JCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6ICZsdDslcyZndDsgKCVkKSByZWxvY2F0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogcmVsbyAjJWQ6ICZsdDslcyZndDsgKCV1KSByZWxvY2F0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXG4mIzM0OywKIAkJCXByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLSZndDtraW5kKSwgcmVsby0mZ3Q7a2luZCk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNjk3LDcgJiM0MzsxNjk3LDcgQEAgaW50IF9fYnBmX2NvcmVfdHlwZXNfbWF0Y2goY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCwgY29uc3Qgc3QKIAkJZ290byByZWN1cjsKIAl9CiAJZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0O3VuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXG4mIzM0OywKJiM0MzsJCXByX3dhcm4oJiMzNDt1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxuJiMzNDssCiAJCQlidGZfa2luZF9zdHIobG9jYWxfdCksIGxvY2FsX2lkLCB0YXJnX2lkKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi91c2R0LmMgYi90b29scy9saWIvYnBmL3VzZHQuYwppbmRleCA1N2ZiODJiYjgxYjU4OC4uZGI5NDMyYWRiOTY3YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvdXNkdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvdXNkdC5jCkBAIC0zMjcsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyBpbnQgc2FuaXR5X2NoZWNrX3VzZHRfZWxmKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoKQogCWludCBlbmRpYW5uZXNzOwogCiAJaWYgKGVsZl9raW5kKGVsZikgIT0gRUxGX0tfRUxGKSB7Ci0JCXByX3dhcm4oJiMzNDt1c2R0OiB1bnJlY29nbml6ZWQgRUxGIGtpbmQgJWQgZm9yICYjMzk7JXMmIzM5O1xuJiMzNDssIGVsZl9raW5kKGVsZiksIHBhdGgpOwomIzQzOwkJcHJfd2FybigmIzM0O3VzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAldSBmb3IgJiMzOTslcyYjMzk7XG4mIzM0OywgZWxmX2tpbmQoZWxmKSwgcGF0aCk7CiAJCXJldHVybiAtRUJBREY7CiAJfQogCkBAIC00MzgsOCAmIzQzOzQzOCw5IEBAIHN0YXRpYyBpbnQgcGFyc2VfZWxmX3NlZ3MoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBlbGZfc2VnICoqc2Vncywgc2l6CiAJCX0KIAogCQlwcl9kZWJ1ZygmIzM0O3VzZHQ6IGRpc2NvdmVyZWQgUEhEUiAjJWQgaW4gJiMzOTslcyYjMzk7OiB2YWRkciAweCVseCBtZW1zeiAweCVseCBvZmZzZXQgMHglbHggdHlwZSAweCVseCBmbGFncyAweCVseFxuJiMzNDssCi0JCQkgaSwgcGF0aCwgKGxvbmcpcGhkci5wX3ZhZGRyLCAobG9uZylwaGRyLnBfbWVtc3osIChsb25nKXBoZHIucF9vZmZzZXQsCi0JCQkgKGxvbmcpcGhkci5wX3R5cGUsIChsb25nKXBoZHIucF9mbGFncyk7CiYjNDM7CQkJIGksIHBhdGgsCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKXBoZHIucF92YWRkciwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX21lbXN6LCAodW5zaWduZWQgbG9uZylwaGRyLnBfb2Zmc2V0LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZylwaGRyLnBfdHlwZSwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX2ZsYWdzKTsKIAkJaWYgKHBoZHIucF90eXBlICE9IFBUX0xPQUQpCiAJCQljb250aW51ZTsKIApAQCAtNzE5LDE0ICYjNDM7NzIwLDE0IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsCiAJCWlmICghc2VnKSB7CiAJCQllcnIgPSAtRVNSQ0g7CiAJCQlwcl93YXJuKCYjMzQ7dXNkdDogZmFpbGVkIHRvIGZpbmQgRUxGIHByb2dyYW0gc2VnbWVudCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OyBhdCBJUCAweCVseFxuJiMzNDssCi0JCQkJdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCB1c2R0X2Fic19pcCk7CiYjNDM7CQkJCXVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgKHVuc2lnbmVkIGxvbmcpdXNkdF9hYnNfaXApOwogCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCWlmICghc2VnLSZndDtpc19leGVjKSB7CiAJCQllcnIgPSAtRVNSQ0g7CiAJCQlwcl93YXJuKCYjMzQ7dXNkdDogbWF0Y2hlZCBFTEYgYmluYXJ5ICYjMzk7JXMmIzM5OyBzZWdtZW50IFsweCVseCwgMHglbHgpIGZvciAmIzM5OyVzOiVzJiMzOTsgYXQgSVAgMHglbHggaXMgbm90IGV4ZWN1dGFibGVcbiYjMzQ7LAotCQkJCXBhdGgsIHNlZy0mZ3Q7c3RhcnQsIHNlZy0mZ3Q7ZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsCi0JCQkJdXNkdF9hYnNfaXApOwomIzQzOwkJCQlwYXRoLCAodW5zaWduZWQgbG9uZylzZWctJmd0O3N0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctJmd0O2VuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLAomIzQzOwkJCQkodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJLyogdHJhbnNsYXRlIGZyb20gdmlydHVhbCBhZGRyZXNzIHRvIGZpbGUgb2Zmc2V0ICovCkBAIC03NjYsNyAmIzQzOzc2Nyw3IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsCiAJCQlpZiAoIXNlZykgewogCQkJCWVyciA9IC1FU1JDSDsKIAkJCQlwcl93YXJuKCYjMzQ7dXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJiMzOTslczolcyYjMzk7IGluICYjMzk7JXMmIzM5OyBhdCByZWxhdGl2ZSBJUCAweCVseFxuJiMzNDssCi0JCQkJCXVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9yZWxfaXApOwomIzQzOwkJCQkJdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCk7CiAJCQkJZ290byBlcnJfb3V0OwogCQkJfQogCkBAIC03NzUsOCAmIzQzOzc3NiwxMCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLAogCiAJCXByX2RlYnVnKCYjMzQ7dXNkdDogcHJvYmUgZm9yICYjMzk7JXM6JXMmIzM5OyBpbiAlcyAmIzM5OyVzJiMzOTs6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAmIzM5OyVzJiMzOTsgaW4gc2VnbWVudCBbMHglbHgsIDB4JWx4KSBhdCBvZmZzZXQgMHglbHhcbiYjMzQ7LAogCQkJIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/ICYjMzQ7ZXhlYyYjMzQ7IDogJiMzNDtsaWIgJiMzNDssIHBhdGgsCi0JCQkgbm90ZS5sb2NfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfYWJzX2lwLCB1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLAotCQkJIHNlZyA/IHNlZy0mZ3Q7c3RhcnQgOiAwLCBzZWcgPyBzZWctJmd0O2VuZCA6IDAsIHNlZyA/IHNlZy0mZ3Q7b2Zmc2V0IDogMCk7CiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKW5vdGUubG9jX2FkZHIsICh1bnNpZ25lZCBsb25nKW5vdGUuYmFzZV9hZGRyLAomIzQzOwkJCSAodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCwgKHVuc2lnbmVkIGxvbmcpdXNkdF9yZWxfaXAsIG5vdGUuYXJncywKJiM0MzsJCQkgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy0mZ3Q7c3RhcnQgOiAwKSwgKHVuc2lnbmVkIGxvbmcpKHNlZyA/IHNlZy0mZ3Q7ZW5kIDogMCksCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctJmd0O29mZnNldCA6IDApKTsKIAogCQkvKiBBZGp1c3Qgc2VtYXBob3JlIGFkZHJlc3MgdG8gYmUgYSBmaWxlIG9mZnNldCAqLwogCQlpZiAobm90ZS5zZW1hX2FkZHIpIHsKQEAgLTc5MSwxNCAmIzQzOzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLAogCQkJaWYgKCFzZWcpIHsKIAkJCQllcnIgPSAtRVNSQ0g7CiAJCQkJcHJfd2FybigmIzM0O3VzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBsb2FkYWJsZSBzZWdtZW50IHdpdGggc2VtYXBob3JlIG9mICYjMzk7JXM6JXMmIzM5OyBpbiAmIzM5OyVzJiMzOTsgYXQgMHglbHhcbiYjMzQ7LAotCQkJCQl1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsIG5vdGUuc2VtYV9hZGRyKTsKJiM0MzsJCQkJCXVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgKHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpOwogCQkJCWdvdG8gZXJyX291dDsKIAkJCX0KIAkJCWlmIChzZWctJmd0O2lzX2V4ZWMpIHsKIAkJCQllcnIgPSAtRVNSQ0g7CiAJCQkJcHJfd2FybigmIzM0O3VzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAmIzM5OyVzJiMzOTsgc2VnbWVudCBbMHglbHgsIDB4JWx4XSBmb3Igc2VtYXBob3JlIG9mICYjMzk7JXM6JXMmIzM5OyBhdCAweCVseCBpcyBleGVjdXRhYmxlXG4mIzM0OywKLQkJCQkJcGF0aCwgc2VnLSZndDtzdGFydCwgc2VnLSZndDtlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwKLQkJCQkJbm90ZS5zZW1hX2FkZHIpOwomIzQzOwkJCQkJcGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLSZndDtzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLSZndDtlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwKJiM0MzsJCQkJCSh1bnNpZ25lZCBsb25nKW5vdGUuc2VtYV9hZGRyKTsKIAkJCQlnb3RvIGVycl9vdXQ7CiAJCQl9CiAKQEAgLTgwNiw4ICYjNDM7ODA5LDggQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCwKIAogCQkJcHJfZGVidWcoJiMzNDt1c2R0OiBzZW1hICBmb3IgJiMzOTslczolcyYjMzk7IGluICVzICYjMzk7JXMmIzM5OzogYWRkciAweCVseCBiYXNlIDB4JWx4IChyZXNvbHZlZCAweCVseCkgaW4gc2VnbWVudCBbMHglbHgsIDB4JWx4XSBhdCBvZmZzZXQgMHglbHhcbiYjMzQ7LAogCQkJCSB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIGVoZHIuZV90eXBlID09IEVUX0VYRUMgPyAmIzM0O2V4ZWMmIzM0OyA6ICYjMzQ7bGliICYjMzQ7LAotCQkJCSBwYXRoLCBub3RlLnNlbWFfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfc2VtYV9vZmYsCi0JCQkJIHNlZy0mZ3Q7c3RhcnQsIHNlZy0mZ3Q7ZW5kLCBzZWctJmd0O29mZnNldCk7CiYjNDM7CQkJCSBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsICh1bnNpZ25lZCBsb25nKXVzZHRfc2VtYV9vZmYsCiYjNDM7CQkJCSAodW5zaWduZWQgbG9uZylzZWctJmd0O3N0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctJmd0O2VuZCwgKHVuc2lnbmVkIGxvbmcpc2VnLSZndDtvZmZzZXQpOwogCQl9CiAKIAkJLyogUmVjb3JkIGFkanVzdGVkIGFkZHJlc3NlcyBhbmQgb2Zmc2V0cyBhbmQgcGFyc2UgVVNEVCBzcGVjICovCkBAIC0xMTE3LDcgJiM0MzsxMTIwLDcgQEAgc3RydWN0IGJwZl9saW5rICp1c2R0X21hbmFnZXJfYXR0YWNoX3VzZHQoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBjb25zdCBzdHJ1Y3QKIAkJCQkgICAgICAgIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCk7CiAJCQl9IGVsc2UgewogCQkJCXByX3dhcm4oJiMzNDt1c2R0OiBmYWlsZWQgdG8gbWFwIElQIDB4JWx4IHRvIHNwZWMgIyVkIGZvciAmIzM5OyVzOiVzJiMzOTsgaW4gJiMzOTslcyYjMzk7OiAlc1xuJiMzNDssCi0JCQkJCXRhcmdldC0mZ3Q7YWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsCiYjNDM7CQkJCQkodW5zaWduZWQgbG9uZyl0YXJnZXQtJmd0O2Fic19pcCwgc3BlY19pZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLAogCQkJCQlwYXRoLCBlcnJzdHIoZXJyKSk7CiAJCQl9CiAJCQlnb3RvIGVycl9vdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjkxCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogMjYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQlBGIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYHRvb2xzL2xpYi9icGYvYCBkaXJlY3RvcnksIGFuZCBpdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNsZWFudXAgZWZmb3J0LiBQcmltYXJpbHksIGl0JiMzOTtzIGFib3V0IHR3ZWFraW5nIHRob3NlIGBwcl93YXJuYCBhbmQgYHByX2RlYnVnYCBjYWxscywgY2hhbmdpbmcgZm9ybWF0IHNwZWNpZmllcnMg4oCTIHRoaW5ncyBsaWtlIGAlZGAgdG8gYCV1YCwgYCV6ZGAgdG8gYCV6dWAsIGFuZCBhZGRpbmcgY2FzdHMsIG1vc3RseSBgKHVuc2lnbmVkIGxvbmcpYC4gVGhpcyBpcyBhbGwgcHJldHR5IGNvc21ldGljLCByaWdodD8gSXQgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZSBhY3R1YWwgKmxvZ2ljKiBvZiB0aGUgQlBGIGNvZGUgb3Iga2VybmVsIGludGVyYWN0aW9ucyBpcyBiZWluZyBjaGFuZ2VkLgoKSSB3ZW50IGxpbmUtYnktbGluZSBpbiB0aGUgZGlmZi4gRG91YmxlIGNoZWNrZWQgZXZlcnl0aGluZyBpbiBgYnRmLmNgLCBgYnRmX2R1bXAuY2AsIGBidGZfcmVsb2NhdGUuY2AsIGBlbGYuY2AsIGBnZW5fbG9hZGVyLmNgLCBgbGliYnBmLmNgLCBgbmxhdHRyLmNgLCBgcmVsb19jb3JlLmNgLCBhbmQgYHVzZHQuY2AuIEV2ZXJ5dGhpbmcgaXMgcmVhbGx5IGp1c3QgYWJvdXQgZm9ybWF0dGluZyB0aGUgb3V0cHV0IG9mIHdhcm5pbmdzIGFuZCBkZWJ1ZyBtZXNzYWdlcywgbWFraW5nIHN1cmUgdGhlIHJpZ2h0IGRhdGEgdHlwZXMgYXJlIGJlaW5nIHByaW50ZWQgY29ycmVjdGx5LiBJIHdhcyBhIGxpdHRsZSB3b3JyaWVkIGFib3V0IHRoZSBgc3NjYW5mYCBjaGFuZ2UgaW4gYGxpYmJwZi5jYCwgYnV0IGl0IHR1cm5zIG91dCB0aGUgb3JpZ2luYWwgY29kZSB3aXRoIGAlaWAgd2FzIGFscmVhZHkgcGFyc2luZyB0aGUgaGV4IHZhbHVlcyB1c2VkIGZvciBtYXAgZmxhZ3MgZnJvbSBgZmRpbmZvYCBjb3JyZWN0bHkuIFdoaWxlIGEgY2hhbmdlLCBpdCB3YXNuJiMzOTt0IGEgZnVuY3Rpb25hbCBvbmUgaW4gdGVybXMgb2YgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yLgoKQW5kLCBvZiBjb3Vyc2UsIHRoaXMgaXMgYWxsIGhhcHBlbmluZyBpbiB1c2VyLXNwYWNlIHRvb2xzLCB3aGljaCBhcmUgdmVyeSBkaWZmZXJlbnQgZnJvbSBmdXp6aW5nIHRoZSBrZXJuZWwgaXRzZWxmLiBTeXprYWxsZXIsIHdoaWNoIGlzIG1lbnRpb25lZCBpbiB0aGUgaW5zdHJ1Y3Rpb25zLCBpcyBkZXNpZ25lZCB0byBmdXp6IGtlcm5lbCBjb2RlLCBhbmQgaXQmIzM5O3Mgbm90IHRoZSByaWdodCB0b29sIGZvciB1c2VyLXNwYWNlIGNoYW5nZXMuIEl0JiMzOTtzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbGV2ZWwgb2YgdGVzdGluZy4KClNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkga2VybmVsLWxldmVsIGZ1bmN0aW9uYWwgY2hhbmdlcyBvciBuZXcgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgd2FycmFudCBrZXJuZWwgZnV6emluZy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBmb3JtYXR0aW5nIGNsZWFudXAgaW4gdGhlIHVzZXItc3BhY2UgQlBGIHRvb2xzLiBUaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGZvcm1hdCBzcGVjaWZpZXJzIGluIGxvZ2dpbmcgZnVuY3Rpb25zIChwcl93YXJuLCBwcl9kZWJ1ZykgYW5kIG9uZSBzc2NhbmYgY2FsbCBpbiB1c2VyLXNwYWNlIGxpYmJwZiBjb2RlICh0b29scy9saWIvYnBmLykuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEwOjU2OjE2LjY1Njg2MDI2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzYyOTE4NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGZvcm1hdCBzcGVjaWZpZXJzIGluIGxvZ2dpbmcgZnVuY3Rpb25zIChwcl93YXJuLCBwcl9kZWJ1ZykgYW5kIG9uZSBzc2NhbmYgY2FsbCBpbiB1c2VyLXNwYWNlIGxpYmJwZiBjb2RlICh0b29scy9saWIvYnBmLykuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTA6NTY6MTYuNjU2ODY4NDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDkxMTQ0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhM2FhYTUxOWMyMTJhODdkOGQ0ZGYyZTQ5YzUzNjc4YWM2OWQ5Y2I2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDEwOjU2OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXFxuaW5kZXggODIzYmNlODk1MTc4ZGEuLmJmNmE2ODExODQwNTEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2J0Zi5jXFxuQEAgLTU4OSw3ICs1ODksNyBAQCBzdGF0aWMgaW50IGJ0Zl9wYXJzZV90eXBlX3NlYyhzdHJ1Y3QgYnRmICpidGYpXFxuIFxcdFxcdGlmICh0eXBlX3NpemUgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHlwZV9zaXplO1xcbiBcXHRcXHRpZiAobmV4dF90eXBlICsgdHlwZV9zaXplIFxcdTAwM2UgZW5kX3R5cGUpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiQlRGIHR5cGUgWyVkXSBpcyBtYWxmb3JtZWRcXFxcblxcXCIsIGJ0Zi1cXHUwMDNlc3RhcnRfaWQgKyBidGYtXFx1MDAzZW5yX3R5cGVzKTtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiQlRGIHR5cGUgWyV1XSBpcyBtYWxmb3JtZWRcXFxcblxcXCIsIGJ0Zi1cXHUwMDNlc3RhcnRfaWQgKyBidGYtXFx1MDAzZW5yX3R5cGVzKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE0MjQsNyArMTQyNCw3IEBAIHN0YXRpYyBpbnQgYnRmX2ZpbmRfZWxmX3NlY3Rpb25zKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnRmX2VsZl9zZWNzXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKHNoLnNoX3R5cGUgIT0gU0hUX1BST0dCSVRTKSB7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICglZCkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICgldSkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHNoLnNoX3R5cGUsIGlkeCwgbmFtZSwgcGF0aCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHN0YXRpYyBib29sIGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgaWQxLCBfX3UzMiBpZDIsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRpZiAoIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgbTEtXFx1MDAzZXR5cGUsIG0yLVxcdTAwM2V0eXBlLCBkZXB0aCAtIDEpKSB7XFxuIFxcdFxcdFxcdFxcdGlmICh0MS1cXHUwMDNlbmFtZV9vZmYpIHtcXG4tXFx0XFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzICclcycgc2l6ZT0lZCB2bGVuPSVkIGlkMVsldV0gaWQyWyV1XSBzaGFsbG93LWVxdWFsIGJ1dCBub3QgaWRlbnRpY2FsIGZvciBmaWVsZCMlZCAnJXMnXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgJyVzJyBzaXplPSV1IHZsZW49JXUgaWQxWyV1XSBpZDJbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBpZGVudGljYWwgZm9yIGZpZWxkIyVkICclcydcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBrMSA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcXFwiU1RSVUNUXFxcIiA6IFxcXCJVTklPTlxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXFx1MDAzZWJ0ZiwgdDEtXFx1MDAzZW5hbWVfb2ZmKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHQxLVxcdTAwM2VzaXplLCBidGZfdmxlbih0MSksIGlkMSwgaWQyLCBpLFxcbkBAIC01MTA0LDcgKzUxMDQsNyBAQCBzdGF0aWMgaW50IGJ0Zl9kZWR1cF9pc19lcXVpdihzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBjYW5kX2lkLFxcbiBcXHRcXHRcXHRlcSA9IGJ0Zl9kZWR1cF9pc19lcXVpdihkLCBjYW5kX20tXFx1MDAzZXR5cGUsIGNhbm9uX20tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRpZiAoZXEgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRcXHRpZiAoY2FuZF90eXBlLVxcdTAwM2VuYW1lX29mZikge1xcbi1cXHRcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgJyVzJyBzaXplPSVkIHZsZW49JWQgY2FuZF9pZFsldV0gY2Fub25faWRbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBlcXVpdiBmb3IgZmllbGQjJWQgJyVzJzogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCIlcyAnJXMnIHNpemU9JXUgdmxlbj0ldSBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAnJXMnOiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IGNhbmRfa2luZCA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcXFwiU1RSVUNUXFxcIiA6IFxcXCJVTklPTlxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXFx1MDAzZWJ0ZiwgY2FuZF90eXBlLVxcdTAwM2VuYW1lX29mZiksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBjYW5kX3R5cGUtXFx1MDAzZXNpemUsIHZsZW4sIGNhbmRfaWQsIGNhbm9uX2lkLCBpLFxcbkBAIC02MDY5LDcgKzYwNjksNyBAQCBzdGF0aWMgaW50IGJ0Zl9hZGRfZGlzdGlsbGVkX3R5cGVzKHN0cnVjdCBidGZfZGlzdGlsbCAqZGlzdClcXG4gXFx0XFx0XFx0ZXJyID0gYnRmX2FkZF90eXBlKFxcdTAwMjZkaXN0LVxcdTAwM2VwaXBlLCB0KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJyVzJ1sldV0gb2Yga2luZCBbJXVdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJyVzJ1slZF0gb2Yga2luZCBbJWRdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG5hbWUsIGksIGtpbmQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuY1xcbmluZGV4IGNjMWJhNjViYjZjNWFjLi4xMjNjNDQ4ZjIwYzc0NiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcXG4rKysgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcXG5AQCAtMTc3Niw3ICsxNzc2LDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfYml0ZmllbGRfdmFsdWUoc3RydWN0IGJ0Zl9kdW1wICpkLFxcbiBcXG4gXFx0LyogTWF4aW11bSBzdXBwb3J0ZWQgYml0ZmllbGQgc2l6ZSBpcyA2NCBiaXRzICovXFxuIFxcdGlmICh0LVxcdTAwM2VzaXplIFxcdTAwM2UgOCkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJWRcXFxcblxcXCIsIHQtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGJpdGZpZWxkIHNpemUgJXVcXFxcblxcXCIsIHQtXFx1MDAzZXNpemUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMjI1MSw3ICsyMjUxLDcgQEAgc3RhdGljIGludCBidGZfZHVtcF9nZXRfZW51bV92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsXFxuIFxcdFxcdCp2YWx1ZSA9IGlzX3NpZ25lZCA/ICooX19zOCAqKWRhdGEgOiAqKF9fdTggKilkYXRhO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwidW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXFxcXG5cXFwiLCB0LVxcdTAwM2VzaXplLCBpZCk7XFxuK1xcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQgc2l6ZSAldSBmb3IgZW51bSwgaWQ6WyV1XVxcXFxuXFxcIiwgdC1cXHUwMDNlc2l6ZSwgaWQpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmMgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXFxuaW5kZXggNTNkMWYzNTQxYmNlNjkuLmRmNWZhNGJkODdkNjlhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcXG4rKysgYi90b29scy9saWIvYnBmL2J0Zl9yZWxvY2F0ZS5jXFxuQEAgLTI4MCw3ICsyODAsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcXG4gXFx0XFx0ICAgICBjbXBfYnRmX25hbWVfc2l6ZShcXHUwMDI2YmFzZV9pbmZvLCBkaXN0X2luZm8pID09IDA7XFxuIFxcdFxcdCAgICAgZGlzdF9pbmZvKyspIHtcXG4gXFx0XFx0XFx0aWYgKCFkaXN0X2luZm8tXFx1MDAzZWlkIHx8IGRpc3RfaW5mby1cXHUwMDNlaWQgXFx1MDAzZT0gci1cXHUwMDNlbnJfZGlzdF9iYXNlX3R5cGVzKSB7XFxuLVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcImJhc2UgQlRGIGlkIFslZF0gbWFwcyB0byBpbnZhbGlkIGRpc3RpbGxlZCBiYXNlIEJURiBpZCBbJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJiYXNlIEJURiBpZCBbJXVdIG1hcHMgdG8gaW52YWxpZCBkaXN0aWxsZWQgYmFzZSBCVEYgaWQgWyV1XVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0aWQsIGRpc3RfaW5mby1cXHUwMDNlaWQpO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuQEAgLTM2OCw3ICszNjgsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGRpc3RfdCA9IGJ0Zl90eXBlX2J5X2lkKHItXFx1MDAzZWRpc3RfYmFzZV9idGYsIGlkKTtcXG4gXFx0XFx0bmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoci1cXHUwMDNlZGlzdF9iYXNlX2J0ZiwgZGlzdF90LVxcdTAwM2VuYW1lX29mZik7XFxuLVxcdFxcdHByX3dhcm4oXFxcImRpc3RpbGxlZCBiYXNlIEJURiB0eXBlICclcycgWyVkXSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAnJXMnIFsldV0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0bmFtZSwgaWQpO1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzk3LDExICszOTcsMTEgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfdmFsaWRhdGVfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcXG4gXFx0XFx0Y2FzZSBCVEZfS0lORF9GV0Q6XFxuIFxcdFxcdFxcdGlmICh0LVxcdTAwM2VuYW1lX29mZilcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInR5cGUgWyVkXSwga2luZCBbJWRdIGlzIGludmFsaWQgZm9yIGRpc3RpbGxlZCBiYXNlIEJURjsgaXQgaXMgYW5vbnltb3VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJ0eXBlIFsldV0sIGtpbmQgWyVkXSBpcyBpbnZhbGlkIGZvciBkaXN0aWxsZWQgYmFzZSBCVEY7IGl0IGlzIGFub255bW91c1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0aSwga2luZCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJ0eXBlIFslZF0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInR5cGUgWyV1XSBpbiBkaXN0aWxsZWQgYmFzZWQgQlRGIGhhcyB1bmV4cGVjdGVkIGtpbmQgWyVkXVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0aSwga2luZCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jXFxuaW5kZXggMjk1ZGJkYTI0NTgwNzEuLmZlMTM2ZDAyNTk2NzlmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZWxmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2VsZi5jXFxuQEAgLTM1NCw3ICszNTQsNyBAQCBsb25nIGVsZl9maW5kX2Z1bmNfb2Zmc2V0KEVsZiAqZWxmLCBjb25zdCBjaGFyICpiaW5hcnlfcGF0aCwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCJlbGY6IHN5bWJvbCBhZGRyZXNzIG1hdGNoIGZvciAnJXMnIGluICclcyc6IDB4JWx4XFxcXG5cXFwiLCBuYW1lLCBiaW5hcnlfcGF0aCxcXG4tXFx0XFx0XFx0IHJldCk7XFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZylyZXQpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpZiAocmV0ID09IDApIHtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwiZWxmOiAnJXMnIGlzIDAgaW4gc3ltdGFiIGZvciAnJXMnOiAlc1xcXFxuXFxcIiwgbmFtZSwgYmluYXJ5X3BhdGgsXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG5pbmRleCBkNzk2OTVmMDFjODdmMy4uYzdmMmQyYWM3YmIzNWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG4rKysgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuY1xcbkBAIC0zODQsNyArMzg0LDcgQEAgaW50IGJwZl9nZW5fX2ZpbmlzaChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbnJfcHJvZ3MsIGludCBucl9tYXBzKVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmIChucl9wcm9ncyBcXHUwMDNjIGdlbi1cXHUwMDNlbnJfcHJvZ3MgfHwgbnJfbWFwcyAhPSBnZW4tXFx1MDAzZW5yX21hcHMpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwibnJfcHJvZ3MgJWQvJWQgbnJfbWFwcyAlZC8lZCBtaXNtYXRjaFxcXFxuXFxcIixcXG4rXFx0XFx0cHJfd2FybihcXFwibnJfcHJvZ3MgJWQvJXUgbnJfbWFwcyAlZC8ldSBtaXNtYXRjaFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0bnJfcHJvZ3MsIGdlbi1cXHUwMDNlbnJfcHJvZ3MsIG5yX21hcHMsIGdlbi1cXHUwMDNlbnJfbWFwcyk7XFxuIFxcdFxcdGdlbi1cXHUwMDNlZXJyb3IgPSAtRUZBVUxUO1xcbiBcXHRcXHRyZXR1cm4gZ2VuLVxcdTAwM2VlcnJvcjtcXG5AQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgYnBmX2dlbl9fbG9hZF9idGYoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3Qgdm9pZCAqYnRmX3Jhd19kYXRhLFxcbiBcXG4gXFx0YXR0ci5idGZfc2l6ZSA9IHRndF9lbmRpYW4oYnRmX3Jhd19zaXplKTtcXG4gXFx0YnRmX2xvYWRfYXR0ciA9IGFkZF9kYXRhKGdlbiwgXFx1MDAyNmF0dHIsIGF0dHJfc2l6ZSk7XFxuLVxcdHByX2RlYnVnKFxcXCJnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXFxcblxcXCIsXFxuIFxcdFxcdCBidGZfZGF0YSwgYnRmX3Jhd19zaXplLCBidGZfbG9hZF9hdHRyLCBhdHRyX3NpemUpO1xcbiBcXG4gXFx0LyogcG9wdWxhdGUgdW5pb24gYnBmX2F0dHIgd2l0aCB1c2VyIHByb3ZpZGVkIGxvZyBkZXRhaWxzICovXFxuQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF9jcmVhdGUoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gXFx0YXR0ci5idGZfdmFsdWVfdHlwZV9pZCA9IHRndF9lbmRpYW4obWFwX2F0dHItXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcXG4gXFxuIFxcdG1hcF9jcmVhdGVfYXR0ciA9IGFkZF9kYXRhKGdlbiwgXFx1MDAyNmF0dHIsIGF0dHJfc2l6ZSk7XFxuLVxcdHByX2RlYnVnKFxcXCJnZW46IG1hcF9jcmVhdGU6ICVzIGlkeCAlZCB0eXBlICVkIHZhbHVlX3R5cGVfaWQgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxcXG5cXFwiLFxcbitcXHRwcl9kZWJ1ZyhcXFwiZ2VuOiBtYXBfY3JlYXRlOiAlcyBpZHggJWQgdHlwZSAldSB2YWx1ZV90eXBlX2lkICV1LCBhdHRyOiBvZmYgJWQgc2l6ZSAlZFxcXFxuXFxcIixcXG4gXFx0XFx0IG1hcF9uYW1lLCBtYXBfaWR4LCBtYXBfdHlwZSwgbWFwX2F0dHItXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLFxcbiBcXHRcXHQgbWFwX2NyZWF0ZV9hdHRyLCBhdHRyX3NpemUpO1xcbiBcXG5AQCAtMTA4Miw3ICsxMDgyLDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gXFx0bGljZW5zZV9vZmYgPSBhZGRfZGF0YShnZW4sIGxpY2Vuc2UsIHN0cmxlbihsaWNlbnNlKSArIDEpO1xcbiBcXHQvKiBhZGQgaW5zbnMgdG8gYmxvYiBvZiBieXRlcyAqL1xcbiBcXHRpbnNuc19vZmYgPSBhZGRfZGF0YShnZW4sIGluc25zLCBpbnNuX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pKTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBwcm9nX2lkeCAlZCB0eXBlICVkIGluc24gb2ZmICVkIGluc25zX2NudCAlemQgbGljZW5zZSBvZmYgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IHByb2dfbG9hZDogcHJvZ19pZHggJWQgdHlwZSAldSBpbnNuIG9mZiAlZCBpbnNuc19jbnQgJXp1IGxpY2Vuc2Ugb2ZmICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgcHJvZ19pZHgsIHByb2dfdHlwZSwgaW5zbnNfb2ZmLCBpbnNuX2NudCwgbGljZW5zZV9vZmYpO1xcbiBcXG4gXFx0LyogY29udmVydCBibG9iIGluc25zIHRvIHRhcmdldCBlbmRpYW5uZXNzICovXFxuQEAgLTExMDUsMjEgKzExMDUsMjEgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gXFx0YXR0ci5mdW5jX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cXHUwMDNlZnVuY19pbmZvX3JlY19zaXplKTtcXG4gXFx0YXR0ci5mdW5jX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXFx1MDAzZWZ1bmNfaW5mb19jbnQpO1xcbiBcXHRmdW5jX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cXHUwMDNlZnVuY19pbmZvLCBmdW5jX2luZm9fdG90X3N6KTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBmdW5jX2luZm86IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IHByb2dfbG9hZDogZnVuY19pbmZvOiBvZmYgJWQgY250ICV1IHJlYyBzaXplICV1XFxcXG5cXFwiLFxcbiBcXHRcXHQgZnVuY19pbmZvLCBsb2FkX2F0dHItXFx1MDAzZWZ1bmNfaW5mb19jbnQsXFxuIFxcdFxcdCBsb2FkX2F0dHItXFx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZSk7XFxuIFxcbiBcXHRhdHRyLmxpbmVfaW5mb19yZWNfc2l6ZSA9IHRndF9lbmRpYW4obG9hZF9hdHRyLVxcdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xcbiBcXHRhdHRyLmxpbmVfaW5mb19jbnQgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudCk7XFxuIFxcdGxpbmVfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLVxcdTAwM2VsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiZ2VuOiBwcm9nX2xvYWQ6IGxpbmVfaW5mbzogb2ZmICVkIGNudCAlZCByZWMgc2l6ZSAlZFxcXFxuXFxcIixcXG4rXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBsaW5lX2luZm86IG9mZiAlZCBjbnQgJXUgcmVjIHNpemUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdCBsaW5lX2luZm8sIGxvYWRfYXR0ci1cXHUwMDNlbGluZV9pbmZvX2NudCxcXG4gXFx0XFx0IGxvYWRfYXR0ci1cXHUwMDNlbGluZV9pbmZvX3JlY19zaXplKTtcXG4gXFxuIFxcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gdGd0X2VuZGlhbigoX191MzIpc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7XFxuIFxcdGF0dHIuY29yZV9yZWxvX2NudCA9IHRndF9lbmRpYW4oZ2VuLVxcdTAwM2Vjb3JlX3JlbG9fY250KTtcXG4gXFx0Y29yZV9yZWxvcyA9IGFkZF9kYXRhKGdlbiwgZ2VuLVxcdTAwM2Vjb3JlX3JlbG9zLCBjb3JlX3JlbG9fdG90X3N6KTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6ZFxcXFxuXFxcIixcXG4rXFx0cHJfZGVidWcoXFxcImdlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxcXFxuXFxcIixcXG4gXFx0XFx0IGNvcmVfcmVsb3MsIGdlbi1cXHUwMDNlY29yZV9yZWxvX2NudCxcXG4gXFx0XFx0IHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbykpO1xcbiBcXG5AQCAtMTIzNCw3ICsxMjM0LDcgQEAgdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSxcXG4gXFx0fVxcbiBcXG4gXFx0bWFwX3VwZGF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcXHUwMDI2YXR0ciwgYXR0cl9zaXplKTtcXG4tXFx0cHJfZGVidWcoXFxcImdlbjogbWFwX3VwZGF0ZV9lbGVtOiBpZHggJWQsIHZhbHVlOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcXFxcblxcXCIsXFxuK1xcdHByX2RlYnVnKFxcXCJnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgbWFwX2lkeCwgdmFsdWUsIHZhbHVlX3NpemUsIG1hcF91cGRhdGVfYXR0ciwgYXR0cl9zaXplKTtcXG4gXFx0bW92ZV9ibG9iMmJsb2IoZ2VuLCBhdHRyX2ZpZWxkKG1hcF91cGRhdGVfYXR0ciwgbWFwX2ZkKSwgNCxcXG4gXFx0XFx0ICAgICAgIGJsb2JfZmRfYXJyYXlfb2ZmKGdlbiwgbWFwX2lkeCkpO1xcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IDEzNjg3NTJhYTEzYzM5Li43MTYyMTQ2MjgwYTgwZSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC0xNDg2LDcgKzE0ODYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3RydWN0X29wc19tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNlY19uYW1lLFxcbiBcXHRcXHQgICAgICAgdHlwZS1cXHUwMDNlc2l6ZSk7XFxuIFxcdFxcdHN0X29wcy1cXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XFxuIFxcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwic3RydWN0X29wcyBpbml0OiBzdHJ1Y3QgJXModHlwZV9pZD0ldSkgJXMgZm91bmQgYXQgb2Zmc2V0ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwic3RydWN0X29wcyBpbml0OiBzdHJ1Y3QgJXModHlwZV9pZD0lZCkgJXMgZm91bmQgYXQgb2Zmc2V0ICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgdG5hbWUsIHR5cGVfaWQsIHZhcl9uYW1lLCB2c2ktXFx1MDAzZW9mZnNldCk7XFxuIFxcdH1cXG4gXFxuQEAgLTI2MjYsNyArMjYyNiw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXG4gXFx0XFx0XFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRpZiAoIXQpIHtcXG4tXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGtleSB0eXBlIFslZF0gbm90IGZvdW5kLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGtleSB0eXBlIFsldV0gbm90IGZvdW5kLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0bWFwX25hbWUsIG0tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBpbnQgcGFyc2VfYnRmX21hcF9kZWYoY29uc3QgY2hhciAqbWFwX25hbWUsIHN0cnVjdCBidGYgKmJ0ZixcXG4gXFxuIFxcdFxcdFxcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVxcdTAwM2V0eXBlKTtcXG4gXFx0XFx0XFx0aWYgKCF0KSB7XFxuLVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiB2YWx1ZSB0eXBlIFslZF0gbm90IGZvdW5kLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IHZhbHVlIHR5cGUgWyV1XSBub3QgZm91bmQuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRtYXBfbmFtZSwgbS1cXHUwMDNldHlwZSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTI3MjAsNyArMjcyMCw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRcXHRtYXBfZGVmLVxcdTAwM2V2YWx1ZV9zaXplID0gNDtcXG4gXFx0XFx0XFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIG0tXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRcXHRpZiAoIXQpIHtcXG4tXFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6ICVzIHR5cGUgWyVkXSBub3QgZm91bmQuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogJXMgdHlwZSBbJXVdIG5vdCBmb3VuZC5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdG1hcF9uYW1lLCBkZXNjLCBtLVxcdTAwM2V0eXBlKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMzQ3Niw3ICszNDc2LDcgQEAgc3RhdGljIGludCBidGZfZml4dXBfZGF0YXNlYyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcbiBcXHRcXHR2YXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0X3Zhci1cXHUwMDNlbmFtZV9vZmYpO1xcbiBcXHRcXHRpZiAoIXZhcl9uYW1lKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJzZWMgJyVzJzogZmFpbGVkIHRvIGZpbmQgbmFtZSBvZiBEQVRBU0VDJ3MgbWVtYmVyICMlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcInNlYyAnJXMnOiBmYWlsZWQgdG8gZmluZCBuYW1lIG9mIERBVEFTRUMncyBtZW1iZXIgIyV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgc2VjX25hbWUsIGkpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFx0XFx0fVxcbkBAIC0zOTcxLDcgKzM5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdGlmICghZGF0YSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX0ZPUk1BVDtcXG4gXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJlbGY6IHNlY3Rpb24oJWQpICVzLCBzaXplICVsZCwgbGluayAlZCwgZmxhZ3MgJWx4LCB0eXBlPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiZWxmOiBzZWN0aW9uKCVkKSAlcywgc2l6ZSAlbHUsIGxpbmsgJWQsIGZsYWdzICVseCwgdHlwZT0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IGlkeCwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGF0YS1cXHUwMDNlZF9zaXplLFxcbiBcXHRcXHRcXHQgKGludClzaC1cXHUwMDNlc2hfbGluaywgKHVuc2lnbmVkIGxvbmcpc2gtXFx1MDAzZXNoX2ZsYWdzLFxcbiBcXHRcXHRcXHQgKGludClzaC1cXHUwMDNlc2hfdHlwZSk7XFxuQEAgLTQ0OTQsNyArNDQ5NCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcbiBcXHRcXHRcXHRleHQtXFx1MDAzZWtjZmcuZGF0YV9vZmYgPSByb3VuZHVwKG9mZiwgZXh0LVxcdTAwM2VrY2ZnLmFsaWduKTtcXG4gXFx0XFx0XFx0b2ZmID0gZXh0LVxcdTAwM2VrY2ZnLmRhdGFfb2ZmICsgZXh0LVxcdTAwM2VrY2ZnLnN6O1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXh0ZXJuIChrY2ZnKSAjJWQ6IHN5bWJvbCAlZCwgb2ZmICV1LCBuYW1lICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXh0ZXJuIChrY2ZnKSAjJWQ6IHN5bWJvbCAlZCwgb2ZmICVkLCBuYW1lICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgaSwgZXh0LVxcdTAwM2VzeW1faWR4LCBleHQtXFx1MDAzZWtjZmcuZGF0YV9vZmYsIGV4dC1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c2VjLVxcdTAwM2VzaXplID0gb2ZmO1xcbkBAIC00NjI2LDcgKzQ2MjYsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19yZWNvcmRfcmVsb2Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbiBcXG4gXFx0aWYgKCFpc19jYWxsX2luc24oaW5zbikgXFx1MDAyNlxcdTAwMjYgIWlzX2xkaW1tNjRfaW5zbihpbnNuKSkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IGludmFsaWQgcmVsbyBhZ2FpbnN0ICclcycgZm9yIGluc25zWyVkXS5jb2RlIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogaW52YWxpZCByZWxvIGFnYWluc3QgJyVzJyBmb3IgaW5zbnNbJXVdLmNvZGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cHJvZy1cXHUwMDNlbmFtZSwgc3ltX25hbWUsIGluc25faWR4LCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX1JFTE9DO1xcbiBcXHR9XFxuQEAgLTQ3NDksNyArNDc0OSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dyYW1fX3JlY29yZF9yZWxvYyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZXNlY19pZHggIT0gc3ltLVxcdTAwM2VzdF9zaG5keCB8fFxcbiBcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0ICE9IHN5bS1cXHUwMDNlc3RfdmFsdWUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwicHJvZyAnJXMnOiBmb3VuZCBtYXAgJXpkICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAjJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX2RlYnVnKFxcXCJwcm9nICclcyc6IGZvdW5kIG1hcCAlenUgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICMldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IHByb2ctXFx1MDAzZW5hbWUsIG1hcF9pZHgsIG1hcC1cXHUwMDNlbmFtZSwgbWFwLVxcdTAwM2VzZWNfaWR4LFxcbiBcXHRcXHRcXHRcXHQgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC00Nzc2LDcgKzQ3NzYsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19yZWNvcmRfcmVsb2Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbiBcXHRcXHRtYXAgPSBcXHUwMDI2b2JqLVxcdTAwM2VtYXBzW21hcF9pZHhdO1xcbiBcXHRcXHRpZiAobWFwLVxcdTAwM2VsaWJicGZfdHlwZSAhPSB0eXBlIHx8IG1hcC1cXHUwMDNlc2VjX2lkeCAhPSBzeW0tXFx1MDAzZXN0X3NobmR4KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0cHJfZGVidWcoXFxcInByb2cgJyVzJzogZm91bmQgZGF0YSBtYXAgJXpkICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAldVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcInByb2cgJyVzJzogZm91bmQgZGF0YSBtYXAgJXp1ICglcywgc2VjICVkLCBvZmYgJXp1KSBmb3IgaW5zbiAldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IHByb2ctXFx1MDAzZW5hbWUsIG1hcF9pZHgsIG1hcC1cXHUwMDNlbmFtZSwgbWFwLVxcdTAwM2VzZWNfaWR4LFxcbiBcXHRcXHRcXHQgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC00OTg1LDcgKzQ5ODUsNyBAQCBzdGF0aWMgaW50IGJwZl9nZXRfbWFwX2luZm9fZnJvbV9mZGluZm8oaW50IGZkLCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvKVxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2V2YWx1ZV9zaXplID0gdmFsO1xcbiBcXHRcXHRlbHNlIGlmIChzc2NhbmYoYnVmZiwgXFxcIm1heF9lbnRyaWVzOlxcXFx0JXVcXFwiLCBcXHUwMDI2dmFsKSA9PSAxKVxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VtYXhfZW50cmllcyA9IHZhbDtcXG4tXFx0XFx0ZWxzZSBpZiAoc3NjYW5mKGJ1ZmYsIFxcXCJtYXBfZmxhZ3M6XFxcXHQlaVxcXCIsIFxcdTAwMjZ2YWwpID09IDEpXFxuK1xcdFxcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcXFwibWFwX2ZsYWdzOlxcXFx0JXhcXFwiLCBcXHUwMDI2dmFsKSA9PSAxKVxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VtYXBfZmxhZ3MgPSB2YWw7XFxuIFxcdH1cXG4gXFxuQEAgLTU1MjEsMTEgKzU1MjEsMTEgQEAgc3RhdGljIGludCBpbml0X21hcF9pbl9tYXBfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1lcnJubztcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyVkXSB0byBtYXAgJyVzJyBmZD0lZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gbWFwICclcycgZmQ9JWQ6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUsIGksIHRhcmdfbWFwLVxcdTAwM2VuYW1lLCBmZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJtYXAgJyVzJzogc2xvdCBbJWRdIHNldCB0byBtYXAgJyVzJyBmZD0lZFxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBzbG90IFsldV0gc2V0IHRvIG1hcCAnJXMnIGZkPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLCBpLCB0YXJnX21hcC1cXHUwMDNlbmFtZSwgZmQpO1xcbiBcXHR9XFxuIFxcbkBAIC01NTU0LDExICs1NTU0LDExIEBAIHN0YXRpYyBpbnQgaW5pdF9wcm9nX2FycmF5X3Nsb3RzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLVxcdTAwM2VmZCwgXFx1MDAyNmksIFxcdTAwMjZmZCwgMCk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLWVycm5vO1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogZmFpbGVkIHRvIGluaXRpYWxpemUgc2xvdCBbJWRdIHRvIHByb2cgJyVzJyBmZD0lZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gcHJvZyAnJXMnIGZkPSVkOiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VuYW1lLCBpLCB0YXJnX3Byb2ctXFx1MDAzZW5hbWUsIGZkLCBlcnJzdHIoZXJyKSk7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBzbG90IFslZF0gc2V0IHRvIHByb2cgJyVzJyBmZD0lZFxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBzbG90IFsldV0gc2V0IHRvIHByb2cgJyVzJyBmZD0lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IG1hcC1cXHUwMDNlbmFtZSwgaSwgdGFyZ19wcm9nLVxcdTAwM2VuYW1lLCBmZCk7XFxuIFxcdH1cXG4gXFxuQEAgLTU3ODgsNyArNTc4OCw3IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdFxcdGlmIChzdHJuY21wKGxvY2FsX25hbWUsIHRhcmdfbmFtZSwgbG9jYWxfZXNzZW50X2xlbikgIT0gMClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiQ08tUkUgcmVsb2NhdGluZyBbJWRdICVzICVzOiBmb3VuZCB0YXJnZXQgY2FuZGlkYXRlIFslZF0gJXMgJXMgaW4gWyVzXVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkNPLVJFIHJlbG9jYXRpbmcgWyV1XSAlcyAlczogZm91bmQgdGFyZ2V0IGNhbmRpZGF0ZSBbJWRdICVzICVzIGluIFslc11cXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBsb2NhbF9jYW5kLVxcdTAwM2VpZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3QpLFxcbiBcXHRcXHRcXHQgbG9jYWxfbmFtZSwgaSwgYnRmX2tpbmRfc3RyKHQpLCB0YXJnX25hbWUsXFxuIFxcdFxcdFxcdCB0YXJnX2J0Zl9uYW1lKTtcXG5AQCAtNTg0OCw3ICs1ODQ4LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGlmIChlcnJubyA9PSBFTk9FTlQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlOyAvKiBleHBlY3RlZCByYWNlOiBCVEYgd2FzIHVubG9hZGVkICovXFxuIFxcdFxcdFxcdGVyciA9IC1lcnJubztcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBGRDogJXNcXFxcblxcXCIsIGlkLCBlcnJzdHIoZXJyKSk7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJXUgRkQ6ICVzXFxcXG5cXFwiLCBpZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01ODYxLDcgKzU4NjEsNyBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0ZXJyID0gYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZsZW4pO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1lcnJubztcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBpbmZvOiAlc1xcXFxuXFxcIiwgaWQsIGVycnN0cihlcnIpKTtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBpbmZvOiAlc1xcXFxuXFxcIiwgaWQsIGVycnN0cihlcnIpKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTU4NzQsNyArNTg3NCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cXHUwMDNlYnRmX3ZtbGludXgpO1xcbiBcXHRcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIGxvYWQgbW9kdWxlIFslc10ncyBCVEYgb2JqZWN0ICMlZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJ3MgQlRGIG9iamVjdCAjJXU6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRuYW1lLCBpZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC02MDY3LDcgKzYwNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX3Jlc29sdmVfcmVsbyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdCAgICAhaGFzaG1hcF9fZmluZChjYW5kX2NhY2hlLCBsb2NhbF9pZCwgXFx1MDAyNmNhbmRzKSkge1xcbiBcXHRcXHRjYW5kcyA9IGJwZl9jb3JlX2ZpbmRfY2FuZHMocHJvZy1cXHUwMDNlb2JqLCBsb2NhbF9idGYsIGxvY2FsX2lkKTtcXG4gXFx0XFx0aWYgKElTX0VSUihjYW5kcykpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJWRdICVzICVzOiAlbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHRhcmdldCBjYW5kaWRhdGUgc2VhcmNoIGZhaWxlZCBmb3IgWyV1XSAlcyAlczogJWxkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRwcm9nX25hbWUsIHJlbG9faWR4LCBsb2NhbF9pZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLFxcbiBcXHRcXHRcXHRcXHRsb2NhbF9uYW1lLCBQVFJfRVJSKGNhbmRzKSk7XFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGNhbmRzKTtcXG5AQCAtNjEyNyw3ICs2MTI3LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cHJfZGVidWcoXFxcInNlYyAnJXMnOiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xcXFxuXFxcIiwgc2VjX25hbWUsIHNlYy1cXHUwMDNlbnVtX2luZm8pO1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwic2VjICclcyc6IGZvdW5kICV1IENPLVJFIHJlbG9jYXRpb25zXFxcXG5cXFwiLCBzZWNfbmFtZSwgc2VjLVxcdTAwM2VudW1faW5mbyk7XFxuIFxcbiBcXHRcXHRmb3JfZWFjaF9idGZfZXh0X3JlYyhzZWcsIHNlYywgaSwgcmVjKSB7XFxuIFxcdFxcdFxcdGlmIChyZWMtXFx1MDAzZWluc25fb2ZmICUgQlBGX0lOU05fU1opXFxuQEAgLTYxODEsNyArNjE4MSw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcXG4gXFxuIFxcdFxcdFxcdGVyciA9IGJwZl9jb3JlX3BhdGNoX2luc24ocHJvZy1cXHUwMDNlbmFtZSwgaW5zbiwgaW5zbl9pZHgsIHJlYywgaSwgXFx1MDAyNnRhcmdfcmVzKTtcXG4gXFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJXU6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJWQ6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VuYW1lLCBpLCBpbnNuX2lkeCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0fVxcbkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y1xcbiBcXHRcXHRnb3RvIGVycl9jbG9zZTtcXG4gXFx0fVxcbiBcXHRpZiAoc3ltX29mZiArIGp0X3NpemUgXFx1MDAzZSBvYmotXFx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeikge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJtYXAgJy5qdW1wdGFibGVzJzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXpkLCB0cnlpbmcgdG8gYWNjZXNzICVkXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJtYXAgJy5qdW1wdGFibGVzJzoganVtcHRhYmxlc19kYXRhIHNpemUgaXMgJXp1LCB0cnlpbmcgdG8gYWNjZXNzICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRvYmotXFx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeiwgc3ltX29mZiArIGp0X3NpemUpO1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIGVycl9jbG9zZTtcXG5AQCAtNjM4MSw3ICs2MzgxLDcgQEAgc3RhdGljIGludCBjcmVhdGVfanRfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgc3RydWNcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChpbnNuX29mZiBcXHUwMDNlIFVJTlQzMl9NQVgpIHtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwibWFwICcuanVtcHRhYmxlcyc6IGludmFsaWQganVtcCB0YWJsZSB2YWx1ZSAweCVsbHggYXQgb2Zmc2V0ICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQobG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICsgaSAqIGp0X2VudHJ5X3NpemUpO1xcbitcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICsgaSAqIGp0X2VudHJ5X3NpemUpO1xcbiBcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9jbG9zZTtcXG4gXFx0XFx0fVxcbkBAIC02NTE3LDcgKzY1MTcsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcXG4gXFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogYmFkIHJlbG8gdHlwZSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogYmFkIHJlbG8gdHlwZSAldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlbmFtZSwgaSwgcmVsby1cXHUwMDNldHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuQEAgLTY3OTcsNyArNjc5Nyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHJlbG8gXFx1MDAyNlxcdTAwMjYgcmVsby1cXHUwMDNldHlwZSAhPSBSRUxPX0NBTEwgXFx1MDAyNlxcdTAwMjYgcmVsby1cXHUwMDNldHlwZSAhPSBSRUxPX1NVQlBST0dfQUREUikge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VuYW1lLCBpbnNuX2lkeCwgcmVsby1cXHUwMDNldHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQztcXG4gXFx0XFx0fVxcbkBAIC03NTg3LDcgKzc1ODcsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdFxcdH1cXG4gXFx0XFx0bmFtZSA9IGVsZl9zeW1fc3RyKG9iaiwgc3ltLVxcdTAwM2VzdF9uYW1lKSA/OiBcXFwiXFx1MDAzYz9cXHUwMDNlXFxcIjtcXG4gXFxuLVxcdFxcdHByX2RlYnVnKFxcXCIubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlemQgcmVsLVxcdTAwM2VyX29mZnNldCAlenUgbmFtZSAlZCAoJyVzJylcXFxcblxcXCIsXFxuK1xcdFxcdHByX2RlYnVnKFxcXCIubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlenUgcmVsLVxcdTAwM2VyX29mZnNldCAlenUgbmFtZSAldSAoJyVzJylcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBpLCAoc3NpemVfdCkocmVsLVxcdTAwM2VyX2luZm8gXFx1MDAzZVxcdTAwM2UgMzIpLCAoc2l6ZV90KXN5bS1cXHUwMDNlc3RfdmFsdWUsXFxuIFxcdFxcdFxcdCAoc2l6ZV90KXJlbC1cXHUwMDNlcl9vZmZzZXQsIHN5bS1cXHUwMDNlc3RfbmFtZSwgbmFtZSk7XFxuIFxcbkBAIC03Njc4LDcgKzc2NzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdFxcdH1cXG4gXFx0XFx0bWFwLVxcdTAwM2Vpbml0X3Nsb3RzW21vZmZdID0gaXNfbWFwX2luX21hcCA/ICh2b2lkICopdGFyZ19tYXAgOiAodm9pZCAqKXRhcmdfcHJvZztcXG4gXFxuLVxcdFxcdHByX2RlYnVnKFxcXCIubWFwcyByZWxvICMlZDogbWFwICclcycgc2xvdCBbJWRdIHBvaW50cyB0byAlcyAnJXMnXFxcXG5cXFwiLFxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiLm1hcHMgcmVsbyAjJWQ6IG1hcCAnJXMnIHNsb3QgWyV1XSBwb2ludHMgdG8gJXMgJyVzJ1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0IGksIG1hcC1cXHUwMDNlbmFtZSwgbW9mZiwgdHlwZSwgbmFtZSk7XFxuIFxcdH1cXG4gXFxuQEAgLTg3MzgsNyArODczOCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVzb2x2ZV9rc3ltX3Zhcl9idGZfaWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4gXFx0XFx0bG9jYWxfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQob2JqLVxcdTAwM2VidGYsIGxvY2FsX3R5cGUtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gXFx0XFx0dGFyZ19uYW1lID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHRhcmdfdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbiBcXG4tXFx0XFx0cHJfd2FybihcXFwiZXh0ZXJuICh2YXIga3N5bSkgJyVzJzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJWRdICVzICVzLCBidXQga2VybmVsIGhhcyBbJWRdICVzICVzXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJleHRlcm4gKHZhciBrc3ltKSAnJXMnOiBpbmNvbXBhdGlibGUgdHlwZXMsIGV4cGVjdGVkIFsldV0gJXMgJXMsIGJ1dCBrZXJuZWwgaGFzIFsldV0gJXMgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGV4dC1cXHUwMDNlbmFtZSwgbG9jYWxfdHlwZV9pZCxcXG4gXFx0XFx0XFx0YnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLCBsb2NhbF9uYW1lLCB0YXJnX3R5cGVfaWQsXFxuIFxcdFxcdFxcdGJ0Zl9raW5kX3N0cih0YXJnX3R5cGUpLCB0YXJnX25hbWUpO1xcbkBAIC04OTE1LDcgKzg5MTUsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3Jlc29sdmVfZXh0ZXJucyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXh0ZXJuIChrY2ZnKSAnJXMnOiBzZXQgdG8gMHglbGx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgZXh0LVxcdTAwM2VuYW1lLCAobG9uZyBsb25nKXZhbHVlKTtcXG4rXFx0XFx0XFx0XFx0IGV4dC1cXHUwMDNlbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcImV4dGVybiAnJXMnOiB1bnJlY29nbml6ZWQgZXh0ZXJuIGtpbmRcXFxcblxcXCIsIGV4dC1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xMDQ5NCw3ICsxMDQ5NCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9zdF9vcHNfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4gXFx0XFx0bW9mZiA9IHJlbC1cXHUwMDNlcl9vZmZzZXQgLSBtYXAtXFx1MDAzZXNlY19vZmZzZXQ7XFxuIFxcdFxcdHNoZHJfaWR4ID0gc3ltLVxcdTAwM2VzdF9zaG5keDtcXG4gXFx0XFx0c3Rfb3BzID0gbWFwLVxcdTAwM2VzdF9vcHM7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJzdHJ1Y3Rfb3BzIHJlbG9jICVzOiBmb3IgJWxsZCB2YWx1ZSAlbGxkIHNoZHJfaWR4ICV1IHJlbC1cXHUwMDNlcl9vZmZzZXQgJXp1IG1hcC1cXHUwMDNlc2VjX29mZnNldCAlenUgbmFtZSAlZCAoXFxcXCclc1xcXFwnKVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfZGVidWcoXFxcInN0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLVxcdTAwM2VyX29mZnNldCAlenUgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0ICV6dSBuYW1lICV1IChcXFxcJyVzXFxcXCcpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLFxcbiBcXHRcXHRcXHQgKGxvbmcgbG9uZykocmVsLVxcdTAwM2VyX2luZm8gXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHRcXHQgKGxvbmcgbG9uZylzeW0tXFx1MDAzZXN0X3ZhbHVlLFxcbkBAIC0xMDY0Myw3ICsxMDY0Myw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgX191MzIgYXR0YWNoX3Byb2dfZmQsIGludCB0XFxuIFxcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xcbiBcXHRlcnIgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChhdHRhY2hfcHJvZ19mZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbik7XFxuIFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkIGZvciBGRCAlZDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcImZhaWxlZCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZCBmb3IgRkQgJXU6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRhdHRhY2hfcHJvZ19mZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTEwNjU2LDcgKzEwNjU2LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChjb25zdCBjaGFyICpuYW1lLCBfX3UzMiBhdHRhY2hfcHJvZ19mZCwgaW50IHRcXG4gXFx0YnRmID0gYnRmX2xvYWRfZnJvbV9rZXJuZWwoaW5mby5idGZfaWQsIE5VTEwsIHRva2VuX2ZkKTtcXG4gXFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBnZXQgQlRGICVkIG9mIHRoZSBwcm9ncmFtOiAlc1xcXFxuXFxcIiwgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTtcXG4rXFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGdldCBCVEYgJXUgb2YgdGhlIHByb2dyYW06ICVzXFxcXG5cXFwiLCBpbmZvLmJ0Zl9pZCwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHRlcnIgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgbmFtZSwgQlRGX0tJTkRfRlVOQyk7XFxuQEAgLTEwNzM4LDcgKzEwNzM4LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqYXR0YWNcXG4gXFx0XFx0fVxcbiBcXHRcXHRlcnIgPSBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChhdHRhY2hfbmFtZSwgYXR0YWNoX3Byb2dfZmQsIHByb2ctXFx1MDAzZW9iai1cXHUwMDNldG9rZW5fZmQpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IGZhaWxlZCB0byBmaW5kIEJQRiBwcm9ncmFtIChGRCAlZCkgQlRGIElEIGZvciAnJXMnOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJyVzJzogJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHByb2ctXFx1MDAzZW5hbWUsIGF0dGFjaF9wcm9nX2ZkLCBhdHRhY2hfbmFtZSwgZXJyc3RyKGVycikpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9tYXBfb3AoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IGtleV9zeixcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKHZhbHVlX3N6ICE9IG51bV9jcHUgKiBlbGVtX3N6KSB7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiB1bmV4cGVjdGVkIHZhbHVlIHNpemUgJXp1IHByb3ZpZGVkIGZvciBwZXItQ1BVIG1hcCwgZXhwZWN0ZWQgJWQgKiAlenUgPSAlemRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcIm1hcCAnJXMnOiB1bmV4cGVjdGVkIHZhbHVlIHNpemUgJXp1IHByb3ZpZGVkIGZvciBwZXItQ1BVIG1hcCwgZXhwZWN0ZWQgJWQgKiAlenUgPSAlenVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgdmFsdWVfc3osIG51bV9jcHUsIGVsZW1fc3osIG51bV9jcHUgKiBlbGVtX3N6KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5AQCAtMTE3NzQsNyArMTE3NzQsNyBAQCBzdGF0aWMgdm9pZCBnZW5fcHJvYmVfbGVnYWN5X2V2ZW50X25hbWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6LFxcbiBcXHRzdGF0aWMgaW50IGluZGV4ID0gMDtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXFxcImxpYmJwZl8ldV8lZF8lc18weCV6eFxcXCIsIGdldHBpZCgpLFxcbitcXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXFxcImxpYmJwZl8lZF8lZF8lc18weCV6eFxcXCIsIGdldHBpZCgpLFxcbiBcXHRcXHQgX19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmluZGV4LCAxKSwgbmFtZSwgb2Zmc2V0KTtcXG4gXFxuIFxcdC8qIHNhbml0aXplIG5hbWUgaW4gdGhlIHByb2JlIG5hbWUgKi9cXG5AQCAtMTI5MjQsOCArMTI5MjQsOCBAQCBzdGF0aWMgbG9uZyBlbGZfZmluZF9mdW5jX29mZnNldF9mcm9tX2FyY2hpdmUoY29uc3QgY2hhciAqYXJjaGl2ZV9wYXRoLCBjb25zdCBjaFxcbiBcXHRyZXQgPSBlbGZfZmluZF9mdW5jX29mZnNldChlbGYsIGZpbGVfbmFtZSwgZnVuY19uYW1lKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0cHJfZGVidWcoXFxcImVsZjogc3ltYm9sIGFkZHJlc3MgbWF0Y2ggZm9yICVzIG9mICVzIGluICVzOiAweCV4ICsgMHglbHggPSAweCVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGZ1bmNfbmFtZSwgZmlsZV9uYW1lLCBhcmNoaXZlX3BhdGgsIGVudHJ5LmRhdGFfb2Zmc2V0LCByZXQsXFxuLVxcdFxcdFxcdCByZXQgKyBlbnRyeS5kYXRhX29mZnNldCk7XFxuK1xcdFxcdFxcdCBmdW5jX25hbWUsIGZpbGVfbmFtZSwgYXJjaGl2ZV9wYXRoLCBlbnRyeS5kYXRhX29mZnNldCwgKHVuc2lnbmVkIGxvbmcpcmV0LFxcbitcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpKHJldCArIGVudHJ5LmRhdGFfb2Zmc2V0KSk7XFxuIFxcdFxcdHJldCArPSBlbnRyeS5kYXRhX29mZnNldDtcXG4gXFx0fVxcbiBcXHRlbGZfZW5kKGVsZik7XFxuQEAgLTE0NTcwLDcgKzE0NTcwLDcgQEAgcGVyZl9idWZmZXJfX3Byb2Nlc3NfcmVjb3JkKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqZSwgdm9pZCAqY3R4KVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCJ1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJWRcXFxcblxcXCIsIGUtXFx1MDAzZXR5cGUpO1xcbitcXHRcXHRwcl93YXJuKFxcXCJ1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcXFxcblxcXCIsIGUtXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRyZXR1cm4gTElCQlBGX1BFUkZfRVZFTlRfRVJST1I7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0NPTlQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmMgYi90b29scy9saWIvYnBmL25sYXR0ci5jXFxuaW5kZXggMDY2NjNmOWVhNTgxZjkuLjAwN2ZlMTdkMTdiNDI5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcXG4rKysgYi90b29scy9saWIvYnBmL25sYXR0ci5jXFxuQEAgLTEyMyw3ICsxMjMsNyBAQCBpbnQgbGliYnBmX25sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwgc3RydWN0IG5sYXR0ciAqaGVhZCxcXG4gXFxuIFxcdFxcdGlmICh0Ylt0eXBlXSkge1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJBdHRyaWJ1dGUgb2YgdHlwZSAlI3ggZm91bmQgbXVsdGlwbGUgdGltZXMgaW4gbWVzc2FnZSwgXFxcIlxcbi1cXHRcXHRcXHRcXHRcXFwicHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXFxcXG5cXFwiLCB0eXBlKTtcXG4rXFx0XFx0XFx0XFx0XFxcInByZXZpb3VzIGF0dHJpYnV0ZSBpcyBiZWluZyBpZ25vcmVkLlxcXFxuXFxcIiwgKHVuc2lnbmVkKXR5cGUpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR0Ylt0eXBlXSA9IG5sYTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuYyBiL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmNcXG5pbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9yZWxvX2NvcmUuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmNcXG5AQCAtMjE2LDcgKzIxNiw3IEBAIGludCBfX2JwZl9jb3JlX3R5cGVzX2FyZV9jb21wYXQoY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCxcXG4gXFx0XFx0Z290byByZWN1cjtcXG4gXFx0fVxcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxcXFxuXFxcIixcXG4rXFx0XFx0cHJfd2FybihcXFwidW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cXFxcblxcXCIsXFxuIFxcdFxcdFxcdGJ0Zl9raW5kX3N0cihsb2NhbF90eXBlKSwgbG9jYWxfaWQsIHRhcmdfaWQpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbkBAIC0zODQsNyArMzg0LDcgQEAgaW50IGJwZl9jb3JlX3BhcnNlX3NwZWMoY29uc3QgY2hhciAqcHJvZ19uYW1lLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdFxcdHJldHVybiBzejtcXG4gXFx0XFx0XFx0c3BlYy1cXHUwMDNlYml0X29mZnNldCArPSBhY2Nlc3NfaWR4ICogc3ogKiA4O1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJWRdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvIGZvciBbJXVdICVzIChhdCBpZHggJWQpIGNhcHR1cmVzIHR5cGUgWyV1XSBvZiB1bmV4cGVjdGVkIGtpbmQgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsby1cXHUwMDNldHlwZV9pZCwgc3BlY19zdHIsIGksIGlkLCBidGZfa2luZF9zdHIodCkpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbkBAIC03MjUsNyArNzI1LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0KnZhbCA9IHN6O1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gJWQgYXQgaW5zbiAjJWQgY2FuJ3QgYmUgYXBwbGllZCB0byBhcnJheSBhY2Nlc3NcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAldSBhdCBpbnNuICMldSBjYW4ndCBiZSBhcHBsaWVkIHRvIGFycmF5IGFjY2Vzc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cHJvZ19uYW1lLCByZWxvLVxcdTAwM2VraW5kLCByZWxvLVxcdTAwM2VpbnNuX29mZiAvIDgpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbkBAIC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxcbiBcXHRcXHR3aGlsZSAoYml0X29mZiArIGJpdF9zeiAtIGJ5dGVfb2ZmICogOCBcXHUwMDNlIGJ5dGVfc3ogKiA4KSB7XFxuIFxcdFxcdFxcdGlmIChieXRlX3N6IFxcdTAwM2U9IDgpIHtcXG4gXFx0XFx0XFx0XFx0LyogYml0ZmllbGQgY2FuJ3QgYmUgcmVhZCB3aXRoIDY0LWJpdCByZWFkICovXFxuLVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4ndCBiZSBzYXRpc2ZpZWQgZm9yIGJpdGZpZWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJ3QgYmUgc2F0aXNmaWVkIGZvciBiaXRmaWVsZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0cHJvZ19uYW1lLCByZWxvLVxcdTAwM2VraW5kLCByZWxvLVxcdTAwM2VpbnNuX29mZiAvIDgpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTk3MSw3ICs5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXFxuIFxcdFxcdGVyciA9IDA7XFxuIFxcdH0gZWxzZSBpZiAoZXJyID09IC1FT1BOT1RTVVBQKSB7XFxuIFxcdFxcdC8qIEVPUE5PVFNVUFAgbWVhbnMgdW5rbm93bi91bnN1cHBvcnRlZCByZWxvY2F0aW9uICovXFxuLVxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHVucmVjb2duaXplZCBDTy1SRSByZWxvY2F0aW9uICVzICglZCkgYXQgaW5zbiAjJWRcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHVucmVjb2duaXplZCBDTy1SRSByZWxvY2F0aW9uICVzICgldSkgYXQgaW5zbiAjJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVxcdTAwM2VraW5kKSxcXG4gXFx0XFx0XFx0cmVsby1cXHUwMDNla2luZCwgcmVsby1cXHUwMDNlaW5zbl9vZmYgLyA4KTtcXG4gXFx0fVxcbkBAIC0xMDY3LDcgKzEwNjcsNyBAQCBpbnQgYnBmX2NvcmVfcGF0Y2hfaW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0spXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRpZiAocmVzLVxcdTAwM2V2YWxpZGF0ZSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gIT0gb3JpZ192YWwpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoQUxVL0FMVTY0KSB2YWx1ZTogZ290ICV1LCBleHAgJWxsdSAtXFx1MDAzZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cXHUwMDNlICVsbHVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsXFxuIFxcdFxcdFxcdFxcdGluc25faWR4LCBpbnNuLVxcdTAwM2VpbW0sICh1bnNpZ25lZCBsb25nIGxvbmcpb3JpZ192YWwsXFxuIFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XFxuQEAgLTEwODMsNyArMTA4Myw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRjYXNlIEJQRl9TVDpcXG4gXFx0Y2FzZSBCUEZfU1RYOlxcbiBcXHRcXHRpZiAocmVzLVxcdTAwM2V2YWxpZGF0ZSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgIT0gb3JpZ192YWwpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoTERYL1NUL1NUWCkgdmFsdWU6IGdvdCAldSwgZXhwICVsbHUgLVxcdTAwM2UgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoTERYL1NUL1NUWCkgdmFsdWU6IGdvdCAlZCwgZXhwICVsbHUgLVxcdTAwM2UgJWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXFx1MDAzZW9mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcXG4gXFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfdmFsKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTExNTksNyArMTE1OSw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRwcl93YXJuKFxcXCJwcm9nICclcyc6IHJlbG8gIyVkOiB0cnlpbmcgdG8gcmVsb2NhdGUgdW5yZWNvZ25pemVkIGluc24gIyVkLCBjb2RlOjB4JXgsIHNyYzoweCV4LCBkc3Q6MHgleCwgb2ZmOjB4JXgsIGltbToweCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRwcm9nX25hbWUsIHJlbG9faWR4LCBpbnNuX2lkeCwgaW5zbi1cXHUwMDNlY29kZSxcXG4tXFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRcXHQodW5zaWduZWQpaW5zbi1cXHUwMDNlc3JjX3JlZywgKHVuc2lnbmVkKWluc24tXFx1MDAzZWRzdF9yZWcsICh1bnNpZ25lZClpbnNuLVxcdTAwM2VvZmYsICh1bnNpZ25lZClpbnNuLVxcdTAwM2VpbW0pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTMyMyw3ICsxMzIzLDcgQEAgaW50IGJwZl9jb3JlX2NhbGNfcmVsb19pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcXG4gXFx0XFx0Y29uc3QgY2hhciAqc3BlY19zdHI7XFxuIFxcbiBcXHRcXHRzcGVjX3N0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQobG9jYWxfYnRmLCByZWxvLVxcdTAwM2VhY2Nlc3Nfc3RyX29mZik7XFxuLVxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyVkXSAlcyAlcyArICVzIGZhaWxlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyV1XSAlcyAlcyArICVzIGZhaWxlZDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsIGxvY2FsX2lkLCBidGZfa2luZF9zdHIobG9jYWxfdHlwZSksXFxuIFxcdFxcdFxcdHN0cl9pc19lbXB0eShsb2NhbF9uYW1lKSA/IFxcXCJcXHUwMDNjYW5vblxcdTAwM2VcXFwiIDogbG9jYWxfbmFtZSxcXG4gXFx0XFx0XFx0c3BlY19zdHIgPzogXFxcIlxcdTAwM2M/XFx1MDAzZVxcXCIsIGVycik7XFxuQEAgLTEzNDYsNyArMTM0Niw3IEBAIGludCBicGZfY29yZV9jYWxjX3JlbG9faW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsXFxuIFxcbiBcXHQvKiBsaWJicGYgZG9lc24ndCBzdXBwb3J0IGNhbmRpZGF0ZSBzZWFyY2ggZm9yIGFub255bW91cyB0eXBlcyAqL1xcbiBcXHRpZiAoc3RyX2lzX2VtcHR5KGxvY2FsX25hbWUpKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IFxcdTAwM2Mlc1xcdTAwM2UgKCVkKSByZWxvY2F0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhbm9ueW1vdXMgdHlwZXNcXFxcblxcXCIsXFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogcmVsbyAjJWQ6IFxcdTAwM2Mlc1xcdTAwM2UgKCV1KSByZWxvY2F0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhbm9ueW1vdXMgdHlwZXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVxcdTAwM2VraW5kKSwgcmVsby1cXHUwMDNla2luZCk7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbkBAIC0xNjk3LDcgKzE2OTcsNyBAQCBpbnQgX19icGZfY29yZV90eXBlc19tYXRjaChjb25zdCBzdHJ1Y3QgYnRmICpsb2NhbF9idGYsIF9fdTMyIGxvY2FsX2lkLCBjb25zdCBzdFxcbiBcXHRcXHRnb3RvIHJlY3VyO1xcbiBcXHR9XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdHByX3dhcm4oXFxcInVuZXhwZWN0ZWQga2luZCAlcyByZWxvY2F0ZWQsIGxvY2FsIFslZF0sIHRhcmdldCBbJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRwcl93YXJuKFxcXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJXVdLCB0YXJnZXQgWyV1XVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0YnRmX2tpbmRfc3RyKGxvY2FsX3QpLCBsb2NhbF9pZCwgdGFyZ19pZCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvdXNkdC5jIGIvdG9vbHMvbGliL2JwZi91c2R0LmNcXG5pbmRleCA1N2ZiODJiYjgxYjU4OC4uZGI5NDMyYWRiOTY3YjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi91c2R0LmNcXG4rKysgYi90b29scy9saWIvYnBmL3VzZHQuY1xcbkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIGludCBzYW5pdHlfY2hlY2tfdXNkdF9lbGYoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgpXFxuIFxcdGludCBlbmRpYW5uZXNzO1xcbiBcXG4gXFx0aWYgKGVsZl9raW5kKGVsZikgIT0gRUxGX0tfRUxGKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAlZCBmb3IgJyVzJ1xcXFxuXFxcIiwgZWxmX2tpbmQoZWxmKSwgcGF0aCk7XFxuK1xcdFxcdHByX3dhcm4oXFxcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAldSBmb3IgJyVzJ1xcXFxuXFxcIiwgZWxmX2tpbmQoZWxmKSwgcGF0aCk7XFxuIFxcdFxcdHJldHVybiAtRUJBREY7XFxuIFxcdH1cXG4gXFxuQEAgLTQzOCw4ICs0MzgsOSBAQCBzdGF0aWMgaW50IHBhcnNlX2VsZl9zZWdzKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZWxmX3NlZyAqKnNlZ3MsIHNpelxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwidXNkdDogZGlzY292ZXJlZCBQSERSICMlZCBpbiAnJXMnOiB2YWRkciAweCVseCBtZW1zeiAweCVseCBvZmZzZXQgMHglbHggdHlwZSAweCVseCBmbGFncyAweCVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGksIHBhdGgsIChsb25nKXBoZHIucF92YWRkciwgKGxvbmcpcGhkci5wX21lbXN6LCAobG9uZylwaGRyLnBfb2Zmc2V0LFxcbi1cXHRcXHRcXHQgKGxvbmcpcGhkci5wX3R5cGUsIChsb25nKXBoZHIucF9mbGFncyk7XFxuK1xcdFxcdFxcdCBpLCBwYXRoLFxcbitcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpcGhkci5wX3ZhZGRyLCAodW5zaWduZWQgbG9uZylwaGRyLnBfbWVtc3osICh1bnNpZ25lZCBsb25nKXBoZHIucF9vZmZzZXQsXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZylwaGRyLnBfdHlwZSwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKHBoZHIucF90eXBlICE9IFBUX0xPQUQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtNzE5LDE0ICs3MjAsMTQgQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCxcXG4gXFx0XFx0aWYgKCFzZWcpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVTUkNIO1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJ1c2R0OiBmYWlsZWQgdG8gZmluZCBFTEYgcHJvZ3JhbSBzZWdtZW50IGZvciAnJXM6JXMnIGluICclcycgYXQgSVAgMHglbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9hYnNfaXApO1xcbitcXHRcXHRcXHRcXHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwKTtcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghc2VnLVxcdTAwM2Vpc19leGVjKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwidXNkdDogbWF0Y2hlZCBFTEYgYmluYXJ5ICclcycgc2VnbWVudCBbMHglbHgsIDB4JWx4KSBmb3IgJyVzOiVzJyBhdCBJUCAweCVseCBpcyBub3QgZXhlY3V0YWJsZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cGF0aCwgc2VnLVxcdTAwM2VzdGFydCwgc2VnLVxcdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcXG4tXFx0XFx0XFx0XFx0dXNkdF9hYnNfaXApO1xcbitcXHRcXHRcXHRcXHRwYXRoLCAodW5zaWduZWQgbG9uZylzZWctXFx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXFx1MDAzZWVuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLFxcbitcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHRcXHQvKiB0cmFuc2xhdGUgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gZmlsZSBvZmZzZXQgKi9cXG5AQCAtNzY2LDcgKzc2Nyw3IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXFxuIFxcdFxcdFxcdGlmICghc2VnKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0XFx0XFx0XFx0cHJfd2FybihcXFwidXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJyVzOiVzJyBpbiAnJXMnIGF0IHJlbGF0aXZlIElQIDB4JWx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsIHVzZHRfcmVsX2lwKTtcXG4rXFx0XFx0XFx0XFx0XFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0XFx0fVxcbiBcXG5AQCAtNzc1LDggKzc3NiwxMCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxcbiBcXG4gXFx0XFx0cHJfZGVidWcoXFxcInVzZHQ6IHByb2JlIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAnJXMnIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseCkgYXQgb2Zmc2V0IDB4JWx4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBlaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gXFxcImV4ZWNcXFwiIDogXFxcImxpYiBcXFwiLCBwYXRoLFxcbi1cXHRcXHRcXHQgbm90ZS5sb2NfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfYWJzX2lwLCB1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLFxcbi1cXHRcXHRcXHQgc2VnID8gc2VnLVxcdTAwM2VzdGFydCA6IDAsIHNlZyA/IHNlZy1cXHUwMDNlZW5kIDogMCwgc2VnID8gc2VnLVxcdTAwM2VvZmZzZXQgOiAwKTtcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKW5vdGUubG9jX2FkZHIsICh1bnNpZ25lZCBsb25nKW5vdGUuYmFzZV9hZGRyLFxcbitcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpdXNkdF9hYnNfaXAsICh1bnNpZ25lZCBsb25nKXVzZHRfcmVsX2lwLCBub3RlLmFyZ3MsXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVxcdTAwM2VzdGFydCA6IDApLCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVxcdTAwM2VlbmQgOiAwKSxcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctXFx1MDAzZW9mZnNldCA6IDApKTtcXG4gXFxuIFxcdFxcdC8qIEFkanVzdCBzZW1hcGhvcmUgYWRkcmVzcyB0byBiZSBhIGZpbGUgb2Zmc2V0ICovXFxuIFxcdFxcdGlmIChub3RlLnNlbWFfYWRkcikge1xcbkBAIC03OTEsMTQgKzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxcbiBcXHRcXHRcXHRpZiAoIXNlZykge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRVNSQ0g7XFxuIFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IGZhaWxlZCB0byBmaW5kIEVMRiBsb2FkYWJsZSBzZWdtZW50IHdpdGggc2VtYXBob3JlIG9mICclczolcycgaW4gJyVzJyBhdCAweCVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCBub3RlLnNlbWFfYWRkcik7XFxuK1xcdFxcdFxcdFxcdFxcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgKHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHNlZy1cXHUwMDNlaXNfZXhlYykge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRVNSQ0g7XFxuIFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAnJXMnIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gZm9yIHNlbWFwaG9yZSBvZiAnJXM6JXMnIGF0IDB4JWx4IGlzIGV4ZWN1dGFibGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdHBhdGgsIHNlZy1cXHUwMDNlc3RhcnQsIHNlZy1cXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdG5vdGUuc2VtYV9hZGRyKTtcXG4rXFx0XFx0XFx0XFx0XFx0cGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLVxcdTAwM2VzdGFydCwgKHVuc2lnbmVkIGxvbmcpc2VnLVxcdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTgwNiw4ICs4MDksOCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxcbiBcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcInVzZHQ6IHNlbWEgIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgMHglbHgpIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gYXQgb2Zmc2V0IDB4JWx4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBlaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gXFxcImV4ZWNcXFwiIDogXFxcImxpYiBcXFwiLFxcbi1cXHRcXHRcXHRcXHQgcGF0aCwgbm90ZS5zZW1hX2FkZHIsIG5vdGUuYmFzZV9hZGRyLCB1c2R0X3NlbWFfb2ZmLFxcbi1cXHRcXHRcXHRcXHQgc2VnLVxcdTAwM2VzdGFydCwgc2VnLVxcdTAwM2VlbmQsIHNlZy1cXHUwMDNlb2Zmc2V0KTtcXG4rXFx0XFx0XFx0XFx0IHBhdGgsICh1bnNpZ25lZCBsb25nKW5vdGUuc2VtYV9hZGRyLCAodW5zaWduZWQgbG9uZylub3RlLmJhc2VfYWRkciwgKHVuc2lnbmVkIGxvbmcpdXNkdF9zZW1hX29mZixcXG4rXFx0XFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKXNlZy1cXHUwMDNlc3RhcnQsICh1bnNpZ25lZCBsb25nKXNlZy1cXHUwMDNlZW5kLCAodW5zaWduZWQgbG9uZylzZWctXFx1MDAzZW9mZnNldCk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIFJlY29yZCBhZGp1c3RlZCBhZGRyZXNzZXMgYW5kIG9mZnNldHMgYW5kIHBhcnNlIFVTRFQgc3BlYyAqL1xcbkBAIC0xMTE3LDcgKzExMjAsNyBAQCBzdHJ1Y3QgYnBmX2xpbmsgKnVzZHRfbWFuYWdlcl9hdHRhY2hfdXNkdChzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIGNvbnN0IHN0cnVjdFxcbiBcXHRcXHRcXHRcXHQgICAgICAgIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcInVzZHQ6IGZhaWxlZCB0byBtYXAgSVAgMHglbHggdG8gc3BlYyAjJWQgZm9yICclczolcycgaW4gJyVzJzogJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdHRhcmdldC1cXHUwMDNlYWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKXRhcmdldC1cXHUwMDNlYWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdHBhdGgsIGVycnN0cihlcnIpKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEwOjU2OjE3LjU2NjY4ODA1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4NTMwODUxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzYWFhNTE5YzIxMmE4N2Q4ZDRkZjJlNDljNTM2NzhhYzY5ZDljYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAxMDo1NjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXG5pbmRleCA4MjNiY2U4OTUxNzhkYS4uYmY2YTY4MTE4NDA1MTMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4rKysgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyBpbnQgYnRmX3BhcnNlX3R5cGVfc2VjKHN0cnVjdCBidGYgKmJ0ZilcbiBcdFx0aWYgKHR5cGVfc2l6ZSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gdHlwZV9zaXplO1xuIFx0XHRpZiAobmV4dF90eXBlICsgdHlwZV9zaXplIFx1MDAzZSBlbmRfdHlwZSkge1xuLVx0XHRcdHByX3dhcm4oXCJCVEYgdHlwZSBbJWRdIGlzIG1hbGZvcm1lZFxcblwiLCBidGYtXHUwMDNlc3RhcnRfaWQgKyBidGYtXHUwMDNlbnJfdHlwZXMpO1xuK1x0XHRcdHByX3dhcm4oXCJCVEYgdHlwZSBbJXVdIGlzIG1hbGZvcm1lZFxcblwiLCBidGYtXHUwMDNlc3RhcnRfaWQgKyBidGYtXHUwMDNlbnJfdHlwZXMpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMTQyNCw3ICsxNDI0LDcgQEAgc3RhdGljIGludCBidGZfZmluZF9lbGZfc2VjdGlvbnMoRWxmICplbGYsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidGZfZWxmX3NlY3NcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKHNoLnNoX3R5cGUgIT0gU0hUX1BST0dCSVRTKSB7XG4tXHRcdFx0cHJfd2FybihcInVuZXhwZWN0ZWQgc2VjdGlvbiB0eXBlICglZCkgb2Ygc2VjdGlvbiglZCwgJXMpIGZyb20gJXNcXG5cIixcbitcdFx0XHRwcl93YXJuKFwidW5leHBlY3RlZCBzZWN0aW9uIHR5cGUgKCV1KSBvZiBzZWN0aW9uKCVkLCAlcykgZnJvbSAlc1xcblwiLFxuIFx0XHRcdFx0c2guc2hfdHlwZSwgaWR4LCBuYW1lLCBwYXRoKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHN0YXRpYyBib29sIGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgaWQxLCBfX3UzMiBpZDIsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAoIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgbTEtXHUwMDNldHlwZSwgbTItXHUwMDNldHlwZSwgZGVwdGggLSAxKSkge1xuIFx0XHRcdFx0aWYgKHQxLVx1MDAzZW5hbWVfb2ZmKSB7XG4tXHRcdFx0XHRcdHByX2RlYnVnKFwiJXMgJyVzJyBzaXplPSVkIHZsZW49JWQgaWQxWyV1XSBpZDJbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBpZGVudGljYWwgZm9yIGZpZWxkIyVkICclcydcXG5cIixcbitcdFx0XHRcdFx0cHJfZGVidWcoXCIlcyAnJXMnIHNpemU9JXUgdmxlbj0ldSBpZDFbJXVdIGlkMlsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGlkZW50aWNhbCBmb3IgZmllbGQjJWQgJyVzJ1xcblwiLFxuIFx0XHRcdFx0XHRcdCBrMSA9PSBCVEZfS0lORF9TVFJVQ1QgPyBcIlNUUlVDVFwiIDogXCJVTklPTlwiLFxuIFx0XHRcdFx0XHRcdCBidGZfX25hbWVfYnlfb2Zmc2V0KGQtXHUwMDNlYnRmLCB0MS1cdTAwM2VuYW1lX29mZiksXG4gXHRcdFx0XHRcdFx0IHQxLVx1MDAzZXNpemUsIGJ0Zl92bGVuKHQxKSwgaWQxLCBpZDIsIGksXG5AQCAtNTEwNCw3ICs1MTA0LDcgQEAgc3RhdGljIGludCBidGZfZGVkdXBfaXNfZXF1aXYoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgY2FuZF9pZCxcbiBcdFx0XHRlcSA9IGJ0Zl9kZWR1cF9pc19lcXVpdihkLCBjYW5kX20tXHUwMDNldHlwZSwgY2Fub25fbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRpZiAoZXEgXHUwMDNjPSAwKSB7XG4gXHRcdFx0XHRpZiAoY2FuZF90eXBlLVx1MDAzZW5hbWVfb2ZmKSB7XG4tXHRcdFx0XHRcdHByX2RlYnVnKFwiJXMgJyVzJyBzaXplPSVkIHZsZW49JWQgY2FuZF9pZFsldV0gY2Fub25faWRbJXVdIHNoYWxsb3ctZXF1YWwgYnV0IG5vdCBlcXVpdiBmb3IgZmllbGQjJWQgJyVzJzogJWRcXG5cIixcbitcdFx0XHRcdFx0cHJfZGVidWcoXCIlcyAnJXMnIHNpemU9JXUgdmxlbj0ldSBjYW5kX2lkWyV1XSBjYW5vbl9pZFsldV0gc2hhbGxvdy1lcXVhbCBidXQgbm90IGVxdWl2IGZvciBmaWVsZCMlZCAnJXMnOiAlZFxcblwiLFxuIFx0XHRcdFx0XHRcdCBjYW5kX2tpbmQgPT0gQlRGX0tJTkRfU1RSVUNUID8gXCJTVFJVQ1RcIiA6IFwiVU5JT05cIixcbiBcdFx0XHRcdFx0XHQgYnRmX19uYW1lX2J5X29mZnNldChkLVx1MDAzZWJ0ZiwgY2FuZF90eXBlLVx1MDAzZW5hbWVfb2ZmKSxcbiBcdFx0XHRcdFx0XHQgY2FuZF90eXBlLVx1MDAzZXNpemUsIHZsZW4sIGNhbmRfaWQsIGNhbm9uX2lkLCBpLFxuQEAgLTYwNjksNyArNjA2OSw3IEBAIHN0YXRpYyBpbnQgYnRmX2FkZF9kaXN0aWxsZWRfdHlwZXMoc3RydWN0IGJ0Zl9kaXN0aWxsICpkaXN0KVxuIFx0XHRcdGVyciA9IGJ0Zl9hZGRfdHlwZShcdTAwMjZkaXN0LVx1MDAzZXBpcGUsIHQpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdHByX3dhcm4oXCJ1bmV4cGVjdGVkIGtpbmQgd2hlbiBhZGRpbmcgYmFzZSB0eXBlICclcydbJXVdIG9mIGtpbmQgWyV1XSB0byBkaXN0aWxsZWQgYmFzZSBCVEYuXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcInVuZXhwZWN0ZWQga2luZCB3aGVuIGFkZGluZyBiYXNlIHR5cGUgJyVzJ1slZF0gb2Yga2luZCBbJWRdIHRvIGRpc3RpbGxlZCBiYXNlIEJURi5cXG5cIixcbiBcdFx0XHRcdG5hbWUsIGksIGtpbmQpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX2R1bXAuY1xuaW5kZXggY2MxYmE2NWJiNmM1YWMuLjEyM2M0NDhmMjBjNzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9idGZfZHVtcC5jXG4rKysgYi90b29scy9saWIvYnBmL2J0Zl9kdW1wLmNcbkBAIC0xNzc2LDcgKzE3NzYsNyBAQCBzdGF0aWMgaW50IGJ0Zl9kdW1wX2dldF9iaXRmaWVsZF92YWx1ZShzdHJ1Y3QgYnRmX2R1bXAgKmQsXG4gXG4gXHQvKiBNYXhpbXVtIHN1cHBvcnRlZCBiaXRmaWVsZCBzaXplIGlzIDY0IGJpdHMgKi9cbiBcdGlmICh0LVx1MDAzZXNpemUgXHUwMDNlIDgpIHtcbi1cdFx0cHJfd2FybihcInVuZXhwZWN0ZWQgYml0ZmllbGQgc2l6ZSAlZFxcblwiLCB0LVx1MDAzZXNpemUpO1xuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBiaXRmaWVsZCBzaXplICV1XFxuXCIsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTIyNTEsNyArMjI1MSw3IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfZ2V0X2VudW1fdmFsdWUoc3RydWN0IGJ0Zl9kdW1wICpkLFxuIFx0XHQqdmFsdWUgPSBpc19zaWduZWQgPyAqKF9fczggKilkYXRhIDogKihfX3U4ICopZGF0YTtcbiBcdFx0cmV0dXJuIDA7XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwidW5leHBlY3RlZCBzaXplICVkIGZvciBlbnVtLCBpZDpbJXVdXFxuXCIsIHQtXHUwMDNlc2l6ZSwgaWQpO1xuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBzaXplICV1IGZvciBlbnVtLCBpZDpbJXVdXFxuXCIsIHQtXHUwMDNlc2l6ZSwgaWQpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGZfcmVsb2NhdGUuYyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcbmluZGV4IDUzZDFmMzU0MWJjZTY5Li5kZjVmYTRiZDg3ZDY5YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvYnRmX3JlbG9jYXRlLmNcbkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfbWFwX2Rpc3RpbGxlZF9iYXNlKHN0cnVjdCBidGZfcmVsb2NhdGUgKnIpXG4gXHRcdCAgICAgY21wX2J0Zl9uYW1lX3NpemUoXHUwMDI2YmFzZV9pbmZvLCBkaXN0X2luZm8pID09IDA7XG4gXHRcdCAgICAgZGlzdF9pbmZvKyspIHtcbiBcdFx0XHRpZiAoIWRpc3RfaW5mby1cdTAwM2VpZCB8fCBkaXN0X2luZm8tXHUwMDNlaWQgXHUwMDNlPSByLVx1MDAzZW5yX2Rpc3RfYmFzZV90eXBlcykge1xuLVx0XHRcdFx0cHJfd2FybihcImJhc2UgQlRGIGlkIFslZF0gbWFwcyB0byBpbnZhbGlkIGRpc3RpbGxlZCBiYXNlIEJURiBpZCBbJWRdXFxuXCIsXG4rXHRcdFx0XHRwcl93YXJuKFwiYmFzZSBCVEYgaWQgWyV1XSBtYXBzIHRvIGludmFsaWQgZGlzdGlsbGVkIGJhc2UgQlRGIGlkIFsldV1cXG5cIixcbiBcdFx0XHRcdFx0aWQsIGRpc3RfaW5mby1cdTAwM2VpZCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBkb25lO1xuQEAgLTM2OCw3ICszNjgsNyBAQCBzdGF0aWMgaW50IGJ0Zl9yZWxvY2F0ZV9tYXBfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZGlzdF90ID0gYnRmX3R5cGVfYnlfaWQoci1cdTAwM2VkaXN0X2Jhc2VfYnRmLCBpZCk7XG4gXHRcdG5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KHItXHUwMDNlZGlzdF9iYXNlX2J0ZiwgZGlzdF90LVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0cHJfd2FybihcImRpc3RpbGxlZCBiYXNlIEJURiB0eXBlICclcycgWyVkXSBpcyBub3QgbWFwcGVkIHRvIGJhc2UgQlRGIGlkXFxuXCIsXG4rXHRcdHByX3dhcm4oXCJkaXN0aWxsZWQgYmFzZSBCVEYgdHlwZSAnJXMnIFsldV0gaXMgbm90IG1hcHBlZCB0byBiYXNlIEJURiBpZFxcblwiLFxuIFx0XHRcdG5hbWUsIGlkKTtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtMzk3LDExICszOTcsMTEgQEAgc3RhdGljIGludCBidGZfcmVsb2NhdGVfdmFsaWRhdGVfZGlzdGlsbGVkX2Jhc2Uoc3RydWN0IGJ0Zl9yZWxvY2F0ZSAqcilcbiBcdFx0Y2FzZSBCVEZfS0lORF9GV0Q6XG4gXHRcdFx0aWYgKHQtXHUwMDNlbmFtZV9vZmYpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRwcl93YXJuKFwidHlwZSBbJWRdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cIixcbitcdFx0XHRwcl93YXJuKFwidHlwZSBbJXVdLCBraW5kIFslZF0gaXMgaW52YWxpZCBmb3IgZGlzdGlsbGVkIGJhc2UgQlRGOyBpdCBpcyBhbm9ueW1vdXNcXG5cIixcbiBcdFx0XHRcdGksIGtpbmQpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdHByX3dhcm4oXCJ0eXBlIFslZF0gaW4gZGlzdGlsbGVkIGJhc2VkIEJURiBoYXMgdW5leHBlY3RlZCBraW5kIFslZF1cXG5cIixcbitcdFx0XHRwcl93YXJuKFwidHlwZSBbJXVdIGluIGRpc3RpbGxlZCBiYXNlZCBCVEYgaGFzIHVuZXhwZWN0ZWQga2luZCBbJWRdXFxuXCIsXG4gXHRcdFx0XHRpLCBraW5kKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZWxmLmMgYi90b29scy9saWIvYnBmL2VsZi5jXG5pbmRleCAyOTVkYmRhMjQ1ODA3MS4uZmUxMzZkMDI1OTY3OWYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2VsZi5jXG4rKysgYi90b29scy9saWIvYnBmL2VsZi5jXG5AQCAtMzU0LDcgKzM1NCw3IEBAIGxvbmcgZWxmX2ZpbmRfZnVuY19vZmZzZXQoRWxmICplbGYsIGNvbnN0IGNoYXIgKmJpbmFyeV9wYXRoLCBjb25zdCBjaGFyICpuYW1lKVxuIFxuIFx0aWYgKHJldCBcdTAwM2UgMCkge1xuIFx0XHRwcl9kZWJ1ZyhcImVsZjogc3ltYm9sIGFkZHJlc3MgbWF0Y2ggZm9yICclcycgaW4gJyVzJzogMHglbHhcXG5cIiwgbmFtZSwgYmluYXJ5X3BhdGgsXG4tXHRcdFx0IHJldCk7XG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKXJldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAocmV0ID09IDApIHtcbiBcdFx0XHRwcl93YXJuKFwiZWxmOiAnJXMnIGlzIDAgaW4gc3ltdGFiIGZvciAnJXMnOiAlc1xcblwiLCBuYW1lLCBiaW5hcnlfcGF0aCxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5pbmRleCBkNzk2OTVmMDFjODdmMy4uYzdmMmQyYWM3YmIzNWYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbkBAIC0zODQsNyArMzg0LDcgQEAgaW50IGJwZl9nZW5fX2ZpbmlzaChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbnJfcHJvZ3MsIGludCBucl9tYXBzKVxuIFx0aW50IGk7XG4gXG4gXHRpZiAobnJfcHJvZ3MgXHUwMDNjIGdlbi1cdTAwM2Vucl9wcm9ncyB8fCBucl9tYXBzICE9IGdlbi1cdTAwM2Vucl9tYXBzKSB7XG4tXHRcdHByX3dhcm4oXCJucl9wcm9ncyAlZC8lZCBucl9tYXBzICVkLyVkIG1pc21hdGNoXFxuXCIsXG4rXHRcdHByX3dhcm4oXCJucl9wcm9ncyAlZC8ldSBucl9tYXBzICVkLyV1IG1pc21hdGNoXFxuXCIsXG4gXHRcdFx0bnJfcHJvZ3MsIGdlbi1cdTAwM2Vucl9wcm9ncywgbnJfbWFwcywgZ2VuLVx1MDAzZW5yX21hcHMpO1xuIFx0XHRnZW4tXHUwMDNlZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRyZXR1cm4gZ2VuLVx1MDAzZWVycm9yO1xuQEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lkIGJwZl9nZW5fX2xvYWRfYnRmKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IHZvaWQgKmJ0Zl9yYXdfZGF0YSxcbiBcbiBcdGF0dHIuYnRmX3NpemUgPSB0Z3RfZW5kaWFuKGJ0Zl9yYXdfc2l6ZSk7XG4gXHRidGZfbG9hZF9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCJnZW46IGxvYWRfYnRmOiBvZmYgJWQgc2l6ZSAlZCwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cIixcbitcdHByX2RlYnVnKFwiZ2VuOiBsb2FkX2J0Zjogb2ZmICVkIHNpemUgJXUsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCIsXG4gXHRcdCBidGZfZGF0YSwgYnRmX3Jhd19zaXplLCBidGZfbG9hZF9hdHRyLCBhdHRyX3NpemUpO1xuIFxuIFx0LyogcG9wdWxhdGUgdW5pb24gYnBmX2F0dHIgd2l0aCB1c2VyIHByb3ZpZGVkIGxvZyBkZXRhaWxzICovXG5AQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX2NyZWF0ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0YXR0ci5idGZfdmFsdWVfdHlwZV9pZCA9IHRndF9lbmRpYW4obWFwX2F0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpO1xuIFxuIFx0bWFwX2NyZWF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCJnZW46IG1hcF9jcmVhdGU6ICVzIGlkeCAlZCB0eXBlICVkIHZhbHVlX3R5cGVfaWQgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogbWFwX2NyZWF0ZTogJXMgaWR4ICVkIHR5cGUgJXUgdmFsdWVfdHlwZV9pZCAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cIixcbiBcdFx0IG1hcF9uYW1lLCBtYXBfaWR4LCBtYXBfdHlwZSwgbWFwX2F0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsXG4gXHRcdCBtYXBfY3JlYXRlX2F0dHIsIGF0dHJfc2l6ZSk7XG4gXG5AQCAtMTA4Miw3ICsxMDgyLDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiBcdGxpY2Vuc2Vfb2ZmID0gYWRkX2RhdGEoZ2VuLCBsaWNlbnNlLCBzdHJsZW4obGljZW5zZSkgKyAxKTtcbiBcdC8qIGFkZCBpbnNucyB0byBibG9iIG9mIGJ5dGVzICovXG4gXHRpbnNuc19vZmYgPSBhZGRfZGF0YShnZW4sIGluc25zLCBpbnNuX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pKTtcbi1cdHByX2RlYnVnKFwiZ2VuOiBwcm9nX2xvYWQ6IHByb2dfaWR4ICVkIHR5cGUgJWQgaW5zbiBvZmYgJWQgaW5zbnNfY250ICV6ZCBsaWNlbnNlIG9mZiAlZFxcblwiLFxuK1x0cHJfZGVidWcoXCJnZW46IHByb2dfbG9hZDogcHJvZ19pZHggJWQgdHlwZSAldSBpbnNuIG9mZiAlZCBpbnNuc19jbnQgJXp1IGxpY2Vuc2Ugb2ZmICVkXFxuXCIsXG4gXHRcdCBwcm9nX2lkeCwgcHJvZ190eXBlLCBpbnNuc19vZmYsIGluc25fY250LCBsaWNlbnNlX29mZik7XG4gXG4gXHQvKiBjb252ZXJ0IGJsb2IgaW5zbnMgdG8gdGFyZ2V0IGVuZGlhbm5lc3MgKi9cbkBAIC0xMTA1LDIxICsxMTA1LDIxIEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sXG4gXHRhdHRyLmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHRndF9lbmRpYW4obG9hZF9hdHRyLVx1MDAzZWZ1bmNfaW5mb19yZWNfc2l6ZSk7XG4gXHRhdHRyLmZ1bmNfaW5mb19jbnQgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fY250KTtcbiBcdGZ1bmNfaW5mbyA9IGFkZF9kYXRhKGdlbiwgbG9hZF9hdHRyLVx1MDAzZWZ1bmNfaW5mbywgZnVuY19pbmZvX3RvdF9zeik7XG4tXHRwcl9kZWJ1ZyhcImdlbjogcHJvZ19sb2FkOiBmdW5jX2luZm86IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJWRcXG5cIixcbitcdHByX2RlYnVnKFwiZ2VuOiBwcm9nX2xvYWQ6IGZ1bmNfaW5mbzogb2ZmICVkIGNudCAldSByZWMgc2l6ZSAldVxcblwiLFxuIFx0XHQgZnVuY19pbmZvLCBsb2FkX2F0dHItXHUwMDNlZnVuY19pbmZvX2NudCxcbiBcdFx0IGxvYWRfYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemUpO1xuIFxuIFx0YXR0ci5saW5lX2luZm9fcmVjX3NpemUgPSB0Z3RfZW5kaWFuKGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm9fcmVjX3NpemUpO1xuIFx0YXR0ci5saW5lX2luZm9fY250ID0gdGd0X2VuZGlhbihsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX2NudCk7XG4gXHRsaW5lX2luZm8gPSBhZGRfZGF0YShnZW4sIGxvYWRfYXR0ci1cdTAwM2VsaW5lX2luZm8sIGxpbmVfaW5mb190b3Rfc3opO1xuLVx0cHJfZGVidWcoXCJnZW46IHByb2dfbG9hZDogbGluZV9pbmZvOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICVkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogcHJvZ19sb2FkOiBsaW5lX2luZm86IG9mZiAlZCBjbnQgJXUgcmVjIHNpemUgJXVcXG5cIixcbiBcdFx0IGxpbmVfaW5mbywgbG9hZF9hdHRyLVx1MDAzZWxpbmVfaW5mb19jbnQsXG4gXHRcdCBsb2FkX2F0dHItXHUwMDNlbGluZV9pbmZvX3JlY19zaXplKTtcbiBcbiBcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gdGd0X2VuZGlhbigoX191MzIpc2l6ZW9mKHN0cnVjdCBicGZfY29yZV9yZWxvKSk7XG4gXHRhdHRyLmNvcmVfcmVsb19jbnQgPSB0Z3RfZW5kaWFuKGdlbi1cdTAwM2Vjb3JlX3JlbG9fY250KTtcbiBcdGNvcmVfcmVsb3MgPSBhZGRfZGF0YShnZW4sIGdlbi1cdTAwM2Vjb3JlX3JlbG9zLCBjb3JlX3JlbG9fdG90X3N6KTtcbi1cdHByX2RlYnVnKFwiZ2VuOiBwcm9nX2xvYWQ6IGNvcmVfcmVsb3M6IG9mZiAlZCBjbnQgJWQgcmVjIHNpemUgJXpkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogcHJvZ19sb2FkOiBjb3JlX3JlbG9zOiBvZmYgJWQgY250ICVkIHJlYyBzaXplICV6dVxcblwiLFxuIFx0XHQgY29yZV9yZWxvcywgZ2VuLVx1MDAzZWNvcmVfcmVsb19jbnQsXG4gXHRcdCBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKTtcbiBcbkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqcHZhbHVlLFxuIFx0fVxuIFxuIFx0bWFwX3VwZGF0ZV9hdHRyID0gYWRkX2RhdGEoZ2VuLCBcdTAwMjZhdHRyLCBhdHRyX3NpemUpO1xuLVx0cHJfZGVidWcoXCJnZW46IG1hcF91cGRhdGVfZWxlbTogaWR4ICVkLCB2YWx1ZTogb2ZmICVkIHNpemUgJWQsIGF0dHI6IG9mZiAlZCBzaXplICVkXFxuXCIsXG4rXHRwcl9kZWJ1ZyhcImdlbjogbWFwX3VwZGF0ZV9lbGVtOiBpZHggJWQsIHZhbHVlOiBvZmYgJWQgc2l6ZSAldSwgYXR0cjogb2ZmICVkIHNpemUgJWRcXG5cIixcbiBcdFx0IG1hcF9pZHgsIHZhbHVlLCB2YWx1ZV9zaXplLCBtYXBfdXBkYXRlX2F0dHIsIGF0dHJfc2l6ZSk7XG4gXHRtb3ZlX2Jsb2IyYmxvYihnZW4sIGF0dHJfZmllbGQobWFwX3VwZGF0ZV9hdHRyLCBtYXBfZmQpLCA0LFxuIFx0XHQgICAgICAgYmxvYl9mZF9hcnJheV9vZmYoZ2VuLCBtYXBfaWR4KSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDEzNjg3NTJhYTEzYzM5Li43MTYyMTQ2MjgwYTgwZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC0xNDg2LDcgKzE0ODYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3RydWN0X29wc19tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNlY19uYW1lLFxuIFx0XHQgICAgICAgdHlwZS1cdTAwM2VzaXplKTtcbiBcdFx0c3Rfb3BzLVx1MDAzZXR5cGVfaWQgPSB0eXBlX2lkO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JXUpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwiLFxuK1x0XHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgaW5pdDogc3RydWN0ICVzKHR5cGVfaWQ9JWQpICVzIGZvdW5kIGF0IG9mZnNldCAldVxcblwiLFxuIFx0XHRcdCB0bmFtZSwgdHlwZV9pZCwgdmFyX25hbWUsIHZzaS1cdTAwM2VvZmZzZXQpO1xuIFx0fVxuIFxuQEAgLTI2MjYsNyArMjYyNiw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBrZXkgdHlwZSBbJWRdIG5vdCBmb3VuZC5cXG5cIixcbitcdFx0XHRcdHByX3dhcm4oXCJtYXAgJyVzJzoga2V5IHR5cGUgWyV1XSBub3QgZm91bmQuXFxuXCIsXG4gXHRcdFx0XHRcdG1hcF9uYW1lLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuQEAgLTI2NjYsNyArMjY2Niw3IEBAIGludCBwYXJzZV9idGZfbWFwX2RlZihjb25zdCBjaGFyICptYXBfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiB2YWx1ZSB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwiLFxuK1x0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiB2YWx1ZSB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwiLFxuIFx0XHRcdFx0XHRtYXBfbmFtZSwgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0yNzIwLDcgKzI3MjAsNyBAQCBpbnQgcGFyc2VfYnRmX21hcF9kZWYoY29uc3QgY2hhciAqbWFwX25hbWUsIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHRtYXBfZGVmLVx1MDAzZXZhbHVlX3NpemUgPSA0O1xuIFx0XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBtLVx1MDAzZXR5cGUpO1xuIFx0XHRcdGlmICghdCkge1xuLVx0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiAlcyB0eXBlIFslZF0gbm90IGZvdW5kLlxcblwiLFxuK1x0XHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiAlcyB0eXBlIFsldV0gbm90IGZvdW5kLlxcblwiLFxuIFx0XHRcdFx0XHRtYXBfbmFtZSwgZGVzYywgbS1cdTAwM2V0eXBlKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0zNDc2LDcgKzM0NzYsNyBAQCBzdGF0aWMgaW50IGJ0Zl9maXh1cF9kYXRhc2VjKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBcdFx0dmFyX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdF92YXItXHUwMDNlbmFtZV9vZmYpO1xuIFx0XHRpZiAoIXZhcl9uYW1lKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzZWMgJyVzJzogZmFpbGVkIHRvIGZpbmQgbmFtZSBvZiBEQVRBU0VDJ3MgbWVtYmVyICMlZFxcblwiLFxuK1x0XHRcdHByX2RlYnVnKFwic2VjICclcyc6IGZhaWxlZCB0byBmaW5kIG5hbWUgb2YgREFUQVNFQydzIG1lbWJlciAjJXVcXG5cIixcbiBcdFx0XHRcdCBzZWNfbmFtZSwgaSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRcdH1cbkBAIC0zOTcxLDcgKzM5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGlmICghZGF0YSlcbiBcdFx0XHRyZXR1cm4gLUxJQkJQRl9FUlJOT19fRk9STUFUO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcImVsZjogc2VjdGlvbiglZCkgJXMsIHNpemUgJWxkLCBsaW5rICVkLCBmbGFncyAlbHgsIHR5cGU9JWRcXG5cIixcbitcdFx0cHJfZGVidWcoXCJlbGY6IHNlY3Rpb24oJWQpICVzLCBzaXplICVsdSwgbGluayAlZCwgZmxhZ3MgJWx4LCB0eXBlPSVkXFxuXCIsXG4gXHRcdFx0IGlkeCwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGF0YS1cdTAwM2VkX3NpemUsXG4gXHRcdFx0IChpbnQpc2gtXHUwMDNlc2hfbGluaywgKHVuc2lnbmVkIGxvbmcpc2gtXHUwMDNlc2hfZmxhZ3MsXG4gXHRcdFx0IChpbnQpc2gtXHUwMDNlc2hfdHlwZSk7XG5AQCAtNDQ5NCw3ICs0NDk0LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcbiBcdFx0XHRleHQtXHUwMDNla2NmZy5kYXRhX29mZiA9IHJvdW5kdXAob2ZmLCBleHQtXHUwMDNla2NmZy5hbGlnbik7XG4gXHRcdFx0b2ZmID0gZXh0LVx1MDAzZWtjZmcuZGF0YV9vZmYgKyBleHQtXHUwMDNla2NmZy5zejtcbi1cdFx0XHRwcl9kZWJ1ZyhcImV4dGVybiAoa2NmZykgIyVkOiBzeW1ib2wgJWQsIG9mZiAldSwgbmFtZSAlc1xcblwiLFxuK1x0XHRcdHByX2RlYnVnKFwiZXh0ZXJuIChrY2ZnKSAjJWQ6IHN5bWJvbCAlZCwgb2ZmICVkLCBuYW1lICVzXFxuXCIsXG4gXHRcdFx0XHQgaSwgZXh0LVx1MDAzZXN5bV9pZHgsIGV4dC1cdTAwM2VrY2ZnLmRhdGFfb2ZmLCBleHQtXHUwMDNlbmFtZSk7XG4gXHRcdH1cbiBcdFx0c2VjLVx1MDAzZXNpemUgPSBvZmY7XG5AQCAtNDYyNiw3ICs0NjI2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG4gXHRpZiAoIWlzX2NhbGxfaW5zbihpbnNuKSBcdTAwMjZcdTAwMjYgIWlzX2xkaW1tNjRfaW5zbihpbnNuKSkge1xuLVx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBpbnZhbGlkIHJlbG8gYWdhaW5zdCAnJXMnIGZvciBpbnNuc1slZF0uY29kZSAweCV4XFxuXCIsXG4rXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IGludmFsaWQgcmVsbyBhZ2FpbnN0ICclcycgZm9yIGluc25zWyV1XS5jb2RlIDB4JXhcXG5cIixcbiBcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIHN5bV9uYW1lLCBpbnNuX2lkeCwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0cmV0dXJuIC1MSUJCUEZfRVJSTk9fX1JFTE9DO1xuIFx0fVxuQEAgLTQ3NDksNyArNDc0OSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dyYW1fX3JlY29yZF9yZWxvYyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHRcdFx0ICAgIG1hcC1cdTAwM2VzZWNfaWR4ICE9IHN5bS1cdTAwM2VzdF9zaG5keCB8fFxuIFx0XHRcdCAgICBtYXAtXHUwMDNlc2VjX29mZnNldCAhPSBzeW0tXHUwMDNlc3RfdmFsdWUpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRwcl9kZWJ1ZyhcInByb2cgJyVzJzogZm91bmQgbWFwICV6ZCAoJXMsIHNlYyAlZCwgb2ZmICV6dSkgZm9yIGluc24gIyV1XFxuXCIsXG4rXHRcdFx0cHJfZGVidWcoXCJwcm9nICclcyc6IGZvdW5kIG1hcCAlenUgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICMldVxcblwiLFxuIFx0XHRcdFx0IHByb2ctXHUwMDNlbmFtZSwgbWFwX2lkeCwgbWFwLVx1MDAzZW5hbWUsIG1hcC1cdTAwM2VzZWNfaWR4LFxuIFx0XHRcdFx0IG1hcC1cdTAwM2VzZWNfb2Zmc2V0LCBpbnNuX2lkeCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtNDc3Niw3ICs0Nzc2LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ3JhbV9fcmVjb3JkX3JlbG9jKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0bWFwID0gXHUwMDI2b2JqLVx1MDAzZW1hcHNbbWFwX2lkeF07XG4gXHRcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgIT0gdHlwZSB8fCBtYXAtXHUwMDNlc2VjX2lkeCAhPSBzeW0tXHUwMDNlc3Rfc2huZHgpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHByX2RlYnVnKFwicHJvZyAnJXMnOiBmb3VuZCBkYXRhIG1hcCAlemQgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XFxuXCIsXG4rXHRcdHByX2RlYnVnKFwicHJvZyAnJXMnOiBmb3VuZCBkYXRhIG1hcCAlenUgKCVzLCBzZWMgJWQsIG9mZiAlenUpIGZvciBpbnNuICV1XFxuXCIsXG4gXHRcdFx0IHByb2ctXHUwMDNlbmFtZSwgbWFwX2lkeCwgbWFwLVx1MDAzZW5hbWUsIG1hcC1cdTAwM2VzZWNfaWR4LFxuIFx0XHRcdCBtYXAtXHUwMDNlc2VjX29mZnNldCwgaW5zbl9pZHgpO1xuIFx0XHRicmVhaztcbkBAIC00OTg1LDcgKzQ5ODUsNyBAQCBzdGF0aWMgaW50IGJwZl9nZXRfbWFwX2luZm9fZnJvbV9mZGluZm8oaW50IGZkLCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvKVxuIFx0XHRcdGluZm8tXHUwMDNldmFsdWVfc2l6ZSA9IHZhbDtcbiBcdFx0ZWxzZSBpZiAoc3NjYW5mKGJ1ZmYsIFwibWF4X2VudHJpZXM6XFx0JXVcIiwgXHUwMDI2dmFsKSA9PSAxKVxuIFx0XHRcdGluZm8tXHUwMDNlbWF4X2VudHJpZXMgPSB2YWw7XG4tXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcIm1hcF9mbGFnczpcXHQlaVwiLCBcdTAwMjZ2YWwpID09IDEpXG4rXHRcdGVsc2UgaWYgKHNzY2FuZihidWZmLCBcIm1hcF9mbGFnczpcXHQleFwiLCBcdTAwMjZ2YWwpID09IDEpXG4gXHRcdFx0aW5mby1cdTAwM2VtYXBfZmxhZ3MgPSB2YWw7XG4gXHR9XG4gXG5AQCAtNTUyMSwxMSArNTUyMSwxMSBAQCBzdGF0aWMgaW50IGluaXRfbWFwX2luX21hcF9zbG90cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFslZF0gdG8gbWFwICclcycgZmQ9JWQ6ICVzXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gbWFwICclcycgZmQ9JWQ6ICVzXFxuXCIsXG4gXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgaSwgdGFyZ19tYXAtXHUwMDNlbmFtZSwgZmQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwibWFwICclcyc6IHNsb3QgWyVkXSBzZXQgdG8gbWFwICclcycgZmQ9JWRcXG5cIixcbitcdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2xvdCBbJXVdIHNldCB0byBtYXAgJyVzJyBmZD0lZFxcblwiLFxuIFx0XHRcdCBtYXAtXHUwMDNlbmFtZSwgaSwgdGFyZ19tYXAtXHUwMDNlbmFtZSwgZmQpO1xuIFx0fVxuIFxuQEAgLTU1NTQsMTEgKzU1NTQsMTEgQEAgc3RhdGljIGludCBpbml0X3Byb2dfYXJyYXlfc2xvdHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXHUwMDNlZmQsIFx1MDAyNmksIFx1MDAyNmZkLCAwKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwibWFwICclcyc6IGZhaWxlZCB0byBpbml0aWFsaXplIHNsb3QgWyVkXSB0byBwcm9nICclcycgZmQ9JWQ6ICVzXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbG90IFsldV0gdG8gcHJvZyAnJXMnIGZkPSVkOiAlc1xcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIGksIHRhcmdfcHJvZy1cdTAwM2VuYW1lLCBmZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2xvdCBbJWRdIHNldCB0byBwcm9nICclcycgZmQ9JWRcXG5cIixcbitcdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2xvdCBbJXVdIHNldCB0byBwcm9nICclcycgZmQ9JWRcXG5cIixcbiBcdFx0XHQgbWFwLVx1MDAzZW5hbWUsIGksIHRhcmdfcHJvZy1cdTAwM2VuYW1lLCBmZCk7XG4gXHR9XG4gXG5AQCAtNTc4OCw3ICs1Nzg4LDcgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcbiBcdFx0aWYgKHN0cm5jbXAobG9jYWxfbmFtZSwgdGFyZ19uYW1lLCBsb2NhbF9lc3NlbnRfbGVuKSAhPSAwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcIkNPLVJFIHJlbG9jYXRpbmcgWyVkXSAlcyAlczogZm91bmQgdGFyZ2V0IGNhbmRpZGF0ZSBbJWRdICVzICVzIGluIFslc11cXG5cIixcbitcdFx0cHJfZGVidWcoXCJDTy1SRSByZWxvY2F0aW5nIFsldV0gJXMgJXM6IGZvdW5kIHRhcmdldCBjYW5kaWRhdGUgWyVkXSAlcyAlcyBpbiBbJXNdXFxuXCIsXG4gXHRcdFx0IGxvY2FsX2NhbmQtXHUwMDNlaWQsIGJ0Zl9raW5kX3N0cihsb2NhbF90KSxcbiBcdFx0XHQgbG9jYWxfbmFtZSwgaSwgYnRmX2tpbmRfc3RyKHQpLCB0YXJnX25hbWUsXG4gXHRcdFx0IHRhcmdfYnRmX25hbWUpO1xuQEAgLTU4NDgsNyArNTg0OCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4gXHRcdFx0XHRjb250aW51ZTsgLyogZXhwZWN0ZWQgcmFjZTogQlRGIHdhcyB1bmxvYWRlZCAqL1xuIFx0XHRcdGVyciA9IC1lcnJubztcbi1cdFx0XHRwcl93YXJuKFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMlZCBGRDogJXNcXG5cIiwgaWQsIGVycnN0cihlcnIpKTtcbitcdFx0XHRwcl93YXJuKFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBGRDogJXNcXG5cIiwgaWQsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXG5AQCAtNTg2MSw3ICs1ODYxLDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGVyciA9IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRlcnIgPSAtZXJybm87XG4tXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBnZXQgQlRGIG9iamVjdCAjJWQgaW5mbzogJXNcXG5cIiwgaWQsIGVycnN0cihlcnIpKTtcbitcdFx0XHRwcl93YXJuKFwiZmFpbGVkIHRvIGdldCBCVEYgb2JqZWN0ICMldSBpbmZvOiAlc1xcblwiLCBpZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5AQCAtNTg3NCw3ICs1ODc0LDcgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJ3MgQlRGIG9iamVjdCAjJWQ6ICVzXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBsb2FkIG1vZHVsZSBbJXNdJ3MgQlRGIG9iamVjdCAjJXU6ICVzXFxuXCIsXG4gXHRcdFx0XHRuYW1lLCBpZCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNjA2Nyw3ICs2MDY3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9yZXNvbHZlX3JlbG8oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIFx0ICAgICFoYXNobWFwX19maW5kKGNhbmRfY2FjaGUsIGxvY2FsX2lkLCBcdTAwMjZjYW5kcykpIHtcbiBcdFx0Y2FuZHMgPSBicGZfY29yZV9maW5kX2NhbmRzKHByb2ctXHUwMDNlb2JqLCBsb2NhbF9idGYsIGxvY2FsX2lkKTtcbiBcdFx0aWYgKElTX0VSUihjYW5kcykpIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJWRdICVzICVzOiAlbGRcXG5cIixcbitcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdGFyZ2V0IGNhbmRpZGF0ZSBzZWFyY2ggZmFpbGVkIGZvciBbJXVdICVzICVzOiAlbGRcXG5cIixcbiBcdFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGxvY2FsX2lkLCBidGZfa2luZF9zdHIobG9jYWxfdHlwZSksXG4gXHRcdFx0XHRsb2NhbF9uYW1lLCBQVFJfRVJSKGNhbmRzKSk7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIoY2FuZHMpO1xuQEAgLTYxMjcsNyArNjEyNyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRwcl9kZWJ1ZyhcInNlYyAnJXMnOiBmb3VuZCAlZCBDTy1SRSByZWxvY2F0aW9uc1xcblwiLCBzZWNfbmFtZSwgc2VjLVx1MDAzZW51bV9pbmZvKTtcbitcdFx0cHJfZGVidWcoXCJzZWMgJyVzJzogZm91bmQgJXUgQ08tUkUgcmVsb2NhdGlvbnNcXG5cIiwgc2VjX25hbWUsIHNlYy1cdTAwM2VudW1faW5mbyk7XG4gXG4gXHRcdGZvcl9lYWNoX2J0Zl9leHRfcmVjKHNlZywgc2VjLCBpLCByZWMpIHtcbiBcdFx0XHRpZiAocmVjLVx1MDAzZWluc25fb2ZmICUgQlBGX0lOU05fU1opXG5AQCAtNjE4MSw3ICs2MTgxLDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxuIFxuIFx0XHRcdGVyciA9IGJwZl9jb3JlX3BhdGNoX2luc24ocHJvZy1cdTAwM2VuYW1lLCBpbnNuLCBpbnNuX2lkeCwgcmVjLCBpLCBcdTAwMjZ0YXJnX3Jlcyk7XG4gXHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IGZhaWxlZCB0byBwYXRjaCBpbnNuICMldTogJXNcXG5cIixcbitcdFx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiBmYWlsZWQgdG8gcGF0Y2ggaW5zbiAjJWQ6ICVzXFxuXCIsXG4gXHRcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgaSwgaW5zbl9pZHgsIGVycnN0cihlcnIpKTtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9qdF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y1xuIFx0XHRnb3RvIGVycl9jbG9zZTtcbiBcdH1cbiBcdGlmIChzeW1fb2ZmICsganRfc2l6ZSBcdTAwM2Ugb2JqLVx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeikge1xuLVx0XHRwcl93YXJuKFwibWFwICcuanVtcHRhYmxlcyc6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6ZCwgdHJ5aW5nIHRvIGFjY2VzcyAlZFxcblwiLFxuK1x0XHRwcl93YXJuKFwibWFwICcuanVtcHRhYmxlcyc6IGp1bXB0YWJsZXNfZGF0YSBzaXplIGlzICV6dSwgdHJ5aW5nIHRvIGFjY2VzcyAldVxcblwiLFxuIFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3osIHN5bV9vZmYgKyBqdF9zaXplKTtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBlcnJfY2xvc2U7XG5AQCAtNjM4MSw3ICs2MzgxLDcgQEAgc3RhdGljIGludCBjcmVhdGVfanRfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgc3RydWNcbiBcdFx0ICovXG4gXHRcdGlmIChpbnNuX29mZiBcdTAwM2UgVUlOVDMyX01BWCkge1xuIFx0XHRcdHByX3dhcm4oXCJtYXAgJy5qdW1wdGFibGVzJzogaW52YWxpZCBqdW1wIHRhYmxlIHZhbHVlIDB4JWxseCBhdCBvZmZzZXQgJXVcXG5cIixcbi1cdFx0XHRcdChsb25nIGxvbmcpanRbaV0sIHN5bV9vZmYgKyBpICoganRfZW50cnlfc2l6ZSk7XG4rXHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKWp0W2ldLCBzeW1fb2ZmICsgaSAqIGp0X2VudHJ5X3NpemUpO1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBlcnJfY2xvc2U7XG4gXHRcdH1cbkBAIC02NTE3LDcgKzY1MTcsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiBcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiBiYWQgcmVsbyB0eXBlICVkXFxuXCIsXG4rXHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IGJhZCByZWxvIHR5cGUgJXVcXG5cIixcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgaSwgcmVsby1cdTAwM2V0eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTY3OTcsNyArNjc5Nyw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXG4gXHRcdFx0ICovXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChyZWxvIFx1MDAyNlx1MDAyNiByZWxvLVx1MDAzZXR5cGUgIT0gUkVMT19DQUxMIFx1MDAyNlx1MDAyNiByZWxvLVx1MDAzZXR5cGUgIT0gUkVMT19TVUJQUk9HX0FERFIpIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiB1bmV4cGVjdGVkIHJlbG8gZm9yIGluc24gIyV6dSwgdHlwZSAlZFxcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHVuZXhwZWN0ZWQgcmVsbyBmb3IgaW5zbiAjJXp1LCB0eXBlICV1XFxuXCIsXG4gXHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGluc25faWR4LCByZWxvLVx1MDAzZXR5cGUpO1xuIFx0XHRcdHJldHVybiAtTElCQlBGX0VSUk5PX19SRUxPQztcbiBcdFx0fVxuQEAgLTc1ODcsNyArNzU4Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fY29sbGVjdF9tYXBfcmVsb3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0fVxuIFx0XHRuYW1lID0gZWxmX3N5bV9zdHIob2JqLCBzeW0tXHUwMDNlc3RfbmFtZSkgPzogXCJcdTAwM2M/XHUwMDNlXCI7XG4gXG4tXHRcdHByX2RlYnVnKFwiLm1hcHMgcmVsbyAjJWQ6IGZvciAlemQgdmFsdWUgJXpkIHJlbC1cdTAwM2VyX29mZnNldCAlenUgbmFtZSAlZCAoJyVzJylcXG5cIixcbitcdFx0cHJfZGVidWcoXCIubWFwcyByZWxvICMlZDogZm9yICV6ZCB2YWx1ZSAlenUgcmVsLVx1MDAzZXJfb2Zmc2V0ICV6dSBuYW1lICV1ICgnJXMnKVxcblwiLFxuIFx0XHRcdCBpLCAoc3NpemVfdCkocmVsLVx1MDAzZXJfaW5mbyBcdTAwM2VcdTAwM2UgMzIpLCAoc2l6ZV90KXN5bS1cdTAwM2VzdF92YWx1ZSxcbiBcdFx0XHQgKHNpemVfdClyZWwtXHUwMDNlcl9vZmZzZXQsIHN5bS1cdTAwM2VzdF9uYW1lLCBuYW1lKTtcbiBcbkBAIC03Njc4LDcgKzc2NzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2NvbGxlY3RfbWFwX3JlbG9zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdH1cbiBcdFx0bWFwLVx1MDAzZWluaXRfc2xvdHNbbW9mZl0gPSBpc19tYXBfaW5fbWFwID8gKHZvaWQgKil0YXJnX21hcCA6ICh2b2lkICopdGFyZ19wcm9nO1xuIFxuLVx0XHRwcl9kZWJ1ZyhcIi5tYXBzIHJlbG8gIyVkOiBtYXAgJyVzJyBzbG90IFslZF0gcG9pbnRzIHRvICVzICclcydcXG5cIixcbitcdFx0cHJfZGVidWcoXCIubWFwcyByZWxvICMlZDogbWFwICclcycgc2xvdCBbJXVdIHBvaW50cyB0byAlcyAnJXMnXFxuXCIsXG4gXHRcdFx0IGksIG1hcC1cdTAwM2VuYW1lLCBtb2ZmLCB0eXBlLCBuYW1lKTtcbiBcdH1cbiBcbkBAIC04NzM4LDcgKzg3MzgsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3Jlc29sdmVfa3N5bV92YXJfYnRmX2lkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdGxvY2FsX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KG9iai1cdTAwM2VidGYsIGxvY2FsX3R5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIFx0XHR0YXJnX25hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdGFyZ190eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbiBcbi1cdFx0cHJfd2FybihcImV4dGVybiAodmFyIGtzeW0pICclcyc6IGluY29tcGF0aWJsZSB0eXBlcywgZXhwZWN0ZWQgWyVkXSAlcyAlcywgYnV0IGtlcm5lbCBoYXMgWyVkXSAlcyAlc1xcblwiLFxuK1x0XHRwcl93YXJuKFwiZXh0ZXJuICh2YXIga3N5bSkgJyVzJzogaW5jb21wYXRpYmxlIHR5cGVzLCBleHBlY3RlZCBbJXVdICVzICVzLCBidXQga2VybmVsIGhhcyBbJXVdICVzICVzXFxuXCIsXG4gXHRcdFx0ZXh0LVx1MDAzZW5hbWUsIGxvY2FsX3R5cGVfaWQsXG4gXHRcdFx0YnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLCBsb2NhbF9uYW1lLCB0YXJnX3R5cGVfaWQsXG4gXHRcdFx0YnRmX2tpbmRfc3RyKHRhcmdfdHlwZSksIHRhcmdfbmFtZSk7XG5AQCAtODkxNSw3ICs4OTE1LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZXNvbHZlX2V4dGVybnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRwcl9kZWJ1ZyhcImV4dGVybiAoa2NmZykgJyVzJzogc2V0IHRvIDB4JWxseFxcblwiLFxuLVx0XHRcdFx0IGV4dC1cdTAwM2VuYW1lLCAobG9uZyBsb25nKXZhbHVlKTtcbitcdFx0XHRcdCBleHQtXHUwMDNlbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cHJfd2FybihcImV4dGVybiAnJXMnOiB1bnJlY29nbml6ZWQgZXh0ZXJuIGtpbmRcXG5cIiwgZXh0LVx1MDAzZW5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEwNDk0LDcgKzEwNDk0LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19jb2xsZWN0X3N0X29wc19yZWxvcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIFx0XHRtb2ZmID0gcmVsLVx1MDAzZXJfb2Zmc2V0IC0gbWFwLVx1MDAzZXNlY19vZmZzZXQ7XG4gXHRcdHNoZHJfaWR4ID0gc3ltLVx1MDAzZXN0X3NobmR4O1xuIFx0XHRzdF9vcHMgPSBtYXAtXHUwMDNlc3Rfb3BzO1xuLVx0XHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgcmVsb2MgJXM6IGZvciAlbGxkIHZhbHVlICVsbGQgc2hkcl9pZHggJXUgcmVsLVx1MDAzZXJfb2Zmc2V0ICV6dSBtYXAtXHUwMDNlc2VjX29mZnNldCAlenUgbmFtZSAlZCAoXFwnJXNcXCcpXFxuXCIsXG4rXHRcdHByX2RlYnVnKFwic3RydWN0X29wcyByZWxvYyAlczogZm9yICVsbGQgdmFsdWUgJWxsZCBzaGRyX2lkeCAldSByZWwtXHUwMDNlcl9vZmZzZXQgJXp1IG1hcC1cdTAwM2VzZWNfb2Zmc2V0ICV6dSBuYW1lICV1IChcXCclc1xcJylcXG5cIixcbiBcdFx0XHQgbWFwLVx1MDAzZW5hbWUsXG4gXHRcdFx0IChsb25nIGxvbmcpKHJlbC1cdTAwM2VyX2luZm8gXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0XHQgKGxvbmcgbG9uZylzeW0tXHUwMDNlc3RfdmFsdWUsXG5AQCAtMTA2NDMsNyArMTA2NDMsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9maW5kX3Byb2dfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIF9fdTMyIGF0dGFjaF9wcm9nX2ZkLCBpbnQgdFxuIFx0bWVtc2V0KFx1MDAyNmluZm8sIDAsIGluZm9fbGVuKTtcbiBcdGVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGF0dGFjaF9wcm9nX2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdHByX3dhcm4oXCJmYWlsZWQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgZm9yIEZEICVkOiAlc1xcblwiLFxuK1x0XHRwcl93YXJuKFwiZmFpbGVkIGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkIGZvciBGRCAldTogJXNcXG5cIixcbiBcdFx0XHRhdHRhY2hfcHJvZ19mZCwgZXJyc3RyKGVycikpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTEwNjU2LDcgKzEwNjU2LDcgQEAgc3RhdGljIGludCBsaWJicGZfZmluZF9wcm9nX2J0Zl9pZChjb25zdCBjaGFyICpuYW1lLCBfX3UzMiBhdHRhY2hfcHJvZ19mZCwgaW50IHRcbiBcdGJ0ZiA9IGJ0Zl9sb2FkX2Zyb21fa2VybmVsKGluZm8uYnRmX2lkLCBOVUxMLCB0b2tlbl9mZCk7XG4gXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gZ2V0IEJURiAlZCBvZiB0aGUgcHJvZ3JhbTogJXNcXG5cIiwgaW5mby5idGZfaWQsIGVycnN0cihlcnIpKTtcbitcdFx0cHJfd2FybihcIkZhaWxlZCB0byBnZXQgQlRGICV1IG9mIHRoZSBwcm9ncmFtOiAlc1xcblwiLCBpbmZvLmJ0Zl9pZCwgZXJyc3RyKGVycikpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGVyciA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBuYW1lLCBCVEZfS0lORF9GVU5DKTtcbkBAIC0xMDczOCw3ICsxMDczOCw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKmF0dGFjXG4gXHRcdH1cbiBcdFx0ZXJyID0gbGliYnBmX2ZpbmRfcHJvZ19idGZfaWQoYXR0YWNoX25hbWUsIGF0dGFjaF9wcm9nX2ZkLCBwcm9nLVx1MDAzZW9iai1cdTAwM2V0b2tlbl9mZCk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJWQpIEJURiBJRCBmb3IgJyVzJzogJXNcXG5cIixcbitcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gZmluZCBCUEYgcHJvZ3JhbSAoRkQgJXUpIEJURiBJRCBmb3IgJyVzJzogJXNcXG5cIixcbiBcdFx0XHRcdHByb2ctXHUwMDNlbmFtZSwgYXR0YWNoX3Byb2dfZmQsIGF0dGFjaF9uYW1lLCBlcnJzdHIoZXJyKSk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9tYXBfb3AoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IGtleV9zeixcbiBcdFx0fVxuIFxuIFx0XHRpZiAodmFsdWVfc3ogIT0gbnVtX2NwdSAqIGVsZW1fc3opIHtcbi1cdFx0XHRwcl93YXJuKFwibWFwICclcyc6IHVuZXhwZWN0ZWQgdmFsdWUgc2l6ZSAlenUgcHJvdmlkZWQgZm9yIHBlci1DUFUgbWFwLCBleHBlY3RlZCAlZCAqICV6dSA9ICV6ZFxcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJtYXAgJyVzJzogdW5leHBlY3RlZCB2YWx1ZSBzaXplICV6dSBwcm92aWRlZCBmb3IgcGVyLUNQVSBtYXAsIGV4cGVjdGVkICVkICogJXp1ID0gJXp1XFxuXCIsXG4gXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgdmFsdWVfc3osIG51bV9jcHUsIGVsZW1fc3osIG51bV9jcHUgKiBlbGVtX3N6KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTExNzc0LDcgKzExNzc0LDcgQEAgc3RhdGljIHZvaWQgZ2VuX3Byb2JlX2xlZ2FjeV9ldmVudF9uYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeixcbiBcdHN0YXRpYyBpbnQgaW5kZXggPSAwO1xuIFx0aW50IGk7XG4gXG4tXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXCJsaWJicGZfJXVfJWRfJXNfMHglenhcIiwgZ2V0cGlkKCksXG4rXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXCJsaWJicGZfJWRfJWRfJXNfMHglenhcIiwgZ2V0cGlkKCksXG4gXHRcdCBfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZpbmRleCwgMSksIG5hbWUsIG9mZnNldCk7XG4gXG4gXHQvKiBzYW5pdGl6ZSBuYW1lIGluIHRoZSBwcm9iZSBuYW1lICovXG5AQCAtMTI5MjQsOCArMTI5MjQsOCBAQCBzdGF0aWMgbG9uZyBlbGZfZmluZF9mdW5jX29mZnNldF9mcm9tX2FyY2hpdmUoY29uc3QgY2hhciAqYXJjaGl2ZV9wYXRoLCBjb25zdCBjaFxuIFx0cmV0ID0gZWxmX2ZpbmRfZnVuY19vZmZzZXQoZWxmLCBmaWxlX25hbWUsIGZ1bmNfbmFtZSk7XG4gXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4gXHRcdHByX2RlYnVnKFwiZWxmOiBzeW1ib2wgYWRkcmVzcyBtYXRjaCBmb3IgJXMgb2YgJXMgaW4gJXM6IDB4JXggKyAweCVseCA9IDB4JWx4XFxuXCIsXG4tXHRcdFx0IGZ1bmNfbmFtZSwgZmlsZV9uYW1lLCBhcmNoaXZlX3BhdGgsIGVudHJ5LmRhdGFfb2Zmc2V0LCByZXQsXG4tXHRcdFx0IHJldCArIGVudHJ5LmRhdGFfb2Zmc2V0KTtcbitcdFx0XHQgZnVuY19uYW1lLCBmaWxlX25hbWUsIGFyY2hpdmVfcGF0aCwgZW50cnkuZGF0YV9vZmZzZXQsICh1bnNpZ25lZCBsb25nKXJldCxcbitcdFx0XHQgKHVuc2lnbmVkIGxvbmcpKHJldCArIGVudHJ5LmRhdGFfb2Zmc2V0KSk7XG4gXHRcdHJldCArPSBlbnRyeS5kYXRhX29mZnNldDtcbiBcdH1cbiBcdGVsZl9lbmQoZWxmKTtcbkBAIC0xNDU3MCw3ICsxNDU3MCw3IEBAIHBlcmZfYnVmZmVyX19wcm9jZXNzX3JlY29yZChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmUsIHZvaWQgKmN0eClcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwidW5rbm93biBwZXJmIHNhbXBsZSB0eXBlICVkXFxuXCIsIGUtXHUwMDNldHlwZSk7XG4rXHRcdHByX3dhcm4oXCJ1bmtub3duIHBlcmYgc2FtcGxlIHR5cGUgJXVcXG5cIiwgZS1cdTAwM2V0eXBlKTtcbiBcdFx0cmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0VSUk9SO1xuIFx0fVxuIFx0cmV0dXJuIExJQkJQRl9QRVJGX0VWRU5UX0NPTlQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9ubGF0dHIuYyBiL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcbmluZGV4IDA2NjYzZjllYTU4MWY5Li4wMDdmZTE3ZDE3YjQyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbmxhdHRyLmNcbkBAIC0xMjMsNyArMTIzLDcgQEAgaW50IGxpYmJwZl9ubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgaW50IG1heHR5cGUsIHN0cnVjdCBubGF0dHIgKmhlYWQsXG4gXG4gXHRcdGlmICh0Ylt0eXBlXSkge1xuIFx0XHRcdHByX3dhcm4oXCJBdHRyaWJ1dGUgb2YgdHlwZSAlI3ggZm91bmQgbXVsdGlwbGUgdGltZXMgaW4gbWVzc2FnZSwgXCJcbi1cdFx0XHRcdFwicHJldmlvdXMgYXR0cmlidXRlIGlzIGJlaW5nIGlnbm9yZWQuXFxuXCIsIHR5cGUpO1xuK1x0XHRcdFx0XCJwcmV2aW91cyBhdHRyaWJ1dGUgaXMgYmVpbmcgaWdub3JlZC5cXG5cIiwgKHVuc2lnbmVkKXR5cGUpO1xuIFx0XHR9XG4gXG4gXHRcdHRiW3R5cGVdID0gbmxhO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvcmVsb19jb3JlLmMgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5pbmRleCA2YWUzZjJhMTVhZDBjZi4uOGFkMjcxNTcyMWNmZDMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG4rKysgYi90b29scy9saWIvYnBmL3JlbG9fY29yZS5jXG5AQCAtMjE2LDcgKzIxNiw3IEBAIGludCBfX2JwZl9jb3JlX3R5cGVzX2FyZV9jb21wYXQoY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCxcbiBcdFx0Z290byByZWN1cjtcbiBcdH1cbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxcblwiLFxuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cXG5cIixcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdHlwZSksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMzg0LDcgKzM4NCw3IEBAIGludCBicGZfY29yZV9wYXJzZV9zcGVjKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdFx0cmV0dXJuIHN6O1xuIFx0XHRcdHNwZWMtXHUwMDNlYml0X29mZnNldCArPSBhY2Nlc3NfaWR4ICogc3ogKiA4O1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJWRdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gZm9yIFsldV0gJXMgKGF0IGlkeCAlZCkgY2FwdHVyZXMgdHlwZSBbJXVdIG9mIHVuZXhwZWN0ZWQga2luZCAlc1xcblwiLFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvLVx1MDAzZXR5cGVfaWQsIHNwZWNfc3RyLCBpLCBpZCwgYnRmX2tpbmRfc3RyKHQpKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTcyNSw3ICs3MjUsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfZmllbGRfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHQqdmFsID0gc3o7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4ndCBiZSBhcHBsaWVkIHRvIGFycmF5IGFjY2Vzc1xcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gJXUgYXQgaW5zbiAjJXUgY2FuJ3QgYmUgYXBwbGllZCB0byBhcnJheSBhY2Nlc3NcXG5cIixcbiBcdFx0XHRcdHByb2dfbmFtZSwgcmVsby1cdTAwM2VraW5kLCByZWxvLVx1MDAzZWluc25fb2ZmIC8gOCk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIGludCBicGZfY29yZV9jYWxjX2ZpZWxkX3JlbG8oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFx0XHR3aGlsZSAoYml0X29mZiArIGJpdF9zeiAtIGJ5dGVfb2ZmICogOCBcdTAwM2UgYnl0ZV9zeiAqIDgpIHtcbiBcdFx0XHRpZiAoYnl0ZV9zeiBcdTAwM2U9IDgpIHtcbiBcdFx0XHRcdC8qIGJpdGZpZWxkIGNhbid0IGJlIHJlYWQgd2l0aCA2NC1iaXQgcmVhZCAqL1xuLVx0XHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAlZCBhdCBpbnNuICMlZCBjYW4ndCBiZSBzYXRpc2ZpZWQgZm9yIGJpdGZpZWxkXFxuXCIsXG4rXHRcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICV1IGF0IGluc24gIyV1IGNhbid0IGJlIHNhdGlzZmllZCBmb3IgYml0ZmllbGRcXG5cIixcbiBcdFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvLVx1MDAzZWtpbmQsIHJlbG8tXHUwMDNlaW5zbl9vZmYgLyA4KTtcbiBcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gXHRcdFx0fVxuQEAgLTk3MSw3ICs5NzEsNyBAQCBzdGF0aWMgaW50IGJwZl9jb3JlX2NhbGNfcmVsbyhjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdGVyciA9IDA7XG4gXHR9IGVsc2UgaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkge1xuIFx0XHQvKiBFT1BOT1RTVVBQIG1lYW5zIHVua25vd24vdW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiAqL1xuLVx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5yZWNvZ25pemVkIENPLVJFIHJlbG9jYXRpb24gJXMgKCVkKSBhdCBpbnNuICMlZFxcblwiLFxuK1x0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5yZWNvZ25pemVkIENPLVJFIHJlbG9jYXRpb24gJXMgKCV1KSBhdCBpbnNuICMldVxcblwiLFxuIFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVx1MDAzZWtpbmQpLFxuIFx0XHRcdHJlbG8tXHUwMDNla2luZCwgcmVsby1cdTAwM2VpbnNuX29mZiAvIDgpO1xuIFx0fVxuQEAgLTEwNjcsNyArMTA2Nyw3IEBAIGludCBicGZfY29yZV9wYXRjaF9pbnNuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAocmVzLVx1MDAzZXZhbGlkYXRlIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSAhPSBvcmlnX3ZhbCkge1xuLVx0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJXUsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwiLFxuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiB1bmV4cGVjdGVkIGluc24gIyVkIChBTFUvQUxVNjQpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwiLFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCxcbiBcdFx0XHRcdGluc25faWR4LCBpbnNuLVx1MDAzZWltbSwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcmlnX3ZhbCxcbiBcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3ZhbCk7XG5AQCAtMTA4Myw3ICsxMDgzLDcgQEAgaW50IGJwZl9jb3JlX3BhdGNoX2luc24oY29uc3QgY2hhciAqcHJvZ19uYW1lLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRjYXNlIEJQRl9TVDpcbiBcdGNhc2UgQlBGX1NUWDpcbiBcdFx0aWYgKHJlcy1cdTAwM2V2YWxpZGF0ZSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgIT0gb3JpZ192YWwpIHtcbi1cdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiByZWxvICMlZDogdW5leHBlY3RlZCBpbnNuICMlZCAoTERYL1NUL1NUWCkgdmFsdWU6IGdvdCAldSwgZXhwICVsbHUgLVx1MDAzZSAlbGx1XFxuXCIsXG4rXHRcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IHVuZXhwZWN0ZWQgaW5zbiAjJWQgKExEWC9TVC9TVFgpIHZhbHVlOiBnb3QgJWQsIGV4cCAlbGx1IC1cdTAwM2UgJWxsdVxcblwiLFxuIFx0XHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXHUwMDNlb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKW9yaWdfdmFsLFxuIFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfdmFsKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMTU5LDcgKzExNTksNyBAQCBpbnQgYnBmX2NvcmVfcGF0Y2hfaW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGRlZmF1bHQ6XG4gXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiB0cnlpbmcgdG8gcmVsb2NhdGUgdW5yZWNvZ25pemVkIGluc24gIyVkLCBjb2RlOjB4JXgsIHNyYzoweCV4LCBkc3Q6MHgleCwgb2ZmOjB4JXgsIGltbToweCV4XFxuXCIsXG4gXHRcdFx0cHJvZ19uYW1lLCByZWxvX2lkeCwgaW5zbl9pZHgsIGluc24tXHUwMDNlY29kZSxcbi1cdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0XHQodW5zaWduZWQpaW5zbi1cdTAwM2VzcmNfcmVnLCAodW5zaWduZWQpaW5zbi1cdTAwM2Vkc3RfcmVnLCAodW5zaWduZWQpaW5zbi1cdTAwM2VvZmYsICh1bnNpZ25lZClpbnNuLVx1MDAzZWltbSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTEzMjMsNyArMTMyMyw3IEBAIGludCBicGZfY29yZV9jYWxjX3JlbG9faW5zbihjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdGNvbnN0IGNoYXIgKnNwZWNfc3RyO1xuIFxuIFx0XHRzcGVjX3N0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQobG9jYWxfYnRmLCByZWxvLVx1MDAzZWFjY2Vzc19zdHJfb2ZmKTtcbi1cdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyVkXSAlcyAlcyArICVzIGZhaWxlZDogJWRcXG5cIixcbitcdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IHBhcnNpbmcgWyV1XSAlcyAlcyArICVzIGZhaWxlZDogJWRcXG5cIixcbiBcdFx0XHRwcm9nX25hbWUsIHJlbG9faWR4LCBsb2NhbF9pZCwgYnRmX2tpbmRfc3RyKGxvY2FsX3R5cGUpLFxuIFx0XHRcdHN0cl9pc19lbXB0eShsb2NhbF9uYW1lKSA/IFwiXHUwMDNjYW5vblx1MDAzZVwiIDogbG9jYWxfbmFtZSxcbiBcdFx0XHRzcGVjX3N0ciA/OiBcIlx1MDAzYz9cdTAwM2VcIiwgZXJyKTtcbkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCBpbnQgYnBmX2NvcmVfY2FsY19yZWxvX2luc24oY29uc3QgY2hhciAqcHJvZ19uYW1lLFxuIFxuIFx0LyogbGliYnBmIGRvZXNuJ3Qgc3VwcG9ydCBjYW5kaWRhdGUgc2VhcmNoIGZvciBhbm9ueW1vdXMgdHlwZXMgKi9cbiBcdGlmIChzdHJfaXNfZW1wdHkobG9jYWxfbmFtZSkpIHtcbi1cdFx0cHJfd2FybihcInByb2cgJyVzJzogcmVsbyAjJWQ6IFx1MDAzYyVzXHUwMDNlICglZCkgcmVsb2NhdGlvbiBkb2Vzbid0IHN1cHBvcnQgYW5vbnltb3VzIHR5cGVzXFxuXCIsXG4rXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IHJlbG8gIyVkOiBcdTAwM2Mlc1x1MDAzZSAoJXUpIHJlbG9jYXRpb24gZG9lc24ndCBzdXBwb3J0IGFub255bW91cyB0eXBlc1xcblwiLFxuIFx0XHRcdHByb2dfbmFtZSwgcmVsb19pZHgsIGNvcmVfcmVsb19raW5kX3N0cihyZWxvLVx1MDAzZWtpbmQpLCByZWxvLVx1MDAzZWtpbmQpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTY5Nyw3ICsxNjk3LDcgQEAgaW50IF9fYnBmX2NvcmVfdHlwZXNfbWF0Y2goY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCwgY29uc3Qgc3RcbiBcdFx0Z290byByZWN1cjtcbiBcdH1cbiBcdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCJ1bmV4cGVjdGVkIGtpbmQgJXMgcmVsb2NhdGVkLCBsb2NhbCBbJWRdLCB0YXJnZXQgWyVkXVxcblwiLFxuK1x0XHRwcl93YXJuKFwidW5leHBlY3RlZCBraW5kICVzIHJlbG9jYXRlZCwgbG9jYWwgWyV1XSwgdGFyZ2V0IFsldV1cXG5cIixcbiBcdFx0XHRidGZfa2luZF9zdHIobG9jYWxfdCksIGxvY2FsX2lkLCB0YXJnX2lkKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi91c2R0LmMgYi90b29scy9saWIvYnBmL3VzZHQuY1xuaW5kZXggNTdmYjgyYmI4MWI1ODguLmRiOTQzMmFkYjk2N2I2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi91c2R0LmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvdXNkdC5jXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBpbnQgc2FuaXR5X2NoZWNrX3VzZHRfZWxmKEVsZiAqZWxmLCBjb25zdCBjaGFyICpwYXRoKVxuIFx0aW50IGVuZGlhbm5lc3M7XG4gXG4gXHRpZiAoZWxmX2tpbmQoZWxmKSAhPSBFTEZfS19FTEYpIHtcbi1cdFx0cHJfd2FybihcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAlZCBmb3IgJyVzJ1xcblwiLCBlbGZfa2luZChlbGYpLCBwYXRoKTtcbitcdFx0cHJfd2FybihcInVzZHQ6IHVucmVjb2duaXplZCBFTEYga2luZCAldSBmb3IgJyVzJ1xcblwiLCBlbGZfa2luZChlbGYpLCBwYXRoKTtcbiBcdFx0cmV0dXJuIC1FQkFERjtcbiBcdH1cbiBcbkBAIC00MzgsOCArNDM4LDkgQEAgc3RhdGljIGludCBwYXJzZV9lbGZfc2VncyhFbGYgKmVsZiwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGVsZl9zZWcgKipzZWdzLCBzaXpcbiBcdFx0fVxuIFxuIFx0XHRwcl9kZWJ1ZyhcInVzZHQ6IGRpc2NvdmVyZWQgUEhEUiAjJWQgaW4gJyVzJzogdmFkZHIgMHglbHggbWVtc3ogMHglbHggb2Zmc2V0IDB4JWx4IHR5cGUgMHglbHggZmxhZ3MgMHglbHhcXG5cIixcbi1cdFx0XHQgaSwgcGF0aCwgKGxvbmcpcGhkci5wX3ZhZGRyLCAobG9uZylwaGRyLnBfbWVtc3osIChsb25nKXBoZHIucF9vZmZzZXQsXG4tXHRcdFx0IChsb25nKXBoZHIucF90eXBlLCAobG9uZylwaGRyLnBfZmxhZ3MpO1xuK1x0XHRcdCBpLCBwYXRoLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZylwaGRyLnBfdmFkZHIsICh1bnNpZ25lZCBsb25nKXBoZHIucF9tZW1zeiwgKHVuc2lnbmVkIGxvbmcpcGhkci5wX29mZnNldCxcbitcdFx0XHQgKHVuc2lnbmVkIGxvbmcpcGhkci5wX3R5cGUsICh1bnNpZ25lZCBsb25nKXBoZHIucF9mbGFncyk7XG4gXHRcdGlmIChwaGRyLnBfdHlwZSAhPSBQVF9MT0FEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTcxOSwxNCArNzIwLDE0IEBAIHN0YXRpYyBpbnQgY29sbGVjdF91c2R0X3RhcmdldHMoc3RydWN0IHVzZHRfbWFuYWdlciAqbWFuLCBzdHJ1Y3QgZWxmX2ZkICplbGZfZmQsXG4gXHRcdGlmICghc2VnKSB7XG4gXHRcdFx0ZXJyID0gLUVTUkNIO1xuIFx0XHRcdHByX3dhcm4oXCJ1c2R0OiBmYWlsZWQgdG8gZmluZCBFTEYgcHJvZ3JhbSBzZWdtZW50IGZvciAnJXM6JXMnIGluICclcycgYXQgSVAgMHglbHhcXG5cIixcbi1cdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9hYnNfaXApO1xuK1x0XHRcdFx0dXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBwYXRoLCAodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdGlmICghc2VnLVx1MDAzZWlzX2V4ZWMpIHtcbiBcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0cHJfd2FybihcInVzZHQ6IG1hdGNoZWQgRUxGIGJpbmFyeSAnJXMnIHNlZ21lbnQgWzB4JWx4LCAweCVseCkgZm9yICclczolcycgYXQgSVAgMHglbHggaXMgbm90IGV4ZWN1dGFibGVcXG5cIixcbi1cdFx0XHRcdHBhdGgsIHNlZy1cdTAwM2VzdGFydCwgc2VnLVx1MDAzZWVuZCwgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLFxuLVx0XHRcdFx0dXNkdF9hYnNfaXApO1xuK1x0XHRcdFx0cGF0aCwgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlZW5kLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4rXHRcdFx0XHQodW5zaWduZWQgbG9uZyl1c2R0X2Fic19pcCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdC8qIHRyYW5zbGF0ZSBmcm9tIHZpcnR1YWwgYWRkcmVzcyB0byBmaWxlIG9mZnNldCAqL1xuQEAgLTc2Niw3ICs3NjcsNyBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRcdGlmICghc2VnKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogZmFpbGVkIHRvIGZpbmQgc2hhcmVkIGxpYiBtZW1vcnkgc2VnbWVudCBmb3IgJyVzOiVzJyBpbiAnJXMnIGF0IHJlbGF0aXZlIElQIDB4JWx4XFxuXCIsXG4tXHRcdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgdXNkdF9yZWxfaXApO1xuK1x0XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKXVzZHRfcmVsX2lwKTtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4gXG5AQCAtNzc1LDggKzc3NiwxMCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFxuIFx0XHRwcl9kZWJ1ZyhcInVzZHQ6IHByb2JlIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgYWJzX2lwIDB4JWx4IHJlbF9pcCAweCVseCkgYXJncyAnJXMnIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseCkgYXQgb2Zmc2V0IDB4JWx4XFxuXCIsXG4gXHRcdFx0IHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgZWhkci5lX3R5cGUgPT0gRVRfRVhFQyA/IFwiZXhlY1wiIDogXCJsaWIgXCIsIHBhdGgsXG4tXHRcdFx0IG5vdGUubG9jX2FkZHIsIG5vdGUuYmFzZV9hZGRyLCB1c2R0X2Fic19pcCwgdXNkdF9yZWxfaXAsIG5vdGUuYXJncyxcbi1cdFx0XHQgc2VnID8gc2VnLVx1MDAzZXN0YXJ0IDogMCwgc2VnID8gc2VnLVx1MDAzZWVuZCA6IDAsIHNlZyA/IHNlZy1cdTAwM2VvZmZzZXQgOiAwKTtcbitcdFx0XHQgKHVuc2lnbmVkIGxvbmcpbm90ZS5sb2NfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKXVzZHRfYWJzX2lwLCAodW5zaWduZWQgbG9uZyl1c2R0X3JlbF9pcCwgbm90ZS5hcmdzLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZykoc2VnID8gc2VnLVx1MDAzZXN0YXJ0IDogMCksICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctXHUwMDNlZW5kIDogMCksXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKShzZWcgPyBzZWctXHUwMDNlb2Zmc2V0IDogMCkpO1xuIFxuIFx0XHQvKiBBZGp1c3Qgc2VtYXBob3JlIGFkZHJlc3MgdG8gYmUgYSBmaWxlIG9mZnNldCAqL1xuIFx0XHRpZiAobm90ZS5zZW1hX2FkZHIpIHtcbkBAIC03OTEsMTQgKzc5NCwxNCBAQCBzdGF0aWMgaW50IGNvbGxlY3RfdXNkdF90YXJnZXRzKHN0cnVjdCB1c2R0X21hbmFnZXIgKm1hbiwgc3RydWN0IGVsZl9mZCAqZWxmX2ZkLFxuIFx0XHRcdGlmICghc2VnKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogZmFpbGVkIHRvIGZpbmQgRUxGIGxvYWRhYmxlIHNlZ21lbnQgd2l0aCBzZW1hcGhvcmUgb2YgJyVzOiVzJyBpbiAnJXMnIGF0IDB4JWx4XFxuXCIsXG4tXHRcdFx0XHRcdHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSwgcGF0aCwgbm90ZS5zZW1hX2FkZHIpO1xuK1x0XHRcdFx0XHR1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgsICh1bnNpZ25lZCBsb25nKW5vdGUuc2VtYV9hZGRyKTtcbiBcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHNlZy1cdTAwM2Vpc19leGVjKSB7XG4gXHRcdFx0XHRlcnIgPSAtRVNSQ0g7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogbWF0Y2hlZCBFTEYgYmluYXJ5ICclcycgc2VnbWVudCBbMHglbHgsIDB4JWx4XSBmb3Igc2VtYXBob3JlIG9mICclczolcycgYXQgMHglbHggaXMgZXhlY3V0YWJsZVxcblwiLFxuLVx0XHRcdFx0XHRwYXRoLCBzZWctXHUwMDNlc3RhcnQsIHNlZy1cdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbi1cdFx0XHRcdFx0bm90ZS5zZW1hX2FkZHIpO1xuK1x0XHRcdFx0XHRwYXRoLCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlc3RhcnQsICh1bnNpZ25lZCBsb25nKXNlZy1cdTAwM2VlbmQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpbm90ZS5zZW1hX2FkZHIpO1xuIFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHRcdH1cbiBcbkBAIC04MDYsOCArODA5LDggQEAgc3RhdGljIGludCBjb2xsZWN0X3VzZHRfdGFyZ2V0cyhzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIHN0cnVjdCBlbGZfZmQgKmVsZl9mZCxcbiBcbiBcdFx0XHRwcl9kZWJ1ZyhcInVzZHQ6IHNlbWEgIGZvciAnJXM6JXMnIGluICVzICclcyc6IGFkZHIgMHglbHggYmFzZSAweCVseCAocmVzb2x2ZWQgMHglbHgpIGluIHNlZ21lbnQgWzB4JWx4LCAweCVseF0gYXQgb2Zmc2V0IDB4JWx4XFxuXCIsXG4gXHRcdFx0XHQgdXNkdF9wcm92aWRlciwgdXNkdF9uYW1lLCBlaGRyLmVfdHlwZSA9PSBFVF9FWEVDID8gXCJleGVjXCIgOiBcImxpYiBcIixcbi1cdFx0XHRcdCBwYXRoLCBub3RlLnNlbWFfYWRkciwgbm90ZS5iYXNlX2FkZHIsIHVzZHRfc2VtYV9vZmYsXG4tXHRcdFx0XHQgc2VnLVx1MDAzZXN0YXJ0LCBzZWctXHUwMDNlZW5kLCBzZWctXHUwMDNlb2Zmc2V0KTtcbitcdFx0XHRcdCBwYXRoLCAodW5zaWduZWQgbG9uZylub3RlLnNlbWFfYWRkciwgKHVuc2lnbmVkIGxvbmcpbm90ZS5iYXNlX2FkZHIsICh1bnNpZ25lZCBsb25nKXVzZHRfc2VtYV9vZmYsXG4rXHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpc2VnLVx1MDAzZXN0YXJ0LCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlZW5kLCAodW5zaWduZWQgbG9uZylzZWctXHUwMDNlb2Zmc2V0KTtcbiBcdFx0fVxuIFxuIFx0XHQvKiBSZWNvcmQgYWRqdXN0ZWQgYWRkcmVzc2VzIGFuZCBvZmZzZXRzIGFuZCBwYXJzZSBVU0RUIHNwZWMgKi9cbkBAIC0xMTE3LDcgKzExMjAsNyBAQCBzdHJ1Y3QgYnBmX2xpbmsgKnVzZHRfbWFuYWdlcl9hdHRhY2hfdXNkdChzdHJ1Y3QgdXNkdF9tYW5hZ2VyICptYW4sIGNvbnN0IHN0cnVjdFxuIFx0XHRcdFx0ICAgICAgICBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsIHBhdGgpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRwcl93YXJuKFwidXNkdDogZmFpbGVkIHRvIG1hcCBJUCAweCVseCB0byBzcGVjICMlZCBmb3IgJyVzOiVzJyBpbiAnJXMnOiAlc1xcblwiLFxuLVx0XHRcdFx0XHR0YXJnZXQtXHUwMDNlYWJzX2lwLCBzcGVjX2lkLCB1c2R0X3Byb3ZpZGVyLCB1c2R0X25hbWUsXG4rXHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKXRhcmdldC1cdTAwM2VhYnNfaXAsIHNwZWNfaWQsIHVzZHRfcHJvdmlkZXIsIHVzZHRfbmFtZSxcbiBcdFx0XHRcdFx0cGF0aCwgZXJyc3RyKGVycikpO1xuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMDo1NjoxNy41NjY2ODk3ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDg1MzAzMzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIGB0b29scy9saWIvYnBmL2AgZGlyZWN0b3J5LCBhbmQgaXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwIGVmZm9ydC4gUHJpbWFyaWx5LCBpdCdzIGFib3V0IHR3ZWFraW5nIHRob3NlIGBwcl93YXJuYCBhbmQgYHByX2RlYnVnYCBjYWxscywgY2hhbmdpbmcgZm9ybWF0IHNwZWNpZmllcnMg4oCTIHRoaW5ncyBsaWtlIGAlZGAgdG8gYCV1YCwgYCV6ZGAgdG8gYCV6dWAsIGFuZCBhZGRpbmcgY2FzdHMsIG1vc3RseSBgKHVuc2lnbmVkIGxvbmcpYC4gVGhpcyBpcyBhbGwgcHJldHR5IGNvc21ldGljLCByaWdodD8gSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGFjdHVhbCAqbG9naWMqIG9mIHRoZSBCUEYgY29kZSBvciBrZXJuZWwgaW50ZXJhY3Rpb25zIGlzIGJlaW5nIGNoYW5nZWQuXG5cbkkgd2VudCBsaW5lLWJ5LWxpbmUgaW4gdGhlIGRpZmYuIERvdWJsZSBjaGVja2VkIGV2ZXJ5dGhpbmcgaW4gYGJ0Zi5jYCwgYGJ0Zl9kdW1wLmNgLCBgYnRmX3JlbG9jYXRlLmNgLCBgZWxmLmNgLCBgZ2VuX2xvYWRlci5jYCwgYGxpYmJwZi5jYCwgYG5sYXR0ci5jYCwgYHJlbG9fY29yZS5jYCwgYW5kIGB1c2R0LmNgLiBFdmVyeXRoaW5nIGlzIHJlYWxseSBqdXN0IGFib3V0IGZvcm1hdHRpbmcgdGhlIG91dHB1dCBvZiB3YXJuaW5ncyBhbmQgZGVidWcgbWVzc2FnZXMsIG1ha2luZyBzdXJlIHRoZSByaWdodCBkYXRhIHR5cGVzIGFyZSBiZWluZyBwcmludGVkIGNvcnJlY3RseS4gSSB3YXMgYSBsaXR0bGUgd29ycmllZCBhYm91dCB0aGUgYHNzY2FuZmAgY2hhbmdlIGluIGBsaWJicGYuY2AsIGJ1dCBpdCB0dXJucyBvdXQgdGhlIG9yaWdpbmFsIGNvZGUgd2l0aCBgJWlgIHdhcyBhbHJlYWR5IHBhcnNpbmcgdGhlIGhleCB2YWx1ZXMgdXNlZCBmb3IgbWFwIGZsYWdzIGZyb20gYGZkaW5mb2AgY29ycmVjdGx5LiBXaGlsZSBhIGNoYW5nZSwgaXQgd2Fzbid0IGEgZnVuY3Rpb25hbCBvbmUgaW4gdGVybXMgb2YgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yLlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhpcyBpcyBhbGwgaGFwcGVuaW5nIGluIHVzZXItc3BhY2UgdG9vbHMsIHdoaWNoIGFyZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIGZ1enppbmcgdGhlIGtlcm5lbCBpdHNlbGYuIFN5emthbGxlciwgd2hpY2ggaXMgbWVudGlvbmVkIGluIHRoZSBpbnN0cnVjdGlvbnMsIGlzIGRlc2lnbmVkIHRvIGZ1enoga2VybmVsIGNvZGUsIGFuZCBpdCdzIG5vdCB0aGUgcmlnaHQgdG9vbCBmb3IgdXNlci1zcGFjZSBjaGFuZ2VzLiBJdCdzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbGV2ZWwgb2YgdGVzdGluZy5cblxuU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IGtlcm5lbC1sZXZlbCBmdW5jdGlvbmFsIGNoYW5nZXMgb3IgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIHdhcnJhbnQga2VybmVsIGZ1enppbmcuIEl0J3MgcmVhbGx5IGp1c3QgYSBmb3JtYXR0aW5nIGNsZWFudXAgaW4gdGhlIHVzZXItc3BhY2UgQlBGIHRvb2xzLiBUaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IGluIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5MSwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMDo1NjozOC40MTk3MjYxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBmb3JtYXQgc3BlY2lmaWVycyBpbiBsb2dnaW5nIGZ1bmN0aW9ucyAocHJfd2FybiwgcHJfZGVidWcpIGFuZCBvbmUgc3NjYW5mIGNhbGwgaW4gdXNlci1zcGFjZSBsaWJicGYgY29kZSAodG9vbHMvbGliL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgZm9ybWF0IHNwZWNpZmllcnMgaW4gbG9nZ2luZyBmdW5jdGlvbnMgKHByX3dhcm4sIHByX2RlYnVnKSBhbmQgb25lIHNzY2FuZiBjYWxsIGluIHVzZXItc3BhY2UgbGliYnBmIGNvZGUgKHRvb2xzL2xpYi9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowftkx6[1] Phase: Running StartedAt: 2026-06-26 10:57:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftkx6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-26 10:57:26 +0000 UTC FinishedAt: 2026-06-26 10:57:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}